From 84128dbe230c29a60fdedfd88bb25b814d392842 Mon Sep 17 00:00:00 2001 From: inman Date: Thu, 4 Jun 2026 09:58:58 +0800 Subject: [PATCH] Refine desktop setup and remove bundled app center apps --- .env.example | 48 +- .gitignore | 3 + README.md | 38 +- electron-builder.yml | 5 +- electron/api/routes/agent-system-documents.ts | 79 ++++ electron/api/routes/apps.ts | 26 -- electron/api/routes/channels.ts | 10 +- electron/api/routes/providers.ts | 2 + electron/api/server.ts | 4 +- electron/gateway/config-sync.ts | 27 +- electron/main/index.ts | 2 - electron/main/ipc-handlers.ts | 9 +- .../providers/provider-runtime-sync.ts | 27 +- .../services/providers/provider-service.ts | 132 ++++-- electron/shared/providers/registry.ts | 12 +- electron/utils/agent-system-documents.ts | 249 ++++++++++ electron/utils/channel-config.ts | 4 +- electron/utils/model-diagnostics.ts | 197 ++++---- electron/utils/nianxx-play-service.ts | 440 ------------------ electron/utils/openclaw-auth.ts | 18 +- electron/utils/paths.ts | 4 + electron/utils/plugin-install.ts | 138 +++++- electron/utils/secure-storage.ts | 18 +- electron/utils/yinian-initializer.ts | 321 ++++++++++--- findings.md | 49 ++ package.json | 9 +- pnpm-lock.yaml | 39 ++ progress.md | 128 +++++ resources/readme/05-app-center.png | Bin 219734 -> 0 bytes resources/readme/06-nianxx-play.png | Bin 222968 -> 0 bytes scripts/after-pack.cjs | 226 +++++++-- scripts/bundle-openclaw-plugins.mjs | 198 +++++++- scripts/bundle-openclaw.mjs | 2 +- scripts/prepare-internal-model-auth.mjs | 70 ++- scripts/prepare-nianxx-play-bundle.mjs | 341 -------------- shared/yinian-model.ts | 31 ++ src/App.tsx | 4 - .../settings/AgentSystemDocumentsSettings.tsx | 391 ++++++++++++++++ src/i18n/locales/en/app-center.json | 45 +- src/i18n/locales/en/settings.json | 62 ++- src/i18n/locales/zh/app-center.json | 45 +- src/i18n/locales/zh/settings.json | 62 ++- src/lib/providers.ts | 6 +- src/pages/AppCenter/index.tsx | 4 - src/pages/NianxxPlay/index.tsx | 258 ---------- src/pages/ProductCenter/index.tsx | 143 ------ src/pages/ProductCenter/url.ts | 55 --- src/pages/Settings/index.tsx | 45 +- src/pages/Setup/index.tsx | 74 ++- src/pages/Setup/initialization.ts | 58 +++ src/stores/app-center.ts | 36 +- task_plan.md | 138 ++++++ tests/e2e/yinian-delivery-smoke.spec.ts | 35 +- .../agent-system-documents-routes.test.ts | 117 +++++ .../agent-system-documents-settings.test.tsx | 211 +++++++++ tests/unit/agent-system-documents.test.ts | 156 +++++++ tests/unit/app-center.test.tsx | 32 +- tests/unit/channel-config.test.ts | 13 + tests/unit/channel-routes.test.ts | 4 +- tests/unit/config-sync.test.ts | 1 + tests/unit/model-diagnostics.test.ts | 255 +++++++++- tests/unit/nianxx-play-url.test.ts | 23 - tests/unit/openclaw-auth.test.ts | 13 +- tests/unit/plugin-install.test.ts | 83 +++- tests/unit/product-center-page.test.tsx | 39 -- tests/unit/product-center-url.test.ts | 38 -- tests/unit/provider-runtime-sync.test.ts | 123 ++++- .../provider-service-stale-cleanup.test.ts | 85 +++- tests/unit/providers.test.ts | 18 +- .../settings-advanced-model-config.test.tsx | 86 +++- tests/unit/setup-initialization.test.ts | 32 ++ tests/unit/yinian-initializer.test.ts | 214 +++++++++ vite.config.ts | 2 +- 73 files changed, 3888 insertions(+), 2024 deletions(-) create mode 100644 electron/api/routes/agent-system-documents.ts delete mode 100644 electron/api/routes/apps.ts create mode 100644 electron/utils/agent-system-documents.ts delete mode 100644 electron/utils/nianxx-play-service.ts delete mode 100644 resources/readme/05-app-center.png delete mode 100644 resources/readme/06-nianxx-play.png delete mode 100644 scripts/prepare-nianxx-play-bundle.mjs create mode 100644 shared/yinian-model.ts create mode 100644 src/components/settings/AgentSystemDocumentsSettings.tsx delete mode 100644 src/pages/NianxxPlay/index.tsx delete mode 100644 src/pages/ProductCenter/index.tsx delete mode 100644 src/pages/ProductCenter/url.ts create mode 100644 src/pages/Setup/initialization.ts create mode 100644 tests/unit/agent-system-documents-routes.test.ts create mode 100644 tests/unit/agent-system-documents-settings.test.tsx create mode 100644 tests/unit/agent-system-documents.test.ts delete mode 100644 tests/unit/nianxx-play-url.test.ts delete mode 100644 tests/unit/product-center-page.test.tsx delete mode 100644 tests/unit/product-center-url.test.ts create mode 100644 tests/unit/setup-initialization.test.ts create mode 100644 tests/unit/yinian-initializer.test.ts diff --git a/.env.example b/.env.example index 8e33b98..29254f5 100644 --- a/.env.example +++ b/.env.example @@ -1,41 +1,45 @@ -# ClawX Environment Variables +# Zhinian Desktop Environment Template +# +# Copy this file to `.env.local` for local development only. +# Do not commit `.env.local` or any real API keys, tokens, client secrets, +# certificates, or customer-specific service endpoints. # OpenClaw Gateway Configuration OPENCLAW_GATEWAY_PORT=18789 # Development Configuration -VITE_DEV_SERVER_PORT=5173 +VITE_DEV_SERVER_PORT=5188 # Zhinian service connection -# Required for real login. The desktop app no longer falls back to demo login -# unless YINIAN_CONTROL_PLANE_MODE=mock is explicitly set. -YINIAN_API_BASE_URL=https://onefeel.brother7.cn/ingress -YINIAN_AUTH_CLIENT_ID=customPC +# Required for real customer login. Get these values from the deployment owner. +YINIAN_API_BASE_URL=https://your-zhinian-api.example/ingress +YINIAN_AUTH_CLIENT_ID=your-client-id YINIAN_AUTH_SCOPE=server -# Optional, depending on your server OAuth client settings: -# YINIAN_AUTH_CLIENT_SECRET=customPC -# YINIAN_AUTH_BASIC=Basic Y3VzdG9tUEM6Y3VzdG9tUEM= +# Optional, depending on your server OAuth client settings. Leave blank unless +# the deployment owner provides values through a private channel. +# YINIAN_AUTH_CLIENT_SECRET= +# YINIAN_AUTH_BASIC= # Optional enterprise-space/application endpoints. Template variables are supported: # {workspaceId}, {workspace_id}, {hotelId}, {hotel_id}, {tenantId}, {tenant_id} # YINIAN_CONFIG_SYNC_PATH=/config/sync # YINIAN_SKILLS_MANIFEST_PATH=/skills/manifest -# Optional OpenClaw cloud sync plugin service. Defaults to YINIAN_API_BASE_URL -# with a trailing /ingress removed, then https://onefeel.brother7.cn. -# YINIAN_CLOUD_SYNC_SERVER_URL=https://onefeel.brother7.cn +# Optional OpenClaw cloud sync plugin service. +# YINIAN_CLOUD_SYNC_SERVER_URL=https://your-zhinian-api.example # YINIAN_CLOUD_SYNC_ENABLED=1 -# Local demo mode, for visual QA or offline demos only. +# Local demo mode, for visual QA or offline demos only. This avoids requiring +# a real service endpoint while testing the desktop shell. # YINIAN_CONTROL_PLANE_MODE=mock # Release Configuration (CI/CD) -# Apple Developer Credentials -APPLE_ID=your@email.com -APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx -APPLE_TEAM_ID=XXXXXXXXXX +# Apple Developer Credentials. Keep real values in CI secrets or local shell. +APPLE_ID= +APPLE_APP_SPECIFIC_PASSWORD= +APPLE_TEAM_ID= -# Code Signing Certificate -CSC_LINK=path/to/certificate.p12 -CSC_KEY_PASSWORD=certificate_password +# Code Signing Certificate. Keep real files and passwords out of git. +CSC_LINK= +CSC_KEY_PASSWORD= -# GitHub Token for releases -GH_TOKEN=github_personal_access_token +# Release token. Keep real values in CI secrets or local shell. +GH_TOKEN= diff --git a/.gitignore b/.gitignore index 0cdac6d..5802e9b 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,9 @@ pnpm-debug.log* yarn-debug.log* yarn-error.log* +# Generated local documents +*.docx + # OS files .DS_Store Thumbs.db diff --git a/README.md b/README.md index f4d2d0a..d3701f2 100644 --- a/README.md +++ b/README.md @@ -47,14 +47,6 @@ ![对话与快捷任务](resources/readme/04-chat-quick-task.png) -### 应用中心 - -![应用中心](resources/readme/05-app-center.png) - -### 智念视频助手 - -![智念视频助手](resources/readme/06-nianxx-play.png) - ### 知识库 ![知识库](resources/readme/07-knowledge.png) @@ -80,7 +72,7 @@ - **知识库**:支持文本类资料导入,包含 Word 等常用格式;导入后会复制到本地安全目录,避免源文件删除后丢失。 - **定时任务**:面向用户可见、可管理的自动化任务能力,与 OpenClaw 内部 heartbeat 机制分离。 - **渠道管理**:支持渠道和账号绑定,渠道账号可维护备注;新增渠道时会自动创建对应 Agent,删除渠道时同步清理绑定 Agent。 -- **应用中心**:承载固定业务应用,当前重点集成 `NianxxPlay / 智念视频助手`,桌面端负责伴随安装、启动、健康检查与外壳承载。 +- **应用中心**:保留固定业务应用入口;当前不再内置业务应用,后续由产品交付节奏重新接入。 - **初始化流程**:首次打开时引导安装或重装 OpenClaw 运行环境,并内置内测阶段模型配置与必要依赖。 - **运行维护**:管理员模式下提供模型配置诊断、Gateway 状态、OpenClaw 运行信息和高级排查入口。 @@ -92,7 +84,6 @@ - 状态管理:Zustand - Agent 内核:OpenClaw Gateway - 包管理:pnpm -- 内置应用:NianxxPlay 作为应用中心内的大型业务应用 ## 目录结构 @@ -104,7 +95,7 @@ yinian-desktop/ │ ├── main/ # Electron 主进程入口与 IPC │ └── utils/ # 初始化、配置、打包、诊断等工具 ├── resources/ # 图标、内置资源、预装能力包资源 -├── scripts/ # 打包、OpenClaw bundle、NianxxPlay bundle 脚本 +├── scripts/ # 打包、OpenClaw bundle、预装能力包等脚本 ├── shared/ # Main / Renderer 共享类型 ├── src/ # Renderer 前端 │ ├── components/ # 公共组件 @@ -117,6 +108,25 @@ yinian-desktop/ ## 本地开发 +### 快速开始 + +面向客户或测试人员的最快路径: + +```bash +git clone <仓库地址> +cd yinian-desktop +pnpm install +cp .env.example .env.local +``` + +如果只是体验桌面外壳和本地能力,可以在 `.env.local` 中启用离线演示模式: + +```bash +YINIAN_CONTROL_PLANE_MODE=mock +``` + +如果需要连接真实组织空间,请从部署负责人处获取服务地址和 OAuth 客户端配置,写入本机 `.env.local`。仓库只保留 `.env.example` 占位模板,不提交真实 API key、token、client secret、证书或客户专属服务端点。 + ### 环境要求 - Node.js 20+ @@ -159,7 +169,9 @@ pnpm run package:mac:pilot:arm64 pnpm run package:mac:pilot ``` -打包前脚本会准备 OpenClaw runtime、OpenClaw plugins、预装能力包、NianxxPlay bundle、Node/uv 等必要运行资源。 +打包前脚本会准备 OpenClaw runtime、OpenClaw plugins、预装能力包、Node/uv 等必要运行资源。 + +如果没有私有模型凭据或客户专属服务配置,建议先使用普通开发模式或非 pilot 打包;真实密钥应只通过 CI Secret、本机环境变量或服务端下发进入运行时,不应进入 git 仓库。 ## 运行时说明 @@ -186,7 +198,7 @@ pnpm run package:mac:pilot - 能力包列表、本地安装与快捷任务触发 - 知识库上传、备份、删除与对话上下文选择 - 定时任务创建、启停与执行记录 -- 应用中心打开 NianxxPlay、刷新、返回与历史项目 +- 应用中心空状态与导航入口 - 设置页管理员模式、模型诊断、渠道管理 - macOS arm64 安装包启动、权限、签名与公证 diff --git a/electron-builder.yml b/electron-builder.yml index 842084c..1d43a2e 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -29,9 +29,6 @@ extraResources: # Pre-bundled third-party skills (full directories, not only SKILL.md) - from: build/preinstalled-skills/ to: resources/preinstalled-skills/ - # Built-in application center apps. - - from: build/apps/nianxx-play/ - to: resources/nianxx-play/ # Internal pilot-only runtime material. Production builds generate a benign # manifest; pilot builds may include temporary model auth for closed testing. - from: build/yinian-internal/ @@ -90,7 +87,7 @@ mac: dmg: # Explicit volume size prevents dmg-builder@1.2.0 auto-calculation from # underestimating (causes "No space left on device" for large app bundles). - # The app currently embeds OpenClaw + NianxxPlay assets; the final .dmg is + # The app embeds OpenClaw assets; the final .dmg is # compressed, so this mostly affects the temporary mounted volume. size: 7g background: resources/dmg-background.png diff --git a/electron/api/routes/agent-system-documents.ts b/electron/api/routes/agent-system-documents.ts new file mode 100644 index 0000000..2db8bc0 --- /dev/null +++ b/electron/api/routes/agent-system-documents.ts @@ -0,0 +1,79 @@ +import type { IncomingMessage, ServerResponse } from 'node:http'; +import { + isAgentSystemDocumentKind, + readAgentSystemDocuments, + resetAgentSystemDocument, + saveAgentSystemDocument, +} from '../../utils/agent-system-documents'; +import type { HostApiContext } from '../context'; +import { parseJsonBody, sendJson } from '../route-utils'; + +function scheduleGatewayReload(ctx: HostApiContext): void { + if (ctx.gatewayManager.getStatus().state !== 'stopped') { + ctx.gatewayManager.debouncedReload(); + } +} + +function parseDocumentPath(url: URL): { kind: string; reset: boolean } | null { + const prefix = '/api/agent-system-documents/'; + if (!url.pathname.startsWith(prefix)) return null; + + const parts = url.pathname.slice(prefix.length).split('/').filter(Boolean); + if (parts.length === 1) { + return { kind: decodeURIComponent(parts[0]), reset: false }; + } + if (parts.length === 2 && parts[1] === 'reset') { + return { kind: decodeURIComponent(parts[0]), reset: true }; + } + return null; +} + +export async function handleAgentSystemDocumentRoutes( + req: IncomingMessage, + res: ServerResponse, + url: URL, + ctx: HostApiContext, +): Promise { + if (url.pathname === '/api/agent-system-documents' && req.method === 'GET') { + try { + sendJson(res, 200, await readAgentSystemDocuments(url.searchParams.get('agentId') ?? undefined)); + } catch (error) { + sendJson(res, 500, { success: false, error: String(error) }); + } + return true; + } + + const parsed = parseDocumentPath(url); + if (!parsed) return false; + + if (!isAgentSystemDocumentKind(parsed.kind)) { + sendJson(res, 404, { success: false, error: `Unsupported system document kind "${parsed.kind}"` }); + return true; + } + + if (!parsed.reset && req.method === 'PUT') { + try { + const body = await parseJsonBody<{ agentId?: string; content?: string }>(req); + const snapshot = await saveAgentSystemDocument(body.agentId, parsed.kind, body.content ?? ''); + scheduleGatewayReload(ctx); + sendJson(res, 200, snapshot); + } catch (error) { + sendJson(res, 500, { success: false, error: String(error) }); + } + return true; + } + + if (parsed.reset && req.method === 'POST') { + try { + const body = await parseJsonBody<{ agentId?: string }>(req); + const snapshot = await resetAgentSystemDocument(body.agentId, parsed.kind); + scheduleGatewayReload(ctx); + sendJson(res, 200, snapshot); + } catch (error) { + sendJson(res, 500, { success: false, error: String(error) }); + } + return true; + } + + return false; +} diff --git a/electron/api/routes/apps.ts b/electron/api/routes/apps.ts deleted file mode 100644 index 1769847..0000000 --- a/electron/api/routes/apps.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { IncomingMessage, ServerResponse } from 'http'; -import type { HostApiContext } from '../context'; -import { sendJson } from '../route-utils'; -import { - ensureNianxxPlayServiceStarted, - getNianxxPlayServiceStatus, -} from '../../utils/nianxx-play-service'; - -export async function handleAppIntegrationRoutes( - req: IncomingMessage, - res: ServerResponse, - url: URL, - _ctx: HostApiContext, -): Promise { - if (url.pathname === '/api/apps/nianxx-play/status' && req.method === 'GET') { - sendJson(res, 200, await getNianxxPlayServiceStatus()); - return true; - } - - if (url.pathname === '/api/apps/nianxx-play/start' && req.method === 'POST') { - sendJson(res, 200, await ensureNianxxPlayServiceStarted()); - return true; - } - - return false; -} diff --git a/electron/api/routes/channels.ts b/electron/api/routes/channels.ts index e930fda..9c7b2bf 100644 --- a/electron/api/routes/channels.ts +++ b/electron/api/routes/channels.ts @@ -27,6 +27,7 @@ import { listAgentsSnapshotFromConfig, } from '../../utils/agent-config'; import { + ensureFeishuPluginInstalled, ensureWeChatPluginInstalled, } from '../../utils/plugin-install'; import { @@ -80,7 +81,7 @@ import type { HostApiContext } from '../context'; import { parseJsonBody, sendJson } from '../route-utils'; const WECHAT_QR_TIMEOUT_MS = 8 * 60 * 1000; -const DISABLED_PLUGIN_CHANNEL_TYPES = new Set(['dingtalk', 'wecom', 'feishu']); +const DISABLED_PLUGIN_CHANNEL_TYPES = new Set(['dingtalk', 'wecom']); const activeQrLogins = new Map(); interface WebLoginStartResult { @@ -1568,6 +1569,13 @@ export async function handleChannelRoutes( return true; } } + if (storedChannelType === 'feishu') { + const installResult = await ensureFeishuPluginInstalled(); + if (!installResult.installed) { + sendJson(res, 500, { success: false, error: installResult.warning || 'Feishu plugin install failed' }); + return true; + } + } const existingValues = await getChannelFormValues(body.channelType, body.accountId); if (isSameConfigValues(existingValues, body.config)) { await ensureScopedChannelBinding(body.channelType, body.accountId); diff --git a/electron/api/routes/providers.ts b/electron/api/routes/providers.ts index 6b231fa..fe57e50 100644 --- a/electron/api/routes/providers.ts +++ b/electron/api/routes/providers.ts @@ -82,6 +82,7 @@ export async function handleProviderRoutes( const body = await parseJsonBody<{ accountId: string }>(req); const currentDefault = await providerService.getDefaultAccountId(); if (currentDefault === body.accountId) { + await syncDefaultProviderToRuntime(body.accountId, ctx.gatewayManager); sendJson(res, 200, { success: true, noChange: true }); return true; } @@ -174,6 +175,7 @@ export async function handleProviderRoutes( const body = await parseJsonBody<{ providerId: string }>(req); const currentDefault = await providerService.getDefaultLegacyProvider(); if (currentDefault === body.providerId) { + await syncDefaultProviderToRuntime(body.providerId, ctx.gatewayManager); sendJson(res, 200, { success: true, noChange: true }); return true; } diff --git a/electron/api/server.ts b/electron/api/server.ts index f5adf86..f67ec94 100644 --- a/electron/api/server.ts +++ b/electron/api/server.ts @@ -5,11 +5,11 @@ import { logger } from '../utils/logger'; import { extensionRegistry } from '../extensions/registry'; import type { HostApiContext } from './context'; import { handleAppRoutes } from './routes/app'; -import { handleAppIntegrationRoutes } from './routes/apps'; import { handleGatewayRoutes } from './routes/gateway'; import { handleSettingsRoutes } from './routes/settings'; import { handleProviderRoutes } from './routes/providers'; import { handleAgentRoutes } from './routes/agents'; +import { handleAgentSystemDocumentRoutes } from './routes/agent-system-documents'; import { handleChannelRoutes } from './routes/channels'; import { handleLogRoutes } from './routes/logs'; import { handleUsageRoutes } from './routes/usage'; @@ -31,11 +31,11 @@ type RouteHandler = ( const coreRouteHandlers: RouteHandler[] = [ handleAppRoutes, - handleAppIntegrationRoutes, handleGatewayRoutes, handleSettingsRoutes, handleProviderRoutes, handleAgentRoutes, + handleAgentSystemDocumentRoutes, handleChannelRoutes, handleSkillRoutes, handleFileRoutes, diff --git a/electron/gateway/config-sync.ts b/electron/gateway/config-sync.ts index 2b54e21..6a31ae7 100644 --- a/electron/gateway/config-sync.ts +++ b/electron/gateway/config-sync.ts @@ -38,10 +38,11 @@ import { logger } from '../utils/logger'; import { prependPathEntry } from '../utils/env-path'; import { buildDotnetEnv } from '../utils/dotnet-runtime'; import { buildPlaywrightRuntimeEnv, ensureYinianPlaywrightRuntimeDirs } from '../utils/playwright-runtime'; -import { copyPluginFromNodeModules, ensureCloudSyncPluginInstalled, fixupPluginManifest, cpSyncSafe } from '../utils/plugin-install'; +import { copyPluginFromNodeModules, ensureCloudSyncPluginInstalled, fixupPluginManifest, cpSyncSafe, hasPluginRuntimeEntry } from '../utils/plugin-install'; import { stripSystemdSupervisorEnv } from './config-sync-env'; import { ensureYinianModelRuntimeConfigured } from '../utils/model-diagnostics'; import { cleanupOpenClawUserNativeClipboard } from '../utils/optional-native-cleanup'; +import { syncDefaultProviderToRuntime } from '../services/providers/provider-runtime-sync'; export interface GatewayLaunchContext { @@ -61,6 +62,7 @@ export interface GatewayLaunchContext { const CHANNEL_PLUGIN_MAP: Record = { 'openclaw-weixin': { dirName: 'openclaw-weixin', npmName: '@tencent-weixin/openclaw-weixin' }, + feishu: { dirName: 'openclaw-lark', npmName: '@larksuite/openclaw-lark' }, }; const REMOVED_CHANNEL_PLUGIN_DIRS = ['dingtalk', 'wecom', 'feishu-openclaw-plugin']; @@ -197,9 +199,12 @@ function ensureConfiguredPluginsUpgraded(configuredChannels: string[]): void { if (bundledDir) { const sourceVersion = readPluginVersion(join(bundledDir, 'package.json')); + const installedRuntimeReady = isInstalled ? hasPluginRuntimeEntry(targetDir) : false; + const sourceRuntimeReady = hasPluginRuntimeEntry(bundledDir); // Install or upgrade if version differs or plugin not installed - if (!isInstalled || (sourceVersion && installedVersion && sourceVersion !== installedVersion)) { - logger.info(`[plugin] ${isInstalled ? 'Auto-upgrading' : 'Installing'} ${channelType} plugin${isInstalled ? `: ${installedVersion} → ${sourceVersion}` : `: ${sourceVersion}`} (bundled)`); + if (!isInstalled || (sourceVersion && installedVersion && sourceVersion !== installedVersion) || (!installedRuntimeReady && sourceRuntimeReady)) { + const reinstallReason = isInstalled && !installedRuntimeReady && sourceRuntimeReady ? 'repairing missing runtime entry for' : (isInstalled ? 'Auto-upgrading' : 'Installing'); + logger.info(`[plugin] ${reinstallReason} ${channelType} plugin${isInstalled ? `: ${installedVersion} → ${sourceVersion}` : `: ${sourceVersion}`} (bundled)`); try { mkdirSync(fsPath(join(homedir(), '.openclaw', 'extensions')), { recursive: true }); rmSync(fsPath(targetDir), { recursive: true, force: true }); @@ -222,13 +227,16 @@ function ensureConfiguredPluginsUpgraded(configuredChannels: string[]): void { if (!existsSync(fsPath(join(npmPkgPath, 'openclaw.plugin.json')))) continue; const sourceVersion = readPluginVersion(join(npmPkgPath, 'package.json')); if (!sourceVersion) continue; + const installedRuntimeReady = isInstalled ? hasPluginRuntimeEntry(targetDir) : false; + const sourceRuntimeReady = hasPluginRuntimeEntry(npmPkgPath); // Skip only if installed AND same version — but still patch manifest ID. - if (isInstalled && installedVersion && sourceVersion === installedVersion) { + if (isInstalled && installedVersion && sourceVersion === installedVersion && (installedRuntimeReady || !sourceRuntimeReady)) { fixupPluginManifest(targetDir); continue; } - logger.info(`[plugin] ${isInstalled ? 'Auto-upgrading' : 'Installing'} ${channelType} plugin${isInstalled ? `: ${installedVersion} → ${sourceVersion}` : `: ${sourceVersion}`} (dev/node_modules)`); + const reinstallReason = isInstalled && !installedRuntimeReady && sourceRuntimeReady ? 'Repairing missing runtime entry for' : (isInstalled ? 'Auto-upgrading' : 'Installing'); + logger.info(`[plugin] ${reinstallReason} ${channelType} plugin${isInstalled ? `: ${installedVersion} → ${sourceVersion}` : `: ${sourceVersion}`} (dev/node_modules)`); try { mkdirSync(fsPath(join(homedir(), '.openclaw', 'extensions')), { recursive: true }); @@ -432,6 +440,15 @@ export async function syncGatewayConfigBeforeLaunch( } catch (err) { logger.warn('Failed to configure Yinian model runtime defaults before launch:', err); } + + try { + const defaultProviderId = await getDefaultProvider(); + if (defaultProviderId) { + await syncDefaultProviderToRuntime(defaultProviderId); + } + } catch (err) { + logger.warn('Failed to sync default provider to OpenClaw before launch:', err); + } } async function loadProviderEnv(): Promise<{ providerEnv: Record; loadedProviderKeyCount: number }> { diff --git a/electron/main/index.ts b/electron/main/index.ts index b086435..a1d6162 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -40,7 +40,6 @@ import { createSignalQuitHandler } from './signal-quit'; import { acquireProcessInstanceFileLock } from './process-instance-lock'; import { getSetting } from '../utils/store'; import { ensureBuiltinSkillsInstalled, ensurePreinstalledSkillsInstalled } from '../utils/skill-config'; -import { stopNianxxPlayService } from '../utils/nianxx-play-service'; import { startHostApiServer } from '../api/server'; import { HostEventBus } from '../api/event-bus'; @@ -665,7 +664,6 @@ if (gotTheLock) { hostEventBus.closeAll(); hostApiServer?.close(); - stopNianxxPlayService(); void extensionRegistry.teardownAll(); const stopPromise = gatewayManager.stop().catch((err) => { diff --git a/electron/main/ipc-handlers.ts b/electron/main/ipc-handlers.ts index ff7a220..2020626 100644 --- a/electron/main/ipc-handlers.ts +++ b/electron/main/ipc-handlers.ts @@ -34,6 +34,7 @@ import { validateChannelConfig, validateChannelCredentials, } from '../utils/channel-config'; +import { ensureFeishuPluginInstalled } from '../utils/plugin-install'; import { toOpenClawChannelType, toUiChannelType } from '../utils/channel-alias'; import { checkUvInstalled, installUv, setupManagedPython } from '../utils/uv-setup'; import { updateSkillConfig, getSkillConfig, getAllSkillConfigs } from '../utils/skill-config'; @@ -1456,7 +1457,7 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void { // initialize / tear-down plugin connections. SIGUSR1 in-process reload is // not sufficient for channel plugins (see restartGatewayForAgentDeletion). const forceRestartChannels = new Set(['dingtalk', 'wecom', 'whatsapp', 'feishu', 'qqbot']); - const disabledPluginChannels = new Set(['dingtalk', 'wecom', 'feishu']); + const disabledPluginChannels = new Set(['dingtalk', 'wecom']); const scheduleGatewayChannelRestart = (reason: string): void => { if (gatewayManager.getStatus().state !== 'stopped') { @@ -1537,6 +1538,12 @@ function registerOpenClawHandlers(gatewayManager: GatewayManager): void { if (disabledPluginChannels.has(channelType)) { return { success: false, error: '当前内测版本未启用该渠道' }; } + if (channelType === 'feishu') { + const installResult = await ensureFeishuPluginInstalled(); + if (!installResult.installed) { + return { success: false, error: installResult.warning || 'Feishu plugin install failed' }; + } + } await saveChannelConfig(channelType, config); scheduleGatewayChannelSaveRefresh(channelType, `channel:saveConfig (${channelType})`); return { success: true }; diff --git a/electron/services/providers/provider-runtime-sync.ts b/electron/services/providers/provider-runtime-sync.ts index 4614edf..6539793 100644 --- a/electron/services/providers/provider-runtime-sync.ts +++ b/electron/services/providers/provider-runtime-sync.ts @@ -1,5 +1,5 @@ import type { GatewayManager } from '../../gateway/manager'; -import { getProviderAccount, listProviderAccounts } from './provider-store'; +import { getProviderAccount, listProviderAccounts, providerAccountToConfig } from './provider-store'; import { getProviderSecret } from '../secrets/secret-store'; import type { ProviderConfig } from '../../utils/secure-storage'; import { getAllProviders, getApiKey, getDefaultProvider, getProvider } from '../../utils/secure-storage'; @@ -144,6 +144,16 @@ export function getProviderModelRef(config: ProviderConfig): string | undefined : `${providerKey}/${defaultModel}`; } +async function getProviderConfigForRuntime(providerId: string): Promise { + const legacyProvider = await getProvider(providerId); + if (legacyProvider) { + return legacyProvider; + } + + const account = await getProviderAccount(providerId); + return account ? providerAccountToConfig(account) : null; +} + export async function getProviderFallbackModelRefs(config: ProviderConfig): Promise { const allProviders = await getAllProviders(); const providerMap = new Map(allProviders.map((provider) => [provider.id, provider])); @@ -495,7 +505,8 @@ export async function syncSavedProviderToRuntime( scheduleGatewayRefresh( gatewayManager, - `Scheduling Gateway reload after saving provider "${context.runtimeProviderKey}" config`, + `Scheduling Gateway restart after saving provider "${context.runtimeProviderKey}" config`, + { mode: 'restart' }, ); } @@ -543,7 +554,8 @@ export async function syncUpdatedProviderToRuntime( scheduleGatewayRefresh( gatewayManager, - `Scheduling Gateway reload after updating provider "${ock}" config`, + `Scheduling Gateway restart after updating provider "${ock}" config`, + { mode: 'restart' }, ); } @@ -584,7 +596,7 @@ export async function syncDefaultProviderToRuntime( providerId: string, gatewayManager?: GatewayManager, ): Promise { - const provider = await getProvider(providerId); + const provider = await getProviderConfigForRuntime(providerId); if (!provider) { return; } @@ -656,7 +668,8 @@ export async function syncDefaultProviderToRuntime( } scheduleGatewayRefresh( gatewayManager, - `Scheduling Gateway reload after provider switch to "${browserOAuthRuntimeProvider}"`, + `Scheduling Gateway restart after provider switch to "${browserOAuthRuntimeProvider}"`, + { mode: 'restart' }, ); return; } @@ -718,7 +731,7 @@ export async function syncDefaultProviderToRuntime( scheduleGatewayRefresh( gatewayManager, - `Scheduling Gateway reload after provider switch to "${ock}"`, - { onlyIfRunning: true }, + `Scheduling Gateway restart after provider switch to "${ock}"`, + { onlyIfRunning: true, mode: 'restart' }, ); } diff --git a/electron/services/providers/provider-service.ts b/electron/services/providers/provider-service.ts index 681925e..dca911e 100644 --- a/electron/services/providers/provider-service.ts +++ b/electron/services/providers/provider-service.ts @@ -32,6 +32,12 @@ import { getActiveOpenClawProviders, getOpenClawProvidersConfig } from '../../ut import { getAliasSourceTypes, getOpenClawProviderKeyForType } from '../../utils/provider-keys'; import type { ProviderWithKeyInfo } from '../../shared/providers/types'; import { logger } from '../../utils/logger'; +import { + YINIAN_MODEL_DEFAULT_BASE_URL, + YINIAN_MODEL_DEFAULT_ID, + YINIAN_MODEL_PROVIDER_KEY, + YINIAN_MODEL_REF, +} from '../../../shared/yinian-model'; function maskApiKey(apiKey: string | null): string | null { if (!apiKey) return null; @@ -67,6 +73,35 @@ function inferProviderVendorIdFromOpenClawEntry( return ((BUILTIN_PROVIDER_TYPES as readonly string[]).includes(key) ? key : 'custom') as ProviderType | 'custom'; } +function isPlaceholderYinianModelAccount(account: ProviderAccount): boolean { + const model = account.model?.startsWith(`${YINIAN_MODEL_PROVIDER_KEY}/`) + ? account.model + : `${YINIAN_MODEL_PROVIDER_KEY}/${account.model ?? ''}`; + + return account.id === YINIAN_MODEL_PROVIDER_KEY + && account.vendorId === 'custom' + && account.baseUrl === YINIAN_MODEL_DEFAULT_BASE_URL + && model === YINIAN_MODEL_REF; +} + +function isPlaceholderYinianModelEntry( + key: string, + entry: Record, + defaultModel: string | undefined, +): boolean { + if (key !== YINIAN_MODEL_PROVIDER_KEY) return false; + if (!entry.baseUrl) return true; + if (entry.baseUrl !== YINIAN_MODEL_DEFAULT_BASE_URL) return false; + + const models = Array.isArray(entry.models) ? entry.models : []; + const hasPlaceholderModel = models.some((model) => { + if (!model || typeof model !== 'object') return false; + return (model as Record).id === YINIAN_MODEL_DEFAULT_ID; + }); + + return defaultModel === YINIAN_MODEL_REF || hasPlaceholderModel; +} + export class ProviderService { async listVendors(): Promise { return PROVIDER_DEFINITIONS; @@ -75,21 +110,16 @@ export class ProviderService { async listAccounts(): Promise { await ensureProviderStoreMigrated(); - // ── openclaw.json is the ONLY source of truth ── - // The provider list is derived entirely from openclaw.json. - // The electron-store is only used as a metadata cache (label, authMode, etc.). + // Provider accounts are the settings source of truth. openclaw.json is the + // generated runtime output, but we still import from it for older installs. const { providers: openClawProviders, defaultModel } = await getOpenClawProvidersConfig(); const activeProviders = await getActiveOpenClawProviders(); - if (activeProviders.size === 0) { - return []; - } + const rawStoreAccounts = await listProviderAccounts(); + const allStoreAccounts = rawStoreAccounts + .filter((account) => !isPlaceholderYinianModelAccount(account)); - // Read store accounts as a lookup cache (NOT as the source of what to display). - const allStoreAccounts = await listProviderAccounts(); - - // Index store accounts by their openclaw runtime key for fast lookup. const storeByKey = new Map(); for (const account of allStoreAccounts) { const ock = getOpenClawProviderKeyForType(account.vendorId, account.id); @@ -101,47 +131,59 @@ export class ProviderService { const result: ProviderAccount[] = []; const processedKeys = new Set(); - // For each active provider in openclaw.json, produce exactly ONE account. - for (const key of activeProviders) { + const storeKeys = Array.from(storeByKey.keys()); + for (const key of storeKeys) { if (processedKeys.has(key)) continue; processedKeys.add(key); const storeGroup = storeByKey.get(key) ?? []; + const aliasAccounts = storeGroup.filter((a) => a.vendorId !== key); + const candidates = aliasAccounts.length > 0 ? aliasAccounts : storeGroup; + candidates.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)); + result.push(candidates[0]); - if (storeGroup.length > 0) { - // Pick the best store account for this key: - // 1. Prefer alias variants (e.g. minimax-portal-cn over minimax-portal) - // 2. Among equal variants, prefer the most recently updated - const aliasAccounts = storeGroup.filter((a) => a.vendorId !== key); - const candidates = aliasAccounts.length > 0 ? aliasAccounts : storeGroup; - candidates.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)); - result.push(candidates[0]); - - // Clean up orphaned duplicates from the store. - const kept = candidates[0]; - for (const account of storeGroup) { - if (account.id !== kept.id) { - logger.info( - `[provider-sync] Removing orphaned account "${account.id}" for key "${key}" (keeping "${kept.id}")`, - ); - await deleteProviderAccount(account.id); - } - } - } else { - // No store account for this key — create a seed from openclaw.json. - const entry = openClawProviders[key]; - if (entry) { - const seeded = ProviderService.buildAccountsFromOpenClawEntries( - { [key]: entry }, - new Set(), - new Set(), - defaultModel, + const kept = candidates[0]; + for (const account of storeGroup) { + if (account.id !== kept.id) { + logger.info( + `[provider-sync] Removing orphaned account "${account.id}" for key "${key}" (keeping "${kept.id}")`, ); - for (const account of seeded) { - await saveProviderAccount(account); - result.push(account); - logger.info(`[provider-sync] Seeded provider account "${account.id}" from openclaw.json`); - } + await deleteProviderAccount(account.id); + } + } + } + + const existingIds = new Set(result.map((account) => account.id)); + const existingVendorIds = new Set(result.map((account) => account.vendorId)); + + for (const key of activeProviders) { + if (processedKeys.has(key)) continue; + const entry = openClawProviders[key]; + if (!entry || isPlaceholderYinianModelEntry(key, entry, defaultModel)) { + continue; + } + + const seeded = ProviderService.buildAccountsFromOpenClawEntries( + { [key]: entry }, + existingIds, + existingVendorIds, + defaultModel, + ); + for (const account of seeded) { + await saveProviderAccount(account); + result.push(account); + existingIds.add(account.id); + existingVendorIds.add(account.vendorId); + logger.info(`[provider-sync] Seeded provider account "${account.id}" from openclaw.json`); + } + } + + for (const account of rawStoreAccounts) { + if (isPlaceholderYinianModelAccount(account)) { + try { + await deleteProviderAccount(account.id); + } catch (err) { + logger.warn(`[provider-sync] Failed to remove placeholder model account "${account.id}":`, err); } } } diff --git a/electron/shared/providers/registry.ts b/electron/shared/providers/registry.ts index 39bcd03..7bec955 100644 --- a/electron/shared/providers/registry.ts +++ b/electron/shared/providers/registry.ts @@ -5,6 +5,8 @@ import type { ProviderTypeInfo, } from './types'; +const MINIMAX_DEFAULT_MODEL_ID = 'MiniMax-M3'; + export const PROVIDER_DEFINITIONS: ProviderDefinition[] = [ { id: 'anthropic', @@ -231,10 +233,9 @@ export const PROVIDER_DEFINITIONS: ProviderDefinition[] = [ requiresApiKey: false, isOAuth: true, supportsApiKey: true, - defaultModelId: 'MiniMax-M2.7', + defaultModelId: MINIMAX_DEFAULT_MODEL_ID, showModelId: true, - showModelIdInDevModeOnly: true, - modelIdPlaceholder: 'MiniMax-M2.7', + modelIdPlaceholder: MINIMAX_DEFAULT_MODEL_ID, apiKeyUrl: 'https://platform.minimax.io', category: 'official', envVar: 'MINIMAX_API_KEY', @@ -256,10 +257,9 @@ export const PROVIDER_DEFINITIONS: ProviderDefinition[] = [ requiresApiKey: false, isOAuth: true, supportsApiKey: true, - defaultModelId: 'MiniMax-M2.7', + defaultModelId: MINIMAX_DEFAULT_MODEL_ID, showModelId: true, - showModelIdInDevModeOnly: true, - modelIdPlaceholder: 'MiniMax-M2.7', + modelIdPlaceholder: MINIMAX_DEFAULT_MODEL_ID, apiKeyUrl: 'https://platform.minimaxi.com/', category: 'official', envVar: 'MINIMAX_CN_API_KEY', diff --git a/electron/utils/agent-system-documents.ts b/electron/utils/agent-system-documents.ts new file mode 100644 index 0000000..bdcb7c8 --- /dev/null +++ b/electron/utils/agent-system-documents.ts @@ -0,0 +1,249 @@ +import { access, mkdir, readFile, stat, writeFile } from 'node:fs/promises'; +import { constants } from 'node:fs'; +import { join } from 'node:path'; +import { listAgentsSnapshot, type AgentSummary } from './agent-config'; +import { expandPath, getOpenClawDir } from './paths'; + +export const AGENT_SYSTEM_DOCUMENTS = [ + { + kind: 'soul', + fileName: 'SOUL.md', + }, + { + kind: 'identity', + fileName: 'IDENTITY.md', + }, + { + kind: 'user', + fileName: 'USER.md', + }, + { + kind: 'agent', + fileName: 'AGENTS.md', + }, + { + kind: 'tool', + fileName: 'TOOLS.md', + }, + { + kind: 'heartbeat', + fileName: 'HEARTBEAT.md', + }, + { + kind: 'boot', + fileName: 'BOOT.md', + }, +] as const; + +export type AgentSystemDocumentKind = typeof AGENT_SYSTEM_DOCUMENTS[number]['kind']; +export type AgentSystemDocumentSource = 'workspace' | 'template' | 'empty'; + +export interface AgentSystemDocumentAgent { + id: string; + name: string; + isDefault: boolean; + workspace: string; +} + +export interface AgentSystemDocument { + kind: AgentSystemDocumentKind; + fileName: string; + path: string; + exists: boolean; + source: AgentSystemDocumentSource; + content: string; + size: number; + updatedAt: number | null; + templateAvailable: boolean; + templatePath: string; +} + +export interface AgentSystemDocumentsSnapshot { + success: true; + selectedAgentId: string; + defaultAgentId: string; + agents: AgentSystemDocumentAgent[]; + documents: AgentSystemDocument[]; + paths: { + workspace: string; + templateDir: string; + }; +} + +const MAX_DOCUMENT_BYTES = 512 * 1024; + +function getDescriptor(kind: string): typeof AGENT_SYSTEM_DOCUMENTS[number] | null { + return AGENT_SYSTEM_DOCUMENTS.find((document) => document.kind === kind) ?? null; +} + +export function isAgentSystemDocumentKind(kind: string): kind is AgentSystemDocumentKind { + return getDescriptor(kind) !== null; +} + +async function fileExists(path: string): Promise { + try { + await access(path, constants.F_OK); + return true; + } catch { + return false; + } +} + +function resolveTemplateDir(): string { + return join(getOpenClawDir(), 'docs', 'reference', 'templates'); +} + +function resolveTemplatePath(fileName: string): string { + return join(resolveTemplateDir(), fileName); +} + +function toDocumentAgent(agent: AgentSummary): AgentSystemDocumentAgent { + return { + id: agent.id, + name: agent.name, + isDefault: agent.isDefault, + workspace: agent.workspace, + }; +} + +async function resolveAgent(agentId?: string): Promise<{ + selected: AgentSystemDocumentAgent; + defaultAgentId: string; + agents: AgentSystemDocumentAgent[]; +}> { + const snapshot = await listAgentsSnapshot(); + const agents = snapshot.agents.map(toDocumentAgent); + if (agents.length === 0) { + throw new Error('No OpenClaw agents are configured'); + } + + const requestedAgentId = typeof agentId === 'string' ? agentId.trim() : ''; + const selected = requestedAgentId + ? agents.find((agent) => agent.id === requestedAgentId) + : agents.find((agent) => agent.id === snapshot.defaultAgentId) ?? agents[0]; + + if (!selected) { + throw new Error(`Agent "${requestedAgentId}" not found`); + } + + return { + selected, + defaultAgentId: snapshot.defaultAgentId, + agents, + }; +} + +async function readTemplate(fileName: string): Promise { + const templatePath = resolveTemplatePath(fileName); + if (!(await fileExists(templatePath))) return null; + return readFile(templatePath, 'utf8'); +} + +async function readDocument(agent: AgentSystemDocumentAgent, kind: AgentSystemDocumentKind): Promise { + const descriptor = getDescriptor(kind); + if (!descriptor) { + throw new Error(`Unsupported system document kind "${kind}"`); + } + + const workspace = expandPath(agent.workspace); + const documentPath = join(workspace, descriptor.fileName); + const templatePath = resolveTemplatePath(descriptor.fileName); + const template = await readTemplate(descriptor.fileName); + + if (await fileExists(documentPath)) { + const [content, stats] = await Promise.all([ + readFile(documentPath, 'utf8'), + stat(documentPath), + ]); + return { + kind, + fileName: descriptor.fileName, + path: documentPath, + exists: true, + source: 'workspace', + content, + size: stats.size, + updatedAt: stats.mtimeMs, + templateAvailable: template !== null, + templatePath, + }; + } + + const content = template ?? ''; + return { + kind, + fileName: descriptor.fileName, + path: documentPath, + exists: false, + source: template === null ? 'empty' : 'template', + content, + size: 0, + updatedAt: null, + templateAvailable: template !== null, + templatePath, + }; +} + +export async function readAgentSystemDocuments(agentId?: string): Promise { + const { selected, defaultAgentId, agents } = await resolveAgent(agentId); + const documents = await Promise.all( + AGENT_SYSTEM_DOCUMENTS.map((document) => readDocument(selected, document.kind)), + ); + return { + success: true, + selectedAgentId: selected.id, + defaultAgentId, + agents, + documents, + paths: { + workspace: expandPath(selected.workspace), + templateDir: resolveTemplateDir(), + }, + }; +} + +export async function saveAgentSystemDocument( + agentId: string | undefined, + kind: AgentSystemDocumentKind, + content: string, +): Promise { + if (typeof content !== 'string') { + throw new Error('Document content must be a string'); + } + const byteLength = Buffer.byteLength(content, 'utf8'); + if (byteLength > MAX_DOCUMENT_BYTES) { + throw new Error(`Document is too large (${byteLength} bytes, max ${MAX_DOCUMENT_BYTES})`); + } + + const { selected } = await resolveAgent(agentId); + const descriptor = getDescriptor(kind); + if (!descriptor) { + throw new Error(`Unsupported system document kind "${kind}"`); + } + + const workspace = expandPath(selected.workspace); + await mkdir(workspace, { recursive: true }); + await writeFile(join(workspace, descriptor.fileName), content, 'utf8'); + return readAgentSystemDocuments(selected.id); +} + +export async function resetAgentSystemDocument( + agentId: string | undefined, + kind: AgentSystemDocumentKind, +): Promise { + const { selected } = await resolveAgent(agentId); + const descriptor = getDescriptor(kind); + if (!descriptor) { + throw new Error(`Unsupported system document kind "${kind}"`); + } + + const template = await readTemplate(descriptor.fileName); + if (template === null) { + throw new Error(`Template for ${descriptor.fileName} is not available`); + } + + const workspace = expandPath(selected.workspace); + await mkdir(workspace, { recursive: true }); + await writeFile(join(workspace, descriptor.fileName), template, 'utf8'); + return readAgentSystemDocuments(selected.id); +} diff --git a/electron/utils/channel-config.ts b/electron/utils/channel-config.ts index 42c7fa2..6ecbfb3 100644 --- a/electron/utils/channel-config.ts +++ b/electron/utils/channel-config.ts @@ -22,8 +22,8 @@ import { const OPENCLAW_DIR = join(homedir(), '.openclaw'); const CONFIG_FILE = join(OPENCLAW_DIR, 'openclaw.json'); const WECOM_PLUGIN_ID = 'wecom'; -const DISABLED_PLUGIN_CHANNEL_TYPES = new Set(['dingtalk', 'wecom', 'feishu']); -const DISABLED_PLUGIN_IDS = ['dingtalk', 'wecom', 'feishu', 'openclaw-lark', 'feishu-openclaw-plugin']; +const DISABLED_PLUGIN_CHANNEL_TYPES = new Set(['dingtalk', 'wecom']); +const DISABLED_PLUGIN_IDS = ['dingtalk', 'wecom']; // Note: QQBot is a built-in channel since OpenClaw 3.31 — no plugin ID needed. const WECHAT_PLUGIN_ID = OPENCLAW_WECHAT_CHANNEL_TYPE; const FEISHU_PLUGIN_ID_CANDIDATES = ['openclaw-lark', 'feishu-openclaw-plugin'] as const; diff --git a/electron/utils/model-diagnostics.ts b/electron/utils/model-diagnostics.ts index c8abd3d..3bfbede 100644 --- a/electron/utils/model-diagnostics.ts +++ b/electron/utils/model-diagnostics.ts @@ -5,19 +5,17 @@ import { dirname, join } from 'node:path'; import { getOpenClawConfigDir } from './paths'; import { readOpenClawConfig, writeOpenClawConfig } from './channel-config'; import { logger } from './logger'; +import { + YINIAN_LEGACY_MODEL_PROVIDER_KEYS, + YINIAN_MODEL_AUTH_PROFILE_ID, + YINIAN_MODEL_DEFAULT_BASE_URL, + YINIAN_MODEL_PROVIDER_KEY, +} from '../../shared/yinian-model'; -const YINIAN_MODEL_PROVIDER_KEY = 'minimax'; -const YINIAN_MODEL_ID = 'MiniMax-M2.7'; -const YINIAN_MODEL_REF = `${YINIAN_MODEL_PROVIDER_KEY}/${YINIAN_MODEL_ID}`; -const YINIAN_INTERNAL_PROVIDER_KEYS = ['minimax', 'minimax-portal']; -const YINIAN_MODEL_AUTH_ALIAS_PROFILE_IDS = [ - 'minimax:cn', - 'minimax-cn:default', - 'minimax-portal-cn:default', - 'minimax-portal:default', -]; -const YINIAN_MODEL_AUTH_TARGET_PROFILE_ID = 'minimax:default'; -const YINIAN_MODEL_AUTH_TARGET_PROVIDER = 'minimax'; +const YINIAN_INTERNAL_PROVIDER_KEYS = [ + YINIAN_MODEL_PROVIDER_KEY, + ...YINIAN_LEGACY_MODEL_PROVIDER_KEYS, +] as const; const YINIAN_FALLBACK_SKILL_IDS = ['docx', 'pdf', 'pptx', 'xlsx', 'design', 'image-search', 'web-search']; type JsonObject = Record; @@ -162,7 +160,10 @@ function splitModelRef(modelRef: string | null): { providerKey: string | null; m }; } -function groupAuthProfiles(store: AuthProfilesStore): YinianModelConfigDiagnostics['authProfiles']['providers'] { +function groupAuthProfiles( + store: AuthProfilesStore, + referencedProviderKeys?: Set, +): YinianModelConfigDiagnostics['authProfiles']['providers'] { const profiles = isPlainRecord(store.profiles) ? store.profiles : {}; const groups = new Map }>(); @@ -171,6 +172,7 @@ function groupAuthProfiles(store: AuthProfilesStore): YinianModelConfigDiagnosti const provider = typeof profile.provider === 'string' && profile.provider.trim() ? profile.provider : profileId.split(':')[0] || 'unknown'; + if (referencedProviderKeys && !referencedProviderKeys.has(provider)) continue; const type = typeof profile.type === 'string' && profile.type.trim() ? profile.type : 'unknown'; const group = groups.get(provider) ?? { ids: [], types: new Set() }; group.ids.push(profileId); @@ -205,15 +207,32 @@ function hasConfiguredProvider(config: JsonObject, providerKey: string | null): return isPlainRecord(providers[providerKey]); } -function buildProviderDiagnostics(config: JsonObject, primaryProviderKey: string | null): YinianModelConfigDiagnostics['providers'] { +function getProviderEntry(config: JsonObject, providerKey: string | null): JsonObject | null { + if (!providerKey) return null; const models = isPlainRecord(config.models) ? config.models : {}; const providers = isPlainRecord(models.providers) ? models.providers : {}; - const providerKeys = Array.from(new Set([ - ...(primaryProviderKey ? [primaryProviderKey] : []), - ...YINIAN_INTERNAL_PROVIDER_KEYS, - ])); + return isPlainRecord(providers[providerKey]) ? providers[providerKey] : null; +} - return providerKeys.map((key) => { +function isPlaceholderModelApiProvider(provider: JsonObject | null): boolean { + if (!provider) return false; + return provider.baseUrl === YINIAN_MODEL_DEFAULT_BASE_URL; +} + +function collectModelProviderKeys(primary: string | null, fallbacks: string[]): string[] { + const providerKeys = [ + splitModelRef(primary).providerKey, + ...fallbacks.map((modelRef) => splitModelRef(modelRef).providerKey), + ].filter((providerKey): providerKey is string => typeof providerKey === 'string' && providerKey.trim().length > 0); + + return [...new Set(providerKeys)]; +} + +function buildProviderDiagnostics(config: JsonObject, referencedProviderKeys: string[]): YinianModelConfigDiagnostics['providers'] { + const models = isPlainRecord(config.models) ? config.models : {}; + const providers = isPlainRecord(models.providers) ? models.providers : {}; + + return referencedProviderKeys.map((key) => { const entry = isPlainRecord(providers[key]) ? providers[key] : {}; const modelsList = Array.isArray(entry.models) ? entry.models : []; return { @@ -246,47 +265,6 @@ export async function ensureYinianModelRuntimeConfigured(): Promise { changed = true; } - const currentYinianProvider = isPlainRecord(providers[YINIAN_MODEL_PROVIDER_KEY]) - ? { ...providers[YINIAN_MODEL_PROVIDER_KEY] } - : {}; - if ('timeoutSeconds' in currentYinianProvider) { - delete currentYinianProvider.timeoutSeconds; - changed = true; - } - const currentModels = Array.isArray(currentYinianProvider.models) - ? currentYinianProvider.models.filter(isPlainRecord) - : []; - const hasYinianModel = currentModels.some((item) => item.id === YINIAN_MODEL_ID); - const nextYinianProvider = { - ...currentYinianProvider, - baseUrl: typeof currentYinianProvider.baseUrl === 'string' && currentYinianProvider.baseUrl.trim() - ? currentYinianProvider.baseUrl - : 'https://api.minimaxi.com/anthropic', - api: typeof currentYinianProvider.api === 'string' && currentYinianProvider.api.trim() - ? currentYinianProvider.api - : 'anthropic-messages', - authHeader: typeof currentYinianProvider.authHeader === 'boolean' - ? currentYinianProvider.authHeader - : true, - models: hasYinianModel - ? currentModels - : [ - ...currentModels, - { - id: YINIAN_MODEL_ID, - name: 'MiniMax M2.7', - reasoning: true, - input: ['text', 'image'], - contextWindow: 204800, - maxTokens: 131072, - }, - ], - }; - if (JSON.stringify(providers[YINIAN_MODEL_PROVIDER_KEY]) !== JSON.stringify(nextYinianProvider)) { - providers[YINIAN_MODEL_PROVIDER_KEY] = nextYinianProvider; - changed = true; - } - for (const providerKey of YINIAN_INTERNAL_PROVIDER_KEYS) { const currentProvider = providers[providerKey]; if (!isPlainRecord(currentProvider)) continue; @@ -307,12 +285,26 @@ export async function ensureYinianModelRuntimeConfigured(): Promise { const agents = isPlainRecord(config.agents) ? { ...config.agents } : {}; const defaults = isPlainRecord(agents.defaults) ? { ...agents.defaults } : {}; const defaultModel = isPlainRecord(defaults.model) ? { ...defaults.model } : {}; - if (defaultModel.primary !== YINIAN_MODEL_REF) { - defaultModel.primary = YINIAN_MODEL_REF; + const currentPrimary = typeof defaultModel.primary === 'string' && defaultModel.primary.trim() + ? defaultModel.primary.trim() + : ''; + const { providerKey: currentPrimaryProvider } = splitModelRef(currentPrimary || null); + const currentYinianProvider = isPlainRecord(providers[YINIAN_MODEL_PROVIDER_KEY]) + ? providers[YINIAN_MODEL_PROVIDER_KEY] + : null; + const hasPlaceholderYinianProvider = isPlaceholderModelApiProvider(currentYinianProvider); + const shouldCleanYinianModelAuth = !currentYinianProvider || hasPlaceholderYinianProvider; + + if (hasPlaceholderYinianProvider) { + delete providers[YINIAN_MODEL_PROVIDER_KEY]; + if (currentPrimaryProvider === YINIAN_MODEL_PROVIDER_KEY) { + delete defaultModel.primary; + defaultModel.fallbacks = []; + } changed = true; } if (!Array.isArray(defaultModel.fallbacks)) { - defaultModel.fallbacks = ['minimax/MiniMax-M2.5']; + defaultModel.fallbacks = []; changed = true; } defaults.model = defaultModel; @@ -385,59 +377,46 @@ export async function ensureYinianModelRuntimeConfigured(): Promise { logger.info('[provider-sync] Applied Yinian model runtime defaults'); } - await ensureYinianModelAuthProfileAliases(); + if (shouldCleanYinianModelAuth) { + await removeYinianModelAuthProfileLeftovers(); + } } -export async function ensureYinianModelAuthProfileAliases(agentId = 'main'): Promise { +export async function removeYinianModelAuthProfileLeftovers(agentId = 'main'): Promise { const authPath = getAuthProfilesPath(agentId); const store = await readAuthProfilesStore(authPath); store.version = typeof store.version === 'number' ? store.version : 1; store.profiles = isPlainRecord(store.profiles) ? store.profiles : {}; - const target = store.profiles[YINIAN_MODEL_AUTH_TARGET_PROFILE_ID]; - const sourceId = YINIAN_MODEL_AUTH_ALIAS_PROFILE_IDS.find((profileId) => isPlainRecord(store.profiles?.[profileId])); - const source = sourceId ? store.profiles[sourceId] : null; let changed = false; - if (!isPlainRecord(target) && isPlainRecord(source)) { - store.profiles[YINIAN_MODEL_AUTH_TARGET_PROFILE_ID] = { - ...source, - provider: YINIAN_MODEL_AUTH_TARGET_PROVIDER, - }; - changed = true; - } else if (isPlainRecord(target) && target.provider !== YINIAN_MODEL_AUTH_TARGET_PROVIDER) { - store.profiles[YINIAN_MODEL_AUTH_TARGET_PROFILE_ID] = { - ...target, - provider: YINIAN_MODEL_AUTH_TARGET_PROVIDER, - }; + for (const [profileId, profile] of Object.entries(store.profiles)) { + const isYinianProfileId = profileId === YINIAN_MODEL_AUTH_PROFILE_ID + || profileId.startsWith(`${YINIAN_MODEL_PROVIDER_KEY}:`); + const isYinianProvider = isPlainRecord(profile) && profile.provider === YINIAN_MODEL_PROVIDER_KEY; + if (isYinianProfileId || isYinianProvider) { + delete store.profiles[profileId]; + changed = true; + } + } + + if (isPlainRecord(store.order) && YINIAN_MODEL_PROVIDER_KEY in store.order) { + const order = { ...store.order } as Record; + delete order[YINIAN_MODEL_PROVIDER_KEY]; + store.order = order; changed = true; } - if (isPlainRecord(store.profiles[YINIAN_MODEL_AUTH_TARGET_PROFILE_ID])) { - const order = isPlainRecord(store.order) ? { ...store.order } as Record : {}; - const currentOrder = Array.isArray(order[YINIAN_MODEL_AUTH_TARGET_PROVIDER]) - ? order[YINIAN_MODEL_AUTH_TARGET_PROVIDER] - : []; - if (!currentOrder.includes(YINIAN_MODEL_AUTH_TARGET_PROFILE_ID)) { - order[YINIAN_MODEL_AUTH_TARGET_PROVIDER] = [ - YINIAN_MODEL_AUTH_TARGET_PROFILE_ID, - ...currentOrder.filter((item) => item !== YINIAN_MODEL_AUTH_TARGET_PROFILE_ID), - ]; - store.order = order; - changed = true; - } - - const lastGood = isPlainRecord(store.lastGood) ? { ...store.lastGood } as Record : {}; - if (!lastGood[YINIAN_MODEL_AUTH_TARGET_PROVIDER]) { - lastGood[YINIAN_MODEL_AUTH_TARGET_PROVIDER] = YINIAN_MODEL_AUTH_TARGET_PROFILE_ID; - store.lastGood = lastGood; - changed = true; - } + if (isPlainRecord(store.lastGood) && YINIAN_MODEL_PROVIDER_KEY in store.lastGood) { + const lastGood = { ...store.lastGood } as Record; + delete lastGood[YINIAN_MODEL_PROVIDER_KEY]; + store.lastGood = lastGood; + changed = true; } if (changed) { await writeJsonFile(authPath, store); - logger.info('[provider-sync] Normalized Yinian model auth profile aliases'); + logger.info('[provider-sync] Removed legacy Yinian model auth profile leftovers'); } } @@ -448,11 +427,15 @@ export async function buildYinianModelConfigDiagnostics(): Promise 0 ? parsed : DEFAULT_NIANXX_PLAY_PORT; -} - -function getBaseUrl(): string { - const explicitUrl = process.env.NIANXX_PLAY_URL?.trim(); - if (explicitUrl) return explicitUrl.replace(/\/$/, ''); - return `http://127.0.0.1:${activePort ?? getConfiguredPort()}`; -} - -function allowExternalNianxxPlayRuntime(): boolean { - return Boolean(process.env.NIANXX_PLAY_URL?.trim()); -} - -function getNpmCommand(): string { - return process.platform === 'win32' ? 'npm.cmd' : 'npm'; -} - -function getBundledNodeCommand(): string | undefined { - const binName = process.platform === 'win32' ? 'node.exe' : 'node'; - const candidate = app.isPackaged - ? join(process.resourcesPath, 'bin', binName) - : join(process.cwd(), 'resources', 'bin', `${process.platform}-${process.arch}`, binName); - return existsSync(candidate) ? candidate : undefined; -} - -function getScriptName(): string { - return process.env.NIANXX_PLAY_SCRIPT?.trim() || (process.env.NODE_ENV === 'production' ? 'start' : 'dev'); -} - -function getResourcePathCandidates(): string[] { - const resourcesPath = (process as ProcessWithResourcesPath).resourcesPath; - return [ - process.env.NIANXX_PLAY_DIR?.trim() || '', - join(process.cwd(), '..', 'NianxxPlay'), - join(process.cwd(), 'NianxxPlay'), - join(process.cwd(), 'build', 'apps', 'nianxx-play'), - resourcesPath ? join(resourcesPath, 'nianxx-play') : '', - resourcesPath ? join(resourcesPath, 'resources', 'nianxx-play') : '', - ].filter(Boolean); -} - -function createRuntimeCandidate(candidate: string): NianxxPlayRuntime | undefined { - const dir = resolve(candidate); - const directStandaloneServer = join(dir, 'server.js'); - const nestedStandaloneServer = join(dir, 'standalone', 'server.js'); - if (existsSync(directStandaloneServer)) { - return { kind: 'standalone', dir, serverPath: directStandaloneServer }; - } - if (existsSync(nestedStandaloneServer)) { - return { kind: 'standalone', dir: join(dir, 'standalone'), serverPath: nestedStandaloneServer }; - } - if (existsSync(join(dir, 'package.json'))) { - return { kind: 'source', dir }; - } - return undefined; -} - -function resolveNianxxPlayRuntime(): NianxxPlayRuntime | undefined { - for (const candidate of getResourcePathCandidates()) { - const runtime = createRuntimeCandidate(candidate); - if (runtime) return runtime; - } - return undefined; -} - -async function canReachNianxxPlay(baseUrl = getBaseUrl()): Promise { - const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), 1_500); - try { - const response = await fetch(`${baseUrl}${HEALTH_PATH}`, { - method: 'GET', - signal: controller.signal, - }); - if (!response.ok) return false; - const payload = (await response.json().catch(() => undefined)) as NianxxPlayHealthPayload | undefined; - const isNianxxPlay = Boolean(payload && payload.appId === 'nianxx-play' && payload.ok); - if (!isNianxxPlay) return false; - return payload?.desktopManaged === true || allowExternalNianxxPlayRuntime(); - } catch { - return false; - } finally { - clearTimeout(timeout); - } -} - -function createStatus(overrides: Partial = {}): NianxxPlayServiceStatus { - const runtime = resolveNianxxPlayRuntime(); - const baseUrl = getBaseUrl(); - return { - success: true, - running: false, - starting: Boolean(nianxxPlayProcess && !nianxxPlayProcess.killed), - managed: Boolean(nianxxPlayProcess && !nianxxPlayProcess.killed), - baseUrl, - port: activePort ?? getConfiguredPort(), - projectDir: runtime?.dir, - runtimeKind: runtime?.kind, - pid: nianxxPlayProcess?.pid, - error: lastServiceError ?? undefined, - ...overrides, - }; -} - -function attachProcessLogger(stream: NodeJS.ReadableStream, level: 'info' | 'warn'): void { - let buffer = ''; - stream.on('data', (chunk) => { - buffer += Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk); - const lines = buffer.split(/\r?\n/); - buffer = lines.pop() ?? ''; - for (const line of lines) { - const trimmed = line.trim(); - if (!trimmed) continue; - if (level === 'warn') { - logger.warn(`[nianxx-play] ${trimmed}`); - } else { - logger.info(`[nianxx-play] ${trimmed}`); - } - } - }); -} - -async function waitUntilReachable(baseUrl: string): Promise { - const startedAt = Date.now(); - while (Date.now() - startedAt < STARTUP_TIMEOUT_MS) { - if (await canReachNianxxPlay(baseUrl)) { - return true; - } - await delay(STARTUP_POLL_INTERVAL_MS); - } - return false; -} - -async function isPortAvailable(port: number): Promise { - return new Promise((resolveAvailable) => { - const server = createServer(); - server.once('error', () => resolveAvailable(false)); - server.once('listening', () => { - server.close(() => resolveAvailable(true)); - }); - server.listen(port, '127.0.0.1'); - }); -} - -async function findAvailablePort(preferredPort: number): Promise { - if (await isPortAvailable(preferredPort)) return preferredPort; - return new Promise((resolvePort, reject) => { - const server = createServer(); - server.once('error', reject); - server.once('listening', () => { - const address = server.address(); - const port = typeof address === 'object' && address ? address.port : preferredPort; - server.close(() => resolvePort(port)); - }); - server.listen(0, '127.0.0.1'); - }); -} - -function getRuntimeDataDirs() { - const userData = app.getPath('userData'); - const runtimeRoot = join(userData, 'apps', 'nianxx-play'); - const dataDir = join(runtimeRoot, 'data'); - const uploadDir = join(runtimeRoot, 'uploads'); - const resultDir = join(runtimeRoot, 'generated-results'); - mkdirSync(dataDir, { recursive: true }); - mkdirSync(uploadDir, { recursive: true }); - mkdirSync(resultDir, { recursive: true }); - return { runtimeRoot, dataDir, uploadDir, resultDir }; -} - -function copyFileIfMissing(sourcePath: string, targetPath: string): void { - if (!existsSync(sourcePath) || existsSync(targetPath)) return; - mkdirSync(dirname(targetPath), { recursive: true }); - cpSync(sourcePath, targetPath, { dereference: true }); -} - -function readJsonFile(filePath: string): T | null { - try { - return JSON.parse(readFileSync(filePath, 'utf8')) as T; - } catch { - return null; - } -} - -function getArrayLength(record: Record | null, key: string): number { - const value = record?.[key]; - return Array.isArray(value) ? value.length : 0; -} - -function migrateStateFile(sourcePath: string, targetPath: string): void { - if (!existsSync(sourcePath)) return; - mkdirSync(dirname(targetPath), { recursive: true }); - if (!existsSync(targetPath)) { - cpSync(sourcePath, targetPath, { dereference: true }); - return; - } - - const sourceState = readJsonFile>(sourcePath); - const targetState = readJsonFile>(targetPath); - if (!sourceState || !targetState) return; - - const targetProjects = getArrayLength(targetState, 'projects'); - const sourceProjects = getArrayLength(sourceState, 'projects'); - if (targetProjects === 0 && sourceProjects > 0) { - writeFileSync(targetPath, JSON.stringify(sourceState, null, 2), 'utf8'); - logger.info(`[nianxx-play] Migrated ${sourceProjects} project record(s) from bundled/source runtime data`); - } -} - -function copyDirectoryMissing(sourceDir: string, targetDir: string): void { - if (!existsSync(sourceDir) || !statSync(sourceDir).isDirectory()) return; - mkdirSync(targetDir, { recursive: true }); - for (const entry of readdirSync(sourceDir)) { - const sourcePath = join(sourceDir, entry); - const targetPath = join(targetDir, entry); - if (statSync(sourcePath).isDirectory()) { - copyDirectoryMissing(sourcePath, targetPath); - continue; - } - copyFileIfMissing(sourcePath, targetPath); - } -} - -function migrateExistingRuntimeData(runtime: NianxxPlayRuntime, dirs: ReturnType): void { - try { - migrateStateFile(join(runtime.dir, '.data', 'app-state.json'), join(dirs.dataDir, 'app-state.json')); - copyDirectoryMissing(join(runtime.dir, 'public', 'uploads'), dirs.uploadDir); - copyDirectoryMissing(join(runtime.dir, 'public', 'generated-results'), dirs.resultDir); - } catch (error) { - logger.warn('[nianxx-play] Failed to migrate existing local runtime data:', error); - } -} - -function parseRuntimeEnvValue(raw: string): string { - const value = raw.trim(); - if ( - (value.startsWith('"') && value.endsWith('"')) || - (value.startsWith("'") && value.endsWith("'")) - ) { - try { - return JSON.parse(value); - } catch { - return value.slice(1, -1); - } - } - return value; -} - -function loadBundledRuntimeEnv(runtime: NianxxPlayRuntime): Record { - const runtimeEnvPath = join(runtime.dir, RUNTIME_ENV_FILE_NAME); - if (!existsSync(runtimeEnvPath)) return {}; - try { - const values: Record = {}; - const raw = readFileSync(runtimeEnvPath, 'utf8'); - for (const line of raw.split(/\r?\n/)) { - const trimmed = line.trim(); - if (!trimmed || trimmed.startsWith('#')) continue; - const match = trimmed.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=(.*)$/); - if (!match) continue; - values[match[1]] = parseRuntimeEnvValue(match[2]); - } - logger.info(`[nianxx-play] Loaded bundled runtime env (${Object.keys(values).length} values)`); - return values; - } catch (error) { - logger.warn('[nianxx-play] Failed to load bundled runtime env:', error); - return {}; - } -} - -function createRuntimeEnv(port: number, runtime: NianxxPlayRuntime) { - const dirs = getRuntimeDataDirs(); - migrateExistingRuntimeData(runtime, dirs); - const bundledRuntimeEnv = loadBundledRuntimeEnv(runtime); - return { - ...process.env, - ...bundledRuntimeEnv, - PORT: String(port), - HOSTNAME: '127.0.0.1', - NEXT_TELEMETRY_DISABLED: '1', - NIANXXPLAY_RUNTIME_DIR: dirs.runtimeRoot, - NIANXXPLAY_DATA_DIR: dirs.dataDir, - NIANXXPLAY_UPLOAD_DIR: dirs.uploadDir, - NIANXXPLAY_RESULT_DIR: dirs.resultDir, - NIANXXPLAY_PUBLIC_BASE_URL: `http://127.0.0.1:${port}`, - NIANXXPLAY_DESKTOP_MANAGED: '1', - }; -} - -function spawnSourceRuntime(runtime: NianxxPlayRuntime, port: number): ChildProcessWithoutNullStreams { - const scriptName = getScriptName(); - logger.info(`[nianxx-play] Starting source service: npm run ${scriptName} (cwd=${runtime.dir}, port=${port})`); - return spawn(getNpmCommand(), ['run', scriptName], { - cwd: runtime.dir, - env: createRuntimeEnv(port, runtime), - stdio: ['ignore', 'pipe', 'pipe'], - shell: false, - }); -} - -function spawnStandaloneRuntime(runtime: NianxxPlayRuntime, port: number): ChildProcessWithoutNullStreams { - if (!runtime.serverPath) { - throw new Error('NianxxPlay standalone server path is missing.'); - } - const bundledNode = getBundledNodeCommand(); - const command = bundledNode ?? process.execPath; - logger.info(`[nianxx-play] Starting bundled service: ${runtime.serverPath} (port=${port}, runner=${bundledNode ? 'bundled-node' : 'electron-node'})`); - return spawn(command, [runtime.serverPath], { - cwd: runtime.dir, - env: { - ...createRuntimeEnv(port, runtime), - ...(bundledNode ? {} : { ELECTRON_RUN_AS_NODE: '1' }), - NODE_ENV: 'production', - }, - stdio: ['ignore', 'pipe', 'pipe'], - shell: false, - }); -} - -function attachLifecycleHandlers(): void { - if (!nianxxPlayProcess) return; - attachProcessLogger(nianxxPlayProcess.stdout, 'info'); - attachProcessLogger(nianxxPlayProcess.stderr, 'warn'); - nianxxPlayProcess.once('exit', (code, signal) => { - const reason = signal ? `signal ${signal}` : `code ${code ?? 'unknown'}`; - logger.warn(`[nianxx-play] Service exited with ${reason}`); - if (code && code !== 0) { - lastServiceError = `NianxxPlay exited with ${reason}`; - } - nianxxPlayProcess = null; - activePort = null; - }); - nianxxPlayProcess.once('error', (error) => { - lastServiceError = error.message; - logger.warn('[nianxx-play] Failed to start service:', error); - nianxxPlayProcess = null; - activePort = null; - }); -} - -export async function getNianxxPlayServiceStatus(): Promise { - const running = await canReachNianxxPlay(); - return createStatus({ - running, - error: running ? undefined : (lastServiceError ?? undefined), - }); -} - -export async function ensureNianxxPlayServiceStarted(): Promise { - const baseUrl = getBaseUrl(); - if (await canReachNianxxPlay(baseUrl)) { - lastServiceError = null; - return createStatus({ running: true, starting: false, managed: Boolean(nianxxPlayProcess), error: undefined }); - } - - const runtime = resolveNianxxPlayRuntime(); - if (!runtime) { - lastServiceError = 'NianxxPlay runtime was not found.'; - return createStatus({ success: false, running: false, starting: false, error: lastServiceError }); - } - - if (!nianxxPlayProcess || nianxxPlayProcess.killed) { - const port = await findAvailablePort(getConfiguredPort()); - activePort = port; - nianxxPlayProcess = runtime.kind === 'standalone' - ? spawnStandaloneRuntime(runtime, port) - : spawnSourceRuntime(runtime, port); - attachLifecycleHandlers(); - } - - const running = await waitUntilReachable(getBaseUrl()); - if (!running) { - lastServiceError = `NianxxPlay did not become ready within ${Math.round(STARTUP_TIMEOUT_MS / 1000)}s.`; - } else { - lastServiceError = null; - } - - return createStatus({ - running, - starting: !running && Boolean(nianxxPlayProcess && !nianxxPlayProcess.killed), - managed: Boolean(nianxxPlayProcess && !nianxxPlayProcess.killed), - error: running ? undefined : (lastServiceError ?? undefined), - }); -} - -export function stopNianxxPlayService(): void { - if (!nianxxPlayProcess || nianxxPlayProcess.killed) return; - logger.info('[nianxx-play] Stopping service'); - nianxxPlayProcess.kill(); - nianxxPlayProcess = null; - activePort = null; -} diff --git a/electron/utils/openclaw-auth.ts b/electron/utils/openclaw-auth.ts index 2b5c7a6..af2b943 100644 --- a/electron/utils/openclaw-auth.ts +++ b/electron/utils/openclaw-auth.ts @@ -19,6 +19,11 @@ import { getProviderDefaultModel, getProviderConfig, } from './provider-registry'; +import { + YINIAN_LEGACY_MODEL_REFS, + YINIAN_MODEL_PROVIDER_KEY, + YINIAN_MODEL_REF, +} from '../../shared/yinian-model'; import { OPENCLAW_PROVIDER_KEY_MINIMAX, OPENCLAW_PROVIDER_KEY_MOONSHOT, @@ -33,7 +38,8 @@ const AUTH_PROFILE_FILENAME = 'auth-profiles.json'; const LEGACY_MINIMAX_OAUTH_PLUGIN_ID = 'minimax-portal-auth'; const MERGED_MINIMAX_PLUGIN_ID = 'minimax'; const YINIAN_DESKTOP_TOOLS_PROFILE = 'coding'; -const YINIAN_INTERNAL_MODEL_REF = 'minimax/MiniMax-M2.7'; +const YINIAN_INTERNAL_MODEL_REF = YINIAN_MODEL_REF; +const YINIAN_LEGACY_INTERNAL_MODEL_REFS = new Set(YINIAN_LEGACY_MODEL_REFS); const YINIAN_FALLBACK_SKILL_IDS = ['docx', 'pdf', 'pptx', 'xlsx', 'design', 'image-search', 'web-search']; const YINIAN_SKILLS_LIMITS = { maxCandidatesPerRoot: 24, @@ -46,14 +52,13 @@ const YINIAN_WEB_TOOL_GUARD_ENV = 'YINIAN_ENABLE_OPENCLAW_WEB_TOOLS'; const YINIAN_WEB_TOOL_DENY = ['group:web', 'web_search', 'web_fetch', 'x_search']; const YINIAN_WEB_FETCH_TIMEOUT_SECONDS = 8; const YINIAN_CORE_PLUGIN_IDS = new Set([ - 'minimax', 'cloud-sync', 'openclaw-weixin', 'agentbus', ]); -const YINIAN_BASE_PLUGIN_IDS = new Set(['minimax', 'cloud-sync']); +const YINIAN_BASE_PLUGIN_IDS = new Set(['cloud-sync']); const YINIAN_CORE_CHANNEL_IDS = new Set(['openclaw-weixin', 'agentbus']); -const YINIAN_DISABLED_CHANNEL_IDS = new Set(['feishu', 'dingtalk', 'wecom']); +const YINIAN_DISABLED_CHANNEL_IDS = new Set(['dingtalk', 'wecom']); interface BundledPluginManifest { id: string; @@ -1122,12 +1127,13 @@ function resolveYinianEnabledSkillIds(config: Record): string[] function isYinianManagedConfig(config: Record): boolean { const models = isPlainRecord(config.models) ? config.models : null; const providers = models && isPlainRecord(models.providers) ? models.providers : null; - if (providers && isPlainRecord(providers[OPENCLAW_PROVIDER_KEY_MINIMAX])) return true; + if (providers && isPlainRecord(providers[YINIAN_MODEL_PROVIDER_KEY])) return true; const agents = isPlainRecord(config.agents) ? config.agents : null; const defaults = agents && isPlainRecord(agents.defaults) ? agents.defaults : null; const model = defaults && isPlainRecord(defaults.model) ? defaults.model : null; - return model?.primary === YINIAN_INTERNAL_MODEL_REF; + return model?.primary === YINIAN_INTERNAL_MODEL_REF + || (typeof model?.primary === 'string' && YINIAN_LEGACY_INTERNAL_MODEL_REFS.has(model.primary)); } function trimYinianPluginSurface(config: Record): boolean { diff --git a/electron/utils/paths.ts b/electron/utils/paths.ts index b81f96e..6f48ea2 100644 --- a/electron/utils/paths.ts +++ b/electron/utils/paths.ts @@ -37,9 +37,13 @@ const REQUIRED_OPENCLAW_CONTEXT_MODULES = [ const YINIAN_OPENCLAW_RUNTIME_PATCH_MARKER = '.yinian-runtime-patch.json'; const YINIAN_OPENCLAW_RUNTIME_PATCH_VERSION = '2026-05-12-runtime-templates-selfref-v1'; const REQUIRED_OPENCLAW_RUNTIME_TEMPLATE_FILES = [ + 'SOUL.md', + 'IDENTITY.md', + 'USER.md', 'AGENTS.md', 'TOOLS.md', 'HEARTBEAT.md', + 'BOOT.md', ] as const; export { diff --git a/electron/utils/plugin-install.ts b/electron/utils/plugin-install.ts index 10e6240..eb0a381 100644 --- a/electron/utils/plugin-install.ts +++ b/electron/utils/plugin-install.ts @@ -129,13 +129,26 @@ export function fixupPluginManifest(targetDir: string): void { try { const raw = readFileSync(fsPath(manifestPath), 'utf-8'); const manifest = JSON.parse(raw); + let modified = false; const oldId = manifest.id as string | undefined; if (oldId && MANIFEST_ID_FIXES[oldId]) { const newId = MANIFEST_ID_FIXES[oldId]; manifest.id = newId; - writeFileSync(fsPath(manifestPath), JSON.stringify(manifest, null, 2) + '\n', 'utf-8'); + modified = true; logger.info(`[plugin] Fixed manifest ID: ${oldId} → ${newId}`); } + if (!manifest.channelConfigs && Array.isArray(manifest.channels)) { + const schema = { type: 'object' }; + manifest.channelConfigs = Object.fromEntries( + manifest.channels + .filter((channelId: unknown): channelId is string => typeof channelId === 'string' && channelId.trim().length > 0) + .map((channelId: string) => [channelId, { schema }]), + ); + modified = true; + } + if (modified) { + writeFileSync(fsPath(manifestPath), JSON.stringify(manifest, null, 2) + '\n', 'utf-8'); + } } catch { // manifest may not exist yet — ignore } @@ -166,6 +179,32 @@ export function fixupPluginManifest(targetDir: string): void { } } + const runtimeEntry = findExistingRuntimeEntry(targetDir, pkg); + if (runtimeEntry) { + if (typeof pkg.main !== 'string' || !runtimeEntryExists(targetDir, pkg.main)) { + pkg.main = toPackageEntry(runtimeEntry); + modified = true; + } + if (typeof pkg.module === 'string' && !runtimeEntryExists(targetDir, pkg.module)) { + pkg.module = toPackageEntry(runtimeEntry); + modified = true; + } + + const openclaw = pkg.openclaw as { extensions?: unknown } | undefined; + if (Array.isArray(openclaw?.extensions)) { + const patchedExtensions = openclaw.extensions.map((entry) => { + const normalized = normalizeRuntimeEntry(entry); + if (!normalized?.endsWith('.ts')) return entry; + const jsEntry = `dist/${normalized.replace(/\.ts$/i, '.js')}`; + return existsSync(fsPath(join(targetDir, jsEntry))) ? toPackageEntry(jsEntry) : entry; + }); + if (JSON.stringify(patchedExtensions) !== JSON.stringify(openclaw.extensions)) { + openclaw.extensions = patchedExtensions; + modified = true; + } + } + } + if (modified) { writeFileSync(fsPath(pkgPath), JSON.stringify(pkg, null, 2) + '\n', 'utf-8'); logger.info(`[plugin] Fixed package.json entry hints in ${targetDir}`); @@ -193,7 +232,9 @@ function patchPluginEntryIds(targetDir: string): void { return; } - const entryFiles = [pkg.main, pkg.module].filter(Boolean) as string[]; + const openclaw = pkg.openclaw as { extensions?: unknown } | undefined; + const extensionEntries = Array.isArray(openclaw?.extensions) ? openclaw.extensions : []; + const entryFiles = [...new Set([pkg.main, pkg.module, ...extensionEntries].filter(Boolean))] as string[]; for (const entry of entryFiles) { const entryPath = join(targetDir, entry); @@ -229,6 +270,7 @@ function patchPluginEntryIds(targetDir: string): void { const PLUGIN_NPM_NAMES: Record = { 'openclaw-weixin': '@tencent-weixin/openclaw-weixin', + 'openclaw-lark': '@larksuite/openclaw-lark', }; // ── Version helper ─────────────────────────────────────────────────────────── @@ -243,6 +285,54 @@ function readPluginVersion(pkgJsonPath: string): string | null { } } +function normalizeRuntimeEntry(entry: unknown): string | null { + if (typeof entry !== 'string') return null; + const trimmed = entry.trim(); + if (!trimmed || path.isAbsolute(trimmed)) return null; + return trimmed.replace(/^\.\//, ''); +} + +function toPackageEntry(entry: string): string { + return entry.startsWith('.') ? entry : `./${entry}`; +} + +function isJavaScriptRuntimeEntry(entry: string): boolean { + return /\.(?:cjs|mjs|js)$/i.test(entry); +} + +function runtimeEntryExists(pluginDir: string, entry: unknown): boolean { + const normalized = normalizeRuntimeEntry(entry); + return Boolean(normalized) && existsSync(fsPath(join(pluginDir, normalized!))); +} + +function collectRuntimeEntryHints(pkg: Record): string[] { + const hints: unknown[] = []; + const openclaw = pkg.openclaw as { extensions?: unknown } | undefined; + if (Array.isArray(openclaw?.extensions)) { + hints.push(...openclaw.extensions); + } + hints.push(pkg.main, pkg.module, './dist/index.js', './index.js'); + return [...new Set(hints.map(normalizeRuntimeEntry).filter((entry): entry is string => Boolean(entry)))]; +} + +function findExistingRuntimeEntry(pluginDir: string, pkg: Record): string | null { + for (const entry of collectRuntimeEntryHints(pkg)) { + if (isJavaScriptRuntimeEntry(entry) && existsSync(fsPath(join(pluginDir, entry)))) { + return entry; + } + } + return null; +} + +export function hasPluginRuntimeEntry(pluginDir: string): boolean { + try { + const pkg = JSON.parse(readFileSync(fsPath(join(pluginDir, 'package.json')), 'utf-8')) as Record; + return Boolean(findExistingRuntimeEntry(pluginDir, pkg)); + } catch { + return existsSync(fsPath(join(pluginDir, 'dist', 'index.js'))) || existsSync(fsPath(join(pluginDir, 'index.js'))); + } +} + // ── pnpm-aware node_modules copy helpers ───────────────────────────────────── /** Walk up from a path until we find a parent named node_modules. */ @@ -369,17 +459,33 @@ export function ensurePluginInstalled( if (!sourceDir) return { installed: true }; // no bundled source to compare, keep existing const installedVersion = readPluginVersion(targetPkgJson); const sourceVersion = readPluginVersion(join(sourceDir, 'package.json')); + const installedRuntimeReady = hasPluginRuntimeEntry(targetDir); + const sourceRuntimeReady = hasPluginRuntimeEntry(sourceDir); if (!sourceVersion || !installedVersion || sourceVersion === installedVersion) { - return { installed: true }; // same version or unable to compare + if (!installedRuntimeReady && sourceRuntimeReady) { + logger.info( + `[plugin] Reinstalling ${pluginLabel} plugin: installed copy is missing a loadable runtime entry`, + ); + } else { + fixupPluginManifest(targetDir); + return { installed: true }; // same version or unable to compare + } + } else { + // Version differs — fall through to overwrite install + logger.info( + `[plugin] Upgrading ${pluginLabel} plugin: ${installedVersion} → ${sourceVersion}`, + ); } - // Version differs — fall through to overwrite install - logger.info( - `[plugin] Upgrading ${pluginLabel} plugin: ${installedVersion} → ${sourceVersion}`, - ); } // Fresh install or upgrade — try bundled/build sources first if (sourceDir) { + if (!hasPluginRuntimeEntry(sourceDir)) { + return { + installed: false, + warning: `Bundled ${pluginLabel} plugin mirror is missing a loadable runtime entry. Rebuild bundled plugins.`, + }; + } const extensionsRoot = join(homedir(), '.openclaw', 'extensions'); const attempts: Array<{ attempt: number; code?: string; name?: string; message: string }> = []; const maxAttempts = process.platform === 'win32' ? 2 : 1; @@ -393,6 +499,12 @@ export function ensurePluginInstalled( return { installed: false, warning: `Failed to install ${pluginLabel} plugin mirror (manifest missing).` }; } fixupPluginManifest(targetDir); + if (!hasPluginRuntimeEntry(targetDir)) { + return { + installed: false, + warning: `Installed ${pluginLabel} plugin mirror is missing a loadable runtime entry.`, + }; + } logger.info(`Installed ${pluginLabel} plugin from bundled mirror: ${sourceDir}`); return { installed: true }; } catch (error) { @@ -431,7 +543,9 @@ export function ensurePluginInstalled( if (existsSync(fsPath(join(npmPkgPath, 'openclaw.plugin.json')))) { const installedVersion = existsSync(fsPath(targetPkgJson)) ? readPluginVersion(targetPkgJson) : null; const sourceVersion = readPluginVersion(join(npmPkgPath, 'package.json')); - if (sourceVersion && (!installedVersion || sourceVersion !== installedVersion)) { + const installedRuntimeReady = existsSync(fsPath(targetManifest)) ? hasPluginRuntimeEntry(targetDir) : false; + const sourceRuntimeReady = hasPluginRuntimeEntry(npmPkgPath); + if (sourceVersion && (!installedVersion || sourceVersion !== installedVersion || (!installedRuntimeReady && sourceRuntimeReady))) { logger.info( `[plugin] ${installedVersion ? 'Upgrading' : 'Installing'} ${pluginLabel} plugin` + `${installedVersion ? `: ${installedVersion} → ${sourceVersion}` : `: ${sourceVersion}`} (dev/node_modules)`, @@ -440,7 +554,7 @@ export function ensurePluginInstalled( mkdirSync(fsPath(join(homedir(), '.openclaw', 'extensions')), { recursive: true }); copyPluginFromNodeModules(npmPkgPath, targetDir, npmName); fixupPluginManifest(targetDir); - if (existsSync(fsPath(join(targetDir, 'openclaw.plugin.json')))) { + if (existsSync(fsPath(join(targetDir, 'openclaw.plugin.json'))) && hasPluginRuntimeEntry(targetDir)) { return { installed: true }; } } catch (err) { @@ -458,6 +572,7 @@ export function ensurePluginInstalled( ); } } else if (existsSync(fsPath(targetManifest))) { + fixupPluginManifest(targetDir); return { installed: true }; // same version, already installed } } @@ -495,6 +610,10 @@ export function ensureWeChatPluginInstalled(): { installed: boolean; warning?: s return ensurePluginInstalled('openclaw-weixin', buildCandidateSources('openclaw-weixin'), 'WeChat'); } +export function ensureFeishuPluginInstalled(): { installed: boolean; warning?: string } { + return ensurePluginInstalled('openclaw-lark', buildCandidateSources('openclaw-lark'), 'Feishu'); +} + export function ensureCloudSyncPluginInstalled(): { installed: boolean; warning?: string } { return ensurePluginInstalled('cloud-sync', buildCandidateSources('cloud-sync'), 'Cloud Sync'); } @@ -506,6 +625,7 @@ export function ensureCloudSyncPluginInstalled(): { installed: boolean; warning? */ const ALL_BUNDLED_PLUGINS = [ { fn: ensureWeChatPluginInstalled, label: 'WeChat' }, + { fn: ensureFeishuPluginInstalled, label: 'Feishu' }, { fn: ensureCloudSyncPluginInstalled, label: 'Cloud Sync' }, ] as const; diff --git a/electron/utils/secure-storage.ts b/electron/utils/secure-storage.ts index fc2b6fa..0133276 100644 --- a/electron/utils/secure-storage.ts +++ b/electron/utils/secure-storage.ts @@ -173,13 +173,17 @@ export async function getAllProviders(): Promise { await ensureProviderStoreMigrated(); const s = await getClawXProviderStore(); const providers = s.get('providers') as Record; - const legacyProviders = Object.values(providers); - if (legacyProviders.length > 0) { - return legacyProviders; + const merged = new Map(); + + for (const provider of Object.values(providers)) { + merged.set(provider.id, provider); } - const accounts = await listProviderAccounts(); - return accounts.map(providerAccountToConfig); + for (const account of await listProviderAccounts()) { + merged.set(account.id, providerAccountToConfig(account)); + } + + return Array.from(merged.values()); } /** @@ -227,8 +231,8 @@ export async function setDefaultProvider(providerId: string): Promise { export async function getDefaultProvider(): Promise { await ensureProviderStoreMigrated(); const s = await getClawXProviderStore(); - return (s.get('defaultProvider') as string | undefined) - ?? (s.get('defaultProviderAccountId') as string | undefined); + return (s.get('defaultProviderAccountId') as string | undefined) + ?? (s.get('defaultProvider') as string | undefined); } /** diff --git a/electron/utils/yinian-initializer.ts b/electron/utils/yinian-initializer.ts index 9e7363a..2604d89 100644 --- a/electron/utils/yinian-initializer.ts +++ b/electron/utils/yinian-initializer.ts @@ -6,8 +6,27 @@ import { getAllSettings, setSetting } from './store'; import { getOpenClawConfigDir, reinstallManagedOpenClawRuntime } from './paths'; import { logger } from './logger'; import { ensureOfficeSkillRuntimeReady } from './office-skill-runtime'; +import { + YINIAN_MODEL_ENTRY, + YINIAN_MODEL_PROVIDER_KEY, +} from '../../shared/yinian-model'; type JsonObject = Record; +type InternalModelAuthSeedResult = + | { status: 'seeded'; path: string; config: ModelRuntimeConfig } + | { status: 'skipped'; path?: string; reason: string; modelRef?: string }; + +interface ModelRuntimeConfig { + providerKey: string; + modelId: string; + modelName: string; + modelRef: string; + baseUrl: string; + api: string; + authHeader?: boolean; + fallbackModelRefs: string[]; + authProfileId: string; +} export type YinianInitializationStepStatus = 'pending' | 'running' | 'success' | 'error'; @@ -26,18 +45,18 @@ export interface YinianInitializationStatus { steps: YinianInitializationStep[]; } -const INTERNAL_PROVIDER_KEY = 'minimax'; -const INTERNAL_MODEL_ID = 'MiniMax-M2.7'; -const INTERNAL_MODEL_REF = `${INTERNAL_PROVIDER_KEY}/${INTERNAL_MODEL_ID}`; -const INTERNAL_AUTH_PROFILE_ID = 'minimax:default'; const DESKTOP_TOOLS_PROFILE = 'coding'; const YINIAN_FALLBACK_SKILL_IDS = ['docx', 'pdf', 'pptx', 'xlsx', 'design', 'image-search', 'web-search']; const REQUIRED_RUNTIME_FILES = [ 'package.json', 'openclaw.mjs', + join('docs', 'reference', 'templates', 'SOUL.md'), + join('docs', 'reference', 'templates', 'IDENTITY.md'), + join('docs', 'reference', 'templates', 'USER.md'), join('docs', 'reference', 'templates', 'AGENTS.md'), join('docs', 'reference', 'templates', 'TOOLS.md'), join('docs', 'reference', 'templates', 'HEARTBEAT.md'), + join('docs', 'reference', 'templates', 'BOOT.md'), join('node_modules', 'openclaw', 'package.json'), ] as const; let initializationInFlight: Promise | null = null; @@ -45,7 +64,7 @@ let initializationInFlight: Promise | null = null; const DEFAULT_STEPS: YinianInitializationStep[] = [ { id: 'runtime', label: '安装运行环境', status: 'pending' }, { id: 'workspace', label: '准备本地工作区', status: 'pending' }, - { id: 'model', label: '写入内测模型配置', status: 'pending' }, + { id: 'model', label: '准备模型 API 配置', status: 'pending' }, { id: 'python', label: '准备文档处理环境', status: 'pending' }, ]; @@ -54,8 +73,8 @@ export async function getYinianInitializationStatus(): Promise { if (step.id === 'runtime') { return { @@ -97,12 +115,10 @@ export async function getYinianInitializationStatus(): Promise { await mkdir(join(openclawDir, 'agents', 'main', 'agent'), { recursive: true }); } -async function seedInternalModelConfig(): Promise { +async function seedModelApiConfiguration(): Promise { + const bundledAuthPath = resolveBundledModelAuthPath(); + if (!bundledAuthPath) { + logger.warn('[yinian-init] Model API auth bundle was not found'); + const modelRef = await ensureBaseOpenClawConfig(); + return { + status: 'skipped', + reason: '安装包缺少模型 API 凭据资源', + modelRef, + }; + } + + const bundled = await readJsonFile(bundledAuthPath); + if (bundled.bundled !== true) { + const reason = typeof bundled.reason === 'string' && bundled.reason.trim() + ? bundled.reason.trim() + : '构建时未启用模型 API 凭据打包'; + logger.warn('[yinian-init] Model API auth bundle is disabled', { + bundledAuthPath, + reason, + }); + const modelRef = await ensureBaseOpenClawConfig(); + return { + status: 'skipped', + path: bundledAuthPath, + reason, + modelRef, + }; + } + + let runtimeConfig: ModelRuntimeConfig; + try { + runtimeConfig = resolveModelRuntimeConfig(bundled); + } catch (error) { + const reason = error instanceof Error ? error.message : String(error); + logger.warn('[yinian-init] Model API runtime config bundle is incomplete; skipping bundled model seed', { + bundledAuthPath, + reason, + }); + const modelRef = await ensureBaseOpenClawConfig(); + return { + status: 'skipped', + path: bundledAuthPath, + reason, + modelRef, + }; + } + + const hasBundledAuth = hasUsableBundledModelAuthProfile(bundled, runtimeConfig); + const hasExistingAuth = await hasYinianModelAuthProfile(runtimeConfig.providerKey); + if (!hasBundledAuth && !hasExistingAuth) { + logger.warn('[yinian-init] Model API auth bundle is incomplete; skipping bundled model seed', { bundledAuthPath }); + const modelRef = await ensureBaseOpenClawConfig(); + return { + status: 'skipped', + path: bundledAuthPath, + reason: '模型 API 凭据资源不完整', + modelRef, + }; + } + + await seedModelApiConfig(runtimeConfig); + if (hasBundledAuth) { + await seedModelApiAuthProfiles(bundledAuthPath, bundled, runtimeConfig); + } + + return { + status: 'seeded', + path: bundledAuthPath, + config: runtimeConfig, + }; +} + +async function seedModelApiConfig(runtimeConfig: ModelRuntimeConfig): Promise { + await writeBaseOpenClawConfig(runtimeConfig); +} + +async function ensureBaseOpenClawConfig(): Promise { + return writeBaseOpenClawConfig(); +} + +async function writeBaseOpenClawConfig(runtimeConfig?: ModelRuntimeConfig): Promise { const configDir = getOpenClawConfigDir(); const configPath = join(configDir, 'openclaw.json'); await mkdir(configDir, { recursive: true }); @@ -231,21 +328,20 @@ async function seedInternalModelConfig(): Promise { const config = await readJsonFile(configPath); const models = asObject(config.models); const providers = asObject(models.providers); - providers[INTERNAL_PROVIDER_KEY] = { - baseUrl: 'https://api.minimaxi.com/anthropic', - api: 'anthropic-messages', - authHeader: true, - models: [ - { - id: INTERNAL_MODEL_ID, - name: 'MiniMax M2.7', - reasoning: true, - input: ['text', 'image'], - contextWindow: 204800, - maxTokens: 131072, - }, - ], - }; + if (runtimeConfig) { + providers[runtimeConfig.providerKey] = { + baseUrl: runtimeConfig.baseUrl, + api: runtimeConfig.api, + ...(typeof runtimeConfig.authHeader === 'boolean' ? { authHeader: runtimeConfig.authHeader } : {}), + models: [ + { + ...YINIAN_MODEL_ENTRY, + id: runtimeConfig.modelId, + name: runtimeConfig.modelName, + }, + ], + }; + } models.mode = 'merge'; models.providers = providers; delete models.pricing; @@ -261,10 +357,12 @@ async function seedInternalModelConfig(): Promise { const agents = asObject(config.agents); const defaults = asObject(agents.defaults); const enabledSkillIds = resolveYinianEnabledSkillIds(config); - defaults.model = { - primary: INTERNAL_MODEL_REF, - fallbacks: ['minimax/MiniMax-M2.5'], - }; + if (runtimeConfig) { + defaults.model = { + primary: runtimeConfig.modelRef, + fallbacks: [...runtimeConfig.fallbackModelRefs], + }; + } defaults.workspace = join(homedir(), '.openclaw', 'workspace'); defaults.skills = enabledSkillIds; defaults.heartbeat = { @@ -304,20 +402,23 @@ async function seedInternalModelConfig(): Promise { config.agents = agents; await writeFile(configPath, `${JSON.stringify(config, null, 2)}\n`, 'utf8'); + return getNonEmptyString(asObject(defaults.model).primary); } -async function seedInternalModelAuthProfiles(): Promise { - const bundledAuthPath = resolveBundledModelAuthPath(); - if (!bundledAuthPath) return; - - const bundled = await readJsonFile(bundledAuthPath); - if (bundled.bundled !== true) return; - +async function seedModelApiAuthProfiles( + bundledAuthPath: string, + bundled: JsonObject, + runtimeConfig: ModelRuntimeConfig, +): Promise { const bundledStore = asObject(bundled.store); const bundledProfiles = asObject(bundledStore.profiles); - const bundledDefault = asObject(bundledProfiles[INTERNAL_AUTH_PROFILE_ID]); - if (!isUsableMinimaxAuthProfile(bundledDefault)) { - throw new Error('内测模型凭据资源不完整'); + const bundledDefault = asObject(bundledProfiles[runtimeConfig.authProfileId]); + const fallbackBundledDefault = Object.values(bundledProfiles) + .map(asObject) + .find((profile) => isUsableModelApiKeyProfile(profile)); + if (!isUsableModelApiKeyProfile(bundledDefault) && !fallbackBundledDefault) { + logger.warn('[yinian-init] Model API auth bundle is incomplete', { bundledAuthPath }); + throw new Error('模型 API 凭据资源不完整'); } const authProfilesPath = join(getOpenClawConfigDir(), 'agents', 'main', 'agent', 'auth-profiles.json'); @@ -329,11 +430,16 @@ async function seedInternalModelAuthProfiles(): Promise { for (const [profileId, profile] of Object.entries(bundledProfiles)) { const bundledProfile = asObject(profile); - if (!isUsableMinimaxAuthProfile(bundledProfile)) continue; - if (!isUsableMinimaxAuthProfile(asObject(profiles[profileId]))) { - profiles[profileId] = { + if (!isUsableModelApiKeyProfile(bundledProfile)) continue; + const targetProfileId = profileId === runtimeConfig.authProfileId + ? runtimeConfig.authProfileId + : profileId.startsWith(`${runtimeConfig.providerKey}:`) + ? profileId + : runtimeConfig.authProfileId; + if (!isUsableModelApiKeyProfile(asObject(profiles[targetProfileId]), runtimeConfig.providerKey)) { + profiles[targetProfileId] = { type: 'api_key', - provider: INTERNAL_PROVIDER_KEY, + provider: runtimeConfig.providerKey, key: bundledProfile.key, }; changed = true; @@ -341,24 +447,26 @@ async function seedInternalModelAuthProfiles(): Promise { } const order = asObject(current.order) as Record; - const minimaxOrder = Array.isArray(order[INTERNAL_PROVIDER_KEY]) - ? (order[INTERNAL_PROVIDER_KEY] as unknown[]).filter((value): value is string => typeof value === 'string') + const currentOrder = Array.isArray(order[runtimeConfig.providerKey]) + ? (order[runtimeConfig.providerKey] as unknown[]).filter((value): value is string => typeof value === 'string') : []; - if (!minimaxOrder.includes(INTERNAL_AUTH_PROFILE_ID)) { - order[INTERNAL_PROVIDER_KEY] = [ - INTERNAL_AUTH_PROFILE_ID, - ...minimaxOrder.filter((profileId) => profileId !== INTERNAL_AUTH_PROFILE_ID), + if (!currentOrder.includes(runtimeConfig.authProfileId)) { + order[runtimeConfig.providerKey] = [ + runtimeConfig.authProfileId, + ...currentOrder.filter((profileId) => profileId !== runtimeConfig.authProfileId), ]; changed = true; } const lastGood = asObject(current.lastGood) as Record; - if (lastGood[INTERNAL_PROVIDER_KEY] !== INTERNAL_AUTH_PROFILE_ID) { - lastGood[INTERNAL_PROVIDER_KEY] = INTERNAL_AUTH_PROFILE_ID; + if (lastGood[runtimeConfig.providerKey] !== runtimeConfig.authProfileId) { + lastGood[runtimeConfig.providerKey] = runtimeConfig.authProfileId; changed = true; } - if (!changed) return; + if (!changed) { + return; + } current.version = typeof current.version === 'number' ? current.version : 1; current.profiles = profiles; current.order = order; @@ -377,16 +485,89 @@ function resolveBundledModelAuthPath(): string | undefined { return candidates.find((candidate) => existsSync(candidate)); } -async function hasYinianModelAuthProfile(): Promise { +function hasUsableBundledModelAuthProfile(bundle: JsonObject, runtimeConfig: ModelRuntimeConfig): boolean { + const bundledStore = asObject(bundle.store); + const bundledProfiles = asObject(bundledStore.profiles); + const bundledDefault = asObject(bundledProfiles[runtimeConfig.authProfileId]); + if (isUsableModelApiKeyProfile(bundledDefault)) { + return true; + } + + return Object.values(bundledProfiles) + .map(asObject) + .some((profile) => isUsableModelApiKeyProfile(profile)); +} + +function resolveModelRuntimeConfig(bundle: JsonObject): ModelRuntimeConfig { + const model = asObject(bundle.model); + const providerKey = getNonEmptyString(model.providerKey); + const modelId = getNonEmptyString(model.modelId); + const baseUrl = getNonEmptyString(model.baseUrl); + const api = getNonEmptyString(model.api); + const missingFields = [ + !providerKey ? 'model.providerKey' : '', + !modelId ? 'model.modelId' : '', + !baseUrl ? 'model.baseUrl' : '', + !api ? 'model.api' : '', + ].filter(Boolean); + if (missingFields.length > 0) { + throw new Error(`模型 API 配置资源不完整:缺少 ${missingFields.join(', ')}`); + } + const modelName = getNonEmptyString(model.modelName) || getNonEmptyString(model.name) || modelId; + const authProfileId = getNonEmptyString(model.authProfileId) || `${providerKey}:default`; + const fallbackModelRefs = readModelRefList(model.fallbackModelRefs) + .concat(readModelRefList(model.fallbacks)) + .filter((value, index, list) => list.indexOf(value) === index); + + return { + providerKey, + modelId, + modelName, + modelRef: `${providerKey}/${modelId}`, + baseUrl, + api, + authHeader: typeof model.authHeader === 'boolean' ? model.authHeader : undefined, + fallbackModelRefs, + authProfileId, + }; +} + +function getNonEmptyString(value: unknown): string | undefined { + return typeof value === 'string' && value.trim() ? value.trim() : undefined; +} + +function readModelRefList(value: unknown): string[] { + if (!Array.isArray(value)) return []; + return value + .map((item) => typeof item === 'string' ? item.trim() : '') + .filter(Boolean); +} + +async function getConfiguredPrimaryModelRef(): Promise { + const configPath = join(getOpenClawConfigDir(), 'openclaw.json'); + const config = await readJsonFile(configPath); + const agents = asObject(config.agents); + const defaults = asObject(agents.defaults); + const model = asObject(defaults.model); + return getNonEmptyString(model.primary); +} + +function splitProviderKey(modelRef: string): string | undefined { + const separatorIndex = modelRef.indexOf('/'); + if (separatorIndex <= 0) return undefined; + return modelRef.slice(0, separatorIndex); +} + +async function hasYinianModelAuthProfile(providerKey = YINIAN_MODEL_PROVIDER_KEY): Promise { const authProfilesPath = join(getOpenClawConfigDir(), 'agents', 'main', 'agent', 'auth-profiles.json'); const store = await readJsonFile(authProfilesPath); const profiles = asObject(store.profiles); - return Object.values(profiles).some((profile) => isUsableMinimaxAuthProfile(asObject(profile))); + return Object.values(profiles).some((profile) => isUsableModelApiKeyProfile(asObject(profile), providerKey)); } -function isUsableMinimaxAuthProfile(profile: JsonObject): boolean { +function isUsableModelApiKeyProfile(profile: JsonObject, providerKey?: string): boolean { return profile.type === 'api_key' - && profile.provider === INTERNAL_PROVIDER_KEY + && (!providerKey || profile.provider === providerKey) && typeof profile.key === 'string' && profile.key.trim().length >= 8; } diff --git a/findings.md b/findings.md index d8965bb..7fe0449 100644 --- a/findings.md +++ b/findings.md @@ -1,5 +1,22 @@ # Findings +## Agent 系统级文档管理 2026-06-03 + +- OpenClaw 的系统级 workspace 文档包括 `AGENTS.md`、`SOUL.md`、`TOOLS.md`;官方文档定义为操作指令、人格/边界/语气、本地工具约定。 +- 这些文件按 Agent workspace 生效,路径来自 `openclaw.json` 的 `agents.defaults.workspace` 或 `agents.list[].workspace`,默认是 `~/.openclaw/workspace`。 +- 当前项目已有 `listAgentsSnapshot()` 可给设置页列出 Agent、workspace 和默认 Agent,无需新增配置解析逻辑。 +- 默认模板可从当前 OpenClaw runtime 的 `docs/reference/templates/{AGENTS,SOUL,TOOLS}.md` 读取;这能兼容开发态 `node_modules/openclaw`、打包态 bundled runtime 和 managed runtime。 +- Host API 已是设置页访问本地能力的统一入口,适合新增 `/api/agent-system-documents` 路由。 + +## Customer Install Initialization Failure Findings 2026-05-14 + +- The customer screenshot matches a non-pilot package: local `build/yinian-internal/model-auth-profiles.json` currently says `bundled=false` because `pnpm run package` was used without `YINIAN_BUNDLE_MODEL_AUTH=1`. +- First-run setup currently requires a usable `minimax` auth profile before it proceeds to the document runtime step, so a non-pilot package fails at `写入内测模型配置`. +- The renderer then maps every non-completed step to `failed` when `initialized=false`; this makes the later `准备文档处理环境` step look failed even when it was only still pending and never executed. +- The customer-facing error currently says only `初始化未完成,请查看失败项后重试。`, which hides the actionable package/credential cause. +- Fix applied: pending setup steps remain pending on early failure, failed-step details are shown in the error panel, and non-pilot packages now report that the installer does not contain internal model credentials. +- The rebuilt Apple Silicon pilot DMG now contains `bundled=true` internal model auth material and passed resource, codesign, and DMG verification. + ## macOS DMG 打包 - 使用 `pnpm run package:mac` 才会走完整正式打包链路,包括 `bundle-preinstalled-skills.mjs`、OpenClaw bundle、插件 bundle、内置应用 bundle 和 Electron Builder。 @@ -681,6 +698,16 @@ - The template catalog currently provides 32 templates. OpenClaw sees both `design` and `html-slides` as eligible and enabled after local app-managed sync. - Preinstalled local sync must preserve `.clawx-preinstalled.json` markers so future app startup updates these skills instead of treating them as user-managed. +## Channel Plugin Packaging Findings 2026-05-14 + +- 客户侧微信渠道失败的根因成立:`@tencent-weixin/openclaw-weixin@2.1.10` 发布包声明 `openclaw.extensions: ["./index.ts"]`,并只包含 `index.ts/src/**/*.ts`,没有 JS 运行产物。 +- 我们之前的 bundled plugin mirror 原样复制了 TS 源码包,所以客户目录里即使版本号正确,也会因为缺少可加载 JS 入口被 Gateway 忽略。 +- OpenClaw 插件扫描可以加载转译后的微信插件:`dist/index.js` + `openclaw.extensions=["./dist/index.js"]`。 +- 官方飞书插件已发布在 npm:`@larksuite/openclaw-lark@2026.5.13`,manifest id 为 `openclaw-lark`,channel id 为 `feishu`。 +- 官方飞书包实际可用入口是根目录 `index.js`;其 `package.json#main` 指向不存在的 `./dist/index.js`,打包/安装时需要修正 entry hint。 +- OpenClaw 当前 bundled extensions 中没有内置 `feishu` 目录;我们之前代码把 `feishu` 明文放在禁用集合,导致 UI/API 直接返回“当前内测版本未启用该渠道”。 +- 临时 HOME 的 OpenClaw 插件扫描已验证:`openclaw-weixin` 与 `openclaw-lark` 都能从 `.openclaw/extensions` 加载,状态为 `loaded`,无缺失依赖和插件诊断。 + ## Task And Skill Management Findings 2026-05-13 - Current `src/pages/Tasks/index.tsx` duplicates quick-task creation/editing under the Task Center, which makes "任务" ambiguous versus ability-pack-owned quick tasks. @@ -761,3 +788,25 @@ - 2026.5.7 的 diagnostic heartbeat 已新增 stalled embedded run 的 `allowActiveAbort: true` 分支;YINIAN 仍需要在普通 stuck recovery 分支上保留 `YINIAN_OPENCLAW_STUCK_ACTIVE_ABORT_MS` 阈值,避免过早主动中止活跃 run。 - 2026.5.7 的嵌入式 run 已有 `resolveEmbeddedAttemptToolConstructionPlan`,`isRawModelRun` 会阻止构建工具、bundle MCP 和 bundle LSP;这覆盖了旧版 fast chat disable-tools 补丁的主要目的。 - 2026.5.7 的子进程执行入口已迁移到 `exec-*`/Windows helper,并在关键 spawn 位置包含 `windowsHide`;旧的 workspace command runner 与 PTY 补丁片段不再匹配,但已核对新版产物中的隐藏窗口逻辑。 + +## Model Provider Runtime Findings 2026-06-03 + +- 用户将默认模型换成 DeepSeek 后,`clawx-providers.json` 的 `defaultProvider/defaultProviderAccountId` 已经是 `deepseek-a1e23f39-4296-4762-8bdf-184ca677cce6`,账号模型为 `deepseek-v4-pro`。 +- 但 `~/.openclaw/openclaw.json` 仍然是 `agents.defaults.model.primary = minimax-portal/MiniMax-M3`,`models.providers` 还包含旧 `yinian-model/custom-model` 占位 provider。 +- 这说明当前设计仍有配置源漂移:设置 store 是 DeepSeek,OpenClaw runtime 输出仍是 MiniMax/旧占位。必须让 provider account store 成为唯一配置源,并在保存/启动/诊断修复时同步到 runtime。 +- 直接 Gateway reload 不足以应用模型切换;reload/reconnect 会用 Gateway 进程内的旧 config 覆盖刚写入的 runtime 文件。模型 provider 保存、更新和默认切换必须触发 Gateway restart。 +- `model-diagnostics` 不能再承担“补一个默认 MiniMax 模型 provider”的职责;否则启动修复会和设置中的自定义模型 API 互相打架。它现在只做结构清理、心跳关闭、技能默认值和旧占位 provider/auth 清除。 +- `defaultProviderAccountId` 是当前 provider account store 的真实默认指针;legacy `defaultProvider` 只能作为兼容回退。 +- 本机最终 runtime 验证:默认模型为 `deepseek/deepseek-v4-pro`,`models.providers.deepseek` 指向 `https://api.deepseek.com/v1`,`yinian-model` provider/auth 残留已删除。`minimax-portal` 条目仍可存在,但只是已配置账号,不是默认模型。 +- 设置页仍显示 `yinian-model` / MiniMax 缺失的根因是 diagnostics 列表生成函数无条件合并 `YINIAN_INTERNAL_PROVIDER_KEYS`,即使当前默认 provider 是 DeepSeek,也会把历史内部 provider 当作检查对象输出。 +- 模型配置诊断应回答“当前默认模型引用的 provider 是否完整”,而不是扫描或固定展示历史内置 provider。provider 与 auth profile 的设置页诊断列表现在都按 `primary + fallbacks` 的 provider refs 过滤。 + +## App Center Cleanup Audit Findings 2026-06-04 + +- Production-path residual scan across `src`, `electron`, `tests`, `package.json`, `electron-builder.yml`, `scripts`, `README.md`, `vite.config.ts`, and `resources/readme` found no remaining NianxxPlay/Product Center app integrations. +- The only remaining `product-center` / `nianxx-play` matches are negative assertions in `tests/unit/app-center.test.tsx` and `tests/e2e/yinian-delivery-smoke.spec.ts`, which intentionally guard against the two deleted app items returning. +- `rg --files` found no tracked files matching `NianxxPlay`, `ProductCenter`, `product-center`, `nianxx`, the removed readme screenshots, deleted `electron/api/routes/apps.ts`, or deleted `scripts/prepare-nianxx-play-bundle.mjs`. +- `build/apps/nianxx-play` is gone; only the empty `build/apps` directory remains. +- The dirty worktree contains many pre-existing model/provider/system-document/channel-plugin changes. App Center cleanup should be reviewed as a slice, not as the whole diff. +- `selectedItemId/selectItem` in `src/stores/app-center.ts` had no production consumer after the built-in apps were removed; it was safe to delete with the stale test assertion. +- README screenshot section had an empty App Center heading after removing the two obsolete screenshot images; removing the empty heading keeps docs aligned with the new app-center state. diff --git a/package.json b/package.json index c28f17a..6010b0f 100644 --- a/package.json +++ b/package.json @@ -36,12 +36,10 @@ "predev": "node scripts/generate-ext-bridge.mjs && zx scripts/prepare-preinstalled-skills-dev.mjs", "dev": "vite", "ext:bridge": "node scripts/generate-ext-bridge.mjs", - "build": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && node scripts/prepare-internal-model-auth.mjs && node scripts/prepare-nianxx-play-bundle.mjs && electron-builder", + "build": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && node scripts/prepare-internal-model-auth.mjs && electron-builder", "build:vite": "vite build", "bundle:openclaw-plugins": "zx scripts/bundle-openclaw-plugins.mjs", "bundle:preinstalled-skills": "zx scripts/bundle-preinstalled-skills.mjs", - "prepare:nianxx-play": "node scripts/prepare-nianxx-play-bundle.mjs", - "prepare:nianxx-play:pilot": "NIANXX_PLAY_BUNDLE_ENV=1 node scripts/prepare-nianxx-play-bundle.mjs", "lint": "eslint . --fix", "typecheck": "tsc --noEmit", "test": "vitest run", @@ -64,8 +62,8 @@ "prep:mac-binaries:arm64": "pnpm run uv:download:mac:arm64 && pnpm run node:download:mac:arm64", "prep:win-binaries": "pnpm run uv:download:win && pnpm run node:download:win", "icons": "zx scripts/generate-icons.mjs", - "package": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && node scripts/prepare-internal-model-auth.mjs && node scripts/prepare-nianxx-play-bundle.mjs", - "package:pilot": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && YINIAN_BUNDLE_MODEL_AUTH=1 node scripts/prepare-internal-model-auth.mjs && NIANXX_PLAY_BUNDLE_ENV=1 node scripts/prepare-nianxx-play-bundle.mjs", + "package": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && node scripts/prepare-internal-model-auth.mjs", + "package:pilot": "node scripts/generate-ext-bridge.mjs && vite build && node scripts/assert-electron-runtime-deps.mjs && zx scripts/bundle-openclaw.mjs && zx scripts/bundle-openclaw-plugins.mjs && zx scripts/bundle-preinstalled-skills.mjs && YINIAN_BUNDLE_MODEL_AUTH=1 node scripts/prepare-internal-model-auth.mjs", "package:mac": "pnpm run prep:mac-binaries && pnpm run package && electron-builder --mac --publish never", "package:mac:pilot": "pnpm run prep:mac-binaries && pnpm run package:pilot && electron-builder --mac --publish never", "package:mac:pilot:arm64": "pnpm run prep:mac-binaries:arm64 && pnpm run package:pilot && electron-builder --mac --arm64 --publish never", @@ -110,6 +108,7 @@ "@grammyjs/transformer-throttler": "^1.2.1", "@homebridge/ciao": "^1.3.8", "@lancedb/lancedb": "^0.27.2", + "@larksuite/openclaw-lark": "2026.5.13", "@larksuiteoapi/node-sdk": "^1.62.1", "@line/bot-sdk": "^11.0.0", "@lydell/node-pty": "1.2.0-beta.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0acd05e..feea24f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,6 +90,9 @@ importers: '@lancedb/lancedb': specifier: ^0.27.2 version: 0.27.2(apache-arrow@18.1.0) + '@larksuite/openclaw-lark': + specifier: 2026.5.13 + version: 2026.5.13(openclaw@2026.5.7(@types/express@5.0.6)(encoding@0.1.13)) '@larksuiteoapi/node-sdk': specifier: ^1.62.1 version: 1.62.1 @@ -1926,6 +1929,16 @@ packages: peerDependencies: apache-arrow: '>=15.0.0 <=18.1.0' + '@larksuite/openclaw-lark@2026.5.13': + resolution: {integrity: sha512-n1o8MyD9FfguemGQPvQ3ZweX7RU0/TZpI/Mwc8UKIzuCr7Vt9oYh4yB2rKnbleS4X8qEUtY+5BnM1bX/df+gHg==} + engines: {node: '>=22'} + hasBin: true + peerDependencies: + openclaw: '>=2026.5.4' + peerDependenciesMeta: + openclaw: + optional: true + '@larksuiteoapi/node-sdk@1.62.1': resolution: {integrity: sha512-o9oAjv5Ffnp/6iXIJLHrO6N0US/r2ZZy3xmO6ylGegjuVSC05cx0fADA38Dc1h0FV8T9BDK+ariWk84TNMGbKg==} @@ -5597,6 +5610,11 @@ packages: engines: {node: '>=16.x'} hasBin: true + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -7822,6 +7840,9 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@8.2.0: + resolution: {integrity: sha512-uciYZ5yCmf+QJb18kJw10HjquzM7K0z992vWcI+84KeBpTfXT4hfgfGJ5DQbf/mCBPACofkrjvqgcjZfuujjFA==} + undici@7.24.6: resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} engines: {node: '>=20.18.1'} @@ -10547,6 +10568,20 @@ snapshots: '@lancedb/lancedb-win32-arm64-msvc': 0.27.2 '@lancedb/lancedb-win32-x64-msvc': 0.27.2 + '@larksuite/openclaw-lark@2026.5.13(openclaw@2026.5.7(@types/express@5.0.6)(encoding@0.1.13))': + dependencies: + '@larksuiteoapi/node-sdk': 1.62.1 + '@sinclair/typebox': 0.34.48 + image-size: 2.0.2 + undici-types: 8.2.0 + zod: 4.4.3 + optionalDependencies: + openclaw: 2026.5.7(@types/express@5.0.6)(encoding@0.1.13) + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + '@larksuiteoapi/node-sdk@1.62.1': dependencies: axios: 1.13.6 @@ -14888,6 +14923,8 @@ snapshots: dependencies: queue: 6.0.2 + image-size@2.0.2: {} + immediate@3.0.6: {} import-in-the-middle@3.0.1: @@ -17549,6 +17586,8 @@ snapshots: undici-types@7.19.2: {} + undici-types@8.2.0: {} + undici@7.24.6: {} undici@8.1.0: {} diff --git a/progress.md b/progress.md index 05969cb..38a42a4 100644 --- a/progress.md +++ b/progress.md @@ -1,5 +1,62 @@ # Progress Log +## 2026-06-03 Model Provider Runtime Sync + +- 用户反馈:设置默认模型改为 DeepSeek 后,实际运行仍使用 MiniMax。 +- 已确认本机 provider account store 默认值为 DeepSeek:`deepseek-a1e23f39-4296-4762-8bdf-184ca677cce6` / `deepseek-v4-pro`。 +- 已确认 OpenClaw runtime 仍为 `minimax-portal/MiniMax-M3`,并带有旧 `yinian-model/custom-model` 占位 provider。 +- 日志显示 DeepSeek 保存和默认切换后只触发 Gateway reload;Gateway reload/reconnect 随后写回旧内存 config,覆盖了刚写入的 DeepSeek runtime 配置。 +- 已将 provider 保存、更新、默认切换后的 Gateway 刷新策略改为 restart,避免 reload 用旧内存状态覆盖 `openclaw.json`。 +- 已将 legacy `getDefaultProvider()` 改为优先读取 `defaultProviderAccountId`,并让 `getAllProviders()` 合并 legacy provider 与 account store,account store 作为新配置源可参与 agent model 同步。 +- 已更新 `model-diagnostics`:启动/诊断修复不再把 legacy MiniMax 默认迁移成 `yinian-model/custom-model`,只清理 `https://api.example.com/v1` 这类旧占位 provider,并删除对应 `yinian-model:*` auth 残留。 +- 已手动修复本机 `~/.openclaw/openclaw.json`,当前默认模型为 `deepseek/deepseek-v4-pro`,provider 配置为 `https://api.deepseek.com/v1` + `openai-completions`;Gateway 重启日志确认启动前写入 DeepSeek 默认。 +- 当前运行态保留 `minimax-portal` provider 条目是因为本机仍有 MiniMax 账号配置,但它不再是默认模型;`yinian-model` provider/auth 残留已清除。 +- 用户随后反馈:设置页“模型服务”仍显示 `yinian-model` / MiniMax 固定缺失提示。 +- 已修复 diagnostics 数据源:`buildProviderDiagnostics()` 改为只展示当前默认模型和 fallbacks 实际引用的 provider;auth profiles 也按这些 provider 过滤,不再把 `yinian-model`、`minimax`、`minimax-portal` 当作固定诊断项。 +- 已更新设置页文案为空态:`模型服务` 改为 `当前模型服务`,`调用凭据` 改为 `当前调用凭据`。 +- 真实 diagnostics 函数输出确认:`providers=[deepseek]`,`authProviders=[deepseek]`,没有 `yinian-model` / MiniMax 固定缺失项。 +- Verification passed: + - `pnpm exec vitest run tests/unit/model-diagnostics.test.ts tests/unit/provider-runtime-sync.test.ts` + - `pnpm exec vitest run tests/unit/model-diagnostics.test.ts tests/unit/provider-runtime-sync.test.ts tests/unit/provider-service-stale-cleanup.test.ts tests/unit/yinian-initializer.test.ts tests/unit/settings-advanced-model-config.test.tsx` + - `pnpm exec vitest run tests/unit/model-diagnostics.test.ts tests/unit/settings-advanced-model-config.test.tsx` + - `pnpm exec vitest run tests/unit/model-diagnostics.test.ts tests/unit/settings-advanced-model-config.test.tsx tests/unit/provider-runtime-sync.test.ts tests/unit/provider-service-stale-cleanup.test.ts tests/unit/yinian-initializer.test.ts` + - `pnpm exec tsc --noEmit --pretty false` + - `pnpm run build:vite` + - `git diff --check` + +## 2026-05-14 渠道插件运行产物与飞书加固 + +- 客户日志确认:微信渠道失败不是配置本身,而是 `~/.openclaw/extensions/openclaw-weixin` 被安装成 TypeScript 源码包,缺少 Gateway 可直接加载的 JS 运行入口。 +- 已新增插件运行入口检测:同版本插件如果已安装但缺 `openclaw.extensions/main/module` 指向的 JS 文件,会自动从 bundled mirror 重装。 +- 已修改插件打包链路: + - `@tencent-weixin/openclaw-weixin` 复制后自动转译 `index.ts/src/**/*.ts` 到 `dist/`,并把 `openclaw.extensions` 改为 `./dist/index.js`。 + - `@larksuite/openclaw-lark@2026.5.13` 加入依赖和 bundled plugin 列表。 + - 修正官方飞书包 `main` 指向缺失 `dist/index.js` 的问题,使用实际存在的 `./index.js`。 + - 给缺少 `channelConfigs` 的微信 manifest 补兼容 channel schema,避免 OpenClaw 扫描 warning。 +- 已解除飞书硬禁用:API route、IPC handler、channel-config、openclaw-auth 都不再把 `feishu` 当作内测禁用渠道。 +- 保存飞书配置前会安装 `openclaw-lark` 插件;Gateway 启动前也会按已配置渠道自动安装/修复。 +- 已运行 `pnpm run bundle:openclaw-plugins`,生成: + - `build/openclaw-plugins/openclaw-weixin/dist/index.js` + - `build/openclaw-plugins/openclaw-lark/index.js` +- 使用临时 HOME 把两个插件复制到 `.openclaw/extensions` 后执行 OpenClaw 插件扫描,结果: + - `openclaw-weixin`: `status=loaded`, `channels=["openclaw-weixin"]`, `missing=[]` + - `openclaw-lark`: `status=loaded`, `channels=["feishu"]`, `missing=[]` + - diagnostics 为空。 +- Verification passed: + - `pnpm run bundle:openclaw-plugins` + - `pnpm vitest run tests/unit/plugin-install.test.ts tests/unit/channel-config.test.ts tests/unit/channel-routes.test.ts tests/unit/config-sync.test.ts` + - `pnpm run typecheck` + - `pnpm run package:mac:pilot:arm64` + - Packaged resource check for `release/mac-arm64/智念助手.app/Contents/Resources/openclaw-plugins/*` + - `codesign --verify --deep --strict --verbose=2 release/mac-arm64/智念助手.app` + - `hdiutil verify release/智念助手-0.1.0-mac-arm64.dmg` +- Packaging note: first packaging attempt failed because `@larksuite/openclaw-lark` was added under runtime `dependencies`; `scripts/assert-electron-runtime-deps.mjs` correctly flagged it as a double-pack risk. Moved it to `devDependencies`, while the plugin bundle script still copies it into app resources. +- New pilot artifacts: + - `release/智念助手-0.1.0-mac-arm64.dmg` (1.6G) + - `release/智念助手-0.1.0-mac-arm64.zip` (1.5G) + - `release/latest-mac.yml` +- macOS notarization remains skipped by existing builder config: `notarize` options were unable to be generated. + ## 2026-05-13 macOS DMG 打包 - 用户要求打 DMG 安装包,并确保新增/预置 skill 默认放进去。 @@ -1056,6 +1113,21 @@ - `pnpm vitest run tests/unit/cron-desktop-reminder.test.ts tests/unit/chat-message.test.tsx tests/unit/tasks-page.test.tsx tests/unit/business-guidance.test.ts` - `pnpm run typecheck` - `pnpm run build:vite` +# 2026-06-03 Agent 系统级文档管理 + +- 用户要求在设置中增加系统级文档管理模块,覆盖 soul、agent、tool 这类文档。 +- 已确认项目根目录为 `/Users/inmanx/Documents/念/yinian-desktop`,工作树存在多项既有未提交改动;本次会限定在系统文档管理相关文件。 +- 已在 `task_plan.md` 添加本次阶段,当前进入路径/API/设置页结构调研。 +- 已确认 OpenClaw 实际使用的文档文件是 per-agent workspace 下的 `SOUL.md`、`AGENTS.md`、`TOOLS.md`,默认模板位于 OpenClaw runtime 的 `docs/reference/templates/`。 +- 新增 `electron/utils/agent-system-documents.ts` 和 Host API 路由 `/api/agent-system-documents`,支持按 Agent 读取、保存、恢复模板。 +- 新增设置页 `系统文档` tab 和 `AgentSystemDocumentsSettings` 组件,支持选择 Agent、切换 soul/agent/tool、编辑、保存、恢复模板。 +- 新增测试并通过: + - `pnpm exec vitest run tests/unit/agent-system-documents.test.ts tests/unit/agent-system-documents-routes.test.ts tests/unit/agent-system-documents-settings.test.tsx` +- 完整相关验证通过: + - `pnpm exec vitest run tests/unit/agent-system-documents.test.ts tests/unit/agent-system-documents-routes.test.ts tests/unit/agent-system-documents-settings.test.tsx tests/unit/settings-advanced-model-config.test.tsx` + - `pnpm exec tsc --noEmit --pretty false` + - `pnpm run build:vite`(仅保留既有 dynamic-import/chunk-size warnings) + - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - Note: an initial E2E attempt timed out because it launched Electron while `build:vite` was rewriting `dist`; a clean rerun passed. @@ -1074,6 +1146,29 @@ - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - `pnpm exec playwright test --config=playwright.legacy.config.ts tests/e2e/yinian-visual-smoke.spec.ts` +# 2026-05-14 客户安装初始化凭据失败加固 + +- Reviewed the customer setup screenshot and traced it to `electron/utils/yinian-initializer.ts` plus `src/pages/Setup/index.tsx`. +- Confirmed local `build/yinian-internal/model-auth-profiles.json` is a benign non-pilot manifest (`bundled=false`), while the machine does have usable local `minimax:default` auth material for rebuilding a pilot package. +- Identified a renderer bug: when initialization returns `initialized=false`, pending steps are turned into failed steps, so `准备文档处理环境` can be shown as failed even when initialization stopped earlier at model auth. +- Added `src/pages/Setup/initialization.ts` so first-run result mapping keeps pending steps pending, calculates partial progress from completed steps, and shows failed-step details in the red error panel. +- Updated `electron/utils/yinian-initializer.ts` so missing/disabled internal model auth manifests produce a clear package/credential error instead of the generic “凭据未配置”. +- Updated `scripts/prepare-internal-model-auth.mjs` so ordinary non-pilot packaging logs that customer pilot installers must use `package:pilot` or `YINIAN_BUNDLE_MODEL_AUTH=1`. +- Added tests: + - `tests/unit/setup-initialization.test.ts` + - `tests/unit/yinian-initializer.test.ts` +- Verification passed: + - `pnpm vitest run tests/unit/setup-initialization.test.ts tests/unit/yinian-initializer.test.ts` + - `pnpm run typecheck` +- Rebuilt the Apple Silicon customer pilot package with bundled internal model auth: + - `pnpm run package:mac:pilot:arm64` + - `release/智念助手-0.1.0-mac-arm64.dmg` + - `release/智念助手-0.1.0-mac-arm64.zip` +- Packaged resource verification confirmed `release/mac-arm64/智念助手.app/Contents/Resources/resources/yinian-internal/model-auth-profiles.json` has `bundled=true` and two MiniMax profile ids. +- Release verification passed: + - `codesign --verify --deep --strict --verbose=2 release/mac-arm64/智念助手.app` + - `hdiutil verify release/智念助手-0.1.0-mac-arm64.dmg` + ## 2026-05-13 旅游资源订购 Login-State Follow-Up - Renamed the Product Center surface to “旅游资源订购” in zh copy and “Travel Resource Ordering” in en copy. @@ -1153,3 +1248,36 @@ - `pnpm run build:vite` - `pnpm test` (106 files / 675 tests; existing MaxListeners warnings remain) - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` +## 2026-06-04 应用中心清理后项目体检 + +- Started a focused post-cleanup audit after removing the two App Center built-in apps. +- Scope: App Center registry/routes, NianxxPlay/Product Center residues, Host API route list, packaging resources, README/i18n/tests, and current dirty worktree separation. +- Residual scan result: no production references to the removed apps remain; only negative test assertions mention `app-center-item-product-center` and `app-center-item-nianxx-play`. +- `build/apps/nianxx-play` has been removed; `build/apps` is currently empty. +- Current dev service is still running through Vite/Electron from `pnpm dev`. +- Removed stale `selectedItemId/selectItem` state from the App Center store and removed the empty README App Center screenshot heading. +- Verification passed: + - `pnpm exec vitest run tests/unit/app-center.test.tsx tests/unit/app-routes.test.ts` + - `pnpm exec tsc --noEmit --pretty false` + - `pnpm run build:vite` + - `git diff --check` + - `pnpm test` (111 files / 712 tests; existing MaxListeners warnings only) + +## 2026-06-04 Git Push Preparation + +- User requested pushing the current project to the git remote while avoiding secrets/tokens/API/env material and keeping customer quick-start usability. +- Remote target: `origin` -> `https://git.nianxx.cn/wangxuming/NianToB.git`; current branch: `main`. +- `.env.example` now contains placeholders only and explicitly tells users to keep real values in `.env.local`, CI secrets, local shell, or private deployment channels. +- Added `*.docx` to `.gitignore` so generated local report documents are not accidentally committed. +- Confirmed ignored: + - `.env.local` + - `build/yinian-internal/model-auth-profiles.json` + - `release/智念助手-0.1.0-mac-arm64.zip` + - generated `.docx` reports +- Secret scans: + - tracked file scan for common key/token patterns: no matches. + - untracked new source file scan for common key/token patterns: no matches. +- Final pre-stage verification passed: + - `git diff --check` + - `pnpm exec tsc --noEmit --pretty false` + - `pnpm test` (111 files / 712 tests; existing MaxListeners warnings only) diff --git a/resources/readme/05-app-center.png b/resources/readme/05-app-center.png deleted file mode 100644 index 35206c74a80b5b616d2f76ab370aaf8f737a3f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219734 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

