fabro/lib
Scott Werner 24526304b9 feat(hooks): typed end-to-end interpolation with fail-closed resolution
Carry hook command, URL, header, prompt, and model fields as a typed
InterpString from the config resolve layer all the way to the executor,
so hook segments resolve at fire time from the typed value instead of
collapsing to a String and re-parsing it. This mirrors the MCP transport
env resolution boundary.

Replace the MiniJinja-with-allowlist on HTTP-hook headers with the same
narrow `{{ ns.NAME }}` token resolution used everywhere else — no
template engine on headers.

Make token resolution fail-closed and consistent across hook types. A
missing or out-of-scope token in a command, URL, header, prompt, or
model is now a hard error that blocks the hook rather than firing it with
a half-resolved or empty value. Previously command hooks failed closed
but http/prompt/agent hooks failed open (warn and proceed), which could
dispatch an HTTP request with an empty credential header or run an LLM
call against a half-rendered prompt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 20:49:00 -04:00
..
crates feat(hooks): typed end-to-end interpolation with fail-closed resolution 2026-06-29 20:49:00 -04:00
packages/fabro-api-client feat(workflow): support overriding cwd for local sandbox provider (#467) 2026-06-14 12:32:32 -04:00