@gendigital/sage-opencode 0.10.0 → 0.11.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 (43) hide show
  1. package/README.md +5 -5
  2. package/dist/bundled-dirs.d.ts +1 -1
  3. package/dist/bundled-dirs.d.ts.map +1 -1
  4. package/dist/bundled-dirs.js +1 -1
  5. package/dist/bundled-dirs.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +42 -3
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server.cjs +31776 -0
  10. package/dist/mcp-server.cjs.map +7 -0
  11. package/dist/startup-scan.d.ts.map +1 -1
  12. package/dist/startup-scan.js +3 -2
  13. package/dist/startup-scan.js.map +1 -1
  14. package/dist/tool-handler.d.ts +1 -1
  15. package/dist/tool-handler.d.ts.map +1 -1
  16. package/dist/tool-handler.js +9 -3
  17. package/dist/tool-handler.js.map +1 -1
  18. package/package.json +5 -3
  19. package/resources/threats/agent-layer.yaml +186 -0
  20. package/resources/threats/commands.yaml +24 -53
  21. package/resources/threats/credentials.yaml +12 -20
  22. package/resources/threats/dummy.yaml +22 -33
  23. package/resources/threats/files.yaml +34 -53
  24. package/resources/threats/mac-commands.yaml +20 -47
  25. package/resources/threats/mac-credentials.yaml +4 -12
  26. package/resources/threats/mac-files.yaml +5 -15
  27. package/resources/threats/mac-obfuscation.yaml +6 -13
  28. package/resources/threats/mac-persistence.yaml +11 -20
  29. package/resources/threats/mac-supply-chain.yaml +5 -8
  30. package/resources/threats/mitre.yaml +105 -167
  31. package/resources/threats/obfuscation.yaml +7 -15
  32. package/resources/threats/persistence.yaml +10 -17
  33. package/resources/threats/prompt-injection.yaml +92 -43
  34. package/resources/threats/self-defense.yaml +8 -12
  35. package/resources/threats/supply_chain.yaml +1 -2
  36. package/resources/threats/urls.yaml +9 -14
  37. package/resources/threats/win-commands.yaml +46 -106
  38. package/resources/threats/win-credentials.yaml +14 -24
  39. package/resources/threats/win-files.yaml +10 -20
  40. package/resources/threats/win-obfuscation.yaml +21 -37
  41. package/resources/threats/win-persistence.yaml +8 -16
  42. package/resources/threats/win-supply-chain.yaml +2 -3
  43. /package/resources/{allowlists → trusted-domains}/trusted-installer-domains.yaml +0 -0
@@ -7,7 +7,6 @@
7
7
  category: secrets
8
8
  severity: critical
9
9
  confidence: 0.80
10
- action: block
11
10
  pattern: "(sk-[a-zA-Z0-9_-]{20,}|sk-proj-[a-zA-Z0-9_-]{20,}|AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{35}|ghp_[0-9a-zA-Z]{36}|gho_[0-9a-zA-Z]{36}|glpat-[0-9a-zA-Z_-]{20,}|xox[baprs]-[0-9a-zA-Z-]+)"
12
11
  match_on: [command, content]
13
12
  title: "Known API key prefix detected"
@@ -17,9 +16,8 @@
17
16
  # --- Export of credential env vars ---
18
17
  - id: "CLT-CRED-002"
19
18
  category: secrets
20
- severity: high
21
- confidence: 0.80
22
- action: require_approval
19
+ severity: warning
20
+ confidence: 0.60
23
21
  pattern: "\\bexport\\s+[A-Z_]*(API_KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH)[A-Z_]*="
24
22
  match_on: command
25
23
  title: "Export of environment variable with credential keyword"
@@ -29,9 +27,8 @@
29
27
  # --- .env file writes ---
30
28
  - id: "CLT-CRED-003"
31
29
  category: secrets