Qe+Z#3uN*^IotOKtEQ75BiM=&LppPB5 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 #sK+Es_K)c3b(G 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

7d)5m&QD`3Jrv6 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 T!&jVlBNq{n;Lqp%^!0xL_5_kh diff --git a/scripts/after-pack.cjs b/scripts/after-pack.cjs index 505c1ae..9b7a1ec 100644 --- a/scripts/after-pack.cjs +++ b/scripts/after-pack.cjs @@ -19,8 +19,9 @@ * @mariozechner/clipboard). */ -const { cpSync, existsSync, readdirSync, rmSync, statSync, mkdirSync, realpathSync } = require('fs'); +const { cpSync, existsSync, readdirSync, rmSync, statSync, mkdirSync, realpathSync, readFileSync, writeFileSync } = require('fs'); const { join, dirname, basename, relative } = require('path'); +const ts = require('typescript'); // On Windows, paths in pnpm's virtual store can exceed the default MAX_PATH // limit (260 chars). Node.js 18.17+ respects the system LongPathsEnabled @@ -280,30 +281,6 @@ function removeOptionalNativeClipboard(nodeModulesDir) { return removed; } -function copyNianxxPlayNodeModules(resourcesDir, platform, arch) { - const src = join(__dirname, '..', 'build', 'apps', 'nianxx-play', 'node_modules'); - const nianxxPlayRoot = join(resourcesDir, 'resources', 'nianxx-play'); - const dest = join(nianxxPlayRoot, 'node_modules'); - - if (!existsSync(nianxxPlayRoot)) return; - if (!existsSync(src)) { - console.warn('[after-pack] ⚠️ build/apps/nianxx-play/node_modules not found. Run prepare:nianxx-play first.'); - return; - } - - const depCount = readdirSync(src, { withFileTypes: true }) - .filter(d => d.isDirectory() && d.name !== '.bin') - .length; - - console.log(`[after-pack] Copying ${depCount} NianxxPlay dependencies to ${dest} ...`); - rmSync(dest, { recursive: true, force: true }); - cpSync(src, dest, { recursive: true, dereference: true }); - cleanupUnnecessaryFiles(dest); - cleanupKoffi(dest, platform, arch); - cleanupNativePlatformPackages(dest, platform, arch); - console.log('[after-pack] ✅ NianxxPlay node_modules copied.'); -} - // ── Broken module patcher ───────────────────────────────────────────────────── // Some bundled packages have transpiled CJS that sets `module.exports = exports.default` // without ever assigning `exports.default`, leaving module.exports === undefined. @@ -488,7 +465,8 @@ function patchPluginIds(pluginDir, expectedId) { if (!existsSync(pkgJsonPath)) return; const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf8')); - const entryFiles = [pkg.main, pkg.module].filter(Boolean); + const extensionEntries = Array.isArray(pkg.openclaw?.extensions) ? pkg.openclaw.extensions : []; + const entryFiles = [...new Set([pkg.main, pkg.module, ...extensionEntries].filter(Boolean))]; for (const entry of entryFiles) { const entryPath = join(pluginDir, entry); @@ -520,6 +498,194 @@ function patchPluginIds(pluginDir, expectedId) { // bundle-openclaw-plugins.mjs so the packaged app is self-contained even when // build/openclaw-plugins/ was not pre-generated. +function readJsonFile(filePath) { + return JSON.parse(readFileSync(filePath, 'utf8')); +} + +function writeJsonFile(filePath, value) { + writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf8'); +} + +function normalizeEntryPath(entry) { + if (typeof entry !== 'string') return null; + const trimmed = entry.trim(); + if (!trimmed || require('path').isAbsolute(trimmed)) return null; + return trimmed.replace(/^\.\//, ''); +} + +function toPackageEntry(entry) { + return entry.startsWith('.') ? entry : `./${entry}`; +} + +function isJavaScriptEntry(entry) { + return /\.(?:cjs|mjs|js)$/i.test(entry); +} + +function entryExists(pluginDir, entry) { + const normalized = normalizeEntryPath(entry); + return Boolean(normalized) && existsSync(join(pluginDir, normalized)); +} + +function collectRuntimeEntryHints(pkg) { + const hints = []; + const extensions = pkg.openclaw?.extensions; + if (Array.isArray(extensions)) hints.push(...extensions); + if (typeof pkg.main === 'string') hints.push(pkg.main); + if (typeof pkg.module === 'string') hints.push(pkg.module); + hints.push('./dist/index.js', './index.js'); + return [...new Set(hints.map(normalizeEntryPath).filter(Boolean))]; +} + +function findExistingRuntimeEntry(pluginDir, pkg) { + for (const hint of collectRuntimeEntryHints(pkg)) { + if (isJavaScriptEntry(hint) && existsSync(join(pluginDir, hint))) { + return hint; + } + } + return null; +} + +function patchRuntimeEntryHints(pluginDir) { + const pkgJsonPath = join(pluginDir, 'package.json'); + if (!existsSync(pkgJsonPath)) return null; + + const pkg = readJsonFile(pkgJsonPath); + let modified = false; + + const extensions = pkg.openclaw?.extensions; + if (Array.isArray(extensions)) { + const patchedExtensions = extensions.map((entry) => { + const normalized = normalizeEntryPath(entry); + if (!normalized?.endsWith('.ts')) return entry; + const jsEntry = `dist/${normalized.replace(/\.ts$/i, '.js')}`; + return existsSync(join(pluginDir, jsEntry)) ? toPackageEntry(jsEntry) : entry; + }); + if (JSON.stringify(patchedExtensions) !== JSON.stringify(extensions)) { + pkg.openclaw.extensions = patchedExtensions; + modified = true; + } + } + + const existingRuntimeEntry = findExistingRuntimeEntry(pluginDir, pkg); + if (existingRuntimeEntry) { + if (typeof pkg.main !== 'string' || !entryExists(pluginDir, pkg.main)) { + pkg.main = toPackageEntry(existingRuntimeEntry); + modified = true; + } + if (typeof pkg.module === 'string' && !entryExists(pluginDir, pkg.module)) { + pkg.module = toPackageEntry(existingRuntimeEntry); + modified = true; + } + } + + if (modified) { + writeJsonFile(pkgJsonPath, pkg); + } + + return existingRuntimeEntry; +} + +function patchManifestChannelConfigs(pluginDir) { + const manifestPath = join(pluginDir, 'openclaw.plugin.json'); + if (!existsSync(manifestPath)) return; + + const manifest = readJsonFile(manifestPath); + if (manifest.channelConfigs || !Array.isArray(manifest.channels)) return; + + const schema = { type: 'object' }; + manifest.channelConfigs = Object.fromEntries( + manifest.channels + .filter((channelId) => typeof channelId === 'string' && channelId.trim().length > 0) + .map((channelId) => [channelId, { schema }]), + ); + writeJsonFile(manifestPath, manifest); +} + +function collectTypeScriptFiles(pluginDir) { + const result = []; + const skipDirs = new Set(['node_modules', 'dist', '.git']); + + function walk(currentDir) { + for (const entry of readdirSync(currentDir, { withFileTypes: true })) { + if (skipDirs.has(entry.name)) continue; + const fullPath = join(currentDir, entry.name); + if (entry.isDirectory()) { + walk(fullPath); + continue; + } + if (!entry.isFile()) continue; + if (!entry.name.endsWith('.ts')) continue; + if (entry.name.endsWith('.d.ts') || entry.name.endsWith('.test.ts')) continue; + result.push(fullPath); + } + } + + walk(pluginDir); + return result; +} + +function compileTypeScriptPluginIfNeeded(pluginDir, pluginId) { + const pkgJsonPath = join(pluginDir, 'package.json'); + if (!existsSync(pkgJsonPath)) return; + + const pkg = readJsonFile(pkgJsonPath); + const extensionEntries = Array.isArray(pkg.openclaw?.extensions) ? pkg.openclaw.extensions : []; + const hasTypeScriptEntry = extensionEntries.some((entry) => normalizeEntryPath(entry)?.endsWith('.ts')); + if (!hasTypeScriptEntry) { + const runtimeEntry = patchRuntimeEntryHints(pluginDir); + if (runtimeEntry) { + console.log(`[after-pack] Runtime entry: ${runtimeEntry}`); + } + return; + } + + const tsFiles = collectTypeScriptFiles(pluginDir); + if (tsFiles.length === 0) { + throw new Error(`Plugin ${pluginId} declares TypeScript entries but no .ts source files were found.`); + } + + const distDir = join(pluginDir, 'dist'); + rmSync(distDir, { recursive: true, force: true }); + + for (const sourcePath of tsFiles) { + const source = readFileSync(sourcePath, 'utf8'); + const output = ts.transpileModule(source, { + compilerOptions: { + target: ts.ScriptTarget.ES2022, + module: ts.ModuleKind.ES2022, + esModuleInterop: true, + importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove, + sourceMap: false, + inlineSources: false, + }, + fileName: sourcePath, + reportDiagnostics: true, + }); + + const diagnostics = output.diagnostics ?? []; + const blocking = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error); + if (blocking.length > 0) { + const message = blocking + .map((diag) => ts.flattenDiagnosticMessageText(diag.messageText, '\n')) + .join('\n'); + throw new Error(`Failed to transpile ${relative(pluginDir, sourcePath)}:\n${message}`); + } + + const rel = relative(pluginDir, sourcePath).replace(/\.ts$/i, '.js'); + const outputPath = join(distDir, rel); + mkdirSync(dirname(outputPath), { recursive: true }); + writeFileSync(outputPath, output.outputText, 'utf8'); + } + + patchRuntimeEntryHints(pluginDir); + const runtimeEntry = findExistingRuntimeEntry(pluginDir, readJsonFile(pkgJsonPath)); + if (!runtimeEntry) { + throw new Error(`Plugin ${pluginId} did not produce a loadable JavaScript runtime entry.`); + } + + console.log(`[after-pack] Compiled ${tsFiles.length} TypeScript files -> dist/ (${runtimeEntry})`); +} + function getVirtualStoreNodeModules(realPkgPath) { let dir = realPkgPath; while (dir !== dirname(dir)) { @@ -670,10 +836,6 @@ exports.default = async function afterPack(context) { console.log(`[after-pack] ✅ Removed optional native clipboard packages (${clipboardRemoved}) to avoid macOS Gatekeeper prompts.`); } - // 1.0 Copy bundled large-app runtime deps that electron-builder skips because - // node_modules/ is ignored globally. - copyNianxxPlayNodeModules(resourcesDir, platform, arch); - // Patch broken modules whose CJS transpiled output sets module.exports = undefined, // causing TypeError in Node.js 22+ ESM interop. patchBrokenModules(dest); @@ -685,6 +847,7 @@ exports.default = async function afterPack(context) { // - node_modules/ is excluded by .gitignore so the deps copy must be manual const BUNDLED_PLUGINS = [ { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, + { npmName: '@larksuite/openclaw-lark', pluginId: 'openclaw-lark' }, ]; mkdirSync(pluginsDestRoot, { recursive: true }); @@ -700,6 +863,8 @@ exports.default = async function afterPack(context) { cleanupNativePlatformPackages(pluginNM, platform, arch); } // Fix hardcoded plugin ID mismatches in compiled JS + patchManifestChannelConfigs(pluginDestDir); + compileTypeScriptPluginIfNeeded(pluginDestDir, pluginId); patchPluginIds(pluginDestDir, pluginId); } } @@ -715,6 +880,7 @@ exports.default = async function afterPack(context) { rmSync(pluginDestDir, { recursive: true, force: true }); cpSync(sourceDir, pluginDestDir, { recursive: true, dereference: true }); cleanupUnnecessaryFiles(pluginDestDir); + patchManifestChannelConfigs(pluginDestDir); patchPluginIds(pluginDestDir, entry.name); } } diff --git a/scripts/bundle-openclaw-plugins.mjs b/scripts/bundle-openclaw-plugins.mjs index 5badbc5..1a05006 100644 --- a/scripts/bundle-openclaw-plugins.mjs +++ b/scripts/bundle-openclaw-plugins.mjs @@ -6,9 +6,10 @@ * Build a self-contained mirror of OpenClaw third-party plugins for packaging. * Current plugins: * - @tencent-weixin/openclaw-weixin -> build/openclaw-plugins/openclaw-weixin + * - @larksuite/openclaw-lark -> build/openclaw-plugins/openclaw-lark * * The output plugin directory contains: - * - plugin source files (index.ts, openclaw.plugin.json, package.json, ...) + * - plugin runtime files (dist/index.js or index.js, openclaw.plugin.json, package.json, ...) * - plugin runtime node_modules/ (flattened direct + transitive deps) */ @@ -16,6 +17,7 @@ import 'zx/globals'; import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; +import ts from 'typescript'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const ROOT = path.resolve(__dirname, '..'); @@ -36,8 +38,197 @@ function normWin(p) { const PLUGINS = [ { npmName: '@tencent-weixin/openclaw-weixin', pluginId: 'openclaw-weixin' }, + { npmName: '@larksuite/openclaw-lark', pluginId: 'openclaw-lark' }, ]; +function readJsonFile(filePath) { + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +function writeJsonFile(filePath, value) { + fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf8'); +} + +function normalizeEntryPath(entry) { + if (typeof entry !== 'string') return null; + const trimmed = entry.trim(); + if (!trimmed || path.isAbsolute(trimmed)) return null; + return trimmed.replace(/^\.\//, ''); +} + +function toPackageEntry(entry) { + return entry.startsWith('.') ? entry : `./${entry}`; +} + +function isJavaScriptEntry(entry) { + return /\.(?:cjs|mjs|js)$/i.test(entry); +} + +function entryExists(pluginDir, entry) { + const normalized = normalizeEntryPath(entry); + return Boolean(normalized) && fs.existsSync(path.join(pluginDir, normalized)); +} + +function collectRuntimeEntryHints(pkg) { + const hints = []; + const extensions = pkg.openclaw?.extensions; + if (Array.isArray(extensions)) hints.push(...extensions); + if (typeof pkg.main === 'string') hints.push(pkg.main); + if (typeof pkg.module === 'string') hints.push(pkg.module); + hints.push('./dist/index.js', './index.js'); + return [...new Set(hints.map(normalizeEntryPath).filter(Boolean))]; +} + +function findExistingRuntimeEntry(pluginDir, pkg) { + for (const hint of collectRuntimeEntryHints(pkg)) { + if (isJavaScriptEntry(hint) && fs.existsSync(path.join(pluginDir, hint))) { + return hint; + } + } + return null; +} + +function patchRuntimeEntryHints(pluginDir) { + const pkgJsonPath = path.join(pluginDir, 'package.json'); + if (!fs.existsSync(pkgJsonPath)) return null; + + const pkg = readJsonFile(pkgJsonPath); + let modified = false; + + const extensions = pkg.openclaw?.extensions; + if (Array.isArray(extensions)) { + const patchedExtensions = extensions.map((entry) => { + const normalized = normalizeEntryPath(entry); + if (!normalized?.endsWith('.ts')) return entry; + const jsEntry = `dist/${normalized.replace(/\.ts$/i, '.js')}`; + return fs.existsSync(path.join(pluginDir, jsEntry)) ? toPackageEntry(jsEntry) : entry; + }); + if (JSON.stringify(patchedExtensions) !== JSON.stringify(extensions)) { + pkg.openclaw.extensions = patchedExtensions; + modified = true; + } + } + + const existingRuntimeEntry = findExistingRuntimeEntry(pluginDir, pkg); + if (existingRuntimeEntry) { + if (typeof pkg.main !== 'string' || !entryExists(pluginDir, pkg.main)) { + pkg.main = toPackageEntry(existingRuntimeEntry); + modified = true; + } + if (typeof pkg.module === 'string' && !entryExists(pluginDir, pkg.module)) { + pkg.module = toPackageEntry(existingRuntimeEntry); + modified = true; + } + } + + if (modified) { + writeJsonFile(pkgJsonPath, pkg); + } + + return existingRuntimeEntry; +} + +function patchManifestChannelConfigs(pluginDir) { + const manifestPath = path.join(pluginDir, 'openclaw.plugin.json'); + if (!fs.existsSync(manifestPath)) return; + + const manifest = readJsonFile(manifestPath); + if (manifest.channelConfigs || !Array.isArray(manifest.channels)) return; + + const schema = { type: 'object' }; + manifest.channelConfigs = Object.fromEntries( + manifest.channels + .filter((channelId) => typeof channelId === 'string' && channelId.trim().length > 0) + .map((channelId) => [channelId, { schema }]), + ); + writeJsonFile(manifestPath, manifest); +} + +function collectTypeScriptFiles(pluginDir) { + const result = []; + const skipDirs = new Set(['node_modules', 'dist', '.git']); + + function walk(currentDir) { + for (const entry of fs.readdirSync(currentDir, { withFileTypes: true })) { + if (skipDirs.has(entry.name)) continue; + const fullPath = path.join(currentDir, entry.name); + if (entry.isDirectory()) { + walk(fullPath); + continue; + } + if (!entry.isFile()) continue; + if (!entry.name.endsWith('.ts')) continue; + if (entry.name.endsWith('.d.ts') || entry.name.endsWith('.test.ts')) continue; + result.push(fullPath); + } + } + + walk(pluginDir); + return result; +} + +function compileTypeScriptPluginIfNeeded(pluginDir, pluginId) { + const pkgJsonPath = path.join(pluginDir, 'package.json'); + if (!fs.existsSync(pkgJsonPath)) return; + + const pkg = readJsonFile(pkgJsonPath); + const extensionEntries = Array.isArray(pkg.openclaw?.extensions) ? pkg.openclaw.extensions : []; + const hasTypeScriptEntry = extensionEntries.some((entry) => normalizeEntryPath(entry)?.endsWith('.ts')); + if (!hasTypeScriptEntry) { + const runtimeEntry = patchRuntimeEntryHints(pluginDir); + if (runtimeEntry) { + echo` 🔗 Runtime entry: ${runtimeEntry}`; + } + return; + } + + const tsFiles = collectTypeScriptFiles(pluginDir); + if (tsFiles.length === 0) { + throw new Error(`Plugin ${pluginId} declares TypeScript entries but no .ts source files were found.`); + } + + const distDir = path.join(pluginDir, 'dist'); + fs.rmSync(distDir, { recursive: true, force: true }); + + for (const sourcePath of tsFiles) { + const source = fs.readFileSync(sourcePath, 'utf8'); + const output = ts.transpileModule(source, { + compilerOptions: { + target: ts.ScriptTarget.ES2022, + module: ts.ModuleKind.ES2022, + esModuleInterop: true, + importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove, + sourceMap: false, + inlineSources: false, + }, + fileName: sourcePath, + reportDiagnostics: true, + }); + + const diagnostics = output.diagnostics ?? []; + const blocking = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error); + if (blocking.length > 0) { + const message = blocking + .map((diag) => ts.flattenDiagnosticMessageText(diag.messageText, '\n')) + .join('\n'); + throw new Error(`Failed to transpile ${path.relative(pluginDir, sourcePath)}:\n${message}`); + } + + const rel = path.relative(pluginDir, sourcePath).replace(/\.ts$/i, '.js'); + const outputPath = path.join(distDir, rel); + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + fs.writeFileSync(outputPath, output.outputText, 'utf8'); + } + + patchRuntimeEntryHints(pluginDir); + const runtimeEntry = findExistingRuntimeEntry(pluginDir, readJsonFile(pkgJsonPath)); + if (!runtimeEntry) { + throw new Error(`Plugin ${pluginId} did not produce a loadable JavaScript runtime entry.`); + } + + echo` 🛠️ Compiled ${tsFiles.length} TypeScript files -> dist/ (${runtimeEntry})`; +} + function getVirtualStoreNodeModules(realPkgPath) { let dir = realPkgPath; while (dir !== path.dirname(dir)) { @@ -171,6 +362,8 @@ function bundleOnePlugin({ npmName, pluginId }) { // 4) Patch plugin ID mismatch: some npm packages hardcode a different ID in // their JS output than what openclaw.plugin.json declares. The Gateway // validates that these match, so we fix it post-copy. + patchManifestChannelConfigs(outputDir); + compileTypeScriptPluginIfNeeded(outputDir, pluginId); patchPluginId(outputDir, pluginId); echo` ✅ ${pluginId}: copied ${copiedCount} deps (skipped dupes: ${skippedDupes})`; @@ -196,7 +389,8 @@ function patchPluginId(pluginDir, expectedId) { if (!fs.existsSync(pkgJsonPath)) return; const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8')); - const entryFiles = [pkg.main, pkg.module].filter(Boolean); + const extensionEntries = Array.isArray(pkg.openclaw?.extensions) ? pkg.openclaw.extensions : []; + const entryFiles = [...new Set([pkg.main, pkg.module, ...extensionEntries].filter(Boolean))]; // Known ID mismatches to patch. Keys are the wrong ID found in compiled JS, // values are the correct ID (must match openclaw.plugin.json). diff --git a/scripts/bundle-openclaw.mjs b/scripts/bundle-openclaw.mjs index 9677380..41141b3 100644 --- a/scripts/bundle-openclaw.mjs +++ b/scripts/bundle-openclaw.mjs @@ -1315,7 +1315,7 @@ echo` 🧭 Wrote Yinian runtime patch marker ${YINIAN_RUNTIME_PATCH_MARKER.ver // 8. Verify the bundle const entryExists = fs.existsSync(path.join(OUTPUT, 'openclaw.mjs')); const distExists = fs.existsSync(path.join(OUTPUT, 'dist', 'entry.js')); -const requiredTemplateFiles = ['AGENTS.md', 'TOOLS.md', 'HEARTBEAT.md']; +const requiredTemplateFiles = ['SOUL.md', 'IDENTITY.md', 'USER.md', 'AGENTS.md', 'TOOLS.md', 'HEARTBEAT.md', 'BOOT.md']; const missingTemplateFiles = requiredTemplateFiles.filter((fileName) => ( !fs.existsSync(path.join(OUTPUT, 'docs', 'reference', 'templates', fileName)) )); diff --git a/scripts/prepare-internal-model-auth.mjs b/scripts/prepare-internal-model-auth.mjs index 0387c26..8348fdb 100644 --- a/scripts/prepare-internal-model-auth.mjs +++ b/scripts/prepare-internal-model-auth.mjs @@ -13,7 +13,18 @@ const SHOULD_BUNDLE = process.env.YINIAN_BUNDLE_MODEL_AUTH === '1'; const SOURCE_AUTH_PROFILES = process.env.YINIAN_MODEL_AUTH_SOURCE ? resolve(process.env.YINIAN_MODEL_AUTH_SOURCE) : join(homedir(), '.openclaw', 'agents', 'main', 'agent', 'auth-profiles.json'); -const PROFILE_IDS = ['minimax:default', 'minimax:cn']; +const MODEL_PROVIDER_KEY = (process.env.YINIAN_MODEL_PROVIDER_KEY || 'yinian-model').trim(); +const MODEL_ID = (process.env.YINIAN_MODEL_ID || '').trim(); +const MODEL_NAME = (process.env.YINIAN_MODEL_NAME || MODEL_ID).trim(); +const MODEL_BASE_URL = (process.env.YINIAN_MODEL_BASE_URL || '').trim(); +const MODEL_API = (process.env.YINIAN_MODEL_API || 'openai-completions').trim(); +const MODEL_AUTH_PROFILE_ID = (process.env.YINIAN_MODEL_AUTH_PROFILE_ID || `${MODEL_PROVIDER_KEY}:default`).trim(); +const SOURCE_PROFILE_ID = (process.env.YINIAN_MODEL_AUTH_SOURCE_PROFILE_ID || '').trim(); +const MODEL_FALLBACKS = (process.env.YINIAN_MODEL_FALLBACKS || '') + .split(',') + .map((value) => value.trim()) + .filter(Boolean); +const LEGACY_SOURCE_PROFILE_IDS = ['minimax:default', 'minimax:cn']; function log(message) { console.log(`[yinian-model-auth] ${message}`); @@ -44,7 +55,7 @@ if (!SHOULD_BUNDLE) { bundled: false, reason: 'YINIAN_BUNDLE_MODEL_AUTH is not enabled', }); - log('pilot model auth bundling disabled.'); + log('pilot model auth bundling disabled. Customer pilot installers must use package:pilot or set YINIAN_BUNDLE_MODEL_AUTH=1.'); process.exit(0); } @@ -52,26 +63,54 @@ if (!existsSync(SOURCE_AUTH_PROFILES)) { fail(`source auth profiles not found: ${SOURCE_AUTH_PROFILES}`); } +if (!MODEL_PROVIDER_KEY) { + fail('YINIAN_MODEL_PROVIDER_KEY is required for model auth bundling.'); +} + +if (!MODEL_ID) { + fail('YINIAN_MODEL_ID is required for model auth bundling.'); +} + +if (!MODEL_BASE_URL) { + fail('YINIAN_MODEL_BASE_URL is required for model auth bundling.'); +} + const source = readJson(SOURCE_AUTH_PROFILES); const sourceProfiles = source && typeof source === 'object' && source.profiles && typeof source.profiles === 'object' ? source.profiles : {}; const profiles = {}; +const sourceProfileIds = [ + SOURCE_PROFILE_ID, + MODEL_AUTH_PROFILE_ID, + `${MODEL_PROVIDER_KEY}:default`, + ...LEGACY_SOURCE_PROFILE_IDS, +].filter(Boolean); +const candidateProfileIds = Array.from(new Set([ + ...sourceProfileIds, + ...Object.keys(sourceProfiles), +])); +let bundledKey = ''; -for (const profileId of PROFILE_IDS) { +for (const profileId of candidateProfileIds) { const profile = sourceProfiles[profileId]; if (!profile || typeof profile !== 'object') continue; - if (profile.type !== 'api_key' || profile.provider !== 'minimax') continue; + if (profile.type !== 'api_key') continue; if (typeof profile.key !== 'string' || profile.key.trim().length < 8) continue; - profiles[profileId] = { + bundledKey = profile.key.trim(); + break; +} + +if (bundledKey) { + profiles[MODEL_AUTH_PROFILE_ID] = { type: 'api_key', - provider: 'minimax', - key: profile.key, + provider: MODEL_PROVIDER_KEY, + key: bundledKey, }; } -if (!profiles['minimax:default']) { - fail('minimax:default API key profile is required for pilot model auth bundling.'); +if (!profiles[MODEL_AUTH_PROFILE_ID]) { + fail(`API key profile is required for pilot model auth bundling. Set YINIAN_MODEL_AUTH_SOURCE_PROFILE_ID or create ${MODEL_AUTH_PROFILE_ID}.`); } writeManifest({ @@ -79,14 +118,23 @@ writeManifest({ purpose: 'internal-pilot-only', source: 'local-openclaw-auth-profiles', profileIds: Object.keys(profiles), + model: { + providerKey: MODEL_PROVIDER_KEY, + modelId: MODEL_ID, + modelName: MODEL_NAME || MODEL_ID, + baseUrl: MODEL_BASE_URL, + api: MODEL_API, + authProfileId: MODEL_AUTH_PROFILE_ID, + fallbackModelRefs: MODEL_FALLBACKS, + }, store: { version: 1, profiles, order: { - minimax: Object.keys(profiles), + [MODEL_PROVIDER_KEY]: Object.keys(profiles), }, lastGood: { - minimax: 'minimax:default', + [MODEL_PROVIDER_KEY]: MODEL_AUTH_PROFILE_ID, }, }, }); diff --git a/scripts/prepare-nianxx-play-bundle.mjs b/scripts/prepare-nianxx-play-bundle.mjs deleted file mode 100644 index de5ddcf..0000000 --- a/scripts/prepare-nianxx-play-bundle.mjs +++ /dev/null @@ -1,341 +0,0 @@ -#!/usr/bin/env node - -import { spawnSync } from 'node:child_process'; -import { - chmodSync, - cpSync, - existsSync, - mkdirSync, - readdirSync, - readFileSync, - rmSync, - statSync, - writeFileSync, -} from 'node:fs'; -import { basename, dirname, join, resolve, relative } from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const ROOT = resolve(__dirname, '..'); -const DEFAULT_SOURCE = resolve(ROOT, '..', '..', 'NianxxPlay'); -const SOURCE_DIR = resolve(process.env.NIANXX_PLAY_DIR || DEFAULT_SOURCE); -const OUTPUT_DIR = resolve(ROOT, 'build', 'apps', 'nianxx-play'); -const BUNDLE_RUNTIME_ENV = process.env.NIANXX_PLAY_BUNDLE_ENV === '1'; -const RUNTIME_ENV_FILE_NAME = '.env.runtime'; - -function log(message) { - console.log(`[nianxx-play-bundle] ${message}`); -} - -function fail(message) { - console.error(`[nianxx-play-bundle] ${message}`); - process.exit(1); -} - -function run(command, args, cwd) { - const result = spawnSync(command, args, { - cwd, - env: { - ...process.env, - NEXT_TELEMETRY_DISABLED: '1', - }, - stdio: 'inherit', - shell: process.platform === 'win32', - }); - if (result.status !== 0) { - fail(`${command} ${args.join(' ')} failed with exit code ${result.status ?? 'unknown'}`); - } -} - -function readPackageVersion(packageJsonPath) { - try { - const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf8')); - return typeof pkg.version === 'string' ? pkg.version : '0.0.0'; - } catch { - return '0.0.0'; - } -} - -function parseEnvFile(envPath) { - if (!existsSync(envPath)) return []; - const entries = []; - const raw = readFileSync(envPath, 'utf8'); - for (const line of raw.split(/\r?\n/)) { - const trimmed = line.trim(); - if (!trimmed || trimmed.startsWith('#')) continue; - const match = trimmed.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=(.*)$/); - if (!match) continue; - const key = match[1]; - let value = match[2].trim(); - if ( - (value.startsWith('"') && value.endsWith('"')) || - (value.startsWith("'") && value.endsWith("'")) - ) { - value = value.slice(1, -1); - } - entries.push({ key, value }); - } - return entries; -} - -function selectRuntimeEnvFile(sourceDir) { - const explicit = process.env.NIANXX_PLAY_ENV_FILE?.trim(); - if (explicit) { - const resolved = resolve(explicit); - return existsSync(resolved) ? resolved : undefined; - } - for (const fileName of ['.env.local', '.env.production.local', '.env.production', '.env']) { - const candidate = join(sourceDir, fileName); - if (existsSync(candidate)) return candidate; - } - return undefined; -} - -function encodeEnvValue(value) { - return JSON.stringify(value); -} - -function writeRuntimeEnvFile(sourceDir, outputDir) { - if (!BUNDLE_RUNTIME_ENV) return { bundled: false, values: 0 }; - const envFile = selectRuntimeEnvFile(sourceDir); - if (!envFile) { - fail('NIANXX_PLAY_BUNDLE_ENV=1 set, but no NianxxPlay env file was found.'); - } - const entries = parseEnvFile(envFile); - if (!entries.length) { - fail(`NIANXX_PLAY_BUNDLE_ENV=1 set, but env file has no usable entries: ${envFile}`); - } - const runtimeEnvPath = join(outputDir, RUNTIME_ENV_FILE_NAME); - const text = [ - '# Bundled only for internal testing. Do not use in production builds.', - ...entries.map((entry) => `${entry.key}=${encodeEnvValue(entry.value)}`), - '', - ].join('\n'); - writeFileSync(runtimeEnvPath, text, 'utf8'); - return { bundled: true, values: entries.length }; -} - -function collectSecretLikeEnvValues(sourceDir) { - const envFileNames = [ - '.env', - '.env.local', - '.env.production', - '.env.production.local', - ]; - const sensitiveKeyPattern = /(SECRET|TOKEN|PASSWORD|PRIVATE|AUTH|API_KEY|ACCESS_KEY|KEY_ID|KEY_SECRET|SERVICE_ROLE)/i; - const ignoredValues = new Set(['true', 'false', 'null', 'undefined', 'development', 'production']); - const values = []; - for (const fileName of envFileNames) { - for (const entry of parseEnvFile(join(sourceDir, fileName))) { - if (!sensitiveKeyPattern.test(entry.key)) continue; - if (!entry.value || entry.value.length < 8) continue; - if (ignoredValues.has(entry.value.toLowerCase())) continue; - values.push(entry); - } - } - return values; -} - -function shouldCopyPublic(src) { - const name = basename(src); - if (name === 'uploads') return false; - const publicRelative = relative(publicDir, src).split('\\').join('/'); - if (publicRelative === 'generated-results' || publicRelative.startsWith('generated-results/')) return false; - if (name.startsWith('.env')) return false; - return true; -} - -function shouldCopyRuntime(src) { - const name = basename(src); - if (name.startsWith('.env')) return false; - if (name === '.data' || name === '.git' || name === '.next-cache') return false; - const runtimeRelative = relative(standaloneDir, src).split('\\').join('/'); - if (runtimeRelative === 'public/uploads' || runtimeRelative.startsWith('public/uploads/')) return false; - if (runtimeRelative === 'public/generated-results' || runtimeRelative.startsWith('public/generated-results/')) return false; - if (runtimeRelative === 'uploads' || runtimeRelative.startsWith('uploads/')) return false; - if (runtimeRelative === 'generated-results' || runtimeRelative.startsWith('generated-results/')) return false; - return true; -} - -function copyDir(from, to, filter = () => true) { - if (!existsSync(from)) return false; - mkdirSync(dirname(to), { recursive: true }); - cpSync(from, to, { - recursive: true, - dereference: true, - filter, - }); - return true; -} - -function normalizeBundlePermissions(dir) { - if (!existsSync(dir)) return; - const stats = statSync(dir); - try { - if (stats.isDirectory()) { - chmodSync(dir, 0o755); - for (const entry of readdirSync(dir)) { - normalizeBundlePermissions(join(dir, entry)); - } - return; - } - if (stats.isFile()) { - const executable = (stats.mode & 0o111) !== 0; - chmodSync(dir, executable ? 0o755 : 0o644); - } - } catch (error) { - fail(`Unable to normalize bundle permissions for ${relative(ROOT, dir)}: ${error.message}`); - } -} - -function dirSizeBytes(dir) { - if (!existsSync(dir)) return 0; - const stats = statSync(dir); - if (stats.isFile()) return stats.size; - let size = 0; - for (const entry of readdirSync(dir)) { - size += dirSizeBytes(join(dir, entry)); - } - return size; -} - -function assertNoEnvFiles(dir) { - const allowedRuntimeEnvPath = BUNDLE_RUNTIME_ENV - ? join(OUTPUT_DIR, RUNTIME_ENV_FILE_NAME) - : undefined; - const stack = [dir]; - while (stack.length) { - const current = stack.pop(); - for (const entry of readdirSync(current)) { - const fullPath = join(current, entry); - if (allowedRuntimeEnvPath && fullPath === allowedRuntimeEnvPath) { - continue; - } - if (basename(entry).startsWith('.env')) { - fail(`Refusing to ship env file: ${relative(ROOT, fullPath)}`); - } - if (statSync(fullPath).isDirectory()) stack.push(fullPath); - } - } -} - -function assertNoForbiddenBundlePaths(outputDir) { - const forbidden = [ - join(outputDir, 'public', 'uploads'), - join(outputDir, 'public', 'generated-results'), - join(outputDir, '.next', 'cache'), - ]; - for (const target of forbidden) { - if (existsSync(target)) { - fail(`Refusing to ship development/user data path: ${relative(ROOT, target)}`); - } - } -} - -function shouldScanForSecrets(filePath) { - const stats = statSync(filePath); - if (!stats.isFile()) return false; - if (stats.size > 5 * 1024 * 1024) return false; - return /\.(?:js|json|html|css|txt|mjs|cjs|map)$/i.test(filePath); -} - -function assertNoSecretValues(dir, secretEntries) { - if (!secretEntries.length) return; - const stack = [dir]; - while (stack.length) { - const current = stack.pop(); - for (const entry of readdirSync(current)) { - const fullPath = join(current, entry); - const stats = statSync(fullPath); - if (stats.isDirectory()) { - stack.push(fullPath); - continue; - } - if (BUNDLE_RUNTIME_ENV && fullPath === join(OUTPUT_DIR, RUNTIME_ENV_FILE_NAME)) continue; - if (!shouldScanForSecrets(fullPath)) continue; - const content = readFileSync(fullPath, 'utf8'); - for (const secret of secretEntries) { - if (content.includes(secret.value)) { - fail(`Refusing to ship bundle: secret-like env value "${secret.key}" appears in ${relative(ROOT, fullPath)}`); - } - } - } - } -} - -if (process.env.SKIP_NIANXX_PLAY_BUNDLE === '1') { - log('SKIP_NIANXX_PLAY_BUNDLE=1 set, skipping.'); - process.exit(0); -} - -if (!existsSync(join(SOURCE_DIR, 'package.json'))) { - fail(`NianxxPlay source not found: ${SOURCE_DIR}`); -} - -const sourceVersion = readPackageVersion(join(SOURCE_DIR, 'package.json')); -const secretLikeEnvValues = collectSecretLikeEnvValues(SOURCE_DIR); -log(`source: ${SOURCE_DIR}`); -log(`version: ${sourceVersion}`); - -if (process.env.NIANXX_PLAY_SKIP_BUILD !== '1') { - log('building Next.js standalone runtime...'); - run(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['run', 'build'], SOURCE_DIR); -} else { - log('NIANXX_PLAY_SKIP_BUILD=1 set, reusing existing .next output.'); -} - -const standaloneDir = join(SOURCE_DIR, '.next', 'standalone'); -const staticDir = join(SOURCE_DIR, '.next', 'static'); -const publicDir = join(SOURCE_DIR, 'public'); -const contentDir = join(SOURCE_DIR, 'content'); - -if (!existsSync(join(standaloneDir, 'server.js'))) { - fail(`Missing Next.js standalone server: ${join(standaloneDir, 'server.js')}`); -} -if (!existsSync(staticDir)) { - fail(`Missing Next.js static output: ${staticDir}`); -} - -rmSync(OUTPUT_DIR, { recursive: true, force: true }); -mkdirSync(OUTPUT_DIR, { recursive: true }); - -log(`copying standalone runtime -> ${OUTPUT_DIR}`); -copyDir(standaloneDir, OUTPUT_DIR, shouldCopyRuntime); -copyDir(staticDir, join(OUTPUT_DIR, '.next', 'static'), shouldCopyRuntime); -copyDir(publicDir, join(OUTPUT_DIR, 'public'), shouldCopyPublic); -copyDir(contentDir, join(OUTPUT_DIR, 'content'), shouldCopyRuntime); -const runtimeEnv = writeRuntimeEnvFile(SOURCE_DIR, OUTPUT_DIR); - -normalizeBundlePermissions(OUTPUT_DIR); -assertNoEnvFiles(OUTPUT_DIR); -assertNoForbiddenBundlePaths(OUTPUT_DIR); -assertNoSecretValues(OUTPUT_DIR, secretLikeEnvValues); - -const manifest = { - appId: 'nianxx-play', - name: 'NianxxPlay', - version: sourceVersion, - bundledAt: new Date().toISOString(), - runtime: 'next-standalone', - entry: 'server.js', - excludes: ['.env*', '.data', 'public/uploads', 'public/generated-results', 'development caches'], - secretScan: { - checked: true, - sourceEnvValues: secretLikeEnvValues.length, - }, - runtimeEnv: runtimeEnv.bundled - ? { - bundled: true, - file: RUNTIME_ENV_FILE_NAME, - values: runtimeEnv.values, - purpose: 'internal-testing-only', - } - : { - bundled: false, - }, - sizeBytes: dirSizeBytes(OUTPUT_DIR), -}; - -writeFileSync(join(OUTPUT_DIR, 'bundle-manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`, 'utf8'); -log(`ready: ${OUTPUT_DIR}`); -log(`size: ${(manifest.sizeBytes / 1024 / 1024).toFixed(1)} MB`); diff --git a/shared/yinian-model.ts b/shared/yinian-model.ts new file mode 100644 index 0000000..0eacf8f --- /dev/null +++ b/shared/yinian-model.ts @@ -0,0 +1,31 @@ +export const YINIAN_MODEL_PROVIDER_KEY = 'yinian-model'; +export const YINIAN_MODEL_DEFAULT_ID = 'custom-model'; +export const YINIAN_MODEL_DEFAULT_NAME = 'Custom Model'; +export const YINIAN_MODEL_DEFAULT_BASE_URL = 'https://api.example.com/v1'; +export const YINIAN_MODEL_DEFAULT_API = 'openai-completions'; +export const YINIAN_MODEL_AUTH_PROFILE_ID = `${YINIAN_MODEL_PROVIDER_KEY}:default`; +export const YINIAN_MODEL_REF = `${YINIAN_MODEL_PROVIDER_KEY}/${YINIAN_MODEL_DEFAULT_ID}`; + +export const YINIAN_MODEL_ENTRY = { + id: YINIAN_MODEL_DEFAULT_ID, + name: YINIAN_MODEL_DEFAULT_NAME, + input: ['text'], +} as const; + +export const YINIAN_LEGACY_MODEL_PROVIDER_KEYS = [ + 'minimax', + 'minimax-portal', +] as const; + +export const YINIAN_LEGACY_MODEL_REFS = [ + 'minimax/MiniMax-M2.7', + 'minimax/MiniMax-M3', +] as const; + +export const YINIAN_LEGACY_MODEL_AUTH_PROFILE_IDS = [ + 'minimax:default', + 'minimax:cn', + 'minimax-cn:default', + 'minimax-portal-cn:default', + 'minimax-portal:default', +] as const; diff --git a/src/App.tsx b/src/App.tsx index b02d269..9c79f67 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,8 +20,6 @@ import { Settings } from './pages/Settings'; import { Setup } from './pages/Setup'; import { Knowledge } from './pages/Knowledge'; import { AppCenter } from './pages/AppCenter'; -import { NianxxPlay } from './pages/NianxxPlay'; -import { ProductCenter } from './pages/ProductCenter'; import { YinianLogin } from './pages/YinianLogin'; import { useSettingsStore } from './stores/settings'; import { useGatewayStore } from './stores/gateway'; @@ -433,8 +431,6 @@ function App() { } /> } /> } /> - } /> - } /> } /> } /> } /> diff --git a/src/components/settings/AgentSystemDocumentsSettings.tsx b/src/components/settings/AgentSystemDocumentsSettings.tsx new file mode 100644 index 0000000..0996995 --- /dev/null +++ b/src/components/settings/AgentSystemDocumentsSettings.tsx @@ -0,0 +1,391 @@ +import { useEffect, useMemo, useState } from 'react'; +import { + AlertTriangle, + CheckCircle2, + FileText, + RefreshCw, + RotateCcw, + Save, + UserRound, +} from 'lucide-react'; +import { useTranslation } from 'react-i18next'; +import { toast } from 'sonner'; +import { Badge } from '@/components/ui/badge'; +import { Button } from '@/components/ui/button'; +import { Label } from '@/components/ui/label'; +import { Select } from '@/components/ui/select'; +import { Textarea } from '@/components/ui/textarea'; +import { hostApiFetch } from '@/lib/host-api'; +import { toUserMessage } from '@/lib/api-client'; +import { cn } from '@/lib/utils'; + +const DOCUMENT_ORDER = ['soul', 'identity', 'user', 'agent', 'tool', 'heartbeat', 'boot'] as const; + +type AgentSystemDocumentKind = typeof DOCUMENT_ORDER[number]; +type AgentSystemDocumentSource = 'workspace' | 'template' | 'empty'; + +type AgentSystemDocumentAgent = { + id: string; + name: string; + isDefault: boolean; + workspace: string; +}; + +type AgentSystemDocument = { + kind: AgentSystemDocumentKind; + fileName: string; + path: string; + exists: boolean; + source: AgentSystemDocumentSource; + content: string; + size: number; + updatedAt: number | null; + templateAvailable: boolean; + templatePath: string; +}; + +type AgentSystemDocumentsSnapshot = { + success: true; + selectedAgentId: string; + defaultAgentId: string; + agents: AgentSystemDocumentAgent[]; + documents: AgentSystemDocument[]; + paths: { + workspace: string; + templateDir: string; + }; +}; + +const EMPTY_DRAFTS: Record = { + soul: '', + identity: '', + user: '', + agent: '', + tool: '', + heartbeat: '', + boot: '', +}; + +function formatSize(bytes: number): string { + if (bytes <= 0) return '0 B'; + if (bytes < 1024) return `${bytes} B`; + return `${(bytes / 1024).toFixed(1)} KB`; +} + +function formatUpdatedAt(value: number | null): string { + if (!value) return '-'; + try { + return new Intl.DateTimeFormat(undefined, { + dateStyle: 'short', + timeStyle: 'short', + }).format(new Date(value)); + } catch { + return new Date(value).toLocaleString(); + } +} + +function documentMapFromSnapshot(snapshot: AgentSystemDocumentsSnapshot | null): Map { + return new Map((snapshot?.documents ?? []).map((document) => [document.kind, document])); +} + +export function AgentSystemDocumentsSettings() { + const { t } = useTranslation('settings'); + const [snapshot, setSnapshot] = useState(null); + const [selectedAgentId, setSelectedAgentId] = useState(''); + const [selectedKind, setSelectedKind] = useState('soul'); + const [drafts, setDrafts] = useState>(EMPTY_DRAFTS); + const [loading, setLoading] = useState(false); + const [saving, setSaving] = useState(false); + const [resetting, setResetting] = useState(false); + const [error, setError] = useState(null); + + const documentMap = useMemo(() => documentMapFromSnapshot(snapshot), [snapshot]); + const selectedDocument = documentMap.get(selectedKind) ?? null; + const selectedAgent = snapshot?.agents.find((agent) => agent.id === selectedAgentId) ?? null; + const currentDraft = drafts[selectedKind] ?? selectedDocument?.content ?? ''; + const isDirty = selectedDocument ? currentDraft !== selectedDocument.content : false; + + const applySnapshot = (nextSnapshot: AgentSystemDocumentsSnapshot) => { + const nextDrafts = { ...EMPTY_DRAFTS }; + for (const document of nextSnapshot.documents) { + nextDrafts[document.kind] = document.content; + } + setSnapshot(nextSnapshot); + setSelectedAgentId(nextSnapshot.selectedAgentId); + setDrafts(nextDrafts); + if (!nextSnapshot.documents.some((document) => document.kind === selectedKind)) { + setSelectedKind('soul'); + } + }; + + const loadDocuments = async (agentId?: string) => { + setLoading(true); + setError(null); + try { + const query = agentId ? `?agentId=${encodeURIComponent(agentId)}` : ''; + const nextSnapshot = await hostApiFetch(`/api/agent-system-documents${query}`); + applySnapshot(nextSnapshot); + } catch (loadError) { + const message = toUserMessage(loadError); + setError(message); + toast.error(t('systemDocuments.toast.loadFailed', { message })); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + void loadDocuments(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleAgentChange = (agentId: string) => { + setSelectedAgentId(agentId); + void loadDocuments(agentId); + }; + + const handleSave = async () => { + if (!selectedDocument) return; + setSaving(true); + setError(null); + try { + const nextSnapshot = await hostApiFetch( + `/api/agent-system-documents/${selectedKind}`, + { + method: 'PUT', + body: JSON.stringify({ + agentId: selectedAgentId, + content: currentDraft, + }), + }, + ); + applySnapshot(nextSnapshot); + toast.success(t('systemDocuments.toast.saved', { fileName: selectedDocument.fileName })); + } catch (saveError) { + const message = toUserMessage(saveError); + setError(message); + toast.error(t('systemDocuments.toast.saveFailed', { message })); + } finally { + setSaving(false); + } + }; + + const handleReset = async () => { + if (!selectedDocument) return; + setResetting(true); + setError(null); + try { + const nextSnapshot = await hostApiFetch( + `/api/agent-system-documents/${selectedKind}/reset`, + { + method: 'POST', + body: JSON.stringify({ agentId: selectedAgentId }), + }, + ); + applySnapshot(nextSnapshot); + toast.success(t('systemDocuments.toast.reset', { fileName: selectedDocument.fileName })); + } catch (resetError) { + const message = toUserMessage(resetError); + setError(message); + toast.error(t('systemDocuments.toast.resetFailed', { message })); + } finally { + setResetting(false); + } + }; + + return ( +

+
+
+
+
+

+ {t('systemDocuments.title')} +

+

+ {t('systemDocuments.description')} +

+
+ +
+ +
+ + +
+
+
+ + {selectedAgent && ( +
+ + + {selectedAgent.id} + + {snapshot?.paths.workspace || selectedAgent.workspace} +
+ )} +
+ + {error && ( +
+ + {error} +
+ )} + +
+
+
+ {DOCUMENT_ORDER.map((kind) => { + const document = documentMap.get(kind); + const active = selectedKind === kind; + return ( + + ); + })} +
+
+ +
+ {selectedDocument ? ( +
+
+
+
+

+ {selectedDocument.fileName} +

+ + {t(`systemDocuments.source.${selectedDocument.source}`)} + + {isDirty && ( + + {t('systemDocuments.unsaved')} + + )} +
+

+ {t(`systemDocuments.documents.${selectedKind}.description`)} +

+
+ +
+ + +
+
+ +