@sponsio/sdk 0.1.0-alpha.3 → 0.2.0-alpha.10

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 (243) hide show
  1. package/bin/sponsio.cjs +11 -0
  2. package/contracts/benchmark/agentdojo.yaml +551 -0
  3. package/contracts/benchmark/odcv_bench.yaml +393 -0
  4. package/contracts/benchmark/redcode_exec.yaml +488 -0
  5. package/contracts/benchmark/swebench.yaml +176 -0
  6. package/contracts/benchmark/tau2_bench.yaml +984 -0
  7. package/contracts/capability/credentials.yaml +8 -8
  8. package/contracts/capability/database.yaml +6 -6
  9. package/contracts/capability/destructive.yaml +213 -0
  10. package/contracts/capability/factual-claims.yaml +79 -0
  11. package/contracts/capability/filesystem-strict.yaml +4 -4
  12. package/contracts/capability/filesystem.yaml +9 -9
  13. package/contracts/capability/host-config-integrity.yaml +318 -0
  14. package/contracts/capability/self-modify.yaml +260 -9
  15. package/contracts/capability/shell.yaml +43 -41
  16. package/contracts/capability/subagent.yaml +5 -5
  17. package/contracts/incident/claude-code-secret-bypass.yaml +57 -26
  18. package/contracts/incident/cursor-railway-wipe.yaml +63 -7
  19. package/contracts/incident/mcp-composition.yaml +12 -12
  20. package/contracts/incident/openclaw.yaml +47 -92
  21. package/contracts/incident/subagent-escape.yaml +4 -4
  22. package/contracts/premium/.gitkeep +5 -6
  23. package/dist/cli/check.d.ts +2 -0
  24. package/dist/cli/check.d.ts.map +1 -0
  25. package/dist/cli/check.js +283 -0
  26. package/dist/cli/check.js.map +1 -0
  27. package/dist/cli/cli.d.ts +25 -0
  28. package/dist/cli/cli.d.ts.map +1 -0
  29. package/dist/cli/cli.js +491 -0
  30. package/dist/cli/cli.js.map +1 -0
  31. package/dist/cli/config.d.ts +88 -0
  32. package/dist/cli/config.d.ts.map +1 -0
  33. package/dist/cli/config.js +243 -0
  34. package/dist/cli/config.js.map +1 -0
  35. package/dist/cli/demo.d.ts +12 -0
  36. package/dist/cli/demo.d.ts.map +1 -0
  37. package/dist/cli/demo.js +350 -0
  38. package/dist/cli/demo.js.map +1 -0
  39. package/dist/cli/doctor.d.ts +11 -0
  40. package/dist/cli/doctor.d.ts.map +1 -0
  41. package/dist/cli/doctor.js +201 -0
  42. package/dist/cli/doctor.js.map +1 -0
  43. package/dist/cli/eval.d.ts +2 -0
  44. package/dist/cli/eval.d.ts.map +1 -0
  45. package/dist/cli/eval.js +361 -0
  46. package/dist/cli/eval.js.map +1 -0
  47. package/dist/cli/explain.d.ts +2 -0
  48. package/dist/cli/explain.d.ts.map +1 -0
  49. package/dist/cli/explain.js +266 -0
  50. package/dist/cli/explain.js.map +1 -0
  51. package/dist/cli/export-sessions.d.ts +2 -0
  52. package/dist/cli/export-sessions.d.ts.map +1 -0
  53. package/dist/cli/export-sessions.js +182 -0
  54. package/dist/cli/export-sessions.js.map +1 -0
  55. package/dist/cli/export.d.ts +2 -0
  56. package/dist/cli/export.d.ts.map +1 -0
  57. package/dist/cli/export.js +222 -0
  58. package/dist/cli/export.js.map +1 -0
  59. package/dist/cli/extractors/common.d.ts +27 -0
  60. package/dist/cli/extractors/common.d.ts.map +1 -0
  61. package/dist/cli/extractors/common.js +107 -0
  62. package/dist/cli/extractors/common.js.map +1 -0
  63. package/dist/cli/extractors/generic.d.ts +37 -0
  64. package/dist/cli/extractors/generic.d.ts.map +1 -0
  65. package/dist/cli/extractors/generic.js +185 -0
  66. package/dist/cli/extractors/generic.js.map +1 -0
  67. package/dist/cli/extractors/langchain.d.ts +18 -0
  68. package/dist/cli/extractors/langchain.d.ts.map +1 -0
  69. package/dist/cli/extractors/langchain.js +86 -0
  70. package/dist/cli/extractors/langchain.js.map +1 -0
  71. package/dist/cli/extractors/vercel.d.ts +17 -0
  72. package/dist/cli/extractors/vercel.d.ts.map +1 -0
  73. package/dist/cli/extractors/vercel.js +46 -0
  74. package/dist/cli/extractors/vercel.js.map +1 -0
  75. package/dist/cli/index.d.ts +38 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +146 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/cli/init.d.ts +2 -0
  80. package/dist/cli/init.d.ts.map +1 -0
  81. package/dist/cli/init.js +177 -0
  82. package/dist/cli/init.js.map +1 -0
  83. package/dist/cli/mode.d.ts +2 -0
  84. package/dist/cli/mode.d.ts.map +1 -0
  85. package/dist/cli/mode.js +71 -0
  86. package/dist/cli/mode.js.map +1 -0
  87. package/dist/cli/onboard.d.ts +88 -0
  88. package/dist/cli/onboard.d.ts.map +1 -0
  89. package/dist/cli/onboard.js +758 -0
  90. package/dist/cli/onboard.js.map +1 -0
  91. package/dist/cli/otlp.d.ts +27 -0
  92. package/dist/cli/otlp.d.ts.map +1 -0
  93. package/dist/cli/otlp.js +79 -0
  94. package/dist/cli/otlp.js.map +1 -0
  95. package/dist/cli/package.json +1 -0
  96. package/dist/cli/packs.d.ts +16 -0
  97. package/dist/cli/packs.d.ts.map +1 -0
  98. package/dist/cli/packs.js +190 -0
  99. package/dist/cli/packs.js.map +1 -0
  100. package/dist/cli/patterns.d.ts +16 -0
  101. package/dist/cli/patterns.d.ts.map +1 -0
  102. package/dist/cli/patterns.js +136 -0
  103. package/dist/cli/patterns.js.map +1 -0
  104. package/dist/cli/prompt.d.ts +2 -0
  105. package/dist/cli/prompt.d.ts.map +1 -0
  106. package/dist/cli/prompt.js +54 -0
  107. package/dist/cli/prompt.js.map +1 -0
  108. package/dist/cli/replay.d.ts +2 -0
  109. package/dist/cli/replay.d.ts.map +1 -0
  110. package/dist/cli/replay.js +196 -0
  111. package/dist/cli/replay.js.map +1 -0
  112. package/dist/cli/report.d.ts +57 -0
  113. package/dist/cli/report.d.ts.map +1 -0
  114. package/dist/cli/report.js +298 -0
  115. package/dist/cli/report.js.map +1 -0
  116. package/dist/cli/scan.d.ts +2 -0
  117. package/dist/cli/scan.d.ts.map +1 -0
  118. package/dist/cli/scan.js +172 -0
  119. package/dist/cli/scan.js.map +1 -0
  120. package/dist/cli/skill.d.ts +15 -0
  121. package/dist/cli/skill.d.ts.map +1 -0
  122. package/dist/cli/skill.js +131 -0
  123. package/dist/cli/skill.js.map +1 -0
  124. package/dist/cli/tokens.d.ts +31 -0
  125. package/dist/cli/tokens.d.ts.map +1 -0
  126. package/dist/cli/tokens.js +73 -0
  127. package/dist/cli/tokens.js.map +1 -0
  128. package/dist/cli/types.d.ts +46 -0
  129. package/dist/cli/types.d.ts.map +1 -0
  130. package/dist/cli/types.js +3 -0
  131. package/dist/cli/types.js.map +1 -0
  132. package/dist/cli/validate.d.ts +19 -0
  133. package/dist/cli/validate.d.ts.map +1 -0
  134. package/dist/cli/validate.js +205 -0
  135. package/dist/cli/validate.js.map +1 -0
  136. package/dist/cli/zod.d.ts +36 -0
  137. package/dist/cli/zod.d.ts.map +1 -0
  138. package/dist/cli/zod.js +226 -0
  139. package/dist/cli/zod.js.map +1 -0
  140. package/dist/cloud/client.d.ts +76 -0
  141. package/dist/cloud/client.d.ts.map +1 -0
  142. package/dist/cloud/client.js +204 -0
  143. package/dist/cloud/client.js.map +1 -0
  144. package/dist/cloud/evidence.d.ts +108 -0
  145. package/dist/cloud/evidence.d.ts.map +1 -0
  146. package/dist/cloud/evidence.js +184 -0
  147. package/dist/cloud/evidence.js.map +1 -0
  148. package/dist/cloud/privacy.d.ts +67 -0
  149. package/dist/cloud/privacy.d.ts.map +1 -0
  150. package/dist/cloud/privacy.js +170 -0
  151. package/dist/cloud/privacy.js.map +1 -0
  152. package/dist/cloud/view-model.d.ts +49 -0
  153. package/dist/cloud/view-model.d.ts.map +1 -0
  154. package/dist/cloud/view-model.js +172 -0
  155. package/dist/cloud/view-model.js.map +1 -0
  156. package/dist/contract.d.ts +13 -13
  157. package/dist/contract.d.ts.map +1 -1
  158. package/dist/contract.js +21 -21
  159. package/dist/contract.js.map +1 -1
  160. package/dist/core/config-loader.d.ts +1 -1
  161. package/dist/core/config-loader.d.ts.map +1 -1
  162. package/dist/core/config-loader.js +116 -26
  163. package/dist/core/config-loader.js.map +1 -1
  164. package/dist/core/evaluator.d.ts +11 -1
  165. package/dist/core/evaluator.d.ts.map +1 -1
  166. package/dist/core/evaluator.js +275 -13
  167. package/dist/core/evaluator.js.map +1 -1
  168. package/dist/core/formula.d.ts +76 -17
  169. package/dist/core/formula.d.ts.map +1 -1
  170. package/dist/core/formula.js +95 -1
  171. package/dist/core/formula.js.map +1 -1
  172. package/dist/core/grounding.d.ts +86 -3
  173. package/dist/core/grounding.d.ts.map +1 -1
  174. package/dist/core/grounding.js +485 -143
  175. package/dist/core/grounding.js.map +1 -1
  176. package/dist/core/nl-parser.d.ts +2 -2
  177. package/dist/core/nl-parser.d.ts.map +1 -1
  178. package/dist/core/nl-parser.js +690 -42
  179. package/dist/core/nl-parser.js.map +1 -1
  180. package/dist/core/pack-loader.d.ts.map +1 -1
  181. package/dist/core/pack-loader.js +14 -2
  182. package/dist/core/pack-loader.js.map +1 -1
  183. package/dist/core/parser.d.ts.map +1 -1
  184. package/dist/core/parser.js +30 -1
  185. package/dist/core/parser.js.map +1 -1
  186. package/dist/core/pattern-factory.d.ts +4 -4
  187. package/dist/core/pattern-factory.d.ts.map +1 -1
  188. package/dist/core/pattern-factory.js +59 -4
  189. package/dist/core/pattern-factory.js.map +1 -1
  190. package/dist/core/patterns.d.ts +196 -5
  191. package/dist/core/patterns.d.ts.map +1 -1
  192. package/dist/core/patterns.js +400 -13
  193. package/dist/core/patterns.js.map +1 -1
  194. package/dist/core/session-log.d.ts.map +1 -1
  195. package/dist/core/session-log.js +20 -1
  196. package/dist/core/session-log.js.map +1 -1
  197. package/dist/core/spans.d.ts +1 -1
  198. package/dist/core/spans.d.ts.map +1 -1
  199. package/dist/core/spans.js.map +1 -1
  200. package/dist/core/sto.d.ts +30 -66
  201. package/dist/core/sto.d.ts.map +1 -1
  202. package/dist/core/sto.js +39 -100
  203. package/dist/core/sto.js.map +1 -1
  204. package/dist/core/tool-names.d.ts +59 -0
  205. package/dist/core/tool-names.d.ts.map +1 -0
  206. package/dist/core/tool-names.js +128 -0
  207. package/dist/core/tool-names.js.map +1 -0
  208. package/dist/index.d.ts +227 -33
  209. package/dist/index.d.ts.map +1 -1
  210. package/dist/index.js +539 -152
  211. package/dist/index.js.map +1 -1
  212. package/dist/integrations/claude-agent.d.ts +5 -0
  213. package/dist/integrations/claude-agent.d.ts.map +1 -1
  214. package/dist/integrations/claude-agent.js +42 -13
  215. package/dist/integrations/claude-agent.js.map +1 -1
  216. package/dist/integrations/google-adk.d.ts +5 -3
  217. package/dist/integrations/google-adk.d.ts.map +1 -1
  218. package/dist/integrations/google-adk.js +9 -5
  219. package/dist/integrations/google-adk.js.map +1 -1
  220. package/dist/integrations/langchain.d.ts +7 -0
  221. package/dist/integrations/langchain.d.ts.map +1 -1
  222. package/dist/integrations/langchain.js +21 -3
  223. package/dist/integrations/langchain.js.map +1 -1
  224. package/dist/integrations/openai-agents.d.ts +22 -10
  225. package/dist/integrations/openai-agents.d.ts.map +1 -1
  226. package/dist/integrations/openai-agents.js +57 -16
  227. package/dist/integrations/openai-agents.js.map +1 -1
  228. package/dist/integrations/openai.d.ts +11 -0
  229. package/dist/integrations/openai.d.ts.map +1 -1
  230. package/dist/integrations/openai.js +130 -48
  231. package/dist/integrations/openai.js.map +1 -1
  232. package/dist/integrations/vercel-ai.d.ts +20 -9
  233. package/dist/integrations/vercel-ai.d.ts.map +1 -1
  234. package/dist/integrations/vercel-ai.js +131 -32
  235. package/dist/integrations/vercel-ai.js.map +1 -1
  236. package/dist/render/tokens.d.ts.map +1 -1
  237. package/dist/render/tokens.js +1 -0
  238. package/dist/render/tokens.js.map +1 -1
  239. package/package.json +41 -9
  240. package/prompts/onboard.md +259 -0
  241. package/prompts/scan.md +123 -0
  242. package/skills/SKILL.md +432 -0
  243. package/contracts/core/llm_safety.yaml +0 -130
