Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Sep 26, 2024

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

dglazkov and others added 30 commits November 25, 2025 21:12
- **Revert "undismissable" logic.**
- **Introduce tri-state sign-in response, adding "dismissed".**
- **Handle dismissal/failure when the user is loading a non-public
opal.**
- **Introduce `viewError` and start showing it in cases when we aren't
in any of other states.**
Prevent snackbar rendering logic from getting into an infinite loop when it doesn't have the snackbar element.
- **Add consent message machinery**
- **Teach markdown directive to always open links in new tab.**
## Summary
This PR adds support for a streaming GenerateWebpage API, controlled by
the `streamGenWebpage` feature flag.

## Changes

### Feature Flag
- Added `streamGenWebpage` flag to `packages/types/src/flags.ts`
- Added default value in
`packages/shared-ui/src/config/client-deployment-configuration.ts`
- Added server-side config in
`packages/unified-server/src/server/config.ts` and `flags.ts`

### Streaming Implementation
- Created `packages/a2/src/a2/generate-webpage-stream.ts` with:
  - `executeWebpageStream`: Main streaming execution function
  - `buildStreamingRequestBody`: Builds the API request body
- `parseStoredDataUrl`: Parses Drive/blob URLs to proper fileData format
    - Drive URLs → `drive://{drive_id}`
    - Blob URLs → `gs://{blob_id}`

### Bug Fixes
- Returns HTML as `inlineData` with `text/html` mimeType for proper
sandbox rendering
- Added `accessToken` to streaming request body via `fetchWithCreds`
augmentation

### Refactoring
- Simplified `packages/a2/src/a2/html-generator.ts` to use the new
streaming module
- Legacy implementation preserved for non-streaming path

---------

Co-authored-by: Jiayu Huang <jiayuhuang@google.com>
- **Remove unused `RuntimeModuleChangeEvent` event.**
- **Remove unused `RuntimeWorkspaceItemChangeEvent`**
- **Stop listening to unused `RuntimeBoardRunEvent` events.**
- **Remove `disconnectFromBoardServer` method and invocations.**
- **Remove old transforms from client side.**
- **Remove old transforms from the server.**
- **Remove auth code from server.**
- **Remove unused code.**
- **Lift-n-shift all of board-server to unified-server.**
- **Delete `board-server` package**
- **Make it work again.**
- **Move to nicer locations.**
- **Even nicer.**
- **Short-cirtuit `getBoardServers` to just return
`GoogleDriveBoardServer`.**
- **Remove `connectToBoardServer`.**
- **Remove all the mounting/storing board server machinery.**
- **Remove `idb-board-server` package.**
- **Simplify `GoogleDriveBoardServer` construction.**
- **Remove `RuntimeBoardServerChangeEvent` and `getBoardServers`.**
- **Remove `board-server-management` package.**
- **Remove `embedded-board-server` package.**
- **Remove unused `DefaultBoardServer`.**
- **Shave down `BoardServer` type.**
- **Stop looking up board servers by name.**
- **Preload A2 board server items.**
- **Clean up.**
- **Stop using `inflateData` in `addRunModule`**
- **Remove `inflateData`.**
- **More precise module imports/exports**
- **Tigthen exports.**
- **Remove non-functional `blobs` capability**
- **Remove `transformContents`**
- **Remove `DataStore` and friends.**
- **Remove `dataPartTransformer` from `BoardServer`.**
- **Simplify `Runtime` initialization a bit.**
- **Remove unused codepath in `GoogleDriveDataPartTransformer`.**
- **Be deliberate about which board server we choose. No more arrays.**
- **Minimize the use of board server array.**
- **Remove unused property.**
…ctor

- **refactor: Move runtime dependency instantiation into constructor and
simplify its signature.**
- **Remove spurious await**
- **feat: Propagate runtime flags to graph store and node describer
context, and remove deprecated inspect function.**
- **feat: Refactor runtime flag handling to use A2ModuleArgs context
instead of a virtual file system.**
…cription status asynchronously

