@sponsio/sdk 0.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/capability/credentials.yaml +188 -0
- package/contracts/capability/database.yaml +141 -0
- package/contracts/capability/filesystem-strict.yaml +101 -0
- package/contracts/capability/filesystem.yaml +239 -0
- package/contracts/capability/self-modify.yaml +152 -0
- package/contracts/capability/shell.yaml +246 -0
- package/contracts/capability/subagent.yaml +184 -0
- package/contracts/core/llm_safety.yaml +130 -0
- package/contracts/core/runaway.yaml +43 -0
- package/contracts/core/universal.yaml +34 -0
- package/contracts/incident/claude-code-secret-bypass.yaml +197 -0
- package/contracts/incident/cursor-railway-wipe.yaml +164 -0
- package/contracts/incident/mcp-composition.yaml +418 -0
- package/contracts/incident/openclaw.yaml +500 -0
- package/contracts/incident/subagent-escape.yaml +177 -0
- package/contracts/premium/.gitkeep +7 -0
- package/dist/contract.d.ts +59 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +97 -0
- package/dist/contract.js.map +1 -0
- package/dist/core/config-loader.d.ts +90 -0
- package/dist/core/config-loader.d.ts.map +1 -0
- package/dist/core/config-loader.js +530 -0
- package/dist/core/config-loader.js.map +1 -0
- package/dist/core/evaluator.d.ts +15 -0
- package/dist/core/evaluator.d.ts.map +1 -0
- package/dist/core/evaluator.js +87 -0
- package/dist/core/evaluator.js.map +1 -0
- package/dist/core/formula.d.ts +103 -0
- package/dist/core/formula.d.ts.map +1 -0
- package/dist/core/formula.js +167 -0
- package/dist/core/formula.js.map +1 -0
- package/dist/core/grounding.d.ts +43 -0
- package/dist/core/grounding.d.ts.map +1 -0
- package/dist/core/grounding.js +269 -0
- package/dist/core/grounding.js.map +1 -0
- package/dist/core/nl-parser.d.ts +12 -0
- package/dist/core/nl-parser.d.ts.map +1 -0
- package/dist/core/nl-parser.js +152 -0
- package/dist/core/nl-parser.js.map +1 -0
- package/dist/core/pack-loader.d.ts +15 -0
- package/dist/core/pack-loader.d.ts.map +1 -0
- package/dist/core/pack-loader.js +220 -0
- package/dist/core/pack-loader.js.map +1 -0
- package/dist/core/parser.d.ts +19 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +235 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/pattern-factory.d.ts +38 -0
- package/dist/core/pattern-factory.d.ts.map +1 -0
- package/dist/core/pattern-factory.js +222 -0
- package/dist/core/pattern-factory.js.map +1 -0
- package/dist/core/patterns.d.ts +67 -0
- package/dist/core/patterns.d.ts.map +1 -0
- package/dist/core/patterns.js +585 -0
- package/dist/core/patterns.js.map +1 -0
- package/dist/core/session-log.d.ts +91 -0
- package/dist/core/session-log.d.ts.map +1 -0
- package/dist/core/session-log.js +196 -0
- package/dist/core/session-log.js.map +1 -0
- package/dist/core/spans.d.ts +92 -0
- package/dist/core/spans.d.ts.map +1 -0
- package/dist/core/spans.js +148 -0
- package/dist/core/spans.js.map +1 -0
- package/dist/core/sto.d.ts +120 -0
- package/dist/core/sto.d.ts.map +1 -0
- package/dist/core/sto.js +147 -0
- package/dist/core/sto.js.map +1 -0
- package/dist/index.d.ts +267 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +540 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/claude-agent.d.ts +29 -0
- package/dist/integrations/claude-agent.d.ts.map +1 -0
- package/dist/integrations/claude-agent.js +40 -0
- package/dist/integrations/claude-agent.js.map +1 -0
- package/dist/integrations/google-adk.d.ts +27 -0
- package/dist/integrations/google-adk.d.ts.map +1 -0
- package/dist/integrations/google-adk.js +81 -0
- package/dist/integrations/google-adk.js.map +1 -0
- package/dist/integrations/langchain.d.ts +26 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +74 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/openai-agents.d.ts +45 -0
- package/dist/integrations/openai-agents.d.ts.map +1 -0
- package/dist/integrations/openai-agents.js +81 -0
- package/dist/integrations/openai-agents.js.map +1 -0
- package/dist/integrations/openai.d.ts +24 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +77 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +38 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +107 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/render/components.d.ts +23 -0
- package/dist/render/components.d.ts.map +1 -0
- package/dist/render/components.js +133 -0
- package/dist/render/components.js.map +1 -0
- package/dist/render/derive.d.ts +23 -0
- package/dist/render/derive.d.ts.map +1 -0
- package/dist/render/derive.js +92 -0
- package/dist/render/derive.js.map +1 -0
- package/dist/render/session-view.d.ts +19 -0
- package/dist/render/session-view.d.ts.map +1 -0
- package/dist/render/session-view.js +236 -0
- package/dist/render/session-view.js.map +1 -0
- package/dist/render/tokens.d.ts +44 -0
- package/dist/render/tokens.d.ts.map +1 -0
- package/dist/render/tokens.js +72 -0
- package/dist/render/tokens.js.map +1 -0
- package/package.json +83 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sponsio/sdk — Runtime contract enforcement for LLM agents.
|
|
3
|
+
*
|
|
4
|
+
* Native TypeScript implementation. < 50KB bundle, zero cold start,
|
|
5
|
+
* Edge/Serverless compatible.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { Sponsio } from "@sponsio/sdk"
|
|
9
|
+
*
|
|
10
|
+
* // Inline contracts:
|
|
11
|
+
* const guard = new Sponsio({
|
|
12
|
+
* agentId: "refund_bot",
|
|
13
|
+
* contracts: ["tool `check_policy` must precede `issue_refund`"]
|
|
14
|
+
* })
|
|
15
|
+
*
|
|
16
|
+
* // Or loaded from a shared sponsio.yaml:
|
|
17
|
+
* const guard = new Sponsio({ config: "sponsio.yaml", agentId: "refund_bot" })
|
|
18
|
+
*
|
|
19
|
+
* const result = guard.guardBefore("issue_refund", { orderId: "#123" })
|
|
20
|
+
* if (result.blocked) { ... }
|
|
21
|
+
*/
|
|
22
|
+
import { evaluate } from "./core/evaluator.js";
|
|
23
|
+
import { groundEvent, newGroundingState, collectContentAtoms, } from "./core/grounding.js";
|
|
24
|
+
import { parseNl } from "./core/nl-parser.js";
|
|
25
|
+
import { loadSponsoConfig, } from "./core/config-loader.js";
|
|
26
|
+
import { SessionLogger } from "./core/session-log.js";
|
|
27
|
+
import { ContractCheckSpan, EnforcementSpan, GuaranteeSpan, SpanCollector, } from "./core/spans.js";
|
|
28
|
+
import { renderSession } from "./render/session-view.js";
|
|
29
|
+
// Re-exports
|
|
30
|
+
export { evaluate } from "./core/evaluator.js";
|
|
31
|
+
export * from "./core/formula.js";
|
|
32
|
+
export * from "./core/patterns.js";
|
|
33
|
+
export { parseNl } from "./core/nl-parser.js";
|
|
34
|
+
export { parseRepr, ParseError } from "./core/parser.js";
|
|
35
|
+
export { groundEvent, newGroundingState, collectContentAtoms, } from "./core/grounding.js";
|
|
36
|
+
export { loadSponsoConfig } from "./core/config-loader.js";
|
|
37
|
+
export { SessionLogger, rotateSessions } from "./core/session-log.js";
|
|
38
|
+
export { contract, ContractBuilder } from "./contract.js";
|
|
39
|
+
export { createJudge, LlmJudgeEvaluator, ToneEvaluator, RelevanceEvaluator, SemanticPiiFreeEvaluator, HallucinationFreeEvaluator, ScopeRespectEvaluator, MetricIntegrityEvaluator, InjectionFreeEvaluator, parseScore, } from "./core/sto.js";
|
|
40
|
+
/**
|
|
41
|
+
* Best-effort accessor for the agent-facing line. Prefers the
|
|
42
|
+
* structured ``agentMsg`` field when populated; falls back to
|
|
43
|
+
* ``message`` for adapters that haven't migrated yet. Mirrors the
|
|
44
|
+
* Python ``select_agent_message`` helper.
|
|
45
|
+
*/
|
|
46
|
+
export function selectAgentMessage(violations, fallback = "Contract violation") {
|
|
47
|
+
for (const v of violations) {
|
|
48
|
+
if (v.agentMsg && v.agentMsg.length > 0) {
|
|
49
|
+
return v.agentMsg;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (violations.length > 0) {
|
|
53
|
+
return violations[0].message;
|
|
54
|
+
}
|
|
55
|
+
return fallback;
|
|
56
|
+
}
|
|
57
|
+
export class Sponsio {
|
|
58
|
+
agentId;
|
|
59
|
+
mode;
|
|
60
|
+
_contracts;
|
|
61
|
+
_stoContracts;
|
|
62
|
+
_judge;
|
|
63
|
+
_judgeFallback;
|
|
64
|
+
_stoContext;
|
|
65
|
+
_trace;
|
|
66
|
+
_state;
|
|
67
|
+
_contentAtoms;
|
|
68
|
+
_violations;
|
|
69
|
+
_logger;
|
|
70
|
+
_turnSpans = [];
|
|
71
|
+
constructor(options = {}) {
|
|
72
|
+
this.agentId = options.agentId ?? "agent";
|
|
73
|
+
this._trace = [];
|
|
74
|
+
this._state = newGroundingState();
|
|
75
|
+
this._violations = [];
|
|
76
|
+
this._contracts = [];
|
|
77
|
+
this._stoContracts = [];
|
|
78
|
+
this._judge = null;
|
|
79
|
+
this._judgeFallback = "allow";
|
|
80
|
+
this._stoContext = {};
|
|
81
|
+
// ── Gather contracts + yaml-derived settings ────────────────────
|
|
82
|
+
let yamlMode;
|
|
83
|
+
let yamlSkipped = [];
|
|
84
|
+
let yamlJudge;
|
|
85
|
+
let yamlStoSpecs = [];
|
|
86
|
+
const sources = [];
|
|
87
|
+
if (options.config) {
|
|
88
|
+
const loaded = loadSponsoConfig(options.config, this.agentId);
|
|
89
|
+
for (const c of loaded.contracts)
|
|
90
|
+
sources.push(c);
|
|
91
|
+
yamlMode = loaded.mode;
|
|
92
|
+
yamlSkipped = loaded.skipped;
|
|
93
|
+
yamlJudge = loaded.judge;
|
|
94
|
+
yamlStoSpecs = loaded.stoSpecs;
|
|
95
|
+
}
|
|
96
|
+
for (const c of options.contracts ?? [])
|
|
97
|
+
sources.push(c);
|
|
98
|
+
// ── Resolve mode: env > ctor > yaml > default ────────────────────
|
|
99
|
+
this.mode = resolveMode(options.mode, yamlMode);
|
|
100
|
+
// ── Parse NL strings into det formulas ───────────────────────────
|
|
101
|
+
for (const c of sources) {
|
|
102
|
+
if (typeof c === "string") {
|
|
103
|
+
const parsed = parseNl(c);
|
|
104
|
+
if (parsed) {
|
|
105
|
+
this._contracts.push(parsed);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.warn(`[sponsio] Could not parse: "${c}"`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this._contracts.push(c);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ── Sto pipeline is a Sponsio Cloud feature ──────────────────────
|
|
116
|
+
// The managed LLM-judge catalog (`tone` / `relevance` / `llm_judge`
|
|
117
|
+
// …) and the judge client live in `sponsio[cloud]`. The OSS
|
|
118
|
+
// engine logs-and-skips any yaml sto contracts and any inline
|
|
119
|
+
// `judge:` option, never constructs an evaluator, never contacts
|
|
120
|
+
// an LLM. The API surface (`guardAfter`, `setContext`, `judge`
|
|
121
|
+
// ctor option) is preserved so a shared yaml between Python+Cloud
|
|
122
|
+
// and TS+OSS doesn't refuse to load.
|
|
123
|
+
this._judge = null;
|
|
124
|
+
this._judgeFallback = "allow";
|
|
125
|
+
for (const spec of yamlStoSpecs) {
|
|
126
|
+
yamlSkipped.push({
|
|
127
|
+
kind: "sto-contract",
|
|
128
|
+
detail: `${spec.desc} (sto pipeline is a Sponsio Cloud feature)`,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (options.judge) {
|
|
132
|
+
yamlSkipped.push({
|
|
133
|
+
kind: "sto-contract",
|
|
134
|
+
detail: "`judge:` option ignored (sto pipeline is a Sponsio Cloud feature; install sponsio[cloud])",
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Reference yamlJudge so unused-var lints don't fire — the field
|
|
138
|
+
// is parsed by the loader for shared-yaml compatibility but the
|
|
139
|
+
// OSS engine never builds a judge from it.
|
|
140
|
+
void yamlJudge;
|
|
141
|
+
// ── Warn once about yaml features the TS runtime can't handle ───
|
|
142
|
+
warnOnceAboutSkipped(yamlSkipped);
|
|
143
|
+
this._contentAtoms = collectContentAtoms(this._contracts.map((c) => c.formula));
|
|
144
|
+
// ── Session log ─────────────────────────────────────────────────
|
|
145
|
+
const wantLog = options.sessionLog ?? true;
|
|
146
|
+
this._logger = wantLog
|
|
147
|
+
? new SessionLogger(this.agentId, { baseDir: options.sessionLogBaseDir })
|
|
148
|
+
: null;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Check a tool call against contracts before execution.
|
|
152
|
+
*
|
|
153
|
+
* On block, **all** mutations made by ``groundEvent`` are rolled back via a
|
|
154
|
+
* pre-call snapshot. Previously only ``callCounts[toolName]`` was undone,
|
|
155
|
+
* leaving ``consecutiveCounts``, ``lastTool``, ``callWithCounts``,
|
|
156
|
+
* ``tokenCounts``, and ``delegationDepth`` in a stale state; subsequent
|
|
157
|
+
* guards saw counts as if the blocked call had executed.
|
|
158
|
+
*
|
|
159
|
+
* In **observe mode**, violations are logged to the session JSONL
|
|
160
|
+
* but not reported as blocks — the method always returns ``allowed: true``.
|
|
161
|
+
* In **enforce mode**, the first violation blocks the call.
|
|
162
|
+
*/
|
|
163
|
+
/** Read the human-readable descs of all compiled contracts (det only). */
|
|
164
|
+
contractDescs() {
|
|
165
|
+
return this._contracts.map((c) => c.desc);
|
|
166
|
+
}
|
|
167
|
+
guardBefore(toolName, args = {}) {
|
|
168
|
+
const event = { tool: toolName, args };
|
|
169
|
+
const snapshot = this._snapshotState();
|
|
170
|
+
const valuation = groundEvent(event, this._state, this._contentAtoms);
|
|
171
|
+
this._trace.push(valuation);
|
|
172
|
+
// Build a span tree for this turn (mirrors Python's RuntimeMonitor).
|
|
173
|
+
const collector = new SpanCollector(this.agentId, toolName);
|
|
174
|
+
// Stash args on the root for the renderer (it shows them in the trace).
|
|
175
|
+
collector.rootSpan().attributes.args = args;
|
|
176
|
+
const violations = [];
|
|
177
|
+
const violatedDescs = [];
|
|
178
|
+
const detViolations = [];
|
|
179
|
+
for (const contract of this._contracts) {
|
|
180
|
+
const checkSpan = new ContractCheckSpan(contract.desc, "hard");
|
|
181
|
+
collector.push(checkSpan);
|
|
182
|
+
const result = evaluate(contract.formula, this._trace);
|
|
183
|
+
// The TS evaluator is currently a single-pass deterministic
|
|
184
|
+
// check; it doesn't separately track assumption vs guarantee
|
|
185
|
+
// sub-formulas. Synthesise a guarantee span so the renderer can
|
|
186
|
+
// surface failed contracts without refactoring the evaluator.
|
|
187
|
+
const guaranteeSpan = new GuaranteeSpan(contract.desc, result);
|
|
188
|
+
collector.add(guaranteeSpan, result ? "ok" : "violated");
|
|
189
|
+
if (!result) {
|
|
190
|
+
const verb = this.mode === "observe" ? "WOULD-BLOCK" : "BLOCKED";
|
|
191
|
+
const msg = `${verb}: ${this.agentId}.${toolName} — det constraint violated: ${contract.desc}`;
|
|
192
|
+
violations.push(msg);
|
|
193
|
+
violatedDescs.push(contract.desc);
|
|
194
|
+
detViolations.push({
|
|
195
|
+
desc: contract.desc,
|
|
196
|
+
message: msg,
|
|
197
|
+
ruleId: contract.patternName || contract.desc,
|
|
198
|
+
agentMsg: `The action \`${toolName}\` was rejected by policy ` +
|
|
199
|
+
`(${contract.patternName || contract.desc}): ${contract.desc}. ` +
|
|
200
|
+
`Choose a different approach.`,
|
|
201
|
+
});
|
|
202
|
+
// Nest violation + enforcement spans under the failed
|
|
203
|
+
// guarantee so the renderer can pick up the verdict word.
|
|
204
|
+
const enforce = new EnforcementSpan("DetBlock", this.mode === "enforce" ? "blocked" : "blocked");
|
|
205
|
+
guaranteeSpan.children.push(enforce);
|
|
206
|
+
enforce.finish("violated");
|
|
207
|
+
}
|
|
208
|
+
collector.pop(result ? "ok" : "violated");
|
|
209
|
+
}
|
|
210
|
+
const hasViolations = violations.length > 0;
|
|
211
|
+
const blocked = hasViolations && this.mode === "enforce";
|
|
212
|
+
this._turnSpans.push(collector.finishRoot(blocked, this._contracts.length, violations.length));
|
|
213
|
+
if (blocked) {
|
|
214
|
+
this._trace.pop();
|
|
215
|
+
this._state = snapshot;
|
|
216
|
+
this._violations.push(...violations);
|
|
217
|
+
this._logViolations(toolName, violations, violatedDescs, "blocked");
|
|
218
|
+
return {
|
|
219
|
+
blocked: true,
|
|
220
|
+
allowed: false,
|
|
221
|
+
message: violations[0],
|
|
222
|
+
violations,
|
|
223
|
+
detViolations,
|
|
224
|
+
stoViolations: [],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Either no violations, or observe mode: allow + log.
|
|
228
|
+
if (hasViolations) {
|
|
229
|
+
// observe mode: capture for summary(), but don't roll back.
|
|
230
|
+
this._violations.push(...violations);
|
|
231
|
+
this._logViolations(toolName, violations, violatedDescs, "observed");
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// Clean allow: one "allow" record per guardBefore so
|
|
235
|
+
// ``sponsio report`` sees a complete turn ledger.
|
|
236
|
+
this._logAllow(toolName);
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
blocked: false,
|
|
240
|
+
allowed: true,
|
|
241
|
+
message: "",
|
|
242
|
+
violations: [],
|
|
243
|
+
detViolations,
|
|
244
|
+
stoViolations: [],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Snapshot of the per-turn span trees this guard has produced since
|
|
249
|
+
* construction (or the last ``resetSession``). One root
|
|
250
|
+
* ``AgentTurnSpan`` per ``guardBefore`` call, with nested
|
|
251
|
+
* ``ContractCheckSpan`` / ``GuaranteeSpan`` / ``EnforcementSpan``
|
|
252
|
+
* children. Mirrors Python's ``RuntimeMonitor.turn_spans``.
|
|
253
|
+
*/
|
|
254
|
+
turnSpans() {
|
|
255
|
+
return [...this._turnSpans];
|
|
256
|
+
}
|
|
257
|
+
/** Drop accumulated turn spans (used between sessions in tests). */
|
|
258
|
+
resetSession() {
|
|
259
|
+
this._turnSpans = [];
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Render the end-of-session view to ``out`` (defaults to stderr) —
|
|
263
|
+
* banner, contracts armed, trace tree, verdict, perf, CTA. Mirrors
|
|
264
|
+
* Python's ``RuntimeMonitor.finish_session`` + ``render_session``
|
|
265
|
+
* pipeline. Call this once at the end of the agent's run.
|
|
266
|
+
*/
|
|
267
|
+
finishSession(opts = {}) {
|
|
268
|
+
renderSession({
|
|
269
|
+
agentId: this.agentId,
|
|
270
|
+
mode: this.mode,
|
|
271
|
+
contracts: this._contracts,
|
|
272
|
+
turnSpans: this._turnSpans,
|
|
273
|
+
...opts,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/** Deep-copy the grounding state so it can be restored on a blocked call. */
|
|
277
|
+
_snapshotState() {
|
|
278
|
+
return {
|
|
279
|
+
callCounts: { ...this._state.callCounts },
|
|
280
|
+
callWithCounts: { ...this._state.callWithCounts },
|
|
281
|
+
lastTool: this._state.lastTool,
|
|
282
|
+
consecutiveCounts: { ...this._state.consecutiveCounts },
|
|
283
|
+
tokenCounts: { ...this._state.tokenCounts },
|
|
284
|
+
delegationDepth: this._state.delegationDepth,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
_logViolations(toolName, messages, descs, action) {
|
|
288
|
+
if (!this._logger)
|
|
289
|
+
return;
|
|
290
|
+
const ts = Date.now() / 1000;
|
|
291
|
+
for (let i = 0; i < messages.length; i++) {
|
|
292
|
+
this._logger.log({
|
|
293
|
+
ts,
|
|
294
|
+
agent_id: this.agentId,
|
|
295
|
+
action,
|
|
296
|
+
pipeline: "det",
|
|
297
|
+
constraint: descs[i] ?? `${this.agentId}.${toolName}`,
|
|
298
|
+
result: { action, message: messages[i] },
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
_logAllow(toolName) {
|
|
303
|
+
if (!this._logger)
|
|
304
|
+
return;
|
|
305
|
+
this._logger.log({
|
|
306
|
+
ts: Date.now() / 1000,
|
|
307
|
+
agent_id: this.agentId,
|
|
308
|
+
action: "allowed",
|
|
309
|
+
pipeline: "det",
|
|
310
|
+
constraint: `${this.agentId}.${toolName}`,
|
|
311
|
+
result: { action: "allowed", message: "" },
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Record tool output after execution and run the sto pipeline.
|
|
316
|
+
*
|
|
317
|
+
* Returns a ``CheckResult`` whose ``stoViolations`` carries any
|
|
318
|
+
* stochastic rule failures (``tone`` / ``llm_judge``). When no sto
|
|
319
|
+
* contracts are declared the method returns synchronously in
|
|
320
|
+
* effect (the ``Promise`` resolves on the microtask queue) and
|
|
321
|
+
* never contacts the judge LLM.
|
|
322
|
+
*
|
|
323
|
+
* In **observe mode** violations are logged but the method still
|
|
324
|
+
* reports ``allowed: true``. In **enforce mode** the first sto
|
|
325
|
+
* violation flips ``blocked: true`` — but the tool output has
|
|
326
|
+
* already executed, so the caller is responsible for routing the
|
|
327
|
+
* result (retry with feedback, redirect to safe, etc.).
|
|
328
|
+
*/
|
|
329
|
+
async guardAfter(toolName, output = "") {
|
|
330
|
+
if (this._stoContracts.length === 0) {
|
|
331
|
+
return emptyAllow();
|
|
332
|
+
}
|
|
333
|
+
const stoViolations = [];
|
|
334
|
+
const flatMessages = [];
|
|
335
|
+
for (const sto of this._stoContracts) {
|
|
336
|
+
try {
|
|
337
|
+
const result = await sto.evaluator.evaluate({
|
|
338
|
+
toolName,
|
|
339
|
+
output,
|
|
340
|
+
context: this._stoContext,
|
|
341
|
+
});
|
|
342
|
+
if (result.passed) {
|
|
343
|
+
this._logSto(sto.desc, "allowed", result.score, result.evidence);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
const verb = this.mode === "observe" ? "WOULD-BLOCK" : "BLOCKED";
|
|
347
|
+
const msg = `${verb}: ${this.agentId}.${toolName} — sto constraint ` +
|
|
348
|
+
`violated: ${sto.desc} (score=${result.score.toFixed(2)})`;
|
|
349
|
+
// Sto outcomes default to retry-style phrasing — the model
|
|
350
|
+
// is being asked to regenerate addressing the failed
|
|
351
|
+
// property, not to abandon the action altogether. retryHint
|
|
352
|
+
// carries the evaluator's suggestion when available.
|
|
353
|
+
stoViolations.push({
|
|
354
|
+
desc: sto.desc,
|
|
355
|
+
message: msg,
|
|
356
|
+
ruleId: sto.desc,
|
|
357
|
+
agentMsg: `Your output failed the \`${sto.desc}\` check ` +
|
|
358
|
+
`(score=${result.score.toFixed(2)}). Regenerate addressing the issue.`,
|
|
359
|
+
retryHint: result.evidence || undefined,
|
|
360
|
+
});
|
|
361
|
+
flatMessages.push(msg);
|
|
362
|
+
this._logSto(sto.desc, this.mode === "observe" ? "observed" : "blocked", result.score, result.evidence);
|
|
363
|
+
}
|
|
364
|
+
catch (err) {
|
|
365
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
366
|
+
const handling = this._judgeFallback;
|
|
367
|
+
if (handling === "skip") {
|
|
368
|
+
console.warn(`[sponsio] sto ${sto.desc}: judge error (${errMsg}) — skipping`);
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
const verb = this.mode === "observe" ? "WOULD-BLOCK" : "BLOCKED";
|
|
372
|
+
if (handling === "deny") {
|
|
373
|
+
const msg = `${verb}: ${this.agentId}.${toolName} — sto judge error ` +
|
|
374
|
+
`(${errMsg}); fallback_mode=deny`;
|
|
375
|
+
stoViolations.push({ desc: sto.desc, message: msg });
|
|
376
|
+
flatMessages.push(msg);
|
|
377
|
+
this._logSto(sto.desc, this.mode === "observe" ? "observed" : "blocked", undefined, `judge-error: ${errMsg}`);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// allow (default) — log a pass so the operator can see the
|
|
381
|
+
// judge was exercised, but do not create a violation.
|
|
382
|
+
console.warn(`[sponsio] sto ${sto.desc}: judge error (${errMsg}) — allowing`);
|
|
383
|
+
this._logSto(sto.desc, "allowed", undefined, `judge-error-allowed: ${errMsg}`);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (stoViolations.length === 0) {
|
|
388
|
+
return emptyAllow();
|
|
389
|
+
}
|
|
390
|
+
this._violations.push(...flatMessages);
|
|
391
|
+
if (this.mode === "enforce") {
|
|
392
|
+
return {
|
|
393
|
+
blocked: true,
|
|
394
|
+
allowed: false,
|
|
395
|
+
message: flatMessages[0],
|
|
396
|
+
violations: flatMessages,
|
|
397
|
+
detViolations: [],
|
|
398
|
+
stoViolations,
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
blocked: false,
|
|
403
|
+
allowed: true,
|
|
404
|
+
message: "",
|
|
405
|
+
violations: [],
|
|
406
|
+
detViolations: [],
|
|
407
|
+
stoViolations,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
_logSto(desc, action, score, evidence) {
|
|
411
|
+
if (!this._logger)
|
|
412
|
+
return;
|
|
413
|
+
const record = {
|
|
414
|
+
ts: Date.now() / 1000,
|
|
415
|
+
agent_id: this.agentId,
|
|
416
|
+
action,
|
|
417
|
+
pipeline: "sto",
|
|
418
|
+
constraint: desc,
|
|
419
|
+
result: {
|
|
420
|
+
action,
|
|
421
|
+
message: evidence ?? "",
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
if (score !== undefined) {
|
|
425
|
+
record.sto = evidence ? { score, evidence } : { score };
|
|
426
|
+
}
|
|
427
|
+
this._logger.log(record);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Reset guard state for a new session.
|
|
431
|
+
*/
|
|
432
|
+
reset() {
|
|
433
|
+
this._trace = [];
|
|
434
|
+
this._state = newGroundingState();
|
|
435
|
+
this._violations = [];
|
|
436
|
+
this._stoContext = {};
|
|
437
|
+
this._contentAtoms = collectContentAtoms(this._contracts.map((c) => c.formula));
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Stash per-turn context for the sto pipeline. Atoms that need
|
|
441
|
+
* grounding — ``relevance`` (``query``), ``hallucination_free``
|
|
442
|
+
* (``source``), ``scope_respect`` (``scope`` override),
|
|
443
|
+
* ``metric_integrity`` (``history``) — read from this snapshot on
|
|
444
|
+
* the next ``guardAfter`` call.
|
|
445
|
+
*
|
|
446
|
+
* Merges with any previously-set context; pass ``{ query: undefined }``
|
|
447
|
+
* to explicitly clear a field. ``reset()`` clears the whole snapshot.
|
|
448
|
+
*/
|
|
449
|
+
setContext(ctx) {
|
|
450
|
+
this._stoContext = { ...this._stoContext, ...ctx };
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Get all violations from this session.
|
|
454
|
+
*/
|
|
455
|
+
get violations() {
|
|
456
|
+
return [...this._violations];
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Get a summary string. Returns a formatted list of violations
|
|
460
|
+
* observed in this session, or ``"No violations"`` if clean.
|
|
461
|
+
*/
|
|
462
|
+
summary() {
|
|
463
|
+
if (this._violations.length === 0)
|
|
464
|
+
return "No violations";
|
|
465
|
+
return this._violations.map((v) => `- ${v}`).join("\n");
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Print the session summary to stdout — Python parity for
|
|
469
|
+
* ``guard.print_summary()``. Equivalent to
|
|
470
|
+
* ``console.log(guard.summary())``; exists so copy-pasted Python
|
|
471
|
+
* snippets compile (and so ad-hoc review in scripts reads the
|
|
472
|
+
* same way across both SDKs).
|
|
473
|
+
*/
|
|
474
|
+
printSummary() {
|
|
475
|
+
console.log(this.summary());
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/* -----------------------------------------------------------------
|
|
479
|
+
* helpers
|
|
480
|
+
* -----------------------------------------------------------------*/
|
|
481
|
+
/**
|
|
482
|
+
* Resolve the runtime mode with the same precedence as the Python
|
|
483
|
+
* SDK: ``SPONSIO_MODE`` env var wins over an explicit ctor arg so
|
|
484
|
+
* ops can flip enforcement in production without a code change.
|
|
485
|
+
*/
|
|
486
|
+
function resolveMode(ctorMode, yamlMode) {
|
|
487
|
+
const envRaw = process.env.SPONSIO_MODE;
|
|
488
|
+
if (envRaw === "enforce" || envRaw === "observe")
|
|
489
|
+
return envRaw;
|
|
490
|
+
if (envRaw) {
|
|
491
|
+
console.warn(`[sponsio] ignoring unknown SPONSIO_MODE="${envRaw}" ` +
|
|
492
|
+
`(expected "enforce" | "observe")`);
|
|
493
|
+
}
|
|
494
|
+
if (ctorMode)
|
|
495
|
+
return ctorMode;
|
|
496
|
+
if (yamlMode)
|
|
497
|
+
return yamlMode;
|
|
498
|
+
return "observe";
|
|
499
|
+
}
|
|
500
|
+
let _skippedWarned = false;
|
|
501
|
+
// Note: ``resolveJudge`` / ``buildStoContract`` / ``isJudgeClient``
|
|
502
|
+
// helpers were removed when the sto pipeline became Sponsio Cloud-only.
|
|
503
|
+
// The OSS engine never constructs a judge or evaluator; yaml sto
|
|
504
|
+
// specs flow through the ``yamlSkipped`` warning path in the ctor.
|
|
505
|
+
function emptyAllow() {
|
|
506
|
+
return {
|
|
507
|
+
blocked: false,
|
|
508
|
+
allowed: true,
|
|
509
|
+
message: "",
|
|
510
|
+
violations: [],
|
|
511
|
+
detViolations: [],
|
|
512
|
+
stoViolations: [],
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
function warnOnceAboutSkipped(skipped) {
|
|
516
|
+
if (_skippedWarned || skipped.length === 0)
|
|
517
|
+
return;
|
|
518
|
+
_skippedWarned = true;
|
|
519
|
+
const packs = skipped.filter((s) => s.kind === "pack").map((s) => s.detail);
|
|
520
|
+
const structured = skipped.filter((s) => s.kind === "structured-contract").length;
|
|
521
|
+
const sto = skipped.filter((s) => s.kind === "sto-contract").length;
|
|
522
|
+
const unknown = skipped.filter((s) => s.kind === "unknown-contract").length;
|
|
523
|
+
const bits = [];
|
|
524
|
+
if (packs.length > 0) {
|
|
525
|
+
bits.push(`${packs.length} pack include(s) [${packs.join(", ")}]`);
|
|
526
|
+
}
|
|
527
|
+
if (structured > 0) {
|
|
528
|
+
bits.push(`${structured} structured pattern contract(s) (token_budget, loop_detection, …)`);
|
|
529
|
+
}
|
|
530
|
+
if (sto > 0) {
|
|
531
|
+
bits.push(`${sto} sto contract(s) (LLM-judged)`);
|
|
532
|
+
}
|
|
533
|
+
if (unknown > 0) {
|
|
534
|
+
bits.push(`${unknown} unrecognised contract entr${unknown === 1 ? "y" : "ies"}`);
|
|
535
|
+
}
|
|
536
|
+
console.warn("[sponsio] skipped unsupported yaml items: " +
|
|
537
|
+
bits.join("; ") +
|
|
538
|
+
". These features are Python-only today; TS runtime will ship them in a future release.");
|
|
539
|
+
}
|
|
540
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK integration — native TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { Sponsio } from "@sponsio/sdk"
|
|
6
|
+
* import { sponsioHooks } from "@sponsio/sdk/claude-agent"
|
|
7
|
+
*
|
|
8
|
+
* const guard = new Sponsio({ contracts: [...] })
|
|
9
|
+
* const options = { hooks: sponsioHooks(guard) }
|
|
10
|
+
*/
|
|
11
|
+
import type { Sponsio } from "../index.js";
|
|
12
|
+
export interface HookResult {
|
|
13
|
+
systemMessage?: string;
|
|
14
|
+
hookSpecificOutput?: {
|
|
15
|
+
hookEventName: string;
|
|
16
|
+
permissionDecision?: "allow" | "deny" | "ask";
|
|
17
|
+
permissionDecisionReason?: string;
|
|
18
|
+
additionalContext?: string;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare function sponsioHooks(guard: Sponsio): {
|
|
22
|
+
PreToolUse: {
|
|
23
|
+
hooks: ((input: Record<string, unknown>, _toolUseId: string | null, _context: unknown) => Promise<HookResult | Record<string, never>>)[];
|
|
24
|
+
}[];
|
|
25
|
+
PostToolUse: {
|
|
26
|
+
hooks: ((input: Record<string, unknown>, _toolUseId: string | null, _context: unknown) => Promise<Record<string, never>>)[];
|
|
27
|
+
}[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=claude-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent.d.ts","sourceRoot":"","sources":["../../src/integrations/claude-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;QAC9C,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO;;wBAEhC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAClB,MAAM,GAAG,IAAI,YACf,OAAO,KAChB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;;wBAuBrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAClB,MAAM,GAAG,IAAI,YACf,OAAO,KAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;EAWlC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK integration — native TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { Sponsio } from "@sponsio/sdk"
|
|
6
|
+
* import { sponsioHooks } from "@sponsio/sdk/claude-agent"
|
|
7
|
+
*
|
|
8
|
+
* const guard = new Sponsio({ contracts: [...] })
|
|
9
|
+
* const options = { hooks: sponsioHooks(guard) }
|
|
10
|
+
*/
|
|
11
|
+
export function sponsioHooks(guard) {
|
|
12
|
+
async function preToolUse(input, _toolUseId, _context) {
|
|
13
|
+
const toolName = input.tool_name ?? "";
|
|
14
|
+
const toolInput = input.tool_input ?? {};
|
|
15
|
+
const result = guard.guardBefore(toolName, toolInput);
|
|
16
|
+
if (result.blocked) {
|
|
17
|
+
return {
|
|
18
|
+
systemMessage: `[Sponsio] Tool \`${toolName}\` was blocked: ${result.message}. ` +
|
|
19
|
+
`Please adjust your approach.`,
|
|
20
|
+
hookSpecificOutput: {
|
|
21
|
+
hookEventName: "PreToolUse",
|
|
22
|
+
permissionDecision: "deny",
|
|
23
|
+
permissionDecisionReason: `Sponsio: ${result.message}`,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
async function postToolUse(input, _toolUseId, _context) {
|
|
30
|
+
const toolName = input.tool_name ?? "";
|
|
31
|
+
const toolResult = input.tool_result ?? "";
|
|
32
|
+
await guard.guardAfter(toolName, String(toolResult));
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
PreToolUse: [{ hooks: [preToolUse] }],
|
|
37
|
+
PostToolUse: [{ hooks: [postToolUse] }],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=claude-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent.js","sourceRoot":"","sources":["../../src/integrations/claude-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,KAAK,UAAU,UAAU,CACvB,KAA8B,EAC9B,UAAyB,EACzB,QAAiB;QAEjB,MAAM,QAAQ,GAAI,KAAK,CAAC,SAAoB,IAAI,EAAE,CAAC;QACnD,MAAM,SAAS,GAAI,KAAK,CAAC,UAAsC,IAAI,EAAE,CAAC;QAEtE,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,aAAa,EACX,oBAAoB,QAAQ,mBAAmB,MAAM,CAAC,OAAO,IAAI;oBACjE,8BAA8B;gBAChC,kBAAkB,EAAE;oBAClB,aAAa,EAAE,YAAY;oBAC3B,kBAAkB,EAAE,MAAM;oBAC1B,wBAAwB,EAAE,YAAY,MAAM,CAAC,OAAO,EAAE;iBACvD;aACF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,WAAW,CACxB,KAA8B,EAC9B,UAAyB,EACzB,QAAiB;QAEjB,MAAM,QAAQ,GAAI,KAAK,CAAC,SAAoB,IAAI,EAAE,CAAC;QACnD,MAAM,UAAU,GAAI,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC;QACvD,MAAM,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC"}
|