release: prepare 1.0.9 preview and clarify agent readiness

Bundle knowledge-base logos and report unverified or failed native authentication accurately. Update release metadata and document the six-agent discussion validation and known configuration limits.

Checks: frontend tests (379), desktop tests (1700), landing tests (13), frontend builds, desktop pack and dist, DMG and ZIP integrity.
This commit is contained in:
Ryder Sun committed 2026-11-02 15:03:02 +08:00
1 parent ef405bb721
commit 1ddf3fbdd7
22 files changed
+127 -68

No files matched your search

+9 -3
View File
@@ -15,7 +15,7 @@ Meldwork is a local-first multi-Agent collaboration workspace for the Agent tool
You do not need to direct every round, but you still set the goal, grant permissions, and make key decisions. Missing information, permission requests, or tradeoffs may require your input. Workspace writes are opt-in; collaboration history, run state, and deliverables stay local so you can revisit the work and continue it.
<p align="center">
<a href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg"><strong>Download Meldwork V1.0.8 for Apple silicon macOS</strong></a>
<a href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg"><strong>Download Meldwork V1.0.9 for Apple silicon macOS</strong></a>
· <a href="architecture.md">Architecture</a>
· <a href="LICENSE">License</a>
</p>
@@ -86,9 +86,9 @@ Meldwork runs as a local Electron application. Conversations, group configuratio
Selected Agents may send prompts, attachments, or Skills to the model provider configured in their own CLI. Knowledge access is explicit and bounded: the current implementation supports local Obsidian retrieval and CLI-owned Feishu or DingTalk access modes. Local-first describes where Meldwork stores and coordinates work; it does not promise that an Agent's model provider is offline.
## Download V1.0.8
## Download V1.0.9
For Apple silicon macOS, download the [Meldwork V1.0.8 prerelease](https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8) and choose [`Meldwork-1.0.8-arm64.dmg`](https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg). The release also includes a ZIP archive and SHA-256 manifest. Install at least one supported local Agent CLI before opening the app.
For Apple silicon macOS, download the [Meldwork V1.0.9 prerelease](https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9) and choose [`Meldwork-1.0.9-arm64.dmg`](https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg). The release also includes a ZIP archive and SHA-256 manifest. Install at least one supported local Agent CLI before opening the app.
The preview artifacts are ad-hoc signed and not notarized with an Apple Developer ID. macOS may require **Open Anyway** under **System Settings → Privacy & Security** on first launch.
@@ -111,6 +111,12 @@ npm --prefix frontend run build:desktop
npm --prefix desktop test
```
## V1.0.9
Auto Discussion can complete native Agent turns on explicit completion and requires each participant to approve the same delivery version. A real six-Agent unlimited discussion completed in nine rounds with matching delivery hashes. This preview also improves Agent authentication status, handles CLI authentication errors reported on stderr, and bundles knowledge-base logos.
Agent installation does not guarantee a working model connection: OpenClaw's isolated runtime may not support the native environment configuration, WorkBuddy's CLI may require its own login, and Zcode needs valid native provider credentials. Desktop and frontend regression checks passed 1,700 and 379 tests respectively.
## V1.0.8
V1.0.8 keeps Kimi read-only queries in manual approval mode instead of forcing a planning cycle, preserves MiMo's final text chunks, forwards supported native CLI configuration, and retains the selected Auto Discussion mode after sending. Repetitive native output is cancelled with partial replies preserved. Zcode remains before Pi Agent with its official logo and native default configuration; WorkBuddy can reuse a configured desktop model selected in Meldwork.
+9 -3
View File
@@ -15,7 +15,7 @@ Meldwork 是一个本地优先的多 Agent 协作工作空间,用来连接你
你无需安排每一轮发言,但仍负责目标、权限和关键决策。遇到信息缺失、权限请求或需要取舍的问题时,任务可能等待你处理。工作区写入需要明确授权;协作过程、运行状态和产物保存在本地,方便回看和继续工作。
<p align="center">
<a href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg"><strong>下载 Meldwork V1.0.8 Apple 芯片 macOS 版</strong></a>
<a href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg"><strong>下载 Meldwork V1.0.9 Apple 芯片 macOS 版</strong></a>
· <a href="architecture.md">架构</a>
· <a href="LICENSE">许可证</a>
</p>
@@ -86,9 +86,9 @@ Meldwork 作为本地 Electron 应用运行。对话、群组配置、运行记
选定的 Agent 仍可能把 Prompt、附件或 Skill 发送到其自身 CLI 凭据对应的模型服务商。知识访问必须明确选择并受边界约束:当前实现支持本地 Obsidian 检索,以及由本地 CLI 管理的飞书或钉钉访问模式。Local-first 描述的是 Meldwork 的数据和协作位置,不代表 Agent 使用的模型服务商一定离线。
## 下载 V1.0.8
## 下载 V1.0.9
Apple 芯片 macOS 用户请前往 [Meldwork V1.0.8 预发布页](https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8),下载 [`Meldwork-1.0.8-arm64.dmg`](https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg)。发布页同时提供 ZIP 压缩包和 SHA-256 校验文件。启动应用前,请至少安装一个受支持的本地 Agent CLI。
Apple 芯片 macOS 用户请前往 [Meldwork V1.0.9 预发布页](https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9),下载 [`Meldwork-1.0.9-arm64.dmg`](https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg)。发布页同时提供 ZIP 压缩包和 SHA-256 校验文件。启动应用前,请至少安装一个受支持的本地 Agent CLI。
该预览版安装包使用 ad-hoc 临时签名,未使用 Apple Developer ID 签名,也未进行公证。macOS 首次启动时可能需要在“系统设置 → 隐私与安全性”中选择“仍要打开 / Open Anyway”。
@@ -111,6 +111,12 @@ npm --prefix frontend run build:desktop
npm --prefix desktop test
```
## V1.0.9
自动讨论可根据原生 Agent 的明确完成信号结束发言,并要求所有参与者认可同一版交付物。一轮真实六 Agent 无限轮讨论在九轮后完成,交付物哈希一致。此预览版还改进了 Agent 认证状态、识别 CLI 在标准错误中报告的认证失败,并将知识库图标打包进应用。
已安装 Agent 不代表模型连接可用:OpenClaw 的隔离环境可能无法使用现有原生配置,WorkBuddy CLI 可能需要单独登录,Zcode 需要有效的原生提供方凭据。桌面端和前端回归测试分别通过 1,700 项和 379 项。
## V1.0.8
V1.0.8 将 Kimi 只读问答改为手动权限模式,避免强制进入计划流程;修复 MiMo 末尾文本丢失、原生 CLI 配置变量遗漏,以及发送后 Auto Discussion 模式重置。原生输出持续重复时会取消调用并保留已输出内容。Zcode 保持官方标志和 Pi Agent 前的位置,沿用原生默认配置;WorkBuddy 可以复用在 Meldwork 中选定的桌面已配置模型。
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "meldwork-desktop",
"version": "1.0.8",
"version": "1.0.9",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "meldwork-desktop",
"version": "1.0.8",
"version": "1.0.9",
"license": "Apache-2.0",
"dependencies": {
"@agentclientprotocol/sdk": "0.23.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "meldwork-desktop",
"version": "1.0.8",
"version": "1.0.9",
"private": true,
"description": "A local-first desktop workspace for multi-Agent collaboration",
"author": "Ryder-MHumble",
+7
View File
@@ -48,6 +48,7 @@ const {
failedAgentProcessError,
} = require('./cli-process-support.cjs')
const { createLegacyOutboundPayload } = require('../../collaboration/outbound-payload.cjs')
const { authFailureCertainty } = require('../../runs/failure-signals.cjs')
const MAX_PROGRESS_STEPS = 8
const MAX_STDOUT_CAPTURE_BYTES = 10 * 1024 * 1024
@@ -462,6 +463,12 @@ async function runAgent(agent, prompt, workdir, options = {}) {
})
const rawStdout = stdout.text()
const structuredDetail = structuredCliError(rawStdout)
if (!String(result?.text || '').trim() && authFailureCertainty(rawStderr) === 'definitive') {
rejectTerminal(failedAgentProcessError(redactChildSecrets(rawStderr, childEnv), {
sessionRef: failureSessionRef, kind: agent.kind, model: options.env?.CODEBUDDY_MODEL,
}))
return
}
const usableNonZeroResult = code !== 0
&& result
&& typeof result.text === 'string'
@@ -171,6 +171,7 @@ class LocalWorkspaceAgentCatalog {
else if (runtimeMissing) availabilitySource = 'runtime-auth-failure'
else if (nativeState === 'missing') availabilitySource = native.source || 'none'
else if (native?.source === 'native-probe-failed') availabilitySource = 'native-probe-failed'
else if (native?.source === 'native-runtime-unavailable') availabilitySource = 'native-runtime-unavailable'
else if (nativeReadySource) availabilitySource = nativeReadySource
else if (verifiedReady) availabilitySource = 'verified-run'
else if (nativeConfigurationUnknown) availabilitySource = 'local-cli'
@@ -580,6 +580,30 @@ for (const exitCode of [0, 1]) {
})
}
test('WorkBuddy reports authentication failure when the CLI exits successfully with only stderr', async (t) => {
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'meldwork-workbuddy-stderr-auth-'))
t.after(() => fs.rmSync(directory, { recursive: true, force: true }))
const cli = executable(directory, 'workbuddy-stderr-auth.cjs', `
process.stderr.write('Authentication required. Please use /login command to sign in to your account\\n')
`)
await assert.rejects(
runAgent({ kind: 'workbuddy', executable: cli }, 'hello', directory, {}),
error => error.code === 'LOCAL_AGENT_AUTH_REQUIRED',
)
})
test('a completed CLI answer is retained when stderr contains an authentication warning', async (t) => {
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'meldwork-workbuddy-warning-'))
t.after(() => fs.rmSync(directory, { recursive: true, force: true }))
const cli = executable(directory, 'workbuddy-warning.cjs', `
process.stderr.write('Authentication required for an optional service\\n')
process.stdout.write(JSON.stringify({ type: 'result', subtype: 'success', result: 'Done.' }) + '\\n')
`)
const result = await runAgent({ kind: 'workbuddy', executable: cli }, 'hello', directory, {})
assert.equal(result.text, 'Done.')
assert.equal(result.outcome, 'completed')
})
test('Gemini profile state retains one real tool lifecycle id and summary', async (t) => {
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'meldwork-gemini-profile-state-'))
const cli = executable(directory, 'gemini-profile-state.cjs', `
@@ -312,6 +312,7 @@ test('configured credentials do not make an Agent invocable when runtime prerequ
recentlyVerified: false,
available: false,
})
assert.equal(agents()[0].availabilitySource, 'native-runtime-unavailable')
})
test('unidentified product versions remain unavailable after credential validation', async () => {
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "meldwork-frontend",
"version": "1.0.8",
"version": "1.0.9",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "meldwork-frontend",
"version": "1.0.8",
"version": "1.0.9",
"license": "Apache-2.0",
"dependencies": {
"@vicons/ionicons5": "^0.12.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "meldwork-frontend",
"version": "1.0.8",
"version": "1.0.9",
"private": true,
"description": "Meldwork local-first multi-Agent collaboration workspace",
"author": "Ryder-MHumble",
-5
View File
@@ -40,11 +40,6 @@
<div class="agent-discovery-copy">
<p class="agent-discovery-kicker">{{ t('agentDiscovery.kicker') }}</p>
<h1>{{ t('agentDiscovery.title') }}</h1>
<p>{{ t('agentDiscovery.body') }}</p>
<div class="agent-discovery-status">
<span class="agent-discovery-status-dot" aria-hidden="true" />
<span>{{ t('agentDiscovery.status') }}</span>
</div>
</div>
<WavePhysicsLoader :theme="theme" />
</div>
@@ -878,13 +878,14 @@ describe('Meldwork workbench', () => {
await textarea.setValue('@ding')
await flushPromises()
const option = wrapper.get('.knowledge-base-mention-option')
expect(option.get('img').attributes('src')).toBe('./knowledge-base-logos/dingtalk.svg')
const logoSrc = option.get('img').attributes('src')
expect(logoSrc).toMatch(/^data:image\/svg\+xml,/)
expect(option.text()).toContain('Search DingTalk documents through the configured dws connection')
expect(option.text()).toContain('Knowledge')
await option.trigger('click')
expect(wrapper.get('.selected-knowledge-base-avatar').attributes('title')).toBe('Remove knowledge base')
expect(wrapper.get('.selected-knowledge-base-avatar img').attributes('src'))
.toBe('./knowledge-base-logos/dingtalk.svg')
.toBe(logoSrc)
await textarea.setValue('Compare the internal references')
await wrapper.get('.send-button').trigger('click')
+3 -1
View File
@@ -56,7 +56,9 @@ describe('Meldwork workbench', () => {
await flushPromises()
expect(wrapper.get('.agent-discovery-overlay').attributes('role')).toBe('status')
expect(wrapper.get('.agent-discovery-overlay').text()).toContain('Agent CLI')
expect(wrapper.get('.agent-discovery-overlay').text()).toContain('Finding your local Agents')
expect(wrapper.get('.agent-discovery-overlay').text()).not.toContain('Preparing your workspace')
expect(wrapper.get('.agent-discovery-overlay').text()).not.toContain('Meldwork is checking')
expect(wrapper.find('.pixel-blast-container').exists()).toBe(true)
expect(wrapper.get('.agent-discovery-overlay').find('.wave-physics-loader').exists()).toBe(true)
expect(wrapper.get('.agent-discovery-overlay').findAll('.wave-physics-loader')).toHaveLength(1)
@@ -18,6 +18,24 @@ function catalogFor(agent) {
}
describe('Agent compatibility state', () => {
it('shows an invocable local CLI as unverified until its credentials are confirmed', () => {
setLocale('en')
expect(catalogFor({ kind: 'zcode', installed: true, available: true,
credentialState: 'unknown', availabilitySource: 'local-cli' }).label).toBe('Sign-in not verified')
expect(catalogFor({ kind: 'zcode', installed: true, available: true,
credentialState: 'ready', availabilitySource: 'native-credential' }).label).toBe('Sign-in not verified')
expect(catalogFor({ kind: 'zcode', installed: true, available: true,
credentialState: 'ready', availabilitySource: 'verified-run', recentlyVerified: true }).label).toBe('Ready')
})
it('explains when the isolated native runtime could not be prepared', () => {
setLocale('en')
const catalog = useAgentCatalog({
activeGroup: ref(null), directGroupsFor: () => [], installCatalog: ref({ agents: [] }),
snapshot: ref({ agents: [] }), t, theme: ref('light'),
})
expect(catalog.agentStateNote({ kind: 'openclaw', installed: true, ready: false,
availabilitySource: 'native-runtime-unavailable' })).toContain('different configuration or Gateway')
})
it('honors explicit hiding despite history and excludes unavailable WorkBuddy until it becomes ready', () => {
const snapshot = ref({ agents: [
{ kind: 'hermes', installed: true, available: false, showInSidebar: false },
@@ -26,6 +26,16 @@ function obsidianStatus(vaultPath) {
}
describe('knowledge base status requests', () => {
it('keeps bundled logos when a status response contains a conflicting logo', async () => {
const settings = useKnowledgeBaseSettings({
knowledgeBase: ref({ status: vi.fn(async () => [{ ...obsidianStatus(''), logo: '' }]) }),
showError: vi.fn(),
})
await settings.loadKnowledgeBaseStatuses()
const entries = [...settings.localKnowledgeBaseEntries.value, ...settings.plannedKnowledgeBaseEntries.value]
expect(entries).toHaveLength(7)
expect(entries.every(source => source.logo.startsWith('data:image/svg+xml,'))).toBe(true)
})
it('does not let an older full refresh overwrite a newer targeted result', async () => {
const full = deferred()
const targeted = deferred()
@@ -142,6 +142,10 @@ export function useAgentCatalog({
if (['workbuddy-desktop-locked', 'workbuddy-model-unavailable'].includes(agent.availabilitySource)) {
return { label: t('workbuddy.configure'), tone: 'warning', icon: WarningOutline }
}
if (agent.ready && !agent.recentlyVerified
&& ['local-cli', 'native-credential', 'native-shell'].includes(agent.availabilitySource)) {
return { label: t('agent.unverified'), tone: 'neutral', icon: WarningOutline }
}
if (agent.ready) return { label: t('agent.ready'), tone: 'ready', icon: CheckmarkCircleOutline }
if (agent.custom) return { label: t('customAgent.executableUnavailable'), tone: 'warning', icon: WarningOutline }
if (!agent.installed) return { label: t('agent.notInstalled'), tone: 'off', icon: DownloadOutline }
@@ -164,6 +168,7 @@ export function useAgentCatalog({
// next. Empty when there is nothing to explain (ready, or not installed).
function agentStateNote(agent) {
if (!agent || agent.ready || agent.custom || !agent.installed) return ''
if (agent.availabilitySource === 'native-runtime-unavailable') return t('agent.note.nativeRuntimeUnavailable')
if (agent.availabilitySource === 'workbuddy-desktop-locked') return t('workbuddy.desktopLocked')
if (agent.availabilitySource === 'workbuddy-model-unavailable') return t('workbuddy.modelUnavailable')
const version = agent.resolvedVersion || agent.version || ''
@@ -25,6 +25,7 @@ export function useKnowledgeBaseSettings({ knowledgeBase, showError }) {
...definition,
...definition.defaultState,
...(sourceMap.value.get(definition.kind) || {}),
logo: definition.logo,
})))
const localEntries = computed(() => entries.value.filter(source => !comingSoon(source)))
const plannedEntries = computed(() => entries.value.filter(comingSoon))
+16 -8
View File
@@ -1,4 +1,12 @@
import { publicAsset } from './catalog.js'
import feishuSvg from '../public/knowledge-base-logos/feishu.svg?raw'
import dingtalkSvg from '../public/knowledge-base-logos/dingtalk.svg?raw'
import obsidianSvg from '../public/knowledge-base-logos/obsidian.svg?raw'
import notionSvg from '../public/knowledge-base-logos/notion.svg?raw'
import confluenceSvg from '../public/knowledge-base-logos/confluence.svg?raw'
import googleDriveSvg from '../public/knowledge-base-logos/googledrive.svg?raw'
import sharepointSvg from '../public/knowledge-base-logos/sharepoint.svg?raw'
const logo = svg => `data:image/svg+xml,${encodeURIComponent(svg)}`
function defaultState(accessMode) {
if (accessMode === 'vault') {
@@ -41,43 +49,43 @@ export const KNOWLEDGE_BASE_CATALOG = Object.freeze([
{
kind: 'feishu',
accessMode: 'cli',
logo: publicAsset('knowledge-base-logos/feishu.svg'),
logo: logo(feishuSvg),
defaultState: defaultState('cli'),
},
{
kind: 'dingtalk',
accessMode: 'cli',
logo: publicAsset('knowledge-base-logos/dingtalk.svg'),
logo: logo(dingtalkSvg),
defaultState: defaultState('cli'),
},
{
kind: 'obsidian',
accessMode: 'vault',
logo: publicAsset('knowledge-base-logos/obsidian.svg'),
logo: logo(obsidianSvg),
defaultState: defaultState('vault'),
},
{
kind: 'notion',
accessMode: 'oauth',
logo: publicAsset('knowledge-base-logos/notion.svg'),
logo: logo(notionSvg),
defaultState: defaultState('oauth'),
},
{
kind: 'confluence',
accessMode: 'oauth',
logo: publicAsset('knowledge-base-logos/confluence.svg'),
logo: logo(confluenceSvg),
defaultState: defaultState('oauth'),
},
{
kind: 'googledrive',
accessMode: 'oauth',
logo: publicAsset('knowledge-base-logos/googledrive.svg'),
logo: logo(googleDriveSvg),
defaultState: defaultState('oauth'),
},
{
kind: 'sharepoint',
accessMode: 'oauth',
logo: publicAsset('knowledge-base-logos/sharepoint.svg'),
logo: logo(sharepointSvg),
defaultState: defaultState('oauth'),
},
])
+1 -2
View File
@@ -46,8 +46,6 @@ export default {
'delivery.viewing': 'Viewing delivery; next message is regular chat',
'agentDiscovery.kicker': 'Local workspace startup',
'agentDiscovery.title': 'Finding your local Agents',
'agentDiscovery.body': 'Meldwork is checking the Agent CLIs available on this computer.',
'agentDiscovery.status': 'Preparing your workspace',
"delivery.title": "Tasks & delivery",
"delivery.bound": "Next message runs this task",
"delivery.select": "Select task",
@@ -219,6 +217,7 @@ export default {
'agent.note.protocolUnavailable': 'The installed version ({version}) does not support a protocol Meldwork needs.',
'agent.note.verifiedRange': 'Verified versions: {range}.',
'agent.note.probeTimeout': 'Detection timed out. Make sure it starts normally in a terminal, then detect again.',
'agent.note.nativeRuntimeUnavailable': 'Meldwork could not prepare the native runtime. The terminal may use a different configuration or Gateway.',
'agent.note.needsLogin': 'Run it in a terminal and finish signing in, then detect again.',
'agent.note.needsLoginCloud': 'This is a cloud Agent: sign in to it on its server, then detect again.',
'agent.detectedVersion': 'Version {version}',
+1 -2
View File
@@ -46,8 +46,6 @@ export default {
'delivery.viewing': '查看交付中;下一次发送为普通聊天',
'agentDiscovery.kicker': '本地工作台启动中',
'agentDiscovery.title': '正在寻找本地 Agent',
'agentDiscovery.body': 'Meldwork 正在检查这台电脑上可用的 Agent CLI。',
'agentDiscovery.status': '正在准备工作台',
"delivery.title": "任务与交付",
"delivery.bound": "下一次发送用于此任务",
"delivery.select": "选择任务",
@@ -219,6 +217,7 @@ export default {
'agent.note.protocolUnavailable': '已安装的版本 {version} 不支持 Meldwork 需要的通信协议。',
'agent.note.verifiedRange': '已验证的版本:{range}。',
'agent.note.probeTimeout': '检测超时。请确认它能在终端里正常启动,然后重新检测。',
'agent.note.nativeRuntimeUnavailable': 'Meldwork 无法准备原生运行环境;终端可能使用了不同的配置或 Gateway。',
'agent.note.needsLogin': '请先在终端运行它并完成登录,然后重新检测。',
'agent.note.needsLoginCloud': '这是云端 Agent:请到对应的服务器上完成登录,然后重新检测。',
'agent.detectedVersion': '版本 {version}',
-24
View File
@@ -60,30 +60,6 @@
line-height: 1.2;
}
.agent-discovery-copy > p:not(.agent-discovery-kicker) {
max-width: 360px;
margin: 10px 0 0;
color: var(--muted);
line-height: 1.55;
}
.agent-discovery-status {
display: inline-flex;
align-items: center;
gap: 7px;
margin-top: 13px;
color: var(--muted);
font-size: 11px;
}
.agent-discovery-status-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent);
box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 12%, transparent);
}
.agent-discovery-enter-active,
.agent-discovery-leave-active {
transition: opacity 0.28s ease;
+12 -12
View File
@@ -28,13 +28,13 @@
"name": "Meldwork",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "macOS (Apple silicon)",
"softwareVersion": "1.0.8",
"softwareVersion": "1.0.9",
"license": "https://www.apache.org/licenses/LICENSE-2.0",
"description": "Meldwork is a local-first multi-Agent collaboration workspace for macOS. Selected Agents share context, discuss approaches, carry out authorized work, and check results with less manual coordination. Users set goals and permissions and step in when information or key decisions are needed.",
"featureList": "Autonomous Agent collaboration, shared task context, peer contributions and reviews, authorized task execution, Concurrent Responses, Auto Discussion, opt-in workspace writes, user decisions when needed, local collaboration history, multimodal attachments, selected knowledge sources",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
"author": { "@type": "Organization", "name": "Meldwork", "url": "https://github.com/Ryder-Sun/Meldwork" },
"downloadUrl": "https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8",
"downloadUrl": "https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9",
"softwareRequirements": "macOS with Apple silicon. At least one supported local Agent CLI installed (Codex, Claude Code, Gemini CLI, Hermes, OpenCode, or another listed Agent)."
},
{
@@ -78,7 +78,7 @@
{
"@type": "Question",
"name": "Does Meldwork work on Intel macOS, Windows, or Linux?",
"acceptedAnswer": { "@type": "Answer", "text": "The current V1.0.8 preview targets Apple silicon macOS (ad-hoc signed, not notarized — open Open Anyway in System Settings → Privacy & Security on first launch). Cross-platform builds are on the roadmap; the app is Electron so the same source compiles everywhere once those targets land." }
"acceptedAnswer": { "@type": "Answer", "text": "The current V1.0.9 preview targets Apple silicon macOS (ad-hoc signed, not notarized — open Open Anyway in System Settings → Privacy & Security on first launch). Cross-platform builds are on the roadmap; the app is Electron so the same source compiles everywhere once those targets land." }
}
]
},
@@ -125,8 +125,8 @@
<a href="#compare" class="nav-link" data-spy="compare"><span data-zh="产品特点">How it differs</span></a>
<a href="#faq" class="nav-link" data-spy="faq"><span data-zh="常见问题">FAQ</span></a>
</nav>
<a class="cta-dark magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8" target="_blank" rel="noopener" data-zh="&lt;span class=&quot;cta-status&quot;&gt;&lt;/span&gt; 下载 V1.0.8">
<span class="cta-status"></span> Download V1.0.8
<a class="cta-dark magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9" target="_blank" rel="noopener" data-zh="&lt;span class=&quot;cta-status&quot;&gt;&lt;/span&gt; 下载 V1.0.9">
<span class="cta-status"></span> Download V1.0.9
</a>
<button type="button" class="language-toggle" id="languageToggle" aria-label="Switch to Chinese">中 / EN</button>
<button type="button" class="theme-toggle" id="themeToggle" aria-label="Toggle theme">
@@ -145,7 +145,7 @@
<a href="#scenario" class="m-link"><span data-zh="真实协作">In a run</span></a>
<a href="#compare" class="m-link"><span data-zh="产品特点">How it differs</span></a>
<a href="#faq" class="m-link"><span data-zh="常见问题">FAQ</span></a>
<a href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8" target="_blank" rel="noopener" class="m-link m-signin"><span data-zh="下载 V1.0.8">Download V1.0.8</span></a>
<a href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9" target="_blank" rel="noopener" class="m-link m-signin"><span data-zh="下载 V1.0.9">Download V1.0.9</span></a>
</nav>
<!-- ================= HERO ================= -->
@@ -174,9 +174,9 @@
<p class="subhead" data-zh="Meldwork 是一个&lt;strong&gt;本地优先的多 Agent 协作工作空间&lt;/strong&gt;。让你已有的 Agent 共享上下文、讨论方案、在授权范围内执行并检查成果,减少你在它们之间转述和协调的工作。设定目标和权限,在需要补充信息或关键决策时介入。">Meldwork is a <strong>local-first multi-Agent collaboration workspace</strong>. Your existing Agents share context, discuss approaches, carry out authorized work, and check results — with less relaying and coordinating from you. Set the goal and permissions, then step in when they need information or a key decision.</p>
<div class="cta-row">
<a class="cta-primary magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg">
<a class="cta-primary magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg">
<span class="cta-label" data-zh="下载 macOS 版">Download for macOS</span>
<span class="cta-meta" data-zh="V1.0.8 · Apple 芯片">V1.0.8 · Apple silicon</span>
<span class="cta-meta" data-zh="V1.0.9 · Apple 芯片">V1.0.9 · Apple silicon</span>
</a>
<a class="cta-ghost" href="https://github.com/Ryder-Sun/Meldwork" target="_blank" rel="noopener" data-zh="在 GitHub 查看 &lt;span aria-hidden=&quot;true&quot;&gt;↗&lt;/span&gt;">View on GitHub <span aria-hidden="true">↗</span></a>
</div>
@@ -634,7 +634,7 @@
<span class="acc-icon" aria-hidden="true"></span>
</button>
<div class="acc-panel">
<p data-zh="当前 V1.0.8 预览版面向 Apple 芯片 macOS,采用临时签名且未公证,首次启动可能需在&lt;em&gt;系统设置 → 隐私与安全性&lt;/em&gt;选择&lt;em&gt;仍要打开&lt;/em&gt;。跨平台构建已列入计划,应用基于 Electron,后续将逐步提供相应目标。">The current V1.0.8 preview targets Apple silicon macOS (ad-hoc signed, not notarized — open <em>Open Anyway</em> in <em>System Settings → Privacy &amp; Security</em> on first launch). Cross-platform builds are on the roadmap; the app is Electron so the same source compiles everywhere once those targets land.</p>
<p data-zh="当前 V1.0.9 预览版面向 Apple 芯片 macOS,采用临时签名且未公证,首次启动可能需在&lt;em&gt;系统设置 → 隐私与安全性&lt;/em&gt;选择&lt;em&gt;仍要打开&lt;/em&gt;。跨平台构建已列入计划,应用基于 Electron,后续将逐步提供相应目标。">The current V1.0.9 preview targets Apple silicon macOS (ad-hoc signed, not notarized — open <em>Open Anyway</em> in <em>System Settings → Privacy &amp; Security</em> on first launch). Cross-platform builds are on the roadmap; the app is Electron so the same source compiles everywhere once those targets land.</p>
</div>
</li>
</ul>
@@ -651,10 +651,10 @@
<!-- ================= CTA / FOOTER ================= -->
<footer class="cta-final" id="download">
<h2 class="final-title" data-split data-zh="提出目标,让 Agent 们协作完成。">Set the goal. Let Agents work together.</h2>
<p class="final-sub" data-zh="V1.0.8 修复 Kimi 计划空转、MiMo 末尾文本丢失和 Auto 模式重置,并保留重复输出取消前的内容。CLI 仍需有效原生配置;Magpie 流式结束标记问题需单独修复,本安装包不会替换或重启网关。&lt;a href=&quot;https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;查看验证结果与已知限制 ↗&lt;/a&gt;">V1.0.8 fixes Kimi planning loops, missing MiMo tail text, and Auto mode resets, preserving partial replies when repetitive output is cancelled. CLIs still need valid native configuration; Magpie's stream finish-reason defect requires a separate fix. This package does not replace or restart gateways. <a href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.8" target="_blank" rel="noopener">Read validation results and known limits ↗</a></p>
<p class="final-sub" data-zh="V1.0.9 改进无限轮自动讨论的收尾和交付物认可,并修复认证状态及知识库图标。Agent 仍需有效的原生配置。&lt;a href=&quot;https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;查看验证结果与已知限制 ↗&lt;/a&gt;">V1.0.9 improves unlimited discussion completion and delivery approval, Agent authentication status, and knowledge-base logos. Agents still need valid native configuration. <a href="https://github.com/Ryder-Sun/Meldwork/releases/tag/Meldwork-V1.0.9" target="_blank" rel="noopener">Read validation results and known limits ↗</a></p>
<div class="cta-row">
<a class="cta-primary magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.8/Meldwork-1.0.8-arm64.dmg">
<span class="cta-label" data-zh="下载 V1.0.8">Download V1.0.8</span>
<a class="cta-primary magnet" href="https://github.com/Ryder-Sun/Meldwork/releases/download/Meldwork-V1.0.9/Meldwork-1.0.9-arm64.dmg">
<span class="cta-label" data-zh="下载 V1.0.9">Download V1.0.9</span>
<span class="cta-meta" data-zh="DMG · Apple 芯片">DMG · Apple silicon</span>
</a>
<a class="cta-ghost" href="https://github.com/Ryder-Sun/Meldwork#readme" target="_blank" rel="noopener" data-zh="阅读中文说明 &lt;span aria-hidden=&quot;true&quot;&gt;↗&lt;/span&gt;">Read the README <span aria-hidden="true">↗</span></a>