Procházet zdrojové kódy

fix:FMODE_PARSE_SESSION_TOKEN缺失问题

cb před 1 měsícem
rodič
revize
ac1eded048

+ 6 - 3
src/app/enterprise-agent-prompt.ts

@@ -11,6 +11,7 @@ export interface EnterprisePromptConfig {
 export interface EnterprisePromptInput {
   backend: EnterprisePromptConfig;
   newApiToken: string;
+  sessionToken: string;
   companyId?: string;
   companyName?: string;
   expireAt?: string | null;
@@ -31,8 +32,10 @@ export function buildEnterpriseAgentPrompt(input: EnterprisePromptInput): string
     `完整规范(必须先读取):${ENTERPRISE_RULES_URL}`,
     `规则清单(空白环境自动补齐):${ENTERPRISE_RULES_MANIFEST_URL}`,
     '',
-    '本指令包含敏感授权。只允许写入本机配置并用于本次项目工作;禁止在回复、终端输出、日志、截图、提交记录或报告中回显完整 token、masterKey 或 session token。数据库操作必须通过 Parse API/SDK 配合 masterKey 完成,不得索取或使用数据库直连地址。',
+    '本指令包含敏感授权。FMODE_PARSE_SESSION_TOKEN 只在需要发布前端项目时,作为当前用户调用 FmodeStudio 托管发布接口(如 /api/obs/deploy、/api/obs/deploy/upload)的临时登录凭据使用;普通需求分析、编码、Parse/云函数开发和数据库操作不得使用或长期保存它。禁止在回复、终端输出、日志、截图、提交记录或报告中回显完整 token、masterKey 或 session token。数据库操作必须通过 Parse API/SDK 配合 masterKey 完成,不得索取或使用数据库直连地址。',
+    '发布前端时还必须按项目已有发布流程准备华为云 OBS/CDN 所需的发布配置;不要把 Fmode 登录 sessionToken 当作华为 OBS securityToken,二者用途不同。',
     `FMODE_NEWAPI_TOKEN=${value(input.newApiToken)}`,
+    `FMODE_PARSE_SESSION_TOKEN=${value(input.sessionToken)}`,
     `FMODE_PARSE_APP_ID=${value(backend.appId)}`,
     `FMODE_PARSE_MASTER_KEY=${value(backend.masterKey)}`,
     `FMODE_PARSE_SERVER_URL=${value(backend.serverURL)}`,
@@ -43,7 +46,7 @@ export function buildEnterpriseAgentPrompt(input: EnterprisePromptInput): string
     '',
     '执行顺序:',
     '1. 读取线上规范和当前项目 `.claude/` 规则;缺少规则时按 manifest 补齐,不覆盖用户已有规则。规则必须安装;按线上规范默认安装 5 个方法技能基线,fmode 音视频/VOC/提号技能仅按用户需求安装。',
-    '2. 将授权安全写入 `~/.fmode/config/user.json`、`~/.fmode/config/enterprise/current.json`;如当前项目已有 `.fmode/`,再写入项目配置并确保敏感文件被 `.gitignore` 忽略。优先调用本机 `POST /api/system/enterprise-runtime-config`;接口不可用时按线上规范直接原子落盘,不得因此停止。',
+    '2. 将 New API 和 Parse 企业配置安全写入 `~/.fmode/config/user.json`、`~/.fmode/config/enterprise/current.json`;FMODE_PARSE_SESSION_TOKEN 不写入长期配置,只在前端发布阶段临时传给已授权的 FmodeStudio 托管发布接口。如当前项目已有 `.fmode/`,再写入非敏感项目配置并确保敏感文件被 `.gitignore` 忽略。优先调用本机 `POST /api/system/enterprise-runtime-config`;接口不可用时按线上规范直接原子落盘,不得因此停止。',
     '3. 检查 Git 状态、Schema、前端、后端、`cloud/`、`api/` 和部署配置,把用户需求拆解并直接实现。',
     '4. 遵守 Fmode 标准:FmodeParse、Parse Schema、多租户、Parse Claude Code、动态云函数、自定义 API、幂等、错误恢复和安全边界。',
     '5. 完成静态检查、单元/模块测试、本地冒烟、生产构建;用户要求上线时通过 Parse/动态云函数和项目已有华为云 OBS/CDN 发布 API 或脚本完成发布并做线上回归,不要求用户进行服务器级运维。',
@@ -62,7 +65,7 @@ function maskSecret(secret: string): string {
 
 export function maskEnterpriseAgentPrompt(prompt: string): string {
   return String(prompt || '').replace(
-    /^(FMODE_NEWAPI_TOKEN|FMODE_PARSE_MASTER_KEY)=(.*)$/gm,
+    /^(FMODE_NEWAPI_TOKEN|FMODE_PARSE_MASTER_KEY|FMODE_PARSE_SESSION_TOKEN)=(.*)$/gm,
     (_match, key, secret) => `${key}=${maskSecret(secret)}`
   );
 }

+ 2 - 0
src/app/enterprise-trial.component.ts

@@ -482,9 +482,11 @@ export class EnterpriseTrialComponent implements OnInit, OnDestroy {
           || ''
       ).trim();
       if (!newApiToken) throw new Error('未找到 Fmode New API token,请先完成账户同步');
+      if (!this.sessionToken) throw new Error('未找到当前登录 sessionToken,请重新登录后重试');
       const prompt = buildEnterpriseAgentPrompt({
         backend,
         newApiToken,
+        sessionToken: this.sessionToken,
         companyId: this.result()?.company?.objectId,
         companyName: this.result()?.company?.name,
         expireAt: this.expireAt()