fimo 2.8.0-staging.4 → 2.8.0-staging.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -107,7 +107,6 @@ Load the matching reference when the user's request fires its trigger. Recipes t
107
107
  - "Modify the URL of the website / change my project's address / connect a custom domain (e.g. blog.example.com) / rename the Fimo-provided `*.fimo.site` subdomain / buy a new domain through Fimo / set up a domain" → `references/domains.md`
108
108
  - "Invite a collaborator / add Marc / share with client" → `references/invite.md`
109
109
  - "Login / log out / who am I / switch organization" → `references/account.md` — note: switching **org** is `fimo orgs switch`; bare `fimo switch` changes the active **Fimo Branch** (see `references/branches.md`)
110
- - "Check the Inbox / what are my agents waiting on / answer a blocked agent / an agent asked me a question / approve or deny what an agent asked for (`fimo inbox *`)" → `references/inbox.md`. Never answer on the person's behalf.
111
110
  - "Create / scaffold / run / validate an agent / agent bundle / wire or enable its triggers / list agent templates / view agent runs, reports, or logs (`fimo agents *`)" → `references/agents.md`
112
111
  - "Install Fimo for my agent / fimo skills install / set up Claude Code, Codex, or Cursor for Fimo" → `references/agent-setup.md`
113
112
  - "Add, inspect, search, or run a remote MCP server / use `fimo mcp`" → `references/mcp.md`
@@ -132,7 +131,7 @@ These fire at specific moments in the project lifecycle. **Surface them proactiv
132
131
  - **You need the current preview URL but haven't changed code** (opening it, screenshotting it, handing it to another tool, the previous URL expired) → `fimo preview url`, never a no-op `fimo deploy`. See `references/preview.md`.
133
132
  - **When the user wants to try something risky / explore a redesign without touching the live site** → suggest a feature Branch: `fimo checkout -b <name>` gives an isolated Branch + DB + preview. Deploy previews there, then `fimo merge` it back and `fimo publish`. See `references/branches.md`.
134
133
  - **After completing or safely preserving the user's main work, when a confirmed Fimo platform failure still materially blocks the task after one safe recovery attempt, or a confirmed missing capability blocks completion or forces a fragile or heavily manual workaround** → use the built-in `supportReport` tool. Do not wait for the user to ask and do not stop after only describing the gap. See `references/support.md`.
135
- - **When a project agent has stopped and is waiting on a person** → `fimo inbox list --topic agent_question --unread` surfaces it. Show the stored form to the person, collect their explicit answer, and submit it with `fimo inbox answer`. See `references/inbox.md`.
134
+ - **When a project agent has stopped and is waiting on a person** → a project member answers its question in Studio, on the run's page; the question email links there. The CLI cannot answer it. Never answer on the person's behalf.
136
135
  - **After the first successful `fimo deploy`** → suggest `fimo invite` if the project involves multiple people. Typical roles: `edit` for developers/content editors, `view` or `comment` for clients/stakeholders, `full` for project leads. See `references/invite.md`.
137
136
  - **After the automatic first-preview deploy on the create-new path, before the project has been published** → if there is no custom domain and the free default `*.fimo.site` slug still looks generated or was never explicitly chosen, offer to find a cleaner free subdomain. It needs no DNS. Never claim one without explicit user confirmation: suggest candidates, let the user choose, then rename it. Choosing the slug does not publish the site; the URL starts resolving only after the first successful `fimo deploy --publish`. Skip this nudge if the user already chose the default slug, attached a custom domain, or declined. See `references/domains.md` § Offer a cleaner default URL before first publish.
138
137
  - **When the user wants to modify the URL of their website** → walk through `references/domains.md`. The CLI surface covers renaming the Fimo-provided subdomain (`fimo domains rename-default`, free), attaching a domain they already own (`fimo domains add`, Premium), and buying a new domain through Fimo (`fimo domains buy`, Premium).