@@ -2,6 +2,16 @@
2
2
  # Sponsio contract pack for OpenClaw (née Clawdbot / Moltbot)
3
3
  # Target: OpenClaw local gateway, v2026.2.12 or newer
4
4
  #
5
+ # Deterministic throughout. Eight LLM-judged contracts used to sit in §0
6
+ # and §9 (injection_free, jailbreak_free, harmful, semantic_pii_free,
7
+ # toxic_free, hallucination_free, scope_respect). No build resolves those
8
+ # names, so in enforce mode the loader refused the WHOLE config and this
9
+ # pack armed nothing: the 37 deterministic rules below went down with the
10
+ # eight. The header used to claim §1-§8 loaded "either way". They did not.
11
+ #
12
+ # Removed rather than skipped. A marker that lets enforce mode drop a
13
+ # declared rule is the one mechanism this product must not have.
14
+ #
5
15
  # Schema conventions used in this file:
6
16
  # - `desc:` — human-readable explanation (rendering only)
7
17
  # - `E:` with `pattern:` — structured, uses sponsio.patterns.library
@@ -92,45 +102,15 @@ agents:
92
102
  # § 0 — Tier 0 universal (portable; candidates for a future universal.yaml)
93
103
  # =====================================================================
94
104
 
95
- - desc: "No prompt injection in any LLM response"
96
- E:
97
- pattern: injection_free
98
- context_scope: full_trace
99
- source: "library:tier0.adversarial"
100
- beta: 0.95
101
-
102
- - desc: "No jailbreak compliance in any LLM response"
103
- E:
104
- pattern: jailbreak_free
105
- source: "library:tier0.adversarial"
106
- beta: 0.9
107
-
108
- - desc: "No harmful advice or facilitation of real-world harm"
109
- E:
110
- pattern: harmful
111
- source: "library:tier0.harm"
112
- beta: 0.95
113
-
114
- - desc: "Response free of contextual PII"
115
- E:
116
- pattern: semantic_pii_free
117
- source: "library:tier0.privacy"
118
- beta: 0.95
119
-
120
- - desc: "Response free of toxic or harassing language"
121
- E:
122
- pattern: toxic_free
123
- source: "library:tier0.harm"
124
- beta: 0.9
125
105
 
