| Files | Last commit | Last update |
|---|---|---|
Migrate remote transport from Cloudflare Tunnel to WebRTC (#111) * Migrate remote transport to WebRTC * Limit hosts to one active remote session * Harden remote session resume and signaling * Preserve authorization and member identity across reconnects * Tighten remote session preparation * Close remote session lifecycle gaps * Finish remote lifecycle reliability * Complete remote session lifecycle * Harden remote reconnect recovery * Close remote transport lifecycle gaps * Revoke rotated host credentials * Harden reconnect state and transfer expiry * Serialize signaling and secure remote TLS keys * Complete remote renewal and transfer recovery * Bound WebRTC framing and recover event streams * Harden remote identity and shutdown * Serialize remote authorization epochs * Secure remote restart and registration * Isolate remote file transports * Renew remote host credentials safely * fix remote session recovery edge cases * secure remote peer authentication and recovery * Fix WebRTC authentication completion ordering * Complete remote-only WebRTC rollout path * Prepare encrypted remote production environment * Keep remote desktop runtime lock stable * Preserve sessions across Signal recovery * Distinguish Signal resume from client replacement * Close replaced WebRTC peer state * Stop replaced clients from reclaiming sessions * Fix fail-closed WebRTC edge cases * Close remote authorization lifecycle gaps * Preserve pinned WebRTC session identity * Preserve immutable runtime lock metadata * Disconnect revoked remote hosts during sync * Remove sidebar event test race * Configure remote ACME token * Harden remote session recovery * Complete WebRTC host administration * Resolve remote rollout review findings * Close remote authorization races * Make remote revocation atomic * Secure remote lifecycle concurrency * Recover remote event streams * Restore live WebRTC smoke coverage * Make remote logout and readiness fail closed | 2 months ago | |
Migrate remote transport from Cloudflare Tunnel to WebRTC (#111) * Migrate remote transport to WebRTC * Limit hosts to one active remote session * Harden remote session resume and signaling * Preserve authorization and member identity across reconnects * Tighten remote session preparation * Close remote session lifecycle gaps * Finish remote lifecycle reliability * Complete remote session lifecycle * Harden remote reconnect recovery * Close remote transport lifecycle gaps * Revoke rotated host credentials * Harden reconnect state and transfer expiry * Serialize signaling and secure remote TLS keys * Complete remote renewal and transfer recovery * Bound WebRTC framing and recover event streams * Harden remote identity and shutdown * Serialize remote authorization epochs * Secure remote restart and registration * Isolate remote file transports * Renew remote host credentials safely * fix remote session recovery edge cases * secure remote peer authentication and recovery * Fix WebRTC authentication completion ordering * Complete remote-only WebRTC rollout path * Prepare encrypted remote production environment * Keep remote desktop runtime lock stable * Preserve sessions across Signal recovery * Distinguish Signal resume from client replacement * Close replaced WebRTC peer state * Stop replaced clients from reclaiming sessions * Fix fail-closed WebRTC edge cases * Close remote authorization lifecycle gaps * Preserve pinned WebRTC session identity * Preserve immutable runtime lock metadata * Disconnect revoked remote hosts during sync * Remove sidebar event test race * Configure remote ACME token * Harden remote session recovery * Complete WebRTC host administration * Resolve remote rollout review findings * Close remote authorization races * Make remote revocation atomic * Secure remote lifecycle concurrency * Recover remote event streams * Restore live WebRTC smoke coverage * Make remote logout and readiness fail closed | 2 months ago | |
Start workflows from GitHub events and change GitHub from workflows (#4288) * Fix workflow node fades and ports in browsers without scroll timelines Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add the GitHub workflow contract and the workflows-github-v1 capability GitHub is a trigger type, an output target and a run source. The new capability carries the GitHub catalog, repository options, event history and a run with the last event. A client shows a workflow with a trigger type or an output target that it does not know as read-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Add migration 49 for GitHub workflow runs, deliveries and actions Migration 49 rebuilds workflow_runs to accept the github run source and keeps every run id. It adds three tables: - workflow_github_runs: the item of each run that a GitHub event started. - workflow_github_deliveries: the event history of each GitHub trigger, and the per-item queue (a waiting row keeps its payload until it starts). - workflow_github_actions: each change that a GitHub output made, so a retry does not repeat it and the loop guard can find its own events. The latest schema takes the same run source line and tables. Tests cover schemas 46 to 48, a late failure and retry, newer and missing histories, constraint refusals and cascades. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Route GitHub App events through Signal to the hosts that watch them Signal gets POST /v1/github/events. It checks the App signature, reads only the installation and repository IDs, and sends the exact body to every host whose GitHub route ticket names the repository. It keeps no body. The account service signs the 5-minute route ticket after it checks, with the host's GitHub sign-in, which watched repositories that sign-in can see. D1 keeps no GitHub route. The host ingress socket holds a GitHub route through the new GitHubRelay, answers github-delivery frames, and records the offline gaps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Start workflow runs from GitHub events, one run per item - Match GitHub events to triggers by repository, event and filters. - Queue an event when a run of its item is open; start it when that run ends. Runs of other items start at the same time. - Skip echoes of the workflow's own actions (self) and the fourth run in 10 minutes that OpenBot's bot caused on one item (chain). - Keep the newest 50 events per trigger and record offline gaps. - Add the refused skip reason and caused_by_bot to the unreleased v49 table. - Add scripts/github-workflow-e2e.ts (host level). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Make the changes of GitHub outputs as OpenBot's bot A GitHub output makes one of the 10 changes through the GitHub REST API with the App's installation token. "Agent chooses" asks a model once and keeps only the repository's own labels and people. Each change writes a `sending` row before the call and a `done` row after it, so a retry does not post twice and the loop guard knows the change's events. A restart sends again only a change that a second call does not repeat. "Run with last event" starts a run with the newest matching item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Show GitHub triggers and outputs on the workflow canvas The trigger and output cards get GitHub rows: repository, event, filters, action, labels and people, with "Agent chooses". The Events row lists what GitHub sent. Access and event alerts open GitHub, and Connect opens the connect dialog of the GitHub settings page. The run bar lists the open runs and the waiting events, and the canvas shows the steps of the open run that the user views. The renderer reads the catalog, labels, people and event history from the host through new IPC reads and Team API routes. GitHub shows only for an owner or admin on a host with workflows-github-v1. Stories replace the prototype stories. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Translate the GitHub workflow text into 12 languages Name the GitHub event and action labels as literal catalog keys, and remove two keys that no code uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Test the redaction of GitHub errors, and document GitHub workflows Add a Vitest that checks that GitHub's error text and a failed request put no token into a step's failure. Document the GitHub trigger path, the delivery outcomes and the Team API routes, and add release notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Remove unused GitHub exports, and fix an optional field in the e2e Knip and the exactOptionalPropertyTypes ratchet failed the Check job. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Send not_planned to GitHub when an output closes an issue as not planned The saved close reason is notPlanned. GitHub refused it with "Please specify a valid state reason." The adapter now maps each saved reason to the state_reason that GitHub accepts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep trigger events off GitHub, and add repository search and loading rows - A GitHub output removes the framed trigger event from its text. A comment that has only the event fails with a clear error and posts nothing. - The repository menus have a search field. - The Labels and Person menus show "Loading…" while the host reads them. - The log says that the GitHub output failed, not that it made no change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Make each loop pass change GitHub, and keep Telegram when a ticket fails - A GitHub output keys its change by run, node and pass. A loop pass makes its own change. A retry or a restart of the same pass does not make the change again. - When the trigger event comes back in a loop, the output also removes the empty "Input N:" names of the event. - A failed GitHub or webhook ticket does not stop Telegram or the other routes on the shared socket. - The connector reads the App events from GITHUB_ROUTE_EVENTS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Let Signal pass GitHub events of up to 512 KiB An issue_comment or pull_request event can hold two texts of 65,536 characters each. Signal refused such an event with 413, and GitHub does not send it again. - GITHUB_DELIVERY_BODY_BYTES_LIMIT is 512 KiB. - The pending budget for each host is 768 KiB, and the socket backpressure limit is 1 MiB, so the largest event fits. - nginx gets a /v1/github/events location with the same body limit, no access log, and the 10-second wait of GitHub. - The Signal e2e sends the largest event and one above the limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Keep an end marker in a comment inside its event, and stop loading after a failed options read The event frame ends only at the marker on its own line. The JSON of the event keeps no line break, so a commenter cannot end the frame early and get text posted as the bot. A failed read of repository labels and people now stores empty options. The menus stop showing "Loading". A change on GitHub reads them again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> | 12 days ago |
| Files | Last commit | Last update |
|---|---|---|
| 2 months ago | ||
| 2 months ago | ||
| 12 days ago |