@@ -141,9 +141,10 @@ A review-first content agent could use this complete policy:
141
141
  - Discard only when no useful draft was produced or the attempted approach was fully abandoned.
142
142
  ```
143
143
 
144
- When a run cannot continue correctly without a decision from a project member, it may call `ask_user` instead. The
145
- question goes to the Fimo Inbox and the current invocation ends. It can reference zero or more sessions. An authorized
146
- answer starts a continuation in the same thread; the referenced work stays open and the original model process does not wait.
144
+ When a run cannot continue correctly without a decision from a project member, it may call `ask_user` instead. Fimo
145
+ emails project members a link to answer it in Studio, and the current invocation ends. It can reference zero or more
146
+ sessions. An authorized answer starts a continuation in the same thread; the referenced work stays open and the original
147
+ model process does not wait.
147
148
 
148
149
  Use `ask_user` sparingly, especially from scheduled agents:
149
150
 
@@ -170,8 +171,8 @@ changes and records a brief report of what is waiting.
170
171
 
171
172
  ## Define reporting preferences when they matter
172
173
 
173
- Fimo's default report needs no setup: a short, scannable brief appears in email and the Inbox, while the full report in
174
- Fimo carries the organized evidence and depth. Do not add a reporting section merely to restate that default.
174
+ Fimo's default report needs no setup: a short, scannable brief appears in email, while the full report in Fimo carries
175
+ the organized evidence and depth. Do not add a reporting section merely to restate that default.
175
176
 
176
177
  When the user names an audience, depth, recurring comparison, required section, or useful visual, preserve the request
177
178
  in a short **Reporting** section of `GOAL.md`. Describe the communication outcome in ordinary language. Do not prescribe
@@ -1,16 +1,10 @@
1
1
  # Analytics workflow
2
2
 
3
- Pageview aggregates are read for the selected branch. Fimo production builds enable
4
- the React Router tracker; hosted preview builds disable it. Ingestion itself accepts
5
- resolved branches, so do not assume that every possible preview sender is excluded.
6
-
7
- For tracking setup, load `fimo-code`. Reading analytics does not install a tracker.
8
- If counts are zero, check the selected branch, built scripts, enabled setting,
9
- browser requests and stored results before diagnosing a missing implementation.
10
- A successful HTTP response alone does not establish that a row was stored.
11
- Use `fimo-code` analytics setup for the standalone `fimo-analytics` APIs.
12
- Confirm that the selected package release contains them before generating imports;
13
- older Fimo releases and existing published sites do not acquire a tracker automatically.
3
+ Pageview aggregates are read for the selected branch. Reading analytics does not
4
+ install tracking. For installation or missing pageview requests, load
5
+ `fimo skills get fimo-code --ref analytics`. For zero counts, first check the
6
+ branch, date range and device filter using the guidance below. A successful HTTP
7
+ response alone does not establish that a row was stored.
14
8
 
15
9
  Analytics has a **retained preview for every org** — free included. The free default is a 7-day retention window, so short ranges (`today`, `yesterday`, `this_week`, `last_week`, `last_7_days`) work for everyone. **Extended date ranges and longer retention are paid** — `last_30_days`, `last_90_days`, `this_month`, `last_month`, `last_quarter`, `last_year`, and `custom` require the `canUseExtendedDateRanges` privilege, which only paid orgs have. Asking for an extended range as a free user returns a 403 with an upgrade hint.
16
10
 
@@ -24,15 +24,12 @@ What it refuses to touch:
24
24
 
25
25
  ## Analytics when updating
26
26
 
27
- Existing analytics tracking remains supported. Keep the existing integration;
28
- do not add a second tracker. If the project declares `fimo-analytics`, the
29
- update keeps it aligned with the other Fimo packages.
30
-
31
- Updating a project without a tracker does not enable analytics. If analytics
32
- is wanted, load `fimo skills get fimo-code --ref analytics` and check for any
33
- existing tracker before adding one. After the developer publishes the update,
34
- verify new pageviews in Studio. Existing analytics history remains available.
35
- The update command itself does not publish the website.
27
+ If the project declares `fimo-analytics`, the update keeps it aligned with the
28
+ other Fimo packages. The update never adds a tracker: React Router projects that
29
+ tracked through `FimoProviders` before 2.8.0 need `<Analytics />`, and other
30
+ projects without `fimo-analytics` should add it to match new projects. For setup and
31
+ verification, load `fimo skills get fimo-code --ref analytics`. The update
32
+ command itself does not publish the website.
36
33
 
37
34
  ## Reading the report
38
35
 
@@ -78,11 +78,7 @@ Each reference defines one package contract. Fetch it when the task reaches that
78
78
 
79
79
  ## Analytics
80
80
 
81
- For pageview installation, read [references/analytics.md](references/analytics.md).
82
- `FimoProviders` from `fimo-react-router` already tracks when `VITE_API_URL` and
83
- `VITE_ENABLE_ANALYTICS=true` are configured. Inspect the installed version and
84
- browser requests before adding a sender. Hosting or the neutral Vite plugin alone
85
- does not install a tracker. Older releases do not acquire new package exports.
81
+ For pageview installation or debugging, read [references/analytics.md](references/analytics.md).
86
82
 
87
83
  ## Non-negotiable boundaries
88
84
 
@@ -1,104 +1,70 @@
1
1
  # Pageview tracking
2
2
 
3
- First inspect the installed package and the built page. React Router's
4
- `FimoProviders` already tracks when `VITE_API_URL` and
5
- `VITE_ENABLE_ANALYTICS=true` are present. Do not mount another sender beside an
6
- unmodified legacy tracker. The neutral Vite plugin and hosting alone do not
7
- install tracking.
3
+ ## Before adding tracking
8
4
 
9
- ## Standalone setup
5
+ Inspect the installed packages and the built page first; never mount a second
6
+ sender beside one the app already renders. Projects created from current
7
+ templates already declare `fimo-analytics` and mount `<Analytics />` in the root. `fimo-react-router` before 2.8.0
8
+ tracked from `FimoProviders`; from 2.8.0 it does not.
10
9
 
11
- Install a released version of `fimo-analytics` that exposes the adapter you need.
12
- Keep any version/channel selector the user already chose. An older `fimo`
13
- release does not imply these standalone APIs exist, and existing published
14
- sites need a code update to gain missing instrumentation.
10
+ Install `fimo-analytics`, preserving the project's chosen version or channel.
11
+ Publish the code change before verifying live traffic.
15
12
 
16
13
  ```sh
