| Files | Last commit | Last update |
|---|---|---|
Send routine answers to a messaging place (#2121) * Send routine answers to a messaging place An agent routine can now send each answer to one Slack, Discord or Telegram place. The run status and the delivery status are separate: a run that succeeded stays succeeded when its answer is not sent. - Migration 37 adds the routine_result_destinations and routine_result_deliveries tables. It changes no old row. - The host keeps each delivery in the database. When the connection does not run, it tries again for 24 hours, then marks the delivery failed. A post that fails or stops part way is marked uncertain, and the host does not send it again by itself. - The routine editor shows a "Send answers to" field, and the run history shows each delivery with its status. "Send again" shows for a failed or uncertain delivery. - Only agent routines on this computer have this. The Team API does not change. Fixes #2091 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Make routine result sends safe at startup and on failure - Startup does not wait for routine result posts. The startup sweep is forked, so the shutdown stops it. - A defect during a post marks the delivery uncertain. Before, the row stayed "sending" until the next restart. - A sweep that fails waits one minute before it starts again. Before, a sweep that failed each time ran again with no wait. - A new wait is set before the old wait stops, so two waits cannot run. - One agent event listener feeds both routine runtimes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix the routine destination menu found in the smoke test - Use a place key with no quote. Kobalte puts the key in a selector without an escape, so opening the menu stopped the editor. - Give "Only this chat" a non-empty key. Kobalte shows an empty key as no selection, so the field showed no label. - Ignore the same place again when the options load. The editor opened with unsaved changes. - Wrap the delivery reason. It was cut off in a narrow panel. Refs #2091 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Stop waiting routine answers, and send no marker - "Only this chat" now ends the answers that wait for the place, with the new reason "stopped". Before, they posted up to a day later. - A Test run that answers only the no-update marker sends nothing to the place. Its chat keeps the marker, so the turn answer held it. - Remove three exports that only their own file uses (knip). Refs #2091 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 29 days ago | |
Let an agent mark its routine run failed (#2893) * Let an agent mark its routine run failed (#2804) Add the OpenBot tool `routine_report_failure` with one `reason` argument. In a routine run, the call keeps the queue delivery `completed` and writes the redacted reason to its `error`. The run then goes from `running` to `failed` with that reason, and later reconciles keep it failed. No migration. - A failed run is never quiet, also after `routine_no_update`. - A provider error or an interrupt still wins. - In a flow, the owner step or the linked step fails, and the agents after it are skipped. A linked step does not change the owner's run. - A result destination gets the answer of a reported failure. - The run history shows the reason of a failed run. - Every routine prompt names the tool, the Test run too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep a reported routine failure out of quiet runs - A `routine_no_update` call after `routine_report_failure` answers `shown`, so the agent still writes its answer. - The provider history import keeps the answers of a turn whose routine delivery completed with an error. - The run history row gives the failure reason to screen readers. - Correct two comments that said only succeeded runs get a result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 21 days ago | |
Add workflows: connect agents and steps on a canvas (#3062) * Add workflow IPC contracts Types and guards for workflows: graph, summary, detail, runs, steps, versions and their inputs. Add the input limits and the workflows-changed agent event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the workflow tables (migration 46) Migration 45 only creates tables and indexes: workflows, nodes, edges, versions, triggers, trigger webhooks, webhook receipts, runs, steps and output deliveries. No row of an existing table changes. The same SQL is the tail of the latest schema for new databases. - workflow-migration.test.ts covers every schema from 8 to 44, rollback and retry, newer and incomplete histories, foreign keys and cascades. - The older migration tests expect version 45 as the latest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the workflow store and graph rules The store saves graphs with a revision check, keeps up to 50 versions, and keeps trigger rows. Deleting an agent removes it from workflow nodes and keeps the step history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the workflow IPC endpoints The host answers list, get, create, rename, delete, save, versions and restore. A joined server says that it does not support workflows yet. The preview keeps workflows in memory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add workflow runs Run a workflow from the start, from a trigger, or from one node, and run one node alone. Agent steps go through the routine sender, so an agent answers in its own chat. Model and condition steps use a tool-less generation; a condition answers yes or no. Approvals wait for a decision, and a rejection stops the run. Notify outputs show a desktop notification. A sweep at startup settles agent steps from their delivery and fails model steps that a restart interrupted. Channel outputs fail with outputPending until the messaging-place output lands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the workflow run view and rail button - WorkflowFeatures and the v1 set of node kinds, triggers and outputs. - A pure run view: pages of runs, run and step changes, and the run state of each node. - The Workflows rail button (Waypoints) and app.rail.workflows in all languages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Move the workflow nodes into shared UI - The board, camera, picker, tool art and one file per node kind move to packages/ui/src/features/workflows, with their styles. Their icons go through the shared icon exports. - Nodes read agents, models, places, image models and files from WorkflowCatalogs on the board. No story data or simulated runs. - The agent node writes agentId; a channel output writes connectionId and placeId, as the contract says. - 199 English keys in the workflow module. Result times are ISO and formatted in the reader's locale. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Split the workflow canvas into shared UI Move the canvas from the prototype into packages/ui as a controlled component. The host gives the workflow, runs, versions and catalogs, and gets each graph change. Remove the run simulation, presence and local ids. Add the canvas keys in English, the Workflows stories over the preview mock, and the Storybook icon link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the Workflows page to the desktop window The Waypoints rail button opens a titled page with the workflow canvas of the server. The page saves the graph 400 ms after the last edit, one save at a time on its base revision, and loads it again after a change from another device. A joined server without workflows shows a notice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add workflow triggers, place outputs and workflows-v1 - Schedule triggers: WorkflowTriggers is a routine due source. A missed time gives one run, and a time is skipped while a run is open. - Webhook triggers: a third webhook route owner. The first secret makes the route. Receipts stop a second run for the same delivery. - Place outputs: an output posts the result to a messaging place, once, and an interrupted post becomes uncertain at the next start. - workflows-v1: the frozen Team API routes, codecs and event, the host route with its grant rules, the team client and the remote IPC branches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Translate the workflow catalog Add the 302 workflow keys in de, es, fr, it, ja, pl, pt, ru and tr. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Edit trigger schedules and webhook secrets on the canvas A trigger node uses the routine schedule picker and saves the schedule on the node. A webhook trigger without an address has a button that makes the first secret, and so the address. The preview gives the next run and the address. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document workflows PRIVACY.md says what a workflow keeps on this computer and what an output and a webhook trigger send. The architecture notes describe the run engine, the timer source, the webhook owner and workflows-v1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix the workflows page height and the canvas after a delete The canvas is a direct child of the window page, so it gets the height of the pane. The page reads its host once, without a tracked read. When the host opens another workflow after a delete, the canvas shows again; a switch while the Undo toast is open keeps the delete. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Name migration 46 in the workflow docs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Scope workflow run and step keys to their workflow A copy of a workflow keeps its node ids, so its schedule and webhook keys were the same text as the first workflow's, and its runs were answered with the other workflow's run. The keys are now unique per workflow. Migration 46 is not released, so its tables change in place: steps check their kind, and the unused waiting status, trigger enabled and last_scheduled_for columns, delivery retry columns and the inactive receipt reason are gone. A refused delivery gets its own reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix workflow run starts, the sweep and schedule waits - A run, its version, its reused steps and its webhook receipt are one write. - A webhook request that the graph refuses gets an ignored receipt and 202. - A trigger of a workflow with an open run waits for the run to end. - One failing schedule trigger does not stop the others. - The sweep ends steps that a restart or an agent delete left open, and ends a stop that a restart cut off. - A run version is kept only when the graph changed. - Store errors carry a code; the Team API maps missing to 404 and a bad schedule to 400. The list reads every graph in one query. - The runs cursor names the run, so runs of the same millisecond stay. - The routine timer plans again only when a trigger changes or a run ends. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Share the workflow helpers with routines Use one placeholders, receipt cutoff, result text, node agent, node timezone, CHECK column and coalesced sweep helper. Build the edge maps in place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix workflow canvas bugs in keys, drags, uploads and approvals - Agent and LLM pickers set model, provider and effort as one change. - Undo and redo stop a drag and cancel queued layout frames. - Keys, clipboard and Delete act only in the canvas, its portals or the page body. Menus and lists keep their letter keys. Delete and cut do nothing on a frozen or deleted workflow. - Drag and pointer listeners are removed on cancel, restore and unmount. - Slots and ports stop the resize observer when they go. - Asset uploads belong to the board. Their blob URLs are freed at unmount, a file is found by id, and the upload button follows features.uploads. - The canvas label names the workflow. The minimap is hidden from screen readers. The live region tells only the step status changes. - Ports set aria-pressed only while a line is drawn. - A new note saves the name of its author in its fields. - Picker tiles get the colour of their kind. - A new node does not cover a node at the centre of the view. - Search reads the text fields of the board, not the DOM. - An approval answer is for one step, and shows again when sending fails. - Each trigger gets its own new schedule object. - The search fields show a grey focus ring. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Make the workflow canvas do less work for each change - Selected, removed and locked nodes are projections. A node runs again only when its own state changes. - The list of nodes on the canvas and the trigger lookup are memos. - Fit to view and the minimap use the sizes from the resize observer. Fit reads the element only for a node that has no size yet. - A line that the user draws adds points in place. A move does not copy the line or put it in a store. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Open the workflows-v1 names and add the version graph read - The wire carries node kinds, edge types, statuses, sources, trigger types and version kinds as short names. A client maps a name it does not know: a node becomes a locked note, its edges go, and the workflow is read-only. - New workflows.versionGraph read (IPC and Team API). The host hides a version that names an agent the member cannot see. - The IPC parse keeps only known graph keys and refuses a graph over 1 MiB with its own sentence. - Align wire limits: runs limit 1-50, run number and attempt >= 1, runs cursor up to 64 characters. - Move the workflow decoders to remote-workflow-decoding.ts. Delete the unused team-client and web-runtime workflow requests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Ask for the manage level to change a shared workflow - A member needs manage on each agent of the graph, before and after, to save, rename, delete or restore a workflow or to make a new webhook secret. A run, a stop and a decision still need chat. - Retry, stop and decide also check the agents of the run's own graph: a retry ran an agent that the current graph no longer names. - An owner or admin sees a workflow whose agent was deleted. - A save conflict answers as missing when the newer graph names an agent that the member cannot see. - Run answers empty the oldest step texts to fit one frame, as the run page does. A single step of a hidden agent answers 404, not 500. - Reuse runEventsEffect from route-events.ts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Share one workflows controller between the page and stories - Move the save queue, resets, restore, preview and delete into workflows-controller.ts. The page and the stories use it. - A version preview reads its graph from the host. - A conflict or a restore keeps the canvas edits on undo, and a toast tells the user. - A failed save keeps the edit for the next save. A restore or a delete saves the waiting edit first. A failed delete shows the workflow again. - A member without "Can manage" on each agent gets a read-only canvas. Only an admin can rotate a webhook secret. The channel output hides when there are no places. - Add the Korean workflow catalogs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document workflow permissions and test agent steps Docs and the release note give the manage rule, the version-graph route and the sweep rules. A new e2e checks that an agent delete fails the open step, and that a restart ends a stopping run. The webhook e2e checks that a graph this version cannot run gives a refused receipt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix workflow canvas halt on restore and new node placement A restore that removed a node wrote the slot size store in a list cleanup, which halts Solid. The reset now drops the sizes of the removed nodes. A new node now moves past each card that it would cover, not only an exact corner. The controller reads the server role untracked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Read the first agent fields of an agent step untracked The catalog agent is a store, so a read of its model and provider in the component body warned that the value does not update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove unused workflow exports and fix optional props for the type ratchet Knip found 13 exports that only their own file uses. The optional props that take an undefined value now say so, as exactOptionalPropertyTypes requires. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document that workflows with no agent need no agent level Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep the workflow canvas and its toolbars on whole pixels Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fade workflow canvas parts in out of a blur instead of a move Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove the entry animations of the workflow canvas Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Match the workflow title to the other page titles and remove its icon Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Balance the paddings of the workflow title and HUD buttons Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Give the workflow top row the button size of the other pages' top rows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Make the workflow canvas icons and node toolbars sharp On a screen with one device pixel for each CSS pixel, the canvas icons get a line of 2, so a line fills whole pixels. The node toolbar icons are 16px, as in the tool bar. After the camera, a node or the selection moves, the node toolbars and result strips move onto whole device pixels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fill the icon of a pressed workflow canvas tool Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Snap the workflow node toolbars to whole pixels and enlarge their icons The earlier sharpness commit added the snap offsets in the canvas but not the CSS that reads them. The node toolbar and the result strip now add the offsets to their position, and the toolbar icons show at 16px. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fill the pressed Select arrow fully The part-fill rule matched the svg element too, so it had more specificity than the arrow rule, and the arrow stayed at 35%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Give workflow sticky notes the corner radius of the other cards A note had a 6px corner that shrank with the zoom while its selection ring and resize arc kept their screen gap, so the corners did not look alike. Notes and their drop preview now use the card radius. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Allow loops in workflows A connection back to an earlier step is a loop. The run takes it as the next pass: the earlier step runs again with the loop's answer as one more input, and the steps after it follow. A loop has no pass limit; a condition, a failed or rejected step, or a stop ends it. The canvas draws a loop under its steps with a "Loop" badge, and with an "Endless loop" warning when no condition is in the loop. While the user connects, the draft line says that the connection makes a loop. A retry now runs every step after the retried step again, not only the skipped ones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Do not select a workflow step on a press of its port A press on a port, a portal or the edge actions selected the step under it, so a new connection also moved the selection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Show why a workflow Output or Condition step failed These cards have no result field, so a failed step showed only its status. They now show the error of the step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Retry a workflow step with the node's current settings A retry used the settings that the run copied, so a fix made after the failure, such as a new output place, did not apply. A retry now uses the current node, and the run's copy only when the node is gone or is now another kind. The Team API already checks the agents of both graphs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Reuse a warm provider for workflow model steps and count their usage A model or condition step started a new provider process each time and recorded no tokens. Now one process without tools per provider stays for 5 idle minutes; each step still starts a new ephemeral thread and closes it after the turn. The process stops when the main client stops or changes, after a failed step, and at shutdown. The tokens of these steps go to one reserved usage row, WORKFLOWS_USAGE_ID, which the host report, the Team API filter and the usage panel accept. Agent steps still count under their agent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Report workflow runs and actions to product analytics The host sends system_workflow_run when a run ends (outcome, source, duration, step counts by kind) and workflow_count in the daily inventory. The window sends workflow_action for each user action on a workflow. No name, text, graph or ID is sent. Host generation 11, desktop 12. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Translate the workflow text to Simplified Chinese main added zh as a 12th language. Add the workflow and workflow error catalogs, and the Workflows rail, usage and notification keys, so zh has every key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Fix workflow review findings before merge - Reuse steps in graph order, so a reused step does not make a node behind it due. - Build the input of a retried agent step again from the current task. - Show the Workflows usage row only to a peer with workflows-v1. - Keep the warm client state correct when a generation is interrupted, and wait for idle stops at shutdown. - Send the duration of a workflow run up to 30 days. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 19 days ago |
| Files | Last commit | Last update |
|---|---|---|
| 29 days ago | ||
| 21 days ago | ||
| 19 days ago |