32
- severity: high
33
- confidence: 0.80
34
- action: require_approval
30
+ severity: warning
31
+ confidence: 0.60
35
32
  pattern: "(>>|>)\\s*\\.env(?!\\S*\\.(example|sample|template|dist)\\b)(\\.local|\\.production|\\.prod|\\.staging|\\.stage|\\.development|\\.dev|\\.test)?\\b"
36
33
  match_on: command
37
34
  title: "Write/append to .env file (potential credential exposure)"
@@ -41,9 +38,8 @@
41
38
  # --- Reading credential files ---
42
39
  - id: "CLT-CRED-004"
43
40
  category: secrets
44
- severity: high
45
- confidence: 0.80
46
- action: require_approval
41
+ severity: warning
42
+ confidence: 0.60
47
43
  pattern: "\\b(cat|less|more|head|tail)\\s+.*(\\.(env(?!\\S*\\.(example|sample|template|dist)\\b)(\\.(local|production|prod|staging|stage|development|dev|test))?)|credentials|\\.aws/credentials|\\.ssh/id_rsa|\\.ssh/id_ed25519|\\.netrc|\\.pgpass)"
48
44
  match_on: command
49
45
  title: "Reading credential or secret file"
@@ -53,9 +49,8 @@
53
49
  # --- Plaintext credential assignment ---
54
50
  - id: "CLT-CRED-005"
55
51
  category: secrets
56
- severity: high
57
- confidence: 0.85
58
- action: require_approval
52
+ severity: warning
53
+ confidence: 0.60
59
54
  pattern: "\\b(PASSWORD|API_SECRET|SECRET_KEY|PRIVATE_KEY|DB_PASSWORD|MYSQL_PASSWORD|POSTGRES_PASSWORD)=[\"']?[^\\s\"']{8,}"
60
55
  match_on: [command, content]
61
56
  title: "Plaintext credential assignment detected"
@@ -67,7 +62,6 @@
67
62
  category: secrets
68
63
  severity: critical
69
64
  confidence: 0.92
70
- action: block
71
65
  pattern: "(github_pat_[0-9a-zA-Z_]{22,}|SG\\.[0-9a-zA-Z_-]{22,}\\.[0-9a-zA-Z_-]{22,}|pk_live_[0-9a-zA-Z]{24,}|sk_live_[0-9a-zA-Z]{24,}|rk_live_[0-9a-zA-Z]{24,})"
72
66
  match_on: [command, content]
73
67
  title: "Long-form API key pattern detected (GitHub PAT, SendGrid, Stripe)"
@@ -77,9 +71,8 @@
77
71
  # --- Copy/move/link secret files ---
78
72
  - id: "CLT-CRED-007"
79
73
  category: secrets
80
- severity: high
81
- confidence: 0.80
82
- action: require_approval
74
+ severity: warning
75
+ confidence: 0.60
83
76
  # Protected files: .env*, .aws/credentials, .ssh/(id_rsa|id_ed25519|id_ecdsa|id_dsa),
84
77
  # .netrc, .pgpass, .npmrc, .pypirc, key.properties, .docker/config.json,
85
78
  # kubeconfig, .kube/config, master.key, credentials.yml
@@ -92,9 +85,8 @@
92
85
  # --- Archive secret files ---
93
86
  - id: "CLT-CRED-008"
94
87
  category: secrets
95
- severity: high
96
- confidence: 0.80
97
- action: require_approval
88
+ severity: warning
89
+ confidence: 0.60
98
90
  # Protected files: .env*, .aws/credentials, .ssh/(id_rsa|id_ed25519|id_ecdsa|id_dsa),
99
91
  # .netrc, .pgpass, .npmrc, .pypirc, key.properties, .docker/config.json,
100
92
  # kubeconfig, .kube/config, master.key, credentials.yml
@@ -24,7 +24,6 @@
24
24
  category: testing
25
25
  severity: critical
26
26
  confidence: 0.95
27
- action: block
28
27
  pattern: "__sage_test_deny_cmd_a75bf229__"
