Commit Graph
5638 Commits
Author SHA1 Message Date
arc53-machine dc5ebf5bb9 e2e: a failed attachment no longer blocks the send
Aborts /api/store_attachment, attaches a file, waits for the failed
chip's reason, then sends. Checks that one /stream request goes out with
no attachment ids, that the question is in the thread and the chip is
gone, and that the stored message has no attachments.
2026-09-28 10:06:25 +01:00
arc53-machine 2acfa34bc5 Fail stalled attachment uploads and say why an upload failed
Uploads had no timeout, so a stalled XHR could leave a chip on
"uploading" forever, and a queued send waited with it. Network failures
also set no errorMessage, so the failed chip showed no reason.

guardUploadStall aborts an upload once it goes 120 s without progress.
It restarts on every upload progress event and again when the body
finishes sending. A large file on a slow link keeps going; only a silent
stall is cut off. That is why it is not xhr.timeout, which caps the whole
request against a 100 MB file limit. onerror, onabort and ontimeout now
mark the chip failed with "Upload failed. The file couldn't be read or
the connection dropped." (single and multi-file paths). A failed chip is
dropped at send, so a queued question always goes out in the end. The
5-minute processing cap is unchanged.
2026-09-28 10:06:21 +01:00
arc53-machine be6fe8d0c2 Hold a queued send while an answer is streaming
A queued send flushed by calling submitNow directly, which skipped the
loading check in canSubmit. submitNow clears the composer before the
consumer runs, and the consumer ignores a submit while status is
'loading'. If a retry or an edit was streaming when the attachments
settled, the question was cleared and never sent.

useArmedSend takes a canFlush flag. The composer passes whether it can
take a submit right now (not loading, not recording or transcribing).
The armed send stays queued until that holds, then goes out.
2026-09-28 10:05:39 +01:00
arc53-machine a9c0082e9a Send with a failed attachment instead of blocking
A failed attachment made getSendReadiness return 'blocked', so Send was a
no-op until the user found and removed the chip. On a phone the only hint
was a small red line after the tap, and a new user lost their question
that way. A failed file never recovers, so holding the send only costs
the question.

Readiness now ignores failed attachments: it waits only on uploading or
processing files. On submit the composer drops every failed attachment
and sends the text with the completed ones. The payloads already read
completed attachments only, so no failed id reaches the request or the
history. The hero-card path in Conversation also clears failed chips.
The failed chip still shows before Send and can be removed by hand.

