├── experiments ├── agent │ ├── .gitignore │ ├── files │ │ ├── drop.png │ │ └── rectangle.png │ └── package.json ├── logic │ ├── .gitignore │ ├── src │ │ └── test-all.ts │ └── tsconfig.json └── screens │ ├── .eslintrc.cjs │ ├── index.html │ ├── src │ └── runner.ts │ └── tsconfig.json ├── templates └── blank │ ├── README.md │ ├── .npmignore │ ├── src │ └── index.ts │ └── tsconfig.json ├── packages ├── types │ ├── .npmignore │ ├── README.md │ ├── src │ │ ├── uuid.ts │ │ ├── sign-in-info.ts │ │ └── result.ts │ └── tsconfig.json ├── utils │ ├── .npmignore │ ├── tests │ │ └── node │ │ │ └── index.ts │ ├── .eslintrc │ ├── README.md │ └── src │ │ ├── timestamp.ts │ │ ├── stubs.ts │ │ ├── outcome.ts │ │ └── llm-content.ts ├── visual-editor │ ├── .gitignore │ ├── .npmignore │ ├── langs │ │ └── icons │ │ │ └── logo.png │ ├── .eslintrc │ ├── public │ │ ├── images │ │ │ ├── arrow-up.png │ │ │ ├── arrow-down.png │ │ │ ├── share-card-dev.png │ │ │ ├── share-card-prod.png │ │ │ ├── app │ │ │ │ └── generic-flow.jpg │ │ │ ├── progress.svg │ │ │ ├── progress-inverted.svg │ │ │ ├── progress-ui.svg │ │ │ ├── progress-ui-inverted.svg │ │ │ ├── progress-neutral.svg │ │ │ └── progress-md.svg │ │ ├── styles │ │ │ ├── landing │ │ │ │ ├── images │ │ │ │ │ ├── graph.png │ │ │ │ │ ├── g-logo.png │ │ │ │ │ ├── graph@2x.png │ │ │ │ │ ├── carousel │ │ │ │ │ │ ├── blog.jpg │ │ │ │ │ │ ├── book.jpg │ │ │ │ │ │ ├── city.jpg │ │ │ │ │ │ ├── learn.jpg │ │ │ │ │ │ ├── music.jpg │ │ │ │ │ │ ├── social.jpg │ │ │ │ │ │ ├── video.jpg │ │ │ │ │ │ ├── business.jpg │ │ │ │ │ │ ├── fashion.jpg │ │ │ │ │ │ ├── product.jpg │ │ │ │ │ │ ├── spelling.jpg │ │ │ │ │ │ └── modal │ │ │ │ │ │ │ ├── blog-desktop.jpg │ │ │ │ │ │ │ ├── blog-mobile.jpg │ │ │ │ │ │ │ ├── book-desktop.jpg │ │ │ │ │ │ │ ├── book-mobile.jpg │ │ │ │ │ │ │ ├── city-desktop.jpg │ │ │ │ │ │ │ ├── city-mobile.jpg │ │ │ │ │ │ │ ├── learn-desktop.jpg │ │ │ │ │ │ │ ├── learn-mobile.jpg │ │ │ │ │ │ │ ├── music-desktop.jpg │ │ │ │ │ │ │ ├── music-mobile.jpg │ │ │ │ │ │ │ ├── social-mobile.jpg │ │ │ │ │ │ │ ├── video-desktop.jpg │ │ │ │ │ │ │ ├── video-mobile.jpg │ │ │ │ │ │ │ ├── business-mobile.jpg │ │ │ │ │ │ │ ├── fashion-desktop.jpg │ │ │ │ │ │ │ ├── fashion-mobile.jpg │ │ │ │ │ │ │ ├── product-desktop.jpg │ │ │ │ │ │ │ ├── product-mobile.jpg │ │ │ │ │ │ │ ├── social-desktop.jpg │ │ │ │ │ │ │ ├── spelling-mobile.jpg │ │ │ │ │ │ │ ├── business-desktop.jpg │ │ │ │ │ │ │ └── spelling-desktop.jpg │ │ │ │ │ ├── graph │ │ │ │ │ │ ├── input@2x.png │ │ │ │ │ │ ├── node-1@2x.png │ │ │ │ │ │ ├── node-2@2x.png │ │ │ │ │ │ ├── node-3@2x.png │ │ │ │ │ │ ├── arrow-1@2x.png │ │ │ │ │ │ ├── arrow-2@2x.png │ │ │ │ │ │ └── arrow-3@2x.png │ │ │ │ │ └── sign-in-scopes-screenshot.gif │ │ │ │ └── videos │ │ │ │ │ ├── mobile-1.mp4 │ │ │ │ │ ├── mobile-2.mp4 │ │ │ │ │ ├── mobile-3.mp4 │ │ │ │ │ ├── desktop-1.mp4 │ │ │ │ │ ├── desktop-2.mp4 │ │ │ │ │ ├── desktop-3.mp4 │ │ │ │ │ ├── mobile-poster.png │ │ │ │ │ └── desktop-poster.png │ │ │ └── app-sandbox.css │ │ ├── third_party │ │ │ ├── firacode │ │ │ │ ├── FiraCode-Bold.woff2 │ │ │ │ └── FiraCode-Regular.woff2 │ │ │ └── icons │ │ │ │ ├── remove.svg │ │ │ │ ├── remove-inverted.svg │ │ │ │ ├── arrow-right.svg │ │ │ │ ├── arrow-drop-down.svg │ │ │ │ ├── send-ui.svg │ │ │ │ ├── send.svg │ │ │ │ ├── README.md │ │ │ │ ├── add.svg │ │ │ │ ├── arrow-drop-down-inverted.svg │ │ │ │ ├── arrow-right-inverted.svg │ │ │ │ ├── play-arrow-filled-ui.svg │ │ │ │ ├── play-arrow-filled.svg │ │ │ │ ├── send-inverted.svg │ │ │ │ ├── add-inverted.svg │ │ │ │ ├── graph │ │ │ │ ├── play-filled-48px.svg │ │ │ │ ├── add-48px.svg │ │ │ │ ├── value-48px.svg │ │ │ │ ├── add-inverted-48px.svg │ │ │ │ ├── value-inverted-48px.svg │ │ │ │ ├── check-48px.svg │ │ │ │ ├── check-inverted-48px.svg │ │ │ │ ├── text-48px.svg │ │ │ │ ├── text-inverted-48px.svg │ │ │ │ ├── fetch-48px.svg │ │ │ │ ├── fetch-inverted-48px.svg │ │ │ │ ├── merge-type-48px.svg │ │ │ │ ├── merge-type-inverted-48px.svg │ │ │ │ ├── jsonata-48px.svg │ │ │ │ ├── jsonata-inverted-48px.svg │ │ │ │ ├── code-blocks-48px.svg │ │ │ │ ├── play-filled-inverted-48px.svg │ │ │ │ ├── add-multimodal-48px.svg │ │ │ │ ├── code-blocks-inverted-48px.svg │ │ │ │ ├── add-multimodal-inverted-48px.svg │ │ │ │ ├── google-drive-outline.svg │ │ │ │ ├── google-drive-outline-inverted.svg │ │ │ │ ├── search-48px.svg │ │ │ │ ├── search-inverted-48px.svg │ │ │ │ ├── secrets-48px.svg │ │ │ │ ├── secrets-inverted-48px.svg │ │ │ │ ├── edit-48px.svg │ │ │ │ ├── edit-inverted-48px.svg │ │ │ │ ├── add-image-48px.svg │ │ │ │ ├── add-image-inverted-48px.svg │ │ │ │ ├── table-rows-48px.svg │ │ │ │ ├── add-video-48px.svg │ │ │ │ ├── table-rows-inverted-48px.svg │ │ │ │ ├── add-video-inverted-48px.svg │ │ │ │ └── sunny-48px.svg │ │ │ │ ├── pause-filled.svg │ │ │ │ ├── play-arrow-filled-inverted.svg │ │ │ │ ├── pause-filled-inverted.svg │ │ │ │ ├── dehaze.svg │ │ │ │ ├── maximize.svg │ │ │ │ ├── minimize.svg │ │ │ │ ├── next.svg │ │ │ │ ├── before.svg │ │ │ │ ├── collapse-content.svg │ │ │ │ ├── collapse.svg │ │ │ │ ├── dehaze-inverted.svg │ │ │ │ ├── expand-content.svg │ │ │ │ ├── expand.svg │ │ │ │ ├── maximize-inverted.svg │ │ │ │ ├── minimize-inverted.svg │ │ │ │ ├── next-inverted.svg │ │ │ │ ├── sort-by.svg │ │ │ │ ├── before-inverted.svg │ │ │ │ ├── check.svg │ │ │ │ ├── collapse-inverted.svg │ │ │ │ ├── expand-content-inverted.svg │ │ │ │ ├── expand-inverted.svg │ │ │ │ ├── sort-by-inverted.svg │ │ │ │ ├── value.svg │ │ │ │ ├── collapse-content-inverted.svg │ │ │ │ ├── keyboard-arrow-down.svg │ │ │ │ ├── menu.svg │ │ │ │ ├── arrow-back.svg │ │ │ │ ├── check-inverted.svg │ │ │ │ ├── keyboard-arrow-down-inverted.svg │ │ │ │ ├── move-down.svg │ │ │ │ ├── move-up.svg │ │ │ │ ├── value-inverted.svg │ │ │ │ ├── menu-inverted.svg │ │ │ │ ├── move-down-inverted.svg │ │ │ │ ├── move-up-inverted.svg │ │ │ │ ├── arrow-back-inverted.svg │ │ │ │ ├── edge-connector.svg │ │ │ │ ├── edge-connector-inverted.svg │ │ │ │ ├── keep-filled.svg │ │ │ │ ├── text.svg │ │ │ │ ├── keep-filled-inverted.svg │ │ │ │ ├── text-inverted.svg │ │ │ │ ├── close.svg │ │ │ │ ├── close-inverted.svg │ │ │ │ ├── close-ui.svg │ │ │ │ ├── step-next.svg │ │ │ │ ├── resume.svg │ │ │ │ ├── step-next-inverted.svg │ │ │ │ ├── continue.svg │ │ │ │ ├── responsive-layout.svg │ │ │ │ ├── resume-inverted.svg │ │ │ │ ├── resume-ui.svg │ │ │ │ ├── view-real-size.svg │ │ │ │ ├── continue-inverted.svg │ │ │ │ ├── eject.svg │ │ │ │ ├── view-real-size-inverted.svg │ │ │ │ ├── code.svg │ │ │ │ ├── eject-inverted.svg │ │ │ │ ├── enhance.svg │ │ │ │ ├── unfold-less.svg │ │ │ │ ├── code-inverted.svg │ │ │ │ ├── enhance-inverted.svg │ │ │ │ ├── keep.svg │ │ │ │ ├── unfold-less-inverted.svg │ │ │ │ ├── keep-inverted.svg │ │ │ │ ├── sound.svg │ │ │ │ ├── sound-inverted.svg │ │ │ │ ├── up-down.svg │ │ │ │ ├── pending.svg │ │ │ │ ├── up-down-inverted.svg │ │ │ │ ├── unfold-more.svg │ │ │ │ ├── pending-inverted.svg │ │ │ │ ├── unfold-more-inverted.svg │ │ │ │ ├── merge-type.svg │ │ │ │ ├── merge-type-inverted.svg │ │ │ │ ├── lan.svg │ │ │ │ ├── lan-inverted.svg │ │ │ │ ├── fetch.svg │ │ │ │ ├── multimodal.svg │ │ │ │ ├── fetch-inverted.svg │ │ │ │ ├── tree.svg │ │ │ │ ├── grid-view.svg │ │ │ │ ├── multimodal-inverted.svg │ │ │ │ ├── reset-nodes.svg │ │ │ │ ├── tree-inverted.svg │ │ │ │ ├── youtube.svg │ │ │ │ ├── fork-down-right-inverted.svg │ │ │ │ ├── reset-nodes-inverted.svg │ │ │ │ ├── youtube-inverted.svg │ │ │ │ ├── fork-down-right.svg │ │ │ │ ├── grid-view-inverted.svg │ │ │ │ ├── warning.svg │ │ │ │ ├── redo.svg │ │ │ │ ├── rerun.svg │ │ │ │ ├── undo.svg │ │ │ │ ├── redo-inverted.svg │ │ │ │ ├── remix.svg │ │ │ │ ├── rerun-inverted.svg │ │ │ │ ├── remix-inverted.svg │ │ │ │ ├── undo-inverted.svg │ │ │ │ ├── step.svg │ │ │ │ ├── copy-to-clipboard.svg │ │ │ │ ├── step-inverted.svg │ │ │ │ ├── vital-signs.svg │ │ │ │ ├── copy-to-clipboard-inverted.svg │ │ │ │ ├── download.svg │ │ │ │ ├── google-drive-outline.svg │ │ │ │ ├── vital-signs-inverted.svg │ │ │ │ ├── download-inverted.svg │ │ │ │ ├── google-drive-outline-inverted.svg │ │ │ │ ├── file-export.svg │ │ │ │ ├── chat-mirror.svg │ │ │ │ ├── file-export-inverted.svg │ │ │ │ ├── login.svg │ │ │ │ ├── logout.svg │ │ │ │ ├── login-inverted.svg │ │ │ │ ├── logout-inverted.svg │ │ │ │ ├── delete.svg │ │ │ │ ├── delete-ui.svg │ │ │ │ ├── delete-inverted.svg │ │ │ │ ├── draft.svg │ │ │ │ ├── confirm.svg │ │ │ │ ├── jsonata.svg │ │ │ │ ├── refresh.svg │ │ │ │ ├── confirm-ui.svg │ │ │ │ ├── draft-inverted.svg │ │ │ │ ├── jsonata-inverted.svg │ │ │ │ ├── refresh-inverted.svg │ │ │ │ ├── verified.svg │ │ │ │ ├── confirm-inverted.svg │ │ │ │ ├── flowchart.svg │ │ │ │ ├── verified-inverted.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── flowchart-inverted.svg │ │ │ │ ├── list.svg │ │ │ │ ├── edit-inverted.svg │ │ │ │ ├── edit-ui.svg │ │ │ │ ├── list-inverted.svg │ │ │ │ ├── model.svg │ │ │ │ ├── model-inverted.svg │ │ │ │ ├── anchor.svg │ │ │ │ ├── do-not-disturb.svg │ │ │ │ ├── open-new.svg │ │ │ │ ├── table-rows.svg │ │ │ │ ├── anchor-inverted.svg │ │ │ │ ├── open-new-inverted.svg │ │ │ │ ├── sunny.svg │ │ │ │ ├── table-rows-inverted.svg │ │ │ │ ├── anchor-active.svg │ │ │ │ ├── do-not-disturb-inverted.svg │ │ │ │ ├── experiment.svg │ │ │ │ ├── file-add.svg │ │ │ │ ├── http.svg │ │ │ │ ├── add-image.svg │ │ │ │ ├── comment.svg │ │ │ │ ├── experiment-inverted.svg │ │ │ │ ├── http-inverted.svg │ │ │ │ ├── play-filled.svg │ │ │ │ ├── comment-inverted.svg │ │ │ │ ├── file-add-inverted.svg │ │ │ │ ├── play-filled-inverted.svg │ │ │ │ ├── add-image-inverted.svg │ │ │ │ ├── add-video.svg │ │ │ │ ├── laps.svg │ │ │ │ ├── add-video-inverted.svg │ │ │ │ ├── laps-inverted.svg │ │ │ │ ├── replay.svg │ │ │ │ ├── restart-alt.svg │ │ │ │ ├── replay-inverted.svg │ │ │ │ ├── restart-alt-inverted.svg │ │ │ │ ├── upload.svg │ │ │ │ ├── dock-to-right.svg │ │ │ │ ├── upload-inverted.svg │ │ │ │ └── dock-to-right-inverted.svg │ │ └── tos.html │ ├── eval │ │ ├── viewer │ │ │ └── public │ │ │ │ ├── sample.mp4 │ │ │ │ ├── sample.png │ │ │ │ └── sample.wav │ │ ├── sets │ │ │ └── data │ │ │ │ ├── timer.ts │ │ │ │ ├── menu-planner.ts │ │ │ │ ├── prompting-tutor.ts │ │ │ │ ├── language-tutor.ts │ │ │ │ └── secret-santa.ts │ │ └── time.ts │ ├── src │ │ ├── a2ui │ │ │ └── 0.8 │ │ │ │ └── schemas │ │ │ │ └── .gitignore │ │ ├── particles-ui │ │ │ ├── styles │ │ │ │ ├── shared.ts │ │ │ │ ├── opacity.ts │ │ │ │ └── index.ts │ │ │ ├── context │ │ │ │ └── theme.ts │ │ │ └── index.ts │ │ ├── ui │ │ │ ├── connection │ │ │ │ ├── index.ts │ │ │ │ └── common.ts │ │ │ ├── plugins │ │ │ │ └── plugins.ts │ │ │ ├── directives │ │ │ │ └── directives.ts │ │ │ ├── connectors │ │ │ │ └── index.ts │ │ │ ├── elements │ │ │ │ ├── connection │ │ │ │ │ └── connection-common.ts │ │ │ │ ├── step-editor │ │ │ │ │ ├── camera.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── utils │ │ │ │ │ │ ├── clamp.ts │ │ │ │ │ │ ├── to-grid-size.ts │ │ │ │ │ │ ├── to-css-matrix.ts │ │ │ │ │ │ └── rect-intersection.ts │ │ │ │ └── shape │ │ │ │ │ └── helpers │ │ │ │ │ └── utils.ts │ │ │ ├── events │ │ │ │ ├── base.ts │ │ │ │ └── app │ │ │ │ │ └── app.ts │ │ │ ├── utils │ │ │ │ ├── json-stringify.ts │ │ │ │ ├── is-ctrl-command.ts │ │ │ │ ├── module-id.ts │ │ │ │ ├── graph-is-empty.ts │ │ │ │ ├── blank-board.ts │ │ │ │ ├── guest-action-tracker.ts │ │ │ │ ├── board-id.ts │ │ │ │ └── url-pattern-conditional-polyfill.ts │ │ │ ├── constants │ │ │ │ └── constants.ts │ │ │ ├── strings │ │ │ │ └── en_US │ │ │ │ │ ├── kit-selector.ts │ │ │ │ │ ├── command-palette.ts │ │ │ │ │ ├── audio-handler.ts │ │ │ │ │ ├── workspace-outline.ts │ │ │ │ │ └── focus-editor.ts │ │ │ ├── styles │ │ │ │ ├── host │ │ │ │ │ ├── match.ts │ │ │ │ │ ├── effects.ts │ │ │ │ │ └── behavior.ts │ │ │ │ ├── multi-line-input.ts │ │ │ │ ├── spin-animation.ts │ │ │ │ ├── floating-panel.ts │ │ │ │ ├── text-input-with-icon.ts │ │ │ │ └── styles.ts │ │ │ ├── contexts │ │ │ │ ├── ui-state.ts │ │ │ │ ├── project-run.ts │ │ │ │ ├── settings-helper.ts │ │ │ │ ├── embedder.ts │ │ │ │ ├── action-tracker-context.ts │ │ │ │ ├── project-state.ts │ │ │ │ ├── board-server.ts │ │ │ │ ├── guest-configuration.ts │ │ │ │ ├── consent-manager.ts │ │ │ │ ├── google-drive-client-context.ts │ │ │ │ └── contexts.ts │ │ │ └── state │ │ │ │ ├── index.ts │ │ │ │ ├── step-editor.ts │ │ │ │ ├── renderer.ts │ │ │ │ └── renderer-run-state.ts │ │ ├── a2 │ │ │ ├── autoname │ │ │ │ ├── bgl.json │ │ │ │ └── index.ts │ │ │ ├── agent │ │ │ │ ├── now.ts │ │ │ │ └── index.ts │ │ │ ├── generate │ │ │ │ └── index.ts │ │ │ ├── deep-research │ │ │ │ └── index.ts │ │ │ ├── audio-generator │ │ │ │ └── index.ts │ │ │ ├── music-generator │ │ │ │ └── index.ts │ │ │ ├── video-generator │ │ │ │ └── index.ts │ │ │ ├── google-drive │ │ │ │ └── types.ts │ │ │ ├── go-over-list │ │ │ │ └── system-instruction.ts │ │ │ └── create-bgl.ts │ │ ├── oauth-redirect.ts │ │ ├── engine │ │ │ ├── editor │ │ │ │ ├── index.ts │ │ │ │ └── operations │ │ │ │ │ └── error.ts │ │ │ ├── runtime │ │ │ │ ├── index.ts │ │ │ │ └── harness │ │ │ │ │ └── index.ts │ │ │ ├── inspector │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ └── loader │ │ │ │ └── index.ts │ │ ├── idb │ │ │ └── types.ts │ │ ├── particles │ │ │ └── index.ts │ │ └── vite-env.d.ts │ ├── oauth │ │ └── index.html │ ├── language.html │ ├── app-sandbox.html │ └── .vscode │ │ └── launch.json ├── unified-server │ ├── .npmignore │ ├── tests │ │ └── dummy │ │ │ └── test.ts │ ├── .gitignore │ ├── src │ │ ├── index.ts │ │ ├── connection │ │ │ └── api │ │ │ │ └── cookies.ts │ │ ├── blobs │ │ │ ├── errors.ts │ │ │ └── types.ts │ │ └── types.ts │ ├── vite.config.ts │ ├── tsconfig.json │ └── .gcloudignore └── README.md ├── .dockerignore ├── assets └── visual-editor.png ├── core ├── README.md └── tsconfig │ ├── CHANGELOG.md │ └── package.json ├── .vscode └── settings.json.recommended ├── .prettierrc ├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── Dockerfile ├── tsconfig.json ├── SECURITY.md ├── docs └── README.md └── .npmrc /experiments/agent/.gitignore: -------------------------------------------------------------------------------- 1 | out/ -------------------------------------------------------------------------------- /experiments/logic/.gitignore: -------------------------------------------------------------------------------- 1 | out/ -------------------------------------------------------------------------------- /templates/blank/README.md: -------------------------------------------------------------------------------- 1 | # Your README goes here -------------------------------------------------------------------------------- /packages/types/.npmignore: -------------------------------------------------------------------------------- 1 | .env 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /packages/utils/.npmignore: -------------------------------------------------------------------------------- 1 | .env 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /packages/visual-editor/.gitignore: -------------------------------------------------------------------------------- 1 | public/sandbox.wasm 2 | out/ -------------------------------------------------------------------------------- /templates/blank/.npmignore: -------------------------------------------------------------------------------- 1 | .env 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /packages/unified-server/.npmignore: -------------------------------------------------------------------------------- 1 | .env 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /packages/visual-editor/.npmignore: -------------------------------------------------------------------------------- 1 | .env 2 | tsconfig.tsbuildinfo 3 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .wireit 3 | **/.wireit 4 | **/node_modules 5 | board-server.db -------------------------------------------------------------------------------- /assets/visual-editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/assets/visual-editor.png -------------------------------------------------------------------------------- /core/README.md: -------------------------------------------------------------------------------- 1 | # Core 2 | 3 | This contains a baseline tsconfig.json that is used in other packages. 4 | -------------------------------------------------------------------------------- /.vscode/settings.json.recommended: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.workingDirectories": [{ "pattern": "./packages/*" }] 3 | } 4 | -------------------------------------------------------------------------------- /packages/unified-server/tests/dummy/test.ts: -------------------------------------------------------------------------------- 1 | import test from "ava"; 2 | 3 | test('dummy', (t) => t.pass()); 4 | -------------------------------------------------------------------------------- /experiments/agent/files/drop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/experiments/agent/files/drop.png -------------------------------------------------------------------------------- /experiments/agent/files/rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/experiments/agent/files/rectangle.png -------------------------------------------------------------------------------- /packages/utils/tests/node/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | -------------------------------------------------------------------------------- /core/tsconfig/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @google-labs/tsconfig 2 | 3 | ## 0.0.2 4 | 5 | ### Patch Changes 6 | 7 | - 5496e6c: Migrate demo to particles-ui 8 | -------------------------------------------------------------------------------- /packages/utils/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "parserOptions": { 4 | "projectService": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/utils/README.md: -------------------------------------------------------------------------------- 1 | # Breadboard Utilities 2 | 3 | This package contains functions that are shared between the frontend and the 4 | backend. -------------------------------------------------------------------------------- /packages/visual-editor/langs/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/langs/icons/logo.png -------------------------------------------------------------------------------- /packages/visual-editor/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "parserOptions": { 4 | "projectService": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/unified-server/.gitignore: -------------------------------------------------------------------------------- 1 | /icons/ 2 | /landing/ 3 | /langs/ 4 | /oauth/ 5 | /public/ 6 | /secrets/ 7 | /shell/ 8 | 9 | /index.html 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/images/arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/images/arrow-up.png -------------------------------------------------------------------------------- /packages/visual-editor/public/images/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/images/arrow-down.png -------------------------------------------------------------------------------- /packages/visual-editor/eval/viewer/public/sample.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/eval/viewer/public/sample.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/eval/viewer/public/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/eval/viewer/public/sample.png -------------------------------------------------------------------------------- /packages/visual-editor/eval/viewer/public/sample.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/eval/viewer/public/sample.wav -------------------------------------------------------------------------------- /packages/visual-editor/public/images/share-card-dev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/images/share-card-dev.png -------------------------------------------------------------------------------- /packages/visual-editor/public/images/share-card-prod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/images/share-card-prod.png -------------------------------------------------------------------------------- /packages/README.md: -------------------------------------------------------------------------------- 1 | # Packages 2 | 3 | These are the packages in Breadboard; for more about these visit [DEVELOPING.md](../DEVELOPING.md#packages) in the root of the repo. 4 | -------------------------------------------------------------------------------- /packages/visual-editor/public/images/app/generic-flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/images/app/generic-flow.jpg -------------------------------------------------------------------------------- /templates/blank/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | console.log("code goes here"); 8 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/g-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/g-logo.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/mobile-1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/mobile-1.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/mobile-2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/mobile-2.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/mobile-3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/mobile-3.mp4 -------------------------------------------------------------------------------- /packages/unified-server/src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | console.log("Do not use directly"); 8 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/desktop-1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/desktop-1.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/desktop-2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/desktop-2.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/desktop-3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/desktop-3.mp4 -------------------------------------------------------------------------------- /packages/visual-editor/src/a2ui/0.8/schemas/.gitignore: -------------------------------------------------------------------------------- 1 | # Copied schema files 2 | # (needed for the build but otherwise redundant) 3 | *.json 4 | !server_to_client_with_standard_catalog.json 5 | -------------------------------------------------------------------------------- /packages/types/README.md: -------------------------------------------------------------------------------- 1 | # TypeScript Types for Breadboard AI 2 | 3 | For more information, visit [https://github.com/breadboard-ai/breadboard/](https://github.com/breadboard-ai/breadboard/). 4 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/blog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/blog.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/book.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/city.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/city.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/mobile-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/mobile-poster.png -------------------------------------------------------------------------------- /packages/visual-editor/src/particles-ui/styles/shared.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const grid = 4; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/learn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/learn.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/music.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/music.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/social.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/video.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/video.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/input@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/input@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/node-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/node-1@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/node-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/node-2@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/node-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/node-3@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/videos/desktop-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/videos/desktop-poster.png -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/firacode/FiraCode-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/third_party/firacode/FiraCode-Bold.woff2 -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/connection/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export type * from "./types.js"; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/plugins/plugins.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export * from "./input-plugin.js"; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/business.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/business.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/fashion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/fashion.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/product.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/product.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/spelling.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/spelling.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/arrow-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/arrow-1@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/arrow-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/arrow-2@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/graph/arrow-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/graph/arrow-3@2x.png -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/firacode/FiraCode-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/third_party/firacode/FiraCode-Regular.woff2 -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "printWidth": 80, 4 | "proseWrap": "always", 5 | "semi": true, 6 | "tabWidth": 2, 7 | "trailingComma": "es5", 8 | "useTabs": false 9 | } 10 | -------------------------------------------------------------------------------- /packages/utils/src/timestamp.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const timestamp = () => globalThis.performance.now(); 8 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/directives/directives.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export { markdown } from "./markdown.js"; 8 | -------------------------------------------------------------------------------- /packages/types/src/uuid.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export type UUID = `${string}-${string}-${string}-${string}-${string}`; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/src/a2/autoname/bgl.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Autoname Modules", 3 | "description": "", 4 | "version": "0.0.1", 5 | "nodes": [], 6 | "edges": [], 7 | "exports": ["#module:main"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/visual-editor/src/oauth-redirect.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import "./ui/elements/connection/connection-broker.ts"; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/connectors/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export { Configurator } from "./configurator.js"; 8 | -------------------------------------------------------------------------------- /packages/unified-server/src/connection/api/cookies.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const REFRESH_TOKEN = "OAuthRefreshToken"; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/sign-in-scopes-screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/sign-in-scopes-screenshot.gif -------------------------------------------------------------------------------- /packages/visual-editor/src/engine/editor/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export { blank, blankLLMContent } from "./blank.js"; 8 | -------------------------------------------------------------------------------- /packages/types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "outDir": "./dist" 5 | }, 6 | "include": ["src/**/*", "tests/**/*"], 7 | "extends": "@google-labs/tsconfig/base.json" 8 | } 9 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/blog-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/blog-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/blog-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/blog-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/book-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/book-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/book-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/book-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/city-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/city-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/city-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/city-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/learn-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/learn-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/learn-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/learn-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/music-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/music-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/music-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/music-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/social-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/social-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/video-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/video-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/video-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/video-mobile.jpg -------------------------------------------------------------------------------- /templates/blank/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "outDir": "./dist" 5 | }, 6 | "include": ["src/**/*", "tests/**/*"], 7 | "extends": "@google-labs/tsconfig/base.json" 8 | } 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Expected Behavior 2 | 3 | 4 | ## Actual Behavior 5 | 6 | 7 | ## Steps to Reproduce the Problem 8 | 9 | 1. 10 | 1. 11 | 1. 12 | 13 | ## Specifications 14 | 15 | - Version: 16 | - Platform: -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Fixes # 2 | 3 | > It's a good idea to open an issue first for discussion. 4 | 5 | - [ ] Tests pass 6 | - [ ] Appropriate changes to documentation are included in the PR 7 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/business-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/business-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/fashion-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/fashion-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/fashion-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/fashion-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/product-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/product-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/product-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/product-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/social-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/social-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/spelling-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/spelling-mobile.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/remove.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/business-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/business-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/landing/images/carousel/modal/spelling-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breadboard-ai/breadboard/HEAD/packages/visual-editor/public/styles/landing/images/carousel/modal/spelling-desktop.jpg -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/remove-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/src/idb/types.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export interface SupportedDataStore { 8 | supported(): boolean; 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/src/engine/runtime/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export { createPlanRunner, RunnerErrorEvent } from "./harness/index.js"; 8 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/connection/common.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export interface OAuthStateParameter { 8 | nonce: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/types/src/sign-in-info.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export interface SignInInfo { 8 | readonly state: Promise<"signedin" | "signedout">; 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-drop-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/send-ui.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/send.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/README.md: -------------------------------------------------------------------------------- 1 | # Icons 2 | 3 | These icons are from [Material Design Icons](https://fonts.google.com/icons), and are licensed under [Apache 2.0](https://github.com/google/material-design-icons/blob/master/LICENSE). 4 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/add.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-drop-down-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-right-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/play-arrow-filled-ui.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/play-arrow-filled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/send-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/elements/connection/connection-common.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export interface OAuthStateParameter { 8 | nonce: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/add-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/play-filled-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/pause-filled.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/play-arrow-filled-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/src/particles/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export type * from "./types.js"; 8 | export * from "./utils.js"; 9 | export * from "./tree.js"; 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/add-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/value-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/pause-filled-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/dehaze.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/add-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/value-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/maximize.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/minimize.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/next.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/events/base.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export interface BaseEventDetail { 8 | readonly eventType: EventType; 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/before.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/collapse-content.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/collapse.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/dehaze-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/expand-content.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/expand.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/maximize-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/minimize-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/next-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/sort-by.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/before-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/check.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/collapse-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/expand-content-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/expand-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/sort-by-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/value.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20-slim 2 | WORKDIR /breadboard 3 | 4 | COPY / . 5 | RUN npm clean-install 6 | 7 | ENV NODE_ENV="production" 8 | ARG VITE_BOARD_SERVICE="drive:" 9 | 10 | WORKDIR packages/unified-server 11 | RUN npm run build 12 | 13 | CMD ["node", "dist/src/main.js"] 14 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/collapse-content-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keyboard-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-back.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/check-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keyboard-arrow-down-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/move-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/move-up.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/value-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/menu-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/move-down-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/move-up-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/arrow-back-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@google-labs/tsconfig/base.json", 3 | "files": [], 4 | "references": [ 5 | { "path": "packages/types" }, 6 | { "path": "packages/utils" }, 7 | { "path": "packages/unified-server" }, 8 | { "path": "packages/visual-editor" } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /core/tsconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@google-labs/tsconfig", 3 | "publishConfig": { 4 | "registry": "https://wombat-dressing-room.appspot.com" 5 | }, 6 | "description": "Repo-specific configuration for all TypeScript projects", 7 | "version": "0.0.2", 8 | "private": true 9 | } 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/edge-connector.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/check-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/types/src/result.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export type Result = 8 | | { 9 | success: false; 10 | error: string; 11 | } 12 | | { 13 | success: true; 14 | result: R; 15 | }; 16 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/edge-connector-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/check-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | To report a security issue, please use [https://g.co/vulnz](https://g.co/vulnz). 2 | We use g.co/vulnz for our intake, and do coordination and disclosure here on 3 | GitHub (including using GitHub Security Advisory). The Google Security Team will 4 | respond within 5 working days of your report on g.co/vulnz. 5 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keep-filled.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/text.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/styles/app-sandbox.css: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | #app-sandbox-inner-iframe { 8 | width: 100vw; 9 | height: 100vh; 10 | border: none; 11 | position: fixed; 12 | top: 0; 13 | left: 0; 14 | } 15 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/text-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keep-filled-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/text-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/close.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/text-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/close-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/close-ui.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/step-next.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/utils/json-stringify.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export function jsonStringify(title: string) { 8 | const stringified = JSON.stringify(title); 9 | return stringified.slice(1, stringified.length - 1); 10 | } 11 | -------------------------------------------------------------------------------- /packages/visual-editor/eval/sets/data/timer.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const title = "Timer"; 8 | 9 | export const objective = `Build a timer app that allows you to set the exact amount of time left with a start, stop, and reset button`; 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/resume.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/step-next-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/elements/step-editor/camera.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | import { customElement } from "lit/decorators.js"; 7 | import { Box } from "./box.js"; 8 | 9 | @customElement("bb-camera") 10 | export class Camera extends Box {} 11 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/continue.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/fetch-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/responsive-layout.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/resume-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/resume-ui.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/view-real-size.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/constants/constants.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2023 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const MAIN_BOARD_ID = "Main board"; 8 | 9 | export const COMMAND_SET_GRAPH_EDITOR = "graph-editor"; 10 | export const COMMAND_SET_MODULE_EDITOR = "module-editor"; 11 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/elements/step-editor/constants.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const GRID_SIZE = 20; 8 | export const DATA_TYPE = "text/plain"; 9 | export const MOVE_GRAPH_ID = "$move-graph"; 10 | export const TOOLBAR_CLEARANCE = 100; 11 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/continue-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/eject.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/view-real-size-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/elements/step-editor/utils/clamp.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export function clamp(value: number, min: number, max: number) { 8 | if (value > max) return max; 9 | if (value < min) return min; 10 | return value; 11 | } 12 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/strings/en_US/kit-selector.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { LanguagePackEntry } from "../../types/types.js"; 8 | 9 | export default { 10 | LABEL_TITLE: { 11 | str: "Library", 12 | }, 13 | } as LanguagePackEntry; 14 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/styles/host/match.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { css, CSSResultGroup } from "lit"; 8 | 9 | export const match = css` 10 | :host { 11 | color-scheme: var(--color-scheme, inherit); 12 | } 13 | ` as CSSResultGroup; 14 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Docs 2 | 3 | The documentation in this folder are for management of the breadboard project, 4 | explaining how to [contribute](./contributing.md) and what the [code of conduct](./code-of-conduct.md) is. 5 | 6 | Documentation for how to create boards can be found on the [Breadboard website](https://breadboard-ai.github.io/breadboard/docs/) 7 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/code.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/eject-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/enhance.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/fetch-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/unfold-less.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/a2/agent/now.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { Signal } from "signal-polyfill"; 8 | 9 | export { now }; 10 | 11 | const now = new Signal.State(performance.now()); 12 | 13 | setInterval(() => now.set(performance.now()), 500); 14 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/elements/step-editor/utils/to-grid-size.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { GRID_SIZE } from "../constants.js"; 8 | 9 | export function toGridSize(value: number) { 10 | return Math.round(value / GRID_SIZE) * GRID_SIZE; 11 | } 12 | -------------------------------------------------------------------------------- /packages/visual-editor/eval/sets/data/menu-planner.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export const title = "Menu Planner"; 8 | 9 | export const objective = `create an app that creates high protein simple vegetarian meals with a recipe based on some traits that i enter`; 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/code-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/enhance-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keep.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/unfold-less-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/particles-ui/context/theme.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import { type UITheme } from "../types/types.js"; 9 | 10 | export const themeContext = createContext("UITheme"); 11 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/keep-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/sound.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/sound-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/styles/host/effects.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { css, CSSResultGroup } from "lit"; 8 | 9 | export const effects = css` 10 | .side-shadow { 11 | box-shadow: -4px 4px 6px 3px rgba(0, 0, 0, 0.08); 12 | } 13 | ` as CSSResultGroup; 14 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/up-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/ui-state.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import { UI } from "../state/types.js"; 9 | 10 | /** The current global UI state. */ 11 | export const uiStateContext = createContext("bb-ui-state"); 12 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/styles/host/behavior.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { css, CSSResultGroup } from "lit"; 8 | 9 | export const behavior = css` 10 | .cursor { 11 | &:not([disabled]) { 12 | cursor: pointer; 13 | } 14 | } 15 | ` as CSSResultGroup; 16 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/pending.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/up-down-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/project-run.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import { ProjectRun } from "../state/index.js"; 9 | 10 | export const projectRunContext = createContext( 11 | "bb-project-run" 12 | ); 13 | -------------------------------------------------------------------------------- /packages/unified-server/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, mergeConfig } from "vite"; 2 | import visualEditorConfigFn from "../visual-editor/vite.config.ts"; 3 | 4 | export default defineConfig(async (env) => { 5 | const visualEditorConfig = await visualEditorConfigFn(env); 6 | return mergeConfig(visualEditorConfig, { 7 | root: "../visual-editor", 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/unfold-more.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/pending-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/unfold-more-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/tos.html: -------------------------------------------------------------------------------- 1 |

