Skip to content

Release Notes ​

What changed in each AMBA release. The app updates itself; you can also download the latest version.

0.5.14 — 2026-10-19 ​

Processes ​

  • Fixed: a file sent today counts as "có file", whatever date its name carries. A report sent today under an old name (a reused template, "Tồn kho LHP 3-10.xlsx" sent on 19/10) was counted for the day in its name, so the process took the "chưa có file" branch and told the owner nothing came. Now any file sent or received today counts for today (files named for today still count, each file once), the agent step gets it, and a "có file hôm nay?" check after a second fetch sees what that fetch brought.
  • New: the agent checks the files against earlier data. For each file counted today AMBA records the date in its name, an identical earlier file (same content, e.g. "giống hệt file nhận ngày 15/10") and the previous reports from the same person; a Nhờ agent step working on fetched files gets these facts and is asked to compare the figures and to tell the owner plainly when the data repeats an earlier report or the file name or date looks wrong — it still does the report. Lịch sử chạy shows them on the Lấy file step: each file, "tên ghi ngày 3/10", "giống hệt file nhận ngày 15/10".
  • New: a step warning when a file check after a wait still counts files fetched before the wait ("Bước kiểm tra này đếm file lấy trước lúc đợi đến 17:00…"); Nhờ AMBA kiểm tra lại proposes the fix (fetch again right after the wait and count that fetch).
  • New: a process remembers what you asked for. A process made with "Tạo bằng một câu" keeps your sentence, every Chỉnh thêm… sentence and every Sửa bằng một câu change you apply later (the last 10) with it, shown at the top of its steps as Yêu cầu ban đầu (the changes folded under "N lần chỉnh thêm"). Nhờ AMBA kiểm tra lại now compares the process with those words, not only its name and steps, and points out a step that goes against or leaves out something you asked for. Processes made by hand or before this update have no Yêu cầu ban đầu and are checked as before. Migration V045 adds the column; nothing else changes on upgrade.

Cleanup (Milestone 106) ​

  • Fixed: the agent can search your project files again. workspace_search now finds text in the project's Markdown, text, CSV, JSON and HTML files and in Word, Excel, PowerPoint and PDF files with a text layer, in Sources and the workspace. AMBA indexes them on this computer (nothing leaves it) in the background when a project opens and whenever its files change; only new or changed files are read again, deleted or renamed files drop out of the results, and .amba/, hidden and build folders and files over 5 MB of text are left out. Before, the search always came back empty.
  • Removed: the Chốt & Xuất bản (Finalize & Publish) button on the plan card and in the plan file preview, and its confirmation. When the drafts are right, ask the agent in chat for the final version; it writes it to reports/. Xem kế hoạch and Tạo bản nháp are unchanged.
  • The sidebar's "Processes on" indicator shows the next scheduled process run again (name and time; a click opens that process), and quitting AMBA from the tray while a process run is in progress asks first, as it does for a chat run.
  • Internal: dead frontend code from before processes removed (unused routine, pipeline and connector wrappers, mock handlers, types and components) and duplicate text/format helpers merged; nothing changes on screen.
  • Internal: the retired routine runtime (executor, gate, dry runs, routine proposals, 13 routine IPC commands) and the legacy pipeline sync, Telegram fan-out and Zalo connector are removed (21 more unused IPC commands with them); what processes and sources share moved to runtime/schedule, file_events, arrivals, delivery. Migration V043 renames routine_arrivals to arrivals; watcher settings keys, the process_set_flag and propose_process tools (old names still accepted), process:changed and background_status.activeProcesses drop the routine names. Databases from 0.5.12 still upgrade on their first launch.
  • Internal: release and CI workflows pinned to Ubuntu 24.04 (Linux builds stay on 22.04) and moved to Node 24 GitHub actions; the agent catalog is published from the bundled src/assets/catalog/agents.json (no dist-catalog/ copy), and the gate fails when the catalog or the site's playbook pages drift from catalog/playbooks/; code highlighting loads only the languages it shows.
  • Internal: oversized source files split into small modules with no behaviour change (filesystem tools, document ops, planning and one module for answer markup cleaners, legacy Office parsers, seeds, model types, the Telegram wire types, the Excel formula tokenizer, the engine tests and the feedback worker's routes); the 800-line file check now also covers the feedback worker.

0.5.13 — 2026-10-18 ​

Claude-first agent protocol (Milestone 105) ​

  • New: give an agent "Tra cứu web". An agent's capabilities are now switches, in the project agent's ⋯ → Cài đặt agent and in Agent Studio on an installed agent, with Tra cứu web (web search and opening pages) first. A switch saves at once and says Áp dụng cho agent này ở mọi dự án dùng nó; the agent's other tools and the clarifying question tool are kept. Where web search is missing because of the agent, one click fixes it: a "Nhờ agent" step that failed with "agent này chưa được bật Tra cứu web" shows Cho agent tra cứu web in Lịch sử chạy, in the step panel and in the agent's conversation, then Thử lại; the builder's Nhờ agent form warns as soon as Cho phép tra cứu internet is on for such an agent, with the same button. A step stopped for a missing search key has a button to Cài đặt → Tài khoản kết nối. In chat, an agent without Tra cứu web (while a search key is set) now says it cannot look things up and that the owner can turn it on in the agent settings, instead of guessing figures or being pushed to call a web tool it does not have. The Chuyên gia Phân tích Tài chính & Kế toán and Chuyên viên Đối soát Tồn kho & Hao hụt templates now include Tra cứu web (exchange rates, gold, commodity and supplier prices); agents already installed from them get it once on update, only if their capabilities were never changed since install.
  • New: Nhờ AMBA kiểm tra lại on a saved process. When a step has a warning or an error, or Bật was refused, the process tab offers Nhờ AMBA kiểm tra lại; it is also always in the tab's ⋯ menu. AMBA checks each situation of the process as it is now against what it is for, and answers AMBA thấy quy trình đúng ý, AMBA đề xuất sửa: with the lines that would change (Áp dụng saves it like any step edit and asks for consent first if it lets the process do something new; Bỏ qua keeps it as it is), or one short question to tap. Nothing is saved before Áp dụng. If the model fails, AMBA says why and still shows the warnings and situations. The free Kiểm tra lại next to a Bật error still only re-reads the process.
  • New: "Tạo bằng một câu" is a conversation you can keep refining before anything is saved. Under AMBA's proposal, Chỉnh thêm… takes another sentence ("gửi lúc 5h chiều", "khi gửi xong thì nhắn Anh Hùng"): AMBA applies it to the draft — remembering your first sentence and every earlier change — runs the same checks again (Xem diễn biến, the step warnings, AMBA đã tự sửa, questions) and answers with an updated card that lists what changed. Earlier cards fold to one line and open on tap. Tạo quy trình saves the latest draft, off, as before. Until then nothing is saved: closing the screen or its tab leaves no draft behind, and once you have refined it AMBA asks before discarding your work. A change AMBA cannot apply says so and keeps the previous draft with your words still in the box; up to 10 changes per draft.
  • New: a process made from a sentence is checked against what you said before you can turn it on. Xem diễn biến shows what it does in each situation — files in at the first fetch, files only before the cutoff, no files all day — as a timeline ("20:00 lấy file từ Nhóm Kế toán → có file → tổng hợp báo cáo → gửi báo cáo cho Chị Lan"), walked without fetching or sending anything, with Không ai được báo on a situation where the report's recipient hears nothing; it is also under the steps of every process. Common mistakes show on the step: a wait and a second fetch outside the "chưa có file" branch ("luôn chạy kể cả khi đã có file"), a "có file" check without Nếu không ("nếu không có file, người nhận không được báo"), a reminder whose time differs from the wait, a fetch nothing uses, and an agent that is not in the project (with Giao cho … to pick one of the project's agents). AMBA then asks the same model once more to compare the situations with your sentence: it fixes what does not match and shows AMBA đã tự sửa: with the changed lines, or asks one tap-question; if that check cannot run, the draft is kept with a note. Bật is refused while an error is left, and with warnings left it asks once (Vẫn bật). "Sửa bằng một câu" goes through the same checks, and "Tạo bằng một câu" now puts the reminder, the wait and the second fetch inside the "no files yet" branch and tells the recipient when no files came.
  • Changed: the default model in Cài đặt → Mô hình AI (Bước 2) is now the base for everything, and an explicit choice overrides it: the model picked in an agent's chat, then the project's model, then the default. "Tạo bằng một câu" and routine drafting used the project's model or else the first model in the list and ignored the default; they now follow the same order, as do chats, process steps, step tests and routines. New projects start on Theo mặc định (…) (the project's model is shown in Cài đặt dự án → Chung → Model AI with that option first), so changing the default moves every project left on it. Picking a model in a chat no longer changes the project's model silently: it is saved to that chat's agent (the first "Bot 1" too), and Theo mặc định (…) at the top of the picker removes the agent's own choice. "Tạo bằng một câu" and the builder's "Nhờ agent" step show which model runs and why ("Opus 5.5 (Amazon Bedrock) · mặc định", "· dự án", "· agent"). Projects and agents keep the model they already have; Cho tất cả dự án dùng model mặc định under Bước 2 puts them all back on the default after a confirm that says how many projects and agents change.
  • New: Claude in Amazon Bedrock. With an AWS Bedrock provider (Cài đặt → Mô hình AI → AWS Bedrock, a Bedrock API key or an IAM access key), Claude Opus 5.5, Sonnet 5.5 and Haiku 5.5 run through AMBA's Claude adapter on Amazon Bedrock's Messages API, billed to your AWS account: thinking summaries, effort, prompt caching and native tool calls work as with an Anthropic key. Adding models for a Bedrock provider now offers them as "(Claude in Amazon Bedrock)" even when the key cannot list models, and existing Bedrock providers get the three 5.5 models once. A request for a model whose access is not enabled says so and points to Amazon Bedrock → Model access in the AWS console. Older Bedrock Claude ids such as Claude Sonnet 4.5 (us.anthropic.claude-sonnet-4-5-20250929-v1:0) and non-Claude Bedrock models keep working exactly as before. On Bedrock, AMBA does not use Anthropic's server-side retry of declined requests or strict tool schemas (not offered there). The "Dữ liệu rời khỏi máy này" panel shows these requests going to bedrock-mantle.<region>.api.aws.
  • New: every agent turn has a Suy nghĩ line above its work: the model's own short summary of how it reasoned (Claude's reasoning summary), folded by default with the time it spent — open it to read it. While the agent works it streams live with a running clock, and short progress notes ("Đang viết phần đề xuất cho từng khoản.") appear under the running step. AMBA never shows raw reasoning; answers saved without a summary show no Suy nghĩ line.
  • New: the plan card of a turn is the checklist the agent keeps while it works (with its one-line explanation), ticked step by step; answers saved before this update keep their plan. A turn without a plan lists Các bước đã làm instead — one line per action it actually ran, with its result — drawn lighter than a plan. The agent's own bookkeeping calls (keeping the plan, handing in the result) no longer appear as tool rows or in the tool count.
  • New: a process step or routine that hands in its result shows it under the answer as Kết quả with its files as chips; a click opens the file.
  • Fixed: when the agent's answer had no text besides its plan markup, the turn said "Task completed." in English. It now says "Đã hoàn thành công việc." (or the English, Japanese or Korean equivalent) in your interface language, and a Telegram delivery uses its localized empty summary instead of English text.
  • New: Claude is the reference model family. Claude Opus 5.5 (the default Claude model), Sonnet 5.5, Haiku 5.5 and Fable 5.1 are available in Cài đặt → Mô hình AI (existing databases get them once; the Claude 3.x entries stay but are marked Legacy). With Claude, agents use the provider's native tool calls and thinking: the turn records Claude's reasoning summary as the agent's thinking, long reasoning no longer trips the 90-second stall check, repeated parts of the conversation are served from Anthropic's prompt cache (cheaper and faster on long runs), and a tool call whose input arrives incomplete is answered with an error instead of being run. Chat uses medium reasoning effort and lets Anthropic retry a declined request on its recommended model; processes and routines use high effort and never switch models — a declined request is reported as "Anthropic declined the request (category)". Other providers send exactly what they sent before.
  • Changed: agents keep their plan and their reasoning out of the answer. The plan of a multi-step task is recorded by the agent as a checklist (shown with the turn) instead of being written into the reply, so chat answers, Telegram messages, reports, the run list, the owner's conversation under a process and exported conversations show the answer only — including answers saved before this update. Agent instructions were rewritten for current Claude models: shorter, without capitalised commands, and without asking the model to write its reasoning in the text; the rules about Sources, deliverables, Office files, figures and language are unchanged. In Plan mode the agent records the plan and AMBA writes the dated plan file from it, as before.
  • New: a process's "Nhờ agent" step and a routine end by handing in their result — the message people receive, the files written and the key figures. AMBA checks that every file it names exists before the step succeeds (otherwise "Agent báo đã tạo file nhưng không có: …"), and the step's summary, files and figures come from it. An agent that forgets is reminded once; if it still does not, its last answer is used as before.
  • Fixed: the result of a "Nhờ agent" step no longer carries the model's <plan> / <thought> markup into messages, reports and the step panel.
  • New: a process's "Nhờ agent" step can look things up online. Turn on Cho phép tra cứu internet on the step (or describe it in the sentence: "tra giá vàng", "xem tin tức"): the agent then searches the web like in chat, using the search provider set up in Cài đặt — only the search queries leave the computer, as in chat. Turning it on in a running process asks first ("Quy trình sẽ cho agent tra cứu internet — Đồng ý"), the step reads "… (được tra cứu internet)" and AMBA sẽ lists it. Other steps of the process stay offline. Without a search key, or with Internet off for the project, the step stops with "agent chưa tra cứu internet được" and says where to set it up, instead of the agent being refused mid-run.
  • Fixed: when the agent wrote its own plan before acting, the first row of its work showed that plan as text ("🎯 Mục tiêu: …"). The plan now appears only in the plan card.

Processes (Milestone 104) ​

  • New: a process schedule can end. In the Lịch step choose Kết thúc: Không kết thúc (as before), Chỉ hôm nay or Đến ngày… with a date. "Every 5 minutes until 22:00, only today" now runs its last repeat at 22:00 and does not start again tomorrow; a daily time until a date runs through that date. After its last run the process turns itself off (Tắt, history kept) and the run history and the next-run card say "Lịch đã kết thúc ngày 16/10"; before that the card says "Lần cuối: 22:00 hôm nay" when the next run is the last one. Turning it back on asks to extend the date or remove it. Runs missed while the app was closed are not made up after the end date. Sentences like "chỉ hôm nay", "hôm nay thôi", "đến hết ngày 20/10" or "until Friday" set the end date too.
  • New: a process's "Nhờ agent" step is now a real turn in the agent's session for that process, followed live. Each run (on schedule, Chạy cả quy trình, ▶ on the step, a retry) shows the exact request the agent received under "⏰ <quy trình> · <bước> · <cách chạy> · HH:MM", then the agent's plan, the files it reads and writes and its answer as they happen — the same view as a chat turn — and the session keeps every run. "Xem agent làm việc" on a running step, in the ▶ panel, on a running row of Lịch sử chạy and in the run inspector opens the session at that run; the agent's chip pulses while it works and its chat says "Đang làm: <quy trình> · Xem". A failed run says why in the session ("Agent nói đã tạo bao-cao.xlsx nhưng không có file" with a hint to check the model, or the model error) with Chi tiết, and the step panel and history show the cause ("Agent báo đã tạo file nhưng không có: …") instead of "trợ lý chưa làm xong việc".
  • New: when a process's agent step fails because of the AI model (key refused, quota used up, request rejected, model gone, connection lost), the people waiting for the result are told right away on the process's Telegram ("⚠️ Báo cáo cuối ngày hôm nay chưa xong: Google từ chối yêu cầu. AMBA sẽ thử lại lúc 22:30."), and AMBA tries the step again twice, 30 minutes apart, in the same run; when the tries run out they get a closing message. No other model is used: process steps and routines no longer switch to an agent's backup model after a failure (chat still does). A model that is missing or has no key is reported at once and not retried. Lịch sử chạy shows "Lỗi model: … · thử lại lúc 22:30" with Chi tiết, who was told and a link to Cài đặt → Mô hình AI; the next-run card shows "Đang chờ thử lại lúc 22:30 · Huỷ", and a desktop notification appears. Repeats faster than 30 minutes do not wait: the next repeat is the retry.
  • Fixed: a process step done by a project agent ran on the project's first model (for example Gemini) instead of the model picked in that agent's chat. The model you pick in an agent's chat is now saved to that agent and used everywhere it works — its chat, its process steps, step tests and routines; the process builder shows it on the "Nhờ agent" step ("Kế toán đối soát · gpt-6-astra (Azure OpenAI)") and the run history shows the model each agent step used. A picked model that can no longer run (deleted, or its API key removed) stops the step with "mô hình … chưa chạy được" instead of switching to another provider. Agents whose model was never picked keep using the project's model until you pick one in their chat once.
  • Fixed: agent steps and chats on Google Gemini / Vertex failed with "Invalid JSON payload … Proto field is not repeating" because some tool schemas use JSON Schema type lists; they are now sent as one type (nullable for null), and Vertex sanitizes tool schemas like Gemini.

v0.5.13 turns routines into Processes you describe in one sentence (Milestone 100) and gives every project Sources — the files your team sends, kept exactly as sent, classified and shown by day — plus step-by-step testing of a process before it runs for real (Milestone 101). Both changes migrate existing data once, on the first start after the update (see "Upgrading from 0.5.12" below). The Milestone 98 features (end-of-day report, owner assistant on Telegram, reliable Telegram/Drive arrivals, business days of files) and the Milestone 97 project context ship in this release too, now running as processes.

Upgrading from 0.5.12 (runs once, automatically) ​

  1. Database schema V024–V041 (arrivals, inbox manifest, memory scope v2, processes and their runs, project sources, process sends, source kinds and usage, file model v2, file states, process test runs, source ingestion history, removed sources, failed-download retries, source layout).
  2. Routines → processes (Milestone 100): every routine, intake routine and "Data Sources & Sync" binding becomes a process or a file source in one transaction; the bot's Telegram position is kept, so no message is read twice.
  3. Project files → Sources (Milestone 101), right after step 2 and again when a project is opened: files in input/ move to sources/ (arrivals to their source's day, the rest to sources/uploads/ keeping sub-folders); every stored path (inbox, arrivals, process specs, messages, facts, revisions, templates) is rewritten in the same transaction; workings/ and output/ stay as ordinary workspace folders. A project whose target holds a different file is left untouched and reported; the move can be re-run and resumes after an interruption. A one-time notice in each project says how many files moved.

Routines are now Processes (Milestone 100) ​

  • Describe a process in one sentence (Project → Quy trình). Each project has a "Quy trình" tab next to its agents. Write how the work runs, the way you would tell a colleague ("2h chiều thu báo cáo từ team kế toán, 3h chưa có thì nhắc, 4h tổng hợp gửi tôi"); AMBA shows it back as your own lines and asks at most three short questions with tap answers (which group "team kế toán" is, how many reports make "đủ"). A missing connection is set up in the same place — pick a group the bot has seen, turn a group into a file source, or connect a new Telegram group. The "AMBA sẽ …" line lists what it will read, who it will message and which files it creates; Bật turns it on, Xem thử runs it once without sending anything. No form, no template gallery; three example sentences show how to start.
  • The card is the process. Each card shows the same lines with today's status ("✓ 14:02 đã nhận 4/4", "⏳ chờ 16:00"), the next run and the last result in words, and Chạy ngay · Tạm dừng / Tiếp tục. Change it with a sentence ("dời tổng hợp sang 5h") or tap a line to change its time, days or recipient — "+1 giờ" then Áp dụng moves 18:00 to 19:00 in three clicks; the change is shown as a line diff first. ⋯ holds Lịch sử (each day's run and what each step did), Nâng cao (the process spec, an editor checked like any edit, version history) and Xoá. The owner's Telegram conversation ("Trao đổi với Chị Lan") sits under its card instead of an agent tab.
  • Edits apply without a test run when they are safe. Changing the time or days, pausing, removing a recipient or rewording a reminder applies at once. Adding someone the project already sends to on the same bot applies at once; adding a new person first sends them "AMBA sẽ gửi báo cáo cho bạn tại đây: <quy trình>" and applies only when that message arrives. Changing what the report contains, the file sources or what AMBA may do shows the changed lines, offers a preview run (nothing is sent, files go to workings/.dry-run/) and applies when you press Bật; until then the previous version keeps running.
  • "Cần xử lý" tells you what to fix, in your language. A process card shows Chưa xong / Đang xem trước / Đang bật / Tạm dừng (by you or from the menu bar) / Cần xử lý, the next run, and the last result ("Đã gửi cho Chị Lan", "Không gửi vì …", "Lỗi: …"). Cần xử lý names one cause with a button that opens the right screen: Google needs sign-in again, the bot is not connected or cannot read the group, a file source failed or its folder is gone, a recipient is not chosen or has no chat yet, the last three runs failed, files are waiting for you to choose their date, or a converted routine needs a look. Every error AMBA reports has wording in English, Vietnamese, Japanese and Korean — no codes or English left in the Vietnamese interface.
  • Removed: the routine panel, routine editor, template chips and run monitor, and "Data Sources & Sync". Automations live only in the Quy trình tab; the sidebar shows "Quy trình đang bật: N" and opens it, and the tray menu speaks of processes. Ingestion rules, the daily sync schedule and "Send deliverable" to a channel are gone — file sources and recipients are part of a process. "Hộp file đến" now opens from the file tree: the project's file sources with their health (Đang nhận, Chưa nhận file nào, Cần đăng nhập lại, Bot không đọc được nhóm) and Kiểm tra, then files by business day. Uploading files from the computer stays in the input folder menu. An automation the agent proposes in chat opens in the Quy trình tab with your words, and after the update a one-time note in the tab says what was converted and what could not be.
  • Routines are now Processes; existing ones were converted. On the first start after the update, every routine becomes a process with the same schedule, agent, playbook template, recipients and sections: the end-of-day report keeps running at its time, conditional sends ("only when the loss is over the threshold") stay conditional, and an active routine stays on without asking again. The owner assistant on Telegram becomes "Chị Lan có thể hỏi lại / duyệt qua Telegram" of the report it belongs to; it may still only record the decisions its playbook allows (for example approving a bonus). Intake routines (files from a Telegram group or a Drive folder) and the rules of "Data Sources & Sync" become the project's file sources, keeping their position so no file is downloaded twice; files now land in the Inbox (input/). Chats you sent to become named people and groups of the project. Old routines are kept, read-only, for one release and no longer run; what could not be converted (Zalo, a deterministic routine that sent files) is listed with the reason. Folders on your computer from "Data Sources & Sync" (also outside the project) become file sources too: new files there are copied into the Inbox; files already in the folder are not imported again.
  • What this means for the features above. The end-of-day report, the owner assistant on Telegram, file arrivals, business days of files (now shown in Nguồn) and running in the tray (Milestone 98) ship in this release as processes: set them up with one sentence in the Quy trình tab instead of "New routine → Start from template", and read "routine" in those notes as "process". The user manual has a new "Processes" page in all four languages, and the end-of-day report guide follows the new flow.
  • Add a Google Drive folder or a folder on this computer as a file source. Nguồn ⋯ → Thêm nguồn offers a Telegram group, a Google Drive folder or a folder on this computer. For Drive, sign in to Google right there if needed, open folders by name (My Drive, shared drives, "Shared with me"), choose Lấy cả file đã có to also take the files already there and how many subfolder levels to watch (0–3); nothing to type. A folder on this computer is chosen with the system picker; one outside the project is watched too, its new files copied into Sources (a note says so). The new source shows at once with its status and Kiểm tra. A process sentence that names a Drive folder or a folder ("lấy báo cáo trong thư mục Drive Kế toán") offers the same two choices in its question, so the process is ready without leaving the conversation.
  • Import files once from Google Drive — into a Drive source. Open a Google Drive source and click Nhập file một lần… at the top of its tab: pick files by name anywhere in that Google account (Google Docs/Sheets arrive as Office files); they are copied into that source, dated and classified like the files it receives, and its history shows "Nhập một lần: N file" (Milestone 102).

