Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5480c69
fix: sort execution log past runs by timestamp (newest first) (#4018)
sapk Jun 11, 2026
e4ec9dc
MUL-2802: add skill import conflict strategies (#3997)
Bohan-J Jun 11, 2026
8151f60
fix(daemon): drop stale resume session when workdir is not reused (#4…
Bohan-J Jun 11, 2026
0cbb834
docs: merge latest changelog entries (#4030)
Bohan-J Jun 11, 2026
6acca84
fix(agent): clear stale session id when a resumed ACP session is gone…
truffle-dev Jun 11, 2026
0985bad
fix(issues): render thread replies in chronological order (#3691) (#4…
NevilleQingNY Jun 11, 2026
5957454
docs: add June 11 changelog entry (#4037)
multica-eve Jun 11, 2026
5c136f8
fix(lark): fix auth race and redirect param in LarkBindPage (#4047)
yuhaowin Jun 12, 2026
21ff178
MUL-2701: hide raw creator UUID in skill import conflict UI (#3498)
Bohan-J Jun 12, 2026
c510515
fix: suggest daemon profiles for empty disk usage
Bohan-J Jun 12, 2026
9f720a4
fix(desktop): improve renderer recovery prompt (#4056)
Bohan-J Jun 12, 2026
f37d71a
fix: apply single skill overwrite immediately (#4057)
Bohan-J Jun 12, 2026
9439a85
MUL-3242: fix daemon workdir provisioning race
multica-eve Jun 12, 2026
4594c77
feat(agent): add CodeBuddy as first-class CLI backend (#3186)
ApocalypseYun Jun 12, 2026
d2a03b8
Fix chat stop and send recovery (#4060)
NevilleQingNY Jun 12, 2026
99afb82
Add index on "user".created_at (#4063)
ldnvnbl Jun 12, 2026
c8ab73d
MUL-3244: Bind quick-create attachments to created issues (#4062)
Bohan-J Jun 12, 2026
be00801
MUL-3256: add 2026-06-12 changelog entry (#4065)
multica-eve Jun 12, 2026
7d28b5a
fix(issues): remove duplicate emoji reaction entry from comment heade…
forrestchang Jun 12, 2026
943e979
Merge upstream multica-ai/main into fork (Octo integration branch)
Jun 12, 2026
80638cf
chore(octo): renumber migration 119 -> 120 after upstream merge
Jun 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion apps/desktop/src/main/renderer-recovery.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
import { installRendererRecoveryHandlers } from "./renderer-recovery";
import { createElectronReloadPrompt, installRendererRecoveryHandlers } from "./renderer-recovery";

type Handler = (...args: unknown[]) => void;

Expand Down Expand Up @@ -109,4 +109,30 @@ describe("installRendererRecoveryHandlers", () => {
expect(showReloadPrompt).not.toHaveBeenCalled();
expect(fixture.reload).not.toHaveBeenCalled();
});

it("shows actionable recovery guidance before diagnostic details", async () => {
let detail = "";
const showMessageBox = vi.fn(
async (options: { title: string; message: string; detail: string }) => {
detail = options.detail;
return { response: 1 };
},
);
const showReloadPrompt = createElectronReloadPrompt(showMessageBox);

await showReloadPrompt({ kind: "unresponsive", context: {} });

expect(showMessageBox).toHaveBeenCalledWith(
expect.objectContaining({
title: "Multica needs to reload",
message: "The desktop window has been stuck for a few seconds.",
detail: expect.stringContaining(
"Click Reload to refresh this window and keep using Multica.",
),
}),
);
expect(detail).toContain("what you were doing right before this message appeared");
expect(detail).toContain("Activity Monitor sample");
expect(detail).toContain("Diagnostic details:\nkind: unresponsive\ncontext: {}");
});
});
22 changes: 17 additions & 5 deletions apps/desktop/src/main/renderer-recovery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,18 +109,30 @@ function isRecoverableRendererExit(details: unknown) {
function rendererRecoveryMessage(kind: ReloadPromptPayload["kind"]) {
switch (kind) {
case "render-process-gone":
return "The desktop renderer process stopped responding or crashed.";
return "The desktop window stopped unexpectedly.";
case "preload-error":
return "The desktop preload script failed before the app could start.";
return "The desktop window could not finish starting.";
case "unresponsive":
return "The desktop window is not responding.";
return "The desktop window has been stuck for a few seconds.";
}
}

function rendererRecoveryDetail(payload: ReloadPromptPayload) {
const guidance = [
"Click Reload to refresh this window and keep using Multica.",
"If this keeps happening, please tell us what you were doing right before this message appeared and whether Reload recovered the window.",
];

if (payload.kind === "unresponsive") {
guidance.push(
"For macOS reports, an Activity Monitor sample of the Multica Helper (Renderer) process helps us find what blocked the app.",
);
}

return [
"Reloading is the safest recovery path for this window.",
...guidance,
"",
"Diagnostic details:",
`kind: ${payload.kind}`,
`context: ${JSON.stringify(payload.context)}`,
].join("\n");
Expand All @@ -132,4 +144,4 @@ function defaultDevLog(tag: string, ...args: unknown[]) {

function formatError(error: unknown) {
return error instanceof Error ? (error.stack ?? error.message) : String(error);
}
}
13 changes: 13 additions & 0 deletions apps/docs/content/docs/cli.ja.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,19 @@ CI やヘッドレス環境では、ブラウザフローをスキップでき
| `multica skill import ...` | GitHub、ClawHub、またはローカルマシンからスキルをインポート |
| `multica skill files ...` | ネスト: スキルのファイルを管理 |

### スキルインポートの競合

`multica skill import --url <url>` の既定値は `--on-conflict fail` です。同じ名前のスキルがすでに存在する場合、コマンドは構造化された `conflict` 結果で終了し、ワークスペースは変更されません。

既存スキルの作成者で、スキル ID とエージェントの紐付けを維持したまま内容を置き換える場合は `--on-conflict overwrite` を使います。既存スキルを残してコピーを取り込む場合は `--on-conflict rename` を使うと、`-2` のような接尾辞が自動で付きます。同名の項目を単に飛ばす場合は `--on-conflict skip` を使います。

```bash
multica skill import --url https://skills.sh/acme/repo/review-helper
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict overwrite
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict rename
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict skip
```

## スクワッド

| コマンド | 用途 |
Expand Down
13 changes: 13 additions & 0 deletions apps/docs/content/docs/cli.ko.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,19 @@ CI나 headless 환경에서는 브라우저 플로우를 건너뛰세요. 웹
| `multica skill import ...` | GitHub, ClawHub, 또는 로컬 기기에서 스킬 가져오기 |
| `multica skill files ...` | 중첩: 스킬의 파일 관리 |

### 스킬 가져오기 충돌

`multica skill import --url <url>`의 기본값은 `--on-conflict fail`입니다. 같은 이름의 스킬이 이미 있으면 명령은 구조화된 `conflict` 결과로 종료되며 워크스페이스를 변경하지 않습니다.

기존 스킬을 만든 사용자이고, 스킬 ID와 에이전트 연결은 유지한 채 내용을 바꾸려면 `--on-conflict overwrite`를 사용하세요. 기존 스킬을 그대로 두고 복사본을 가져오려면 `--on-conflict rename`을 사용하면 `-2` 같은 접미사가 자동으로 붙습니다. 같은 이름의 항목을 그냥 건너뛰려면 `--on-conflict skip`을 사용하세요.

```bash
multica skill import --url https://skills.sh/acme/repo/review-helper
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict overwrite
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict rename
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict skip
```

## 스쿼드

| 명령어 | 용도 |
Expand Down
19 changes: 19 additions & 0 deletions apps/docs/content/docs/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,25 @@ For the difference between token types, see [Authentication and tokens](/auth-to
| `multica skill import ...` | Import a skill from GitHub, ClawHub, or the local machine |
| `multica skill files ...` | Nested: manage a skill's files |

### Skill import conflicts

`multica skill import --url <url>` defaults to `--on-conflict fail`. If a skill
with the same name already exists, the command exits with a structured
`conflict` result and does not change the workspace.

Use `--on-conflict overwrite` when you created the existing skill and want to
replace its content while preserving its ID and agent bindings. Use
`--on-conflict rename` to import a copy with an automatic suffix such as `-2`.
Use `--on-conflict skip` to leave the existing skill untouched and report
`skipped`.

```bash
multica skill import --url https://skills.sh/acme/repo/review-helper
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict overwrite
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict rename
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict skip
```

## Squads

| Command | Purpose |
Expand Down
13 changes: 13 additions & 0 deletions apps/docs/content/docs/cli.zh.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,19 @@ Token 类型的详细区分见 [认证与令牌](/auth-tokens)。
| `multica skill import ...` | 从 GitHub / ClawHub / 本机导入 Skill |
| `multica skill files ...` | 嵌套:管理 Skill 的文件 |

### Skill 导入冲突

`multica skill import --url <url>` 默认等同于 `--on-conflict fail`。如果工作区里已经有同名 Skill,命令会返回结构化 `conflict` 结果并退出,不会修改工作区。

如果你是已有 Skill 的 creator,并且想用新导入内容覆盖它,同时保留原 Skill 的 ID 和 agent 绑定,用 `--on-conflict overwrite`。如果想保留已有 Skill、另存一份,用 `--on-conflict rename`,系统会自动加 `-2` 这类后缀。如果只是批量导入时遇到同名项就跳过,用 `--on-conflict skip`。

```bash
multica skill import --url https://skills.sh/acme/repo/review-helper
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict overwrite
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict rename
multica skill import --url https://skills.sh/acme/repo/review-helper --on-conflict skip
```

## 小队

| 命令 | 用途 |
Expand Down
8 changes: 4 additions & 4 deletions apps/mobile/app/(app)/[workspace]/issue/[id]/runs.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Agent Runs sheet — presented as a formSheet by the parent Stack. Two
* sections: Active (queued/dispatched/running, created_at desc) and Past
* (failed → cancelled → completed, completed_at desc within each). Empty
* (completed_at desc, status rank as tiebreaker). Empty
* sections hide entirely.
*
* Both entry points (the in-card AgentActivityRow and the Stack-header
Expand Down Expand Up @@ -58,9 +58,9 @@ export default function IssueRunsRoute() {
t.status === "cancelled",
);
return filtered.sort((a, b) => {
const ord = PAST_STATUS_ORDER[a.status] - PAST_STATUS_ORDER[b.status];
if (ord !== 0) return ord;
return (b.completed_at ?? "").localeCompare(a.completed_at ?? "");
const timeDiff = (b.completed_at ?? "").localeCompare(a.completed_at ?? "");
if (timeDiff !== 0) return timeDiff;
return PAST_STATUS_ORDER[a.status] - PAST_STATUS_ORDER[b.status];
});
}, [allTasks]);

Expand Down
57 changes: 42 additions & 15 deletions apps/web/features/landing/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -292,45 +292,72 @@ export function createEnDict(allowSignup: boolean): LandingDict {
fixes: "Bug Fixes",
},
entries: [
{
version: "0.3.21",
date: "2026-06-12",
title: "CodeBuddy Runtime",
changes: [],
features: [
"CodeBuddy can now run local Multica agents, with its available model and effort choices shown automatically",
"Quick-created Issues now keep uploaded files attached from the first draft through the final Issue",
],
improvements: [
"Skill import conflicts are clearer: locked skills show a person's name instead of an internal ID, and a single overwrite now completes in one click",
"Desktop recovery prompts now explain what happened first and give clearer details to include when reporting a stuck window",
"Views that sort or filter people by signup time can now load faster",
],
fixes: [
"Chat now keeps messages and drafts in sync when sending, stopping, or recovering from a failed send",
"Lark account binding now works reliably for users who are already signed in, and sign-in returns to the binding page",
"Local agent runs no longer announce that work has started before the task folder is ready",
],
},
{
version: "0.3.20",
date: "2026-06-10",
title: "Safer Comment Triggers and More Reliable Attachments",
date: "2026-06-11",
title: "Skill Imports, Cleaner Run History, and Resilient Agents",
changes: [],
features: [
"Comment boxes now show which agents or squads will start work before you send, with controls to avoid accidental runs",
"Run transcripts now include timestamps, making agent progress and handoffs easier to review",
"Autopilot detail pages now show who created each autopilot",
"Claude Fable 5 is now available in Multica's supported model and pricing list",
"Skill imports now let you choose what happens when a skill already exists: stop, replace it, save a renamed copy, or skip it",
"Import results now clearly show which skills were added, updated, skipped, blocked by a conflict, or could not be imported",
],
improvements: [
"Comment trigger indicators are quieter, clearer, and less likely to crowd long agent names",
"Desktop now disables daemon start and stop controls when the daemon is managed outside Multica, such as in WSL2",
"Execution logs now show the newest past runs first on web and mobile, so recent progress is easier to scan",
"Changelog content was cleaned up so the latest release notes stay grouped under the right release",
],
fixes: [
"Inline images and files in Issue descriptions now stay visible across web and desktop after reloads",
"Each Issue discussion thread now keeps only one resolved answer at a time, so replacing the conclusion is consistent for everyone",
"Issue pages refresh their data after realtime reconnects, avoiding stale timelines after a connection drop",
"Agent task initiator history now works more reliably for older task records",
"Sticky Issue comments keep a cleaner visual edge while scrolling",
"Issue thread replies now stay in the order they arrived, even when a slower agent reply lands later",
"Agents can recover when a saved session disappears, starting fresh instead of failing again on every mention",
"Reviving an Issue from a new workspace folder now starts a fresh session instead of retrying one that only existed in the old folder",
],
},
{
version: "0.3.19",
date: "2026-06-09",
title: "More Reliable Agents, Attachments, and Issue Threads",
date: "2026-06-10",
title: "Safer Comment Triggers, Reliable Agents, and Attachments",
changes: [],
features: [
"Comment boxes now show which agents or squads will start work before you send, with controls to avoid accidental runs",
"Run transcripts now include timestamps, making agent progress and handoffs easier to review",
"Autopilot detail pages now show who created each autopilot",
"Claude Fable 5 is now available in Multica's supported model and pricing list",
"Issue conversations can now resolve a specific reply, making long threads easier to close while keeping the final answer visible",
"Lark and Feishu conversations now show a typing reaction while Multica is preparing a reply, then clear it before the answer is sent",
"Agent runs now know who started each task, making handoffs, audit trails, and privacy-aware behavior more accurate",
"OpenClaw users can point Multica at a custom app location and data folder from their local configuration",
],
improvements: [
"Comment trigger indicators are quieter, clearer, and less likely to crowd long agent names",
"Desktop now disables daemon start and stop controls when the daemon is managed outside Multica, such as in WSL2",
"The active agent indicator in an Issue header is easier to read, with motion only while work is running and clearer queued wording otherwise",
"The CLI now gives clearer guidance around common errors, sign-in problems, and project setup values",
],
fixes: [
"Inline images and files in Issue descriptions now stay visible across web and desktop after reloads",
"Each Issue discussion thread now keeps only one resolved answer at a time, so replacing the conclusion is consistent for everyone",
"Issue pages refresh their data after realtime reconnects, avoiding stale timelines after a connection drop",
"Agent task initiator history now works more reliably for older task records",
"Sticky Issue comments keep a cleaner visual edge while scrolling",
"Newly posted attachments now use stable private download links, so images and files stay visible after temporary upload links expire",
"Autopilot runs started from newly created Issues now fail cleanly when the assigned task cannot complete, instead of staying stuck",
"Inbox deep links now scroll inside the Issue timeline without pushing the desktop window out of place",
Expand Down
Loading
Loading