2 | The Google Terms and 3 | Use Policy 6 | apply. The Privacy Notice describes how your data is handled. Your 7 | conversations and browsing data may be reviewed and used to improve Google AI. 8 |

9 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/settings-helper.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import type { SettingsHelper } from "../types/types.js"; 9 | 10 | export const settingsHelperContext = 11 | createContext("bb-settings-helper"); 12 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/events/app/app.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { BaseEventDetail } from "../base.js"; 8 | 9 | type Namespace = "app"; 10 | 11 | export interface Fullscreen extends BaseEventDetail<`${Namespace}.fullscreen`> { 12 | readonly action: "activate" | "deactivate"; 13 | } 14 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/state/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | export * from "./types.js"; 8 | export { createProjectState } from "./project.js"; 9 | export { createUIState } from "./ui.js"; 10 | export type * from "./organizer.js"; 11 | export { createLiteModeState } from "./lite-mode.js"; 12 | -------------------------------------------------------------------------------- /packages/unified-server/src/blobs/errors.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | // TODO expressify 8 | 9 | import { ServerResponse } from "http"; 10 | 11 | export const badRequest = (res: ServerResponse, error: string) => { 12 | res.writeHead(400, "Bad Request"); 13 | res.end(error || "Bad Request"); 14 | }; 15 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/embedder.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import type { EmbedState } from "@breadboard-ai/types/embedder.js"; 9 | 10 | export const embedderContext = createContext( 11 | "bb-embedder" 12 | ); 13 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/merge-type.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/action-tracker-context.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import { ActionTracker } from "../types/types.js"; 9 | 10 | export const actionTrackerContext = createContext( 11 | "action-tracker" 12 | ); 13 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/merge-type-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /experiments/screens/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // Your other configuration, such as extends, parser, etc. 3 | // For example: 4 | // extends: ['eslint:recommended'], 5 | // parser: '@babel/eslint-parser', 6 | 7 | rules: { 8 | // Other rules you have configured... 9 | 10 | // Disable the 'no-constant-condition' rule 11 | "no-constant-condition": "off", 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/visual-editor/oauth/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirecting ... 5 | 6 | 7 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/lan.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/lan-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/fetch.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/merge-type-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/ui/contexts/project-state.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { createContext } from "@lit/context"; 8 | import { Project } from "../state/types.js"; 9 | 10 | /** The current global UI state. */ 11 | export const projectStateContext = createContext( 12 | "bb-project-state" 13 | ); 14 | -------------------------------------------------------------------------------- /packages/unified-server/src/blobs/types.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import type { Outcome } from "@breadboard-ai/types"; 8 | 9 | export type BlobStore = { 10 | getBlob(blobId: string): Promise>; 11 | }; 12 | 13 | export type BlobStoreGetResult = { 14 | data: Buffer; 15 | mimeType?: string; 16 | }; 17 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/graph/merge-type-inverted-48px.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/public/third_party/icons/multimodal.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /packages/visual-editor/src/engine/inspector/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2024 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import type { GraphStoreArgs, MutableGraphStore } from "@breadboard-ai/types"; 8 | import { GraphStore } from "./graph-store.js"; 9 | 10 | export function createGraphStore(args: GraphStoreArgs): MutableGraphStore { 11 | return new GraphStore(args); 12 | } 13 | -------------------------------------------------------------------------------- /experiments/logic/src/test-all.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { cases } from "./cases"; 8 | import { runTest } from "./run-test"; 9 | 10 | await Promise.all( 11 | cases.map(async (c) => { 12 | const result = await runTest(c); 13 | for (const item of result.logs) { 14 | console.log(...item); 15 | } 16 | }) 17 | ); 18 | -------------------------------------------------------------------------------- /packages/utils/src/stubs.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2025 Google LLC 4 | * SPDX-License-Identifier: Apache-2.0 5 | */ 6 | 7 | import { NodeDescriberResult } from "@breadboard-ai/types"; 8 | 9 | export { emptyDescriberResult }; 10 | 11 | function emptyDescriberResult(): NodeDescriberResult { 12 | return { 13 | inputSchema: { type: "object" }, 14 | outputSchema: { type: "object" }, 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /packages/visual-editor/language.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Breadboard - Language Defaults 6 | 7 | 8 |

 9 |   
