# Changelog Sixb packages are versioned independently. Each release entry names the packages that shipped. ## 2026-11-10 — Sixb 0.2.3 0.2.3 makes the data plane run on its own: the lake is retained and compacted, webhook changes are stored before they are written, and every run lost by a worker comes back. Artifacts become live documents people edit together, comment on and attach to objects; the app becomes an installed phone app; and each person can connect their own accounts. The upgrade needs a plan: read the upgrade notes first. ### Highlights - Keep the lake healthy without a cron: DuckLake compacts datasets after the commits that need it, retention removes replaced versions on a built-in schedule set by `lakeMaintenance`, and Console › Lake health shows what waits. The new `@sixb/lake-worker` runs it. - `sixb.datasets.ingest` stores changes and returns at once; a worker writes what waits as one version per flush. A pipeline step that replaces a keyed output stores only the rows that changed. - Bring back what a lost worker left: the orchestrator resumes queued and running syncs, pipelines, workflows, projections and webhook deliveries, worker leases are renewed while a run works, and one run of a sync runs at a time. - Edit a canvas live with others: who is there shows over the canvas, the Agent's changes merge with yours, and edits work offline until saved. Comment on a board's words, pictures and colors, and send comments to the Agent, which resolves or answers them. Each board keeps a picture. - Artifacts change their current version until someone creates one with `sixb.artifacts.freeze(id)`, and restore points put back what an Agent turn changed. - Hold an artifact in an object property with `ref.artifact()`: whoever reads the object reads the artifact, object pages show it, forms pick it, and a shared link's visitor follows it live and comments as a guest. `ArtifactViewer` shows one in a page of your own. - Install the app on a phone like a native one: `AppShell` builds a top bar, a tab bar and a More sheet from the nav, screens push and pop, and the installed app opens offline and resumes. Loading states take the shape of what loads. - Start a conversation from your phone that runs on your computer, or in a sandbox from the page's own picker with `newThreadSandbox` and `newThreadControls`. - Let each person connect their own accounts with `owners: ["user"]` on a connector: syncs bring in everyone's data, each person sees only their own. Microsoft 365 connects people with OAuth, and `entraDirectory()` suspends whoever leaves Entra and ends their connections, as `sixb.users.suspend()` does from code. - Keep a project's values in Azure Key Vault with `@sixb/env-azure-key-vault`, and run `sixb env init` on any source. - GitHub gains branches, attachments, pull requests, stacks, commits and issue tracking; QuickBooks gains estimates and 26 more Accounting resources with incremental sync. - Connect Instagram professional accounts without a Facebook Page with `@sixb/connector-meta`'s `meta({ appId, appSecret, configId, accounts: "instagram" })` (Instagram API with Unified Login): each connection is one shared account, published and read with the grant's system user token. Give Facebook videos and reels a custom thumbnail with `videos.create({ thumb })` and `facebookVideo(id).thumbnails.create({ source })`. - `@sixb/broker-redis` expires idle streams once their records leave age retention. ### Upgrade notes Read this first: lake retention starts on its own, and what it deletes does not come back. In order (`sixb deploy` does steps 3 to 5): 1. **Decide what the lake keeps.** Replaced versions go after 7 days, and the files only they read 7 days later. Set `lakeMaintenance` now if that is not what you want. 2. **Install and compile.** All `@sixb/*` move together, and `@sixb/lake-worker` arrives through `@sixb/cli`. See _What stops compiling_. 3. **Stop the old services.** Old workers get `killTimeoutMs` to finish, 70 s under `sixb deploy`; a run they leave behind ends 24 hours after it started. 4. **Migrate and check, with services down.** `sixb db migrate`, then `sixb check` and `sixb lake check`. This is the first step that opens DuckDB 1.5.6, so a host that cannot fetch the new extension fails here. The `ALTER`s take no `lock_timeout`: behind a long report on `sync_runs` or `pipeline_runs` they wait, and so does every reader behind them. 5. **Look at what `sixb check` counts, then start.** See _What a restart picks up_. 6. **After.** `/api/status` reads `unknown` until the first beat: a monitor on `== "ok"` alerts for up to one beat. Regenerate clients. To roll back to 0.2.2, stop `ingest` traffic and let the inbox drain first: 0.2.2 does not read `dataset_ingest_deliveries`, so what waits there stays until you roll forward. A run holding an execution token stays `running` on 0.2.2, whose workers skip it. #### What stops compiling or starting - `@sixb/ducklake`: `lakeStorage.runMaintenance()` and its `DuckLakeMaintenanceOptions` and `DuckLakeMaintenanceReport` types are gone. Call `lakeStorage.maintenance.applyRetention()`. - Artifacts: `sixb.artifacts.publish(id, input)` is now `sixb.artifacts.update(id, input)` (`PublishArtifactRuntimeInput` becomes `UpdateArtifactRuntimeInput`), and `POST /api/artifacts/{id}/versions` is now `PUT /api/artifacts/{id}/content`. A write replaces the artifact's current version instead of adding one; `sixb.artifacts.freeze(id)` creates a version. Regenerate clients. - `sixb.datasets.ingest` returns `{ deliveryId, changes }`: `outcome`, `version` and `rowsRead` are gone. See _What changes at runtime_. - `sixb.scheduler` and the `SchedulerController` type are gone: nothing outside tests called them. Cron runs in the orchestrator's maintenance loop, through `host.startMaintenance()`. - `services.scheduler` is no longer a `sixb deploy` setting. Remove it. A deployment with `orchestrator: false` runs no cron. - `sixb scheduler` is gone: `sixb orchestrator` runs cron schedules now. The command exits with an error, so a process manager left on it shows up. Remove that process. During the rollout, stop the old scheduler before the new orchestrator starts, or occurrences due in between fire twice. `sixb deploy` does this for you: it stops every service of the old release first. - `sixb lake cleanup --expire-older-than` and `--delete-older-than` are now `--keep-versions-for` and `--delete-files-after`. A server cron on the old flags fails. A version now ages from the commit that replaced it, not from its own, and neither may be under an hour. The command defaults to the project's `lakeMaintenance` instead of 7 days, and runs until nothing is left instead of one pass. - `Queues` gains a required `lake` lane, so a third-party queues provider must implement it. Without it `sixb orchestrator` fails to request cleanup, once a minute, and reports it through `maintenance.pass.failed`. A third-party `LakeStorage` needs nothing: `maintenance` is optional. #### What to migrate - Storage gains `maintenance_heartbeats`, `lake_retention_runs`, `dataset_ingest_deliveries` and `dataset_ingest_state`, and `sync_runs`, `pipeline_runs`, `webhook_runs` and `projection_runs` gain columns. Migrate before starting the new services. - `@sixb/ducklake` runs on DuckDB 1.5.6 (from 1.5.2) and a checked DuckLake build, `ac7595b0`. The first process that opens the lake installs that extension over the network, so a host that cannot fetch it fails there. Any other build logs a warning and still opens the lake. #### What runs where - `sixb api` no longer delivers events left undelivered or purges expired records: run `sixb orchestrator`, even with no schedules. It warns at startup. `sixb deploy` runs one unless `services.orchestrator` is `false`. - Only the orchestrator brings back a run that lost its worker. Without one, a lost sync run stays `running`, and later runs of that sync wait behind it. - The new `@sixb/lake-worker` runs lake retention and writes ingested changes, as worker type `lake`. `sixb worker-group` with no types and `sixb deploy` include it, in the existing process. A deployment that lists its worker `types`, or a `sixb worker-group` given a list, must add `lake`: both warn when it is missing, and until then nothing cleans the lake and changes wait, shown in Console › Lake health. It starts for any dataset with a primary key. - Separate `sixb worker ` processes get no such warning at startup: add a `sixb worker lake` process. Until then the orchestrator's output, `sixb check` and Console › Lake health say that no lake worker has run cleanup, and `sixb check` names the datasets whose changes nothing writes. - No orchestrator is needed for webhooks to reach the lake. Keep it on all the same: it reports changes that wait, and asks again for a write the queue lost when no other `ingest` call comes. - `createSixbServer` keeps delivering events and purging records, and writes what `ingest` stores before the call returns, since no lake worker would. Pass `ontologyMaintenance: false` to it if your process also runs an orchestrator, and `ingestFlush: false` if a lake worker runs for the project. `sixb api` passes both. An embedded server runs no cron, no lake retention and no report of changes that wait. #### What a restart picks up - The orchestrator's new `runs` pass brings back what lost its job, however old: a queued run starts, and a running run whose lease lapsed resumes. A run lost for a week ends `cancelled` instead, and so does a run an older version left running, 24 hours after it started. `*.run.finished` fires for those, and a schedule on it with them. - `sixb check` counts what will go on and what will end. Workflows are the ones with side effects, so read them before you start: ```sql SELECT status, count(*), min(queued_at) FROM workflow_runs WHERE status IN ('queued','running') GROUP BY status; ``` - The first `triggers` pass looks at each dataset once, and may start a pipeline for a change no run read. The first `lake-retention` request deletes what step 1 of these notes says. #### What changes at runtime - A stopped worker no longer ends a run: it stays `running` and the next delivery resumes it, so `*.run.finished` with `cancelled` stops firing at deploys. A run that loses its worker five times ends `failed`. `attempt` joins the sync and pipeline run APIs, and the Console run rows. - A worker that dies gives its job back after a minute, not 15: the lease of syncs, pipelines, projections, workflows and lake jobs is renewed while they run, so only a lost worker waits it out. - One run of a sync runs at a time: a queued run waits for the running one, and triggers join it. Datasets stay multi-writer. - A webhook retry during a live delivery gets `503` with `Retry-After`, not `202`. A delivery whose process died runs its handler again on the retry, so handlers must be idempotent. - `sixb.datasets.ingest` stores the changes and returns before they are in the dataset; a worker writes what waits as one version. Code that read the dataset right after `ingest` must be triggered by the version instead: `defineSchedule("x").on(events.dataset(x).updated())`, attached to the sync, pipeline or workflow. In tests, and in an embedded server, `ingest` still writes before it returns. - `ingest` refuses, by throwing, a value the lake cannot hold when it can tell, such as a date DuckDB does not read. One found later sets its call aside for a week: `sixb lake rejected` prints it, and Console › Lake health counts it. Nothing else behind it waits. - During a rollout, a lake worker older than the API keeps retrying what it would refuse, until it runs the same code. Finish the rollout: changes wait for it. Rolling back past a definition leaves the same wait, until you roll forward. - DuckLake compacts a dataset on its own, in the process that wrote, after the commits that need it. Compaction never creates a dataset version, and time travel reads the same rows after it. - A pipeline step that replaces a keyed output now stores only the rows that changed, so projections of it apply only those. A version that changes no row is still recorded, and fires no `updated()`. - An automatic dispatch that fails no longer holds the routes behind it. An outage retries until it ends, and a failure about one event, such as a mapper that throws, is reported and dropped. `packages/orchestrator/README.md` lists what can be lost. - A cron occurrence the broker refuses is retried until accepted, and fails the `cron` pass meanwhile, instead of being reported once and lost. - `@sixb/broker-redis` expires a stream with `maxAgeMs` once it is idle: its records `maxAgeMs` plus a minute after the last append, its metadata a day later. A finished agent run's stream used to keep every record until someone read it again. Streams written before the upgrade get their expiry the next time they are read; one nobody reads again keeps its keys until deleted. - `/api/status` reads a heartbeat the orchestrator writes to storage. `status` can now be `unknown`, and `maintenance` holds `owner`, `beatAt`, `stale`, `passes` and `outbox` instead of the last pass of the process that answered. - `onError` gains `maintenance.pass.failed`, `orchestrator.dispatch.failed`, which carries `dropped`, `lake.retention.failed`, `dataset.ingest.flush.failed` and `dataset.ingest.rejected`, and the error catalog `dataset.change_refused`. `@sixb/core/lake-storage` exports `LakeValueRefusedError` and `DatasetSequenceConflictError`. `InMemoryBroker` now honors `idempotencyKey`, as Redis and NATS do. ### Package versions - `0.2.3`: `@sixb/core`, `@sixb/client`, `@sixb/server`, `@sixb/app`, `@sixb/ui`, `@sixb/cli`, `@sixb/cli-core`, `@sixb/agent`, `@sixb/orchestrator`, `@sixb/pg`, `@sixb/sqlite`, `@sixb/ducklake`, `@sixb/agent-worker`, `@sixb/pipeline-worker`, `@sixb/projection-worker`, `@sixb/rules-worker`, `@sixb/sync-worker`, `@sixb/workflow-worker`, `@sixb/broker-redis`, `@sixb/queues-bullmq`, `@sixb/auth-oidc`, `@sixb/connector-github`, `@sixb/connector-meta`, `@sixb/connector-microsoft`, `@sixb/connector-quickbooks`, and `@sixb/lake-worker` and `@sixb/env-azure-key-vault` (new). ## 2026-11-07 — Sixb 0.2.2 0.2.2 gives the Agent the web, background commands and the workspace's own instructions, runs it on your computer from the desktop app, and plans PostgreSQL member reads over only the types they reach. ### Highlights - Search the web with the Agent's `web_search` tool whenever the project has a web search model, now a model kind of its own in `models.webSearch`. Every Vercel AI Gateway language model carries one (`gateway.webSearch("perplexity" | "exa" | "parallel")`), and `exaSearch` from `@sixb/connector-exa` is another. Searches are recorded and cost-limited like any model call. - Read pages with `web_fetch({ url, question? })`, within the sandbox's network: HTML becomes markdown, a large page is saved to a file the Agent reads in pieces, and a question is answered from the page. Narrow both tools with `agent.web: { allowedDomains, blockedDomains }`, or turn them off with `agent.web: false`. - Run commands in the background with `bash({ run_in_background })`, `bash_output` and `bash_stop`. A command gets 2 minutes by default and up to 10, where it had 30 seconds. The app and the terminal show a running command as a live card, and either can stop it. - Read the workspace's `AGENTS.md` (else `CLAUDE.md`) from the repository root down to the working folder into the Agent's instructions, after Sixb's rules and `SIXB.md`. - Run the Agent on your computer from the desktop app: a new conversation runs in a folder you choose, and `sixb connect` keeps the computer available without `sixb` open. `sixb agent` sends to a conversation from anywhere and follows whatever runs it. - Plan a member's PostgreSQL reads over their own types' partitions, index view conditions, keep object statistics fresh between publications, and serve descending sorts from ascending sort indexes. Every framework connection starts with `jit = off`. - Connect the only account on return from OAuth instead of stopping at account selection. - DuckLake fetches missing DuckDB extensions over HTTPS, so a lake opens where plain HTTP is blocked. - Delete Pipedrive persons and organizations with `persons.delete(id)` and `organizations.delete(id)`. ### Upgrade notes - Run the migrations: PostgreSQL `087-agent-computer-background-commands` and `088-web-search-model-kind`, SQLite `084-agent-computer-background-commands` and `085-web-search-model-kind`. PostgreSQL re-prepares each object type's partition once. - Vercel AI Gateway projects get `web_search` with no configuration, and every project gets `web_fetch`. Set `agent.web: false` to keep the Agent off the web. `web_search` and `web_fetch` are reserved tool names: a model's own tool by that name fails at startup unless `agent.web` is `false`. - `@sixb/connector-exa` `0.2.1` removes `@sixb/connector-exa/agent-tools` (`exaWebSearch`, `exaWebFetch`). Use `models: { webSearch: [exaSearch({ apiKey })] }` instead. - A computer runs messages sent from the web only in folders allowed on it, per project, and the list starts empty: allow a folder again from the terminal or the desktop app. - Equal values in a sort now follow the last sorted property's direction on every store. ### Package versions - `0.2.2`: `@sixb/core`, `@sixb/agent`, `@sixb/server`, `@sixb/cli`, `@sixb/orchestrator`, `@sixb/pg`, `@sixb/sqlite`, `@sixb/ducklake`, `@sixb/agent-worker`, `@sixb/pipeline-worker`, `@sixb/projection-worker`, `@sixb/rules-worker`, `@sixb/sync-worker`, `@sixb/workflow-worker`, `@sixb/vercel-ai-gateway`. - `0.2.1`: `@sixb/app`, `@sixb/client`, `@sixb/desktop`, `@sixb/cli-core`, `@sixb/anthropic`, `@sixb/connector-exa`, `@sixb/connector-pipedrive`. ## 2026-11-05 — Sixb 0.2.1 0.2.1 runs pipelines and syncs only when there is something new to read, and keeps cost limits working on Vercel AI Gateway bindings that set provider options. ### Highlights - An automatic Pipeline or Sync trigger (event or cron schedule) joins a run of the same Pipeline or Sync that is still waiting to start, instead of queueing one run per trigger: the waiting run reads the latest inputs when it starts. A trigger that arrives while a run is running queues one new run, which later triggers join. Workflow triggers and manual requests keep one run each. - A dataset version records `rowsChanged` and `lineageChanged`, and `dataset.version.committed` carries both. `events.dataset(X).updated()` fires only for a version that changed rows or markings, so a version that only records new input versions no longer wakes downstream schedules. DuckLake `readChanges` skips the table when no version in between changed rows. - On a dataset with `sequenceBy`, a newer delivery that differs from the stored row only in its sequence column keeps the row: a webhook that re-reads an unchanged record no longer re-runs what reads the dataset. - A Sync or Pipeline job that fails before starting its run retries twice, then fails the run, instead of leaving it queued. - Vercel AI Gateway reserves a call at its model's catalog rates whatever its provider options, and at the dearest of its fallback models. Bindings that set `anthropic.thinking` or another provider option no longer fail every call under a cost limit. ### Upgrade notes - No migration. Upgrade the packages below together. - Fewer runs: Pipelines and Syncs triggered by schedules may now share one run, and `updated()` schedules skip versions that changed no rows. ### Package versions - `0.2.1`: `@sixb/core`, `@sixb/agent`, `@sixb/server`, `@sixb/cli`, `@sixb/orchestrator`, `@sixb/pg`, `@sixb/sqlite`, `@sixb/ducklake`, `@sixb/lake-local`, `@sixb/agent-worker`, `@sixb/pipeline-worker`, `@sixb/projection-worker`, `@sixb/rules-worker`, `@sixb/sync-worker`, `@sixb/workflow-worker`, `@sixb/vercel-ai-gateway`. ## 2026-11-04 — Sixb 0.2.0 0.2.0 completes secure and traceable execution ([#360](https://github.com/sixb-ai/sixb/issues/360)): every operation runs in one execution context, every protected read goes through one authorization model, markings follow data from datasets to ontology properties, and current values can be traced to their source. Every package moves to `0.2.0`. ### Highlights - Explain where an object's values come from with `sixb.objects(T).lineage(id)` and `linkLineage(input)`: the projection, dataset version and columns behind each property, or the Action or write that edited it, who asked for it and the value it replaced. Walk a dataset version upstream with `sixb.datasets.lineage(dataset, { versionId, depth })`. Each step is authorized on its own, and a hidden step is counted, not described. The API serves the same reads, and an object page shows "Where this value comes from" for each property. - Reorganize the app into Settings for everyone (Personal, Developers, Memory), project settings for admins (Members, Usage, Activity), and one Console for the project's developers (syncs, pipelines, ontology, logs), opened with `can.observe(project.console)`. - Declare the variables a project needs in `sixb.env.ts`; `sixb dev` and `sixb check` stop on a missing one. Keep the values in Doppler with `@sixb/env-doppler` and `sixb env init`, `pull`, `set` and `status`, and let `sixb deploy` write each server's `.env` from it. - Budget each conversation against its model's context: the Agent measures each model's bytes per token on the project's runs, saves tool outputs too large for the context to files it reads in pieces, and compacts idle or long conversations toward the model's limit. A context meter beside the model, `/context` in the terminal and the API show what each part of a conversation uses. - Continue a conversation that runs on your computer from the web, or move it to the cloud. - Cap agent runs at a number of model calls with `agent: { maxSteps, subagentMaxSteps }`, `defineAgentStep({ maxSteps })` and `spawn_agent`; sub-agents and workflow AI tasks stop at 500 by default. - Give Actions the `client` of the request that asked for them, revoke shared links from Actions and workflow steps with `sixb.shares.revoke`, and brand a dead shared link with `app/shared-unavailable.tsx`. `useDesktop` tells an app it runs in the desktop app. - Partition PostgreSQL objects by object type, so a query plans against its own type's indexes, and keep idle connections for a minute. Links are read as the ontology declares them on every provider, and live object queries refresh only when a type they read changes. - Manage Pipedrive fields, options and labels, and price one-hour cache writes on Anthropic routes through Vercel AI Gateway. ### Upgrade notes - Upgrade every Sixb package to `0.2.0` together: `^0.1.x` ranges do not accept `0.2.0`. Rebuild application assets. - Run the migrations: PostgreSQL `084-agent-token-rates` to `086-partition-objects`, SQLite `082-agent-token-rates` and `083-agent-computer-sessions`. PostgreSQL `086` locks the objects table while it copies every object into a partition of its type: plan for that pause, and rehearse it on a copy of a large database first. - The routes that wrote objects, links and telemetry directly are removed: `PUT /api/objects/:type/:id`, `PUT` and `DELETE …/links/:linkId`, and `POST …/telemetry/:propertyId`. Change the ontology through Actions; code keeps writing in process with `sixb.objects(…).upsert()`. - The `visibility` export in `app/layout.tsx` is removed. Grant the Console with `can.observe(project.console)` in a role. - Core no longer exports `matchingAgentUsageAnchor`, `agentContextBytesPerToken` and `measureAgentContextRequest`, and `@sixb/agent` no longer re-exports core's context budget: import it from core. ### Package versions - `0.2.0`: every published Sixb package, and `@sixb/env-doppler` (new). ## 2026-11-03 — Pipedrive connector 0.1.4 - `@sixb/connector-pipedrive` `0.1.4`: manage person, organization, deal and product fields with `create`, `update`, `delete`, `addOptions`, `updateOptions` and `deleteOptions`, including the labels on contacts through the built-in `label_ids` field. `get` and `list` accept `include_fields`. `PipedriveField` now has the v2 shape, so read `field_name` instead of `name`; `key`, `id`, `edit_flag` and `active_flag` are no longer typed. ## 2026-10-31 — Framework 0.1.26 ### Highlights - Work with the Agent from your terminal: `sixb` alone opens Sixb, and a conversation can run on your computer, in the folder you opened it in. `sixb agent "..."` asks once from a script. - One agent harness for every runner, in the new `@sixb/agent` package. A runner outside the worker reaches its run over HTTP; the agent worker becomes the cloud runner. - Keep the run's token out of the Agent's commands: every sandbox provider adds it to API requests where commands cannot read it. The commands call the normal API; `/__sixb/agent-api` is gone. - Agent turns have no time or step limit, and sub-agents run beside their turn, without a queue. - Redesign the composer: one settings chip for model, thinking and permissions, a `+` menu, slash commands, pasted images, files sent alone, and writing while the Agent answers. A notification sound plays when a turn ends. - Look a member up by email with `sixb.users.get({ email })`, map `ref.user()` properties from member emails with `userRef.fromEmail(column)`, and seed members in tests with `seedTestUsers`. - Read datasets, syncs and pipelines with `sixb datasets`, `sixb syncs` and `sixb pipelines`. - Speed up object queries on PostgreSQL and SQLite, and cut about 30 s from an SSH deploy. - Anthropic prices models from models.dev, shows thinking summaries and caches agent prompts by default; Vercel AI Gateway caches what agents reuse. Connect Facebook Pages through Facebook Login with the Meta connector. ### Upgrade notes - Upgrade core, its exact worker/storage consumers, server and CLI together to `0.1.26`, with `@sixb/agent` `0.1.0`. Upgrade the other packages listed below; rebuild application assets. - Run the migrations: PostgreSQL `082-agent-run-cancel-requests` and `083-agent-thread-runs-on`, SQLite `080-agent-run-cancel-requests` and `081-agent-thread-runs-on`. - A custom sandbox provider must set `supportsRequestCredentials`; `createSixb` fails at startup otherwise. smolvm and Apple Container commands no longer run as root: bake tools into the image, which needs Bun or Node. - An approval-gated call must be sent as `application/json` (415 otherwise). - Removed: `queues.agentChildren`, `turnTimeoutMs`, `defaultMaxSteps`, `--agent-turn-timeout`, `SIXB_AGENT_TURN_TIMEOUT` and `services.workers.agentTurnTimeout`. - `@sixb/app` replaces `ModelControls`, `AutoModelChip` and `ApprovalModeChip` with `ComposerSettings`. - New projects need Bun 1.4.4 or later. ### Package versions - `0.1.26`: `@sixb/core`, `@sixb/server`, `@sixb/cli`, `@sixb/orchestrator`, `@sixb/pg`, `@sixb/sqlite`, `@sixb/agent-worker`, `@sixb/pipeline-worker`, `@sixb/projection-worker`, `@sixb/rules-worker`, `@sixb/sync-worker`, `@sixb/workflow-worker`. - `0.1.24`: `@sixb/client`. - `0.1.18`: `@sixb/app`. - `0.1.10`: `@sixb/cli-core`. - `0.1.9`: `@sixb/vercel-ai-gateway`. - `0.1.8`: `@sixb/queues-bullmq`, `@sixb/sandboxes-vercel`. - `0.1.7`: `create-sixb`, `@sixb/broker-redis`, `@sixb/sandboxes-apple-container`, `@sixb/sandboxes-local`, `@sixb/sandboxes-smolvm`. - `0.1.6`: `@sixb/anthropic`, `@sixb/azure-ai-foundry`, `@sixb/connector-meta`. - `0.1.4`: `@sixb/deploy-ssh`. - `0.1.3`: `@sixb/model-protocols`. - `0.1.2`: `@sixb/sandboxes-azure`. - `0.1.0`: `@sixb/agent` (new). ## 2026-10-29 — Framework 0.1.25 ### Highlights - Embed other sites in pages: `SIXB_APP_FRAME_ORIGINS` lists the exact origins an `