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

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 (203) 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/filesystem-strict.yaml +4 -4
  10. package/contracts/capability/filesystem.yaml +9 -9
  11. package/contracts/capability/host-config-integrity.yaml +285 -0
  12. package/contracts/capability/self-modify.yaml +214 -9
  13. package/contracts/capability/shell.yaml +25 -32
  14. package/contracts/capability/subagent.yaml +5 -5
  15. package/contracts/core/llm_safety.yaml +21 -13
  16. package/contracts/incident/claude-code-secret-bypass.yaml +11 -12
  17. package/contracts/incident/cursor-railway-wipe.yaml +3 -3
  18. package/contracts/incident/mcp-composition.yaml +12 -12
  19. package/contracts/incident/openclaw.yaml +54 -45
  20. package/contracts/incident/subagent-escape.yaml +4 -4
  21. package/contracts/premium/.gitkeep +5 -6
  22. package/dist/cli/check.d.ts +2 -0
  23. package/dist/cli/check.d.ts.map +1 -0
  24. package/dist/cli/check.js +283 -0
  25. package/dist/cli/check.js.map +1 -0
  26. package/dist/cli/cli.d.ts +25 -0
  27. package/dist/cli/cli.d.ts.map +1 -0
  28. package/dist/cli/cli.js +459 -0
  29. package/dist/cli/cli.js.map +1 -0
  30. package/dist/cli/config.d.ts +88 -0
  31. package/dist/cli/config.d.ts.map +1 -0
  32. package/dist/cli/config.js +243 -0
  33. package/dist/cli/config.js.map +1 -0
  34. package/dist/cli/demo.d.ts +12 -0
  35. package/dist/cli/demo.d.ts.map +1 -0
  36. package/dist/cli/demo.js +350 -0
  37. package/dist/cli/demo.js.map +1 -0
  38. package/dist/cli/doctor.d.ts +11 -0
  39. package/dist/cli/doctor.d.ts.map +1 -0
  40. package/dist/cli/doctor.js +201 -0
  41. package/dist/cli/doctor.js.map +1 -0
  42. package/dist/cli/eval.d.ts +2 -0
  43. package/dist/cli/eval.d.ts.map +1 -0
  44. package/dist/cli/eval.js +361 -0
  45. package/dist/cli/eval.js.map +1 -0
  46. package/dist/cli/explain.d.ts +2 -0
  47. package/dist/cli/explain.d.ts.map +1 -0
  48. package/dist/cli/explain.js +266 -0
  49. package/dist/cli/explain.js.map +1 -0
  50. package/dist/cli/export-sessions.d.ts +2 -0
  51. package/dist/cli/export-sessions.d.ts.map +1 -0
  52. package/dist/cli/export-sessions.js +182 -0
  53. package/dist/cli/export-sessions.js.map +1 -0
  54. package/dist/cli/export.d.ts +2 -0
  55. package/dist/cli/export.d.ts.map +1 -0
  56. package/dist/cli/export.js +222 -0
  57. package/dist/cli/export.js.map +1 -0
  58. package/dist/cli/extractors/common.d.ts +27 -0
  59. package/dist/cli/extractors/common.d.ts.map +1 -0
  60. package/dist/cli/extractors/common.js +107 -0
  61. package/dist/cli/extractors/common.js.map +1 -0
  62. package/dist/cli/extractors/generic.d.ts +37 -0
  63. package/dist/cli/extractors/generic.d.ts.map +1 -0
  64. package/dist/cli/extractors/generic.js +185 -0
  65. package/dist/cli/extractors/generic.js.map +1 -0
  66. package/dist/cli/extractors/langchain.d.ts +18 -0
  67. package/dist/cli/extractors/langchain.d.ts.map +1 -0
  68. package/dist/cli/extractors/langchain.js +86 -0
  69. package/dist/cli/extractors/langchain.js.map +1 -0
  70. package/dist/cli/extractors/vercel.d.ts +17 -0
  71. package/dist/cli/extractors/vercel.d.ts.map +1 -0
  72. package/dist/cli/extractors/vercel.js +46 -0
  73. package/dist/cli/extractors/vercel.js.map +1 -0
  74. package/dist/cli/index.d.ts +38 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +146 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/cli/init.d.ts +2 -0
  79. package/dist/cli/init.d.ts.map +1 -0
  80. package/dist/cli/init.js +177 -0
  81. package/dist/cli/init.js.map +1 -0
  82. package/dist/cli/mode.d.ts +2 -0
  83. package/dist/cli/mode.d.ts.map +1 -0
  84. package/dist/cli/mode.js +71 -0
  85. package/dist/cli/mode.js.map +1 -0
  86. package/dist/cli/onboard.d.ts +88 -0
  87. package/dist/cli/onboard.d.ts.map +1 -0
  88. package/dist/cli/onboard.js +758 -0
  89. package/dist/cli/onboard.js.map +1 -0
  90. package/dist/cli/otlp.d.ts +27 -0
  91. package/dist/cli/otlp.d.ts.map +1 -0
  92. package/dist/cli/otlp.js +79 -0
  93. package/dist/cli/otlp.js.map +1 -0
  94. package/dist/cli/package.json +1 -0
  95. package/dist/cli/packs.d.ts +16 -0
  96. package/dist/cli/packs.d.ts.map +1 -0
  97. package/dist/cli/packs.js +184 -0
  98. package/dist/cli/packs.js.map +1 -0
  99. package/dist/cli/patterns.d.ts +16 -0
  100. package/dist/cli/patterns.d.ts.map +1 -0
  101. package/dist/cli/patterns.js +136 -0
  102. package/dist/cli/patterns.js.map +1 -0
  103. package/dist/cli/prompt.d.ts +2 -0
  104. package/dist/cli/prompt.d.ts.map +1 -0
  105. package/dist/cli/prompt.js +54 -0
  106. package/dist/cli/prompt.js.map +1 -0
  107. package/dist/cli/replay.d.ts +2 -0
  108. package/dist/cli/replay.d.ts.map +1 -0
  109. package/dist/cli/replay.js +196 -0
  110. package/dist/cli/replay.js.map +1 -0
  111. package/dist/cli/report.d.ts +57 -0
  112. package/dist/cli/report.d.ts.map +1 -0
  113. package/dist/cli/report.js +298 -0
  114. package/dist/cli/report.js.map +1 -0
  115. package/dist/cli/scan.d.ts +2 -0
  116. package/dist/cli/scan.d.ts.map +1 -0
  117. package/dist/cli/scan.js +172 -0
  118. package/dist/cli/scan.js.map +1 -0
  119. package/dist/cli/skill.d.ts +15 -0
  120. package/dist/cli/skill.d.ts.map +1 -0
  121. package/dist/cli/skill.js +131 -0
  122. package/dist/cli/skill.js.map +1 -0
  123. package/dist/cli/tokens.d.ts +31 -0
  124. package/dist/cli/tokens.d.ts.map +1 -0
  125. package/dist/cli/tokens.js +73 -0
  126. package/dist/cli/tokens.js.map +1 -0
  127. package/dist/cli/types.d.ts +46 -0
  128. package/dist/cli/types.d.ts.map +1 -0
  129. package/dist/cli/types.js +3 -0
  130. package/dist/cli/types.js.map +1 -0
  131. package/dist/cli/validate.d.ts +19 -0
  132. package/dist/cli/validate.d.ts.map +1 -0
  133. package/dist/cli/validate.js +205 -0
  134. package/dist/cli/validate.js.map +1 -0
  135. package/dist/cli/zod.d.ts +36 -0
  136. package/dist/cli/zod.d.ts.map +1 -0
  137. package/dist/cli/zod.js +226 -0
  138. package/dist/cli/zod.js.map +1 -0
  139. package/dist/contract.d.ts +13 -13
  140. package/dist/contract.d.ts.map +1 -1
  141. package/dist/contract.js +21 -21
  142. package/dist/contract.js.map +1 -1
  143. package/dist/core/config-loader.d.ts +1 -1
  144. package/dist/core/config-loader.d.ts.map +1 -1
  145. package/dist/core/config-loader.js +100 -26
  146. package/dist/core/config-loader.js.map +1 -1
  147. package/dist/core/evaluator.d.ts +9 -1
  148. package/dist/core/evaluator.d.ts.map +1 -1
  149. package/dist/core/evaluator.js +189 -13
  150. package/dist/core/evaluator.js.map +1 -1
  151. package/dist/core/formula.d.ts +76 -17
  152. package/dist/core/formula.d.ts.map +1 -1
  153. package/dist/core/formula.js +83 -1
  154. package/dist/core/formula.js.map +1 -1
  155. package/dist/core/grounding.d.ts +50 -3
  156. package/dist/core/grounding.d.ts.map +1 -1
  157. package/dist/core/grounding.js +317 -141
  158. package/dist/core/grounding.js.map +1 -1
  159. package/dist/core/nl-parser.d.ts +1 -1
  160. package/dist/core/nl-parser.d.ts.map +1 -1
  161. package/dist/core/nl-parser.js +76 -4
  162. package/dist/core/nl-parser.js.map +1 -1
  163. package/dist/core/pack-loader.d.ts.map +1 -1
  164. package/dist/core/pack-loader.js +14 -2
  165. package/dist/core/pack-loader.js.map +1 -1
  166. package/dist/core/parser.d.ts.map +1 -1
  167. package/dist/core/parser.js +30 -1
  168. package/dist/core/parser.js.map +1 -1
  169. package/dist/core/pattern-factory.d.ts +4 -4
  170. package/dist/core/pattern-factory.d.ts.map +1 -1
  171. package/dist/core/pattern-factory.js +53 -4
  172. package/dist/core/pattern-factory.js.map +1 -1
  173. package/dist/core/patterns.d.ts +127 -5
  174. package/dist/core/patterns.d.ts.map +1 -1
  175. package/dist/core/patterns.js +267 -3
  176. package/dist/core/patterns.js.map +1 -1
  177. package/dist/core/session-log.d.ts.map +1 -1
  178. package/dist/core/session-log.js +20 -1
  179. package/dist/core/session-log.js.map +1 -1
  180. package/dist/core/spans.d.ts +1 -1
  181. package/dist/core/spans.d.ts.map +1 -1
  182. package/dist/core/spans.js.map +1 -1
  183. package/dist/core/sto.d.ts +30 -66
  184. package/dist/core/sto.d.ts.map +1 -1
  185. package/dist/core/sto.js +39 -100
  186. package/dist/core/sto.js.map +1 -1
  187. package/dist/index.d.ts +83 -33
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +194 -142
  190. package/dist/index.js.map +1 -1
  191. package/dist/integrations/openai-agents.d.ts.map +1 -1
  192. package/dist/integrations/openai-agents.js +6 -4
  193. package/dist/integrations/openai-agents.js.map +1 -1
  194. package/dist/integrations/vercel-ai.d.ts.map +1 -1
  195. package/dist/integrations/vercel-ai.js +21 -3
  196. package/dist/integrations/vercel-ai.js.map +1 -1
  197. package/dist/render/tokens.d.ts.map +1 -1
  198. package/dist/render/tokens.js +1 -0
  199. package/dist/render/tokens.js.map +1 -1
  200. package/package.json +35 -7
  201. package/prompts/onboard.md +246 -0
  202. package/prompts/scan.md +123 -0
  203. package/skills/SKILL.md +432 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Grounding: convert tool-call events into per-timestep predicate valuations.