29
28
  match_on: command
30
29
  title: "[TEST] Canary deny command (alpha)"
@@ -35,7 +34,6 @@
35
34
  category: testing
36
35
  severity: critical
37
36
  confidence: 0.95
38
- action: block
39
37
  pattern: "__sage_test_deny_run_c3d91e4a__"
40
38
  match_on: command
41
39
  title: "[TEST] Canary deny command (bravo)"
@@ -44,9 +42,8 @@
44
42
 
45
43
  - id: "DUMMY-CMD-ASK-001"
46
44
  category: testing
47
- severity: high
48
- confidence: 0.90
49
- action: require_approval
45
+ severity: warning
46
+ confidence: 0.60
50
47
  pattern: "__sage_test_ask_cmd_8f2e6b71__"
51
48
  match_on: command
52
49
  title: "[TEST] Canary approval command (alpha)"
@@ -55,9 +52,8 @@
55
52
 
56
53
  - id: "DUMMY-CMD-ASK-002"
57
54
  category: testing
58
- severity: high
59
- confidence: 0.90
60
- action: require_approval
55
+ severity: warning
56
+ confidence: 0.60
61
57
  pattern: "__sage_test_ask_run_d4a09c53__"
62
58
  match_on: command
63
59
  title: "[TEST] Canary approval command (bravo)"
@@ -66,14 +62,14 @@
66
62
 
67
63
  - id: "DUMMY-CMD-LOG-001"
68
64
  category: testing
69
- severity: low
70
- confidence: 0.90
71
- action: log
65
+ severity: info
66
+ confidence: 0.10
72
67
  pattern: "__sage_test_log_cmd_1b7e3f82__"
73
68
  match_on: command
74
69
  title: "[TEST] Canary log-only command"
75
70
  expires_at: null
76
71
  revoked: false
72
+ flags: ["report"]
77
73
 
78
74
  # ─── File-path patterns (Write / Edit / Read / Delete tools) ────────
79
75
 
@@ -81,7 +77,6 @@
81
77
  category: testing
82
78
  severity: critical
83
79
  confidence: 0.95
84
- action: block
85
80
  pattern: "__sage_test_deny_file_e6c4a918__"
86
81
  match_on: file_path
87
82
  title: "[TEST] Canary deny file path"
@@ -90,9 +85,8 @@
90
85
 
91
86
  - id: "DUMMY-FILE-ASK-001"
92
87
  category: testing
93
- severity: high
94
- confidence: 0.90
95
- action: require_approval
88
+ severity: warning
89
+ confidence: 0.60
96
90
  pattern: "__sage_test_ask_file_52fd7b36__"
97
91
  match_on: file_path
98
92
  title: "[TEST] Canary approval file path"
@@ -101,14 +95,14 @@
101
95
 
102
96
  - id: "DUMMY-FILE-LOG-001"
103
97
  category: testing
104
- severity: low
105
- confidence: 0.90
106
- action: log
98
+ severity: info
99
+ confidence: 0.10
107
100
  pattern: "__sage_test_log_file_9a13de74__"
108
101
  match_on: file_path
109
102
  title: "[TEST] Canary log-only file path"
110
103
  expires_at: null
111
104
  revoked: false
105
+ flags: ["report"]
112
106
 
113
107
  # ─── Content patterns (Write / Edit tools — file body) ──────────────
114
108
 
@@ -116,7 +110,6 @@
116
110
  category: testing
117
111
  severity: critical
118
112
  confidence: 0.95
119
- action: block
120
113
  pattern: "__SAGE_TEST_DENY_CONTENT_3c8f15b7__"
121
114
  match_on: content
122
115
  title: "[TEST] Canary deny content"
@@ -125,9 +118,8 @@
125
118
 
126
119
  - id: "DUMMY-CONTENT-ASK-001"
127
120
  category: testing