126
106
  - desc: "Total token usage bounded per session"
127
- E:
107
+ G:
128
108
  pattern: token_budget
129
109
  args: [200000, "total"]
130
110
  source: "library:tier0.budget"
131
111
 
132
112
  - desc: "No consecutive repetition of the same tool beyond a sane limit"
133
- E:
113
+ G:
134
114
  pattern: loop_detection
135
115
  args: [exec, 5]
136
116
  source: "library:tier0.runaway"
@@ -141,7 +121,7 @@ agents:
141
121
  # =====================================================================
142
122
 
143
123
  - desc: "Ban classic destructive shell patterns"
144
- E:
124
+ G:
145
125
  pattern: arg_blacklist
146
126
  args:
147
127
  - exec
@@ -154,7 +134,7 @@ agents:
154
134
  # command token; unconstrained `\<newline>` appears legitimately
155
135
  # in Makefiles / Dockerfiles / shell scripts.
156
136
  - desc: "Block shell line-continuation chained into a privileged command (CVE-2026-28460)"
157
- E:
137
+ G:
158
138
  pattern: arg_blacklist
159
139
  args:
160
140
  - exec
@@ -164,19 +144,19 @@ agents:
164
144
  source: "incident:CVE-2026-28460"
165
145
 
166
146
  - desc: "Block --yolo / --no-confirm flags on skill invocations"
