Repository navigation
Rebuild Exie chat on shadcn-svelte AI Elements - #2684
Conversation
Adopt the official shadcn-svelte AI Elements primitives (message-scroller, message, bubble, trace, code-block, marker, empty) and rework Exie's chat UX: - Keep text and tool activity in streamed order and show research as a trace with live progress; changes Exie makes are always visible. - Render answer links as real anchors and restore tool links that the model prefixed with an invented host. - Show stopped and failed responses inline with Retry instead of an empty reply. - Pin each question to the top while the answer streams (MessageScroller). - Composer shows removable page context, edit-and-resend, and a stop button. - Context-aware starter prompts, New chat with undo, and per-user/org chat history saved locally (cleared on sign-out). - Feedback asks what went wrong; focus, live announcements, and an "a" shortcut make Exie keyboard and screen-reader friendly. - One Exie mark across navbar, sidebar, command palette, and Fix button. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
- Never write chat history back after sign-out, and only save from the stream that is still current. - Disable Recent chats while Exie is responding so a deleted chat cannot be saved again. - Drive the poor-rating popover from its open state so keyboard activation records the rating, and compose tooltip and popover triggers correctly. - Cap stored chat history at a fixed size so it never fills the storage quota shared with the sign-in token. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 63d7b92e07
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Make the side panel full width on small screens; the sheet's base three-quarter width was overriding it. - Skip automatic composer focus on touch screens, where opening the keyboard made iOS pan the fixed panel and clip its header. Editing a message still focuses the composer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 660176a7d4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Exie's "Top errors today" starter sometimes failed with invalid_time_range or context_required tool errors on organization-wide pages. - Give the model the current UTC time; it had no clock and guessed absolute start dates for relative questions. - Add system prompt rules: pass only `last` for relative windows, search each project because there is no organization-wide search, and fix rather than drop scoping arguments when a tool call fails. - Clarify the MCP time-range and search_stacks projectId descriptions and make the project-required error say how to recover. - Fix the assistant quality evals: authenticate as a signed-in user (the access token had no user and always returned 401), split scenarios so each reports independently, use the real starter prompt, and fail on any tool error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6e4476c557
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Adds a project scope picker to the Exie composer. It follows the current
page by default ("All projects" on organization pages, the page's project
elsewhere); choosing another project or all projects scopes the next
requests and leaves out the page's event or stack. The scope resets when
the page or organization changes.
Exie now says when it searched only some of an organization's projects
and offers the rest as follow-ups, and offers projects as one-click
choices when a setup question needs a single project.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c4c991b099
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Some OpenRouter providers for DeepSeek V4 (GMICloud, Baidu, DigitalOcean) skip DeepSeek's tool parser and return tool calls as raw DSML markup in the content. About 1 in 8 provider responses in local logs failed this way, and the single retry usually failed again, ending the turn with "malformed response". Parse complete DSML tool_calls blocks the same way vLLM's DeepSeek V4 parser does and run them as structured tool calls, keeping the text before the block. Incomplete or mixed markup still falls back to the retry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 863dc96024
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
V4.1 writes "<|DSML| calls>" with a space and no "tool_" prefix, so the block start was missed and the recovery fell back to the retry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 152890b0b4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Running the Exie evals against eight models surfaced server-side bugs: - Strict tool calling (OpenAI models) sends "" for optional ids. Empty strings now fall back to the current page's ids instead of failing as invalid_id, which cost GPT-6.1 Sol a failed tool call on every current-event question. - A leading-wildcard filter such as title:*database* made Elasticsearch reject the search and crashed the whole turn. Leading wildcards now return an invalid_filter result the model can correct, and searches Elasticsearch rejects become tool errors instead of turn failures. - When a model offered follow-ups before answering, the final-answer instruction let it reply "the answer above is complete" with no answer shown. The instruction now says the user has not seen an answer yet. - list_projects now names its sort fields; models guessed "project name". Also add stack-trace explanation and mark-fixed eval scenarios, and an ASSISTANT_EVAL_RESULTS option that records each eval turn for model comparisons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blind-graded evals ranked GPT-6.1 Sol first of eight models, ahead of the current DeepSeek V4 Flash default, which invented errors and links. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 526ee6d940
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- New chat stays blank after a reload, and each saved chat restores the project scope it searched. - An oversized newest chat no longer wipes the saved history. - When a chat outlives its server tool results, the model is told to call the tools again instead of guessing. - Tool steps show in the order they ran, with a change between lookups. - Opening Exie directly no longer shows the previous page's context. - "Today" and "this week" use the user's time zone, sent by the browser. - Doubled-pipe DSML reaches the tool-call recovery parser. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Switching it to Close Exie widened the button and shifted the navbar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0b8fd0ea36
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Cached tool results from one project would otherwise answer a follow-up asked for another project or for all projects. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cbb565a601
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Integration test hosts run the app's APM setup, which registers a process-wide tracer that records HttpClient spans. When the webhook telemetry test shared a shard with them, its unsampled case picked up those spans. The test now captures only traces its own sampler kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The full-page e2e looked for the old empty conversation log and Clear conversation button; the rebuilt chat shows a greeting and New chat. - A chat restored before the project list loads now falls back to the page's project if its saved project is no longer available. - MCP time-range descriptions send today and this week to startUtc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e8abf6d1a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Exie's avatar, navbar button, navigation entry, command palette item, Fix button, and tour icons now use the four-point sparkle from the logo's i-dot and app icon instead of Lucide's sparkles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…4-hour starter - A chat that finishes after moving to another project now saves the project its tool results came from, so a restored follow-up starts a new server conversation when the scope differs. - The organization starter asks for the last 24 hours, so its label now says that instead of today. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Exie's icon is the robot again, now with the four-point sparkle from the logo's i-dot as its antenna tip, so it keeps its personality and still ties to the brand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ccb4333a6e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
"last 7 days" and "last 2 weeks" are durations like [now-7d TO now], but only minutes and hours were recognized, so a range across a daylight saving change had its start moved to the older offset. Any phrase with a number and a time unit now keeps its elapsed time; named periods such as "last week" stay calendar periods. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4c6571d394
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
search_stacks matches a period against each stack's last occurrence, so asking which errors happened yesterday left out a stack that also occurred today. Exie now uses count_events grouped by stack for any question about errors in a period, and search_stacks only to find stacks by stack fields. Stack groups include first and last occurrence, so "new errors in the last hour" takes one call instead of a get_stack per stack. The search_stacks description says what its time filter matches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each user and organization's saved chats had their own 1,000,000 character limit, so someone in several organizations could fill the origin's storage quota and break saving the sign-in token. All saved chats now share one budget: the oldest chats in any organization are dropped first, the chat being saved is kept, and a history that loses every chat is removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b07e834144
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… stored - Chats dropped from other organizations to make room are put back if the new history still cannot be written, so a failed save never costs older chats. - Saving and deleting return the history as stored, so Recent chats no longer lists chats that were dropped for space, which could later be saved again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
When a top-errors answer uses count_events with groupBy: "stack", the serializer places each title and webUrl under data.groups, but this extractor only visits data.items or the data object itself. Consequently addAssistantResourceLinks cannot link an unlinked stack title, and createAssistantUrlTransform cannot repair a model-generated absolute URL for that stack; handle data.groups alongside data.items so the primary period-query flow retains its internal links.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- "How many times did this stack occur today?" now uses count_events with a stack filter, which sums occurrences. get_stack_events counted event documents, and one document can stand for several occurrences. - Response links also read count_events stack groups, so ranked stack titles get linked and invented hosts on their URLs are repaired. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 58e00c893b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Saved chats trim tool results over 16,000 characters to the fields links need, but only list items were kept. A large count_events result grouped by stack lost every stack's title and link once the chat was saved and reopened. Groups are now trimmed the same way, keeping each key, title, and link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0d25c0b055
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Only the organization being loaded was cleaned of chats older than 30 days, so chats in an organization the user stopped opening stayed in localStorage. Every history write now drops expired chats from all organizations, and a failed save restores only the chats dropped for space, never the expired ones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8a68069494
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…firmed A chat restored before the project list loaded, or after it failed, kept its server conversation, so the next message could reuse cached tool results for a project the user may no longer see. When the saved project is not the page's and access is not yet confirmed, the chat now continues in a new server conversation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cb7519ea0f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
When a restored chat's project was also the page's, as on a deleted project's stale URL, the project recheck skipped it and follow-ups reused that conversation's cached tool results. Once projects load, a server conversation whose project is missing now starts over. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0a7d7a2573
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Each cached tool result now records the projects it came from: its projectId argument or the page's project, and any project ids in the result. Loading a conversation drops results whose projects no longer exist in the organization, so a deleted project's data never reaches a later turn, whichever way the browser restored the chat. Results without recorded projects, or whose projects cannot be checked, are dropped too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 74251de264
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… in diagnostics - Project ids for a cached tool result are now read from the full result. Truncation wraps the result in a string, which hid its project ids, so a truncated result could outlive its deleted project. - Exie's turn diagnostics now recognize count_events instead of reporting it as an unknown tool in logs and metrics. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 239eb8a1fd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A successful result with no recorded project, such as a count whose project the tool resolved implicitly for an organization's only project, passed the deleted-project check by default. Only failed results, which hold no project data, are now kept without a project. The lookup failure warning also logs the exception message as a structured property. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dca5942409
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Ranges whose boundaries both carry Z or an offset skip DateTimeRange, so
{...} braces were ignored and events exactly on an excluded boundary
were counted. An exclusive boundary now moves one millisecond inward,
matching the inclusive millisecond-precision range query.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The e2e workflow runs npm ci before starting the AppHost, then the Vite app's installer ran npm install again. That second install now takes three to five minutes, past the five-minute wait for the app, so most e2e shards never reached their tests. With --ci-e2e the app keeps npm as its package manager but no longer installs again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Rebuilds the Exie chat assistant on the official shadcn-svelte AI Elements primitives and fixes every issue from the UX review.
Primitives added (copied from the shadcn-svelte registry):
message-scroller,message,bubble,trace,code-block(withhighlighter.tsanduse-highlighted-code),marker, andempty. The new@shadcn-svelte/primitivesdependency powers MessageScroller. The scroll-fade and shimmer utilities from shadcn-svelte'stailwind.cssare vendored insrc/ai-elements.css.Bugs fixed
<a>elements now, not link-safety<button>s. Middle-click and open-in-new-tab work, and the list bullet no longer drops to the next line.webUrlwith a made-up host (https://www.example.com/stack/…), the link is rewritten to the trusted relative path. This only applies to an exact path match with that response's tool results.parts)./toolscommand, which is now gone.UX improvements
Ashortcut toggles Exie and is listed in the keyboard shortcuts dialog.Exie reliability (backend)
The "Top errors today" starter sometimes ended in failed searches on organization-wide pages:
invalid_time_rangewhen the model sentlastandstartUtctogether, thencontext_requiredwhen it retried without a project.last.projectId.search_stacks.projectIdare clearer, and the "project required" error now says how to recover. Tool behavior is unchanged.Measured against the dev data, with 15 runs of the starter on each version:
main)The new prompt also states the exact time window it searched. The intermittent "malformed response from the AI provider" errors are a separate provider issue and were not addressed here.
Notes
editprompt source and afeedback_reasondetail.localStorage. It is scoped touserId:organizationIdand removed on logout.Testing
npm run check: 0 errors.npm run lint: clean.npm run build: succeeds.vitest: 1,071 tests pass, including new tests for message parts, history storage, the link rewrite, the tool trace, stop/retry, edit-and-resend, history restore, and new chat with undo.Project scope
Breaking: MCP time filters use date math
search_stacks,get_stack_events,search_events, andcount_eventsreplacelast,startUtc, andendUtcwithtime, in the same syntax as the app's time filter (for example[now-24h TO now],[now/d TO now/d]for today,[now-1w/w TO now-1w/w]for last week, or[2026-06-01 TO 2026-06-30]), plus an optional IANAtimeZonethat defaults to UTC. Ranges resolve throughTimeRangeParser, the same code the API'stimeparameter uses. Exie passes the browser's time zone (sent astime_zoneon the chat request) and asks the model for date math instead of computed UTC timestamps. Calendar boundaries use the zone's offset on that day, so ranges that cross a daylight saving change are exact, and timestamps withZor an offset stay exact instants. Arguments a tool does not define now fail withinvalid_argument, so a client still sendinglastgets an error instead of results for all time.count_eventsorders groups by occurrences and names stack groups with each stack's title and status. Exie uses it, grouped by stack, for a period's top errors, so the ranking matches the app's Most Frequent view in one call per project. List results include atotal.A time-range eval checks the exact date math Exie sends for rolling windows, calendar periods, explicit dates, no period, follow-ups, the current stack, and organization-wide questions. The last run passed 61 of 61 checks with each scenario repeated 3 times.
DeepSeek DSML handling removed
Exie no longer parses, retries, or rejects DeepSeek's DSML tool-call markup. DSML is DeepSeek's private format, not a standard, and it only reached Exie when an OpenRouter host skipped DeepSeek's parser. The default model returns structured tool calls, and recovering calls from answer text would let quoted event data run tools.
Default model: GPT-6.1 Sol
The default model is now
openai/gpt-6.1-solinstead of~deepseek/deepseek-v4-flash-latest. We ran the paid eval suite against eight models (6 scenarios × 3 runs, twice), and GPT-6-Astra and Grok 4.7 graded the answers blind. Both ranked Sol first in both rounds: 9.5/10 and 18/18 turns passed. DeepSeek V4 Flash scored 5.9 because it made up errors, linked toexample.com, and said fixed stacks are never reported again. Sol costs about $16 per 1,000 answers, compared with about $1.40 for DeepSeek, so the plan caps cover fewer answers. The admin model override still works.Fixes found by the evals
""for optional fields) now fall back to the current page's event or stack instead of failing.*timeout*return a clear error to the model instead of ending the turn with "Exie could not complete this request".list_projectssort description lists the valid fields.ASSISTANT_EVAL_RESULTSto record each turn's time and cost.Review follow-ups
🤖 Generated with Claude Code