Skip to content

fix(gig-square): 发布/修改时校验服务声明技能真实可用性,缺失技能拒绝并列出名称 (#10) - #12

Open
WuFenG-Hub wants to merge 1 commit into
metaid-developers:mainfrom
WuFenG-Hub:fix/gig-square-provider-skill-availability
Open

fix(gig-square): 发布/修改时校验服务声明技能真实可用性,缺失技能拒绝并列出名称 (#10)#12
WuFenG-Hub wants to merge 1 commit into
metaid-developers:mainfrom
WuFenG-Hub:fix/gig-square-provider-skill-availability

Conversation

@WuFenG-Hub

@WuFenG-Hub WuFenG-Hub commented Aug 12, 2026

Copy link
Copy Markdown

修复点

服务发布 / 修改路径新增「宿主运行时技能可用性」交叉校验(Issue #10):

  • 发布路径src/main/main.ts publish RPC)与修改路径(modify RPC)在 validateGigSquareModifyDraft 校验时传入 getSkillManager().listSkills(),将自声明的 providerSkills 与宿主真实已安装技能交叉核对。
  • 缺失技能拒绝:声明的技能在本宿主未安装时,发布/修改被拒绝,返回 errorCode: 'provider_skill_not_available',错误信息列出缺失技能名(如 providerSkill is not available on this host: seedance)。
  • 已安装技能不误拒:按订单执行时的真实解析语义匹配(resolveSkillById_/- id 变体归一 + resolveSkillByName 的大小写不敏感 name 匹配),已安装技能正常放行,既有发布流程无回归。
  • 兼容旧调用:未传 installedSkills 的调用方保持原有校验行为(新增可选参数,默认不开启校验)。

变更文件

  • src/main/services/gigSquareServiceMutationService.ts:新增纯函数 resolveMissingProviderSkillsvalidateGigSquareModifyDraft 增加可选 installedSkills 参数与缺失技能拒绝分支。
  • src/main/main.ts:发布与修改两条 IPC 路径传入宿主已安装技能列表。
  • tests/gigSquareServiceMutationService.test.mjs:新增 8 条单测覆盖缺失技能拒绝(含列名)、已安装放行、大小写/_-/-` 归一匹配、无技能宿主拒绝、旧调用兼容。

测试证据

  • node --test tests/gigSquareServiceMutationService.test.mjs:32 pass / 0 fail(含 8 条新增)。
  • 相关 gig-square 回归批次(PublishPresentation / ModifyModalLayout / ProviderPresentation / SkillOptions / MyServicesPresentation):24 pass / 0 fail。
  • 基线:044741e8(upstream main,与 Issue 验收锚一致),无上游漂移。

边界声明(未执行环节,不自报闭合)

  • ⚠️ 未执行 live 冒烟(未启动 Electron 宿主做真实发布/修改端到端验证)——仅单测 + 编译验证。
  • ⚠️ 未做链上验证(本修复不涉及链上写入)。
  • ⚠️ 未合并 PR(等待 review / CI)。

Closes #10

…s not installed on host

Publish and modify drafts now cross-check each declared providerSkill
against the host's actual installed skills (SkillManager.listSkills())
via validateGigSquareModifyDraft options. Missing skills fail with
errorCode 'provider_skill_not_available' and an error listing the
missing skill names; already-installed skills keep the existing flow.

Runtime parity: matching uses the same resolution semantics as order
execution (resolveSkillById with _/- id normalization and
resolveSkillByName with case-insensitive name). Callers that do not
pass installedSkills keep legacy validation behavior.

Closes metaid-developers#10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

服务市场不校验服务真实可用性:bot 可挂载发布宿主未安装/不可执行的服务,历史订单超时退款

1 participant