Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
1718961
Prepare Mission 7 cut with Vestera and parallel execution structure
lunelson Sep 7, 2026
c7cd25c
Cut Mission 7 Step A authority for Vestera construction and explanation
lunelson Sep 8, 2026
65a0052
Record the Mission 6b Voice reconciliation draft
lunelson Sep 7, 2026
46e0cfb
Gate Mission 7 on the review-restacked Voice reconciliation foundation
lunelson Sep 7, 2026
3fc6473
Open Mission 7 foundation after Mission 6b acceptance
lunelson Sep 7, 2026
c54e0dd
add note re api route naming
lunelson Sep 7, 2026
3824d8d
Remove living docs that still described discarded YAML, capture, and …
lunelson Sep 7, 2026
5fa90ce
Collapse remaining living specs so they stop drifting as second contr…
lunelson Sep 7, 2026
bd56c11
notes re progress on the docker stuff, implications for mission 8
lunelson Sep 7, 2026
da29864
Clarify the isolated Mission 7 A1 carrier probe gate
lunelson Sep 8, 2026
9d72cfd
Correct the A1 clarification acceptance date
lunelson Sep 8, 2026
e5a661a
Carry nested Petrinaut type schemas through Flue
lunelson Sep 8, 2026
adca7a9
Record the Mission 7 A1 carrier proof and handoff
lunelson Sep 8, 2026
c419c0d
Record the landed Mission 8 application PRs and remaining SRE-1013 do…
lunelson Sep 8, 2026
960e1d2
Prepare the Mission 8 successor cut after the Tim door note
lunelson Sep 8, 2026
66347dc
Expose a local-only compaction setting for Brunch probes
lunelson Sep 8, 2026
fccbde3
Clarify worker autonomy within Mission 7 chunk boundaries
lunelson Sep 8, 2026
95027d3
Add workpiece revision settlement and pin unsafe mixed batches
lunelson Sep 8, 2026
f091f2b
Record A2 settlement evidence and mixed-batch stop
lunelson Sep 8, 2026
14dadd7
Retain A2 verification command logs
lunelson Sep 8, 2026
0943765
Register A2 hermetic test entrypoints and retain safety failure
lunelson Sep 8, 2026
ce7e963
Add synchronous mutation observation and verifiable arc records
lunelson Sep 8, 2026
b1157f1
Record A3 verification and partial integration handoff
lunelson Sep 8, 2026
2a8a7ab
Pin public history across compaction and retained-store reopen
lunelson Sep 8, 2026
77e56c5
Record preliminary A4 compaction and reopen evidence
lunelson Sep 8, 2026
db5d1c3
Record the combined A2 through A4 baseline and remaining joins
lunelson Sep 8, 2026
3d814b5
amp's analysis of KA's proposal
lunelson Sep 8, 2026
369723b
add side quest re agent guidance dedup/consolidation
lunelson Sep 8, 2026
357e6ea
Refresh Mission 7 navigation around the next feasibility gates
lunelson Sep 8, 2026
7ef2249
Authorize bounded buffered proposal rejection for Mission 7
lunelson Sep 8, 2026
b753ebd
Prove remaining canonical carrier classes without changing admission
lunelson Sep 8, 2026
7cebf87
Retain carrier feasibility survey and provider boundary limits
lunelson Sep 8, 2026
611b6d6
Retain exact carrier verification logs and relay commit references
lunelson Sep 8, 2026
3cc9112
Probe production admission controls with a faux provider
lunelson Sep 8, 2026
1a005c0
Record admission feasibility evidence and owner decision
lunelson Sep 8, 2026
4afe4a0
Refresh admission evidence hashes after JSON formatting
lunelson Sep 8, 2026
b29285a
Record the selected buffered admission route
lunelson Sep 8, 2026
80514c0
Reject mixed ChatAgent proposals before publishing tools
lunelson Sep 8, 2026
e66e999
Record buffered admission production verification
lunelson Sep 8, 2026
c78fbef
Integrate Mission 7 carrier and admission evidence
lunelson Sep 8, 2026
d656058
Replan Mission 7 around the joined browser tracer
lunelson Sep 8, 2026
66dfe90
Create probe scratch directories with mkdtemp instead of a predictabl…
lunelson Sep 8, 2026
aced73a
Prove provider-root preservation and refusal usage capture without ne…
lunelson Sep 8, 2026
cbefcfc
Lock native tool schema carriage for Mission 7
lunelson Sep 8, 2026
0baf9c3
Join settled root arcs to verified browser continuation
lunelson Sep 8, 2026
49bff14
Record the joined root-arc browser witness and verification
lunelson Sep 8, 2026
39f1581
Clarify the interim carrier boundary of the browser witness
lunelson Sep 8, 2026
ead04b6
Verify the joined browser tracer on alpha
lunelson Sep 8, 2026
39167f8
Prove native schema carriage across isolated Flue and Pi repairs
lunelson Sep 8, 2026
e035802
Review and replay the native schema repair candidates
lunelson Sep 8, 2026
d786b13
Reconcile Mission 7 and authorize local native schema delivery
lunelson Sep 8, 2026
759dbc9
Stop typechecking Petrinaut website sources from the brunch-agent lin…
lunelson Sep 8, 2026
f89e732
Probe retention of freshly produced browser and revision records
lunelson Sep 8, 2026
e428ca7
Localize overflow continuation and revision append crash windows
lunelson Sep 8, 2026
178e630
Record preliminary new-record retention and bounded recovery findings
lunelson Sep 8, 2026
38028e9
Disclose transitive generator download in A4 verification evidence
lunelson Sep 8, 2026
e10c864
Review A4 recovery findings and verify its integration
lunelson Sep 8, 2026
e4dcad7
Reserve and reconcile opt-in Step A native requests below admission
lunelson Sep 8, 2026
c9ce17e
Keep journal failures and inconsistent catalogue costs blocking
lunelson Sep 8, 2026
ffcf844
Record unpaid request accounting readiness and integration requirements
lunelson Sep 8, 2026
b12d1d5
Review and verify request accounting on alpha
lunelson Sep 8, 2026
e38a6a7
Keep deploy setup from overflowing jq argv on large PR checkouts
lunelson Sep 8, 2026
d6efc4e
Install pinned native schema runtime patches
lunelson Sep 8, 2026
f77a065
Join canonical native inputs to the prepared browser path
lunelson Sep 8, 2026
5686b02
Retain guarded native delivery and browser evidence
lunelson Sep 8, 2026
6bec121
Verify native delivery with accounting and retained records
lunelson Sep 8, 2026
b5f320b
Reconcile Mission 7 and dispatch recovery and explanation work
lunelson Sep 8, 2026
5bf95f8
Record the reopened definition serialization mismatch
lunelson Sep 8, 2026
8533f2b
Authorize labelled reconciliation equivalence and bounded AFK decisions
lunelson Sep 8, 2026
d04c26b
Record the local recovery build artifact blocker
lunelson Sep 8, 2026
b5a0218
Promote recovery diagnostics to failing safety oracles
lunelson Sep 8, 2026
6eed6fd
Make Flue recovery preserve revision state and successful stops
lunelson Sep 8, 2026
abb4bf0
Retain guarded local recovery proof and installation handoff
lunelson Sep 8, 2026
94471fb
Pin completed overflow responses independently of history observations
lunelson Sep 8, 2026
cfb5055
Retain response-preservation review correction and falsifier evidence
lunelson Sep 8, 2026
17404c1
Verify corrected recovery safety on alpha
lunelson Sep 8, 2026
a02e9a9
Reconcile verified recovery and the remaining A5 join
lunelson Sep 8, 2026
993c67e
Admit the reviewed A5 verification entrypoints
lunelson Sep 8, 2026
3c73ab6
Join authorized evidence and recorded why to the reopened browser
lunelson Sep 8, 2026
95bd40e
Retain the first A5 product witness and bounded dispositions
lunelson Sep 8, 2026
cd01f1f
Retain the guarded A5 command logs
lunelson Sep 8, 2026
1aeca79
Preserve overlapping carried workpiece evidence relations
lunelson Sep 8, 2026
87f25a3
Retain overlapping evidence conservation regression proof
lunelson Sep 8, 2026
3fe6e0b
Pin the formatted conservation observation summary
lunelson Sep 8, 2026
963c005
Verify the first A5 product path with corrected recovery
lunelson Sep 8, 2026
ed1d233
Record the mixed-validity browser proposal gap
lunelson Sep 8, 2026
2c432e0
Require a single browser call per admitted proposal
lunelson Sep 8, 2026
5e9786e
Reject multi-browser proposals before publishing tool inputs
lunelson Sep 8, 2026
d91ba10
Verify single-browser admission before broader construction
lunelson Sep 8, 2026
c41aeb5
Reconcile A5 and launch construction and proving readiness
lunelson Sep 8, 2026
1d1fc04
Prove A5 evidence and why across process restart and compaction
lunelson Sep 8, 2026
99be9e8
Exclude cached why answers from the retention context oracle
lunelson Sep 8, 2026
0a35eaa
Retain reviewed A5 process and compaction proof evidence
lunelson Sep 9, 2026
b663916
Retain command logs for the A5 process proof
lunelson Sep 9, 2026
4989c82
Verify A5 process retention on the integrated branch
lunelson Sep 9, 2026
b5a8b62
Reconcile A5 durability and paid-readiness blockers
lunelson Sep 9, 2026
d606c98
Carry host initialization on real user transport submissions
lunelson Sep 8, 2026
9734750
Verify optional initialization against the combined product path
lunelson Sep 9, 2026
89031d1
Retain the passage policy false-green counterexample
lunelson Sep 9, 2026
4191a5f
Require honest rendering of non-applied tool outcomes
lunelson Sep 9, 2026
45701b6
Admit the passage policy probe entrypoint
lunelson Sep 9, 2026
2f82cf9
Probe mounted passage edits with discriminating synthetic assertions
lunelson Sep 9, 2026
1ae6503
Record bounded passage policy matrix and oracle counterexamples
lunelson Sep 9, 2026
423bc3c
Reconcile passage policy proof and remaining cost attestation
lunelson Sep 9, 2026
e9662e1
Admit the construction progression witness entrypoint
lunelson Sep 9, 2026
9e18399
Bind root arc progression to earlier verified browser observations
lunelson Sep 9, 2026
bf970c3
Classify observed construction tools at browser admission
lunelson Sep 9, 2026
910d0b7
Render explicitly unapplied assistant operations honestly
lunelson Sep 9, 2026
9b89759
Retain first construction progression proof and class limits
lunelson Sep 9, 2026
d5331f1
Retain guarded logs and exact raw summary evidence
lunelson Sep 9, 2026
7727135
Consolidate Petrinaut release notes for the mission
lunelson Sep 9, 2026
9949aa8
Verify and reconcile the first construction progression
lunelson Sep 9, 2026
18ffa4e
Add explicit bounded A5 provider driver and fail-closed preflight
lunelson Sep 9, 2026
0a34f59
Freeze A5 provider readiness evidence and concrete egress decision gate
lunelson Sep 9, 2026
bf8adc8
Retain the frozen manifest verification output
lunelson Sep 9, 2026
c232ad2
Require raw terminal usage before A5 native response settlement
lunelson Sep 9, 2026
c0cb313
Attest terminal usage for every SDK-success HTTP status
lunelson Sep 9, 2026
216e286
Retain terminal-usage red and green evidence with a new A5 instrument
lunelson Sep 9, 2026
7a27bb0
Admit the raw terminal accounting integration probe
lunelson Sep 9, 2026
20bd522
Freeze the reviewed A5 inventory with a passing full application suite
lunelson Sep 9, 2026
727cff2
Refuse raw cache-tier evidence the native parser cannot preserve
lunelson Sep 9, 2026
923394c
Retain raw cache-cost counterexamples and supported partition controls
lunelson Sep 9, 2026
4d5a5ef
Count all canonical operations against the repair limit
lunelson Sep 9, 2026
3f86c14
Reconcile reviewed construction and provider proving readiness
lunelson Sep 9, 2026
03b8394
Freeze the merged A5 provider instrument with guarded local evidence
lunelson Sep 9, 2026
0098bf1
Allocate the frozen current-A5 provider run
lunelson Sep 9, 2026
5ad955c
Stop unused allocation at the browser sandbox boundary
lunelson Sep 9, 2026
47ebb1e
Approve separate guarded browser control for the A5 evaluator
lunelson Sep 9, 2026
be29875
Authorize canonical capacity preservation at document reopening
lunelson Sep 9, 2026
28a529a
Preserve place capacities when reopening canonical documents
lunelson Sep 9, 2026
9898375
Verify the canonical capacity fix before root replay
lunelson Sep 9, 2026
6d94fd6
Retain the browser close-rejection cleanup blocker
lunelson Sep 9, 2026
696eacc
Add bounded native root creation candidate and expose reopen loss
lunelson Sep 9, 2026
da87e3d
Verify root reopen preservation against raw browser observations
lunelson Sep 9, 2026
b832fc2
Keep synthetic user accounts distinct from settled workpieces
lunelson Sep 9, 2026
6ba8129
Record native root creation proof and capacity reopen blocker
lunelson Sep 9, 2026
78d2aa8
Retain guarded root creation command logs
lunelson Sep 9, 2026
8d365c8
Admit the root creation browser witness
lunelson Sep 9, 2026
9a46ba8
Prove reopened node why and construction safety controls
lunelson Sep 9, 2026
8441269
Record post-fix root creation and reopened why proof
lunelson Sep 9, 2026
dd748a4
Verify and reconcile native root creation and reopened why
lunelson Sep 9, 2026
8d4f3cc
Run the A5 browser owner and controller as guarded siblings
lunelson Sep 9, 2026
f9fd5fd
Retain sibling-browser dry and failure lifecycle evidence
lunelson Sep 9, 2026
220f514
Escalate rejected browser shutdown through bounded public kill
lunelson Sep 9, 2026
e9726a8
Retain actual browser shutdown rejection and timeout proof
lunelson Sep 9, 2026
bef5dab
Describe the separate browser sandbox root accurately
lunelson Sep 9, 2026
f2b9bfd
Reconcile guarded browser execution and shutdown limits
lunelson Sep 9, 2026
fbb8419
Freeze the reviewed sibling-browser A5 instrument
lunelson Sep 9, 2026
d0e34a7
Allocate r2 for the verified sibling-browser instrument
lunelson Sep 9, 2026
af085b8
Verify paid-root browser attachment and isolate DNS metadata
lunelson Sep 9, 2026
c628174
Authorize r2 after real profile and pinned TLS checks
lunelson Sep 9, 2026
3a597f5
Retain the r2 authentication failure and unresolved hold
lunelson Sep 9, 2026
aa57208
Pause expansion to land and reassess Mission 7
lunelson Sep 9, 2026
a7c51d1
Admit the typed state browser witness
lunelson Sep 9, 2026
8eff9c7
Observe typed state construction and derived scenario effects
lunelson Sep 9, 2026
ed5bb70
Retain typed state browser checkpoint and remaining root obligations
lunelson Sep 9, 2026
0b77d16
Admit the aggregate explanation regression fixture
lunelson Sep 9, 2026
26412da
Refuse aggregate state basis after descendant changes
lunelson Sep 9, 2026
00d55ae
Retain aggregate state refusal correction and original counterexample
lunelson Sep 9, 2026
b522c0d
Close aggregate attribution across the existing construction queries
lunelson Sep 9, 2026
dc27f5a
Land the current Mission 7 checkpoint and reassess its health
lunelson Sep 9, 2026
ac95f0a
Reorient Mission 7 around the next genuine product observation
lunelson Sep 9, 2026
63a699c
Anchor mission delegation to the next product observation
lunelson Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
5 changes: 5 additions & 0 deletions .changeset/brunch-a3-browser-observation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hashintel/petrinaut": patch
---

