@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.
Files changed (61) hide show
  1. package/README.md +208 -42
  2. package/README_ja.md +252 -0
  3. package/SKILL.md +40 -11
  4. package/dist/cli.cjs +5997 -0
  5. package/dist/cli.d.mts +1 -0
  6. package/dist/cli.d.ts +1 -0
  7. package/dist/cli.mjs +6003 -0
  8. package/dist/index.cjs +4825 -0
  9. package/dist/index.d.mts +17 -0
  10. package/dist/index.d.ts +17 -0
  11. package/dist/index.mjs +4798 -0
  12. package/dist/mcp-server.cjs +4756 -0
  13. package/dist/mcp-server.d.mts +1 -0
  14. package/dist/mcp-server.d.ts +1 -0
  15. package/dist/mcp-server.mjs +4767 -0
  16. package/dist/openclaw-plugin.cjs +4863 -0
  17. package/dist/openclaw-plugin.d.mts +11 -0
  18. package/dist/openclaw-plugin.d.ts +11 -0
  19. package/dist/openclaw-plugin.mjs +4847 -34
  20. package/dist/types.cjs +18 -0
  21. package/dist/types.d.mts +215 -0
  22. package/dist/types.d.ts +215 -0
  23. package/dist/types.mjs +1 -0
  24. package/docs/data/benchmark-ledger.json +1428 -0
  25. package/docs/data/corpus-metrics.json +3 -3
  26. package/docs/data/fp-ledger.json +18 -0
  27. package/docs/data/quality-contract.json +36 -0
  28. package/docs/generated/openclaw-upstream-status.json +13 -13
  29. package/docs/openclaw-compatibility-audit.md +3 -2
  30. package/docs/openclaw-continuous-compatibility-plan.md +2 -1
  31. package/docs/spec/capabilities.json +137 -5
  32. package/docs/spec/plugin-trust.json +11 -0
  33. package/hooks/{context.js → context.ts} +1 -0
  34. package/openclaw-plugin.mts +21 -5
  35. package/openclaw.plugin.json +2 -2
  36. package/package.json +58 -20
  37. package/src/asset-auditor.js +0 -508
  38. package/src/ci-reporter.js +0 -135
  39. package/src/cli.js +0 -434
  40. package/src/core/content-loader.js +0 -42
  41. package/src/core/inventory.js +0 -73
  42. package/src/core/report-adapters.js +0 -171
  43. package/src/core/risk-engine.js +0 -93
  44. package/src/core/rule-registry.js +0 -73
  45. package/src/core/semantic-validators.js +0 -85
  46. package/src/finding-schema.js +0 -191
  47. package/src/hooks/context.ts +0 -49
  48. package/src/html-template.js +0 -239
  49. package/src/ioc-db.js +0 -54
  50. package/src/mcp-server.js +0 -653
  51. package/src/openclaw-upstream.js +0 -128
  52. package/src/patterns.js +0 -629
  53. package/src/policy-engine.js +0 -32
  54. package/src/quarantine.js +0 -41
  55. package/src/runtime-guard.js +0 -384
  56. package/src/scanner.js +0 -1042
  57. package/src/skill-crawler.js +0 -254
  58. package/src/threat-model.js +0 -50
  59. package/src/validation-layer.js +0 -39
  60. package/src/vt-client.js +0 -202
  61. package/src/watcher.js +0 -170
