From a6ccdccedb447af208b6ee6f93b9c46387e52eff Mon Sep 17 00:00:00 2001 From: LukeParkerDev <10430890+Hona@users.noreply.github.com> Date: Mon, 26 Oct 2026 15:26:15 +1000 Subject: [PATCH 01/26] feat(desktop): ship GUI plugins through ./gui-experimental exports One squashed commit of the GUI plugins branch, rebased onto dev after the desktop beta merge (the original 32 commits are tagged curious-planet-before-rebase-3). A plugin in opencode.json can ship a ./gui-experimental part beside its server and ./tui parts. The desktop's built-in features are built-in plugins in packages/gui-plugins, on the GUI SDK in @opencode/plugin/gui. Plugins provide and read contracts at runtime (ctx.provide, ctx.use, ctx.main), and built-in-only API lives in the workspace-only @opencode/plugin/gui/builtin. Rebase notes: dev's new SDK surface (closed side tabs, panel enter, launcher menu items, Layout.hide/draft/command/side.menu, composer quotes, embed stills, session.location.* slots) is ported to the plugin SDK; the dock region, the bottom panel placement, session.panel.sidebar and the channel titlebar placement are gone as on dev. The Sources plugin, terminal quotes, memory diagnostics and the updater beta pages follow the plugin API, and the story harness is packages/stories. --- .github/workflows/check.yml | 2 +- .opencode/skills/app-e2e-tests/SKILL.md | 2 +- .opencode/skills/component-tests/SKILL.md | 10 +- .opencode/skills/opencode-dev/SKILL.md | 2 +- .opencode/skills/unit-tests/SKILL.md | 10 +- .oxlintrc.json | 43 +- bun.lock | 36 +- package.json | 2 +- .../browser-pane-restore.spec.ts | 60 +- .../app/component-tests/browser-pane.spec.ts | 4 +- .../app/component-tests/debug-bar.spec.ts | 36 +- .../component-tests/extension-graph.spec.ts | 83 - .../app/component-tests/plugin-graph.spec.ts | 61 + ...st.fixture.tsx => plugin-host.fixture.tsx} | 145 +- ...nsion-host.spec.ts => plugin-host.spec.ts} | 580 ++-- .../sources-experiment.spec.ts | 8 +- .../component-tests/terminal-focus.spec.ts | 2 +- .../app/e2e/performance/terminals/probe.ts | 7 +- ....spec.ts => mobile-plugin-drawers.spec.ts} | 28 +- ...ensions.spec.ts => mobile-plugins.spec.ts} | 4 +- packages/app/e2e/regression/review.spec.ts | 8 +- .../e2e/regression/session-summary.spec.ts | 2 +- .../app/e2e/regression/settings-wsl.spec.ts | 16 +- .../app/e2e/regression/terminal-input.spec.ts | 4 +- packages/app/e2e/regression/whats-new.spec.ts | 8 +- .../app/e2e/utils/app-direction.fixture.tsx | 24 +- packages/app/e2e/utils/direction.ts | 4 +- .../app/e2e/utils/settings-wsl.fixture.tsx | 31 +- .../app/e2e/utils/windows-menu.fixture.tsx | 11 +- packages/app/package.json | 3 +- packages/app/src/app.tsx | 6 +- packages/app/src/components-lab/lab.tsx | 18 +- .../app/src/composer/comment-note.test.ts | 4 +- packages/app/src/composer/model.ts | 24 +- packages/app/src/composer/request.test.ts | 2 +- packages/app/src/composer/schema.test.ts | 4 +- packages/app/src/composer/schema.ts | 6 +- packages/app/src/desktop.ts | 2 +- packages/app/src/home/projects/controller.tsx | 2 +- packages/app/src/home/projects/view.tsx | 10 +- .../app/src/new-session/project/controller.ts | 4 +- .../app/src/providers/connect/remote.test.ts | 6 +- .../app/src/runtime/extension/builtins.ts | 15 - .../app/src/runtime/extension/panel-keys.ts | 15 - packages/app/src/runtime/extension/root.tsx | 107 - .../runtime/extension/settings-page-dev.tsx | 96 - .../src/runtime/extension/settings-pages.ts | 36 - packages/app/src/runtime/i18n/en.ts | 21 +- .../app/src/runtime/platform/platform.tsx | 6 +- .../{extension => plugin}/attachment.ts | 10 +- packages/app/src/runtime/plugin/builtins.ts | 15 + .../closed-tabs-view.tsx | 0 .../{extension => plugin}/closed-tabs.test.ts | 9 +- .../{extension => plugin}/closed-tabs.ts | 4 +- .../{extension => plugin}/commands.tsx | 45 +- .../runtime/{extension => plugin}/embeds.tsx | 6 +- .../src/runtime/{extension => plugin}/hmr.tsx | 18 +- .../{extension => plugin}/host-apis.tsx | 111 +- .../runtime/{extension => plugin}/host.tsx | 532 ++-- .../{extension => plugin}/installed.ts | 13 +- .../runtime/{extension => plugin}/ipc.test.ts | 9 +- .../src/runtime/{extension => plugin}/ipc.ts | 6 +- .../runtime/{extension => plugin}/located.ts | 2 +- .../{extension => plugin}/menubar-items.ts | 4 +- .../runtime/{extension => plugin}/mobile.tsx | 20 +- .../app/src/runtime/plugin/module.test.ts | 57 + packages/app/src/runtime/plugin/module.ts | 64 + .../{extension => plugin}/mounted-session.ts | 8 +- .../{extension => plugin}/pane-drag.tsx | 0 packages/app/src/runtime/plugin/panel-keys.ts | 15 + .../{extension => plugin}/panel-menu.ts | 8 +- .../{extension => plugin}/panel-trigger.tsx | 11 +- .../runtime/{extension => plugin}/panels.tsx | 98 +- packages/app/src/runtime/plugin/plugins.tsx | 103 + .../runtime/{extension => plugin}/render.tsx | 37 +- packages/app/src/runtime/plugin/root.tsx | 155 ++ .../{extension => plugin}/server-shell.tsx | 37 +- .../runtime/{extension => plugin}/servers.tsx | 80 +- .../settings-page-view.tsx | 16 +- .../app/src/runtime/plugin/settings-pages.ts | 25 + .../src/runtime/plugin/settings-plugins.tsx | 167 ++ .../{extension => plugin}/side-region.tsx | 10 +- .../runtime/{extension => plugin}/stores.ts | 45 +- .../tab-strip-scroll.test.ts | 0 .../{extension => plugin}/tab-strip-scroll.ts | 0 .../{extension => plugin}/titlebar-items.css | 0 .../titlebar-items.stories.tsx | 4 +- .../{extension => plugin}/titlebar-items.tsx | 6 +- packages/app/src/runtime/server/client.tsx | 12 +- packages/app/src/runtime/server/health.ts | 54 +- .../app/src/runtime/server/registry.test.ts | 11 +- packages/app/src/runtime/server/registry.tsx | 19 +- .../app/src/servers/registry/add-menu.tsx | 4 +- .../app/src/servers/registry/controller.ts | 6 +- .../{extension-row.tsx => plugin-row.tsx} | 16 +- .../app/src/servers/registry/row-items.tsx | 4 +- .../session/commands/use-session-commands.tsx | 15 +- packages/app/src/session/composer/region.tsx | 4 +- packages/app/src/session/requests/model.ts | 2 +- packages/app/src/session/screen.tsx | 26 +- .../src/session/session-identity-header.tsx | 8 +- .../src/session/timeline/message-timeline.tsx | 12 +- packages/app/src/settings/general/general.tsx | 8 +- .../app/src/settings/keybinds/migration.ts | 4 +- packages/app/src/settings/model.tsx | 6 +- packages/app/src/settings/pages.ts | 4 +- packages/app/src/settings/route.ts | 20 +- packages/app/src/settings/search-catalog.ts | 7 + packages/app/src/settings/search-index.ts | 36 +- packages/app/src/settings/search.tsx | 2 +- .../src/settings/servers/inventory.test.ts | 12 +- .../app/src/settings/servers/inventory.ts | 30 +- packages/app/src/settings/servers/servers.tsx | 4 +- packages/app/src/settings/shell.tsx | 33 +- packages/app/src/settings/surface.tsx | 18 +- .../src/settings/workspaces/workspaces.tsx | 2 +- packages/app/src/shell/commands/command.tsx | 3 +- .../src/shell/commands/desktop-menu.test.ts | 6 +- .../app/src/shell/commands/desktop-menu.ts | 13 +- packages/app/src/shell/commands/palette.ts | 18 +- packages/app/src/shell/errors/error.tsx | 8 +- .../app/src/shell/mobile-panel-drawer.tsx | 2 +- packages/app/src/shell/routes/routes.tsx | 6 +- packages/app/src/shell/shell.tsx | 10 +- packages/app/src/shell/state/layout.tsx | 8 +- packages/app/src/shell/tabs/schema.ts | 2 +- packages/app/src/shell/tabs/tabs.tsx | 8 +- packages/app/src/shell/titlebar/titlebar.tsx | 2 +- .../app/src/shell/titlebar/windows-menu.tsx | 6 +- packages/app/src/workspaces/files/artifact.ts | 2 +- .../app/src/workspaces/files/content-cache.ts | 2 +- packages/app/src/workspaces/files/model.tsx | 12 +- packages/app/src/workspaces/files/types.ts | 2 +- .../src/workspaces/selection/picker.test.ts | 6 +- ...alled.test.ts => plugin-installed.test.ts} | 22 +- ...ions.test.ts => plugin-migrations.test.ts} | 92 +- ...ives.test.ts => plugin-primitives.test.ts} | 33 +- packages/app/test-browser/ssh-health.test.ts | 14 +- packages/app/vite.js | 2 +- .../cli/src/commands/handlers/plugin/list.ts | 4 +- packages/client/src/effect/api/api.ts | 8 + .../client/src/effect/generated/client.ts | 10 + .../client/src/promise/generated/client.ts | 14 + .../client/src/promise/generated/types.ts | 29 +- packages/core/src/config/plugin/source.ts | 8 +- packages/core/src/plugin.ts | 20 +- packages/core/src/plugin/module.ts | 90 +- packages/core/src/plugin/service.ts | 8 + packages/core/src/plugin/supervisor.ts | 2 +- packages/core/test/plugin.test.ts | 59 + packages/core/test/plugin/module.test.ts | 54 + packages/desktop/AGENTS.md | 2 +- packages/desktop/package.json | 3 +- packages/desktop/src/main/desktop.ts | 8 +- .../desktop/src/main/diagnostics/options.ts | 2 +- .../desktop/src/main/extension/archive.ts | 87 - packages/desktop/src/main/extension/assets.ts | 78 - .../src/main/extension/enable-state.ts | 12 - packages/desktop/src/main/extension/error.ts | 17 - .../src/main/extension/manager.test.ts | 57 - .../desktop/src/main/extension/manager.ts | 125 - .../desktop/src/main/extension/manifest.ts | 43 - packages/desktop/src/main/extension/module.ts | 65 - .../src/main/ipc-handlers/extensions.ts | 63 - .../desktop/src/main/ipc-handlers/plugins.ts | 54 + packages/desktop/src/main/ipc.ts | 8 +- .../desktop/src/main/lifecycle/configure.ts | 2 +- packages/desktop/src/main/native/menu.ts | 17 +- .../desktop/src/main/native/translations.ts | 4 +- .../src/main/{extension => plugin}/embeds.ts | 12 +- .../desktop/src/main/plugin/enable-state.ts | 15 + packages/desktop/src/main/plugin/error.ts | 19 + .../src/main/{extension => plugin}/host.ts | 541 ++-- .../src/main/{extension => plugin}/index.ts | 32 +- .../{extension => plugin}/lifecycle.test.ts | 18 +- .../main/{extension => plugin}/lifecycle.ts | 39 +- .../desktop/src/main/plugin/manager.test.ts | 44 + packages/desktop/src/main/plugin/manager.ts | 17 + .../desktop/src/main/plugin/module.test.ts | 35 + packages/desktop/src/main/plugin/module.ts | 57 + .../{extension => plugin}/storage.test.ts | 52 +- .../src/main/{extension => plugin}/storage.ts | 32 +- .../src/main/service/sidecar-credentials.ts | 10 + .../desktop/src/main/storage/database.test.ts | 29 +- packages/desktop/src/main/storage/index.ts | 4 +- .../desktop/src/main/storage/migration.gen.ts | 11 + .../migration.sql | 1 + .../snapshot.json | 194 ++ .../migration.sql | 3 + .../snapshot.json | 194 ++ packages/desktop/src/main/storage/schema.ts | 19 +- .../desktop/src/main/storage/store.test.ts | 1 + packages/desktop/src/main/storage/store.ts | 25 +- .../src/main/storage/window-snapshot.test.ts | 8 +- .../src/main/storage/window-snapshot.ts | 8 +- packages/desktop/src/main/windows/protocol.ts | 34 +- .../desktop/src/main/windows/registry.test.ts | 6 +- packages/desktop/src/main/windows/scheme.ts | 5 +- packages/desktop/src/preload/index.ts | 2 +- packages/desktop/src/preload/types.ts | 2 +- packages/desktop/src/renderer/desktop-app.tsx | 8 +- packages/desktop/src/renderer/extensions.ts | 97 - .../desktop/src/renderer/platform/index.ts | 4 +- packages/desktop/src/renderer/plugins.ts | 91 + packages/desktop/src/shared/ipc-rpc.ts | 6 +- packages/desktop/src/shared/ipc-rpc/events.ts | 41 +- .../desktop/src/shared/ipc-rpc/extensions.ts | 115 - .../desktop/src/shared/ipc-rpc/plugins.ts | 119 + packages/desktop/src/shared/ipc-transport.ts | 4 +- .../desktop/src/shared/window-bootstrap.ts | 2 +- packages/gui-extensions/README.md | 723 ----- .../gui-extensions/src/browser/contract.ts | 15 - packages/gui-extensions/src/browser/index.ts | 87 - .../gui-extensions/src/builtins.typecheck.ts | 42 - packages/gui-extensions/src/file/index.ts | 82 - packages/gui-extensions/src/main.ts | 36 - packages/gui-extensions/src/pairing/index.ts | 14 - packages/gui-extensions/src/sdk/bridge.ts | 287 -- .../src/sdk/compose.typecheck.ts | 296 -- packages/gui-extensions/src/sdk/core.ts | 980 ------- packages/gui-extensions/src/sdk/index.ts | 11 - packages/gui-extensions/src/sdk/solid.ts | 178 -- packages/gui-extensions/src/sources/index.ts | 10 - packages/gui-extensions/src/wsl/index.ts | 82 - .../{gui-extensions => gui-plugins}/AGENTS.md | 63 +- packages/gui-plugins/README.md | 701 +++++ .../bunfig.toml | 0 .../happydom.ts | 0 .../package.json | 9 +- .../src/browser/address.test.ts | 0 .../src/browser/address.ts | 0 .../src/browser/analysis.test.ts | 0 .../src/browser/analysis.ts | 0 .../src/browser/bar.css | 0 .../src/browser/cdp.ts | 0 .../src/browser/chromium.ts | 2 +- .../src/browser/comment.css | 0 .../src/browser/comment.test.ts | 0 .../src/browser/comment.ts | 2 +- .../src/browser/connection.test.ts | 4 +- .../src/browser/connection.ts | 6 +- .../src/browser/diagnostics.ts | 0 .../src/browser/errors.test.ts | 0 .../src/browser/errors.ts | 0 .../src/browser/files.test.ts | 0 .../src/browser/files.ts | 0 .../src/browser/history.ts | 0 .../src/browser/i18n/am.ts | 0 .../src/browser/i18n/ar.ts | 0 .../src/browser/i18n/az.ts | 0 .../src/browser/i18n/bg.ts | 0 .../src/browser/i18n/bn.ts | 0 .../src/browser/i18n/br.ts | 0 .../src/browser/i18n/bs.ts | 0 .../src/browser/i18n/ca.ts | 0 .../src/browser/i18n/cs.ts | 0 .../src/browser/i18n/da.ts | 0 .../src/browser/i18n/de.ts | 0 .../src/browser/i18n/dv.ts | 0 .../src/browser/i18n/dz.ts | 0 .../src/browser/i18n/el.ts | 0 .../src/browser/i18n/en.ts | 0 .../src/browser/i18n/es.ts | 0 .../src/browser/i18n/et.ts | 0 .../src/browser/i18n/fa.ts | 0 .../src/browser/i18n/fi.ts | 0 .../src/browser/i18n/fo.ts | 0 .../src/browser/i18n/fr.ts | 0 .../src/browser/i18n/he.ts | 0 .../src/browser/i18n/hi.ts | 0 .../src/browser/i18n/hr.ts | 0 .../src/browser/i18n/hu.ts | 0 .../src/browser/i18n/hy.ts | 0 .../src/browser/i18n/id.ts | 0 .../src/browser/i18n/is.ts | 0 .../src/browser/i18n/it.ts | 0 .../src/browser/i18n/ja.ts | 0 .../src/browser/i18n/ka.ts | 0 .../src/browser/i18n/km.ts | 0 .../src/browser/i18n/ko.ts | 0 .../src/browser/i18n/lo.ts | 0 .../src/browser/i18n/lt.ts | 0 .../src/browser/i18n/lv.ts | 0 .../src/browser/i18n/mk.ts | 0 .../src/browser/i18n/mn.ts | 0 .../src/browser/i18n/ms.ts | 0 .../src/browser/i18n/my.ts | 0 .../src/browser/i18n/ne.ts | 0 .../src/browser/i18n/nl.ts | 0 .../src/browser/i18n/no.ts | 0 .../src/browser/i18n/pa.ts | 0 .../src/browser/i18n/pl.ts | 0 .../src/browser/i18n/ro.ts | 0 .../src/browser/i18n/ru.ts | 0 .../src/browser/i18n/si.ts | 0 .../src/browser/i18n/sk.ts | 0 .../src/browser/i18n/sl.ts | 0 .../src/browser/i18n/sq.ts | 0 .../src/browser/i18n/sr.ts | 0 .../src/browser/i18n/sv.ts | 0 .../src/browser/i18n/tg.ts | 0 .../src/browser/i18n/th.ts | 0 .../src/browser/i18n/tk.ts | 0 .../src/browser/i18n/tr.ts | 0 .../src/browser/i18n/uk.ts | 0 .../src/browser/i18n/ur.ts | 0 .../src/browser/i18n/uz.ts | 0 .../src/browser/i18n/vi.ts | 0 .../src/browser/i18n/zh.ts | 0 .../src/browser/i18n/zht.ts | 0 .../src/browser/icon.ts | 0 packages/gui-plugins/src/browser/index.ts | 77 + .../src/browser/ipc.ts | 2 +- .../src/browser/keys.test.ts | 0 .../src/browser/keys.ts | 0 .../src/browser/lighthouse.ts | 0 .../src/browser/link.ts | 2 +- .../src/browser/main.ts | 14 +- .../src/browser/model.ts | 10 +- .../src/browser/network.ts | 0 .../src/browser/page-icon.tsx | 0 .../src/browser/pane.ts | 7 +- .../src/browser/panel.fixture.tsx | 95 +- .../src/browser/panel.tsx | 125 +- .../src/browser/policy.test.ts | 0 .../src/browser/policy.ts | 0 .../src/browser/profiling.ts | 0 .../src/browser/refs.test.ts | 7 +- .../src/browser/refs.ts | 6 +- .../src/browser/renderer.tsx | 19 +- .../src/browser/restore.ts | 4 +- .../src/browser/tabs.css | 2 +- .../src/btw/i18n/en.ts | 0 .../src/btw/index.ts | 5 +- .../src/btw/model.ts | 4 +- .../src/btw/panel.tsx | 4 +- .../src/btw/renderer.tsx | 9 +- .../src/context/catalog.ts | 2 +- .../src/context/export.ts | 0 .../src/context/format.ts | 0 .../src/context/i18n/am.ts | 0 .../src/context/i18n/ar.ts | 0 .../src/context/i18n/az.ts | 0 .../src/context/i18n/bg.ts | 0 .../src/context/i18n/bn.ts | 0 .../src/context/i18n/br.ts | 0 .../src/context/i18n/bs.ts | 0 .../src/context/i18n/ca.ts | 0 .../src/context/i18n/cs.ts | 0 .../src/context/i18n/da.ts | 0 .../src/context/i18n/de.ts | 0 .../src/context/i18n/dv.ts | 0 .../src/context/i18n/dz.ts | 0 .../src/context/i18n/el.ts | 0 .../src/context/i18n/en.ts | 0 .../src/context/i18n/es.ts | 0 .../src/context/i18n/et.ts | 0 .../src/context/i18n/fa.ts | 0 .../src/context/i18n/fi.ts | 0 .../src/context/i18n/fo.ts | 0 .../src/context/i18n/fr.ts | 0 .../src/context/i18n/he.ts | 0 .../src/context/i18n/hi.ts | 0 .../src/context/i18n/hr.ts | 0 .../src/context/i18n/hu.ts | 0 .../src/context/i18n/hy.ts | 0 .../src/context/i18n/id.ts | 0 .../src/context/i18n/is.ts | 0 .../src/context/i18n/it.ts | 0 .../src/context/i18n/ja.ts | 0 .../src/context/i18n/ka.ts | 0 .../src/context/i18n/km.ts | 0 .../src/context/i18n/ko.ts | 0 .../src/context/i18n/lo.ts | 0 .../src/context/i18n/lt.ts | 0 .../src/context/i18n/lv.ts | 0 .../src/context/i18n/mk.ts | 0 .../src/context/i18n/mn.ts | 0 .../src/context/i18n/ms.ts | 0 .../src/context/i18n/my.ts | 0 .../src/context/i18n/ne.ts | 0 .../src/context/i18n/nl.ts | 0 .../src/context/i18n/no.ts | 0 .../src/context/i18n/pa.ts | 0 .../src/context/i18n/pl.ts | 0 .../src/context/i18n/ro.ts | 0 .../src/context/i18n/ru.ts | 0 .../src/context/i18n/si.ts | 0 .../src/context/i18n/sk.ts | 0 .../src/context/i18n/sl.ts | 0 .../src/context/i18n/sq.ts | 0 .../src/context/i18n/sr.ts | 0 .../src/context/i18n/sv.ts | 0 .../src/context/i18n/tg.ts | 0 .../src/context/i18n/th.ts | 0 .../src/context/i18n/tk.ts | 0 .../src/context/i18n/tr.ts | 0 .../src/context/i18n/uk.ts | 0 .../src/context/i18n/ur.ts | 0 .../src/context/i18n/uz.ts | 0 .../src/context/i18n/vi.ts | 0 .../src/context/i18n/zh.ts | 0 .../src/context/i18n/zht.ts | 0 .../src/context/index.ts | 11 +- .../src/context/indicator.tsx | 4 +- .../src/context/renderer.tsx | 15 +- .../src/context/tab.tsx | 4 +- .../src/debug/bar.tsx | 9 +- .../src/debug/contract.ts | 2 +- .../src/debug/i18n/am.ts | 0 .../src/debug/i18n/ar.ts | 0 .../src/debug/i18n/az.ts | 0 .../src/debug/i18n/bg.ts | 0 .../src/debug/i18n/bn.ts | 0 .../src/debug/i18n/br.ts | 0 .../src/debug/i18n/bs.ts | 0 .../src/debug/i18n/ca.ts | 0 .../src/debug/i18n/cs.ts | 0 .../src/debug/i18n/da.ts | 0 .../src/debug/i18n/de.ts | 0 .../src/debug/i18n/dv.ts | 0 .../src/debug/i18n/dz.ts | 0 .../src/debug/i18n/el.ts | 0 .../src/debug/i18n/en.ts | 0 .../src/debug/i18n/es.ts | 0 .../src/debug/i18n/et.ts | 0 .../src/debug/i18n/fa.ts | 0 .../src/debug/i18n/fi.ts | 0 .../src/debug/i18n/fo.ts | 0 .../src/debug/i18n/fr.ts | 0 .../src/debug/i18n/he.ts | 0 .../src/debug/i18n/hi.ts | 0 .../src/debug/i18n/hr.ts | 0 .../src/debug/i18n/hu.ts | 0 .../src/debug/i18n/hy.ts | 0 .../src/debug/i18n/id.ts | 0 .../src/debug/i18n/is.ts | 0 .../src/debug/i18n/it.ts | 0 .../src/debug/i18n/ja.ts | 0 .../src/debug/i18n/ka.ts | 0 .../src/debug/i18n/km.ts | 0 .../src/debug/i18n/ko.ts | 0 .../src/debug/i18n/lo.ts | 0 .../src/debug/i18n/lt.ts | 0 .../src/debug/i18n/lv.ts | 0 .../src/debug/i18n/mk.ts | 0 .../src/debug/i18n/mn.ts | 0 .../src/debug/i18n/ms.ts | 0 .../src/debug/i18n/my.ts | 0 .../src/debug/i18n/ne.ts | 0 .../src/debug/i18n/nl.ts | 0 .../src/debug/i18n/no.ts | 0 .../src/debug/i18n/pa.ts | 0 .../src/debug/i18n/pl.ts | 0 .../src/debug/i18n/ro.ts | 0 .../src/debug/i18n/ru.ts | 0 .../src/debug/i18n/si.ts | 0 .../src/debug/i18n/sk.ts | 0 .../src/debug/i18n/sl.ts | 0 .../src/debug/i18n/sq.ts | 0 .../src/debug/i18n/sr.ts | 0 .../src/debug/i18n/sv.ts | 0 .../src/debug/i18n/tg.ts | 0 .../src/debug/i18n/th.ts | 0 .../src/debug/i18n/tk.ts | 0 .../src/debug/i18n/tr.ts | 0 .../src/debug/i18n/uk.ts | 0 .../src/debug/i18n/ur.ts | 0 .../src/debug/i18n/uz.ts | 0 .../src/debug/i18n/vi.ts | 0 .../src/debug/i18n/zh.ts | 0 .../src/debug/i18n/zht.ts | 0 .../src/debug/index.ts | 14 +- .../src/debug/main.ts | 19 +- .../src/debug/memory-infra.test.ts | 0 .../src/debug/memory-infra.ts | 0 .../src/debug/memory-log.ts | 2 +- .../src/debug/memory-record.test.ts | 0 .../src/debug/memory-record.ts | 0 .../src/debug/motion.tsx | 6 +- .../src/debug/options.test.ts | 0 .../src/debug/options.ts | 0 .../src/debug/renderer.tsx | 11 +- .../src/debug/server-heap.test.ts | 0 .../src/debug/server-heap.ts | 2 +- .../src/debug/signal.test.ts | 0 .../src/debug/signal.ts | 0 .../src/details/config-file.test.ts | 0 .../src/details/config-file.ts | 0 .../src/details/configured-lsp.test.ts | 0 .../src/details/configured-lsp.ts | 0 .../src/details/details.css | 0 .../src/details/i18n/am.ts | 0 .../src/details/i18n/ar.ts | 0 .../src/details/i18n/az.ts | 0 .../src/details/i18n/bg.ts | 0 .../src/details/i18n/bn.ts | 0 .../src/details/i18n/br.ts | 0 .../src/details/i18n/bs.ts | 0 .../src/details/i18n/ca.ts | 0 .../src/details/i18n/cs.ts | 0 .../src/details/i18n/da.ts | 0 .../src/details/i18n/de.ts | 0 .../src/details/i18n/dv.ts | 0 .../src/details/i18n/dz.ts | 0 .../src/details/i18n/el.ts | 0 .../src/details/i18n/en.ts | 0 .../src/details/i18n/es.ts | 0 .../src/details/i18n/et.ts | 0 .../src/details/i18n/fa.ts | 0 .../src/details/i18n/fi.ts | 0 .../src/details/i18n/fo.ts | 0 .../src/details/i18n/fr.ts | 0 .../src/details/i18n/he.ts | 0 .../src/details/i18n/hi.ts | 0 .../src/details/i18n/hr.ts | 0 .../src/details/i18n/hu.ts | 0 .../src/details/i18n/hy.ts | 0 .../src/details/i18n/id.ts | 0 .../src/details/i18n/is.ts | 0 .../src/details/i18n/it.ts | 0 .../src/details/i18n/ja.ts | 0 .../src/details/i18n/ka.ts | 0 .../src/details/i18n/km.ts | 0 .../src/details/i18n/ko.ts | 0 .../src/details/i18n/lo.ts | 0 .../src/details/i18n/lt.ts | 0 .../src/details/i18n/lv.ts | 0 .../src/details/i18n/mk.ts | 0 .../src/details/i18n/mn.ts | 0 .../src/details/i18n/ms.ts | 0 .../src/details/i18n/my.ts | 0 .../src/details/i18n/ne.ts | 0 .../src/details/i18n/nl.ts | 0 .../src/details/i18n/no.ts | 0 .../src/details/i18n/pa.ts | 0 .../src/details/i18n/pl.ts | 0 .../src/details/i18n/ro.ts | 0 .../src/details/i18n/ru.ts | 0 .../src/details/i18n/si.ts | 0 .../src/details/i18n/sk.ts | 0 .../src/details/i18n/sl.ts | 0 .../src/details/i18n/sq.ts | 0 .../src/details/i18n/sr.ts | 0 .../src/details/i18n/sv.ts | 0 .../src/details/i18n/tg.ts | 0 .../src/details/i18n/th.ts | 0 .../src/details/i18n/tk.ts | 0 .../src/details/i18n/tr.ts | 0 .../src/details/i18n/uk.ts | 0 .../src/details/i18n/ur.ts | 0 .../src/details/i18n/uz.ts | 0 .../src/details/i18n/vi.ts | 0 .../src/details/i18n/zh.ts | 0 .../src/details/i18n/zht.ts | 0 .../src/details/index.ts | 13 +- .../src/details/location-menu.tsx | 7 +- .../src/details/location-workspace.tsx | 2 +- .../src/details/panel.tsx | 2 +- .../src/details/paths.ts | 0 .../src/details/popover.tsx | 4 +- .../src/details/renderer.tsx | 5 +- .../src/details/server-panel.tsx | 22 +- .../src/details/workspace-menu.tsx | 4 +- .../src/env.d.ts | 0 .../src/file/apps.ts | 0 .../src/file/artifact-view.css | 0 .../src/file/artifact-view.tsx | 34 +- .../src/file/artifact.test.ts | 0 .../src/file/artifact.ts | 2 +- .../src/file/browser.tsx | 8 +- .../src/file/context.ts | 8 +- .../src/file/drag.ts | 0 .../src/file/i18n/am.ts | 0 .../src/file/i18n/ar.ts | 0 .../src/file/i18n/az.ts | 0 .../src/file/i18n/bg.ts | 0 .../src/file/i18n/bn.ts | 0 .../src/file/i18n/br.ts | 0 .../src/file/i18n/bs.ts | 0 .../src/file/i18n/ca.ts | 0 .../src/file/i18n/cs.ts | 0 .../src/file/i18n/da.ts | 0 .../src/file/i18n/de.ts | 0 .../src/file/i18n/dv.ts | 0 .../src/file/i18n/dz.ts | 0 .../src/file/i18n/el.ts | 0 .../src/file/i18n/en.ts | 0 .../src/file/i18n/es.ts | 0 .../src/file/i18n/et.ts | 0 .../src/file/i18n/fa.ts | 0 .../src/file/i18n/fi.ts | 0 .../src/file/i18n/fo.ts | 0 .../src/file/i18n/fr.ts | 0 .../src/file/i18n/he.ts | 0 .../src/file/i18n/hi.ts | 0 .../src/file/i18n/hr.ts | 0 .../src/file/i18n/hu.ts | 0 .../src/file/i18n/hy.ts | 0 .../src/file/i18n/id.ts | 0 .../src/file/i18n/is.ts | 0 .../src/file/i18n/it.ts | 0 .../src/file/i18n/ja.ts | 0 .../src/file/i18n/ka.ts | 0 .../src/file/i18n/km.ts | 0 .../src/file/i18n/ko.ts | 0 .../src/file/i18n/lo.ts | 0 .../src/file/i18n/lt.ts | 0 .../src/file/i18n/lv.ts | 0 .../src/file/i18n/mk.ts | 0 .../src/file/i18n/mn.ts | 0 .../src/file/i18n/ms.ts | 0 .../src/file/i18n/my.ts | 0 .../src/file/i18n/ne.ts | 0 .../src/file/i18n/nl.ts | 0 .../src/file/i18n/no.ts | 0 .../src/file/i18n/pa.ts | 0 .../src/file/i18n/pl.ts | 0 .../src/file/i18n/ro.ts | 0 .../src/file/i18n/ru.ts | 0 .../src/file/i18n/si.ts | 0 .../src/file/i18n/sk.ts | 0 .../src/file/i18n/sl.ts | 0 .../src/file/i18n/sq.ts | 0 .../src/file/i18n/sr.ts | 0 .../src/file/i18n/sv.ts | 0 .../src/file/i18n/tg.ts | 0 .../src/file/i18n/th.ts | 0 .../src/file/i18n/tk.ts | 0 .../src/file/i18n/tr.ts | 0 .../src/file/i18n/uk.ts | 0 .../src/file/i18n/ur.ts | 0 .../src/file/i18n/uz.ts | 0 .../src/file/i18n/vi.ts | 0 .../src/file/i18n/zh.ts | 0 .../src/file/i18n/zht.ts | 0 .../src/ssh => gui-plugins/src/file}/index.ts | 18 +- .../src/file/label.tsx | 0 .../src/file/list.tsx | 6 +- .../src/file/mobile.css | 0 .../src/file/mobile.tsx | 6 +- .../src/file/open-in-app.tsx | 15 +- .../src/file/path.test.ts | 0 .../src/file/path.ts | 4 +- .../src/file/pierre-tree.tsx | 6 +- .../src/file/renderer.tsx | 46 +- .../src/file/resolve-link.test.ts | 0 .../src/file/resolve-link.ts | 2 +- .../src/file/styles.ts | 0 .../src/file/tabs.css | 0 .../src/file/tree-model.test.ts | 2 +- .../src/file/tree-model.ts | 4 +- .../src/file/view.tsx | 8 +- .../gui-plugins/src/icon-name.typecheck.ts | 9 + packages/gui-plugins/src/main.ts | 33 + .../src/microsoft-office/document.tsx | 6 +- .../src/microsoft-office/document.worker.ts | 0 .../src/microsoft-office/fonts-cjk.ts | 0 .../src/microsoft-office/fonts.test.ts | 0 .../src/microsoft-office/fonts.ts | 0 .../src/microsoft-office/i18n/en.ts | 0 .../src/microsoft-office/index.ts | 5 +- .../src/microsoft-office/links.test.ts | 0 .../src/microsoft-office/links.ts | 0 .../src/microsoft-office/pages.tsx | 2 +- .../src/microsoft-office/paper.ts | 0 .../src/microsoft-office/presentation.tsx | 6 +- .../microsoft-office/presentation.worker.ts | 0 .../src/microsoft-office/renderer.tsx | 8 +- .../src/microsoft-office/sheet-cells.test.ts | 0 .../src/microsoft-office/sheet-cells.ts | 0 .../src/microsoft-office/sheet-frame.ts | 0 .../src/microsoft-office/sheet-paint.ts | 0 .../src/microsoft-office/sheet-protocol.ts | 0 .../src/microsoft-office/slide-fonts.ts | 0 .../src/microsoft-office/slide-protocol.ts | 0 .../src/microsoft-office/slide-text.test.ts | 0 .../src/microsoft-office/slide-text.ts | 0 .../src/microsoft-office/spreadsheet.tsx | 8 +- .../microsoft-office/spreadsheet.worker.ts | 0 .../src/microsoft-office/word-images.ts | 0 .../src/microsoft-office/word-protocol.ts | 0 .../src/microsoft-office/word-text.ts | 0 .../microsoft-office/worker-rpc.fixture.ts | 0 .../src/microsoft-office/worker-rpc.test.ts | 0 .../src/microsoft-office/worker-rpc.ts | 0 .../src/pairing/contract.ts | 2 +- .../src/pairing/i18n/en.ts | 0 packages/gui-plugins/src/pairing/index.ts | 4 + .../src/pairing/main.ts | 21 +- .../src/pairing/page.stories.tsx | 6 +- .../src/pairing/page.tsx | 8 +- .../src/pairing/remote.test.ts | 0 .../src/pairing/remote.ts | 0 .../src/pairing/renderer.tsx | 21 +- .../src/renderer.ts | 41 +- .../src/review/i18n/am.ts | 0 .../src/review/i18n/ar.ts | 0 .../src/review/i18n/az.ts | 0 .../src/review/i18n/bg.ts | 0 .../src/review/i18n/bn.ts | 0 .../src/review/i18n/br.ts | 0 .../src/review/i18n/bs.ts | 0 .../src/review/i18n/ca.ts | 0 .../src/review/i18n/cs.ts | 0 .../src/review/i18n/da.ts | 0 .../src/review/i18n/de.ts | 0 .../src/review/i18n/dv.ts | 0 .../src/review/i18n/dz.ts | 0 .../src/review/i18n/el.ts | 0 .../src/review/i18n/en.ts | 0 .../src/review/i18n/es.ts | 0 .../src/review/i18n/et.ts | 0 .../src/review/i18n/fa.ts | 0 .../src/review/i18n/fi.ts | 0 .../src/review/i18n/fo.ts | 0 .../src/review/i18n/fr.ts | 0 .../src/review/i18n/he.ts | 0 .../src/review/i18n/hi.ts | 0 .../src/review/i18n/hr.ts | 0 .../src/review/i18n/hu.ts | 0 .../src/review/i18n/hy.ts | 0 .../src/review/i18n/id.ts | 0 .../src/review/i18n/is.ts | 0 .../src/review/i18n/it.ts | 0 .../src/review/i18n/ja.ts | 0 .../src/review/i18n/ka.ts | 0 .../src/review/i18n/km.ts | 0 .../src/review/i18n/ko.ts | 0 .../src/review/i18n/lo.ts | 0 .../src/review/i18n/lt.ts | 0 .../src/review/i18n/lv.ts | 0 .../src/review/i18n/mk.ts | 0 .../src/review/i18n/mn.ts | 0 .../src/review/i18n/ms.ts | 0 .../src/review/i18n/my.ts | 0 .../src/review/i18n/ne.ts | 0 .../src/review/i18n/nl.ts | 0 .../src/review/i18n/no.ts | 0 .../src/review/i18n/pa.ts | 0 .../src/review/i18n/pl.ts | 0 .../src/review/i18n/ro.ts | 0 .../src/review/i18n/ru.ts | 0 .../src/review/i18n/si.ts | 0 .../src/review/i18n/sk.ts | 0 .../src/review/i18n/sl.ts | 0 .../src/review/i18n/sq.ts | 0 .../src/review/i18n/sr.ts | 0 .../src/review/i18n/sv.ts | 0 .../src/review/i18n/tg.ts | 0 .../src/review/i18n/th.ts | 0 .../src/review/i18n/tk.ts | 0 .../src/review/i18n/tr.ts | 0 .../src/review/i18n/uk.ts | 0 .../src/review/i18n/ur.ts | 0 .../src/review/i18n/uz.ts | 0 .../src/review/i18n/vi.ts | 0 .../src/review/i18n/zh.ts | 0 .../src/review/i18n/zht.ts | 0 .../src/review/index.ts | 25 +- .../src/review/kinds.test.ts | 0 .../src/review/kinds.ts | 13 +- .../src/review/mobile.tsx | 6 +- .../src/review/model.ts | 2 +- .../src/review/panel.tsx | 13 +- .../src/review/parts.tsx | 8 +- .../src/review/renderer.tsx | 23 +- .../src/review/settings.tsx | 4 +- .../src/sources/i18n/en.ts | 0 packages/gui-plugins/src/sources/index.ts | 4 + .../src/sources/panel.tsx | 7 +- .../src/sources/renderer.tsx | 7 +- .../src/ssh/askpass.test.ts | 0 .../src/ssh/askpass.ts | 0 .../src/ssh/bootstrap.test.ts | 0 .../src/ssh/bootstrap.ts | 0 .../src/ssh/command.test.ts | 0 .../src/ssh/command.ts | 0 .../src/ssh/contract.ts | 2 +- .../src/ssh/controller.ts | 0 .../src/ssh/cover.tsx | 16 +- .../src/ssh/dialog.stories.tsx | 2 +- .../src/ssh/dialog.tsx | 34 +- .../src/ssh/i18n/am.ts | 0 .../src/ssh/i18n/ar.ts | 0 .../src/ssh/i18n/az.ts | 0 .../src/ssh/i18n/bg.ts | 0 .../src/ssh/i18n/bn.ts | 0 .../src/ssh/i18n/br.ts | 0 .../src/ssh/i18n/bs.ts | 0 .../src/ssh/i18n/ca.ts | 0 .../src/ssh/i18n/cs.ts | 0 .../src/ssh/i18n/da.ts | 0 .../src/ssh/i18n/de.ts | 0 .../src/ssh/i18n/dv.ts | 0 .../src/ssh/i18n/dz.ts | 0 .../src/ssh/i18n/el.ts | 0 .../src/ssh/i18n/en.ts | 0 .../src/ssh/i18n/es.ts | 0 .../src/ssh/i18n/et.ts | 0 .../src/ssh/i18n/fa.ts | 0 .../src/ssh/i18n/fi.ts | 0 .../src/ssh/i18n/fo.ts | 0 .../src/ssh/i18n/fr.ts | 0 .../src/ssh/i18n/he.ts | 0 .../src/ssh/i18n/hi.ts | 0 .../src/ssh/i18n/hr.ts | 0 .../src/ssh/i18n/hu.ts | 0 .../src/ssh/i18n/hy.ts | 0 .../src/ssh/i18n/id.ts | 0 .../src/ssh/i18n/is.ts | 0 .../src/ssh/i18n/it.ts | 0 .../src/ssh/i18n/ja.ts | 0 .../src/ssh/i18n/ka.ts | 0 .../src/ssh/i18n/km.ts | 0 .../src/ssh/i18n/ko.ts | 0 .../src/ssh/i18n/lo.ts | 0 .../src/ssh/i18n/lt.ts | 0 .../src/ssh/i18n/lv.ts | 0 .../src/ssh/i18n/mk.ts | 0 .../src/ssh/i18n/mn.ts | 0 .../src/ssh/i18n/ms.ts | 0 .../src/ssh/i18n/my.ts | 0 .../src/ssh/i18n/ne.ts | 0 .../src/ssh/i18n/nl.ts | 0 .../src/ssh/i18n/no.ts | 0 .../src/ssh/i18n/pa.ts | 0 .../src/ssh/i18n/pl.ts | 0 .../src/ssh/i18n/ro.ts | 0 .../src/ssh/i18n/ru.ts | 0 .../src/ssh/i18n/si.ts | 0 .../src/ssh/i18n/sk.ts | 0 .../src/ssh/i18n/sl.ts | 0 .../src/ssh/i18n/sq.ts | 0 .../src/ssh/i18n/sr.ts | 0 .../src/ssh/i18n/sv.ts | 0 .../src/ssh/i18n/tg.ts | 0 .../src/ssh/i18n/th.ts | 0 .../src/ssh/i18n/tk.ts | 0 .../src/ssh/i18n/tr.ts | 0 .../src/ssh/i18n/uk.ts | 0 .../src/ssh/i18n/ur.ts | 0 .../src/ssh/i18n/uz.ts | 0 .../src/ssh/i18n/vi.ts | 0 .../src/ssh/i18n/zh.ts | 0 .../src/ssh/i18n/zht.ts | 0 packages/gui-plugins/src/ssh/index.ts | 71 + .../src/ssh/main.ts | 30 +- .../src/ssh/name.ts | 2 +- .../src/ssh/remote-cli.ts | 0 .../src/ssh/renderer.tsx | 13 +- .../src/ssh/row.tsx | 16 +- .../src/ssh/ssh.css | 0 .../src/ssh/state.ts | 2 +- .../src/terminal/focus.ts | 0 .../src/terminal/i18n/am.ts | 0 .../src/terminal/i18n/ar.ts | 0 .../src/terminal/i18n/az.ts | 0 .../src/terminal/i18n/bg.ts | 0 .../src/terminal/i18n/bn.ts | 0 .../src/terminal/i18n/br.ts | 0 .../src/terminal/i18n/bs.ts | 0 .../src/terminal/i18n/ca.ts | 0 .../src/terminal/i18n/cs.ts | 0 .../src/terminal/i18n/da.ts | 0 .../src/terminal/i18n/de.ts | 0 .../src/terminal/i18n/dv.ts | 0 .../src/terminal/i18n/dz.ts | 0 .../src/terminal/i18n/el.ts | 0 .../src/terminal/i18n/en.ts | 0 .../src/terminal/i18n/es.ts | 0 .../src/terminal/i18n/et.ts | 0 .../src/terminal/i18n/fa.ts | 0 .../src/terminal/i18n/fi.ts | 0 .../src/terminal/i18n/fo.ts | 0 .../src/terminal/i18n/fr.ts | 0 .../src/terminal/i18n/he.ts | 0 .../src/terminal/i18n/hi.ts | 0 .../src/terminal/i18n/hr.ts | 0 .../src/terminal/i18n/hu.ts | 0 .../src/terminal/i18n/hy.ts | 0 .../src/terminal/i18n/id.ts | 0 .../src/terminal/i18n/is.ts | 0 .../src/terminal/i18n/it.ts | 0 .../src/terminal/i18n/ja.ts | 0 .../src/terminal/i18n/ka.ts | 0 .../src/terminal/i18n/km.ts | 0 .../src/terminal/i18n/ko.ts | 0 .../src/terminal/i18n/lo.ts | 0 .../src/terminal/i18n/lt.ts | 0 .../src/terminal/i18n/lv.ts | 0 .../src/terminal/i18n/mk.ts | 0 .../src/terminal/i18n/mn.ts | 0 .../src/terminal/i18n/ms.ts | 0 .../src/terminal/i18n/my.ts | 0 .../src/terminal/i18n/ne.ts | 0 .../src/terminal/i18n/nl.ts | 0 .../src/terminal/i18n/no.ts | 0 .../src/terminal/i18n/pa.ts | 0 .../src/terminal/i18n/pl.ts | 0 .../src/terminal/i18n/ro.ts | 0 .../src/terminal/i18n/ru.ts | 0 .../src/terminal/i18n/si.ts | 0 .../src/terminal/i18n/sk.ts | 0 .../src/terminal/i18n/sl.ts | 0 .../src/terminal/i18n/sq.ts | 0 .../src/terminal/i18n/sr.ts | 0 .../src/terminal/i18n/sv.ts | 0 .../src/terminal/i18n/tg.ts | 0 .../src/terminal/i18n/th.ts | 0 .../src/terminal/i18n/tk.ts | 0 .../src/terminal/i18n/tr.ts | 0 .../src/terminal/i18n/uk.ts | 0 .../src/terminal/i18n/ur.ts | 0 .../src/terminal/i18n/uz.ts | 0 .../src/terminal/i18n/vi.ts | 0 .../src/terminal/i18n/zh.ts | 0 .../src/terminal/i18n/zht.ts | 0 .../src/terminal/index.ts | 10 +- .../src/terminal/label.tsx | 10 +- .../src/terminal/model.test.ts | 5 +- .../src/terminal/model.ts | 13 +- .../src/terminal/panel.tsx | 18 +- .../src/terminal/quote.css | 0 .../src/terminal/quote.tsx | 14 +- .../src/terminal/renderer.tsx | 14 +- .../src/terminal/runtime-adapters.ts | 0 .../src/terminal/serialize.test.ts | 0 .../src/terminal/serialize.ts | 0 .../src/terminal/state.test.ts | 0 .../src/terminal/state.ts | 0 .../src/terminal/tab.tsx | 12 +- .../src/terminal/terminal-key-event.test.ts | 0 .../src/terminal/terminal-key-event.ts | 0 .../src/terminal/terminal.fixture.tsx | 13 +- .../src/terminal/terminal.tsx | 18 +- .../src/terminal/title.ts | 0 .../src/terminal/writer.test.ts | 0 .../src/terminal/writer.ts | 0 .../src/updater/action.ts | 2 +- .../src/updater/actions.tsx | 6 +- .../src/updater/beta-dialog.stories.tsx | 6 +- .../src/updater/beta-dialog.tsx | 4 +- .../src/updater/beta-notes.test.ts | 0 .../src/updater/beta-notes.ts | 0 .../src/updater/beta-page.tsx | 6 +- .../src/updater/i18n/am.ts | 0 .../src/updater/i18n/ar.ts | 0 .../src/updater/i18n/az.ts | 0 .../src/updater/i18n/bg.ts | 0 .../src/updater/i18n/bn.ts | 0 .../src/updater/i18n/br.ts | 0 .../src/updater/i18n/bs.ts | 0 .../src/updater/i18n/ca.ts | 0 .../src/updater/i18n/cs.ts | 0 .../src/updater/i18n/da.ts | 0 .../src/updater/i18n/de.ts | 0 .../src/updater/i18n/dv.ts | 0 .../src/updater/i18n/dz.ts | 0 .../src/updater/i18n/el.ts | 0 .../src/updater/i18n/en.ts | 0 .../src/updater/i18n/es.ts | 0 .../src/updater/i18n/et.ts | 0 .../src/updater/i18n/fa.ts | 0 .../src/updater/i18n/fi.ts | 0 .../src/updater/i18n/fo.ts | 0 .../src/updater/i18n/fr.ts | 0 .../src/updater/i18n/he.ts | 0 .../src/updater/i18n/hi.ts | 0 .../src/updater/i18n/hr.ts | 0 .../src/updater/i18n/hu.ts | 0 .../src/updater/i18n/hy.ts | 0 .../src/updater/i18n/id.ts | 0 .../src/updater/i18n/is.ts | 0 .../src/updater/i18n/it.ts | 0 .../src/updater/i18n/ja.ts | 0 .../src/updater/i18n/ka.ts | 0 .../src/updater/i18n/km.ts | 0 .../src/updater/i18n/ko.ts | 0 .../src/updater/i18n/lo.ts | 0 .../src/updater/i18n/lt.ts | 0 .../src/updater/i18n/lv.ts | 0 .../src/updater/i18n/mk.ts | 0 .../src/updater/i18n/mn.ts | 0 .../src/updater/i18n/ms.ts | 0 .../src/updater/i18n/my.ts | 0 .../src/updater/i18n/ne.ts | 0 .../src/updater/i18n/nl.ts | 0 .../src/updater/i18n/no.ts | 0 .../src/updater/i18n/pa.ts | 0 .../src/updater/i18n/pl.ts | 0 .../src/updater/i18n/ro.ts | 0 .../src/updater/i18n/ru.ts | 0 .../src/updater/i18n/si.ts | 0 .../src/updater/i18n/sk.ts | 0 .../src/updater/i18n/sl.ts | 0 .../src/updater/i18n/sq.ts | 0 .../src/updater/i18n/sr.ts | 0 .../src/updater/i18n/sv.ts | 0 .../src/updater/i18n/tg.ts | 0 .../src/updater/i18n/th.ts | 0 .../src/updater/i18n/tk.ts | 0 .../src/updater/i18n/tr.ts | 0 .../src/updater/i18n/uk.ts | 0 .../src/updater/i18n/ur.ts | 0 .../src/updater/i18n/uz.ts | 0 .../src/updater/i18n/vi.ts | 0 .../src/updater/i18n/zh.ts | 0 .../src/updater/i18n/zht.ts | 0 .../src/updater/index.ts | 20 +- .../src/updater/log.ts | 0 .../src/updater/machine.test.ts | 2 +- .../src/updater/machine.ts | 15 +- .../src/updater/main.ts | 29 +- .../src/updater/platform.ts | 0 .../src/updater/renderer.tsx | 40 +- .../src/updater/section.tsx | 6 +- .../src/updater/whats-new.tsx | 4 +- .../src/wsl/contract.ts | 2 +- .../src/wsl/dialog.css | 0 .../src/wsl/dialog.tsx | 8 +- .../src/wsl/i18n/am.ts | 0 .../src/wsl/i18n/ar.ts | 0 .../src/wsl/i18n/az.ts | 0 .../src/wsl/i18n/bg.ts | 0 .../src/wsl/i18n/bn.ts | 0 .../src/wsl/i18n/br.ts | 0 .../src/wsl/i18n/bs.ts | 0 .../src/wsl/i18n/ca.ts | 0 .../src/wsl/i18n/cs.ts | 0 .../src/wsl/i18n/da.ts | 0 .../src/wsl/i18n/de.ts | 0 .../src/wsl/i18n/dv.ts | 0 .../src/wsl/i18n/dz.ts | 0 .../src/wsl/i18n/el.ts | 0 .../src/wsl/i18n/en.ts | 0 .../src/wsl/i18n/es.ts | 0 .../src/wsl/i18n/et.ts | 0 .../src/wsl/i18n/fa.ts | 0 .../src/wsl/i18n/fi.ts | 0 .../src/wsl/i18n/fo.ts | 0 .../src/wsl/i18n/fr.ts | 0 .../src/wsl/i18n/he.ts | 0 .../src/wsl/i18n/hi.ts | 0 .../src/wsl/i18n/hr.ts | 0 .../src/wsl/i18n/hu.ts | 0 .../src/wsl/i18n/hy.ts | 0 .../src/wsl/i18n/id.ts | 0 .../src/wsl/i18n/is.ts | 0 .../src/wsl/i18n/it.ts | 0 .../src/wsl/i18n/ja.ts | 0 .../src/wsl/i18n/ka.ts | 0 .../src/wsl/i18n/km.ts | 0 .../src/wsl/i18n/ko.ts | 0 .../src/wsl/i18n/lo.ts | 0 .../src/wsl/i18n/lt.ts | 0 .../src/wsl/i18n/lv.ts | 0 .../src/wsl/i18n/mk.ts | 0 .../src/wsl/i18n/mn.ts | 0 .../src/wsl/i18n/ms.ts | 0 .../src/wsl/i18n/my.ts | 0 .../src/wsl/i18n/ne.ts | 0 .../src/wsl/i18n/nl.ts | 0 .../src/wsl/i18n/no.ts | 0 .../src/wsl/i18n/pa.ts | 0 .../src/wsl/i18n/pl.ts | 0 .../src/wsl/i18n/ro.ts | 0 .../src/wsl/i18n/ru.ts | 0 .../src/wsl/i18n/si.ts | 0 .../src/wsl/i18n/sk.ts | 0 .../src/wsl/i18n/sl.ts | 0 .../src/wsl/i18n/sq.ts | 0 .../src/wsl/i18n/sr.ts | 0 .../src/wsl/i18n/sv.ts | 0 .../src/wsl/i18n/tg.ts | 0 .../src/wsl/i18n/th.ts | 0 .../src/wsl/i18n/tk.ts | 0 .../src/wsl/i18n/tr.ts | 0 .../src/wsl/i18n/uk.ts | 0 .../src/wsl/i18n/ur.ts | 0 .../src/wsl/i18n/uz.ts | 0 .../src/wsl/i18n/vi.ts | 0 .../src/wsl/i18n/zh.ts | 0 .../src/wsl/i18n/zht.ts | 0 packages/gui-plugins/src/wsl/index.ts | 72 + .../src/wsl/local.ts | 0 .../src/wsl/main.ts | 24 +- .../src/wsl/model.ts | 0 .../src/wsl/probes.ts | 2 +- .../src/wsl/remote-cli.ts | 2 +- .../src/wsl/renderer.tsx | 11 +- .../src/wsl/row.tsx | 14 +- .../src/wsl/runtime.test.ts | 0 .../src/wsl/runtime.ts | 4 +- .../src/wsl/servers.test.ts | 0 .../src/wsl/servers.ts | 2 +- .../src/wsl/sidecar.ts | 2 +- .../tsconfig.json | 0 packages/plugin-browser/README.md | 4 +- packages/plugin/AGENTS.md | 6 +- packages/plugin/package.json | 30 +- packages/plugin/script/icon-name.ts | 21 + packages/plugin/script/pack.ts | 4 +- packages/plugin/src/gui/browser.ts | 37 + packages/plugin/src/gui/builtin.ts | 402 +++ .../src/sdk => plugin/src/gui}/context.ts | 152 +- packages/plugin/src/gui/context.typecheck.ts | 161 ++ packages/plugin/src/gui/core.ts | 610 +++++ packages/plugin/src/gui/declarations.ts | 26 + .../contract.ts => plugin/src/gui/file.ts} | 71 +- .../src/sdk => plugin/src/gui}/host-apis.ts | 70 +- packages/plugin/src/gui/host.ts | 600 ++++ packages/plugin/src/gui/icon-name.ts | 163 ++ packages/plugin/src/gui/index.ts | 13 + packages/plugin/src/gui/internal.ts | 59 + .../src/sdk => plugin/src/gui}/main.ts | 151 +- packages/plugin/src/gui/modules.ts | 35 + packages/plugin/src/gui/plugin.ts | 94 + packages/plugin/src/gui/plugin.typecheck.ts | 44 + .../src/sdk => plugin/src/gui}/reactive.ts | 23 +- .../src/sdk => plugin/src/gui}/registries.ts | 67 +- .../src/gui}/registries.typecheck.ts | 7 +- .../contract.ts => plugin/src/gui/review.ts} | 54 +- .../src/sdk => plugin/src/gui}/scope.ts | 13 +- packages/plugin/src/gui/solid.ts | 124 + .../contract.ts => plugin/src/gui/updater.ts} | 15 +- packages/plugin/src/gui/vite.ts | 61 + packages/plugin/src/host.ts | 40 +- packages/plugin/src/runtime-modules.ts | 4 +- packages/plugin/test/gui-host.test.ts | 115 + .../test/gui-scope.test.ts} | 2 +- packages/plugin/test/gui-vite.test.ts | 52 + packages/plugin/test/host.test.ts | 95 +- packages/plugin/tsconfig.build.json | 6 +- packages/protocol/openapi.json | 150 +- packages/protocol/src/errors.ts | 8 + packages/protocol/src/groups/plugin.ts | 21 +- packages/schema/src/plugin.ts | 15 +- packages/script/src/pack.ts | 12 +- packages/server/src/handlers/plugin.ts | 14 +- .../pairing.tsx | 13 +- .../settings-page.tsx | 2 +- .../{gui-extensions => gui-plugins}/ssh.tsx | 74 +- packages/stories/src/frame.tsx | 4 +- .../stories/src/{extension.tsx => plugin.tsx} | 56 +- packages/stories/vite.config.ts | 4 +- .../src/feature-plugins/system/plugins.tsx | 15 +- packages/tui/src/plugin/context.tsx | 2 +- packages/ui/src/styles/tailwind/index.css | 2 +- .../rules/no-module-state-tsx.yml | 8 +- .../rules/no-module-state.yml | 8 +- .../sgconfig.yml | 0 script/lint-changed.ts | 14 +- script/oxlint/anti-slop/UPSTREAM.md | 2 +- script/sdk-docs.ts | 12 +- services/www/src/docs/content/build/index.mdx | 8 + .../src/docs/content/build/plugins/cli.mdx | 17 +- .../src/docs/content/build/plugins/effect.mdx | 1 + .../docs/content/build/plugins/effect/rpc.mdx | 1 + .../docs/content/build/plugins/gui/index.mdx | 2436 +++++++++++++++++ .../src/docs/content/build/plugins/index.mdx | 1890 +------------ .../docs/content/build/plugins/migrate-v1.mdx | 13 +- .../src/docs/content/build/plugins/rpc.mdx | 24 + .../src/docs/content/build/plugins/server.mdx | 1799 ++++++++++++ .../src/docs/content/build/sdk/cloudflare.mdx | 2 +- .../www/src/docs/content/build/sdk/index.mdx | 4 +- services/www/src/docs/content/cli/plugins.mdx | 2 +- services/www/src/docs/content/cli/theme.mdx | 6 +- services/www/src/docs/content/config.mdx | 2 +- services/www/src/docs/content/plugins.mdx | 59 +- services/www/src/docs/lib/navigation.ts | 4 +- 1171 files changed, 13564 insertions(+), 8749 deletions(-) delete mode 100644 packages/app/component-tests/extension-graph.spec.ts create mode 100644 packages/app/component-tests/plugin-graph.spec.ts rename packages/app/component-tests/{extension-host.fixture.tsx => plugin-host.fixture.tsx} (79%) rename packages/app/component-tests/{extension-host.spec.ts => plugin-host.spec.ts} (66%) rename packages/app/e2e/regression/{mobile-extension-drawers.spec.ts => mobile-plugin-drawers.spec.ts} (86%) rename packages/app/e2e/regression/{mobile-extensions.spec.ts => mobile-plugins.spec.ts} (99%) delete mode 100644 packages/app/src/runtime/extension/builtins.ts delete mode 100644 packages/app/src/runtime/extension/panel-keys.ts delete mode 100644 packages/app/src/runtime/extension/root.tsx delete mode 100644 packages/app/src/runtime/extension/settings-page-dev.tsx delete mode 100644 packages/app/src/runtime/extension/settings-pages.ts rename packages/app/src/runtime/{extension => plugin}/attachment.ts (53%) create mode 100644 packages/app/src/runtime/plugin/builtins.ts rename packages/app/src/runtime/{extension => plugin}/closed-tabs-view.tsx (100%) rename packages/app/src/runtime/{extension => plugin}/closed-tabs.test.ts (95%) rename packages/app/src/runtime/{extension => plugin}/closed-tabs.ts (98%) rename packages/app/src/runtime/{extension => plugin}/commands.tsx (54%) rename packages/app/src/runtime/{extension => plugin}/embeds.tsx (98%) rename packages/app/src/runtime/{extension => plugin}/hmr.tsx (56%) rename packages/app/src/runtime/{extension => plugin}/host-apis.tsx (90%) rename packages/app/src/runtime/{extension => plugin}/host.tsx (59%) rename packages/app/src/runtime/{extension => plugin}/installed.ts (71%) rename packages/app/src/runtime/{extension => plugin}/ipc.test.ts (93%) rename packages/app/src/runtime/{extension => plugin}/ipc.ts (96%) rename packages/app/src/runtime/{extension => plugin}/located.ts (94%) rename packages/app/src/runtime/{extension => plugin}/menubar-items.ts (81%) rename packages/app/src/runtime/{extension => plugin}/mobile.tsx (93%) create mode 100644 packages/app/src/runtime/plugin/module.test.ts create mode 100644 packages/app/src/runtime/plugin/module.ts rename packages/app/src/runtime/{extension => plugin}/mounted-session.ts (97%) rename packages/app/src/runtime/{extension => plugin}/pane-drag.tsx (100%) create mode 100644 packages/app/src/runtime/plugin/panel-keys.ts rename packages/app/src/runtime/{extension => plugin}/panel-menu.ts (56%) rename packages/app/src/runtime/{extension => plugin}/panel-trigger.tsx (93%) rename packages/app/src/runtime/{extension => plugin}/panels.tsx (88%) create mode 100644 packages/app/src/runtime/plugin/plugins.tsx rename packages/app/src/runtime/{extension => plugin}/render.tsx (62%) create mode 100644 packages/app/src/runtime/plugin/root.tsx rename packages/app/src/runtime/{extension => plugin}/server-shell.tsx (71%) rename packages/app/src/runtime/{extension => plugin}/servers.tsx (64%) rename packages/app/src/runtime/{extension => plugin}/settings-page-view.tsx (63%) create mode 100644 packages/app/src/runtime/plugin/settings-pages.ts create mode 100644 packages/app/src/runtime/plugin/settings-plugins.tsx rename packages/app/src/runtime/{extension => plugin}/side-region.tsx (98%) rename packages/app/src/runtime/{extension => plugin}/stores.ts (81%) rename packages/app/src/runtime/{extension => plugin}/tab-strip-scroll.test.ts (100%) rename packages/app/src/runtime/{extension => plugin}/tab-strip-scroll.ts (100%) rename packages/app/src/runtime/{extension => plugin}/titlebar-items.css (100%) rename packages/app/src/runtime/{extension => plugin}/titlebar-items.stories.tsx (94%) rename packages/app/src/runtime/{extension => plugin}/titlebar-items.tsx (96%) rename packages/app/src/servers/registry/{extension-row.tsx => plugin-row.tsx} (59%) rename packages/app/test-browser/{extension-installed.test.ts => plugin-installed.test.ts} (61%) rename packages/app/test-browser/{extension-migrations.test.ts => plugin-migrations.test.ts} (54%) rename packages/app/test-browser/{extension-primitives.test.ts => plugin-primitives.test.ts} (95%) delete mode 100644 packages/desktop/src/main/extension/archive.ts delete mode 100644 packages/desktop/src/main/extension/assets.ts delete mode 100644 packages/desktop/src/main/extension/enable-state.ts delete mode 100644 packages/desktop/src/main/extension/error.ts delete mode 100644 packages/desktop/src/main/extension/manager.test.ts delete mode 100644 packages/desktop/src/main/extension/manager.ts delete mode 100644 packages/desktop/src/main/extension/manifest.ts delete mode 100644 packages/desktop/src/main/extension/module.ts delete mode 100644 packages/desktop/src/main/ipc-handlers/extensions.ts create mode 100644 packages/desktop/src/main/ipc-handlers/plugins.ts rename packages/desktop/src/main/{extension => plugin}/embeds.ts (93%) create mode 100644 packages/desktop/src/main/plugin/enable-state.ts create mode 100644 packages/desktop/src/main/plugin/error.ts rename packages/desktop/src/main/{extension => plugin}/host.ts (53%) rename packages/desktop/src/main/{extension => plugin}/index.ts (76%) rename packages/desktop/src/main/{extension => plugin}/lifecycle.test.ts (96%) rename packages/desktop/src/main/{extension => plugin}/lifecycle.ts (87%) create mode 100644 packages/desktop/src/main/plugin/manager.test.ts create mode 100644 packages/desktop/src/main/plugin/manager.ts create mode 100644 packages/desktop/src/main/plugin/module.test.ts create mode 100644 packages/desktop/src/main/plugin/module.ts rename packages/desktop/src/main/{extension => plugin}/storage.test.ts (81%) rename packages/desktop/src/main/{extension => plugin}/storage.ts (80%) create mode 100644 packages/desktop/src/main/storage/migration/20261013231314_drop-extension-files/migration.sql create mode 100644 packages/desktop/src/main/storage/migration/20261013231314_drop-extension-files/snapshot.json create mode 100644 packages/desktop/src/main/storage/migration/20261014210000_rename-extension-to-plugin/migration.sql create mode 100644 packages/desktop/src/main/storage/migration/20261014210000_rename-extension-to-plugin/snapshot.json delete mode 100644 packages/desktop/src/renderer/extensions.ts create mode 100644 packages/desktop/src/renderer/plugins.ts delete mode 100644 packages/desktop/src/shared/ipc-rpc/extensions.ts create mode 100644 packages/desktop/src/shared/ipc-rpc/plugins.ts delete mode 100644 packages/gui-extensions/README.md delete mode 100644 packages/gui-extensions/src/browser/contract.ts delete mode 100644 packages/gui-extensions/src/browser/index.ts delete mode 100644 packages/gui-extensions/src/builtins.typecheck.ts delete mode 100644 packages/gui-extensions/src/file/index.ts delete mode 100644 packages/gui-extensions/src/main.ts delete mode 100644 packages/gui-extensions/src/pairing/index.ts delete mode 100644 packages/gui-extensions/src/sdk/bridge.ts delete mode 100644 packages/gui-extensions/src/sdk/compose.typecheck.ts delete mode 100644 packages/gui-extensions/src/sdk/core.ts delete mode 100644 packages/gui-extensions/src/sdk/index.ts delete mode 100644 packages/gui-extensions/src/sdk/solid.ts delete mode 100644 packages/gui-extensions/src/sources/index.ts delete mode 100644 packages/gui-extensions/src/wsl/index.ts rename packages/{gui-extensions => gui-plugins}/AGENTS.md (55%) create mode 100644 packages/gui-plugins/README.md rename packages/{gui-extensions => gui-plugins}/bunfig.toml (100%) rename packages/{gui-extensions => gui-plugins}/happydom.ts (100%) rename packages/{gui-extensions => gui-plugins}/package.json (88%) rename packages/{gui-extensions => gui-plugins}/src/browser/address.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/address.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/analysis.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/analysis.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/bar.css (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/cdp.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/chromium.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/browser/comment.css (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/comment.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/comment.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/browser/connection.test.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/browser/connection.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/browser/diagnostics.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/errors.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/errors.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/files.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/files.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/history.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/icon.ts (100%) create mode 100644 packages/gui-plugins/src/browser/index.ts rename packages/{gui-extensions => gui-plugins}/src/browser/ipc.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/browser/keys.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/keys.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/lighthouse.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/link.ts (84%) rename packages/{gui-extensions => gui-plugins}/src/browser/main.ts (85%) rename packages/{gui-extensions => gui-plugins}/src/browser/model.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/browser/network.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/page-icon.tsx (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/pane.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/browser/panel.fixture.tsx (93%) rename packages/{gui-extensions => gui-plugins}/src/browser/panel.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/browser/policy.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/policy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/profiling.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/browser/refs.test.ts (81%) rename packages/{gui-extensions => gui-plugins}/src/browser/refs.ts (66%) rename packages/{gui-extensions => gui-plugins}/src/browser/renderer.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/browser/restore.ts (90%) rename packages/{gui-extensions => gui-plugins}/src/browser/tabs.css (95%) rename packages/{gui-extensions => gui-plugins}/src/btw/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/btw/index.ts (89%) rename packages/{gui-extensions => gui-plugins}/src/btw/model.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/btw/panel.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/btw/renderer.tsx (90%) rename packages/{gui-extensions => gui-plugins}/src/context/catalog.ts (96%) rename packages/{gui-extensions => gui-plugins}/src/context/export.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/format.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/context/index.ts (92%) rename packages/{gui-extensions => gui-plugins}/src/context/indicator.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/context/renderer.tsx (83%) rename packages/{gui-extensions => gui-plugins}/src/context/tab.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/debug/bar.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/debug/contract.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/index.ts (87%) rename packages/{gui-extensions => gui-plugins}/src/debug/main.ts (95%) rename packages/{gui-extensions => gui-plugins}/src/debug/memory-infra.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/memory-infra.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/memory-log.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/debug/memory-record.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/memory-record.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/motion.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/debug/options.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/options.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/renderer.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/debug/server-heap.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/server-heap.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/debug/signal.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/debug/signal.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/config-file.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/config-file.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/configured-lsp.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/configured-lsp.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/details.css (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/index.ts (91%) rename packages/{gui-extensions => gui-plugins}/src/details/location-menu.tsx (88%) rename packages/{gui-extensions => gui-plugins}/src/details/location-workspace.tsx (94%) rename packages/{gui-extensions => gui-plugins}/src/details/panel.tsx (91%) rename packages/{gui-extensions => gui-plugins}/src/details/paths.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/details/popover.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/details/renderer.tsx (91%) rename packages/{gui-extensions => gui-plugins}/src/details/server-panel.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/details/workspace-menu.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/env.d.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/apps.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/artifact-view.css (100%) rename packages/{gui-extensions => gui-plugins}/src/file/artifact-view.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/file/artifact.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/artifact.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/file/browser.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/file/context.ts (93%) rename packages/{gui-extensions => gui-plugins}/src/file/drag.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/i18n/zht.ts (100%) rename packages/{gui-extensions/src/ssh => gui-plugins/src/file}/index.ts (85%) rename packages/{gui-extensions => gui-plugins}/src/file/label.tsx (100%) rename packages/{gui-extensions => gui-plugins}/src/file/list.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/file/mobile.css (100%) rename packages/{gui-extensions => gui-plugins}/src/file/mobile.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/file/open-in-app.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/file/path.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/path.ts (93%) rename packages/{gui-extensions => gui-plugins}/src/file/pierre-tree.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/file/renderer.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/file/resolve-link.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/resolve-link.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/file/styles.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/file/tabs.css (100%) rename packages/{gui-extensions => gui-plugins}/src/file/tree-model.test.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/file/tree-model.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/file/view.tsx (98%) create mode 100644 packages/gui-plugins/src/icon-name.typecheck.ts create mode 100644 packages/gui-plugins/src/main.ts rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/document.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/document.worker.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/fonts-cjk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/fonts.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/fonts.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/index.ts (57%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/links.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/links.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/pages.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/paper.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/presentation.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/presentation.worker.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/renderer.tsx (86%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/sheet-cells.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/sheet-cells.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/sheet-frame.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/sheet-paint.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/sheet-protocol.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/slide-fonts.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/slide-protocol.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/slide-text.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/slide-text.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/spreadsheet.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/spreadsheet.worker.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/word-images.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/word-protocol.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/word-text.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/worker-rpc.fixture.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/worker-rpc.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/microsoft-office/worker-rpc.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/pairing/contract.ts (96%) rename packages/{gui-extensions => gui-plugins}/src/pairing/i18n/en.ts (100%) create mode 100644 packages/gui-plugins/src/pairing/index.ts rename packages/{gui-extensions => gui-plugins}/src/pairing/main.ts (78%) rename packages/{gui-extensions => gui-plugins}/src/pairing/page.stories.tsx (93%) rename packages/{gui-extensions => gui-plugins}/src/pairing/page.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/pairing/remote.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/pairing/remote.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/pairing/renderer.tsx (81%) rename packages/{gui-extensions => gui-plugins}/src/renderer.ts (53%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/index.ts (88%) rename packages/{gui-extensions => gui-plugins}/src/review/kinds.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/review/kinds.ts (91%) rename packages/{gui-extensions => gui-plugins}/src/review/mobile.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/review/model.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/review/panel.tsx (96%) rename packages/{gui-extensions => gui-plugins}/src/review/parts.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/review/renderer.tsx (94%) rename packages/{gui-extensions => gui-plugins}/src/review/settings.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/sources/i18n/en.ts (100%) create mode 100644 packages/gui-plugins/src/sources/index.ts rename packages/{gui-extensions => gui-plugins}/src/sources/panel.tsx (83%) rename packages/{gui-extensions => gui-plugins}/src/sources/renderer.tsx (91%) rename packages/{gui-extensions => gui-plugins}/src/ssh/askpass.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/askpass.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/bootstrap.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/bootstrap.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/command.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/command.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/contract.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/ssh/controller.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/cover.tsx (88%) rename packages/{gui-extensions => gui-plugins}/src/ssh/dialog.stories.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/ssh/dialog.tsx (90%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/i18n/zht.ts (100%) create mode 100644 packages/gui-plugins/src/ssh/index.ts rename packages/{gui-extensions => gui-plugins}/src/ssh/main.ts (72%) rename packages/{gui-extensions => gui-plugins}/src/ssh/name.ts (95%) rename packages/{gui-extensions => gui-plugins}/src/ssh/remote-cli.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/renderer.tsx (93%) rename packages/{gui-extensions => gui-plugins}/src/ssh/row.tsx (86%) rename packages/{gui-extensions => gui-plugins}/src/ssh/ssh.css (100%) rename packages/{gui-extensions => gui-plugins}/src/ssh/state.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/terminal/focus.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/index.ts (93%) rename packages/{gui-extensions => gui-plugins}/src/terminal/label.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/terminal/model.test.ts (84%) rename packages/{gui-extensions => gui-plugins}/src/terminal/model.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/terminal/panel.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/terminal/quote.css (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/quote.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/terminal/renderer.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/terminal/runtime-adapters.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/serialize.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/serialize.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/state.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/state.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/tab.tsx (94%) rename packages/{gui-extensions => gui-plugins}/src/terminal/terminal-key-event.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/terminal-key-event.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/terminal.fixture.tsx (81%) rename packages/{gui-extensions => gui-plugins}/src/terminal/terminal.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/terminal/title.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/writer.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/terminal/writer.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/action.ts (92%) rename packages/{gui-extensions => gui-plugins}/src/updater/actions.tsx (95%) rename packages/{gui-extensions => gui-plugins}/src/updater/beta-dialog.stories.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/updater/beta-dialog.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/updater/beta-notes.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/beta-notes.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/beta-page.tsx (97%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/i18n/zht.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/index.ts (86%) rename packages/{gui-extensions => gui-plugins}/src/updater/log.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/machine.test.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/updater/machine.ts (95%) rename packages/{gui-extensions => gui-plugins}/src/updater/main.ts (79%) rename packages/{gui-extensions => gui-plugins}/src/updater/platform.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/updater/renderer.tsx (78%) rename packages/{gui-extensions => gui-plugins}/src/updater/section.tsx (92%) rename packages/{gui-extensions => gui-plugins}/src/updater/whats-new.tsx (98%) rename packages/{gui-extensions => gui-plugins}/src/wsl/contract.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/wsl/dialog.css (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/dialog.tsx (99%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/am.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ar.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/az.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/bg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/bn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/br.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/bs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ca.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/cs.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/da.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/de.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/dv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/dz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/el.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/en.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/es.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/et.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/fa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/fi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/fo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/fr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/he.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/hi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/hr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/hu.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/hy.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/id.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/is.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/it.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ja.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ka.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/km.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ko.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/lo.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/lt.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/lv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/mk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/mn.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ms.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/my.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ne.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/nl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/no.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/pa.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/pl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ro.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ru.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/si.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/sk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/sl.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/sq.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/sr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/sv.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/tg.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/th.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/tk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/tr.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/uk.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/ur.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/uz.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/vi.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/zh.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/i18n/zht.ts (100%) create mode 100644 packages/gui-plugins/src/wsl/index.ts rename packages/{gui-extensions => gui-plugins}/src/wsl/local.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/main.ts (81%) rename packages/{gui-extensions => gui-plugins}/src/wsl/model.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/probes.ts (97%) rename packages/{gui-extensions => gui-plugins}/src/wsl/remote-cli.ts (93%) rename packages/{gui-extensions => gui-plugins}/src/wsl/renderer.tsx (91%) rename packages/{gui-extensions => gui-plugins}/src/wsl/row.tsx (86%) rename packages/{gui-extensions => gui-plugins}/src/wsl/runtime.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/runtime.ts (98%) rename packages/{gui-extensions => gui-plugins}/src/wsl/servers.test.ts (100%) rename packages/{gui-extensions => gui-plugins}/src/wsl/servers.ts (99%) rename packages/{gui-extensions => gui-plugins}/src/wsl/sidecar.ts (98%) rename packages/{gui-extensions => gui-plugins}/tsconfig.json (100%) create mode 100644 packages/plugin/script/icon-name.ts create mode 100644 packages/plugin/src/gui/browser.ts create mode 100644 packages/plugin/src/gui/builtin.ts rename packages/{gui-extensions/src/sdk => plugin/src/gui}/context.ts (52%) create mode 100644 packages/plugin/src/gui/context.typecheck.ts create mode 100644 packages/plugin/src/gui/core.ts create mode 100644 packages/plugin/src/gui/declarations.ts rename packages/{gui-extensions/src/file/contract.ts => plugin/src/gui/file.ts} (56%) rename packages/{gui-extensions/src/sdk => plugin/src/gui}/host-apis.ts (93%) create mode 100644 packages/plugin/src/gui/host.ts create mode 100644 packages/plugin/src/gui/icon-name.ts create mode 100644 packages/plugin/src/gui/index.ts create mode 100644 packages/plugin/src/gui/internal.ts rename packages/{gui-extensions/src/sdk => plugin/src/gui}/main.ts (63%) create mode 100644 packages/plugin/src/gui/modules.ts create mode 100644 packages/plugin/src/gui/plugin.ts create mode 100644 packages/plugin/src/gui/plugin.typecheck.ts rename packages/{gui-extensions/src/sdk => plugin/src/gui}/reactive.ts (92%) rename packages/{gui-extensions/src/sdk => plugin/src/gui}/registries.ts (91%) rename packages/{gui-extensions/src/sdk => plugin/src/gui}/registries.typecheck.ts (89%) rename packages/{gui-extensions/src/review/contract.ts => plugin/src/gui/review.ts} (52%) rename packages/{gui-extensions/src/sdk => plugin/src/gui}/scope.ts (92%) create mode 100644 packages/plugin/src/gui/solid.ts rename packages/{gui-extensions/src/updater/contract.ts => plugin/src/gui/updater.ts} (66%) create mode 100644 packages/plugin/src/gui/vite.ts create mode 100644 packages/plugin/test/gui-host.test.ts rename packages/{gui-extensions/src/sdk/scope.test.ts => plugin/test/gui-scope.test.ts} (98%) create mode 100644 packages/plugin/test/gui-vite.test.ts rename packages/stories/mocks/{gui-extensions => gui-plugins}/pairing.tsx (84%) rename packages/stories/mocks/{gui-extensions => gui-plugins}/settings-page.tsx (68%) rename packages/stories/mocks/{gui-extensions => gui-plugins}/ssh.tsx (74%) rename packages/stories/src/{extension.tsx => plugin.tsx} (65%) rename script/ast-grep/{gui-extensions => gui-plugins}/rules/no-module-state-tsx.yml (81%) rename script/ast-grep/{gui-extensions => gui-plugins}/rules/no-module-state.yml (81%) rename script/ast-grep/{gui-extensions => gui-plugins}/sgconfig.yml (100%) create mode 100644 services/www/src/docs/content/build/plugins/gui/index.mdx create mode 100644 services/www/src/docs/content/build/plugins/server.mdx diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7d6aaeca894f..1dfc80ab1cf6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -34,7 +34,7 @@ jobs: - name: Typecheck (TypeScript 7.1) run: bun run typecheck:tsc - # Every GUI package file (app, desktop, gui-extensions, ui, session-ui) a pull request adds or edits must be free of + # Every GUI package file (app, desktop, gui-plugins, the plugin package's GUI SDK, ui, session-ui) a pull request adds or edits must be free of # oxlint problems, warn-level rules (anti-slop) included. Other packages are not affected. - name: Lint changed files if: github.event_name == 'pull_request' diff --git a/.opencode/skills/app-e2e-tests/SKILL.md b/.opencode/skills/app-e2e-tests/SKILL.md index 4a63ca2f45f5..1645a7bc3c53 100644 --- a/.opencode/skills/app-e2e-tests/SKILL.md +++ b/.opencode/skills/app-e2e-tests/SKILL.md @@ -77,7 +77,7 @@ Most of these rarely reproduce on an idle local machine. - **Use the harness's signals.** `holdRoute(...).arrived` resolves when the request reaches the route, and `transport.send` resolves after delivery. `setupTimeline(...).waitForPart` resolves once a part renders (`timeline.ts:328`). - **Decide which side is wrong.** Three of eight investigated e2e flakes were product bugs, each since fixed in the product: - a stale scroll offset restored when a scroll settles (`src/session/timeline/observe-element-offset.ts`); - - a video double-click that also entered native fullscreen (`packages/gui-extensions/src/file/artifact-view.tsx:617`); + - a video double-click that also entered native fullscreen (`packages/gui-plugins/src/file/artifact-view.tsx:617`); - shortcuts dropped while a dialog closed. If a user could hit the interleaving, fix the product and keep the assertion. diff --git a/.opencode/skills/component-tests/SKILL.md b/.opencode/skills/component-tests/SKILL.md index 032b7d225ed4..c19e463a687a 100644 --- a/.opencode/skills/component-tests/SKILL.md +++ b/.opencode/skills/component-tests/SKILL.md @@ -1,6 +1,6 @@ --- name: component-tests -description: Use when writing, changing, debugging, or reviewing the Playwright component tests that mount stories. That covers specs in packages/app/component-tests or packages/session-ui/component-tests, `*.fixture.tsx` files there or beside source (such as packages/gui-extensions/src/browser/panel.fixture.tsx), the stories they mount, and the shared harness in packages/stories (playwright/config.ts, playwright/story.ts, vite.config.ts, src/frame.tsx, src/index-plugin.ts, mocks). Also use when a component test is flaky, passed on retry, or fails with "Execution context was destroyed", "Failed to fetch dynamically imported module", or `#story-root` hidden. Covers mount args, source modules imported by URL, Vite dependency pre-bundling and reloads, a cold vs warm story server, mobile drawers, geometry, and checks before pushing. +description: Use when writing, changing, debugging, or reviewing the Playwright component tests that mount stories. That covers specs in packages/app/component-tests or packages/session-ui/component-tests, `*.fixture.tsx` files there or beside source (such as packages/gui-plugins/src/browser/panel.fixture.tsx), the stories they mount, and the shared harness in packages/stories (playwright/config.ts, playwright/story.ts, vite.config.ts, src/frame.tsx, src/index-plugin.ts, mocks). Also use when a component test is flaky, passed on retry, or fails with "Execution context was destroyed", "Failed to fetch dynamically imported module", or `#story-root` hidden. Covers mount args, source modules imported by URL, Vite dependency pre-bundling and reloads, a cold vs warm story server, mobile drawers, geometry, and checks before pushing. --- # Component tests @@ -15,7 +15,7 @@ Read these first rather than repeating them: ## Stories and `mount` -- **Location.** Put the story next to the production component under `src/` of `ui`, `session-ui`, `app` or `gui-extensions`. The story server indexes `*.stories.tsx` files in those four trees (`packages/stories/vite.config.ts`, `src/index-plugin.ts`), reading each file's `export default { title, id }` and its `export const` stories from source. +- **Location.** Put the story next to the production component under `src/` of `ui`, `session-ui`, `app` or `gui-plugins`. The story server indexes `*.stories.tsx` files in those four trees (`packages/stories/vite.config.ts`, `src/index-plugin.ts`), reading each file's `export default { title, id }` and its `export const` stories from source. - **Story ID.** It is the meta `id` if one is set (`packages/session-ui/src/components/session-review.stories.tsx:25`). Otherwise it is the kebab-cased `title`, then `--`, then the kebab-cased export. Check it at `http://127.0.0.1:6006/?id=` on a running story server (`bun --cwd packages/stories dev`). A wrong ID renders nothing (the page throws `No story has the id …`), so `mount` waits out its full 30 s root wait (`story.ts:39`) and then fails. - **URL args.** `mount(id, { args, globals })` writes them into the URL as `key:value` pairs (`story.ts:20-36`). The frame reads every one: a value becomes a boolean or number when the story's own default for that key is one, `!true`/`!false`/`!null`/`!undefined` keep Storybook's meaning, and anything else stays text. - Give every arg a typed default. With `args: { split: false }` (`session-review.stories.tsx:129`), `split:false` arrives as a boolean. @@ -29,7 +29,7 @@ Read these first rather than repeating them: Use these when the contract is not visible in a story, such as construction counts, unmount races or cache state. -- **Fixture file.** Put a `*.fixture.tsx` file in `component-tests/` or beside the source it drives (`packages/gui-extensions/src/browser/panel.fixture.tsx`). It exports a `mountX()` that renders into a host with a `data-testid` (`packages/session-ui/component-tests/basic-tool.fixture.tsx:7-46`). Never end the name in `.spec` or `.test`. +- **Fixture file.** Put a `*.fixture.tsx` file in `component-tests/` or beside the source it drives (`packages/gui-plugins/src/browser/panel.fixture.tsx`). It exports a `mountX()` that renders into a host with a `data-testid` (`packages/session-ui/component-tests/basic-tool.fixture.tsx:7-46`). Never end the name in `.spec` or `.test`. - **Mount it in three steps.** 1. Mount a light story first, so that the app styles load. 2. Import the fixture and call it inside `page.evaluate`. @@ -40,7 +40,7 @@ Use these when the contract is not visible in a story, such as construction coun - **Module URLs.** Build each one with `sourceURL(new URL("", import.meta.url))` (`story.ts:10`), written as a string literal in the spec (`browser-pane-restore.spec.ts:6-24`). Any other spelling either fails to load or loads a second module instance whose contexts the page never provides; a hand-written `/@fs//...` is the documented second-instance case (`story.ts:6-9`). The literal also matters for pre-bundling (next section). - **Aliases.** A module imported by URL is the real file. App code that reaches the same module through a `vite.config.ts` alias gets the mock (`browser-pane-restore.spec.ts:95-96`). Decide which of the two the contract needs. - **Spec imports.** Import source modules into the spec with `import type` only (`browser-pane-restore.spec.ts:2-4`). A value import runs browser code in the Node runner. -- **Async order.** Let the test decide the order through deferreds the fixture exposes (`mountExtensionHost`, `packages/app/component-tests/extension-host.fixture.tsx:135`). Await the outcome they lead to (`extension-host.spec.ts:46-77`), or poll in-page state with `until` (`extension-host.fixture.tsx:124-132`). Do not copy the fixed in-page `setTimeout` waits that other cases in `extension-host.spec.ts` (`:38`, `:88-90`, `:108-119`) use to prove a negative. +- **Async order.** Let the test decide the order through deferreds the fixture exposes (`mountPluginHost`, `packages/app/component-tests/plugin-host.fixture.tsx:141`). Await the outcome they lead to (`plugin-host.spec.ts:38-69`), or poll in-page state with `until` (`plugin-host.fixture.tsx:131-138`). Do not copy the fixed in-page `setTimeout` waits that other cases in `plugin-host.spec.ts` (`:30`, `:80-82`, `:100-111`) use to prove a negative. ## Vite pre-bundling and reloads @@ -102,7 +102,7 @@ From the owning package (`packages/session-ui` or `packages/app`): - Do not skip on Windows, and do not raise `config.ts` timeouts, retries or the `mount` wait. - If one test does genuinely expensive work, call `story.setTimeout(...)` in that test, with a comment that names the work. 6. **Confirm CI ran the component legs.** E2E never runs on pushes to dev (`check-test.yml:28`), so no post-merge run catches a regression. - - The `affected` gate filters on `@opencode/app` and `@opencode/stories` (`check-test.yml:60-61`). `ui`, `session-ui` and `gui-extensions` count through app's dependencies. `workflow_dispatch` forces the legs on (`check-test.yml:56-59`). + - The `affected` gate filters on `@opencode/app` and `@opencode/stories` (`check-test.yml:60-61`). `ui`, `session-ui` and `gui-plugins` count through app's dependencies. `workflow_dispatch` forces the legs on (`check-test.yml:56-59`). - `check-test.yml` is listed in `globalDependencies` (`turbo.json:8`), so editing it marks every package affected. - The required `e2e (linux)` and `e2e (windows)` checks also pass when no leg was needed (`check-test.yml:329-352`). Look for `e2e (, session-ui-components)` and `e2e (, app-components)`. - If CI skipped them, report your local cold run in the PR. diff --git a/.opencode/skills/opencode-dev/SKILL.md b/.opencode/skills/opencode-dev/SKILL.md index 5d53c6b2921f..31cb2a3c5a24 100644 --- a/.opencode/skills/opencode-dev/SKILL.md +++ b/.opencode/skills/opencode-dev/SKILL.md @@ -132,7 +132,7 @@ opencode debug heap-dump It discovers the already-running service (never starts or replaces one), calls `POST /api/debug/heap-dump`, waits until the file is complete, and prints its server-local path. Pass `--server ` (with `OPENCODE_PASSWORD`) for a server started with `serve`, and `--directory ` to write somewhere other than the server's log directory (the server creates it; a server that predates the option ignores it and the CLI warns). A 404 means the running server predates the endpoint. -For desktop memory, run **Capture heap snapshots** from the desktop command palette (`packages/gui-extensions/src/debug/main.ts`). It writes `~/Downloads/opencode-heap-