2
+ * Grounding: convert events into per-timestep predicate valuations.
3
3
  *
4
4
  * Port of sponsio/tracer/grounding.py (Det-relevant atoms).
5
5
  *
@@ -16,6 +16,11 @@
16
16
  * arg_paths_within(tool, *prefixes) — all paths in args within prefix set
17
17
  * token_count(type) — cumulative tokens (from event.args.tokens)
18
18
  * delegation_depth — depth of agent-to-agent delegation
19
+ * ctx(key, value) — external fact pushed via observe_context
20
+ * ctx_matches(key, pattern) — current ctx[key] matches regex
21
+ * llm_said(pattern) — llm_response content matches regex
22
+ * response_words / response_chars — response length on llm_response
23
+ * time_since(predicate_key) — event-clock delta since predicate last True
19
24
  */
20
25
  import { predKey } from "./formula.js";
21
26
  export function newGroundingState() {
@@ -26,8 +31,43 @@ export function newGroundingState() {
26
31
  consecutiveCounts: {},
27
32
  tokenCounts: {},
28
33
  delegationDepth: 0,
34
+ currentCtx: {},
35
+ now: 0,
36
+ lastTs: {},
37
+ trueAtPrev: new Set(),
29
38
  };
30
39
  }
40
+ /**
41
+ * Predicates whose grounding requires the formula AST to tell
42
+ * grounding which arg tuples to check (regex on content, ctx_matches,
43
+ * time_since key targets, …). Mirrors Python's ``_CONTENT_PREDICATES``.
44
+ */
45
+ const CONTENT_PREDICATES = new Set([
46
+ "called_with",
47
+ "count_with",
48
+ "arg_has",
49
+ "arg_field_has",
50
+ "arg_length_exceeds",
51
+ "arg_paths_within",
52
+ "arg_numeric",
53
+ "llm_said",
54
+ "ctx_matches",
55
+ "time_since",
56
+ ]);
57
+ /**
58
+ * Var names that must be extracted from the formula tree for grounding.
59
+ * Includes both the atom-style content predicates and bare arithmetic
60
+ * Vars so ``Le(Var(count, x), Const(N))`` carries ``("x",)`` through.
61
+ */
62
+ const VAR_PREDICATES = new Set([
63
+ "count_with",
64
+ "count",
65
+ "consecutive_count",
66
+ "arg_numeric",
67
+ "token_count",
68
+ "delegation_depth",
69
+ "time_since",
70
+ ]);
31
71
  /**
32
72
  * Collect content atoms from a formula tree.
33
73
  * These are atoms whose grounding depends on event content (arg patterns).
@@ -37,20 +77,14 @@ export function collectContentAtoms(formulas) {
37
77
  function walk(node) {
38
78
  if (node.kind === "Atom") {
39
79
  const pred = node.predicate;
40
- if ([
41
- "called_with", "count_with",
42
- "arg_has", "arg_field_has", "arg_length_exceeds", "arg_paths_within",
43
- ].includes(pred)) {
80
+ if (CONTENT_PREDICATES.has(pred)) {
44
81
  if (!atoms[pred])
45
82
  atoms[pred] = new Set();
46
83
  atoms[pred].add(node.args.join("|"));
47
84
  }
48
85
  }
49
86
  else if (node.kind === "Var") {
50
- if ([
51
- "count_with", "count", "consecutive_count",
52
- "arg_numeric", "token_count", "delegation_depth",
53
- ].includes(node.name)) {
87
+ if (VAR_PREDICATES.has(node.name)) {
54
88
  const pred = node.name;
55
89
  if (!atoms[pred])
56
90
  atoms[pred] = new Set();
@@ -69,172 +103,276 @@ export function collectContentAtoms(formulas) {
69
103
  walk(f);
70
104
  return atoms;
71
105
  }
106
+ function escapeRegexLiteral(literal) {
107
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
108
+ }
72
109
  /**
73
- * Ground a single tool-call event into a predicate valuation dict.
110
+ * Ground a single event into a predicate valuation dict.
111
+ *
112
+ * Routes by ``event.event_type``:
113
+ * - ``tool_call`` (default) — emits the full tool-call atom set
114
+ * - ``llm_response`` — emits ``llm_said(pattern)`` + length atoms
115
+ * - ``context_update`` — merges ``event.args`` into ``state.currentCtx``
116
+ *
117
+ * Ctx atoms (``ctx(k, v)``), accumulator snapshots, and ``time_since``
118
+ * fire on every event regardless of type (matching Python parity).
74
119
  */