Add an optional synchronous `aiAssistant.executeMutation` boundary so embedding applications can inspect their live document around a canonical mutation or refuse execution, while the panel retains control of tool results and continuation. Show explicitly unapplied assistant operations with their reason instead of a successful mutation summary, and label grouped tool calls as operations rather than changes.
5 changes: 5 additions & 0 deletions .changeset/preserve-place-capacity.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hashintel/petrinaut-core": patch
---

Preserve place capacities when normalizing documents or reopening a JSON document handle, including zero limits and explicitly unbounded places.
8 changes: 6 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -210,9 +210,13 @@ jobs:

# Infra images β€” turbo is blind to them; a changed file under their
# context dir is a complete signal (the dir IS the build context).
CHANGED=$(git diff --name-only HEAD^ HEAD | jq -Rsc 'split("\n") | map(select(length > 0))')
# Write the path list to a file: on large PR merge checkouts
# `git diff HEAD^` is the whole PR, and `--argjson` hits ARG_MAX.
CHANGED_JSON="${RUNNER_TEMP:-$(mktemp -d)}/deploy-changed.json"
git diff --name-only HEAD^ HEAD | jq -Rsc 'split("\n") | map(select(length > 0))' > "$CHANGED_JSON"

AFFECTED_CATALOG=$(jq -c --argjson pkgs "$AFFECTED_PKGS" --argjson changed "$CHANGED" '
AFFECTED_CATALOG=$(jq -c --argjson pkgs "$AFFECTED_PKGS" --slurpfile changed "$CHANGED_JSON" '
($changed[0]) as $changed |
[.[] | select(
(.package != null and (.package as $p | $pkgs | index($p) != null))
or
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
diff --git a/README.md b/README.md
index a4d5fdd9f68a9c158bf7a4e840b06447d2b45071..573f4f1226b950e3e63c0ba5e6d79e8ba620cb6f 100644
--- a/README.md
+++ b/README.md
@@ -396,6 +396,8 @@ const agent = new Agent({

## Tools

+A tool may supply `validateArguments(args, { toolCallId, signal })` as its authoritative validator. This replaces generic JSON Schema validation/coercion for that tool only. It receives cloned input after an optional `prepareArguments` normalizer and returns parsed data (or throws/rejects). The original tool call/history is not rewritten. `beforeToolCall`, `afterToolCall` and `execute` receive that parsed data; a validation failure or cancellation prevents execution. Validators must honor the abort signal. Tools without this callback retain the existing generic validation path. The third `AgentTool` type parameter describes parsed arguments when they differ from the parameter schema's static input type. The JSON Schema in `parameters` remains the provider-facing input projection; it need not represent executable refinements or normalized output defaults.
+
Define tools using `AgentTool`:

```typescript
diff --git a/dist/agent-loop.js b/dist/agent-loop.js
index 5b5da787a637df62dfd944f92a45fc9cb945eac3..48b4fcb827cb359715f0dddd37fc5ce8b16a6cca 100644
--- a/dist/agent-loop.js
+++ b/dist/agent-loop.js
@@ -400,8 +400,11 @@ async function prepareToolCall(currentContext, assistantMessage, toolCall, confi
};
}
try {
- const preparedToolCall = prepareToolCallArguments(tool, toolCall);
- const validatedArgs = validateToolArguments(tool, preparedToolCall);
+ const preparedToolCall = prepareToolCallArguments(tool, tool.validateArguments ? { ...toolCall, arguments: structuredClone(toolCall.arguments) } : toolCall);
+ const validatedArgs = tool.validateArguments
+ ? await tool.validateArguments(structuredClone(preparedToolCall.arguments), { toolCallId: toolCall.id, signal })
+ : validateToolArguments(tool, preparedToolCall);
+ if (signal?.aborted) return { kind: "immediate", result: createErrorToolResult("Operation aborted"), isError: true };
if (config.beforeToolCall) {
const beforeResult = await config.beforeToolCall({
assistantMessage,
diff --git a/dist/types.d.ts b/dist/types.d.ts
index 38009ade487645493c0738dbce9d53fc74f589c6..8a434f490ff55dad40e9ae2ccfde3708f175df25 100644
--- a/dist/types.d.ts
+++ b/dist/types.d.ts
@@ -72,7 +72,7 @@ export interface BeforeToolCallContext {
assistantMessage: AssistantMessage;
/** The raw tool call block from `assistantMessage.content`. */
toolCall: AgentToolCall;
- /** Validated tool arguments for the target tool schema. */
+ /** Parsed arguments from the tool's authoritative validator (custom validateArguments or generic schema validation). */
args: unknown;
/** Current agent context at the time the tool call is prepared. */
context: AgentContext;
@@ -83,7 +83,7 @@ export interface AfterToolCallContext {
assistantMessage: AssistantMessage;
/** The raw tool call block from `assistantMessage.content`. */
toolCall: AgentToolCall;
- /** Validated tool arguments for the target tool schema. */
+ /** Parsed arguments from the tool's authoritative validator (custom validateArguments or generic schema validation). */
args: unknown;
/** The executed tool result before any `afterToolCall` overrides are applied. */
result: AgentToolResult<any>;
@@ -330,7 +330,7 @@ export interface AgentToolResult<T> {
*/
export type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;
/** Tool definition used by the agent runtime. */
-export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {
+export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any, TArguments = Static<TParameters>> extends Tool<TParameters> {
/** Human-readable label for UI display. */
label: string;
/**
@@ -338,8 +338,13 @@ export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any
* Must return an object that matches `TParameters`.
*/
prepareArguments?: (args: unknown) => Static<TParameters>;
+ /** Authoritative per-tool validation. Replaces generic JSON Schema validation/coercion.
+ * Receives a clone of prepared raw input; returns parsed data for beforeToolCall
+ * and execute, or throws. Implementations must honor the supplied abort signal.
+ * The provider JSON Schema remains the representable input projection. */
+ validateArguments?: (args: unknown, context: { toolCallId: string; signal?: AbortSignal }) => TArguments | Promise<TArguments>;
/** Execute the tool call. Throw on failure instead of encoding errors in `content`. */
- execute: (toolCallId: string, params: Static<TParameters>, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback<TDetails>) => Promise<AgentToolResult<TDetails>>;
+ execute: (toolCallId: string, params: TArguments, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback<TDetails>) => Promise<AgentToolResult<TDetails>>;
/**
* Per-tool execution mode override.
* - "sequential": this tool must execute one at a time with other tool calls.
38 changes: 38 additions & 0 deletions .yarn/patches/@earendil-works-pi-ai-npm-0.83.0-c607801251.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
diff --git a/README.md b/README.md
index ed4e4a545f30a40b8da8ac7ffd5cdc427f562e6b..3463a097ad3c15c2d2ba4dd6ea120b8a2990077f 100644
--- a/README.md
+++ b/README.md
@@ -480,6 +480,8 @@ const bookMeetingTool: Tool = {

### Constrained Sampling for Tools

+Anthropic tool preparation preserves the supplied parameter schema independently of constrained sampling, including root descriptions, additional-properties constraints, definitions and references. The adapter does not rewrite missing `required` lists or remove the declared dialect. This is schema carriage, not a promise that the remote provider accepts every JSON Schema keyword or that arbitrary runtime refinements can be exported.
+
Tools can opt in to provider-side constrained sampling. For JSON-schema tools, `strict: 'prefer'` uses provider-side strict schema enforcement when supported and otherwise falls back to normal tool calling. `strict: 'require'` fails the request when the active provider/model cannot honor it. Set `constrainedSampling: false` to explicitly opt out; it behaves the same as omitting the field.

```typescript
diff --git a/dist/api/anthropic-messages.js b/dist/api/anthropic-messages.js
index 17ec1ac38f1124cbb520522660b6f0dcab70d64d..692f81e97038bd8f2cab749d5a43fcc8e7f0d8af 100644
--- a/dist/api/anthropic-messages.js
+++ b/dist/api/anthropic-messages.js
@@ -997,18 +997,8 @@ function convertTools(tools, isOAuthToken, supportsEagerToolInputStreaming, supp
return [];
return tools.map((tool, index) => {
const strict = resolveJsonSchemaStrictSampling(tool, supportsStrictTools);
- const schema = tool.parameters;
- const legacyInputSchema = {
- type: "object",
- properties: schema.properties ?? {},
- required: schema.required ?? [],
- };
- const inputSchema = strict === true
- ? {
- ...tool.parameters,
- ...legacyInputSchema,
- }
- : legacyInputSchema;
+ // Schema carriage is independent of constrained generation policy.
+ const inputSchema = tool.parameters;
return {
name: isOAuthToken ? toClaudeCodeName(tool.name) : tool.name,
description: tool.description,
Loading
Loading