17
14
  pnpm add fimo-analytics
18
15
  ```
19
16
 
20
- Obtain the tenant API base URL from the project's configured Fimo connection,
21
- and append `/e/p`. Pass that complete URL as `endpoint`. Never infer it from the
22
- site's public URL, guess a project hostname, or invent a discovery command. If
23
- the connection does not supply a tenant endpoint, obtain it before enabling
24
- tracking. A configured origin-relative proxy is also accepted.
25
-
26
- | Framework | Import | Placement |
27
- | -------------- | --------------------------------------------------- | -------------------------------------------- |
28
- | React | `{ Analytics }` from `fimo-analytics/react` | Application root |
29
- | React Router | `{ Analytics }` from `fimo-analytics/react-router` | Inside root router |
30
- | Next App/Pages | `{ Analytics }` from `fimo-analytics/next` | Root layout or `_app` |
31
- | Astro | default `Analytics` from `fimo-analytics/astro` | Shared layout, no `client:*` |
32
- | Svelte | default `Analytics` from `fimo-analytics/svelte` | Root component |
33
- | SvelteKit | default `Analytics` from `fimo-analytics/sveltekit` | Root `+layout.svelte` |
34
- | Vue | `{ Analytics }` from `fimo-analytics/vue` | Root component, history routing |
35
- | Nuxt | `modules: ['fimo-analytics/nuxt']` | `analytics: { endpoint, enabled }` in config |
36
-
37
- Components accept `endpoint` and `enabled`. React example:
17
+ ## Install and mount
18
+
19
+ Mount the matching component once, with no props:
20
+
21
+ | Framework | Import | Placement |
22
+ | ------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
23
+ | React Router | `{ Analytics }` from `fimo-analytics/react-router` | Root route component beside `<Outlet />`, or inside the existing `<BrowserRouter>` / `<HashRouter>` |
24
+ | Next.js | `{ Analytics }` from `fimo-analytics/next` | App Router: inside `<body>` in `app/layout.tsx`. Pages Router: beside `<Component {...pageProps} />` in `pages/_app.tsx` |
25
+ | Astro | default `Analytics` from `fimo-analytics/astro` | Shared layout, no `client:*` directive |
26
+ | SvelteKit | default `Analytics` from `fimo-analytics/sveltekit` | Root `src/routes/+layout.svelte` |
27
+ | React (Vite) | `{ Analytics }` from `fimo-analytics/react` | Application root |
28
+ | Svelte | default `Analytics` from `fimo-analytics/svelte` | Root component |
29
+ | Vue | `{ Analytics }` from `fimo-analytics/vue` | Root component |
38
30
 
39
31
  ```tsx
