@cendor/guardrails 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"decision.js","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,9 +12,18 @@
12
12
  */
13
13
  import { LLMCall } from '@cendor/core';
14
14
  import { type Context, type Guardrail, GuardrailDecision } from './decision.js';
15
- export { STAGES, ACTIONS, Verdict, GuardrailDecision, GuardrailTripped, defineGuardrail, normalizeStages, } from './decision.js';
16
- export type { Stage, Action, Context, Check, Guardrail, DefineGuardrailOptions, } from './decision.js';
15
+ export { STAGES, ACTIONS, ON_ERROR, Verdict, GuardrailDecision, GuardrailTripped, defineGuardrail, normalizeStages, validateExecutionPolicy, } from './decision.js';
16
+ export type { Stage, Action, OnError, Context, Check, Guardrail, DefineGuardrailOptions, } from './decision.js';
17
17
  export * as rules from './rules.js';
18
+ export * as judge from './judge.js';
19
+ export * as adapters from './adapters.js';
20
+ export * as semantic from './semantic.js';
21
+ export * as redteam from './redteam.js';
22
+ export { loadPolicy, POLICY_RULE_NAMES } from './policy.js';
23
+ export type { LoadedPolicy, LoadPolicyOptions } from './policy.js';
24
+ export type { Embed } from './semantic.js';
25
+ export { loadCorpus, runRedteam, runRedteamAsync, RedTeamReport } from './redteam.js';
26
+ export type { AttackCase, LoadCorpusOptions } from './redteam.js';
18
27
  /** The result of evaluating a stage: the (possibly redacted) payload plus the recorded decisions. */
