Changelog

What shipped, by day: @molecule/* package releases and molecule.dev changes. RSS

  • minor
    RegisterData<TExtra> and createJWTAuthClient<T, TRegister> accept an app's own registration fields (username, …) at the top level, so requestBody receives exactly the payload the form passed instead of an app casting it.
    @molecule/app-auth@1.5.0
  • minor
    Add AuthState.status and AuthClient.validateSession() for a restored session the server has not yet confirmed, and tokenKey to store the access token under another tool's exact key.
    @molecule/app-auth@1.4.0
  • patch
    - @molecule/api-resource-article: the README now leads with the fact that a scaffold that lists this package already has its tables. - @molecule/api-resource-comment: the README now leads with the fact that a scaffold that lists this package already has its tables. - @molecule/api-resource-follow: the README now leads with the fact that a scaffold that lists this package already has its table. - @molecule/api-resource-reaction: the README now leads with the fact that a scaffold that lists this package already has its table.
    4 packages
    @molecule/api-resource-article@1.1.2@molecule/api-resource-comment@1.1.4@molecule/api-resource-follow@1.0.8@molecule/api-resource-reaction@1.0.5
  • patch
    AuthClientConfig.storage states the trade-off plainly: in-memory is the secure default, and an app whose external contract requires the token at its own key opts in with storage: createBrowserStorageAdapter() plus tokenKey: 'jwtToken'.
    @molecule/app-auth@1.4.1
  • patch
    list_files answers a package catalog, or any listing larger than one tool result, with its entry count and the first names plus a pointer to find_package/read_molecule_doc, instead of thousands of names.
    @molecule/api-ai-tools@1.9.10
  • patch
    streamingBackgroundCommand writes the flags it adds at the end of the suite runner's own arguments — inside a subshell or a brace group, and before a trailing redirection — instead of at the end of the command text, where a flag written after a group's ) was a shell syntax error.
    @molecule/api-ai-tools@1.9.4
  • patch
    A 401/403 trace note now names which side refused the request: no Authorization header means the client never attached the token, a header means the server rejected it.
    @molecule/api-ai-tools@1.9.12
  • patch
    A background command's redirected output is now the redirect of its own foreground statement — a backgrounded process's log or a group's redirect is not mistaken for the run's output — and a quoted target is resolved without its quotes.
    @molecule/api-ai-tools@1.9.7
  • patch
    A command the platform moves to the background no longer keeps the timeout N prefix that was written for the foreground ceiling, and a background run stopped by its own timeout is told to drop that prefix instead of being sent to the background again.
    @molecule/api-ai-tools@1.9.8
  • patch
    A composed "re-run just these" Playwright command now drops every bare spec-file argument, so it runs only the failing tests.
    @molecule/api-ai-tools@1.9.6
  • patch
    A failed test's trace note keeps console warnings — a package's own "logging out" line reaches the note instead of only the browser's resource error.
    @molecule/api-ai-tools@1.9.11
  • patch
    A file-writing tool's diff now counts the lines it actually changed, so a same-length rewrite reports its added and removed lines instead of 0/0, and a content-identical write reports type: "unchanged".
    @molecule/api-ai-tools@1.9.8
  • patch
    A running browser suite whose every failure is a wait for an element the page never painted is now read as one cause — the page renders nothing — so the wait stops it and names the page's own error when the run printed one.
    @molecule/api-ai-tools@1.9.7
  • patch
    Auto-refresh schedules nothing when the API issued no refresh token — a cookie-session API no longer signs the user out while their access token is still valid; only an API 401 or an explicit logout ends the session.
    @molecule/app-auth@1.5.1
  • patch
    Document the 20 bundled font families — including source-sans-3 serving the "Source Sans Pro" family — and say to wire a bond instead of npm-installing a webfont package.
    @molecule/app-fonts-source-sans-3@1.1.2@molecule/app-fonts@1.2.1
  • patch
    Read the output filter a run's own command piped through, so a failure whose detail the pipe cut is reported as that, with the command to re-run without it.
    @molecule/api-ai-tools@1.9.9
  • patch
    Say whether a failed bond accessor ran before the app's bond setup or after it, and name the calling module.
    @molecule/app-bond@1.0.3
  • patch
    Ship a lazy per-language loader.js entry with every companion locale bond, load companion bonds on demand instead of all at once, precache only the app shell, and let bundlers drop unused UI components.
    158 packages
    @molecule/app-i18n-default-react@1.0.3@molecule/app-vite-config-default@1.1.6@molecule/app-ui-react@1.3.4@molecule/app-locales-adjustment-slider@1.0.3@molecule/app-locales-ai-chat@1.0.3@molecule/app-locales-annotation-pin@1.0.3@molecule/app-locales-announcement-bar@1.0.3@molecule/app-locales-audio-player@1.0.3@molecule/app-locales-audio-recorder@1.0.4@molecule/app-locales-auth-shell@1.0.3@molecule/app-locales-auth@1.0.3@molecule/app-locales-author-bio-card@1.0.3@molecule/app-locales-badge@1.0.3@molecule/app-locales-battery@1.0.4@molecule/app-locales-bias-indicator@1.0.3@molecule/app-locales-billing@1.0.3@molecule/app-locales-biometrics@1.0.3@molecule/app-locales-bluetooth@1.0.3@molecule/app-locales-brightness@1.0.3@molecule/app-locales-bulk-action-toolbar@1.0.3@molecule/app-locales-calendar@1.0.3@molecule/app-locales-camera@1.0.3@molecule/app-locales-canvas-engine@1.0.3@molecule/app-locales-carousel@1.0.4@molecule/app-locales-charts@1.0.3@molecule/app-locales-class-schedule@1.0.4@molecule/app-locales-clipboard@1.0.3@molecule/app-locales-code-block@1.0.3@molecule/app-locales-code-editor@1.0.3@molecule/app-locales-color-picker@1.0.3@molecule/app-locales-common@1.0.5@molecule/app-locales-contact-form@1.0.3@molecule/app-locales-contacts@1.0.3@molecule/app-locales-cookie-banner@1.0.3@molecule/app-locales-copy-link-field@1.0.3@molecule/app-locales-danger-zone@1.0.3@molecule/app-locales-day-timeline@1.0.3@molecule/app-locales-drawing-toolbar@1.0.3@molecule/app-locales-embed-snippet@1.0.3@molecule/app-locales-embeddable-chat-widget@1.0.3@molecule/app-locales-emoji-reactions@1.0.3@molecule/app-locales-exif-panel@1.0.3@molecule/app-locales-feature-animation-canvas@1.0.3@molecule/app-locales-feature-audio-effects-rack@1.0.3@molecule/app-locales-feature-audio-mixer@1.0.4@molecule/app-locales-feature-audio-waveform@1.0.3@molecule/app-locales-feature-barcode-scanner@1.0.3@molecule/app-locales-feature-canvas@1.0.3@molecule/app-locales-feature-chapter-list@1.0.4@molecule/app-locales-feature-graph-view@1.0.3@molecule/app-locales-feature-image-canvas@1.0.3@molecule/app-locales-feature-map-drawing@1.0.3@molecule/app-locales-feature-piano-roll@1.0.4@molecule/app-locales-feature-thread-tree@1.0.3@molecule/app-locales-feature-three-viewer@1.0.3@molecule/app-locales-feature-track-lane@1.0.4@molecule/app-locales-feature-transport-bar@1.0.3@molecule/app-locales-feature-video-scrubber@1.0.4@molecule/app-locales-feature-video-timeline@1.0.4@molecule/app-locales-file-card@1.0.4@molecule/app-locales-file-dropzone@1.0.3@molecule/app-locales-filesystem@1.0.3@molecule/app-locales-filter-bar@1.0.3@molecule/app-locales-flashcard-card@1.0.3@molecule/app-locales-flow-canvas@1.0.3@molecule/app-locales-footer@1.0.4@molecule/app-locales-forms@1.0.3@molecule/app-locales-geolocation@1.0.3@molecule/app-locales-gradebook@1.0.4@molecule/app-locales-habit-streak-card@1.0.3@molecule/app-locales-haptics@1.0.3@molecule/app-locales-health@1.0.4@molecule/app-locales-heatmap@1.0.4@molecule/app-locales-help-button@1.0.3@molecule/app-locales-hero-metric-card@1.0.3@molecule/app-locales-http-inspector@1.0.3@molecule/app-locales-http@1.0.3@molecule/app-locales-i18n@1.0.3@molecule/app-locales-iap@1.0.3@molecule/app-locales-icons@1.0.3@molecule/app-locales-ide@1.10.9@molecule/app-locales-inline-edit@1.0.3@molecule/app-locales-join-code@1.0.3@molecule/app-locales-keyboard@1.0.3@molecule/app-locales-layer-panel@1.0.3@molecule/app-locales-legal-default@1.0.3@molecule/app-locales-live-preview@1.0.3@molecule/app-locales-loyalty-tier-badge@1.0.4@molecule/app-locales-maps@1.0.3@molecule/app-locales-margin-notes@1.0.2@molecule/app-locales-medication-row@1.0.3@molecule/app-locales-message-bubble@1.0.3@molecule/app-locales-mind-map-canvas@1.0.3@molecule/app-locales-moderation-queue@1.0.3@molecule/app-locales-motion@1.0.3@molecule/app-locales-network@1.0.3@molecule/app-locales-newsletter-signup@1.0.3@molecule/app-locales-nfc@1.0.3@molecule/app-locales-notification-center@1.0.3@molecule/app-locales-notifications-page@1.0.4@molecule/app-locales-now-playing-bar@1.0.4@molecule/app-locales-nps-distribution@1.0.3@molecule/app-locales-oauth-buttons@1.0.3@molecule/app-locales-onboarding-modal@1.0.3@molecule/app-locales-pagination-bar@1.0.3@molecule/app-locales-password-generator@1.0.3@molecule/app-locales-password-strength-meter@1.0.3@molecule/app-locales-photo-lightbox@1.0.3@molecule/app-locales-plan-updated-page@1.0.3@molecule/app-locales-pricing-page@1.0.3@molecule/app-locales-progress-rings@1.0.3@molecule/app-locales-push@1.0.3@molecule/app-locales-qr-code@1.0.3@molecule/app-locales-quiz-card@1.0.3@molecule/app-locales-rating-form@1.0.4@molecule/app-locales-react-native-ui@1.0.4@molecule/app-locales-react-ui@1.0.3@molecule/app-locales-react@1.0.3@molecule/app-locales-reading-progress-bar@1.0.3@molecule/app-locales-reputation-badge@1.0.3@molecule/app-locales-root-error-boundary@1.0.3@molecule/app-locales-routing@1.0.3@molecule/app-locales-rule-builder@1.0.3@molecule/app-locales-screen-orientation@1.0.3@molecule/app-locales-search-autocomplete@1.0.3@molecule/app-locales-search-ui@1.0.3@molecule/app-locales-secret-row@1.0.3@molecule/app-locales-settings-actions-bar@1.0.3@molecule/app-locales-settings-panel@1.0.3@molecule/app-locales-share-link-card@1.0.3@molecule/app-locales-share@1.0.3@molecule/app-locales-social-share-buttons@1.0.3@molecule/app-locales-solid-ui@1.0.3@molecule/app-locales-solid@1.0.3@molecule/app-locales-sort-picker@1.0.3@molecule/app-locales-splash-screen@1.0.3@molecule/app-locales-spreadsheet-grid@1.0.3@molecule/app-locales-stage-timeline@1.0.3@molecule/app-locales-status-bar@1.0.3@molecule/app-locales-status-dashboard@1.0.3@molecule/app-locales-storage@1.0.3@molecule/app-locales-subscription-plan-card@1.0.3@molecule/app-locales-survey-question@1.0.3@molecule/app-locales-svelte@1.0.3@molecule/app-locales-tag-input@1.0.3@molecule/app-locales-time-slot-picker@1.0.3@molecule/app-locales-trace-waterfall@1.0.3@molecule/app-locales-ui@1.0.3@molecule/app-locales-utilities@1.0.3@molecule/app-locales-version@1.0.3@molecule/app-locales-video-call-controls@1.0.3@molecule/app-locales-video-player@1.0.3@molecule/app-locales-video@1.0.3@molecule/app-locales-vote-cluster@1.0.3@molecule/app-locales-vue@1.0.3@molecule/app-locales-whiteboard-canvas@1.0.3@molecule/app-locales-wiki-page-header@1.0.3@molecule/app-locales-word-cloud@1.0.3
  • patch
    The API server now keeps an idle keep-alive connection longer than a proxy's connection pool does, so a request is never reused onto a socket the server is closing.
    @molecule/api-server-default-express@1.0.4
  • patch
    The failure-trace note now leads each failing test's row with the request the failing step itself sent and its response body, and the reader exposes that request as TraceArtifact.lead.
    @molecule/api-ai-tools@1.9.7
  • patch
    The failure-trace note now leads each failing test's row with the requests the test's last action caused — API requests first, each with its response body — and excludes the page's static assets from those slots, exposed as TraceArtifact.lastAction.
    @molecule/api-ai-tools@1.9.10
  • patch
    The failure-trace note now names a document subresource that never finished loading, not only the app's API calls.
    @molecule/api-ai-tools@1.9.7
  • patch
    The preview launch command the failure notes quote now binds --host 127.0.0.1, so it answers on the address the browser requests.
    @molecule/api-ai-tools@1.9.5
  • patch
    The preview panel tracks whether the current document has fired load in the same commit that mounts it, so a page that loads but never renders is reported as blank instead of leaving the preview on a loading status.
    @molecule/app-ide-react@1.21.2
  • patch
    When a traced request 404s on a path that lacks the API prefix the app's own calls carry, the failure trace note names the prefix and points at the unset HTTP client base URL instead of the route handler.
    @molecule/api-ai-tools@1.9.8

  • minor
    allTags() returns every tag in use, and GET /articles/tags with no ?limit= answers it instead of capping at the 20 most-used tags. popularTags(limit) keeps its top-20 default — now stated in its own docs, with Number.POSITIVE_INFINITY (or allTags()) as the whole-list call. A GET /tags endpoint built on the bare popularTags() default silently dropped every tag past the twentieth once a database held more than 20.
    @molecule/api-resource-article@1.1.0
  • minor
    classifyRunFailure reads what a failing request hit — the transport (refused, timeout, DNS, TLS), the HTTP status, or an assertion — and the failures-by-cause note names a connection error as a re-run, not as a cause in the app's code.
    @molecule/api-ai-tools@1.9.0
  • minor
    createBrowserStorageAdapter() builds a StorageAdapter over the browser's Web Storage, which is what keeps a signed-in session across a page reload when the API issues no httpOnly session cookie. Pass it as AuthClientConfig.storage; kind: 'session' narrows it to the tab's lifetime. The client's own default stays 'memory', and an httpOnly cookie session remains the stronger choice wherever the API sets one — a token in Web Storage is readable by any script on the origin. AuthClientConfig.storage's docs now say which store to pick, how to swap it, and what each costs.
    @molecule/app-auth@1.3.0
  • minor
    scopedRerunCommand/rerunOfRunningSuite carry the --config a run was measured under, and a finished run whose failures are all Cannot navigate to invalid URL is reported as one configuration failure naming that config and the exact command, instead of a list of causes.
    @molecule/api-ai-tools@1.9.0
  • minor
    A caller can hold a sandbox awake for one provisioning window: SandboxConfig.idleAction sets the idle policy for a single sandbox, Sandbox.setIdleAction changes it in place, and SandboxProvider.defaultIdleAction reports the steady-state policy to restore afterwards.
    @molecule/api-code-sandbox-flyio@1.3.0@molecule/api-code-sandbox@1.4.0
  • minor
    A finished test run's cause note leaves out the tests the request excludes, names the ones it ignored, and hands over a narrowed re-run command for the remaining failures.
    @molecule/api-ai-tools@1.8.0
  • minor
    A local face's file may now be a final URL — a root-absolute asset path (/assets/…), an http(s): URL or a data: URL — and setFont() uses it as-is instead of resolving it under <basePath>fonts/, so a bundler's ?url import can serve a font without copying files.
    @molecule/app-fonts@1.2.0
  • minor
    New @molecule/app-fonts-source-sans-3 font provider: the current upstream Source Sans 3 variable font, self-hosted and registered under the Source Sans Pro family name, so stylesheets that ask for 'Source Sans Pro' (the RealWorld/Conduit theme among others) render without a CDN or a fontsource download.
    @molecule/app-fonts-source-sans-3@1.1.0
  • minor
    Read a failed Playwright run's own trace.zip files, and hand the platform what they say: parseTraceArtifacts (with traceArtifactsScript, a dependency-free in-sandbox reader) returns each failing test's last requests with their statuses and its console errors, and failureTraceNote writes them as a bounded note — so a click that changed nothing is answered by POST /api/articles/x/favorite → 401 instead of by hand-written browser probes. diagnosisTraceCommand adds --trace=retain-on-failure to a run narrowed to a part of the suite when the config it reads records traces for no failure (suiteRecordsTraces), never to the whole-suite proof run.
    @molecule/api-ai-tools@1.7.0
  • patch
    - @molecule/api-resource-api-key: the setup SQL now ships at src/__setup__/api_keys.sql, the path its README states. - @molecule/api-resource-article: the README names src/__setup__/ as the directory its four setup SQL files ship in. - @molecule/api-resource-device: the setup SQL now ships at src/__setup__/devices.sql, the path its README states. - @molecule/api-resource-firmware: the README names src/__setup__/firmware.sql as the setup SQL path. - @molecule/api-resource-journal-entry: the README names src/__setup__/journal_entries.sql as the setup SQL path. - @molecule/api-resource-payment: the setup SQL now ships at src/__setup__/payments.sql, the path its README states. - @molecule/api-resource-status-page: the setup SQL now ships under src/__setup__/, the path its README states. - @molecule/api-resource-user: the setup SQL now ships at src/__setup__/users.sql and src/__setup__/usersSecrets.sql, the paths its README states.
    8 packages
    @molecule/api-resource-api-key@1.0.3@molecule/api-resource-article@1.1.1@molecule/api-resource-device@1.0.8@molecule/api-resource-firmware@1.0.4@molecule/api-resource-journal-entry@1.0.4@molecule/api-resource-payment@1.0.3@molecule/api-resource-status-page@1.0.5@molecule/api-resource-user@1.5.7
  • patch
    @molecule/app-auth documents how to wire it by hand in a scaffolded app (createJWTAuthClient/setClient, initialize(), MoleculeProvider/useAuth()) and why a hand-rolled token store races the session restore.
    @molecule/app-auth@1.3.2
  • patch
    @molecule/app-http's docs state the call shape every body-taking verb uses — post(url, data, config), put(url, data, config), patch(url, data, config): the body is the SECOND argument, never { data: body } (which sends {"data":…} as the body). A failed run's trace read now quotes the body a 4xx request sent beside the status and the response, so a wrapped body is visible in one line.
    @molecule/api-ai-tools@1.9.0@molecule/app-http-axios@1.0.5@molecule/app-http@1.1.4
  • patch
    ALTER TABLE … DROP COLUMN IF EXISTS now applies on SQLite: the migrator drops the statement when the table has no such column (the no-op Postgres performs) and strips the clause SQLite cannot parse. A migration written with it used to fail the run — and an app booting on a fresh production database that never had the column could not start.
    @molecule/api-database-sqlite@1.2.6
  • patch
    AuthClientConfig.storage docs name the scaffold's generated auth bond, which is where createBrowserStorageAdapter() is passed — not authConfig.
    @molecule/app-auth@1.3.1
  • patch
    authorization.set() refuses to mint a session without a deviceId. The global verifyMiddleware exposes a session only when its payload carries a device id naming an active devices row, so a token signed without one was handed to the client and then answered 401 on every request, with nothing said at sign-in. It now throws, naming the missing field and the call that supplies it: get<DeviceService>('device')?.createOrUpdate(userId, deviceName), which resolves to the device id string. The sign-in sequence — device, then session — is documented on set() and in the package's module docs, with the typed calls for both steps.
    @molecule/api-resource-user@1.5.6
  • patch
    createBrowserStorageAdapter now documents that a stored token and user restore the session synchronously with no request, so an app should render from that state and never block its first paint on its own profile request.
    @molecule/app-auth@1.3.2
  • patch
    DeviceService is exported from the package root, so the interface a caller writes at the call site — get<DeviceService>('device') — can be imported by name rather than re-declared as an inline generic. The types namespace export is unchanged.
    @molecule/api-resource-device@1.0.7
  • patch
    edit_file names every replacement of a batch that does not match the file. A batch is applied all-or-nothing, so the failure now reports each bad old_string — its position in the batch, and where it stops agreeing with the file — in one result, instead of one replacement per round trip. Nothing is written when any of them fails.
    @molecule/api-ai-tools@1.7.0
  • patch
    exec_command no longer blocks on a leading sleep N while a background task can answer it: the task's state, progress and failures so far come back at once, and the start and wait notes name wait_for_task instead of a hand tail.
    @molecule/api-ai-tools@1.8.3
  • patch
    exec_command results now carry exitCodeNote when a piped check's reported code belongs to the pipeline's last stage rather than the check — naming the stage and what the output carries, so tsc … | head reporting 0 beside a printed type error is no longer read as a clean run.
    @molecule/api-ai-tools@1.9.2
  • patch
    exec_command's over-budget message now tells a stopped test suite to run in the background instead of advising "run a smaller unit per command" — a suite stopped at the limit reports no tally at all, so splitting its files measures nothing and leaves no word on which test or request never finished.
    @molecule/api-ai-tools@1.6.6
  • patch
    failureTraceNote names a request whose response Playwright never recorded as exactly that — not as a failure — and reports a network error with its own error text; the "a click that changed nothing is usually one of these requests failing" line now appears only when a listed request really failed.
    @molecule/api-ai-tools@1.9.1
  • patch
    failureTraceNote spends its bounded rows on evidence: a trace whose every request got no response no longer takes one, rows are deduplicated by the test's location, and a real 4xx/5xx or a failure an earlier walk of the suite repeated is listed before the rest.
    @molecule/api-ai-tools@1.9.1
  • patch
    find_files searches the directory a pattern names instead of walking the whole search root, and a timed-out search is reported in the tool's own words — what was searched, the limit, and a narrower path to try — instead of the sandbox's timeout option.
    @molecule/api-ai-tools@1.6.6
  • patch
    locatedCommandSegments reports each shell statement's offset and its own leading NAME=value words, so a caller can write an environment assignment into the statement that runs a suite instead of in front of the whole command.
    @molecule/api-ai-tools@1.8.1
  • patch
    useStore(store) no longer requires a StateProvider: it subscribes to the store it is handed, so a store made by a provider package's own createStore() / createStoreWithActions() works with no state bond. useStateProvider() still throws outside a provider, and its message now names the fix — which provider to render, and the import for it.
    @molecule/app-react@1.6.5
  • patch
    wait_for_task ends a wait early — and a note hands over a stop command — only for a cause that is PROVEN by a repeated error and failing the whole run. A shared duration is reported as a lead while the wait goes on, instead of ending it.
    @molecule/api-ai-tools@1.7.0
  • patch
    A background Playwright run prints each failure's own error into its log as that test fails, not only in the summary at the end: streamingBackgroundCommand sets Playwright's inline-failure switch on the list reporter it puts a background suite on. A run that is still walking therefore carries its causes, so grep -n -A 20 '<test name>' <log> returns a failure's error while the suite is running instead of the ✘ row alone.
    @molecule/api-ai-tools@1.7.0
  • patch
    A background suite run now drops an output-only pipe (| tail -5, | grep …) that sits before a trailing statement such as ; echo done, so its log keeps the run's failure list instead of only the tally.
    @molecule/api-ai-tools@1.9.3
  • patch
    A background suite's output-only filters (grep, tail, head, cut, awk, sed, …) are now dropped from its pipeline, so the log keeps every failure's own error and the reported exit code is the runner's rather than the filter's.
    @molecule/api-ai-tools@1.8.0
  • patch
    A command a budget stopped reports status: 'cut_at_budget' instead of the pipeline's exitCode: 0 — with the bound that stopped it, how far the runner's own output shows it got, and the last line it printed — so a suite killed at a timeout behind a | tail is readable as the run that did not finish: commandRunState, cutRunFacts and cutRunSentence are the readers.
    @molecule/api-ai-tools@1.6.6
  • patch
    A composed re-run of a Playwright suite now names each failing test by a path Playwright can match, instead of the reporter's ../../fixtures/… form, which matched no tests and printed "No tests found".
    @molecule/api-ai-tools@1.9.3
  • patch
    A diagnosis run's --trace=retain-on-failure now goes into the Playwright step itself, so it is still recorded when the command pipes to tail or ends in grep.
    @molecule/api-ai-tools@1.8.0
  • patch
    A failed Playwright run whose pages never loaded now leads with the browser's own net::ERR_* on the document request, naming the document it hit.
    @molecule/api-ai-tools@1.9.3
  • patch
    A failed run's cause recap prints the suite's own per-test budget in place of the normalized <n> (Test timeout of 15000ms exceeded), and a trace read now carries the page's own actions with their start and end times.
    @molecule/api-ai-tools@1.9.0
  • patch
    A failed run's trace note no longer lists the page shell's own requests — a service worker, a manifest, a favicon, fonts, and build assets — as missing responses or as failures; a 404 on one of them is not a cause to fix.
    @molecule/api-ai-tools@1.9.3
  • patch
    A failure-causes note built from a clipped log (a tail that begins …(N earlier characters omitted)) now says the log was clipped and that its count covers only the last part, instead of calling those failures the run's failures.
    @molecule/api-ai-tools@1.9.3
  • patch
    A file tool called while a newly claimed sandbox is still attaching now waits for its command channel (four attempts over about 2.6 s) and reports "the sandbox is still starting" instead of refusing the path as if the sandbox were gone.
    @molecule/api-ai-tools@1.9.3
  • patch
    A finished test run's cause list now carries every cause the result has room for (bounded by the platform's tool-output cap), each with its first failure's Expected:/Received: lines or locator, and names any cause it had to leave out with the one command that prints its body.
    @molecule/api-ai-tools@1.8.0
  • patch
    A JSON request answered with an HTML document now throws an HttpError naming the page server and the client's baseURL, instead of resolving with the HTML as data; getClient() warns once when it mints its no-baseURL fallback.
    @molecule/app-http@1.1.5
  • patch
    A Playwright run narrowed to one or two spec files now ends its wait early when every test in it fails the same way — including when the app never answered at all.
    @molecule/api-ai-tools@1.9.3
  • patch
    A request can opt out of the auth gate with skipAuthGate: true. That is what a request the gate itself depends on must set: a gate that waits for a session restore whose own request goes through the same client waits on itself, holding the very request it is waiting for, and every request it holds stalls until the gate times out. That bound is now 3 s (was 10 s, measured against a normal restore's one round trip) and a timeout with requests held is reported at error level naming skipAuthGate, instead of a console warning.
    @molecule/app-http-axios@1.0.4@molecule/app-http@1.1.3
  • patch
    A request is released when the auth gate throws synchronously, instead of waiting on it.
    @molecule/app-http@1.1.3
  • patch
    A suite's pipeline stages are placed from the shell parse's own offsets, so a heredoc body or a quoted word in the command no longer hides a finished run's exit code; suiteRunPipelinePlacement reports whether a stage really follows the runner.
    @molecule/api-ai-tools@1.8.3
  • patch
    A test run's closing summary now counts as finished only when it reconciles with the total the runner announced, so a run stopped part-way is reported as stopped (with how many tests it never reached) instead of handing back exitCode: 0; detection reads the run's untruncated output.
    @molecule/api-ai-tools@1.8.0
  • patch
    Adds locatedCommandSegments, which reports each shell statement's offset and its own leading NAME=value words, so an environment assignment can be placed in the statement that runs a command.
    @molecule/api-ai-tools@1.8.2
  • patch
    An exec Fly refuses with 412 failed_precondition: machine not running is retried when Fly's own Machines API reports the Machine started, starting or replacing — the exec endpoint lagging a Machine that is up, which a single repeat clears, instead of a failed operation. A Machine reported stopped, suspended or destroyed still fails at once. isTransientExecPrecondition takes the Machine's state as an optional second argument to make that call.
    @molecule/api-code-sandbox-flyio@1.2.10
  • patch
    An Express 5 Request is now assignable to MoleculeRequest without a cast (params accepts string | string[], as Express declares), so handlers can pass req straight to functions such as authorization.set.
    @molecule/api-resource@1.0.5
  • patch
    An HTTP request made while the session is still being restored now waits for that restore instead of being sent without credentials, so a page that fetches viewer-dependent data on mount — a profile's following flag, a feed, a favorited state — cannot answer for an anonymous viewer on a connection slow enough for the restore to lose the race. @molecule/app-http and @molecule/app-http-axios await a registered gate before every request (setAuthGate / awaitAuthGate); @molecule/app-auth's client exposes whenRestored(), which resolves once the initialize() restore has settled and immediately when none is in flight; the default auth bonds register it, and an app with its own session module registers its own.
    4 packages
    @molecule/app-http-axios@1.0.3@molecule/app-auth@1.2.2@molecule/app-http@1.1.2@molecule/app-bonds-default-react@1.1.1
  • patch
    Column reconciliation after a CREATE TABLE IF NOT EXISTS now only runs for the migration file that CREATES a table, and never adds a NOT NULL column with no default. Before, a rewritten — and then deleted — older migration silently added a column to another file's table, and every insert that did not write it failed.
    @molecule/api-database-sqlite@1.2.6
  • patch
    Requests can carry stop sequences. ChatParams.stop declares the sequences a provider must stop generating at (OpenAI-compatible stop), and the DeepSeek bond sends them, capped at the 16 its API takes. The matched text is dropped from the reply, so a caller can end a reply it would discard at the cost of the tokens written before the match instead of the whole answer.
    @molecule/api-ai-deepseek@1.0.10@molecule/api-ai@1.3.4
  • patch
    The authScheme guidance now names the call that takes it: setClient(createFetchClient({ baseURL, authScheme: 'Token' })), the bonded provider's createAxiosClient({ baseURL, authScheme: 'Token' }), or the auth client's createJWTAuthClient({ authScheme: 'Token' }). It is a CONSTRUCTOR option — "the client config's authScheme" read as a property of the client getClient() returns, which has no such property.
    4 packages
    @molecule/app-http-axios@1.0.4@molecule/app-auth@1.3.0@molecule/app-http@1.1.3@molecule/app-bonds-default-react@1.1.2
  • patch
    The auth docs name the one request a registered gate must exempt: an app whose own session store restores through the bonded HTTP client sends that request with skipAuthGate: true, or the gate holds the request it is waiting for. The shipped restore never needs it — it sends its current-user request with fetch, so the gate the default auth bonds register cannot hold it.
    @molecule/app-auth@1.3.0@molecule/app-bonds-default-react@1.1.2
  • patch
    The auth token is sent with a configurable scheme. createAxiosClient takes authScheme — Bearer by default, or what the API expects, e.g. Token for an API that reads Authorization: Token <jwt>. It is the same option @molecule/app-http's HttpClientConfig already declares, so a client config written against the core works unchanged on the Axios bond the scaffold wires. createDefaultHttpClientWithAuthBearer takes authScheme too.
    @molecule/app-http-axios@1.0.4@molecule/app-bonds-default-react@1.1.2
  • patch
    The command reader skips a package manager's own options and their values before the program, so npx --prefix <dir> playwright test, npm exec --prefix <dir> -- playwright test, and the -p/--package/-c forms classify exactly like npx playwright test.
    @molecule/api-ai-tools@1.8.0
  • patch
    The failure-causes recap no longer lists a test the runner counted as flaky among the causes to fix: a test that failed once and passed on its retry is named apart, once, so a run whose only reds were retried passes does not send the executor to chase them.
    @molecule/api-ai-tools@1.8.3
  • patch
    The installed-package guard now refuses only writes that would reach a real install: a node_modules entry that is a symlink (removing it deletes the link, not its target), one inside the run's own .mol-scratch/, or one with no package.json under it can be removed, while a real install stays read-only — including through a link. installedPackageWriteRefusal takes a filesystem probe and is async; shellInstalledPackageProbe builds one from a shell runner.
    @molecule/api-ai-tools@1.8.3
  • patch
    The package reference now states that handlers.* return { statusCode, headers?, body } and never write to res, with the three lines that apply a result when a handler is called directly.
    @molecule/api-resource-device@1.0.6@molecule/api-resource-status-page@1.0.4@molecule/api-resource-user@1.5.5
  • patch
    The package reference now states the handler contract up front: a handler returns { statusCode, headers?, body } and never writes to res, so createRequestHandler is what applies it — with the three lines to write when a handler is called directly.
    @molecule/api-resource@1.0.4
  • patch
    The preview client is injected into compressed HTML responses by decoding and re-encoding the body, so a page served by vite preview (Vite 8 compresses HTML) loads instead of failing with net::ERR_CONTENT_DECODING_FAILED.
    @molecule/app-e2e-preview@1.0.10
  • patch
    The README now documents bonding the font without mlcl: import the packaged webfont from ./fonts/* as a bundler asset URL and pass it as the face, or copy fonts/ into the app's public/fonts/.
    19 packages
    @molecule/app-fonts-arimo@1.0.3@molecule/app-fonts-dm-sans@1.0.4@molecule/app-fonts-dm-serif-display@1.0.4@molecule/app-fonts-ibm-plex-mono@1.0.4@molecule/app-fonts-ibm-plex-sans@1.0.4@molecule/app-fonts-inter@1.0.3@molecule/app-fonts-ionicons@1.1.1@molecule/app-fonts-jetbrains-mono@1.0.3@molecule/app-fonts-lato@1.0.4@molecule/app-fonts-lora@1.0.4@molecule/app-fonts-manrope@1.0.4@molecule/app-fonts-material-symbols@1.0.4@molecule/app-fonts-merriweather@1.0.4@molecule/app-fonts-newsreader@1.0.4@molecule/app-fonts-playfair-display@1.0.4@molecule/app-fonts-plus-jakarta-sans@1.0.4@molecule/app-fonts-source-sans-3@1.1.1@molecule/app-fonts-source-serif-4@1.0.4@molecule/app-fonts-space-grotesk@1.0.4
  • patch
    The session guidance now names the typed calls: mint the device id with get<DeviceService>('device')?.createOrUpdate(userId, deviceName) — it resolves to the id string, not a row — before authorization.set(req, res, { userId, deviceId }).
    @molecule/api-jwt@1.0.7

  • minor
    @molecule/api-password-bcrypt hashes with the native bcrypt addon and falls back to bcryptjs on a platform with no usable prebuild. The cost factor is unchanged and both implementations read and write the same $2b$ hashes, so stored hashes keep working either way. What changes is that a cost-12 hash no longer occupies the event loop for ~100 ms at a time — the addon runs the same computation on a threadpool thread — which is what made concurrent signups take seconds on a single-vCPU deployment. provider, plus the new loadNativeBcrypt() and NativeBcrypt, are exported from the package root.
    @molecule/api-password-bcrypt@1.1.0
  • minor
    commandSegments and runsInCommandPosition answer what a shell command actually runs: the command is split at its pipeline and statement separators, and each segment's word in command position is read after the wrapper prefixes a shell may put in front of it (environment assignments, sudo/env/time/timeout/nice, npx/bunx/pnpm dlx, sh/bash, and a nested sh -c '<command>'). commandRunsNoTests, isSuiteRunCommand and isPlaywrightRunCommand match a runner only in that position, so a runner named as an argument to a reader — head -30 run-api-tests-hurl.sh, grep -n playwright e2e/README.md — is no longer read as an invocation.
    @molecule/api-ai-tools@1.6.0
  • minor
    setupAllDefaultBonds() now bonds a state provider, and <MoleculeProvider> supplies the React state context from it, so createStore() + useStore() work in a scaffolded app without wiring a state bond or passing a state prop; @molecule/app-state's Quick Start no longer creates a store at module scope, where it would throw before the providers are set up.
    @molecule/app-bonds-default-react@1.1.0
  • minor
    A batched read_file returns whole files only: one result is capped at MAX_READ_CALL_CHARS (60,000 characters, the ceiling a host puts on one tool result) instead of MAX_BATCH_READ_BYTES (200 KB). Files are returned whole up to it and every path past that is named in note and listed in files as not returned, so no file is ever handed back in part and the caller can see which reads it still owes. MAX_READ_RETURN_CHARS is now that ceiling less its envelope, MAX_BATCH_READ_BYTES is removed, and serializedChars / linesWithinSerialized are new: a window is sized on the text as JSON counts it, so a large read no longer arrives one newline per line over the bound it was sized for.
    @molecule/api-ai-tools@1.6.0
  • minor
    Migrations are recorded in a _molecule_migrations table, so each file runs once; a database migrated before is adopted on its first boot, and SQLite ignores -- comments when it adds columns declared in a CREATE TABLE.
    4 packages
    @molecule/api-database-mysql@1.2.0@molecule/api-database-pglite@1.2.0@molecule/api-database-postgresql@1.2.0@molecule/api-database-sqlite@1.2.0
  • minor
    New @molecule/app-fonts-ionicons font provider: the Ionicons 2.0 icon font and its ion-* glyph classes, self-hosted, so markup written against the 2.x class names (e.g. the RealWorld Conduit spec's <i class="ion-heart">) renders icons without an external CDN.
    @molecule/app-fonts-ionicons@1.1.0
  • minor
    Usernames are stored as sent or refused (letters, digits, ., -, _), a body nested under user gets its own error, verifyMiddleware({ allowCookieSession: false }) makes an API token-only, and utilities.stripSensitiveUserColumns is exported.
    @molecule/api-locales-user@1.1.0@molecule/api-resource-user@1.5.0
  • patch
    article_tags records the order the tags were given in — a new position column — so a reader of the join table gets the tags in that order.
    @molecule/api-resource-article@1.0.3
  • patch
    convertPlaceholders refuses a statement whose $N placeholders and supplied values disagree — a value that no placeholder names, or a placeholder with no value — instead of dropping the value (or binding NULL) in silence and returning the wrong rows. The error names the placeholder and the statement, matching the contract PostgreSQL enforces at bind time.
    @molecule/api-database-mysql@1.2.4@molecule/api-database-sqlite@1.2.5
  • patch
    edit_file names an old_string that is an import block in a different order, and shows the file's actual import.
    @molecule/api-ai-tools@1.5.10
  • patch
    edit_file refuses a replacement whose only change is the line break at its boundary — new_string is old_string with its trailing newline added or removed — whenever the file has text on the same line there, since applying it would move that text across lines. The rest of the batch is applied, and the result carries skippedNote naming the replacement and how to make the change on purpose.
    @molecule/api-ai-tools@1.6.5
  • patch
    edit_file reports a dropped line break only when the file proves the lines joined, so an edit that removed a blank line is no longer described as fusing two lines.
    @molecule/api-ai-tools@1.5.16
  • patch
    edit_file reports a replacement that dropped the newline after the replaced text and the parse error it caused as one message: it shows the line the two lines became and says to re-send that replacement with the newline restored.
    @molecule/api-ai-tools@1.5.15
  • patch
    edit_file reports where a not-found old_string stops matching the file — the diverging line, both versions of it, and the file from that point — instead of showing nearby lines the caller already matched.
    @molecule/api-ai-tools@1.6.5
  • patch
    edit_file says when nothing changed, including a replacement whose new text is identical to its old text.
    @molecule/api-ai-tools@1.5.14
  • patch
    exec retries the 412 failed_precondition: exec request failed Fly answers when it drops the connection to a Machine's exec agent — up to four attempts with 1 s / 3 s / 7 s backoff, each preceded by a Machine-state read and a wait for started when the Machine has not got there — instead of failing the whole boot or deploy on one dropped connection. A 412 that names a Machine state (machine not running) is still never retried, and every 412 that is not retried now reports the Machine's current state in its message.
    @molecule/api-code-sandbox-flyio@1.2.9
  • patch
    find_files matches a pattern containing / against each file's path, so helpers/*, src/**/App.tsx and e2e/*.spec.ts return the files they name instead of an empty list.
    @molecule/api-ai-tools@1.5.19
  • patch
    findMany's documentation now states the row order is unspecified unless orderBy is given: a where on an indexed column (articleId, orderId, userId) is answered from that index, so the rows come back in the index's order — not the order they were inserted in. Pass orderBy for every list whose order matters (orderBy: [{ field: 'createdAt', direction: 'desc' }]), and when no column encodes the intended order, store one (a position integer written from the array index).
    @molecule/api-database@1.1.2
  • patch
    order_items records the order its lines were submitted in, in a new position column written by create(), and every read of that table orders by it (ORDER_ITEMS_IN_ORDER). Order.items therefore comes back in the submitted order rather than in whatever order the database's orderId index returns. src/__setup__/orders_position.sql adds the column to a database whose order_items predates it.
    @molecule/api-resource-order@1.1.4
  • patch
    read_file and list_files give the parent-directory hint for E2B's not-found wording too, and the path-safety check retries once and names a failure that is not a timeout.
    @molecule/api-ai-tools@1.5.11
  • patch
    read_file returns a small file whole when it is paged a second time.
    @molecule/api-ai-tools@1.5.14
  • patch
    read_file, write_file and edit_file called with no arguments at all now answer that the call arrived empty and was probably truncated, instead of asking for a path the caller never had a chance to send. The exec_command note about a requested timeout above the tool's ceiling is attached only when the command actually came near that ceiling.
    @molecule/api-ai-tools@1.6.1
  • patch
    repeatingFailureNote no longer offers the failing test as something to run while the run is still walking — a second suite run against the same app and database is refused — and names the exact re-run command to send once the run ends instead: the running command, narrowed to that test, in the directory the run was started in. The rule behind that refusal is now shared with the caller rather than restated: suiteRunInTheWay answers whether a second suite run may start beside the runs already in flight, and it, suiteCommandTarget and scopedRerunCommand live in this package so both the note and the hold that enforces it read one implementation.
    @molecule/api-ai-tools@1.6.5
  • patch
    search_files scoped to one file reports each match with its file and line.
    @molecule/api-ai-tools@1.5.16
  • patch
    setupAllDefaultBonds() now bonds a state provider, and <MoleculeProvider> supplies the React state context from it, so createStore() + useStore() work in a scaffolded app without wiring a state bond or passing a state prop; @molecule/app-state's Quick Start no longer creates a store at module scope, where it would throw before the providers are set up.
    @molecule/app-state@1.0.3@molecule/app-react@1.6.4
  • patch
    sign() is documented as the low-level signer: a token it mints is not a session, because the app's session middleware accepts a JWT only when its payload also carries a deviceId naming an active device row — the doc now names authorization.set() in @molecule/api-resource-user as the function that mints one the middleware accepts.
    @molecule/api-jwt@1.0.5
  • patch
    sign()'s reference and authorization.set()'s now state how a session token reaches a JSON response body — authorization.set(req, res, { userId, deviceId }) returns it, and verifyMiddleware({ allowCookieSession: false }) keeps the cookie off — and that an app has exactly one bonded JWT provider (keys from JWT_PRIVATE_KEY/JWT_PUBLIC_KEY, no JWT_SECRET), so replacing it changes every token the app and its packages mint and verify.
    @molecule/api-jwt@1.0.6@molecule/api-resource-user@1.5.4
  • patch
    verifyMiddleware({ allowCookieSession: false }) now turns the session cookie off in both directions: set() no longer writes the token / sessionId / mol_auth cookies for a token-only request, and a token-only mount drops a session an earlier, laxer mount resolved from the cookie (a header-resolved session is untouched).
    @molecule/api-resource-user@1.5.2
  • patch
    vite preview proxies /api, /health and /socket.io like the dev server, so the production bundle can be tested locally.
    @molecule/app-vite-config-default@1.1.3
  • patch
    wait_for_task on a task that is still running now says how long it has been running, how far its own log says it has got (when the log carries a [done/total] counter) and how much longer that implies, so waiting on a suite that outlasts one call is not blind.
    @molecule/api-ai-tools@1.5.17
  • patch
    wait_for_task on a task that is still running returns the log's failure lines (up to 40) followed by its end, instead of only the last 3 000 bytes, so a running test suite's failures are no longer hidden below its progress lines.
    @molecule/api-ai-tools@1.5.16
  • patch
    wait_for_task reads a background command's own output file again after the API process restarts.
    @molecule/api-ai-tools@1.5.17
  • patch
    wait_for_task shows the output so far while a command runs, and reads a command's own output file when the task log holds almost nothing.
    @molecule/api-ai-tools@1.5.14
  • patch
    wait_for_task's note for a command that is still running states each fact once: the elapsed time and the "its output is still growing" clause were each printed twice, once in the note's own lead and once in the progress sentence appended to it.
    @molecule/api-ai-tools@1.6.3
  • patch
    wait_for_task's note for a stuck command now hands over the pid-only stop command — kill <pids>, or kill $(cat /tmp/<taskId>.pid) when the pid walk finds nothing — instead of a pkill -f <taskId>.sh chained after it. A pkill -f pattern matches the shell running that command as well, so the suggested stop could signal the caller's own shell and leave the run it was meant to stop. The pid tree is what the pattern was for: the detached shell and every process under it. taskStopCommand is exported, so every note that hands over a stop command uses this one builder.
    @molecule/api-ai-tools@1.6.4
  • patch
    wait_for_task's repeating-cause note now tells a run to KEEP GOING. It still names the cause at the third same-shaped failure so the fix can start mid-run, but the run is the only thing that names its OTHER causes, so the note tells the executor to let it finish and gives a stop command only when the cause is failing the whole run — every failure sharing it, across three spec files or more, with nothing passing since the first (an app that is not up, a 5xx on every request, a selector missing on every page). A finished run whose log holds failures now also comes back with a note grouping them by cause, one line per cause with the tests it hit, so one round of fixes covers every cause the run found.
    @molecule/api-ai-tools@1.6.0
  • patch
    A "no such column" or "no such table" error names the table the statement was for.
    @molecule/api-database-sqlite@1.2.3
  • patch
    A .ts file that fails to parse on JSX is told it needs to be .tsx.
    @molecule/api-ai-tools@1.5.7
  • patch
    A background command that redirects its own output is told where that output goes, and its stuck check reads that file.
    @molecule/api-ai-tools@1.5.8
  • patch
    A background Playwright diagnosis or re-run runs with --retries=0, so each failure is walked once; the uncapped run keeps the suite's retries.
    @molecule/api-ai-tools@1.5.18
  • patch
    A background Playwright run drops a trailing | head -N, which would cut its pass/fail count.
    @molecule/api-ai-tools@1.5.9
  • patch
    A background Playwright run ends up with exactly ONE reporter that prints each failure. A run that names another printing reporter (line, dot, basic, spec) has it replaced by list rather than joined beside it — two of them write every test result into the log twice — while a reporter set that writes a machine format to a file (json, html, junit) is left exactly as it was. And wait_for_task's repeating-cause note now counts DISTINCT tests: a test that two reporters printed, or that a retry failed again, is one test, so the note needs three different tests behind one cause before it names it, and it says so ("N different tests in this run have already failed the same way").
    @molecule/api-ai-tools@1.6.0
  • patch
    A backgrounded Playwright run is started with --reporter=list — and an explicit --reporter=line is switched to it — so each test result is written to the log as it finishes, in the shape the platform reads back.
    @molecule/api-ai-tools@1.5.16
  • patch
    A backgrounded test-suite run (Playwright, Vitest or Hurl) now starts at lower CPU and IO priority, so the commands an executor sends while it runs stay responsive instead of queueing behind the suite's own workers.
    @molecule/api-ai-tools@1.5.19
  • patch
    A backslash-escaped \| inside a quoted pattern no longer reads as a pipe into env.
    @molecule/api-ai-tools@1.5.16
  • patch
    A command backgrounded only because it asked for more than the tool's time limit, and that finishes within overCeilingGraceMs (45 s), returns its output like a foreground run.
    @molecule/api-ai-tools@1.5.6
  • patch
    A command that only prints source files returns it with the code-safe redaction, a TypeScript type literal is never masked, and a running wait_for_task asks not to edit the code under test.
    @molecule/api-ai-tools@1.5.16
  • patch
    A create without an id on a table whose id is INTEGER PRIMARY KEY lets SQLite number the row instead of inserting a uuid.
    @molecule/api-database-sqlite@1.1.1
  • patch
    A dependency whose package name ends in a secret keyword (@molecule/app-auth) no longer has its version masked.
    @molecule/api-ai-tools@1.5.9
  • patch
    A heredoc that writes a file is no longer taken for the output file of a backgrounded command.
    @molecule/api-ai-tools@1.5.11
  • patch
    A list given to a one-value operator (=, !=, <…) throws instead of silently matching nothing.
    4 packages
    @molecule/api-database-mysql@1.2.3@molecule/api-database-pglite@1.2.2@molecule/api-database-postgresql@1.2.2@molecule/api-database-sqlite@1.2.3
  • patch
    A long test run cut in the middle keeps its tally lines ("N failed", "N passed").
    @molecule/api-ai-tools@1.5.16
  • patch
    A long test run's output keeps its failure blocks and tally when cut, instead of the passing progress lines.
    @molecule/api-ai-tools@1.5.12
  • patch
    A migration's ALTER TABLE … ADD COLUMN IF NOT EXISTS is accepted and applied when the column is missing, instead of failing the migration run.
    @molecule/api-database-mysql@1.2.1
  • patch
    A migration's ALTER TABLE … ADD COLUMN IF NOT EXISTS is applied only when the column is missing, instead of failing the whole file and warning about it on every boot.
    @molecule/api-database-sqlite@1.2.1
  • patch
    A non-recursive grep of named source files, or a source print piped through text filters, also gets the code-safe redaction.
    @molecule/api-ai-tools@1.5.16
  • patch
    A Playwright run piped through a filter is started in the background even when it declares no time budget.
    @molecule/api-ai-tools@1.5.8
  • patch
    A Playwright run that redirects its output to a file is started in the background.
    @molecule/api-ai-tools@1.5.9
  • patch
    A repeating failure is identified by its error and the element it waited for, never by how long the tests took, so timeouts on different elements are reported as the different causes they are.
    @molecule/api-ai-tools@1.6.2
  • patch
    A running background suite whose failures keep repeating one cause is now named while it runs: wait_for_task reads the live log, and at the third failure sharing a signature — the same error message, or the same duration to within half a second — it returns early with that cause, the tests it hit and the pid command that stops the run, instead of handing back the finished log minutes later. An iterating Playwright run also reports list,line, so each failure's own error reaches the log as the failure happens.
    @molecule/api-ai-tools@1.5.19
  • patch
    A secret value cut off before its closing quote is masked up to the end of its line, without swallowing the lines after it.
    @molecule/api-ai-tools@1.5.8
  • patch
    A statement that fails now names itself: the D1 error keeps its class and code and carries the one-line SQL in its message and on sql, the same rule the SQLite bond applies to better-sqlite3. The bound values are never included.
    @molecule/api-database-d1@1.0.16
  • patch
    A statement that fails now names itself: the error keeps its class and code and carries the one-line SQL in its message and on sql, so datatype mismatch and no such table say which statement hit them. The bound values are never included. DataStore queries put the table they were asked for in front of that statement.
    @molecule/api-database-sqlite@1.2.5
  • patch
    A stream that opens and then produces no content is now bounded: chat() waits at most 45 s for the first content event, asks once more with a fresh stream, and after the reply has started bounds the silence between chunks at 60 s instead of leaving both to the caller (onStreamStall reports each one).
    @molecule/api-ai-deepseek@1.0.7@molecule/api-ai@1.3.1
  • patch
    A version string next to a secret-looking name is no longer masked in command output.
    @molecule/api-ai-tools@1.5.15
  • patch
    A whole-suite Playwright run keeps the suite's own retries even when it names an uncapped --max-failures=0. Each was read as a capped diagnosis and had --retries=0 added, so a proof run against a deployed URL walked every failure once where the graded run retries it. Which runs are diagnoses is now one predicate (isDiagnosisRun) shared with the platform's own notes, and a run can no longer be a diagnosis to one of them and the whole suite to the other.
    @molecule/api-ai-tools@1.6.5
  • patch
    Add commandRunsNoTests, which tells a shell command that invokes a Playwright, Vitest or Hurl runner only to print (--list, --help, show-report, codegen, install, merge-reports) from one that runs tests. streamingBackgroundCommand, isSuiteRunCommand and isPlaywrightRunCommand now leave such a command exactly as it was sent instead of adding --reporter/--retries=0 to it, starting it at lower priority, or backgrounding it.
    @molecule/api-ai-tools@1.5.20
  • patch
    An empty quoted value next to a secret-looking name is no longer masked in command output.
    @molecule/api-ai-tools@1.5.14
  • patch
    An unknown query operator's error lists the valid operators, which are lowercase.
    4 packages
    @molecule/api-database-mysql@1.2.2@molecule/api-database-pglite@1.2.1@molecule/api-database-postgresql@1.2.1@molecule/api-database-sqlite@1.2.2
  • patch
    An update always moves updatedAt forward, even in the same millisecond as the previous write.
    @molecule/api-resource-article@1.0.5@molecule/api-resource-comment@1.1.2
  • patch
    Clarify the documentation of the stream stall bound.
    @molecule/api-ai-deepseek@1.0.8@molecule/api-ai@1.3.2
  • patch
    Documents that a hand-written logout must call invalidateDeviceExistsCache after deleting the device row.
    @molecule/api-resource-user@1.4.12
  • patch
    Documents that a session token needs an active device row, and how to mint one.
    @molecule/api-resource-user@1.4.13
  • patch
    Each call carries a per-request id and reports the response's own id, trace id and served model back on done, so a reply that does not belong to the request that asked for it can be identified and traced.
    11 packages
    @molecule/api-ai-alibaba@1.1.4@molecule/api-ai-anthropic@1.3.5@molecule/api-ai-deepseek@1.0.9@molecule/api-ai-google@1.3.3@molecule/api-ai-local@1.0.6@molecule/api-ai-minimax@1.1.4@molecule/api-ai-moonshot@1.1.4@molecule/api-ai-openai@1.4.4@molecule/api-ai-xai@1.0.7@molecule/api-ai-zhipu@1.2.3@molecule/api-ai@1.3.3
  • patch
    edit_file says when a replacement removed the line break after the replaced text.
    @molecule/api-ai-tools@1.5.7
  • patch
    In a molecule sandbox the dev server now polls the app tree instead of watching filesystem inodes, so replacing a directory (a restore, a checkout, a tool that rewrites a tree) can no longer leave it serving pre-edit modules with no reload and no error in its log. VITE_WATCH_POLLING=1|0 overrides the choice; a developer's machine is unchanged.
    @molecule/app-vite-config-default@1.1.4
  • patch
    Inside a molecule sandbox with a browser, end-to-end runs use two workers instead of half the cores (one on a 2-vCPU sandbox).
    @molecule/app-e2e@1.2.1
  • patch
    Migrations translate ADD COLUMN IF NOT EXISTS to ADD COLUMN, which SQLite can run.
    @molecule/api-database-sqlite@1.1.3
  • patch
    Re-running migrations adds a column that a CREATE TABLE IF NOT EXISTS declares but the existing table lacks.
    @molecule/api-database-sqlite@1.1.2
  • patch
    read_file returns a file whole on a second window up to the one-call bound its note states, and only once per version of the file.
    @molecule/api-ai-tools@1.5.17
  • patch
    read_file steers a successful read of a package's built dist at that package's README (read_molecule_doc) — the pointer used to fire only when the read failed.
    @molecule/api-ai-tools@1.5.17
  • patch
    Secret redaction no longer masks author=… values; AUTH* and authorization values are still masked.
    @molecule/api-ai-tools@1.5.13
  • patch
    The set docs say a session token needs a real device row on every sign-in path.
    @molecule/api-resource-user@1.5.1
  • patch
    The command-position reader nests: a command substitution opened inside a double-quoted string is tracked as its own context, so DIR="$(cd "$(dirname "$0")" && pwd)" no longer ends the statement's quotes early. Previously that line left the reader inside an unclosed substitution, and every newline after it was swallowed into one segment — commandSegments and runsInCommandPosition reported no program for the statements that followed, and a shell script whose text opens "$( … )" inside "$( … )" (a project's own test-runner script, for one) reported the runner it invokes as absent.
    @molecule/api-ai-tools@1.6.5
  • patch
    The dev server polls for file changes inside a sandbox, so edits are picked up after a watched folder is replaced.
    @molecule/app-vite-config-default@1.1.5
  • patch
    The docs now state what the standalone query(sql, values) resolves to — one plain { rows, rowCount, fields? } object with no .get(), .all() or .run() on it — so a caller written against better-sqlite3's db.prepare(…).get() result reads rows[0] instead of calling a method that does not exist.
    @molecule/api-database@1.1.3
  • patch
    The docs say that a table the app already creates keeps its own columns, so missing ones need an ALTER.
    30 packages
    @molecule/api-resource-feature-flag@1.0.4@molecule/api-resource-follow@1.0.7@molecule/api-resource-forum-thread@1.0.5@molecule/api-resource-grade@1.0.4@molecule/api-resource-inventory@1.0.4@molecule/api-resource-invoice@1.0.4@molecule/api-resource-medication@1.0.4@molecule/api-resource-meeting@1.0.4@molecule/api-resource-message@1.0.6@molecule/api-resource-notification@1.0.5@molecule/api-resource-order@1.1.3@molecule/api-resource-payment-method@1.0.4@molecule/api-resource-product@1.0.5@molecule/api-resource-project@1.0.7@molecule/api-resource-property@1.0.5@molecule/api-resource-reaction@1.0.4@molecule/api-resource-readings@1.0.4@molecule/api-resource-review@1.0.5@molecule/api-resource-room-type@1.0.4@molecule/api-resource-share@1.0.6@molecule/api-streak@1.0.4@molecule/api-resource-subscriber@1.0.4@molecule/api-resource-tag@1.0.6@molecule/api-resource-task@1.0.4@molecule/api-resource-template@1.0.5@molecule/api-resource-thread@1.0.5@molecule/api-trash@1.0.5@molecule/api-resource-version-history@1.0.5@molecule/api-resource-wiki-page@1.0.5@molecule/api-resource-workspace@1.0.6
  • patch
    The file tools refuse a write whose target is inside an installed package: write_file, edit_file, delete_file, rename_file and create_directory answer with the package's name and one line saying why — a node_modules path is not the app's code, the next install replaces it and a deploy never carries it — plus how to restore the package if a file there was already overwritten. Reading those files is unchanged. The refusal is exported as installedPackageWriteRefusal so a consumer's shell guard can apply the same one.
    @molecule/api-ai-tools@1.6.5
  • patch
    The injected preview client and locator runtime now open with a short header saying what they are — molecule's test driver, injected by the preview dev server, not part of the app — and pointing at the supplied test suite (its selector/contract document and specs/e2e/helpers/) as the place the app's browser contract actually lives. The runtime's bytes are exported as E2E_PREVIEW_RUNTIME_SCRIPT, so a server that serves the bundle itself (the static-site template's dev script) serves the same script the Vite plugin does.
    @molecule/app-e2e-preview@1.0.9
  • patch
    The mid-run repeating-failure note names each failing test by the path the run's own log wrote — the same path its re-run hint names — instead of the shortened form, so the file a row names and the file the hint names are one file.
    @molecule/api-ai-tools@1.6.1
  • patch
    The missing-key errors name the fix: call sign() / verify() from @molecule/api-jwt, which pass the configured keys.
    @molecule/api-jwt-jsonwebtoken@1.0.3
  • patch
    The package reference now names all four tables it owns and the column that joins them: checks, incidents and uptimeWindows each carry a serviceId naming a services.id.
    @molecule/api-resource-status-page@1.0.3
  • patch
    The package reference now names the two tables it owns — articles and article_tags — and the column that joins them: article_tags.articleId = articles.id.
    @molecule/api-resource-article@1.0.7
  • patch
    The package reference now names the two tables it owns — comments and comment_numbers — and the column that joins them: comment_numbers.commentId = comments.id.
    @molecule/api-resource-comment@1.1.3
  • patch
    The package reference now names the two tables it owns — users (props only, no password column) and usersSecrets — and the key that joins them: usersSecrets.id is the user's id, never a fresh uuid. It also names the handlers to call for signup, login and password changes instead of hand-writing both rows.
    @molecule/api-resource-user@1.5.3
  • patch
    The package ships the reactions and follows tables it reads, so a project that installs only @molecule/api-resource-article creates every table its endpoints need — favorites and the followed-authors feed answered no such table: reactions before.
    @molecule/api-resource-article@1.0.6
  • patch
    The README documents every export with its signature, parameters and return value, namespace members included.
    19 packages
    @molecule/api-database@1.1.1@molecule/api-jwt@1.0.4@molecule/api-password@1.0.3@molecule/api-bonds-default-express@1.1.1@molecule/api-resource@1.0.3@molecule/api-resource-article@1.0.4@molecule/api-resource-comment@1.1.1@molecule/api-resource-device@1.0.5@molecule/api-resource-follow@1.0.6@molecule/api-resource-tag@1.0.5@molecule/api-resource-user@1.4.14@molecule/app-auth@1.2.1@molecule/app-e2e@1.2.2@molecule/app-http@1.1.1@molecule/app-routing@1.0.3@molecule/app-ui@1.3.6@molecule/app-auth-shell-react@1.0.4@molecule/app-ui-react@1.3.3@molecule/app-react@1.6.3
  • patch
    The README states that a @molecule/api-resource-* package's src/__setup__/*.sql is Postgres dialect that the migrator translates, so a package's schema should be copied into api/migrations/ as it is — a hand-written SQLite version of it drifts from the schema the package's own queries expect.
    @molecule/api-database-sqlite@1.2.4
  • patch
    Timestamp columns declared with a DEFAULT now() / DEFAULT CURRENT_TIMESTAMP default now store ISO-8601 UTC values with milliseconds (e.g. 2026-10-16T01:22:21.416Z) instead of SQLite's space-separated whole-second form, so a stored timestamp parses as the UTC instant it was written and two rows written in the same second sort in insertion order.
    @molecule/api-database-sqlite@1.2.1

  • minor
    edit_file accepts replace_all on a replacement to change every occurrence of its old_string.
    @molecule/api-ai-tools@1.5.0
  • minor
    validate() and its wrappers take an optional { status, body } for APIs whose validation failures use another status or error envelope.
    @molecule/api-middleware-validation@1.1.0
  • minor
    Adds withTransaction(fn): every database call made inside fn (the CRUD helpers and query()) joins one transaction, committed when fn resolves and rolled back when it throws.
    @molecule/api-database@1.1.0
  • minor
    Adds sequential integer numbers for comments: createNumberedComment, numberComment, getCommentByNumber and commentNumbers, with the comment_numbers table SQL.
    @molecule/api-resource-comment@1.1.0
  • minor
    Queries made inside withTransaction() from @molecule/api-database run on its transaction.
    4 packages
    @molecule/api-database-mysql@1.1.0@molecule/api-database-pglite@1.1.0@molecule/api-database-postgresql@1.1.0@molecule/api-database-sqlite@1.1.0
  • minor
    The client config takes authScheme for APIs that read Authorization: Token <jwt> instead of Bearer.
    @molecule/app-http@1.1.0
  • minor
    The JWT auth client takes requestBody, mapAuthResponse and authScheme, for APIs with their own auth envelope and header scheme.
    @molecule/app-auth@1.2.0
  • patch
    search_files and find_files rooted inside node_modules see the package's dist/, and find_files no longer returns nothing there.
    @molecule/api-ai-tools@1.5.0
  • patch
    search_files reads its pattern as an extended regex (a|b), and a pattern that is not a valid regex as plain text.
    @molecule/api-ai-tools@1.5.2
  • patch
    slugify folds accents.
    @molecule/api-resource-wiki-page@1.0.4
  • patch
    Switch delivers a click that lands right after it renders, instead of dropping it.
    @molecule/app-ui-react@1.3.2
  • patch
    wait_for_task no longer calls a command stuck while its output is still growing.
    @molecule/api-ai-tools@1.5.1
  • patch
    A background command's log now fills while it runs: a trailing | tail -N is dropped and a Playwright run without a reporter streams with --reporter=line.
    @molecule/api-ai-tools@1.5.5
  • patch
    A blocked command's message says none of its parts ran.
    @molecule/api-ai-tools@1.5.4
  • patch
    A file tool given a path outside the workspace refuses it and says how to reach it, instead of answering about the workspace root.
    @molecule/api-ai-tools@1.5.0
  • patch
    A first visit is no longer reloaded when the service worker first takes control; only an update reloads.
    @molecule/app-pwa-default@1.0.5
  • patch
    A lookup that answers undefined for a free slug counts as free, and uniqueSlug stops with an error when every candidate is reported taken.
    @molecule/api-slug@1.0.1
  • patch
    A query that waits 30 s behind an open transaction fails with an error naming withTransaction() instead of waiting forever.
    @molecule/api-database-sqlite@1.1.0
  • patch
    A second workspace with a name already in use gets the next free slug instead of failing; slugs fold accents.
    @molecule/api-resource-workspace@1.0.5
  • patch
    A slug lookup that answers undefined counts as free.
    @molecule/api-resource-article@1.0.1
  • patch
    A transaction's connection is released even when COMMIT or ROLLBACK fails.
    @molecule/api-database-mysql@1.1.0
  • patch
    A TypeScript file that fails the post-write parse check reports the line and column, the offending line, and a caret.
    @molecule/api-ai-tools@1.5.3
  • patch
    Adds an end-to-end checklist for apps bonded to this provider: how to complete a checkout and deliver a signed webhook offline.
    @molecule/api-payments-capture@1.0.1
  • patch
    Creating a Machine retries a 412 "volume already claimed" while Fly releases the volume of a Machine that was just destroyed.
    @molecule/api-code-sandbox-flyio@1.2.8
  • patch
    Document how migrations apply and which placeholders pool.query accepts.
    @molecule/api-database-sqlite@1.0.5
  • patch
    Documents that Button defaults to type="button" and that a form's primary action needs type="submit".
    @molecule/app-ui@1.3.5
  • patch
    Pins react and react-dom to the one copy the app resolves, adds react-router-dom to dedupe, and force-includes only optimize dependencies that are installed.
    @molecule/app-vite-config-default@1.1.2
  • patch
    Points integer comment ids at createNumberedComment in @molecule/api-resource-comment.
    @molecule/api-resource-article@1.0.2
  • patch
    Republished through trusted publishing; no code changes.
    31 packages
    @molecule/api-agent-transcript-claude-code@1.0.1@molecule/api-agent-transcript-codex@1.0.1@molecule/api-agent-transcript-molecule-ide@1.0.1@molecule/api-agent-transcript-pi@1.0.1@molecule/api-ai-embeddings-embeddinggemma@1.0.1@molecule/api-ai-embeddings-gemini@1.0.1@molecule/api-ai-image-generation-vllm-omni@1.0.1@molecule/api-ai-translation-bergamot@1.1.1@molecule/api-ai-translation-llm@1.1.1@molecule/api-ai-translation-madlad@1.1.1@molecule/api-geolocation-molecule@1.1.1@molecule/api-geolocation-photon@1.1.1@molecule/api-http-relay@1.0.1@molecule/api-model-hosting-cloud-run@1.0.1@molecule/api-model-hosting-docker@1.0.1@molecule/api-model-hosting-koyeb@1.0.1@molecule/api-model-hosting-runpod@1.0.1@molecule/api-content-moderation-openai@1.1.1@molecule/api-ocr-teleocr@1.0.1@molecule/api-pdf-molecule@1.1.1@molecule/api-project-archive-external-state-pglite@1.0.1@molecule/api-push-notifications-molecule@1.1.1@molecule/api-screenshots-molecule@1.1.1@molecule/api-screenshots-puppeteer@1.1.1@molecule/api-web-search-brave@1.1.1@molecule/api-model-hosting@1.0.1@molecule/api-screenshots@1.1.1@molecule/api-web-search@1.1.1@molecule/app-client-search-minisearch@1.0.3@molecule/app-keyboard-shortcuts-react@1.0.3@molecule/app-locales-margin-notes@1.0.1
  • patch
    Slugs fold accents, and a name that is taken gets the next free numbered slug.
    4 packages
    @molecule/api-resource-product@1.0.4@molecule/api-resource-project@1.0.6@molecule/api-resource-property@1.0.4@molecule/api-resource-tag@1.0.4
  • patch
    The package now publishes its table SQL, so a project installing it from npm can create its tables.
    48 packages
    @molecule/api-ai-moderation-pipeline@1.0.3@molecule/api-audit-database@1.0.3@molecule/api-workflow-database@1.0.3@molecule/api-resource-activity-feed@1.0.4@molecule/api-resource-address@1.0.3@molecule/api-resource-ai-conversation@1.0.4@molecule/api-resource-booking@1.0.3@molecule/api-resource-bookmark@1.0.4@molecule/api-resource-cart@1.0.3@molecule/api-resource-comment@1.0.5@molecule/api-resource-course@1.0.3@molecule/api-resource-event-type@1.0.3@molecule/api-resource-feature-flag@1.0.3@molecule/api-resource-firmware@1.0.3@molecule/api-resource-follow@1.0.5@molecule/api-resource-forum-thread@1.0.3@molecule/api-resource-grade@1.0.3@molecule/api-resource-inventory@1.0.3@molecule/api-resource-invoice@1.0.3@molecule/api-resource-journal-entry@1.0.3@molecule/api-resource-medication@1.0.3@molecule/api-resource-meeting@1.0.3@molecule/api-resource-message@1.0.5@molecule/api-resource-notification@1.0.4@molecule/api-notifications-preferences@1.0.3@molecule/api-resource-order@1.1.2@molecule/api-resource-payment-method@1.0.3@molecule/api-resource-product@1.0.3@molecule/api-resource-project@1.0.5@molecule/api-resource-property@1.0.3@molecule/api-resource-reaction@1.0.3@molecule/api-resource-readings@1.0.3@molecule/api-reputation@1.0.3@molecule/api-resource-review@1.0.4@molecule/api-resource-room-type@1.0.3@molecule/api-resource-share@1.0.5@molecule/api-streak@1.0.3@molecule/api-resource-subscriber@1.0.3@molecule/api-resource-tag@1.0.3@molecule/api-resource-task@1.0.3@molecule/api-resource-template@1.0.4@molecule/api-resource-thread@1.0.4@molecule/api-trash@1.0.4@molecule/api-resource-version-history@1.0.4@molecule/api-resource-wiki-page@1.0.3@molecule/api-resource-workspace@1.0.4@molecule/api-leaderboard@1.0.3@molecule/api-realtime-rooms@1.0.3
  • patch
    The session middleware also reads Authorization: Token <jwt>, not only Bearer.
    @molecule/api-resource-user@1.4.11
  • patch
    Thread slugs fold accents.
    @molecule/api-resource-forum-thread@1.0.4

  • minor
    ShareModal accepts host sections as children, a showLinks toggle and a refreshSignal; ChatPanel forwards them as shareModalContent, shareLinksAllowed and shareLinksRefreshSignal.
    @molecule/app-ide-react@1.21.0
  • minor
    Adds Gemini 4 Argon, Google's flagship reasoning model ($4/$20 per MTok, cached input $0.20).
    @molecule/api-resource-ai-models@1.16.0
  • minor
    First release of the screenshot capture core: the ScreenshotProvider interface — capture({url|html}, options) returns PNG/JPEG bytes for a URL or an HTML string, with viewport, fullPage, format, quality, device-scale and settle-delay options — plus the setProvider/capture convenience surface for bonds.
    @molecule/api-screenshots@1.1.0
  • minor
    First release of the screenshot capture core: the ScreenshotProvider interface (capture({url|html}, options) → image bytes) with viewport, fullPage, format (png/jpeg), quality, device scale and settle-delay options, plus the setProvider/capture convenience surface for bonds.
    @molecule/api-screenshots@1.0.0
  • minor
    First release: the molecule.dev hosted ScreenshotProvider bond — capture a URL or an HTML string to a PNG/JPEG image through molecule.dev's headless-Chrome render machine (MOLECULE_API_KEY/MOLECULE_SERVICES_URL, metered per capture), with the service limits mirrored locally so a bad call never leaves the process.
    @molecule/api-screenshots-molecule@1.1.0
  • minor
    First release: the Puppeteer ScreenshotProvider bond — captures PNG/JPEG images of a URL or an HTML string with in-process headless Chrome, with the documented viewport/scale/full-page/pixel-budget caps enforced before Chrome does any work.
    @molecule/api-screenshots-puppeteer@1.0.0
  • minor
    First release: the Puppeteer ScreenshotProvider bond — captures PNG/JPEG images of a URL or an HTML string with in-process headless Chrome. Viewport, scale, full-page-height and pixel-budget caps are enforced before Chrome does any work; note the process has no egress guard, so only capture URLs you control.
    @molecule/api-screenshots-puppeteer@1.1.0
  • patch
    applyNetwork(allowOut, { open: true }) allows every public host while denying all private, loopback, link-local and other non-public IPv4 ranges.
    @molecule/api-code-sandbox-e2b@1.2.12
  • patch
    exportFiles reads a large archive back with a five-minute request budget instead of the SDK's 60-second default.
    @molecule/api-code-sandbox-e2b@1.2.14
  • patch
    A path check the sandbox could not answer now says so, instead of reading as a forbidden path.
    @molecule/api-ai-tools@1.4.4
  • patch
    GLM-5.3 Flash now defaults to the z.ai region; the US region stays selectable at the same price.
    @molecule/api-resource-ai-models@1.16.0
  • patch
    Maps the new Gemini 4 Argon catalog id to its fully qualified Pi model id.
    @molecule/api-agent-runtime-pi@1.0.3
  • patch
    The auto-approve setting's description now says how it relates to the project's network allowlist and Full access.
    @molecule/app-ide-react@1.21.1
  • patch
    The free-tier model picker now follows the server's per-mode defaults and the catalog's freeTier flag instead of hardcoded model ids.
    @molecule/app-ide-react@1.21.0
  • patch
    The open network policy no longer lists 0.0.0.0/8, which E2B refuses as a denied CIDR.
    @molecule/api-code-sandbox-e2b@1.2.13

  • patch
    Kimi K2.7 Code now serves from Moonshot's native endpoint only — the US re-host retired the model.
    @molecule/api-resource-ai-models@1.15.2

  • minor
    New bond: render HTML to PDF, merge PDFs and watermark PDFs through molecule.dev's hosted PDF service — billed to your molecule project, no vendor account. Swap it for @molecule/api-pdf-puppeteer or @molecule/api-pdf-pdfkit without code changes.
    @molecule/api-pdf-molecule@1.1.0
  • minor
    Scrolling toward the top of the IDE conversation now loads earlier messages automatically, holding the scroll position steady as each page mounts in. The separate "Show earlier messages" button is gone.
    @molecule/app-ide-react@1.20.0
  • patch
    BackgroundTaskState carries an optional description, the reason a background command was started.
    @molecule/app-ai-chat@1.5.2
  • patch
    exec_command accepts an optional description: a one-line reason shown in place of the raw command.
    @molecule/api-ai-tools@1.4.3
  • patch
    list() no longer resets the deadline of the sandboxes it enumerates: polling an account used to rewrite every running sandbox's timeout to the provider default, which paused sandboxes that had been kept alive and kept idle ones billing.
    @molecule/api-code-sandbox-e2b@1.2.11
  • patch
    list() now reports a 404 from the org-wide Machine listing as a failed query instead of answering an empty list, so a caller reconciling from the result cannot read an unknown org as "no sandboxes".
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A backtick in a model-supplied file name, command or plan name no longer splits a tool card's clickable code spans apart — it is rendered as a quote, so a card label can no longer turn separator text into a link that opens the wrong file.
    @molecule/app-ide-react@1.19.13
  • patch
    A batch read_file card no longer renders a dangling comma when one of the requested paths has no file name (a trailing-slash path like src/).
    @molecule/app-ide-react@1.19.13
  • patch
    A batch read_file card now opens the file each listed name belongs to when one of the requested paths has no file name (a trailing-slash path like src/), instead of opening that path.
    @molecule/app-ide-react@1.19.13
  • patch
    A clip duration whose frame count overflows the finite range is now refused before the request is sent, instead of sending a non-numeric frame count to the server.
    @molecule/api-ai-video-generation-kandinsky@1.2.2
  • patch
    A create whose Machine never reaches the running state now destroys that Machine before failing, so a failed boot no longer leaves a billed Machine behind holding the app's volume.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A failed archive import no longer leaves its partial download in the sandbox, and a boot that fails after allocating its Flycast private routes on an existing app now releases those addresses instead of stranding them.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A failed cleanup of an uploaded import archive now logs a warning naming the object left behind, matching the failure path, instead of a debug line.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A file import that fails after uploading its archive removes that object from the object store instead of leaving it behind.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A file import that fails while writing the archive now removes its temporary archive from the workspace instead of leaving it behind.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A model whose regions list is empty now resolves to the platform default region instead of no region at all.
    @molecule/api-resource-ai-models@1.15.1
  • patch
    A request that fails before any response arrives (DNS, TLS, a dropped connection, or the provider's own request deadline) now surfaces as the provider's error event instead of a raw transport error.
    @molecule/api-ai-anthropic@1.3.4
  • patch
    A sandbox boot that fails while allocating its Flycast private routes now releases the addresses it had already allocated, instead of leaving them behind on the target apps.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    A voice provider that is disposed while a queued chunk is still transcribing now stays in the idle state instead of reporting a failure it can never clear.
    @molecule/app-ai-voice-whistle@1.1.2
  • patch
    Adds the Command, Request and Response labels for tool-call cards.
    @molecule/app-locales-ide@1.10.7
  • patch
    Adds the work-tray chip labels and the waiting/stopped plan-step notes.
    @molecule/app-locales-ide@1.10.8
  • patch
    An acceptance-judge card now lists every failure the judge reported when the judge wrote them as plain lines instead of bullets, rather than only the first.
    @molecule/app-ide-react@1.19.13
  • patch
    An acceptance-judge card now lists every failure the judge reported, not only the first, and the failures are no longer repeated in the card's report body.
    @molecule/app-ide-react@1.19.13
  • patch
    An archive import spools the bytes each chunk carried when it was yielded, so a producer that reuses one buffer no longer corrupts the imported tree.
    @molecule/api-code-sandbox-e2b@1.2.11
  • patch
    An engine-file download that dies mid-transfer now releases its connection by cancelling the reader that holds the stream, so a failed download no longer leaves a connection open.
    @molecule/api-ai-speech-whistle@1.1.2@molecule/app-ai-voice-whistle@1.1.2
  • patch
    An error response whose body cannot be read now yields the same sanitized error event as every other API failure instead of throwing out of the stream.
    @molecule/api-ai-anthropic@1.3.4
  • patch
    Applying a non-empty egress allow-list to a sandbox that cannot enforce one now fails with an error instead of silently leaving the sandbox with unrestricted outbound traffic.
    @molecule/api-code-sandbox-e2b@1.2.11
  • patch
    Cancel the response body when streaming stops before the body is exhausted, so a truncated turn does not strand its connection.
    @molecule/api-ai-anthropic@1.3.4
  • patch
    Cancelling a chat request while it is waiting to retry a rate-limited response now surfaces the caller's own abort, instead of reporting the discarded response as a rate-limit error.
    @molecule/api-ai-anthropic@1.3.4
  • patch
    Creating a named volume is idempotent across concurrent boots: a create that loses the race to another boot now reports success once the volume exists, instead of failing the boot.
    @molecule/api-code-sandbox-e2b@1.2.11
  • patch
    Loading the speech engine with a different needle.wasm URL now loads that build instead of reusing an engine already loaded for another wasm URL.
    @molecule/api-ai-speech-whistle@1.1.2
  • patch
    Log in now derives its dummy password hash once per process even when several invalid-credential requests arrive at the same time, instead of running one full-cost hash per concurrent request.
    @molecule/api-resource-user@1.4.9
  • patch
    Log in now runs the same dummy password comparison (and records the failure) when an account exists but its secrets row is missing.
    @molecule/api-resource-user@1.4.9
  • patch
    Login now refuses the request, instead of issuing a session, when two-factor authentication is enabled for an account but no two-factor secret is stored.
    @molecule/api-resource-user@1.4.9
  • patch
    No runtime change — a test pins that a judge card's ISSUES block is stripped from the report body literally, including issue lines that contain $ characters.
    @molecule/app-ide-react@1.19.13
  • patch
    Qwen3 Coder Plus now runs on its US re-host only, at unchanged rates ($0.30/$1, cached reads $0.10) — DashScope retired the model.
    @molecule/api-resource-ai-models@1.15.1
  • patch
    Removed the unused ide.chat.showEarlier translation key.
    @molecule/app-locales-ide@1.10.6
  • patch
    Retry loading the E2B SDK client after a failed load instead of caching the failure for the life of the process.
    @molecule/api-code-sandbox-e2b@1.2.11
  • patch
    Test coverage for the import archive's success-path cleanup: the uploaded object is removed after a successful object-store import, and a removal that fails is logged with its key.
    @molecule/api-code-sandbox-flyio@1.2.7
  • patch
    Test coverage hardening only: the squatter-data wipe handler's tests now assert the stored hash is never used. No runtime change.
    @molecule/api-resource-user@1.4.10
  • patch
    The added/removed line count on an edit card is now computed in bounded time and memory, so an edit that replaces a whole large file no longer freezes the IDE.
    @molecule/app-ide-react@1.19.13
  • patch
    The added/removed line count on an edit card now keeps the order of the lines in view when a replacement is too large for the exact diff, so a big reordering shows its line changes instead of +0 −0.
    @molecule/app-ide-react@1.19.13
  • patch
    The edit-card line-diff bound is now enforced on the axis it documents: the two LCS rows are sized by the shorter of the two line lists, so the diff's memory stays bounded by the cell cap instead of growing with the longer side.
    @molecule/app-ide-react@1.19.13
  • patch
    The plan, background tasks, tests and uncommitted files are one row of chips in a full-width tray under the composer's top edge, and a plan step stops spinning when no turn is running (it says whether it is waiting for you or stopped).
    @molecule/app-ide-react@1.20.4
  • patch
    The plan, background tasks, tests and uncommitted files now share one card above the composer.
    @molecule/app-ide-react@1.20.3
  • patch
    The plan, background tasks, tests and uncommitted files share one strip style above the composer; the plan updates in place instead of repeating in the chat, background tasks show their purpose, and command cards wrap the full command and output.
    @molecule/app-ide-react@1.20.2
  • patch
    The retry backoff no longer waits when the request was already aborted, so a cancelled request returns its error immediately instead of after the delay.
    @molecule/api-ai-anthropic@1.3.4
  • patch
    The streaming resampler keeps the last buffered input sample across a flush, so audio pushed after a flush is interpolated continuously instead of starting with a sample computed against silence.
    @molecule/api-ai-speech-whistle@1.1.2
  • patch
    The streaming resampler no longer shifts its timeline when a chunk boundary lands just before a block's advance, so audio pushed in chunks is resampled to the same samples and the same count as the same audio pushed at once.
    @molecule/api-ai-speech-whistle@1.1.2
  • patch
    The work tray's tests chip is one short figure; the counts and the Tests button are in its opened detail.
    @molecule/app-ide-react@1.20.5
  • patch
    The working-plan card marks tasks with a check icon, the molecule spinner or an empty ring, and drops the "!" priority marker.
    @molecule/app-ide-react@1.20.1
  • patch
    Tool-call cards no longer crash the whole IDE when model-authored input is malformed at the element level: an edit_file replacement entry that is null or a non-object is skipped instead of read, and the live activity label reads each declared-string tool-input field through the same string coercion the cards use.
    @molecule/app-ide-react@1.19.13

  • patch
    list() stops starting new sandbox connects once one has failed, instead of connecting to every remaining sandbox on behalf of a call that already failed.
    @molecule/api-code-sandbox-e2b@1.2.10
  • patch
    start()/wake() on a Machine that is still booting now waits until it is running instead of resolving early, so the first command after the call no longer fails with "machine not running".
    @molecule/api-code-sandbox-flyio@1.2.6
  • patch
    A read_file card now names every file a batch read opened (each name opens its own file) instead of showing a bare "Read", and the streaming indicator names the file being read.

    The text on a tool card can now be selected and copied, and a "Wait for background task" card names the command it is waiting on.

    @molecule/app-ide-react@1.19.12
  • patch
    A failed importFiles extract now removes the staged archive instead of leaving it behind — on the workspace volume for the chunked fallback, in the sandbox's /tmp for the object-store path — while still failing with tar's real exit code.
    @molecule/api-code-sandbox-flyio@1.2.6
  • patch
    A failed engine or weights download now releases the error response before surfacing its typed error, instead of holding the connection until garbage collection.
    @molecule/api-ai-speech-whistle@1.1.1@molecule/app-ai-voice-whistle@1.1.1
  • patch
    A request aborted during a rate-limit backoff, and a non-streaming success body that is not JSON, now yield the sanitized error event instead of throwing a raw TypeError or SyntaxError out of the stream.
    @molecule/api-ai-anthropic@1.3.3
  • patch
    A streaming response body that dies mid-stream (connection reset, proxy cut, or the default timeout firing) now yields the sanitized error event instead of throwing a raw TypeError or TimeoutError out of the stream. A caller's own abort still propagates as before.
    @molecule/api-ai-anthropic@1.3.3
  • patch
    API errors now say when the provider's credit balance is too low instead of reporting the request as invalid.
    @molecule/api-ai-anthropic@1.3.3
  • patch
    Corrects the documentation of how job ids with dot segments are encoded and rejected; behavior is unchanged.
    @molecule/api-ai-video-generation-kandinsky@1.2.1
  • patch
    Every emit now releases the response body it never reads, instead of holding a connection until garbage collection on each call against a dead or erroring endpoint.
    @molecule/api-analytics-http@1.0.3
  • patch
    Rate-limited and overloaded responses are now released before a retry, so sustained 429/529 handling no longer holds connections open until garbage collection.
    @molecule/api-ai-anthropic@1.3.3
  • patch
    The engine download now fails with a typed error when the glue script never loads (120 s deadline) instead of leaving recognition stuck in "preparing" forever.
    @molecule/app-ai-voice-whistle@1.1.1
  • patch
    The retry backoff now removes its abort listener when the wait completes, so a caller signal reused across turns no longer accumulates a listener per rate-limited retry.
    @molecule/api-ai-anthropic@1.3.3
  • patch
    The upload response body is released after a successful upload, so the connection returns to the pool instead of waiting for garbage collection.
    @molecule/api-ai-video-generation-ltx@1.1.2

  • minor
    scheduledPricing can carry a replacement longContextPricing band that takes effect from the same effectiveFrom (omitted → the existing band carries through), so a price change on a prompt-length-priced model moves both rate cards together. effectiveLongContextPricing() resolves the band in effect at an instant; modelRegionRates() and withEffectivePricing() use it.
    @molecule/api-resource-ai-models@1.15.0
  • minor
    Adds @molecule/api-ai-speech-whistle — Cactus Compute's 16.9 MB seven-language speech-to-text running in-process on CPU via the needle WASM engine, with word timestamps, keyword biasing and streaming, and no server or API key.
    @molecule/api-ai-speech-whistle@1.1.0
  • minor
    Adds @molecule/app-ai-voice-whistle — on-device speech-to-text in the browser via Cactus Compute's 16.9 MB Whistle WASM model (CPU-only, seven languages, no WebGPU, audio never leaves the device).
    @molecule/app-ai-voice-whistle@1.1.0
  • minor
    ai-video-generation: VideoJobResult gains expiresAt, set when the provider reports when url is evicted. kandinsky: when the server requires an API key, a completed job's MP4 is downloaded by the bond and returned inline as result.data (the content URL answers 401 without the key), the server's expires_at is surfaced as result.expiresAt, the MP4 is downloaded once per job (later polls reuse it), and a 2xx response with a non-JSON body fails as a KandinskyVideoError instead of a raw SyntaxError.
    @molecule/api-ai-video-generation-kandinsky@1.2.0@molecule/api-ai-video-generation@1.2.0
  • patch
    generate() refuses a job id it could never poll back (dot segments, empty segments, ? or #) instead of minting a handle getStatus() rejects, and an error response whose body dies mid-stream still fails as an LtxVideoError carrying the status instead of a raw TypeError.
    @molecule/api-ai-video-generation-ltx@1.1.1
  • patch
    generate() refuses a non-finite durationSeconds with a 400 instead of serializing it to duration: null, which the 2.5 tiers read as automatic duration.
    @molecule/api-ai-video-generation-ltx@1.1.1
  • patch
    getStatus() rejects job ids whose tail contains dot segments (literal or percent-encoded), empty, ? or # segments, and percent-encodes each tail segment when building the poll URL. A 2xx response with a non-JSON body fails as an LtxVideoError instead of a raw SyntaxError. A completed job whose result carries no video_url fails with a typed error instead of reporting success with an empty result.
    @molecule/api-ai-video-generation-ltx@1.1.1
  • patch
    list() connects to all running sandboxes concurrently instead of one round trip at a time, so enumerating a fleet costs one connect latency rather than one per sandbox.
    @molecule/api-code-sandbox-e2b@1.2.9
  • patch
    list() keeps at most 16 sandbox connects in flight instead of one per running sandbox at once — a fleet sweep stays concurrent without spending a socket and file descriptor per sandbox on every poll.
    @molecule/api-code-sandbox-e2b@1.2.9
  • patch
    A transcribeStream session that is aborted while it waits for the engine's stream no longer writes its final partial block into the engine (or emits transcripts for a cancelled dictation); the session queued behind it no longer inherits that audio.
    @molecule/api-ai-speech-whistle@1.1.0
  • patch
    A failed importFiles spool/extract or exportFiles archive create now fails with the failing stage's name and the command's stderr instead of the SDK's bare "exit status N" error.
    @molecule/api-code-sandbox-e2b@1.2.9
  • patch
    A job status carrying a numeric timestamp the Date type cannot represent no longer crashes the poll with a raw RangeError; the unrepresentable field is treated as absent.
    @molecule/api-ai-video-generation-kandinsky@1.2.0
  • patch
    A missing answer for a question whose id is "__proto__" now raises the usual "no answer for question" error instead of being fabricated into a zero-confidence answer.
    @molecule/api-ai-decisions-liquid-d1@1.1.1
  • patch
    A non-finite fps is refused with a 400 LtxVideoError before the submit, instead of being serialized to JSON null.
    @molecule/api-ai-video-generation-ltx@1.1.1
  • patch
    A sandbox listing the adapter cannot read (an SDK shape change — a new envelope or a null) is now a thrown error instead of an empty array, so no caller mistakes an unreadable listing for "no sandboxes exist", and volume/snapshot usage checks never act on that answer.
    @molecule/api-code-sandbox-e2b@1.2.9
  • patch
    A start superseded by stop-then-start while the microphone was still opening now releases the microphone it opened: the abandoned setup used to build a second capture graph under the live session's fields and leave its stream running.
    @molecule/app-ai-voice-whistle@1.1.0
  • patch
    A WAV file that names the RIFF/WAVE container but ends inside it now fails as WhistleWavError code truncated (missing chunks), as the error's documented contract promises — the old 44-byte acceptance floor classified every cut-off file as not-wav, leaving no input that could reach the truncated code. Files too short to name a container at all are still not-wav.
    @molecule/api-ai-speech-whistle@1.1.0
  • patch
    An error response whose body dies mid-stream still fails as a KandinskyVideoError carrying the status, and an MP4 download that dies mid-transfer fails as a typed error with status 0 instead of a raw TypeError.
    @molecule/api-ai-video-generation-kandinsky@1.2.0
  • patch
    Concurrent transcribeStream calls are serialized: the engine keeps ONE live stream per process, so two transcriptions at once no longer interleave their audio into a single shared transcript. A session holds the engine from its first block to its stop; a concurrent call queues until it is free.
    @molecule/api-ai-speech-whistle@1.1.0
  • patch
    Engine-file downloads that die mid-stream (and glue fetches that answer non-2xx or carry non-JavaScript bodies) now fail with the typed WhistleEngineError (download-failed / load-failed) instead of a raw network error, and the app voice bond's speak() no longer lets a replaced utterance's end event idle the replacement while it is still speaking.
    @molecule/api-ai-speech-whistle@1.1.0@molecule/app-ai-voice-whistle@1.1.0
  • patch
    Every request now carries a deadline (30 s by default, timeoutMs config), so a connection that never answers fails instead of leaving decide() pending forever. The caller's signal and the deadline both apply, whichever fires first.
    @molecule/api-ai-decisions-liquid-d1@1.1.1
  • patch
    exec() clears the timers its wait race armed, so a command that finished no longer holds the process's event loop open for the grace window.
    @molecule/api-code-sandbox-e2b@1.2.9
  • patch
    get() now throws when the Fly API cannot be reached, so a transient failure is no longer reported as a missing sandbox.
    @molecule/api-code-sandbox-flyio@1.2.5
  • patch
    Importing this server-only package into a browser bundle now fails immediately with a message naming the package, instead of a confusing error from deep inside a dependency.
    17 packages
    @molecule/api-agent-runtime-claude-code@1.1.3@molecule/api-ai-speech-audio8@1.0.1@molecule/api-ai-speech-confucius4@1.0.1@molecule/api-ai-speech-llm@1.0.1@molecule/api-ai-speech-nemo-speech@1.0.1@molecule/api-analytics-http@1.0.2@molecule/api-code-sandbox-flyio-sprites@1.0.3@molecule/api-database-d1@1.0.5@molecule/api-git-provider-gitea@1.0.6@molecule/api-git-provider-github@1.0.6@molecule/api-git-provider-gitlab@1.0.6@molecule/api-git-provider-smolforge@1.0.6@molecule/api-model-hosting-modal@1.0.1@molecule/api-project-archive-external-state-d1@1.0.4@molecule/api-scheduler-cloudflare@1.0.4@molecule/api-uploads-mirror@1.1.3@molecule/api-git-provider@1.0.6
  • patch
    Logging in with a password reset link now applies the same one-hour validity gate as the reset confirmation itself (a future-dated timestamp is refused, so the login path is no longer the looser gate for the same credential), and the login analytics event reports the credential that actually authenticated when a request carries both a password and a reset token.
    @molecule/api-resource-user@1.4.8
  • patch
    Non-finite numeric parameters (durationSeconds, fps, seed, steps, guidanceScale, width, height) are refused with a 400 KandinskyVideoError before any request, instead of riding the multipart form as the literal strings "NaN"/"Infinity".
    @molecule/api-ai-video-generation-kandinsky@1.2.0
  • patch
    Password resets submitted through the emailed link are consumed atomically, and logging in with a reset link no longer spends the link on the two-factor challenge, so the retried request with the 2FA code now succeeds.
    @molecule/api-resource-user@1.4.8
  • patch
    Registers LIQUID_BASE_URL (the hosted-API gateway override) with the secrets registry, so the boot-time configuration report lists it like the bond's other environment variables.
    @molecule/api-ai-decisions-liquid-d1@1.1.1
  • patch
    Reject a FloatBlockResampler blockSize that is zero, negative or non-finite at construction. Such a block size never advances the emit loop's position, so the first push() would emit blocks forever — an event-loop hang with an unbounded block array. The constructor now refuses it with the same error shape it already applies to a non-positive sample rate.
    @molecule/api-ai-speech-whistle@1.1.0
  • patch
    Retries cancel the failed response body before backing off (no stranded sockets), and the headers hook is re-resolved on every attempt so short-lived tokens are re-minted. A 2xx response with a non-JSON body fails with a status-carrying error instead of a raw SyntaxError. Configuration is resolved on each call, so keys the secrets registry writes into the environment after startup are picked up without a restart.
    @molecule/api-ai-decisions-liquid-d1@1.1.1
  • patch
    The /model usage hint lists example model ids from the live model catalog instead of a fixed, outdated set.
    @molecule/app-ide-react@1.19.11@molecule/app-locales-ide@1.10.5
  • patch
    The voice provider's reported state now tracks the session: a pass that succeeds after a transient transcription failure returns the state to listening (it used to stick at error while dictation kept working), dispose() reports idle instead of the stale in-session state, and an engine download that fails after the user already pressed stop no longer reports a start failure for the abandoned session.
    @molecule/app-ai-voice-whistle@1.1.0
  • patch
    The WAV decoder treats its input as hostile: RIFF chunk size fields are read as unsigned 32-bit (a header declaring 0xFFFFFFF8 no longer traps the parser in an endless scan that hung transcribe()), and source sample rates outside 4000–384000 Hz are rejected as unsupported-format instead of scaling the 16 kHz resample into a crash or an out-of-memory allocation.
    @molecule/api-ai-speech-whistle@1.1.0
  • patch
    Updates handlebars to 4.7.10, which fixes three template-injection advisories.
    @molecule/api-templating-handlebars@1.0.3@molecule/api-templating-mjml@1.0.3

  • major
    Adds @molecule/api-ai-decisions-kev, a provider for @molecule/api-ai-decisions backed by a self-hosted kev.serve (the open-weights Kev models) over its /v1/systemone API.
    @molecule/api-ai-decisions-kev@1.0.0
  • minor
    Adds @molecule/api-ai-decisions-liquid-d1, a Liquid d1 decision-model provider for @molecule/api-ai-decisions — typed choice/score/yes-no answers with images, hosted at api.liquid.ai or self-hosted via llama-server (REST via fetch, zero dependencies).
    @molecule/api-ai-decisions-liquid-d1@1.1.0
  • minor
    Adds @molecule/api-ai-video-generation-kandinsky, a self-hosted Kandinsky 6.0 (MIT weights) video-with-audio provider for @molecule/api-ai-video-generation over a vLLM-Omni server's /v1/videos API (REST via fetch, zero dependencies).
    @molecule/api-ai-video-generation-kandinsky@1.1.0
  • minor
    Adds @molecule/api-ai-video-generation-ltx, a Lightricks LTX-2.5/LTX-2.3 provider for @molecule/api-ai-video-generation over the hosted async V2 job API (REST via fetch, zero dependencies).
    @molecule/api-ai-video-generation-ltx@1.1.0
  • minor
    Adds longContextPricing to model definitions and an optional promptTokens argument to modelRegionRates, so models priced by prompt length (Claude Haiku 5.5 above 100K tokens) bill the long-context rates.
    @molecule/api-resource-ai-models@1.14.0
  • minor
    Adds claude-haiku-5-5 ($0.10/$0.50 per MTok, 1M context) and supersedes Claude Haiku 4.5 with it.
    @molecule/api-resource-ai-models@1.14.0
  • minor
    Adds the ai-video-generation core: a job-based provider interface for generating short video clips (with synchronized audio) from text prompts and first-frame images, with optional upscale.
    @molecule/api-ai-video-generation@1.1.0
  • minor
    New bond: deliver web push notifications through molecule.dev — VAPID handled for you, sends metered to your project. The hosted counterpart to @molecule/api-push-notifications-web-push; swap without code changes.
    @molecule/api-push-notifications-molecule@1.1.0
  • patch
    A command whose process is gone while its output stream is still held now reports exit code 137 instead of a fabricated 0, so a killed build fails instead of shipping partial output.
    @molecule/api-code-sandbox-e2b@1.2.8
  • patch
    Corrects the Claude Sonnet 5.5 cache-read price to $0.10/MTok.
    @molecule/api-resource-ai-models@1.14.0
  • patch
    Docs: lists @molecule/api-ai-decisions-kev in the provider table.
    @molecule/api-ai-decisions@1.1.1
  • patch
    Docs: points Kev servers at @molecule/api-ai-decisions-kev, which carries Kev's own defaults and limits.
    @molecule/api-ai-decisions-laya@1.1.1
  • patch
    get() now throws when the Fly API cannot be reached, so a transient failure is no longer reported as a missing sandbox.
    @molecule/api-code-sandbox-flyio@1.2.4
  • patch
    Login 2FA codes, 2FA enable/disable codes and password-reset links are now consumed atomically, so concurrent requests with the same code or link can no longer both succeed.
    @molecule/api-resource-user@1.4.7
  • patch
    Maps the claude-haiku-5-5 catalog id to its Anthropic pi model id.
    @molecule/api-agent-runtime-pi@1.0.2

  • major
    Adds @molecule/api-ai-embeddings-embeddinggemma, an EmbeddingGemma 2 provider for @molecule/api-ai-embeddings that embeds text, images and audio in-process via Transformers.js, with task prefixes and Matryoshka sizes handled for you.
    @molecule/api-ai-embeddings-embeddinggemma@1.0.0
  • major
    Adds @molecule/api-ai-embeddings-gemini, a Gemini API provider for @molecule/api-ai-embeddings that embeds text, images, audio and video with hosted gemini-embedding-2 (REST via fetch, zero dependencies).
    @molecule/api-ai-embeddings-gemini@1.0.0
  • minor
    Adds setupDatabasePglite, setupPaymentsCapture, setupEmailsCapture and createMigratorPglite, the setup functions for a zero-server browser profile; @molecule/api-database-pglite and @molecule/api-payments-capture are optional peers, loaded only when called.
    @molecule/api-bonds-default-express@1.1.0
  • minor
    Adds optional task and inputType to EmbedParams for instruction-prefixed models, plus an optional embedContent method and modalities list for embedding images, audio and video alongside text.
    @molecule/api-ai-embeddings@1.1.0
  • patch
    Documents serving self-hosted models such as EmbeddingGemma 2 on vLLM through baseUrl and defaultModel.
    @molecule/api-ai-embeddings-openai@1.0.5

  • major
    createAudioRenderRoutes now requires mediaRoot and outputDir, ignores client outputPath/queueName, confines clip sources to the media root, and ffmpeg opens only local files unless allowRemoteSources is set.
    @molecule/api-audio-render@2.0.0
  • major
    createEnqueueRenderHandler now requires mediaRoot and outputDir, ignores client outputPath/jobId/queueName, confines clip sources to the media root, and ffmpeg opens only local files unless allowRemoteSources is set.
    @molecule/api-video-render@2.0.0
  • minor
    Add buildMockFixtureSet, serializeFixtureSet and the browser-safe ./router and ./browser entries, so a static build can answer fetch from the same fixtures and routing the server uses.
    @molecule/api-mock-server@1.2.0
  • patch
    A copy stream that the mirror destroys because the source failed, hit its size limit or closed early no longer raises an uncaught error event when a target does not listen for one; each target still receives the failure through its own error callback.
    @molecule/api-uploads-mirror@1.1.2
  • patch
    Adds the accessible names for the chat message list and the message box in all languages.
    @molecule/app-locales-ide@1.10.4
  • patch
    Changing the plan of an existing subscription now charges the prorated difference immediately and fails the whole change if the charge fails, instead of deferring it to the next renewal invoice. A subscription that is past due, unpaid, incomplete or paused is no longer changed in place.
    @molecule/api-payments-stripe@1.2.6
  • patch
    Clearing a chat deletes the conversation named by ?conversationId= (looked up within the project) instead of whichever conversation the project listed first; with no id and several conversations it answers 400.
    @molecule/api-resource-ai-conversation@1.0.3
  • patch
    CSV exports now prefix cells that start with =, +, -, @, a tab or a carriage return with a single quote so spreadsheets read them as text, and quote cells containing carriage returns.
    @molecule/api-reporting-database@1.0.3
  • patch
    Declares @molecule/api-logger as a peer dependency.
    @molecule/api-billing-routes@1.1.2
  • patch
    Declares @molecule/app-i18n as a peer dependency.
    6 packages
    @molecule/app-achievement-card-react@1.0.3@molecule/app-amount-input-react@1.0.3@molecule/app-inbox-row-react@1.0.4@molecule/app-password-strength-meter-react@1.0.3@molecule/app-slide-thumbnail-react@1.0.4@molecule/app-webhook-inspector-react@1.0.4
  • patch
    Declares @types/express-serve-static-core, whose types it augments.
    @molecule/api-middleware-body-parser-express@1.0.3
  • patch
    Declares @types/express for the Express types it imports.
    @molecule/api-middleware-validation@1.0.3
  • patch
    Declares react-native and expo-constants as optional peer dependencies.
    @molecule/app-push-react-native@1.0.3
  • patch
    Declares zod as a dependency and express and @molecule/api-server-default-express as peer dependencies.
    @molecule/api-bonds-default-express@1.0.3
  • patch
    Declares its quill-delta dependency.
    @molecule/app-rich-text-quill@1.0.5
  • patch
    Declares its uuid dependency.
    @molecule/api-resource-device@1.0.4@molecule/api-resource-user@1.4.6
  • patch
    Documentation now states the package imports from react-router and peer-depends on react-router ^7 || ^8.
    @molecule/app-safe-link-react@1.0.3
  • patch
    Documents over 250,000 characters are no longer sent to the language server, so one large open file can no longer push the language-server connection into a reconnect loop.
    @molecule/app-code-editor-monaco@1.0.3
  • patch
    HTTPS mode now loads pem correctly from this ES module and says how to install it when missing; pem is declared as an optional peer dependency.
    @molecule/api-server-default-express@1.0.3
  • patch
    In the browser fetch, a hand-written fixture now answers its endpoint instead of the list the scanner sampled for the same path.
    @molecule/api-mock-server@1.2.0
  • patch
    Media sources are checked against their real path, so a symlink inside the media root can no longer reach files outside it.
    @molecule/api-audio-render@2.0.1@molecule/api-video-render@2.0.1
  • patch
    Public share-link slugs are now always generated with node:crypto randomBytes, with no Math.random fallback.
    @molecule/api-resource-share@1.0.4
  • patch
    The chat panel announces new messages to screen readers through a live log (additions only, so a streaming reply is not read token by token), ignores Enter while an input method composition is active, and names the message box and the Send and Stop buttons.
    @molecule/app-ide-react@1.19.10
  • patch
    The migrator no longer prints the full DATABASE_URL (and the password in it) when it cannot connect; it names the host and database only.
    @molecule/api-database-postgresql@1.0.5
  • patch
    The missing-provider error now names the exact call to fix it: bond('audit', provider).
    @molecule/api-audit@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('content', provider).
    @molecule/api-content@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('cron', provider).
    @molecule/api-cron@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('crypto-prices', provider).
    @molecule/api-crypto-prices@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('drug-database', provider).
    @molecule/api-drug-database@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('emails-inbound', provider).
    @molecule/api-emails-inbound@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('encryption', provider).
    @molecule/api-encryption@1.1.1
  • patch
    The missing-provider error now names the exact call to fix it: bond('error-tracking', provider).
    @molecule/api-error-tracking@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('esign', provider).
    @molecule/api-esign@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('feature-flags', provider).
    @molecule/api-feature-flags@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('flights', provider).
    @molecule/api-flights@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('geolocation', provider).
    @molecule/api-geolocation@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('hotels', provider).
    @molecule/api-hotels@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('import-export', provider).
    @molecule/api-import-export@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('kyc', provider).
    @molecule/api-kyc@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('media-streaming', provider).
    @molecule/api-media-streaming@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('multi-tenancy', provider).
    @molecule/api-multi-tenancy@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('notification-center', provider).
    @molecule/api-notification-center@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('nutrition-database', provider).
    @molecule/api-nutrition-database@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('oauth-client', provider).
    @molecule/api-oauth-client@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('permissions', provider).
    @molecule/api-permissions@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('rate-limit', provider).
    @molecule/api-rate-limit@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('realtime', provider).
    @molecule/api-realtime@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('search', provider).
    @molecule/api-search@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('shipping', provider).
    @molecule/api-shipping@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('sitemap', provider).
    @molecule/api-sitemap@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('sms', provider).
    @molecule/api-sms@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('text-provenance', provider).
    @molecule/api-text-provenance@1.0.2
  • patch
    The missing-provider error now names the exact call to fix it: bond('travel', provider).
    @molecule/api-travel@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('video-meetings', provider).
    @molecule/api-video-meetings@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('video-rooms', provider).
    @molecule/api-video-rooms@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('weather', provider).
    @molecule/api-weather@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('webhook', provider).
    @molecule/api-webhook@1.0.3
  • patch
    The missing-provider error now names the exact call to fix it: bond('workflow', provider).
    @molecule/api-workflow@1.0.3
  • patch
    The password-reset email now links to the reset page when only APP_ORIGIN is configured (it used to require SITE_ORIGIN), and the link carries the account's email so the reset page can prefill it.
    @molecule/api-resource-user@1.4.5
  • patch
    Updates sharp to 0.35.5, which fixes a vulnerability in its bundled librsvg.
    @molecule/api-image-sharp@1.0.4

  • minor
    Add createProvider() to run several S3-compatible stores in one app, each with its own endpoint, credentials, bucket, storage class and key prefix, plus headFile() for object metadata, per-object Object Lock retention and checksum options, and describeBucketProtection() / bucketProtectionMeets() to check a bucket is versioned and locked; the env-configured provider is unchanged.
    @molecule/api-uploads-s3@1.1.0
  • minor
    Add authenticated chunked AES-256-GCM stream encryption with a per-stream HKDF subkey and a key id, detecting tampering, reordering, a wrong context, a wrong key and truncation without holding the stream in memory.
    @molecule/api-encryption-aes@1.1.0
  • minor
    Add optional encryptStream()/decryptStream() to EncryptionProvider, the shared mol-aead-chunked-v2 stream format, EncryptionStreamError with a code that separates damaged ciphertext from a wrong key or a truncated stream, isEncryptionStreamError() and hasStreamEncryption().
    @molecule/api-encryption@1.1.0
  • minor
    New bond: molecule.dev hosted AI decisions — typed choice/score/yes-no questions about a piece of text or JSON, answered with probability distributions and billed to your molecule project (scope broker:ai-decisions, no AI-vendor account; metered at the model's real token spend). Local pre-checks refuse oversized input before any request.
    @molecule/api-ai-decisions-molecule@1.1.0
  • minor
    New bond: molecule.dev hosted geocoding — geocode and reverseGeocode billed to your molecule project (scope broker:maps, no maps-vendor account), served by molecule's self-hosted OpenStreetMap geocoder at zero upstream cost. Local pre-checks refuse oversized or out-of-range calls before any request; errors are MoleculeServiceError with status and errorKey.
    @molecule/api-geolocation-molecule@1.1.0
  • minor
    New bond: molecule.dev hosted image transformation — resize, crop, rotate, flip, flop, thumbnail, optimize and format-convert (jpeg/png/webp/avif/gif/tiff) as a drop-in ImageProvider, billed to your molecule project (scope broker:image; self-hosted upstream, zero vendor cost). Use the raw transform() to run a multi-op pipeline in one round trip.
    @molecule/api-image-molecule@1.1.0
  • minor
    New bond: one upload provider that writes every file to several upload providers and reads it back from whichever has it.
    @molecule/api-uploads-mirror@1.1.0
  • minor
    New bond: Photon, the open-source OpenStreetMap geocoder, as a GeolocationProvider — geocode, reverse geocode, Haversine distance and search-as-you-type autocomplete against any Photon instance (PHOTON_BASE_URL defaults to the low-volume public instance; self-host for production). Serves an OSM extract, so coverage is the loaded region and out-of-region queries return an empty array; results require "© OpenStreetMap contributors" attribution.
    @molecule/api-geolocation-photon@1.1.0
  • minor
    New upload provider that encrypts every file with the bonded stream encryption before another upload provider stores it, and decrypts and authenticates it on read.
    @molecule/api-uploads-encrypted@1.1.0
  • patch
    createProvider refuses a key version outside the stream header's range and a prior key at the current version; verify() answers false instead of throwing for a candidate hash with multi-byte characters; rotateKey() takes the next free version (never one a prior key holds) and refuses to run past the stream header's range.
    @molecule/api-encryption-aes@1.1.1
  • patch
    headFile throws NoSuchBucket for a missing bucket instead of answering "no object"; partSizeBytes sets the multipart part size for bodies above the default ~48.8 GiB ceiling.
    @molecule/api-uploads-s3@1.1.1
  • patch
    importFiles spools in bounded pieces whatever the chunk size it is given; exportFiles removes its temporary archive on failure too and names it uniquely.
    @molecule/api-code-sandbox-e2b@1.2.7
  • patch
    importFiles spools the archive into the sandbox in 8 MB pieces instead of holding the whole archive in memory.
    @molecule/api-code-sandbox-e2b@1.2.6
  • patch
    A multipart size limit (limit) or a source that closes before it ends now fails the upload instead of sealing the truncated body as a complete object; the README says what the inner store sees.
    @molecule/api-uploads-encrypted@1.1.1
  • patch
    A multipart size limit or a source that closes before it ends fails every copy instead of storing a truncated body; uploadPromise is marked handled for callers that rely on onError; uploads are tracked by their returned file as well as their id.
    @molecule/api-uploads-mirror@1.1.1
  • patch
    Omit the temperature parameter by default — several catalog models reject the parameter itself with a 400, which made every decide call fail against them. Pin sampling with the new optional temperature config only when the bonded model accepts it.
    @molecule/api-ai-decisions-llm@1.2.1
  • patch
    Serialise an object state as compact JSON instead of indented JSON, so deeply nested input no longer grows the prompt by orders of magnitude.
    @molecule/api-ai-decisions-llm@1.2.1
  • patch
    The README describes the import transfer as it works (spooled into the sandbox in pieces) and the AES and encrypted-uploads bonds declare the encryption core version they import from.
    @molecule/api-code-sandbox-e2b@1.2.7
  • patch
    Translate the dictation badge label (ide.chat.viaDictation.badge) in every locale.
    @molecule/app-locales-ide@1.10.3

  • major
    Adds @molecule/api-analytics-axiom, an analytics provider that batches tracked events into an Axiom dataset without blocking the caller.
    @molecule/api-analytics-axiom@1.0.0
  • major
    Adds @molecule/api-logger-axiom, a logger provider that mirrors log lines with structured fields into an Axiom dataset while still printing them locally.
    @molecule/api-logger-axiom@1.0.0
  • minor
    api-analytics gains trackBondFailure — the standard bond failure telemetry (bond.failure events, best-effort and throttled) that makes every vendor-facing bond failure queryable. The email, S3 uploads and Stripe bonds emit it at their vendor failure boundaries, including swallowed ones like a webhook handler returning null.
    @molecule/api-analytics@1.1.0
  • minor
    Optional readFileBytes / writeFileBytes on the sandbox handle for exact binary file I/O; the E2B bond implements them through the envd file API.
    @molecule/api-code-sandbox@1.3.0
  • patch
    destroy() now reports a failed machine or app delete instead of swallowing it, so a caller can retry; a 404 still counts as already gone.
    @molecule/api-code-sandbox-flyio@1.2.3
  • patch
    openUrl strips leading control characters and spaces before reading the URL scheme, so a target like \u0001javascript:… is refused instead of passing as a relative path.
    @molecule/app-utilities@1.0.4
  • patch
    ResponsiveAppShell closes its drawer on same-route navigations too — the fleet's #top safe-target pattern appends a hash when the current nav item is re-tapped, which changed neither pathname nor search, and the drawer previously stayed open over the page.
    @molecule/app-ui-react@1.3.1
  • patch
    shutdown() drains within a bounded budget and reports what it could not send.
    @molecule/api-analytics-axiom@1.0.2
  • patch
    A 200 that reports rejected events counts only the stored ones as sent, shutdown drains the queue and reports what was lost, ingest after shutdown is counted as dropped, and Retry-After on 429/503 is honoured.
    @molecule/api-analytics-axiom@1.0.1
  • patch
    A 409 that carries an error key (for example a project being deleted) is shown at once instead of being retried for minutes.
    @molecule/app-ai-chat-http@1.3.1
  • patch
    A chat message whose author account was deleted (an author with a name but no id) renders its name as plain text instead of a profile button, so the click no longer opens the viewer's own profile.
    @molecule/app-ide-react@1.19.6
  • patch
    A probe sandbox with no network is reported as inconclusive, not as open egress.
    @molecule/api-code-sandbox-e2b@1.2.4
  • patch
    A recovered provider blip no longer ends the turn in the chat; an interrupted tool call is shown as interrupted, not done; a failed subagent shows one plain line.
    @molecule/app-ide-react@1.19.8@molecule/app-react@1.6.1
  • patch
    A tool result that arrives before its message is attached to the newest pending call, never to an older finished one.
    @molecule/app-react@1.6.1
  • patch
    Account deletion removes the user row first, so a failed delete cannot leave an account without its password.
    @molecule/api-resource-user@1.4.4
  • patch
    Agent runs validate caller input before any exec (https GitHub repo URL, GitHub token shape, bare-hostname allowlist entries), authenticate the clone through an in-sandbox git credential helper so the token never rides the clone URL or git argv, probe every allowlisted egress host plus a blocked canary, and refuse sandbox providers that cannot enforce per-run egress.
    @molecule/api-agent-runtime-pi@1.0.1
  • patch
    Agent runs validate caller input before any exec (https GitHub repo URL, GitHub token shape, bare-hostname allowlist entries), authenticate the clone through an in-sandbox git credential helper so the token never rides the clone URL or git argv, probe every allowlisted egress host plus a blocked canary, refuse sandbox providers that cannot enforce per-run egress, install the Claude Code CLI at a pinned version instead of @latest, and forward ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN to the CLI when the caller supplies them.
    @molecule/api-agent-runtime-claude-code@1.1.2
  • patch
    api-analytics gains trackBondFailure — the standard bond failure telemetry (bond.failure events, best-effort and throttled) that makes every vendor-facing bond failure queryable. The email, S3 uploads and Stripe bonds emit it at their vendor failure boundaries, including swallowed ones like a webhook handler returning null.
    7 packages
    @molecule/api-emails-mailgun@1.0.7@molecule/api-emails-resend@1.0.2@molecule/api-emails-sendgrid@1.0.3@molecule/api-emails-sendmail@1.0.7@molecule/api-emails-ses@1.0.7@molecule/api-payments-stripe@1.2.5@molecule/api-uploads-s3@1.0.8
  • patch
    Bounded queue size in bytes, shutdown deadline applies to in-flight sends, and a configurable shutdown budget.
    @molecule/api-analytics-axiom@1.0.2@molecule/api-logger-axiom@1.0.2
  • patch
    Capture the user's actual email: verify() now reads GET /user/emails (the user:email scope it always requested) and returns the primary verified address, instead of only the public profile email — which is null for most users, so accounts were created with no email at all. Falls back to the public email when the endpoint is unavailable; a failed lookup never fails the login.
    @molecule/api-oauth-github@1.2.1
  • patch
    Chat card actions with protocol-relative URLs (//host) open in a new tab with noopener noreferrer instead of navigating the current tab to another origin.
    @molecule/app-ide-react@1.19.7
  • patch
    Give every nav link an aria-label: below the md breakpoint the visible label hides and the link collapses to an icon-only target whose icon is aria-hidden, so screen readers previously announced an unnamed link.
    @molecule/app-top-nav-layout-react@1.0.3
  • patch
    OAuth login now backfills a missing email on an existing account from a provider-verified address (non-destructive: never when another account holds the email; an unverified same-address account is upgraded to verified instead).
    @molecule/api-resource-user@1.4.3
  • patch
    Optional readFileBytes / writeFileBytes on the sandbox handle for exact binary file I/O; the E2B bond implements them through the envd file API.
    @molecule/api-code-sandbox-e2b@1.2.5
  • patch
    Resume sends (resume: true) now carry Accept: text/event-stream, so a server that is still streaming the turn can attach the request to the live stream (the attached frame) instead of refusing with 409 once the retry backoff runs out. New sends deliberately keep the 409-retry path — attaching never reads the request body, so a new message must serialize behind the running turn.
    @molecule/app-ai-chat-http@1.3.3
  • patch
    The verifyEgress() probe sandbox is now created to be killed at its deadline instead of paused, so a leaked probe never leaves a snapshot on the host.
    @molecule/api-code-sandbox-e2b@1.2.5
  • patch
    The documented environment variable for the socket-inactivity timeout is AWS_S3_SOCKET_TIMEOUT_MS, the name the provider reads.
    @molecule/api-uploads-s3@1.0.7
  • patch
    The Mailgun transport now has a request timeout (10 s, overridable), so a stalled send fails instead of hanging.
    @molecule/api-emails-mailgun@1.0.6
  • patch
    The notification list endpoint clamps the limit query parameter to 1–500 and the offset to 0 or more.
    @molecule/api-resource-notification@1.0.3
  • patch
    The S3 client now has connection and socket-inactivity timeouts (10 s / 60 s, overridable), so a hung S3 socket can no longer stall the caller indefinitely.
    @molecule/api-deploy-target-s3@1.1.1@molecule/api-uploads-s3@1.0.6
  • patch
    Three new chat strings: an interrupted tool call, a failed subagent.
    @molecule/app-locales-ide@1.10.1
  • patch
    Voice-dictated messages now carry a red mic badge in the chat: text dictated through the mic button flags the sent message viaDictation (persisted server-side, so the badge survives a reload), and the message header renders a muted-red mic beside the author name — same 16px icon box as the other header glyphs, with a "Dictated by voice" tooltip.
    5 packages
    @molecule/app-ai-chat-http@1.3.2@molecule/app-ai-chat@1.5.1@molecule/app-ide-react@1.19.9@molecule/app-react@1.6.2@molecule/app-locales-ide@1.10.2
  • patch
    Widen the Pi peer range to ^1.0.0 — 1.2.1 pinned the optional peer to 1.0.1, but the bond's source version is 1.0.0, so the range refused the only version that exists (and would refuse the first published one if it lands as 1.0.0).
    @molecule/api-agent-transcript-autodetect@1.2.2

  • major
    Adds @molecule/api-agent-runtime-pi, a Pi coding-agent runtime for @molecule/api-agent-run that runs unattended tasks on any Pi-supported model provider in an ephemeral sandbox and returns a patch.
    @molecule/api-agent-runtime-pi@1.0.0
  • major
    Adds @molecule/api-agent-transcript-pi, a reader for Pi session files and pi --mode json output for @molecule/api-agent-transcript.
    @molecule/api-agent-transcript-pi@1.0.0
  • minor
    Add claude-opus-5-5 (released 2026-09-22; provider-verified). Supersession re-pointed one hop: opus-5/4-8/4-7/4-6 → opus-5-5.
    @molecule/api-resource-ai-models@1.13.0
  • minor
    NEW ConfirmButton: the two-step destructive-action pattern (click arms → "Confirm?" → second click commits, auto-disarm, Escape, aria-live, pending state) as one shared, theme-aware component — replaces the arm-confirm state machines ~30 apps hand-rolled.
    @molecule/app-ui-react@1.3.0
  • minor
    Recognizes and reads Pi session files and pi --mode json output.
    @molecule/api-agent-transcript-autodetect@1.2.0
  • minor
    ResponsiveAppShell hardening from the first adoption wave: drawer wrapper z-index fix (backdrop painted above the panel on the first eight adopting apps), focus-trap + reference-counted scroll lock (coexists with stacked Modal), TopBar min-width guard so long brands never push actions off-screen, mobile-first root flexDirection. Docs: documented the cn() tailwind-merge ordering trap behind the styling package's cn().
    @molecule/app-ui-react@1.3.0
  • minor
    Switch: the track button now carries a 40×40 after: touch hit-area (visual sm/md/lg unchanged) — meets WCAG 2.5.8 by default instead of shipping 20–28px targets. ThemeToggle trigger grew from 30px to a 40×40 hit area (20px icon centered, visual unchanged).
    @molecule/app-ui-react@1.3.0
  • patch
    PATCH /projects/:id now persists the starting-point fields its input type advertises (projectType, framework, packages, templateSlug, brandingSpec). The handler silently dropped them, so a caller persisting a chosen flagship through the route scaffolded the blank starter instead — every template demo preview deployed the generic "project-app" under the template's URL.
    @molecule/api-resource-project@1.0.4
  • patch
    Clicking a package name on a read_molecule_doc or find_package card opens the package's README.md in the editor. The link still named the pre-rename MOLECULE.md, so the editor switched views but no file ever loaded.
    @molecule/app-ide-react@1.19.4
  • patch
    Icon: an unknown bonded-set name now warns and renders a neutral placeholder circle instead of throwing — a missing glyph must never white-screen an app.
    @molecule/app-ui-react@1.3.0
  • patch
    Make the Pi reader an optional dynamic import instead of a dependency: 1.2.0 shipped a hard dependency on @molecule/api-agent-transcript-pi, which is not yet published to the public registry, making every registry install of autodetect fail outright (E404 resolving the install graph). The Pi reader now joins harnessReaders only when the consuming project ships the bond itself.
    @molecule/api-agent-transcript-autodetect@1.2.1
  • patch
    OAuth account creation now claims the provider handle as the username (vialoh from GitHub's vialoh@github) instead of flattening it into vialohgithub; collisions append re-checked numeric then id-based suffixes.
    @molecule/api-resource-user@1.4.2
  • patch
    Package-doc card clicks open the package's README.md, not the pre-rename MOLECULE.md path.
    @molecule/app-ide-react@1.19.5
  • patch
    Push-notification Switch carries aria-label — the visible text was a sibling span, so the control was announced as a bare "switch".
    @molecule/app-settings-panel-react@1.0.5
  • patch
    rrweb DOM recording is now opt-in via MOL_E2E_RRWEB=1. The injected loader ran in the addInitScript phase where document.head can be null (pageerror on every page, failing every console-guarded test fleet-wide) and loaded rrweb from unpkg, which billing/pricing pages' CSP blocks with a console.error per load. Videos record either way.
    @molecule/app-e2e-fixtures-default@1.2.2
  • patch
    rrweb DOM-recording is now opt-in via MOL_E2E_RRWEB=1. On by default it failed console-guarded tests fleet-wide: the loader ran in the init phase where document.head can be null (a pageerror on every page), and its unpkg load is blocked by billing/pricing pages' CSP (a console.error per load). The loader keeps both guards for whoever opts in; videos record either way.
    @molecule/app-e2e-fixtures-default@1.2.1
  • patch
    Switch: the track button now carries a 40×40 after: touch hit-area (visual sm/md/lg unchanged) — meets WCAG 2.5.8 by default instead of shipping 20–28px targets. ThemeToggle trigger grew from 30px to a 40×40 hit area (20px icon centered, visual unchanged).
    @molecule/app-ui-tailwind@1.2.6
  • patch
    UserMenu trigger: default 40×40 touch-target floor (the icon-only size="sm" trigger measured 42×26px fleet-wide). Apps can still widen via className.
    @molecule/app-ui-react@1.3.0

  • minor
    Automatic rrweb DOM-replay recording in every test; events ship as Playwright attachments for the replay reporter.
    @molecule/app-e2e-fixtures-default@1.2.0
  • minor
    Limit errors carry the billing action and upgrade tier through to the upgrade CTA.
    @molecule/app-ai-chat-http@1.3.0
  • minor
    The provider profile image is captured as the user's avatar.
    @molecule/api-oauth-github@1.2.0@molecule/api-oauth-gitlab@1.2.0@molecule/api-oauth-google@1.2.0
  • minor
    The provider profile is captured on signup (name/bio/avatar), and avatars are re-hosted as inline data URIs, never third-party URLs.
    @molecule/api-oauth-twitter@1.2.0
  • patch
    A project tree restored from an imported archive is writable by the sandbox.
    @molecule/api-code-sandbox-docker@1.1.4
  • patch
    Documentation: the README example and wiring note now match the core (the core registers the ai-embeddings bond).
    @molecule/api-ai-embeddings-openai@1.0.4
  • patch
    Documentation: the README now ships runnable example code (and the server-only browser guard/formatting was regenerated).
    28 packages
    @molecule/api-ai-image-generation-openai@1.0.3@molecule/api-ai-image-generation-stability@1.0.3@molecule/api-ai-speech-elevenlabs@1.0.3@molecule/api-cache-memcached@1.0.3@molecule/api-cache-memory@1.0.3@molecule/api-cache-redis@1.0.3@molecule/api-oauth-apple@1.0.3@molecule/api-password-bcrypt@1.0.3@molecule/api-payments-apple@1.0.3@molecule/api-payments-google@1.0.3@molecule/api-project-archive-external-state-mysql@1.0.3@molecule/api-project-archive-external-state-postgresql@1.0.3@molecule/api-project-archive-external-state-sqlite@1.0.3@molecule/api-uploads-filesystem@1.0.3@molecule/app-fonts-dm-sans@1.0.3@molecule/app-fonts-dm-serif-display@1.0.3@molecule/app-fonts-ibm-plex-mono@1.0.3@molecule/app-fonts-ibm-plex-sans@1.0.3@molecule/app-fonts-lato@1.0.3@molecule/app-fonts-lora@1.0.3@molecule/app-fonts-manrope@1.0.3@molecule/app-fonts-material-symbols@1.0.3@molecule/app-fonts-merriweather@1.0.3@molecule/app-fonts-newsreader@1.0.3@molecule/app-fonts-playfair-display@1.0.3@molecule/app-fonts-plus-jakarta-sans@1.0.3@molecule/app-fonts-source-serif-4@1.0.3@molecule/app-fonts-space-grotesk@1.0.3
  • patch
    Documentation: the README now ships runnable example code, with the proven-correct TOTP snippet for otplib v13.
    @molecule/api-two-factor-otplib@1.0.3
  • patch
    Exports are re-exported through export-* barrels so every framework wrapper resolves.
    @molecule/app-ui-showcase@1.0.3
  • patch
    Fixed the type import for nodemailer's namespace export.
    @molecule/api-emails-sendmail@1.0.6
  • patch
    Gemini accepts other models' tool calls.
    @molecule/api-ai-google@1.3.2
  • patch
    Identifiers containing hyphens are accepted — they are quoted at every interpolation site.
    @molecule/api-database-mysql@1.0.4@molecule/api-database-postgresql@1.0.4
  • patch
    SDK clients honor the proxy environment, and the env names provisioning tools actually export are accepted.
    @molecule/api-uploads-s3@1.0.5
  • patch
    Subscription updates set (and type) the seat quantity.
    @molecule/api-payments-stripe@1.2.4
  • patch
    The services URL now accepts plain http to private-network hosts (RFC 1918 and *.docker.internal, e.g. an in-sandbox app reaching its platform's gateway) — public cleartext is still refused.
    7 packages
    @molecule/api-ai-embeddings-molecule@1.1.2@molecule/api-ai-image-generation-molecule@1.1.1@molecule/api-ai-speech-molecule@1.1.2@molecule/api-ai-translation-molecule@1.1.2@molecule/api-content-moderation-molecule@1.1.2@molecule/api-ocr-molecule@1.1.2@molecule/api-web-search-molecule@1.1.2
  • patch
    Tool-call ids the Messages API rejects are mapped to valid stable ids.
    @molecule/api-ai-anthropic@1.3.2
  • patch
    Tool-result messages keep their non-tool content parts instead of dropping them.
    8 packages
    @molecule/api-ai-alibaba@1.1.3@molecule/api-ai-deepseek@1.0.6@molecule/api-ai-local@1.0.5@molecule/api-ai-minimax@1.1.3@molecule/api-ai-moonshot@1.1.3@molecule/api-ai-openai@1.4.3@molecule/api-ai-xai@1.0.6@molecule/api-ai-zhipu@1.2.2

  • minor
    aiProvider also accepts a provider instance, for callers that route each request to a different ai provider.
    @molecule/api-ai-decisions-llm@1.2.0
  • minor
    Adds an optional headers config hook, resolved before each request, for hosts whose auth expires or is not a bearer token.
    4 packages
    @molecule/api-ai-decisions-intern-decision@1.1.0@molecule/api-ai-decisions-jeff@1.1.0@molecule/api-ai-decisions-jev@1.1.0@molecule/api-ai-decisions-laya@1.1.0
  • minor
    Adds gpt-6.1-sol ($2/$10, cached input $0.10), which supersedes gpt-6-sol.
    @molecule/api-resource-ai-models@1.11.0
  • minor
    Adds grok-4.6 ($2/$6, cached $0.50), marked superseded by grok-4.7.
    @molecule/api-resource-ai-models@1.12.0
  • minor
    Adds grok-4.7 ($2/$6, cached $0.50) and marks grok-4.5 as superseded by it.
    @molecule/api-resource-ai-models@1.12.0
  • patch
    A user message mixing tool_result blocks with other content parts (an image riding a tool result — the screenshot tool's capture) no longer loses the non-tool parts on the Chat Completions path: they are emitted as a user message after the tool messages, matching what the Responses, Anthropic and Gemini transports already did. Previously any such part was silently dropped.
    8 packages
    @molecule/api-ai-alibaba@1.1.2@molecule/api-ai-deepseek@1.0.5@molecule/api-ai-local@1.0.4@molecule/api-ai-minimax@1.1.2@molecule/api-ai-moonshot@1.1.2@molecule/api-ai-openai@1.4.2@molecule/api-ai-xai@1.0.5@molecule/api-ai-zhipu@1.2.1
  • patch
    Default model is now grok-4.7.
    @molecule/api-ai-xai@1.0.4
  • patch
    Depends on the Aider, Cline, Cursor, Gemini CLI and OpenCode readers at 1.0.1.
    @molecule/api-agent-transcript-autodetect@1.1.2
  • patch
    Every Playwright test now records rrweb DOM-mutation events alongside the video. The events are a few KB of JSON saved as rrweb-events.json in the test's output dir, and can be replayed deterministically through the rrweb player in the replay viewer's "DOM replay" mode — enabling programmatic DOM inspection that video cannot provide.
    @molecule/app-e2e-fixtures-default@1.1.3
  • patch
    Publishes the package README; 1.0.0 shipped without it.
    5 packages
    @molecule/api-agent-transcript-aider@1.0.1@molecule/api-agent-transcript-cline@1.0.1@molecule/api-agent-transcript-cursor@1.0.1@molecule/api-agent-transcript-gemini-cli@1.0.1@molecule/api-agent-transcript-opencode@1.0.1
  • patch
    ResponsiveAppShell.Sidebar footer now renders as a horizontal justify-between row (UserMenu left, ThemeToggle right) instead of stacking them vertically. Apps that pass <UserMenu /> and <ThemeToggle /> into the footer slot get a properly spaced bottom bar without a wrapper div.
    @molecule/app-ui-react@1.2.3
  • patch
    Updates engine.io to 6.6.11 (GHSA-2gc4-cqfq-p2gv).
    @molecule/api-realtime-socketio@1.0.3
  • patch
    UserMenu gains a side prop ('left' | 'right', default 'right'). Apps whose sidebar trigger sits on the left should pass side="left" so the panel opens adjacent to the trigger instead of always from the right viewport edge.
    @molecule/app-ui-react@1.2.4

  • major
    Adds @molecule/api-ai-decisions-intern-decision, a provider for @molecule/api-ai-decisions backed by a self-hosted Intern-Decision service, answering typed questions about text and images.
    @molecule/api-ai-decisions-intern-decision@1.0.0
  • major
    Adds @molecule/api-ai-decisions-jeff, a provider for @molecule/api-ai-decisions backed by a self-hosted jeff-serve (the open-weights Jeff models) over its /v1/systemone API.
    @molecule/api-ai-decisions-jeff@1.0.0
  • major
    Adds @molecule/api-ai-image-generation-vllm-omni, a vLLM-Omni provider for @molecule/api-ai-image-generation that generates and edits images (Qwen-Image-2.1 by default) on a self-hosted server via fetch, with zero dependencies.
    @molecule/api-ai-image-generation-vllm-omni@1.0.0
  • major
    Adds @molecule/api-ai-speech-audio8, an Audio8-ASR-Infinite provider for @molecule/api-ai-speech with low-latency streaming speech-to-text for Chinese and English on a self-hosted server (WebSocket, zero dependencies).
    @molecule/api-ai-speech-audio8@1.0.0
  • major
    Adds @molecule/api-ai-speech-confucius4, a Confucius4-R2T2 provider for @molecule/api-ai-speech with append-only streaming speech-to-text on a self-hosted server (WebSocket, zero dependencies).
    @molecule/api-ai-speech-confucius4@1.0.0
  • major
    Adds @molecule/api-ai-speech-llm, a provider for @molecule/api-ai-speech that transcribes audio through any audio-capable @molecule/api-ai chat model.
    @molecule/api-ai-speech-llm@1.0.0
  • major
    Adds @molecule/api-ai-speech-nemo-speech, an NVIDIA NeMo-Speech.cpp provider for @molecule/api-ai-speech with batch and streaming speech-to-text plus speaker diarization on a self-hosted server (fetch and WebSocket, zero dependencies).
    @molecule/api-ai-speech-nemo-speech@1.0.0
  • major
    Adds @molecule/api-ocr-teleocr, a provider for @molecule/api-ocr backed by the open TeleOCR document-parsing model served by vLLM, with its verbatim task prompts and an OTSL-to-HTML table converter.
    @molecule/api-ocr-teleocr@1.0.0
  • minor
    ImageEditParams gains an optional images field for multi-reference edits; providers that do not support it keep using image alone.
    @molecule/api-ai-image-generation@1.1.0
  • minor
    Adds an optional images field to decide() input for bonds whose model reads images; bonds that cannot see images throw when it is set.
    @molecule/api-ai-decisions@1.1.0
  • minor
    Adds claude-sonnet-5-5 ($2/$10) and marks claude-sonnet-5 as superseded by it.
    @molecule/api-resource-ai-models@1.10.0
  • minor
    Adds optional streaming speech-to-text (transcribeStream, streamingAppendOnly), speaker diarization (diarize(), TranscribeParams.diarize/maxSpeakers) and speaker labels on transcription words and segments.
    @molecule/api-ai-speech@1.1.0
  • minor
    Also reads Gemini CLI, Cline / Roo Code, OpenCode, GitHub Copilot Chat, Cursor and Aider transcripts, and — tried last — any plain Markdown / text chat with User / Assistant markers. harnessReaders is the list without the generic reader.
    @molecule/api-agent-transcript-autodetect@1.1.0
  • minor
    Deploy requests accept an optional onPhase callback reporting building and publishing transitions; the S3 bond reports publishing.
    @molecule/api-deploy-target-s3@1.1.0@molecule/api-deploy-target@1.1.0
  • minor
    New bond: @molecule/api-ai-image-generation-molecule generates images through molecule.dev's hosted image-generation service and bills each image to your molecule project — no image-vendor account. It is an ordinary provider on the @molecule/api-ai-image-generation core, swappable with the OpenAI and Stability bonds without code changes. Every image passes molecule.dev's moderation classifier before it returns; quality is explicit (low/medium/high) so each served call has a deterministic per-image price.
    @molecule/api-ai-image-generation-molecule@1.1.0
  • minor
    Passes decide() images to the bonded ai provider as image content blocks, so vision chat models can answer questions about images.
    @molecule/api-ai-decisions-llm@1.1.0
  • patch
    A note of a tap kind (about one paragraph) no longer carries a layout row into the next section, so that section's summary sits beside its own heading instead of under the previous section's.
    @molecule/app-margin-notes-html@1.0.7
  • patch
    Default model is now claude-sonnet-5-5.
    @molecule/api-agent-runtime-claude-code@1.1.1
  • patch
    Depends on the Copilot Chat and Markdown chat readers 1.0.1, which carry their compiled code.
    @molecule/api-agent-transcript-autodetect@1.1.1
  • patch
    On a phone the notes panel takes at most 30% of the screen height, and a tapped paragraph that the opening panel would cover scrolls clear of it, so a second tap on the same paragraph always reaches it.
    @molecule/app-margin-notes-html@1.0.8
  • patch
    Publishes the compiled reader; 1.0.0 shipped without it.
    @molecule/api-agent-transcript-copilot-chat@1.0.1@molecule/api-agent-transcript-markdown-chat@1.0.1
  • patch
    Security dependency bumps for the audit gate: e2b 2.38.3 → 2.51.0, nodemailer 9.1.1 → 10.0.12 (a process-global DNS cache could reuse a TLS servername across transports), undici 7.29.0 → 7.30.0 (DoS via an unhandled WebSocket-permessage error). No API changes — the same createTransport/sendMail calls, the same webhook delivery and preview-fetch code, the same E2B Sandbox methods.
    9 packages
    @molecule/api-code-sandbox-e2b@1.2.3@molecule/api-emails-mailgun@1.0.5@molecule/api-emails-sendmail@1.0.5@molecule/api-emails-ses@1.0.6@molecule/api-webhook-http@1.0.3@molecule/api-webhook-queue@1.0.3@molecule/api-link-preview@1.0.3@molecule/api-oembed@1.0.3@molecule/api-smtp@1.0.4
  • patch
    The README example detects heading levels with text.match(); behavior is unchanged. First release to carry the fixes listed under 1.0.2–1.0.5.
    @molecule/app-margin-notes-react@1.0.6
  • patch
    Throws a clear error when decide() is given images, which Jev does not read, instead of answering from the text alone.
    @molecule/api-ai-decisions-jev@1.0.1
  • patch
    Throws a clear error when decide() is given images, which Laya does not read, instead of answering from the text alone.
    @molecule/api-ai-decisions-laya@1.0.1

  • patch
    accentCard({ tone }) and accentCardLabel({ tone }): a block with an inset colored bar down its leading edge and a heading in the bar's color, with semantic, primary and custom (--mol-accent) tones.
    @molecule/app-ui@1.3.4
  • patch
    accentCard / accentCardLabel tokens; the Alert left-accent variant now renders the same inset rounded bar instead of a hard border-left.
    @molecule/app-ui-tailwind@1.2.5
  • patch
    create() deletes the app it created when a later step fails (for example, the organization has reached its Machine limit), so a failed create no longer leaves an empty app, its addresses and its volume behind. An app that existed before the call is never deleted.
    @molecule/api-code-sandbox-flyio@1.2.2
  • patch
    searchUi.help ("Search tips") replaces the retired searchUi.tips and searchUi.tipsHide keys, in all 79 languages.
    @molecule/app-locales-search-ui@1.0.2
  • patch
    useKeyboardShortcut: register a shortcut with the bonded provider for the life of a component; mod+ expands to Ctrl and Command.
    @molecule/app-keyboard-shortcuts-react@1.0.1
  • patch
    A failed cookie-session restore (401) now clears the stale mol_auth presence hint, so an expired server-side session (or a DB reset) no longer re-fires a guaranteed-401 /users/me probe — and its console error — on every subsequent page load. The next real login re-sets the hint alongside the fresh cookie.
    @molecule/app-auth@1.1.2
  • patch
    A node's color renders as the shared inset accent bar on the node body instead of a border-left.
    @molecule/app-mind-map-canvas-react@1.0.4
  • patch
    A prompt that produced several paragraphs is shown once, and a prompt spanning two sections no longer carries a section's summary into the previous section.
    @molecule/app-margin-notes-html@1.0.3@molecule/app-margin-notes-react@1.0.5
  • patch
    Accented tiles carry their color as the shared inset accent bar, with the meta caption in the same color.
    @molecule/app-class-schedule-react@1.0.4
  • patch
    Client-side query cache core: fetch once, read synchronously, prefetch ahead of navigation, observe changes; the cache engine is a bond.
    @molecule/app-query@1.0.1
  • patch
    Client-side search core: index a list already in the browser and search it with prefix matching, typo tolerance, field:value filters, phrases and exclusions.
    @molecule/app-client-search@1.0.1
  • patch
    Dependency-free in-memory bond for @molecule/app-query.
    @molecule/app-query-memory@1.0.1
  • patch
    Dialogs and bottom sheets render above other fixed layers (z-index 9999 / 9998).
    @molecule/app-ui-tailwind@1.2.3
  • patch
    Docs: the stylesheet goes before the site's own CSS so the site's overrides win, and a table of the data-mol-id selector for every part of the layout, for tests.
    @molecule/app-margin-notes-html@1.0.6
  • patch
    Documentation: the usage example registers its key in an app-level namespace.
    @molecule/app-keyboard-shortcuts-react@1.0.2
  • patch
    Event blocks carry their accent color as the shared inset accent bar, with the caption in the same color.
    @molecule/app-day-timeline-react@1.0.3
  • patch
    formatQuery and highlightMatches in the core; useSearchSession (hash state, remembered query, keyboard, augment) and useLazyDocs in the React package.
    @molecule/app-client-search@1.0.2@molecule/app-client-search-react@1.0.2
  • patch
    MiniSearch bond for @molecule/app-client-search.
    @molecule/app-client-search-minisearch@1.0.1
  • patch
    Model picker rows carry their provider color as the shared inset accent bar.
    @molecule/app-ide-react@1.19.2
  • patch
    Notes carry their accent as an inset rounded bar inside the note instead of a border-left.
    @molecule/app-margin-notes-html@1.0.4
  • patch
    Optional setupAppClientSearchMinisearch() wiring helper.
    @molecule/app-bonds-default-react@1.0.5
  • patch
    React hooks for @molecule/app-client-search: useClientSearchIndex, useClientSearch and useListNavigation.
    @molecule/app-client-search-react@1.0.1
  • patch
    React hooks for @molecule/app-query: useQuery, usePrefetch and intentPrefetchProps.
    @molecule/app-query-react@1.0.1
  • patch
    Results with the typed words next to each other rank higher, and the fallback search keeps only documents that match at least half of the words.
    @molecule/app-client-search-minisearch@1.0.2
  • patch
    Search box with filter chips and tips, ranked results with matched terms marked, and a quick-search dialog, all on ClassMap search tokens.
    @molecule/app-search-ui-react@1.0.1
  • patch
    Search UI tokens: searchField, filterChip, kbd, resultList and friends, for search boxes and result lists.
    @molecule/app-ui-tailwind@1.2.4@molecule/app-ui@1.3.3
  • patch
    TanStack Query bond for @molecule/app-query.
    @molecule/app-query-tanstack@1.0.1
  • patch
    The footer copyright value is now just © {{year}} {{app}} in every locale. The "Built with Molecule.dev" credit is rendered by the app footer as a real link beside the copyright line — the old inline text made every footer read the credit twice.
    @molecule/app-locales-common@1.0.4
  • patch
    The Google Translate bond sends its API key in the X-goog-api-key request header instead of the URL query string, so the key no longer appears in access logs or error reports that record full URLs.
    @molecule/api-ai-translation-google@1.0.1
  • patch
    The phone bar reserves its height at the end of the page, not just the article, so a footer or anything else below the notes is no longer covered by the open panel; the reserved height follows the bar as it resizes.
    @molecule/app-margin-notes-html@1.0.5
  • patch
    The search tips moved into a help icon inside the field (hover or focus shows the syntax); afterField renders the consumer's own controls, such as tabs, directly under the input.
    @molecule/app-search-ui-react@1.0.2
  • patch
    The spinner's warm glint now rides a peach overlay circle stacked over an always-opaque base stroke. Fading a stop of the base itself made part of each atom's rim semi-transparent, which showed the background through on light surfaces.
    @molecule/app-ui@1.3.2
  • patch
    The UserMenu trigger has a border that matches the LanguagePicker.
    @molecule/app-ui-react@1.2.2
  • patch
    Tool-call ids outside the Messages API pattern (^[a-zA-Z0-9_-]+$) are mapped to a valid, stable id instead of failing the request with a 400.
    @molecule/api-ai-anthropic@1.3.1
  • patch
    Translations for @molecule/app-search-ui-react.
    @molecule/app-locales-search-ui@1.0.1
  • patch
    Web clipboard bond: the async Clipboard API with a selection-and-copy fallback.
    @molecule/app-clipboard-web@1.0.1
  • patch
    When no record holds every word typed, the session's augmenting hits (for example the ones a semantic index finds) lead the list instead of following it.
    @molecule/app-client-search-react@1.0.3

  • minor
    Adds moleculeSpinnerMarkSvg — the animated molecule spinner mark as a framework-agnostic SVG string (3-phase atom swap, swap-synced atom glints, seamless blue flow, currentColor mono mode), the single source every molecule.dev surface renders.
    @molecule/app-ui@1.3.0
  • minor
    New core: run a coding agent UNATTENDED in an ephemeral, isolated environment and get artifacts back — the containment model (per-run credentials, deny-by-default egress, artifacts-only return) is the contract.
    @molecule/api-agent-run@1.1.0
  • minor
    New runtime: the Claude Code CLI in an ephemeral cloud sandbox — created for the run, destroyed before the artifact returns.
    @molecule/api-agent-runtime-claude-code@1.1.0
  • minor
    The effective-plan-key resolver now also receives the user id, so an app can grant a plan based on who the user is (for example, an operator-configured allowlist of internal accounts).
    @molecule/api-entitlements@1.1.0
  • patch
    openUrl now navigates only to http(s) or relative targets — a javascript:, data: or other scriptable scheme is refused with a console.warn and no navigation.
    @molecule/app-utilities@1.0.3
  • patch
    Card actions in chat cards and the help card now go through the same URL-scheme allowlist as markdown links — an action whose href carries a scriptable scheme (javascript:, data:, …) renders as inert text instead of an anchor.
    @molecule/app-ide-react@1.19.1
  • patch
    Fixes the spinner mark's atom glints: the warm pulse now animates a peach stop's opacity over the light base instead of animating stop-color, which could not interpolate CSS var() colors and left the gradient flat.
    @molecule/app-ui@1.3.1
  • patch
    Fleet audit fixes: add borderL and alertLeftAccent class-map tokens, implement the previously-dropped Alert variant="left-accent" (status-colored 4px leading bar, React + Vue), and change the button icon/spinner spacing tokens from mr-2/ml-2 to shrink-0 (the button's own gap already provides spacing — the stacked margins made icons sit off-center).
    4 packages
    @molecule/app-ui-tailwind@1.2.2@molecule/app-ui@1.2.1@molecule/app-ui-react@1.2.1@molecule/app-ui-vue@1.0.3
  • patch
    Fleet audit fixes: stop emitting secondary <header> elements from shared shells — the auth brand header and legal ContentPageShell hero now render <div>/<section> (apps with their own top bar rendered two banners), the billing PricingPage heading/tier cards no longer use <header>, and AuthShellCardColumn gains min-w-0 so wide auth forms no longer push pages past the mobile viewport.
    4 packages
    @molecule/app-auth-brand-header-react@1.0.3@molecule/app-auth-shell-react@1.0.3@molecule/app-billing-react@1.0.4@molecule/app-legal-pages-react@1.1.3
  • patch
    The background-run guidance now points at wait_for_task (or exec_command with tail) for a task's log output — the previous text suggested read_file, which cannot reach /tmp under the default path guards, so the read always failed.
    @molecule/api-ai-tools@1.4.2
  • patch
    The hosted-services provider now refuses a plain-http MOLECULE_SERVICES_URL at construction with a clear error, because the project API key rides as a Bearer token on every call — only https URLs (or http to localhost / 127.0.0.1 for a locally running services instance) are accepted.
    6 packages
    @molecule/api-ai-embeddings-molecule@1.1.1@molecule/api-ai-speech-molecule@1.1.1@molecule/api-ai-translation-molecule@1.1.1@molecule/api-content-moderation-molecule@1.1.1@molecule/api-ocr-molecule@1.1.1@molecule/api-web-search-molecule@1.1.1
  • patch
    The list endpoints clamp the limit query parameter into 1..500 — an oversized limit previously passed through unbounded to the store query (and the device query allowed up to 10000).
    9 packages
    @molecule/api-resource-activity-feed@1.0.3@molecule/api-resource-comment@1.0.4@molecule/api-resource-device@1.0.3@molecule/api-resource-follow@1.0.4@molecule/api-resource-message@1.0.4@molecule/api-resource-share@1.0.3@molecule/api-resource-template@1.0.3@molecule/api-resource-thread@1.0.3@molecule/api-resource-workspace@1.0.3
  • patch
    The preview panel's outbound postMessage bridge commands are now targeted at the preview iframe's current origin instead of a wildcard, so page-driving commands are only deliverable to the page the panel is actually talking to.
    @molecule/app-ide-react@1.19.1
  • patch
    The recognize call rejects language codes other than plain Tesseract traineddata names (letters, digits and underscores joined by + or -) with a clear error, instead of passing them through to the traineddata loader.
    @molecule/api-ocr-tesseract@1.1.1
  • patch
    The service-worker update banner escapes the localized strings it interpolates into its markup, so a <, & or quote character in a translated string renders as text instead of becoming markup.
    @molecule/app-pwa-default@1.0.4
  • patch
    The simple provider fills a single-brace placeholder when that key was passed.
    @molecule/app-i18n@1.0.3
  • patch
    The streaming indicator renders the shared moleculeSpinnerMarkSvg mark instead of its own inline copy, so it matches the IDE spinner and the deployed-app attribution badge exactly.
    @molecule/app-ide-react@1.19.1
  • patch
    Vault error bodies embedded in thrown messages and warn logs are now capped at 200 characters, so an oversized or gateway-generated error page can no longer flood an exception message or the log stream.
    @molecule/api-secrets-molecule@1.0.3

  • minor
    exec_command runs a command that asks for more time than its ceiling, with output held until the end, in the background (returning a task id) instead of refusing it.
    @molecule/api-ai-tools@1.4.0
  • minor
    New core: a web search contract — search results through a swappable provider, with a vendor API or molecule.dev's hosted service.
    @molecule/api-web-search@1.1.0
  • minor
    New core: an OCR contract — extract text from images through a swappable provider, with a vision model, self-hosted Tesseract, or molecule.dev's hosted service.
    @molecule/api-ocr@1.1.0
  • minor
    New provider: OCR hosted by molecule.dev and billed to your molecule project, with no vendor account.
    @molecule/api-ocr-molecule@1.1.0
  • minor
    New provider: OCR through any vision-capable @molecule/api-ai model, hosted or self-hosted.
    @molecule/api-ocr-llm@1.1.0
  • minor
    New provider: self-hosted OCR with Tesseract running in your own process — no vendor account and no per-call cost.
    @molecule/api-ocr-tesseract@1.1.0
  • minor
    New provider: web search hosted by molecule.dev and billed to your molecule project, with no vendor account.
    @molecule/api-web-search-molecule@1.1.0
  • minor
    New provider: web search through the Brave Search API — independent index, free monthly credits, per-1k pricing beyond them.
    @molecule/api-web-search-brave@1.1.0
  • patch
    A section's notes share one row for the whole section, so a sticky summary stays pinned until the section ends.
    @molecule/app-margin-notes-html@1.0.1@molecule/app-margin-notes-react@1.0.3
  • patch
    A tap-kind note (e.g. prompts) now follows the section being read in the phone panel once its switch is on, instead of waiting for a tap.
    @molecule/app-margin-notes-html@1.0.2
  • patch
    An ambiguous edit_file old_string now reports the lines it matched.
    @molecule/api-ai-tools@1.4.1
  • patch
    list_files on a missing path now answers with what the parent directory contains.
    @molecule/api-ai-tools@1.4.1
  • patch
    Mark the OpenAI gpt-5.5, gpt-5.6 and gpt-6 sol/luna entries rejectsTemperature, and document toolsRequireReasoningOff as applying to tool-less calls only.
    @molecule/api-resource-ai-models@1.9.1
  • patch
    read_file on a missing @molecule README in node_modules points at read_molecule_doc.
    @molecule/api-ai-tools@1.4.1
  • patch
    Replay a tool call Gemini did not make (history from another model) with Google's placeholder thought signature instead of failing the request.
    @molecule/api-ai-google@1.3.1
  • patch
    Replay each tool call's preceding reasoning and web search items on the Responses API, so a model that searched does not search again and repeat its tool call on the next turn.
    @molecule/api-ai-openai@1.4.1
  • patch
    Republish at 1.0.4: carries the sticky-summary section-row fix and the tap-kind notes improvement that npm's registry could not accept as 1.0.2/1.0.3.
    @molecule/app-margin-notes-react@1.0.4
  • patch
    Summaries are plain text (markdown the model adds is removed) and the model is asked for a length under the cap, so answers stop landing exactly on it.
    @molecule/api-ai-summarization-llm@1.1.1
  • patch
    The blocked environment-dump message now shows how to check whether one variable is set without printing it.
    @molecule/api-ai-tools@1.4.1

  • minor
    Add ContentClassifierProvider and setClassifier / requireClassifier: a separate slot for providers that score content without storing reports.
    @molecule/api-content-moderation@1.1.0
  • minor
    Add TokenUsage.webSearchRequests, the number of provider-run web searches billed per search on top of tokens; each AI bond reports the searches its provider ran.
    5 packages
    @molecule/api-ai-anthropic@1.3.0@molecule/api-ai-google@1.3.0@molecule/api-ai-openai@1.4.0@molecule/api-ai-zhipu@1.2.0@molecule/api-ai@1.3.0
  • minor
    Add webSearchPricePer1k to price web searches; enable web search on OpenAI models and remove it from Zhipu GLM models, where it never runs alongside function tools.
    @molecule/api-resource-ai-models@1.9.0
  • minor
    Adds ResponsiveAppShell, LoadErrorBanner, ConfirmDialog and PromptDialog.
    @molecule/app-ui-react@1.2.0
  • minor
    Hard word/sentence caps enforced in code (whole sentences only, re-asks when long), plus a file cache keyed by a hash of the text.
    @molecule/api-ai-summarization-llm@1.1.0@molecule/api-ai-summarization@1.1.0
  • minor
    New content classifiers: OpenAI's moderation endpoint, and the same classifier hosted by molecule.dev and billed to your molecule project.
    @molecule/api-content-moderation-molecule@1.1.0@molecule/api-content-moderation-openai@1.1.0
  • minor
    New provider: embeddings hosted by molecule.dev and billed to your molecule project, with no vendor account.
    @molecule/api-ai-embeddings-molecule@1.1.0
  • minor
    New provider: self-hosted translation with Google's MADLAD-400 model through a bundled CTranslate2 sidecar server, with placeholder protection.
    @molecule/api-ai-translation-madlad@1.1.0
  • minor
    New provider: self-hosted translation with Mozilla's Firefox Translations (Bergamot) models, run on the CPU in-process, with placeholder protection.
    @molecule/api-ai-translation-bergamot@1.1.0
  • minor
    New provider: text-to-speech and transcription hosted by molecule.dev and billed to your molecule project, with no vendor account.
    @molecule/api-ai-speech-molecule@1.1.0
  • minor
    New provider: translate through any @molecule/api-ai model, with placeholder protection and automatic retries.
    @molecule/api-ai-translation-llm@1.1.0
  • minor
    New provider: translate through molecule.dev's hosted translation service with a project API key.
    @molecule/api-ai-translation-molecule@1.1.0
  • patch
    Confirmations and toggles now use the shared ConfirmDialog, ConfirmButton and Switch from @molecule/app-ui-react instead of window.confirm and hand-built controls.
    @molecule/app-image-gallery-editor-react@1.0.3@molecule/app-node-editor-panel-react@1.0.4@molecule/app-settings-panel-react@1.0.4
  • patch
    Correct the wiring note: setProvider() registers the ai-embeddings bond, and a second provider can be bonded by name.
    @molecule/api-ai-embeddings-openai@1.0.3
  • patch
    Correct the wiring note: setProvider() registers the ai-speech bond, and a second provider can be bonded by name.
    @molecule/api-ai-speech-openai@1.0.3

  • minor
    edit_file results now include the edited regions as they read after the edit, with line numbers and the file's total line count; write_file results include the line count and, for a small file, its numbered lines.
    @molecule/api-ai-tools@1.3.0
  • minor
    Add ConfirmButton (two-step confirm for destructive actions); Icon renders a placeholder instead of throwing for an unknown name; theme toggle and user menu triggers meet a 40px touch target.
    @molecule/app-ui-react@1.1.0
  • minor
    Add gpt-6-astra.
    @molecule/api-resource-ai-models@1.8.0
  • minor
    Add hiddenBelow(breakpoint) and hiddenFrom(breakpoint) to the ClassMap, for swapping desktop and phone surfaces in CSS.
    @molecule/app-ui-nativewind@1.2.0@molecule/app-ui-tailwind@1.2.0@molecule/app-ui@1.2.0
  • minor
    Add TranslateParams.protect: literal substrings (such as {{count}} placeholders) that providers must return unchanged.
    @molecule/api-ai-translation@1.1.0
  • minor
    Adds e2eRunnerDefaults(), the Playwright runner settings (workers, parallelism, retries, failure cap, per-test timeout) for the current environment, to spread into playwright.config.ts.
    @molecule/app-e2e@1.2.0
  • minor
    Call OpenAI's Responses API (/v1/responses) on OpenAI's own endpoint, which lets reasoning models use function tools with reasoning enabled and forwards serverTools such as web_search; other base URLs keep /v1/chat/completions, and the new api option overrides the choice.
    @molecule/api-ai-openai@1.3.0
  • minor
    Support protect, escape &/</> for XML requests and decode entities in results, retry 5xx responses, and include the HTTP status on errors.
    @molecule/api-ai-translation-deepl@1.1.0
  • patch
    create() destroys the sandbox when its egress policy fails to apply, and verifyEgress() retries destroying its probe sandbox and reports one it could not remove.
    @molecule/api-code-sandbox-e2b@1.2.2
  • patch
    Switch has a 40×40 hit area centred on its track; the visual size is unchanged.
    @molecule/app-ui-tailwind@1.2.1
  • patch
    A tapped paragraph now shows its tap-kind notes in the phone panel even while that kind's switch is off, and the README leads with a complete, tested post-body example.
    @molecule/app-margin-notes-react@1.0.2
  • patch
    Document how cn() resolves conflicting classes by order.
    @molecule/app-styling@1.0.3
  • patch
    README leads with a complete, tested build step: a post's markdown and its transcript exports in, provenance.json out.
    @molecule/api-text-provenance-overlap@1.0.1@molecule/api-text-provenance@1.0.1
  • patch
    README leads with a complete, tested example that reads a post's transcript exports and attributes its paragraphs.
    @molecule/api-agent-transcript-autodetect@1.0.1@molecule/api-agent-transcript@1.0.1
  • patch
    Require @molecule/app-ui ^1.2.0, which provides the hiddenBelow ClassMap member the layout uses.
    @molecule/app-margin-notes-react@1.0.1
  • patch
    The push-notifications switch has an accessible name.
    @molecule/app-settings-panel-react@1.0.3

  • minor
    setFont(font, { basePath }) loads local font faces from <basePath>fonts/<file>, so a site served under a sub-path (Vite base: '/blog/') no longer 404s every face at /fonts/…. When the option is omitted the document's <base href>, then import.meta.env.BASE_URL, then / apply. resolveFontBasePath() is exported.
    @molecule/app-fonts@1.1.0
  • minor
    write_file and edit_file parse the file they just changed (node --check, JSON.parse, or esbuild for TypeScript) and return the syntax error in the same result as syntaxError, so an edit that breaks a file is reported while the edit is still in front of the agent instead of at the next build.
    @molecule/api-ai-tools@1.2.0
  • minor
    Adds gpt-6-sol ($2/$10) and gpt-6-luna ($0.10/$0.50). The GPT-5.6 models are superseded by them and stay priced but are no longer selectable.
    @molecule/api-resource-ai-models@1.7.0
  • minor
    Adds rejectsForcedToolChoice and rejectsTemperature to model definitions and sets them on the Claude, Kimi and other models whose providers reject a forced tool choice or a caller-chosen temperature. deepseek-v4-pro is offered again.
    @molecule/api-resource-ai-models@1.7.0
  • minor
    Adds glm-5.3-flashx ($0.37/$1.25).
    @molecule/api-resource-ai-models@1.7.0
  • minor
    Peak pricing can exclude dates (peakPricing.excludedDatesUtc), and the DeepSeek models exclude Chinese public holidays, which DeepSeek bills off-peak. peakPricing.rule records the provider's own peak-hours sentence and where it is published.
    @molecule/api-resource-ai-models@1.7.0@molecule/app-ai-models@1.4.0
  • minor
    Tests bar: the idle line says how many tests have not run yet, the status dot is gone, and the collapsed bar shows a coloured passed / failed / skipped count.
    @molecule/app-ide-react@1.19.0@molecule/app-locales-ide@1.10.0
  • minor
    The default model is now claude-opus-5-5 (was claude-opus-5) when defaultModel is not set.
    @molecule/api-ai-anthropic@1.2.0
  • minor
    The default model is now gpt-6-luna (was gpt-5.6-luna) when defaultModel is not set.
    @molecule/api-ai-openai@1.2.0
  • patch
    edit_file reports an edit whose change is already in the file as applied, instead of failing with "old_string not found".
    @molecule/api-ai-tools@1.2.1
  • patch
    A budgeted command now returns as soon as it finishes, even when it left a background process holding its output.
    @molecule/api-ai-tools@1.2.1
  • patch
    Adds the ide.toolCall.stillRunning translation key.
    @molecule/app-locales-ide@1.9.3
  • patch
    Import order in BackgroundTasksStrip follows the package lint rules; no behavior change.
    @molecule/app-ide-react@1.18.1
  • patch
    Keeps deepseek-v4-pro at its V4-Pro rates ($0.66/$1.98, cache read $0.022) after DeepSeek withdrew the planned 2026-09-14 switch to V4.1 Flash pricing.
    @molecule/api-resource-ai-models@1.7.0
  • patch
    Peak pricing can exclude dates (peakPricing.excludedDatesUtc), and the DeepSeek models exclude Chinese public holidays, which DeepSeek bills off-peak. peakPricing.rule records the provider's own peak-hours sentence and where it is published.
    @molecule/app-ide-react@1.19.0

  • minor
    exec_command accepts run_in_background: the command is detached and the tool returns a task id, a log path and an exit-code path immediately, so a long test suite or build no longer has to fit inside the command timeout.
    @molecule/api-ai-tools@1.1.0
  • minor
    read_file now accepts paths (an array) as well as path, returning one entry per file with its own content or error. An agent that issues one tool call per round-trip pays a full round-trip per file; batched, a project survey costs one call per 25 files.
    @molecule/api-ai-tools@1.1.0
  • minor
    read_file takes offset/limit to return a line window (a negative offset counts from the end, like tail), and search_files takes contextLines to return surrounding lines like grep -C. Both report their position so the next window can be requested.
    @molecule/api-ai-tools@1.1.0
  • minor
    Accept common parameter aliases on every tool (cmd for command, file for path, body for content, camelCase for snake_case) and return an actionable error instead of an internal TypeError when a required parameter is missing. exec_command now also accepts an optional timeout, clamped to the tool's ceiling and reported when a larger one is asked for. New exports: guardAITool, guardToolExecute, normalizeToolInput.
    @molecule/api-ai-tools@1.1.0
  • minor
    Inside a molecule sandbox resolveE2EProviderName() now picks playwright when a Playwright browser is installed there and preview only when none is; adds isMoleculeSandbox(), hasInstalledBrowser() and playwrightBrowsersPath().
    @molecule/app-e2e@1.1.0
  • minor
    New wait_for_task tool: waits for a command started with run_in_background and returns its output and exit code in one call, so an executor that needs the result no longer has to sleep and re-read the log.
    @molecule/api-ai-tools@1.1.0
  • minor
    The preview panel now honours molecule:viewport from the preview bridge, so page.setViewportSize actually resizes the frame. The panel already read a requested size for the iframe but nothing ever set it, so every viewport request was answered with the unchanged size — phone-width layouts could not be measured from a build.
    @molecule/app-ide-react@1.18.0
  • minor
    Work that outlives the tool call that started it is now visible: a background_task stream event carries each detached command or subagent, useChat exposes them as backgroundTasks, and the chat panel shows what is running, for how long, and how each one ended.
    @molecule/app-ai-chat@1.5.0@molecule/app-ide-react@1.18.0@molecule/app-react@1.6.0
  • patch
    connect() fails within 5 s when no preview page is attached, naming the cause and the MOL_E2E_PROVIDER=playwright alternative, and later connects in the same run fail at once (a marker beside the hub's token file) instead of waiting again per test.
    @molecule/app-e2e-preview@1.0.8
  • patch
    edit_file now finds a block whose old_string differs from the file only in spacing next to punctuation (a missing space after a comma, for example), as it already did for indentation; uniqueness is still required and the replacement is applied verbatim.
    @molecule/api-ai-tools@1.1.0
  • patch
    exec_command refuses, without running, a command that declares a longer budget than the tool's ceiling _and_ pipes its output into tail/grep — that combination can only spend the whole budget and return nothing. A command that declares no budget, or whose partial output would survive, still runs as before.
    @molecule/api-ai-tools@1.1.0
  • patch
    find_files and search_files accept @ in a glob, so a scoped package path like node_modules/@molecule/app-ui/* is no longer refused.
    @molecule/api-ai-tools@1.1.0
  • patch
    read_file returns at most ~80 KB per file when no window is asked for — the first window plus a note on how to read the rest — instead of a whole multi-megabyte file; a batched read is bounded to ~200 KB.
    @molecule/api-ai-tools@1.1.0
  • patch
    read_file's window note now says when the whole file fits in one call, or names the exact next window; its description points @molecule package docs at read_molecule_doc.
    @molecule/api-ai-tools@1.1.0
  • patch
    wait_for_task reports a background command as stuck — with its pid, so it can be killed — once five minutes of waiting have accrued on it without an exit, and refuses to wait on it again.
    @molecule/api-ai-tools@1.1.0
  • patch
    An imported tree is now owned by the sandbox's own user. Docker's putArchive preserves the tar's uid/gid (0) while the sandbox runs as the image's USER, so an unrepaired import left the executor unable to write files it had just received — npm install could not touch node_modules and Vite could not create its temp config, so the dev server never started. A caller cannot fix this afterwards: an ordinary exec runs as that same non-root user and chown is refused.
    @molecule/api-code-sandbox-docker@1.1.3
  • patch
    Applying a server transcript to a live chat can no longer rewind it. Every path that reloads history — the page-lifecycle reconcile, the remote-turn poll, the dropped-stream reconcile and the resume poll — now converges through one function that keeps the further-along copy of each message, so a turn the server has not persisted yet stays on screen and a card the user has just answered is never shown as unanswered again.
    @molecule/app-react@1.6.0
  • patch
    Docs: a molecule sandbox runs the specs on its own Chromium through the playwright bond; the preview bond is the opt-in for driving the live IDE tab and fails fast when no tab is attached.
    @molecule/app-e2e-fixtures-default@1.1.2
  • patch
    Docs: records why gpt-6-astra is not in the catalog.
    @molecule/api-resource-ai-models@1.6.3
  • patch
    Documents the bond as the one a molecule sandbox uses (the sandbox image ships Chromium under PLAYWRIGHT_BROWSERS_PATH); the missing-browser error now says so instead of pointing at the preview bond.
    @molecule/app-e2e-playwright@1.0.2
  • patch
    Every labelled button renders through cm.button(); none is hand-styled. Visual parity with the design system, no API change.
    32 packages
    @molecule/app-adjustment-slider-react@1.0.3@molecule/app-feature-audio-effects-rack-react@1.0.3@molecule/app-feature-audio-mixer-react@1.0.3@molecule/app-audio-recorder-react@1.0.3@molecule/app-billing-react@1.0.3@molecule/app-carousel-react@1.0.3@molecule/app-feature-chapter-list-react@1.0.3@molecule/app-chatbot-tester-react@1.0.3@molecule/app-class-schedule-react@1.0.3@molecule/app-color-swatch-picker-react@1.0.3@molecule/app-emoji-reactions-react@1.0.3@molecule/app-faceted-search-react@1.0.3@molecule/app-file-dropzone-react@1.0.3@molecule/app-flow-canvas-react@1.0.3@molecule/app-inbox-row-react@1.0.3@molecule/app-layer-panel-react@1.0.3@molecule/app-mind-map-canvas-react@1.0.3@molecule/app-node-editor-panel-react@1.0.3@molecule/app-pricing-page-react@1.0.3@molecule/app-quiz-card-react@1.0.3@molecule/app-rating-form-react@1.0.3@molecule/app-slide-thumbnail-react@1.0.3@molecule/app-stage-timeline-react@1.0.3@molecule/app-storefront-chrome-react@1.0.3@molecule/app-survey-question-react@1.0.3@molecule/app-tab-filter-react@1.0.3@molecule/app-transactions-table-react@1.0.3@molecule/app-vote-cluster-react@1.0.3@molecule/app-webhook-inspector-react@1.0.3@molecule/app-locales-carousel@1.0.3@molecule/app-locales-ide@1.9.2@molecule/app-locales-rating-form@1.0.3
  • patch
    Reconciling chat history no longer drops messages the server has not persisted yet. A page-lifecycle event or a push-channel reconnect arriving between a send and its persist replaced the view with the server transcript plus only the queued messages, so a just-sent message and any session-local card disappeared until the next poll restored them.
    @molecule/app-react@1.6.0
  • patch
    Relax a forced toolChoice to the model's own choice when thinking is enabled. DeepSeek rejects the combination with 400 Thinking mode does not support this tool_choice, which fails the whole request; the thinking setting is kept and the tool nudge is degraded instead.
    @molecule/api-ai-deepseek@1.0.4
  • patch
    The project.created event now carries the template and the selected packages.
    @molecule/api-resource-project@1.0.3
  • patch
    Type-only: nodemailer types are imported as a namespace. No runtime change.
    @molecule/api-emails-mailgun@1.0.4@molecule/api-emails-sendmail@1.0.4@molecule/api-emails-ses@1.0.5
  • patch
    When edit_file's old_string does not match, the error says which kind of miss it was: none of its lines are in the file (already applied, or wrong file — do not retry the same string) versus present but not distinctive enough to locate. The old message advised re-reading and copying exact text in both cases, which is wrong advice for the first.
    @molecule/api-ai-tools@1.1.0

  • minor
    The mock server now binds 127.0.0.1 (loopback) by default instead of every interface — it serves fixture data with permissive CORS, so LAN-wide exposure is now an explicit opt-in via host: '0.0.0.0' in the config or --host on the CLI. The running MockServer also reports the bound address as host.
    @molecule/api-mock-server@1.1.0
  • patch
    Git-host providers now validate the configured host (plain hostname or host:port only) before building API URLs, and repo paths are URL-encoded per segment — a host or path carrying URL structure (/, ?, @, scheme) is rejected instead of being interpolated into a token-bearing request URL.
    4 packages
    @molecule/api-git-provider-gitea@1.0.4@molecule/api-git-provider-github@1.0.4@molecule/api-git-provider-gitlab@1.0.4@molecule/api-git-provider-smolforge@1.0.4

  • minor
    create() now re-resolves unit prices server-side when the data store exposes a products table: catalog prices (honouring product_variants overrides) compute subtotal/total and are persisted on the order items, client-supplied items[].price is discarded, and items referencing products missing from the catalog are rejected with 400. When no products table exists the previous behavior (body prices) is unchanged; discount/tax/shipping remain client-supplied in both modes.
    @molecule/api-resource-order@1.1.0
  • minor
    Adds the locale keys for the structured ask_user card (multi-select confirm, selected count, preview), the working-plan checklist, the plan-review card, and the subagent card.
    @molecule/app-locales-ide@1.9.0
  • minor
    ask_user options accept { label, description?, preview? } objects and multiSelect — descriptions render under labels, previews side-by-side (inline on narrow screens), multi-select confirms as one answer. New dedicated tool cards: the working-plan checklist (update_task_list), the plan-review approval layout (plan name, step count, checklist preview, prominent approve/request-changes CTAs), and spawn_agent subagents (explore/judge badge, judge VERDICT: PASS/FAIL banner with issues).
    @molecule/app-ide-react@1.17.0
  • minor
    Dev-server host protections are now environment-detected. Inside molecule preview containers (/etc/mol present, or VITE_HOST set) the config keeps the wide-open posture (0.0.0.0, allowedHosts: true, fs.strict: false) the IDE preview depends on. Everywhere else — a developer machine running npm run dev — it now defaults to host: 'localhost', Vite's Host allowlist (localhost variants; extend via VITE_ALLOWED_HOSTS=a,b, disable with *), and Vite's strict fs confinement, closing the LAN-exposure / DNS-rebinding / /@fs/ read triad the old defaults shipped.
    @molecule/app-vite-config-default@1.1.0
  • minor
    SNS webhook verification now fails closed unless an origin pin is configured: set AWS_SES_INBOUND_TOPIC_ARN (exact topic ARN match) or the new AWS_SES_INBOUND_ACCOUNT_ID (12-digit AWS account pin, read from the signing-cert URL or the signed TopicArn). Without either, verification throws a config.notConfigured error instead of accepting any validly-signed SNS message — a valid AWS signature alone only proves some AWS account published the notification.
    @molecule/api-emails-inbound-ses@1.1.0
  • minor
    String inputs to createStream()/transcode() are now validated as local absolute file paths — URLs and any scheme:-prefixed value are rejected before ffmpeg runs, closing an SSRF/file-read primitive when apps forward user-supplied strings. The ffmpeg protocol whitelist is trimmed to local protocols (file,crypto); fetch remote media yourself and pass a Buffer.
    @molecule/api-media-streaming-hls@1.1.0
  • patch
    role=page WebSocket upgrades are now gated like the driver side: a same-origin Origin check (the shipped page client connects to its own location.host) or the hub token is required — a cross-origin site on a dev machine can no longer connect as a page and receive/spoof driver commands and results.
    @molecule/app-e2e-preview@1.0.6
  • patch
    textToValue() now HTML-escapes the source text when building its .html output, so markup in the input (e.g. <script>/<img onerror>) arrives inert in the stored HTML instead of becoming a stored-XSS payload. The plain text field (and Quill delta) is unchanged.
    @molecule/app-rich-text-quill@1.0.3@molecule/app-rich-text@1.0.3
  • patch
    Caller-supplied container ids are now shape-validated before being interpolated into Docker API paths (Docker hex ids, names, and app:machine-style ids pass; anything carrying path structure is rejected). A plain-TCP daemon endpoint selected by the ambient DOCKER_HOST env is refused in production unless MOL_DOCKER_ALLOW_PLAIN_TCP=1 is set (honored with a loud warning); explicit config.host endpoints are unaffected.
    @molecule/api-code-sandbox-docker@1.1.1
  • patch
    Chat markdown links now only open http(s)/mailto URLs as anchors; any other scheme (e.g. javascript:) renders as plain text.
    @molecule/app-ide-react@1.17.0
  • patch
    Command blocking now also covers reads of /etc/mol/… (the molecule platform secrets directory — e.g. cat /etc/mol/env, base64 < /etc/mol/env), closing an env-dump gap alongside the existing /proc//etc/environment rules. Building tools over a LOCAL-HOST backend with pathGuards/symlinkGuards disabled now logs a loud warning naming the exact gaps; defaults are unchanged.
    @molecule/api-ai-tools@1.0.8
  • patch
    Docker Compose commands now run via execFile with an argv array (no shell) instead of an interpolated shell string, and environment slugs are validated ([a-z0-9-] only) before any use — closing a command-injection path for branch-name-derived slugs.
    @molecule/api-staging-docker-compose@1.0.3
  • patch
    Generated JWT private-key PEM files are now written with owner-only permissions (0o600, directory 0o700), and the legacy-location migration chmods the copied private key down as well.
    @molecule/api-jwt@1.0.2
  • patch
    The appName interpolated into legal HTML (content page, legal modals, footer modals) is now HTML-escaped before it reaches dangerouslySetInnerHTML, so a markup-carrying app name renders inert instead of executing inside the legal content.
    @molecule/app-footer-react@1.0.2@molecule/app-legal-pages-react@1.1.1
  • patch
    The list endpoints now clamp the limit query parameter into 1..500 — an oversized limit previously passed through unbounded to the store query.
    7 packages
    @molecule/api-resource-bookmark@1.0.2@molecule/api-resource-comment@1.0.2@molecule/api-resource-follow@1.0.2@molecule/api-resource-message@1.0.2@molecule/api-resource-review@1.0.2@molecule/api-trash@1.0.2@molecule/api-resource-version-history@1.0.2
  • patch
    The redelivery tests no longer race real seconds of wall clock.
    @molecule/api-queue-memory@1.0.2
  • patch
    Translation merges skip __proto__/constructor/prototype keys at every depth, so a translations source carrying a JSON-parsed own __proto__ property can no longer write through to Object.prototype.
    @molecule/api-i18n@1.0.2

  • minor
    The /test card now names the test on screen while a run is in flight — the runner's own group and title with a live per-file tally — and a running file can be skipped without ending the run; a skipped file reads Skipped, never as a pass. The executor's own long-running command gains the same Skip.
    @molecule/app-ide-react@1.16.0@molecule/app-locales-ide@1.8.0
  • patch
    read_file and edit_file no longer report a read that obtained no bytes as a successful read of an empty file: an empty result is checked against the file's real size, retried once when the file has content, and returned as an actionable error when the read genuinely failed or the size could not be confirmed.
    @molecule/api-ai-tools@1.0.7
  • patch
    Translations whose interpolation token had been lost or renamed now carry the same tokens as their English source, so a value like {{count}} resolves instead of rendering as literal text.
    20 packages
    @molecule/api-locales-user-payments@1.0.2@molecule/app-locales-audio-recorder@1.0.2@molecule/app-locales-battery@1.0.2@molecule/app-locales-class-schedule@1.0.2@molecule/app-locales-common@1.0.2@molecule/app-locales-feature-audio-mixer@1.0.2@molecule/app-locales-feature-chapter-list@1.0.2@molecule/app-locales-feature-piano-roll@1.0.2@molecule/app-locales-feature-track-lane@1.0.2@molecule/app-locales-feature-video-scrubber@1.0.2@molecule/app-locales-feature-video-timeline@1.0.2@molecule/app-locales-file-card@1.0.2@molecule/app-locales-footer@1.0.2@molecule/app-locales-gradebook@1.0.2@molecule/app-locales-health@1.0.2@molecule/app-locales-heatmap@1.0.2@molecule/app-locales-loyalty-tier-badge@1.0.2@molecule/app-locales-notifications-page@1.0.2@molecule/app-locales-now-playing-bar@1.0.2@molecule/app-locales-react-native-ui@1.0.2
  • patch
    Upgrades shepherd.js to 15.3.0 and mailparser to 3.9.28, the first releases of each that accept deepmerge-ts 8, clearing the stack-exhaustion advisory GHSA-ggr8-5vv4-36mx from both dependency chains.
    @molecule/api-emails-inbound-ses@1.0.2@molecule/app-tour-shepherd@1.0.2

  • minor
    page.setViewportSize() now survives a navigation: the size is re-applied after every goto, reload, goBack and goForward, so a spec that sets a phone width keeps measuring at that width. The re-apply warns rather than throwing when the host does not honour it, and page.viewportSize() reports the size actually in effect.
    @molecule/app-e2e-fixtures-default@1.1.0
  • minor
    Adds the Tests bar: an expandable row above the composer that lists the project's end-to-end specs and unit tests and runs them, one at a time or all together, streaming each result inline (hosts provide listTests/runTests); the locale bond gains the ide.tests.* strings.
    @molecule/app-ide-react@1.14.0@molecule/app-locales-ide@1.6.0
  • minor
    Limit errors now carry billingAction and upgradeTier, and the IDE passes them together with limitType to buildUpgradeCta, so the host renders the call-to-action that matches the user's billing state instead of a generic upgrade button.
    4 packages
    @molecule/app-ai-chat-http@1.2.0@molecule/app-ai-chat@1.4.0@molecule/app-ide-react@1.13.0@molecule/app-react@1.5.0
  • minor
    The /test card's failed rows gain a "Fix with Synthase" action (and a batch action in the header) that hands the failing file and its runner output to the chat; runner output starts collapsed behind Show/Hide output; every action renders as a filled button, and a design guard test keeps command-card actions from shipping as text links.
    @molecule/app-ide-react@1.15.0@molecule/app-locales-ide@1.7.0

  • patch
    page.setViewportSize() waits up to 4 seconds for the preview host to resize the frame before reporting the size it got; the real IDE resizes well after the old 1.5-second budget, which failed every phone-width spec.
    @molecule/app-e2e-preview@1.0.5
  • patch
    systemDefault option: with no persisted choice, start on the theme whose mode matches the OS preference; getServerTheme() reports defaultTheme for server and build-time renders.
    @molecule/app-theme-css-variables@1.0.2
  • patch
    ThemeProvider.getServerTheme() (optional): the theme a render without a browser produces, so a hydrating client can render the markup it was sent before switching to the live theme.
    @molecule/app-theme@1.0.2
  • patch
    useTheme() hydrates with the provider's server theme and switches to the live one after, so a persisted or OS-preferred theme no longer causes a hydration mismatch on prerendered pages.
    @molecule/app-react@1.4.3
  • patch
    Offers a us region for deepseek-flash (DeepSeek V4.1 Flash on the DeepInfra re-host, with its rate card) beside the native default.
    @molecule/api-resource-ai-models@1.6.1
  • patch
    The preview's freeze watchdog reports a frozen page only after the current document has heartbeat at least once; a page that has just reloaded and is still loading is not reported as frozen.
    @molecule/app-ide-react@1.12.1
  • patch
    The preview's health probe no longer declares a heartbeating page down and reloads it while the sandbox is busy; only a page whose heartbeat has stopped is reloaded when the server answers again.
    @molecule/app-ide-react@1.12.1

  • minor
    ChatPanel timestamps: off by default (your own messages and critical events still show one), shown on every message and event with /timestamps on or setChatTimestampsVisible; labels are minute-precise ("5 minutes ago", then "9:25 AM", then "Sep 12, 9:25 AM") and advance each minute, a run of identical labels shows once, and custom cards can set critical: true.
    @molecule/app-ide-react@1.12.0
  • minor
    Adds translations for the chat's /timestamps confirmations.
    @molecule/app-locales-ide@1.5.0
  • patch
    exec_command accepts commandBudgetMs: a command that overruns is stopped under timeout and its output so far is returned instead of nothing.
    @molecule/api-ai-tools@1.0.4
  • patch
    exec_command runs the whole anchored command under the budget (commandBudgetMs) inside the sandbox backend, so a sourced environment still reaches it; exit 124 hands back the partial output with an explanatory error.
    @molecule/api-ai-tools@1.0.5
  • patch
    exec_command: when a command stops at the tool budget with a | tail/| head pipe, the error explains that the pipe held the output back and says to run it without the pipe.
    @molecule/api-ai-tools@1.0.6
  • patch
    The dev-server plugin injects the page client into every HTML response, not only the HTML Vite serves itself: pages an app renders from its own dev middleware (a static-site generator's post routes, an SSR handler) now connect to the hub too.
    @molecule/app-e2e-preview@1.0.3
  • patch
    The dev-server plugin serves its client and runtime scripts under the app's base path as well as at the root, so a page served under a base path (/blog/) connects to the hub instead of loading index.html as its client script.
    @molecule/app-e2e-preview@1.0.4

  • patch
    test and expect now come from @molecule/app-e2e, so the same specs run on real browsers locally and against the live preview inside a molecule sandbox.
    @molecule/app-e2e-fixtures-default@1.0.2
  • patch
    The preview panel honours a molecule:viewport request from the previewed page (an e2e spec's page.setViewportSize), sizing the frame like a device preset until a device is picked again.
    @molecule/app-ide-react@1.11.3

  • minor
    Adds DeepSeek V4.1 Flash (deepseek-flash — multimodal, cn-native, 1M context) as the go-forward flash id and free-tier default; deprecates deepseek-v4-pro (routes to V4.1 Flash at Flash prices from 2026-09-14 upstream) and the retired deepseek-v4-flash id, whose native card now carries the V4.1 rates; removes gpt-5.6-luna's free-tier region carve-out.
    @molecule/api-resource-ai-models@1.6.0
  • patch
    ChatPanel: a pending ask_user whose tool-call block was never persisted still renders from the record — a question the user cannot see parks the turn with no way forward.
    @molecule/app-ide-react@1.11.2
  • patch
    Pins nodemailer 9.1.1, fixing the four advisories against ≤9.1.0 (resolveContent bypass, IDN allow-list bypass, addressparser O(n²), RFC 5322 comment mis-parse).
    4 packages
    @molecule/api-emails-mailgun@1.0.2@molecule/api-emails-sendmail@1.0.2@molecule/api-emails-ses@1.0.3@molecule/api-smtp@1.0.2
  • patch
    Pins sharp 0.35.4, fixing the libheif/libvips CVEs (GHSA-rgj7-g3m4-5g8c).
    @molecule/api-image-sharp@1.0.2
  • patch
    The provider's fallback defaultModel follows the go-forward deepseek-flash id (was the retired deepseek-v4-flash).
    @molecule/api-ai-deepseek@1.0.2

  • patch
    appLayout no longer pads the top by 55px (the shell's header renders in flow, so the pad cleared a header that never overlapped) and headerBar carries no background or shadow by default — apps that want a chrome bar pass their own header classes.
    @molecule/app-ui-tailwind@1.1.1
  • patch
    PreviewPanel: a pending AI navigation command is re-posted when the preview iframe's load event fires, so a navigate can no longer outlive its reply window in a backgrounded tab (the retry interval and the bridge's frames are timer-scheduled and throttled there; the load event is not).
    @molecule/app-ide-react@1.11.1
  • patch
    Dark theme: inline code, blockquote text, captions, and kbd hints inside cm.prose content now use theme tokens — they previously kept the typography plugin's light-theme ink and were nearly unreadable on dark backgrounds.
    @molecule/app-ui-tailwind@1.1.2

  • minor
    The /cost card now names the allowance window the host reports (allowanceWindow), so a monthly allowance reads "this month's" rather than "today's", and reset countdowns beyond a day render as "in about N days" instead of "tomorrow".
    @molecule/app-ide-react@1.11.0@molecule/app-locales-ide@1.4.0
  • patch
    exec_command no longer blocks env -u KEY cmd, env KEY=value cmd or env -i cmd as environment dumps; only a bare, piped or redirected env is.
    @molecule/api-ai-tools@1.0.3
  • patch
    PreviewPanel: a raw document the user clicks to inside the preview (a feed, a JSON file, llms.txt) is shown as content instead of being covered by the "preview is blank" notice; the bridge reports the link click as a navigation intent.
    @molecule/app-ide-react@1.10.2
  • patch
    useChat: merging the server's history no longer keeps the optimistic copy of a message the server already holds, so a conversation's first message renders once.
    @molecule/app-react@1.4.1
  • patch
    useChat: the server's persisted mode is applied on every history load and reconnect, including execute, so a tab that missed the live plan-to-build switch no longer stays in plan mode.
    @molecule/app-react@1.4.2
  • patch
    Docs: the illustrative fence in the module documentation is tagged as plain text so it is not read as an example to run.
    @molecule/api-git-provider@1.0.4

  • patch
    Exclude the Playwright e2e/ suite from vitest collection (test.exclude), so npm test in an app runs only its unit tests.
    @molecule/app-vite-config-default@1.0.3
  • patch
    Update deepseek-v4-flash US-region pricing to $0.06 / $0.18 per million tokens (cache read $0.015).
    @molecule/api-resource-ai-models@1.5.1

  • minor
    Add gemini-3.8-flash and deprecate gemini-3.7-flash; record the DeepInfra US region for glm-5.3.
    @molecule/api-resource-ai-models@1.5.0
  • patch
    The command menu now dedupes by id, so a host-provided command with the same id as a shared one replaces it instead of listing twice.
    @molecule/app-ide-react@1.10.1
  • patch
    The default model is now gemini-3.8-flash.
    @molecule/api-ai-google@1.2.1

  • minor
    Adds claude-fable-5-1 (Anthropic's current latest; same $10/$50 per MTok as claude-fable-5, with $0.25/MTok cache reads) and marks claude-fable-5 as legacy. claude-sonnet-5 is now listed at its standard $2/$10 rate. Model ids with a dash-separated minor version (e.g. claude-fable-5-1) now parse as a newer generation of their family instead of a sibling.
    @molecule/api-resource-ai-models@1.4.0
  • minor
    Adds a side-channel send for human-to-human chat messages (e.g. team notes): ChatProvider.sendSideMessage (optional, implemented by the HTTP bond on an independent request lifecycle) and a sideChannel option on useChat's sendMessage. A side-channel message goes out immediately even while a turn is streaming — it never queues behind the active turn, never aborts the live stream, and never disrupts remote-turn tracking. Callers fall back to the normal send path on providers without side-channel support.
    @molecule/app-ai-chat-http@1.1.0@molecule/app-ai-chat@1.3.0@molecule/app-react@1.4.0
  • minor
    Adds an optional onRestartBackend escalation hook to the preview panel: when the backing server answers probes but the app has not confirmed a render for minutes and an automatic reload was already tried, the panel asks the host to restart the backing dev server — at most once per broken episode, with a long cooldown, never during a build. This recovers failure classes a document reload cannot (e.g. module failures cached against the dev server's immutable versioned URLs). Hosts that omit the prop are unaffected.
    @molecule/app-ide-react@1.10.0
  • minor
    Peak-hour pricing windows can be restricted to certain UTC weekdays (peakPricing.windows[].daysOfWeekUtc), and the DeepSeek entries now carry the Monday-through-Friday qualifier their rate card publishes, so weekend hours inside those windows no longer meter at the peak multiplier. The /models picker labels a weekday-only window with the days it applies on.
    @molecule/api-resource-ai-models@1.4.0@molecule/app-ai-models@1.3.0
  • patch
    Peak-hour pricing windows can be restricted to certain UTC weekdays (peakPricing.windows[].daysOfWeekUtc), and the DeepSeek entries now carry the Monday-through-Friday qualifier their rate card publishes, so weekend hours inside those windows no longer meter at the peak multiplier. The /models picker labels a weekday-only window with the days it applies on.
    @molecule/app-ide-react@1.10.0
  • patch
    Read-only viewers no longer auto-send the initial prompt on mount (a stale project-keyed prompt could start a turn the server rejects) and the auto-fix countdown can never dispatch a fix turn from a viewer's client.
    @molecule/app-ide-react@1.10.0
  • patch
    Team notes (/teamsay) now send immediately even while a response is streaming, instead of silently queuing until the turn ends; and read-only viewers no longer arm the auto-commit countdown, which fired /commit on their behalf and surfaced a spurious "view-only access, so this command is unavailable" notice.
    @molecule/app-ide-react@1.10.0
  • patch
    The preview panel now recovers on its own after its server comes back: while the "can't load here" or "preview is blank" notice is showing, it keeps probing the preview URL and reloads automatically once the app is serving again (for example after a slow sandbox wake), instead of waiting for a manual reload.
    @molecule/app-ide-react@1.10.0
  • patch
    The preview's first-load spinner can no longer sit forever without a way out: if the preview server hasn't answered after 45 seconds, the panel shows the reload / open-in-new-tab notice while it keeps polling (mounting and clearing the notice by itself when the server appears), and the 30-second stuck backstop now re-checks after wake/build holds instead of disarming permanently.
    @molecule/app-ide-react@1.10.0
  • patch
    The preview's stuck-load recovery no longer reloads a heartbeating document: the inline bridge heartbeats from HTML-parse time, so liveness means the module graph is still loading — reloading it aborted every in-flight module fetch and could trap large apps (slow module graphs behind a proxy) in a permanent reload-and-blank loop. Recovery still fires for a genuinely dead document.
    @molecule/app-ide-react@1.10.0
  • patch
    Viewers watching a teammate's turn now see the normal streaming activity indicator; previously the chat activity slot showed "Waiting for the development environment to finish starting…" for the whole remote turn even when the environment was already running.
    @molecule/app-ide-react@1.10.0

  • minor
    ShareLinkManager accepts a refreshSignal prop so a host's live-update channel can reload the link list in place, and the ChatPanel's settings re-read signal now refreshes the full agent-behavior bag (per-mode models, effort, regions, max tool loops, auto-fix, auto-approve) — so pickers and toggles reflect changes another collaborator just made instead of holding stale values.
    @molecule/app-ide-react@1.9.0
  • minor
    Add qwen3.8-flash (Alibaba's low-cost tier: 1M context, 131K output, multimodal input, hybrid thinking; native host); correct qwen3.8-max's implicit cache-read price.
    @molecule/api-resource-ai-models@1.3.0
  • patch
    /effort now opens a selectable level picker (like /model): bare /effort lists the target mode's model-native levels with current/default indicators, live typing filter, a mode selector, and keyboard navigation. /effort ? keeps the textual status view; /effort <level> still sets directly.
    @molecule/app-ide-react@1.9.1
  • patch
    Add the ide.chat.settings.effort.label ("Reasoning effort") translation in all 79 languages.
    @molecule/app-locales-ide@1.3.1
  • patch
    Chat broadcasts missed while the push channel was down (e.g. a teammate's note against a backgrounded tab) are reconciled from the persisted transcript when the channel reconnects.
    @molecule/app-react@1.3.1
  • patch
    The context-usage ring's mount-time restore retries transient failures instead of silently losing the ring for the whole session.
    @molecule/app-ide-react@1.9.1
  • patch
    The preview freeze watchdog is visibility-aware: a hidden tab's throttled timers no longer read as an 18–58s "app stopped responding" freeze (banner + alert once per throttle wake, ~every minute, for as long as the tab stayed backgrounded). Checks pause while hidden and re-baseline on return to the foreground.
    @molecule/app-ide-react@1.9.1

  • minor
    Add canShare to ChatPanel and canManage/canCreate/canRevoke to ShareModal so hosts that gate share-link management above the edit role can hide the /share command, header share button, and modal controls instead of surfacing requests the backend rejects; read-only viewers no longer trigger a settings write when their selected model is delisted. The locale bond adds the matching ide.chat.share.notAllowed message in all languages.
    @molecule/app-ide-react@1.7.0@molecule/app-locales-ide@1.2.0
  • minor
    Honor toolChoice ('required' and named-tool forms) as OpenAI-compatible tool_choice. MiniMax and Moonshot family gates now key on the canonical model id (a modelMap-translated upstream id never matched, so re-hosted requests lost their thinking rules); MiniMax forwards image input for the natively-multimodal M3 and disables its thinking via chat_template_kwargs on hosts that ignore the thinking param; Alibaba pairs a forced tool choice with an explicit thinking-off (DashScope rejects forced tool_choice in thinking mode).
    4 packages
    @molecule/api-ai-alibaba@1.1.0@molecule/api-ai-minimax@1.1.0@molecule/api-ai-moonshot@1.1.0@molecule/api-ai-zhipu@1.1.0
  • minor
    Live collaborative chat streaming: pushed broadcast frames from a turn running elsewhere (a teammate's send, another tab) render in real time — text and thinking deltas, tool activity, verification, completion — via the new useChat.applyRemoteEvent ingestion path, with a readOnly watcher mode for viewers and a progress-preserving history reconcile. Agent-setting changes (model, effort, fast mode, max tool loops, processing region, auto-fix, auto-approve) surface as shared, attributed transcript cards through the new setting card kind.
    4 packages
    @molecule/app-ai-chat@1.2.0@molecule/app-ide-react@1.8.0@molecule/app-react@1.3.0@molecule/app-locales-ide@1.3.0
  • minor
    Send server tools in Zhipu's native nested schema ({ type: 'web_search', web_search: {} }) instead of the abstract { type, name } marker, which the API rejects. New supportsServerTools: false config drops server tools for OpenAI-compatible hosts that don't serve them, so tool-carrying requests succeed there.
    @molecule/api-ai-zhipu@1.1.0
  • minor
    Tool-use blocks and events carry an optional provider-opaque signature replay token. The Google bond captures Gemini 3.x's part-level thoughtSignature on function calls and echoes it on replayed calls — without it, Gemini rejects the second request of any tool round-trip (400 "Function call is missing a thought_signature"). The Google bond also sends thinking.effort as thinkingLevel (previously the effort value was silently ignored and a fixed token budget was sent), and forwards the google_search server tool with includeServerSideToolInvocations when function tools ride along.
    @molecule/api-ai-google@1.2.0@molecule/api-ai@1.2.0
  • patch
    Correct the Anthropic codeExecutionToolType to the current code_execution_20260521 (the previous value was a beta-header date, not a tool type) and remove webSearchToolType from OpenAI entries — the chat-completions endpoint the OpenAI provider uses has no such tool type, so advertising it surfaced a capability that could never work.
    @molecule/api-resource-ai-models@1.2.7
  • patch
    Parse xAI's string-form error bodies ({ code, error }) so upstream 400 details are logged instead of a bare "HTTP 400", and surface an attachment-specific message when an image is rejected for size instead of the generic invalid-request text.
    @molecule/api-ai-xai@1.0.2

  • minor
    Add ChatParams.extraBody — extra provider-native request-body params (e.g. reasoning_effort, enable_thinking, top_k) shallow-merged into the outgoing request as a base, with the bond's structural fields (model, messages, tools, stream, token limit) always winning. The Gemini bond merges a nested generationConfig into its own rather than replacing it.
    4 packages
    @molecule/api-ai-anthropic@1.1.0@molecule/api-ai-google@1.1.0@molecule/api-ai-openai@1.1.0@molecule/api-ai@1.1.0
  • minor
    Add team-only chat messages: ChatMessage gains a teamOnly flag (a human-only note the model never sees, rendered with author attribution) and the chat stream gains a { type: 'message'; message: ChatMessage } event that appends a complete, non-streaming message to the transcript. The React useChat binding handles the new event via appendCompleteMessage, with the same id-based dedupe as card messages so a live team note is byte-identical to what history reloads.
    @molecule/app-ai-chat@1.1.0@molecule/app-react@1.2.0
  • minor
    ChatPanel gains a canEdit prop (default true): when false — a read-only project viewer — the composer blocks a plain message or write-command with a read-only note (team /teamsay and viewer-safe commands still pass), slash commands default-deny unless the command registry flags them viewerSafe, the plan/fast mode toggles disable, and a view-only note shows above the composer. CommandDef gains a viewerSafe flag. The /model picker now refreshes when the custom-model catalog changes (editing a BYO provider no longer leaves the old model shown), and a removed custom model re-points to the same provider before a platform fallback. Also renders teammates' human-only team notes (the message stream event) and matches side-channel command aliases. app-locales-ide adds the read-only-viewer strings.
    @molecule/app-ide-react@1.6.0
  • minor
    Share modal now reflects a project's current public link: when one exists it shows the full, absolute URL with click-to-copy and a Revoke control and no longer offers to create another; when none exists it offers create. Adds a reusable ShareLinkManager component (export) so a host can render the same UI in its own team/access panel.
    @molecule/app-ide-react@1.5.0
  • patch
    Add GLM-5.3 Flash (zhipu): native multimodal, 1M context, 128K output, low/high/max reasoning, served in us + cn regions.
    @molecule/api-resource-ai-models@1.2.6
  • patch
    ChatPanel gains a canEdit prop (default true): when false — a read-only project viewer — the composer blocks a plain message or write-command with a read-only note (team /teamsay and viewer-safe commands still pass), slash commands default-deny unless the command registry flags them viewerSafe, the plan/fast mode toggles disable, and a view-only note shows above the composer. CommandDef gains a viewerSafe flag. The /model picker now refreshes when the custom-model catalog changes (editing a BYO provider no longer leaves the old model shown), and a removed custom model re-points to the same provider before a platform fallback. Also renders teammates' human-only team notes (the message stream event) and matches side-channel command aliases. app-locales-ide adds the read-only-viewer strings.
    @molecule/app-locales-ide@1.1.6
  • patch
    Default model is now glm-5.3 (was glm-5.2). Documents that glm-5.3 narrows reasoning_effort to low | high | max and can no longer disable reasoning; the budget-tokens fallback keeps returning the 'high'/'low' both generations accept.
    @molecule/api-ai-zhipu@1.0.2
  • patch
    Share modal now reflects a project's current public link: when one exists it shows the full, absolute URL with click-to-copy and a Revoke control and no longer offers to create another; when none exists it offers create. Adds a reusable ShareLinkManager component (export) so a host can render the same UI in its own team/access panel.
    @molecule/app-locales-ide@1.1.5

  • minor
    Add an extraCommands prop to ChatPanel so a host can merge its own slash commands into the command menu, /help, and the keyboard dispatcher alongside the shared registry. Selecting one fills the input with /<id> for the host's own handler to run; ids must not collide with a built-in command.
    @molecule/app-ide-react@1.4.0
  • patch
    Add translations for the parameterized /scripts panel keys, the chat queued-count label, item render errors, and the peak-hour keys across all supported languages.
    @molecule/app-locales-ide@1.1.4
  • patch
    Apply a pending update by reloading only once the new service worker actually controls the page, instead of on a fixed 100ms timer that could reload onto the old cached build.
    @molecule/app-version@1.0.2
  • patch
    Claim clients when the new service worker activates, so the "Update" prompt reliably reloads onto the new build once the worker takes control. Also remove the /api/ runtime-caching rule, which broke on streaming (SSE) responses and cached authenticated API data.
    @molecule/app-vite-config-default@1.0.2
  • patch
    Reload only after the new service worker takes control. Clicking "Update" could previously reload before the waiting worker activated, leaving the old cached bundle in place until another refresh.
    @molecule/app-pwa-default@1.0.2

  • patch
    Add the ide.chat.queuedCount translation key.
    @molecule/app-locales-ide@1.1.2
  • patch
    Add translation keys for the parameterized /scripts panel.
    @molecule/app-locales-ide@1.1.3
  • patch
    Anchor queued chat messages above the composer with compact rows.
    @molecule/app-ide-react@1.3.3
  • patch
    Make gpt-5.6-luna the free-tier planner and drop minimax-m3's stale free-tier region carve-out.
    @molecule/api-resource-ai-models@1.2.5
  • patch
    Parameterized scripts and built-in commands in the /scripts panel, plus ShareModal copy-button alignment.
    @molecule/app-ide-react@1.3.4
  • patch
    Transparent OAuth divider label — flanking hairlines instead of a background-color mask.
    @molecule/app-oauth-buttons-react@1.0.2

  • patch
    SubscriptionUpdateParams.items[] now types the optional quantity a subscription update may set.
    @molecule/api-payments-stripe@1.2.2
  • patch
    ChatPanel: drop a requiresSignup limit banner once isAnonymous is false, so a viewer who signs in mid-session no longer sees the guest-tier limit and its dead-end sign-up buttons.
    @molecule/app-ide-react@1.3.2
  • patch
    Checkout sessions now attach their metadata to the subscription they create, so subscription webhooks can be matched to the buying account on a first purchase.
    @molecule/api-payments-stripe@1.2.1
  • patch
    DeepSeek pro and flash now carry their August 2026 rates, with peak pricing live in place of the staged schedule.
    @molecule/api-resource-ai-models@1.2.3
  • patch
    Mark gpt-5.6-luna free-tier plan-eligible in the us region (freeTierRegions: ['us']), so it can serve as a free-tier plan-mode default and free users may select it in plan mode.
    @molecule/api-resource-ai-models@1.2.4
  • patch
    PreviewPanel: the steady-state health probe now allows 5s and requires two consecutive misses before treating the app as down, so a preview behind a remote edge is no longer reloaded on a single slow probe.
    @molecule/app-ide-react@1.3.1
  • patch
    Serialize tool_use and tool_result message blocks as native tool_calls and role:"tool" messages instead of flattening them to placeholder text. Multi-turn agentic tool loops now receive real tool results, so models that previously looped on their first tool call and never finished can complete a tool-driven conversation.
    @molecule/api-ai-local@1.0.2@molecule/api-ai-openai@1.0.2
  • patch
    Subscription updates now set the line item quantity explicitly, so a seat-count change applies and a switch to a flat-priced plan no longer inherits the old quantity.
    @molecule/api-payments-stripe@1.2.1
  • patch
    useChat: the auto-retry after a 5XX / transport drop now runs up to 8 attempts (5s, 10s, 20s, then 30s holds) so an interrupted turn resumes across a server restart.
    @molecule/app-react@1.1.1

  • minor
    createCheckoutSession accepts a quantity for per-seat plans, and the idempotency key now includes it so changing the seat count starts a new session instead of replaying the previous one.
    @molecule/api-payments-stripe@1.2.0
  • minor
    PATCH /users/:id/plan accepts an optional quantity, passed to the payment provider for per-seat plans and clamped to a whole number of at least one.
    @molecule/api-resource-user@1.4.0
  • minor
    Add chargeOffSession for capturing a payment from a saved card without the customer present. Resolves the customer's default card (falling back to their most recently attached one), confirms off-session, and returns a normalized outcome with the decline code when it fails. Requires a stable idempotencyKey so a retry inside Stripe's 24h window returns the original PaymentIntent instead of charging again.
    @molecule/api-payments-stripe@1.1.0
  • minor
    Add an optional quantity to updateSubscription so per-seat plans can bill more than one unit.
    @molecule/api-payments@1.2.0
  • minor
    Custom chat cards can declare coversLimitType, and ChatPanel then hides such a card while its limit banner is stating the same limit, so one limit is never shown twice.
    @molecule/app-ide-react@1.3.0
  • minor
    New captchaSlot / captchaSolved props render a human-verification challenge in the signup form and gate its submit, so an API that requires a verification token can be used from the in-app modal.
    @molecule/app-auth-modal-react@1.1.0

  • minor
    PlanUpdated now confirms the purchase a checkout redirect returns with, showing a spinner while it is in flight and a retry if it fails. New provider and verify props. Requires @molecule/app-react ^1.1.0.
    @molecule/app-plan-updated-page-react@1.1.0
  • minor
    PlanUpdatedPage now confirms the purchase a checkout redirect returns with, showing a spinner while it is in flight and a retry if it fails. New provider and verify props. Requires @molecule/app-react ^1.1.0.
    @molecule/app-legal-pages-react@1.1.0
  • minor
    POST /portal no longer passes a caller-supplied returnUrl straight to the payment provider — the provider renders it as a link on its own domain, so an arbitrary one was an open redirect. Send an app-relative returnPath instead; a returnUrl is honored only when it is already on the app origin.
    @molecule/api-billing-routes@1.1.0
  • minor
    SandboxConfig gains command (the sandbox's main process, instead of the image's), restartPolicy, and selfDeliveredEnv (env the caller delivers itself, which a provider validates but must never persist in its own configuration).
    @molecule/api-code-sandbox@1.2.0
  • minor
    spawn() accepts pty: { cols, rows }, creating the exec with a TTY so Ctrl-C interrupts the foreground job, streaming the raw (unmultiplexed) terminal bytes, and exposing handle.resize({ cols, rows }).
    @molecule/api-code-sandbox-docker@1.1.0
  • minor
    spawn() now takes SpawnOptions, which adds pty: { cols, rows } for a process with a real controlling terminal, and SpawnHandle gains an optional resize({ cols, rows }) for it. Providers that cannot allocate a PTY must reject the spawn rather than return pipes, so a caller can feature-detect a terminal.
    @molecule/api-code-sandbox@1.2.0
  • minor
    verifyEgress() now reads the app's network policy back from Fly, so the verdict names every allowed port as reachable to any host — a Fly policy matches protocol and port with no destination — and reports open when the policy in force allows a port this provider never configured. Adds reconcileEgressPolicy(app), which re-applies the current policy to an app that already exists.
    @molecule/api-code-sandbox-flyio@1.2.0
  • minor
    Adds POST /users/:id/billing-portal/:provider, which opens the bonded provider's hosted billing portal so a subscriber can update their card, read invoices, and cancel. Returns { url }; an optional returnPath sends them back to a specific app page. Requires @molecule/api-payments ^1.1.0.
    @molecule/api-resource-user@1.3.0
  • minor
    Adds resolveCheckoutRedirectUrls and resolveBillingPortalReturnUrl, which build the URLs a hosted checkout or billing portal returns the buyer to from the APP origin (APP_ORIGIN/ORIGIN) — configurable with PAYMENTS_PLAN_UPDATED_PATH, PAYMENTS_CHECKOUT_CANCEL_PATH and PAYMENTS_BILLING_RETURN_PATH.
    @molecule/api-payments@1.1.0
  • minor
    Adds spawn() — a long-running process with streaming stdout/stderr, writable stdin and kill(), plus pty: { cols, rows } for a real terminal where Ctrl-C interrupts the foreground job and resize() renegotiates the width. exec() now starts every command in the background and waits on its handle, so a launch that leaves a detached child behind returns its real exit code immediately instead of blocking until the deadline, and a command ending in & reports its actual output and exit code instead of a fabricated success.
    @molecule/api-code-sandbox-e2b@1.2.0
  • minor
    Adds useVerifyPaymentReturn, which confirms a purchase with POST /users/:id/verify-payment/:provider after a payment provider redirects back to the app, reading the transaction id a provider left in the query.
    @molecule/app-react@1.1.0
  • minor
    Map SandboxConfig.command onto the container's Cmd and restartPolicy onto its Docker restart policy, so a container the daemon restarts comes back running the caller's own process.
    @molecule/api-code-sandbox-docker@1.1.0
  • minor
    Map SandboxConfig.command onto the Machine's init.exec and restartPolicy onto its restart policy, so a Machine Fly restarts comes back running the caller's own process. Adds find(), which enumerates managed Machines app-by-app and throws rather than returning a partial result. selfDeliveredEnv is validated for private routes and never written into the Machine config.
    @molecule/api-code-sandbox-flyio@1.1.0
  • minor
    New package: builds a CONNECT-capable HTTP(S) agent from the standard proxy environment (HTTPS_PROXY / HTTP_PROXY / ALL_PROXY, honouring NO_PROXY) for vendor SDKs that create their own HTTP agent and read no proxy variable. getProxyAgent(url) returns the agent, getProxyAgents(url) the { httpAgent } | { httpsAgent } shape AWS SDK v3's requestHandler accepts, and getProxyUrl(url) the URL for clients that want it directly. All return undefined when the target is not proxied, so passing the result through is a no-op outside a proxied environment.
    @molecule/api-proxy-agent@1.1.0
  • minor
    Persist a project's files beyond its sandbox: create() mounts a named volume at a caller-chosen path, createVolume/removeVolume/volumeExists/listVolumes manage volumes, and commitTemplate/getTemplate/listTemplates/removeTemplate capture and restore sandboxes as E2B snapshots.
    @molecule/api-code-sandbox-e2b@1.2.0
  • patch
    exec() no longer blocks for its whole timeout when a command leaves something behind holding its output stream — a detached supervisor, a daemon that keeps its descriptors. It now checks whether the started process is still running and returns as soon as the command itself is over.
    @molecule/api-code-sandbox-e2b@1.2.0
  • patch
    hibernate(), stop() and sleep() now pause the sandbox or throw — an SDK build with no pause method used to resolve a success-shaped noop outcome while the sandbox kept running. They prefer the supported pause() over the deprecated betaPause(), and treat an already-paused sandbox as success.
    @molecule/api-code-sandbox-e2b@1.2.0
  • patch
    PreviewPanel now asks the preview host for a CORS-readable status before mounting the app, so an edge's "unavailable" error page is no longer mistaken for a working preview; hosts that do not serve /__mol/preview-status keep the previous behaviour.
    @molecule/app-ide-react@1.2.6
  • patch
    ShareModal offers only the roles the host actually grants, via a new roles prop that defaults to ['viewer'] — a public link is an unauthenticated credential, so write access through one is opt-in. The role <select> renders only when there is a real choice; with one role the dialog states what the link will grant.
    @molecule/app-ide-react@1.2.6
  • patch
    Approval now returns the buyer to the app's /plan-updated page instead of the API's verify endpoint, whose host holds no session cookie (the redirect answered 401 and the plan was never granted). Requires @molecule/api-payments ^1.1.0.
    @molecule/api-payments-paypal@1.0.2
  • patch
    Checkout now returns the buyer to the app's /plan-updated page instead of the API's verify endpoint, whose host holds no session cookie (the redirect answered 401 and the plan was never granted), and the session carries client_reference_id + metadata.userId so the resulting customer can be linked to the account that paid. createCheckoutSession accepts clientReferenceId. Requires @molecule/api-payments ^1.1.0.
    @molecule/api-payments-stripe@1.0.2
  • patch
    Correct the docs: verifyEgress is implemented and observes egress from inside a throwaway sandbox, rather than being unimplemented.
    @molecule/api-code-sandbox-e2b@1.2.0
  • patch
    Record the 2026-08-15 re-verification of the Qwen3.8 Max US re-host rates, and why DeepInfra's open-weight Qwen3.8-2.4T-A95B is deliberately not carried alongside it.
    @molecule/api-resource-ai-models@1.2.2
  • patch
    Route Elasticsearch requests through the outbound proxy when one is configured. @elastic/transport builds its own undici pool bound to the node origin, which bypasses the environment-driven global dispatcher, so on a host whose only egress path is a proxy every request failed with a bare connection error; the client now receives the proxy URL via its own proxy option, resolved against ELASTICSEARCH_URL so a self-hosted cluster listed in NO_PROXY keeps connecting directly. Nothing is passed when no proxy is configured.
    @molecule/api-search-elasticsearch@1.0.2
  • patch
    Route S3 calls through the outbound proxy when one is configured. The AWS SDK v3 builds its own agent and reads no proxy variable, so on a host whose only egress path is a proxy every upload failed with a bare connection error; the client now receives a CONNECT-capable agent via its own requestHandler option, resolved against AWS_S3_ENDPOINT / AWS_ENDPOINT_URL_S3 when set and the regional endpoint otherwise, so an internal S3-compatible endpoint listed in NO_PROXY keeps connecting directly. Nothing is passed when no proxy is configured.
    @molecule/api-uploads-s3@1.0.3
  • patch
    Route SES calls through the outbound proxy when one is configured. The AWS SDK v3 builds its own agent and reads no proxy variable, so on a host whose only egress path is a proxy every send failed with a bare connection error; the client now receives a CONNECT-capable agent via its own requestHandler option, resolved against AWS_SES_ENDPOINT when set and the regional endpoint otherwise so NO_PROXY is honoured. Nothing is passed when no proxy is configured.
    @molecule/api-emails-ses@1.0.2
  • patch
    Route SQS calls through the outbound proxy when one is configured. The AWS SDK v3 builds its own agent and reads no proxy variable, so on a host whose only egress path is a proxy every queue operation failed with a bare connection error; the client now receives a CONNECT-capable agent via its own requestHandler option, resolved against SQS_ENDPOINT when set and the regional endpoint otherwise, so a LocalStack endpoint listed in NO_PROXY keeps connecting directly. Nothing is passed when no proxy is configured.
    @molecule/api-queue-sqs@1.0.2
  • patch
    Route Stripe calls through the outbound proxy when one is configured. The stripe SDK builds its own agent and reads no proxy variable, so on a host whose only egress path is a proxy every call failed with a bare connection error; the client now receives a CONNECT-capable agent via the SDK's httpAgent option, resolved against https://api.stripe.com so NO_PROXY is honoured. Nothing is passed when no proxy is configured.
    @molecule/api-payments-stripe@1.0.3
  • patch
    Route the template object store through the outbound proxy when one is configured. The AWS SDK v3 builds its own agent and reads no proxy variable, so the S3 client now receives a CONNECT-capable agent via its own requestHandler option, resolved against the configured endpoint so a store listed in NO_PROXY keeps connecting directly. Nothing is passed when no proxy is configured.
    @molecule/api-code-sandbox-flyio@1.2.0

  • minor
    get() now returns null only for a sandbox that does not exist and throws on any other failure, a new describe(id) reads a sandbox's record without connecting (so a status check never resumes a paused sandbox, and a paused one reports sleeping), and sandboxes are created with onTimeout: pause instead of E2B's default kill. list() skips paused sandboxes rather than waking them.
    @molecule/api-code-sandbox-e2b@1.1.0
  • patch
    exportFiles(path) now roots the archive at the last segment of path (my-app/…), matching the core contract and the Docker bond, and shell-quotes paths in exportFiles/importFiles.
    @molecule/api-code-sandbox-e2b@1.1.0
  • patch
    A throwing activity sink no longer changes a send's outcome: a real delivery still resolves, and a real failure still rejects with the real provider error.
    4 packages
    @molecule/api-channel-capture@1.0.2@molecule/api-push-capture@1.0.2@molecule/api-sms-capture@1.0.2@molecule/api-webhook-capture@1.0.2
  • patch
    Accept hyphenated table/column identifiers (e.g. resource-share-links). Every interpolation site quotes identifiers, so hyphens are safe; the previous allowlist rejected @molecule/api-resource-share's tables, making every share-link operation throw.
    @molecule/api-database-mysql@1.0.2@molecule/api-database-postgresql@1.0.2@molecule/api-database-sqlite@1.0.3
  • patch
    ask_user cards now unwrap option objects the model pre-serialized as JSON strings (e.g. '{"key": "x", "label": "Build a new app"}') and render the label text, matching the existing object-option normalization.
    @molecule/app-ide-react@1.2.3
  • patch
    ask_user option recovery also handles mangled pseudo-JSON with mixed escaping (a failed parse retries with collapsed escapes, then falls back to extracting the label key), so a weak model's malformed option payloads still render as readable labels.
    @molecule/app-ide-react@1.2.4
  • patch
    ask_user option recovery prefers whichever JSON parse yields a recognized text key: a mangled option whose stray escapes make it parse into a label-less object now recovers its label via the collapsed-escape re-parse instead of rendering raw JSON.
    @molecule/app-ide-react@1.2.5
  • patch
    Auth http-token sync now mirrors a null access token to the http client, so cookie-session logins can no longer keep authenticating with a stale bearer from the prior session.
    @molecule/app-bonds-default-react@1.0.3
  • patch
    Catalog refresh: corrected US re-host rates (minimax-m3, qwen max models), deepseek-v4-flash defaults to its US re-host, peak surcharges only bill on the native provider, and notes for DeepInfra's -0813 snapshot pricing.
    @molecule/api-resource-ai-models@1.2.1
  • patch
    Document both modes on the module docs: intercept-only never delivers, while wrapping a real provider delivers and records the real outcome.
    5 packages
    @molecule/api-channel-capture@1.0.2@molecule/api-emails-capture@1.0.2@molecule/api-push-capture@1.0.2@molecule/api-sms-capture@1.0.2@molecule/api-webhook-capture@1.0.2
  • patch
    Document the exportFiles rooting contract: archives are rooted at the last segment of the exported path, and importFiles(dirname(path)) is the inverse.
    @molecule/api-code-sandbox@1.1.1
  • patch
    Log-in, sign-up and OAuth log-in responses no longer include secret user columns (confirmation/reset tokens, OAuth material) — the same denylist the self-read endpoints already apply.
    @molecule/api-resource-user@1.2.1
  • patch
    useChat: re-check stream liveness when the app returns to the foreground, so a chat stream killed by a short screen lock is aborted and resumed within the silence threshold instead of waiting on the stall watchdog.
    @molecule/app-react@1.0.3

  • minor
    AuthClientConfig.shouldRestoreUser lets an app reject a cookie-restored user and clear the stale presence hint, so an anonymous session cannot hydrate as a blank signed-in user. Defaults to current behaviour.
    @molecule/app-auth@1.1.0
  • minor
    verifyMiddleware accepts { shouldRefreshSession }, letting an app skip the transparent token re-issue (and its presence hint) for sessions that must not appear signed in. Defaults to current behaviour.
    @molecule/api-resource-user@1.2.0
  • minor
    Model definitions can stage an announced price change with scheduledPricing: a dated rate card that replaces the base rates from its effectiveFrom instant. Pricing resolves per request, so the catalog is correct on both sides of a switch without an edit landed at the moment it takes effect. GET /ai/models serves whichever rates are billing now. DeepSeek V4 Pro and Flash carry the provider's 2026-08-16 rise, including its peak-hour windows. New exports: effectiveBaseRates, effectivePeakPricing, withEffectivePricing; modelRegionRates takes an optional instant.
    @molecule/api-resource-ai-models@1.2.0
  • minor
    setProvider/getProvider/hasProvider/requireProvider accept an optional provider name, so an application can bond multiple sandbox providers under the category (e.g. a separate 'production' provider alongside the dev-sandbox singleton).
    @molecule/api-code-sandbox@1.1.0
  • minor
    The model picker prices models on cache reads — the dominant cost in agentic traffic — instead of list input price alone, and flags models whose region is in a peak-surcharge window.
    @molecule/app-ai-models@1.2.0@molecule/app-ide-react@1.2.0@molecule/app-locales-ide@1.1.0
  • patch
    useChat now recovers a chat stream interrupted by a screen lock or a backgrounded page, resuming from the server instead of staying silent until the stall watchdog fires.
    @molecule/app-react@1.0.2
  • patch
    A preview UI command posted while the preview iframe is reloading is now re-sent as soon as the iframe reports back, so preview tools no longer time out in a hidden tab.
    @molecule/app-ide-react@1.2.2
  • patch
    Add ide.chat.itemRenderError, shown in place of a chat message that could not be rendered, in all 79 languages.
    @molecule/app-locales-ide@1.1.1
  • patch
    Deck export now refuses ICNS, JPEG XL and HEIF/HEIC images. The image measurement library used to embed images has unpatched denial-of-service flaws in exactly those three parsers, so images are checked by magic number — not just by declared MIME type — before they reach it. PNG, JPEG, GIF, BMP, SVG and WebP are unaffected.
    @molecule/api-export-pptx@1.0.2
  • patch
    Default model is now gemini-3.7-flash, replacing the superseded gemini-3.6-flash.
    @molecule/api-ai-google@1.0.2
  • patch
    Docker Compose commands are now time-bounded, so an unresponsive Docker daemon fails the call instead of leaving up, down or health checks pending indefinitely.
    @molecule/api-staging-docker-compose@1.0.2
  • patch
    Secret redaction no longer rewrites ordinary source. File reads and search results now redact only NAME=value env assignments, so code such as auth={authClient} or apiKeys: 'API keys' is returned verbatim instead of as [REDACTED]. Command output and .env reads keep the full env-dump treatment. New exports: redactSecretsInCode, isEnvFilePath.
    @molecule/api-ai-tools@1.0.2
  • patch
    Tool cards no longer render raw tool input. A model-supplied field of the wrong type — for example an ask_user option sent as { label } instead of a string — is coerced to its text rather than reaching JSX, and each chat timeline item renders inside its own error boundary so one unrenderable item cannot blank the chat. ChatPanel accepts onRenderError to report a caught item error to the host.
    @molecule/app-ide-react@1.2.1

  • minor
    Add UIClassMap.touchTargetCompact — a 36px coarse-pointer hit-area floor for inline CTAs in dense surfaces (banner/chat-card actions) where the full 44px touchTarget is visually heavy; chat notice-card actions with a semantic color now use it.
    @molecule/app-ui-nativewind@1.1.0@molecule/app-ui-tailwind@1.1.0@molecule/app-ui@1.1.0
  • minor
    Chat notice-card actions accept an optional semantic color (ChatEventCardAction.color); colored actions render as standard ClassMap cm.button buttons so CTAs match the host app's other buttons.
    @molecule/app-ide-react@1.1.0
  • minor
    Model definitions accept supersededBy, naming the newer-generation model that replaces an older one. Superseded models are excluded from MODEL_IDS, getAvailableModels(), GET /ai/models and the client picker helpers — so only the newest generation of a family is offered — while getModel() still returns them so saved selections and past usage stay priceable. New helpers: isSelectableModel() and resolveSelectableModelId() (server), isSelectableModel() (client). The Alibaba AI bond now defaults to qwen3.8-max.
    @molecule/api-resource-ai-models@1.1.0@molecule/app-ai-models@1.1.0
  • patch
    updatePlan now logs every rejected plan update (with errorKey context) and analytics-tracking failures instead of silently swallowing them.
    @molecule/api-resource-user@1.1.1
  • patch
    Add UIClassMap.touchTargetCompact — a 36px coarse-pointer hit-area floor for inline CTAs in dense surfaces (banner/chat-card actions) where the full 44px touchTarget is visually heavy; chat notice-card actions with a semantic color now use it.
    @molecule/app-ide-react@1.1.1
  • patch
    Declare @bufbuild/protobuf (the major the E2B SDK's Connect RPC chain requires) so installs that skip automatic peer resolution — e.g. legacy-peer-deps — still place a compatible copy on the resolution path.
    @molecule/api-code-sandbox-e2b@1.0.4
  • patch
    Kimi K3 is now available in the US processing region and defaults to it, priced at $2.85/$14.25 per MTok with cache reads at $0.285 — cheaper than the native host on every axis, with the full 1M context. Kimi K2.7 Code's US rates were re-verified and corrected to $0.68/$3.40 (cache reads $0.136). Every multi-region model's default region is now the cheapest one for real agentic traffic, enforced by a test.
    @molecule/api-resource-ai-models@1.1.0
  • patch
    Mode surfaces now show the model that mode actually uses, and pending sends always carry the automatic flag — including kickoffs that were suppressed while a send was in flight.
    @molecule/app-ide-react@1.1.2
  • patch
    Model definitions accept supersededBy, naming the newer-generation model that replaces an older one. Superseded models are excluded from MODEL_IDS, getAvailableModels(), GET /ai/models and the client picker helpers — so only the newest generation of a family is offered — while getModel() still returns them so saved selections and past usage stay priceable. New helpers: isSelectableModel() and resolveSelectableModelId() (server), isSelectableModel() (client). The Alibaba AI bond now defaults to qwen3.8-max.
    @molecule/api-ai-alibaba@1.0.2

  • patch
    ChatPanel: derive stick-to-bottom from the scroll position on the actual scroll event, not from touch direction. A streaming burst grows the content without firing a scroll event, so it can no longer be mistaken for the user scrolling up; the auto-pin keeps the live response in view while a deliberate scroll up (and back) still works. Replaces a touch handler that latched "scrolled up" on any downward drag.
    @molecule/app-ide-react@1.0.5
  • patch
    ChatPanel: keep the conversation pinned to the latest message when the chat container is resized (layout change, on-screen keyboard, orientation), not only when a new message arrives — so the live response never ends up scrolled out of view. Respects a deliberate scroll-up.
    @molecule/app-ide-react@1.0.3
  • patch
    ChatPanel: on mount, scroll to the latest message after layout settles. The panel remounts on the boot→IDE transition starting at the top, so the live response spinner sat below the fold until the user scrolled (mobile). Now it lands at the bottom once the transition finishes.
    @molecule/app-ide-react@1.0.4

  • patch
    Drop org_slug from the shared-IPv4 assignment request so each sandbox app actually gets a public IP — without it the <app>.fly.dev preview URL never routed and the IDE hung on "Loading preview…".
    @molecule/api-code-sandbox-flyio@1.0.15
  • patch
    Pace Machines API requests process-wide so a sandbox boot's burst of exec calls no longer trips Fly's account rate limit (429) and livelocks the boot.
    @molecule/api-code-sandbox-flyio@1.0.14
  • patch
    PreviewPanel: wait longer before flagging a preview as blank so a sandbox that is still cold-starting (or served through a preview proxy) is never falsely reported as "didn't render anything". A real render still clears the overlay immediately.
    @molecule/app-ide-react@1.0.2
  • patch
    Retry create's machine POST through Fly's app-propagation 404 ("app not found") so a freshly-created app no longer intermittently fails the sandbox boot.
    @molecule/api-code-sandbox-flyio@1.0.13
  • patch
    Send only type (not region) when assigning a shared IPv4 — Fly rejects region for shared IPs with a 400, which left sandbox apps without a public IP so their preview URL never routed.
    @molecule/api-code-sandbox-flyio@1.0.16

  • minor
    Add optional bio and avatar profile fields to OAuthUserProps.
    @molecule/api-oauth@1.1.0
  • minor
    Map the user's display name and profile image (picture) from the Google userinfo response.
    @molecule/api-oauth-google@1.1.0
  • minor
    Map the user's display name, bio (description), and 400x400 profile image from the X profile via user.fields.
    @molecule/api-oauth-twitter@1.1.0
  • minor
    Map the user's display name, bio, and avatar URL from the GitHub profile.
    @molecule/api-oauth-github@1.1.0
  • minor
    Map the user's display name, bio, and avatar URL from the GitLab profile.
    @molecule/api-oauth-gitlab@1.1.0
  • minor
    OAuth sign-up/login now persists the provider profile: display name (falling back to the email's local part), bio, and the profile image re-hosted as an inline data URI (never a third-party URL). Blank name/bio/avatar are backfilled on later OAuth logins without overwriting user-set values.
    @molecule/api-resource-user@1.1.0
  • patch
    Fix Flycast private-address allocation: omit org_slug from the ip_assignments request. Fly derives the org from the target app and rejects an explicit org_slug with 400 "organization not found", which blocked every sandbox from reaching its database. App creation still sends org_slug (that endpoint requires it).
    @molecule/api-code-sandbox-flyio@1.0.3

  • patch
    Update dompurify to 3.4.13 (fixes GHSA-55q2-fjhq-7xh7 and related sanitizer advisories).
    @molecule/app-rich-text-quill@1.0.2@molecule/app-rich-text@1.0.2

  • patch
    Add Cloudflare Workers bonds: @molecule/api-scheduler-cloudflare and @molecule/api-database-d1.

    Running a molecule API on Workers was not a porting problem, it was a missing pair of bonds. Application code is unchanged; only bonds/ differs. **api-scheduler-cloudflare** — api-scheduler-default keeps tasks alive with setInterval, which needs a long-lived process a Worker does not have. This provider registers tasks and runs them from the Worker's scheduled() handler via runDueTasks(), driven by Cron Triggers. intervalMs is NOT honoured by default and that is deliberate: an isolate is short-lived, so "when did this last run" is not reliably known, and skipping on that basis can mean a task never runs. The trigger schedule is the schedule. TaskStatus.nextRunAt is always null rather than a computed guess, and runDueTasks() never rejects, so one failing task cannot fail the invocation and trigger a platform retry that re-runs the tasks that already succeeded. **api-database-d1** — D1 _is_ SQLite, so this reuses the sqlite bond's dialect verbatim and replaces only the pool (better-sqlite3 is a synchronous native binding; D1 is an async platform binding). This was cheap because createStore() was already written against the abstract DatabasePool rather than its driver. Verified the built package's import graph never reaches better-sqlite3, which is what lets it run in an isolate at all. The D1 binding is passed in, never discovered — Worker bindings arrive per-invocation on env. pool.transaction is left undefined rather than faked, because D1 has no interactive transactions and a rollback that reports success without happening is worse than an absent capability. **api-database-sqlite** gains ./store.js and ./utilities.js subpath exports so the driver-free dialect can be imported without pulling the native driver into a Workers bundle.

    @molecule/api-database-d1@1.0.2@molecule/api-database-sqlite@1.0.2@molecule/api-scheduler-cloudflare@1.0.2
  • patch
    Add the project-archive external-state bond for Cloudflare D1.

    @molecule/api-project-archive destroys the original once a capture verifies, so a state-owning provider with no external-state bond is silent, permanent data loss — not a missing feature. Adding @molecule/api-database-d1 created exactly that gap, and mlcl's coverage gate failed until this closed it. Capture shells out to wrangler d1 export for the same reason the Postgres bond shells out to pg_dump: only the engine that owns the data can produce a consistent snapshot with schema, indexes and constraints intact. Three refusals that exist because each would otherwise be silent: --remote is the default (a local export dumps the empty miniflare database and would look like a clean, successful capture); a zero-byte export is an error, not an empty database (d1 export always emits schema); and databaseNames must return an array — anything else is rejected rather than read as "this project owns nothing".

    @molecule/api-project-archive-external-state-d1@1.0.2
  • patch
    Move the nine optional provider wirings out of the package barrel and behind ./optional/<pair>.js subpath exports.

    **Import path change** (pre-release: nothing external consumes this yet, so it ships as a patch rather than a major): setupAppRealtimeSocketio, setupAppKeyboardShortcutsHotkeys, setupAppCommandPaletteCmdk, setupAppCodeEditorMonaco, setupAppVirtualScrollTanstack, setupAppDragDropDndkit, setupAppChartsChartjs, setupAppMapsLeaflet and setupAppVideoHls are no longer exported from the package root. Import each from its own subpath: ``diff -import { setupAppMapsLeaflet } from '@molecule/app-bonds-default-react' +import { setupAppMapsLeaflet } from '@molecule/app-bonds-default-react/optional/maps-leaflet.js' ` **Why.** A bundler must RESOLVE every import() in a module it pulls into the graph, before tree-shaking can drop anything. While these wirings sat in setup.ts — re-exported from the barrel — importing bootstrapApp dragged all 18 optional providers in, so any app that had not installed all 18 failed to build: ` [vite]: Rolldown failed to resolve import "@molecule/app-maps" from ".../app-bonds-default-react/dist/setup.js" ` A scaffolded status-page` app installed 3 of the 18; the other 15 were equally unresolvable and only the alphabetically-first was reported. Declaring them as optional peers is correct bookkeeping but changes nothing, because npm does not install optional peers — and installing all 18 would tax every app with Monaco, Leaflet, Chart.js, Socket.IO and hls.js, which is what making them optional was for. One module per pair means an app pays for exactly the providers it imports. Verified end to end: the app that reproduced the failure now builds (2500 modules, 0 unresolved), and all 266 template workspaces type-check clean.

    @molecule/app-bonds-default-react@1.0.2

  • patch
    Ship the generated package documentation.

    1.0.0 published with files: ["dist"], so no package carried a README and every npm page read "This package does not have a README". The generated doc (formerly MOLECULE.md, now README.md) is now included in the tarball, giving both humans and coding agents the full API reference from node_modules.

    910 packages
    @molecule/api-ai-document-extraction@1.0.1@molecule/api-ai-email-composer@1.0.1@molecule/api-ai-image-generation-pipeline@1.0.1@molecule/api-ai-moderation-pipeline@1.0.1@molecule/api-ai-quiz-generation@1.0.1@molecule/api-ai-rag-qa@1.0.1@molecule/api-ai-workflow-engine@1.0.1@molecule/api-activity-console@1.0.1@molecule/api-activity-http@1.0.1@molecule/api-ai-agents-llm@1.0.1@molecule/api-ai-classification-llm@1.0.1@molecule/api-ai-embeddings-local@1.0.1@molecule/api-ai-embeddings-openai@1.0.1@molecule/api-ai-image-generation-openai@1.0.1@molecule/api-ai-image-generation-stability@1.0.1@molecule/api-ai-rag-llm@1.0.1@molecule/api-ai-speech-elevenlabs@1.0.1@molecule/api-ai-speech-openai@1.0.1@molecule/api-ai-summarization-llm@1.0.1@molecule/api-ai-translation-deepl@1.0.1@molecule/api-ai-vector-store-chroma@1.0.1@molecule/api-ai-vector-store-memory@1.0.1@molecule/api-ai-vector-store-pgvector@1.0.1@molecule/api-ai-vector-store-pinecone@1.0.1@molecule/api-ai-alibaba@1.0.1@molecule/api-ai-anthropic@1.0.1@molecule/api-ai-deepseek@1.0.1@molecule/api-ai-google@1.0.1@molecule/api-ai-local@1.0.1@molecule/api-ai-minimax@1.0.1@molecule/api-ai-moonshot@1.0.1@molecule/api-ai-openai@1.0.1@molecule/api-ai-xai@1.0.1@molecule/api-ai-zhipu@1.0.1@molecule/api-analytics-mixpanel@1.0.1@molecule/api-analytics-posthog@1.0.1@molecule/api-audit-database@1.0.1@molecule/api-audit-file@1.0.1@molecule/api-cache-memcached@1.0.1@molecule/api-cache-memory@1.0.1@molecule/api-cache-redis@1.0.1@molecule/api-calendar-google@1.0.1@molecule/api-calendar-microsoft@1.0.1@molecule/api-channel-capture@1.0.1@molecule/api-channel-discord@1.0.1@molecule/api-channel-messenger@1.0.1@molecule/api-channel-slack@1.0.1@molecule/api-channel-telegram@1.0.1@molecule/api-channel-whatsapp@1.0.1@molecule/api-code-sandbox-docker@1.0.1@molecule/api-compliance-gdpr@1.0.1@molecule/api-config-env@1.0.1@molecule/api-cron-bullmq@1.0.1@molecule/api-cron-node-cron@1.0.1@molecule/api-crypto-prices-coingecko@1.0.1@molecule/api-crypto-prices-coinmarketcap@1.0.1@molecule/api-database-mysql@1.0.1@molecule/api-database-postgresql@1.0.1@molecule/api-database-sqlite@1.0.1@molecule/api-drug-database-rxnorm@1.0.1@molecule/api-emails-inbound-mailgun@1.0.1@molecule/api-emails-inbound-ses@1.0.1@molecule/api-emails-capture@1.0.1@molecule/api-emails-mailgun@1.0.1@molecule/api-emails-sendgrid@1.0.1@molecule/api-emails-sendmail@1.0.1@molecule/api-emails-ses@1.0.1@molecule/api-encryption-aes@1.0.1@molecule/api-equity-prices-alpha-vantage@1.0.1@molecule/api-equity-prices-iex@1.0.1@molecule/api-equity-prices-polygon@1.0.1@molecule/api-error-tracking-console@1.0.1@molecule/api-error-tracking-sentry@1.0.1@molecule/api-esign-hellosign@1.0.1@molecule/api-external-auth-supabase@1.0.1@molecule/api-feature-flags-database@1.0.1@molecule/api-flights-amadeus@1.0.1@molecule/api-fx-rates-ecb@1.0.1@molecule/api-fx-rates-openexchange@1.0.1@molecule/api-geolocation-google@1.0.1@molecule/api-geolocation-mapbox@1.0.1@molecule/api-geolocation-nominatim@1.0.1@molecule/api-hotels-amadeus@1.0.1@molecule/api-http-axios@1.0.1@molecule/api-http-fetch@1.0.1@molecule/api-i18n-simple@1.0.1@molecule/api-image-jimp@1.0.1@molecule/api-image-sharp@1.0.1@molecule/api-import-export-csv@1.0.1@molecule/api-jwt-jsonwebtoken@1.0.1@molecule/api-kyc-stripe-identity@1.0.1@molecule/api-logger-console@1.0.1@molecule/api-logger-loglevel@1.0.1@molecule/api-logger-pino@1.0.1@molecule/api-logger-winston@1.0.1@molecule/api-media-streaming-hls@1.0.1@molecule/api-middleware-body-parser-express@1.0.1@molecule/api-middleware-cookie-parser-express@1.0.1@molecule/api-middleware-cors-express@1.0.1@molecule/api-monitoring-default@1.0.1@molecule/api-multi-tenancy-schema@1.0.1@molecule/api-notification-center-database@1.0.1@molecule/api-notifications-slack@1.0.1@molecule/api-notifications-webhook@1.0.1@molecule/api-nutrition-database-open-food-facts@1.0.1@molecule/api-oauth-client-generic@1.0.1@molecule/api-oauth-apple@1.0.1@molecule/api-oauth-github@1.0.1@molecule/api-oauth-gitlab@1.0.1@molecule/api-oauth-google@1.0.1@molecule/api-oauth-microsoft@1.0.1@molecule/api-oauth-twitter@1.0.1@molecule/api-password-bcrypt@1.0.1@molecule/api-payments-apple@1.0.1@molecule/api-payments-google@1.0.1@molecule/api-payments-paypal@1.0.1@molecule/api-payments-stripe@1.0.1@molecule/api-pdf-pdfkit@1.0.1@molecule/api-pdf-puppeteer@1.0.1@molecule/api-permissions-casbin@1.0.1@molecule/api-permissions-custom@1.0.1@molecule/api-project-archive-external-state-mysql@1.0.1@molecule/api-project-archive-external-state-postgresql@1.0.1@molecule/api-project-archive-external-state-sqlite@1.0.1@molecule/api-project-archive-object-storage@1.0.1@molecule/api-push-capture@1.0.1@molecule/api-push-notifications-web-push@1.0.1@molecule/api-queue-memory@1.0.1@molecule/api-queue-rabbitmq@1.0.1@molecule/api-queue-redis@1.0.1@molecule/api-queue-sqs@1.0.1@molecule/api-rate-limit-memory@1.0.1@molecule/api-rate-limit-redis@1.0.1@molecule/api-realtime-socketio@1.0.1@molecule/api-realtime-sse@1.0.1@molecule/api-realtime-ws@1.0.1@molecule/api-realtime-yjs@1.0.1@molecule/api-reporting-database@1.0.1@molecule/api-scheduler-default@1.0.1@molecule/api-search-elasticsearch@1.0.1@molecule/api-search-meilisearch@1.0.1@molecule/api-search-postgres@1.0.1@molecule/api-search-typesense@1.0.1@molecule/api-secrets-doppler@1.0.1@molecule/api-secrets-env@1.0.1@molecule/api-secrets-molecule@1.0.1@molecule/api-shipping-easypost@1.0.1@molecule/api-shipping-shippo@1.0.1@molecule/api-sitemap-xml@1.0.1@molecule/api-sms-capture@1.0.1@molecule/api-sms-twilio@1.0.1@molecule/api-sms-vonage@1.0.1@molecule/api-templating-handlebars@1.0.1@molecule/api-templating-mjml@1.0.1@molecule/api-travel-amadeus@1.0.1@molecule/api-two-factor-otplib@1.0.1@molecule/api-uploads-filesystem@1.0.1@molecule/api-uploads-s3@1.0.1@molecule/api-video-meetings-zoom@1.0.1@molecule/api-video-rooms-daily-co@1.0.1@molecule/api-video-rooms-livekit@1.0.1@molecule/api-wearable-fitbit@1.0.1@molecule/api-wearable-oura@1.0.1@molecule/api-weather-open-meteo@1.0.1@molecule/api-weather-openweather@1.0.1@molecule/api-webhook-capture@1.0.1@molecule/api-webhook-http@1.0.1@molecule/api-webhook-queue@1.0.1@molecule/api-workflow-database@1.0.1@molecule/api-ci-github-actions@1.0.1@molecule/api-activity@1.0.1@molecule/api-ai-agents@1.0.1@molecule/api-ai-classification@1.0.1@molecule/api-ai-embeddings@1.0.1@molecule/api-ai-image-generation@1.0.1@molecule/api-ai-rag@1.0.1@molecule/api-ai-speech@1.0.1@molecule/api-ai-summarization@1.0.1@molecule/api-ai-tools@1.0.1@molecule/api-ai-translation@1.0.1@molecule/api-ai-vector-store@1.0.1@molecule/api-ai@1.0.1@molecule/api-analytics@1.0.1@molecule/api-audit@1.0.1@molecule/api-cache@1.0.1@molecule/api-calendar@1.0.1@molecule/api-channel@1.0.1@molecule/api-code-sandbox@1.0.1@molecule/api-compliance@1.0.1@molecule/api-config@1.0.1@molecule/api-cron@1.0.1@molecule/api-crypto-prices@1.0.1@molecule/api-database@1.0.1@molecule/api-drug-database@1.0.1@molecule/api-email-templates@1.0.1@molecule/api-emails-inbound@1.0.1@molecule/api-emails@1.0.1@molecule/api-encryption@1.0.1@molecule/api-entitlements@1.0.1@molecule/api-equity-prices@1.0.1@molecule/api-error-tracking@1.0.1@molecule/api-esign@1.0.1@molecule/api-external-auth@1.0.1@molecule/api-feature-flags@1.0.1@molecule/api-flights@1.0.1@molecule/api-fx-rates@1.0.1@molecule/api-geolocation@1.0.1@molecule/api-hotels@1.0.1@molecule/api-http@1.0.1@molecule/api-i18n@1.0.1@molecule/api-image@1.0.1@molecule/api-import-export@1.0.1@molecule/api-jwt@1.0.1@molecule/api-kyc@1.0.1@molecule/api-logger@1.0.1@molecule/api-media-streaming@1.0.1@molecule/api-content-moderation@1.0.1@molecule/api-monitoring@1.0.1@molecule/api-multi-tenancy@1.0.1@molecule/api-notification-center@1.0.1@molecule/api-notifications@1.0.1@molecule/api-nutrition-database@1.0.1@molecule/api-oauth-client@1.0.1@molecule/api-oauth@1.0.1@molecule/api-password@1.0.1@molecule/api-payments@1.0.1@molecule/api-pdf@1.0.1@molecule/api-permissions@1.0.1@molecule/api-project-archive@1.0.1@molecule/api-push-notifications@1.0.1@molecule/api-queue@1.0.1@molecule/api-rate-limit@1.0.1@molecule/api-realtime@1.0.1@molecule/api-reporting@1.0.1@molecule/api-scheduler@1.0.1@molecule/api-search@1.0.1@molecule/api-secrets@1.0.1@molecule/api-shipping@1.0.1@molecule/api-sitemap@1.0.1@molecule/api-sms@1.0.1@molecule/api-staging@1.0.1@molecule/api-templating@1.0.1@molecule/api-travel@1.0.1@molecule/api-two-factor@1.0.1@molecule/api-uploads@1.0.1@molecule/api-video-meetings@1.0.1@molecule/api-video-rooms@1.0.1@molecule/api-wearable@1.0.1@molecule/api-weather@1.0.1@molecule/api-webhook@1.0.1@molecule/api-workflow@1.0.1@molecule/api-bond@1.0.1@molecule/api-bonds-default-express@1.0.1@molecule/api-resource@1.0.1@molecule/api-server-default-express@1.0.1@molecule/api-locales-ai-anthropic@1.0.1@molecule/api-locales-ai-conversation@1.0.1@molecule/api-locales-ai@1.0.1@molecule/api-locales-analytics@1.0.1@molecule/api-locales-body-parser@1.0.1@molecule/api-locales-cache@1.0.1@molecule/api-locales-code-sandbox-docker@1.0.1@molecule/api-locales-code-sandbox@1.0.1@molecule/api-locales-config@1.0.1@molecule/api-locales-database@1.0.1@molecule/api-locales-device@1.0.1@molecule/api-locales-emails@1.0.1@molecule/api-locales-monitoring@1.0.1@molecule/api-locales-notifications@1.0.1@molecule/api-locales-payment@1.0.1@molecule/api-locales-payments-google@1.0.1@molecule/api-locales-payments-stripe@1.0.1@molecule/api-locales-product@1.0.1@molecule/api-locales-project@1.0.1@molecule/api-locales-property@1.0.1@molecule/api-locales-queue-rabbitmq@1.0.1@molecule/api-locales-queue@1.0.1@molecule/api-locales-resource-api-key@1.0.1@molecule/api-locales-resource-course@1.0.1@molecule/api-locales-resource-grade@1.0.1@molecule/api-locales-resource-message@1.0.1@molecule/api-locales-resource-version-history@1.0.1@molecule/api-locales-resource@1.0.1@molecule/api-locales-scheduler@1.0.1@molecule/api-locales-secrets-doppler@1.0.1@molecule/api-locales-secrets@1.0.1@molecule/api-locales-status-page@1.0.1@molecule/api-locales-tag@1.0.1@molecule/api-locales-trash@1.0.1@molecule/api-locales-uploads@1.0.1@molecule/api-locales-user-payments@1.0.1@molecule/api-locales-user@1.0.1@molecule/api-middleware-analytics@1.0.1@molecule/api-billing-routes@1.0.1@molecule/api-middleware-body-parser@1.0.1@molecule/api-middleware-cookie-parser@1.0.1@molecule/api-middleware-cors@1.0.1@molecule/api-middleware-request-logging@1.0.1@molecule/api-middleware-validation@1.0.1@molecule/api-resource-activity-feed@1.0.1@molecule/api-resource-address@1.0.1@molecule/api-resource-ai-conversation@1.0.1@molecule/api-resource-ai-models@1.0.1@molecule/api-resource-api-key@1.0.1@molecule/api-resource-booking@1.0.1@molecule/api-resource-bookmark@1.0.1@molecule/api-resource-cart@1.0.1@molecule/api-resource-comment@1.0.1@molecule/api-resource-course@1.0.1@molecule/api-resource-device-auth-token@1.0.1@molecule/api-resource-device@1.0.1@molecule/api-resource-event-type@1.0.1@molecule/api-resource-feature-flag@1.0.1@molecule/api-resource-firmware@1.0.1@molecule/api-resource-follow@1.0.1@molecule/api-resource-forum-thread@1.0.1@molecule/api-resource-grade@1.0.1@molecule/api-resource-inventory@1.0.1@molecule/api-resource-invoice@1.0.1@molecule/api-resource-journal-entry@1.0.1@molecule/api-resource-medication@1.0.1@molecule/api-resource-meeting@1.0.1@molecule/api-resource-message@1.0.1@molecule/api-resource-notification@1.0.1@molecule/api-notifications-preferences@1.0.1@molecule/api-resource-order@1.0.1@molecule/api-resource-payment-method@1.0.1@molecule/api-resource-payment@1.0.1@molecule/api-resource-product@1.0.1@molecule/api-resource-project@1.0.1@molecule/api-resource-property@1.0.1@molecule/api-resource-reaction@1.0.1@molecule/api-resource-readings@1.0.1@molecule/api-reputation@1.0.1@molecule/api-resource-review@1.0.1@molecule/api-resource-room-type@1.0.1@molecule/api-resource-share@1.0.1@molecule/api-resource-status-page@1.0.1@molecule/api-streak@1.0.1@molecule/api-resource-subscriber@1.0.1@molecule/api-resource-tag@1.0.1@molecule/api-resource-task@1.0.1@molecule/api-resource-template@1.0.1@molecule/api-resource-thread@1.0.1@molecule/api-trash@1.0.1@molecule/api-resource-user@1.0.1@molecule/api-resource-version-history@1.0.1@molecule/api-resource-wiki-page@1.0.1@molecule/api-resource-workspace@1.0.1@molecule/api-staging-docker-compose@1.0.1@molecule/api-testing@1.0.1@molecule/api-animation-renderer@1.0.1@molecule/api-audio-render@1.0.1@molecule/api-breach-check@1.0.1@molecule/api-canvas-render@1.0.1@molecule/api-database-remote@1.0.1@molecule/api-export-pptx@1.0.1@molecule/api-feed-podcast@1.0.1@molecule/api-feed-rss-parser@1.0.1@molecule/api-feed-rss@1.0.1@molecule/api-formula-engine@1.0.1@molecule/api-git-workspace@1.0.1@molecule/api-image-compositor@1.0.1@molecule/api-imap@1.0.1@molecule/api-leaderboard@1.0.1@molecule/api-link-preview@1.0.1@molecule/api-oembed@1.0.1@molecule/api-openapi@1.0.1@molecule/api-payroll-tax-us@1.0.1@molecule/api-qr-code@1.0.1@molecule/api-quiz-grading@1.0.1@molecule/api-rank-score@1.0.1@molecule/api-realtime-rooms@1.0.1@molecule/api-recurring-schedule@1.0.1@molecule/api-semantic-search@1.0.1@molecule/api-smtp@1.0.1@molecule/api-spaced-repetition@1.0.1@molecule/api-stack-fingerprint@1.0.1@molecule/api-staging-state@1.0.1@molecule/api-utilities-validation@1.0.1@molecule/api-video-render@1.0.1@molecule/api-wallet-pass@1.0.1@molecule/app-ai-assistant-default@1.0.1@molecule/app-ai-chat-http@1.0.1@molecule/app-ai-copilot-default@1.0.1@molecule/app-ai-image-generator-default@1.0.1@molecule/app-ai-voice-default@1.0.1@molecule/app-ai-voice-parakeet@1.0.1@molecule/app-ai-voice-whisper@1.0.1@molecule/app-analytics-mixpanel@1.0.1@molecule/app-analytics-posthog@1.0.1@molecule/app-audio-howler@1.0.1@molecule/app-calendar-fullcalendar@1.0.1@molecule/app-charts-chartjs@1.0.1@molecule/app-code-editor-monaco@1.0.1@molecule/app-color-picker-default@1.0.1@molecule/app-command-palette-cmdk@1.0.1@molecule/app-country-flags-country-flag-icons@1.0.1@molecule/app-data-table-tanstack@1.0.1@molecule/app-date-range-picker-default@1.0.1@molecule/app-drag-drop-dndkit@1.0.1@molecule/app-file-upload-filepond@1.0.1@molecule/app-fonts-arimo@1.0.1@molecule/app-fonts-dm-sans@1.0.1@molecule/app-fonts-dm-serif-display@1.0.1@molecule/app-fonts-ibm-plex-mono@1.0.1@molecule/app-fonts-ibm-plex-sans@1.0.1@molecule/app-fonts-inter@1.0.1@molecule/app-fonts-jetbrains-mono@1.0.1@molecule/app-fonts-lato@1.0.1@molecule/app-fonts-lora@1.0.1@molecule/app-fonts-manrope@1.0.1@molecule/app-fonts-material-symbols@1.0.1@molecule/app-fonts-merriweather@1.0.1@molecule/app-fonts-newsreader@1.0.1@molecule/app-fonts-playfair-display@1.0.1@molecule/app-fonts-plus-jakarta-sans@1.0.1@molecule/app-fonts-source-serif-4@1.0.1@molecule/app-fonts-space-grotesk@1.0.1@molecule/app-fonts-system@1.0.1@molecule/app-gallery-photoswipe@1.0.1@molecule/app-http-axios@1.0.1@molecule/app-i18n-i18next@1.0.1@molecule/app-i18n-react-i18next@1.0.1@molecule/app-icons-molecule@1.0.1@molecule/app-ide-default@1.0.1@molecule/app-image-crop-cropperjs@1.0.1@molecule/app-kanban-default@1.0.1@molecule/app-keyboard-shortcuts-hotkeys@1.0.1@molecule/app-live-preview-iframe@1.0.1@molecule/app-maps-leaflet@1.0.1@molecule/app-markdown-react-markdown@1.0.1@molecule/app-clipboard-react-native@1.0.1@molecule/app-keyboard-react-native@1.0.1@molecule/app-lifecycle-react-native@1.0.1@molecule/app-network-react-native@1.0.1@molecule/app-push-react-native@1.0.1@molecule/app-splash-screen-react-native@1.0.1@molecule/app-status-bar-react-native@1.0.1@molecule/app-notification-center-default@1.0.1@molecule/app-realtime-socketio@1.0.1@molecule/app-rich-text-quill@1.0.1@molecule/app-routing-next@1.0.1@molecule/app-routing-react-navigation@1.0.1@molecule/app-routing-react-router@1.0.1@molecule/app-routing-vue-router@1.0.1@molecule/app-state-jotai@1.0.1@molecule/app-state-redux@1.0.1@molecule/app-state-zustand@1.0.1@molecule/app-status-dashboard-http@1.0.1@molecule/app-stepper-default@1.0.1@molecule/app-storage-async-storage@1.0.1@molecule/app-storage-localstorage@1.0.1@molecule/app-styling-tailwind@1.0.1@molecule/app-theme-css-variables-liquid-glass@1.0.1@molecule/app-theme-css-variables@1.0.1@molecule/app-timeline-default@1.0.1@molecule/app-tour-shepherd@1.0.1@molecule/app-tree-view-default@1.0.1@molecule/app-ui-nativewind@1.0.1@molecule/app-ui-tailwind-glass@1.0.1@molecule/app-ui-tailwind@1.0.1@molecule/app-video-hls@1.0.1@molecule/app-virtual-scroll-tanstack@1.0.1@molecule/app-ai-assistant@1.0.1@molecule/app-ai-chat@1.0.1@molecule/app-ai-copilot@1.0.1@molecule/app-ai-image-generator@1.0.1@molecule/app-ai-models@1.0.1@molecule/app-ai-voice@1.0.1@molecule/app-analytics@1.0.1@molecule/app-audio@1.0.1@molecule/app-auth@1.0.1@molecule/app-calendar@1.0.1@molecule/app-code-editor@1.0.1@molecule/app-color-picker@1.0.1@molecule/app-command-palette@1.0.1@molecule/app-country-flags@1.0.1@molecule/app-data-table@1.0.1@molecule/app-date-range-picker@1.0.1@molecule/app-device@1.0.1@molecule/app-drag-drop@1.0.1@molecule/app-file-upload@1.0.1@molecule/app-fonts@1.0.1@molecule/app-forms@1.0.1@molecule/app-gallery@1.0.1@molecule/app-http@1.0.1@molecule/app-i18n@1.0.1@molecule/app-icons@1.0.1@molecule/app-ide@1.0.1@molecule/app-image-crop@1.0.1@molecule/app-kanban@1.0.1@molecule/app-keyboard-shortcuts@1.0.1@molecule/app-live-preview@1.0.1@molecule/app-logger@1.0.1@molecule/app-markdown@1.0.1@molecule/app-notification-center@1.0.1@molecule/app-platform@1.0.1@molecule/app-realtime@1.0.1@molecule/app-routing@1.0.1@molecule/app-state@1.0.1@molecule/app-status-dashboard@1.0.1@molecule/app-stepper@1.0.1@molecule/app-storage@1.0.1@molecule/app-styling@1.0.1@molecule/app-theme@1.0.1@molecule/app-timeline@1.0.1@molecule/app-tour@1.0.1@molecule/app-tree-view@1.0.1@molecule/app-ui-showcase@1.0.1@molecule/app-ui@1.0.1@molecule/app-utilities@1.0.1@molecule/app-version@1.0.1@molecule/app-virtual-scroll@1.0.1@molecule/app-achievement-card-react@1.0.1@molecule/app-action-menu-react@1.0.1@molecule/app-activity-feed-react@1.0.1@molecule/app-activity-timeline-react@1.0.1@molecule/app-address-display-react@1.0.1@molecule/app-adjustment-slider-react@1.0.1@molecule/app-admin-table-react@1.0.1@molecule/app-amount-input-react@1.0.1@molecule/app-analytics-react@1.0.1@molecule/app-feature-animation-canvas-react@1.0.1@molecule/app-annotation-pin-react@1.0.1@molecule/app-announcement-bar-react@1.0.1@molecule/app-feature-audio-effects-rack-react@1.0.1@molecule/app-feature-audio-mixer-react@1.0.1@molecule/app-audio-player-react@1.0.1@molecule/app-audio-recorder-react@1.0.1@molecule/app-feature-audio-waveform-react@1.0.1@molecule/app-audit-log-row-react@1.0.1@molecule/app-auth-brand-header-react@1.0.1@molecule/app-auth-modal-react@1.0.1@molecule/app-auth-shell-react@1.0.1@molecule/app-auth-ui-react@1.0.1@molecule/app-author-bio-card-react@1.0.1@molecule/app-avatar-stack-react@1.0.1@molecule/app-feature-barcode-scanner-react@1.0.1@molecule/app-bias-indicator-react@1.0.1@molecule/app-billing-react@1.0.1@molecule/app-breadcrumb-react@1.0.1@molecule/app-bulk-action-toolbar-react@1.0.1@molecule/app-canvas-engine-react@1.0.1@molecule/app-feature-canvas-react@1.0.1@molecule/app-card-grid-react@1.0.1@molecule/app-carousel-react@1.0.1@molecule/app-feature-chapter-list-react@1.0.1@molecule/app-chart-wrapper-react@1.0.1@molecule/app-charts@1.0.1@molecule/app-chatbot-tester-react@1.0.1@molecule/app-checklist-react@1.0.1@molecule/app-class-schedule-react@1.0.1@molecule/app-code-block-react@1.0.1@molecule/app-collapsible-section-react@1.0.1@molecule/app-color-picker-react@1.0.1@molecule/app-color-swatch-picker-react@1.0.1@molecule/app-comparison-row-react@1.0.1@molecule/app-contact-display-react@1.0.1@molecule/app-contact-form-react@1.0.1@molecule/app-cookie-banner-react@1.0.1@molecule/app-copy-link-field-react@1.0.1@molecule/app-countdown-react@1.0.1@molecule/app-currency-display-react@1.0.1@molecule/app-danger-zone-react@1.0.1@molecule/app-data-table-ui-react@1.0.1@molecule/app-day-timeline-react@1.0.1@molecule/app-detail-header-react@1.0.1@molecule/app-detail-page-layout-react@1.0.1@molecule/app-diff-viewer-react@1.0.1@molecule/app-drawing-toolbar-react@1.0.1@molecule/app-e2e-fixtures-default@1.0.1@molecule/app-editor-layout-react@1.0.1@molecule/app-editor-toolbar-react@1.0.1@molecule/app-embed-snippet-react@1.0.1@molecule/app-embeddable-chat-widget@1.0.1@molecule/app-emoji-reactions-react@1.0.1@molecule/app-empty-state-react@1.0.1@molecule/app-exif-panel-react@1.0.1@molecule/app-faceted-search-react@1.0.1@molecule/app-feature-flag-row-react@1.0.1@molecule/app-file-card-react@1.0.1@molecule/app-file-dropzone-react@1.0.1@molecule/app-filter-bar-react@1.0.1@molecule/app-flashcard-card-react@1.0.1@molecule/app-floating-action-button-react@1.0.1@molecule/app-flow-canvas-react@1.0.1@molecule/app-footer-react@1.0.1@molecule/app-forum-thread-row-react@1.0.1@molecule/app-gradebook-react@1.0.1@molecule/app-feature-graph-view-react@1.0.1@molecule/app-habit-streak-card-react@1.0.1@molecule/app-header-react@1.0.1@molecule/app-heatmap-react@1.0.1@molecule/app-help-button-react@1.0.1@molecule/app-hero-metric-card-react@1.0.1@molecule/app-home-page-react@1.0.1@molecule/app-http-inspector-react@1.0.1@molecule/app-i18n-default-react@1.0.1@molecule/app-iap@1.0.1@molecule/app-ide-react@1.0.1@molecule/app-feature-image-canvas-react@1.0.1@molecule/app-image-gallery-editor-react@1.0.1@molecule/app-image-gallery-react@1.0.1@molecule/app-inbox-row-react@1.0.1@molecule/app-info-display-react@1.0.1@molecule/app-inline-edit-react@1.0.1@molecule/app-integration-card-react@1.0.1@molecule/app-job-listing-row-react@1.0.1@molecule/app-join-code-react@1.0.1@molecule/app-kanban-board-react@1.0.1@molecule/app-kpi-card-react@1.0.1@molecule/app-layer-panel-react@1.0.1@molecule/app-leaderboard-list-react@1.0.1@molecule/app-leaderboard-row-react@1.0.1@molecule/app-legal-pages-react@1.0.1@molecule/app-list-item-row-react@1.0.1@molecule/app-listing-card-react@1.0.1@molecule/app-log-viewer-react@1.0.1@molecule/app-loyalty-tier-badge-react@1.0.1@molecule/app-map-drawing-react@1.0.1@molecule/app-maps@1.0.1@molecule/app-medication-row-react@1.0.1@molecule/app-message-bubble-react@1.0.1@molecule/app-message-preview-react@1.0.1@molecule/app-mind-map-canvas-react@1.0.1@molecule/app-mini-calendar-react@1.0.1@molecule/app-moderation-queue-react@1.0.1@molecule/app-muscle-group-badge-react@1.0.1@molecule/app-nav-chrome-react@1.0.1@molecule/app-newsletter-signup-react@1.0.1@molecule/app-node-editor-panel-react@1.0.1@molecule/app-note-card-react@1.0.1@molecule/app-notification-badge-react@1.0.1@molecule/app-notification-center-react@1.0.1@molecule/app-notification-feed-react@1.0.1@molecule/app-notifications-page-react@1.0.1@molecule/app-now-playing-bar-react@1.0.1@molecule/app-nps-distribution-react@1.0.1@molecule/app-oauth-buttons-react@1.0.1@molecule/app-oauth-logos-react@1.0.1@molecule/app-onboarding-modal-react@1.0.1@molecule/app-order-timeline-react@1.0.1@molecule/app-page-chrome-react@1.0.1@molecule/app-pagination-bar-react@1.0.1@molecule/app-password-generator-react@1.0.1@molecule/app-password-strength-meter-react@1.0.1@molecule/app-photo-lightbox-react@1.0.1@molecule/app-feature-piano-roll-react@1.0.1@molecule/app-plan-updated-page-react@1.0.1@molecule/app-presence-indicator-react@1.0.1@molecule/app-price-range-slider-react@1.0.1@molecule/app-pricing-page-react@1.0.1@molecule/app-pricing-table-react@1.0.1@molecule/app-progress-bar-react@1.0.1@molecule/app-progress-rings-react@1.0.1@molecule/app-pwa-default@1.0.1@molecule/app-qr-code-react@1.0.1@molecule/app-quiz-card-react@1.0.1@molecule/app-rating-display-react@1.0.1@molecule/app-rating-form-react@1.0.1@molecule/app-reading-progress-bar-react@1.0.1@molecule/app-related-items-card-react@1.0.1@molecule/app-relative-time-react@1.0.1@molecule/app-reorderable-list-react@1.0.1@molecule/app-reputation-badge-react@1.0.1@molecule/app-rich-text@1.0.1@molecule/app-root-error-boundary-react@1.0.1@molecule/app-rule-builder-react@1.0.1@molecule/app-safe-link-react@1.0.1@molecule/app-search-autocomplete-react@1.0.1@molecule/app-secret-row-react@1.0.1@molecule/app-section-divider-react@1.0.1@molecule/app-service-worker-default@1.0.1@molecule/app-settings-actions-bar-react@1.0.1@molecule/app-settings-container-react@1.0.1@molecule/app-settings-panel-react@1.0.1@molecule/app-share-link-card-react@1.0.1@molecule/app-shell-layout-react@1.0.1@molecule/app-sidebar-layout-react@1.0.1@molecule/app-slide-thumbnail-react@1.0.1@molecule/app-social-share-buttons-react@1.0.1@molecule/app-sort-picker-react@1.0.1@molecule/app-sparkline-react@1.0.1@molecule/app-spreadsheet-grid-react@1.0.1@molecule/app-stage-timeline-react@1.0.1@molecule/app-status-badge-react@1.0.1@molecule/app-status-summary-react@1.0.1@molecule/app-status-timeline-react@1.0.1@molecule/app-stepper-react@1.0.1@molecule/app-storefront-chrome-react@1.0.1@molecule/app-subscription-plan-card-react@1.0.1@molecule/app-survey-question-react@1.0.1@molecule/app-tab-filter-react@1.0.1@molecule/app-tag-input-react@1.0.1@molecule/app-feature-thread-tree-react@1.0.1@molecule/app-three-viewer-react@1.0.1@molecule/app-ticker-row-react@1.0.1@molecule/app-time-slot-picker-react@1.0.1@molecule/app-timeline-react@1.0.1@molecule/app-top-nav-layout-react@1.0.1@molecule/app-trace-waterfall-react@1.0.1@molecule/app-feature-track-lane-react@1.0.1@molecule/app-transactions-table-react@1.0.1@molecule/app-feature-transport-bar-react@1.0.1@molecule/app-trend-chip-react@1.0.1@molecule/app-typing-indicator-react@1.0.1@molecule/app-vendor-card-react@1.0.1@molecule/app-video-call-controls-react@1.0.1@molecule/app-video-player-react@1.0.1@molecule/app-feature-video-scrubber-react@1.0.1@molecule/app-feature-video-timeline-react@1.0.1@molecule/app-video@1.0.1@molecule/app-vite-config-default@1.0.1@molecule/app-vote-cluster-react@1.0.1@molecule/app-weather-card-react@1.0.1@molecule/app-webhook-inspector-react@1.0.1@molecule/app-whiteboard-canvas-react@1.0.1@molecule/app-wiki-page-header-react@1.0.1@molecule/app-word-cloud-react@1.0.1@molecule/app-ui-angular@1.0.1@molecule/app-angular@1.0.1@molecule/app-ui-react-native@1.0.1@molecule/app-react-native@1.0.1@molecule/app-ui-react@1.0.1@molecule/app-react@1.0.1@molecule/app-ui-solid@1.0.1@molecule/app-solid@1.0.1@molecule/app-ui-svelte@1.0.1@molecule/app-svelte@1.0.1@molecule/app-ui-vue@1.0.1@molecule/app-vue@1.0.1@molecule/app-bond@1.0.1@molecule/app-bonds-default-react@1.0.1@molecule/app-locales-adjustment-slider@1.0.1@molecule/app-locales-ai-chat@1.0.1@molecule/app-locales-annotation-pin@1.0.1@molecule/app-locales-announcement-bar@1.0.1@molecule/app-locales-audio-player@1.0.1@molecule/app-locales-audio-recorder@1.0.1@molecule/app-locales-auth-shell@1.0.1@molecule/app-locales-auth@1.0.1@molecule/app-locales-author-bio-card@1.0.1@molecule/app-locales-badge@1.0.1@molecule/app-locales-battery@1.0.1@molecule/app-locales-bias-indicator@1.0.1@molecule/app-locales-billing@1.0.1@molecule/app-locales-biometrics@1.0.1@molecule/app-locales-bluetooth@1.0.1@molecule/app-locales-brightness@1.0.1@molecule/app-locales-bulk-action-toolbar@1.0.1@molecule/app-locales-calendar@1.0.1@molecule/app-locales-camera@1.0.1@molecule/app-locales-canvas-engine@1.0.1@molecule/app-locales-carousel@1.0.1@molecule/app-locales-charts@1.0.1@molecule/app-locales-class-schedule@1.0.1@molecule/app-locales-clipboard@1.0.1@molecule/app-locales-code-block@1.0.1@molecule/app-locales-code-editor@1.0.1@molecule/app-locales-color-picker@1.0.1@molecule/app-locales-common@1.0.1@molecule/app-locales-contact-form@1.0.1@molecule/app-locales-contacts@1.0.1@molecule/app-locales-cookie-banner@1.0.1@molecule/app-locales-copy-link-field@1.0.1@molecule/app-locales-danger-zone@1.0.1@molecule/app-locales-day-timeline@1.0.1@molecule/app-locales-drawing-toolbar@1.0.1@molecule/app-locales-embed-snippet@1.0.1@molecule/app-locales-embeddable-chat-widget@1.0.1@molecule/app-locales-emoji-reactions@1.0.1@molecule/app-locales-exif-panel@1.0.1@molecule/app-locales-feature-animation-canvas@1.0.1@molecule/app-locales-feature-audio-effects-rack@1.0.1@molecule/app-locales-feature-audio-mixer@1.0.1@molecule/app-locales-feature-audio-waveform@1.0.1@molecule/app-locales-feature-barcode-scanner@1.0.1@molecule/app-locales-feature-canvas@1.0.1@molecule/app-locales-feature-chapter-list@1.0.1@molecule/app-locales-feature-graph-view@1.0.1@molecule/app-locales-feature-image-canvas@1.0.1@molecule/app-locales-feature-map-drawing@1.0.1@molecule/app-locales-feature-piano-roll@1.0.1@molecule/app-locales-feature-thread-tree@1.0.1@molecule/app-locales-feature-three-viewer@1.0.1@molecule/app-locales-feature-track-lane@1.0.1@molecule/app-locales-feature-transport-bar@1.0.1@molecule/app-locales-feature-video-scrubber@1.0.1@molecule/app-locales-feature-video-timeline@1.0.1@molecule/app-locales-file-card@1.0.1@molecule/app-locales-file-dropzone@1.0.1@molecule/app-locales-filesystem@1.0.1@molecule/app-locales-filter-bar@1.0.1@molecule/app-locales-flashcard-card@1.0.1@molecule/app-locales-flow-canvas@1.0.1@molecule/app-locales-footer@1.0.1@molecule/app-locales-forms@1.0.1@molecule/app-locales-geolocation@1.0.1@molecule/app-locales-gradebook@1.0.1@molecule/app-locales-habit-streak-card@1.0.1@molecule/app-locales-haptics@1.0.1@molecule/app-locales-health@1.0.1@molecule/app-locales-heatmap@1.0.1@molecule/app-locales-help-button@1.0.1@molecule/app-locales-hero-metric-card@1.0.1@molecule/app-locales-http-inspector@1.0.1@molecule/app-locales-http@1.0.1@molecule/app-locales-i18n@1.0.1@molecule/app-locales-iap@1.0.1@molecule/app-locales-icons@1.0.1@molecule/app-locales-ide@1.0.1@molecule/app-locales-inline-edit@1.0.1@molecule/app-locales-join-code@1.0.1@molecule/app-locales-keyboard@1.0.1@molecule/app-locales-layer-panel@1.0.1@molecule/app-locales-legal-default@1.0.1@molecule/app-locales-live-preview@1.0.1@molecule/app-locales-loyalty-tier-badge@1.0.1@molecule/app-locales-maps@1.0.1@molecule/app-locales-medication-row@1.0.1@molecule/app-locales-message-bubble@1.0.1@molecule/app-locales-mind-map-canvas@1.0.1@molecule/app-locales-moderation-queue@1.0.1@molecule/app-locales-motion@1.0.1@molecule/app-locales-network@1.0.1@molecule/app-locales-newsletter-signup@1.0.1@molecule/app-locales-nfc@1.0.1@molecule/app-locales-notification-center@1.0.1@molecule/app-locales-notifications-page@1.0.1@molecule/app-locales-now-playing-bar@1.0.1@molecule/app-locales-nps-distribution@1.0.1@molecule/app-locales-oauth-buttons@1.0.1@molecule/app-locales-onboarding-modal@1.0.1@molecule/app-locales-pagination-bar@1.0.1@molecule/app-locales-password-generator@1.0.1@molecule/app-locales-password-strength-meter@1.0.1@molecule/app-locales-photo-lightbox@1.0.1@molecule/app-locales-plan-updated-page@1.0.1@molecule/app-locales-pricing-page@1.0.1@molecule/app-locales-progress-rings@1.0.1@molecule/app-locales-push@1.0.1@molecule/app-locales-qr-code@1.0.1@molecule/app-locales-quiz-card@1.0.1@molecule/app-locales-rating-form@1.0.1@molecule/app-locales-react-native-ui@1.0.1@molecule/app-locales-react-ui@1.0.1@molecule/app-locales-react@1.0.1@molecule/app-locales-reading-progress-bar@1.0.1@molecule/app-locales-reputation-badge@1.0.1@molecule/app-locales-root-error-boundary@1.0.1@molecule/app-locales-routing@1.0.1@molecule/app-locales-rule-builder@1.0.1@molecule/app-locales-screen-orientation@1.0.1@molecule/app-locales-search-autocomplete@1.0.1@molecule/app-locales-secret-row@1.0.1@molecule/app-locales-settings-actions-bar@1.0.1@molecule/app-locales-settings-panel@1.0.1@molecule/app-locales-share-link-card@1.0.1@molecule/app-locales-share@1.0.1@molecule/app-locales-social-share-buttons@1.0.1@molecule/app-locales-solid-ui@1.0.1@molecule/app-locales-solid@1.0.1@molecule/app-locales-sort-picker@1.0.1@molecule/app-locales-splash-screen@1.0.1@molecule/app-locales-spreadsheet-grid@1.0.1@molecule/app-locales-stage-timeline@1.0.1@molecule/app-locales-status-bar@1.0.1@molecule/app-locales-status-dashboard@1.0.1@molecule/app-locales-storage@1.0.1@molecule/app-locales-subscription-plan-card@1.0.1@molecule/app-locales-survey-question@1.0.1@molecule/app-locales-svelte@1.0.1@molecule/app-locales-tag-input@1.0.1@molecule/app-locales-time-slot-picker@1.0.1@molecule/app-locales-trace-waterfall@1.0.1@molecule/app-locales-ui@1.0.1@molecule/app-locales-utilities@1.0.1@molecule/app-locales-version@1.0.1@molecule/app-locales-video-call-controls@1.0.1@molecule/app-locales-video-player@1.0.1@molecule/app-locales-video@1.0.1@molecule/app-locales-vote-cluster@1.0.1@molecule/app-locales-vue@1.0.1@molecule/app-locales-whiteboard-canvas@1.0.1@molecule/app-locales-wiki-page-header@1.0.1@molecule/app-locales-word-cloud@1.0.1@molecule/app-badge@1.0.1@molecule/app-battery@1.0.1@molecule/app-biometrics@1.0.1@molecule/app-bluetooth@1.0.1@molecule/app-brightness@1.0.1@molecule/app-device-calendar@1.0.1@molecule/app-camera@1.0.1@molecule/app-clipboard@1.0.1@molecule/app-contacts@1.0.1@molecule/app-filesystem@1.0.1@molecule/app-geolocation@1.0.1@molecule/app-haptics@1.0.1@molecule/app-health@1.0.1@molecule/app-keyboard@1.0.1@molecule/app-lifecycle@1.0.1@molecule/app-motion@1.0.1@molecule/app-network@1.0.1@molecule/app-nfc@1.0.1@molecule/app-push@1.0.1@molecule/app-screen-orientation@1.0.1@molecule/app-share@1.0.1@molecule/app-splash-screen@1.0.1@molecule/app-status-bar@1.0.1