Commit Graph
1692 Commits
Author SHA1 Message Date
3647fd2245 feat(ui): use TruncatedTooltip for truncated labels across the app (MUL-8313) (#9618)
* feat(ui): use TruncatedTooltip for truncated labels across the app (MUL-8313)

Replace native title attributes (and one plain Tooltip) whose content only
repeats a truncated label with TruncatedTooltip, so the full text shows in the
design-system tooltip and only when it is actually cut off.

TruncatedTooltip now builds on DeferredTooltip, which gains a shouldOpen
guard, so nothing but the trigger mounts until the first hover. That keeps it
cheap in dense surfaces such as table cells, board column headers, and label
chips.

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

* fix(ui): open TruncatedTooltip on keyboard focus and wrap long values (MUL-8313)

- DeferredTooltip gains an opt-in openOnFocus path (open on focus, close on
  blur, same popup/shouldOpen gates; focus caused by a pointer press stays
  closed) and a contentClassName. TruncatedTooltip enables both, restoring
  the keyboard full-name tooltip in the project picker.
- TruncatedTooltip lets the bubble break long unbroken values (hashes, URLs)
  so they wrap inside the max-width popup instead of overflowing it.

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

---------

Co-authored-by: Multica Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-28 14:25:41 +08:00
3e4dcef95f MUL-8312: fix(i18n): unify Chinese review copy across clients (#9615)
* fix(i18n): translate in_review as 審查 in zh-Hant copy

The zh-Hant strings rendered 审核 as the rare form 稽覈. Use 審查,
matching the existing zh-Hant agents and squads copy.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(i18n): align Chinese review request notifications

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

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Yushen <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-28 13:31:53 +08:00
JimmyChia 8ffcc88dbd fix(desktop): show spelling suggestions in right-click menu (#9608) 2026-10-28 10:10:14 +08:00
Bohan Jiangandmultica-agent d7d1831fcf feat(cli): add run-targeted retries with a fresh option (#9592)
Co-authored-by: multica-agent <[email protected]>
2026-10-27 18:18:32 +08:00
Multica Eveandmultica-agent aec9b0b169 MUL-8287: docs(changelog): release 0.7.1 (#9593)
* docs(changelog): release 0.7.1

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

* docs(changelog): retitle 0.7.1 and tighten wording

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-27 17:39:22 +08:00
Multica Eveandmultica-agent 317e17f123 MUL-8287: fix(web): stop sending workspace titles to Google Analytics (#9595)
* fix(web): report route labels as GA page_title instead of workspace titles

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

* fix(web): pin GA page_title via set so navigation updates take effect

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-27 17:03:32 +08:00
984d9db74b MUL-7695: fix(desktop): stop daemon before Windows update install (#9582)
* fix(desktop): stop bundled daemon before Windows update install (MUL-7695)

On Windows the running daemon locks the bundled multica.exe. The NSIS
installer only replaces it when it can kill the daemon via PowerShell/CIM;
otherwise its Retry path extracts while ignoring errors and the old daemon
binary silently survives the update (#8823).

Stop the daemon from the app before handing off to the installer:
- "Restart to update": stop an idle daemon and wait for the process to
  exit; with active tasks, ask to install now, install when tasks finish,
  or cancel.
- Quit-time auto install: stop an idle daemon first; with active tasks,
  skip this quit's install instead of letting the installer kill them.
- Bounded by a 15s timeout that falls back to the previous installer
  behaviour, and resumes the daemon if quitAndInstall never quits.

macOS and Linux are unchanged.

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

* fix(desktop): cancel stale update preparation and coordinate quit

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

* fix(desktop): keep the daemon exit barrier across update flow handoff

A superseding update flow (quit during Restart to update, or a manual
install during a deferred stop) used to abort the old flow, resume the
daemon, and treat the vanished /health endpoint as ready while the old
PID was still holding multica.exe.

- Record the PID and original deadline once an update stop is actually
  issued; a successor whose probe finds /health gone keeps waiting on it.
- Handoff no longer resumes the daemon; flows that end without
  installing (cancel, wait, busy quit, error) resume it instead.

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

* fix(desktop): inherit the issued stop barrier while health still responds

A successor update flow only reused the earlier stop's PID barrier when
/health had already vanished. If the same daemon was still answering while
draining, it re-stopped it and restarted the 15s clock, stretching the
agreed upper bound on waiting.

Prefer an existing barrier for the same PID regardless of health, skip
the busy check for a daemon whose stop was already issued, and drop the
barrier only when a different PID is live.

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

* fix(desktop): keep waiting on a draining PID when a new daemon starts

A different live PID does not prove the previously stopped daemon has
exited: legacy CLIs take no profile lock, so a Start from the runtime card
can bring up a successor while the old process still holds multica.exe.

Track every issued update stop as its own barrier. A successor stops the
new daemon as usual but stays blocked until each barrier PID has exited or
reached its own deadline; barriers are cleared only on a settled result or
when the install is abandoned, and kept when the new daemon is busy.

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

* fix(desktop): simplify Windows update shutdown coordination

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

---------

Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Bohan-J <[email protected]>
2026-10-27 15:47:51 +08:00
188971168d fix(runtimes): spell out Qoder Cloud Agents instead of QCA (MUL-8282) (#9581)
* fix(runtimes): spell out Qoder Cloud Agents instead of QCA

The UI, docs, landing copy and server messages called the product "QCA"
in labels such as "QCA Agent", "QCA runtime" and API errors like "QCA
token is required". Use the full name Qoder Cloud Agents everywhere a
person reads it, and add it to the brand list in the naming conventions
so the abbreviation does not come back.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(runtimes): refine Qoder Cloud Agents copy (MUL-8282)

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

---------

Co-authored-by: 安辰 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 14:06:52 +08:00
73f5664ca4 MUL-8263 fix(agents): reject reserved custom arguments on save (#9560)
* fix(agents): reject reserved custom arguments on save

* fix(agents): validate OMP session arguments before saving

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

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 12:59:25 +08:00
bcf40040e0 MUL-8233: fix Pi cancellation and guard unconfirmed cleanup (#9557)
* fix(agent): join Pi cancellation cleanup and guard continuation

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

* fix(agent): preserve Pi completion and negotiate cleanup

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

* perf(agent): avoid Pi exit delay and index cleanup guards

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

---------

Co-authored-by: Multica Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 12:37:13 +08:00
a097f592be MUL-8260 feat(web): fit the mobile web app to iPhone Duo (#9558)
* MUL-8260 fix(web): let the mobile nav drawer scroll as one on short screens

On iPhone Duo's outer display in landscape (368px tall) the drawer's pinned
header and footer left the nav list a three-row scroll window, hiding Issues,
Projects, Agents and the rest. At 640px tall or less the whole drawer now
scrolls as one column; taller screens keep the pinned layout.

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

* MUL-8260 feat(web): dock the nav and keep list/detail panes from md up

On iPhone Duo's inner screen held sideways (951px) the nav could only open
as an overlay sheet and the inbox and chat folded to one column, because the
compact breakpoint sat at lg (MUL-5842). Move it to md: from 768px the nav is
a docked column that starts collapsed (the auto-collapse band now spans
md-xl) and the trigger docks it open, and inbox and chat keep both panes.
Below 768px nothing changes.

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

* MUL-8260 test(desktop): exercise the compact shell below the new md breakpoint

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-26 19:14:36 +08:00
Multica Eveandmultica-agent 7c50af7b66 MUL-8094: feat(wakeups): accept blocked in --until-issue-state (#9553)
* feat(wakeups): accept blocked in --until-issue-state

Lets a coordinator wait for a specific child to reach blocked, alongside the
existing in_review handoff, without waiting for the child to close.
Exact status key match, same as in_review.

Refs #9344

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

* fix(i18n): keep blocked state key in lowercase English in zh wakeup copy

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-26 18:20:16 +08:00
2213734215 MUL-8253 feat(web): opt-in Google Analytics via GOOGLE_ANALYTICS_ID (#9544)
* feat(web): opt-in Google Analytics via GOOGLE_ANALYTICS_ID (MUL-8253)

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

* fix(i18n): add missing zh-Hant keys for model override and scheduled wakeup

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

* fix(web): keep credential-bearing URLs out of Google Analytics

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

* feat(selfhost): pass GOOGLE_ANALYTICS_ID through compose and helm

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

* fix(web): stop GA for the document after sensitive navigation

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

* test(views): await subscription cleanup and dialog focus

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

* fix(web): stop GA before credential-bearing link clicks and form submits

GA4 enhanced measurement reports outbound/download link_url and
form_destination without a URL change, so signed attachment downloads
leaked their signature. Stop the tag for the document in a window
capture listener before gtag's own listeners observe the interaction.
Object URLs are exempt. Adds jsdom tests and a live gtag.js regression
covering the ~5s batch delay.

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

* test(web): slim GA tests; move views test fixes to #9555

Drop the opt-in live-tag e2e spec (never runs in CI) and condense the GA
unit tests to the cases that guard against credential leaks. The two
unrelated views test-timing fixes now live in #9555.

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

---------

Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Bohan-J <[email protected]>
2026-10-26 18:04:40 +08:00
e8fdcfd226 MUL-6623 feat(agent): add host-local Devin CLI over ACP (#7485)
* feat(agent): add host-local Devin CLI over ACP

Spawn `devin acp` via the shared ACP client. Local CLI only — not
cloud Devin VMs/Playbooks/Secrets. Model via `devin acp --model`.
Catalog from `devin models list --format json` (families/variants).

* fix: skip Devin ACP handshake when browser auth is also offered

* fix: close dim case string so Devin compiles

Missing quote after dim broke runtime_config.go and every Go CI job.

* fix: stop runtimeConfigPath recursion on Devin

Devin is a builtin whose ProtocolFamily is itself. Recursing on that
overflowed the stack and killed backend-tests.

* test(agent): cover Devin model failures and final-answer delivery

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

* fix(agent): honor Devin model aliases and stored login (MUL-6623)

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

* fix(agent): drain Kiro panic details before terminating runtime (MUL-6623)

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

---------

Co-authored-by: Sol-Boy <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-26 15:11:05 +08:00
21e7299707 MUL-8230: feat(i18n): add Traditional Chinese (zh-Hant) locale (#9507)
* feat(i18n): add zh-Hant locale to web and desktop

Add Traditional Chinese (zh-Hant) as a supported locale with a full
translation of the shared views bundles. Browser tags zh-TW/zh-HK/
zh-Hant now resolve to zh-Hant instead of collapsing to zh-Hans; the
document lang is zh-TW, and docs/use-case links reuse the /zh pages.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit a6b3f6ba53a605c3e06fd6c4d30fd9df6fca8645)

* feat(mobile): add zh-Hant locale

Ship Traditional Chinese bundles for mobile and resolve zh-Hant/TW/HK/MO
device locales to them instead of falling back to English.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 04563c22662bdb735a9a6c04be784abd9f87da06)

* feat(ui-lab): add zh-Hant locale

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 1351ea572ed5d885d8a29034d6c0317de58641ea)

* feat(server): accept zh-Hant as user language

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 50dfe77a4c45452fc877c62497aba226d5aaa426)

* fix(i18n): sync zh-Hant with upstream copy changes

Upstream added conversation-starter, instruction-preview and board column
strings, removed restated descriptions (MUL-8162) and renamed Qoder Cloud
Agents. Mirror those key additions, removals and rewordings in zh-Hant so
the locale parity test passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 3a97dfc7e0bbf7568925f735c00fc69b6d94313d)

* fix(i18n): add zh-Hant copy for member-scoped runtime visibility

Mirror the runtime visibility "members" choice and the reworded revoke
dialog in zh-Hant so the locale parity test keeps passing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(i18n): replace Mainland terms in zh-Hant copy with Taiwan usage

Several zh-Hant strings were converted character by character from
zh-Hans and kept Mainland vocabulary, which reads wrong to Traditional
Chinese users: 郵箱 → 信箱, 賬單/賬號 → 帳單/帳號, and similar. Values
only; no keys added or removed.

* fix(i18n): polish zh-Hant copy from review

- 分割槽 → 分區 and 許可權 → 權限 (OpenCC phrase mis-conversions)
- drop stray blank lines before zh-Hant workspace names

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

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Multica Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-26 15:09:38 +08:00
8a95f0d3b9 MUL-8205 feat(lark): deliver reply images and files (#9477)
* feat(lark): deliver reply images and files

Based on #8332 by @zprial, addressing its review of bounded delivery,
resource uploads, uncertain sends, file fallback and HTTP boundary tests.

Render bound images with the reply text in one card, pair video/audio
uploads with their message types, preserve pending-send uncertainty and
normalize Markdown destinations before matching bound attachments.

Keep runtime artifact ingestion and deployment-specific configuration
outside this change. Add transport, ownership and rendering regressions
and document the behavior in all supported languages.

* refactor(lark): scope attachment transfer slots to the patcher

The concurrency semaphore was a package-level global while the admission
and pending tiers lived on each Patcher. Move it onto the Patcher so all
three limits share one scope and tests no longer mutate global state.

MUL-8205

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

---------

Co-authored-by: multica-eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-26 15:05:40 +08:00
苗大 e13a902f59 MUL-8220: docs: interactive demos, structured pages and docs for undocumented features (#9498)
* chore(docs): upgrade to Fumadocs 16 and Next.js 16

Fumadocs UI 16 requires Next.js 16, so the docs app moves to Next 16
alongside it (apps/web is already on 16).

- fumadocs-core/ui 15 -> 16, fumadocs-mdx 12 -> 15
- import collections from .source/server and RootProvider from
  fumadocs-ui/provider/next
- migrate UI translation keys to the v16 message ids
- rename middleware.ts to proxy.ts per the Next 16 convention
- declare the status, diff and overlay color slots v16 moved out of
  preset.css
- keep heading anchors, now rendered as a[data-card], out of the card
  styles
- drop the language select v16 adds to the sidebar footer; the docs
  settings menu already switches language

* feat(docs): add a kit for click-through product demos

Docs pages can embed small demos that imitate the product and walk the
reader through one action. The kit holds the shared frame (title,
replay, live caption), the coach mark that rings the next control with
a localized "Click" and an arrow, and timeline pieces for runs,
comments and steps. Demos start when scrolled into view, take their
scenario copy per locale, and isolate their stacking so they stay under
the page header.

tw-animate-css provides the enter animations, as in apps/web.

* fix(docs): consistent Steps, Tabs and Accordion styling

- a Steps item is at least as tall as its number badge, so one-line
  steps don't stack their badges
- accordion headers (not-prose h3) skip the editorial heading styles
- hide the copy-link button Fumadocs adds beside accordion titles; the
  ids stay so links still open an entry
- tab bars end in a hairline that carries the active underline without
  overflowing the scrolling bar, and a lone code block in a tab keeps its
  inset and border, so every tab group looks the same

* docs: interactive getting-started pages

- concepts: clickable map of the core objects and their relations
- how-multica-works: step-through of one run from issue to result
- triggering-agents: pick a goal, get the way to start an agent,
  including issue wakeups
- cloud-quickstart and tutorial use Steps; agent creation, the
  runtimes entry and the sidebar paths match the current product

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: interactive workspace, issue and project pages

- demos for member roles, issue statuses, project progress, workflow
  handoffs, creating an issue with an agent, deliverable versions and
  local directory modes
- new Analytics page with a demo of the usage and errors tabs: cost
  estimates, runtime usage, custom prices and per-issue spend
- issues: custom properties, display settings and saved views, peek,
  bulk edits and duplicates
- project progress counts the done and closed categories; status
  category names, the workflow return label and share links follow the
  product; agent moves trigger handoffs too
- project-resources: modes as Tabs, worktree details as Accordions

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: interactive agent pages

- demos for agent Access, creating an agent, adding a skill and a squad
  run led by its leader
- agents-create describes the current runtime -> configure -> done flow
  instead of the removed start-blank / build-with-AI choice, and covers
  workspace-shared MCP servers
- squads: notified members, a three-column re-trigger table, and the
  sections the ja/ko pages were missing

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: interactive everyday-collaboration pages

- demos for steering a running agent, mentioning an agent, assigning an
  issue, resolving a thread, running a quick action, chat, the chat
  message queue and the inbox
- mentioning-agents documents steering and the per-recipient delivery
  options; follow-ups no longer always wait for the run to end
- comments: sub-issues created from a thread, the thread minimap and
  edit-conflict comparison
- chat: the floating window, draft restore and the message queue
- new page for search, keyboard shortcuts and preferences
- quick actions: the sidebar list is not filtered by invoke permission

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: interactive runtime and automation pages

- demos for a failed run and its retry, a run waiting on an offline
  computer, an autopilot run, an issue wakeup and picking a coding tool
- new Issue wakeups page: event, time and periodic conditions,
  check-ins, limits, the child_done system rule and its workspace
  default, and the `multica issue wakeup` commands
- daemon-runtimes: start at login, local MCP merging, cleanup and
  retention, Codex memory defaults, and sharing a runtime with specific
  members
- runs on an offline runtime fail only after the reconnect grace
  (default 3h); the execution log lists the latest three past runs
- providers and the install guide add ZeroClaw and the model-selection
  column; install-agent-runtime uses Steps, Tabs and per-tool Accordions
- the event-filter heading keeps the anchor the product links to

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: interactive integration and app pages

- demos for talking to a channel bot, a merged PR completing its issue
  and per-workspace desktop tabs
- the bot guides share one Steps-based layout with their old anchors
- Lark and Telegram attach recent group messages as read-only context
- desktop-app: pinned tabs
- fix stale French GitHub and mobile self-hosting sections, and the
  compressed ja/ko Telegram pages

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* docs: restructure self-hosting and reference pages

- self-host-quickstart and troubleshooting use Steps, Tabs and
  Accordions with ASCII ids so links open the right entry; code-block
  tabs become Tabs like everywhere else
- environment-variables adds the GC, log rotation and per-tool
  path/model settings and drops the unused MULTICA_KEEP_ENV_AFTER_TASK
- cli adds issue timeline, issue wakeup, daemon autostart and the
  commonly used flags
- fix a corrupted link, flattened code indentation and dead anchors
- translations no longer call GitHub issues "tasks"

Covers en, zh, ja, ko and fr; copy edited to drop template phrasing.

* feat(docs): show the search bar with compact results

The site already served a per-locale search index from /api/search (with
character-level tokenizers for zh and ja), but the layout hid Fumadocs's
search toggle, leaving ⌘K as the only, undiscoverable way in. The toggle
is back: a search bar atop the sidebar on desktop and an icon in the
mobile header.

Fumadocs's default dialog renders every matching paragraph, table and row
in full, which buries the page titles. Like DocSearch and Pagefind,
results now show the page and section titles plus at most three matches
per page, each a two-line excerpt around the match; table rows become one
line with their cells joined. The index and ranking are unchanged.
2026-10-26 14:38:47 +08:00
LinYushen cf1b841a88 Revert "MUL-8243: feat(selfhost): wire feature flags through Compose and Helm…" (#9533)
This reverts commit 8981630a87.
2026-10-26 12:41:05 +08:00
wrj97 8981630a87 MUL-8243: feat(selfhost): wire feature flags through Compose and Helm (#9523)
* feat(selfhost): wire feature flags through Compose and Helm

Feature flags were documented in .env.example but neither self-host
deployment path forwarded them: the Compose backend environment is an
explicit allowlist and the Helm ConfigMap had no flag entries. Workflows
shipped GA in v0.7.0 but stayed hidden on a default self-host install.

- forward MULTICA_FEATURE_FLAGS_FILE and FF_PROJECT_WORKFLOWS_V1 (default
  true) from the Compose backend service
- render backend.config.featureFlags as FF_<FLAG_KEY> entries in the Helm
  ConfigMap, keep Workflows on for --reuse-values upgrades, and add
  featureFlagsFile for operators who mount a YAML rule file
- document flag precedence, self-host defaults, and per-path overrides in
  SELF_HOSTING_ADVANCED.md and .env.example
- extend selfhost-config.test.sh and helm-config.test.sh so the wiring and
  the documented defaults cannot drift silently again

* docs(feature-flags): add the self-host feature flag reference

Add a Feature flags page under Self-hosting in the documentation site,
translated into all five locales, and link it from the self-hosting
section of every navigation tree. The page covers flag precedence, the
self-host defaults, Compose and Helm overrides, the YAML rule file, and
how to verify a change through /api/config.
2026-10-26 12:40:29 +08:00
Multica Eveandmultica-agent 3de79cbeaf MUL-8216: docs(changelog): add workflow GA to 0.7.0 title (#9490)
* docs(changelog): add workflow general availability to 0.7.0 title

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

* docs(changelog): drop 'safer runs' from 0.7.0 title

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

* docs(changelog): drop PR conflict wakeups from 0.7.0 title

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-24 11:32:48 +08:00
Multica Eveandmultica-agent dbdbb29916 MUL-8198: chore(release): prepare 0.7.0 changelog (#9468)
Co-authored-by: multica-agent <[email protected]>
2026-10-23 17:46:12 +08:00
Frezc d651730987 fix(web): normalize whitespace before setting document titles (#9441) 2026-10-23 11:31:31 +08:00
Bohan Jiangandmultica-agent ff674c4e1d MUL-8185: Support sharing runtimes with specific members (#9455)
* feat: share runtimes with selected workspace members

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

* refactor(runtimes): one-click private/public and popover member picker

Private and Public apply immediately again (restrictions still go through
the reviewed revocation dialog). Specific members opens a draft popover
with search, Cancel and Save; selected recipients are summarized under
the scope control with an Edit entry point. The editor moves to its own
runtime-access-editor component.

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-23 09:28:22 +08:00
ZIceandmultica-agent 6b0f8315f6 MUL-7960 fix(mobile): align lint and TypeScript with Expo SDK 57 (#9174)
* fix(mobile): align lint and TypeScript with Expo SDK 57

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

* fix(mobile): preserve navigation during realtime workspace changes

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-23 07:53:45 +08:00
Multica Eveandmultica-agent 72d9058cc6 feat(telemetry): add visiting and delegating member counts (MUL-8161) (#9435)
* feat(telemetry): report visiting and delegating member counts in self-host snapshot v2 (MUL-8161)

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

* fix(telemetry): count delegating members from a human-action ledger, drop v1 fallback (MUL-8161)

- member_delegation_day records (member, UTC day) at the human action itself,
  so retries, system wakeups and creator-fallback runs never count, and a
  comment folded into a queued run keeps both humans and their own days.
- Activity read failures now fail collection and use the existing retry
  instead of silently sending a v1 snapshot.

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

* fix(telemetry): record create-with-assignee, honor DO_NOT_TRACK, build ledger PK concurrently (MUL-8161)

- A member creating an issue assigned to an agent or squad now records a
  delegation day, on both the immediate and deferred create paths.
- TaskService.RecordMemberActivity gates the ledger and is set from the
  startup telemetry config, so DO_NOT_TRACK stops collection too.
- member_delegation_day's primary key is built with CREATE UNIQUE INDEX
  CONCURRENTLY + PRIMARY KEY USING INDEX (589-591), with cleanup registered.

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-23 07:40:05 +08:00
Multica Eveandmultica-agent 88de9d3713 feat(agent): surface Hermes dependency reinstall at launch (MUL-8124) (#9434)
* feat(agent): surface Hermes dependency reinstall at launch (MUL-8124, GH #9390)

Hermes prints its launch-time dependency sync only to stderr, which the
daemon forwards at Debug, so the 30-60s rebuild that the per-task Hermes
home triggers when the user's home enables a memory plugin with Python
deps was invisible. Log one Warn when Hermes starts reinstalling (with
HERMES_HOME and a hint) and one when the ACP handshake returns, with
the measured startup delay. Task outcome is unchanged.

Document the cause and the memory.provider workaround in troubleshooting.

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

* fix(agent): log Hermes reinstall finish when stderr lags the handshake (MUL-8124)

stdout and stderr are drained independently, so initialize can return
before the stderr copier reaches the reinstall marker Hermes wrote
first. Finish then saw no detection and the finish log was lost.

Record the handshake result and time in Finish, and emit the finish log
when the second of (marker, handshake) arrives. Measure the delay from
launch to handshake so it no longer depends on pipe ordering. Adds the
reviewer's repro as an Execute-level regression test plus a unit test.

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-22 18:59:58 +08:00
029466efb3 feat(agents): move conversation starters to the agent profile (MUL-8151) (#9419)
* feat(agents): move conversation starters to the agent profile (MUL-8151)

Starters are what people see in a new chat, not part of the system prompt,
so they now sit in Settings > General > Profile beside avatar, name and
description, autosaved, with a live new-chat preview. The Instructions tab
holds only the prompt in a Write/Preview editor with a pinned save bar. In
the create flow starters are an optional row under Identity.

The chat's Customize link now lands on General; its focus flash no longer
sticks under StrictMode.

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

* docs(agents): say where conversation starters are edited (MUL-8151)

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

* fix(agents): keep an incomplete conversation starter open until filled in

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-22 15:43:29 +08:00
ac61e5ed32 fix(runtimes): rename to Qoder Cloud Agents and use Qoder's current logo (MUL-8153) (#9418)
* fix(runtimes): rename Qoder Cloud Agent to Qoder Cloud Agents

Qoder's product is called Qoder Cloud Agents, matching how Cursor Cloud
Agents is already spelled in the runtime lists. Update the display name,
default runtime name, error messages, translations, landing copy, docs
and tests.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(runtimes): use Qoder's current logo

Replace the old green Qoder mark with the current monochrome mark from
qoder.com/favIcon.svg. The background is removed, the paths are
minified, and both paths use currentColor so the mark stays visible in
dark mode. It applies to the Qoder, Qoder CN and Qoder Cloud Agents
runtimes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: 安辰 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-22 13:57:20 +08:00
ef2d2b3e48 MUL-8149: patch Node 22.23.4 in web image, Electron 39→44 (#9416)
* fix(web): pin Dockerfile.web to node:22.23.4-alpine for Oct 2026 Node security release (MUL-8149)

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

* fix(desktop): upgrade Electron 39 (EOL) to 44.9.3 (MUL-8149)

Electron 39 is end-of-life and will not receive the 2026-10-21 Node.js
security fixes. 44.x is a supported line (Node 24.22.0, Chromium 152).

clipboard.writeText now returns a Promise in Electron 44; handle the
rejection in the context menu so it can't become an unhandled rejection.

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

* fix(desktop): skip auto-update on macOS 12 and older (MUL-8149)

Electron 44 requires macOS 13 (Darwin 22), but electron-builder does not
publish minimumSystemVersion in latest-mac.yml, so electron-updater would
download and install a build that cannot launch on macOS 12, replacing a
working app. Disable background checks/downloads on those hosts and make
a manual check report the OS requirement instead.

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

* fix(desktop): publish macOS update floor in update metadata (MUL-8149)

Review feedback: installed macOS 12 clients run their old updater code,
so a runtime check in the new build can never stop them from downloading
an Electron 44 build that cannot launch. The guard has to live in the
published latest-mac.yml / latest-x64-mac.yml.

- beforePack hook (scripts/mac-update-floor.cjs) adds
  minimumSystemVersion: 22.0.0 (Darwin kernel, = macOS 13) to the mac
  releaseInfo that electron-builder spreads into update info. The config
  schema rejects the key, so it is set on the packager after validation;
  the hook throws if those internals move.
- mac.minimumSystemVersion: 13.0.0 for every mac bundle; drop the stale
  Intel-only 12.0.0 override in package.mjs.
- Regression test runs electron-updater 6.8.3's real
  checkIfUpdateSupported against the published shape: Darwin 21 skips,
  22/25 update; no floor or a 13.0.0 floor would let Darwin 21 through.
- Revert the in-app updater.ts guard: it is unreachable on macOS 12.

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

---------

Co-authored-by: Multica Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-22 13:26:40 +08:00
Multica Eveandmultica-agent 2c86a9c3b0 fix(workflows): clarify the send-back handoff copy (MUL-8146) (#9414)
Co-authored-by: multica-agent <[email protected]>
2026-10-22 10:55:54 +08:00
0fc6794821 MUL-7035 feat(cli): add comparison operators to issue list --property (#8001)
* feat(cli): add comparison operators to issue list --property

`issue list --property` now accepts the comparison spellings #7664
reserved: > >= < <= on number, > (after) and < (before) on date, and ~=
(contains) on text and url. Each comparison is sent as the {op, value}
member the server has accepted since v0.4.38 (#7765); "Name=Value",
__none__ and repeated-flag OR keep their meaning.

A comparison the property's type cannot honour is rejected with the type
named, because the server checks the value shape but not the op against
the definition, and an empty page would read like a real answer. != is
rejected because the server has no not-equal filter, and >= or <= on a
date is rejected with the strict form to use instead.

Closes #7999

* fix(cli): treat multi_text and multi_url as equality-only in property filters

main added the free-form list types (#8559) after this branch was cut, and
the web UI's PROPERTY_FILTER_OPS_BY_TYPE gives them no operators. Without an
entry here a comparison on them reported the type as unknown and told the
user to upgrade an already-current CLI. They now get the same
'only support =' rejection as the other equality-only types.

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

---------

Co-authored-by: Nick Webster <[email protected]>
Co-authored-by: Multica Eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-22 08:55:24 +08:00
7ebaf00e7c MUL-8136: feat(server): restrict workspace creation to listed emails (self-host) (#9411)
* feat(server): allow workspace creation only for listed emails (self-host)

Add WORKSPACE_CREATION_ALLOWED_EMAILS. When set, POST /api/workspaces
returns 403 for callers whose email is not listed. Empty keeps the
current behavior; DISABLE_WORKSPACE_CREATION=true still blocks everyone.
No instance-admin role, no domain allowlist, no UI hiding.

Refs #9400, MUL-8136

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

* docs(self-host): clarify which signup vars /api/config exposes

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

---------

Co-authored-by: multica-eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-22 08:49:07 +08:00
Bernardo Sader 001e95794b feat(priority): give High its own color so it reads apart from Medium (#9410)
High and Medium both used text-warning, so in dense issue and project
lists the only difference was one filled bar. Add a --priority-high
token (orange, hue 50, between --destructive and --warning) in light,
dark and the always-light landing block, and point High's icon and
badge at it on web/desktop (issue + project configs) and mobile.

Medium, Low, Urgent and the icon geometry are unchanged.
2026-10-22 08:34:07 +08:00
c9b6de8567 MUL-8142: docs(runtimes): step-by-step Qoder Cloud Agent setup and correct entry path (#9408)
Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-22 02:08:12 +08:00
0fe2ebf02e MUL-8045: feat(runtimes): Qoder Cloud Agent as a managed cloud runtime (#9402)
* feat(runtimes): add Qoder Cloud Agent managed remote execution

* fix(qoder): satisfy migration and localization CI contracts

* fix(qoder): bound execution and scope managed credentials

* fix(qoder): avoid upstream migration number collisions

* fix(qoder): gate issue creation and correlate tool results

* fix(qoder): synchronize guarded issue lifecycle transitions

* test(agent): publish Hermes holder identity atomically

* feat(agents): runtime-first create flow and cloud runtimes section for Qoder Cloud Agent

- Three-step create-agent flow (runtime -> configure -> done) with local,
  remote and cloud sections; Qoder connect form inline in the runtime step
- Runtimes page regrouped into remote and cloud sections with Qoder card
- Generalize Qoder storage to cloud_agent_connection (migrations 586/587)
- Locales for en, zh-Hans, ja, ko, fr; desktop and web routes for done step
- Fix status-picker fixture owner_id and diagnostics route coverage after main merge

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

* feat(runtimes): unify runtimes page into machines and cloud services

- One Add menu replaces Add remote runtime, the duplicated Add a computer
  and the web-only Cloud Runtime header button
- Group by machines / cloud services instead of local / remote / cloud, so
  web and desktop share one structure; this device is pinned with a badge
- Cloud services use the machine row anatomy in a single ListGrid table;
  unconnected Qoder is a row with Connect, coming-soon providers are rows
- Empty groups show the next step inline; search and online/offline filter
- Rename computer to machine across runtimes copy in all locales

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

* test(runtimes): cover unified runtimes page; pin status and action tracks

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

* refactor(runtimes): trim redundant descriptive copy on runtimes page

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

* fix(runtimes): keep row actions visible at narrow widths

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

* refactor(runtimes): align Qoder add-menu item with other cloud services

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

* fix(runtimes): close the Qoder dialog after a first-time connection

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

* feat(agents): pick the runtime from one grouped list

The runtime step showed four kinds of cards, a comparison panel and
per-section descriptions. It is now one list in the runtimes-page layout:
machines (this one open, others folded to a row) and cloud services. An
unconnected Qoder opens the runtimes-page connect dialog in place and is
selected once it comes online.

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

* fix(agents): show owners as 'you' and bare version numbers in the runtime list

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

* feat(qoder): disconnect action and dedicated Qoder runtime page

Disconnect removes the encrypted connection and the managed runtime, unbinding
its agents after the admin confirms them. The Qoder row now opens its own page
(status, agents, usage, configuration, pause/resume, disconnect) instead of the
machine layout; generic runtime delete and visibility refuse a managed runtime.

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

* fix(agents): land on the done page after creating from step 2 on desktop

Desktop's location is the tab URL, which moves to /agents/new/done/<id>
while the configure page is still mounted. Its missing ?runtime= tripped
the skipped-step-1 redirect and replaced the tab back to /agents/new, so
Create looked like it did nothing. Only redirect on the manual route.

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

* fix(agents): show only settings a Qoder agent can run with

The Qoder bridge fails every task whose agent carries a model, thinking or
speed override, env, custom args, custom skills, MCP config or connected
apps, and it runs issues only. The agent detail page still offered all of
those editors, so one save could break every later run.

For a qoder_cloud agent the page now keeps Instructions under Capabilities,
General / Access / QCA Agent under Settings, drops the model rows and the
header model chip, shows the QCA agent in the summary, and locks the
runtime. Other agents no longer see the Qoder runtime in their picker,
since moving onto it needs a QCA agent the server would otherwise reject.

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

* fix(agents): hide conversation starters for Qoder agents

Starters only appear in a chat, and the Qoder bridge runs issues only.
The create flow already leaves them out for this runtime.

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

* feat(runtimes): show the Qoder connection as cards with per-section editing

The Qoder runtime page rendered the whole connection as one always-editable
form. It now summarizes the connection, repositories and limits as read-only
cards; each section opens its own dialog and saves only that section.

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

* fix(qoder): reuse a follow-up session only with the same repository and credential

Resolve repository credentials before deciding to continue a prior session,
and stamp each session with a fingerprint of its repositories, branches and
tokens. A follow-up continues only when the fingerprint still matches, so a
changed repository, branch or rotated/revoked token never rides into an old
session.

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

* fix(qoder): keep a paused connection paused when its settings are saved

Saving repositories, limits or the connection no longer re-enables a paused
runtime. Resume goes through a new POST /qoder/resume.

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

* fix(agents): drop settings a Qoder agent cannot run when creating one

A draft started on another runtime could carry hidden skills, model
overrides and starters into a Qoder agent that then failed every task. The
create request now drops them for Qoder, and the API rejects skills and
execution overrides on Qoder agents at save time.

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

* chore(db): regenerate sqlc models for cloud_agent_connection

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

* fix(runtimes): never list the Qoder runtime under Machines

When the server could not run Qoder (no MULTICA_VCS_SECRET_KEY /
MULTICA_QODER_STATE_DIR), the managed Qoder runtime fell back into the
Machines group as if it were a computer.

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

* refactor(qoder): drop MULTICA_QODER_STATE_DIR

The managed bridge keeps its run journal encrypted in cloud_agent_connection
and a database advisory lock already elects one supervisor, so the state
directory only held a redundant file lock and acted as a feature switch.
Qoder is now available whenever MULTICA_VCS_SECRET_KEY is set. The
standalone qoder-runtime command still uses its on-disk state_dir.

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

* fix(qoder): keep the branch in the session fingerprint after a journal restore

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

* fix(agents): validate Qoder agents' effective settings on every write

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

---------

Co-authored-by: 安辰 <[email protected]>
Co-authored-by: Cursor <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-22 01:33:38 +08:00
e0e9efc5f1 MUL-8131: feat(ui): tooltips with shortcut hints and disabled reasons for icon buttons (#9398)
* MUL-8131: feat(ui): tooltips with shortcut hints and disabled reasons for icon buttons

Add IconButton (label + optional shortcut keycaps + disabledReason) and
let SubmitButton keep a disabled send button hoverable when it has a
reason, so blocked composers explain themselves instead of greying out.
Surface registered shortcuts (⌘B, ⌘/, ⌘J, E, ⌘[ ⌘], ⌘↵) in tooltips,
name the unlabeled More menus, translate the desktop back/forward
controls, and drop the global tooltip delay from 500ms to 200ms.

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

* MUL-8131: migrate icon-only buttons to real tooltips

Add TooltipHint for icon controls that keep their own element, and move
icon-only buttons across agents, autopilots, skills, issues, editor,
chat, settings, projects, runtimes, modals, onboarding and the desktop
shell onto IconButton / TooltipHint / DeferredTooltip, replacing native
title attributes. Dense per-row actions use DeferredTooltip.

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

* MUL-8131: tooltips for create-issue pills, attach/reaction/help/avatar buttons, row menus, and remaining native titles

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

* MUL-8131: fix(test): add owner_id to Default workflow fixture in status-picker test

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

* MUL-8131: keep tooltips on expanded disclosure toggles; keep version-blocked Create aria-disabled

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

* MUL-8131: move icon-button test out of the wildcard-exported ui directory

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-21 23:39:00 +08:00
Multica Eveandmultica-agent 654b8ca954 MUL-8123 chore(release): 0.6.5 changelog and app versions (#9393)
Co-authored-by: multica-agent <[email protected]>
2026-10-21 17:19:00 +08:00
moxi2534 4caf571aab fix(desktop): localize the workspace tab bar menu (#9099)
The right-click menu and the matching hover labels were hardcoded English, so zh-Hans, ja, ko, and fr all showed Pin tab, Close tab, and Close other tabs.
2026-10-21 16:47:13 +08:00
1e01173fb4 MUL-8060 fix(daemon): trust the backend's SSL_CERT_DIR CAs when syncing repos (#9312)
* fix(daemon): report the checkout's own repo sync error

ensureRepoReady read the sync failure from a per-workspace slot that any
concurrent background sync overwrote, so a later successful sync of another
repo erased the error and checkout reported only "repo is configured but
not synced". syncWorkspaceReposContext now returns its error to the caller
and the shared slot is removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* feat(server): share SSL_CERT_DIR CAs with daemons for git

Daemons clone with the system git, which never sees the backend's
SSL_CERT_DIR, so a repository on a host with an internal CA could not
sync even after the operator made the backend trust that CA.

The new gitca package mirrors crypto/x509's SSL_CERT_DIR loading, skips
the system directories, and keeps only certificates crypto/x509 trusts.
The register and workspace repos responses carry them as ca_certs. The
daemon writes its system CA bundle plus those certificates to a bundle
file, adds http.sslCAInfo to its git environment, and records it in the
cache and isolated checkout config so agents' fetch and push use it too.
An empty value removes the bundle; Windows daemons skip it.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* docs: document private CA trust for daemons

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* fix(daemon): keep operator CA trust and existing checkouts working

Review of the private CA support found two regressions for repositories
that already worked:

- Removing the last backend CA deleted the bundle while existing linked
  worktrees and isolated checkouts still pointed at it, so their HTTPS
  fetch and push failed. The bundle is now rewritten to the machine's own
  trust instead, and each repository drops the reference the next time
  the cache configures it.
- The bundle started from the system bundle and was injected through the
  environment, overriding an operator's general http.sslCAInfo and any
  repository-local value. It now starts from the file a general
  http.sslCAInfo names (system bundle otherwise), the environment no
  longer carries it, clone passes it with -c, and repository config is
  only set where unset and only unset where it is ours. URL-scoped
  settings, repository-local values, and GIT_SSL_CAINFO keep precedence.

Isolated checkouts record the setting before their first checkout, which
can lazily fetch from origin, and clones before the refspec migration
fetch.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Iliya Anastasov <[email protected]>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-21 14:25:27 +08:00
47120a4131 docs(changelog): add v0.6.4 release entry (2026-10-20) (MUL-8099) (#9353)
Co-authored-by: multica-eve <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-20 17:38:06 +08:00
Bohan Jiangandmultica-agent 4be54d1b26 MUL-8098: Add Manage workflows entry to issue properties (#9352)
* feat: add workflow management entry to issue properties

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

* fix(desktop): open non-issue pages in browser from issue window navigation

The issue workflow card's Manage button pushes a settings path. The issue
window adapter silently dropped non-issue paths, so the click only closed
the card. push/replace now hand such paths to the browser, matching the
content-link handler.

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-20 15:49:29 +08:00
b24d3595a1 MUL-8028: fix(desktop): navigate existing reserved workspace slugs (ZIC-336) (#9276)
* fix(desktop): navigate existing reserved workspace slugs

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

* fix(core): bind workspace slug lookup to the mounted provider (MUL-8028)

- Bind the reserved-slug membership lookup from QueryProvider's effect
  instead of createQueryClient(), so StrictMode's discarded extra client
  can never become the bound one; unbind is owner-checked.
- Only skip legacy unscoped-link prefixing for a path that is a known
  member workspace + workspace route, so /chat in content still becomes
  /<current>/chat (chat is not a reserved slug).
- Group the new tests under describe blocks and cover both regressions.

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

---------

Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Multica Eve <[email protected]>
2026-10-20 13:53:31 +08:00
m2keloopandm2keloop d908e4882d MUL-6710: fix(runtimes): revoke access when making runtime private (#7580)
* fix(runtimes): revoke access when making runtime private

* fix(runtimes): regenerate queries for workflow step

---------

Co-authored-by: m2keloop <[email protected]>
2026-10-20 12:49:37 +08:00
Zhexuan Yang 3c8c604852 MUL-7877: fix(web): keep workspace document titles authoritative (#9067)
* fix(web): keep workspace document titles authoritative

* fix(web): keep latest workspace title across navigation
2026-10-19 16:42:40 +08:00
LinYushenandmultica-agent 8d95e80559 fix(github): fetch PR snapshots without Contents permission (#9332)
Co-authored-by: multica-agent <[email protected]>
2026-10-19 15:48:59 +08:00
Bohan Jiangandmultica-agent abef85c3c9 MUL-8086: docs: explain workflows and quick actions (#9331)
* docs: explain workflows and quick actions (MUL-8086)

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

* docs: clarify workflow defaults, board handoffs, and quick action limits (MUL-8086)

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

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-19 15:41:38 +08:00
LinYushenandmultica-agent 6dc20dd314 feat(llm): use GPT-6 Luna as the built-in assist default (#9329)
Co-authored-by: multica-agent <[email protected]>
2026-10-19 14:23:43 +08:00
9a50d0cc65 fix(docs): stop default-locale pages failing hydration with React #418 (MUL-8013) (#9244)
* fix(docs): stop default-locale pages failing hydration with React #418

SSG prerenders each page under its canonical `[lang]` route, so client
components see `/en/agents` as the pathname at build time, while the
browser URL for the hidden default locale is `/agents` (the i18n
middleware rewrites it). Fumadocs resolves the page tree path with
`usePathname()`, and the tree stores default-locale URLs without the
prefix — so the prerendered HTML rendered tree-path fallbacks ("On this
page" in the TOC popover trigger) while hydration resolved the real
page name ("Agents"). The text mismatch threw React error #418 on every
EN page load and React regenerated the whole tree on the client,
dropping SSR-injected elements such as the next/font preload links.
Non-default locales matched on both sides and were unaffected.

Wrap the docs layout in fumadocs' `FrameworkProvider` with a
`usePathname` that strips the hidden default-locale prefix, so prerender
and hydration see the same locale-less path the page tree uses. The
prerendered HTML now carries the real page names as well. Non-default
locales keep their `/zh`-style prefix and behave exactly as before.

Fixes #9243

* fix(docs): preserve static image imports in framework provider

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

---------

Co-authored-by: Bohan-J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-19 01:58:16 -04:00
88f6d6272b MUL-8057: feat(agent): run Meta Muse Code as an MSP runtime (#9309)
* feat(agent): run Meta Muse Code as an MSP runtime

Muse Code speaks MSP (Muse Session Protocol) over `muse serve`: JSON-RPC
2.0 on stdio, like ACP, but with its own method vocabulary. A session opens
with session/start or session/resume, work is submitted with turn/start, and
assistant text, reasoning and tool calls arrive as transcript items.

The adapter maps those items onto the Backend contract, reads the terminal
turn outcome, and reports a notFound resume as ResumeRejected so the daemon
retries on a fresh session instead of losing continuity silently.

Approval is a session property, not a launch flag: `muse serve` has no
--yolo, and the CLI documents --yolo as TUI-only. A fresh session is created
with approvalMode=allowAll and a resumed session re-asserts it with
session/setApprovalMode, which is what lets a claimed task run without
waiting for a human. The container and per-task worktree remain the
isolation boundary, as they are for every other backend.

commandId must be UUIDv7 — Muse derives a turn id from it and rejects
anything else — so the adapter mints time-ordered ids rather than v4.

The model catalog comes from the session-free model/list query and the pick
is applied through session/start modelId.

* feat(runtime-profiles): allow muse as a protocol family

A custom runtime profile may only be based on a protocol family the daemon
supports, and the database enforces the same list. Widening both keeps the
create flow, the server validation and the CHECK constraint in lockstep with
agent.SupportedTypes.

* fix(muse): complete runtime integration and lifecycle handling (MUL-8057)

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

* docs(muse): document runtime setup and support (MUL-8057)

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

---------

Co-authored-by: yushen <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-19 13:45:42 +08:00
7e225943c8 fix(desktop): require directory-capable Linux portals (MUL-7956) (#9187)
* fix(desktop): require directory-capable Linux file chooser portals

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

* docs(desktop): record why the Linux portal version switch is set

Name the Electron patch that disables Chromium's own portal version gate,
the StringToUint out-param overwrite that zeroes the minimum, and the
Electron versions still affected, so a future upgrade does not drop the
switch on the assumption that upstream fixed it.

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

---------

Co-authored-by: ZeroIce <[email protected]>
Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Bohan <[email protected]>
2026-10-19 13:41:49 +08:00