Repository navigation
[release] v0.127.2 - #7910
Merged
Merged
[release] v0.127.2#7910
Conversation
Comment mode no longer forces the Pages layout, whose text is too small to tap on a phone. The DOCX renderer tags each Word body paragraph and table with its python-docx number, so a comment anchors to the same block in Reflow and in Pages, and the agent reads "paragraph 12" or "table 2". Paragraphs inside content controls stay untagged, as python-docx does not count them. Rebuilds the office viewer bundles.
…e, Alt+M, open a comment from its tile - Hold the picker while a note is open: no highlight, and a click or Esc in the frame closes the note. - Alt+M turns comment mode on and off, also from inside a commentable frame; Esc no longer loses to an open tooltip. - A composer tile opens its file in the Files pane, scrolls to the comment and opens its pin card. - Staged quotes are square tiles in the same row as attachment cards, named by their file.
… starting a new pick
…ard dismissal A send's echo lived in the conversation component's state, so switching sessions while the first turn warmed up threw it away: coming back showed the run working with no message until the saved row landed. Echoes now live in a per-session store outside React, cleared with the session. Typing over a connection or question card awaited the dismissal before steering, so the run resumed with the message nowhere on screen. The steer now takes the dismissal as a precondition: the echo shows at once, the request waits, and a failed dismissal takes the echo back.
…topped
Typing over a parked card steers past the resumed run, and the runner
ends it with the same cancelled done a Stop produces, so the transcript
said "Stopped" for a run the user never stopped. The runner cannot tell
the two apart; the cancel command can. A Steer's own cancel carries the
key steer:{input id}, so the record ingest stamps cancelledBy: steer on
that turn's cancelled done. The transcript then shows no label and adds
no empty row. A Steer that bound to a Stop already open keeps the Stop's
key and still reads as stopped.
…run from the send
The fold took every agent text except the last as a thinking step, and
held even the last one while the run was open. A message followed by a
call or a card ("I'll wait", "connect Linear below") was never shown.
The split now folds only reasoning and calls; all of the agent's
messages show below the fold, in order. The single-answer machinery
(findAnswer, holdClosedText, endsOnClosedText) existed only to pick the
one text that left the fold, so it is gone.
The turn clock started at the first visible step, so warm-up and the
model's first output were never counted, and any brief stop of the clock
read as a gate, which threw the local count away at settle ("Worked"
with no time). User rows now carry the server's createdAt and the clock
counts from it; a stop is a gate only when the run waited on the
reader.
- Anchor scroll to the final message only once the run is over, so an interim message no longer pins the view while work goes on. - Say "Answering" only while a message is being written, not between calls once one exists. - Mark a gate even when the wait begins after the clock already stopped; useTurnClock takes its options as an object. - Clear a session's echoes on rewind instead of guessing a rewind from a falling user-row count, which deleted echoes on a remount. - A failed card dismissal is not reported as a failed send, and steer handles the dismissal promise as soon as it receives it. - Share steer_cancel_key between the router and the cause check; share one opening-turn search for the run id and run start.
useAgentChatQueue now keys its echoes by session; the desktop app's call was the one caller left without it, which broke the agenta-web build.
…e is open The outside-press guard swallowed every grid press that closed a note, so Shift+click no longer extended from the anchor cell.
…teps With agent messages out of the fold, a turn whose only step was its lead-in text had an empty fold and lost its waiting status. A run parked on the reader now keeps its header. The parked-question tests now expect the lead-in on screen, which is the new layout.
Reconnect stays available in the row menu.
A failed connect can keep its row (Not signed in) while the list never fetched it, so the table missed it until a page reload.
Group the fields in one panel with a single intro line, a compact callback field, client ID and secret side by side, and shorter scope help.
…et row after the messages
A server the project has no endpoint for showed the gateway's raw text
("MCP endpoint not found: custom/loops check the endpoint
configuration") in a loud banner above the turn. The notice now
classifies endpoint_not_found and says "<server> isn't set up yet, so
its tools were skipped." It renders as a quiet row after the agent's
messages, like a tool outcome; an expired sign-in keeps its wording and
Reconnect action.
Drop the panel box and the side-by-side client fields; one column reads cleaner in the sheet.
Leading settings icon, trailing caret that turns when open.
…screen The presets only filled Send as, Name and Prefix, which the fields below already set; Bearer is the default. Tests now set the fields directly.
Drop the divider above Cancel/Connect and use the modal's footer band without its top border.
Refresh the list only when the journey touched a row, keep the footer a right-aligned row on phones, restore the Advanced toggle's 44px reach, link the client fields to the intro help, and drop a dead import and a redundant wrapper.
… new notice Open the reconnect journey from the row menu, and read the own-app notice from its constant.
A release now holds its headline features plus improvements and fixes. A generator builds the in-app changelog.json from the docs entries, so the dialog no longer drifts from the docs. The dialog is larger, scrolls its body, and renders each feature's summary as markdown. Docs entries render improvements and fixes from frontmatter. Seen state moves to a new key so the switch to version ids does not reopen the dialog for everyone.
…og list The list page showed only the headline, so an entry read as the whole release. One quiet line now gives the counts of improvements and fixes and links to the full lists on the entry page.
Lists the most important user-facing improvements and fixes from the last 10 GitHub releases in each entry's frontmatter. Patch releases go into the entry of their minor version. v0.122.11 had no entry, so it gets a short one. The body Fixes sections move into frontmatter so they show once. The in-app release data is regenerated.
…s New Each section has a filled header with a square icon, and each item has an area pill with a coloured dot. The rail keeps a light thread line with small dots, and shows the version and date above a one-line title, in one font at normal weight.
…e underline The version chip now matches inline code: a flat tint, no border, in the text colour. Read more loses its underline and dims on hover instead.
…e changelog An entry page shows its version chip next to the date, so the footer Tags row is gone. The paginator puts an All releases link on the left and the next entry on the right.
Adds the Cloudflare Stream video to the summary and the full write-up of seven entries. The release generator now strips video and line-break markup from the in-app text, and the regenerated data carries the video ids for the releases in range.
…event hint - Spec scenarios for one pill alone (stored as a text part) and an array field. - The builder reference no longer mentions include_event in its checklist. - The automation reference says older deliveries, not this change. Entire-Checkpoint: 01M64EES9720X73QN7003JMT27
Event automations get a pill composer over the instruction, field cards from the catalog payload schema, an include-event checkbox and a preview of the message the agent gets. Run now sends the preview text. Entire-Checkpoint: 01M64ERHZ1AV2Q0Y69M85VKGA1
… the EE spec Entire-Checkpoint: 01M64EX794ZT4M492N6GHXCF64
… the preview rules in the spec Entire-Checkpoint: 01M64GTB160EB5N60Z2PAN9B8M
…n box The field cards took too much room. Each field is now a small tag that looks like the pill it adds, in one wrapping row inside the instruction box. The provider's description moves into a tooltip on hover and keyboard focus. The header row above the cards is gone. The field list is flat, because the group headers it fed are gone. Entire-Checkpoint: 01M64J8KYFT5DFYVC0JHZNTXBB
On Kubernetes nothing adds an init process, so tsx is PID 1 and every pi or pi-acp whose parent exits stays a zombie for the life of the pod. Install tini in both runner images and make it the ENTRYPOINT. -s keeps it working under compose's init: true. Entire-Checkpoint: 01M64JG63C6FPQW2N3PWCG2CGB
…ditor props The selector-to-label map always gave the same label as the selector itself, so the preview, the composer and Run now now call selectorLabel(selector). The placeholder and disabled props had no caller. Helpers only used inside @agenta/entities are no longer exported. Entire-Checkpoint: 01M64JVY0KT8REGGPFMXC27ASN
…form The backend's JSONPath parser rejects a dot step such as $.event.attributes.123, so that pill reached the agent as empty text while the preview showed the value. Entire-Checkpoint: 01M64K7G4QDY1MDFDG0Q8HN5VV
… does not add it The dispatcher adds the event only to a messages list or to empty inputs. For an agent whose instruction goes under another input key, the preview showed an event block that the agent never got. addsEventText states the backend rule once for the preview. Entire-Checkpoint: 01M64KF40JAPC6T01N2ENE1DAX
…eturn null on failure includesEvent states that a subscription saved without the key reads as on; the draft and Run now both call it. runNowText now logs a failed deliveries call and returns null, so the detail button and the list menu no longer each wrap it in the same try/catch. It also uses addsEventText, the same rule the preview uses. Entire-Checkpoint: 01M64KRZFD3CMT8B8G8X8GVR3V
Copy put only the visible text on the clipboard, so a pasted pill came back as plain label text and stopped filling in. Copy and cut now also write the template under an application/x-agenta-template entry, and paste rebuilds the pills from it. Other apps still get readable text, with each pill as its label. Entire-Checkpoint: 01M64M6FWS6FC0RJ9RYQ9AHWW3
…mpty A pill alone on a field the newest event lacks resolves to empty text. Run now then opened a new session with nothing to send. Both Run now entry points now start only when there is text. Entire-Checkpoint: 01M64MGGKB8YJ6M3GWX7AKZZGC
[docs] Update API reference docs
fix(runner): run the runner under tini so orphaned children get reaped
…ger-include-event
A search answer that arrived after Refresh could put the old directory state back and stop the polling. Refresh now moves the search counter, so that late answer is dropped.
[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding
fix(api): include the event in the agent's message for event automations
…mation-event-field-picker
…icker feat(frontend): pick event fields for an event automation's instruction
[feat] Channel limits: choose where an agent answers and whom it answers
fix(frontend): channel settings and event automation fixes from v0.127.2 QA
mmabrouk
approved these changes
Oct 30, 2026
mmabrouk
left a comment
Member
There was a problem hiding this comment.
🤖 The AI agent says: Approved on Mahmoud's instruction after the v0.127.2 production deploy went green in US (workflow 29 run 41031806277) and EU (run 41034227538), with the production live check passing in both regions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
https://entire.com/gh/agenta-ai/-/trails/71/changes/agenta/71
New version v0.127.2 in
Final QA
fix(runner): run the runner under tini so orphaned children get reaped #7915 Runner runs under tini. After the stage deploy, run a few local Pi sessions on stage, then run
kubectl exec <runner-pod> -- ps -eo stat,comm | grep -c "^Z"on each runner pod. Pass: the count stays 0,psshowstinias PID 1, the pods have no new restarts, and a rollout restart still logsreceived SIGTERM, draining and cleaning up sandboxesand finishes in-flight turns.[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding #7916 Signed-out visitors go to the /m sign-in. On staging, in a fresh private browser window that is signed out, open the app root. Pass: you land on
/m/auth, not the classic/auth.[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding #7916 In that window, sign up with a new email and password account. Pass: you reach the new
/monboarding (/m/.../onboarding/persona), not the classic/post-signupsurvey.[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding #7916 Open a password reset link (
/auth/reset-password?token=...) in a signed-out window. Pass: the classic reset page opens with no redirect.[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding #7916 Sign in as a user who has Classic mode on, then open the root. Pass: you stay on the classic app at
/w.[fix] fix(frontend): Send signed-out visitors to the /m sign-in so new users get the new onboarding #7916 GitHub OAuth sign-up end to end on staging, starting from the signed-out root. The author did not test GitHub OAuth locally. Pass: the GitHub callback completes, and the new account reaches the
/monboarding.fix(api): include the event in the agent's message for event automations #7911 Event automations now add the event to the agent's message by default, also for automations made before this release. On staging, trigger the event of an event automation made before the release (for example a GitHub pull request event). Pass: the run's first message is the instruction, then "Event data (...)" and the event JSON, and the agent uses the event.
fix(api): include the event in the agent's message for event automations #7911 Set
data.include_eventtofalseon that subscription through the API and trigger the event again. Pass: the first message is the instruction alone.fix(api): include the event in the agent's message for event automations #7911 Map a pull request number in a text part (
{"type":"text","text":"$.event.attributes.number"}) and trigger the event. Pass: the run does not fail, and the part reads as the number.fix(api): include the event in the agent's message for event automations #7911 Regression: a schedule automation runs with the same message as before, and its delivery has no
data.event.fix(api): include the event in the agent's message for event automations #7911 Check one real Composio GitHub delivery (spec task 12.1, not checked by the author). Pass: the keys in
data.event.attributesmatch the field cards, and the payload size is small enough for the agent's model. The event text has no size cap on purpose.fix(api): include the event in the agent's message for event automations #7911 Open question for Mahmoud: the review agent rated High that event text (pull request bodies, emails, Slack messages) goes into the same user message as the instruction with no "this is untrusted data" boundary, and this is now on by default for every event automation. The review thread on fix(api): include the event in the agent's message for event automations #7911 is still open.
feat(frontend): pick event fields for an event automation's instruction #7913 On
/m, open an event automation (GitHub pull request event). Under the Instruction box, field cards show with Composio's descriptions. Click "Title". Pass: a pill appears in the box and the card shows a check.feat(frontend): pick event fields for an event automation's instruction #7913 The checkbox reads "Also attach the full event, so the agent can use any detail" and is checked on an automation made before this release. Uncheck, Save, reload. Pass: it stays unchecked, and Discard before Save brings the check back.
feat(frontend): pick event fields for an event automation's instruction #7913 Open a pull request in the connected repo, then reopen the automation. Pass: "What the agent gets" shows the real title and the event JSON, and Run now opens a chat whose first message has the same text.
feat(frontend): pick event fields for an event automation's instruction #7913 Create a new event automation with a pill and save it (not checked by the author, the local stack had no real GitHub connection). Pass: the save works, and the next run gets the title in its message.
feat(frontend): pick event fields for an event automation's instruction #7913 Regression: a schedule automation still shows the plain Instruction box with "Sent to the agent on every run."
[feat] Channel limits: choose where an agent answers and whom it answers #7890 Channel limits with a real Slack workspace on staging. The author's live QA used seeded connections only, with no real Slack or Telegram. In
/m, open a Slack agent, set "Who can message it" to Specific people with one person, and set "Channels it answers in" to Only these channels with one channel checked. Pass: the listed person gets an answer in the checked channel. Another person who mentions the bot gets one private note, "This agent only answers chosen people. Ask its owner in Agenta to add you.", and no turn starts. A mention in an unchecked channel gets "This agent does not answer in this channel." and no turn.[feat] Channel limits: choose where an agent answers and whom it answers #7890 Slack people picker with a real workspace. In "Who can message it", search a person by name, then type a full email, then press Refresh. Pass: people show by name, the email finds the person, and Refresh reloads the list with no error.
[feat] Channel limits: choose where an agent answers and whom it answers #7890 Migration
oss000000055on real data. After the staging deploy, pick a connection that hadallowed_sendersbefore the deploy. Pass: each of its agent bindings now hasdata.audience.senderswith the same ids, the panel shows those people, and a person off the list is still refused.[feat] Channel limits: choose where an agent answers and whom it answers #7890 Self-managed Claude agent still answers a turn. The author did not run it because the host Claude login had expired.
[feat] Channel limits: choose where an agent answers and whom it answers #7890 Open for Mahmoud: all new user-facing text in [feat] Channel limits: choose where an agent answers and whom it answers #7890 is a draft that needs your approval. The list is under "Copy for approval" in the PR body. The naming review also asks whether "Who can message it" should become "Who it answers".
Deploy steps
oss000000055(data only) runs with the normal migration job on each stage and region. No manual step. It copies each installation'sallowed_sendersto its agent bindings. It was checked on a throwaway local database: it works on empty tables, a second run changes nothing, and the downgrade removes onlyaudience. A rollback loses people lists changed after the upgrade. The next release must remove the rollout write ofallowed_senders. See the PR for details.