Your files stay as you sent them: Sources (Milestone 101) ​

  • One folder for everything that comes in. Every project now has a sources/ folder ("Nguồn"): files from a Telegram group, a Google Drive folder or a folder on this computer land in sources/<source>/<day>/ (the business day the file is about, or undated/), and files you add by hand in sources/uploads/. Nothing is ever overwritten: a different file with the same name becomes "name (2)", the same file again is kept once. Everything else in the project is your workspace — organise it as you like; new projects no longer get input/, workings/ and output/ folders.
  • Agents never change your sources. No agent, process or Office tool can edit, overwrite, rename, move or delete a file in Sources (or AMBA's own .amba/ data), in any mode and whatever is approved; results always go to a new file in the workspace. The app's editor does not edit source files either (you can still delete one).
  • You can fix a source file — AMBA keeps the old version. If you edit a file in Sources yourself (in Excel or Finder), AMBA notices, keeps the previous version, updates the day's files and marks figures taken from the old version as "needs re-check".
  • Existing projects move once, automatically. On the first start (or when a project is opened), files in input/ move into Sources — files that arrived from a group or folder under their source and day, everything else under sources/uploads/ with its sub-folders — and everything AMBA remembered about them follows: the Inbox, dates you confirmed, questions asked, facts, edit history, process folders, file mentions in chats and your company templates. workings/ and output/ stay where they are. If a file with the same name but different content is already in Sources, the project is left unchanged and reported instead.
  • Polish. The studio footer counts files in Sources and in the workspace (it used to say "N in · 0 out"), and the chat's welcome line no longer mentions the old workings/ folder.

Organise your workspace your way; "final" is a mark, not a folder (Milestone 101) ​

  • No more fixed input/ · workings/ · output/ folders. Agents, playbooks and processes now read your Sources (the files of a day, by source) and write everywhere else as you like. Reports go where you ask; without a folder named they go to reports/ (scheduled reports to reports/<YYYY-MM>/). Drafts and working files stay in workings/. Older projects keep their output/ folder as an ordinary folder.
  • Agents never ask to write into Sources any more. Every agent instruction, playbook, template and tool description now says Sources are read-only and points results at the workspace.
  • A file is final when it is delivered or when you say so. Files a process sends to people become final automatically; you can mark or unmark any workspace file as final. "Finalize and export" on drafts publishes them to reports/ and marks them final. Final files lead the list of deliverables agents see.
  • Deliverables are checked wherever they are written. The check that a run really produced the files it claims (and that they are valid Office/PDF files) now covers every file the run wrote and declared in the workspace, not only output/.
  • Process review says "create files in the workspace". Processes may create files anywhere outside Sources and .amba/; existing processes keep the folders they were approved for and read the migrated Sources without asking again.
  • Open an earlier version of a source file. A kept version of a Sources file you edited can be opened as a read-only copy.

Sources know what each file is and whether it was used (Milestone 101) ​

  • AMBA learns your kinds of files. Each file that arrives is recognised by its layout (sheet columns and their types, document headings), not by its name: "bao cao.xlsx", "Book1 (3).xlsx" and a sales CSV are all "Doanh thu" once you have named that layout. A new layout is asked about once — in the app and, for Telegram files, to the owner's chat ("File này là loại gì?") with suggested names — never once per file. Photos are "Ảnh" by default. Kinds can be renamed and merged.
  • See which report used a file. Every source file now records the process run or agent conversation that read it and the report it produced ("used in <report> at <time>"), from what the run actually read.
  • Nguồn replaces the Inbox screen. The file tree has two parts — Nguồn (never changed by agents) and Làm việc (organise freely; delivered or approved files carry Bản cuối, and you can mark or unmark a file as final) — and shows once how many files moved into Sources after the upgrade.
  • Each source is an item of the file tree (Milestone 102). Under Nguồn, every source is its own item — "Telegram · Nhóm Kế toán", "Drive · Báo cáo chi nhánh", "Thư mục · Hoá đơn" — with a health dot (green receiving, amber needs a look, red stopped: sign in again, the bot cannot read the group, the folder is gone), its days below it and the files of each day. Files you add yourself are under Bạn tải lên. The separate "Nguồn" tab and its "Xem theo ngày" button are gone.
  • Each day says whether the agent did its job, per source. A small badge on each day — computed from that source's files only — shows ✓ (used in a report: which one, when, which run), "N chưa rõ loại" (name the new kind right there), "N cần chọn ngày" (choose the day) or ⚠ (files but no report yet — the process did not run, stopped with a problem, waits for files, needs a sign-in — or a file changed after its report) with the fix one click away. A file of a new kind carries a dot, and a Sources file's own menu shows Lịch sử file: the reports that used it and the older versions AMBA kept.
  • Open a source like a file: its ingestion history. Clicking a source opens it as a tab next to your file tabs. Lịch sử nạp file lists every check, newest first, by day: "✓ 3 file mới" with who sent each file, "– không có file mới" (a run of quiet checks is one line: "(17 lần)"), "⚠ bỏ qua 1 file" with the reason (same content as a file already there, over Telegram's 20 MB, an installer, an Office temp file ~$…, a Google file that cannot be downloaded) and "✗ Google cần đăng nhập lại" with Đăng nhập lại (a repeated error is one line: "Lặp lại 12 lần từ 06:00"). Files of a new kind have Phân loại in place. History is kept 90 days. Bạn tải lên opens as a tab too, listing what you added by time.
  • Setup beside the history, when you want it. The Thiết lập button in the tab shows or hides the source's setup (AMBA remembers your choice; a new source opens with it): Telegram — bot, group by name, who is asked for an unclear date, ask the kind of a new file on Telegram; Drive — the Google account (sign in again right there), the folder by name, take the files already there, subfolders; folder on this computer — its path, take the files already there. Kiểm tra, Tạm dừng / Tiếp tục and Xoá nguồn (the files already received stay; a source a process still reads cannot be removed until that process is paused or changed).
  • Add a source from the tree. Nguồn ⋯ has Tải file lên and Thêm nguồn ▸ Telegram · Drive · Thư mục. Thêm nguồn opens a new tab ready to set up; once saved, the source appears in the tree. A Telegram group added as a source is also saved, once, in the project's people & groups, so processes can name it. Loại file (rename or merge kinds) moved to project settings. The cutoff-hour setting for undated files is gone (files arriving before 10:00 count for the previous day; unclear files still ask for their date).
  • A source owns its files: remove it with them (Milestone 102). Xoá nguồn now asks "Xoá luôn N file đã nạp từ nguồn này (size)", ticked by default: the files, the earlier versions AMBA kept and their history go, and the dialog says which facts and reports will need a re-check. Untick it to keep the files under "Nguồn đã xoá · <name>", which you can delete later. A source a process still reads is never removed; a file another app keeps open is named and retried on the next start. Files imported once from Drive before this release move into the Drive source of the same Google account when there is exactly one; otherwise they show as "Nhập từ Drive (cũ)" with Chuyển vào nguồn… and Xoá — no part of the Nguồn tree is stuck any more.

Sources are read when you ask: "Lấy file" (Milestone 102) ​

  • No more background reading of sources. AMBA no longer checks Telegram groups, Drive folders or folders on this computer on its own. Press Lấy file at the top of a source's tab (or ⋯ → Lấy file / right-click on the source in the tree) to read it once: a spinner while it runs, then "Đã lấy N file mới" or "Không có file mới", and the history gains a "Lấy file thủ công" entry. ⋯ → Lấy file từ tất cả nguồn on Nguồn reads every active source of the project in turn. Telegram groups on the same bot are read together (one shared position, so no message is skipped); processes that read a source still start when fetched files arrive. A second press while a fetch runs just shows "Đang lấy file…". Scheduled fetching will come later through processes.
  • Telegram's 24-hour limit is shown. Telegram keeps a bot's messages only about 24 hours: a Telegram source not fetched for 20 hours shows "Lần lấy gần nhất: N giờ trước — Telegram chỉ giữ tin khoảng 24 giờ" and an amber dot; after 24 hours the dot turns red with "Có thể đã mất tin cũ hơn 24 giờ".
  • Paused until fetching is automatic again: AMBA sends no questions on Telegram (a file's date or kind is asked in the app), process conversations with the owner on Telegram and process questions (ask) do not wait for replies; the process shows them as "Tạm ngừng (cần lấy tin tự động)". Existing processes stay valid.

Build a process step by step, on one screen (Milestone 104) ​

  • A process is a schedule that presses the app's own buttons, in order. Its tab is now one screen: the Lịch row (every day, Mon–Fri or chosen days at a time, or every N minutes / hours), then the steps — Lấy file, Kiểm tra (with Đúng → and Sai → branches), Nhắn tin, Nhờ agent, Gửi file, Đợi đến — each with a one-line summary, its agent and ▶ to run that step alone (test mode, with its result panel; "Gửi thử cho tôi" on steps that send).
  • Build by hand, no ids to type. "+" next to Quy trình offers Tạo bằng tay (an empty process with only its Lịch row) or ✨ Tạo bằng một câu. + Thêm bước between steps and at the end of each branch adds a step with sensible defaults and opens its settings on the right: sources to tick, a group or person to message, an agent to ask (with today's files or what an earlier Lấy file brought), recipients and what to send, conditions in words ("Chưa có file của Anh Minh hôm nay", "Lấy được ≥ 3 file từ Nhóm Kế toán", a figure from the agent; và / hoặc). Move a step up or down, or delete it, from the same pane.
  • Every change is saved when its field closes and takes effect on the next run — no apply button, no test run needed. On a process that is on, a change that lets it do more (a new source, recipient or agent) asks once, in the pane: "Quy trình sẽ gửi tin cho … — Đồng ý".
  • One switch: Bật / Tắt, plus ▶ Chạy cả quy trình (it asks first, because it sends for real). Tạm dừng, the Thiết lập pane and the Các bước/Thiết lập split are gone; the tree's ⋯ is Mở · Chạy cả quy trình · Bật/Tắt · Đổi tên · Xoá. A process created from a sentence now opens in the editor off — review its steps, then Bật.
  • Steps from older processes (thu báo cáo, chờ đủ, sắp xếp, hỏi, dừng) keep running and show as Bước nâng cao; edit them with a sentence, or replace them with the new steps.
  • New step "Lấy file". A process step fetches the files of the sources you pick (or all of them) exactly like pressing Lấy file, at that moment, and tells the next steps how many files came, from which source and from whom. ▶ on that step fetches for real and says so; a preview fetches nothing.
  • Check who has not sent yet. A Kiểm tra (IF) step can ask "chưa có file của Minh hôm nay?" (files fetched earlier that day count too, also by pressing Lấy file yourself) or "có ít nhất 3 file từ Nhóm Kho trong lần lấy này?" about an earlier Lấy file step, with a branch for yes and for no — for example remind the group, wait until 17:50, fetch again.
  • Huỷ lần chạy. A run that is waiting (for example until 17:50 because a file is missing) or still running can be cancelled from the process header ("Đang chờ đến 17:50 · Huỷ") or from its row in Lịch sử chạy, after a one-line confirmation. Its remaining steps do not run and the day is free, so ▶ Chạy cả quy trình works again right away (before, a waiting run blocked every other run that day).
  • The right person, whatever their Telegram name. "Chưa có file của Anh Minh" now recognises Anh Minh by his Telegram account, so a sender called "Kế toán Minh" on Telegram counts as him and no wrong reminder goes out. The person list of a Kiểm tra step also offers people who have already sent the bot something; picking one adds them to the project's people with their Telegram account. Without a Telegram account (and in processes written from a sentence, which name the person) AMBA matches names, ignoring titles such as anh, chị, em, cô, chú, bác, ông, bà, Mr, Mrs, Ms and a role in brackets ("Anh Minh (Kế toán trưởng)").
  • Sentences in the new steps. "Mỗi 5 phút lấy file…", "nếu chưa có file của X thì nhắc…", "lấy file lúc 17h rồi tổng hợp gửi chủ" and "chưa đủ" (fewer than the usual number of files) become the new steps; "chủ", "sếp" and "the owner" mean you.
  • Every N minutes or hours. A process can run every 5 minutes up to every 24 hours (aligned to the clock, optionally only on some days). Every scheduled time now runs once: moving today's time to later today runs it again at the new time. While a run is still going, the next times are skipped quietly (one note in the history).
  • "Every 5 minutes, until 9" ends on the schedule. Lặp lại in Lịch now has Từ … Đến … and the days: "mỗi 5 phút, từ 07:00 đến 09:00, thứ 2–6" runs 25 times a day (09:00 included) and stops by itself; "… tới 9h thì dừng" in a sentence becomes that window. A repeat now waits only for the previous run: if it is still open the repeat is skipped, but a run left waiting no longer blocks the rest of the day. Đợi đến is greyed in a repeating process, and a Đợi đến or stop step already in one shows a warning on its step (it keeps each run open, and stop ends only that run, not the process).
  • Scheduled processes start on time while AMBA is in the background. While a process is on with a schedule, or a run is open, AMBA asks the OS not to slow it down in the background (macOS App Nap, Windows 11 power throttling; the computer may still sleep), and the scheduler now wakes right after each minute instead of on a drifting one-minute timer, so a 12:30 process starts in the 12:30 minute rather than a few minutes late. Windows battery saver, or "Efficiency mode" set for AMBA in Task Manager, still takes precedence. While a time has come and its run is starting, Lần chạy tiếp theo shows "12:30 · đang bắt đầu…" instead of tomorrow's time, and the card and Lịch sử chạy re-read as soon as you come back to the window.
  • Lịch sử chạy, compact. On top, Lần chạy tiếp theo says what happens next: "08:30 hôm nay · còn 3 phút" with what it will do, the run in progress ("Đang chờ đến 09:00", Huỷ), or why nothing is coming ("Quy trình đang Tắt", "Hết khung giờ hôm nay — lần tới 07:00 mai"); the same line sits under the header of Các bước. Below, one row per run grouped by day: time, how it started, a status dot and the result in words; skips in a row fold into "Bỏ qua 7 lần (lần trước còn đang chạy)"; a row opens its steps in place; Chỉ lỗi keeps the failures. New runs appear without reloading.
  • Lịch sử chạy keeps up by itself, also when you come back to its tab. Switching to another studio tab (an agent, a file, a source) and back now shows the runs that came meanwhile; before, only switching Các bước ↔ Lịch sử chạy did. A run in progress shows a spinner and where it is ("Bước 2/3: Nhắn tin…") on its row and in Lần chạy tiếp theo; its opened row ticks through the steps as they finish; a new run comes in on top with a short highlight. The process tab, its row in the explorer, the tab title and the agents' busy dots change at the same moment. After ▶ Chạy cả quy trình, Lịch sử chạy opens at the new run; in Các bước the run's line has Xem, and the last result opens its run.
  • Edit one step at a time. Adding, changing, moving or removing a step (also inside a Kiểm tra branch) is saved at once; a step that lets the process read a new source or message someone new asks for your consent first (a new person gets the test message), and a process that is off just saves it until you turn it on. "+ Thêm quy trình" can start an empty process (every day at 17:00) to build by hand.

Processes fetch their own sources; agents do the steps (Milestone 103) ​

  • Scheduled fetching is back, through processes. When a process runs at its time (or you press Chạy ngay), its first step reads the Telegram groups, Drive folders and folders it collects from — exactly like Lấy file — before counting the day's files, so "14:00 thu báo cáo" sees what the team sent since the last fetch. A process that waits ("15:00 chưa đủ thì nhắc") reads them once more when the wait ends, so nobody is reminded about a file that already arrived. The source's history shows these entries as "Quy trình <tên> lấy file". A preview run, ▶ Thử and a process started by arriving files read nothing on their own; ▶ Thử can read first when you ask it to.
  • Each agent has its own conversation for each process. A process step done by an agent runs in that agent's conversation for the process ("Báo cáo cuối ngày · Financial Analyst"), so the agent keeps the context of earlier days; a process from before this update keeps its conversation.
  • An agent never does more than the process allows — and never more than the agent itself may do. A process step can use only the agent's own tools, and only within what you agreed to when you turned the process on.
  • A leaner studio: agents in the tab bar, processes in the explorer. The project's agents are chips at the start of the tab bar (initials and name, a pulsing dot while one works, + to add one); each chip's ⋯ (or right-click) has Cài đặt agent, Quy trình tham gia and Phiên trước, and beyond five agents the rest sit under Agent ▾. The agent list left the explorer, which now reads Nguồn → Quy trình → Làm việc (each section folds and is remembered). Every process is an item there with its status (on, paused, needs attention, not finished) and a mark while it runs; ⋯ or right-click has Mở · Chạy ngay · Tạm dừng/Tiếp tục · Đổi tên · Xoá.
  • Each process opens as a tab, like a source. Các bước shows its lines with today's status and the agent doing each step — click the agent to open its conversation for this process — with ▶ Thử, Lấy file trước khi thử, and editing by one sentence at the bottom; Lịch sử chạy lists the runs and opens what each step did. The Thiết lập pane on the right (hide it with one click; AMBA remembers) has Khi nào chạy, Lấy file từ, Người làm, Gửi cho, "AMBA sẽ…", Bật/Tắt and Xoá quy trình. + next to Quy trình opens a new tab where you write the process in one sentence; the chat's "Tạo quy trình" card opens it with your words, and "Quy trình đang bật" in the sidebar opens the next process and shows it in the explorer. Above an agent's chat, Quy trình tham gia lists its processes. The single "Quy trình" tab and its cards are gone.
  • Two agents made from the same base agent are two agents. Creating a second project agent from an agent another one already uses (or switching one to it in its settings) gives it its own copy, named after it: its own steps under Người làm, its own process sessions and its own busy dot. Its copy goes away with its last chat. Agents' process sessions — also those of a deleted process — never appear as extra agents in the tab bar.
  • One report per business day. Files that come in after Chạy ngay (or the schedule) has made today's report — including files that run's own fetch brought — no longer start the process again for that day; press Chạy ngay to make it again. A run that failed or was cancelled leaves the day to the next arrival.
  • On a narrow window the active agent stays in view in the tab bar.

Choose how a source's files are arranged: "Cách xếp file" (Milestone 102) ​

  • By day, month, year, or the original folders. Each source's setup has Cách xếp file: Theo ngày (as before, the default), Theo tháng (2026-10), Theo năm (2026), or — for a Drive folder or a folder on this computer — Giữ nguyên thư mục gốc, the same folders as in the source. Files without a known date still go to "Chưa rõ ngày". A file's business date, its kind and the day badges do not change with the arrangement; month and year folders in the tree carry the badge of their days, and with months, years or the original folders the source's tab shows Theo ngày số liệu with each day's badge.
  • Sắp xếp lại. Changing the arrangement and saving asks whether to Sắp xếp lại ngay the files already there or apply it to new files only; ⋯ → Sắp xếp lại… (on the source in the tree or in its tab) does it any time, after a preview: "Sẽ chuyển N file vào M thư mục". Two files with the same name keep both ("(2)"); facts, reports, file history, mentions in chats and the search index follow the files. An interrupted move finishes on the next start.
  • Every subfolder is read. The "Thư mục con" depth option is gone: Drive folders and folders on this computer are read at every level (a folder that links back up is read once). One Lấy file takes at most 5,000 files and says so — press it again for the rest. Database schema V041 drops the old option.

Test a process step by step (Milestone 101) ​

  • Test a process step by step (engine). Each line of a process can be tried on its own — with today's files, another day's, or the result of an earlier step from a real run or an earlier test — with simulated conditions ("15:00 still missing Minh", "a loss today"), from the start up to a line, or again from a failed run. A test sends nothing (it shows the exact message and who would get it), writes only into a test folder, remembers no facts and never counts as a run; "Send me a test" sends one copy, marked "[Thử]", only to your own chat. Tests expire after 7 days.
  • ▶ Thử on every process line. On a process card (and on the review while creating one), each line has ▶ Thử: a panel opens under it with what the step took in (the day, its files with their kind, who is missing), what it produced (counts, figures, the report file — opens in the preview), what it would send (the exact Telegram message and attachments, to whom; nothing is sent) and any error with its fix. Pick the data (Hôm nay, a day that has files, or the previous step's result so a later line is tried without re-collecting), Giả lập a condition (someone missing, a loss — the bonus section follows —, the time), Chạy tới đây to try every line up to one, and Gửi thử cho tôi to get one [Thử] copy on your own Telegram. In Lịch sử, a run's line shows what it took in, produced, sent or failed on, with Thử lại bước này.
  • Tests can never touch your Sources either. A step test follows the same rule as a real run: an agent's attempt to write into Sources or AMBA's own project data is refused with the same message as in a real run, so a test never passes where the real run would be refused.

Talk to the agent on Telegram (Milestone 98) ​

  • Paused in this release (Milestone 102): replies to the bot on Telegram are not answered for now, because files and messages are read only when you press Lấy file. Ask the agent inside AMBA instead (the agent chip on a process's "Nhờ agent" step opens its session). The items below describe the feature as it will work again.
  • The owner can reply to the report and get an answer in the same chat. A new routine template, "Owner assistant on Telegram" (Senior Financial Analyst & Controller), answers every text message the owner sends to the bot — "sao hôm nay chi phí cao?" — in that chat, in Vietnamese and in a few lines, from the project's files, the history workbook and the latest report, with figures read by tools; when a file or a day is missing it says so instead of guessing. Messages from other chats, from bots and replies to the "File … thuộc ngày nào?" question never start it; messages sent while it is answering are answered together, in order.
  • Decisions are remembered with the owner's words. "duyệt phương án 2", "ok 1,5 triệu" or "không thưởng" is recorded as a decision with the exact message (shown in "What the agent knows" as "<name> on Telegram: “…”"), the amount is written into "Bonus approved" of that day's row in the history workbook, and the agent confirms in one line.
  • The thread lives in AMBA. Each Telegram chat gets its own conversation in the project, "Telegram — <name>", so follow-up questions keep the context and you can read the exchange on the PC; messages from Telegram are marked "From Telegram · <name>".
  • Set the owner chat once. The report and the assistant share the owner's chat: whichever you add second starts with the chat already filled. Once the assistant is active, the 18:00 report ends with one line telling the owner they can reply. Any Telegram trigger can also be switched to "Answer every message in this chat" in the routine editor.

Routines: end-of-day business report (Milestone 98) ​

  • New routine template "End-of-day business report" for agents installed from the Senior Financial Analyst & Controller playbook (New routine → Start from template). Every day at 18:00 (Asia/Ho_Chi_Minh) or on Run now it reads the day's sales and cost files from input/YYYY-MM/DD/, computes revenue, costs, gross and net profit (by branch and product when the files have them) with queries and workbook formulas, compares with the previous day and the 7-day average, writes output/YYYY-MM/YYYY-MM-DD_Bao_cao_kinh_doanh.xlsx and a short PDF report, and sends both to the owner's Telegram chat. You only answer which chat receives it; dry run it before activating.
  • A history of every business day. The routine keeps one row per day in workings/lich_su_kinh_doanh.xlsx (revenue, costs, profit, staff hours and cost when available, bonus proposed, bonus approved). Running the same day again replaces that day's row and its own report files instead of failing or adding a duplicate; it still cannot overwrite any other file.
  • Bonus advice, not a decision. On a profitable day the report adds 2–3 bonus options with their cost, share of profit, effect on the staff cost share and a split by hours, shift or role, explained from the history and with caveats. The owner decides; "bonus approved" stays empty until then.

Routines: the owner's Telegram report reads well and is checked (Milestone 98) ​

  • Clean messages on the phone. The routine summary arrives on Telegram formatted — bold headings, bullet lists, links — instead of raw ** and | characters. Small tables are aligned with numbers on the right; wide tables become one line per row. Long reports are split into several messages without breaking the formatting, and if Telegram ever refuses the formatting the message is sent again as plain text.
  • The right files, with a proper caption. The report attaches exactly the files the run created (the workbook and its PDF), not files picked by name, with a caption such as "📊 Báo cáo kinh doanh ngày 11/10/2026". Files over Telegram's 50 MB limit and anything beyond 6 files are listed in the run instead of failing silently.
  • Wrong numbers are never sent. Before sending, the summary's figures are compared with the run's Excel file. If a figure contradicts it (for example a thousand times too large), the owner receives a short warning instead of the wrong text, and the run shows why under "Delivery notes".
  • Bonus options only when there are some. The end-of-day report's bonus part reaches the owner only on days the agent actually proposed options, and the report must state revenue and net profit as key figures.

Each file finds its business day (Milestone 98) ​

  • AMBA works out which day a file belongs to. Files arrive late, misnamed, with several days in one sheet or as revised copies. AMBA now reads the date column and title inside the file, the file name ("0710", "7.10", "ngay7"), the message sent with it ("hôm qua") and when it arrived (before 10:00 counts as the previous day), and files every file in input/ under its business day with how sure it is. Nothing is guessed by the AI.
  • The end-of-day report uses the right files. The report routine asks for "the files of day D" instead of a folder: it uses only that day's rows of a multi-day file, ignores duplicates and older versions of a re-sent report, and lists the files whose day is unclear under "Cần xác nhận" instead of counting them.
  • Asked once, answered on Telegram. When a file's day cannot be told (a photo without a caption, say), AMBA asks once in the owner's chat "File … thuộc ngày nào?". Replying to that message with a date ("07/10", "hôm qua") files it and AMBA confirms; the reply does not start the routine. The question can go to the group instead or be turned off in the trigger.
  • See and correct it in the app. In the routine panel, "Inbound files by business day" lists every file by day with its confidence, why AMBA chose that day, duplicates and older versions; "Set date" fixes a file's day or marks it as not tied to a day (a staff list), and you can change the 10:00 cut-off.

Telegram files arrive reliably (Milestone 98) ​

  • Files with the same name no longer overwrite each other. When the accountant sends "doanh thu.xlsx" twice in one day, the second version is kept as "doanh thu (2).xlsx". Sending exactly the same file again is recognised and not saved twice (and does not start the routine again). File names are cleaned so they always work on Windows (characters such as : or ?, names like CON, very long names and paths), and Vietnamese names keep their accents.
  • Files over 20 MB are reported instead of silently missing. Telegram bots cannot download files above 20 MB; AMBA no longer tries, and the routine's run in the chat lists such files — together with duplicates, renamed files and failed downloads — under "Received files to check".
  • The chat picker keeps your groups. The trigger editor still lists the accounting group and the owner's chat after the routine has started receiving messages.
  • A bot used by a routine is no longer emptied by the old sync. "Data Sources & Sync" no longer syncs a Telegram bot that a routine receives files from (it shows "Managed in Routines"), so the two never take messages from each other.

Google Drive is ready for daily files (Milestone 98) ​

  • Sign in with Google works on Windows and in release builds. The browser opens correctly on Windows (the sign-in address was cut off before), AMBA uses PKCE and listens only on your own computer (127.0.0.1) during sign-in, and you have 5 minutes to finish. When sign-in fails, AMBA says why in your language: the account is not on the app's test-user list, a company administrator blocks the app, the build has no valid Google setup, and so on.
  • No silent stop after a week. When Google stops accepting the saved sign-in (after 7 days while the app is in Google's testing phase, or when access is removed), the account shows "Needs sign-in", Connected Accounts shows a banner with "Sign in again", and the routine's next run says that Drive files are not being received. Signing in again with the same account resumes the same routines. A refreshed sign-in is reused while AMBA runs, so AMBA no longer asks Google for a new one on every check.
  • Google Sheets, Docs and Slides arrive as Excel, Word and PowerPoint files (.xlsx, .docx, .pptx) instead of files without an extension (Docs were PDF before in "Data Sources & Sync"). Shortcuts are followed to their file; broken shortcuts and Google Forms are listed under "Received files to check".
  • New trigger options: "Include files already in the folder" saves the files already there once when you set up the routine (off by default: only new files), and "Subfolders" also watches up to 3 levels of subfolders. Folders with many files are read completely.
  • Drive files get their business day too: the subfolder name ("Tháng 10/07-10") and when the file was put in Drive count as evidence; confirm unclear files in the Inbox dialog.

Routines keep running when you close the window (Milestone 98) ​

  • AMBA stays in the tray while routines are active. Closing the window no longer stops the 18:00 report or the Telegram/Drive arrivals: AMBA keeps running in the notification area (menu bar on macOS) and says so the first time. The tray menu opens AMBA, shows how many routines are active, pauses or resumes them all, and quits — asking first when a run is in progress. Turn it off in Settings → General → "Background & routines".
  • The computer stays awake for scheduled runs. From 2 minutes before a scheduled routine until its run ends, Windows and macOS do not go to sleep on their own (the screen may still turn off). AMBA cannot wake a computer that is already asleep or switched off; a missed run still catches up within 24 hours. Not yet available on Linux.
  • Start AMBA when you sign in. A new setting starts AMBA hidden in the tray when you sign in, so routines survive a restart. The end-of-day report guide recommends turning it on.
  • See that routines are armed. The sidebar shows "Routines active: N" with the next scheduled run; click it to open that routine's panel. Opening AMBA a second time brings the running window to the front instead of starting another copy.

Project context v2 (Milestone 97) ​

  • Removed: the auto-generated Living Blueprint. The "Living Blueprint" chip in the project chat and the workings/PROJECT_DECLARATION.md file AMBA rewrote after every run are gone: the file was guessed from keywords, kept repeating old assumptions and overwrote your edits. Agents no longer read it, so answers rely on your project files and instructions instead. Projects created before keep the file in workings/; you can delete it.

  • Memory no longer keeps copies of your conversations. Earlier versions saved every question and full answer (figures and names included) into memory after each run. Now nothing is saved automatically: memory holds only notes you save with "Save to knowledge" (or an agent saves with its knowledge tool) and searchable excerpts of documents a connector delivers. On the first start after the update, conversations saved by earlier versions are exported once to ~/.amba/exports/memory-<date>/ (one file per project, API keys and card numbers removed) and then removed from memory; a notice offers "Open export folder".

  • Memory stays inside its project. An agent sees only its own notes in this project, notes shared with the project, project documents, and knowledge you saved outside any project — never another project's memory, and never another agent's private notes. "Clear memory" in the session reset clears only this agent's memory in this project. Notes are cleaned of API keys and card numbers before they are saved, and long notes are split into parts of at most 4 KB.

  • See which notes an answer used. An answer that recalled saved notes shows "Memory used (n)": open it to see each note with its kind (note or document excerpt) and remove one that is wrong or outdated. A link next to it opens "What the agent knows", so the two sources stay clear: project context = facts from your files, memory = notes you saved. Nothing is shown when no note was used.

  • "Save to knowledge" asks who may use the note: all agents of this project (default) or only the agent that answered.

  • A clearer Memory screen. Filter by project (or knowledge for all projects) and by agent; search uses the same filters. Each note shows a readable title instead of an internal key, whether it is a note or a document excerpt, who can use it, where it came from and who created it; the key is only in the details. Edit or delete a note, or "Mark as global knowledge" so every agent in every project can use it (document excerpts stay in their project). "Clear" removes exactly what the filters show — this agent in this project, the whole project, or everything — after you confirm. The "New note" and "Clear" buttons, missing from the screen before, are back.

  • Agents know your project — and say when they are not sure. Every agent run now starts with a short, sourced picture of the project that AMBA builds from your files: which sheets and columns each workbook has, its date range and totals row, document headings, business dates of inbound files, your currency and number format. Figures an agent checked in a file are remembered with their source (file, sheet and cell; the cell is read to confirm the value), and rules you state in chat ("our fiscal year starts in April", "always VND, no decimals") are remembered with your words. When a file changes, the figures taken from it are marked "needs re-check" and the agent reads the file again instead of reusing an old number; anything not known is read from the files or asked, never guessed. See it in the project header → "What the agent knows", where you can also remove a wrong entry. It is stored in the project folder (.amba/context.json), so it moves with the project. The "Project Mission & Context" field of an agent's settings is replaced by it; existing text was moved in automatically.

Fixed (Milestone 102) ​

  • No file is skipped when it lands during "Lấy file". A file saved into a source folder on this computer while a fetch was running (even in the same millisecond) was never fetched afterwards; it is now fetched on the next press, and files already taken — including AMBA's own copies — are still never taken twice. A Google Drive file changed in the same millisecond the source was added is no longer mistaken for an old file on the first fetch.
  • A file that failed to download is tried again. When a Telegram, Google Drive or computer-folder file could not be downloaded during "Lấy file" (network drop, timeout, Telegram or Google briefly failing, a file locked by another program), it was recorded as failed and never fetched again. AMBA now keeps it on a retry list: the history shows "Không tải được N file — sẽ thử lại khi Lấy file", every later "Lấy file" tries it first, and a later success shows "Tải lại được N file" and is filed under its original day (from the message or Drive time). After 5 failed retries the file is given up with its name and a "Thử lại" button. Files skipped on purpose (duplicates, too large, unsupported, Office temp files) are still never retried.

Fixed (Milestone 99) ​

  • Telegram sources say why no file arrives, and recover without a restart. A bot connected before 0.5.12 could stop delivering files with only "Temporary error, will retry": its token is kept in an older keychain entry, and when macOS denied the first read AMBA treated the token as missing until the app restarted. The source tab and its setup pane now name the real cause with its fix — Allow keychain access (retries the read once; choose Always Allow), Enter the bot token again (missing or revoked token), Turn off webhook (after a confirmation), another program reading the bot, Telegram refusing the bot — and only a short network or Telegram outage reads "Temporary error". Check, opening the group picker or saving the bot again retries a denied keychain read once; background polls never ask again. The group picker fetches the bot's groups live and explains an empty list; the bot selector lists every bot by username and says which one the source uses (switching bots reads the group again from the start).
  • Sources update while files arrive. Files that reached a Telegram group, a Drive folder or a folder on this computer in the background did not show until you switched windows or tabs: the open source tab's history, the Nguồn tree (new day folders and files, health dots, day badges), the file tree and the counters stayed as they were. They now update within a moment of each change — a new entry appears at the top of the history without losing the pages you loaded or your place in the list, a quiet check only updates its "(N lần)" line, and a source that starts receiving again turns green. Kinds learned in the background, dates confirmed by Telegram replies and processes that read a source refresh the same way; coming back to the window re-reads once as a fallback.
  • macOS no longer keeps asking for keychain access. AMBA reads its single keychain entry once per launch and now writes it only when a key or sign-in really changes: Google Drive's hourly sign-in refresh stays in memory instead of being saved back (each save could raise up to three "AMBA wants to use your confidential information" prompts), saving an unchanged key does nothing, and keys already moved from older versions are not deleted again on every save. Choose Always Allow once; Settings help explains which entry ("amba") it is. For developers: a stable local signing identity (AMBA_DEV_SIGN_IDENTITY, see docs/ARCHITECTURE/platforms.md) keeps Always Allow across tauri dev rebuilds.
  • Connected accounts: adding an account and signing in to Google again work cleanly. The add/edit dialog was blurred by a leftover backdrop layer; the provider tabs no longer wrap and spill over; "Save" stays disabled until there is something to save (a token, a folder or a Google sign-in) instead of creating an empty account; after signing in with Google, "Save" updates the account the sign-in created instead of adding a second "Google Drive" entry without a sign-in; the "signed in with old permissions" warning no longer appears right after a fresh sign-in; account status shows in your language ("Đang hoạt động", "Cần đăng nhập lại", "Lỗi kết nối") and the Telegram setup steps are no longer numbered twice.
  • The macOS keychain prompt names AMBA's entry clearly. The access prompt now says "AMBA – saved API keys and connections" instead of "amba", and Keychain Access shows the comment "Used by AMBA to keep your AI provider keys and connected accounts on this Mac." Existing entries are renamed the next time a key or sign-in is saved; AMBA does not write to the keychain just to rename it.

Fixed (Milestone 98) ​

  • Dates in Excel files are read on the right day. Date cells of .xlsx/.xls files were read one day early (07/10/2026 showed as 06/10/2026) when the agent loaded or read a workbook; they now match what Excel shows.
  • Vietnamese amounts in CSV files are summed correctly. Amounts like 1.234.000, 25.000, 1.234.000 ₫, 1,234,000.50 or (1.234) were loaded as text (or 25.000 as 25), so totals were wrong. Each column's decimal mark is now detected and the amounts become numbers; a cell that is not an amount (for example "chưa có") stays as text and is listed so the agent reports it instead of counting it as zero.
  • A missed evening routine reports the right day. When the app was closed at a schedule's time and the run caught up the next morning, it used the next day's date for its input folder, output folder and files. It now uses the date of the missed run and tells the agent which business date it works on.
  • Appending the first row under a frozen header works. Adding rows to a sheet that had only its frozen header row was refused by the workbook check because the frozen pane moved; the pane now stays put.

Processes core (Milestone 100, internal) ​

  • One canonical spec for automations, validated in Rust (TASK-481, ADR-071). src-tauri/src/runtime/process/: serde types for amba.process/v1, a single validator that returns coded issues {code, path, params} (refs resolved in execution order, the 6 v1 actions with typed with, limits of 30 steps / depth 3 / waits ≤ 48 h, wait timeline, people and sources only as person:/group:/source: references), the effective policy (effects + sources + paths + recipients) with widening detection for renewed consent and a projection onto the existing unattended policy, and storage in new tables processes / process_versions (migration V029; versions immutable, consent recorded once). Schema ↔ validator parity tests run every published example and 27 negative fixtures against both. Nothing runs processes yet (TASK-482/483).
  • Durable process runs (TASK-482, ADR-071 §4). runtime/process/{engine,exec,resolve,clock,inputs,converse,action,run_model,run_store}.rs + migration V030 (process_runs, process_steps journal). A run has a business date (process timezone), its trigger (schedule with the routine catch-up rule, manual, inputsArrived, fileEvent), a state (queued/running/waiting/succeeded/failed/cancelled/skipped), the step it is on, a durable wait (waitUntil, waitFor until inputs are complete or the deadline, retry backoff, waiting action) and a late flag. The interpreter replays the journal on every drive: decided branches are kept, succeeded steps — and their external effects — are never repeated, a non-idempotent action found running after a restart fails with process.interrupted, retries keep one idempotency key per (process, run, step). One run per process per business date, at most maxOpenRuns (default 2) open. Runs move on the shared 60 s scheduler tick (also feeding keep-awake); hooks on_inputs_arrived (sources), on_file_event, wake_run, the ActionHandler run/resume contract (TASK-483) and the converse entry point. IPC process_run_now, process_runs_list, process_run_get. No action is attached yet, so a run reaching an action fails with process.action_unavailable (TASK-483).
  • File sources and the people & groups directory (TASK-484, ADR-071, contract §5). src-tauri/src/runtime/sources/ + migration V031 (project_sources, project_people; routine_arrivals gains source_id, routine_id becomes nullable). A project source (Telegram group, Drive folder, project folder) is an arrival watcher on the existing code path — the Telegram poll (one getUpdates and one offset per bot for routine triggers and sources together; a source also keeps the legacy "Data Sources & Sync" off the bot), the Drive listing (seen-set and baseline on the source row) and the file_event watcher (project folders) — so there is still no second poller. Its files land in input/ and the Inbox with the source id and the sender id; processes reading the source are told per business date (RoutineHooks::inputs_arrived → TASK-482). A group upgraded to a supergroup is followed automatically (directory + sources). The directory holds person:/group: entries with their Telegram bindings and roles (owner receives the "which day is this file" question), detected from chats the bots have seen and senders of arrived files. runtime/process/directory.rs resolves references: unknown person:/group:/source: → process.ref_unknown at its path, resolved recipients → unattended deliverTo (unreachable ones stay out). "Đủ chưa" for a process input is computed from the Inbox (explicit expect, or count/senders learned from the last 14 days; duplicates, superseded and low-confidence files never count) and plugs into the executor as InboxInputs. Source health is derived (receiving, no_files_yet, needs_sign_in, bot_cannot_read, group_migrated, poll_failed, …) and sources_test checks the bot can read the group (getMe/getChat/getChatMember, privacy mode) and waits for a test message. IPC sources_*, directory_*. No UI yet (TASK-488); routine channel triggers keep working side by side until TASK-487 migrates them.
  • Process actions (TASK-483, ADR-071 §3). src-tauri/src/runtime/process/actions/ attaches the six v1 building blocks at app start, on the existing primitives: collect (the business day's counted files, count and missing names from the Inbox), organize (manifest re-sync; ask-once date questions to the input's businessDate.askTo), remind (Telegram HTML to a directory person/group), agent-task (the agent engine through the run settle point, unattended under the consented policy; playbook template directive, the day's files and the flags later steps read in the input; outputs summary, files, key figures, flags), deliver (the routine delivery: HTML with flag-gated sections, numeric guard — a wrong figure is replaced by an alert and fails the step —, the run's workbook with caption, "reply" line when the person can converse) and ask (question with choices, durable wait, reply recorded by the poller, decision fact). stop.notify sends through remind; the converse handler answers like the owner assistant (chat conversation, grounded directive, decisions as facts with the person's words). Every recipient must be in the directory and in the consented policy (fails closed); every message is sent at most once per step and recipient (new process_sends ledger, migration V032) and recorded in the data-flow ledger. Coded errors process.action.*. Not routed yet: Telegram messages to converse (TASK-487).
  • Processes read as the owner's own lines (TASK-485, ADR-071 §1, contract §3–§4). runtime/process/render/: a deterministic, pure renderer (validated spec + directory names + locale → structured lines {key, kind, depth, when, text, parts[], steps[]}; phrases for every action, condition, trigger and status in en/vi/ja/ko compiled from render/locales/*.json). Waits fold into the time column ("14:00 mỗi ngày", "Khi đủ", "Luôn"), waitFor + if chưa đủ → nhắc becomes one "Nếu chưa đủ → nhắn nhắc …" line, an agent task and the delivery of its result share a line, conditions and days are words ("thứ 2–6", "ngày 1, 15 hằng tháng"), a step name (the owner's phrasing) wins over the generic phrase, and anything unresolved shows a placeholder ("(chưa chọn người nhận)"), never an id. Also the "AMBA sẽ: …" consent line from the effective policy (reads, messages, sends, created/overwritten files, remembered decisions), widening phrases ("thêm người nhận: Anh Hùng"), edit diffs ("Tổng hợp báo cáo → gửi Chị Lan: 16:00 → 17:00", added/removed lines, changed reminder wording) and the card overlay from a run journal ("✓ 14:02 đã nhận 4/4", "⚠ chưa đủ, đã nhắc lúc 15:00", "⏳ chờ 16:00", "✗ lỗi: …" with the code kept for the UI). IPC process_render, process_render_diff, process_render_card (invalid specs return their coded issues); TS wrappers in services/api/processRender.ts. 23 golden cases × 4 locales, plus a test that vi/en output never contains code words or raw references. No UI yet (TASK-488).
  • A process from one sentence (TASK-486, ADR-071 §1, contract §3). runtime/process/compile/: the owner writes "2h chiều hằng ngày thu gom báo cáo từ team kế toán, 3h chưa có thì nhắc, đủ thì tổ chức file gọn gàng, 4h chiều tổng hợp báo cáo"; the project's model (any provider, masked and recorded in the data-flow ledger) proposes an amba.process/v1 spec from a prompt built in Rust (spec shape, the action catalog generated from the registry, the project's people/groups/sources by name, agents and templates, learned "đủ", Vietnamese and English examples). The validator's coded issues get one automatic repair round; whatever is still unknown becomes at most three tap-questions, never a guess ("Team kế toán là nhóm nào?" with the directory's groups and "Kết nối nhóm Telegram mới", "Gửi báo cáo cho ai?", "Thường có mấy báo cáo mỗi ngày?" only when it cannot be learned, "4h là sáng hay chiều?" only without any am/pm cue). Answers apply without another model call; the review lines come from the deterministic renderer and reuse the owner's verbs ("Tổ chức file gọn gàng"). Edits are sentences too ("dời tổng hợp sang 5h", "thêm gửi cho anh Hùng", "thứ 7 không cần") and return the line diff with what the change newly allows. Nothing is saved or activated by the compiler. IPC process_compile, process_compile_answer, process_compile_edit; TS wrappers in services/api/processCompile.ts. Eval set tests/process-eval/ (31 Vietnamese + 5 English sentences from restaurants, shops, accounting, HR and an agency; 7 ambiguous ones must ask) checked in cargo test with an oracle model and against a real model with pnpm run eval:process. No UI yet (TASK-488).
  • Migration and cut-over (TASK-487, ADR-071 §6). runtime/process/migrate/ runs at app start after the schema migrations: one snapshot (routines with lifecycle, pipeline bindings, directory, sources, discovered chats, cursor settings) → a plan (routine → spec: triggers → on, agent mode → amba/agent-task with the routine's agent, template and write globs, deliveries → amba/deliver per destination with when.onOutputFlag → if: {output}, quorum reminder → if incomplete → amba/remind + waitUntil; intake routines and inbound bindings → sources with Drive seen-set/baseline and Telegram offset carried; outbound bindings and recipients → directory entries named from the chat cache; owner assistant → converse of the matching report with the playbook's canDecide) → every spec validated and ref-checked → one transaction (processes + consented versions, sources, people, settings, process_migration_report V033, cut-over flag). Idempotent; dry run via IPC process_migration_preview, stored report process_migration_report. After the cut-over no routine executes (scheduler, catch-up, quorum reminders, arrivals, file triggers, manual/dry runs; routine edits answer routine.retired) and migrated legacy bindings are not synced (pipeline.migrated_to_source). Telegram messages from a converse party reach ProcessEngine::converse on the one poll per bot; ask replies are recorded whenever the bot is polled; process on.fileEvent folders are watched (process:<id>). New run origin process {processId, runId, stepKey, canDecide}; project_fact_record refuses a decision outside converse.canDecide (process.converse.decision_not_allowed); routine_set_flag keeps its name for process flags. Catalog playbooks gain processTemplates (validated by build-agent-catalog.mjs and the Rust validator); routineTemplates stay readable for one release. amba/deliver@v1 gains optional includeWorkings; an agent task's instruction may be up to 20 000 characters.
  • Status view, code catalog and risk tiers (TASK-489, ADR-071, contract §4/§6/§7). runtime/process/status/ derives per process {state, view, pausedBy, nextRun, lastResult, attention {code, params, fix {action, target}}, pendingVersion, previewRunId} (never stored; attention priority: connection → source health → unresolved people/sources → 3 failed runs / error → Inbox dates → migration notes). runtime/process/lifecycle/ saves edits through the D1 tiers (applied | needs_test_message | needs_consent | needs_preview), stores consent-needing edits as a pending version, sends the test message to a new recipient through the remind path (data-flow ledger) and runs previews through the real engine in dry-run mode (trigger.occurrence = preview; waits pass, nothing sent — wouldSend recorded —, agent writes sandboxed under workings/.dry-run/; previews never block or count as runs). IPC process_status, process_create, process_get, process_save_version, process_consent, process_set_paused, process_delete, process_preview_run, process_versions_list; TS services/api/processStatus.ts. One catalog src/locales/codes/{en,vi,ja,ko}.json (221 codes) read by Rust (runtime/codes, used by the card's failed-step line and the test message) and the UI (utils/formatCode.ts); a Rust test scans the sources and fails on any emitted code without a phrase in all four locales. Inbound local-folder bindings left unmigrated by TASK-487 are migrated again as local_folder sources (absolute folders watched from their parent, files copied into the Inbox).
  • Acceptance against the automation contract §11 (TASK-490). tests/usability/process-founder-sentence.spec.ts replays the Founder's sentence in the real Project Studio over the mock-app IPC and counts what the owner does (1 field + 2 tap-answers, 5 taps to an active process; from zero accounts the inline Telegram setup adds only the token paste; a time change in 3 clicks without a preview run; Drive sign-in expiry → "Cần xử lý: Google cần đăng nhập lại" within one 30 s poll and the fix signs in again; a vi DOM scan of every process screen for English, code words, raw codes and references), so regressions fail the gate. Mock: expireDriveSignIn(). Visual baselines re-recorded for the screens M100 changed outside the process scenarios (tab strip, wording). Site manual: new Processes page ×4, connector and playbook pages moved off routines and "Data Sources & Sync".
  • Coded errors keep their params over IPC (TASK-493, ADR-071). AppError::Coded {code, params} crosses Tauri IPC as {code, params, message} (every other error is still the plain message string), so formatError fills placeholders: "Chạy ngay" over the open-run limit reads "Đang có quá nhiều lượt chạy dở (tối đa 2)", and a card's Bật whose test message fails names the recipient. Process, source, directory, migration cut-over, compiler and lifecycle errors use it (process.not_found and source.not_found replace "not found: process …" strings); process.max_open_runs and process.compile.sentence_too_long gained {max}. Keychain and Google sign-in codes stay code: detail strings (they reach many generic message sites); credentialErrors.ts reads both shapes.

Demo kit (Milestone 98, internal: docs/demo) ​

  • docs/demo: synthetic demo dataset demo/daily-owner-report/ (fictional coffee shop, 2 branches, 14 days of chaotic Telegram/Drive files, staff list, history workbook, answer key, deterministic generator with --end for the demo day), end-to-end regression test tests_demo_e2e (mock Telegram, Drive and model: arrival → business dates 43/43 → 18:00 report with bonus advisory, loss-day catch-up without it, owner question and decision), Founder runbook and Windows rehearsal checklist in docs/DEMO/; the outdated accounting Telegram SOP (SOP-OPS-062) is retired. Visual harness: Inbox dialog, "What the agent knows", the owner's Telegram tab and the background settings card added; baselines re-recorded.
  • The end-of-day report and the owner assistant can load the day's files every day. From the second run on, loading a sales or cost file was refused because the loader's working database (workings/.analytics.db) already existed; both templates now allow AMBA to update that database (only it, besides their own files).

Build hygiene (Milestone 99, internal: developer builds only) ​

  • Smaller src-tauri/target, fewer tauri dev rebuilds. The library is built as rlib only (no 870 MB staticlib / cdylib), the integration tests are one binary (src-tauri/tests/it/, test names <module>::<test>), dependencies are built without debug info in the dev/test profiles, src-tauri/.taurignore stops tauri dev from rebuilding when tests, docs or run-time files change, and pnpm run clean:build frees incremental caches and our own crate's artifacts while keeping compiled dependencies (scripts/README.md). No change to the app or the release bundles.

0.5.12 — 2026-10-11 ​

Security (Milestone 96) ​

  • Research and Plan modes can no longer change your files. In these read-only modes the agent could still edit workbooks, decks and Word documents in place or run an Office script, because the guard only knew the older file-writing tools. Every tool now declares whether it reads or writes, and the read-only modes refuse anything that writes, runs commands or calls a connected MCP tool — before asking you for permission. Previewing a deck or Word edit without saving it still works; Plan mode can still save its plan.

Privacy (Milestone 96) ​

  • Scanned files and images are read on your computer, and pictures never go to the AI provider. We checked every path: text in scanned PDFs and images is recognised on the device (Apple Vision on macOS), and only that text can reach the model, where identifier masking applies to it. An unused code path that could have sent page images to a cloud model has been removed, and a test now fails if one is added without a per-project consent gate. The privacy policy (English, Vietnamese, Japanese, Korean) now says that files reach the AI provider as text only, and that on Windows and Linux a scanned page without a text layer is reported as unreadable.

Fixed (Milestone 96) ​

  • macOS no longer asks for keychain access over and over. AMBA read the keychain every time it needed a key, and each key was a separate keychain entry, so one chat could show "AMBA wants to use your confidential information" several times. AMBA now keeps all its keys in a single keychain entry, reads it at most once while it runs, and no longer reads any key at launch; keys saved by earlier versions move into that entry the first time they are used (the old entries are removed only after the move is confirmed). Choose Always Allow to stop the prompt for good. Windows and Linux keep working as before.

Office: decks that fit their slides (Milestone 96) ​

  • New decks no longer run off the slide. When AMBA writes a deck in a dense company template, text that does not fit a slide is shrunk the way PowerPoint's own "shrink text on overflow" does (never below 70 % or 10 pt). It is shrunk only if the template allows it. Otherwise it continues on the next slide with the same layout, titled "(1/2)", "(2/2)". Before, bullets could spill past the bottom edge on most slides of such a template.
  • AMBA checks the layout of every deck and Word document it delivers. It looks for text overflowing its box or the slide, text hidden under another shape or picture, text smaller than 10 pt, and pictures, tables or long unbroken values wider than the Word page. The check runs on your computer and nothing is sent anywhere. Problems are recorded as warnings with the run's deliverables, and a playbook can make them block delivery until fixed. The agent sees the same estimate when it reads a deck or document, so it can fix a slide before handing it over. Only problems the run itself added are reported, never what was already in your file or template.

Office: PowerPoint decks and templates edited in place (Milestone 90) ​

  • AMBA can now edit your own PowerPoint decks and fill your company template instead of rebuilding them. Give it a deck (.pptx) or a template (.potx) and it changes only what you asked: replace text while keeping each word's formatting (even when PowerPoint split it into pieces), add slides from the template's own layouts, duplicate, delete or reorder slides, fill and extend tables, update chart numbers together with the chart's built-in Excel data, turn on chart data labels, add pictures and speaker notes. Masters, layouts, theme and every slide you did not mention stay exactly as they were; a template saved as .pptx becomes a normal presentation. Placeholders left empty on new slides are removed, so no "Click to add text" is left behind.
  • Every deck edit is checked before it is saved. If anything outside the requested change would differ, a chart's numbers would not match its data, or a deleted slide would leave pieces behind, nothing is written and the agent is told why. Overwriting an existing deck keeps the previous version for rollback, and the agent can preview an edit without writing it.
  • New decks are built on a real template — yours if you set one. In project settings (General) you can choose your company's PowerPoint template (.potx or a .pptx used as one); it is kept in the project's input/templates/ folder (a file chosen elsewhere is copied there) and nothing leaves your computer. Every new deck AMBA creates then uses that template's layouts, theme, fonts and footers; without one, AMBA uses its own neutral 16:9 template with proper slide masters and layouts instead of the old hand-made slides. Outlines can now have nested bullets, tables, pictures, code blocks, speaker notes and section slides next to titles, bullets and KPI cards, and Vietnamese, Japanese and Korean text uses suitable fonts. Starting a deck from a customer's sample deck removes its sample slides (or keeps the ones you name) and leaves the original file untouched.

Office: Word documents and templates edited in place (Milestone 90) ​

  • AMBA can now edit your own Word documents and fill your company's Word templates instead of rebuilding them. Give it a contract, report or form (.docx) or a template (.dotx) and it changes only what you asked: fill fields and replace text while keeping each word's formatting (even when Word split it into pieces or it sits next to a link), set the text of bookmarks and content controls, insert paragraphs and lists in the document's own styles (it refuses styles the document does not have), replace one section or the whole body of a template, fill tables and add rows formatted like their neighbours, delete rows, and set headers and footers with page numbers. Styles, numbering, sections, comments and every other paragraph stay exactly as they were; a new table of contents is marked to update when Word opens the file. Vietnamese, Japanese and Korean text are handled like any other.
  • Edits can be tracked changes for review. With tracked changes on, every edit appears in Word as a revision by "AMBA" (deleted text struck through, new text underlined, new and deleted rows and paragraphs, style changes), so your team can accept or reject each one; accepting all gives exactly the requested document. The check before saving also verifies that, and nothing outside the requested change may differ — otherwise nothing is written and the agent is told why. Overwriting an existing document keeps the previous version for rollback.
  • New Word documents are built on a real template — yours if you set one. In project settings (General) you can now also choose your company's Word template (.dotx or a .docx used as one), kept in the project's input/templates/ folder like the deck template. Every new Word file AMBA writes then uses that template's styles, lists, fonts, page setup, headers and footers, without copying its sample text; without one, AMBA uses its own neutral A4 template (proper headings, lists, quotes, code, captions, tables and a page-number footer) instead of the old hand-made file. Documents can now have nested and numbered lists, code blocks, pictures, links, strikethrough and a table of contents that updates when Word opens the file. When filling a template, the yellow highlighting that marks its fields can be removed from the filled-in text.

Office: decks and Word files are checked before the run finishes; better previews (Milestone 90) ​

  • Decks and Word documents with template leftovers are sent back to the agent. A finished deck or Word file is read back before the run completes: leftover template text ("Click to add title", "[Company Name]", "[Fill in …]", "Lorem ipsum"), sample slides kept from the template the deck was built from, empty placeholders on a slide or Word fields still showing their placeholder, styles the document does not have, and broken or left-behind parts make the agent fix the file in place; if it does not, the run fails and names the problem. Problems your own file already had before the run are not blamed on it. A playbook can add its own prompt texts, ignore some, or turn individual checks into warnings.
  • Decks can no longer contradict the workbook. The workbook number check now also reads PowerPoint decks — slide text, KPI cards, tables, speaker notes and the numbers behind native charts — and the tables of Word documents. A deck whose chart says 95,238,095 clicks when the plan has 95,238 is sent back for correction like a Markdown proposal.
  • Slide and Word previews look like the file. The slide preview now fills the preview pane in the slide's real shape (16:9, 4:3, 16:10 …), shows the slide list only when the pane is wide enough, and places text boxes, KPI cards, pictures and tables where the layout puts them (instead of stacking them at default positions), with the layout's and master's background, accent shapes, logos and font sizes. The Word preview no longer shows a grey band above the page, and at 100 % the page fits the pane width; page size, margins, headers and footers come from the document.

Office playbooks: pitch decks, Word briefs and contract fills in your templates (Milestone 90) ​

  • The media pitch is now a PowerPoint deck in your agency's template. The Media Planning & Agency Pitch template builds Media_Pitch_Deck.pptx on the company deck template from project settings (or a client template you name in input/), with native PowerPoint charts and tables whose numbers come from the media plan workbook; the deck is checked against the workbook and for template leftovers. The Markdown proposal is now optional, written only when you ask for it.
  • The executive brief is a Word document in your company Word template. The Executive Chief of Staff template writes Executive_Master_Briefing.docx in your template's own styles, opening with the key figures taken from the financial model, and checks the brief and the strategy deck against the workbook. The Senior Financial Analyst playbook can now write Word briefs too, and the Executive Strategy Consultant can read workbooks so deck charts use their numbers.
  • Fill NDAs, SOWs and service contracts from your own template. The Document Analysis & Contract Review template (and the Lead Business Author playbook) fills only the fields of a contract template — names, addresses, dates, amounts — from your message and the files in input/, asks you for anything it cannot find instead of guessing, never changes a clause, and writes every filled field as a tracked change by "AMBA" so you can accept or reject it in Word. A contract that still has a blank such as [Company Name], [Date], [●] or [Tên công ty] is sent back before the run finishes, and the answer ends with a table of each filled field, its value and where it came from.
  • New manual pages (English, Vietnamese, Japanese, Korean): the pitch deck in your template, the executive brief in your Word template, and contract fill with tracked-changes review in Word.

0.5.11 — 2026-10-10 ​

Deliverable accuracy (Milestone 95) ​

  • Every answer now lists the files it actually wrote. Below the answer, a "Files written" list shows each file the run created or updated (output files first) with its size, an "auto" badge for PDFs made automatically from Markdown, and a note when a file is not mentioned in the answer; click a file to open it. Files the answer mentions but this run did not write are listed too, next to the existing "Not produced" note. The list comes from what is on disk, not from the agent's wording, and stays after reopening the conversation.
  • Key figures above the files. The Inventory Reconciliation and Financial Analyst playbooks now ask the agent for the headline numbers of the result (for example total loss, shrinkage %, items over the threshold); they appear as "Key figures" above the file list. A figure that points at a file is only accepted if that file was written in the run.
  • Reconciliation pairs rows deterministically and can no longer report invented matches. The reconciliation tool now pairs each row with at most one row on the other side — by exact ID, normalized ID (case, separators, leading zeros), an ID found in the other side's reference text, or amount within tolerance and date within a window — and keeps the full result (matched pairs with the rule used, discrepancies, every unmatched row on both sides, unreadable values) instead of a 20-row sample. Amounts are read the way they are written (1.234.000 ₫, 1,234,000, (1,234), VND 12,500); a value that cannot be read is reported, never counted as 0. The Invoice Reconciliation template and the Financial Analyst playbook export these tables into the report, and a report whose "Matched" rows do not exist in the source files, do not carry the source amounts, or do not add up to the engine's count now fails with the exact rows named. Spreadsheet loading no longer turns a decimal comma such as 1,5 into 15.
  • Proposals and briefings must use the workbook's numbers. When a run writes both a workbook and a Markdown/Word narrative, every significant number in the narrative (money, percentages, counts such as clicks or impressions, Vietnamese and English formats like 95.238 lượt click, 1,2 tỷ, 95.2M) is checked against the workbook's calculated values. A number that is off by a factor of 1,000 or more (for example clicks quoted as "95,238,095" when the plan has 95,238) or that contradicts a reported key figure sends the agent back to fix the document, and the run fails if it does not; other numbers not found in the workbook are listed as warnings only. Years, dates, phone numbers, versions and page numbers are ignored. The Media Planning playbook now reads its workbook back before writing the proposal, totals each metric separately, and a total that adds different metrics (impressions + clicks) is rejected.
  • PDFs with emoji stay small and render the same on every computer. A short report with emoji could become an 11 MB PDF because the emoji pulled in the system colour-emoji font. PDFs now use only the fonts bundled with AMBA (Noto Sans regular and bold, plus Fira Mono for code) for Vietnamese and Latin text, and system fonts only for Japanese, Korean, Chinese, Arabic, Thai and Devanagari; colour-emoji fonts are never embedded. Common status emoji become text (✅ → √, ❌ → ×, ⚠️ → (!), 📈 → ↗, 🟢 → ●, 🇻🇳 → VN) and other emoji are left out. Lines in paragraphs, code blocks and table cells no longer overlap or drift apart, bold text is always bold Noto Sans, and Vietnamese characters in code keep their accents. pdf.generate reports the file size and a warning when a short document produces an unexpectedly large PDF.
  • F&B template reports the ratio your brief defines. When the brief defines a labour cost ratio (for example company-wide wages ÷ revenue for the period), the F&B Operations template now computes exactly that ratio, puts it in the workbook and reports it as the headline key figure, with per-store ratios as a breakdown; a run that reports only per-store ratios is asked again. The template no longer applies built-in benchmark ranges (such as "25–35%") that could contradict your own targets, and the labour workbook and operations briefing are now required deliverables. A request that names output/ files is no longer treated as a draft just because it says "draft the memo".

Robustness (Milestone 95) ​

  • Projects whose folder was deleted or moved are marked instead of shown as normal. The project list used to keep every project AMBA ever registered, even after its folder was gone. A project whose folder no longer exists now shows "Folder missing" on its card (and when you open it) with two choices: Locate folder… to point AMBA at the folder you moved (it must contain input/, output/ or workings/), or Remove from list, which asks first and only removes the project from AMBA — no files are deleted.
  • AMBA tells you when it closed unexpectedly. If the app is closed by a crash that leaves no error record (for example inside the system web view on Linux), the next launch says "AMBA closed unexpectedly last time" and, with your crash-report setting on Ask, offers to send a minimal report through the existing consent dialog: app version, operating system and time only. With Always send it is sent automatically; with Never nothing is sent. Running AMBA twice at the same time does not trigger it.
  • Pasting an API key cleans it. Spaces, line breaks and invisible characters in a pasted key are removed in the key field; a key with unusual characters (smart quotes, look-alike letters) shows a warning to copy it again.
  • Linux: typing with Vietnamese or CJK input methods no longer drops characters. Project, agent and file name fields (and the descriptions and rename prompts) no longer lose characters while ibus or fcitx is composing, and Enter that confirms an input-method candidate no longer submits the form. Dropdowns on Linux are drawn by AMBA so the chosen value stays readable, and the model selector in the new-project dialog always shows a real model when the saved default no longer exists.

UI (Milestone 93) ​

  • The whole app speaks your language, with local number and date formats. About 450 labels, buttons, tooltips, placeholders and messages that were still in English (command palette, History, Usage, Memory, Models, Skills, Settings → Models provider cards and messages, Diagnostics self-test, update prompt, spreadsheet pager, slide previews, file menu, permission prompt, data sources) are now translated in English, Vietnamese, Japanese and Korean, and Vietnamese labels use sentence case. Dates and times, counts, costs, file sizes and durations follow your language (for example "6,70 US$" and "1,5 KB" in Vietnamese); costs show two decimals instead of four. Release notes in the update prompt are shown as formatted text. Finished tool steps no longer read "Searching…"/"Đang…", routine runs show "Sent" in your language, a routine proposal shows "(not set)" instead of "?", the Telegram bot name no longer shows "@@", and the data sources overview lists the channels you actually connected.
  • Agent Studio, Tools & MCP and the project studio are translated too. The agent library and editor, the MCP server form, server list, tool registry and tool permissions, the studio status bar ("Ready", files in/out), the file filter, tab and tree tooltips, the drop-files hint and the live run status (waiting for permission or your answer, rate-limit retries, repeated-action recovery) now follow your language. The new-project dialog shows template names, badges and the starting description in your language. Tool policies show as Allow / Confirm / Deny in your language, and agent cards no longer show the instruction length twice.
  • Safer permission prompts. When an agent asks to use a tool that needs your approval, the prompt is now a proper dialog: Esc means Deny, keyboard focus stays inside it, and it appears above any window you have open (for example Settings) and returns you there afterwards. Requests that would delete, move or rename files, overwrite an existing file outside workings/ and output/, or write outside the project folder are marked with a warning and start on Deny; the prompt shows the tool, the file paths and the policy's reason, with a button to copy the details. Several requests at once are shown one after another in order, and prompts from a run that has ended or was cancelled disappear.
  • Command palette (⌘K / Ctrl+K) behaves like the other dialogs. Keyboard focus stays inside it while it is open and returns to where you were when it closes; Esc or a click outside closes it; the highlighted result is clearly marked and stays in view while you move with the arrow keys, and screen readers announce the highlighted result. It no longer opens on top of another open dialog (close that one first), so it cannot hide or interfere with unsaved work there.

0.5.10 — 2026-10-10 — Hotfix: credentials and honest results ​

Upgrade notes ​

  • Please re-enter API keys and connector credentials you saved after updating to 0.5.9. 0.5.9 reported them as saved but did not keep them across restarts. Keys saved in 0.5.8 or earlier are moved into your system keychain automatically on first launch.
  • Linux: saving keys now requires a running system keychain (GNOME Keyring, KWallet ≥ 5.97 or KeePassXC). Without one, AMBA shows a clear error instead of pretending to save. Settings → System Diagnostics shows the keychain status.
  • Includes the UI integrity work from Milestone 93 (consistent dialogs, restored hover states and tints, 12px minimum text, offline icons).

Security / Fixed (Milestone 94) ​

  • API keys and credentials are now actually stored in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service). In 0.5.9, keys saved after updating were lost on restart — please re-enter them. Keys saved before 0.5.9 are migrated automatically.
  • Saving a key now fails with a clear message instead of showing "saved" when the keychain did not keep it. On Linux without a running keyring (GNOME Keyring or KWallet), saving shows "No system keychain is available" — AMBA never falls back to storing keys unencrypted.
  • Pasted keys are trimmed; keys containing line breaks, invisible or non-ASCII characters are rejected with a hint to paste again.
  • Settings → Diagnostics shows which keychain is in use and whether it is available.
  • Runs no longer report files that were not produced. If the agent says it created files that are not on disk and cannot fix it (including when the model service fails during the fix-up attempt), the run now ends as failed and the chat shows "Not produced: …" with the missing files, also after reopening the conversation. Requests that only mention a draft (e.g. "review the draft budget in input/") no longer switch into draft mode, and draft runs say that their files were saved in workings/drafts/.
  • Clearer error when a folder is given instead of a file. Loading data, reading files or inspecting workbooks with a folder (or an empty path) now fails right away with a message listing the files in input/ to choose from, instead of "Unsupported file format".
  • PDFs are refreshed when their Markdown changes. A rewritten Markdown deliverable in output/ now gets a new PDF instead of keeping the outdated one.

Docs, site and packaging (Milestone 94) ​

  • The website and manual now describe how keys are really stored. Every page (4 languages) says keys live only in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service: GNOME Keyring, KWallet 5.97+ or KeePassXC), that there is no plaintext or database fallback, that Linux without a running keyring cannot save keys (and what to install), and that keys saved after updating to 0.5.9 must be entered again. The old claim of an "encrypted SQLite fallback" is gone.
  • More accurate claims. "Zero Math Hallucinations" became "Computed, Not Guessed": calculations run in deterministic tools and you should still review the numbers. The playbook pages no longer state a wrong number of built-in playbooks (there are seven).
  • New Release Notes page on the website (nav and footer, all languages), generated from this changelog at every site build. /playbooks now redirects to the playbook library, and the old /download/<os> links (which pointed to 0.4.5 files that no longer exist) go to the download section.
  • Linux packages: the .deb now depends on libdbus-1-3 and recommends gnome-keyring | kwalletmanager (the .rpm requires dbus-libs and recommends gnome-keyring), drops a duplicate WebKitGTK entry, and AMBA appears under Office/Productivity in application menus. The install guide uses sudo apt install ./AMBA_*_amd64.deb and no longer lists libssl3.
  • Download page shows only current files. The release manifest no longer keeps installers from older versions (0.4.x installers and a 0.5.4 .rpm were still listed); the new .rpm is mapped correctly.

UI (Milestone 93) ​

  • Readable, theme-consistent text and colours everywhere. No text is smaller than 12px any more (badges, counters, footers and helper text were 9–11px in places). Status colours (success, warning, error, info) now come from the app theme, so they read well in both light and dark mode instead of fixed colours that were too faint on white or too bright on dark; filled badges and buttons with white text have enough contrast. Code blocks, diagrams and document viewers that ignored the light theme now follow it. Leftover styles from an older UI kit were removed, so buttons, badges and form fields look like the rest of the app.
  • Hover states, selected states and soft tints are back. Many buttons, list rows, badges, cards and dividers were designed with semi-transparent theme colours that never took effect, so hover feedback was missing, selected items were not highlighted, and some dividers showed as bright lines in the dark theme. They now render as designed in both light and dark themes. The file filter box in the project explorer is no longer white in the dark theme.
  • Consistent dialogs and in-app confirmations. Project Configuration, Delete project, New project, the welcome sandbox, Help & Guide, Clean up session and the trial-limit dialog now behave like every other dialog: Esc closes them (or goes Back), keyboard focus stays inside, and only one dialog is shown at a time — Delete project has a Back button to Project Configuration. Every "Are you sure?" question, error message and the new-file name prompt is now an in-app dialog in your language and theme instead of a plain system pop-up; deleting asks with a red button and starts on Cancel. Backup and restore in Settings use the normal save/open file pickers instead of asking you to type a path. The Settings row in the sidebar and the collapsed-sidebar expand button work with the keyboard and screen readers; the crash-report dialog shows a readable time and starts on Send; the routine run history keeps its filters on one row; the data-flow table fits inside Project Configuration.
  • Quick setup is reachable with the sidebar collapsed. The collapsed sidebar (narrow windows, or after collapsing it) now has a Setup Wizard icon next to Help and Feedback, so the setup wizard no longer requires expanding the sidebar first.

0.5.9 — 2026-10-09 — Milestones 76–92 ​

First release since 0.5.6 (0.5.7 was tagged but never distributed).

Upgrade notes ​

  • Keychain prompt on first launch (macOS): API keys and connector credentials previously stored as plaintext in the local database are moved into the OS keychain and removed from the database; macOS may ask once for keychain access. Correction (0.5.10): this did not work in 0.5.9 — keys saved after updating to 0.5.9 were lost on restart and older keys stayed in the database. Fixed in 0.5.10; see its notes.
  • Backups no longer contain credentials: restoring a backup on another machine requires re-entering keys.
  • Routines: existing routines are migrated automatically and keep their permissions; "weekdays" schedules no longer fire on weekends; new or edited routines need a successful dry run before activation.
  • Overwrites: agents now ask before overwriting existing files outside workings/ and output/; unattended routines are denied such overwrites unless the path is allowed in the routine policy.
  • HTML previews render statically (scripts disabled); open externally for interactive pages.
  • Crash reports are sent only with your consent (Settings → Security).
  • Installer is ~10 MB larger (bundled offline Office sandbox and icons).

UI (Milestone 93) ​

  • Fixed: icons are visible again in the installed app, and they work offline. Icons were downloaded from a third-party icon server each time the app started; the app's security policy blocks that, so the installed app showed no icons. All icons now ship inside the app and nothing is fetched from a third-party server to draw the interface.

Chat (Milestone 88) ​

  • File mentions in chat now only ever point inside the project folder. When you write @file or @folder/, the app (not the chat window) finds the matching project files, and a mention that resolves outside the project folder or to a missing file is ignored. Project instructions, automatic mode selection (TypeSafe AI Jev) and the large-document conversion check also moved into the app runtime; how chat looks and behaves is otherwise unchanged. One visible difference: after a reload, a message sent after converting a document also shows the "converted to Markdown" note.
  • Stop now works while the agent is waiting for you. Stopping a run while it is asking for permission or asking you a question now ends the run right away. Before, the run stayed open until the prompt was answered, or kept working on the remaining steps of that turn.
  • Agents remember earlier conversations again. Memories saved after a run are now found in later runs. Before, a project that uses a catalog agent saved its memories under that agent but searched under the default assistant, so it never found them. New chats started inside a project are now also linked to that project from their first message, so project search, project-scoped memory and the project file refresh after a run work in the first conversation too.
  • Repeated questions get a fresh answer. A run no longer replays an AI reply that was saved from an earlier run with identical wording (this could happen with low-creativity model profiles such as "Coding & Architecture").
  • More reliable deliverable retries. When the app asks the agent to redo a missing deliverable, the files it reads or writes in that retry now show in the timeline and in the changed-files list. A second retry also no longer fails at the AI provider because of an unanswered tool step.
  • Chat follows running agents live instead of checking every few seconds. Sending a prompt returns immediately and the answer, tool steps, errors and Stop all update from the agent's own progress messages. Reopening a chat or switching back to an agent while it is still working picks the run up where it is, and a run that finished while you were away is shown as finished instead of "working". The final answer now keeps its saved message id right away, so "Save to project knowledge" works on it without reloading the chat.
  • Agents now only use the tools you gave them. Every agent can still read the files in your project (open, search and list files, read PDFs and spreadsheets), ask you a question and read the clock. Writing files, creating Office documents, accounting, web search and system tools now need the matching capability pack or an explicit tool on the agent. Before, almost every agent got all of these whatever its configuration. Example: an agent built only with "Executive Presentations" reads your project files and builds decks, but cannot write other files until you add "Document Authoring". Project settings still apply on top (internet, MCP, shell). Connected MCP tools stay available to every agent in projects that allow MCP. Older agents with no tools or packs configured keep access to every tool. Changing an agent's packs in Agent Studio no longer removes tools it had outside those packs.

Routines (Milestone 91) ​

  • Routines are now stored in the app database and run one at a time. Existing routines (and the old hidden daily project schedule) are moved over automatically on first launch and keep their schedule, Telegram/Google Drive inbound and outbound settings. "Weekdays" routines now really skip Saturday and Sunday. If a routine is triggered while it is already running, one extra run waits and starts right after; further triggers join that waiting run instead of running in parallel. Pressing Run Now no longer cancels that day's scheduled run. A scheduled run that is still missing required files is recorded as skipped. After three failed scheduled runs in a row a routine stops (error state) until you resume it.
  • Routines can now start when files or messages arrive, and catch up after the app was closed. A routine can watch a project folder (for example input/, with a filter such as *.xlsx): once new or changed files stop arriving for 30 seconds (adjustable), it runs once for the whole batch and works on exactly those files; a minimum number of files can be required. Files the routine writes itself never start it again, and files dropped while the app was closed are picked up on the next launch. A routine can also start when a matching Telegram message or file arrives in a chosen chat (filter by sender, text, attachment or file name), or when a new file appears in a Google Drive folder: the files are saved to input/ first, then the run starts. If the app was closed when a scheduled routine should have run, it runs once when you reopen the app within 24 hours; older missed runs are listed as skipped ("missed while app closed"). Schedules can use a time zone (UTC, an offset such as +07:00, or zones such as Asia/Ho_Chi_Minh); the default is the computer's time zone. The run block shows what started the run (schedule, file names, message). Zalo cannot start routines yet (the app explains this when saving).
  • Routines now stay inside the limits you set when nobody is watching. Each routine has a policy of what it may do on its own: which folders it may read and write, whether it may replace existing files (or only specific ones, such as output/media_plan.xlsx), whether it may use the web or specific MCP tools, and where it may send results. The app enforces it on every run and lists anything it refused in the run's result; anything that would normally ask for your confirmation is refused. Before an existing Office file is replaced, a revision is kept so it can be rolled back. A new routine must pass a dry run before it can be switched on: the dry run works on your real current files but writes only into workings/.dry-run/, sends nothing, and shows what it would have sent (destination, size, a preview). Editing a running routine keeps the current version running until you run the new version dry and confirm it. Existing routines keep working as before (they may read the whole project, replace files in their output folders and use the web and MCP tools when the project allows them) and need no dry run. Routine deliveries, Telegram/Google Drive checks for new messages (grouped per hour) and routine model calls now also appear in "Data leaving this device", linked to the routine run; describing a routine in your own words is masked like any chat when the project masks identifiers.
  • Describe a routine in your own words and get a proposal to check, test and switch on. Ask the agent in chat for something that should happen on its own ("every Monday at 8…", "whenever the accountant drops a bank statement into input/bank…", "khi có file mới…", "毎朝…") and it shows a routine proposal card instead of doing the work right away: the name, what it does, when it runs, where it sends results and what it may do while you are away, all in plain language. Anything the app cannot know for sure is asked, never guessed — for example which of several matching folders, which Telegram chat (picked from the chats your bot knows), which file it may update, or to connect Telegram first. Answer and click "Answer & refine"; then "Run dry run" tests it on your real files without sending anything, and "Activate" becomes available once that dry run of exactly this version succeeds. "Edit in editor" opens the routine editor prefilled. The old "schedule proposal" card in chat is replaced by this card.
  • New routine panel, editor and run history — routines now live only with their agent. The routine panel beside each agent's chat lists that agent's routines with their state (draft, active, paused, error, edit waiting for confirmation), when they run next or how the last run went, and buttons to Run now, Pause/Resume, Dry run and edit; with no routine yet it offers to describe one in chat or create it. The editor shows what the routine does, a trigger builder (schedule with time zone, files arriving in a project folder, a Telegram or Google Drive message, or only Run now — up to three), what it may do while you are away with a plain-language summary that updates as you edit, up to three places to send results, and its versions; mistakes are shown next to the field they concern. "Describe in plain language" in the editor fills the form from your own words (the same proposal as in chat). Save draft → Dry run (result shown inline: files written in the sandbox, what would be sent, anything refused) → Activate; editing an active routine keeps the running version until you confirm the edit after its dry run, or discard it. Run history shows every run of the agent's routines with filters (routine, status including skipped and cancelled, dry runs), what started each run, and a link to the run in the conversation. Run now is not available for drafts (use Dry run). The old schedule section of the agent settings and the old routine editor with its "AI assistant" are removed; all of this updates live without refreshing.
  • Send a routine's result only when it matters. Each destination of a routine has a "Send only when…" field: give it a flag name (for example over_threshold) and say in the routine's instruction when it applies ("…set over_threshold when an item loses more than 5 %"). The routine then sends to that destination only when the run raised the flag; other destinations and error alerts are sent as before. The dry run shows "would skip: flag … not set to true" or that the flag was raised, and run history lists such deliveries as skipped (condition not met).
  • Start a routine from your agent's playbook. Agents installed from a playbook that ships routine templates (such as the Inventory Reconciliation & Shrinkage Controller) offer them as "Start from template" in the routine proposal card and in the routine editor, and use them when you describe a similar routine in chat. A template becomes a normal proposal: folders and thresholds come from the playbook, anything it cannot know (such as your Telegram chat) is asked, and it still needs a dry run before you switch it on. The inventory template now sends its summary only when something is over the threshold, and the opening-stock template adds rows for new items instead of only listing them.

Privacy (Milestone 92) ​

  • See every time project data left your computer. Project Configuration → Permissions & Security now has a "Data leaving this device" panel listing each outbound request — AI model calls (including the provider's region for Bedrock and Vertex), web searches and page fetches, remote MCP servers, deliveries to Telegram or Google Drive, feedback, crash reports and update checks — with destination, size, status and what was masked before sending. Only this metadata is recorded, never the content. "Export evidence" writes a CSV and a short summary into the project's output/compliance/ folder for audits. Entries are kept on your device for 365 days.
  • Mask client identifiers before they reach the AI model. In Project Configuration → Permissions & Security you can turn on masking for a project: e-mails, phone numbers, bank accounts, card/IBAN numbers, API keys, plus national ID, tax and business numbers for the markets you pick (Vietnam, Japan, Korea, Singapore, Thailand) and any terms you list, such as client names, are replaced with placeholders like ⟦CLIENT_1⟧ before a request is sent. The answer you see and the files the agent writes contain the real values again, restored on your computer. "Strict" uses every market and also masks any number with 9 or more digits. The "Data leaving this device" panel shows how many items of each kind were masked per model call (never the values). Off by default; masking can reduce answer quality for tasks that need the exact values, and local models (Ollama) are never masked because nothing leaves the device.
  • Fixed: the "Data leaving this device" panel and data source setup can be opened again. Both lived in a window that no button opened any more. The data-flow panel is now in Project Configuration → Permissions & Security, next to identifier masking. Connecting Google Drive folders, local folders and Telegram chats to Source Documents (with recent sync activity) opens from the Source Documents pane menu → "Data Sources & Sync".
  • Fixed: "Manage Inbound Sources" opens properly from Data Sources & Sync. The inbound source setup (Google Drive folder, local folder, Telegram chat) used to open underneath the Data Sources & Sync window and could not be used. It now replaces that window, with a Back button (or Esc) to return to it. Both windows were also tidied up: consistent spacing, headers and buttons, readable text in light and dark themes, only the middle part scrolls, and localized sync status labels. The update prompt now also stays usable when it appears while another window is open.

Excel (Milestone 89) ​

  • Excel files created by agents can now include charts, conditional formatting, Excel tables and drop-down lists. When an agent builds a new workbook it can add native charts (column, bar, line, area, pie, doughnut, scatter, stacked, and combined column + line charts with a second value axis, including charts that read data from another sheet), conditional formatting (highlight rules, formula rules, colour scales, data bars, icon sets), Excel tables with a style, a totals row and calculated columns ([@Qty]*[@[Unit Price]]), drop-down lists and number limits for input cells, sparklines, frozen panes per sheet, column widths, merged and two-row headers. Number formats can follow the market: VND, JPY, KRW, SGD, THB or USD currency and the local date order (e.g. dd/mm/yyyy in Vietnam, yyyy/mm/dd in Japan); ISO dates such as 2026-01-31 become real Excel dates in date columns. Invalid chart, table or validation settings are now reported to the agent with the exact problem instead of producing a broken file.
  • Agents can now edit your own Excel workbooks in place without breaking anything else. Asked to update figures, add a month column, insert a transaction, rename a sheet or add a summary sheet with a chart, an agent now changes exactly those cells and objects in your existing file: formats, charts, pictures, notes, Excel tables, pivot tables, macros and every sheet it does not touch stay exactly as they were. Inserting or deleting rows and columns, renaming or deleting sheets moves every formula, name, chart range, table, pivot source, merged range and conditional format that refers to them, like Excel does; changes that would break formulas (#REF!) are refused unless you ask for them. Before saving, the app checks the result opens and that nothing outside the requested change differs — if anything else changed, nothing is written. Replacing a file in your project asks for confirmation as before, and the previous version is kept so the change can be rolled back. Agents can also start a new workbook from your template (the template is copied and filled, not rebuilt), and the agent can first look at a workbook's structure (sheets, tables, names, charts, formulas). Large files work: correcting values at the end of a 50,000-row sheet takes about a second.
  • Fixed: Excel generation no longer hangs on cross-sheet formulas. Creating a workbook with a formula such as =SUM(Ledger!D2:D3) used to freeze the agent run. Formulas that point to another sheet (Ledger!D2, 'P&L'!B3, Ledger!$D$2:$D$9, whole columns like Ledger!D:D) are now calculated correctly, so the saved file shows their values right away. Opening customer spreadsheets with very large ranges or merged areas is also protected: such formulas are left for Excel to calculate instead of blocking the app.
  • New agent template: Inventory Reconciliation & Shrinkage Controller (draft). For teams that keep stock in Excel: it builds tomorrow's opening stock from today's count in a copy of your stock file, reconciles the count in place (variance value and shrinkage % columns, a totals row, red highlights below your thresholds — default −5 %), adds a sheet comparing the loss with the day's revenue from your accounting report, and a weekly sheet with the trend per item. Your fonts, colours, filters and notes stay as they are; notes typed next to the table are moved, not overwritten. It finds columns by their headers, so branches with different layouts work, and it asks for figures that your report only shows as screenshots instead of guessing. The template includes two routine drafts to review before use: reconcile when a new count file arrives (with a short Telegram summary) and build the opening stock every morning.
  • Fixed: totals on a summary sheet no longer show 0 before Excel recalculates. After an in-place edit, a total such as SUM() over formulas that read another sheet could be saved with a wrong value (0 or a partial sum) until the workbook was opened in Excel; it now waits for those values.
  • Agents can add new rows to a list that has a totals row, and the totals grow with it. When a new item shows up (for example an item counted today that is not in yesterday's stock file), the agent adds its row right above the TOTAL row with the same formats and formulas as the row above; every sum, filter, highlight rule, drop-down, name and chart that covered the list now also covers the new row. It finds the totals row by its formulas, so it works whatever the row is called.
  • Sheet names with a stray space are found. A sheet named NL ĂN (with a trailing space) is now found when the agent writes NL ĂN, as long as only one sheet matches; formulas the agent writes point to the exact sheet name. If two sheets match, the agent is told both names instead of picking one.
  • Fixed: numbers with many decimals are written exactly. Values such as 111.50000000000003 (typical for weighed quantities) could be stored one digit off in the last place, so totals differed from the source file in the 15th decimal.

Office sandbox (Milestone 89) ​

  • Agents can now build decks from your own template and handle complex Word documents with Python, offline. A new tool, office_script, lets an agent write a short Python script (openpyxl, python-docx, python-pptx, XlsxWriter) that runs inside a sandbox in the AMBA window: no internet, no access to your disk, no access to the app — it only receives the files the agent names and returns new file contents. AMBA checks every result before saving: the file must open and be valid, and when an existing file is edited, nothing outside the parts the agent declared may change (for existing Excel workbooks, any lost chart, shape or formatting rejects the edit and the agent is told to use the in-place spreadsheet editor instead). All results are saved together or not at all, and every overwrite can be rolled back. Overwriting your own files still asks for confirmation, and routines follow their file rules. The sandbox starts on first use (about 2 seconds) and needs the AMBA window to be open; Settings → Diagnostics has a self-test. Nothing leaves your device. The app download grows by about 10 MB.

Security (Milestone 85) ​

  • API keys and connector/account credentials are now stored only in the OS keychain. Previously a plaintext copy was also written to the local database. On first launch, existing plaintext copies are moved into the keychain and deleted; database backups no longer contain any credentials. If the system keychain refuses to save a key, AMBA now shows an error instead of silently saving it in plaintext.
  • Hardened the app window against malicious content. A strict Content Security Policy is now enforced, and all AI replies, code blocks, diagrams and slide text are sanitized before display, so text from an AI model or an opened file can no longer run scripts inside AMBA. Diagrams use Mermaid's strict mode. HTML file previews are now shown as static pages (scripts inside the previewed file do not run; open the file externally for interactive pages), and remote images are not loaded inside chat content.
  • Agents can no longer read or write files outside the project folder through a second path or a shortcut link. Every file path a tool receives (not just the first one) is now checked against the project folder, after resolving shortcuts/symlinks, so e.g. converting a project file into a location outside the project is blocked. File tools called without a path are refused. Writing new files anywhere in the project and updating files in workings/ and output/ work as before; overwriting an existing file elsewhere (for example in input/) now asks for your confirmation, and in scheduled routines such an overwrite is refused because nobody is there to confirm.
  • Abuse protection for AMBA's online services. The free trial service now also limits usage per network (in addition to per device), caps request and reply sizes, and only uses approved AI models; feedback submissions are rate-limited per network; update checks reject malformed requests. Networks are identified only by a one-way hash — IP addresses are never stored. If the trial limit for your network is reached, AMBA asks you to add your own API key, as it already does when your device's free runs are used up.
  • Secrets no longer end up in the local run history, and feedback/crash reports hide more personal data. API keys, tokens, passwords and private keys that appear in tool inputs or results are now masked before a run's steps are saved, and very large tool inputs/results are shortened when saved (the live view while a run is working is unchanged; after a reload such rows show [REDACTED_SECRET] or a "truncated" note). File paths and your document content stay visible in the history. Feedback and automatic crash reports now also hide email addresses, phone numbers (international and Vietnamese formats) and Vietnamese citizen ID (CCCD) numbers, in addition to user folder paths and API keys.
  • Privacy policy rewritten to match what the app actually sends (English, Vietnamese, Japanese, Korean). The old "zero telemetry / no servers" wording is gone; the policy now lists every network flow — AI requests with your own key, the free trial relayed to Google Gemini, feedback, automatic crash reports, update checks and the template catalog — with what is sent, where it goes and how long it is kept, plus how to request deletion. The website's FAQ, footer, security diagram and terms were corrected where they contradicted this (including the outdated Linux "encrypted SQLite fallback" for API keys).

Privacy (Milestone 85) ​

  • Crash reports are now sent only with your consent. After an unexpected close, AMBA shows exactly what the report contains (error, code location, stack trace, app version, OS) and asks: Send, Don't send or Always send. A new Crash reports setting in Settings → Vault & Security lets you choose Ask (default) / Always send / Never. The local crash file is deleted once you send or decline it.
  • Your feedback contact address is no longer copied into the report text. It is sent as a separate field, stored only in AMBA's feedback database, and never appears in the public GitHub issue or team chat alerts.
  • Real feedback reference IDs. After sending feedback you now see the reference ID issued by AMBA's server (e.g. AMBA-FB-3F2A9C1B) instead of a random number that was never recorded. If the server cannot be reached, the dialog says the feedback was only saved on your device instead of showing an ID.
  • Automatic data retention on AMBA's servers. Feedback and crash reports are deleted 180 days after the issue is resolved or closed (and at most 365 days after submission); free-trial device records are deleted after 90 days without use. The privacy policy (4 languages) was updated to match.

Release pipeline (Milestone 86) ​

  • Releases can no longer look successful without actually being distributed. Pushing a version tag now runs the full release automatically. Each release job uploads to the download server, checks that every file can be downloaded, registers the version with the update service, and only then publishes the update manifest. A final check confirms that the update service offers the new version and that each offered download works. Missing credentials, an unreachable file or a failed registration now fail the release instead of being skipped silently, which is how v0.5.7 ended up tagged but never distributed. Registration also no longer re-registers older installers from the merged manifest. That had made the Intel-Mac updater offer v0.4.0 instead of the newest Intel build.
  • The app version is now defined in one place. The version shown in Help and in the feedback form now always matches the installed build, and the Linux installation guide no longer names a specific (possibly outdated) installer file. Release preparation is one command (pnpm run release:bump X.Y.Z), and the quality gate fails if any version copy disagrees.
  • Website: no more pages for things the app doesn't ship. The Business Playbooks section now lists the six agent playbooks that ship in the built-in catalog (several of them were missing from the menu). It also lists six walkthroughs, each built on a project template the app really has, with a note that their figures and run times are examples. A duplicate reconciliation page was removed, and the Vietnamese reconciliation guide no longer points to the removed Pipelines tab (it now describes Routines). Button names in the Connected Accounts guide now match the app in all four languages. The site also publishes a sitemap, and the build fails if any link points to a missing page.

Agent Chat Timeline Rework & Routine Self-Work Streaming (Milestone 84) ​

  • Routines now appear as the agent working on its own — no more fake "user message" for a scheduled routine. Pressing Run now shows the routine block immediately and streams its progress live (checking sources → working → delivering), instead of a spinner on a button followed by everything appearing at once.
  • Redesigned agent turns, coding-agent style: a collapsible "Working · 00:42 → Worked for 1m 12s · 5 tool calls" group with per-tool rows (status, duration, start time, expandable details), thoughts folded to one line, and the answer streaming live below.
  • Clear timing: every turn shows its start time (hover for the full timestamp), recent turns show "2m ago", and days are separated in the timeline. Scroll/elapsed timers now follow the real run start.
  • Fixed cross-talk: a run in one agent can no longer leak into another agent's window; routines run in (and report to) the agent that owns them.
  • Older routine history is displayed in the new format automatically (no data migration).
  • Routine block shows status (Running → Completed / Failed), execution mode, trigger (manual or scheduled), and a collapsed "Task instruction" — deterministic routines show live steps too.
  • Polish & accessibility: readable 12px minimum text in the chat, subtle date-separator rules that now render in both themes, a neutral "Stopped" state for cancelled runs (no endless spinners), full keyboard navigation with visible focus rings (message copy/edit actions also appear on keyboard focus), screen-reader-friendly timestamps, and "Reduce motion" support.
  • Remaining English strings in the chat (edit-prompt hint, token tooltip, "Saved locally") are now translated in Vietnamese, Japanese and Korean.

Bug Fixes (Milestone 83 follow-up) ​

  • Agent list is visible again above the file tree in Project Studio (finished the "bot"→"agent" rename that had hidden it).
  • Switching agents restores each agent's chat scroll position reliably instead of jumping.
  • Routines run in their own conversation (never in whichever conversation was opened last), and finishing a routine no longer pulls you away from the agent you are viewing.
  • Deleting an agent also deletes its routines, so orphaned routines no longer keep running.

Routine Identity Unification + "bot"→"agent" Rename (Milestone 82) ​

  • Routines now belong to each agent conversation (not a shared template), so switching between agent tabs instantly shows that agent's own routines with its own open/close state, and two agents built from the same template no longer share routines. Fixes the "sidebar stays put / don't know whose routines" behavior.
  • Fixed a mount-time race and project-switch inconsistency in the agent chat state.
  • Removed leftover dead "executive roster" modal code.
  • Terminology: "bot" → "agent" throughout the app (UI text, identifiers, API, and settings). Persisted agent configurations are migrated automatically on launch (no data loss). Telegram's own "bot" terms (e.g. BotFather, bot token) are unchanged since they refer to Telegram bots.

Per-Agent Routine State Isolation (Milestone 81) ​

  • Switching agents now cleanly swaps the routine sidebar to that agent's own routines — the sidebar remounts per agent, so no state leaks between agents, and the header shows which agent you're configuring.
  • Switching projects resets the chat + routine state cleanly (no stale agent carried over from the previous project).
  • The routine sidebar is now a config-only surface — the execution history list was removed from it; run history lives in the agent's chat timeline, with the "View logs" button opening the detailed run monitor on demand.

Agent Routine Rework (Milestone 78) ​

  • Run Now reliably pulls Telegram files, or tells you why not. A routine with inbound collection enabled now requires an account + channel (validated on save), so it can no longer silently pull nothing. The Telegram fetch persists a per-account offset so a prior sync no longer empties the backlog.
  • Execution logs are reachable. A new "View logs" button in the Routine sidebar (per routine and for all) opens the run history. Deterministic (default-mode) runs now record step events (inbound fetch, file counts, errors), so every run is observable — not just agent-mode runs.
  • New Telegram routines default to inbound ON with the account pre-selected, so "Add new → pick channel → Run Now" works out of the box.
  • Legacy cleanup. Removed the redundant per-agent "Schedule" settings tab (routines are configured from the sidebar — the single source of truth), deleted the orphaned Pipelines tab, retired the dead background poller loop, and stopped the migration that kept resurrecting a deleted accounting task.

Multi-Cloud Provider Adapters + OpenAI Responses API (Milestones 76 & 77) ​

Added ​

  • Bring-Your-Own-Key for enterprise clouds (Milestone 76): configure AWS Bedrock, Azure OpenAI, and GCP Vertex AI directly from the Cloud Provider Hub, reaching their full model catalogs (not just OpenAI-compatible gateways).
    • AWS Bedrock (full catalog): native Converse API adapter reaching Claude, Llama, Titan, Mistral and more, with live model discovery via ListFoundationModels. Two auth modes, chosen with a toggle in the Bedrock form:
      • Bedrock API key (recommended) — paste a single Amazon Bedrock API key (Bearer); the simplest setup for end users.
      • IAM Access Key + Secret — SigV4 signed per request (session token supported for temporary credentials); signing happens per request, eliminating the "Signature expired" errors seen with cached credentials.
      • Inference-profile-aware discovery — model discovery lists invocable cross-Region inference profiles (e.g. Claude Sonnet 4.5) alongside on-demand foundation models, and hides bare IDs that return "on-demand throughput isn't supported".
      • Reactive inference-param recovery — when a model rejects an inferenceConfig field (e.g. OpenAI models on Bedrock that don't accept temperature), AMBA removes the offending field named in the error and retries automatically. Model-agnostic, so new restrictions are handled without code changes.
    • Azure OpenAI: deployment-routed chat completions with api-key auth and configurable api-version. Shares OpenAI's reactive 400-recovery, so Azure deployments of restricted models (e.g. gpt-6-astra) self-heal — when reasoning_effort: 'none' is rejected, AMBA switches to a supported value the error lists (low/medium/high/xhigh) instead of failing.
    • Reasoning models + function tools on OpenAI/Azure via the Responses API (Milestone 77): reasoning models (gpt-6-astra, terra, o-series) are automatically routed to the /v1/responses API, where function tools are supported — so agent sessions on OpenAI and Azure now work with these models. Non-reasoning models and OpenAI-compatible gateways keep using /v1/chat/completions unchanged. (If a reasoning model is ever reached over a chat/completions-only gateway, AMBA still returns a clear error suggesting an AWS Bedrock profile.)
    • GCP Vertex AI: Gemini generateContent with service-account OAuth2 (short-lived tokens minted and cached per session).
    • Per-provider credential forms: dedicated secure input fields per cloud (AWS keys + region, Azure endpoint + version, Vertex service-account JSON + project/location), stored in the OS keychain. Existing API keys continue to work unchanged.
    • 1-click presets: AWS Bedrock, Azure OpenAI, and GCP Vertex added alongside the existing DeepSeek/OpenRouter/Groq/Together presets.

0.5.7 — 2026-09-30 ​

> Tagged only — never distributed (updater, R2 and download portal stayed on 0.5.6); superseded by the next release.

Added ​

  • High-Fidelity In-Tree Excel Formula Engine & Auto-Evaluation (Milestone 55):
    • Rust In-Tree Formula Evaluator: Pure Rust recursive descent formula engine (evaluator.rs) supporting arithmetic operations, parenthesized expressions, and standard business functions (SUM, AVERAGE/AVG, COUNT, MAX, MIN, ROUND, ABS, IF).
    • Zero-Zero Invariant Guarantee: Evaluates formulas at generation time and writes computed results via worksheet.set_formula_result(), ensuring Excel displays authentic values immediately without showing <v>0</v>.
    • Auto-Recalculation on Read: Automatically evaluates formulas when reading .xlsx spreadsheets where cached values are 0 or empty, keeping spreadsheet previews accurate and responsive.
    • Resilient Cell Parsing: Supports formula strings missing leading =, object cells ({"formula": "...", "value": ...}), and auto-evaluates formulas embedded inside Markdown tables and CSV files.
  • Conversational Flow, Turn-Scoped Deliverables & Surgical Core Tools (Milestone 54):
    • Turn-Scoped Deliverables: Cleanly isolates draft deliverable cards per conversational turn in ProjectChat.vue, eliminating ghost file cards from previous turns.
    • Surgical Tool replace_file_content: Native Rust tool for exact string replacement with line-range constraints (start_line, end_line), occurrence counting, and allow_multiple guards.
    • Structural Tool directory_tree: Fast ASCII hierarchy generator for file tree exploration with depth limiting and noise filtering (.git, node_modules, target, etc.).
    • OpenAI gpt-5.6-terra Auto-Recovery: Intercepts reasoning model 400 errors and automatically adjusts reasoning_effort: "none" for /v1/chat/completions function-calling compatibility.
  • Google Gemini 429 Self-Healing & Context Token Blast Cap (Milestone 53):
    • Exponential Backoff with Header Parsing: Automatically extracts Retry-After delay directives from Gemini 429 rate limit responses with a safe 35-second ceiling.
    • Anti-Context Blast Cap: Protects users against sudden API cost spikes by bounding context injection to budget limits.
  • Real-Time Token Telemetry & ReAct Loop Metrics (Milestone 52):
    • Step-Level Token Badges: Real-time display of input/output token usage in thought steps, activity trays, and assistant message action bars (⚡ 1.5k tok (↓1.2k ↑350)).
  • Offline Document Conversion Engine & Anti-Token-Blast Guard (Milestone 51):
    • Local Document Conversion (document_convert): Zero-token offline conversion of Office formats (.docx, .xlsx, .pptx) to clean Markdown representations.
    • Anti-Token-Blast Guard: Automatically intercepts massive documents in filesystem_read and offers 1-click conversion to protect the model's context budget.
  • Local Workspace Indexer & Hybrid Retrieval Engine (Milestone 50):
    • SQLite FTS5 Full-Text Indexer: Embedded full-text search with incremental chunking and unicode61 diacritics removal.
    • Hybrid Search Tool (workspace_search): Combines BM25 lexical precision with semantic vector search via Reciprocal Rank Fusion (RRF).
    • Surgical Line Slicing: Added start_line, end_line, and show_line_numbers to filesystem_read to reduce token consumption by > 90%.
  • Large Document Streaming Parser & Token-Budgeted Grounding (Milestone 49):
    • Resilient Streaming DOCX Parser: Non-blocking chunked XML streaming with pure-text fallback recovery for corrupted documents.
    • Anti-Binary Guard Invariant: Strictly prevents Office document formats from falling through to raw binary byte checks.
    • Query-Grounded Filtering & TOC Outlines: Extracts structured Table of Contents maps and semantic paragraph excerpts with context windows.

0.5.6 — 2026-09-25 ​

Added ​

  • Unified Modal Design System & Pro-Desktop Dialog Experience (Milestone 48):
    • Streamlined 3-Tab Project Settings: Reduced project configuration from 5 tabs down to 3 (general, security, danger), eliminating horizontal tab scrolling and dialog jumping.
    • Non-Technical Permissions & Security Matrix: Intuitive Allow/Deny segmented controls for Filesystem Sandbox, Web Search, Terminal Commands (blocked by default), and MCP Plugins.
    • Authoritative Modal Standards: Standardized dialog geometry (max-w-[720px], rounded-2xl, standard Tailwind padding) across AccountSetupModal, FeedbackModal, ProjectCreateModal, ProjectDeleteModal, ResetSessionModal, and ProjectOperationsModal.
  • Two-Layer Executive Agent Architecture & Agent Studio (Milestone 44):
    • Agent Studio Marketplace: Dynamic catalog synced directly from Cloudflare R2 (https://r2.ambadesk.com/alpha/catalog/agents.json) with duplicate-safe installation and 1-click cloud sync.
    • 6 Canonical Specialist Personas: Pre-trained personas compiled from Single Source of Truth playbooks (catalog/playbooks/): Financial Analyst, Business Writer, Strategy Consultant, Market Researcher, Data Analyst, and Chief of Staff.
    • AI Co-Creation Wizard: Interactive 🪄 Co-create with AI flow for structuring custom specialist agents from natural dialogue.
    • Multi-Agent Project Roster: Visual sidebar agent grid, 0ms instant tab switching with preserved chat history, open file preview, and scroll position.
  • TypeSafe AI (Jev — System 1 Decision Engine) (Milestone 43):
    • Sub-second intent classification and automatic cognitive mode routing (Research, Plan, Agent) with real-time latency badges (Jev · 68ms).
    • Integrated into Step 3 of Model Settings alongside OpenRouter.
  • Cross-Lingual Reasoning Boundary (ADR-020):
    • Internal chain-of-thought and calculation reasoning inside <thought> blocks strictly conducted in Technical English to eliminate arithmetic and parameter hallucinations.
    • Deliverables and UI communications compiled natively in active project locale (en, vi, ja, ko).
  • Documentation & Homesite Parity:
    • Replaced ASCII architecture diagrams with responsive, theme-aware <ExecutivePersonasFlow /> component.
    • Full multilingual parity across all concept docs, getting-started guides, and playbooks.

0.5.5 — 2026-09-18 ​

Added ​

  • Frictionless Onboarding, Zero-Typing Sandboxes & Managed Trial Gateway (Milestone 37):
    • Zero-Typing Interactive C-Suite Demo Sandboxes: Added interactive sandbox picker modal (WelcomeSandboxModal.vue) pre-seeding realistic business projects for Chief of Staff, Accounting & Finance, and Operations with zero API keys required.
    • Cloudflare Edge Trial Gateway: Deployed edge trial gateway with anonymous client token enforcement, rate limiting, and device quota protection.
    • Desktop Runtime AmbaCloudProvider: Implemented managed trial provider fallback with transparent BYOK handoff dialog when quota expires.
    • Deep File Mention & Categorized Playbook Suites: Enhanced chat dock with quick @file mentions and domain-categorized prompt libraries.
  • Office Presentation Fidelity & Virtual Artboard Projection (Milestone 30/37):
    • 16:9 Vector Slide Artboard Engine: Introduced fixed virtual artboard presentation viewer (PresentationViewer.vue) with CSS percentage coordinates, auto-scaling typography, and vector shape rendering.
    • Rich PPTX Formatting: Added full support for rich text runs (bold, italic, colors), bullet dots, multi-level indentations, and theme background reference resolution (bgRef).
  • Two-Stage Plan Execution & Chronological Blueprints (Milestones 35 & 36):
    • Chronological Plan Blueprints: Structured agent plans into plans/YYYYMMDD_<slug>.md with organized deliverable outputs under deliverables/.
    • Lean Triad Cognitive Modes: Streamlined execution into three high-signal modes: explore, plan, and execute.
    • Pro Markdown Editor: Integrated direct raw source editing with line numbers, word-wrap toggles, and instant disk synchronization.
  • Multilingual UI & Documentation Consistency:
    • Standardized English as primary language across homesite manuals with zero Vietnamese residual text.
    • Replaced Mermaid diagram with Unicode box-drawing raw text block on documentation site.
    • Canonical language selector ordering (en, ja, ko, vi) without hardcoded bias.
    • Added full localization for desktop sidebar navigation ("Show more" / "Show less" and collapse toggles).

Distribution ​

  • Version Alignment: Aligned release version strings to 0.5.5 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.5.4 — 2026-09-17 ​

Added ​

  • Version-Partitioned Object Storage & Cloudflare R2 Distribution Architecture:
    • Implemented version-partitioned binary storage under alpha/vX.Y.Z/ across all release workflows (release-windows.yml, release-macos-arm.yml, release-macos-intel.yml, release-linux.yml, and release-all.yml).
    • Added dedicated snapshot manifest generation (alpha/vX.Y.Z/latest.json) preserving historical release states.
    • Maintained top-level alpha/latest.json pointer manifest with no-cache header for zero-lag live OTA updater detection and homesite download resolution.
  • Windows Release Pipeline Hardening:
    • Eliminated silent continue-on-error masking on Windows runner deployment.
    • Added automated CLI environment provisioning for gh and aws tools on Windows self-hosted and cloud runners.
    • Fixed cross-platform directory separator traversal in bundle collection.

Distribution ​

  • Version Alignment: Aligned release version strings to 0.5.4 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.5.3 — 2026-09-17 ​

Added ​

  • Flexible Runner Environment for macOS Intel CI/CD:
    • Added runner environment selection (self-hosted vs github-hosted macos-13) to .github/workflows/release-macos-intel.yml and unified multi-platform release .github/workflows/release-all.yml.
    • Enables zero-quota local execution on dedicated Mac Pro runners while preserving cloud fallback elasticity on GitHub Actions.

Distribution ​

  • Version Alignment: Aligned release version strings to 0.5.3 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.5.2 — 2026-09-17 ​

Added ​

  • Dual-Destination Edge Distribution & D1 Catalog Sync (ADR-043, Milestone 32):
    • Deployed release_artifacts edge metadata catalog on Cloudflare D1 with secure management token verification (X-Release-Secret).
    • Added CLI synchronization tool (scripts/register-release-artifacts.mjs, pnpm run release:sync-d1) supporting atomic dual-sync from Cloudflare R2 to D1.
    • Extended Cloudflare Worker with authenticated ingestion POST /v1/releases/artifacts and public distribution endpoints (/v1/releases/latest, /v1/releases/download/:platform).
    • Codified R2 bucket storage hygiene and automated D1 registration across all GitHub Actions release workflows (release-*.yml).

Distribution ​

  • Version Alignment: Aligned release version strings to 0.5.2 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.5.1 — 2026-09-17 ​

Fixed ​

  • Hybrid Scanned PDF OCR Adapter Hardening: Enhanced explicit memory buffer typing and bounds safety in scanned PDF text extraction adapter (src-tauri/src/context/adapters/pdf.rs).

Distribution ​

  • Version Alignment: Aligned release version strings to 0.5.1 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.5.0 — 2026-09-16 ​

Added ​

  • Modern Pro-Desktop UI Core & Tailwind CSS Migration: Complete transformation of the UI system to Tailwind CSS with semantic tokens, full dark/light theme support, and shadcn-vue primitives (AppShell, ProjectStudio, Tabs, Dialog, DropdownMenu).
  • Studio Resizable Panes & Workspace Ergonomics: Integrated draggable splitters (ResizablePanelGroup) across File Tree, Chat, and Deliverable Viewers with persistence and zero flicker.
  • Headless Document Core & Doc-Ops Mutation Engine (ADR-041): Rust canonical document mutations with atomic checkpoint snapshots (.revisions/), instant rollbacks, and visual diff reviews (DiffReviewBar).
  • Interactive Spreadsheet Viewport & Co-Editing: Viewport windowing IPC streaming for massive spreadsheets with inline editing intent emission, formula bar (fx), multi-sheet tabs, and cell diff highlighting.
  • High-Fidelity Document Viewers Suite: Native rendered and raw source toggle projections for Markdown, Word (.docx), PowerPoint (.pptx), HTML, and Vector PDF documents with clean unified Pro-Desktop header bars.
  • Office Fidelity, Editable Source & Native Context Menu: Direct file inspection, desktop OS app launching, clipboard copying, and native context menu suppression in Tauri desktop runtime.
  • Hybrid Scanned Document Ingestion & Multimodal Vision Engine (ADR-042): Scanned PDF OCR extraction via Apple Vision / Rust heuristics with automatic fallback and grounded reasoning guardrails.
  • Delivery Channels & Local Folder Connector: Bi-directional file dispatching with Local Folder Inbound connector, Telegram outbound file routing, and resilient MIME resolution.
  • Fully Responsive Feedback & Support Modal: Roomy responsive grid, sentiment rating strip with multiline truncation safeguards, and compact touch-friendly mobile layouts.
  • Complete Four-Locale Localization: Harmonized translation coverage across English, Vietnamese, Japanese, and Korean across all panels, settings, and documentation.
  • Closed-Loop Resolution: Formally resolves and closes GitHub issues #8 and #9 delivered in the v0.5.0 milestone (closes #8, closes #9).

Quality ​

  • 465 Vitest unit tests passing across 73 suites (100%).
  • 309 Rust unit and integration tests passing (100%).
  • 0 TypeScript compiler errors (vue-tsc --noEmit).
  • Clean VitePress documentation build (pnpm site:build).

0.4.23 — 2026-09-13 ​

Added ​

  • Google Drive Native Docs Export Engine (TASK-111): Google Sheets (application/vnd.google-apps.spreadsheet) are automatically exported to .xlsx (OOXML) format via the Drive export API; Google Docs (application/vnd.google-apps.document) are automatically exported to .pdf. Eliminates HTTP 403 Forbidden errors that previously blocked native Workspace file downloads.
  • Checksum Deduplication for Exported Files (TASK-111): Exported files lack Drive MD5/size metadata; deduplication now compares local file modification time against remote modifiedTime to prevent redundant re-downloads.
  • Auto-ingest Exported Spreadsheets (TASK-111): Exported .xlsx files are automatically loaded into the project's .analytics.db via load_spreadsheet_into_table for immediate analysis.
  • Storage Reactivity & Instant File Tree Updates (TASK-111): sync_pipeline_binding and sync_account_pipelines now re-index the project_files SQLite table via resync_files_in_storage and emit project:files-updated immediately after sync — files appear in the SOURCE DOCUMENTS pane without requiring an app reload.
  • On-Demand Google Drive Sync Badges (TASK-112): CloudImportModal now displays an ⚡ On-Demand Sync & 08:00 Schedule badge and informational description explaining the governed on-demand fetch model across all 4 locales (en/vi/ja/ko).
  • Transparent Sync Progress & Feedback (TASK-112): The "Save & Sync Folder Rule" button now shows a mdi:loading spinner with the cloud_saving_and_syncing label while syncing. On success, a toast displays the exact number of files fetched and bytes transferred. On failure, a clear warning toast shows the actionable error message — replacing the previous silent catch {}.
  • Quick Sync All-Sources Button (TASK-112): SOURCE DOCUMENTS pane header now shows a dedicated quick-sync button with dossier_quick_sync_tooltip ("Sync all data sources (Google Drive & Telegram)") that triggers synchronous fan-out across all active Google Drive and Telegram pipeline bindings.
  • Hermetic Export Test (TASK-111): test_google_drive_export_spreadsheet_to_xlsx added to services::connectors::tests with an in-process mock HTTP export server validating the full Sheets → .xlsx export and deduplication flow.

Quality ​

  • 359 Rust unit + integration tests passing (100%).
  • 300 Vitest tests passing across 46 suites (100%).
  • 0 TypeScript errors (vue-tsc --noEmit).
  • Clean VitePress documentation build (pnpm site:build).

0.4.17 — 2026-09-10 ​

Added ​

  • Milestone 14: Telegram Multi-Group Operations & Rule-Based Workspace Organizer (ADR-033)
  • Telegram Bot Long Polling Engine: Zero-port local sync directly inside Tauri Rust runtime (TASK-79)
  • Multi-Group Rule Router: Deterministic mapping of Telegram departmental chats to project zones (e.g. Accounting to data/accounting, Operations to workings/operations) with automated SQLite table loading and vector memory chunking (TASK-79)
  • Interactive Chat Discovery: One-click "Scan Active Chats" probe resolving numerical Telegram Chat IDs into group names (TASK-79, TASK-80)
  • Multi-Group Configuration UI: Group-to-Folder mapping table, presets, auto-ingestion toggles in ConnectorSetupModal and ProjectConnectorsTab (TASK-80)
  • Two-Tier Connector Architecture: Promoted Telegram & Google Drive to Core Global Connectors; demoted Zalo OA to Regional Extensions (Vietnam) (TASK-81)
  • Hermetic Telegram Mock Integration Suite: End-to-end multi-group sync, deduplication, and sandbox traversal test harness (TASK-82)

0.4.16 — 2026-09-10 ​

  • External Connectors & Sandboxed Sync Pipeline (TASK-73, TASK-74, ADR-032, closes #6):
    • Introduced local-first external connector runtime architecture supporting Google Drive and Zalo Official Account (OA).
    • Stored sensitive OAuth tokens, client secrets, and refresh tokens strictly in OS Keychain (connector:<id>), ensuring zero token leakage in SQLite or plaintext configuration.
    • Implemented Google Drive Connector with automatic token refresh, folder-scoped querying, stream downloading into <project_root>/connectors/google_drive/, path traversal defense guards, and MD5/SHA-256 checksum deduplication skipping unchanged files with 0 bytes transferred.
    • Implemented Zalo OA Connector with OpenAPI OAuth refresh, transactional message attachment querying, download streaming into <project_root>/connectors/zalo/, and size/hash deduplication.
    • Recorded detailed audit trails for all sync operations in connector_sync_logs table (status, files fetched, bytes transferred, duration, per-file actions).
  • Rule-Based Auto-Ingestion Router & Persistent Knowledge UI State (TASK-75, ADR-032):
    • Implemented automated rule-based file ingestion router dispatching synced files from connectors/ into designated project zones:
      • Spreadsheets (.xlsx, .xls, .csv, .tsv) $\rightarrow$ data/<filename> and automatically parsed and loaded into analytical SQLite tables in workings/.analytics.db.
      • Documents (.pdf, .docx, .md, .txt) $\rightarrow$ context/<filename> and chunked into semantic_memories for grounded semantic retrieval.
      • Images (.png, .jpg, .jpeg) $\rightarrow$ workings/receipts/<filename>.
    • Audited and persisted all ingested sources into SQLite project_ingested_sources table.
    • Fixed Knowledge UI Button Reset Bug: persisted source_id into project_ingested_sources across project switches in ProjectChat.vue, permanently restoring green "Ingested" (Đã lưu) state.
    • Added real-time Tauri IPC notification event project:file_ingested.
  • Scheduled Daily Executive Dispatch Engine (TASK-76, ADR-032):
    • Built lightweight in-tree scheduler running inside single-process tauri::async_runtime::spawn with zero cron daemons or node sidecars.
    • Implemented 5-step automated executive dispatch sequence: (1) sync all active connectors, (2) auto-ingest pending files into project zones, (3) execute agent reasoning in AgentMode::Exec, (4) promote draft deliverables from workings/drafts/ to output/ with companion vector .pdf auto-compilation, (5) trigger desktop notification event project:scheduled_run_completed.
    • Implemented run-once-per-day idempotency tracking via project_schedule_last_run:<project_id> with 24-hour HH:MM time matching.
    • Added Tauri IPC commands: get_project_schedule, set_project_schedule, and trigger_scheduled_run_now.
  • Connector Management & Sync Status UI (TASK-77, ADR-032):
    • Built ConnectorSetupModal.vue with tabbed selector for Google Drive and Zalo OA, credential reveal/hide toggles, diagnostic "Test Connection" button, and OS Keychain persistence.
    • Built ProjectConnectorsTab.vue featuring connector cards (status pills, folder/OA ID, filters, last synced time, "Sync Now" with spinning state, "Configure", "Delete"), Daily Schedule Card (enable toggle, time picker 24h, playbook selector dropdown, custom dispatch prompt, "Save Schedule" and "Run Now" triggers), and Recent Sync Activity table.
    • Integrated ProjectConnectorsTab.vue directly into ProjectStudio.vue workspace tab bar.
    • Added complete localization strings across English, Vietnamese, Japanese, and Korean.
  • E2E Connector QA Suite & Integration Verification (TASK-78, Milestone 13 Complete):
    • Created comprehensive hermetic integration test suite src-tauri/tests/connector_tests.rs:
      • test_google_drive_e2e_sync_and_deduplication: Verified mock Google Drive sync, landing in connectors/google_drive/, audit logging, and secondary sync skipped_unchanged assertion with 0 bytes transferred.
      • test_zalo_oa_attachment_ingest: Verified mock Zalo OA transaction attachment fetch, local receipt storage, and hash deduplication.
      • test_rule_based_auto_ingestion_routing: Verified automatic routing of .xlsx into data/ and table loading in .analytics.db, .pdf into context/ with semantic chunks, and .png into workings/receipts/.
      • test_scheduled_dispatch_execution_flow: Verified daily time validation, run-once-per-day idempotency, mock execution in AgentMode::Exec, and deliverable promotion to output/ with companion .pdf.
    • Verified 100% test pass rate across 313 Rust tests (296 lib + 17 integration tests), 254 Vitest tests (36 suites), 0 TypeScript errors, and clean VitePress build.
  • Version Alignment:
    • Synchronized version 0.4.16 across the authoritative 16-file release checklist.

0.4.15 — 2026-09-10 ​

  • Bidirectional Office Fidelity & Visual Mirroring (TASK-70, ADR-031):
    • Upgraded excel_writer with professional C-Suite design presets: Corporate Navy header fills (#1F4E79), bold white typography, subtle borders, freeze panes (row 1 pinned), auto-fitted column widths clamped between 12 and 45 characters, and visible gridlines.
    • Enhanced number formatting engine with native support for accounting currency ($#,##0, $#,##0.00) and percentages (0.0%, 0.00%).
    • Upgraded pptx_writer with 16:9 widescreen layout (12192000 x 6858000 EMUs) and executive KPI callout cards featuring light slate container accents (#F8FAFC), subtle borders (#CBD5E1), 36pt bold figure typography, and color-coded delta indicators (Emerald Green #16A34A for positive gains and Crimson Red #DC2626 for negative deltas).
  • In-App Formula Bar (fx) & Cell Inspector UI (TASK-68, ADR-031):
    • Added pinned In-App Formula Bar (fx) in SpreadsheetViewer.vue with active cell coordinate box (A1, C10), stylized italic bold fx badge, and formula/value inspection input.
    • Added active cell selection state highlighting clicked cells with high-visibility primary outline.
    • Added "Show Formulas" view mode toggle and global shortcut (Ctrl + ~ / Cmd + ~), revealing raw formula strings and subtle tinted styling across all formula cells.
    • Localized formula inspection controls across English, Vietnamese, Japanese, and Korean.
  • Formula Graph Engine & Grounded Agent Reasoning (TASK-67, TASK-69, ADR-031):
    • Enhanced OpenXML streaming parser (xlsx_zip.rs) to extract <f>...</f> formula tags into structured SpreadsheetCell models without discarding formula logic.
    • Implemented formula-aware Markdown table rendering (render_sheet_markdown) enriching cells with [fx: <formula>] annotations and generating automatic ### 📐 Formula Dependency Graph sections.
    • Codified Section 16 ("Spreadsheet Formula Integrity & Dependency Graph Reasoning") into agent planning instructions across all cognitive modes (Auto, Exec, Ask, Study).
  • Golden Benchmark Suite & Office Turing Test QA (TASK-71, Milestone 12 Complete):
    • Created comprehensive hermetic integration test suite src-tauri/tests/office_roundtrip_tests.rs:
      • test_excel_roundtrip_formula_ast_preservation_and_styling: Verifies mathematical and formula AST invariance across 3-sheet corporate financial models, ensuring 100% of formulas are preserved with leading =, values match, and freeze panes, column widths, and styles remain intact.
      • test_powerpoint_roundtrip_widescreen_and_kpi_cards: Verifies OpenXML slide containers, 16:9 widescreen layout dimensions, KPI card shapes, and semantic extraction via PptxAdapter.
    • Verified 100% pass across 285 Rust tests, 223 Vitest tests, 0 TypeScript errors, and clean VitePress build.
  • Version Alignment:
    • Synchronized version 0.4.15 across the authoritative 16-file release checklist.

0.4.14 — 2026-09-10 ​

  • Dynamic Edge Updater Protocol & Architecture (TASK-62, TASK-63, ADR-030):
    • Deployed dynamic Tauri v2 auto-updater edge route GET /v1/update/:target/:current_version on Cloudflare Workers backed by D1 (release_artifacts), returning HTTP 200 with JSON payload when updates exist or clean HTTP 204 No Content when up-to-date.
    • Implemented atomic CI artifact registration endpoint POST /v1/releases/artifact with cryptographic Bearer auth, upserting multi-platform binaries without file locks or race conditions.
    • Preserved backward-compatible monolithic manifest GET /v1/releases/latest.json dynamically aggregated across active platform builds.
    • Hardened desktop client updater (commands/updater.rs) to gracefully intercept missing platform fallback errors and 204 responses, eliminating false-positive error modals.
  • Two-Stage Deliverable Lifecycle & Draft Finalization (TASK-64, closes #5 Part 1):
    • Enforced two-stage deliverable progression: exploratory and preliminary drafts ("nháp", "tính thử", "draft", "sơ bộ") are routed exclusively to workings/drafts/<filename>.
    • Added strict path guard preventing unauthorized preliminary writes directly into client-facing output/.
    • Added Executive Draft Review Card in ProjectChat.vue with branded document icons, live preview, and one-click "Chốt & Xuất Bản Chính Thức" action promoting approved drafts into output/ with companion vector .pdf compilation.
    • Added draft artifact tracking in RunCheckpoint preserving draft state across multi-step execution interruptions.
  • C-Suite Analytical Depth Engine for Excel & PowerPoint (TASK-65, closes #5 Part 2):
    • Codified Anti-Skeleton Protocol in agent planning instructions and system prompts: mandated interconnected 3-sheet architecture for financial workbooks (Assumptions & Drivers, Financial Model P&L with 15-20+ granular rows, and Cash Flow & Sensitivity).
    • Mandated 5-slide C-suite narrative architecture for presentations (1: Strategic Thesis, 2: Problem & Context, 3: Unit Economics & KPI Cards, 4: Operational Matrix, 5: Governance & Milestones).
    • Added runtime density heuristics in ExcelWriteTool and PptxWriteTool warning against skeletal single-sheet tables or under-developed slide decks.
  • CI Modernization & Version Alignment:
    • Modernized all 5 platform release workflows with automated edge artifact registration.
    • Synchronized version 0.4.14 across the authoritative 16-file release manifest.

0.4.13 — 2026-09-09 ​

  • The Virtual Cabinet 3-Stream Orchestrator & Run Checkpoint Engine (TASK-60, TASK-61):
    • Implemented run state checkpointing and automatic resumption engine, allowing interrupted multi-step agent executions to resume deterministically without data loss (closes #2).
    • Engineered "The Virtual Cabinet" 3-stream orchestrator managing lifecycle transitions across Source Documents, Assistant's Workbench, and Final Deliverables (closes TASK-60).
    • Hardened guardrail tool invocations with auto-spool fallback and secure asynchronous telemetry dispatch (closes #1, closes #4).
    • Added end-to-end integration test suite verifying checkpoint resume, panic recovery, and virtual cabinet stream integrity (closes TASK-61).
  • Version Alignment:
    • Aligned release version strings to 0.4.13 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.12 — 2026-09-09 ​

  • Release Governance Standard Operating Procedure & 16-File Protocol:
    • Codified the authoritative Release Governance SOP mandating atomic synchronization across all 16 configuration, manual, and runtime files for every release cycle.
    • Embedded the Mandatory Release Protocol and 16-File Checklist into the root developer contract (AGENTS.md) and documentation index (docs/INDEX.md).
  • Version Alignment:
    • Aligned release version strings to 0.4.12 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.11 — 2026-09-09 ​

  • Native Crash Resilience & Panic Tombstone Recovery (ADR-028, Milestone 9):
    • Implemented zero-allocation synchronous panic hook in Rust (security/panic.rs) writing structured, privacy-scrubbed crash tombstones (last_crash.json) during fatal process aborts.
    • Added startup crash recovery service (services/crash_recovery.rs) to detect prior abnormal exits, dispatch redacted telemetry to the edge buffer, and purge tombstones from disk.
    • Sanitized panic backtraces and messages using linear regex masking to guarantee zero credential or user path leakage in crash logs.
    • Added comprehensive integration test suite (tests/crash_recovery_tests.rs) covering panic hook capture, mock server telemetry dispatch, corrupted tombstone purge, and crash payload fidelity.
  • Version Alignment:
    • Aligned release version strings to 0.4.11 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.10 — 2026-09-09 ​

  • Windows CI/CD Hygiene & Self-Hosted Artifact Isolation:
    • Added aggressive cleanup of previous bundle artifacts (win-artifacts and src-tauri/target/.../bundle) in .github/workflows/release-windows.yml to prevent artifact contamination across self-hosted runner cycles.
  • Updater Sanitization & Infinite Loop Prevention:
    • Enhanced scripts/update-latest-json-r2-local.mjs to verify platform versions against root json.version.
    • Automatically purges platform entries from updater manifest when platform version does not match root version, preventing infinite update download loops.
  • Version Alignment:
    • Aligned release version strings to 0.4.10 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.9 — 2026-09-09 ​

  • Automated Feedback & Closed-Loop Issue Triage (ADR-027, Milestone 8):
    • Added 1-click incident reporting button in ProjectChat.vue with automated context capture (active playbook, failed tool, error classification, redacted log excerpts).
    • Implemented client-side privacy redactor in Rust (services/telemetry_redaction.rs) that scrubs IPv4/IPv6, email addresses, JWTs, bearer tokens, and local file system paths (/Users/..., C:\...) before transmission.
    • Implemented offline SQLite spooling queue (user_feedback table) to guarantee zero report loss during network dropouts.
    • Deployed Cloudflare Edge Buffer Worker and D1 Database (amba-feedback-db) at https://api.ambadesk.com/v1/feedback.
    • Added SHA-256 defect fingerprinting and multi-client deduplication with zero Git thrashing.
    • Added maintainer autonomous triage endpoint GET /v1/triage and CLI triage tool (scripts/triage-telemetry.mjs) to generate daily decision dossiers for maintainers.
    • Published Maintainer Telemetry API reference (docs/API/FEEDBACK_TELEMETRY_API.md) and Issue Triage SOP (docs/DEVOPS/ISSUE_TRIAGE_AND_INCIDENT_SOP.md).
  • Repository Governance & Cleanliness:
    • Removed legacy sprint documentation (docs/SPRINTS/) in favor of .agent/PLAN/ milestone governance.
    • Synchronized Master Timeline Index and Kanban strict protocol across all agent guidelines.

0.4.8 — 2026-09-09 ​

  • Site Core Concepts refresh & native Mermaid diagrams:
    • VitePress now renders Mermaid fences as interactive diagrams (light/dark theme, zoom, copy source) instead of Shiki code blocks.
    • Cognitive Modes documentation covers the 5-mode lifecycle (Auto, Ask, Study, Plan, Exec), the in-tree artifact factory, and 1+1 deliverable packs across English, Vietnamese, Japanese, and Korean.
    • Security architecture diagrams are localized in all four languages, including Linux Secret Service and encrypted SQLite keychain fallback.
    • Mermaid diagrams keep native readable type, expand clipped foreignObject labels, and use compact vertical flowcharts so the last node is fully visible.
  • Homepage app-icon parity:
    • Navbar, favicon, hero, and footer now use the desktop 3D “A” icon (src-tauri/icons/icon.png) instead of the legacy gold-star SVG.
  • Executive Dossier commercial rebrand (ADR-026):
    • Homepage, playbook showcase, and user-manual concept pages now present the 3-chamber Executive Dossier (Source Documents, Assistant's Workbench, Final Deliverables) across English, Vietnamese, Japanese, and Korean.

0.4.7 — 2026-09-08 ​

  • Business Deliverable Pack & Rigorous Verification Gate (ADR-025):
    • Enforced mandatory 1+1 Deliverable Pack (Structured Model + Strategic Narrative) across autonomous playbooks.
    • Implemented OpenXML sheet count verification gate in runtime runner to ensure generated workbooks meet declared structural depth.
    • Added automatic companion vector PDF generation (auto_compile_pdf_sibling) alongside Markdown briefings in output/.
    • Hardened deliverable extraction to filter out hypothetical recommendations or example file references.
  • Brand Asset Refresh:
    • Refreshed high-resolution application icons (.icns, .ico, .png, and mobile icon suites).
  • Version Alignment:
    • Aligned release version strings to 0.4.7 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.6 — 2026-09-07 ​

  • Homepage & Site Component Overhaul:
    • Refactored HomeFooter.vue with streamlined layout and improved visual hierarchy.
    • Enhanced PlaybookShowcase.vue with richer content and improved interactivity.
    • Added ReleaseDownloads.vue component for structured release asset presentation.
    • Expanded custom.css with additional responsive styles and visual polish.
    • Updated hero content in all locale index pages (en, vi, ja, ko).
  • Version Alignment:
    • Aligned release version strings to 0.4.6 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.5 — 2026-09-07 ​

  • In-Tree Artifact Factory Industrialization & Roundtrip Harness (ADR-024):
    • Added bi-directional roundtrip test suite (tests/factory_roundtrip_tests.rs) verifying content invariance for native DOCX, PPTX, and Excel workbooks.
    • Implemented parameter tolerance across all factory tools: gracefully parses stringified JSON, 1D flat arrays, key-value rows, and loose LLM payload formats.
    • Enhanced phantom-write guardrail: automatically intercepts script generation and guides the agent to invoke native artifact writers directly.
  • In-App Factory Self-Test & Diagnostic Telemetry:
    • Upgraded native diagnostic command run_diagnostic_selftest in diagnostics.rs to execute live end-to-end generation and integrity verification for .xlsx, .docx, and .pptx files.
    • Added frontend diagnostics API (runFactorySelftest) and verified with unit tests.
  • Runtime Sandboxing & Relative Path Normalization:
    • Automatically resolves relative paths against scope.root_directory for deliverable generation across all execution modes.
  • Version Alignment:
    • Aligned release version strings to 0.4.5 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.4 — 2026-09-07 ​

  • Commercial Footer Architecture & Feedback Bridge (ambadesk.com):
    • Overhauled HomeFooter.vue with Architecture & Feedback column linking directly to Project Harness (3-zone sandbox), Cognitive Modes, Live Release Manifest, and direct mail feedback bridge.
    • Purged all remaining third-party repository links from Privacy Policy (privacy.md) and Terms of Service (terms.md), standardizing contact on ambadesk.com and hi@ambadesk.com.
    • Documented Cloudflare Pages deployment configuration in site/DEPLOYMENT.md.
  • Version Alignment:
    • Aligned release version strings to 0.4.4 across core runtime, UI clients, manuals, and Cloudflare R2 distribution manifests.

0.4.3 — 2026-09-07 ​

  • In-Tree Artifact Factory & Autonomous Autopilot Suite (ADR-021, ADR-023):
    • Native DOCX compiler (docx_writer.rs) for corporate documents, contracts, and administrative briefs with zero Python or LibreOffice dependencies.
    • Native PPTX compiler (pptx_writer.rs) for executive slide decks with zero external runtime dependencies.
    • Dual-World filesystem bridge (workings/ working directory vs. output/ user-facing deliverables) with auto-compilation and deliverable honesty guardrail.
  • Hermetic SQLite-Vec Hybrid Engine & Dense Vector Retrieval (ADR-022):
    • Embedded native sqlite-vec extension (V009__sqlite_vec_memory.sql) enabling C-speed SIMD vector cosine distance and KNN search directly inside SQLite.
    • Hybrid RRF (Reciprocal Rank Fusion) combining keyword search with dense vector embeddings in hybrid_engine.rs.
  • Interactive Code Block & Mermaid Diagram Viewers:
    • Added CodeBlockViewer.vue and CodeDocumentViewer.vue with syntax highlighting, line numbers gutter, and 1-click copy.
    • Added client-side MermaidDiagram.vue with SVG vector rendering, error boundary, and raw source switcher.
  • Homepage & Documentation Parity (ambadesk.com):
    • Upgraded commercial landing page hero, feature showcase, and localized footer (HomeFooter.vue).
    • Added Privacy Policy (privacy.md) and Terms of Service (terms.md) across all 4 locales (en, vi, ja, ko).
    • Fixed CI/CD release updater pipeline across macOS, Windows, and Linux.

0.4.2 — 2026-09-06 ​

  • Built-In Fixture Diagnostic Self-Test (TASK-23):
    • Added native Rust diagnostic command run_diagnostic_selftest in src-tauri/src/commands/diagnostics.rs running a hermetic end-to-end reconciliation fixture locally (SQLite table ingestion, $50 discrepancy detection, .xlsx spreadsheet writing, vector .pdf compilation, and sandbox path traversal guardrail).
    • Verifies host OS compatibility with zero external LLM API keys and 0 cloud token spend.
    • Added interactive System Health Self-Test card in Settings (SettingsPanel.vue) with 4-point live status checkmarks, execution duration (ms), and OS telemetry across all 4 locales (en, vi, ja, ko).
  • Tool Display Localization & Translation Badges:
    • Implemented internationalized display names, descriptions, and argument summaries for built-in tools across English, Vietnamese, Japanese, and Korean.
    • Added LocaleTranslateBadge.vue to indicate localized system tools cleanly in the UI.
  • Linux Installation Documentation & Secret Service Parity (TASK-24):
    • Added dedicated Linux installation guides (.deb, standalone .AppImage) to site/manual/getting-started/installation.md across all 4 locales (en, vi, ja, ko).
    • Documented Linux system requirements (libwebkit2gtk-4.1-0, libssl3) and FreeDesktop D-Bus Secret Service integration with automatic fallback to local encrypted SQLite storage for minimal window managers (i3, sway, bspwm).
    • Aligned release version strings across client UI (FeedbackModal.vue), locales, and site/package.json to 0.4.2.

0.4.1 — 2026-09-05 ​

  • Dedicated Multi-Platform CI/CD Pipeline & Architecture Independence:
    • Separated release workflows into 4 independent pipelines: macOS Intel (release-macos-intel.yml), macOS Apple Silicon (release-macos-arm.yml), Windows (release-windows.yml), Linux (release-linux.yml), and a unified All-in-1 orchestrator (release-all.yml).
    • Solved cross-compilation resource starvation on memory-constrained Intel runners by decoupling Apple Silicon builds to native ARM cloud environments.
    • Eliminated interactive Keychain authorization and cache prompts on self-hosted macOS runners with automated headless keychain lifecycle and restored default keychain.
    • Core framework production hardening and performance optimizations.

0.3.9 — 2026-09-04 ​

  • Smart Multi-Platform Manifest Merge & Accurate Portal Download Links:
    • Upgraded scripts/update-latest-json-r2-local.mjs to fetch and merge existing remote platforms from Cloudflare R2, ensuring independent self-hosted builds never overwrite or wipe out other OS platform binaries.
    • Fixed portal download matrix (ReleaseDownloads.vue) to resolve exact live versions per platform, preventing 404 errors for platforms pending independent build.

0.3.8 — 2026-09-04 ​

  • Dedicated Multi-OS Self-Hosted Pipelines (macOS, Linux, Windows):
    • Added dedicated macOS Self-Hosted release workflow (release-macos-self-hosted.yml) running on [self-hosted, macOS, X64] with Intel x64 and cross-compiled Apple Silicon aarch64 support, Apple code signing, and notarization.
    • Added dedicated Linux / Ubuntu Self-Hosted release workflow (release-linux-self-hosted.yml) running on [self-hosted, Linux, X64] with .deb and .AppImage distribution.
    • Decoupled self-hosted flows independently: all 3 OS platforms can now build on private self-hosted infrastructure with 0 GitHub Actions quota minutes consumed and automated Cloudflare R2 artifact synchronization.

0.3.7 — 2026-09-04 ​

  • Full 4-Language Localization Parity (EN, VI, JA, KO):
    • Added full Japanese (ja — 日本語) and Korean (ko — 한국어) localized dictionaries, matching the commercial portal and user manual documentation (ambadesk.com).
    • Modularized locale dictionaries into src/locales/{en,vi,ja,ko}.ts and exported SUPPORTED_LANGUAGES.
    • Upgraded AppShell.vue quick language segmented switcher (EN, VI, JA, KO) and SettingsPanel.vue appearance language cards.
    • Expanded unit test coverage in useI18n.spec.ts to verify all 4 languages, dynamic parameter substitutions, and reactive locale switching.
  • History vs Usage Navigation Decoupling & Execution Runs Pagination:
    • Separated token analytics and cost tracking into a dedicated Usage (/usage) view (UsagePanel.vue), while dedicating History (/history) to execution traces and event inspections (HistoryPanel.vue).
    • Added full pagination (10/25/50 items per page), status and project filtering, and query search for execution history.
  • Capital & Debt Financing Executive Suite:
    • Added capital-debt-financing project template and runtime system directives for capital structure modeling, debt repayment schedules, and investor pitch deck preparation.
  • Modal Reactivity & Global UI Spacing Standardization:
    • Restored teleportation and tab switching reactivity across project configuration modals.
    • Standardized fractional padding classes in main.scss (p-3.5, gap-2.5, etc.) across all screens.

0.3.6 — 2026-09-03 ​

  • Portal Download Grid & Unified Action Button Styling:
    • Re-designed download table with full grid borders and centralized action buttons.
    • Standardized transparent ghost download buttons with hover effects and localized platform-specific labels.

0.3.5 — 2026-09-03 ​

  • Portal Download Section UI & Table Formatting Polish:
    • Re-architected download matrix table with fixed layout, clean status badges, platform icons, and distinct primary/secondary download button styling.
    • Enhanced responsive mobile view and typography across all 4 localized portals.

0.3.4 — 2026-09-03 ​

  • Full Multi-OS Download Matrix & Edge Proxy Resolution:
    • Upgraded ReleaseDownloads.vue matrix to directly support all 6 OS binary formats (macOS Apple Silicon, macOS Intel, Windows EXE, Windows MSI, Linux AppImage, Linux DEB).
    • Added Cloudflare Pages edge proxy /api/latest.json to eliminate CORS issues and optimize client-side release manifest caching.

0.3.3 — 2026-09-03 ​

  • CI Runner Disk Space & Cache Optimization:
    • Added pre-build disk freeing step on Ubuntu runners (ci.yml & release.yml) to prevent runner storage exhaustion.
    • Standardized on swatinem/rust-cache@v2 across all workflows.

0.3.2 — 2026-09-03 ​

  • Commercial Portal & Dynamic Cloudflare R2 Downloads Integration:
    • Integrated dynamic ReleaseDownloads.vue component querying live https://r2.ambadesk.com/alpha/latest.json for automatic real-time download resolution.
    • Complete 4-language VitePress site (site/) with zero external GitHub references, enterprise business-first positioning, and 9 comprehensive user manual guides.
    • Added pilot distribution and deployment documentation (docs/STRATEGY/ and docs/DEVOPS/).

0.3.1 — 2026-09-03 ​

  • Commercial Homepage & Manual Overhaul (Business-First, Zero-GitHub, Full i18n):
    • Zero-GitHub Clean Surface: Purged all GitHub repository links, social icons, and release pointers across the entire commercial portal, replacing them with official direct desktop application downloads on ambadesk.com.
    • Enterprise Business Target Alignment: Completely re-architected landing page value propositions and FAQ for non-technical enterprise users (CEOs, CFOs, Controllers, Media Agency Leads), focusing on 100% local privacy, zero-hallucination deterministic math, and ready-to-use business playbooks.
    • 4-Language Multi-Lingual Architecture: Full VitePress internationalization for English, Vietnamese (/vi/), Japanese (/ja/), and Korean (/ko/), translating the landing page and all 9 user manual guides and executive playbooks.
  • Template Naming & Plan Review UX Refinements:
    • Refined domain template labels and Vietnamese localization strings.
    • Formatted Rust codebase according to standard rustfmt guidelines.
    • Enhanced document viewer and plan referral card styling.

0.3.0 — 2026-09-03 ​

  • Milestone 2 — B2B Enterprise & Deterministic Accounting MCP Architecture:
    • Deterministic SQLite Analytical Engine: Built native accounting calculation tools (accounting_load_file, accounting_sql_query, accounting_reconcile_sheets) enabling 100% deterministic arithmetic aggregation, zero-mental-arithmetic guardrails, and automated invoice/bank reconciliation.
    • Persistent MCP Server Lifecycle Management: Configured SQLite storage (V008__mcp_servers.sql), auto-reconnection on application launch, and complete ToolsPanel management controls.
    • Unified "Job & Brain" Paradigm Across Full Lifecycle: Replaced legacy "Assigned Agent" dropdowns with domain project templates (executive-command-center, invoice-reconciliation, pnl-analysis, payroll-audit, media-planning-pitch) and hot-swappable cognitive brain models.
    • Cursor-Style Physical Plan Generation (workings/plans/): Auto-exports structured plans to plan_{slug}_{hash}.md, displays compact PlanReferralCard in chat, and provides dedicated ⚡ Build / Execute Plan action in the file viewer.
    • Streamlined Cognitive Modes & Zero Thought-Dumping Clutter: Mode-gated auto-export strictly to Plan mode, eliminating scratchpad clutter in Ask and Study modes.
    • Calculation Audit Trail: Real-time verified badges, SQL code copying, and returned row counts in the Activity Tray.

0.2.18 — 2026-09-03 ​

  • Context Prefetching & Heuristic Knowledge Distillation Hardening:
    • Enhanced context prefetch error handling and adapter robustness in Rust runtime.
    • Refined heuristic distillation tag generation and whitespace cleanup across multi-language prompts.
    • Fixed unused warning imports in updater and memory IPC commands.

0.2.17 — 2026-08-31 ​

  • Automated Cloudflare R2 Deployment Pipeline (deploy-r2):
    • Added automated deploy-r2 job in release workflows to sync release bundles, .sig signatures, and rewritten latest.json directly to Cloudflare R2 (https://r2.ambadesk.com/alpha/).
    • Optimized cache-control policies (no-cache for latest.json, 1-year immutable cache for binaries).
    • Added scripts/update-latest-json-r2-local.mjs for local asset URL rewriting.

0.2.16 — 2026-08-31 ​

  • Automated Cloudflare R2 Download URL Rewriting in latest.json:
    • Implemented scripts/rewrite-latest-json-r2.mjs to automatically rewrite asset download URLs in latest.json from GitHub releases to https://r2.ambadesk.com/alpha/<filename>.
    • Integrated into both release-windows-self-hosted.yml and release.yml workflows.

0.2.15 — 2026-08-31 ​

  • In-App Auto-Update Verification Release:
    • Incremented version for end-to-end testing of OTA in-app updater download, signature check, and SQLite WAL-safe restart workflow.

0.2.14 — 2026-08-31 ​

  • Dedicated R2 Alpha Updater Endpoint Integration:
    • Updated in-app auto-updater endpoint to https://r2.ambadesk.com/alpha/latest.json for high-availability CDN-accelerated OTA updates.

0.2.13 — 2026-08-30 ​

  • In-App Auto-Update Packaging Artifacts & Minisign Key Hardening:
    • Configured bundle.createUpdaterArtifacts: true in tauri.conf.json to generate compressed OTA update bundles (.tar.gz and .sig signatures).
    • Hardened private key password handling (TAURI_SIGNING_PRIVATE_KEY_PASSWORD) in release workflows.
    • Added .gitignore rule for public/private key pairs (*.key.pub).

0.2.12 — 2026-08-30 ​

  • Manual Deploy Workflow Dispatch Control:
    • Temporarily commented out automatic tag push triggers across release workflows.
    • Releases are dispatched manually on-demand from GitHub Actions UI to prevent unwanted quota consumption.

0.2.11 — 2026-08-30 ​

  • Windows Self-Hosted Toolchain & Git Bash Hardening:
    • Automatically locates and adds Git Bash (bash.exe) into GITHUB_PATH on on-premise Windows runners.
    • Standardized on actions-rust-lang/setup-rust-toolchain@v1 with explicit stable-x86_64-pc-windows-msvc target enforcement for Windows self-hosted builds.

0.2.10 — 2026-08-30 ​

  • Dedicated Standalone Self-Hosted Windows Release Workflow:
    • Separated self-hosted Windows packaging into a standalone workflow (.github/workflows/release-windows-self-hosted.yml) that bypasses GitHub-hosted runner quota limitations completely.
    • Runs directly on on-premise Windows runners (['self-hosted', 'Windows', 'X64']) with 0 GitHub Actions quota minutes consumed.

0.2.9 — 2026-08-30 ​

  • Self-Hosted Windows Runner Pipeline Integration:
    • Added support for dedicated self-hosted Windows runners (['self-hosted', 'Windows', 'X64']) alongside standard GitHub-hosted windows-latest runners.
    • Interactive platform selection allows dispatching dedicated builds directly to local/on-premise Windows runners while maintaining GitHub Actions standard runners as default for automated releases.

0.2.8 — 2026-08-30 ​

  • In-App Auto-Update & Over-The-Air (OTA) Release Architecture (ADR-019):

    • Self-Updating Without Reinstallation: Desktop app can now check, download, and install updates in-place without requiring the user to re-download .dmg, .exe, or installer packages manually.
    • Cryptographic Minisign Verification: Every update payload is cryptographically validated using Ed25519 signatures before execution, safeguarding against unauthorized or tampered binaries.
    • Safe Database Restart: Implemented atomic SQLite WAL checkpoint flushing (PRAGMA wal_checkpoint(TRUNCATE);) before app relaunch to ensure 0 database corruption. User projects (~/AMBA/Projects), local databases, and keychain credentials are 100% preserved across updates.
    • Interactive Update Modal (UpdateModal.vue): Displays version change badges, release notes preview, and real-time streaming download progress bar with byte counts and percentage.
    • Settings Integration: Added manual "Check for Updates" button, last checked timestamp, and auto-check toggle on startup under Settings > Advanced.
    • Complete Bilingual Localization: Fully translated in English and Vietnamese.
    • 100% Verification: 144 Rust unit tests passing and 94 Vitest tests passing with 0 clippy warnings.
  • High-Fidelity Excel & Multi-Sheet Preview Engine Hardening:

    • Shared OpenXML Relationship Resolution: Unified read_project_spreadsheet, read_project_docx, and read_project_presentation in commands/projects/readers.rs to reuse the battle-tested shared context adapter engine (parse_xlsx_workbook_from_zip, parse_legacy_spreadsheet_file).
    • Fixed Sheet Mismatch in Preview: Resolved the critical issue where workbook.xml.rels relationship IDs (r:id) were ignored by the preview command, which previously led to sheets being displayed out-of-order and mapped to incorrect worksheet XML files.
    • Accurate Cell Coordinates & Blank Gap Handling: Replaced split-based cell parsing with exact r="A1" coordinate positioning, eliminating column left-shifts and alignment corruption.
    • Support for Multi-Format Spreadsheets: Extended in-app preview support to .xlsx, .xlsm, .xltx, .xls, .xlsb, .ods, .tsv, and .csv.
    • 100% Verification: All 136 Rust tests and 84 Vitest tests passing with 0 clippy warnings.
  • Master Release Plan Execution & Modular Architecture Hardening (Sprint 37):

    • Comprehensive Rust Runtime Modularization (Wave 1):

      • Split runtime/execution.rs (3478 lines) into runtime/execution/ (runner.rs, planning.rs, modes.rs, tools.rs, callbacks.rs, streaming.rs, tests.rs).
      • Split storage/db.rs (2492 lines) into storage/db/ (mod.rs, migrations.rs, agents.rs, models.rs, conversations.rs, runs.rs, projects.rs, memory.rs, policy.rs, tests.rs).
      • Split context/adapters/shared.rs into context/adapters/shared/ (tables.rs, xlsx_zip.rs, docx_zip.rs, pptx_zip.rs, tests.rs).
      • Split tools/pdf_compiler.rs into tools/pdf_compiler/ (parser.rs, fonts.rs, rendering.rs, tests.rs).
      • Split commands/projects.rs into commands/projects/ (crud.rs, files.rs, readers.rs, watchers.rs, export.rs, tests.rs).
    • Ask Mode Knowledge Ingestion & Web Search Enhancement:

      • Enabled web.search, web.fetch, and knowledge.search in Ask mode for general information retrieval.
      • Added interactive "📖 Study & Ingest Knowledge" button on assistant messages in ProjectChat.vue to easily transition insightful chat responses into the project's permanent knowledge base.
    • Release Governance & Open Source Standards (Wave 2 & Wave 3):

      • Fixed duplicate ADR numbering by renumbering workspace default directory ADR to ADR-018.
      • Added CONTRIBUTING.md and CODE_OF_CONDUCT.md at repository root.
      • Created GitHub issue templates (bug_report.md, feature_request.md, security.md) and standard pull request template PULL_REQUEST_TEMPLATE.md.
      • Created root SECURITY.md and completed full audit report in docs/SECURITY-AUDIT.md.
    • Full Test Suite & Quality Verification: All 135 Rust unit tests and 84 Vitest tests passing with 0 warnings on cargo clippy --all-targets -- -D warnings.

    • Replaced 3-Mode System: Upgraded the previous Analyze / Draft / Finalize system into 4 distinct cognitive modes tailored to professional knowledge workflows:

      • 🗣️ Ask Mode (ask): Conversational Q&A, brainstorming, concept explanation. Zero filesystem side effects; file writes, web tools, and knowledge storage are strictly blocked.
      • 📖 Study Mode (study): Deep research, reasoning, document inspection, and knowledge discovery from all available sources. Autonomously calls knowledge.store to ingest facts and domain concepts into the project's long-term memory. Allows writing notes and summaries to workings/.
      • 📋 Plan Mode (plan): Analyzes requirements and produces structured <plan> blocks with numbered steps and deliverable definitions. Writes plan artefacts to workings/plan.md. Direct writes to output/ and PDF compilation are blocked.
      • ⚡ Exec Mode (exec): Follows the approved plan, reads source files (input/) and working papers (workings/), produces intermediate artifacts, and writes final approved deliverables into output/. Full write access, PDF generation, and policy-gated shell enabled.
    • Strict Rust Runtime Permission Matrix (runtime/execution.rs): Hard engine-level guards block disallowed tool calls per mode before execution, with explanatory violation messages guiding the model to the appropriate workflow.

    • Backward-Compatible Migration: Automatic deserialization and localStorage migration for legacy mode strings ("analyze" → Ask, "draft" → Plan, "finalize" → Exec).

    • Initial Mode Selection Wizard (ProjectCreateModal.vue): Users choose their preferred initial agent mode when creating a new project, with persistent last-used mode per project thereafter.

    • Execute Plan UI Banner & 4-Button Toolbar (ProjectChat.vue): Replaced the 3-button segmented controller with 4 mode buttons and updated the confirmation banner to "Execute Plan" when structured plans or workings files are ready.

    • Full Bilingual Localization & ADR-012 Update: Added comprehensive English and Vietnamese translations and updated ADR-012. All 134 Rust tests and 84 Vitest tests passing.

  • Session Clean Up & Semantic Memory Reset Architecture (Sprint 35):

    • Granular Session & Memory Management: Added a dedicated Clean Up Session & Memory modal (ResetSessionModal.vue) across Project Studio and Agent Studio for clean, isolated prompt re-testing.
    • Customizable Reset Granularity: Users and developers can choose between:
      • 💬 Clear Chat Messages: Wipes conversational message history and tool activity in the active session.
      • 🧠 Wipe Project Semantic Memory: Erases all auto-stored RAG semantic memories attached to the project (with live entry count preview) to prevent the agent from recalling stale prior context or old instructions.
      • ➕ Start New Clean Session: Creates and switches to a fresh new session in one click.
    • Memory Panel Clean Up Tools: Added 1-click Clear All Memories in MemoryPanel.vue to wipe long-term knowledge across all agents/projects.
    • Backend Storage & IPC Commands: Implemented clear_project_memories, clear_agent_memories, clear_all_memories, count_project_memories, and reset_session with atomic SQLite execution and 100% test coverage.
    • Full Bilingual Localization: Added complete English and Vietnamese translations for all reset actions, modals, and notifications.
  • Interactive Agent Clarification & Direction Confirmation (ask_user Feature — Sprint 34):

    • Cursor / Antigravity Style Clarification: AI agents can now pause and ask the user structured multiple-choice questions with recommended directions and custom write-ins whenever requirements have multiple paths, ambiguous parameters, or high-impact decisions.
    • Non-Blocking Runtime Suspension: Execution loop non-blockingly suspends on ask_user / ask_question, transitions RunStatus to awaiting_input, and emits run:question IPC event over an async tokio::sync::oneshot channel without occupying background execution threads.
    • Inline Interactive Question Card (InteractiveQuestionCard.vue):
      • Displays bold question prompt and background context block.
      • Multiple-choice option cards with ⭐ Recommended badges, radio/checkbox selectors, and detailed option descriptions.
      • Custom write-in input field for freeform guidance.
      • "Confirm & Continue" button to resolve question and seamlessly resume the agent's ReAct execution loop.
      • Post-submission freeze state showing a neat confirmation checkmark and user note summary.
    • Comprehensive Multi-Language & Test Coverage: Added English and Vietnamese localizations, 3 new Rust unit tests (129 total), 5 new Vitest unit tests (74 total), and strict TypeScript typechecking.
  • Comprehensive Office Document & Data Parsing Architecture (Sprint 33):

    • Zero-Copy Streaming SAX XML Engine: Replaced fragile string splitting across all OpenXML parsers with high-performance quick-xml event loops.
    • High-Accuracy Spreadsheet Engine (.xlsx, .xlsm, .xltx, .xls, .xlsb, .ods):
      • Full xl/sharedStrings.xml parser supporting rich text <r><t> and standard <si><t>.
      • Merged cell rectangular expansion (<mergeCells>) propagating top-left cell values across merge ranges.
      • Number format resolution (xl/styles.xml + standard & custom <numFmts>) for currency ($#,##0.00, ₫, €), percentages (0.0%, 0.00%), dates, times, comma integers, and decimals.
      • Multi-sheet discovery and table extraction with configurable row limits.
      • Pure-Rust legacy spreadsheet parsing (.xls BIFF8/OLE2, .ods, .xlsb) via calamine.
    • Structured Word Document Engine (.docx, .docm, .dotx, .doc):
      • Semantic structure extraction with Markdown headings (#, ##, ###), nested bullet/numbered lists (-), bold (**), and italics (*).
      • Table matrix extraction and Markdown table formatting with pipe escaping.
      • Ancillary text stream recovery: headers (word/header*.xml), footers (word/footer*.xml), and footnotes (word/footnotes.xml).
      • Legacy Word 97-2003 binary stream parsing (.doc) via cfb OLE2 reader.
    • Presentation Engine (.pptx, .pptm, .potx, .ppt):
      • Slide sequencing and structure extraction (ppt/presentation.xml, ppt/slides/slide*.xml).
      • Slide titles, body paragraphs, bullet points, and embedded table matrices.
      • Speaker notes extraction (ppt/notesSlides/notesSlide*.xml).
      • Legacy PowerPoint binary stream parsing (.ppt) via cfb.
    • Enhanced RFC-4180 CSV / TSV Engine (.csv, .tsv, .tab):
      • Multi-line quoted string support with escaped quotes ("").
      • Automatic delimiter detection (,, ;, \t).
    • Enhanced PDF Context Ingestion (.pdf):
      • Tabular line alignment detection heuristics with Markdown table formatting.
      • Page boundary annotations (--- Page N ---) and scanned image detection fallback.
    • Unified Agent Tools & UI Previews:
      • filesystem_read tool routes all office formats to appropriate structured context adapters.
      • UI preview commands (read_project_spreadsheet, read_project_docx, read_project_pptx) deduplicated to use shared parsing engine.
    • 126 Passing Rust Unit Tests & 69 Passing Vitest Tests: 100% clean test passes with 0 compiler warnings.
  • Live Loop Streaming & Expandable Activity/Reasoning Tray (Cursor/Antigravity Style):

    • Real-Time Step Activity Stream: Upgraded execution loop to stream intermediate model thoughts (<thought>...</thought>) and live tool invocations (filesystem_read, filesystem_write, web_search, mcp, etc.) into an interactive timeline instead of wiping stream buffers.
    • Expandable Activity Tray (AgentActivityTray.vue): Built a sleek, collapsible activity tray inside the assistant chat bubble:
      • Live pulsing spinner and step counter during execution (Step 2/8: Reading source files...).
      • Collapsed summary badge upon completion (⚡ 3 actions executed • 4 steps • Thought for 4.2s).
      • Expandable timeline of steps with full thought inspection, tool action cards with status badges (Success, Running, Error), and 1-click syntax-highlighted JSON payload viewer.
      • 1-Click Copy full execution activity log.
    • Clean Deliverable Isolation: Main chat bubble renders only final clean Markdown deliverables without leaking raw XML tags or intermediate tool dumps.
    • Historical Activity Persistence: Preserved structured step activities in SQLite messages.metadata["steps"], ensuring past conversations reload the full activity timeline across app restarts.
    • ADR-017: Documented architecture and design decisions in docs/DECISIONS/ADR-017-live-loop-streaming-and-expandable-activity-tray.md.
  • Token & Context Management Architecture (Sprint 32):

    • Database Migration V007: Added runs.project_id, model_pricing seed table with 11 default frontier models across OpenAI, Anthropic, and Google, and project budget threshold columns (token_budget_warning_threshold, cost_budget_usd_threshold).
    • Dynamic Real-Time Pricing Engine: Rust runtime computes accurate USD costs per run and per project dynamically from the model_pricing database table.
    • Per-Project Token Isolation & Analytics: Added get_project_token_analytics, list_model_pricing, update_model_pricing, and set_project_budget_thresholds Tauri IPC commands.
    • Context Budget Breakdown: Added calculate_context_breakdown and get_context_breakdown calculating real-time token saturation across System instructions, User prompt, Project files, Conversation history, and RAG semantic memory.
    • Interactive In-Studio Context Meter: Added ContextMeter.vue to ProjectHeader.vue displaying live context window utilization and project cumulative cost badges.
    • Context Inspector Modal: Built ContextInspectorModal.vue featuring a multi-segment progress bar and token usage breakdown by layer with available headroom metrics.
    • Activity Panel Project Scoping & Quota Alerts: Enhanced ActivityPanel.vue with a Project Filter dropdown and warning alert banners when project token or cost thresholds are exceeded.
    • 116 Passing Rust Tests & 62 Vitest Tests: Verified full test suite with 100% clean passes.
  • Harness Architecture Hardening & Quality Audit (Sprint 31):

    • Comprehensive Multi-Layer Audit: Verified 100% architectural conformance across Rust ReAct execution engine, 3-zone harness file management (input/, workings/, output/), stagnation detection, autonomous nudging, and sandboxing.
    • Unified Mode Routing Guard: Extended Rust runtime routing intercept to enforce strict output/ write blocking on pdf_generate in Draft mode alongside filesystem_write.
    • Standalone Execution Scope: Added projectId to StartRunRequest allowing project sandbox scoping for direct API/CLI execution without pre-existing conversations.
    • Type & Navigation Fixes: Fixed HistoryView.vue routing to display ActivityPanel.vue, and added projectId to Conversation domain model.
    • 114 Passing Rust Tests: Added new test fixture for pdf_generate draft mode output routing.
  • OpenAI Reasoning & Modern Models Compatibility (max_completion_tokens):

    • Replaced legacy max_tokens with standard max_completion_tokens across all OpenAI Chat Completions requests.
    • Added native support for OpenAI reasoning models (o1, o3-mini, o1-mini, o1-preview):
      • System prompts automatically mapped to the developer role.
      • Omitted custom temperature parameters for reasoning models to eliminate 400 Bad Request unsupported_parameter errors.
  • Dynamic Provider Model Discovery & Custom Model Creation:

    • Added live GET https://api.anthropic.com/v1/models fetching in fetch_provider_models.
    • Added custom model ID creation input in Settings for all providers.

0.2.7 — 2026-08-24 ​

  • Apple Developer ID Code Signing & Automatic Notarization Pipeline:

    • Integrated full Apple Developer ID code signing into GitHub Actions workflow (.github/workflows/release.yml) for macOS Apple Silicon (aarch64) and Intel (x86_64).
    • Automated Apple Notary Service (notarytool) submission and ticket stapling, eliminating Gatekeeper quarantine blocks and "damaged app" warnings on modern macOS (Sequoia, Sonoma, Ventura).
    • Configured secure keychain management in CI for .p12 certificates and Apple Team credentials.
  • Linux Packaging Dependency Fix & CI Speed Boost:

    • Updated Debian packaging dependencies in tauri.conf.json to use modern libayatana-appindicator3-1.
    • Integrated swatinem/rust-cache@v2 into .github/workflows/release.yml with per-target workspace caching, reducing Rust compilation times on CI by ~70-80%.
    • Added pnpm store caching (cache: 'pnpm') in GitHub Actions to accelerate Node.js dependency installations.
    • Standardized NSIS Windows installer languages (English, Vietnamese).
  • Standardized Universal snake_case Tool Naming Architecture:

    • Replaced dot-notation tool names with standard snake_case (filesystem_read, filesystem_write, filesystem_glob, pdf_read, pdf_generate, shell_execute, web_search, web_fetch, math_calculate, system_time, system_info, knowledge_store, knowledge_search).

    • 100% universal compatibility across all LLM providers (Anthropic Claude ^[a-zA-Z0-9_-]{1,128}$, Google Gemini ^[a-zA-Z0-9_]+$, OpenAI, Ollama, DeepSeek).

    • Built-in bidirectional alias fallback in ToolRegistry and PolicyEngine ensuring seamless backward compatibility for legacy packages and prompts.

    • Updated package validator, agent manifests (packages/examples/), and system prompt planning instructions.

    • Hard 20MB Safety Guard:

      • Hard preview limits (MAX_IN_APP_PREVIEW_SIZE_BYTES = 20MB) enforced in all Rust commands and frontend router to protect system memory and prevent UI freezes when users encounter multi-hundred-megabyte or gigabyte files.
      • Large files display a dedicated 1-click fallback card to launch in the OS default desktop application or show containing folder.
    • Word Document Viewer (WordDocumentViewer.vue):

      • Formatted document viewer for .docx and .doc files extracting paragraphs, headings (H1-H3), and tables from OpenXML word/document.xml.
      • Document statistics (word count, paragraph count, reading time) with 1-click copy and open in Microsoft Word.
    • PowerPoint Presentation Viewer (PresentationViewer.vue):

      • Multi-slide deck viewer for .pptx and .ppt with slide thumbnails sidebar, 16:9 canvas layout, slide navigation controls, and full outline export.
    • Interactive Spreadsheet Viewer (SpreadsheetViewer.vue):

      • Multi-sheet workbook navigation (.xlsx, .xls, .csv, .tsv), real-time keyword filtering, column sorting, pagination, and copy as Markdown table / CSV.

0.2.3 — 2026-08-22 ​

  • Smart Multi-Platform Matrix Dispatch & Selective Re-run (.github/workflows/release.yml)

    • Added interactive workflow_dispatch platform selector: 1-click build all 4 targets simultaneously (all) or trigger individual OS rebuilds (windows, macos-apple-silicon, macos-intel, linux) on demand.
    • Zero-second skip optimization: skipped platforms exit immediately in 0 seconds without consuming GitHub Actions runner minutes.
    • Native fail-fast: false resilience: successful OS installer artifacts remain preserved and uploaded to GitHub Draft Releases even if one platform encounters a transient failure.
  • WebView Print PDF Export (ADR-016)

    • User-facing PDF export now uses the browser's native print pipeline via an isolated print window, guaranteeing visual fidelity with the Markdown preview. Preview and PDF share the same parser (MarkdownMessage.vue), CSS, fonts, and layout engine.
    • Typed PdfOptions model: page size (A4, A5, Letter, Legal), orientation (portrait/landscape), configurable margins, scale, print backgrounds, headers/footers.
    • Print CSS with standard @page rules, page-break control for headings/code/tables, and proper print typography.
    • Comprehensive regression test fixture suite: 18 Markdown fixtures covering basic, headings, lists, tables, code, blockquotes, links, long documents, images, math, edge cases, and internationalization (Vietnamese, Japanese, Chinese, Korean, Arabic, emoji).
    • Rust PdfExporter types with platform abstraction (pdf_export.rs): structured errors, cross-platform capability info, serde-compatible options.
    • 15 new Rust tests (fixture validation + PDF compilation) and 11 new Vitest tests.
    • The Rust printpdf + cosmic-text compiler remains available for the agent API (pdf.generate), where no WebView is available.
    • Cross-platform: macOS uses native WKWebView.printOperation on the isolated print window (window.print() is a no-op in WKWebView); Windows uses WebView2 window.print() ("Microsoft Print to PDF"); Linux uses WebKitGTK window.print() ("Print to File"). PDFs are not pixel-identical across platforms because the underlying WebView engines differ.
    • The print window is a scrollable preview with Print / Save PDF and Close. It does not auto-print. Payload is delivered via Tauri events (print-ready / print-document), not sessionStorage.
    • Known limitations: page numbering not supported via CSS (relies on the browser's native print header/footer); the print dialog requires user interaction.
  • Multi-Platform OS Support & Automated Release Pipeline (ADR-015)

    • Windows 10/11 Packaging: Configured user-friendly NSIS installer (.exe) with multi-language setup (English & Vietnamese) and enterprise WiX (.msi) deployment target.
    • Cross-Platform Release Automation (.github/workflows/release.yml): Automated 4-way CI/CD build matrix bundling native binaries for Windows x64, macOS (Apple Silicon & Intel), and Linux (.AppImage, .deb).
    • Platform Architecture Guide (docs/ARCHITECTURE/platforms.md): Comprehensive specifications covering runtime path normalization, Credential Vault integration across OSes, and local build instructions.
  • Native vector PDF compiler (ADR-014)

    • Export PDF and pdf.generate compile markdown to a real vector PDF: selectable Unicode text, embedded subset fonts, tables, code, lists, quotes, links, bookmarks, and local images.
    • WKWebView print-to-PDF was withdrawn after it hung the app and wrote huge broken files. html2canvas snapshots are no longer on the export path.
    • Vietnamese, Japanese, and other OS-available scripts use bundled Noto Sans plus system fonts. CJK megafonts are still not bundled (ADR-009).
    • If the compiler fails, export falls back to the cosmic-text JPEG rasterizer.
    • Community in-process crates were measured and not adopted: markdown2pdf dropped Japanese (macOS .ttc fonts); Typst passed Unicode but added ~39 MB to a stripped release binary.
  • Interactive HTML Webpage & Native PDF In-App Document Previews (ADR-013)

    • Interactive HTML Viewer (HtmlDocumentViewer.vue):
      • Embedded sandboxed webpage rendering for .html and .htm deliverables.
      • Responsive Viewport Toggles: Desktop (100%), Tablet (768px), and Mobile (375px) device preview frames.
      • Dual View Modes: Segmented toggle between Webpage View (Rendered iframe) and Source Code (Raw HTML with syntax styling).
      • Interactive Controls: Reload frame, 1-click Copy HTML, Open in Default Browser, and Maximize/Fullscreen mode.
    • Native Lightweight PDF Viewer (PdfDocumentViewer.vue):
      • Directly embeds PDF deliverables into Project Studio via native webview blob rendering with zero external library overhead.
      • Full native PDF feature support: zoom, in-document search, page navigation, print, and download.
    • Binary File Preview API (commands/projects.rs, services/api/projects.ts):
      • Added read_project_file_base64 Tauri IPC command for fast binary streaming of PDF and document assets.
  • Unicode PDF export for markdown deliverables

    • Historical note: preview capture previously used html2canvas + per-script system fonts; agent pdf.generate previously rasterized via cosmic-text. Both are superseded as the primary path by the vector compiler (ADR-014). The rasterizer remains a fallback.
    • Known limitation: machines without CJK (or Arabic/Thai) system fonts may still show missing glyphs for those scripts; AMBA does not bundle CJK megafonts (ADR-009).
  • Project-Scoped Semantic Memory Isolation & Cascade Deletion

    • Two-Tier Scoped Memory Engine (runtime/memory.rs, runtime/rag.rs, runtime/execution.rs):
      • Project-Scoped Memory (project:{project_id}:*): Interaction history and RAG memories generated within a project are tagged with projectId. RAG retrieval within a project only queries the active project's memories plus global user knowledge, strictly isolating projects and preventing cross-project context bleeding.
      • Global Memory (global:*): Non-project conversations only retrieve global knowledge, preventing project scratchpad data from polluting general workspace chats.
    • Automatic Memory Cascade Deletion (storage/db.rs, commands/projects.rs):
      • Deleting a project automatically purges all semantic memory entries, embeddings, and interaction logs belonging to that project (DELETE FROM semantic_memory WHERE key LIKE 'project:' || ?1 || ':%' OR json_extract(value_json, '$.projectId') = ?1).
  • Native In-App Markdown Document Viewer & Reader Mode (ADR-013)

    • Document-Grade Markdown Viewer (MarkdownDocumentViewer.vue):
      • High-quality document typography for reading agent-generated reports, meeting notes, and analysis documents directly inside Project Studio.
      • Formats headings (H1-H4), tables, task lists, blockquotes, and code blocks with 1-click copy.
      • Reading Controls: Toggle between Document View and Raw Source, dynamic Table of Contents (TOC) navigation, word count & reading time calculation, 1-click Copy Document, and Maximize/Fullscreen mode.
    • Inline Deliverable Integration (DeliverablePreview.vue):
      • Automatically detects .md, .markdown, and .txt files in input/, workings/, and output/ and renders the rich viewer inline instead of requiring external OS software.
    • Backend Safe File Content API (commands/projects.rs):
      • Added read_project_file_content Tauri command with canonical path traversal validation and 10MB memory safety limits.
  • Dual-Option Project Deletion Modal & Physical Disk Removal

    • Dedicated Project Deletion Dialog (ProjectDeleteModal.vue):
      • Replaced browser confirm() with a custom modal asking the user to choose their deletion method.
      • Option 1 (App-Only / Safe): Removes the project tracking from AMBA while preserving all physical files on disk.
      • Option 2 (Full Physical Deletion / Danger): Completely deletes the project from AMBA and permanently removes the project folder and all contained files on disk.
    • Backend Disk Cleanup Guard (commands/projects.rs):
      • delete_project(project_id, delete_files: bool) safely resolves the directory path and performs std::fs::remove_dir_all with guard checks against deleting system roots or user home directory.
  • Strict Agent Execution Modes & Two-Stage Output Finalization Gate (ADR-012)

    • Three-Stage Agent Workflow Modes (AgentMode):
      • analyze (Analyze Only): Pure chat exploration & Q&A. Writing files is forbidden at runtime.
      • draft (Draft & Workings — Default): Agent prepares intermediate spreadsheets, calculations, and drafts in workings/. Writing directly to output/ is blocked with hard runtime enforcement.
      • finalize (Approve & Finalize): Agent inspects working drafts, automatically receives all workings/ files as context, and generates polished final deliverables in output/.
    • Project Studio Mode Controller & 1-Click Finalization (ProjectChat.vue):
      • Mode segmented button group above chat input with project-level persistence.
      • Automatic "Working Drafts Ready for Review" banner with 1-click "Approve & Finalize" action button when files are discovered in workings/.
    • Hard Enforcement at Rust Runtime (runtime/execution.rs):
      • Intercepts filesystem.write tool requests before dispatch and returns actionable mode-routing error feedback to guide the LLM.
  • Central Default Workspace Directory & 1-Click Project Scaffolding (ADR-018)

    • Default Workspace Root (~/AMBA/Projects / ~/Documents/AMBA Projects):
      • Centralized project root managed in SQLite and configurable via Settings (SettingsPanel.vue).
      • Added Tauri commands get_default_workspace_dir and set_default_workspace_dir.
    • Dual-Mode Project Creation Wizard (ProjectCreateModal.vue):
      • Mode 1 (Auto Workspace — Default): Automatically derives sanitized folder names from project title (<WorkspaceRoot>/<Project-Name>) with live path preview and creates directories automatically on submit.
      • Mode 2 (Custom Location): Power-users can link existing Git repositories, external hard drives, or custom folders on disk.
    • Workspace Settings in Advanced Tab (SettingsPanel.vue):
      • Displays current workspace directory with 1-click "Change Location…" dialog and "Open Folder" OS launcher.
  • Project File Management & Real-time Auto-Sync with VS Code-Grade Drag-and-Drop

    • Real-time Project File Watcher (notify = "6.1", runtime/watcher.rs):
      • Automatic non-polling filesystem watcher detects file creation, modification, deletion, and renaming across all project directories (input/, workings/, output/).
      • Debounces bursts (300ms window), synchronizes SQLite records, and broadcasts project:files-updated Tauri events to all active windows.
      • Added live "LIVE" sync indicator badge in the Harness Explorer header.
    • VS Code-Grade Hierarchical File Explorer (FileTreeItem.vue, buildFileTree):
      • Replaced flat lists with deep nested folder trees supporting arbitrary subdirectories.
      • Expandable/collapsible directories with icon states and indentation guidelines.
      • Quick action toolbars on hover: + New File, + New Folder, Rename, Delete, Open in OS.
    • Full Drag & Drop Capabilities:
      • External OS Drop: Drag files and folders directly from Finder / File Explorer / Desktop into specific zones or nested directory nodes.
      • Internal Reorganization: Drag files/folders between zones or into subfolders to move them on disk (move_project_path).
      • Drag-to-Chat Context Injection: Drag any file node from the explorer tree directly into the Chat prompt area to automatically insert context @<relative_path> tags.
    • Comprehensive File Operations API:
      • Added Tauri commands create_project_file, create_project_folder, rename_project_path, delete_project_path, move_project_path, and import_project_files with strict path traversal validation.
  • Security & Permission Matrix — Granular Capability Scopes (ADR-010)

    • Orthogonal Permission Matrix: Deprecated linear hierarchical scope levels in favor of 4 independent capability dimensions:
      • Filesystem Access Scope: Project Sandbox Only (strictly restricted to input/, workings/, output/) vs. Full Local Disk.
      • Network & Web Search (allow_internet: bool): Independent toggle allowing the Agent to safely search the web and fetch online documentation from within the sandbox without requiring full OS privileges.
      • Terminal / Shell Execution (allow_shell: bool): Independent toggle gating shell.execute commands (default disabled with security alerts).
      • External MCP Plugins (allow_mcp: bool): Independent toggle gating external Model Context Protocol tool invocations.
    • Interactive Security UI (ProjectHeader.vue & ProjectCreateModal.vue): Added quick security capability badge chips in the Project Studio header and an on-the-fly Security & Capabilities modal for toggling individual permissions during active sessions.
  • Phase 8: Production Polish & Performance Scale — Sprint 29: Advanced Desktop UI & Keyboard Navigation

    • Command Palette (CommandPalette.vue): Power-user universal search triggered by Cmd+K / Ctrl+K. Instant fuzzy search across project harnesses, pages, quick actions (switch theme, collapse sidebar, create project, export), and direct keyboard navigation with Arrow keys and Enter.
    • Global Keyboard Shortcuts (useKeyboardShortcuts.ts): Fast desktop shortcuts for Cmd+K (Search & Command Palette), Cmd+/ (Toggle Sidebar), Cmd+N (New Project/Session), and Esc (Modal dismiss).
    • Drag-and-Drop File Context Injection (ProjectChat.vue): Dragging external files over the Project Studio Chat triggers a visual drop zone overlay, automatically injecting the attached files into the prompt query.
    • Native Desktop Notifications (services/notification.ts): Dispatches system desktop notifications when long-running agent workflows or file parsing tasks finish in the background.
  • Phase 8: Production Polish & Performance Scale — Sprint 28: Extension & MCP Skill Hub (1-Click Install)

    • Curated MCP Extension Marketplace (ToolsPanel.vue, tools/marketplace.rs): 1-click catalog featuring certified extensions (Python Data Engine, GitHub MCP, PostgreSQL Explorer, Puppeteer Web Browser, SQLite Inspector).
    • Category Filtering & Search: Instant filtering across Data & Analytics, Developer Tools, Databases, and Web Automation.
    • Pre-Configured Transports: Auto-fills command executable, CLI args, default endpoints, and provides secure secret inputs for API tokens.
  • Phase 8: Production Polish & Performance Scale — Sprint 27: Export, Import & Database Backup

    • 1-Click Conversation Export (ProjectChat.vue, commands/backup.rs): Export complete conversation histories, tool invocation records, and system context into structured GitHub Flavored Markdown (.md) or schema-compliant .json.
    • Full Workspace SQLite Database Online Backup & Restore (commands/backup.rs, SettingsPanel.vue): Atomic live database backups using rusqlite::backup without stopping the runtime, with validation safeguards during restore.
    • ChatGPT Conversation Import (commands/backup.rs, SettingsPanel.vue): Seamlessly import conversations.json from ChatGPT data archives into AMBA workspace sessions.
  • Phase 8: Production Polish & Performance Scale — Sprint 26: Performance & Caching

    • SQLite WAL Mode & High-Throughput Pragmas (storage/db.rs, V004__caches.sql): Enabled PRAGMA journal_mode = WAL, synchronous = NORMAL, and busy_timeout = 5000 providing 5x–10x concurrent read/write throughput and eliminating database locking during intensive streaming.
    • Document Parsing Hash Cache (context/engine.rs): High-performance Sha256-based document caching (document_cache table) ensures that unchanged PDFs, spreadsheets, and Word documents load instantly (<1ms) without repeated parsing and decompression overhead.
    • Deterministic Model Response Caching (runtime/cache.rs): Automatic prompt-hash response cache (response_cache table) for low-temperature runs (<= 0.1), eliminating redundant API requests and token expenditures for repetitive tasks.
    • Frontend Chat Virtualization & DOM Containment: Applied content-visibility: auto and contain-intrinsic-size to chat messages in ProjectChat.vue and AgentWorkspace.vue for silky-smooth 60fps scrolling across 1000+ turn conversation histories.
  • Phase 8: Production Polish & Performance Scale — Sprint 25: Robust Error Handling & Retry Engine

    • Provider Exponential Backoff & Jitter (providers/retry.rs): Automatic retry loop with configurable exponential backoff (base_delay * 2^attempt + jitter) for handling HTTP 429 rate limits and transient network disconnects without user interruption.
    • Granular Error Classification (classify_error): Accurately differentiates between retryable transient errors (429, 500/502/503/504, connection timeouts) and fatal client/auth issues (401, 403) to prevent wasteful retries.
    • Automatic Secondary Model Fallback: When an upstream provider suffers a persistent outage or quota limit, the execution engine seamlessly degrades to the agent's secondary preferred model (e.g. falling back from GPT-4o to Claude 3.5 Sonnet or Gemini 2.0 Flash) from agent.model_preferences.
    • Live UI Diagnostics & Retry Telemetry:
      • Emits real-time RunEventType::RetryAttempt and RunEventType::ModelFallback events.
      • Added retry countdown badge ("Rate limit detected. Retrying in 2s (Attempt 1/3)...") and prominent Model Fallback notification banners in ProjectChat.vue and AgentWorkspace.vue.
  • Phase 7: Autonomous Reasoning & Extended Memory — Sprint 24: Planning & ReAct Reasoning Loop

    • Dynamic Plan Inspector UI (PlanInspector.vue): Embedded plan tracker widget rendered in ProjectChat.vue. Displays current goal, progress percentage bar, dynamic step status checklist (pending, in_progress with spinner, completed, failed), and expandable Thought reasoning drawers.
    • ReAct Reasoning Protocol (runtime/agent.rs & runtime/execution.rs): Integrated step-by-step planning instructions into system prompt. The agent decomposes complex tasks into <plan> blocks with granular <step> items and <thought> reflections.
    • Live Plan Telemetry (RunEventType::PlanUpdate): Execution engine automatically parses XML plan structures from model responses and emits real-time plan_update events for live UI progress updates.
    • Self-Correction on Tool Errors: Agents observe tool failure observations and update their plans to test alternative approaches or self-correct parameters.
  • Phase 7: Autonomous Reasoning & Extended Memory — Sprint 23.5: Project Harness Paradigm & 3-Column Studio UI (ADR-008)

    • Project Harness Paradigm: Transitioned AMBA from session-centric chat into a project-based local harness. Every project encapsulates a dedicated local directory with three standard subdirectories:
      • input/ (Read-only data context: attendance sheets, spreadsheets, raw PDFs, invoices).
      • workings/ (Working Papers & Drafts: calculations, versioned spreadsheets, drafts, intermediate data; backwards-compatible with legacy temp/).
      • output/ (Deliverables: finalized payroll spreadsheets, generated summary reports, export archives).
    • 3-Column Project Studio UI (ProjectStudio.vue):
      • Harness File Explorer (Left Column): Real-time tree view of input/, workings/, and output/ directories, file size metrics, file type icons (Excel, Word, PDF, CSV, JSON), and 1-click OS open.
      • Project Chat & Execution (Middle Column): Project-scoped conversation history, auto-injected input files context, live tool execution telemetry, and goal/plan banners.
      • Deliverable Preview (Right Column): Dedicated inspector for previewing generated files, quick overview of project deliverables, and 1-click launch in default OS apps.
    • Projects Dashboard & Creation Wizard (ProjectListView.vue, ProjectCreateModal.vue):
      • Filterable projects grid by template (Payroll, Financial Analysis, Document Analysis, Custom).
      • 3-step project setup wizard (Template & Metadata → Assigned Agent & Model → Local Directory Picker with auto-scaffolding).
    • Tauri IPC Endpoints & Database (commands/projects.rs, storage/migrations/V002__projects.sql): 11 new commands for project lifecycle, directory scaffolding, filesystem sync, and project-scoped sessions.
  • Phase 7: Autonomous Reasoning & Extended Memory — Sprint 23: Explicit Memory Tools & Memory Inspector UI

    • Memory Inspector UI (/memory / MemoryPanel.vue): Full-featured dedicated interface for browsing, inspecting, editing, creating, and deleting long-term semantic memories. Includes live semantic similarity vector search with threshold filtering, similarity match score badges, metadata tagging, and raw JSON/Markdown preview.
    • Explicit Agent Memory Tools (tools/knowledge.rs):
      • knowledge.store: Native tool allowing autonomous agents to self-record important facts, preferences, guidelines, and entity details into long-term vector storage.
      • knowledge.search: Native tool enabling agents to actively query their semantic knowledge base by natural language query with custom score thresholds.
    • Memory Management IPC Endpoints (commands/memory.rs): list_memories, upsert_memory, delete_memory, search_memories.
    • Domain Model & Seeding (models/mod.rs, storage/seed.rs): Added MemoryEntry, ScoredMemoryEntry, UpsertMemoryRequest, and registered knowledge tools & permissions for assistant-agent and research-agent.
  • Phase 7: Autonomous Reasoning & Extended Memory — Sprint 22: RAG Memory Auto-Injection & Semantic Recall

    • RAG Pre-Prompt Memory Injection (runtime/rag.rs & runtime/execution.rs): Automatic cosine-similarity search against SQLite semantic memory before model request. Top memories exceeding similarity threshold (0.35) are formatted and injected as authoritative background context in system prompt.
    • Interaction Auto-Storage (auto_store_interaction): Automatically captures and embeds meaningful User prompt + Assistant response pairs upon run completion, ensuring continuous long-term recall across sessions.
    • Live Runtime Memory Telemetry: Emits RunEventType::ContextBuild events containing memory count and keys to provide frontend visibility into what the agent recalled.
    • Scored Semantic Search API (search_scored): Extended SemanticMemoryStore trait and SqliteSemanticMemory with threshold-gated, score-ranked retrieval.
  • Streamlined Provider & Model Management in Settings (SettingsPanel.vue):

    • Inline Expandable Model Selection: Merged model selection into Step 1 as an expandable, interactive checkbox accordion directly under each connected provider.
    • Single Step 2 for Default Model: Step 2 is now dedicated to selecting the Default Model, strictly listing the inner join of enabled models from connected providers (+ Offline Demo).
    • Quick Reset Actions: Added 1-click Reset Flagships (resets to curated flagship profiles) and Reset All Selected (clears model selections).
    • Removed Clutter: Removed Manifest Editor JSON modal and Custom Model form for a cleaner, intuitive end-user experience.
  • Phase 6: Advanced Tool Ecosystem & MCP Expansion (Sprints 19–21)

    • Remote MCP over SSE/HTTP (tools/mcp.rs): Implemented SseMcpClient allowing AMBA to connect to remote MCP endpoints over Server-Sent Events with Bearer token authentication.
    • MCP Resources Support: Added resources/list and resources/read methods to inspect live data from MCP servers.
    • Builtin Utility Tools (tools/utility.rs):
      • system.time: Real-time clock, timezone offset, weekday, and Unix timestamps.
      • math.calculate: Deterministic, safe mathematical expression evaluator (+, -, *, /, %, ^, sqrt, abs, ceil, floor, round, sin, cos, tan, log, exp, pi, e).
      • filesystem.glob: Pattern search across workspace directories.
      • system.info: OS, CPU architecture, platform metadata.
    • Tools UI Updates (ToolsPanel.vue): Added Stdio / Remote SSE transport switcher with Bearer token inputs and presets.
  • Sprint 18: Structured Output & Rich Rendering

    • Rich Markdown Engine (MarkdownMessage.vue): Replaced raw text message rendering with a modular Markdown parser.
    • Fenced Code Blocks & 1-Click Copy: Renders code blocks with dark theme styling, language badge tags, and an interactive copy button with visual confirmation.
    • Markdown Tables & Blockquotes: Formats tables with clean bordered responsive layouts, callout quotes, bold/italic, inline code, and clickable external links.
    • Structured JSON Support: Added response_format to ModelRequest with OpenAI & Google provider integration for deterministic JSON output.
  • Sprint 17: Smart Token-Aware Context Window Management & Auto-Summarization

    • Token Estimation & Budgeting (runtime/context_budget.rs): Replaced naive message-count sliding window with token-aware budgeting using weighted character/word BPE approximation.
    • Automatic Session Summarization: When conversation turns exceed the token budget threshold (>6,000 tokens or >8,000 token history), earlier turns are summarized into a concise structured digest ([Summary of Earlier Turns in this Session]) and prepended as a system note.
    • Tool-Call Pair Preservation: Smart split algorithm protects assistant tool_calls and corresponding tool result pairs from being broken across pruning boundaries.
    • Runtime Event Notification: Emits RunEventType::ContextBuild with auto-summarized metadata to notify frontend trace inspector.
  • Sprint 16.4: Interactive 3-Step Model Discovery, Multi-Select Curation & Default Picker

    • Step 1 — Connect AI Providers: Input API keys for Google Gemini, OpenAI, and Anthropic. Direct live model discovery fetches all upstream models straight from provider APIs.
    • Step 2 — Pick Models to Enable (Multi-Select Curation):
      • Provider Tabs (All Connected, Google Gemini, OpenAI, Anthropic).
      • Real-time search filter and quick action buttons (✨ Select Flagships, Select All, Deselect All).
      • Interactive checkbox selection of discovered models with Flagship badges, context window size tags, and descriptions.
      • Saves user-curated model choices directly into SQLite via sync_selected_model_profiles.
    • Step 3 — Select Default Model (Single Pick):
      • Displays only the inner join of enabled models from connected providers (+ Offline Mock).
      • 1-click default model selection for agent workspaces.
    • Step 4 — Web Search & Internet Tools (Optional): Tavily / Brave Search integration with live status indicator.
  • Sprint 16.3: Configurable Model Manifest Architecture & Live Editor

    • Dynamic Model Registry (~/.amba/models.manifest.json): Replaced hardcoded model configurations with a decoupled, declarative JSON manifest schema (ModelManifestItem / ModelManifest).
    • Live Manifest Editor Modal: Added an interactive in-app JSON editor in Settings allowing power-users and developers to update model IDs, modify temperatures, adjust context window sizes, add new flagship models, or reset to template defaults without recompiling.
    • Manifest-Driven Seeding & Persistence: seed_profiles and backend storage load directly from the active manifest; changes applied in Settings immediately refresh the database and workspace dropdowns.
    • Tauri IPC Manifest Endpoints: get_model_manifest, save_model_manifest, and reset_model_manifest_defaults.
  • Sprint 16.2: Clean Flagship Model Curation, Noise Filtering & Provider Grouping

    • Smart API Model Curation (fetch_provider_models): Replaced raw, noisy API dump (30–50 experimental/dated checkpoints) with an intelligent whitelist filter keeping only canonical flagship aliases (Gemini 2.0 Flash, Gemini 2.5 Flash, Gemini 1.5 Pro, GPT-4o Mini, GPT-4o, o3-mini, o1, Claude 3.7 Sonnet, Claude 3.5 Sonnet, Claude 3.5 Haiku).
    • Obsolete Model Pruning & Reset: Added prune_profiles_by_provider and reset_curated_model_profiles Tauri command to cleanly remove clutter/deprecated snapshots and reset to pristine flagship models with 1 click.
    • Provider-Grouped Model Dropdown: AgentWorkspace.vue now organizes model options into intuitive <optgroup> categories (Google Gemini, OpenAI, Anthropic Claude, Offline / Testing) with status indicators.
    • Settings UI Enhancement: Added 1-click "Reset to Curated Models" button in Settings with clear feedback alerts.
  • Sprint 16.1: End-User Onboarding Wizard, Help & Guide Center, and In-App Feedback System

    • Interactive Setup Wizard (/onboarding): 3-step setup guide for non-technical users to connect AI Providers (Google Gemini Free Tier, OpenAI, Claude, or Offline Demo), configure Web Search (Tavily), and jumpstart with 1-click sample prompts.
    • Help & Guide Center Modal (HelpGuideModal.vue): Comprehensive, non-technical guide with Quickstart steps, AI Provider comparison, Security & Local-First overview, and FAQ solving common questions (e.g. why agent needs search keys, local data safety).
    • Built-in Feedback Center (FeedbackModal.vue): In-app feedback dialog with emoji/star ratings (1–5), category chips (Idea, Bug, Question, General), contact info, 1-click copy formatted feedback, and SQLite persistence.
    • Backend Feedback Engine: SQLite user_feedback table with insert_feedback and list_feedback storage APIs, registered submit_feedback and list_feedback Tauri IPC commands.
    • Sidebar Access: Added 1-click "📖 Hướng dẫn sử dụng", "💬 Góp ý & Báo lỗi", and "🚀 Setup Wizard" buttons in sidebar footer.
    • Workspace Quick-Start: AgentWorkspace.vue auto-fills query prompt from onboarding into input box for instant execution.
    • 45 Rust unit tests + 3 Vitest tests passing cleanly.
  • Sprint 16: Web Search & Fetch Tools (Internet Querying & SSRF Protection)

    • WebSearchTool (web.search): query the live web via Tavily (AI-native search API) or Brave Search with title, URL, snippet, and relevance scoring.
    • WebFetchTool (web.fetch): bounded webpage retrieval (32KB cap) with fast HTML-to-text conversion, tag stripping, script/style pruning, entity decoding, and text formatting.
    • SSRF Protection (assert_url_safe): strict validation blocking localhost, .local, link-local, loopback, private IPv4/IPv6 ranges (RFC 1918, RFC 6598 CGNAT, RFC 5736), and non-HTTP protocols.
    • Policy Engine defaults: web.search and web.fetch default to Confirm policy for explicit user permission.
    • Search Provider Credentials: OS keychain + SQLite fallback storage via set_search_credential, delete_search_credential, search_credential_status IPC commands.
    • Settings UI: Added Step 3 "Web Search & Internet Tools" card with Tavily & Brave Search key management, status indicators, and direct API link buttons.
    • Tool Status formatting in Workspace: human-readable real-time indicators for 🔍 Searching web, 🌐 Fetching, 📄 Reading file, ✏️ Writing file, ⚡ Executing shell.
    • 44 Rust unit tests + 3 Vitest tests passing cleanly.
  • Sprint 15: Multi-turn Conversation History Engine & Model Optimization

    • Multi-turn context loading: ExecutionEngine now automatically creates sessions and loads previous conversation turns into WorkingMemory for multi-turn LLM memory.
    • Context sliding window: limits conversation history to a 20-message token budget preventing context window overflow.
    • Dynamic model parameters: StartRunRequest supports temperature, max_tokens, and system_prompt_override.
    • SQLite Conversation CRUD: added get_conversation, list_conversations_by_agent, delete_conversation, rename_conversation, clear_conversation_messages with cascade deletion.
    • Workspace Sessions & Tuning: collapsible Sessions sidebar (New Chat, switch, rename, delete), Model & Context Tuning drawer (temperature slider, max tokens, custom instructions), copy message button, latency & model telemetry indicators.
    • Upgraded Conversation History View: real-time search, filter by agent, "Resume Chat" in Workspace, full conversation markdown export, clear & delete controls.
    • 35 Rust unit tests + 3 Vitest tests all passing cleanly.
  • Sprint 14: Real LLM Providers & Concrete Model Selection

    • Concrete Model Profiles seeded for OpenAI (GPT-4o Mini, GPT-4o), Anthropic (Claude 3.5 Sonnet, Claude 3.5 Haiku), and Google (Gemini 2.0 Flash, Gemini 1.5 Pro).
    • Production Anthropic model IDs updated to official snapshots (claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022).
    • Settings persistence for default_model_profile_id via SQLite settings table and IPC commands.
    • Auto-detection of configured provider credentials and smart model dropdown selection in Workspace and Settings.
  • Sprint 13: Token Usage & Analytics Dashboard

    • Backend Analytics API: added get_token_analytics query on SqliteStorage to aggregate run token usage (input_tokens, output_tokens) and calculate estimated USD cost across LLM models.
    • Registered get_token_analytics Tauri IPC command in src-tauri/src/commands/runs.rs and lib.rs.
    • Frontend Analytics UI (ActivityPanel.vue): added KPI summary cards (Total Tokens, Input/Output Split, Estimated USD Cost, Executed Runs) and per-model usage breakdown table.
    • Added unit test for token analytics aggregation in db.rs (33 Rust unit tests total, all passing).
  • Sprint 12: MCP Server Management UI & Security Policy Manager

    • Frontend API wrappers (src/services/api/tools.ts): connectMcpServer, disconnectMcpServer, listPermissions, setPermission.
    • Tabbed Tools Panel UI (src/features/tools/ToolsPanel.vue):
      • Tool Registry tab: Live view of registered Native & MCP tools and JSON schemas.
      • MCP Servers Manager tab: Connect form (server_name, command, args), quick presets (filesystem, git, memory), list of connected servers, disconnect button.
      • Security & Permissions Manager tab: Real-time policy decision toggles (Allow, Confirm, Deny) for all registered tools.
  • Sprint 11: Document Context Adapters (PDF, DOCX, XLSX, CSV)

    • CsvAdapter: parses CSV files and formats records into clean Markdown tables.
    • DocxAdapter: parses Microsoft Word .docx ZIP archives and extracts paragraph text from word/document.xml.
    • XlsxAdapter: parses Microsoft Excel .xlsx archives, resolves shared strings (xl/sharedStrings.xml), and formats sheet cell grids into Markdown tables.
    • PdfAdapter: parses .pdf text streams (BT...ET) into readable text content.
    • Registered all 4 document adapters in ContextEngine default adapters.
    • Added unit tests for CSV, DOCX, XLSX, and PDF parsing (32 Rust unit tests total, all passing).
  • Sprint 10: Semantic Memory

    • SQLite table migration semantic_memory for storing key, JSON values, vector embeddings, and timestamps.
    • LocalEmbeddingGenerator: fast offline feature-hashing & n-gram normalized vector generator.
    • Cosine similarity vector search ranking (cosine_similarity).
    • SqliteSemanticMemory: implements SemanticMemoryStore trait (upsert, get, search).
    • 3 new unit tests for embeddings, cosine similarity, and SQLite semantic memory roundtrip (28 Rust unit tests total, all passing).
  • Sprint 9: Write Tools + Policy-Gated Shell

    • filesystem.write: full implementation with path security (sanitize_path), automatic parent directory creation, content append support, and unit tests.
    • shell.execute: process execution via tokio::process::Command, CWD path security, timeout enforcement (default 30s, max 120s), and unit tests.
    • Policy & Permissions IPC: added list_permissions and set_permission Tauri commands registered in lib.rs.
    • 3 new unit tests for filesystem.write and shell.execute (25 Rust unit tests total, all passing).
  • Sprint 8: Streaming Tool-Call Assembly

    • OpenAI provider streaming: chunk assembly for tool_calls deltas, include_usage SSE options, token usage extraction, and Done event generation.
    • Anthropic provider streaming: full SSE event parsing (message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop), tool_use JSON buffer accumulation, token usage tracking.
    • Google provider streaming: streamGenerateContent SSE parser for text deltas, functionCall parts, usageMetadata, and Done event.
    • Execution Engine (stream_or_chat): proper ModelStreamEvent::Usage collection and token usage propagation without extra non-streaming chat() fallback calls.
  • Sprint 7: Real MCP Client (stdio JSON-RPC 2.0)

    • StdioMcpClient: spawns MCP server process, handles initialize handshake, tools/list, tools/call with 5 s / 10 s / 30 s timeouts
    • Background stdin writer + stdout reader tasks; graceful drain on server exit
    • McpToolAdapter: wraps MCP tools as native Tool so they live in ToolRegistry
    • Tool names prefixed mcp.<server_name>.<tool_name>
    • connect_mcp_server / disconnect_mcp_server Tauri commands
    • StubMcpClient retained for tests and fallback
    • 7 new unit tests (JSON-RPC parsing, adapter delegation, error propagation)
    • 19 Rust tests total, all passing
  • GitHub Actions CI pipeline (.github/workflows/ci.yml)

  • Phase 2 roadmap: Sprint 7–10 planning in ROADMAP.md


0.1.0 — 2026-08-10 ​

Added ​

  • Local-first Tauri 2 desktop app with Vue 3 presentation layer
  • Single-process Rust Agent Runtime (execution, tools, policy, providers, context, memory, packages)
  • Governance documentation (AGENTS.md, architecture, ADRs, sprint docs, .agent/*)
  • Navigation: Agents, Skills, Tools, Models, Memory, Activity, Settings
  • Agent workspace with streaming, tool status, execution trace, permission prompts
  • SQLite persistence with migrations (agents, skills, tools, conversations, runs, events, policies)
  • Model providers: OpenAI, Anthropic, Google + offline Mock profile
  • Secure API key storage via OS keychain
  • filesystem.read tool with path traversal protection
  • Permission engine (allow / confirm / deny)
  • Local agent/skill package install from folder
  • Builtin Assistant Agent + example packages under packages/examples/
  • Activity page for past runs
  • Unit tests (Rust domain/policy/execution; Vitest API wrappers)