@coderifts/agent-guard 9.2.0 → 9.4.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.
- package/README.md +45 -16
- package/dist/cjs/adapters/anthropic.d.ts.map +1 -1
- package/dist/cjs/adapters/anthropic.js +4 -23
- package/dist/cjs/adapters/anthropic.js.map +1 -1
- package/dist/cjs/adapters/gemini.d.ts.map +1 -1
- package/dist/cjs/adapters/gemini.js +4 -24
- package/dist/cjs/adapters/gemini.js.map +1 -1
- package/dist/cjs/adapters/langgraph.d.ts +37 -6
- package/dist/cjs/adapters/langgraph.d.ts.map +1 -1
- package/dist/cjs/adapters/langgraph.js +74 -30
- package/dist/cjs/adapters/langgraph.js.map +1 -1
- package/dist/cjs/adapters/openai.d.ts.map +1 -1
- package/dist/cjs/adapters/openai.js +4 -22
- package/dist/cjs/adapters/openai.js.map +1 -1
- package/dist/cjs/cas-adapters/fs-default-wire.d.ts +15 -0
- package/dist/cjs/cas-adapters/fs-default-wire.d.ts.map +1 -0
- package/dist/cjs/cas-adapters/fs-default-wire.js +76 -0
- package/dist/cjs/cas-adapters/fs-default-wire.js.map +1 -0
- package/dist/cjs/gate-refusal.d.ts +14 -0
- package/dist/cjs/gate-refusal.d.ts.map +1 -0
- package/dist/cjs/gate-refusal.js +85 -0
- package/dist/cjs/gate-refusal.js.map +1 -0
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +18 -9
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +25 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/policy.d.ts +55 -0
- package/dist/cjs/policy.d.ts.map +1 -0
- package/dist/cjs/policy.js +113 -0
- package/dist/cjs/policy.js.map +1 -0
- package/dist/cjs/tool-registry.d.ts.map +1 -1
- package/dist/cjs/tool-registry.js +5 -1
- package/dist/cjs/tool-registry.js.map +1 -1
- package/dist/cjs/types.d.ts +15 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.d.ts +5 -0
- package/dist/cjs/with-coderifts.d.ts.map +1 -1
- package/dist/cjs/with-coderifts.js +3 -0
- package/dist/cjs/with-coderifts.js.map +1 -1
- package/dist/esm/adapters/anthropic.d.ts.map +1 -1
- package/dist/esm/adapters/anthropic.js +2 -21
- package/dist/esm/adapters/anthropic.js.map +1 -1
- package/dist/esm/adapters/gemini.d.ts.map +1 -1
- package/dist/esm/adapters/gemini.js +2 -22
- package/dist/esm/adapters/gemini.js.map +1 -1
- package/dist/esm/adapters/langgraph.d.ts +37 -6
- package/dist/esm/adapters/langgraph.d.ts.map +1 -1
- package/dist/esm/adapters/langgraph.js +68 -28
- package/dist/esm/adapters/langgraph.js.map +1 -1
- package/dist/esm/adapters/openai.d.ts.map +1 -1
- package/dist/esm/adapters/openai.js +3 -21
- package/dist/esm/adapters/openai.js.map +1 -1
- package/dist/esm/cas-adapters/fs-default-wire.d.ts +15 -0
- package/dist/esm/cas-adapters/fs-default-wire.d.ts.map +1 -0
- package/dist/esm/cas-adapters/fs-default-wire.js +72 -0
- package/dist/esm/cas-adapters/fs-default-wire.js.map +1 -0
- package/dist/esm/gate-refusal.d.ts +14 -0
- package/dist/esm/gate-refusal.d.ts.map +1 -0
- package/dist/esm/gate-refusal.js +78 -0
- package/dist/esm/gate-refusal.js.map +1 -0
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +18 -9
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/policy.d.ts +55 -0
- package/dist/esm/policy.d.ts.map +1 -0
- package/dist/esm/policy.js +104 -0
- package/dist/esm/policy.js.map +1 -0
- package/dist/esm/tool-registry.d.ts.map +1 -1
- package/dist/esm/tool-registry.js +5 -1
- package/dist/esm/tool-registry.js.map +1 -1
- package/dist/esm/types.d.ts +15 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/with-coderifts.d.ts +5 -0
- package/dist/esm/with-coderifts.d.ts.map +1 -1
- package/dist/esm/with-coderifts.js +3 -0
- package/dist/esm/with-coderifts.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -327,7 +327,7 @@ const toolMessage = bindOpenAIGuardOutcome(outcome, { tool_call_id: toolCall.id
|
|
|
327
327
|
**not** claim product-level inescapability the core does not:
|
|
328
328
|
|
|
329
329
|
```typescript
|
|
330
|
-
import { withCodeRiftsOpenAI } from '@coderifts/agent-guard';
|
|
330
|
+
import { withCodeRiftsOpenAI, withPolicy, CODERIFTS_POLICY } from '@coderifts/agent-guard';
|
|
331
331
|
|
|
332
332
|
const {
|
|
333
333
|
tools, // OpenAI: [{ type:'function', function:{ name, description?, parameters } }]
|
|
@@ -337,7 +337,7 @@ const {
|
|
|
337
337
|
receipt_thread,
|
|
338
338
|
} = withCodeRiftsOpenAI({ tools: rawTools, client, operation: 'merge' });
|
|
339
339
|
|
|
340
|
-
// openai.chat.completions.create({ model, messages, tools })
|
|
340
|
+
// openai.chat.completions.create({ model, messages: withPolicy(messages), tools })
|
|
341
341
|
// Host boundary: only `tools` / `protected_tools` enter the model loop — raw tools stay out.
|
|
342
342
|
```
|
|
343
343
|
|
|
@@ -361,7 +361,7 @@ Tool-results use **`bindOpenAIGuardOutcome`** the same way as OpenAI.
|
|
|
361
361
|
unflattened — composition may remain incomplete:
|
|
362
362
|
|
|
363
363
|
```typescript
|
|
364
|
-
import { withCodeRiftsAnthropic } from '@coderifts/agent-guard';
|
|
364
|
+
import { withCodeRiftsAnthropic, withPolicy } from '@coderifts/agent-guard';
|
|
365
365
|
|
|
366
366
|
const {
|
|
367
367
|
tools, // Anthropic: [{ name, description?, input_schema }]
|
|
@@ -371,35 +371,37 @@ const {
|
|
|
371
371
|
receipt_thread,
|
|
372
372
|
} = withCodeRiftsAnthropic({ tools: rawTools, client, operation: 'merge' });
|
|
373
373
|
|
|
374
|
-
// anthropic.messages.create({ model, messages, tools, max_tokens })
|
|
374
|
+
// anthropic.messages.create({ model, system: withPolicy(yourPrompt), messages, tools, max_tokens })
|
|
375
375
|
// Host boundary: only `tools` / `protected_tools` enter the model loop — raw tools stay out.
|
|
376
376
|
```
|
|
377
377
|
|
|
378
378
|
See also `examples/anthropic-adapter.mjs` (not published in the npm tarball).
|
|
379
379
|
|
|
380
|
-
**LangChain / LangGraph (ID632 slice 3).** Same thin pattern; emits **dependency-free**
|
|
381
|
-
descriptors
|
|
382
|
-
|
|
383
|
-
|
|
380
|
+
**LangChain / LangGraph (ID632 slice 3).** Same thin pattern; emits **dependency-free**
|
|
381
|
+
StructuredTool-compatible descriptors (`name`, `description`, `schema`, `func`/`invoke`,
|
|
382
|
+
`lc_runnable: true`) that `createReactAgent` / `ToolNode` can consume. Measured against
|
|
383
|
+
`@langchain/langgraph` `createReactAgent` (`tools: ToolNode | (StructuredToolInterface |
|
|
384
|
+
DynamicTool | RunnableToolLike)[]` — 0.2.74 d.ts; current npm 1.4.12). This package does
|
|
385
|
+
**not** depend on langchain or langgraph. A tool that would still fail that check throws
|
|
386
|
+
`LangGraphToolsNotStructuredError` (wrap with `tool()` from `@langchain/core/tools`) — never a
|
|
387
|
+
model-visible `"Tool not found"`. Assurance still unflattened:
|
|
384
388
|
|
|
385
389
|
```typescript
|
|
386
390
|
import { withCodeRiftsLangGraph } from '@coderifts/agent-guard';
|
|
387
391
|
// host-owned (not a dependency of this package):
|
|
388
|
-
// import {
|
|
389
|
-
// import { ToolNode } from '@langchain/langgraph/prebuilt';
|
|
392
|
+
// import { createReactAgent } from '@langchain/langgraph/prebuilt';
|
|
390
393
|
|
|
391
394
|
const {
|
|
392
|
-
tools, //
|
|
395
|
+
tools, // createReactAgent-consumable; guarded execute bound
|
|
393
396
|
protected_tools,
|
|
394
397
|
registry_report,
|
|
395
398
|
composition_assurance, // still may be incomplete (inescapable_runtime:false) — do not drop
|
|
396
399
|
receipt_thread,
|
|
397
400
|
} = withCodeRiftsLangGraph({ tools: rawTools, client, operation: 'merge' });
|
|
398
401
|
|
|
399
|
-
// const
|
|
400
|
-
//
|
|
401
|
-
// )
|
|
402
|
-
// const toolNode = new ToolNode(lcTools); // StateGraph … .addNode('tools', toolNode)
|
|
402
|
+
// const agent = createReactAgent({ llm, tools });
|
|
403
|
+
// optional still-supported wrap: tool(d.func, { name: d.name, description: d.description, schema: d.schema })
|
|
404
|
+
// system: withPolicy(yourPrompt) — adapters do not see the outbound request
|
|
403
405
|
// Host boundary: only `tools` / `protected_tools` enter the graph — raw tools stay out.
|
|
404
406
|
```
|
|
405
407
|
|
|
@@ -420,12 +422,39 @@ const {
|
|
|
420
422
|
receipt_thread,
|
|
421
423
|
} = withCodeRiftsGemini({ tools: rawTools, client, operation: 'merge' });
|
|
422
424
|
|
|
423
|
-
// model.generateContent({ contents, tools })
|
|
425
|
+
// model.generateContent({ systemInstruction: withPolicy(yourPrompt), contents, tools })
|
|
424
426
|
// Host boundary: only `tools` / `protected_tools` enter the model loop — raw tools stay out.
|
|
425
427
|
```
|
|
426
428
|
|
|
427
429
|
See also `examples/gemini-adapter.mjs` (not published in the npm tarball).
|
|
428
430
|
|
|
431
|
+
### Policy delivery
|
|
432
|
+
|
|
433
|
+
The four adapters (`withCodeRiftsOpenAI` / Anthropic / Gemini / LangGraph, and
|
|
434
|
+
the `bind*GuardOutcome` helpers) are **result-shapers**. They convert guarded
|
|
435
|
+
tools and bind proof onto the **tool result**. They never see the outbound
|
|
436
|
+
`messages` / `system` field, so they cannot auto-inject into the request. File-based
|
|
437
|
+
hosts (Claude / Cursor / Copilot / Gemini) load the rule file automatically; a
|
|
438
|
+
developer assembling their own system prompt must put the text in.
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
import { CODERIFTS_POLICY, withPolicy } from '@coderifts/agent-guard';
|
|
442
|
+
|
|
443
|
+
const yourPrompt = 'You are a coding agent.';
|
|
444
|
+
const content = `${yourPrompt}\n\n${CODERIFTS_POLICY}`;
|
|
445
|
+
|
|
446
|
+
// one-line helper (idempotent; never mutates the caller):
|
|
447
|
+
const messages = withPolicy([{ role: 'system', content: yourPrompt }, { role: 'user', content: '…' }]);
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
Three layers:
|
|
451
|
+
|
|
452
|
+
1. **`withPolicy`** — append if the ONE-operation marker is not already present. `injectPolicy: false` skips.
|
|
453
|
+
2. **`CODERIFTS_POLICY`** — one import, one interpolation. Vendored from the app canonical rule; drift-gated.
|
|
454
|
+
3. **`systemPrompt` on the guard config** — last net. Supply the prompt you sent the model. Marker found → `policy_presence: "detected"` (silent). Marker absent → `"absent"` + a once-per-process warn. Nothing supplied → field omitted (`unknown`, no warn, outcome byte-identical). Observation only — never a verdict input, nothing in any preimage.
|
|
455
|
+
|
|
456
|
+
This proves the **text is present**, not that the model read or obeyed it.
|
|
457
|
+
|
|
429
458
|
**Why `operation` is mandatory (no default).** Receipts bind to an operation and `merge` is not
|
|
430
459
|
`deploy`, so a silent default would evaluate a deployment under merge semantics. `operation` is the
|
|
431
460
|
session-level default for **generic** mutating tools only; a tool with a specialised mutation class
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,iFAAiF;IACjF,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAgB3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,aAAa,EAAE,CAE1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,4BAA4B,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,4BAA4B,CAc9F;AAID;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,OAAO,CAAC,MAAM,0BAA0B,EAAE,OAAO,MAAM,CAAC;AACxD,MAAM,MAAM,6BAA6B,GAAG,mBAAmB,GAAG;IAChE,QAAQ,CAAC,YAAY,EAAE,OAAO,0BAA0B,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI;IAC7C,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAgBxE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,GACrC,6BAA6B,CAyB/B"}
|
|
@@ -31,6 +31,7 @@ exports.defaultSerializeAnthropicToolResult = defaultSerializeAnthropicToolResul
|
|
|
31
31
|
exports.bindAnthropicGuardOutcome = bindAnthropicGuardOutcome;
|
|
32
32
|
const with_coderifts_js_1 = require("../with-coderifts.js");
|
|
33
33
|
const final_answer_proof_js_1 = require("../final-answer-proof.js");
|
|
34
|
+
const gate_refusal_js_1 = require("../gate-refusal.js");
|
|
34
35
|
/** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
|
|
35
36
|
const EMPTY_INPUT_SCHEMA = Object.freeze({
|
|
36
37
|
type: 'object',
|
|
@@ -126,16 +127,13 @@ function bindAnthropicGuardOutcome(outcome, args) {
|
|
|
126
127
|
body = serialize(outcome.result);
|
|
127
128
|
}
|
|
128
129
|
else if (outcome.executionAttempted === false) {
|
|
129
|
-
|
|
130
|
-
body =
|
|
131
|
-
`CodeRifts gate did not permit execution (verdict: ${kind}). `
|
|
132
|
-
+ 'No tool result was produced.';
|
|
130
|
+
body = (0, gate_refusal_js_1.formatGateRefusalBody)(outcome);
|
|
133
131
|
}
|
|
134
132
|
else {
|
|
135
133
|
const err = 'error' in outcome ? outcome.error : undefined;
|
|
136
|
-
const kind = verdictKind(outcome);
|
|
134
|
+
const kind = (0, gate_refusal_js_1.verdictKind)(outcome);
|
|
137
135
|
body =
|
|
138
|
-
`Tool execution failed after gate decision (verdict: ${kind}): ${formatGuardError(err)}`;
|
|
136
|
+
`Tool execution failed after gate decision (verdict: ${kind}): ${(0, gate_refusal_js_1.formatGuardError)(err)}`;
|
|
139
137
|
}
|
|
140
138
|
const content = args.attachProof === false
|
|
141
139
|
? body
|
|
@@ -147,21 +145,4 @@ function bindAnthropicGuardOutcome(outcome, args) {
|
|
|
147
145
|
};
|
|
148
146
|
return block;
|
|
149
147
|
}
|
|
150
|
-
function verdictKind(outcome) {
|
|
151
|
-
return outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
|
|
152
|
-
? String(outcome.verdict.kind)
|
|
153
|
-
: 'UNKNOWN';
|
|
154
|
-
}
|
|
155
|
-
function formatGuardError(err) {
|
|
156
|
-
if (err instanceof Error)
|
|
157
|
-
return err.message || err.name || 'Error';
|
|
158
|
-
if (typeof err === 'string')
|
|
159
|
-
return err;
|
|
160
|
-
try {
|
|
161
|
-
return JSON.stringify(err);
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return String(err);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
148
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/adapters/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAQrE;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;CACnD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,aAAa,GAAG,yBAAyB,CAgBjG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,UAAU,EAAE,CAKpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,CAcxF;AAID;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,OAAO,CAAC,MAAM,uBAAuB,EAAE,OAAO,MAAM,CAAC;AACrD,MAAM,MAAM,gCAAgC,GAAG,sBAAsB,GAAG;IACtE,QAAQ,CAAC,YAAY,EAAE,OAAO,uBAAuB,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAqBtE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAClC,gCAAgC,CAiClC"}
|
|
@@ -37,6 +37,7 @@ exports.defaultSerializeGeminiToolResult = defaultSerializeGeminiToolResult;
|
|
|
37
37
|
exports.bindGeminiGuardOutcome = bindGeminiGuardOutcome;
|
|
38
38
|
const with_coderifts_js_1 = require("../with-coderifts.js");
|
|
39
39
|
const final_answer_proof_js_1 = require("../final-answer-proof.js");
|
|
40
|
+
const gate_refusal_js_1 = require("../gate-refusal.js");
|
|
40
41
|
/** Empty OpenAPI-like JSON Schema — used when a ProtectedTool has no inputSchema. */
|
|
41
42
|
const EMPTY_PARAMETERS = Object.freeze({
|
|
42
43
|
type: 'object',
|
|
@@ -150,17 +151,13 @@ function bindGeminiGuardOutcome(outcome, args) {
|
|
|
150
151
|
base = { result: serialize(outcome.result) };
|
|
151
152
|
}
|
|
152
153
|
else if (outcome.executionAttempted === false) {
|
|
153
|
-
|
|
154
|
-
base = {
|
|
155
|
-
gate_message: `CodeRifts gate did not permit execution (verdict: ${kind}). `
|
|
156
|
-
+ 'No tool result was produced.',
|
|
157
|
-
};
|
|
154
|
+
base = { gate_message: (0, gate_refusal_js_1.formatGateRefusalBody)(outcome) };
|
|
158
155
|
}
|
|
159
156
|
else {
|
|
160
157
|
const err = 'error' in outcome ? outcome.error : undefined;
|
|
161
|
-
const kind = verdictKind(outcome);
|
|
158
|
+
const kind = (0, gate_refusal_js_1.verdictKind)(outcome);
|
|
162
159
|
base = {
|
|
163
|
-
gate_message: `Tool execution failed after gate decision (verdict: ${kind}): ${formatGuardError(err)}`,
|
|
160
|
+
gate_message: `Tool execution failed after gate decision (verdict: ${kind}): ${(0, gate_refusal_js_1.formatGuardError)(err)}`,
|
|
164
161
|
};
|
|
165
162
|
}
|
|
166
163
|
// Default ON (S4). attachProof:false skips proof fields.
|
|
@@ -175,21 +172,4 @@ function bindGeminiGuardOutcome(outcome, args) {
|
|
|
175
172
|
};
|
|
176
173
|
return part;
|
|
177
174
|
}
|
|
178
|
-
function verdictKind(outcome) {
|
|
179
|
-
return outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
|
|
180
|
-
? String(outcome.verdict.kind)
|
|
181
|
-
: 'UNKNOWN';
|
|
182
|
-
}
|
|
183
|
-
function formatGuardError(err) {
|
|
184
|
-
if (err instanceof Error)
|
|
185
|
-
return err.message || err.name || 'Error';
|
|
186
|
-
if (typeof err === 'string')
|
|
187
|
-
return err;
|
|
188
|
-
try {
|
|
189
|
-
return JSON.stringify(err);
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
return String(err);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
175
|
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/adapters/gemini.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/adapters/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,10 +13,18 @@
|
|
|
13
13
|
* owns the framework import and wires descriptors into tool() / ToolNode /
|
|
14
14
|
* bind_tools / StateGraph themselves.
|
|
15
15
|
*
|
|
16
|
-
* Descriptor shape (dependency-free
|
|
17
|
-
* { name, description
|
|
16
|
+
* Descriptor shape (dependency-free, StructuredTool-compatible for createReactAgent):
|
|
17
|
+
* { name, description, schema, func, invoke, lc_runnable: true }
|
|
18
|
+
* Measured against @langchain/langgraph createReactAgent tools:
|
|
19
|
+
* ToolNode | (StructuredToolInterface | DynamicTool | RunnableToolLike)[]
|
|
20
|
+
* (@langchain/langgraph@0.2.74 d.ts; current npm 1.4.12). Runtime isRunnable
|
|
21
|
+
* requires lc_runnable === true; ToolNode drops non-matching tools and the
|
|
22
|
+
* model sees "Tool not found" — NEVER return that silent shape.
|
|
18
23
|
* - schema = JSON Schema from ProtectedTool.inputSchema (or empty object schema)
|
|
19
24
|
* - func / invoke = the GUARDED execute (same function reference) — never the raw tool
|
|
25
|
+
* - description always set (fallback to name) — StructuredToolInterface requires it
|
|
26
|
+
* NO hard @langchain/* dependency: duck-type the measured surface. If a tool would
|
|
27
|
+
* still fail that check, throw LangGraphToolsNotStructuredError (named, with the fix).
|
|
20
28
|
*
|
|
21
29
|
* Honesty (do not "upgrade" assurance):
|
|
22
30
|
* - composition_assurance is passed through EXACTLY as the core reported it
|
|
@@ -46,7 +54,8 @@ import type { GuardOutcome } from '../types.js';
|
|
|
46
54
|
*/
|
|
47
55
|
export type LangGraphToolDescriptor = {
|
|
48
56
|
name: string;
|
|
49
|
-
description
|
|
57
|
+
/** Always set (fallback to name). StructuredToolInterface requires description. */
|
|
58
|
+
description: string;
|
|
50
59
|
/** JSON Schema for tool args (LangChain `schema` / StructuredTool args). */
|
|
51
60
|
schema: Record<string, unknown>;
|
|
52
61
|
/**
|
|
@@ -56,10 +65,27 @@ export type LangGraphToolDescriptor = {
|
|
|
56
65
|
func: (args: unknown) => Promise<unknown>;
|
|
57
66
|
/**
|
|
58
67
|
* Alias of `func` for invoke-style APIs (StructuredTool.invoke / ToolNode).
|
|
59
|
-
* Same guarded execute reference as `func`.
|
|
68
|
+
* Same guarded execute reference as `func`. Runnable.invoke also accepts a config arg.
|
|
60
69
|
*/
|
|
61
|
-
invoke: (args: unknown) => Promise<unknown>;
|
|
70
|
+
invoke: (args: unknown, _config?: unknown) => Promise<unknown>;
|
|
71
|
+
/**
|
|
72
|
+
* Measured isRunnable / isStructuredTool check (@langchain/core).
|
|
73
|
+
* Without this, createReactAgent's ToolNode drops the tool → model-visible "Tool not found".
|
|
74
|
+
*/
|
|
75
|
+
lc_runnable: true;
|
|
62
76
|
};
|
|
77
|
+
/**
|
|
78
|
+
* Named error — thrown instead of returning tools createReactAgent would silently drop.
|
|
79
|
+
* Never a model-visible "Tool not found".
|
|
80
|
+
*/
|
|
81
|
+
export declare class LangGraphToolsNotStructuredError extends Error {
|
|
82
|
+
constructor(message?: string);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* True iff `t` matches the measured createReactAgent tool surface
|
|
86
|
+
* (StructuredToolInterface | DynamicTool | RunnableToolLike).
|
|
87
|
+
*/
|
|
88
|
+
export declare function isLangGraphReactAgentTool(t: unknown): t is LangGraphToolDescriptor;
|
|
63
89
|
/**
|
|
64
90
|
* Result of withCodeRiftsLangGraph — descriptors + core assurance, unflattened.
|
|
65
91
|
*
|
|
@@ -97,11 +123,16 @@ export declare function protectedToolToLangGraph(tool: ProtectedTool): LangGraph
|
|
|
97
123
|
* Does NOT call the guard — pure map over an already-protected list.
|
|
98
124
|
*/
|
|
99
125
|
export declare function toLangGraphTools(protectedTools: readonly ProtectedTool[]): LangGraphToolDescriptor[];
|
|
126
|
+
/**
|
|
127
|
+
* Assert (and return) tools that createReactAgent can consume.
|
|
128
|
+
* Throws LangGraphToolsNotStructuredError — never a silent "Tool not found".
|
|
129
|
+
*/
|
|
130
|
+
export declare function bindLangGraphTools(tools: readonly unknown[]): LangGraphToolDescriptor[];
|
|
100
131
|
/**
|
|
101
132
|
* Build LangGraph/LangChain-ready guarded tool descriptors from raw tools + client + operation.
|
|
102
133
|
*
|
|
103
134
|
* Calls withCodeRifts internally (guard logic stays in the core). Returns:
|
|
104
|
-
* - `tools` —
|
|
135
|
+
* - `tools` — StructuredTool-compatible descriptors { name, description, schema, func, invoke, lc_runnable }
|
|
105
136
|
* - `protected_tools` — same guarded tools
|
|
106
137
|
* - assurance objects from the core, passed through untouched
|
|
107
138
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langgraph.d.ts","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"langgraph.d.ts","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;OAGG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D;;;OAGG;IACH,WAAW,EAAE,IAAI,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,CAAC,EAAE,MAAM;CAU7B;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,uBAAuB,CASlF;AAED;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,iFAAiF;IACjF,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,uBAAuB,CA+BrF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,uBAAuB,EAAE,CAEpG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,OAAO,EAAE,GACxB,uBAAuB,EAAE,CAa3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,4BAA4B,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,4BAA4B,CAc9F;AAID;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,OAAO,CAAC,MAAM,0BAA0B,EAAE,OAAO,MAAM,CAAC;AACxD,MAAM,MAAM,8BAA8B,GAAG,oBAAoB,GAAG;IAClE,QAAQ,CAAC,YAAY,EAAE,OAAO,0BAA0B,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI;IAC7C,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAgBxE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,6BAA6B,CAAC,CAAC,CAAC,GACrC,8BAA8B,CA2BhC"}
|
|
@@ -14,10 +14,18 @@
|
|
|
14
14
|
* owns the framework import and wires descriptors into tool() / ToolNode /
|
|
15
15
|
* bind_tools / StateGraph themselves.
|
|
16
16
|
*
|
|
17
|
-
* Descriptor shape (dependency-free
|
|
18
|
-
* { name, description
|
|
17
|
+
* Descriptor shape (dependency-free, StructuredTool-compatible for createReactAgent):
|
|
18
|
+
* { name, description, schema, func, invoke, lc_runnable: true }
|
|
19
|
+
* Measured against @langchain/langgraph createReactAgent tools:
|
|
20
|
+
* ToolNode | (StructuredToolInterface | DynamicTool | RunnableToolLike)[]
|
|
21
|
+
* (@langchain/langgraph@0.2.74 d.ts; current npm 1.4.12). Runtime isRunnable
|
|
22
|
+
* requires lc_runnable === true; ToolNode drops non-matching tools and the
|
|
23
|
+
* model sees "Tool not found" — NEVER return that silent shape.
|
|
19
24
|
* - schema = JSON Schema from ProtectedTool.inputSchema (or empty object schema)
|
|
20
25
|
* - func / invoke = the GUARDED execute (same function reference) — never the raw tool
|
|
26
|
+
* - description always set (fallback to name) — StructuredToolInterface requires it
|
|
27
|
+
* NO hard @langchain/* dependency: duck-type the measured surface. If a tool would
|
|
28
|
+
* still fail that check, throw LangGraphToolsNotStructuredError (named, with the fix).
|
|
21
29
|
*
|
|
22
30
|
* Honesty (do not "upgrade" assurance):
|
|
23
31
|
* - composition_assurance is passed through EXACTLY as the core reported it
|
|
@@ -34,14 +42,48 @@
|
|
|
34
42
|
* Mirrors src/adapters/openai.ts and anthropic.ts — only the target tool shape differs.
|
|
35
43
|
*/
|
|
36
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.LangGraphToolsNotStructuredError = void 0;
|
|
46
|
+
exports.isLangGraphReactAgentTool = isLangGraphReactAgentTool;
|
|
37
47
|
exports.protectedToolToLangGraph = protectedToolToLangGraph;
|
|
38
48
|
exports.toLangGraphTools = toLangGraphTools;
|
|
49
|
+
exports.bindLangGraphTools = bindLangGraphTools;
|
|
39
50
|
exports.withCodeRiftsLangGraph = withCodeRiftsLangGraph;
|
|
40
51
|
exports.langGraphToolAdapter = langGraphToolAdapter;
|
|
41
52
|
exports.defaultSerializeLangGraphToolResult = defaultSerializeLangGraphToolResult;
|
|
42
53
|
exports.bindLangGraphGuardOutcome = bindLangGraphGuardOutcome;
|
|
43
54
|
const with_coderifts_js_1 = require("../with-coderifts.js");
|
|
44
55
|
const final_answer_proof_js_1 = require("../final-answer-proof.js");
|
|
56
|
+
const gate_refusal_js_1 = require("../gate-refusal.js");
|
|
57
|
+
/**
|
|
58
|
+
* Named error — thrown instead of returning tools createReactAgent would silently drop.
|
|
59
|
+
* Never a model-visible "Tool not found".
|
|
60
|
+
*/
|
|
61
|
+
class LangGraphToolsNotStructuredError extends Error {
|
|
62
|
+
constructor(message) {
|
|
63
|
+
super(message
|
|
64
|
+
?? 'withCodeRiftsLangGraph() tools are not StructuredTool-compatible for createReactAgent. '
|
|
65
|
+
+ 'createReactAgent (@langchain/langgraph) requires StructuredToolInterface | DynamicTool | '
|
|
66
|
+
+ 'RunnableToolLike (name, description, schema, invoke, lc_runnable). '
|
|
67
|
+
+ 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
|
|
68
|
+
this.name = 'LangGraphToolsNotStructuredError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.LangGraphToolsNotStructuredError = LangGraphToolsNotStructuredError;
|
|
72
|
+
/**
|
|
73
|
+
* True iff `t` matches the measured createReactAgent tool surface
|
|
74
|
+
* (StructuredToolInterface | DynamicTool | RunnableToolLike).
|
|
75
|
+
*/
|
|
76
|
+
function isLangGraphReactAgentTool(t) {
|
|
77
|
+
if (!t || typeof t !== 'object')
|
|
78
|
+
return false;
|
|
79
|
+
const o = t;
|
|
80
|
+
return typeof o.name === 'string' && o.name.length > 0
|
|
81
|
+
&& typeof o.description === 'string'
|
|
82
|
+
&& o.schema != null && typeof o.schema === 'object' && !Array.isArray(o.schema)
|
|
83
|
+
&& typeof o.invoke === 'function'
|
|
84
|
+
&& typeof o.func === 'function'
|
|
85
|
+
&& o.lc_runnable === true;
|
|
86
|
+
}
|
|
45
87
|
/** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
|
|
46
88
|
const EMPTY_SCHEMA = Object.freeze({
|
|
47
89
|
type: 'object',
|
|
@@ -59,15 +101,21 @@ function protectedToolToLangGraph(tool) {
|
|
|
59
101
|
? tool.inputSchema
|
|
60
102
|
: { ...EMPTY_SCHEMA };
|
|
61
103
|
// Guarded execute only — never a raw unwrapped executor.
|
|
62
|
-
const guarded = (args) => Promise.resolve(tool.execute(args));
|
|
104
|
+
const guarded = (args, _config) => Promise.resolve().then(() => tool.execute(args));
|
|
105
|
+
const description = tool.description != null && tool.description !== ''
|
|
106
|
+
? tool.description
|
|
107
|
+
: tool.name;
|
|
63
108
|
const out = {
|
|
64
109
|
name: tool.name,
|
|
110
|
+
description,
|
|
65
111
|
schema,
|
|
66
112
|
func: guarded,
|
|
67
113
|
invoke: guarded,
|
|
114
|
+
lc_runnable: true,
|
|
68
115
|
};
|
|
69
|
-
if (
|
|
70
|
-
|
|
116
|
+
if (!isLangGraphReactAgentTool(out)) {
|
|
117
|
+
throw new LangGraphToolsNotStructuredError(`protectedToolToLangGraph(${JSON.stringify(tool.name)}): tool is not createReactAgent-consumable. `
|
|
118
|
+
+ 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
|
|
71
119
|
}
|
|
72
120
|
return out;
|
|
73
121
|
}
|
|
@@ -76,13 +124,29 @@ function protectedToolToLangGraph(tool) {
|
|
|
76
124
|
* Does NOT call the guard — pure map over an already-protected list.
|
|
77
125
|
*/
|
|
78
126
|
function toLangGraphTools(protectedTools) {
|
|
79
|
-
return protectedTools.map(protectedToolToLangGraph);
|
|
127
|
+
return bindLangGraphTools(protectedTools.map(protectedToolToLangGraph));
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Assert (and return) tools that createReactAgent can consume.
|
|
131
|
+
* Throws LangGraphToolsNotStructuredError — never a silent "Tool not found".
|
|
132
|
+
*/
|
|
133
|
+
function bindLangGraphTools(tools) {
|
|
134
|
+
const out = [];
|
|
135
|
+
for (const t of tools) {
|
|
136
|
+
if (!isLangGraphReactAgentTool(t)) {
|
|
137
|
+
const n = t && typeof t === 'object' && 'name' in t ? String(t.name) : '?';
|
|
138
|
+
throw new LangGraphToolsNotStructuredError(`bindLangGraphTools: ${JSON.stringify(n)} is not StructuredTool-compatible for createReactAgent. `
|
|
139
|
+
+ 'Fix: wrap with tool() from @langchain/core/tools — see README (LangChain / LangGraph).');
|
|
140
|
+
}
|
|
141
|
+
out.push(t);
|
|
142
|
+
}
|
|
143
|
+
return out;
|
|
80
144
|
}
|
|
81
145
|
/**
|
|
82
146
|
* Build LangGraph/LangChain-ready guarded tool descriptors from raw tools + client + operation.
|
|
83
147
|
*
|
|
84
148
|
* Calls withCodeRifts internally (guard logic stays in the core). Returns:
|
|
85
|
-
* - `tools` —
|
|
149
|
+
* - `tools` — StructuredTool-compatible descriptors { name, description, schema, func, invoke, lc_runnable }
|
|
86
150
|
* - `protected_tools` — same guarded tools
|
|
87
151
|
* - assurance objects from the core, passed through untouched
|
|
88
152
|
*
|
|
@@ -142,16 +206,13 @@ function bindLangGraphGuardOutcome(outcome, args) {
|
|
|
142
206
|
body = serialize(outcome.result);
|
|
143
207
|
}
|
|
144
208
|
else if (outcome.executionAttempted === false) {
|
|
145
|
-
|
|
146
|
-
body =
|
|
147
|
-
`CodeRifts gate did not permit execution (verdict: ${kind}). `
|
|
148
|
-
+ 'No tool result was produced.';
|
|
209
|
+
body = (0, gate_refusal_js_1.formatGateRefusalBody)(outcome);
|
|
149
210
|
}
|
|
150
211
|
else {
|
|
151
212
|
const err = 'error' in outcome ? outcome.error : undefined;
|
|
152
|
-
const kind = verdictKind(outcome);
|
|
213
|
+
const kind = (0, gate_refusal_js_1.verdictKind)(outcome);
|
|
153
214
|
body =
|
|
154
|
-
`Tool execution failed after gate decision (verdict: ${kind}): ${formatGuardError(err)}`;
|
|
215
|
+
`Tool execution failed after gate decision (verdict: ${kind}): ${(0, gate_refusal_js_1.formatGuardError)(err)}`;
|
|
155
216
|
}
|
|
156
217
|
const content = args.attachProof === false
|
|
157
218
|
? body
|
|
@@ -165,21 +226,4 @@ function bindLangGraphGuardOutcome(outcome, args) {
|
|
|
165
226
|
}
|
|
166
227
|
return msg;
|
|
167
228
|
}
|
|
168
|
-
function verdictKind(outcome) {
|
|
169
|
-
return outcome.verdict && typeof outcome.verdict === 'object' && 'kind' in outcome.verdict
|
|
170
|
-
? String(outcome.verdict.kind)
|
|
171
|
-
: 'UNKNOWN';
|
|
172
|
-
}
|
|
173
|
-
function formatGuardError(err) {
|
|
174
|
-
if (err instanceof Error)
|
|
175
|
-
return err.message || err.name || 'Error';
|
|
176
|
-
if (typeof err === 'string')
|
|
177
|
-
return err;
|
|
178
|
-
try {
|
|
179
|
-
return JSON.stringify(err);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return String(err);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
229
|
//# sourceMappingURL=langgraph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langgraph.js","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"langgraph.js","sourceRoot":"","sources":["../../../src/adapters/langgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,2EAA2E;QAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,+EAA+E;IAC/E,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;OAGG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,wDAAwD;IACxD,eAAe,EAAE,sBAAsB,CAAC;IACxC;;;;OAIG;IACH,qBAAqB,EAAE,oBAAoB,CAAC;IAC5C,yEAAyE;IACzE,cAAc,EAAE,mBAAmB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAQF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAgB7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,GAAG,kBAAkB,EAAE,CAE5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,yBAAyB,CAGxF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,CAcxF;AAID;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,OAAO,CAAC,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAC;AAC/C,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,iBAAiB,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI;IAC1C,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAgBrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAClC,2BAA2B,CAgC7B"}
|
|
@@ -31,6 +31,7 @@ exports.defaultSerializeOpenAIToolResult = defaultSerializeOpenAIToolResult;
|
|
|
31
31
|
exports.bindOpenAIGuardOutcome = bindOpenAIGuardOutcome;
|
|
32
32
|
const with_coderifts_js_1 = require("../with-coderifts.js");
|
|
33
33
|
const final_answer_proof_js_1 = require("../final-answer-proof.js");
|
|
34
|
+
const gate_refusal_js_1 = require("../gate-refusal.js");
|
|
34
35
|
/** Empty JSON Schema object — used when a ProtectedTool has no inputSchema. */
|
|
35
36
|
const EMPTY_PARAMETERS = Object.freeze({
|
|
36
37
|
type: 'object',
|
|
@@ -141,20 +142,13 @@ function bindOpenAIGuardOutcome(outcome, args) {
|
|
|
141
142
|
}
|
|
142
143
|
else if (outcome.executionAttempted === false) {
|
|
143
144
|
// Blocked before factory — no result; never fabricate one.
|
|
144
|
-
|
|
145
|
-
? String(outcome.verdict.kind)
|
|
146
|
-
: 'UNKNOWN';
|
|
147
|
-
body =
|
|
148
|
-
`CodeRifts gate did not permit execution (verdict: ${kind}). `
|
|
149
|
-
+ 'No tool result was produced.';
|
|
145
|
+
body = (0, gate_refusal_js_1.formatGateRefusalBody)(outcome);
|
|
150
146
|
}
|
|
151
147
|
else {
|
|
152
148
|
// executionAttempted && !executed → factory threw; error is present.
|
|
153
149
|
const err = 'error' in outcome ? outcome.error : undefined;
|
|
154
|
-
const errText = formatGuardError(err);
|
|
155
|
-
const kind =
|
|
156
|
-
? String(outcome.verdict.kind)
|
|
157
|
-
: 'UNKNOWN';
|
|
150
|
+
const errText = (0, gate_refusal_js_1.formatGuardError)(err);
|
|
151
|
+
const kind = (0, gate_refusal_js_1.verdictKind)(outcome);
|
|
158
152
|
body =
|
|
159
153
|
`Tool execution failed after gate decision (verdict: ${kind}): ${errText}`;
|
|
160
154
|
}
|
|
@@ -170,16 +164,4 @@ function bindOpenAIGuardOutcome(outcome, args) {
|
|
|
170
164
|
};
|
|
171
165
|
return msg;
|
|
172
166
|
}
|
|
173
|
-
function formatGuardError(err) {
|
|
174
|
-
if (err instanceof Error)
|
|
175
|
-
return err.message || err.name || 'Error';
|
|
176
|
-
if (typeof err === 'string')
|
|
177
|
-
return err;
|
|
178
|
-
try {
|
|
179
|
-
return JSON.stringify(err);
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return String(err);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
167
|
//# sourceMappingURL=openai.js.map
|