13 | 
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/fetch-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/tree.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/contexts/board-server.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { createContext } from "@lit/context";
 8 | import { type BoardServer } from "@breadboard-ai/types";
 9 | 
10 | /** The current board server. */
11 | export const boardServerContext = createContext(
12 |   "bb-board-server"
13 | );
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/vite-env.d.ts:
--------------------------------------------------------------------------------
 1 | /// 
 2 | 
 3 | declare const MAIN_ICON: string;
 4 | declare const ASSET_PACK: string;
 5 | declare const LANGUAGE_PACK: unknown;
 6 | declare const GIT_HASH: string;
 7 | declare const FONT_PACK: string;
 8 | declare const FONT_LINK: string;
 9 | declare const BOARD_SERVICE: string;
10 | declare const ENABLE_TOS: boolean;
11 | declare const TOS_HTML: string;
12 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/grid-view.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/multimodal-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/reset-nodes.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/tree-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/youtube.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/fork-down-right-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
7 | 
8 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/jsonata-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/reset-nodes-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/youtube-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/state/step-editor.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { StepEditor, StepEditorSurface } from "./types.js";
 8 | import { signal } from "signal-utils";
 9 | 
10 | export { StepEditorImpl };
11 | 
12 | class StepEditorImpl implements StepEditor {
13 |   @signal
14 |   accessor surface: StepEditorSurface | null = null;
15 | }
16 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/fork-down-right.svg:
--------------------------------------------------------------------------------
1 | 
3 |     
7 | 
8 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/jsonata-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/grid-view-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/code-blocks-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/play-filled-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/agent/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as agentMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: agentMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/engine/loader/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2024 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { Loader } from "./loader.js";
 8 | import { GraphLoader, BoardServer } from "@breadboard-ai/types";
 9 | 