Removes the send-blocked alert and its locale key.
2026-09-28 10:05:19 +01:00
Alex d37e0bd1ad Merge pull request #2834 from arc53/iphone-modal-fixes
Iphone modal fixes
2026-09-27 10:42:34 +01:00
Pavel 231849c957 Design additions 2026-09-27 13:00:11 +04:00
Pavel a63234e7d9 theme switch fox 2026-09-27 12:54:51 +04:00
Pavel 4e03bc0388 bottom color on modal 2026-09-27 12:37:41 +04:00
Pavel 4e6f1bf9e4 focus fixes 2026-09-27 11:58:51 +04:00
Alex 420b4d33b9 Merge pull request #2833 from arc53/ui-polish 2026-09-26 21:04:02 +01:00
Pavel eb95304315 Rabbit fixes 2026-09-26 23:02:30 +04:00
Pavel 8390c1f275 Fix skeleton 2026-09-26 22:36:02 +04:00
Pavel 3d5b0cae89 Button bug 2026-09-26 22:31:36 +04:00
Pavel a6abc8cd3c Code block fixes 2026-09-26 21:59:05 +04:00
Pavel 93beca6c02 description polish 2026-09-26 21:48:11 +04:00
Pavel 325c841e3b Fix vertical mobile overflow 2026-09-26 21:25:21 +04:00
Pavel 44b7059075 Mobile modal standartisation 2026-09-26 21:20:24 +04:00
Pavel b54081f9b4 mobile top nav 2026-09-26 20:09:30 +04:00
Alex 431a069d4c Merge pull request #2832 from arc53/shadcn-linter
Shadcn linter
2026-09-26 11:52:09 +01:00
Pavel 10dbca8177 Fix logo 2026-09-26 14:18:15 +04:00
Pavel 6bc5467c08 sync with main 2026-09-26 14:03:40 +04:00
Pavel c4b1b2767f Real UI fixes 2026-09-26 14:02:19 +04:00
Pavel f66dc50eed Phase 2 2026-09-26 12:18:05 +04:00
Alex 9e0272c33f Merge pull request #2830 from arc53-machine/chore/docs-widget-0.8.0
Update docs widget to docsgpt-react 0.8.0
2026-09-25 10:54:15 +01:00
arc53-machine 9a8653367c Update docs widget to docsgpt-react 0.8.0 2026-09-25 10:47:49 +01:00
Alex 7b93e67fea Merge pull request #2829 from arc53/chore/bump-npm-v0.8.0
chore: bump npm libraries to v0.8.0
2026-09-25 10:46:38 +01:00
github-actions[bot] 013631c755 chore: bump npm libraries to v0.8.0 2026-09-25 09:39:16 +00:00
Alex f0aa6ae275 Merge pull request #2826 from ManishMadan2882/main
(fix:widget/ui): mobile keyboard, back button
2026-09-25 10:36:39 +01:00
Pavel 0dd379c271 phase 3 2026-09-25 12:26:39 +04:00
GH Action - Upstream Sync 192bf40001 Merge branch 'main' of https://github.com/arc53/DocsGPT 2026-09-25 03:51:15 +00:00
Pavel 2c57472d0a sync with main 2026-09-24 22:05:31 +04:00
Pavel d5f1e47593 pre app check 2026-09-24 21:05:39 +04:00
Alex a17ebf2fc9 Merge pull request #2828 from arc53-machine/chore/banner-secure-oss-fund
Point the dev banner at the Secure Open Source Fund post
2026-09-24 16:46:55 +01:00
ManishMadan2882 d57bb00215 (fix:widget: Keep a back-button entry while any panel is open 2026-09-24 20:34:18 +05:30
arc53-machine 0a28f9249a Point the dev banner at the Secure Open Source Fund post
The banner still announced 0.17, two releases back, through the old blog
domain. It now links the GitHub Secure Open Source Fund post on
www.docsgpt.cloud directly, skipping the blog.docsgpt.cloud redirect.
2026-09-24 16:00:51 +01:00
Alex f2ad13be57 Merge pull request #2827 from arc53/fix/continuation-log-context
Bind the log context for tool continuations
2026-09-24 13:54:24 +01:00
Alex cf9a5e9cb8 Fall back to model_id for the logged model
Agents store their model only in model_id, so neither log_activity nor
agent_log_context bound a model key. start_agent_span already reads it.
2026-09-24 13:47:46 +01:00
Alex 9df90ab9df Bind the log context for tool continuations
gen_continuation is not wrapped by @log_activity, so the llm_* log lines
from a resumed turn carried no user, agent, conversation or endpoint. Every
OpenAI-compatible /v1 client-tool round landed anonymous in the logs.

Add agent_log_context, which binds the same keys log_activity binds while
keeping any enclosing activity_id, and wrap gen_continuation in it. Both
now derive the keys from one helper.
2026-09-24 13:26:49 +01:00
GH Action - Upstream Sync 2d1e940fe1 Merge branch 'main' of https://github.com/arc53/DocsGPT 2026-09-24 03:34:37 +00:00
ManishMadan2882 d40d344bd6 (fix:widget/ui): mobile keyboard, back button 2026-09-24 05:43:21 +05:30
Alex 91d670b7bb Merge pull request #2825 from arc53-machine/feat/genai-traces
Execution traces: GenAI OpenTelemetry spans and a trace waterfall in Logs
2026-09-24 00:12:12 +01:00
arc53-machine f2d92bf8df Log failed chat turns as chat entries
A turn whose agent raised wrote no user_logs row, so it only surfaced as
the agent's system error row. Every finished turn now writes its chat row,
at level error with the error when it failed, and linked to its trace; the
system row for the same traced activity is no longer listed twice.
2026-09-24 00:08:53 +01:00
arc53-machine 3156ee37a1 Name the provider a model call actually reached
DeepSeek and every other OpenAI-compatible API run through OpenAILLM, so
spans and metrics reported them as openai. The provider now comes from the
endpoint: known API hosts map to their gen_ai.provider.name (deepseek,
azure.ai.openai, mistral_ai, ...), and an OpenAI client pointed anywhere
else is openai_compatible. LLM spans also record server.address.
2026-09-24 00:08:53 +01:00
arc53-machine 6b145d7aad Wait for the background trace write in the /v1 replay test
The first request's trace is written on the trace-writer pool after the
response returns; assert once it has landed rather than racing it.
2026-09-23 23:23:41 +01:00
arc53-machine a74420ed2c Trace unexecuted tool calls in one place; tidy span lifecycles
Paused, denied, skipped and client-run tool calls all go through
trace_unexecuted_tool_call. The research synthesis, continuation and
workflow step spans use with-blocks instead of hand-rolled GeneratorExit
handling. Fixes blank lines and adds a missing hint and docstrings.
2026-09-23 22:42:05 +01:00
arc53-machine b3aa509d3a Delete all of a conversation's traces and index trace listing
Only message-linked traces cascaded, so scheduled runs, stateless /v1
rounds and unreserved turns kept their previews after the conversation was
deleted; they are now deleted by conversation_id. The Logs search and graph
branches filter by source, so the listing indexes lead with it.
2026-09-23 22:42:05 +01:00
arc53-machine 248ebc8050 Discard the setup trace of a replayed /v1 request
An Idempotency-Key retry returns the cached response after setup already
ran; its trace was then written as a failure no Logs row points to.
2026-09-23 22:42:05 +01:00
arc53-machine 778830208b Write chat traces off the stream's thread
The OTel replay and the trace INSERT ran in the stream's finally, so a slow
database held the SSE connection open after the last event. The trace is
still frozen when the stream ends, but written on a small writer pool.
2026-09-23 22:42:05 +01:00
arc53-machine 0591580014 Keep exception text out of stored and exported span errors
Span.fail stored the exception message in span.error, which is stored and
exported whatever the content settings; a provider's content-filter error
can quote the prompt. span.error now holds the exception type, and the
message is a capture-gated preview, like tool errors already were. A
yielded stream error on the agent span is treated the same way.
2026-09-23 22:42:05 +01:00
arc53-machine 0bbbac0eb2 Skip trace work when disabled; share the agent span builder
With TRACES_ENABLED off, LLM calls record no GenAI metrics, and a streamed
answer is joined into a preview only when a span keeps it. Agent runs and
continuations build their invoke_agent span in one place, which now reads
the model from model_id. The trace panel shows a stream's model time next
to how long it was open. Adds missing type hints.
2026-09-23 22:09:58 +01:00