Merge origin/main into release/v0.9.0 — back-merge to reconcile v0.9.0 with main

Syncs release/v0.9.0 with main so PR #3282 (release/v0.9.0 → main) merges
cleanly. 17 conflicts resolved by commit-time + per-area ownership:

- Comment/edit/preview: keep main (newer). FileViewer combines main's #3438
  (pin manual-edit inspector, no full-height panel) + #3347 deck/queue work
  WITH release's #3401 hover-card anti-flicker grafted on; #2879 Button kept.
- Toolbar: footer layout (reviewer-validated, ca03a7e0f) overrides main #3447 —
  CLI/agent selector in the composer footer, settings gear in the header, no
  settings item in the AvatarMenu dropdown.
- AMR: keep release's client-side model polling (mergeAmrModelsIntoAgents) and
  all release AMR fixes (#3450 sign-out, #3504 console, #3487 acp tool-only
  guard, amrCloudVisible onboarding, #3511 analytics provider id).
- Pet composer button stays removed (release decision); only /pet slash props
  retained.
- Pickers: main's providerModelsCache approach.

Validation: web typecheck + guard + full web suite (2638) + daemon suite green.
This commit is contained in:
lefarcen
2026-06-03 17:21:00 +08:00
629 changed files with 68191 additions and 17795 deletions
+2
View File
@@ -47,6 +47,7 @@ const CONTAINER_NODE_VERSION = "24.14.1";
const CONTAINER_TOOLS_PACK_CLI_PATH = "tools/pack/bin/tools-pack.mjs";
export const INTERNAL_PACKAGES = [
{ directory: "packages/components", name: "@open-design/components" },
{ directory: "packages/contracts", name: "@open-design/contracts" },
{ directory: "packages/registry-protocol", name: "@open-design/registry-protocol" },
{ directory: "packages/sidecar-proto", name: "@open-design/sidecar-proto" },
@@ -401,6 +402,7 @@ async function buildWorkspaceArtifacts(config: ToolPackConfig): Promise<void> {
await runPnpm(config, ["--filter", "@open-design/download", "build"]);
await runPnpm(config, ["--filter", "@open-design/host", "build"]);
await runPnpm(config, ["--filter", "@open-design/diagnostics", "build"]);
await runPnpm(config, ["--filter", "@open-design/components", "build"]);
await runPnpm(config, ["--filter", "@open-design/daemon", "build"]);
try {
await runPnpm(config, ["--filter", "@open-design/web", "build"], { OD_WEB_OUTPUT_MODE: "server" });
+1
View File
@@ -1,6 +1,7 @@
export const PRODUCT_NAME = "Open Design";
export const INTERNAL_PACKAGES = [
{ directory: "packages/components", name: "@open-design/components" },
{ directory: "packages/contracts", name: "@open-design/contracts" },
{ directory: "packages/registry-protocol", name: "@open-design/registry-protocol" },
{ directory: "packages/sidecar-proto", name: "@open-design/sidecar-proto" },
+1
View File
@@ -21,6 +21,7 @@ async function buildWorkspaceArtifacts(config: ToolPackConfig): Promise<void> {
await runPnpm(config, ["--filter", "@open-design/download", "build"]);
await runPnpm(config, ["--filter", "@open-design/host", "build"]);
await runPnpm(config, ["--filter", "@open-design/diagnostics", "build"]);
await runPnpm(config, ["--filter", "@open-design/components", "build"]);
await runPnpm(config, ["--filter", "@open-design/daemon", "build"]);
try {
await runPnpm(config, ["--filter", "@open-design/web", "build"], {
+1
View File
@@ -127,6 +127,7 @@ async function buildWorkspaceArtifacts(config: ToolPackConfig): Promise<void> {
await runPnpm(config, ["--filter", "@open-design/download", "build"]);
await runPnpm(config, ["--filter", "@open-design/host", "build"]);
await runPnpm(config, ["--filter", "@open-design/diagnostics", "build"]);
await runPnpm(config, ["--filter", "@open-design/components", "build"]);
await runPnpm(config, ["--filter", "@open-design/daemon", "build"]);
try {
await runPnpm(config, ["--filter", "@open-design/web", "build"], { OD_WEB_OUTPUT_MODE: config.webOutputMode });
+1
View File
@@ -30,6 +30,7 @@ export const NSIS_INSTALLER_LANGUAGE_BY_WEB_LOCALE = {
"zh-TW": "zh_TW",
} as const;
export const INTERNAL_PACKAGES = [
{ directory: "packages/components", name: "@open-design/components" },
{ directory: "packages/contracts", name: "@open-design/contracts" },
{ directory: "packages/registry-protocol", name: "@open-design/registry-protocol" },
{ directory: "packages/sidecar-proto", name: "@open-design/sidecar-proto" },
+5
View File
@@ -7,6 +7,7 @@ import type { ToolPackConfig } from "./config.js";
import { hashPackageSourcePath } from "./package-source-hash.js";
const WORKSPACE_BUILD_PACKAGES = [
{ directory: "packages/components", name: "@open-design/components" },
{ directory: "packages/contracts", name: "@open-design/contracts" },
{ directory: "packages/registry-protocol", name: "@open-design/registry-protocol" },
{ directory: "packages/sidecar-proto", name: "@open-design/sidecar-proto" },
@@ -24,6 +25,7 @@ const WORKSPACE_BUILD_PACKAGES = [
] as const;
const BUILD_COMMANDS = [
{ args: ["--filter", "@open-design/components", "build"] },
{ args: ["--filter", "@open-design/contracts", "build"] },
{ args: ["--filter", "@open-design/registry-protocol", "build"] },
{ args: ["--filter", "@open-design/sidecar-proto", "build"] },
@@ -97,6 +99,8 @@ function workspaceBuildOutputFiles(config: ToolPackConfig): string[] {
"apps/web/.next/standalone/server.js",
];
return [
"packages/components/dist/index.mjs",
"packages/components/dist/index.d.ts",
"packages/contracts/dist/index.mjs",
"packages/contracts/dist/index.d.ts",
"packages/registry-protocol/dist/index.mjs",
@@ -132,6 +136,7 @@ function workspaceBuildOutputFiles(config: ToolPackConfig): string[] {
function workspaceBuildArtifacts(config: ToolPackConfig): WorkspaceBuildArtifact[] {
const artifacts = [
"packages/components/dist",
"packages/contracts/dist",
"packages/registry-protocol/dist",
"packages/sidecar-proto/dist",
+2 -16
View File
@@ -5,24 +5,10 @@ import { join } from "node:path";
import { describe, expect, it } from "vitest";
import type { ToolPackConfig } from "../src/config.js";
import { INTERNAL_PACKAGES } from "../src/win/constants.js";
import { createWorkspaceTarballsCacheKey } from "../src/win/app.js";
const PACKAGE_DIRS = [
"packages/contracts",
"packages/registry-protocol",
"packages/sidecar-proto",
"packages/sidecar",
"packages/platform",
"packages/download",
"packages/host",
"packages/agui-adapter",
"packages/plugin-runtime",
"packages/diagnostics",
"apps/daemon",
"apps/web",
"apps/desktop",
"apps/packaged",
] as const;
const PACKAGE_DIRS = INTERNAL_PACKAGES.map((packageInfo) => packageInfo.directory);
async function writeWorkspace(root: string): Promise<void> {
await writeFile(join(root, "package.json"), `${JSON.stringify({ packageManager: "pnpm@10.33.2" }, null, 2)}\n`, "utf8");
+3
View File
@@ -9,6 +9,7 @@ import type { ToolPackConfig } from "../src/config.js";
import { ensureWorkspaceBuildArtifacts } from "../src/workspace-build.js";
const PACKAGE_DIRS = [
"packages/components",
"packages/contracts",
"packages/registry-protocol",
"packages/sidecar-proto",
@@ -26,6 +27,8 @@ const PACKAGE_DIRS = [
] as const;
const OUTPUT_FILES = [
"packages/components/dist/index.mjs",
"packages/components/dist/index.d.ts",
"packages/contracts/dist/index.mjs",
"packages/contracts/dist/index.d.ts",
"packages/registry-protocol/dist/index.mjs",