40
32
  import { Analytics } from 'fimo-analytics/next';
41
- <Analytics endpoint={endpoint} enabled={isProduction} />;
33
+ <Analytics />;
42
34
  ```
43
35
 
44
- For Nuxt, also install the optional build peer with `pnpm add -D @nuxt/kit`.
45
- Next owns its client and Suspense boundaries. SvelteKit uses committed
46
- navigation; Nuxt covers reused pages and query changes. Generic React, Vue and
47
- Svelte observe history. For a router that changes the URL before committing,
48
- use the manual core. For Vue Router, initialize in `onMounted` after initial
49
- router readiness, send once, subscribe to `router.afterEach`, send only when
50
- `failure` is falsy, and remove the subscription and destroy on unmount.
51
-
52
- ```ts
53
- import { init } from 'fimo-analytics';
54
- const analytics = init({ endpoint, enabled: isProduction, routing: 'manual' });
55
- // In the router's successful-navigation callback:
56
- analytics.pageview();
57
- // During cleanup:
58
- analytics.destroy();
59
- ```
36
+ For Nuxt, mount nothing: add `'fimo-analytics/nuxt'` to `modules` in
37
+ `nuxt.config.ts` and run `pnpm add -D @nuxt/kit`.
60
38
 
61
- Vanilla apps can omit `routing` to track the initial page and browser history.
62
- Hash routers can pass `{ path: resolvedVirtualPath, pageName }` to `pageview`;
63
- the React Router adapter already reads its router's virtual location.
39
+ The generic React, Svelte and Vue components observe browser history and do not
40
+ resolve hash-router paths; use a framework adapter when one exists.
64
41
 
65
- For plain HTML, copy the installed `dist/browser.js` into static assets:
42
+ For a plain HTML Vite site, copy `node_modules/fimo-analytics/dist/browser.js`
43
+ to `public/fimo-analytics.js` and add this classic script to `index.html`:
66
44
 
67
45
  ```html