- **feat: introduce `FlowGenLLMContentPart` type and use `DataPart` for
improved type safety in stream processing.**
- **refactor: `FlowGenerator` now uses `RuntimeFlagManager` for feature
flag access instead of direct boolean properties.**
- **refactor: extract subscription status check into a private method
and reorder imports**
- **refactor: Remove `kits` and `graphStorePreloader` parameters from
visual editor initialization.**
- **refactor: remove `defaultBoardService` parameter from bootstrap
configuration and usage**
- **docs: Add warning against adding async code to the `#init`
function.**
- **refactor: Consolidate recent board state management into
`RecentBoardStore` with new methods.**
- **Make Runtime initialization sync.**
- **refactor: Make visual editor initialization synchronous by removing
the `#init` method and `#initPromise` property.**
- **Tighten up initialization types.**
- **Move unique methods to `index.ts` from `MainBase`.**
- **refactor: Move consent request rendering from `index.ts` to
`main-base.ts` and update its usage in `index.ts` and `index-lite.ts`.**
- **refactor: remove `ready` state property and associated rendering
checks**
- **refactor: Refine type declarations for `runtime` and `embedHandler`
properties.**
aomarks and others added 30 commits December 15, 2025 15:03
We'll now default to full-screen in lite mode after the graph loads if
we find that it's not owned by the current user, and also it is not from
the featured gallery.
We were not validating on signin at all because of a nullish test
instead of a length check. Recent regression.
We used to do this blocking before rendering any page, but since
#7351 were omitting the
check. Now it happens asynchronously similar to how the access check
works.
At the same time we are asynchronously checking we have all required
scopes, we now also check that the token is still valid. This catches
the case where the user has revoked access through account settings.
Note this only affects 3p signin.
)

Display a sign-in dialog as fallback for when we were blocked from
immediately calling window.open.

Safari has a much shorter navigator.userActivation.isActive timeout than
Chrome and Firefox, which means that too much time can elapse between
the guest asking for a sign-in and the host calling window.open.
- **Make ActionTracker not static.**
- **Audit "load" event.**
- **Audit "openApp" event.**
- **Audit "remixApp" event.**
- **Audit "runApp" event.**
- **Remove unused "signInPageView" event.**
- **Plumb action tracking through the shell host protocol.**
- **Implement action tracking in shell host.**
Since we are in an iframe with CSP we can't navigate to a different
origin. This breaks the case where Generate steps are asked to create
markdown links and output them as part of manual output. This updates
the Particle markdown renderer to ensure that there is a `_target` (as
well as `noopener` and `noreferrer` values) set.
They changed, and one was deleted
…r instead of heuristic (#7423)

During some sign-ins from e.g. the signed-out opal page, we call
window.location.reload() because a fresh load is currently required for
signin.

However, sometimes our guest iframe URLs had been set to a URL that
lacked the shell guest /_app/ prefix, so window.location.reload() would
end up trying to reload with a shell host URL, and fail with a CSP
error.

That was happening because we were depending on a heuristic within
makeUrl to decide whether the guest prefix should be included, which was
whether it included a '?shared' parameter. Combining this with automatic
canonicalization logic that the router does meant that the iframe guest
sometimes got reset to a having a host url.

This PR replaces that heuristic with an explicit `guestPrefixed`
property that all calls to makeUrl must include. URLs being used for
within-guest navigations have it set to false, and ones for sharing etc.
have it set to true.
Now we actually set the theme before we do the switch.
The snackbar was not working in lite mode for a few reasons:

- We did not have snackbar event listeners on the prompt input element.
That's where prompt rejection errors come from.

- We were alternating between 3 different instances of the snackbar
element, depending on what lite mode ui state we were in. That meant
even if snackbar messages were passed to one snackbar, they could be
clobbered when that snackbar stopped being rendered. There was some
logic that was trying to graft messages between different snackbar
instances, but it didn't seem to be quite working. Anyway, it's much
simpler to just have one snackbar the whole time, which we now do.
- **Switch agent to use 3 Flash**
- **Organize function names.**
- **Add simplest possible outcome viewer.**
- **Lots of tweaks to the system prompt.**
- **Organize a2ui set into its own dir.**
- **Convert agent evals to use the same layout as a2ui.**
- **Add Blog Post Writer eval**
- **Define tool `instancenType`.**
- **Pass the whole part to `addTool`**
- **Support adding routes with `addTool`.**
- **Teach `toPidgin` about routes.**
- **Use new route bits in eval**
- **Escape HTML when translating to pidgin**
- **Vend routes from the file system.**
- **Teach success callback to fail sometimes.**
- **Add state-detector eval case.**
- **Pass a file to print or display.**
- **refactor: Remove `parameterType` from template parts and events, and
update routing tool path.**
- **Extract useful utilities into reusable functions.**
- **Plumb selected node/graph to StepEditor state.**
- **Move `fastAccess` state to `stepEditor`.**
- **refactor: replace separate node and graph selection properties with
a single `nodeSelection` object**
- **Plumb `routes` to `FastAccess` state**
- **Plumb routes to fast access menu.**
- **Clean up types.**
- **Handle chip rendering**
- **feat: Filter available components to prevent cycles when a node is
selected.**
- **Bring back targeted fast-access menu.**
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants