You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ba485c6
Browse filesBrowse the repository at this point in the historyBrowse files
improvement(logs): cut recurring production log noise and fix the bugs behind it (#8871)
* fix(serializer): skip tool selection for trigger-mode blocks
Trigger-mode blocks run through TriggerBlockHandler and never read a tool id,
while their tool-mode sub-blocks (e.g. operation) are not serialized, so
selecting a tool always threw and logged a fallback warning.
* improvement(executor): memoize block output schemas per serialized block
collectBlockData re-derived every block's output schema on each condition,
function, agent, and reference evaluation, re-parsing an invalid agent
response format and logging its full stack every time. Memoize the schema per
immutable serialized block, attribute parse failures to the real block id, and
log them at debug without the stack.
* fix(webhooks): stop warning on accountless webhook credentials
Service-account and managed-OAuth credentials (e.g. a custom Slack bot) have no
OAuth account row, so the account-owner lookup always missed and warned on
every webhook run. Skip the lookup for them and warn only when the credential
or its account is genuinely missing.
* improvement(webhooks): log Slack reactions.get missing_scope once per webhook
A Slack bot without reactions:read fails reactions.get identically for every
reaction event until it is reinstalled. Record that configuration state once
per webhook per hour at info and keep the warning for other failures.
* improvement(workflows): repair drifted subBlock types quietly
Deployed snapshots are immutable and re-sanitized on every load, so a field
whose declared type later changed (e.g. dropdown to combobox) warned on every
materialization forever. Log repairs at debug when the stored type is one some
registered block declares; keep warning for missing or unknown types.
* improvement(catalog): skip custom block input derivation for tool reads
Listing, reading, and executing a catalog tool resolved the catalog gate with
every custom block's input fields, which loads and sanitizes each custom
block's deployed workflow per request. Tool scope only needs the block types
(every custom block exposes workflow_executor), so tool reads use the
lightweight overlay rows; block reads still derive the inputs.
* improvement(webhooks): debug-log missing idempotency ids for providers without one
A generic webhook without an idempotency header or configured field has no
delivery identifier by design, so warning on every delivery was noise. Warn
only when the provider normally extracts an id from the body.
* fix(flint): declare generate_pages items as an array param
items was typed json, so the LLM schema advertised it as an object and
dropped its item schema with a warning on every schema build. Declare it as an
array of 1-10 page objects; block-provided JSON strings still parse through
parseItems. Regenerate tool metadata and docs.
* improvement(executor): skip JSON parsing for json inputs holding plain strings
json-typed block inputs also accept plain strings (a file id, URL, or
reference) that are kept as-is, so parsing them could only fail and warn.
Parse only text that can be JSON; every valid JSON text still parses.
* improvement(mothership): classify catalog routes and dedupe missing-provenance warnings
Catalog responses (blocks, tools, connector types) carry no workspace data, so
no producer records provenance for them and the per-request warning was
noise. Skip them statically, and report a data-bearing route without a
producer once per route per hour instead of on every request. Admission and
recording behavior is unchanged.
* fix(tokenization): resolve tiktoken encodings by model family
encodingForModel only knows exact OpenAI names, so newer or provider-prefixed
OpenAI ids fell back to cl100k_base (miscounting o200k models) and every
unknown model built and cached its own copy of the rank table. Resolve exact
names through js-tiktoken, newer OpenAI ids by family, everything else to
cl100k_base, and cache one instance per encoding.
* improvement(proxy): log blocked scanner requests at debug
Every blocked request is an empty or tool user agent probing paths like
/admin.php; the 403 is the whole response, so the per-request warning was
pure ingest cost.
* improvement(telemetry): downgrade best-effort collector failures to warn
Forwarding to the external collector is best effort and the route still
returns success, so a collector timeout or error is not an application error.
* fix(admin): log mothership admin proxy failures and map upstream 5xx to 502
The proxy logged nothing, passed an upstream 5xx straight through as its own
500, threw on a non-JSON upstream body, and returned a silent 500 when the
admin key was missing. Log the method, environment, endpoint, status, and a
truncated upstream body; answer upstream 5xx and unparseable bodies with 502;
and log the missing-key misconfiguration.
* improvement(logs): move per-call success chatter to debug
PII batch masking, function execution request/success, sandbox mount
resolution, table row queries and limits, usage-limit statistics, DAG builds,
and mothership tool routing logged an info line on every call. They are
diagnostic detail, not events, so log them at debug.
* chore(audits): shrink explicit-any baseline after tokenization cleanup
* improvement(mothership): keep tool call routing decision at info
It is the diagnostic for stale-catalog 'No handler for tool' dispatches and
in-band double-dispatch races, so it stays visible in production.
* fix(admin): keep upstream message and empty 2xx bodies in the mothership proxy
A gateway 502 now carries the upstream's error or message field, which the
admin UI shows, and an empty 2xx body (e.g. 204) passes through as an empty
response instead of failing JSON serialization into a misleading 502.
* improvement(tokenization): memoize model to encoding name resolution
A non-OpenAI model threw and caught inside getEncodingNameForModel on every
count. Cache the resolved encoding name per model id in a bounded LRU.
* improvement(mothership): resolve catalog route patterns through the route table
Derive each catalog pattern by matching its contract path against the
generated v2 route table, so a renamed path parameter cannot drift from the
pattern matchV2Route reports and silently restore the warning.
* fix(webhooks): warn on missing idempotency ids unless the provider declares them optional
Header-based providers (GitHub, GitLab, Shopify, Linear, Svix) have no body
extractor, so keying the warning on the extractor silenced exactly the
anomalous case of their delivery header going missing. Providers now declare
deliveryIdOptional; only the generic webhook does, since its deliveries carry
no identifier unless an idempotency field is configured.
* refactor(logs): simplify log-noise fixes after review
- Skip reactions.get entirely while a webhook's bot is known to lack the
scope, instead of repeating a call known to fail.
- Treat any intact sub-block whose stored type differs from the registry as
drift, dropping the registry-wide type scan.
- Move the JSON-candidate check next to isJSONString and trim once.
- Make the catalog gate's cheap overlay rows the default; only block reads
derive custom block inputs.
- Collapse the admin mothership proxy's three copied handlers into one.
* chore(logs): tighten comments and rename trigger-mode serializer test
* test(mothership): guard sandbox catalog route classification against the route table
Extract the catalog route set into isCatalogRoute, built lazily from the catalog
contracts resolved through the generated v2 route table, and test it against
real request paths so a route or parameter rename cannot silently restore the
missing-provenance warning.
* fix(webhooks): keep calling reactions.get after a missing-scope report
Skipping the call for the cooldown window left a reinstalled Slack bot with
empty reaction text for up to an hour. Keep the once-per-window log but always
make the call. Block listing also uses the lightweight custom-block rows, since
block summaries never read custom block inputs.
* chore(logs): tighten log-noise changes after a line-by-line audit
- Drop the blockId option threaded through getEffectiveBlockOutputs; it only
labeled a debug log.
- Name the log-dedupe windows and cache ceilings.
- Build the sandbox catalog route set by converting contract paths to the
route table's pattern syntax; the route-table test guards drift.
Copy file name to clipboardExpand all lines: apps/docs/content/docs/integrations/flint.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,7 +56,7 @@ Start a background Flint agent task that generates up to 10 pages from a templat
56
56
|`apiKey`| string | Yes | Flint API key \(found in Flint team settings, starts with ak_\)|
57
57
|`siteId`| string | Yes | ID of the Flint site the agent should modify |
58
58
|`templatePageSlug`| string | Yes | Slug of the existing template page to generate from \(e.g., /case-studies/template\)|
59
-
|`items`|json| Yes | JSON array of 1-10 pages to generate. Each item requires targetPageSlug \(slug for the new page\) and context \(content details the agent should use\). |
59
+
|`items`|array| Yes | JSON array of 1-10 pages to generate. Each item requires targetPageSlug \(slug for the new page\) and context \(content details the agent should use\). |
60
60
|`callbackUrl`| string | No | HTTPS webhook URL that Flint will POST to when the task completes or fails |
61
61
|`publish`| boolean | No | Whether to automatically publish the generated pages when the task completes |
0 commit comments