10 | export const createLoader = (boardServers?: BoardServer[]): GraphLoader => {
11 |   const servers = [...(boardServers ?? [])];
12 |   return new Loader(servers);
13 | };
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/contexts/guest-configuration.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import type { GuestConfiguration } from "@breadboard-ai/types/opal-shell-protocol.js";
 8 | import { createContext } from "@lit/context";
 9 | 
10 | export const guestConfigurationContext = createContext<
11 |   GuestConfiguration | undefined
12 | >("bb-guest-configuration");
13 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/is-ctrl-command.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export function isCtrlCommand(evt: PointerEvent | KeyboardEvent | WheelEvent) {
 8 |   const isMac = isMacPlatform();
 9 |   return isMac ? evt.metaKey : evt.ctrlKey;
10 | }
11 | 
12 | export function isMacPlatform() {
13 |   return navigator.platform.indexOf("Mac") === 0;
14 | }
15 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-multimodal-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/code-blocks-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/warning.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/autoname/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as autonameMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: autonameMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/generate/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as generateMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: generateMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/state/renderer.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { AssetPath } from "@breadboard-ai/types";
 8 | import { GraphAsset, RendererState } from "./types.js";
 9 | 
10 | export { RendererStateImpl };
11 | 
12 | class RendererStateImpl implements RendererState {
13 |   constructor(public readonly graphAssets: Map) {}
14 | }
15 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-multimodal-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/engine/runtime/harness/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2023 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { HarnessRunner, RunConfig } from "@breadboard-ai/types";
 8 | import { PlanRunner } from "./plan-runner.js";
 9 | export { RunnerErrorEvent } from "./events.js";
