Directory structure: └── packages/ ├── app/ │ ├── index.html │ ├── package.json │ ├── progress.json │ ├── tailwind.config.ts │ ├── tsconfig.json │ ├── vite.config.ts │ ├── pr/ │ │ ├── openwork-orchestrator.md │ │ ├── openwork-server.md │ │ └── plugin-endpoints.md │ ├── scripts/ │ │ ├── _util.mjs │ │ ├── bump-version.mjs │ │ ├── e2e.mjs │ │ ├── events.mjs │ │ ├── fs-engine.mjs │ │ ├── health.mjs │ │ ├── permissions.mjs │ │ ├── select-session-debug.mjs │ │ ├── session-switch.mjs │ │ ├── sessions-parallel.mjs │ │ ├── sessions.mjs │ │ └── todos.mjs │ └── src/ │ ├── index.tsx │ ├── app/ │ │ ├── command-registry.ts │ │ ├── command-state.ts │ │ ├── constants.ts │ │ ├── entry.tsx │ │ ├── index.css │ │ ├── mcp.ts │ │ ├── system-state.ts │ │ ├── theme.ts │ │ ├── types.ts │ │ ├── components/ │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── command-modal.tsx │ │ │ ├── command-palette-modal.tsx │ │ │ ├── command-run-modal.tsx │ │ │ ├── confirm-modal.tsx │ │ │ ├── create-remote-workspace-modal.tsx │ │ │ ├── create-workspace-modal.tsx │ │ │ ├── flyout-item.tsx │ │ │ ├── language-picker-modal.tsx │ │ │ ├── mcp-auth-modal.tsx │ │ │ ├── model-picker-modal.tsx │ │ │ ├── onboarding-workspace-selector.tsx │ │ │ ├── openwork-logo.tsx │ │ │ ├── part-view.tsx │ │ │ ├── provider-auth-modal.tsx │ │ │ ├── reload-workspace-toast.tsx │ │ │ ├── rename-session-modal.tsx │ │ │ ├── reset-modal.tsx │ │ │ ├── settings-keybinds.tsx │ │ │ ├── status-bar.tsx │ │ │ ├── text-input.tsx │ │ │ ├── thinking-block.tsx │ │ │ ├── workspace-chip.tsx │ │ │ ├── workspace-picker.tsx │ │ │ ├── workspace-switch-overlay.tsx │ │ │ └── session/ │ │ │ ├── composer.tsx │ │ │ ├── context-panel.tsx │ │ │ ├── message-list.tsx │ │ │ ├── minimap.tsx │ │ │ └── sidebar.tsx │ │ ├── context/ │ │ │ ├── extensions.ts │ │ │ ├── global-sdk.tsx │ │ │ ├── global-sync.tsx │ │ │ ├── local.tsx │ │ │ ├── platform.tsx │ │ │ ├── server.tsx │ │ │ ├── session.ts │ │ │ ├── sync.tsx │ │ │ ├── updater.ts │ │ │ └── workspace.ts │ │ ├── data/ │ │ │ └── skill-creator.md │ │ ├── lib/ │ │ │ ├── opencode.ts │ │ │ ├── openwork-server.ts │ │ │ └── tauri.ts │ │ ├── pages/ │ │ │ ├── commands.tsx │ │ │ ├── dashboard.tsx │ │ │ ├── mcp.tsx │ │ │ ├── onboarding.tsx │ │ │ ├── plugins.tsx │ │ │ ├── proto-workspaces.tsx │ │ │ ├── session.tsx │ │ │ └── skills.tsx │ │ ├── state/ │ │ │ ├── extensions.ts │ │ │ ├── sessions.ts │ │ │ └── system.ts │ │ └── utils/ │ │ ├── commands.ts │ │ ├── index.ts │ │ ├── keybinds.ts │ │ ├── persist.ts │ │ ├── plugins.ts │ │ └── providers.ts │ ├── i18n/ │ │ ├── index.ts │ │ └── locales/ │ │ ├── en.ts │ │ ├── index.ts │ │ └── zh.ts │ └── styles/ │ └── tailwind-colors.ts ├── desktop/ │ ├── package.json │ ├── scripts/ │ │ └── prepare-sidecar.mjs │ └── src-tauri/ │ ├── build.rs │ ├── Cargo.toml │ ├── entitlements.plist │ ├── tauri.conf.json │ ├── capabilities/ │ │ └── default.json │ ├── gen/ │ │ └── schemas/ │ │ └── capabilities.json │ ├── icons/ │ │ └── android/ │ │ ├── mipmap-anydpi-v26/ │ │ │ └── ic_launcher.xml │ │ └── values/ │ │ └── ic_launcher_background.xml │ └── src/ │ ├── config.rs │ ├── fs.rs │ ├── lib.rs │ ├── main.rs │ ├── opkg.rs │ ├── paths.rs │ ├── types.rs │ ├── updater.rs │ ├── utils.rs │ ├── commands/ │ │ ├── command_files.rs │ │ ├── config.rs │ │ ├── engine.rs │ │ ├── misc.rs │ │ ├── mod.rs │ │ ├── openwork_server.rs │ │ ├── opkg.rs │ │ ├── owpenbot.rs │ │ ├── skills.rs │ │ ├── updater.rs │ │ └── workspace.rs │ ├── engine/ │ │ ├── doctor.rs │ │ ├── manager.rs │ │ ├── mod.rs │ │ ├── paths.rs │ │ └── spawn.rs │ ├── openwork_server/ │ │ ├── manager.rs │ │ ├── mod.rs │ │ └── spawn.rs │ ├── owpenbot/ │ │ ├── manager.rs │ │ ├── mod.rs │ │ └── spawn.rs │ ├── platform/ │ │ ├── mod.rs │ │ ├── unix.rs │ │ └── windows.rs │ └── workspace/ │ ├── commands.rs │ ├── files.rs │ ├── mod.rs │ ├── state.rs │ └── watch.rs ├── owpenbot/ │ ├── README.md │ ├── install.sh │ ├── package.json │ ├── tsconfig.json │ ├── .env.example │ ├── script/ │ │ └── build.ts │ ├── scripts/ │ │ ├── setup.mjs │ │ ├── smoke.mjs │ │ ├── test-cli.mjs │ │ └── test-npx.mjs │ ├── src/ │ │ ├── bridge.ts │ │ ├── cli.ts │ │ ├── config.ts │ │ ├── db.ts │ │ ├── events.ts │ │ ├── health.ts │ │ ├── logger.ts │ │ ├── opencode.ts │ │ ├── telegram.ts │ │ ├── text.ts │ │ ├── whatsapp-session.ts │ │ └── whatsapp.ts │ └── test/ │ └── db.test.js └── server/ ├── README.md ├── package.json ├── tsconfig.json ├── script/ │ └── build.ts └── src/ ├── approvals.ts ├── audit.ts ├── bun.d.ts ├── cli.ts ├── commands.ts ├── config.ts ├── errors.ts ├── frontmatter.ts ├── jsonc.ts ├── mcp.ts ├── paths.ts ├── plugins.ts ├── server.ts ├── skills.ts ├── types.ts ├── utils.ts ├── validators.ts ├── workspace-files.ts └── workspaces.ts ================================================ FILE: packages/app/index.html ================================================
{translate("commands.modal_description")}
{translate("commands.run_modal_description")}
{props.message}
{subtitle()}
{subtitle()}
{translate("mcp.auth.open_browser_signin")}
Already Connected
{translate("mcp.auth.already_connected_description", { server: serverName() })}
{translate("mcp.auth.configured_previously")}
{reloadNotice()}
{error()}
Opening your browser
{translate("mcp.auth.step1_description", { server: serverName() })}
Authorize OpenWork
{translate("mcp.auth.step2_description")}
Return here when you're done
{translate("mcp.auth.step3_description")}
{props.target === "default" ? translate("settings.model_description_default") : translate("settings.model_description_session")}
${escapeHtml(
text
)}
${escapeHtml(
text
)}`;
};
renderer.link = ({ href, title, text }) => {
const safeHref = isSafeUrl(href) ? escapeHtml(href ?? "#") : "#";
const safeTitle = title ? escapeHtml(title) : "";
return `
${text}
`;
};
renderer.image = ({ href, title, text }) => {
const safeHref = isSafeUrl(href) ? escapeHtml(href ?? "") : "";
const safeTitle = title ? escapeHtml(title) : "";
return `
{clampText(String((p() as { text: string }).text), 2000)}
{outputPreview()}
{safeStringify(toolInput())}
{safeStringify(p())}
Choose a provider to authenticate.
{translate("session.rename_description")}
{subtitle()}