167
- E:
147
+ G:
168
148
  pattern: arg_blacklist
169
149
  args: [run_skill, args, ["--yolo\\b", "--no-confirm\\b"]]
170
150
  source: "incident:issue-12515"
171
151
 
172
152
  - desc: "Reject exec commands with suspiciously long inline payloads"
173
- E:
153
+ G:
174
154
  pattern: arg_length_limit
175
155
  args: [exec, command, 2000]
176
156
  source: "library:tier1.shell"
177
157
 
178
158
  - desc: "Blast-radius cap: at most 10 exec calls per session"
179
- E:
159
+ G:
180
160
  pattern: rate_limit
181
161
  args: [exec, 10]
182
162
  source: "library:tier1.shell"
@@ -185,7 +165,7 @@ agents:
185
165
  # confirm_reconfirmed. The existing must_confirm pattern is unconditional
186
166
  # on tool name; we want it conditional on the argument content. LTL form.
187
167
  - desc: "Privileged exec patterns require a preceding human confirmation"
188
- E:
168
+ G:
189
169
  ltl: 'G(called_with(exec, "(sudo|dd\\s+if=|chmod\\s+777)") -> count(confirm_reconfirmed) >= count_with(exec, "(sudo|dd\\s+if=|chmod\\s+777)"))'