10 | 
11 | export function createPlanRunner(config: RunConfig): HarnessRunner {
12 |   return new PlanRunner(config);
13 | }
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/contexts/consent-manager.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { createContext } from "@lit/context";
 8 | import { type ConsentManager } from "../utils/consent-manager.js";
 9 | 
10 | /** The consent manager for the project. */
11 | export const consentManagerContext = createContext(
12 |   "bb-consent-manager"
13 | );
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/contexts/google-drive-client-context.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { createContext } from "@lit/context";
 8 | import { type GoogleDriveClient } from "@breadboard-ai/utils/google-drive/google-drive-client.js";
 9 | 
10 | export const googleDriveClientContext = createContext<
11 |   GoogleDriveClient | undefined
12 | >("GoogleDriveClient");
13 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/strings/en_US/command-palette.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { LanguagePackEntry } from "../../types/types.js";
 8 | 
 9 | export default {
10 |   // Commands.
11 |   // Statuses.
12 |   // Labels.
13 |   LABEL_NO_OPTIONS: {
14 |     str: "No options available",
15 |   },
16 | 
17 |   // Queries.
18 |   // Errors.
19 | } as LanguagePackEntry;
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/styles/multi-line-input.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { css } from "lit";
 8 | 
 9 | export const multiLineInputStyles = css`
10 |   .bb-multi-line-input {
11 |     border: 1px solid #3399ff;
12 |     border-radius: 4px;
13 |     padding: 8px;
14 |     font-size: 14px;
15 |     resize: none;
16 |     font-family: inherit;
17 |   }
18 | `;
19 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/deep-research/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as deepResearchMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: deepResearchMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/redo.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/audio-generator/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as audioGeneratorMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: audioGeneratorMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/music-generator/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as musicGeneratorMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: musicGeneratorMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/video-generator/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as videoGeneratorMain from "./main.js";
 8 | 
 9 | import descriptor from "./bgl.json" with { type: "json" };