75
120
  export function groundEvent(event, state, contentAtoms) {
76
121
  const v = {};
77
- const tool = event.tool;
78
- const argsStr = event.args ? JSON.stringify(event.args) : "";
79
- // called(tool)
80
- v[predKey("called", tool)] = true;
81
- // called_any — fires whenever any tool is invoked. Used by
82
- // ``tool_allowlist`` to encode "whenever any tool runs, it must
83
- // be one of the allowed ones".
84
- v[predKey("called_any")] = true;
85
- // count(tool)
86
- state.callCounts[tool] = (state.callCounts[tool] || 0) + 1;
87
- v[predKey("count", tool)] = state.callCounts[tool];
88
- // consecutive_count(tool)
89
- if (tool === state.lastTool) {
90
- state.consecutiveCounts[tool] = (state.consecutiveCounts[tool] || 1) + 1;
122
+ const eventType = event.event_type ?? "tool_call";
123
+ // Advance the event clock (mirrors ``state.now = float(event.ts)``).
124
+ if (typeof event.ts === "number") {
125
+ state.now = event.ts;
91
126
  }
92
127
  else {
93
- if (state.lastTool)
94
- state.consecutiveCounts[state.lastTool] = 0;
95
- state.consecutiveCounts[tool] = 1;
128
+ state.now += 1;
96
129
  }
97
- state.lastTool = tool;
98
- v[predKey("consecutive_count", tool)] = state.consecutiveCounts[tool];
99
- // called_with / count_with — regex on serialized args
100
- if (contentAtoms) {
101
- const cwPatterns = new Set();
102
- for (const key of ["called_with", "count_with"]) {
103
- const s = contentAtoms[key];
104
- if (s)
105
- for (const p of s)
106
- cwPatterns.add(p);
130
+ if (eventType === "tool_call") {
131
+ const tool = event.tool;
132
+ const argsStr = event.args ? JSON.stringify(event.args) : "";
133
+ // called(tool)
134
+ v[predKey("called", tool)] = true;
135
+ // called_any — fires whenever any tool is invoked. Used by
136
+ // ``tool_allowlist`` to encode "whenever any tool runs, it must
137
+ // be one of the allowed ones".
138
+ v[predKey("called_any")] = true;
139
+ // count(tool)
140
+ state.callCounts[tool] = (state.callCounts[tool] || 0) + 1;
141
+ v[predKey("count", tool)] = state.callCounts[tool];
142
+ // consecutive_count(tool)
143
+ if (tool === state.lastTool) {
144
+ state.consecutiveCounts[tool] = (state.consecutiveCounts[tool] || 1) + 1;
107
145
  }
108
- for (const raw of cwPatterns) {
109
- const parts = raw.split("|");
110
- if (parts.length >= 2) {
111
- const targetTool = parts[0];
112
- const pattern = parts.slice(1).join("|");
113
- if (targetTool === tool) {
114
- const matched = new RegExp(pattern).test(argsStr);
115
- v[predKey("called_with", targetTool, pattern)] = matched;
116
- if (matched) {
117
- const cwKey = `${targetTool}|${pattern}`;
118
- state.callWithCounts[cwKey] = (state.callWithCounts[cwKey] || 0) + 1;
119
- }
120
- v[predKey("count_with", targetTool, pattern)] =
121
- state.callWithCounts[`${targetTool}|${pattern}`] || 0;
122
- }
146
+ else {
147
+ if (state.lastTool)
148
+ state.consecutiveCounts[state.lastTool] = 0;
149
+ state.consecutiveCounts[tool] = 1;
150
+ }
151
+ state.lastTool = tool;
152
+ v[predKey("consecutive_count", tool)] = state.consecutiveCounts[tool];
153
+ // arg_value(tool, field) — raw value for Term-based lookups.
154
+ // ``ArgValue(tool, field)`` reads state[predKey("arg_value", tool,
155
+ // field)] for runtime comparisons (e.g. Eq(ArgValue(tool, "amount"),
156
+ // CtxValue("approved_amount"))). Emit unconditionally for every arg
157
+ // field, every tool_call — Terms read by direct key lookup, not via
158
+ // contentAtoms extraction.
159
+ if (event.args) {
160
+ for (const [field, val] of Object.entries(event.args)) {
161
+ v[predKey("arg_value", tool, field)] = val;
123
162
  }
124
163
  }
125
- // arg_has(tool, pattern)
126
- const argHasPatterns = contentAtoms["arg_has"];
127
- if (argHasPatterns && argsStr) {
128
- for (const raw of argHasPatterns) {
164
+ // called_with / count_with — regex on serialized args
165
+ if (contentAtoms) {
166
+ const cwPatterns = new Set();
167
+ for (const key of ["called_with", "count_with"]) {
168
+ const s = contentAtoms[key];
169
+ if (s)
170
+ for (const p of s)
171
+ cwPatterns.add(p);
172
+ }
173
+ for (const raw of cwPatterns) {
129
174
  const parts = raw.split("|");
130
175
  if (parts.length >= 2) {
131
176
  const targetTool = parts[0];
132
177
  const pattern = parts.slice(1).join("|");
133
178
  if (targetTool === tool) {
134
- v[predKey("arg_has", targetTool, pattern)] = new RegExp(pattern).test(argsStr);
179
+ const matched = new RegExp(pattern).test(argsStr);
180
+ v[predKey("called_with", targetTool, pattern)] = matched;
181
+ if (matched) {
182
+ const cwKey = `${targetTool}|${pattern}`;
183
+ state.callWithCounts[cwKey] = (state.callWithCounts[cwKey] || 0) + 1;
184
+ }
185
+ v[predKey("count_with", targetTool, pattern)] =
186
+ state.callWithCounts[`${targetTool}|${pattern}`] || 0;
135
187
  }
136
188
  }
137
189
  }
138
- }
139
- // arg_field_has(tool, field, pattern)
140
- const afhPatterns = contentAtoms["arg_field_has"];
141
- if (afhPatterns && event.args) {
142
- for (const raw of afhPatterns) {
143
- const parts = raw.split("|");
144
- if (parts.length >= 3) {
145
- const targetTool = parts[0];
146
- const field = parts[1];
147
- const pattern = parts.slice(2).join("|");
148
- if (targetTool === tool) {
149
- const fieldVal = event.args[field];
150
- const matched = fieldVal != null && new RegExp(pattern).test(String(fieldVal));
151
- v[predKey("arg_field_has", targetTool, field, pattern)] = matched;
190
+ // arg_has(tool, pattern)
191
+ const argHasPatterns = contentAtoms["arg_has"];
192
+ if (argHasPatterns && argsStr) {
193
+ for (const raw of argHasPatterns) {
194
+ const parts = raw.split("|");
195
+ if (parts.length >= 2) {
196
+ const targetTool = parts[0];
197
+ const pattern = parts.slice(1).join("|");
198
+ if (targetTool === tool) {
199
+ v[predKey("arg_has", targetTool, pattern)] = new RegExp(pattern).test(argsStr);
200
+ }
152
201
  }
153
202
  }
154
203
  }
155
- }
156
- // arg_length_exceeds(tool, field, max_chars)
157
- const ale = contentAtoms["arg_length_exceeds"];
158
- if (ale && event.args) {
159
- for (const raw of ale) {
160
- const parts = raw.split("|");
161
- if (parts.length >= 3) {
162
- const targetTool = parts[0];
163
- const field = parts[1];
164
- const maxChars = parseInt(parts[2], 10) || 500;
165
- if (targetTool === tool) {
166
- const fieldVal = event.args[field] ?? "";
167
- v[predKey("arg_length_exceeds", targetTool, field, String(maxChars))] =
168
- String(fieldVal).length > maxChars;
204
+ // arg_field_has(tool, field, pattern)
205
+ const afhPatterns = contentAtoms["arg_field_has"];
206
+ if (afhPatterns && event.args) {
207
+ for (const raw of afhPatterns) {
208
+ const parts = raw.split("|");
209
+ if (parts.length >= 3) {
210
+ const targetTool = parts[0];
211
+ const field = parts[1];
212
+ const pattern = parts.slice(2).join("|");
213
+ if (targetTool === tool) {
214
+ const fieldVal = event.args[field];
215
+ const matched = fieldVal != null && new RegExp(pattern).test(String(fieldVal));
216
+ v[predKey("arg_field_has", targetTool, field, pattern)] = matched;
217
+ }
169
218
  }
170
219
  }
171
220
  }
172
- }
173
- // arg_numeric(tool, field) — extract numeric value via 3 strategies:
174
- // 1. Direct dict key
175
- // 2. CLI flag "--field VALUE"
176
- // 3. Positional token in command string
177
- const anPatterns = contentAtoms["arg_numeric"];
178
- if (anPatterns) {
179
- for (const raw of anPatterns) {
180
- const parts = raw.split("|");
181
- if (parts.length >= 2) {
182
- const targetTool = parts[0];
183
- const field = parts[1];
184
- if (targetTool === tool) {
185
- let numericVal = null;
186
- // Strategy 1: direct dict key
187
- if (event.args && field in event.args) {
188
- const val = event.args[field];
189
- const n = typeof val === "number" ? val : parseFloat(String(val));
190
- if (!isNaN(n))
191
- numericVal = n;
221
+ // arg_length_exceeds(tool, field, max_chars)
222
+ const ale = contentAtoms["arg_length_exceeds"];
223
+ if (ale && event.args) {
224
+ for (const raw of ale) {
225
+ const parts = raw.split("|");
226
+ if (parts.length >= 3) {
227
+ const targetTool = parts[0];
228
+ const field = parts[1];
229
+ const maxChars = parseInt(parts[2], 10) || 500;
230
+ if (targetTool === tool) {
231
+ const fieldVal = event.args[field] ?? "";
232
+ v[predKey("arg_length_exceeds", targetTool, field, String(maxChars))] =
233
+ String(fieldVal).length > maxChars;
192
234
  }
193
- // Strategy 2: CLI --field VALUE
194
- if (numericVal == null && argsStr) {
195
- const flagRe = new RegExp(`--${field.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s+([+-]?\\d+(?:\\.\\d+)?)`);
196
- const m = argsStr.match(flagRe);
197
- if (m)
198
- numericVal = parseFloat(m[1]);
199
- }
200
- // Strategy 3: positional index
201
- if (numericVal == null && event.args && /^\d+$/.test(field)) {
202
- const cmdStr = String(event.args.command ?? "");
203
- const tokens = cmdStr.split(/\s+/);
204
- const pos = parseInt(field, 10);
205
- if (pos < tokens.length) {
206
- const n = parseFloat(tokens[pos]);
235
+ }
236
+ }
237
+ }
238
+ // arg_numeric(tool, field) — extract numeric value via 3 strategies:
239
+ // 1. Direct dict key
240
+ // 2. CLI flag "--field VALUE"
241
+ // 3. Positional token in command string
242
+ const anPatterns = contentAtoms["arg_numeric"];
243
+ if (anPatterns) {
244
+ for (const raw of anPatterns) {
245
+ const parts = raw.split("|");
246
+ if (parts.length >= 2) {
247
+ const targetTool = parts[0];
248
+ const field = parts[1];
249
+ if (targetTool === tool) {
250
+ let numericVal = null;
251
+ // Strategy 1: direct dict key
252
+ if (event.args && field in event.args) {
253
+ const val = event.args[field];
254
+ const n = typeof val === "number" ? val : parseFloat(String(val));
207
255
  if (!isNaN(n))
208
256
  numericVal = n;
209
257
  }
258
+ // Strategy 2: CLI --field VALUE
259
+ if (numericVal == null && argsStr) {
260
+ const flagRe = new RegExp(`--${escapeRegexLiteral(field)}\\s+([+-]?\\d+(?:\\.\\d+)?)`);
261
+ const m = argsStr.match(flagRe);
262
+ if (m)
263
+ numericVal = parseFloat(m[1]);
264
+ }
265
+ // Strategy 3: positional index
266
+ if (numericVal == null && event.args && /^\d+$/.test(field)) {
267
+ const cmdStr = String(event.args.command ?? "");
268
+ const tokens = cmdStr.split(/\s+/);
269
+ const pos = parseInt(field, 10);
270
+ if (pos < tokens.length) {
271
+ const n = parseFloat(tokens[pos]);
272
+ if (!isNaN(n))
273
+ numericVal = n;
274
+ }
275
+ }
276
+ if (numericVal != null) {
277
+ v[predKey("arg_numeric", targetTool, field)] = numericVal;
278
+ }
210
279
  }
211
- if (numericVal != null) {
212
- v[predKey("arg_numeric", targetTool, field)] = numericVal;
280
+ }
281
+ }
282
+ }
283
+ // arg_paths_within(tool, *prefixes) — all /-paths in args within prefix set
284
+ const apw = contentAtoms["arg_paths_within"];
285
+ if (apw && argsStr) {
286
+ for (const raw of apw) {
287
+ const parts = raw.split("|");
288
+ if (parts.length >= 2) {
289
+ const targetTool = parts[0];
290
+ const prefixes = parts.slice(1);
291
+ if (targetTool === tool) {
292
+ const paths = argsStr.match(/(\/[^\s;|&>"']+)/g) ?? [];
293
+ const allWithin = paths.length === 0 ||
294
+ paths.every((p) => prefixes.some((pre) => p.startsWith(pre)));
295
+ v[predKey("arg_paths_within", targetTool, ...prefixes)] = allWithin;
213
296
  }
214
297
  }
215
298
  }
216
299
  }
217
300
  }
218
- // arg_paths_within(tool, *prefixes) — all /-paths in args within prefix set
219
- const apw = contentAtoms["arg_paths_within"];
220
- if (apw && argsStr) {
221
- for (const raw of apw) {
222
- const parts = raw.split("|");
223
- if (parts.length >= 2) {
224
- const targetTool = parts[0];
225
- const prefixes = parts.slice(1);
226
- if (targetTool === tool) {
227
- const paths = argsStr.match(/(\/[^\s;|&>"']+)/g) ?? [];
228
- const allWithin = paths.length === 0 ||
229
- paths.every((p) => prefixes.some((pre) => p.startsWith(pre)));
230
- v[predKey("arg_paths_within", targetTool, ...prefixes)] = allWithin;
301
+ }
302
+ else if (eventType === "llm_response") {
303
+ // ── llm_said(pattern) ───────────────────────────────────────
304
+ const content = event.content ?? "";
305
+ if (content && contentAtoms && contentAtoms["llm_said"]) {
306
+ for (const raw of contentAtoms["llm_said"]) {
307
+ const pattern = raw;
308
+ if (!pattern)
309
+ continue;
310
+ let matched = false;
311
+ try {
312
+ matched = new RegExp(pattern).test(content);
313
+ }
314
+ catch {
315
+ // Bad regex → never matches (parity with Python re.search → no match).
316
+ }
317
+ v[predKey("llm_said", pattern)] = matched;
318
+ }
319
+ }
320
+ // response_words / response_chars — unparameterized Vars consumed by max_length.
321
+ if (content) {
322
+ v["response_words"] = content.trim().length === 0 ? 0 : content.trim().split(/\s+/).length;
323
+ v["response_chars"] = content.length;
324
+ }
325
+ // ``args.segment`` convention: extended-thinking integrations tag
326
+ // segment="thinking" / "answer" so contracts can scope content
327
+ // checks to one segment only.
328
+ if (event.args && typeof event.args.segment === "string" && event.args.segment) {
329
+ v[predKey("segment", String(event.args.segment))] = true;
330
+ }
331
+ }
332
+ else if (eventType === "context_update") {
333
+ // Merge user-pushed facts into state.currentCtx so every
334
+ // subsequent event sees them as ctx(k, v) atoms. Apply BEFORE
335
+ // the ctx-emission loop so a contract at the same timestep as
336
+ // the update already observes the new keys.
337
+ if (event.args) {
338
+ for (const [k, val] of Object.entries(event.args)) {
339
+ if (k == null)
340
+ continue;
341
+ state.currentCtx[String(k)] = val == null ? "" : String(val);
342
+ }
343
+ }
344
+ }
345
+ // ── ctx(k, v) / ctx_value(k) — emit per current_ctx entry, every event ─
346
+ // ctx(k, v) is the boolean atom (k==v). ctx_value(k) carries the raw
347
+ // value so Term-based comparisons can read it without hard-coding the
348
+ // expected value: e.g. Eq(CtxValue("approved_amount"),
349
+ // ArgValue("issue_refund", "amount")).
350
+ for (const [k, val] of Object.entries(state.currentCtx)) {
351
+ v[predKey("ctx", k, val)] = true;
352
+ v[predKey("ctx_value", k)] = val;
353
+ }
354
+ // ── ctx_matches(key, pattern) — regex against current_ctx[key] ──
355
+ if (contentAtoms && contentAtoms["ctx_matches"]) {
356
+ for (const raw of contentAtoms["ctx_matches"]) {
357
+ const parts = raw.split("|");
358
+ if (parts.length >= 2) {
359
+ const key = parts[0];
360
+ const pattern = parts.slice(1).join("|");
361
+ const cur = state.currentCtx[key];
362
+ let matched = false;
363
+ if (cur != null) {
364
+ try {
365
+ matched = new RegExp(pattern).test(cur);
366
+ }
367
+ catch {
368
+ matched = false;
231
369
  }
232
370
  }
371
+ v[predKey("ctx_matches", key, pattern)] = matched;
233
372
  }
234
373
  }
235
374
  }
236
- // token_count(type) — cumulative token count
237
- // Extract from event.args.tokens if present (gen_ai.usage.* convention)
375
+ // token_count(type) — cumulative token count (only meaningful for events with usage)
238
376
  if (event.args) {
239
377
  const tokens = event.args.tokens;
240
378
  if (tokens) {
@@ -251,18 +389,56 @@ export function groundEvent(event, state, contentAtoms) {
251
389
  for (const [scope, cnt] of Object.entries(state.tokenCounts)) {
252
390
  v[predKey("token_count", scope)] = cnt;
253
391
  }
254
- // delegation_depth — incremented by event.event_type === "delegation"
255
- if (event.event_type === "delegation") {
392
+ // delegation_depth — incremented by event_type === "delegation"
393
+ if (eventType === "delegation") {
256
394
  state.delegationDepth += 1;
257
395
  }
258
396
  v[predKey("delegation_depth")] = state.delegationDepth;
259
- // Emit count/count_with for all tracked vars
397
+ // Emit count snapshots for all tracked tools
260
398
  for (const [t, cnt] of Object.entries(state.callCounts)) {
261
399
  v[predKey("count", t)] = cnt;
262
400
  }
263
401
  for (const [key, cnt] of Object.entries(state.callWithCounts)) {
264
- const [t, p] = [key.split("|")[0], key.split("|").slice(1).join("|")];
265
- v[predKey("count_with", t, p)] = cnt;
402
+ const idx = key.indexOf("|");
403
+ if (idx > 0) {
404
+ v[predKey("count_with", key.slice(0, idx), key.slice(idx + 1))] = cnt;
405
+ }
406
+ }
407
+ // ── last_ts bookkeeping (fresh False→True transitions) ─────────
408
+ // A predicate that was True last event and still True now is
409
+ // "sustained" — we do NOT refresh its last_ts. Sustained covers
410
+ // ctx atoms re-emitted while held in scope; this is what makes
411
+ // time_since(ctx(approval.role, alice)) measure time since the
412
+ // approval was granted, not the trivial 0 from re-emission.
413
+ const trueNow = new Set();
414
+ for (const [key, val] of Object.entries(v)) {
415
+ if (val === true) {
416
+ trueNow.add(key);
417
+ if (!state.trueAtPrev.has(key)) {
418
+ state.lastTs[key] = state.now;
419
+ }
420
+ }
421
+ }
422
+ state.trueAtPrev = trueNow;
423
+ // ── time atoms (emitted last so they see fresh state.now) ─────
424
+ v["now"] = state.now;
425
+ if (contentAtoms && contentAtoms["time_since"]) {
426
+ for (const raw of contentAtoms["time_since"]) {
427
+ if (!raw)
428
+ continue;
429
+ const targetKey = raw;
430
+ let delta;
431
+ if (targetKey in state.lastTs) {
432
+ delta = state.now - state.lastTs[targetKey];
433
+ }
434
+ else {
435
+ // Sentinel — predicate has never fired. "Very long ago" is
436
+ // the right semantics for Le(time_since(P), N): if P never
437
+ // happened, the constraint must evaluate False.
438
+ delta = 1e18;
439
+ }
440
+ v[predKey("time_since", targetKey)] = delta;
441
+ }
266
442
  }
267
443
  return v;
268
444
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grounding.js","sourceRoot":"","sources":["../../src/core/grounding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grounding.js","sourceRoot":"","sources":["../../src/core/grounding.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * NL → Formula parser (rule-based keyword matching).
3
3
  *
4
- * Simplified port of sponsio/generation/nl_to_contract.py.
4
+ * Simplified port of sponsio/generation/dsl_to_contract.py.
5
5
  * Handles common NL patterns like:
6
6
  * "tool `A` must precede `B`"
7
7
  * "tool `X` at most 3 times"
@@ -1 +1 @@
1
- {"version":3,"file":"nl-parser.d.ts","sourceRoot":"","sources":["../../src/core/nl-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAmHhD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA8CvD"}
1
+ {"version":3,"file":"nl-parser.d.ts","sourceRoot":"","sources":["../../src/core/nl-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAsLhD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAoDvD"}