190
170
  source: "library:tier1.shell"
191
171
 
@@ -196,7 +176,7 @@ agents:
196
176
  # =====================================================================
197
177
 
198
178
  - desc: "Ban gateway config keys that disable sandbox or approvals"
199
- E:
179
+ G:
200
180
  pattern: arg_blacklist
201
181
  args:
202
182
  - gateway_config_set
@@ -205,13 +185,13 @@ agents:
205
185
  source: "incident:CVE-2026-25253"
206
186
 
207
187
  - desc: "Admin config changes extremely rare"
208
- E:
188
+ G:
209
189
  pattern: rate_limit
210
190
  args: [gateway_config_set, 1]
211
191
  source: "incident:CVE-2026-25253"
212
192
 
213
193
  - desc: "Every admin config change must be followed by an audit-log entry"
214
- E:
194
+ G:
215
195
  pattern: always_followed_by
216
196
  args: [gateway_config_set, audit_log]
217
197
  source: "incident:CVE-2026-25253"
@@ -222,7 +202,7 @@ agents:
222
202
  # =====================================================================
223
203
 
224
204
  - desc: "Reads restricted to workspace and /tmp"
225
- E:
205
+ G:
226
206
  pattern: scope_limit
227
207
  args:
228
208
  - read
@@ -230,7 +210,7 @@ agents:
230
210
  source: "library:tier1.filesystem"