10 | import { createBgl } from "../create-bgl.js";
11 | 
12 | export const exports = {
13 |   main: videoGeneratorMain,
14 | };
15 | 
16 | export const bgl = createBgl(descriptor, exports);
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/particles-ui/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export * as Elements from "./elements/index.js";
 8 | export * as Styles from "./styles/index.js";
 9 | export * as Utils from "./utils/utils.js";
10 | export * as Context from "./context/theme.js";
11 | 
12 | export type * as Colors from "./types/colors.js";
13 | export type * as Types from "./types/types.js";
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/rerun.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/undo.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/google-drive/types.ts:
--------------------------------------------------------------------------------
 1 | export type ConnectorConfiguration = {
 2 |   file?: {
 3 |     preview: string;
 4 |     id: string;
 5 |     mimeType: string;
 6 |   };
 7 | };
 8 | 
 9 | export type SimpleSlide = {
10 |   title: string;
11 |   subtitle?: string;
12 |   body?: string;
13 | };
14 | 
15 | export type SimplePresentation = {
16 |   slides: SimpleSlide[];
17 | };
18 | 
19 | export type SheetValues = {
20 |   spreadsheet_values: unknown[][];
21 | };
22 | 


--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
 1 | # Disable automatically running postinstall etc. scripts on install.
 2 | #
 3 | # This reduces the npm attack surface slightly, because now only
 4 | # deps that are actually reachable through our own executed code
 5 | # paths have an opportunity to execute code.
 6 | #
 7 | # If we find a dependency that has a required postinstall step,
 8 | # we should create and document our own manual post-install script
 9 | # that runs just the required ones.
10 | ignore-scripts=true
11 | 
12 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/redo-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/remix.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/rerun-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/contexts/contexts.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2024 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export { globalConfigContext, type GlobalConfig } from "./global-config.js";
 8 | export { settingsHelperContext } from "./settings-helper.js";
 9 | export { embedderContext } from "./embedder.js";
10 | export { projectRunContext } from "./project-run.js";
11 | export { projectStateContext } from "./project-state.js";
12 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/strings/en_US/audio-handler.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { LanguagePackEntry } from "../../types/types.js";
 8 | 
 9 | export default {
10 |   // Commands.
11 |   COMMAND_HOLD_TO_RECORD: {
12 |     str: "Hold to Record",
13 |   },
14 | 
15 |   // Statuses.
16 | 
17 |   // Labels.
18 | 
19 |   // Queries.
20 | 
21 |   // Errors.
22 | } as LanguagePackEntry;
23 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/styles/spin-animation.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { css } from "lit";
 8 | 
 9 | export const spinAnimationStyles = css`
10 |   .spin {
11 |     animation: spin 1.5s linear infinite;
12 |   }
13 |   @keyframes spin {
14 |     from {
15 |       transform: rotate(0deg);
16 |     }
17 |     to {
18 |       transform: rotate(360deg);
19 |     }
20 |   }
21 | `;
22 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/remix-inverted.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/undo-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/step.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/utils/src/outcome.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { Outcome } from "@breadboard-ai/types";
 8 | 
 9 | export { ok, err };
10 | 
11 | function ok(o: Outcome>): o is Awaited {
12 |   return !(o && typeof o === "object" && "$error" in o);
13 | }
14 | 
15 | function err($error: string, metadata?: Record) {
16 |   return { $error, ...(metadata && { metadata }) };
17 | }
18 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/copy-to-clipboard.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/step-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/vital-signs.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/particles-ui/styles/opacity.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { css, CSSResultGroup, unsafeCSS } from "lit";
 8 | 
 9 | export const opacity = css`
10 |   ${unsafeCSS(
11 |     new Array(21)
12 |       .fill(0)
13 |       .map((_, idx) => {
14 |         return `.opacity-el-${idx * 5} { opacity: ${idx / 20}; }`;
15 |       })
16 |       .join("\n")
17 |   )}
18 | ` as CSSResultGroup;
19 | 


--------------------------------------------------------------------------------
/experiments/screens/index.html:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |   
 4 |     
 5 |     
 6 |     Screens Demo
 7 |   
 8 |   
15 |   
16 |     
17 |     
18 |   
19 | 
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/app-sandbox.html:
--------------------------------------------------------------------------------
 1 | 
 2 | 
 3 |   
 4 |   
 5 |   
 6 | 
 7 | 
 8 |   