128
- severity: high
129
- confidence: 0.90
130
- action: require_approval
121
+ severity: warning
122
+ confidence: 0.60
131
123
  pattern: "__SAGE_TEST_ASK_CONTENT_7d4ea2c9__"
132
124
  match_on: content
133
125
  title: "[TEST] Canary approval content"
@@ -136,14 +128,14 @@
136
128
 
137
129
  - id: "DUMMY-CONTENT-LOG-001"
138
130
  category: testing
139
- severity: low
140
- confidence: 0.90
141
- action: log
131
+ severity: info
132
+ confidence: 0.10
142
133
  pattern: "__SAGE_TEST_LOG_CONTENT_f0b683d1__"
143
134
  match_on: content
144
135
  title: "[TEST] Canary log-only content"
145
136
  expires_at: null
146
137
  revoked: false
138
+ flags: ["report"]
147
139
 
148
140
  # ─── URL patterns (WebFetch / Bash / Write content) ─────────────────
149
141
  # Uses .test TLD (RFC 2606 reserved, never resolves) for safety.
@@ -152,7 +144,6 @@
152
144
  category: testing
153
145
  severity: critical
154
146
  confidence: 0.95
155
- action: block
156
147
  pattern: "sage-canary-deny-4e91ca37\\.test"
157
148
  match_on: url
158
149
  title: "[TEST] Canary deny URL"
@@ -161,9 +152,8 @@
161
152
 
162
153
  - id: "DUMMY-URL-ASK-001"
163
154
  category: testing
164
- severity: high
165
- confidence: 0.90
166
- action: require_approval
155
+ severity: warning
156
+ confidence: 0.60
167
157
  pattern: "sage-canary-ask-b26d80f5\\.test"
168
158
  match_on: url
169
159
  title: "[TEST] Canary approval URL"
@@ -172,14 +162,14 @@
172
162
 
173
163
  - id: "DUMMY-URL-LOG-001"
174
164
  category: testing
175
- severity: low
176
- confidence: 0.90
177
- action: log
165
+ severity: info
166
+ confidence: 0.10
178
167
  pattern: "sage-canary-log-65f3d7a4\\.test"
179
168
  match_on: url
180
169
  title: "[TEST] Canary log-only URL"
181
170
  expires_at: null
182
171
  revoked: false
172
+ flags: ["report"]
183
173
 
184
174
  # ─── Domain pattern (verifies domain→url routing in heuristics) ─────
185
175
 
@@ -187,7 +177,6 @@
187
177
  category: testing
188
178
  severity: critical
189
179
  confidence: 0.95
190
- action: block
191
180
  pattern: "sage-canary-domain-0c82eb16\\.test"
192
181
  match_on: domain
193
182
  title: "[TEST] Canary deny domain"
@@ -8,7 +8,6 @@
8
8
  category: secrets
9
9
  severity: critical
10
10
  confidence: 0.95
11
- action: block
12
11
  pattern: "(/etc/passwd|/etc/shadow|/etc/sudoers)"
13
12
  match_on: file_path
14
13
  title: "Access system authentication file"
@@ -20,7 +19,6 @@
20
19
  category: secrets
21
20
  severity: critical
22
21
  confidence: 0.95
23
- action: block
24
22
  pattern: "\\.ssh/authorized_keys"
25
23
  match_on: file_path
26
24
  title: "Access SSH authorized_keys (unauthorized access persistence)"
@@ -30,9 +28,8 @@
30
28
  # --- SSH private keys and config ---
31
29
  - id: "CLT-FILE-003"
32
30
  category: secrets
33
- severity: high
34
- confidence: 0.90
35
- action: require_approval
31
+ severity: warning
32
+ confidence: 0.60
36
33
  pattern: "\\.ssh/(id_rsa|id_ed25519|id_ecdsa|id_dsa|config)$"
37
34
  match_on: file_path
38
35
  title: "Access SSH key or config file"
@@ -42,9 +39,8 @@
42
39
  # --- Shell RC files ---
43
40
  - id: "CLT-FILE-004"
