@gendigital/sage-openclaw 0.11.0 → 0.12.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/dist/index.cjs +1444 -468
- package/dist/index.cjs.map +4 -4
- package/dist/mcp-server.cjs +194 -88
- package/dist/mcp-server.cjs.map +4 -4
- package/dist/model-download-worker.cjs +136 -93
- package/dist/model-download-worker.cjs.map +3 -3
- package/dist/skill-upload-worker.cjs +5632 -0
- package/dist/skill-upload-worker.cjs.map +7 -0
- package/openclaw.plugin.json +6 -1
- package/package.json +8 -3
- package/resources/threats/dummy.yaml +22 -17
package/openclaw.plugin.json
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "sage-openclaw",
|
|
3
3
|
"name": "Sage",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.12.0",
|
|
5
5
|
"description": "Safety for Agents — ADR layer that guards commands, files, and web requests",
|
|
6
6
|
"skills": [
|
|
7
7
|
"resources/skills/security-awareness"
|
|
8
8
|
],
|
|
9
|
+
"activation": {
|
|
10
|
+
"onCapabilities": [
|
|
11
|
+
"hook"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
9
14
|
"configSchema": {
|
|
10
15
|
"type": "object",
|
|
11
16
|
"additionalProperties": false,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gendigital/sage-openclaw",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.12.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Safety for Agents — ADR layer for OpenClaw",
|
|
7
7
|
"homepage": "https://github.com/gendigitalinc/sage",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"esbuild": "^0.25.0",
|
|
31
31
|
"typescript": "^5.9.0",
|
|
32
32
|
"vitest": "^4.0.0",
|
|
33
|
-
"@gendigital/sage-core": "0.
|
|
34
|
-
"@gendigital/sage-mcp": "0.
|
|
33
|
+
"@gendigital/sage-core": "0.12.0",
|
|
34
|
+
"@gendigital/sage-mcp": "0.12.0"
|
|
35
35
|
},
|
|
36
36
|
"openclaw": {
|
|
37
37
|
"extensions": [
|
|
@@ -40,6 +40,11 @@
|
|
|
40
40
|
"compat": {
|
|
41
41
|
"pluginApi": ">=2026.3.28"
|
|
42
42
|
},
|
|
43
|
+
"activation": {
|
|
44
|
+
"onCapabilities": [
|
|
45
|
+
"hook"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
43
48
|
"build": {
|
|
44
49
|
"openclawVersion": "2026.3.28"
|
|
45
50
|
}
|
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
# Author: Test — NOT real threats
|
|
3
3
|
#
|
|
4
4
|
# Canary rules that match completely harmless, highly-specific marker strings.
|
|
5
|
-
# The
|
|
6
|
-
#
|
|
5
|
+
# The markers are deliberately OPAQUE (e.g. "diagmark_cmd_a75bf229", not
|
|
6
|
+
# "__sage_test_deny_cmd_..."): a self-describing name reads as a security probe, and
|
|
7
|
+
# a safety-trained model given security context (e.g. OpenCode, which injects Sage's
|
|
8
|
+
# scan findings into the prompt) will REFUSE to run it — so the artifact never
|
|
9
|
+
# reaches Sage and the E2E deny/ask test can't fire. Opaque markers run as rote yet
|
|
10
|
+
# stay unique random strings, so false positives are essentially impossible. The
|
|
11
|
+
# rule id/title carry the human-readable meaning; the hex suffix aids traceability.
|
|
7
12
|
#
|
|
8
13
|
# Coverage matrix:
|
|
9
14
|
# Tool match_on block(deny) require_approval(ask) log(allow)
|
|
@@ -24,7 +29,7 @@
|
|
|
24
29
|
category: testing
|
|
25
30
|
severity: critical
|
|
26
31
|
confidence: 0.95
|
|
27
|
-
pattern: "
|
|
32
|
+
pattern: "diagmark_cmd_a75bf229"
|
|
28
33
|
match_on: command
|
|
29
34
|
title: "[TEST] Canary deny command (alpha)"
|
|
30
35
|
expires_at: null
|
|
@@ -34,7 +39,7 @@
|
|
|
34
39
|
category: testing
|
|
35
40
|
severity: critical
|
|
36
41
|
confidence: 0.95
|
|
37
|
-
pattern: "
|
|
42
|
+
pattern: "diagmark_run_c3d91e4a"
|
|
38
43
|
match_on: command
|
|
39
44
|
title: "[TEST] Canary deny command (bravo)"
|
|
40
45
|
expires_at: null
|
|
@@ -44,7 +49,7 @@
|
|
|
44
49
|
category: testing
|
|
45
50
|
severity: warning
|
|
46
51
|
confidence: 0.60
|
|
47
|
-
pattern: "
|
|
52
|
+
pattern: "diagmark_cmd_8f2e6b71"
|
|
48
53
|
match_on: command
|
|
49
54
|
title: "[TEST] Canary approval command (alpha)"
|
|
50
55
|
expires_at: null
|
|
@@ -54,7 +59,7 @@
|
|
|
54
59
|
category: testing
|
|
55
60
|
severity: warning
|
|
56
61
|
confidence: 0.60
|
|
57
|
-
pattern: "
|
|
62
|
+
pattern: "diagmark_run_d4a09c53"
|
|
58
63
|
match_on: command
|
|
59
64
|
title: "[TEST] Canary approval command (bravo)"
|
|
60
65
|
expires_at: null
|
|
@@ -64,7 +69,7 @@
|
|
|
64
69
|
category: testing
|
|
65
70
|
severity: info
|
|
66
71
|
confidence: 0.10
|
|
67
|
-
pattern: "
|
|
72
|
+
pattern: "diagmark_cmd_1b7e3f82"
|
|
68
73
|
match_on: command
|
|
69
74
|
title: "[TEST] Canary log-only command"
|
|
70
75
|
expires_at: null
|
|
@@ -77,7 +82,7 @@
|
|
|
77
82
|
category: testing
|
|
78
83
|
severity: critical
|
|
79
84
|
confidence: 0.95
|
|
80
|
-
pattern: "
|
|
85
|
+
pattern: "diagmark_file_e6c4a918"
|
|
81
86
|
match_on: file_path
|
|
82
87
|
title: "[TEST] Canary deny file path"
|
|
83
88
|
expires_at: null
|
|
@@ -87,7 +92,7 @@
|
|
|
87
92
|
category: testing
|
|
88
93
|
severity: warning
|
|
89
94
|
confidence: 0.60
|
|
90
|
-
pattern: "
|
|
95
|
+
pattern: "diagmark_file_52fd7b36"
|
|
91
96
|
match_on: file_path
|
|
92
97
|
title: "[TEST] Canary approval file path"
|
|
93
98
|
expires_at: null
|
|
@@ -97,7 +102,7 @@
|
|
|
97
102
|
category: testing
|
|
98
103
|
severity: info
|
|
99
104
|
confidence: 0.10
|
|
100
|
-
pattern: "
|
|
105
|
+
pattern: "diagmark_file_9a13de74"
|
|
101
106
|
match_on: file_path
|
|
102
107
|
title: "[TEST] Canary log-only file path"
|
|
103
108
|
expires_at: null
|
|
@@ -110,7 +115,7 @@
|
|
|
110
115
|
category: testing
|
|
111
116
|
severity: critical
|
|
112
117
|
confidence: 0.95
|
|
113
|
-
pattern: "
|
|
118
|
+
pattern: "diagmark_content_3c8f15b7"
|
|
114
119
|
match_on: content
|
|
115
120
|
title: "[TEST] Canary deny content"
|
|
116
121
|
expires_at: null
|
|
@@ -120,7 +125,7 @@
|
|
|
120
125
|
category: testing
|
|
121
126
|
severity: warning
|
|
122
127
|
confidence: 0.60
|
|
123
|
-
pattern: "
|
|
128
|
+
pattern: "diagmark_content_7d4ea2c9"
|
|
124
129
|
match_on: content
|
|
125
130
|
title: "[TEST] Canary approval content"
|
|
126
131
|
expires_at: null
|
|
@@ -130,7 +135,7 @@
|
|
|
130
135
|
category: testing
|
|
131
136
|
severity: info
|
|
132
137
|
confidence: 0.10
|
|
133
|
-
pattern: "
|
|
138
|
+
pattern: "diagmark_content_f0b683d1"
|
|
134
139
|
match_on: content
|
|
135
140
|
title: "[TEST] Canary log-only content"
|
|
136
141
|
expires_at: null
|
|
@@ -144,7 +149,7 @@
|
|
|
144
149
|
category: testing
|
|
145
150
|
severity: critical
|
|
146
151
|
confidence: 0.95
|
|
147
|
-
pattern: "
|
|
152
|
+
pattern: "diaghost-4e91ca37\\.test"
|
|
148
153
|
match_on: url
|
|
149
154
|
title: "[TEST] Canary deny URL"
|
|
150
155
|
expires_at: null
|
|
@@ -154,7 +159,7 @@
|
|
|
154
159
|
category: testing
|
|
155
160
|
severity: warning
|
|
156
161
|
confidence: 0.60
|
|
157
|
-
pattern: "
|
|
162
|
+
pattern: "diaghost-b26d80f5\\.test"
|
|
158
163
|
match_on: url
|
|
159
164
|
title: "[TEST] Canary approval URL"
|
|
160
165
|
expires_at: null
|
|
@@ -164,7 +169,7 @@
|
|
|
164
169
|
category: testing
|
|
165
170
|
severity: info
|
|
166
171
|
confidence: 0.10
|
|
167
|
-
pattern: "
|
|
172
|
+
pattern: "diaghost-65f3d7a4\\.test"
|
|
168
173
|
match_on: url
|
|
169
174
|
title: "[TEST] Canary log-only URL"
|
|
170
175
|
expires_at: null
|
|
@@ -177,7 +182,7 @@
|
|
|
177
182
|
category: testing
|
|
178
183
|
severity: critical
|
|
179
184
|
confidence: 0.95
|
|
180
|
-
pattern: "
|
|
185
|
+
pattern: "diaghost-0c82eb16\\.test"
|
|
181
186
|
match_on: domain
|
|
182
187
|
title: "[TEST] Canary deny domain"
|
|
183
188
|
expires_at: null
|