Commit Graph
860 Commits
Author SHA1 Message Date
Jagan Fulare a8e68a1b09 feat(admin): expose market catalog 2026-10-31 10:12:06 +00:00
Claude 9472542909 feat(web): platform admin console at /admin
Adds the self-built operations UI served from the app origin under the
reserved /admin slug: overview, users (with disable/enable and token
revocation), workspaces, audit log, and platform admin management. The
shell gates on /api/admin/me, sends signed-out visitors to /login, and
hides writes a viewer cannot perform; the server enforces the same roles.

Core gains an admin API client with zod-validated responses, query
options and mutation hooks; views add the pages and copy in all five
locales.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01FrVjAFWeckYV69HS51xUhy
2026-10-31 10:05:29 +00:00
Cursor Agentandklinsmaya 4b1647ae3a feat(market): add browse, detail, and preflight pages
Adds the market_v1-gated Market browse, listing, and install-check pages in
@multica/views/market, wired into web routes, desktop routes, the sidebar,
search, tab subjects, and link handling. The install check renders the
preflight report with its runtime and model choices kept in the URL; a ready
report says the workspace can accept the listing and offers no install.

Co-authored-by: klinsmaya <[email protected]>
2026-10-18 04:10:44 +00:00
ffce31a122 docs(changelog): add v0.6.3 release entry (2026-10-16) (MUL-8049) (#9292)
Co-authored-by: multica-eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-16 17:40:42 +08:00
130aaa5302 MUL-8047: feat(onboarding): open the runtime guide issue directly instead of a welcome modal (#9289)
* MUL-8047: feat(onboarding): open the runtime guide issue directly instead of a welcome modal

Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* MUL-8047: chore(onboarding): drop dead option cards, copy, and completion animations

Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* MUL-8047: fix(onboarding): reopen the existing guide issue on duplicate

A reload, or a create whose response was lost, leaves the guide issue
from an earlier Skip in place while onboarding is still incomplete; the
retry then hits the server's active-duplicate guard and the step was
stuck toasting forever. Recover the existing issue from the validated
409 body and continue to completion.

Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-16 16:48:09 +08:00
86020b88a4 MUL-8047: chore(server): remove the pre-v3 desktop onboarding shim (#9291)
Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-16 16:41:46 +08:00
Jiayuan Zhangandmultica-agent 231dedb552 MUL-8034: chore: clean historical comments across the codebase (#9274)
* chore: clean historical comments (MUL-8034)

Co-authored-by: multica-agent <[email protected]>

* docs: preserve pending Composio expiry contract

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-15 21:54:33 +08:00
Multica Eveandmultica-agent 7ab92d7622 docs(changelog): add v0.6.2 release entry (2026-10-13) (MUL-7998) (#9225)
Co-authored-by: multica-agent <[email protected]>
2026-10-13 18:37:37 +08:00
cf6a8cad11 MUL-7842 fix: patch Next.js GHSA-vcvr-r3jv-pc5j (#9007)
* fix: patch Next.js GHSA-vcvr-r3jv-pc5j

* fix(web): require Next.js 16.3.8 security floor (MUL-7842)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Yushen <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-09 16:49:38 +08:00
2ea01ae4ef docs(changelog): add v0.6.1 release entry (2026-10-01) (MUL-7840) (#9006)
Add the 0.6.1 entry to the four changelog locales and bump the web and desktop package versions to 0.6.1.

Co-authored-by: Yushen <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-01 18:18:24 +08:00
ea94c7cd5b docs(changelog): add v0.6.0 release entry (2026-09-28) (MUL-7777) (#8909)
Co-authored-by: Bohan <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-28 14:55:28 +08:00
344ffaf1be MUL-7737: feat(views): address bar for HTML attachment previews (#8873)
* MUL-7737: feat(views): address bar for HTML attachment previews

HTML attachments render in a sandboxed srcdoc iframe, so the document's URL
is about:srcdoc and location.search is always empty. A self-contained mock
that picks its screen with `?s=overview` could only show its default screen.

A one-line bridge script placed in front of the author's markup gives the
document a real query and fragment through history.replaceState (Chromium
and WebKit allow an opaque-origin document to rewrite them), resolves
relative pushState/replaceState URLs against the document, reports address
changes to the parent, and turns `?…` link clicks into navigate requests.

The viewer and the full-page preview get a reload button and an address
field after the file name. A new query reloads the document; a
fragment-only change navigates in place. "Open in new tab" carries the
address as `loc`, and the full page keeps it in the desktop tab's view
state across tab switches.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* MUL-7737: feat(views): put the HTML address in the viewer's top bar

The address bar took a row of its own above the document. The file name
in the top bar is the fixed part of the address anyway, so it now is the
address: the query and fragment follow the file name and are edited in
place. A document at its bare address reads as just the file name, so
files that never use an address look as before; hovering or focusing
shows the field and a hint of where to type. Reload joins the HTML view
controls, disabled with them in the source view.

The address state moves from the stage to PreviewPanel, which owns both
the bar and the stage, and resets per file since the viewer pages to the
next file without remounting.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-27 16:26:00 +08:00
6dc6a0b9a2 MUL-7650: attachment viewer — CSV tables, JSON/YAML tree, numbered code, HTML viewports, every kind in a new tab (#8868)
* feat(server): accept JSON Lines in the attachment text preview proxy

The viewer now shows .jsonl / .ndjson files as a tree, so the text proxy's
whitelist takes them too (extension and application/x-ndjson). The whitelist
test gains the CSV / TSV / log / JSON Lines cases and says it is mirrored by
the client-side table in packages/views/editor/utils/preview.test.ts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* feat(views): table, tree, numbered-line and viewport views in the attachment viewer

MUL-7650, step 3 of MUL-7642. Fills in how the full-window viewer shows the
file types agents produce most.

- CSV / TSV (`table` kind): parsed to a table on the shared DataTable —
  pinned header, virtualized rows, resizable columns, a frozen row-number
  column. Clicking a header sorts ascending / descending / file order;
  numbers sort numerically, empty cells stay last, all-number columns align
  right. `;`-separated exports are sniffed. DataTable headers now carry
  aria-sort when the table sorts through TanStack's own state.
- JSON / JSON Lines / YAML (`structured` kind): a collapsible tree with
  inline previews of collapsed records and paged long lists; Tree / Raw in
  the top bar. A file that does not parse falls back to the source and says
  why. YAML alias expansion stays capped by the parser.
- Code, text and logs: numbered lines (the number is a pseudo-element, so
  copying skips it) with a sticky gutter, and a wrap toggle. Logs and plain
  text wrap by default, code does not; the reader's choice carries across
  the sequence.
- HTML: Fit / Desktop 1440 / Tablet 768 / Phone 390. A device width lays the
  document out at that width and scales it down when the stage is narrower,
  with the size and scale shown under it; switching never remounts the
  iframe. A source toggle shows the HTML with line numbers.
- Open in new tab works for every previewable kind: /{slug}/attachments/{id}
  /preview loads the record by id and renders the viewer's own top bar and
  stage (AttachmentPreviewStandalone), keeping the desktop scroll restore for
  HTML.
- Whitelist: .jsonl / .ndjson join the text types on both sides, and the
  client test mirrors the server's case table.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-27 04:13:06 +08:00
f05f8250bc docs(changelog): add v0.5.3 release entry (2026-09-24) (MUL-7683) (#8805)
Co-authored-by: Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-24 17:16:02 +08:00
Bohan Jiangandmultica-agent 9c69661f7f feat(web): licensing FAQ, privacy policy, About team section, source-available wording (MUL-7558) (#8643)
* docs(license): name Index Labs (Hong Kong) Limited as the producer (MUL-7558)

The LICENSE and NOTICE credited "Multica, Inc.", which is not a registered
entity. Replace it with the company that holds the rights, define "the
producer" (used throughout Part I but never defined), and point to where
commercial licenses and branding waivers are requested.

Co-authored-by: multica-agent <[email protected]>

* feat(web): add licensing and privacy pages, describe Multica as source-available (MUL-7558)

- /licensing: plain-language licensing FAQ with the rule of thumb and common
  scenarios, in en/zh/ja/ko.
- /privacy: privacy policy based on what Multica Cloud actually collects;
  the Contact Sales privacy link now points here instead of /about.
- About: new "Who's behind Multica" section (team story + contact routes;
  team member cards left for later).
- Replace "open source" / "fully open source" with source-available
  wording across the landing copy, page metadata, JSON-LD, docs, READMEs,
  and the Helper agent prompt, since the license restricts hosted use.
- Contact Sales consent copy says "Multica" instead of "Multica, Inc.".
- Reserve the "licensing" workspace slug for the new top-level route.

Co-authored-by: multica-agent <[email protected]>

* fix(web): drop the Slack users section from the licensing page (MUL-7558)

Co-authored-by: multica-agent <[email protected]>

* fix(web): add the commercial-use FAQ in ja/ko and sharpen the source block headline (MUL-7558)

- ja and ko override faq.items wholesale, so the new "Can I use Multica
  commercially?" entry (the FAQ's only link to /licensing) was missing
  there. Add it, plus a test that keeps every locale's FAQ in step.
- The source block headline now states the value ("Every line, on your
  terms.") instead of repeating the license category.
- Privacy policy: list apps connected through Composio among the
  integrations that receive data.

Co-authored-by: multica-agent <[email protected]>

* fix(web): align the privacy policy with what the product actually does (MUL-7558)

Privacy review found promises the code does not keep:

- Workspace deletion removes content from the service, but uploaded files
  are not yet erased from object storage and backups keep copies. Say so,
  and give an email route for erasing files.
- AI: coding agents send prompts, code, and tool results to their own model
  providers; only the Cloud assist features use a provider we pick. Scope
  the training promise to Multica.
- Crash reports: redaction filters recognizable emails and credentials in
  the error message only, not every field.
- Self-hosted: list the snapshot fields (including the random deployment
  ID), and note that AI, integrations, and analytics follow the operator's
  configuration.
- Sharing: cover workspace members, admins, and authorized agents; move
  legal and M&A disclosures out of the service provider list.
- Add legal bases, consent withdrawal, and the right to complain, plus
  retention for billing records and analytics.

Co-authored-by: multica-agent <[email protected]>

* fix(web): build trust-page test dictionaries through createLandingDict (MUL-7558)

main now passes a docs href to each landing dictionary factory, so the
test's single-argument calls failed typecheck. Build the dictionaries the
way the app does, mark the DOM-free test as node, and bring the new French
mobile-app doc in line with the source-available wording.

Co-authored-by: multica-agent <[email protected]>

* fix(web): stop overpromising on data handling and align trust copy with product terms (MUL-7558)

- The commercial-use FAQ now names both license triggers in every locale
  (offering Multica to outside users, and embedding it in a product you sell
  or distribute); ja and ko read as hosted-only before.
- Replace "your data never leaves your network" and "code never passes
  through Multica servers" with what actually happens: agents run on your
  machines, workspace content is stored by Multica, coding tools send
  prompts to their model providers, and self-hosting keeps workspace data on
  your servers. Links to the privacy policy.
- New and changed copy follows the terminology conventions: issue ->
  任务/タスク/태스크, agent run -> 运行/実行/실행 (Run in English),
  workspace -> 工作区, onboarding -> 上手引导.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
2026-09-24 14:25:49 +08:00
Bohan Jiangandmultica-agent 920c3ea6d9 feat(docs): add French documentation aligned with UI terminology (MUL-7637) (#8757)
* docs(i18n): translate documentation corpus to French (MUL-7637)

Add French (.fr.mdx) translations for all 45 docs pages plus meta.fr.json
navigation, mirroring the English source. Product and UI terms follow the
in-app French locale at packages/views/locales/fr/ (issue -> tâche,
run -> exécution, autopilot -> automatisation, Chat -> Discussion,
Settings -> Paramètres, etc.). Status and role identifiers stay lowercase
English per the conventions glossary, with the French UI label shown once
where they are defined.

Co-authored-by: multica-agent <[email protected]>

* feat(docs): serve French docs locale (MUL-7637)

Register fr in the docs i18n config and add the French Fumadocs chrome,
language-switcher label, and home hero copy. Fumadocs maps fr to Orama's
built-in French tokenizer, so search needs no custom localeMap entry.

Co-authored-by: multica-agent <[email protected]>

* feat(i18n): link French UI to French docs (MUL-7637)

Route French users from the landing page, runtime guides, the autopilot
webhook filter help, and the Slack/Lark/DingTalk/Telegram setup links to
/docs/fr. The four integration tabs and the runtime helper each carried a
copy of the same locale-prefix ternary; they now share docsLocalePrefix.

Co-authored-by: multica-agent <[email protected]>

* fix(i18n): localize remaining docs entry points (MUL-7637)

French users still reached English docs from the Help menu, the Agents and
Skills "Learn more" links, and the landing footer. The views links now use
docsLocalePrefix; the landing dictionaries take the docs href from
docsHrefForLocale, so locales that reuse another dictionary (French reuses
English) still link to their own docs.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
2026-09-23 18:30:31 +08:00
Multica Eveandmultica-agent 92d29fe76b docs(changelog): add v0.5.2 release entry (2026-09-23) (MUL-7630) (#8749)
* docs(changelog): add v0.6.0 release entry (2026-09-23) (MUL-7630)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): switch release entry to v0.5.2 and tighten title (MUL-7630)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): fold steering into a single entry (MUL-7630)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
2026-09-23 17:39:56 +08:00
a2111888aa fix(issues): polish the mark-as-duplicate affordance (MUL-7349) (#8738)
* fix(issues): make the duplicate action read as an action, not a copy (MUL-7349)

The status picker footer borrowed lucide's Copy glyph, which every other
surface in the app uses for copy-to-clipboard (code blocks, API tokens,
webhook URLs), so the row read as "copy this issue". Blend — two
overlapping shapes — is unused elsewhere and says "these two are the
same thing". The banner and the Relations menu item follow so all three
duplicate surfaces share one glyph.

The footer label also rendered muted, which made the only action in the
popover look disabled next to the status rows. Everything else already
matched (14px/400/20px, same icon size and text offset), so only the
colour moves; the icon stays muted like the rows' trailing check.

The trailing ellipsis goes: the footer stands alone under the status
list, where nothing else is elided. The Relations menu item keeps its
own, matching its siblings there ("Set parent issue...", "Add
sub-issue...").

Co-authored-by: multica-agent <[email protected]>

* fix(issues): use CircleEqual for the duplicate icon (MUL-7349)

Blend's two intersecting rings read first as "related" or "mixed", and
the overlap crowds at 14px. A circled equals sign says "these two are
the same thing" and stays legible at menu size. All three duplicate
surfaces switch together: the status picker footer, the Relations menu
item, and the banner above a duplicate's title.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-23 15:53:37 +08:00
Basuotian 6278fdb8bc feat(web): offer the Windows CLI installer alongside curl (MUL-7602)
Expose the supported PowerShell installer alongside the existing macOS/Linux command in the runtime dialog, onboarding, and landing download section.
2026-09-23 14:28:55 +08:00
Multica Eve d4267bf42b docs(changelog): add v0.5.1 release entry (2026-09-21) (MUL-7557) (#8640)
Add the 2026-09-21 changelog entry in all four locales and set the web and desktop app versions to 0.5.1. Steering is left out — it is not shipping today.
2026-09-21 18:31:32 +08:00
ZIceandmultica-agent 8feab0abe4 perf(web): reduce route barrel imports for #8387 (#8575)
Co-authored-by: multica-agent <[email protected]>
2026-09-20 14:00:41 +08:00
2df765a3c8 docs(changelog): add v0.5.0 release entry (2026-09-18) (MUL-7481) (#8543)
* docs(changelog): add v0.5.0 release entry (2026-09-18) (MUL-7481)

Adds the 0.5.0 changelog entry to all four landing locales and bumps the
web and desktop app versions.

Range v0.4.44 → 594ff89 (55 PRs). Minor bump because the release ships
full French product UI, which is worth announcing on its own.

Left out of the changelog, as agreed on MUL-7481: Triage (triage_v1 not
rolled out), the plugins_v1 / billing_workspace_subscriptions gate error
semantics, UI Lab, CI/test/docs, prompt and skill changes, the Issue
status category migration, and internal performance work.

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): retitle the v0.5.0 entry around agent behavior (MUL-7481)

The title listed the top of `features` and carried a small feature
(Autopilot schedule editing) while leaving out the day's agent work.

Drop the small feature, keep the French UI, and put the agent side in:
runs are both steadier (Grok/Pi/Copilot/Codex/Cursor/Hermes, durable
terminal reports) and leaner — a resumed agent no longer re-reads the
whole Issue and every comment (#8377, #8488). That last one now has its
own improvements line so the title stays backed by the entry.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Bohan-J <[email protected]>
2026-09-18 18:02:36 +08:00
30831b70d3 fix(landing): include t in Multica acronym emphasis (#8477)
Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-16 13:53:13 +08:00
96aa80ff9e MUL-7348: simplify redundant UI descriptions across product surfaces (#8393)
* refactor(ui): remove redundant descriptions across product surfaces

Implement MUL-7348 copy audit across shared views, Desktop, Mobile, and contact sales. Keep actionable constraints visible and move advanced explanations into explicit help. Update all four locales and document default-omit copy rules.

Co-authored-by: multica-agent <[email protected]>

* fix(ui): preserve constraints and improve contextual copy help

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-16 03:23:03 +08:00
5f52380439 feat(i18n): add French locale (#7141)
* feat(i18n): add French locale

Adds `fr` as a supported UI locale for web and desktop.

- 25 translated resource files under `packages/views/locales/fr/`, at full
  parity with the English source (`locales/parity.test.ts` passes).
- Registers the locale in `SUPPORTED_LOCALES`, the views resource bundle, the
  settings language picker, and the `HTML_LANG` maps for web and desktop.
- Translates the celestial workspace name list. Proper nouns with no
  established French form are left unchanged.
- Landing page: adds the `FR` label but leaves the public `locales` array at
  four, since the marketing copy is not translated.
- Onboarding templates map `fr` to English content, matching the existing
  fallback for locales without authored templates.
- `pick-locale.test.ts` used `fr` as its example of an unsupported locale;
  those assertions now use `es`, plus a new case asserting `fr-FR` resolves
  to `fr`.

Terminology follows the glossary in
`apps/docs/content/docs/developers/conventions.mdx`. The UI uses the formal
register (vouvoiement) consistently.

* fix(i18n): translate the backlog status label in French

The French locale translated six of the seven issue statuses and left
`backlog` as "Backlog". The other locales translate all seven — `待规划`,
`백로그`, `バックログ` — so the odd one out was an oversight, not a choice.

`conventions.mdx` does say role and status enums stay in lowercase English,
but that rule is about surfacing the identifier inside prose ("switched to
`in_progress`"), not about the `status` display block, which every shipped
locale translates.

"À planifier" reads as a pair with "À faire" for `todo`, and matches what
`待规划` conveys: the issue exists but is not scheduled yet.

* fix(i18n): realign the French locale with main

Rebasing on main surfaced two drifts that the parity test caught:

- `settings.json` gained `shortcuts.fixed.open_settings` upstream; added
  the French string.
- `search.json` lost its `pages.*` block in #7054, which now generates the
  command palette's Pages group from the nav registry. Dropped the eight
  French keys that no longer have an English counterpart.

* fix(i18n): resync the French locale with main

157 English keys had no French translation and 97 French keys no longer had an
English counterpart. The parity suite caught all of them.

Added: custom issue statuses (76 keys), the Telegram integration (55), issue
revision conflicts and the status catalogue (20), plugin panels and hook
activity (24), revoked agent access in chat (4), autopilot run quota and the
worktree execution mode (2).

Removed: 97 keys upstream has dropped or renamed, most of them under plugins.*.

Two shape changes worth naming, because a key count does not show them:

- plugins.install used to be the string "Install" and is now an object with
  title/description/placeholder/review. A locale that keeps the old shape does
  not have a missing key, it has a key of the wrong TYPE, and parity alone
  stays silent about it — only writing to it fails.
- telegram_bind mirrors slack_bind key for key, so it is derived from the
  existing translation with the service name substituted rather than written
  again. Two texts that say the same thing drift when they are typed twice.

Register: vouvoiement throughout, consistent with the rest of the locale.

* fix(i18n): complete French locale integration and refresh translations

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-16 02:52:49 +08:00
93b4c38150 docs(changelog): add v0.4.44 release entry (2026-09-15) (MUL-7400) (#8446)
Cover v0.4.43 -> 20f20d6bc7 in the four landing
locales and bump the web app version to 0.4.44.

Patch bump: the range is channel work (DingTalk, Lark, WeCom), the Issue status
model, and incremental changes to existing surfaces — nothing that warrants a
standalone announcement.

Left out as unreachable for users after this release: the Triage groundwork
behind triage_v1 (key and helper only, no call sites), the core prompt and
built-in skill guidance changes, and the migration, index, test and CI work.

Self-hosted anonymous telemetry is included, together with its DO_NOT_TRACK
opt-out, since it is on by default and administrators need to know.

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-15 17:37:53 +08:00
Bohan Jiang 8d294d0ab2 Revert "docs(changelog): add v0.4.44 release entry (2026-09-14) (MUL-7356) (#…" (#8403)
This reverts commit 1a660e6c15.
2026-09-14 18:28:42 +08:00
1a660e6c15 docs(changelog): add v0.4.44 release entry (2026-09-14) (MUL-7356) (#8396)
Cover the v0.4.43 -> HEAD range in the four landing locales and bump the web app version to 0.4.44.

Patch bump: the day is mostly channel work (DingTalk, Lark, WeCom) plus incremental changes to existing surfaces, with nothing that warrants a standalone announcement.

Triage infrastructure behind the triage_v1 flag, the database migration and index work, and the test/CI maintenance PRs are left out: none of them is something a user can reach after this release.

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-14 18:19:24 +08:00
7dafc0cd62 MUL-7240: Unify issue lifecycle into four stored categories (#8261)
* feat: simplify issue status categories

Co-authored-by: multica-agent <[email protected]>

* feat: adopt four stored issue lifecycle categories

Co-authored-by: multica-agent <[email protected]>

* fix: preserve visible work when upgrading saved category preferences

Co-authored-by: multica-agent <[email protected]>

* docs: align lifecycle comments with stored and wire contracts

Co-authored-by: multica-agent <[email protected]>

* test: align mobile grouping expectations with four categories

Co-authored-by: multica-agent <[email protected]>

* fix(issues): group user views by concrete status keys

Co-authored-by: multica-agent <[email protected]>

* fix(settings): simplify status editor copy and category selector

Co-authored-by: multica-agent <[email protected]>

* feat(statuses): allow ordering built-ins and unify row actions

Co-authored-by: multica-agent <[email protected]>

* feat(statuses): configure custom status icons independently of category

Co-authored-by: multica-agent <[email protected]>

* fix(statuses): dismiss built-in status notice

Co-authored-by: multica-agent <[email protected]>

* fix(issue-status): require moving issues before archive and polish controls

Co-authored-by: multica-agent <[email protected]>

* fix(ci): renumber issue status migrations after main updates

Co-authored-by: multica-agent <[email protected]>

* fix(statuses): isolate archive inspection and align catalog behavior

Co-authored-by: multica-agent <[email protected]>

* fix(statuses): respect injectable catalog for table grouping

Co-authored-by: multica-agent <[email protected]>

* refactor(statuses): simplify built-in skill and runtime guidance

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-14 12:57:24 +08:00
7297c45810 docs(changelog): add v0.4.43 release entry (2026-09-11) (MUL-7291) (#8315)
* docs(changelog): add v0.4.43 release entry (2026-09-11)

Add the 0.4.43 changelog entry to the four landing locales and bump
apps/web to 0.4.43. Range: v0.4.42 -> 2441638c (origin/main), which is
Wall-E's confirmed da7fc439 plus #8309 merged after the confirmation.

MUL-7291

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): trim the v0.4.43 title to performance improvements

Per review on MUL-7291: drop the tool-output truncation notice and the
long-run stability items from the title and use performance improvements
instead. The corresponding feature/fix lines are unchanged.

MUL-7291

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): cover comment and description annotations in v0.4.43

Range extended to d4493208 (current origin/main): #8274 adds comment and
description annotations, so the entry gains two feature lines and the
title leads with them. #8313 and #8316 are internal and stay out.

MUL-7291

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-11 17:51:52 +08:00
SeanandSean d30a96154e fix(web): patch Next.js CVE-2026-75604 (#8269)
Co-authored-by: Sean <[email protected]>
2026-09-11 15:46:02 +08:00
378e3bd24b MUL-7154: unify the global radius system (#8175)
* fix(ui): unify global radius tokens

Co-authored-by: multica-agent <[email protected]>

* fix(ui): reduce global radius scale

Co-authored-by: multica-agent <[email protected]>

* fix(ui): address radius review findings

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Lambda <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-10 21:45:46 +08:00
0590011318 MUL-7251: landing hero shows a provider row with the real runtime count (#8266)
* feat(web): show a 14-mark provider row in the landing hero (MUL-7251)

The hero listed five runtimes as logo + name pairs, which read as the whole
list rather than a sample of a catalog that is now past twenty. Replace it
with a single row of monochrome marks under a link that states the real
count and points at the provider comparison in the docs.

The marks are the vendors' official artwork reduced to one colour so the row
reads as one system on the photographic backdrop: the app tile dropped so the
glyph inherits currentColor, and for Trae and Hermes — raster-only art — the
image flattened to white. Sizes are tuned per mark because no two vendors fill
the icon box the same way.

Co-authored-by: multica-agent <[email protected]>

* fix(web): pin the hero provider row to 14 x 1 or 7 x 2 (MUL-7251)

Free `flex-wrap` split the 14 marks 13 + 1 near 834px and 12 + 2 near 768px,
and one orphan on the second row reads as a broken layout. Give the row
explicit column counts instead — fourteen once a single row fits, seven below
that — so every width lands on a full row and the columns carry the spacing.

Also swap OpenClaw for OpenCode in the row, as asked. Its two greys become two
opacities of one colour, keeping the solid mark from outweighing the outline
glyphs beside it.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-10 19:43:38 +08:00
feifeifeimoon 412be4978b fix(landing): swap Gemini CLI for Antigravity in hero (#8232)
The landing hero's "works with" list still showed the retired Gemini CLI. Align it with the README and runtime provider list by showing Antigravity with its official mark as a monochrome inline SVG, matching the other hero logos.
2026-09-10 13:55:03 +08:00
4b72b7c812 docs(changelog): add v0.4.42 release entry (2026-09-09) (MUL-7190) (#8210)
* docs(changelog): add v0.5.0 release entry (2026-09-09) (MUL-7190)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): retarget the 2026-09-09 entry at v0.4.42

Bump the release to a patch instead of a minor, tighten the entry title
in all four languages, and correct the per-thread queueing line: threads
get their own pending slot, but ClaimAgentTask still serializes runs per
(issue, agent), so they do not run without waiting for each other.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
Co-authored-by: J <[email protected]>
2026-09-09 17:52:25 +08:00
4aca890a29 docs(changelog): cover the settings reorganization in v0.4.41 (#8119)
#8114 landed one commit after the confirmed release HEAD, so the 0.4.41
entry shipped in #8115 did not describe it. Add the Settings grouping,
the single integrations page and the Preferences consolidation to all four
languages, and swap the lowest-impact title item for the reorganization.

Extended range: v0.4.40..53575a2a9 (MUL-7115). Version stays 0.4.41;
apps/web/package.json is already correct from #8115.

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-07 17:57:51 +08:00
3932d1a173 docs(changelog): add v0.4.41 release entry (2026-09-07) (#8115)
Adds the 2026-09-07 entry to all four language sites and bumps apps/web to 0.4.41.

Range: v0.4.40..d753c7d7840f56cc82f82a6cfe90bdc52e06dd19 (MUL-7115).
Excludes the two changes users cannot perceive: the agent runtime brief /
built-in skill guidance (#8102) and GitHub PR refresh replica routing (#8096).

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-07 17:48:26 +08:00
2cf5674d2e docs(changelog): add v0.4.40 release entry (2026-09-04) (MUL-7056) (#8038)
* docs(changelog): add v0.4.40 release entry (2026-09-04) (MUL-7056)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): rewrite v0.4.40 titles per review (MUL-7056)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-04 17:38:12 +08:00
22afa49363 docs(changelog): add v0.4.39 release entry (2026-09-03) (MUL-7021) (#7988)
* docs(changelog): add v0.4.39 release entry (2026-09-03) (MUL-7021)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): reword v0.4.39 title per review (MUL-7021)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-03 17:37:25 +08:00
Soda 0431218061 MUL-6833 fix(web): localize auth callback and error pages (#7752)
Localize the web auth callback, 404 page, and root error boundary, plus the shared section-level ErrorBoundary.

Also fixes several pre-existing auth-path bugs surfaced during review:
- access_denied was unreachable (the !code branch preceded the error-param check)
- UserLocaleSync's reload could replay a consumed OAuth code and show 'Login Failed' after a successful sign-in
- Google token-exchange and userinfo provider failures were misreported as user-actionable causes
- checkSignupAllowed reported 'registration is disabled' for an allowlist miss
2026-09-03 14:13:47 +08:00
603519d158 MUL-6977: test: remove implementation-only coverage (#7932)
* test: remove implementation-only coverage

Co-authored-by: multica-agent <[email protected]>

* test: remove remaining implementation-only coverage

Co-authored-by: multica-agent <[email protected]>

* test: restore compatibility and fragment navigation coverage

Co-authored-by: multica-agent <[email protected]>

* test: preserve behavioral cleanup contracts

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-03 13:23:25 +08:00
47dc75741c docs(changelog): add v0.4.38 release entry (2026-09-02) (MUL-6978) (#7930)
* docs(changelog): add v0.4.38 release entry (2026-09-02) (MUL-6978)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): drop unreleased Autopilot quota lines and rewrite v0.4.38 titles (MUL-6978)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-02 17:43:44 +08:00
310cfdc1e5 MUL-6896 fix(i18n): finish the MUL-5703 glossary rollout across ja/ko and docs (#7867)
* fix(i18n): finish the MUL-5703 glossary rollout across ja/ko and docs (MUL-6896)

MUL-5703 settled the rule — the issue entity is translated (任务 / タスク /
태스크) and the agent run keeps `task` / 作業 / 작업 — but only ever landed in
the zh-Hans UI. Everything else drifted:

- ja/ko shipped 39 UI strings that still spelled the entity in English
  (`issue`), or as イシュー / 課題 / 이슈.
- zh and ja spelled the *run* with the *issue* word in the project worktree
  copy and in the MCP delete dialog — the exact collision MUL-5703 exists to
  prevent. ko already had this right (작업).
- ko wrote runtime-health "issues" as 이슈, so a machine card read as the
  entity. zh/ja use 异常 / 問題, and ko's own health_clear already said 문제.
- `conventions.ja.mdx` / `conventions.ko.mdx` still documented the *pre*-
  MUL-5703 rule ("issue stays English"), contradicting the en/zh glossary.
- The docs prose sweep the glossary calls "being swept separately" never
  happened: ~471 English `issue` in zh, ~414 イシュー in ja, ~418 이슈 in ko.

Sweeping the entity into 任务 / タスク / 태스크 forces the run to move too —
zh docs wrote it 执行任务, ja 実行タスク, ko 실행 태스크, all of which collide
with the entity word once the entity lands there. So the run is rewritten to
`task` / 作業 / 작업 in the same pass, matching what each UI already shows.
Standalone labels keep the English source's capitalisation (`Task` page
title and links); inline mentions are lowercase, like `skill`.

Also corrects the en source for two squad strings: squads receive *issues*
and the leader delegates *sub-issues*, not "tasks" / "sub-tasks". The three
translations already said the entity, so only en moves.

Not touched: the landing changelog archive, the generic English noun "task"
in chat/onboarding marketing copy, `issue` in the "problem" sense, and the
unrelated structural drift in the ja/ko conventions pages (they are missing
the "Runtime display names" section from an older sync).

Verified: 4907 views tests pass including locale parity, typecheck and lint
clean, go build plus the integrations/cli suites pass, and no doc anchor
broke (checked before/after).

Co-authored-by: multica-agent <[email protected]>

* fix(docs): sweep the last old run-word leftovers in zh copy (MUL-6896)

Review caught the docs home page still linking "[执行任务](/tasks)" while ja/ko
had already moved to 作業 / 작업. Four more of the same class turned up next to
it: the same link in README.zh, "任务生命周期" in VISION.zh (en: "the task
lifecycle"), and two redundant "task(task)" glosses the sweep produced where
the source had written "执行任务(task)".

With these, `执行任务` / `実行タスク` / `실행 태스크` are gone repo-wide, so the
"prose now follows the table" line added to conventions.mdx is true.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-01 16:04:34 +08:00
79559ebb92 fix(ci): unblock the release by fixing two flaky main failures (MUL-6890) (#7828)
* test(wecom): move the relay claim tests off a shared Redis DB index (MUL-6890)

The relay outcome tests keep their claims in Redis DB 12, which
internal/service also takes for its own suite — and both flush that DB on
entry and exit. `go test ./...` runs packages concurrently, so a flush from
one package can delete a live delivery claim held by the other, and the
publisher's outcome watch then reads an absent claim as "nobody delivered"
and counts a drop for a reply the holder had already sent.

That is the intermittent `outbound_dropped on the publisher = 1, want 0 —
it was delivered` on main. Reproduced by running internal/service's
Redis-backed tests alongside this one; fixed by giving the package an index
nothing else uses, with the current allocation written down so the next one
does not collide either.

Co-authored-by: multica-agent <[email protected]>

* build(turbo): generate fumadocs .source once instead of racing (MUL-6890)

`build` and `typecheck` both ran `fumadocs-mdx` before their real work, and
turbo is free to run those two tasks for the same package at the same time.
fumadocs-mdx regenerates `.source/` by removing the directory and writing it
back, so the two processes fight over one tree: whichever one mkdir's first
can have it deleted underneath, and its write dies on `ENOENT: no such file
or directory, open '.source/index.ts'` — the frontend-build failure on main,
which is pure timing and passes on a rerun.

Move the generation into its own `mdx` task that both depend on. It runs
once, its output is cached like any other task's, and the two consumers can
still run concurrently. Packages with no `mdx` script are unaffected: turbo
skips a dependency nobody implements, the same way `cache-inputs` already
works here.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-31 18:29:37 +08:00
0742b50428 docs(changelog): add v0.4.37 release entry (2026-08-31) (MUL-6890) (#7823)
* docs(changelog): add v0.4.37 release entry (2026-08-31) (MUL-6890)

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): retitle v0.4.37 around the day's optimizations (MUL-6890)

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-31 18:05:45 +08:00
mikyan fe59262188 feat(agent): add Huawei Cloud CodeArts support (#6985)
* feat(agent): add Huawei Cloud CodeArts support

* fix(migrations): resolve CodeArts prefix collision

* fix(agent): address CodeArts review feedback

* fix(agent): tighten CodeArts integration scope

* fix(agent): resolve CodeArts follow-up review blockers

* fix(agent): redact CodeArts launch arguments

* docs: sync supported runtime counts

* fix(agent): own CodeArts model probe process tree
2026-08-31 12:30:59 +08:00
b25701b922 docs(changelog): add v0.4.36 release entry (2026-08-28) (MUL-6787) (#7697)
* docs(changelog): add v0.4.36 release entry (2026-08-28)

Add the 2026-08-28 changelog entry in en/zh/ja/ko and bump apps/web to 0.4.36.

MUL-6787

Co-authored-by: multica-agent <[email protected]>

* docs(changelog): drop unreleased billing items from v0.4.36 entry

Cloud billing is still in staging and has never shipped, so the Issue count
limit and its upgrade path must not appear in the public changelog. Retitle
around the changes that are actually live.

MUL-6787

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-28 17:40:44 +08:00
1179142c13 MUL-6784: fix(desktop): share public web URLs (#7684)
* fix(desktop): share public web URLs

* fix(navigation): keep the current fragment in shareable URLs

Rebuilding the current page from `pathname` + `searchParams` alone dropped
the fragment, so feedback sent from a `#comment-…` deep link reported the
whole issue and the maintainer lost the position the reporter was at. Web
regressed too: it previously submitted `window.location.href`, fragment
included.

The fragment cannot be read from `window.location` on desktop — the
renderer is a MemoryRouter over the packaged `file://` page — so the
platform boundary has to carry it. `NavigationAdapter` now reports `hash`
alongside `pathname` / `searchParams`, and `currentPath()` composes the
three so no caller has to remember the fragment again.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-28 16:46:44 +08:00
acf6864f53 test(frontend): remove duplicate DOM coverage (#7631)
Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-08-27 17:56:27 +08:00
BintengandBinteng f74a71060f perf(web): preload landing hero background (MUL-6711) (#7582)
Preload the above-the-fold landing background so it starts downloading alongside
the product preview instead of after it, shortening the black-fallback window on
cold loads. Also declares an explicit `sizes="100vw"` on the backdrop and moves
the product preview off the deprecated `priority` prop onto `preload`.

Co-authored-by: Binteng <[email protected]>
2026-08-26 18:41:01 +08:00