44
41
  category: tool
45
- severity: high
46
- confidence: 0.85
47
- action: require_approval
42
+ severity: warning
43
+ confidence: 0.60
48
44
  pattern: "\\.(bashrc|zshrc|profile|bash_profile|zprofile|zshenv)$"
49
45
  match_on: file_path
50
46
  title: "Access shell RC file (persistence mechanism)"
@@ -54,9 +50,8 @@
54
50
  # --- Cron directories ---
55
51
  - id: "CLT-FILE-006"
56
52
  category: tool
57
- severity: high
58
- confidence: 0.85
59
- action: require_approval
53
+ severity: warning
54
+ confidence: 0.60
60
55
  pattern: "(/etc/cron\\.(d|daily|hourly|weekly|monthly)/|/var/spool/cron/)"
61
56
  match_on: file_path
62
57
  title: "Access cron directory"
@@ -66,9 +61,8 @@
66
61
  # --- systemd unit files ---
67
62
  - id: "CLT-FILE-007"
68
63
  category: tool
69
- severity: high
70
- confidence: 0.85
71
- action: require_approval
64
+ severity: warning
65
+ confidence: 0.60
72
66
  pattern: "/etc/systemd/system/"
73
67
  match_on: file_path
74
68
  title: "Access systemd service unit file"
@@ -82,9 +76,8 @@
82
76
  # targeted than command-string matching.
83
77
  - id: "CLT-FILE-008"
84
78
  category: secrets
85
- severity: high
86
- confidence: 0.85
87
- action: require_approval
79
+ severity: warning
80
+ confidence: 0.60
88
81
  pattern: "((^|[\\/\\\\])\\.env(\\.local|\\.production|\\.prod|\\.staging|\\.stage|\\.development|\\.dev|\\.test)?|\\.aws/credentials|\\.netrc|\\.pgpass)$"
89
82
  match_on: file_path
90
83
  title: "Access credential or environment file"
@@ -94,9 +87,8 @@
94
87
  # --- Git hooks ---
95
88
  - id: "CLT-FILE-009"
96
89
  category: tool
97
- severity: high
98
- confidence: 0.85
99
- action: require_approval
90
+ severity: warning
91
+ confidence: 0.60
100
92
  pattern: "\\.git/hooks/"
101
93
  match_on: file_path
102
94
  title: "Access git hook (potential code execution on git events)"
@@ -106,9 +98,8 @@
106
98
  # --- Android signing files ---
107
99
  - id: "CLT-FILE-010"
108
100
  category: secrets
109
- severity: high
110
- confidence: 0.85
111
- action: require_approval
101
+ severity: warning
102
+ confidence: 0.60
112
103
  pattern: "(key\\.properties|release\\.keystore|\\.jks|\\.keystore)$"
113
104
  match_on: file_path
114
105
  title: "Access Android signing file"
@@ -118,9 +109,8 @@
118
109
  # --- Firebase config files ---
119
110
  - id: "CLT-FILE-011"
120
111
  category: secrets
121
- severity: high
122
- confidence: 0.85
123
- action: require_approval
112
+ severity: warning
113
+ confidence: 0.60
124
114
  pattern: "(google-services\\.json|GoogleService-Info\\.plist)$"
125
115
  match_on: file_path
126
116
  title: "Access Firebase configuration file"
@@ -130,9 +120,8 @@
130
120
  # --- Cloud provider credential files ---
131
121
  - id: "CLT-FILE-012"
132
122
  category: secrets
133
- severity: high
134
- confidence: 0.85
135
- action: require_approval
123
+ severity: warning
124
+ confidence: 0.60
136
125
  pattern: "(application_default_credentials\\.json|\\.azure/(accessTokens|msal_token_cache)\\.json|\\.config/doctl/config\\.yaml)$"
137
126
  match_on: file_path
138
127
  title: "Access cloud provider credential file"
@@ -142,9 +131,8 @@
142
131
  # --- Package manager tokens ---
