@sage-protocol/openclaw-sage 0.1.5 → 0.1.8

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.
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ typecheck-and-unit-test:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+
15
+ - uses: actions/setup-node@v4
16
+ with:
17
+ node-version: "22"
18
+
19
+ - name: Install dependencies
20
+ run: npm install
21
+
22
+ - name: TypeScript typecheck
23
+ run: npm run typecheck
24
+
25
+ - name: Run unit tests (no sage binary required)
26
+ run: node --import tsx src/mcp-bridge.test.ts
27
+ env:
28
+ # Unit tests that don't need the sage binary will pass;
29
+ # integration tests that need it will be skipped on CI
30
+ NODE_OPTIONS: "--test-only"
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "0.1.5"
2
+ ".": "0.1.8"
3
3
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.8](https://github.com/sage-protocol/openclaw-sage/compare/openclaw-sage-v0.1.7...openclaw-sage-v0.1.8) (2026-03-16)
4
+
5
+
6
+ ### Features
7
+
8
+ * cleanup README.md ([e508dc6](https://github.com/sage-protocol/openclaw-sage/commit/e508dc6e648d3e24c5c7d34151f1f8bf9c977555))
9
+ * context-aware skill suggestions during heartbeat ([0777ef1](https://github.com/sage-protocol/openclaw-sage/commit/0777ef11782def8d029482c1b99ea032aa3c0ae0))
10
+ * migrate OpenClaw plugin to code mode tools ([8da4f5d](https://github.com/sage-protocol/openclaw-sage/commit/8da4f5d922b8ad0582427cacd109f76fc29d846c))
11
+ * moving hub tools out of mcp feat ([3176bf8](https://github.com/sage-protocol/openclaw-sage/commit/3176bf82848289dacf9011afbcb37849686959d7))
12
+ * update mcp to work with new codemode ([ab73b72](https://github.com/sage-protocol/openclaw-sage/commit/ab73b7288a1c56961191abe269a9bf4fac59f2a0))
13
+ * updating readme ([2749549](https://github.com/sage-protocol/openclaw-sage/commit/2749549fa59c2a1d67b8205cda4944f7ea8c0970))
14
+ * wire RLM capture hooks + fix double-prefix bug ([7e55890](https://github.com/sage-protocol/openclaw-sage/commit/7e558902a678e0ceb34320c5625b6ad94d0de919))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **docs:** correct sage suggest analyze → sage suggest optimize in SOUL.md ([4e29e38](https://github.com/sage-protocol/openclaw-sage/commit/4e29e38f3080896e269c7cf97bebd90ffc91f2c4))
20
+ * remove dead schema conversion code and update docs for code mode ([b3867fe](https://github.com/sage-protocol/openclaw-sage/commit/b3867fe20f5010a0ff96005305d6b38f2fe957b6))
21
+
22
+ ## [0.1.7](https://github.com/sage-protocol/openclaw-sage/compare/openclaw-sage-v0.1.6...openclaw-sage-v0.1.7) (2026-02-14)
23
+
24
+
25
+ ### Features
26
+
27
+ * read locally-synced soul document at agent start ([edbfb0d](https://github.com/sage-protocol/openclaw-sage/commit/edbfb0ddd84fc4cac4a6a59d422b70aff61b1cb1))
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * align OpenClaw plugin with current sage CLI and harden tests ([3b8f92f](https://github.com/sage-protocol/openclaw-sage/commit/3b8f92f45f8993c440259921993d9b77978bba19))
33
+
34
+ ## [0.1.6](https://github.com/sage-protocol/openclaw-sage/compare/openclaw-sage-v0.1.5...openclaw-sage-v0.1.6) (2026-02-05)
35
+
36
+
37
+ ### Features
38
+
39
+ * P0-P2 fixes — version sync, schema conversion, env passthrough, status tool, error enrichment ([5e2d6f4](https://github.com/sage-protocol/openclaw-sage/commit/5e2d6f4ab468d53cf9bf36d504cde1b32ed801f3))
40
+
3
41
  ## [0.1.5](https://github.com/sage-protocol/openclaw-sage/compare/openclaw-sage-v0.1.4...openclaw-sage-v0.1.5) (2026-02-04)
4
42
 
5
43
 
package/README.md CHANGED
@@ -1,13 +1,14 @@
1
1
  # Sage Plugin (OpenClaw)
2
2
 
3
- MCP bridge plugin that exposes all Sage Protocol tools inside OpenClaw. Spawns the sage MCP server as a child process and translates JSON-RPC calls into registered OpenClaw tools.
3
+ MCP bridge plugin that exposes Sage Protocol tools inside OpenClaw via Code Mode. It spawns the Sage MCP server as a child process and registers 3 fixed plugin tools; only external MCP server lifecycle is managed outside the plugin.
4
4
 
5
5
  ## What It Does
6
6
 
7
- - **MCP Tool Bridge** - Spawns `sage mcp start` and translates JSON-RPC tool calls into native OpenClaw tools
8
- - **Dynamic Registration** - Discovers available tools at startup and registers them with typed schemas
9
- - **RLM Capture** - Records prompt/response pairs for Sage's RLM feedback loop
7
+ - **Code Mode Gateway** - Spawns `sage mcp start` and routes plugin calls through `sage_search`/`sage_execute`/`sage_status`
8
+ - **Auto-Context Injection** - Injects Sage tool context and skill suggestions at agent start
9
+ - **Injection Guard** - Optional prompt-injection scanning on outgoing `sage_execute` mutations
10
10
  - **Crash Recovery** - Automatically restarts the MCP subprocess on unexpected exits
11
+ - **External Servers** - Sage internal tools are available immediately; only external MCP tools require starting servers first via the Sage app, CLI, or raw MCP `hub_*` tools
11
12
 
12
13
  ## Install
13
14
 
@@ -15,14 +16,82 @@ MCP bridge plugin that exposes all Sage Protocol tools inside OpenClaw. Spawns t
15
16
  openclaw plugins install @sage-protocol/openclaw-sage
16
17
  ```
17
18
 
18
- ## Configuration
19
+ After install, **restart the Gateway** for the plugin to take effect.
19
20
 
20
- The plugin auto-detects the `sage` binary from PATH. To override:
21
+ ### Verify
21
22
 
22
- ```json
23
- {
24
- "sageBinary": "/path/to/sage"
25
- }
23
+ ```bash
24
+ openclaw plugins list
25
+ openclaw plugins info openclaw-sage
26
+ ```
27
+
28
+ ### Update
29
+
30
+ ```bash
31
+ openclaw plugins update openclaw-sage
32
+ # or update all plugins at once
33
+ openclaw plugins update --all
34
+ ```
35
+
36
+ ### Login With Code (Privy Device-Code)
37
+
38
+ If browser OAuth is unreliable, use:
39
+
40
+ ```bash
41
+ sage wallet connect privy --device-code
42
+ ```
43
+
44
+ The CLI prints:
45
+
46
+ - `verification_uri_complete` (open this first)
47
+ - `verification_uri` + `user_code` (manual fallback)
48
+
49
+ Verify connection:
50
+
51
+ ```bash
52
+ sage wallet current
53
+ sage daemon status
54
+ ```
55
+
56
+ Refresh stale sessions:
57
+
58
+ ```bash
59
+ sage wallet connect privy --force --device-code
60
+ ```
61
+
62
+ ### Discovery Workflow (Avoid DAO/CID Dead-Ends)
63
+
64
+ Before asking users for DAO/CID, run:
65
+
66
+ ```bash
67
+ sage governance dao discover --limit 50
68
+ sage library discover
69
+ sage search "<query>" --search-type skills --scope both --limit 20
70
+ sage search "<query>" --search-type libraries --scope remote --limit 20
71
+ ```
72
+
73
+ If command surface differs across machines, verify with `sage --help` / `sage skill --help` and adapt.
74
+
75
+ ### High-Value CLI Recipes
76
+
77
+ Use these when users want direct Rust CLI commands:
78
+
79
+ ```bash
80
+ # Library management
81
+ sage library create <name>
82
+ sage library skill add <path> -l <library>
83
+ sage library prompt add <prompt-name> -l <library> --file <path>
84
+ sage library push <library>
85
+ sage library promote <library> --dao 0x... --collection default
86
+
87
+ # DAO creation
88
+ sage governance dao create --name "My DAO" --description "..." --governance personal
89
+ sage governance dao create --name "Team DAO" --description "..." --governance team --operator 0x...
90
+ sage governance dao create --name "Community DAO" --description "..." --governance community --burn 1500
91
+
92
+ # Bounty creation
93
+ sage bounties create --title "Task" --description "..." --reward 100 --deadline 7d --subdao 0x...
94
+ sage bounties create --mode direct --assignee 0x... --title "Task" --description "..." --reward 100 --deadline 7d --subdao 0x...
26
95
  ```
27
96
 
28
97
  ### Auto-Inject / Auto-Suggest
@@ -41,9 +110,22 @@ Available config fields:
41
110
  }
42
111
  ```
43
112
 
113
+ ### Soul Stream Context (Optional)
114
+
115
+ You can prepend a locally synced DAO soul stream document to each run by setting:
116
+
117
+ ```json
118
+ {
119
+ "soulStreamDao": "0xabc123...",
120
+ "soulStreamLibraryId": "soul"
121
+ }
122
+ ```
123
+
124
+ This reads `~/.local/share/sage/souls/<subdao>-<libraryId>.md` when present.
125
+
44
126
  ### Injection Guard (Opt-In)
45
127
 
46
- This plugin can optionally scan the agent prompt and fetched prompt content (e.g. from `sage_get_prompt`) for common prompt-injection / jailbreak patterns using Sage's built-in deterministic scanner.
128
+ This plugin can optionally scan outgoing `sage_execute` mutation params for common prompt-injection / jailbreak patterns using Sage's built-in deterministic scanner. The Rust layer handles incoming content scanning server-side.
47
129
 
48
130
  By default this is **off**.
49
131
 
@@ -52,7 +134,6 @@ By default this is **off**.
52
134
  "injectionGuardEnabled": true,
53
135
  "injectionGuardMode": "warn",
54
136
  "injectionGuardScanAgentPrompt": true,
55
- "injectionGuardScanGetPrompt": true,
56
137
  "injectionGuardUsePromptGuard": false,
57
138
  "injectionGuardMaxChars": 32768,
58
139
  "injectionGuardIncludeEvidence": false
@@ -60,30 +141,55 @@ By default this is **off**.
60
141
  ```
61
142
 
62
143
  Notes:
63
- - `injectionGuardMode=block` blocks `sage_get_prompt` results that are flagged, but cannot reliably abort the overall agent run (it injects a warning at start instead).
144
+
145
+ - `injectionGuardMode=block` blocks `sage_execute` calls whose params are flagged.
146
+ - `injectionGuardScanAgentPrompt` scans the agent's initial prompt at start.
64
147
  - `injectionGuardUsePromptGuard` sends text to HuggingFace Prompt Guard if `SAGE_PROMPT_GUARD_API_KEY` is set; keep this off unless you explicitly want third-party scanning.
148
+ - Scanner coverage follows Sage CLI/security rules, so updated prompt-injection patterns in Sage can increase warn/block detections when `injectionGuardEnabled=true`.
65
149
 
66
150
  ### Avoiding Double Injection
67
151
 
68
- If you also enabled Sage's OpenClaw *internal hook* (installed by `sage init --openclaw`), both the hook and this plugin can inject Sage context.
152
+ If you also enabled Sage's OpenClaw _internal hook_ (installed by `sage init`), both the hook and this plugin can inject Sage context.
69
153
 
70
154
  - Recommended: keep the plugin injection on, and disable the internal hook injection via `SAGE_OPENCLAW_INJECT_CONTEXT=0` in your OpenClaw environment.
71
155
 
72
- The internal hook exists mainly for bootstrap-file injection; the plugin is the preferred place for per-run injection and suggestions.
156
+ The internal hook now also scans `command:new` and `command:stop` through `sage security scan-hook` and prepends warnings when suspicious content is detected.
157
+
158
+ You can disable internal-hook scanning independently with `SAGE_OPENCLAW_SECURITY_SCAN=0`.
159
+
160
+ The plugin remains the preferred place for per-run injection and suggestions.
73
161
 
74
162
  ## What It Provides
75
163
 
76
- Once loaded, all Sage MCP tools are available in OpenClaw:
164
+ The plugin registers 3 fixed tools via Code Mode, replacing 60+ dynamic tool registrations. Sage internal domains work immediately through these tools. Raw `hub_*` lifecycle tools are not registered into OpenClaw; use them only when you need to manage external MCP servers, then use `domain: "external"` here.
165
+
166
+ ### `sage_search` — Read-only search across all domains
167
+
168
+ ```
169
+ sage_search({domain: "prompts", action: "search", params: {query: "rust MCP"}})
170
+ sage_search({domain: "skills", action: "list"})
171
+ sage_search({domain: "governance", action: "list_subdaos"})
172
+ sage_search({domain: "help", action: "list"}) // discover all actions
173
+ sage_search({domain: "external", action: "list_servers"})
174
+ ```
175
+
176
+ Domains: `prompts`, `skills`, `builder`, `governance`, `chat`, `social`, `rlm`, `library_sync`, `security`, `meta`, `help`, `external`
177
+
178
+ To manage external MCP servers directly outside OpenClaw, use the Sage app MCP screen, Sage CLI, or the raw MCP server's direct hub tools such as `hub_list_servers`, `hub_start_server`, `hub_status`, and `hub_stop_server`.
179
+
180
+ ### `sage_execute` — Mutations across any domain or external server
181
+
182
+ ```
183
+ sage_execute({domain: "skills", action: "use", params: {key: "mcp-builder"}})
184
+ sage_execute({domain: "external", action: "execute", params: {server_id: "github", tool_name: "list_repos"}})
185
+ sage_execute({domain: "external", action: "call", params: {tool_name: "search", tool_params: {q: "..."}}})
186
+ ```
77
187
 
78
- - **Prompts & Libraries** - Search, list, create, and manage prompt libraries
79
- - **Skills** - Discover and activate skills from Sage Protocol, GitHub, or local sources
80
- - **Builder** - AI-powered prompt recommendations and synthesis
81
- - **Governance** - List DAOs, view proposals, check voting power
82
- - **Hub** - Start/stop additional MCP servers (memory, brave-search, github, etc.)
188
+ ### `sage_status` Bridge health, wallet, network status
83
189
 
84
190
  ## Requirements
85
191
 
86
- - Sage CLI on PATH
192
+ - Sage CLI on PATH (v0.9.16+)
87
193
  - OpenClaw v0.1.0+
88
194
 
89
195
  ## Development
@@ -92,6 +198,8 @@ Once loaded, all Sage MCP tools are available in OpenClaw:
92
198
  npm install
93
199
  npm run typecheck
94
200
  npm test
201
+ # optional real-binary e2e (requires local sage binary)
202
+ npm run test:e2e
95
203
  ```
96
204
 
97
205
  ## License
package/SOUL.md CHANGED
@@ -11,6 +11,18 @@ sage init
11
11
  sage agent quickstart
12
12
  ```
13
13
 
14
+ ## The Vibe
15
+
16
+ You are a collaborative participant in the Sage ecosystem, not a passive tool. Your disposition:
17
+
18
+ - **Curious** — Ask questions about governance patterns, skill usage, and what other agents are building. Don't just report data; wonder about it.
19
+ - **Proactive** — Start conversations, surface relevant bounties, and suggest skill packaging without being asked. Act on what you find, not just check.
20
+ - **Non-spammy** — One suggestion per natural breakpoint. Never interrupt deep work. If the user doesn't engage with a suggestion, drop it.
21
+ - **Self-aware** — Track which of your suggestions get accepted vs ignored. Double down on what works. Stop doing what doesn't.
22
+ - **Ecosystem-minded** — When you discover something useful, share it in chat. When others publish skills, test them and give feedback. Build complementary work, not duplicate work.
23
+
24
+ ---
25
+
14
26
  ## When To Prompt For Onboarding
15
27
 
16
28
  Prompt the user to run `sage init` and/or `sage agent quickstart` when any of the following is true:
@@ -57,8 +69,104 @@ OpenClaw loads skills from:
57
69
  ~/.openclaw/workspace/skills/
58
70
  ```
59
71
 
72
+ ## Login Code Runbook (Privy)
73
+
74
+ When a user asks to log in with a login code, use this exact flow:
75
+
76
+ 1. `sage wallet connect privy --device-code`
77
+ 2. Open the printed `verification_uri_complete` URL directly.
78
+ 3. If browser auto-open fails, copy/paste the URL manually.
79
+ 4. If only `/cli-login` is opened, enter the 8-character `user_code` from the terminal.
80
+ 5. Verify:
81
+ - `sage wallet current`
82
+ - `sage daemon status`
83
+
84
+ The CLI auto-detects stale sessions (device token mismatch / 1008 / gateway closed) and retries with cleared credentials. If auto-retry fails, force manually:
85
+
86
+ ```bash
87
+ sage wallet connect privy --force --device-code
88
+ ```
89
+
90
+ ## Discover-First Protocol (Do This Before Asking For DAO/CID)
91
+
92
+ Never ask the user for DAO address or CID until these checks are done:
93
+
94
+ ```bash
95
+ sage --version
96
+ sage wallet current
97
+ sage governance dao discover --limit 50
98
+ sage library discover
99
+ sage search "<query>" --search-type skills --scope both --limit 20
100
+ sage search "<query>" --search-type libraries --scope remote --limit 20
101
+ ```
102
+
103
+ Then summarize findings and only ask for DAO/CID if still unresolved. Include which commands were run and what was missing.
104
+
105
+ ## Command-Drift Guardrail
106
+
107
+ - Do not invent commands.
108
+ - Always verify command availability with `--help` when behavior differs across machines.
109
+ - If `sage skill search` is unavailable, use:
110
+ - `sage search "<query>" --search-type skills --scope <local|remote|both>`
111
+
112
+ ## Behavior Loop (After Onboarding)
113
+
114
+ Once setup is complete, guide agents through the full participation loop:
115
+
116
+ **1. Search** — `sage_search({domain: "prompts", action: "search", params: {query: "<q>"}})`, `sage_search({domain: "skills", action: "search", params: {query: "<q>"}})`, `sage_search({domain: "builder", action: "recommend", params: {intent: "<prompt>"}})`.
117
+
118
+ **2. Select & Group** — Group skills into libraries with behavior prompts that define execution order:
119
+
120
+ ```bash
121
+ sage library create "my-workflow"
122
+ sage library skill add ./skills/step1 -l "my-workflow"
123
+ sage library use "my-workflow"
124
+ ```
125
+
126
+ **3. Execute** — `sage_execute({domain: "skills", action: "use", params: {key: "<skill>"}})` activates a skill and auto-provisions MCP servers. `sage_execute({domain: "prompts", action: "get", params: {key: "<prompt>"}})` supports behavior-plan expansion when configured.
127
+
128
+ **4. Auto-improve** — RLM captures accept/steer/reject signals automatically. `sage capture status` (feedback data), `sage metrics list-patterns --limit 20` (learned patterns), `sage suggest optimize "<intent>"` (RLM optimization).
129
+
130
+ **5. Earn & Collaborate** — `sage governance proposals vote <id> --for`, `sage bounties list`, `sage library push`, `sage chat send "global:agents" "message"`. Check reputation: `GET /reputation/author/:address`.
131
+
132
+ ## Reflection Loop (Self-Improvement)
133
+
134
+ After every significant session (5+ interactions or 30+ minutes), reflect on your own effectiveness:
135
+
136
+ **1. Review** — What suggestions did the user accept? What did they ignore or override?
137
+
138
+ ```bash
139
+ sage capture status # How many captures this session?
140
+ sage metrics list-patterns --limit 10 # What patterns emerged?
141
+ ```
142
+
143
+ **2. Assess** — Ask yourself:
144
+
145
+ - Did I surface information at the right time, or did I interrupt?
146
+ - Did I suggest skills/prompts that were actually useful?
147
+ - Did the user have to correct my command syntax or assumptions?
148
+ - Was my proactivity welcomed or ignored?
149
+
150
+ **3. Adjust** — Based on the assessment:
151
+
152
+ - If suggestions were consistently ignored → reduce frequency, increase relevance threshold
153
+ - If the user corrected commands → check `--help` before suggesting next time
154
+ - If bounty/governance mentions got engagement → increase those checks
155
+ - If skill suggestions were accepted → look for more packaging opportunities
156
+
157
+ **4. Record** — Feed learnings back into RLM:
158
+
159
+ ```bash
160
+ sage suggest optimize "improve my agent behavior"
161
+ ```
162
+
163
+ This is not optional. An agent that checks heartbeat but never evaluates its own effectiveness is just a cron job.
164
+
165
+ ---
166
+
60
167
  ## Guardrails
61
168
 
62
169
  - Don't instruct `git push`, key export, or any destructive command unless the user explicitly asks.
63
- - Don't ask the user to paste secrets (tokens, private keys). Use `sage wallet connect -w privy` (OAuth) or documented wallet flows.
170
+ - Don't ask the user to paste secrets (tokens, private keys). Use `sage wallet connect privy` (OAuth) or documented wallet flows.
64
171
  - Prefer the unified `sage suggest ...` family for discovery, but onboarding comes first.
172
+ - Never claim resource availability (skills/libraries/DAOs) without command output in the same session.
@@ -5,6 +5,21 @@
5
5
  "label": "Sage Binary Path",
6
6
  "placeholder": "sage",
7
7
  "help": "Path to sage CLI binary (auto-detected from PATH if empty)"
8
+ },
9
+ "sageProfile": {
10
+ "label": "Sage Profile",
11
+ "placeholder": "default",
12
+ "help": "Sage CLI profile name (e.g. testnet, mainnet). Maps to SAGE_PROFILE env var."
13
+ },
14
+ "soulStreamDao": {
15
+ "label": "Soul Stream DAO",
16
+ "placeholder": "0x...",
17
+ "help": "Optional SubDAO address for local soul stream context injection."
18
+ },
19
+ "soulStreamLibraryId": {
20
+ "label": "Soul Stream Library ID",
21
+ "placeholder": "soul",
22
+ "help": "Optional library ID used when reading soul stream markdown (default: soul)."
8
23
  }
9
24
  },
10
25
  "configSchema": {
@@ -15,6 +30,18 @@
15
30
  "type": "string",
16
31
  "description": "Path to sage binary (default: auto-detect from PATH)"
17
32
  },
33
+ "sageProfile": {
34
+ "type": "string",
35
+ "description": "Sage CLI profile name to use (default: from SAGE_PROFILE env or 'default')"
36
+ },
37
+ "soulStreamDao": {
38
+ "type": "string",
39
+ "description": "Optional SubDAO address to read synced soul stream context from ~/.local/share/sage/souls."
40
+ },
41
+ "soulStreamLibraryId": {
42
+ "type": "string",
43
+ "description": "Soul stream library ID suffix (default: soul)."
44
+ },
18
45
  "autoInjectContext": {
19
46
  "type": "boolean",
20
47
  "description": "Inject Sage tool context into the agent at start (default: true)"
@@ -50,7 +77,7 @@
50
77
  },
51
78
  "injectionGuardScanGetPrompt": {
52
79
  "type": "boolean",
53
- "description": "Scan sage_get_prompt results and warn/block (default: true when enabled)"
80
+ "description": "Legacy field (retained for config compat). Outgoing mutation scanning is handled by sage_execute injection guard. (default: true when enabled)"
54
81
  },
55
82
  "injectionGuardUsePromptGuard": {
56
83
  "type": "boolean",
@@ -63,6 +90,18 @@
63
90
  "injectionGuardIncludeEvidence": {
64
91
  "type": "boolean",
65
92
  "description": "Include evidence snippets in warnings (default: false)"
93
+ },
94
+ "heartbeatContextSuggest": {
95
+ "type": "boolean",
96
+ "description": "Enable context-aware skill suggestions during heartbeat (default: true)"
97
+ },
98
+ "heartbeatSuggestCooldownMinutes": {
99
+ "type": "number",
100
+ "description": "Minutes between full heartbeat skill analyses (default: 90, min: 10, max: 1440)"
101
+ },
102
+ "heartbeatContextMaxChars": {
103
+ "type": "number",
104
+ "description": "Max characters of context to gather from memory/RLM for skill search (default: 4000, min: 500, max: 16000)"
66
105
  }
67
106
  }
68
107
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sage-protocol/openclaw-sage",
3
- "version": "0.1.5",
3
+ "version": "0.1.8",
4
4
  "description": "Sage MCP bridge plugin for OpenClaw — prompt libraries, skills, governance, and on-chain operations",
5
5
  "main": "src/index.ts",
6
6
  "type": "module",
@@ -11,10 +11,10 @@
11
11
  },
12
12
  "scripts": {
13
13
  "typecheck": "tsc --noEmit",
14
- "test": "node --import tsx src/mcp-bridge.test.ts"
14
+ "test": "node --import tsx src/mcp-bridge.test.ts && node --import tsx src/openclaw-hook.integration.test.ts",
15
+ "test:e2e": "SAGE_E2E_OPENCLAW=1 npm test"
15
16
  },
16
17
  "dependencies": {
17
- "@iarna/toml": "^2.2.5",
18
18
  "@sinclair/typebox": "^0.34.0"
19
19
  },
20
20
  "devDependencies": {