@@ -1,8 +1,8 @@
1
1
  {
2
- "generatedAt": "2026-03-10T10:00:34.307Z",
2
+ "generatedAt": "2026-03-13T14:27:53.074Z",
3
3
  "corpus": {
4
- "benign": 3,
5
- "malicious": 3
4
+ "benign": 17,
5
+ "malicious": 15
6
6
  },
7
7
  "precision": 1,
8
8
  "recall": 1,
@@ -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-11T19:33:06.437Z",
3
- "pinnedVersion": "2026.3.8",
4
- "latestVersion": "2026.3.8",
5
- "latestPublishedAt": "2026-03-09T07:44:44.237Z",
6
- "registryModifiedAt": "2026-03-09T07:50:30.149Z",
7
- "githubLatestVersion": "2026.3.8",
8
- "githubPublishedAt": "2026-03-09T07:49:27Z",
9
- "githubUrl": "https://github.com/openclaw/openclaw/releases/tag/v2026.3.8",
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.8",
12
- "githubLatestVersion": "2026.3.8",
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.8",
18
- "latestVersion": "2026.3.8",
19
- "latestPublishedAt": "2026-03-09T07:44:44.237Z",
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
- Target baseline: OpenClaw `v2026.3.8`
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` (npm + GitHub Releases parity) |
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,7 +1,8 @@
1
1
  # guard-scanner Continuous OpenClaw Compatibility Plan
2
2
 
3
3
  Date: 2026-03-12
4
- Baseline: OpenClaw `2026.3.8`
4
+ Stable target: OpenClaw `2026.3.12`
5
+ Baseline regression lane: OpenClaw `2026.3.8`
5
6
 
6
7
  ## Goal
7
8
 
@@ -1,12 +1,12 @@
1
1
  {
2
- "package_version": "15.0.0",
3
- "plugin_version": "15.0.0",
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": 23,
7
+ "test_file_count": 28,
8
8
  "dependencies_runtime": 1,
9
- "dependencies_dev": 3,
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
  }
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 1,
3
+ "enforce": true,
4
+ "entries": [
5
+ {
6
+ "path": "./dist/openclaw-plugin.mjs",
7
+ "issuer": "guard-scanner-release-gate",
8
+ "source": "local-build"
9
+ }
10
+ ]
11
+ }
@@ -1,3 +1,4 @@
1
+ // @ts-nocheck
1
2
  /**
2
3
  * guard-scanner Context Engine Hooks — OpenClaw Lifecycle Integration
3
4
  *
@@ -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 require = createRequire(import.meta.url);
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 = runtimeGuard.scanToolCall(event.toolName, event.params, {
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 (validated for v2026.3.8).",
102
+ "guard-scanner registered OpenClaw before_tool_call hook (stable: v2026.3.12, regression lane: v2026.3.8).",
87
103
  );
88
104
  },
89
105
  };
@@ -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": "15.0.0",
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": "15.0.0",
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 (v15)",
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": "src/scanner.js",
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": "src/cli.js"
48
+ "guard-scanner": "dist/cli.cjs"
17
49
  },
18
50
  "scripts": {
19
- "build:plugin": "npx tsc -p tsconfig.build.json",
20
- "check:upstream": "node scripts/check-openclaw-upstream.js",
21
- "scan": "node src/cli.js",
22
- "lint": "node scripts/lint.js",
23
- "typecheck": "npx tsc --noEmit -p tsconfig.json",
24
- "release:gate": "node scripts/release-gate.js",
25
- "test": "npm run lint && npm run typecheck && npm run build:plugin && node scripts/generate-capabilities.js && node scripts/generate-readme-metrics.js && node scripts/generate-readme-stats.js && node scripts/verify-capabilities.js && node scripts/test-quality-gate.js && node scripts/corpus-metrics.js --check && node scripts/perf-regression.js && node scripts/release-gate.js && node --test test/*.test.js",
26
- "test:core": "node --test test/scanner.test.js test/patterns.test.js",
27
- "test:contracts": "npm run build:plugin && node scripts/release-gate.js && node --test test/finding-schema.test.js test/mcp.test.js test/e2e-mcp.test.js test/openclaw-plugin-compat.test.js test/stale-claims.test.js test/openclaw-upstream-check.test.js",
28
- "test:corpus": "node scripts/corpus-metrics.js --check",
29
- "test:perf": "node scripts/perf-regression.js",
30
- "test:quality": "node scripts/test-quality-gate.js",
31
- "sbom": "node scripts/generate-sbom.js",
32
- "sync:readme": "node scripts/generate-capabilities.js && node scripts/generate-readme-metrics.js && node scripts/generate-readme-stats.js",
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.8",
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": {