19
28
  export interface EvalResult {
20
29
  payload: unknown;
@@ -23,10 +32,15 @@ export interface EvalResult {
23
32
  /**
24
33
  * Run the `stage` guardrails over `payload` **synchronously**. Returns `{ payload, decisions }`
25
34
  * with any redactions applied in order; throws `GuardrailTripped` on the first block. An `async`
26
- * check throws here — use {@link evaluateAsync}.
35
+ * check throws here — use {@link evaluateAsync}. A *throwing* sync check honours its `onError`
36
+ * policy; `timeout` applies to the async path only (no sync threads in JS).
27
37
  */
28
38
  export declare function evaluate(guardrails: readonly Guardrail[], stage: string, payload: unknown, ctx?: Context): EvalResult;
29
- /** Async counterpart of {@link evaluate}: awaits `async` checks, calls sync ones directly. */
39
+ /**
40
+ * Async counterpart of {@link evaluate}: awaits `async` checks (bounded by each guardrail's
41
+ * `timeout`), calls sync ones directly, and applies each guardrail's `onError` policy on a
42
+ * throw/timeout.
43
+ */
30
44
  export declare function evaluateAsync(guardrails: readonly Guardrail[], stage: string, payload: unknown, ctx?: Context): Promise<EvalResult>;
31
45
  /** Gate `payload` and return the recorded decisions (throws `GuardrailTripped` on a block). */
32
46
  export declare function apply(guardrails: readonly Guardrail[], stage: string, payload: unknown, ctx?: Context): GuardrailDecision[];
@@ -38,11 +52,30 @@ export declare function applyAsync(guardrails: readonly Guardrail[], stage: stri
38
52
  * cleaned messages, a pass declines. tool_call: a block raises; else record + proceed (tools have
39
53
  * no message-rewrite seam). Output: a bus subscriber raises **post-flight** on a block (same
40
54
  * overshoot semantics as tokenguard's `onExceed:"raise"`). Runs sync checks only. Call
41
- * {@link uninstall} to remove.
55
+ * {@link uninstall} to remove. `install()` is **process-global** — for a concurrent server that
56
+ * varies guardrails per request, use {@link scoped} instead.
42
57
  */
43
58
  export declare function install(guardrails: readonly Guardrail[]): void;
44
59
  /** Remove the interceptor + output subscriber registered by {@link install} (idempotent). */
45
60
  export declare function uninstall(): void;
61
+ /**
62
+ * Gate every instrumented call for the duration of `fn` — like {@link install}, but **scoped to the
63
+ * current execution context** rather than process-global. Runs `fn` with `guardrails` active and
64
+ * returns its result (sync or a `Promise`); the previous scope is restored on exit.
65
+ *
66
+ * With a real `AsyncLocalStorage` (auto-installed on Node), a concurrent server (async tasks) can
67
+ * vary guardrails per request without one request's set leaking into another. On edge/browser the
68
+ * fallback is a save/restore module variable — correct for sequential/nested use, **not**
69
+ * concurrency-safe. Nest freely — an inner `scoped` replaces the set for its block. Runs sync checks
70
+ * only (the seam is sync).
71
+ *
72
+ * ```ts
73
+ * await scoped([rules.keywordDeny(['secret'], { action: 'block' })], async () => {
74
+ * await client.chat.completions.create(...); // gated here
75
+ * });
76
+ * ```
77
+ */
78
+ export declare function scoped<T>(guardrails: readonly Guardrail[], fn: () => T | Promise<T>): T | Promise<T>;
46
79
  /** Best-effort assistant text off a completed LLMCall for the standalone output stage. */
47
80
  export declare function responseText(call: LLMCall): string | null;
48
81
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,OAAO,EAQR,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,iBAAiB,EAGlB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAyCD;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,UAAU,CAaZ;AAED,8FAA8F;AAC9F,wBAAsB,aAAa,CACjC,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,+FAA+F;AAC/F,wBAAgB,KAAK,CACnB,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,iBAAiB,EAAE,CAErB;AAED,0CAA0C;AAC1C,wBAAsB,UAAU,CAC9B,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAE9B;AAOD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAoC9D;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,IAAI,IAAI,CAKhC;AAQD,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,OAAO,EAQR,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,iBAAiB,EAGlB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtF,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAElE,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AA6GD;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,UAAU,CAuBZ;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED,+FAA+F;AAC/F,wBAAgB,KAAK,CACnB,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,iBAAiB,EAAE,CAErB;AAED,0CAA0C;AAC1C,wBAAsB,UAAU,CAC9B,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,OAAO,GACZ,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAE9B;AA4CD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAS9D;AAED,6FAA6F;AAC7F,wBAAgB,SAAS,IAAI,IAAI,CAKhC;AA6DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBhB;AAQD,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQzD"}
package/dist/index.js CHANGED
@@ -11,9 +11,15 @@
11
11
  * Imports ONLY `@cendor/core` (constitution rule 2). See docs/guardrails.md.
12
12
  */
13
13
  import { LLMCall, MISS, Reroute, ToolCall, addInterceptor, bus, currentTraceId, removeInterceptor, } from '@cendor/core';
14
- import { GuardrailDecision, GuardrailTripped, } from './decision.js';
15
- export { STAGES, ACTIONS, Verdict, GuardrailDecision, GuardrailTripped, defineGuardrail, normalizeStages, } from './decision.js';
14
+ import { GuardrailDecision, GuardrailTripped, Verdict, } from './decision.js';
15
+ export { STAGES, ACTIONS, ON_ERROR, Verdict, GuardrailDecision, GuardrailTripped, defineGuardrail, normalizeStages, validateExecutionPolicy, } from './decision.js';
16
16
  export * as rules from './rules.js';
17
+ export * as judge from './judge.js';
18
+ export * as adapters from './adapters.js';
19
+ export * as semantic from './semantic.js';
20
+ export * as redteam from './redteam.js';
21
+ export { loadPolicy, POLICY_RULE_NAMES } from './policy.js';
22
+ export { loadCorpus, runRedteam, runRedteamAsync, RedTeamReport } from './redteam.js';
17
23
  function applicable(guardrails, stage) {
18
24
  return guardrails.filter((g) => g.stages.includes(stage));
19
25
  }
@@ -27,7 +33,11 @@ function emit(g, stage, verdict, ctx) {
27
33
  tool: ctx.tool ?? '',
28
34
  traceId: ctx.traceId || currentTraceId(),
29
35
  ts: new Date(),
30
- metadata: { ...(ctx.metadata ?? {}) },
36
+ // Three metadata layers, lowest precedence first: the guardrail's static metadata (e.g.
37
+ // loadPolicy's policy_hash/version) is the base; the verdict's per-result annotations (the
38
+ // reserved severity/detected/… keys — see bus-events.md) layer over it; the caller's per-call
39
+ // Context.metadata is on top and still wins any key clash.
40
+ metadata: { ...(g.metadata ?? {}), ...(verdict.metadata ?? {}), ...(ctx.metadata ?? {}) },
31
41
  });
32
42
  bus.emit(decision); // acttrace (if attached) chains this as a guardrail_decision entry
33
43
  return decision;
@@ -45,32 +55,109 @@ function handle(verdict, g, stage, payload, ctx, decisions) {
45
55
  function isPromise(x) {
46
56
  return x != null && typeof x.then === 'function';
47
57
  }
58
+ const ERROR_REASON_MAX = 200;
59
+ /** A timeout marker error — a check that outran its `timeout` on the async path. */
60
+ class GuardrailTimeoutError extends Error {
61
+ constructor(message) {
62
+ super(message);
63
+ this.name = 'TimeoutError';
64
+ }
65
+ }
66
+ /**
67
+ * Map a check error/timeout to a verdict per `g.onError`. Either way this becomes a
68
+ * `GuardrailDecision`, so the audit chain records that the check could not run — never a silently
69
+ * swallowed exception. The reason carries the error *name* + a truncated message, never the payload
70
+ * the check saw.
71
+ */
72
+ function onErrorVerdict(g, exc) {
73
+ const name = exc?.name ??
74
+ exc?.constructor?.name ??
75
+ 'Error';
76
+ const message = exc?.message ?? String(exc);
77
+ let detail = `${name}: ${message}`;
78
+ if (detail.length > ERROR_REASON_MAX)
79
+ detail = `${detail.slice(0, ERROR_REASON_MAX)}…`;
80
+ if ((g.onError ?? 'fail_closed') === 'fail_open') {
81
+ return new Verdict('flag', `check errored (fail-open): ${detail}`);
82
+ }
83
+ return new Verdict('block', `check errored (fail-closed): ${detail}`);
84
+ }
85
+ /**
86
+ * Run one guardrail's check on the async path, bounding an `async` check to `g.timeout` via
87
+ * `Promise.race`. A *sync* check runs inline (a sync `timeout` cannot be enforced without threads —
88
+ * see {@link Guardrail}). Throws propagate to the caller's `onError` mapping.
89
+ */
90
+ async function runCheckAsync(g, payload, ctx) {
91
+ const result = g.check(payload, ctx);
92
+ if (isPromise(result) && g.timeout !== undefined) {
93
+ const seconds = g.timeout;
94
+ let handle;
95
+ const timeout = new Promise((_resolve, reject) => {
96
+ handle = setTimeout(() => reject(new GuardrailTimeoutError(`guardrail ${JSON.stringify(g.name)} check exceeded ${seconds}s`)), seconds * 1000);
97
+ });
98
+ try {
99
+ return (await Promise.race([result, timeout]));
100
+ }
101
+ finally {
102
+ if (handle !== undefined)
103
+ clearTimeout(handle);
104
+ }
105
+ }
106
+ return (await result);
107
+ }
48
108
  /**
49
109
  * Run the `stage` guardrails over `payload` **synchronously**. Returns `{ payload, decisions }`
50
110
  * with any redactions applied in order; throws `GuardrailTripped` on the first block. An `async`
51
- * check throws here — use {@link evaluateAsync}.
111
+ * check throws here — use {@link evaluateAsync}. A *throwing* sync check honours its `onError`
112
+ * policy; `timeout` applies to the async path only (no sync threads in JS).
52
113
  */
53
114
  export function evaluate(guardrails, stage, payload, ctx) {
54
115
  const context = ctx ?? { stage };
55
116
  const decisions = [];
56
117
  let current = payload;
57
118
  for (const g of applicable(guardrails, stage)) {
58
- const verdict = g.check(current, context);
59
- if (isPromise(verdict)) {
60
- void verdict.catch(() => { }); // swallow the rejection of the discarded promise
119
+ let result;
120
+ try {
121
+ result = g.check(current, context);
122
+ }
123
+ catch (err) {
124
+ if (err instanceof GuardrailTripped)
125
+ throw err;
126
+ // a THROWING sync check → its on_error policy (recorded), never a swallowed exception
127
+ current = handle(onErrorVerdict(g, err), g, stage, current, context, decisions);
128
+ continue;
129
+ }
130
+ // An async check on the sync path is a misuse: this TypeError is raised OUTSIDE the on_error
131
+ // try above so it always propagates (parity with Python `_invoke_sync`), never mapped to a block.
132
+ if (isPromise(result)) {
133
+ void result.catch(() => { }); // swallow the rejection of the discarded promise
61
134
  throw new TypeError(`guardrail ${JSON.stringify(g.name)} is async; use evaluateAsync`);
62
135
  }
63
- current = handle(verdict, g, stage, current, context, decisions);
136
+ current = handle(result, g, stage, current, context, decisions);
64
137
  }
65
138
  return { payload: current, decisions };
66
139
  }
67
- /** Async counterpart of {@link evaluate}: awaits `async` checks, calls sync ones directly. */
140
+ /**
141
+ * Async counterpart of {@link evaluate}: awaits `async` checks (bounded by each guardrail's
142
+ * `timeout`), calls sync ones directly, and applies each guardrail's `onError` policy on a
143
+ * throw/timeout.
144
+ */
68
145
  export async function evaluateAsync(guardrails, stage, payload, ctx) {
69
146
  const context = ctx ?? { stage };
70
147
  const decisions = [];
71
148
  let current = payload;
72
149
  for (const g of applicable(guardrails, stage)) {
73
- const verdict = await g.check(current, context);
150
+ let verdict;
151
+ try {
152
+ verdict = await runCheckAsync(g, current, context);
153
+ }
154
+ catch (err) {
155
+ if (err instanceof GuardrailTripped)
156
+ throw err; // a block from a nested handle propagates
157
+ verdict = onErrorVerdict(g, err); // throw / timeout → on_error policy (recorded)
158
+ }
159
+ // handle() throws GuardrailTripped on a block — OUTSIDE the try, so a block is never caught as
160
+ // an on_error (only the CHECK's own throws map to on_error).
74
161
  current = handle(verdict, g, stage, current, context, decisions);
75
162
  }
76
163
  return { payload: current, decisions };
@@ -86,46 +173,58 @@ export async function applyAsync(guardrails, stage, payload, ctx) {
86
173
  // --------------------------------------------------------------------------- standalone wiring
87
174
  let installedInterceptor = null;
88
175
  let installedSubscriber = null;
176
+ /**
177
+ * The shared interceptor body used by {@link install} and {@link scoped} — gate an `LLMCall` at the
178
+ * `input` stage (redact reroutes, block raises, pass declines) and a `ToolCall` at the `tool_call`
179
+ * stage (block raises; redact/flag recorded but the call proceeds).
180
+ */
181
+ function gateInterceptor(gl, event) {
182
+ if (event instanceof LLMCall) {
183
+ const ctx = { stage: 'input', traceId: event.traceId };
184
+ const { payload, decisions } = evaluate(gl, 'input', event.messages, ctx);
185
+ if (decisions.some((d) => d.action === 'redact'))
186
+ return new Reroute({ messages: payload });
187
+ return MISS;
188
+ }
189
+ if (event instanceof ToolCall) {
190
+ const ctx = {
191
+ stage: 'tool_call',
192
+ tool: event.name,
193
+ toolArgs: event.arguments,
194
+ traceId: event.traceId,
195
+ };
196
+ evaluate(gl, 'tool_call', event.arguments, ctx); // block throws; else record + proceed
197
+ return MISS;
198
+ }
199
+ return MISS;
200
+ }
201
+ /**
202
+ * The shared post-flight output subscriber body: gate the completed `LLMCall`'s response text at the
203
+ * `output` stage (block raises after the call ran).
204
+ */
205
+ function gateOutput(gl, event) {
206
+ if (!(event instanceof LLMCall))
207
+ return;
208
+ const text = responseText(event);
209
+ if (text === null)
210
+ return;
211
+ const ctx = { stage: 'output', traceId: event.traceId };
212
+ evaluate(gl, 'output', text, ctx); // block throws post-flight
213
+ }
89
214
  /**
90
215
  * Gate every instrumented call by registering ONE `@cendor/core` interceptor (+ an output
91
216
  * subscriber). Framework-independent. Input: a block raises (nothing spends), a redact reroutes the
92
217
  * cleaned messages, a pass declines. tool_call: a block raises; else record + proceed (tools have
93
218
  * no message-rewrite seam). Output: a bus subscriber raises **post-flight** on a block (same
94
219
  * overshoot semantics as tokenguard's `onExceed:"raise"`). Runs sync checks only. Call
95
- * {@link uninstall} to remove.
220
+ * {@link uninstall} to remove. `install()` is **process-global** — for a concurrent server that
221
+ * varies guardrails per request, use {@link scoped} instead.
96
222
  */
97
223
  export function install(guardrails) {
98
224
  uninstall();
99
225
  const gl = [...guardrails];
100
- const interceptor = (event) => {
101
- if (event instanceof LLMCall) {
102
- const ctx = { stage: 'input', traceId: event.traceId };
103
- const { payload, decisions } = evaluate(gl, 'input', event.messages, ctx);
104
- if (decisions.some((d) => d.action === 'redact'))
105
- return new Reroute({ messages: payload });
106
- return MISS;
107
- }
108
- if (event instanceof ToolCall) {
109
- const ctx = {
110
- stage: 'tool_call',
111
- tool: event.name,
112
- toolArgs: event.arguments,
113
- traceId: event.traceId,
114
- };
115
- evaluate(gl, 'tool_call', event.arguments, ctx); // block throws; else record + proceed
116
- return MISS;
117
- }
118
- return MISS;
119
- };
120
- const subscriber = (event) => {
121
- if (!(event instanceof LLMCall))
122
- return;
123
- const text = responseText(event);
124
- if (text === null)
125
- return;
126
- const ctx = { stage: 'output', traceId: event.traceId };
127
- evaluate(gl, 'output', text, ctx); // block throws post-flight
128
- };
226
+ const interceptor = (event) => gateInterceptor(gl, event);
227
+ const subscriber = (event) => gateOutput(gl, event);
129
228
  addInterceptor(interceptor);
130
229
  bus.subscribe(subscriber);
131
230
  installedInterceptor = interceptor;
@@ -140,6 +239,98 @@ export function uninstall() {
140
239
  installedInterceptor = null;
141
240
  installedSubscriber = null;
142
241
  }
242
+ //: The guardrails active in *this* execution context, or `undefined` outside any `scoped` block.
243
+ //: With a real `AsyncLocalStorage` installed (Node), overlapping async tasks each see their own
244
+ //: value; the ambient fallback is single-context (documented — not concurrency-safe).
245
+ let scopeStore;
246
+ let ambientScope;
247
+ let alsRequested = false;
248
+ /**
249
+ * Lazily install a real `AsyncLocalStorage`-backed scope store (Node only), so overlapping async
250
+ * requests stay isolated. Best-effort + idempotent: on edge/browser (`node:async_hooks` missing) it
251
+ * quietly keeps the ambient fallback, so `@cendor/guardrails` stays all-runtime (no `node:*` at the
252
+ * module top). Mirrors the spirit of `@cendor/core`'s `installTraceContext`.
253
+ */
254
+ async function ensureAls() {
255
+ if (alsRequested)
256
+ return;
257
+ alsRequested = true;
258
+ try {
259
+ const { AsyncLocalStorage } = await import('node:async_hooks');
260
+ if (!scopeStore)
261
+ scopeStore = new AsyncLocalStorage();
262
+ }
263
+ catch {
264
+ // node:async_hooks unavailable (edge/browser) — keep the ambient fallback (single-context)
265
+ }
266
+ }
267
+ void ensureAls(); // best-effort auto-install so real Node usage gets concurrency-correct isolation
268
+ function activeScope() {
269
+ return scopeStore ? scopeStore.getStore() : ambientScope;
270
+ }
271
+ function scopedInterceptor(event) {
272
+ const gl = activeScope();
273
+ if (!gl || gl.length === 0)
274
+ return MISS; // no active scope in this context — decline
275
+ return gateInterceptor(gl, event);
276
+ }
277
+ function scopedSubscriber(event) {
278
+ const gl = activeScope();
279
+ if (!gl || gl.length === 0)
280
+ return;
281
+ gateOutput(gl, event);
282
+ }
283
+ /**
284
+ * Register the context-gated interceptor + subscriber (idempotent — `addInterceptor` / `bus.subscribe`
285
+ * de-dupe). They stay registered and are no-ops outside a {@link scoped} block, so leaving them
286
+ * installed costs a store lookup per call and needs no teardown.
287
+ */
288
+ function ensureScopedSeam() {
289
+ addInterceptor(scopedInterceptor);
290
+ bus.subscribe(scopedSubscriber);
291
+ }
292
+ /**
293
+ * Gate every instrumented call for the duration of `fn` — like {@link install}, but **scoped to the
294
+ * current execution context** rather than process-global. Runs `fn` with `guardrails` active and
295
+ * returns its result (sync or a `Promise`); the previous scope is restored on exit.
296
+ *
297
+ * With a real `AsyncLocalStorage` (auto-installed on Node), a concurrent server (async tasks) can
298
+ * vary guardrails per request without one request's set leaking into another. On edge/browser the
299
+ * fallback is a save/restore module variable — correct for sequential/nested use, **not**
300
+ * concurrency-safe. Nest freely — an inner `scoped` replaces the set for its block. Runs sync checks
301
+ * only (the seam is sync).
302
+ *
303
+ * ```ts
304
+ * await scoped([rules.keywordDeny(['secret'], { action: 'block' })], async () => {
305
+ * await client.chat.completions.create(...); // gated here
306
+ * });
307
+ * ```
308
+ */
309
+ export function scoped(guardrails, fn) {
310
+ ensureScopedSeam();
311
+ void ensureAls();
312
+ const gl = [...guardrails];
313
+ if (scopeStore)
314
+ return scopeStore.run(gl, fn);
315
+ // Ambient fallback (single-context): save/restore, honouring sync or async `fn` like core's trace.
316
+ const previous = ambientScope;
317
+ ambientScope = gl;
318
+ let result;
319
+ try {
320
+ result = fn();
321
+ }
322
+ catch (err) {
323
+ ambientScope = previous;
324
+ throw err;
325
+ }
326
+ if (result instanceof Promise) {
327
+ return result.finally(() => {
328
+ ambientScope = previous;
329
+ });
330
+ }
331
+ ambientScope = previous;
332
+ return result;
333
+ }
143
334
  function get(obj, name) {
144
335
  return obj != null && typeof obj === 'object'
145
336
  ? obj[name]
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * LLM-judge helpers — turn a bring-your-own model call into a usable guardrail. The TS port of
3
+ * `cendor.guardrails.judge`.
4
+ *
5
+ * cendor ships **no** classifier. `rules.llmJudge` is an adapter *contract*: you supply the model
6
+ * call. These helpers give that call the boring, error-prone parts so you don't hand-roll them —
7
+ *
8
+ * - {@link verdictPrompt} — a strict system instruction that pins the model to a two-field JSON
9
+ * verdict (`{"trip": <bool>, "reason": "<short>"}`), so the output is parseable, not prose.
10
+ * - {@link parseVerdict} — strict JSON → `Verdict` (or `null` to pass). Malformed output *throws* so
11
+ * the guardrail's `onError` policy decides (a garbled judge fails **closed** by default).
12
+ * - {@link judge} — glue the two around your `respond(system, user)` callable (sync or async) into a
13
+ * check you hand straight to `rules.llmJudge`.
14
+ *
15
+ * The judge's own spend is budgeted and audited: make the call through an `instrument()`-ed client
16
+ * and its tokens + cost land in tokenguard / acttrace like any other call.
17
+ */
18
+ import { type Context, Verdict } from './decision.js';
19
+ /** A `respond(system, user)` model callable (sync or async) — returns the assistant's reply string. */
20
+ export type Respond = (system: string, user: string) => string | Promise<string>;
21
+ /**
22
+ * The default judge instruction. `{policy}` is filled with your risk description. It pins the model
23
+ * to strict JSON so {@link parseVerdict} can read it — no chain-of-thought, no prose.
24
+ */
25
+ export declare const DEFAULT_SYSTEM: string;
26
+ /**
27
+ * Build the judge's system instruction for `policy` (a plain-language description of what should
28
+ * trip). Override `template` to customise, keeping the `{policy}` placeholder and the strict-JSON
29
+ * verdict contract {@link parseVerdict} expects.
30
+ */
31
+ export declare function verdictPrompt(policy: string, template?: string): string;
32
+ /**
33
+ * Parse a strict-JSON judge reply into a `Verdict` (trip) or `null` (pass). Expects
34
+ * `{"trip": <bool>, "reason": "<short>"}`. Trips with `action` (default `"block"`) and the model's
35
+ * reason. **Throws** on malformed output — deliberately: a judge whose output can't be read must not
36
+ * silently pass, so the caller's `onError` policy (fail-closed by default) decides. See {@link judge}.
37
+ */
38
+ export declare function parseVerdict(text: string, opts?: {
39
+ action?: 'block' | 'redact' | 'flag';
40
+ }): Verdict | null;
41
+ /**
42
+ * Compose {@link verdictPrompt} + your model call + {@link parseVerdict} into a check ready for
43
+ * `rules.llmJudge`.
44
+ *
45
+ * `respond(system, user)` is *your* callable — sync or async — that runs one model call given the
46
+ * system instruction and the payload text, and returns the assistant's reply string. Make that call
47
+ * through an `instrument()`-ed client and its cost is budgeted + audited.
48
+ *
49
+ * ```ts
50
+ * import { judge, rules } from '@cendor/guardrails';
51
+ *
52
+ * const respond = async (system: string, user: string): Promise<string> => {
53
+ * const r = await client.chat.completions.create({
54
+ * model: 'gpt-4o-mini',
55
+ * messages: [{ role: 'system', content: system }, { role: 'user', content: user }],
56
+ * });
57
+ * return r.choices[0].message.content ?? '';
58
+ * };
59
+ *
60
+ * const check = judge.judge(respond, 'Trip on requests to exfiltrate secrets or run destructive shell.');
61
+ * const guardrail = rules.llmJudge(check, { timeout: 8 });
62
+ * ```
63
+ */
64
+ export declare function judge(respond: Respond, policy: string, opts?: {
65
+ action?: 'block' | 'redact' | 'flag';
66
+ template?: string;
67
+ }): (payload: unknown, ctx: Context) => Promise<Verdict | null>;
68
+ /**
69
+ * The default *task-adherence* instruction. `{instruction}` is filled with the user's originating
70
+ * request (from `Context.instruction`); the proposed tool call is passed as the user message. It pins
71
+ * the model to the same strict-JSON verdict {@link parseVerdict} reads, where `trip=true` means the
72
+ * tool call is **misaligned** with the instruction.
73
+ */
74
+ export declare const ADHERENCE_SYSTEM: string;
75
+ /**
76
+ * A **bring-your-own-judge** task-adherence check for the `tool_call` stage: *given the user's
77
+ * instruction and this proposed tool call + arguments, is the action aligned with intent?* Returns a
78
+ * check ready for `rules.llmJudge` (like {@link judge}). Reads the user's instruction from
79
+ * `Context.instruction` and the proposed call from `ctx.tool` / `ctx.toolArgs` (or the payload),
80
+ * calls your `respond(system, user)`, and parses a strict-JSON verdict — `trip=true` means
81
+ * *misaligned*. Defaults to `action:'flag'` (advisory). No adherence-rate claim: a BYO judge, only
82
+ * as good as your model + prompt.
83
+ *
84
+ * > 🚧 The `@cendor/sdk` auto-threading of the user turn into `ctx.instruction` is a deferred parity
85
+ * > tail — set `ctx.instruction` yourself until it lands. See docs/guardrails.md "Task adherence".
86
+ */
87
+ export declare function taskAdherence(respond: Respond, opts?: {
88
+ action?: 'block' | 'redact' | 'flag';
89
+ template?: string;
90
+ }): (payload: unknown, ctx: Context) => Promise<Verdict | null>;
91
+ //# sourceMappingURL=judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,uGAAuG;AACvG,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,cAAc,QAK4C,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAEvF;AA8BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAO,GAClD,OAAO,GAAG,IAAI,CAUhB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAS7D;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAQ8D,CAAC;AAuB5F;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAS7D"}