12 |   
16 | 
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/copy-to-clipboard-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/download.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/google-drive-outline.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/vital-signs-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/styles/floating-panel.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { css } from "lit";
 8 | 
 9 | export const floatingPanelStyles = css`
10 |   .bb-floating-panel {
11 |     --background-size: 16px;
12 |     background: var(--light-dark-n-100);
13 |     box-shadow: var(--bb-elevation-1);
14 |     border-radius: var(--bb-grid-size-2);
15 |     padding: var(--bb-grid-size-3);
16 |   }
17 | `;
18 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/download-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/google-drive-outline-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/google-drive-outline.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/module-id.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2024 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export function getModuleId() {
 8 |   let moduleId;
 9 | 
10 |   do {
11 |     moduleId = prompt("What would you like to call this module?");
12 |     if (!moduleId) {
13 |       return;
14 |     }
15 |     // Check that the new module name is valid.
16 |   } while (!/^[A-Za-z0-9_\\-\\.]+$/gim.test(moduleId));
17 | 
18 |   return moduleId;
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/google-drive-outline-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/file-export.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/strings/en_US/workspace-outline.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { LanguagePackEntry } from "../../types/types.js";
 8 | 
 9 | export default {
10 |   // Commands.
11 |   COMMAND_CREATE: {
12 |     str: "Create",
13 |   },
14 | 
15 |   // Statuses.
16 | 
17 |   // Labels.
18 |   LABEL_SEARCH: {
19 |     str: "Search",
20 |   },
21 | 
22 |   // Queries.
23 |   // Errors.
24 | } as LanguagePackEntry;
25 | 


--------------------------------------------------------------------------------
/packages/visual-editor/eval/time.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export { time, timeEnd };
 8 | 
 9 | const times = new Map();
10 | function time(label: string) {
11 |   times.set(label, performance.now());
12 | }
13 | 
14 | function timeEnd(label: string) {
15 |   if (!times.has(label)) return 0;
16 |   const duration = performance.now() - (times.get(label) ?? 0);
17 |   times.delete(label);
18 |   return duration;
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 4 |     
 6 |     
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/chat-mirror.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/file-export-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/login.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/logout.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress-inverted.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 4 |     
 6 |     
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress-ui.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 4 |     
 6 |     
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/search-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/login-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/logout-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress-ui-inverted.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 4 |     
 6 |     
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/delete.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/search-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress-neutral.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 4 |     
 6 |     
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/delete-ui.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/secrets-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/styles/text-input-with-icon.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { css } from "lit";
 8 | 
 9 | export const textInputWithIcon = css`
10 |   .bb-text-input-with-icon {
11 |     background: var(--bb-icon, var(--bb-icon-help)) no-repeat right 10px bottom
12 |       50%;
13 |     border: 1px solid currentColor;
14 |     border-radius: 100px;
15 |     padding: 10px 42px 10px 24px;
16 |     font-size: 16px;
17 |   }
18 | `;
19 | 


--------------------------------------------------------------------------------
/packages/utils/src/llm-content.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { JSONPart, JsonSerializable, LLMContent } from "@breadboard-ai/types";
 8 | 
 9 | export { fromJson, toJson };
10 | 
11 | function toJson(data: LLMContent[] | undefined): T | undefined {
12 |   return (data?.at(0)?.parts?.at(0) as JSONPart)?.json as T;
13 | }
14 | 
15 | function fromJson(json: T): LLMContent[] {
16 |   return [{ parts: [{ json: json as JsonSerializable }] }];
17 | }
18 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/delete-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/draft.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/secrets-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/graph-is-empty.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { GraphDescriptor } from "@breadboard-ai/types";
 8 | 
 9 | export function isEmpty(graph: GraphDescriptor | null): boolean {
10 |   if (!graph) {
11 |     return true;
12 |   }
13 | 
14 |   return (
15 |     (graph.nodes ?? []).length === 0 &&
16 |     Object.keys(graph.assets ?? {}).length === 0 &&
17 |     Object.keys(graph.graphs ?? {}).length === 0
18 |   );
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/confirm.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/jsonata.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/refresh.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/styles/styles.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export * as HostColorsBase from "./host/base-colors.js";
 8 | export * as HostColorsMaterial from "./host/material-colors.js";
 9 | export * as HostType from "./host/type.js";
10 | export * as HostBehavior from "./host/behavior.js";
11 | export * as HostEffects from "./host/effects.js";
12 | export * as HostIcons from "./icons.js";
13 | export * as HostColorScheme from "./host/match.js";
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/blank-board.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import * as Strings from "../strings/helper.js";
 8 | import { blank } from "../../engine/editor/blank.js";
 9 | 
10 | const GlobalStrings = Strings.forSection("Global");
11 | 
12 | export function blankBoard() {
13 |   const blankBoard = blank();
14 |   const title =
15 |     GlobalStrings.from("TITLE_UNTITLED_PROJECT") || blankBoard.title;
16 |   return { ...blank(), title };
17 | }
18 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/confirm-ui.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/draft-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/jsonata-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/refresh-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/verified.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/particles-ui/styles/index.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { behavior } from "./behavior.js";
 8 | import { border } from "./border.js";
 9 | import { colors } from "./colors.js";
10 | import { icons } from "./icons.js";
11 | import { layout } from "./layout.js";
12 | import { opacity } from "./opacity.js";
13 | import { type } from "./type.js";
14 | 
15 | export const all = [behavior, border, colors, icons, layout, opacity, type];
16 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/elements/shape/helpers/utils.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export function clamp(v: number, min = 0, max = 1) {
 8 |   if (v <= min) return min;
 9 |   if (v >= max) return max;
10 |   return v;
11 | }
12 | 
13 | export function runWhenIdle(callback: IdleRequestCallback) {
14 |   if ("requestIdleCallback" in window) {
15 |     window.requestIdleCallback(callback);
16 |     return;
17 |   }
18 | 
19 |   setTimeout(callback, 1);
20 | }
21 | 


--------------------------------------------------------------------------------
/packages/unified-server/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "forceConsistentCasingInFileNames": true,
 4 |     "incremental": true,
 5 |     "lib": ["ES2022"],
 6 |     "module": "NodeNext",
 7 |     "rootDir": ".",
 8 |     "outDir": "./dist",
 9 |     "tsBuildInfoFile": "./dist/server.tsbuildinfo",
10 |     "preserveWatchOutput": true,
11 |     "resolveJsonModule": true,
12 |     "skipLibCheck": true,
13 |     "sourceMap": true,
14 |     "strict": true,
15 |     "target": "ES2022"
16 |   },
17 |   "include": ["src/**/*", "tests/**/*"]
18 | }
19 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/confirm-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/flowchart.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/verified-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/edit.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/flowchart-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/list.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/engine/inspector/utils.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { GraphIdentifier } from "@breadboard-ai/types";
 8 | 
 9 | export { isModule, getModuleId };
10 | 
11 | const MODULE_EXPORT_PREFIX = "#module:";
12 | 
13 | function isModule(graphId: GraphIdentifier) {
14 |   return graphId.startsWith(MODULE_EXPORT_PREFIX);
15 | }
16 | 
17 | function getModuleId(graphId: GraphIdentifier) {
18 |   return graphId.slice(MODULE_EXPORT_PREFIX.length);
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/edit-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/edit-ui.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/list-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/images/progress-md.svg:
--------------------------------------------------------------------------------
 1 | 
 2 |   
 3 |     
 4 |       
 5 |       
 6 |       
 7 |     
 8 |   
 9 |   
10 | 
11 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/strings/en_US/focus-editor.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { LanguagePackEntry } from "../../types/types.js";
 8 | 
 9 | export default {
10 |   // Commands.
11 |   COMMAND_RUN_ISOLATED: {
12 |     str: "Run this Step",
13 |   },
14 | 
15 |   // Statuses.
16 | 
17 |   // Labels.
18 |   LABEL_NO_OUTPUTS: {
19 |     str: "Run the flow to see the outputs in this panel.",
20 |   },
21 | 
22 |   // Queries.
23 |   // Errors.
24 | } as LanguagePackEntry;
25 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/model.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/experiments/agent/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "vfs",
 3 |   "private": true,
 4 |   "version": "1.0.0",
 5 |   "type": "module",
 6 |   "main": "index.js",
 7 |   "scripts": {
 8 |     "dev": "tsx src/index.ts"
 9 |   },
10 |   "keywords": [],
11 |   "author": "",
12 |   "license": "Apache-2.0",
13 |   "description": "",
14 |   "dependencies": {
15 |     "@google/genai": "^1.27.0",
16 |     "dotenv": "^17.2.3",
17 |     "mime": "^4.1.0",
18 |     "zod": "^3.24.1",
19 |     "zod-to-json-schema": "^3.24.6"
20 |   },
21 |   "devDependencies": {
22 |     "tsx": "^4.20.6"
23 |   }
24 | }
25 | 


--------------------------------------------------------------------------------
/packages/visual-editor/eval/sets/data/prompting-tutor.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export const title = "Prompting Tutor";
 8 | 
 9 | export const objective = `An app that presents a user with two options: 'basic prompting' or 'advanced prompting'. Upon the user's selection, the app should generate and display an interactive tutorial on the chosen topic, followed by an interactive quiz. After the user completes the quiz, the app should calculate and display a score based on their performance`;
10 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/edit-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/model-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/state/renderer-run-state.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { NodeRunState } from "@breadboard-ai/types";
 8 | import { EdgeRunState, RendererRunState } from "./types.js";
 9 | import { SignalMap } from "signal-utils/map";
10 | 
11 | export { ReactiveRendererRunState };
12 | 
13 | class ReactiveRendererRunState implements RendererRunState {
14 |   nodes: Map = new SignalMap();
15 |   edges: Map = new SignalMap();
16 | }
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/edit-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/go-over-list/system-instruction.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @fileoverview Default system instruction for the various prompts.
 3 |  */
 4 | 
 5 | import { LLMContent } from "@breadboard-ai/types";
 6 | import { llm } from "../a2/utils.js";
 7 | 
 8 | export { defaultSystemInstruction };
 9 | 
10 | function defaultSystemInstruction(): LLMContent {
11 |   return llm`You are working as part of an AI system, so no chit-chat and no explaining what you're doing and why.
12 | DO NOT start with "Okay", or "Alright" or any preambles. Just the output, please.`.asContent();
13 | }
14 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/engine/editor/operations/error.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2024 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import type { GraphIdentifier, SingleEditResult } from "@breadboard-ai/types";
 8 | 
 9 | export { error, errorNoInspect };
10 | 
11 | function errorNoInspect(graphId: GraphIdentifier) {
12 |   return error(`Unable to inspect graph with the id of "${graphId}"`);
13 | }
14 | 
15 | function error(message: string): SingleEditResult {
16 |   return {
17 |     success: false,
18 |     error: message,
19 |   };
20 | }
21 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/elements/step-editor/utils/to-css-matrix.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export function toCSSMatrix(m: DOMMatrix, force2D = false): string {
 8 |   if (force2D) {
 9 |     return `matrix(${m.a},${m.b},${m.c},${m.d},${m.e},${m.f})`;
10 |   }
11 | 
12 |   return `matrix3d(${m.m11}, ${m.m12}, ${m.m13}, ${m.m14},
13 |       ${m.m21}, ${m.m22}, ${m.m23}, ${m.m24},
14 |       ${m.m31}, ${m.m32}, ${m.m33}, ${m.m34},
15 |       ${m.m41}, ${m.m42}, ${m.m43}, ${m.m44})`;
16 | }
17 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/anchor.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/do-not-disturb.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/open-new.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/table-rows.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/anchor-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/open-new-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/sunny.svg:
--------------------------------------------------------------------------------
1 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/table-rows-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/a2/create-bgl.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { GraphDescriptor } from "@breadboard-ai/types";
 8 | 
 9 | export { createBgl };
10 | 
11 | function createBgl(g: G, i: Record): GraphDescriptor {
12 |   const graph = structuredClone(g) as GraphDescriptor;
13 | 
14 |   graph.modules = Object.fromEntries(
15 |     Object.keys(i).map((id) => [
16 |       id,
17 |       { code: `throw new Error("Unreachable code")` },
18 |     ])
19 |   );
20 |   return graph;
21 | }
22 | 


--------------------------------------------------------------------------------
/experiments/screens/src/runner.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | /// 
 8 | 
 9 | // import adventureGame from "../out/adventure-game";
10 | import app from "../out/blog-post-writer";
11 | import { Invoke } from "./types";
12 | import { CapabilitiesImpl } from "./capabilities";
13 | import "./ui/test-harness";
14 | 
15 | async function run(app: Invoke) {
16 |   const appCapabilities = new CapabilitiesImpl();
17 |   app(appCapabilities);
18 | }
19 | 
20 | run(app as unknown as Invoke);
21 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/anchor-active.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/do-not-disturb-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/experiment.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/file-add.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/http.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/experiments/logic/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "target": "ES2022",
 4 |     "module": "ESNext",
 5 |     "moduleResolution": "node",
 6 |     "strict": true,
 7 |     "esModuleInterop": true,
 8 |     "skipLibCheck": true,
 9 |     "forceConsistentCasingInFileNames": true,
10 |     "noEmit": true,
11 |     "allowJs": true,
12 |     "checkJs": false,
13 |     "resolveJsonModule": true,
14 |     "isolatedModules": true,
15 |     "lib": ["ESNext", "DOM"],
16 |     "experimentalDecorators": true,
17 |     "useDefineForClassFields": false
18 |   },
19 |   "include": ["src/**/*.ts"]
20 | }
21 | 