231
211
 
232
212
  - desc: "Hard-deny reads of sensitive paths (SSH, AWS, OpenClaw secrets)"
233
- E:
213
+ G:
234
214
  pattern: arg_blacklist
235
215
  args:
236
216
  - read
@@ -239,7 +219,7 @@ agents:
239
219
  source: "incident:weather-skill"
240
220
 
241
221
  - desc: "Writes restricted to workspace"
242
- E:
222
+ G:
243
223
  pattern: scope_limit
244
224
  args:
245
225
  - write
@@ -248,23 +228,23 @@ agents:
248
228
 
249
229
  # Bootstrap-file self-modification — conditional on the path.
250
230
  - desc: "Self-modification of bootstrap files requires confirmation"
251
- E:
231
+ G:
252
232
  ltl: 'G(called_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md") -> count(confirm_reconfirmed) >= count_with(edit, "(AGENTS|SOUL|IDENTITY|USER)\\.md"))'
253
233
  source: "library:tier1.persistent_memory"
254
234
 
255
235
  - desc: "apply_patch against SOUL.md always requires confirmation"
256
- E:
236
+ G:
257
237
  ltl: 'G(called_with(apply_patch, "SOUL\\.md") -> count(confirm_reconfirmed) >= count_with(apply_patch, "SOUL\\.md"))'
258
238
  source: "library:tier1.persistent_memory"
259
239
 
260
240
  - desc: "No blind edits — must read a path before editing it"
261
- E:
241
+ G:
262
242
  pattern: must_precede
263
243
  args: [read, edit]
264
244
  source: "library:tier1.filesystem"
265
245
 
266
246
  - desc: "Bootstrap files preserve integrity"
267
- E:
247
+ G:
268
248
  pattern: data_intact
269
249
  args:
270
250
  - "bootstrap_files"
@@ -278,31 +258,31 @@ agents:
278
258
  # =====================================================================
279
259
 
280
260
  - desc: "Install and run are segregated"
281
- E:
261
+ G:
282
262
  pattern: segregation_of_duty
283
263
  args: [install_skill, run_skill]
284
264
  source: "incident:ClawHavoc"
285
265
 
286
266
  - desc: "Every skill install followed by an audit-log entry"
287
- E:
267
+ G:
288
268
  pattern: always_followed_by
289
269
  args: [install_skill, audit_log]
290
270
  source: "incident:ClawHavoc"
291
271
 
292
272
  - desc: "At most 3 skill installs per session"
293
- E:
273
+ G:
294
274
  pattern: rate_limit
295
275
  args: [install_skill, 3]
296
276
  source: "incident:ClawHavoc"
297
277
 
298
278
  - desc: "Cooldown of 10 steps between skill installs"
299
- E:
279
+ G:
300
280
  pattern: cooldown
301
281
  args: [install_skill, 10]
302
282
  source: "incident:ClawHavoc"
303
283
 
304
284
  - desc: "Typosquat defense — ban ClawHub official-CLI impersonators"
305
- E:
285
+ G:
306
286
  pattern: arg_blacklist
307
287
  args:
308
288
  - install_skill
@@ -313,7 +293,7 @@ agents:
313
293
  # After a fresh install, no exec for 5 steps (VirusTotal scan window).
314
294
  # No clean pattern fit; LTL expresses windowed inhibition.
315
295
  - desc: "After install_skill, no exec for at least 5 steps"
316
- E:
296
+ G:
317
297
  ltl: "G(called(install_skill) -> (!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec) & X(!called(exec)))))))"
318
298
  source: "incident:ClawHavoc"
319
299
 
@@ -332,7 +312,7 @@ agents:
332
312
  # to external (non-owner) channels should add it via
333
313
  # customized: — see the commented example below.
334
314
  - desc: "After untrusted content ingest, sensitive sinks require re-confirmation"
335
- E:
315
+ G:
336
316
  pattern: untrusted_source_gate
337
317
  args:
338
318
  - [web_fetch]
@@ -351,7 +331,7 @@ agents:
351
331
  # source: "incident:CVE-2026-22708"
352
332
 
353
333
  - desc: "Web browsing loops bounded — prevents attacker-controlled chain-redirect ingestion"
354
- E:
334
+ G:
355
335
  pattern: rate_limit
356
336
  args: [web_fetch, 25]
357
337
  source: "incident:CVE-2026-22708"
@@ -360,7 +340,7 @@ agents:
360
340
  # to external recipients. Depends on integration emitting
361
341
  # data_write(key=fetched_content, contains=[untrusted]) after web_fetch.
362
342
  - desc: "Content tainted as untrusted must not flow to external recipients"
363
- E:
343
+ G:
364
344
  ltl: "G(contains(untrusted) -> !flow(<agent>, external))"
365
345
  source: "incident:CVE-2026-22708"
366
346
 
@@ -369,19 +349,19 @@ agents:
369
349
  # =====================================================================
370
350
 
371
351
  - desc: "Data read from filesystem must not flow to send_message"
372
- E:
352
+ G:
373
353
  pattern: no_data_leak
374
354
  args: [read, send_message]
375
355
  source: "incident:weather-skill"
376
356
 
377
357
  - desc: "Data read from filesystem must not flow to install_skill"
378
- E:
358
+ G:
379
359
  pattern: no_data_leak
380
360
  args: [read, install_skill]
381
361
  source: "incident:AMOS"
382
362
 
383
363
  - desc: "Block outbound exfiltration primitives in shell"
384
- E:
364
+ G:
385
365
  pattern: arg_blacklist
386
366
  args:
387
367
  - exec
@@ -398,30 +378,30 @@ agents:
398
378
  # Group-channel messages must not be followed by exec. LTL expresses the
399
379
  # channel_type=group condition cleanly.
400
380
  - desc: "Messages from group channels cannot trigger exec"
401
- E:
381
+ G:
402
382
  ltl: 'G(called_with(send_message, "channel_type=group") -> !F(called(exec)))'
403
383
  source: "library:tier1.messaging"
404
384
 
405
385
  - desc: "Per-session cap on outbound messages"
406
- E:
386
+ G:
407
387
  pattern: rate_limit
408
388
  args: [send_message, 30]
409
389
  source: "library:tier1.messaging"
410
390
 
411
391
  - desc: "Cron creation is idempotent within a session"
412
- E:
392
+ G:
413
393
  pattern: idempotent
414
394
  args: [cron_create]
415
395
  source: "library:tier1.scheduler"
416
396
 
417
397
  - desc: "Every cron_create must eventually be matched by cron_complete"
418
- E:
398
+ G:
419
399
  pattern: required_steps_completion
420
400
  args: [cron_create, [cron_complete]]
421
401
  source: "library:tier1.scheduler"
422
402
 
423
403
  - desc: "Hook / webhook registration requires human confirmation"
424
- E:
404
+ G:
425
405
  pattern: must_confirm
426
406
  args: [hook_register]
427
407
  source: "library:tier1.persistence"
