@digitalforgestudios/openclaw-sulcus 5.4.0 → 6.1.0
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 +1 -1
- package/bin/configure.mjs +0 -0
- package/hooks.defaults.json +99 -40
- package/index.ts +4061 -157
- package/openclaw.plugin.json +275 -4
- package/package.json +4 -4
package/openclaw.plugin.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "openclaw-sulcus",
|
|
3
3
|
"kind": "memory",
|
|
4
|
+
"allowConversationAccess": true,
|
|
4
5
|
"name": "Sulcus",
|
|
5
|
-
"description": "
|
|
6
|
+
"description": "Reactive thermodynamic intelligence layer for LLM agents. Memory that thinks. Apache AGE knowledge graph, SIU v2 pipeline (SIVU/SICU/SILU/SITU), interaction-based decay, curator sleep-cycle, relevance-weighted recall. 52 API routes, 32 server modules. Cloud sync or local WASM.",
|
|
6
7
|
"contracts": {
|
|
7
|
-
"memoryEmbeddingProviders": [
|
|
8
|
+
"memoryEmbeddingProviders": [
|
|
9
|
+
"sulcus"
|
|
10
|
+
]
|
|
8
11
|
},
|
|
9
12
|
"privacy": {
|
|
10
13
|
"consentModel": "local-first",
|
|
@@ -124,6 +127,211 @@
|
|
|
124
127
|
"tools": {
|
|
125
128
|
"type": "object",
|
|
126
129
|
"description": "Tool enable/disable flags. Merged with defaults from hooks.defaults.json. Example: { \"consolidate\": { \"enabled\": true }, \"export_markdown\": { \"enabled\": true } }"
|
|
130
|
+
},
|
|
131
|
+
"guardrails": {
|
|
132
|
+
"type": "object",
|
|
133
|
+
"description": "Memory-aware guardrail rules (opt-in, all disabled by default). outputGuard intercepts outgoing messages for PII and preference violations. All blocks produce visible explanations — never silent cancel.",
|
|
134
|
+
"properties": {
|
|
135
|
+
"outputGuard": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"properties": {
|
|
138
|
+
"enabled": {
|
|
139
|
+
"type": "boolean",
|
|
140
|
+
"default": false,
|
|
141
|
+
"description": "Master switch for output guardrails"
|
|
142
|
+
},
|
|
143
|
+
"pii": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"properties": {
|
|
146
|
+
"enabled": {
|
|
147
|
+
"type": "boolean",
|
|
148
|
+
"default": false,
|
|
149
|
+
"description": "PII stripping (opt-in; we are encrypted at rest, so this is extra insurance)"
|
|
150
|
+
},
|
|
151
|
+
"reversible": {
|
|
152
|
+
"type": "boolean",
|
|
153
|
+
"default": true,
|
|
154
|
+
"description": "Keep a local redaction key so originals can be restored"
|
|
155
|
+
},
|
|
156
|
+
"storageKey": {
|
|
157
|
+
"type": "string",
|
|
158
|
+
"default": "~/.openclaw/sulcus-redaction-key.json"
|
|
159
|
+
},
|
|
160
|
+
"patterns": {
|
|
161
|
+
"type": "array",
|
|
162
|
+
"items": {
|
|
163
|
+
"type": "string"
|
|
164
|
+
},
|
|
165
|
+
"default": [
|
|
166
|
+
"email",
|
|
167
|
+
"phone",
|
|
168
|
+
"ssn",
|
|
169
|
+
"credit_card",
|
|
170
|
+
"ip_address"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
"customPatterns": {
|
|
174
|
+
"type": "array",
|
|
175
|
+
"items": {
|
|
176
|
+
"type": "object"
|
|
177
|
+
},
|
|
178
|
+
"default": []
|
|
179
|
+
},
|
|
180
|
+
"onViolation": {
|
|
181
|
+
"type": "string",
|
|
182
|
+
"enum": [
|
|
183
|
+
"redact",
|
|
184
|
+
"replace",
|
|
185
|
+
"block"
|
|
186
|
+
],
|
|
187
|
+
"default": "redact"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"preferenceViolation": {
|
|
192
|
+
"type": "object",
|
|
193
|
+
"properties": {
|
|
194
|
+
"enabled": {
|
|
195
|
+
"type": "boolean",
|
|
196
|
+
"default": true,
|
|
197
|
+
"description": "Scan output against stored negative preferences"
|
|
198
|
+
},
|
|
199
|
+
"onViolation": {
|
|
200
|
+
"type": "string",
|
|
201
|
+
"enum": [
|
|
202
|
+
"replace",
|
|
203
|
+
"warn",
|
|
204
|
+
"block"
|
|
205
|
+
],
|
|
206
|
+
"default": "replace"
|
|
207
|
+
},
|
|
208
|
+
"replacementMessage": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"default": "⚠️ I stopped myself — this output would violate a preference you've stored with me."
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"failMode": {
|
|
215
|
+
"type": "string",
|
|
216
|
+
"enum": [
|
|
217
|
+
"fail-open",
|
|
218
|
+
"fail-closed"
|
|
219
|
+
],
|
|
220
|
+
"default": "fail-open"
|
|
221
|
+
},
|
|
222
|
+
"auditTrail": {
|
|
223
|
+
"type": "boolean",
|
|
224
|
+
"default": true,
|
|
225
|
+
"description": "Store guardrail events as episodic memories"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
"toolGuard": {
|
|
230
|
+
"type": "object",
|
|
231
|
+
"description": "Memory-aware tool call guardrails (opt-in, disabled by default). Evaluates tool calls against agent memory + allowlists before execution. Three outcomes: allow, block, or requireApproval.",
|
|
232
|
+
"properties": {
|
|
233
|
+
"enabled": {
|
|
234
|
+
"type": "boolean",
|
|
235
|
+
"default": false,
|
|
236
|
+
"description": "Master switch for tool call guardrails"
|
|
237
|
+
},
|
|
238
|
+
"sensitiveTools": {
|
|
239
|
+
"type": "array",
|
|
240
|
+
"items": { "type": "string" },
|
|
241
|
+
"default": ["exec", "write", "edit", "delete", "message"],
|
|
242
|
+
"description": "Tools that trigger memory-based objective check before execution"
|
|
243
|
+
},
|
|
244
|
+
"allowlist": {
|
|
245
|
+
"type": "array",
|
|
246
|
+
"items": { "type": "string" },
|
|
247
|
+
"default": [],
|
|
248
|
+
"description": "Tools always allowed (bypass all checks)"
|
|
249
|
+
},
|
|
250
|
+
"blocklist": {
|
|
251
|
+
"type": "array",
|
|
252
|
+
"items": { "type": "string" },
|
|
253
|
+
"default": [],
|
|
254
|
+
"description": "Tools always blocked (cannot be used regardless of context)"
|
|
255
|
+
},
|
|
256
|
+
"objectiveCheck": {
|
|
257
|
+
"type": "boolean",
|
|
258
|
+
"default": true,
|
|
259
|
+
"description": "Query Sulcus memory to evaluate whether tool call aligns with agent objectives and user preferences"
|
|
260
|
+
},
|
|
261
|
+
"requireApprovalThreshold": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"enum": ["info", "warning", "critical"],
|
|
264
|
+
"default": "warning",
|
|
265
|
+
"description": "Minimum severity level that triggers a requireApproval pause instead of proceeding"
|
|
266
|
+
},
|
|
267
|
+
"failMode": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"enum": ["fail-open", "fail-closed"],
|
|
270
|
+
"default": "fail-open",
|
|
271
|
+
"description": "Behavior when guardrail throws an error: fail-open allows the tool call, fail-closed blocks it"
|
|
272
|
+
},
|
|
273
|
+
"auditTrail": {
|
|
274
|
+
"type": "boolean",
|
|
275
|
+
"default": true,
|
|
276
|
+
"description": "Store tool guard decisions as episodic memories with _source: tool_guard"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"configFile": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"description": "Path to sulcus.toml config file. Defaults to ~/.sulcus/sulcus.toml. Values are overridden by plugin UI config."
|
|
285
|
+
},
|
|
286
|
+
"tokenBudget": {
|
|
287
|
+
"type": "number",
|
|
288
|
+
"description": "Maximum token budget for memory context injection (100-8000). Default: 4000.",
|
|
289
|
+
"default": 4000,
|
|
290
|
+
"minimum": 100,
|
|
291
|
+
"maximum": 8000
|
|
292
|
+
},
|
|
293
|
+
"maxRecallChars": {
|
|
294
|
+
"type": "number",
|
|
295
|
+
"description": "Maximum character budget for memory context injection (500-8000). Alternative to tokenBudget — converted to tokens at ~4 chars/token. If both are set, maxRecallChars takes precedence.",
|
|
296
|
+
"default": 2000,
|
|
297
|
+
"minimum": 500,
|
|
298
|
+
"maximum": 8000
|
|
299
|
+
},
|
|
300
|
+
"contextWindowSize": {
|
|
301
|
+
"type": "number",
|
|
302
|
+
"description": "Model context window size in tokens. Used for utilization-based throttling — plugin measures actual prompt size and self-mutes when >93% full (>85%: minimal injection, >70%: reduced). Default 200000 (200k). Set to match your model (e.g. 128000 for GPT-4, 200000 for Claude).",
|
|
303
|
+
"default": 200000,
|
|
304
|
+
"minimum": 8000,
|
|
305
|
+
"maximum": 2000000
|
|
306
|
+
},
|
|
307
|
+
"dreaming": {
|
|
308
|
+
"type": "object",
|
|
309
|
+
"additionalProperties": true,
|
|
310
|
+
"description": "Dreaming / consolidation settings. Passed through to the dream engine.",
|
|
311
|
+
"properties": {
|
|
312
|
+
"enabled": {
|
|
313
|
+
"type": "boolean"
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
"contextRebuild": {
|
|
318
|
+
"type": "object",
|
|
319
|
+
"description": "Task 70: Post-compaction context rebuild settings. When before_compaction fires, the next turn injects a full Sulcus recall (expanded token budget) to restore working knowledge after context window degradation.",
|
|
320
|
+
"additionalProperties": true,
|
|
321
|
+
"properties": {
|
|
322
|
+
"enabled": {
|
|
323
|
+
"type": "boolean",
|
|
324
|
+
"description": "Enable post-compaction context rebuild. Default: true.",
|
|
325
|
+
"default": true
|
|
326
|
+
},
|
|
327
|
+
"tokenBudget": {
|
|
328
|
+
"type": "number",
|
|
329
|
+
"description": "Token budget for the post-compaction recall injection. Clamped to [500, 10000]. Default: 4000.",
|
|
330
|
+
"default": 4000,
|
|
331
|
+
"minimum": 500,
|
|
332
|
+
"maximum": 10000
|
|
333
|
+
}
|
|
334
|
+
}
|
|
127
335
|
}
|
|
128
336
|
}
|
|
129
337
|
},
|
|
@@ -205,6 +413,69 @@
|
|
|
205
413
|
"maxCapturePerTurn": {
|
|
206
414
|
"label": "Max Auto-Capture per Turn",
|
|
207
415
|
"advanced": true
|
|
416
|
+
},
|
|
417
|
+
"guardrails": {
|
|
418
|
+
"label": "Guardrails",
|
|
419
|
+
"advanced": true,
|
|
420
|
+
"help": "Memory-aware guardrail rules for output interception and tool call control (opt-in, disabled by default)"
|
|
421
|
+
},
|
|
422
|
+
"guardrails.toolGuard.enabled": {
|
|
423
|
+
"label": "Tool Guard",
|
|
424
|
+
"advanced": true,
|
|
425
|
+
"help": "Evaluate tool calls against agent memory before execution. Blocks or requires approval for suspicious tool use."
|
|
426
|
+
},
|
|
427
|
+
"guardrails.toolGuard.sensitiveTools": {
|
|
428
|
+
"label": "Sensitive Tools",
|
|
429
|
+
"advanced": true,
|
|
430
|
+
"help": "Tool names that trigger memory-based objective check (default: exec, write, edit, delete, message)"
|
|
431
|
+
},
|
|
432
|
+
"guardrails.toolGuard.requireApprovalThreshold": {
|
|
433
|
+
"label": "Approval Threshold",
|
|
434
|
+
"advanced": true,
|
|
435
|
+
"help": "Minimum severity that pauses for user approval: info, warning, or critical"
|
|
208
436
|
}
|
|
209
|
-
}
|
|
210
|
-
|
|
437
|
+
},
|
|
438
|
+
"providerAuthChoices": [
|
|
439
|
+
{
|
|
440
|
+
"id": "sulcus-cloud",
|
|
441
|
+
"label": "Sulcus Cloud (sulcus.ca)",
|
|
442
|
+
"description": "Connect to Sulcus cloud for persistent cross-device memory with auto-sync.",
|
|
443
|
+
"requiredEnvVars": [
|
|
444
|
+
"SULCUS_API_KEY"
|
|
445
|
+
],
|
|
446
|
+
"optionalEnvVars": [
|
|
447
|
+
"SULCUS_SERVER_URL"
|
|
448
|
+
]
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"id": "sulcus-self-hosted",
|
|
452
|
+
"label": "Self-Hosted Sulcus",
|
|
453
|
+
"description": "Connect to your own Sulcus server instance.",
|
|
454
|
+
"requiredEnvVars": [
|
|
455
|
+
"SULCUS_API_KEY",
|
|
456
|
+
"SULCUS_SERVER_URL"
|
|
457
|
+
]
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"id": "local-only",
|
|
461
|
+
"label": "Local Only (WASM)",
|
|
462
|
+
"description": "Run entirely local via WASM — no network, no cloud. Requires native dylibs.",
|
|
463
|
+
"requiredEnvVars": []
|
|
464
|
+
}
|
|
465
|
+
],
|
|
466
|
+
"providerAuthEnvVars": {
|
|
467
|
+
"SULCUS_API_KEY": {
|
|
468
|
+
"label": "Sulcus API Key",
|
|
469
|
+
"sensitive": true,
|
|
470
|
+
"help": "Get your API key at https://sulcus.ca/dashboard/settings"
|
|
471
|
+
},
|
|
472
|
+
"SULCUS_SERVER_URL": {
|
|
473
|
+
"label": "Sulcus Server URL",
|
|
474
|
+
"default": "https://api.sulcus.ca",
|
|
475
|
+
"help": "Your Sulcus server URL. Only needed for self-hosted."
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"commandAliases": [
|
|
479
|
+
"sulcus"
|
|
480
|
+
]
|
|
481
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitalforgestudios/openclaw-sulcus",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Sulcus — thermodynamic memory + Apache AGE knowledge graph for OpenClaw agents.
|
|
3
|
+
"version": "6.1.0",
|
|
4
|
+
"description": "Sulcus — thermodynamic memory + Apache AGE knowledge graph for OpenClaw agents. v6.0: Multi-signal recall (semantic + hot-context + entity-graph + profile), configurable guardrails (outputGuard + toolGuard), token budget enforcement, context rebuild post-compaction, sulcus.toml config layer, SIRU training data logging, session-scoped memory, batch heat-boost. SIU v2 pipeline (SIVU/SICU/SILU/SITU/SIRU). Interaction-based decay. Curator sleep-cycle. Cross-agent sync.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"openclaw",
|
|
7
7
|
"openclaw-plugin",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"curator",
|
|
21
21
|
"interaction-decay"
|
|
22
22
|
],
|
|
23
|
-
"author": "Digital Forge Studios <contact@
|
|
23
|
+
"author": "Digital Forge Studios <contact@sulcus.ca>",
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"pluginApi": ">=1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"build": {
|
|
42
|
-
"openclawVersion": "2026.
|
|
42
|
+
"openclawVersion": "2026.5.2"
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"bin": {
|