68
- <script defer src="/fimo-analytics.js" data-endpoint="https://YOUR-TENANT-API-HOST/e/p" data-enabled="true"></script>
46
+ <script
47
+ defer
48
+ src="/fimo-analytics.js"
49
+ data-endpoint="%VITE_API_URL%/e/p"
50
+ data-enabled="%VITE_ENABLE_ANALYTICS%"
51
+ ></script>
69
52
  ```
70
53
 
71
- Use a classic script, not `type="module"`. Set `data-enabled="false"` in preview
72
- builds. No framework peer is required for core or HTML. Framework peers are
73
- optional and only the chosen adapter's framework is needed.
74
-
75
- ## Choose the enabled guard
76
-
77
- Tracking defaults to enabled, so always pass `enabled`. Never use `NODE_ENV`:
78
- a Fimo hosted preview is a production build, so that guard leaves previews
79
- reporting. Read the build variable Fimo already sets:
80
-
81
- | Framework | Guard |
82
- | ------------------------- | -------------------------------------------------- |
83
- | React Router and any Vite | `import.meta.env.VITE_ENABLE_ANALYTICS === 'true'` |
84
- | Next.js | `process.env.NEXT_PUBLIC_FIMO_ENV === 'prod'` |
85
- | Build-time server env | `process.env.FIMO_ENV === 'prod'` |
86
-
87
- Astro, SvelteKit, Svelte and Vue have no browser-visible environment name from
88
- Fimo. Read `FIMO_ENV` at build time and pass the boolean into the bundle through
89
- the framework's own public-variable mechanism. Do not invent a `PUBLIC_FIMO_ENV`
90
- and do not expose the whole environment name when a boolean is enough.
54
+ ## Hosting controls tracking
91
55
 
92
- ## Verify the installed integration
56
+ Fimo hosting provides the destination and the switch while the site builds:
57
+ on for published sites, off for previews. Without it, as in local development,
58
+ tracking is off; `[fimo-analytics]` in the browser console, or in build logs for
59
+ Astro and Nuxt, says why. Do not add an `endpoint`, an `enabled` guard, or a
60
+ `NODE_ENV` check.
93
61
 
94
- Standalone tracking defaults to enabled. Supply an explicit production guard;
95
- `bl_preview_token` also suppresses sends. SSR and disabled calls are inert.
96
- Do not add browser secrets, project IDs or branch claims to payloads.
62
+ ## Verify and diagnose
97
63
 
98
- Verify one initial POST, navigation, query-only changes, back/forward and a
99
- route revisit. Check duplicate mounts and cleanup. Existing visitor/session
100
- storage keys are retained; blocked storage uses per-document IDs. Delivery is
101
- best effort and has no retries. A 202 response alone does not prove persistence;
102
- check recorded analytics separately. Framework peer ranges are not proof that
103
- every older framework release was tested. Use the installed package's version
104
- qualification and preserve existing supported integrations when upgrading.
64
+ On the published site, check Network for one POST to `/e/p` on the initial load
65
+ and on each pathname or query change, including back/forward and revisits.
66
+ Hash-only changes do not send. Previews send nothing. If requests are missing,
67
+ check that the deployed app mounts the component and read the `[fimo-analytics]`
68
+ diagnostics. If requests arrive but counts stay at zero, use the `fimo-cli`
69
+ analytics reference to check the branch, date range and device filter; headless
70
+ browsers count as bots. A 202 response does not prove a stored row.
@@ -27,7 +27,7 @@ Import it from `fimo-react-router/vite` whenever the application renders through
27
27
 
28
28
  ## Application root
29
29
 
30
- `FimoProviders` needs a React Router context for Studio navigation and pageview tracking. Keep the application's existing router type:
30
+ `FimoProviders` needs a React Router context for Studio navigation. Keep the application's existing router type. For pageview tracking, read `references/analytics.md`.
31
31
 
32
32
  ```tsx
33
33
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
@@ -1,6 +1,10 @@
1
1
  ## Where to Find It
2
2
 
