@gendigital/sage-openclaw 0.5.4 → 0.7.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 +3 -3
- package/dist/index.cjs +921 -404
- package/dist/index.cjs.map +4 -4
- package/openclaw.plugin.json +1 -1
- package/package.json +14 -11
- package/resources/skills/security-awareness/SKILL.md +9 -0
- package/resources/threats/commands.yaml +2 -2
- package/resources/threats/mitre.yaml +2 -2
- package/resources/threats/self-defense.yaml +2 -2
package/openclaw.plugin.json
CHANGED
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.7.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Safety for Agents — ADR layer for OpenClaw",
|
|
7
7
|
"main": "./dist/index.cjs",
|
|
@@ -13,26 +13,23 @@
|
|
|
13
13
|
"README.md",
|
|
14
14
|
"LICENSE"
|
|
15
15
|
],
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "pnpm -C ../core build && pnpm run clean && pnpm run sync:assets && node esbuild.config.js",
|
|
18
|
-
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true});require('node:fs').rmSync('resources',{recursive:true,force:true})\"",
|
|
19
|
-
"sync:assets": "node scripts/sync-assets.mjs",
|
|
20
|
-
"test": "vitest run"
|
|
21
|
-
},
|
|
22
16
|
"optionalDependencies": {
|
|
23
17
|
"koffi": "^2.9.0"
|
|
24
18
|
},
|
|
25
19
|
"devDependencies": {
|
|
26
|
-
"@sage/core": "workspace:*",
|
|
27
20
|
"@types/node": "^22.0.0",
|
|
28
21
|
"esbuild": "^0.25.0",
|
|
29
22
|
"typescript": "^5.9.0",
|
|
30
|
-
"vitest": "^4.0.0"
|
|
23
|
+
"vitest": "^4.0.0",
|
|
24
|
+
"@gendigital/sage-core": "0.7.0"
|
|
31
25
|
},
|
|
32
26
|
"openclaw": {
|
|
33
27
|
"extensions": [
|
|
34
28
|
"./dist/index.cjs"
|
|
35
|
-
]
|
|
29
|
+
],
|
|
30
|
+
"compat": {
|
|
31
|
+
"pluginApi": ">=2026.3.22"
|
|
32
|
+
}
|
|
36
33
|
},
|
|
37
34
|
"engines": {
|
|
38
35
|
"node": ">=18"
|
|
@@ -50,5 +47,11 @@
|
|
|
50
47
|
],
|
|
51
48
|
"publishConfig": {
|
|
52
49
|
"access": "public"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "pnpm -C ../core build && pnpm run clean && pnpm run sync:assets && node esbuild.config.js",
|
|
53
|
+
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true});require('node:fs').rmSync('resources',{recursive:true,force:true})\"",
|
|
54
|
+
"sync:assets": "node scripts/sync-assets.mjs",
|
|
55
|
+
"test": "vitest run"
|
|
53
56
|
}
|
|
54
|
-
}
|
|
57
|
+
}
|
|
@@ -57,3 +57,12 @@ You are working in an environment protected by Sage, a security plugin. Be mindf
|
|
|
57
57
|
## Sage Flagged Actions
|
|
58
58
|
|
|
59
59
|
When Sage flags a tool call (as opposed to blocking it outright), you **must** present the details to the user and wait for their explicit approval before calling `sage_approve`. Never auto-approve a flagged action on your own — the user must decide.
|
|
60
|
+
|
|
61
|
+
## False Positive Reporting
|
|
62
|
+
|
|
63
|
+
If the user believes a Sage detection is incorrect (a wrong block, mistaken flag, or false alarm), you can report it using the MCP tools provided by Sage:
|
|
64
|
+
|
|
65
|
+
1. **`sage_list_audit_entries`** — Lists recent Sage audit log entries for the current conversation. Use this to find the `entry_id`s of the detections the user considers incorrect.
|
|
66
|
+
2. **`sage_report_false_positive`** — Submits a false positive report to the Sage backend. Requires a `description` (what was wrongly detected) and `reasoning` (why it is a false positive). Optionally accepts `entry_ids` to scope the report to specific entries.
|
|
67
|
+
|
|
68
|
+
When the user says a detection was wrong, a false positive, or asks to report/dispute a Sage verdict, use these tools to help them.
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
severity: critical
|
|
112
112
|
confidence: 0.90
|
|
113
113
|
action: block
|
|
114
|
-
pattern: "(curl|wget)\\s[
|
|
114
|
+
pattern: "(curl|wget)\\s[\\s\\S]*?(&&|;)\\s*chmod\\s+\\+x"
|
|
115
115
|
match_on: command
|
|
116
116
|
title: "Download and execute chain"
|
|
117
117
|
expires_at: null
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
severity: high
|
|
251
251
|
confidence: 0.80
|
|
252
252
|
action: block
|
|
253
|
-
pattern: "\\b(while|for)\\b[^;]*;\\s*do[^;]
|
|
253
|
+
pattern: "\\b(while|for)\\b[^;]*;\\s*do[^;]*(\\b(bash|sh)\\s+-c\\b|\\b(curl|wget)\\b[^;]*\\|\\s*(?:sudo\\s+)?(?:env\\s+)?(?:[^\\s\"']*[\\\\/])?(bash|sh|zsh|ksh|dash)\\b|\\b(curl|wget)\\b[^;]*(?:(-d|--data|--data-binary)\\s+['\\\"]?@\\S+|(--upload-file|-T)\\s+['\\\"]?\\S+))"
|
|
254
254
|
match_on: command
|
|
255
255
|
title: "Loop executing shell or download commands"
|
|
256
256
|
expires_at: null
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
severity: high
|
|
101
101
|
confidence: 0.80
|
|
102
102
|
action: require_approval
|
|
103
|
-
pattern: "(rar(\\.exe)?.*[afu]
|
|
103
|
+
pattern: "(rar(\\.exe)?.*[afu].*\\s(-dw|-tb|-ta)|7z(\\.exe)?.*[au].*-sdel|Add-Exfiltration\\.ps1|Do-Exfiltration\\.ps1|Invoke-PostExfil\\.ps1)"
|
|
104
104
|
case_insensitive: true
|
|
105
105
|
match_on: command
|
|
106
106
|
title: "MITRE ATT&CK T1020 - Automated Exfiltration"
|
|
@@ -737,7 +737,7 @@
|
|
|
737
737
|
severity: high
|
|
738
738
|
confidence: 0.80
|
|
739
739
|
action: require_approval
|
|
740
|
-
pattern: "
|
|
740
|
+
pattern: "(^|\\s|[;&|])(?:\"[^\"]*\\btscon(?:\\.exe)?\\b\"|'[^']*\\btscon(?:\\.exe)?\\b'|(?:[^\\s\"']*[\\\\/])?\\btscon(?:\\.exe)?\\b)\\s+\\S+(\\s+/dest:[^\\s]+)?"
|
|
741
741
|
case_insensitive: true
|
|
742
742
|
match_on: command
|
|
743
743
|
title: "MITRE ATT&CK T1563.002 - RDP Hijacking"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
severity: high
|
|
24
24
|
confidence: 0.85
|
|
25
25
|
action: require_approval
|
|
26
|
-
pattern: "\\.sage[\\\\/](allowlist|config)\\.json"
|
|
26
|
+
pattern: "\\.sage[\\\\/](allowlist|config|exceptions|pending-exceptions)\\.json"
|
|
27
27
|
match_on: file_path
|
|
28
28
|
title: "Access Sage configuration files"
|
|
29
29
|
expires_at: null
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
severity: high
|
|
49
49
|
confidence: 0.85
|
|
50
50
|
action: require_approval
|
|
51
|
-
pattern: "heuristics_enabled
|
|
51
|
+
pattern: "\"heuristics_enabled\"\\s*:\\s*false|\"url_check\"\\s*:\\s*\\{[^}]*\"enabled\"\\s*:\\s*false"
|
|
52
52
|
match_on: content
|
|
53
53
|
title: "Attempt to disable Sage security features via config"
|
|
54
54
|
expires_at: null
|