Every internal failure was mapped to a fixed sanitized code before anything recorded the cause, so an intermittent execution_failed was undebuggable: an exhausted model-call budget, a model turn with no text, and a genuine crash all looked identical. The bridge now writes one bounded line to container stderr on failure with the code, the internal reason, the state and both call counters, and the failure sites pass a reason (budget exhausted, empty final answer with its content block types, token counts against the limits). The wire error is unchanged. The backend logs the agent's terminal code together with its own call counters, and the sanitized tail of container stderr rather than only its byte count. deploy/logging.json gives every logger a timestamp (uvicorn's default config leaves non-uvicorn loggers on logging's fallback handler); override with CONFLUENCE_WEB_LOG_CONFIG.
27 lines
567 B
JSON
27 lines
567 B
JSON
{
|
|
"version": 1,
|
|
"disable_existing_loggers": false,
|
|
"formatters": {
|
|
"standard": {
|
|
"format": "%(asctime)s %(levelname)-8s %(name)s: %(message)s",
|
|
"datefmt": "%Y-%m-%dT%H:%M:%S%z"
|
|
}
|
|
},
|
|
"handlers": {
|
|
"console": {
|
|
"class": "logging.StreamHandler",
|
|
"stream": "ext://sys.stderr",
|
|
"formatter": "standard"
|
|
}
|
|
},
|
|
"root": {
|
|
"handlers": ["console"],
|
|
"level": "INFO"
|
|
},
|
|
"loggers": {
|
|
"uvicorn": { "level": "INFO" },
|
|
"uvicorn.error": { "level": "INFO" },
|
|
"uvicorn.access": { "level": "INFO" }
|
|
}
|
|
}
|