3
- On desktop, the AI chat opens docked on the left by default. You can make it floating or dock it on either side from the project menu's **Chat position** submenu (Floating / Left / Right). Toggle the chat open or closed by clicking the **chat (speech-bubble) icon** in the header, or press **Cmd+Shift+H** (Mac) / **Ctrl+Shift+H** (Windows/Linux).
3
+ Open the **Chats** tab in the project header. On a phone, the Chat tab at the bottom opens the chat list first; select a chat to open it.
4
+
5
+ ## Working in Several Chats
6
+
7
+ Chat has its own **Chats** tab in the project header; the tab shows how many chats have unread activity. A project can have several chats, shared by everyone on the project. The left list shows them most recently active first with a status (**Working** with a spinner while replying, **Done** once the reply finished) and their last words; a dot marks unread activity. Select **+** for a new chat (its name comes from the first message; an empty chat offers starter requests), the search icon to find a chat, the filter icon to show only Working or Done chats, and the list settings for ordering and showing read, unread, or archived chats. The buttons above an open chat (or a right-click on a row) mark it unread, pin, archive, or mute it, for you only; the settings icon opens the chat's settings, which rename it for everyone, hold the same pin, mute and archive switches, and delete it, stopping a running reply first. Each chat has only its own messages and context. The open chat is in the page address (`/chats?chat=<id>`), so a link or reload opens the same chat.
4
8
 
5
9
  ## Sending a Message
6
10
 
@@ -51,7 +55,7 @@ Delete a proposal from the Branch picker when you no longer need it. Pull is una
51
55
 
52
56
  Chat changes are prepared separately and then applied to the environment you are viewing. Most changes merge automatically.
53
57
 
54
- If the project changed in the same place while the AI was working, the response shows a **Review changes** card and an attention banner above the chat input. The banner remains visible when floating chat history is collapsed.
58
+ If the project changed in the same place while the AI was working, the response shows a **Review changes** card and an attention banner above the chat input.
55
59
 
56
60
  Choose **Auto fix** or keep chatting to let Fimo continue in the retained proposal, resolve the conflict, and retry the merge. Choose **Review manually** to inspect and resolve the proposal yourself. Discarding leaves the current environment unchanged and permanently removes the proposal.
57
61
 
@@ -25,7 +25,6 @@ Studio adds commands that are relevant to the page you are viewing. Depending on
25
25
  - Uploading an asset, creating a folder, or generating an image
26
26
  - Running an agent, opening its Preview result, or resolving proposed changes
27
27
  - Editing or opening the current CMS page in Preview
28
- - Marking the current Inbox item read or unread, and archiving or restoring it
29
28
  - Running, pausing, resuming, or opening runs for the current schedule
30
29
  - Sending a test or opening deliveries for the current webhook
31
30
  - Inviting a member or buying a domain from the corresponding organization page
@@ -28,6 +28,10 @@ Click any file to open a preview dialog:
28
28
 
29
29
  The preview shows file metadata (size, dimensions, upload date) and editable fields for **name**, **alt text**, and **caption**. Alt text and captions are generated automatically by AI after upload -- you'll see a **Generating with AI** indicator, then an **AI generated** badge once they're ready, and you can edit the suggested text inline. From here you can also **copy the link** or **send the file to chat**. To **move**, **rename**, or **delete** a file, use its right-click menu in the grid instead.
30
30
 
31
+ ## Replacing a File in Content
32
+
33
+ In a file's details, choose **Replace file**, pick a replacement, then select **Continue** to review the Current Branch reference count. **Back** or **Escape** returns to the picker with the choice preserved; closing the picker returns to the file's details. Only confirming the replacement changes references. Main, the live site, other Branches, and the original file stay unchanged.
34
+
31
35
  ## AI Image Generation
32
36
 
33
37
  1. Click the **Plus (+) dropdown** in the media library and select **Generate Image**.