--------------------------------------------------------------------------------
/experiments/screens/tsconfig.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "compilerOptions": {
 3 |     "target": "ES2022",
 4 |     "module": "ESNext",
 5 |     "moduleResolution": "node",
 6 |     "strict": true,
 7 |     "esModuleInterop": true,
 8 |     "skipLibCheck": true,
 9 |     "forceConsistentCasingInFileNames": true,
10 |     "noEmit": true,
11 |     "allowJs": true,
12 |     "checkJs": false,
13 |     "resolveJsonModule": true,
14 |     "isolatedModules": true,
15 |     "lib": ["ESNext", "DOM"],
16 |     "experimentalDecorators": true,
17 |     "useDefineForClassFields": false
18 |   },
19 |   "include": ["src/**/*.ts"]
20 | }
21 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/add-image.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/comment.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/experiment-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-image-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/http-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/play-filled.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/unified-server/src/types.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2024 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export interface ServerConfig {
 8 |   hostname: string;
 9 |   port: number;
10 |   /**
11 |    * The public-facing URL of the server, which
12 |    * will be different from the `hostname` when the
13 |    * server is hosted behind a reverse proxy
14 |    * (e.g. Cloud Run or Google App Engine).
15 |    * Overrides the value of the `url` field in the
16 |    * server info API response.
17 |    */
18 |   serverUrl?: string;
19 |   storageBucket?: string;
20 | }
21 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/comment-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/file-add-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/play-filled-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/add-image-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-image-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/table-rows-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/guest-action-tracker.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | import { OpalShellHostProtocol } from "@breadboard-ai/types/opal-shell-protocol.js";
 8 | import { ActionTrackerBase } from "./action-event-sender.js";
 9 | 
10 | export { GuestActionTracker };
11 | 
12 | class GuestActionTracker extends ActionTrackerBase {
13 |   constructor(host: OpalShellHostProtocol) {
14 |     super(
15 |       (action, params) => host.trackAction(action, params),
16 |       Promise.resolve()
17 |     );
18 |   }
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/.vscode/launch.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   // Use IntelliSense to learn about possible attributes.
 3 |   // Hover to view descriptions of existing attributes.
 4 |   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
 5 |   "version": "0.2.0",
 6 |   "configurations": [
 7 |     {
 8 |       "type": "chrome",
 9 |       "request": "launch",
10 |       "name": "Debug visual-editor",
11 |       "timeout": 50000,
12 |       "url": "http://localhost:5173",
13 |       "webRoot": "${workspaceFolder}",
14 |       "pathMapping": {
15 |         "@fs": "/"
16 |       }
17 |     }
18 |   ]
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/add-video.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-video-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/table-rows-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/laps.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/eval/sets/data/language-tutor.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export const title = "Language Tutor";
 8 | 
 9 | export const objective = `I want to build an app to help me learn mandarin chinese along with my university course which would include flashcards for the current lessons' words with different types of flashcards for character recognition and character writing, etc. The app should also be able to generate stories I can practice my character reading skills with the words from the current unit woven together`;
10 | 


--------------------------------------------------------------------------------
/packages/visual-editor/eval/sets/data/secret-santa.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export const title = "Secret Santa";
 8 | 
 9 | export const objective = `An app that takes a list of participant names for a Secret Santa exchange as input. The app should then randomly assign each participant another participant to buy a gift for, ensuring no one is assigned themselves. The output should be presented in a way that each participant can privately view their assigned person, with the names of other participants' assignments remaining hidden`;
10 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/add-video-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/add-video-inverted-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/laps-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/replay.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/restart-alt.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/board-id.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | const ARG_NAME = "tab0";
 8 | 
 9 | /**
10 |  * Extract the board URL from a current window HTTP/HTTPS URL.
11 |  *
12 |  * Note that the board URL here may not be a HTTP/HTTPS URL - it could
13 |  * be a Drive URL of the form drive:/12345.
14 |  */
15 | export function getBoardUrlFromCurrentWindow(): string | null {
16 |   const url = new URL(window.location.href);
17 |   const params = new URLSearchParams(url.search);
18 |   return params.get(ARG_NAME);
19 | }
20 | 


--------------------------------------------------------------------------------
/packages/unified-server/.gcloudignore:
--------------------------------------------------------------------------------
 1 | # This file specifies files that are *not* uploaded to Google Cloud
 2 | # using gcloud. It follows the same syntax as .gitignore, with the addition of
 3 | # "#!include" directives (which insert the entries of the given .gitignore-style
 4 | # file at that point).
 5 | #
 6 | # For more information, run:
 7 | #   $ gcloud topic gcloudignore
 8 | #
 9 | .gcloudignore
10 | # If you would like to upload your .git directory, .gitignore file or files
11 | # from your .gitignore file, remove the corresponding line
12 | # below:
13 | .git
14 | .gitignore
15 | 
16 | # Node.js dependencies:
17 | node_modules/


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/replay-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/restart-alt-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/upload.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/elements/step-editor/utils/rect-intersection.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export function intersects(a: DOMRect | null, b: DOMRect | null, padding = 0) {
 8 |   if (!a || !b) {
 9 |     return false;
10 |   }
11 | 
12 |   const aIsAboveB = a.bottom < b.top - padding;
13 |   const aIsBelowB = a.top > b.bottom + padding;
14 |   const aIsToTheLeft = a.right < b.left - padding;
15 |   const aIsToTheRight = a.left > b.right + padding;
16 | 
17 |   return !(aIsAboveB || aIsBelowB || aIsToTheLeft || aIsToTheRight);
18 | }
19 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/dock-to-right.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/upload-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/src/ui/utils/url-pattern-conditional-polyfill.ts:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @license
 3 |  * Copyright 2025 Google LLC
 4 |  * SPDX-License-Identifier: Apache-2.0
 5 |  */
 6 | 
 7 | export {};
 8 | 
 9 | /**
10 |  * The native version of URLPattern if it's available, otherwise a polyfill.
11 |  * URLPattern is Baseline 2025, but let's conditionally polyfill until we're
12 |  * certain a sufficient % of our users doesn't need it.
13 |  *
14 |  * https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API
15 |  */
16 | if (!(globalThis as { URLPattern?: URLPattern }).URLPattern) {
17 |   await import("urlpattern-polyfill");
18 | }
19 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/dock-to-right-inverted.svg:
--------------------------------------------------------------------------------
1 | 
3 |   
5 | 
6 | 


--------------------------------------------------------------------------------
/packages/visual-editor/public/third_party/icons/graph/sunny-48px.svg:
--------------------------------------------------------------------------------
1 | 
2 |   
4 | 


--------------------------------------------------------------------------------