143
132
  - id: "CLT-FILE-013"
144
133
  category: secrets
145
- severity: high
146
- confidence: 0.85
147
- action: require_approval
134
+ severity: warning
135
+ confidence: 0.60
148
136
  pattern: "(\\.npmrc|\\.pypirc|\\.gem/credentials|\\.cargo/credentials\\.toml|\\.docker/config\\.json)$"
149
137
  match_on: file_path
150
138
  title: "Access package manager credential file"
@@ -154,9 +142,8 @@
154
142
  # --- Terraform state files ---
155
143
  - id: "CLT-FILE-014"
156
144
  category: secrets
157
- severity: high
158
- confidence: 0.85
159
- action: require_approval
145
+ severity: warning
146
+ confidence: 0.60
160
147
  pattern: "\\.(tfstate(\\.backup)?|tfvars(\\.json)?)$"
161
148
  match_on: file_path
162
149
  title: "Access Terraform state or variables file"
@@ -166,9 +153,8 @@
166
153
  # --- Secrets/vault files ---
167
154
  - id: "CLT-FILE-015"
168
155
  category: secrets
169
- severity: high
170
- confidence: 0.85
171
- action: require_approval
156
+ severity: warning
157
+ confidence: 0.60
172
158
  pattern: "(master\\.key|credentials\\.yml\\.enc|secrets\\.yml|vault\\.yml|\\.vault-pass|\\.vault-token)$"
173
159
  match_on: file_path
174
160
  title: "Access secrets or vault file"
@@ -181,9 +167,8 @@
181
167
  # would miss private key exfiltration.
182
168
  - id: "CLT-FILE-016"
183
169
  category: secrets
184
- severity: high
185
- confidence: 0.85
186
- action: require_approval
170
+ severity: warning
171
+ confidence: 0.60
187
172
  pattern: "\\.(pem|p12|pfx|p8)$"
188
173
  match_on: file_path
189
174
  title: "Access private key or certificate file"
@@ -193,9 +178,8 @@
193
178
  # --- Kubeconfig ---
194
179
  - id: "CLT-FILE-017"
195
180
  category: secrets
196
- severity: high
197
- confidence: 0.85
198
- action: require_approval
181
+ severity: warning
182
+ confidence: 0.60
199
183
  pattern: "(\\.kube/config|kubeconfig(\\.yaml|\\.yml)?)$"
200
184
  match_on: file_path
201
185
  title: "Access Kubernetes configuration file"
@@ -205,9 +189,8 @@
205
189
  # --- Build system credential files ---
206
190
  - id: "CLT-FILE-018"
207
191
  category: secrets
208
- severity: high
209
- confidence: 0.85
210
- action: require_approval
192
+ severity: warning
193
+ confidence: 0.60
211
194
  pattern: "(\\.m2/settings\\.xml|gradle\\.properties)$"
212
195
  match_on: file_path
213
196
  title: "Access build system credential file"
@@ -217,9 +200,8 @@
217
200
  # --- Shell/REPL history files ---
218
201
  - id: "CLT-FILE-019"
219
202
  category: secrets
220
- severity: high
221
- confidence: 0.85
222
- action: require_approval
203
+ severity: warning
204
+ confidence: 0.60
223
205
  pattern: "\\.(bash_history|zsh_history|mysql_history|python_history|node_repl_history|psql_history|irb_history)$"
224
206
  match_on: file_path
225
207
  title: "Access shell or REPL history file"
@@ -229,9 +211,8 @@
229
211
  # --- JetBrains IDE database credentials ---
230
212
  - id: "CLT-FILE-020"
231
213
  category: secrets
232
- severity: high
233
- confidence: 0.85
234
- action: require_approval
214
+ severity: warning
215
+ confidence: 0.60
235
216
  pattern: "\\.idea/dataSources(\\.xml|/)"
236
217
  match_on: file_path
237
218
  title: "Access JetBrains IDE database credential file"