Skip to content

Commit 60977b4

Browse files
committed
v2.32.0 — AI assistants read your account (local MCP), Windows launch no longer freezes on a black window, updates install reliably, window reopens where you left it
1 parent 76168fa commit 60977b4

9 files changed

Lines changed: 251 additions & 6 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,32 @@ Versions follow [Semantic Versioning](https://semver.org/).
55

66
---
77

8+
## v2.32.0 — 2026-09-29
9+
10+
### Added
11+
12+
- **Local MCP server for AI assistants (read-only).** Turned on per profile in *My profile › AI assistants* (off by default; the server runs only while the signed-in account opted in, and stops on sign-out or on a switch to a profile that did not). One-click install tiles: **Claude** (Studio builds a `.mcpb` bundle — MCPB manifest 0.3, URL + token baked in — and opens it into Claude Desktop's install dialog), **Cursor** and **VS Code** (their MCP install links); *Renew the key* is a 1.5 s hold-to-confirm (`data-hold-tip` hover bubble, green tick on success); tiles stay visible but greyed while off. 14 tools: `data_guide` (the notice — data1-data7 per product type, info1-3 flags, id_* tables, tiers, collections, `untrusted_text`), `account_overview`, `search_inventory`, `get_spool`, `inventory_summary`, `list_racks`, `list_printers`, `list_friends`, `friend_inventory`, `list_wishlists`, `data_history`, `list_devices`, raw `firestore_get` / `firestore_query` (own tree, what friends share, public profiles — `_mcpCheckPath`). Documents are returned decoded next to their raw fields (labels resolved by ID; counts per physical spool, twins de-duplicated). Security: Streamable HTTP on 127.0.0.1:5795 only, bearer token compared with `timingSafeEqual`, exact Host check (DNS rebinding), browser Origins refused, JSON-RPC batch capped at 20, `secrets` / `apiKeys` refused, credentials + e-mail + Google real name masked (`MCP_SECRET_FIELD`), friend-authored text labelled (`authored_by`), `.mcpb` written `0600` in a `0700` folder. Reference `docs/MCP.md`; security review `docs/reviews/2026-09-29-mcp-security.md` — `services/mcpServer.js`, `services/mcpStdioBridge.js`, `main.js`, `preload.js`, `renderer/inventory.{js,html}`.
13+
- **Window state memory.** The main window reopens with its last size, position, maximized / full-screen state (`<userData>/window-state.json`, saved debounced on move / resize and on close; restored only if it lands on a connected display). First launch opens maximized — `main.js`.
14+
15+
### Changed
16+
17+
- Product photos in the cart, the favorites / order lists and wishlist rows are framed in the product's real swatch (`colorBg` of its material snapshot, gradients included) like grid cards; a failed photo falls back to the swatch, and held tiles (scroll, colour filter) stay a colour swatch — `_productThumbHTML`, `70-detail-misc.css`.
18+
- Printer board (grid view): zoom clamped to 50–100 % (`PRINTER_ZOOM_MIN/MAX`, `_clampPrinterZoom`; stored values brought back in range on load).
19+
20+
### Fixed
21+
22+
- **Windows: black "not responding" window at launch on some machines (10 s to minutes).** The TD1S serial-port scan (`SerialPort.list()`) ran at launch and the renderer server / window waited on it; slow virtual-COM / Bluetooth drivers made it hang. The scan now runs only when a TD1S panel requests it (`td1s:need`).
23+
- **Windows: an update that downloaded but never installed.** Camera `ffmpeg.exe` children (Bambu RTSP, Anycubic FLV) are killed on `will-quit` (a surviving one kept its file under `app.asar.unpacked` locked against the NSIS installer); `install-update` force-destroys the windows and `app.exit(0)` if the quit has not completed 6 s after `quitAndInstall()`; `autoUpdater.logger = log`, and a timed-out update check is logged instead of raising an unhandled rejection — `main.js`.
24+
- Printer board: a newly added printer takes the first free spot in reading order big enough for its card and widget column (`planFreeSlot`), machines are placed before their widgets, unplaced objects no longer count as obstacles at (0, 0) (`planFreeSpot`), and `_planSettleColumns` pushes down what a grown widget covers, cascading down the column.
25+
- Grid cards: the identical-spools count badge is a 22 px circle for one digit and a pill from two, number centred (`text-box: trim-both cap alphabetic` on an inner block, proportional figures).
26+
- The TD badge on grid cards / thumbnails was unreadable in light mode; fixed dark frosted pill with white text.
27+
28+
### Removed
29+
30+
- The "Colour" column of the inventory, catalogue and favorites tables (the photo frame carries the colour), with `colorCircleHTML` and its table CSS. i18n: `thColor` removed (11 locales).
31+
32+
---
33+
834
## v2.31.0 — 2026-09-28
935

1036
### Added

‎FEATURES.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Tiger Studio Manager — Feature Catalogue
22

3-
Tiger Studio Manager is the Electron desktop companion to the TigerTag ecosystem: a filament-inventory manager built around RFID/NFC-tagged spools ("TigerTag" chips), a fully-digital "TigerData" tier (and its catalogue-identified "TigerData+" rung), live 3D-printer integration across six brands, physical storage/rack management, a Firebase-backed social layer (friends, shareable wishlists, public profiles), and companion hardware (TD1S color sensor, TigerScale, TigerPOD dual-reader stand). This document catalogues every **shipped** feature, grouped by domain, current as of **v2.31.0**. Per-version release detail lives in `CHANGELOG.md`; forward-looking / in-progress work lives in `ROADMAP.md`.
3+
Tiger Studio Manager is the Electron desktop companion to the TigerTag ecosystem: a filament-inventory manager built around RFID/NFC-tagged spools ("TigerTag" chips), a fully-digital "TigerData" tier (and its catalogue-identified "TigerData+" rung), live 3D-printer integration across six brands, physical storage/rack management, a Firebase-backed social layer (friends, shareable wishlists, public profiles), and companion hardware (TD1S color sensor, TigerScale, TigerPOD dual-reader stand). This document catalogues every **shipped** feature, grouped by domain, current as of **v2.32.0**. Per-version release detail lives in `CHANGELOG.md`; forward-looking / in-progress work lives in `ROADMAP.md`.
44

55
---
66

@@ -255,6 +255,7 @@ Live integrations across six brands, each with real-time temperatures, per-slot
255255
- **Portable Windows build** — runs with no installation and keeps accounts, cache and logs beside the .exe rather than in `%APPDATA%`, so nothing is left behind on a shared machine (v2.18.0).
256256
- Dark native window chrome (`nativeTheme.themeSource = 'dark'`) and shadow-less window edges (v1.4.13).
257257
- Launch splash screen shown instantly while the app assembles from cache (v1.8.24).
258+
- **Window state memory** — the window reopens at its last size, position and maximized / full-screen state (only on a display still connected); first launch opens maximized (v2.32.0).
258259

259260
## Appearance & theming
260261

@@ -272,6 +273,10 @@ Live integrations across six brands, each with real-time temperatures, per-slot
272273
- `npm run i18n:add` — single command that writes a new/updated key across all 11 locale files at once (v1.4.9).
273274
- `npm run i18n:check` + a pre-commit hook blocking any commit that lets the 11 locale files drift apart (v1.4.9).
274275

276+
## AI assistants (MCP)
277+
278+
- **Local read-only MCP server** — Claude, Cursor and VS Code can read the account (inventory, racks, printers, devices, wishlists, friends' shared stock, data history) through 14 tools with decoded values and a built-in field notice; per-profile opt-in in *My profile*, one-click install per app, hold-to-renew key, credentials never exposed (v2.32.0).
279+
275280
## Dev tooling
276281

277282
- CSS modularization — the original monolithic `inventory.css` split into themed files (`00-base.css` → `70-detail-misc.css`) loaded in numeric order (v1.4.9).

‎README.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,11 @@ The mobile app handles chip programming, NFC scanning on the go, and catalogue b
229229

230230
A QR code to download the mobile app is always accessible in the sidebar.
231231

232+
### 🤖 AI assistants
233+
- Ask **Claude, Cursor or VS Code** about your stock — "what PLA am I low on?", "what does my friend have in black PETG?"
234+
- One-click install per app, turned on per profile in *My profile*
235+
- **Read-only** and local: the assistant can look, never change; passwords and keys are never shared
236+
232237
### 🌗 Dark & Light
233238
- **Dark by default**, Light one click away in *Edit profile → Theme*
234239
- Your choice follows your account onto every machine you sign in from

‎WORKLOG.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Worklog — v2.31.1 (in progress)
1+
# Worklog — v2.32.0
22

33
## Added
44
- Local MCP server for AI assistants (read-only) — full reference `docs/MCP.md`. Turned on **per profile** in *My profile › AI assistants* (off by default; the server runs only while the signed-in account opted in, stops on sign-out or a switch to a profile that did not): a toggle with an ⓘ bubble, then three tiles with the apps' logos (Simple Icons SVGs in `assets/svg/brands/`) — **Claude** (Studio builds a `.mcpb` bundle, MCPB manifest 0.3, URL + token baked in, and opens it → Claude Desktop's install dialog), **Cursor** / **VS Code** (their MCP install links) — plus a *Renew the key* button (new `icon-key`; hold 1.5 s to confirm, hover bubble saying what it breaks — `setupHoldToConfirm` hint extended with an optional `data-hold-tip` lead sentence; once renewed the key turns into a green tick and the button pops for 1.8 s — no message, nothing moves); the tiles and the button stay visible but greyed and inert while the toggle is off (Claude Code, a developer tool, is documented in `docs/MCP.md`, not offered in the UI). 14 tools: `data_guide` (the notice: every field — data1-data7, id_*, tiers — and collection), `account_overview`, `search_inventory`, `get_spool` (own temps, else the material's recommendation), `inventory_summary`, `list_racks`, `list_printers` (model names, online state), `list_friends`, `friend_inventory`, `list_wishlists`, `data_history`, `list_devices`, and raw `firestore_get` / `firestore_query` over the account's own tree + what friends share + public profiles. Every document is returned DECODED next to its raw fields (labels resolved by ID; the seven chip data slots read per product type — filament temps / diameter, resin mixing / work / curing / washing, unused for accessories and spare parts; info1-3 as refill / recycled / filled flags); counts per physical spool (twins de-duplicated). Security: 127.0.0.1:5795 only, bearer token, Host check against DNS rebinding, browser Origins refused, `secrets` / `apiKeys` refused, credentials (passwords, access / check codes, tokens, keys, certs, cloud logins) and the e-mail / Google real name masked — `services/mcpServer.js`, `services/mcpStdioBridge.js`, `main.js`, `preload.js`, `renderer/inventory.{js,html}`, `docs/MCP.md`, `CLAUDE.md`, `renderer/CODEMAP.md`, `CODEMAP-main.md`, `ROADMAP.md`
@@ -8,6 +8,8 @@
88
- Product photos in the cart (order view), the favorites / order lists and wishlist rows are framed in the product's colour like the grid cards — the cart had no frame at all, and wishlists drew a flat border that could not show a bi / tri-colour. The frame is now the product's real swatch (`colorBg` of its material snapshot, gradients included) painted under a transparent border; a photo that fails to load falls back to that swatch, and while photos are held (scrolling, colour filter) the tile stays a full colour swatch instead of vanishing — `renderer/inventory.js` (`_productThumbHTML`), `renderer/css/70-detail-misc.css`
99

1010
## Fixed
11+
- Windows launch stuck on a black "not responding" window for 10 s to several minutes on some machines: the TD1S serial-port scan no longer runs at launch (enumerating ports can hang on some drivers and the window waited on it) — it now runs only when a panel that reads the sensor opens; an update check that times out is logged instead of raising an unhandled rejection — `main.js`
12+
- Windows update that downloaded but never installed for some users: the app now stops every camera ffmpeg process on quit (a leftover `ffmpeg.exe` kept its file locked against the installer), and if the quit for the update stalls (black "not responding" window) it force-exits after 6 s so the installer can run; updater steps are now written to `main.log` — `main.js`
1113
- MCP security review follow-ups (`docs/reviews/2026-09-29-mcp-security.md`): the ⓘ bubble no longer says the data stays "on this computer" — it says the link is local but what the assistant reads goes to the company behind it (F1, 11 locales); the `.mcpb` bundle that carries the token is written `0600` in a `0700` folder (was world-readable on Linux, F3); friend-authored text is labelled — server `instructions`, notice `untrusted_text`, `authored_by` on friend results (F2); bearer compared with `crypto.timingSafeEqual` and JSON-RPC batches capped at 20 (F5, F6); the dead stdio-bridge copy and `execPath` / `bridgePath` removed from the config handed to the renderer (F7) — `services/mcpServer.js`, `main.js`, `renderer/inventory.js`, locales, `docs/MCP.md`
1214
- Grid cards: the identical-spools count badge was a 23×20 oval for a single digit; it is now a perfect 22 px circle for one digit and a pill from two (border-box, min-width = height), and the number itself is centred to within half a pixel, measured: it sits in its own block trimmed to cap-height → baseline (`.group-card-count-n`, `text-box: trim-both cap alphabetic`; the font's extra room above figures left it 0.6 px low, and `text-box` does nothing on the flex badge itself), with proportional figures (tabular ones put a lone "1" ~1.2 px off) — `renderer/css/70-detail-misc.css`, `renderer/inventory.js`
1315
- The TD badge on grid cards (and on small thumbnails) was unreadable in light mode — the themed ink went dark-on-dark on the dark scrim. It sits on a photo whose colours the theme cannot know, so its colours are now fixed: dark frosted pill, white text, hairline ring — `renderer/css/70-detail-misc.css`

‎data/release-notes/v2.32.0.md‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Ask your AI assistant about your spools, and a Windows launch that no longer freezes.
2+
3+
## Added
4+
5+
- **AI assistants** — let Claude, Cursor or VS Code read your inventory, storage, printers, wishlists and your friends' shared stock, so you can simply ask "what PLA am I low on?". Off by default, turned on per profile in *My profile*, with a one-click install for each app. Read-only: the assistant can look, never change anything, and no password or key is ever shared.
6+
- The app window now reopens at the size and position you left it; the very first launch opens full-size.
7+
8+
## Changed
9+
10+
- Product photos in the cart, lists and wishlists are framed in the product's colour, like in the grid.
11+
- The printer board zoom now stays between 50 % and 100 %.
12+
13+
## Fixed
14+
15+
- Fixed an issue where, on some Windows computers, the app opened on a black window marked "not responding" for several seconds to several minutes.
16+
- Fixed an issue where a downloaded Windows update could fail to install.
17+
- Fixed an issue where a newly added printer was placed at the far left of the printer board, below everything else, or on top of other printers.
18+
- Fixed an issue where the TD value on spool photos was hard to read in light mode.
19+
- The identical-spools counter on grid cards is now a clean circle with its number centred.
20+
21+
## Removed
22+
23+
- The "Colour" column in the inventory, catalogue and favorites tables — the photo frame already shows the colour.
24+
25+
---
26+
27+
📖 **[Full changelog](https://github.com/TigerTag-Project/TigerTag-Studio-Manager/blob/main/CHANGELOG.md)** · ⬇️ Grab the installer for your OS from the **Assets** below (macOS `.dmg`, Windows `Setup .exe` or `portable .exe`, Linux `.AppImage`).

0 commit comments

Comments
 (0)