@@ -31,7 +31,7 @@ The header **Publish** button itself only shows the label "Publish" (or a spinne
31
31
  - **"Publishing"** — Publishing is in progress. A spinner and a **Publishing** status badge show while it builds, and the button is disabled.
32
32
  - **"Published"** — Your site is live. A **Published** status badge appears, your live URL is listed under a **Published site** heading as a clickable link, and a **Last published** date and time is shown.
33
33
  - **"Couldn't publish · N issues"** — Project validation found issues that must be fixed first. Choose **Fix with Fimo** to send the safe issue list to the project chat and ask Fimo to repair it.
34
- - **"Latest update failed"** — The newest publication did not finish. The panel says what went wrong and, for a site that was published before, that the previous version remains the active release — so it can appear beside **Published**. It stays until a newer publication finishes. **View details** opens the reader's Inbox item about the failure, which offers **Open publishing** and **Contact support**. Studio never shows the build output; read it with `fimo publish logs <id>`, taking the id from `fimo publish list`. The person who published and the project's managers get that Inbox item, plus an email unless they turned off **Publication failures** in Account settings → Notifications.
34
+ - **"Latest update failed"** — The newest publication did not finish. The panel says what went wrong and, for a site that was published before, that the previous version remains the active release — so it can appear beside **Published**. It stays until a newer publication finishes. Studio never shows the build output; read it with `fimo publish logs <id>`, taking the id from `fimo publish list`. The person who published and the project's managers get an email that opens this panel, unless they turned off **Publication failures** in Account settings → Notifications.
35
35
 
36
36
  ## Key Concepts
37
37
 
@@ -4,13 +4,15 @@ Click the **Edit mode** icon in the preview header, next to Share, or press **Al
4
4
 
5
5
  ## Selecting and Editing Elements
6
6
 
7
- Once in edit mode, click an element in the preview. An orange outline highlights it. Plain CMS-managed text edits in place; images, rich text, and structured fields open the side editor.
7
+ Once in edit mode, click an element in the preview. An orange outline highlights it. CMS-managed text, images, rich text, and structured fields open the side editor.
8
8
 
9
9
  ### Editing Content
10
10
 
11
- Type directly into selected CMS-managed text, then press **Enter** or choose **Done** above it to save. **Escape** discards the text edit; **Shift+Enter** inserts a newline. **Ask Fimo** opens chat with the selected element as context. Selecting an image opens its image editor. Image and structured-field changes save automatically; inline text is saved only with Enter or Done. Failed text saves keep the toolbar open for correction or retry. Text and images written directly in the site code remain selectable for chat context; ask the AI chat to change them.
11
+ Update the selected field in the sidebar. Changes save automatically and appear in the preview. Failed saves keep the draft available for correction or retry. Use AI chat to change text and images written directly in the site code.
12
12
 
13
- The link icon in the selected element's toolbar opens its label or CMS entry. Choose **All fields** in the side editor to open the complete entry form. Studio keeps the content type's field order, scrolls to the field you selected, and focuses it in place. Loading appears only while Studio fetches this additional entry data or moves to another entry.
13
+ The link icon beside the field in the sidebar opens its label or CMS entry. Choose **All fields** in the side editor to open the complete entry form. Studio keeps the content type's field order, scrolls to the field you selected, and focuses it in place. Loading appears only while Studio fetches this additional entry data or moves to another entry.
14
+
15
+ Incomplete JSON drafts stay local. Leaving an empty JSON field saves `null` and updates the preview without reloading the page.
14
16
 
15
17
  ### References and Components
16
18
 
@@ -26,7 +28,7 @@ Selecting an element with nothing editable (a container, a spacer, a decorative
26
28
 
27
29
  ## Exiting Edit Mode
28
30
 
29
- Choose **Done** above selected text or click the **Edit mode** icon again to return to preview mode. Closing the side panel dismisses its selected field.
31
+ Click the **Edit mode** icon again to return to preview mode. Closing the side panel dismisses its selected field.
30
32
 
31
33
  ## When to Use Edit Mode vs. Chat
32
34
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "bundled": true,
3
3
  "bundler": "esbuild",
4
- "bundledAt": "2026-10-03T17:32:27.590Z",
4
+ "bundledAt": "2026-10-06T12:40:39.311Z",
5
5
  "cliVersion": "2.7.1",
6
6
  "external": [
7
7
  "oxc-parser",