@@ -443,41 +423,16 @@ agents:
443
423
 
444
424
  - desc: "Confirmations cannot be reused — count(confirm) must dominate count(exec)"
445
425
  A: "called `confirm_reconfirmed`"
446
- E:
426
+ G:
447
427
  ltl: "G(called(exec) -> count(confirm_reconfirmed) >= count(exec))"
448
428
  source: "incident:CVE-2026-29607"
449
429
 
450
430
  - desc: "Same for apply_patch — each apply needs its own confirm"
451
431
  A: "called `confirm_reconfirmed`"
452
- E:
432
+ G:
453
433
  ltl: "G(called(apply_patch) -> count(confirm_reconfirmed) >= count(apply_patch))"
454
434
  source: "incident:CVE-2026-29607"
455
435
 
456
- # =====================================================================
457
- # § 9 — Capability-specific stochastic atoms
458
- # =====================================================================
459
-
460
- - desc: "After web_fetch, responses stay grounded in the fetched content"
461
- A: "called `web_fetch`"
462
- E:
463
- pattern: hallucination_free
464
- args: ["{fetched_content}"]
465
- source: "library:tier1.browser"
466
- beta: 0.9
467
-
468
- - desc: "Agent stays within its declared scope"
469
- E:
470
- pattern: scope_respect
471
- args: ["local personal assistant — file, shell, messaging, browsing on behalf of owner"]
472
- source: "library:tier0.scope"
473
- beta: 0.85
474
-
475
- - desc: "Agent does not agree to disable its own safety constraints (anti-guilttrip)"
476
- E:
477
- pattern: jailbreak_free
478
- source: "incident:wired-guilttrip"
479
- beta: 0.95
480
-
481
436
  # -----------------------------------------------------------------------------
482
437
  # Notes on what this file deliberately does NOT cover
483
438
  # -----------------------------------------------------------------------------
@@ -81,7 +81,7 @@ agents:
81
81
  # =================================================================
82
82
 
83
83
  - desc: "Sub-agents may not edit sponsio configuration files"
84
- E:
84
+ G:
85
85
  pattern: arg_blacklist
86
86
  args:
87
87
  - Edit
@@ -106,7 +106,7 @@ agents:
106
106
  # =================================================================
107
107
 
108
108
  - desc: "Sub-agents may not write sponsio configuration files"
109
- E:
109
+ G:
110
110
  pattern: arg_blacklist
111
111
  args:
112
112
  - Write
@@ -121,7 +121,7 @@ agents:
121
121
  # =================================================================
122
122
 
123
123
  - desc: "Sub-agents may not multi-edit sponsio configuration files"
124
- E:
124
+ G:
125
125
  pattern: arg_blacklist
126
126
  args:
127
127
  - MultiEdit
@@ -151,7 +151,7 @@ agents:
151
151
  # own rule lists.
152
152
 
153
153
  - desc: "Sub-agents may not read host plugin guard rules (recon defence)"
154
- E:
154
+ G:
155
155
  pattern: arg_blacklist
156
156
  args:
157
157
  - Read
@@ -1,7 +1,6 @@
1
- # Reserved namespace for Sponsio premium contracts.
1
+ # Reserved namespace for future Sponsio premium contracts.
2
2
  #
3
- # The OSS engine ships ``sponsio:capability/*`` (universal safety
4
- # packs) and ``sponsio:incident/*`` (public CVE / Reddit-incident
5
- # replicas). This directory holds bespoke threat patterns derived
6
- # from internal threat-research engagements, which Sponsio Cloud
7
- # customers receive as a pack subscription. Empty in OSS by design.
3
+ # The engine ships ``sponsio:capability/*`` (universal safety packs)
4
+ # and ``sponsio:incident/*`` (public CVE / Reddit-incident replicas).
5
+ # This directory is a placeholder for future expansion; not part of
6
+ # this build. Empty by design.
@@ -0,0 +1,2 @@
1
+ export declare function runCheckCli(argv: string[]): Promise<void>;
2
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AA6JA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH/D"}