@guava-parity/guard-scanner 15.0.0 → 16.0.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 +208 -42
- package/README_ja.md +252 -0
- package/SKILL.md +40 -11
- package/dist/cli.cjs +5997 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.mjs +6003 -0
- package/dist/index.cjs +4825 -0
- package/dist/index.d.mts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.mjs +4798 -0
- package/dist/mcp-server.cjs +4756 -0
- package/dist/mcp-server.d.mts +1 -0
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.mjs +4767 -0
- package/dist/openclaw-plugin.cjs +4863 -0
- package/dist/openclaw-plugin.d.mts +11 -0
- package/dist/openclaw-plugin.d.ts +11 -0
- package/dist/openclaw-plugin.mjs +4847 -34
- package/dist/types.cjs +18 -0
- package/dist/types.d.mts +215 -0
- package/dist/types.d.ts +215 -0
- package/dist/types.mjs +1 -0
- package/docs/data/benchmark-ledger.json +1428 -0
- package/docs/data/corpus-metrics.json +3 -3
- package/docs/data/fp-ledger.json +18 -0
- package/docs/data/quality-contract.json +36 -0
- package/docs/generated/openclaw-upstream-status.json +13 -13
- package/docs/openclaw-compatibility-audit.md +3 -2
- package/docs/openclaw-continuous-compatibility-plan.md +2 -1
- package/docs/spec/capabilities.json +137 -5
- package/docs/spec/plugin-trust.json +11 -0
- package/hooks/{context.js → context.ts} +1 -0
- package/openclaw-plugin.mts +21 -5
- package/openclaw.plugin.json +2 -2
- package/package.json +58 -20
- package/src/asset-auditor.js +0 -508
- package/src/ci-reporter.js +0 -135
- package/src/cli.js +0 -434
- package/src/core/content-loader.js +0 -42
- package/src/core/inventory.js +0 -73
- package/src/core/report-adapters.js +0 -171
- package/src/core/risk-engine.js +0 -93
- package/src/core/rule-registry.js +0 -73
- package/src/core/semantic-validators.js +0 -85
- package/src/finding-schema.js +0 -191
- package/src/hooks/context.ts +0 -49
- package/src/html-template.js +0 -239
- package/src/ioc-db.js +0 -54
- package/src/mcp-server.js +0 -653
- package/src/openclaw-upstream.js +0 -128
- package/src/patterns.js +0 -629
- package/src/policy-engine.js +0 -32
- package/src/quarantine.js +0 -41
- package/src/runtime-guard.js +0 -384
- package/src/scanner.js +0 -1042
- package/src/skill-crawler.js +0 -254
- package/src/threat-model.js +0 -50
- package/src/validation-layer.js +0 -39
- package/src/vt-client.js +0 -202
- package/src/watcher.js +0 -170
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"benchmark_version": "2026-03-13.quality-v1",
|
|
3
|
+
"generatedAt": "2026-03-14T05:45:37.147Z",
|
|
4
|
+
"entries": [
|
|
5
|
+
{
|
|
6
|
+
"layer": "layer_b",
|
|
7
|
+
"sample_id": "adv-benign-06",
|
|
8
|
+
"title": "secret-placeholder",
|
|
9
|
+
"risk": 3,
|
|
10
|
+
"matched_categories": [
|
|
11
|
+
"credential-handling"
|
|
12
|
+
],
|
|
13
|
+
"detection_ids": [
|
|
14
|
+
"CRED_ENV_REF"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract_version": "2026-03-13.quality-v1",
|
|
3
|
+
"benchmark_version": "2026-03-13.quality-v1",
|
|
4
|
+
"quality_targets": {
|
|
5
|
+
"precision_min": 0.9,
|
|
6
|
+
"recall_min": 0.9,
|
|
7
|
+
"false_positive_rate_max": 0.1,
|
|
8
|
+
"false_negative_rate_max": 0.1,
|
|
9
|
+
"explainability_completeness_rate_min": 1,
|
|
10
|
+
"runtime_check_latency_budget_ms": 5,
|
|
11
|
+
"false_positive_budget_by_category": {
|
|
12
|
+
"prompt-injection": 0.05,
|
|
13
|
+
"runtime-policy": 0.02,
|
|
14
|
+
"secret-detection": 0.08,
|
|
15
|
+
"supply-chain": 0.05,
|
|
16
|
+
"memory-poisoning": 0.03
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"layers": [
|
|
20
|
+
{
|
|
21
|
+
"id": "layer_a",
|
|
22
|
+
"corpus": "test/fixtures/corpus/security-corpus.json",
|
|
23
|
+
"scanner_options": {}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "layer_b",
|
|
27
|
+
"corpus": "test/fixtures/corpus/adversarial-corpus.json",
|
|
28
|
+
"scanner_options": {}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "layer_c",
|
|
32
|
+
"corpus": "test/fixtures/corpus/ecosystem-corpus.json",
|
|
33
|
+
"scanner_options": {}
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checkedAt": "2026-03-
|
|
3
|
-
"pinnedVersion": "2026.3.
|
|
4
|
-
"latestVersion": "2026.3.
|
|
5
|
-
"latestPublishedAt": "2026-03-
|
|
6
|
-
"registryModifiedAt": "2026-03-
|
|
7
|
-
"githubLatestVersion": "2026.3.
|
|
8
|
-
"githubPublishedAt": "2026-03-
|
|
9
|
-
"githubUrl": "https://github.com/openclaw/openclaw/releases/tag/v2026.3.
|
|
2
|
+
"checkedAt": "2026-03-13T13:54:07.403Z",
|
|
3
|
+
"pinnedVersion": "2026.3.12",
|
|
4
|
+
"latestVersion": "2026.3.12",
|
|
5
|
+
"latestPublishedAt": "2026-03-13T04:13:28.358Z",
|
|
6
|
+
"registryModifiedAt": "2026-03-13T04:29:39.807Z",
|
|
7
|
+
"githubLatestVersion": "2026.3.12",
|
|
8
|
+
"githubPublishedAt": "2026-03-13T04:26:46Z",
|
|
9
|
+
"githubUrl": "https://github.com/openclaw/openclaw/releases/tag/v2026.3.12",
|
|
10
10
|
"sourceParity": {
|
|
11
|
-
"npmLatestVersion": "2026.3.
|
|
12
|
-
"githubLatestVersion": "2026.3.
|
|
11
|
+
"npmLatestVersion": "2026.3.12",
|
|
12
|
+
"githubLatestVersion": "2026.3.12",
|
|
13
13
|
"inParity": true
|
|
14
14
|
},
|
|
15
15
|
"source": "npm",
|
|
16
16
|
"status": {
|
|
17
|
-
"pinnedVersion": "2026.3.
|
|
18
|
-
"latestVersion": "2026.3.
|
|
19
|
-
"latestPublishedAt": "2026-03-
|
|
17
|
+
"pinnedVersion": "2026.3.12",
|
|
18
|
+
"latestVersion": "2026.3.12",
|
|
19
|
+
"latestPublishedAt": "2026-03-13T04:13:28.358Z",
|
|
20
20
|
"source": "npm",
|
|
21
21
|
"upToDate": true,
|
|
22
22
|
"ahead": false,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# guard-scanner OpenClaw Compatibility Audit
|
|
2
2
|
|
|
3
3
|
Date: 2026-03-12
|
|
4
|
-
|
|
4
|
+
Public compatibility baseline: OpenClaw `v2026.3.8`
|
|
5
|
+
Upstream drift lane: newer OpenClaw stable releases measured separately by `check:upstream`
|
|
5
6
|
|
|
6
7
|
## Official upstream requirements used
|
|
7
8
|
|
|
@@ -20,7 +21,7 @@ Target baseline: OpenClaw `v2026.3.8`
|
|
|
20
21
|
| Runtime hook registration | ✅ | `openclaw-plugin.mts` registers `before_tool_call` with priority 90 |
|
|
21
22
|
| Malicious tool-call blocking | ✅ | `test/openclaw-plugin-compat.test.js` + `scripts/release-gate.js` |
|
|
22
23
|
| Benign tool-call passthrough | ✅ | `test/openclaw-plugin-compat.test.js` + `scripts/release-gate.js` |
|
|
23
|
-
| Upstream latest-version drift detection | ✅ | `npm run check:upstream` + `docs/generated/openclaw-upstream-status.json` (
|
|
24
|
+
| Upstream latest-version drift detection | ✅ | `npm run check:upstream` + `docs/generated/openclaw-upstream-status.json` (used for revalidation, not automatic claim widening) |
|
|
24
25
|
|
|
25
26
|
## Explicitly out of scope
|
|
26
27
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
|
-
"package_version": "
|
|
3
|
-
"plugin_version": "
|
|
2
|
+
"package_version": "16.0.0",
|
|
3
|
+
"plugin_version": "16.0.0",
|
|
4
4
|
"static_pattern_count": 358,
|
|
5
5
|
"threat_category_count": 35,
|
|
6
6
|
"runtime_check_count": 27,
|
|
7
|
-
"test_file_count":
|
|
7
|
+
"test_file_count": 28,
|
|
8
8
|
"dependencies_runtime": 1,
|
|
9
|
-
"dependencies_dev":
|
|
9
|
+
"dependencies_dev": 5,
|
|
10
10
|
"mcp_tools": [
|
|
11
11
|
"scan_skill",
|
|
12
12
|
"scan_text",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"cli_commands": [
|
|
22
22
|
"scan",
|
|
23
|
+
"benchmark",
|
|
23
24
|
"serve",
|
|
24
25
|
"watch",
|
|
25
26
|
"audit",
|
|
@@ -38,5 +39,136 @@
|
|
|
38
39
|
"virustotal",
|
|
39
40
|
"github",
|
|
40
41
|
"npm"
|
|
41
|
-
]
|
|
42
|
+
],
|
|
43
|
+
"benchmark_corpus_version": "2026-03-13.quality-v1",
|
|
44
|
+
"benchmark_layers": [
|
|
45
|
+
{
|
|
46
|
+
"id": "layer_a",
|
|
47
|
+
"benign": 17,
|
|
48
|
+
"malicious": 15,
|
|
49
|
+
"precision": 1,
|
|
50
|
+
"recall": 1,
|
|
51
|
+
"false_positive_rate": 0,
|
|
52
|
+
"false_negative_rate": 0
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "layer_b",
|
|
56
|
+
"benign": 12,
|
|
57
|
+
"malicious": 12,
|
|
58
|
+
"precision": 0.9167,
|
|
59
|
+
"recall": 0.9167,
|
|
60
|
+
"false_positive_rate": 0.0833,
|
|
61
|
+
"false_negative_rate": 0.0833
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "layer_c",
|
|
65
|
+
"benign": 8,
|
|
66
|
+
"malicious": 8,
|
|
67
|
+
"precision": 1,
|
|
68
|
+
"recall": 1,
|
|
69
|
+
"false_positive_rate": 0,
|
|
70
|
+
"false_negative_rate": 0
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"analysis_layers": [
|
|
74
|
+
{
|
|
75
|
+
"layer": 1,
|
|
76
|
+
"name": "Static Analysis"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"layer": 2,
|
|
80
|
+
"name": "Protocol Analysis"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"layer": 3,
|
|
84
|
+
"name": "Runtime Behavior"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"layer": 4,
|
|
88
|
+
"name": "Cognitive Threat Detection"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"layer": 5,
|
|
92
|
+
"name": "Threat Intelligence"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"owasp_asi_coverage": [
|
|
96
|
+
{
|
|
97
|
+
"id": "ASI01",
|
|
98
|
+
"count": 11,
|
|
99
|
+
"categories": [
|
|
100
|
+
"prompt-injection"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "ASI02",
|
|
105
|
+
"count": 28,
|
|
106
|
+
"categories": [
|
|
107
|
+
"credential-handling",
|
|
108
|
+
"exfiltration",
|
|
109
|
+
"malicious-code",
|
|
110
|
+
"pii-exposure",
|
|
111
|
+
"secret-detection",
|
|
112
|
+
"suspicious-download"
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "ASI04",
|
|
117
|
+
"count": 8,
|
|
118
|
+
"categories": [
|
|
119
|
+
"suspicious-download",
|
|
120
|
+
"unverifiable-deps"
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "ASI05",
|
|
125
|
+
"count": 2,
|
|
126
|
+
"categories": [
|
|
127
|
+
"financial-access"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"id": "ASI06",
|
|
132
|
+
"count": 10,
|
|
133
|
+
"categories": [
|
|
134
|
+
"exfiltration",
|
|
135
|
+
"memory-poisoning",
|
|
136
|
+
"pii-exposure"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"id": "ASI07",
|
|
141
|
+
"count": 9,
|
|
142
|
+
"categories": [
|
|
143
|
+
"credential-handling",
|
|
144
|
+
"secret-detection"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"capability_flags": {
|
|
149
|
+
"protocol_analysis": true,
|
|
150
|
+
"runtime_evidence": true,
|
|
151
|
+
"cognitive_detection": true,
|
|
152
|
+
"threat_intelligence": true
|
|
153
|
+
},
|
|
154
|
+
"compliance_modes": [
|
|
155
|
+
"owasp-asi"
|
|
156
|
+
],
|
|
157
|
+
"explainability_completeness_rate": 1,
|
|
158
|
+
"runtime_check_latency_budget_ms": 5,
|
|
159
|
+
"quality_targets": {
|
|
160
|
+
"precision_min": 0.9,
|
|
161
|
+
"recall_min": 0.9,
|
|
162
|
+
"false_positive_rate_max": 0.1,
|
|
163
|
+
"false_negative_rate_max": 0.1,
|
|
164
|
+
"explainability_completeness_rate_min": 1,
|
|
165
|
+
"runtime_check_latency_budget_ms": 5,
|
|
166
|
+
"false_positive_budget_by_category": {
|
|
167
|
+
"prompt-injection": 0.05,
|
|
168
|
+
"runtime-policy": 0.02,
|
|
169
|
+
"secret-detection": 0.08,
|
|
170
|
+
"supply-chain": 0.05,
|
|
171
|
+
"memory-poisoning": 0.03
|
|
172
|
+
}
|
|
173
|
+
}
|
|
42
174
|
}
|
package/openclaw-plugin.mts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
1
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
|
|
2
|
+
import * as runtimeGuard from "./src/index.js";
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
const runtimeGuard = require("../src/runtime-guard.js") as {
|
|
4
|
+
const runtimeGuardApi = runtimeGuard as {
|
|
6
5
|
scanToolCall: (
|
|
7
6
|
toolName: string,
|
|
8
7
|
params: Record<string, unknown>,
|
|
@@ -14,6 +13,14 @@ const runtimeGuard = require("../src/runtime-guard.js") as {
|
|
|
14
13
|
runId?: string;
|
|
15
14
|
toolCallId?: string;
|
|
16
15
|
agentId?: string;
|
|
16
|
+
policy?: {
|
|
17
|
+
id?: string;
|
|
18
|
+
allowed_tools?: string[];
|
|
19
|
+
blocked_tools?: string[];
|
|
20
|
+
max_network_scope?: "none" | "internal-only" | "external-ok";
|
|
21
|
+
secret_bearing_context?: boolean;
|
|
22
|
+
memory_write_permission?: boolean;
|
|
23
|
+
};
|
|
17
24
|
},
|
|
18
25
|
) => {
|
|
19
26
|
blocked: boolean;
|
|
@@ -35,6 +42,14 @@ type PluginHookToolContext = {
|
|
|
35
42
|
runId?: string;
|
|
36
43
|
toolName: string;
|
|
37
44
|
toolCallId?: string;
|
|
45
|
+
policy?: {
|
|
46
|
+
id?: string;
|
|
47
|
+
allowed_tools?: string[];
|
|
48
|
+
blocked_tools?: string[];
|
|
49
|
+
max_network_scope?: "none" | "internal-only" | "external-ok";
|
|
50
|
+
secret_bearing_context?: boolean;
|
|
51
|
+
memory_write_permission?: boolean;
|
|
52
|
+
};
|
|
38
53
|
};
|
|
39
54
|
|
|
40
55
|
function resolveMode(pluginConfig?: Record<string, unknown>): GuardMode | undefined {
|
|
@@ -54,7 +69,7 @@ function beforeToolCall(
|
|
|
54
69
|
ctx: PluginHookToolContext,
|
|
55
70
|
api: OpenClawPluginApi,
|
|
56
71
|
) {
|
|
57
|
-
const result =
|
|
72
|
+
const result = runtimeGuardApi.scanToolCall(event.toolName, event.params, {
|
|
58
73
|
mode: resolveMode(api.pluginConfig),
|
|
59
74
|
auditLog: resolveAuditLog(api.pluginConfig),
|
|
60
75
|
sessionKey: ctx.sessionKey,
|
|
@@ -62,6 +77,7 @@ function beforeToolCall(
|
|
|
62
77
|
runId: ctx.runId ?? event.runId,
|
|
63
78
|
toolCallId: ctx.toolCallId ?? event.toolCallId,
|
|
64
79
|
agentId: ctx.agentId,
|
|
80
|
+
policy: ctx.policy,
|
|
65
81
|
});
|
|
66
82
|
|
|
67
83
|
if (!result.blocked) return;
|
|
@@ -83,7 +99,7 @@ const plugin = {
|
|
|
83
99
|
{ priority: 90 },
|
|
84
100
|
);
|
|
85
101
|
api.logger.info(
|
|
86
|
-
"guard-scanner registered OpenClaw before_tool_call hook (
|
|
102
|
+
"guard-scanner registered OpenClaw before_tool_call hook (stable: v2026.3.12, regression lane: v2026.3.8).",
|
|
87
103
|
);
|
|
88
104
|
},
|
|
89
105
|
};
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "guard-scanner",
|
|
3
3
|
"name": "guard-scanner",
|
|
4
|
-
"description": "Runtime guard plugin for OpenClaw before_tool_call enforcement.",
|
|
5
|
-
"version": "
|
|
4
|
+
"description": "Runtime guard plugin for OpenClaw before_tool_call enforcement with capability-scoped policy rationale.",
|
|
5
|
+
"version": "16.0.0",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|
package/package.json
CHANGED
|
@@ -1,35 +1,71 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guava-parity/guard-scanner",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.0.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
7
7
|
},
|
|
8
|
-
"description": "Agent Skill Security Scanner - ASI Sanctuary Enforcer (
|
|
8
|
+
"description": "Agent Skill Security Scanner - ASI Sanctuary Enforcer (v16)",
|
|
9
9
|
"openclaw": {
|
|
10
10
|
"extensions": [
|
|
11
11
|
"./dist/openclaw-plugin.mjs"
|
|
12
12
|
]
|
|
13
13
|
},
|
|
14
|
-
"main": "
|
|
14
|
+
"main": "./dist/index.cjs",
|
|
15
|
+
"module": "./dist/index.mjs",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.mjs",
|
|
21
|
+
"require": "./dist/index.cjs",
|
|
22
|
+
"default": "./dist/index.mjs"
|
|
23
|
+
},
|
|
24
|
+
"./plugin": {
|
|
25
|
+
"types": "./dist/openclaw-plugin.d.mts",
|
|
26
|
+
"import": "./dist/openclaw-plugin.mjs",
|
|
27
|
+
"require": "./dist/openclaw-plugin.cjs",
|
|
28
|
+
"default": "./dist/openclaw-plugin.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./mcp": {
|
|
31
|
+
"types": "./dist/mcp-server.d.ts",
|
|
32
|
+
"import": "./dist/mcp-server.mjs",
|
|
33
|
+
"require": "./dist/mcp-server.cjs",
|
|
34
|
+
"default": "./dist/mcp-server.mjs"
|
|
35
|
+
},
|
|
36
|
+
"./types": {
|
|
37
|
+
"types": "./dist/types.d.ts",
|
|
38
|
+
"default": "./dist/types.d.ts"
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json"
|
|
41
|
+
},
|
|
42
|
+
"sideEffects": [
|
|
43
|
+
"./dist/cli.cjs",
|
|
44
|
+
"./dist/openclaw-plugin.mjs",
|
|
45
|
+
"./dist/openclaw-plugin.cjs"
|
|
46
|
+
],
|
|
15
47
|
"bin": {
|
|
16
|
-
"guard-scanner": "
|
|
48
|
+
"guard-scanner": "dist/cli.cjs"
|
|
17
49
|
},
|
|
18
50
|
"scripts": {
|
|
19
|
-
"build
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"test
|
|
29
|
-
"test:
|
|
30
|
-
"test:
|
|
31
|
-
"
|
|
32
|
-
"
|
|
51
|
+
"build": "tsup --config tsup.config.ts",
|
|
52
|
+
"build:plugin": "npm run build",
|
|
53
|
+
"benchmark": "tsx scripts/benchmark.ts --write-ledgers",
|
|
54
|
+
"check:upstream": "tsx scripts/check-openclaw-upstream.ts",
|
|
55
|
+
"check:tarball": "tsx scripts/validate-tarball.ts",
|
|
56
|
+
"scan": "tsx src/cli.ts",
|
|
57
|
+
"lint": "tsx scripts/lint.ts",
|
|
58
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
59
|
+
"release:gate": "npm run build && npm run benchmark && tsx scripts/generate-capabilities.ts && tsx scripts/release-gate.ts && tsx scripts/validate-tarball.ts",
|
|
60
|
+
"test": "npm run build && npm run benchmark && tsx scripts/generate-capabilities.ts && tsx scripts/verify-capabilities.ts && tsx scripts/test-quality-gate.ts && tsx --test test/*.test.ts",
|
|
61
|
+
"test:core": "tsx --test test/scanner.test.ts test/patterns.test.ts",
|
|
62
|
+
"test:contracts": "npm run build:plugin && tsx scripts/release-gate.ts && tsx --test test/finding-schema.test.ts test/mcp.test.ts test/e2e-mcp.test.ts test/openclaw-plugin-compat.test.ts test/stale-claims.test.ts test/openclaw-upstream-check.test.ts",
|
|
63
|
+
"test:corpus": "tsx scripts/corpus-metrics.ts --check",
|
|
64
|
+
"test:perf": "tsx scripts/perf-regression.ts",
|
|
65
|
+
"test:quality": "tsx scripts/test-quality-gate.ts",
|
|
66
|
+
"test:rust-parity": "tsx scripts/rust-parity.ts",
|
|
67
|
+
"sbom": "tsx scripts/generate-sbom.ts",
|
|
68
|
+
"sync:readme": "tsx scripts/generate-capabilities.ts && tsx scripts/generate-readme-metrics.ts && tsx scripts/generate-readme-stats.ts",
|
|
33
69
|
"prepack": "npm run build:plugin && npm run release:gate"
|
|
34
70
|
},
|
|
35
71
|
"keywords": [
|
|
@@ -60,7 +96,6 @@
|
|
|
60
96
|
"homepage": "https://github.com/koatora20/guard-scanner",
|
|
61
97
|
"files": [
|
|
62
98
|
"dist/",
|
|
63
|
-
"src/",
|
|
64
99
|
"hooks/",
|
|
65
100
|
"docs/",
|
|
66
101
|
"openclaw-plugin.mts",
|
|
@@ -68,11 +103,14 @@
|
|
|
68
103
|
"SKILL.md",
|
|
69
104
|
"SECURITY.md",
|
|
70
105
|
"README.md",
|
|
106
|
+
"README_ja.md",
|
|
71
107
|
"LICENSE"
|
|
72
108
|
],
|
|
73
109
|
"devDependencies": {
|
|
74
110
|
"@types/node": "^22.0.0",
|
|
75
|
-
"openclaw": "2026.3.
|
|
111
|
+
"openclaw": "2026.3.12",
|
|
112
|
+
"tsx": "^4.20.5",
|
|
113
|
+
"tsup": "^8.5.0",
|
|
76
114
|
"typescript": "^5.7.0"
|
|
77
115
|
},
|
|
78
116
|
"dependencies": {
|