@microi.net/cli 6.2.3 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +6 -6
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +122 -122
  10. package/scripts/microi-cli.js +44 -44
  11. package/scripts/microi-codex-broker.js +2 -0
  12. package/scripts/microi-skills.meta.json +288 -261
  13. package/skills/.microi-skills-version.json +2 -2
  14. package/skills/.progressive-disclosure-manifest.json +104 -101
  15. package/skills/app-store/SKILL.md +555 -553
  16. package/skills/app-store/references/platform-row-format.md +7 -0
  17. package/skills/dos-orm/SKILL.md +2 -0
  18. package/skills/dos-orm/references/oceanbase-mysql.md +8 -0
  19. package/skills/message-notification/SKILL.md +2 -0
  20. package/skills/microi-ai-application/SKILL.md +1 -0
  21. package/skills/microi-client-frontend/SKILL.md +18 -50
  22. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +18 -1
  23. package/skills/microi-client-frontend/references/progressive-04-/345/211/215/347/253/257/346/216/245/345/217/243/344/270/216/347/274/223/345/255/230/346/201/242/345/244/215.md +45 -0
  24. package/skills/microi-codex/SKILL.md +2 -0
  25. package/skills/microi-deployment/SKILL.md +7 -0
  26. package/skills/microi-docs-coverage/references/capability-map.md +3 -3
  27. package/skills/microi-form-engine/SKILL.md +27 -0
  28. package/skills/microi-form-engine/references/component-config-index.md +1 -1
  29. package/skills/microi-left-right-layout/SKILL.md +22 -0
  30. package/skills/microi-microservice/SKILL.md +15 -0
  31. package/skills/microi-mobile-app-quality/SKILL.md +2 -0
  32. package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +2 -1
  33. package/skills/microi-system-delivery/SKILL.md +8 -1
  34. package/skills/microi-system-delivery/references/delivery-pitfalls.md +19 -0
  35. package/skills/microi-ui/SKILL.md +7 -4
  36. package/skills/microi-uniapp-frontend/SKILL.md +10 -1
  37. package/skills/microi.v8.js +17 -3
  38. package/skills/module-engine/SKILL.md +7 -0
  39. package/skills/page-engine/SKILL.md +7 -1
  40. package/skills/page-engine/examples/go-view-operations.json +8467 -0
  41. package/skills/page-engine/examples/go-view-procurement.json +2800 -0
  42. package/skills/page-engine/references/go-view-json.md +62 -0
  43. package/skills/playwright-e2e/SKILL.md +11 -3
  44. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +4 -4
  45. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +2 -2
  46. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +2 -2
  47. package/skills/ui-design/SKILL.md +19 -5
  48. package/skills/ui-design/assets/pattern-showcase/app.js +57 -0
  49. package/skills/ui-design/assets/pattern-showcase/index.html +35 -4
  50. package/skills/ui-design/assets/pattern-showcase/scenario-state.js +34 -0
  51. package/skills/ui-design/assets/pattern-showcase/styles.css +115 -0
  52. package/skills/ui-design/references/data-workspace-density.md +8 -0
  53. package/skills/ui-design/references/design-pattern-library.md +50 -1
  54. package/skills/ui-design/references/mobile-product-language.md +93 -0
  55. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +2 -1
  56. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +2 -2
  57. package/skills/uniapp-mall-assets/SKILL.md +1 -0
  58. package/skills/v8-crud-api/SKILL.md +2 -1
  59. package/skills/v8-file-upload/SKILL.md +2 -2
  60. package/skills/v8-frontend-events/SKILL.md +2 -1
  61. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +21 -1
  62. package/skills/v8-menu-buttons/SKILL.md +2 -0
  63. package/skills/v8-table-event/SKILL.md +2 -1
  64. package/skills/vision-engine/SKILL.md +284 -280
  65. package/skills/vision-engine/references/architecture-and-acceptance.md +14 -0
  66. package/skills/vision-engine/references/realtime-cpu-profiles.md +73 -0
  67. package/skills/vision-engine/references/video-timeline.md +176 -0
  68. package/skills/workspace-conventions/SKILL.md +3 -0
@@ -47,6 +47,25 @@
47
47
  | 24 | 为同步干净覆盖他人修改、清理误伤共享目录 | 保存本任务文件/进程清单,冲突先三方合并;只收尾可证归属的临时路径,不删共享依赖或其它任务变更。分别列出本任务差异与外部差异,不为零计数覆盖远端 | `workspace-conventions`、`context-quality.md` |
48
48
  | 25 | 本地更新 Skills 就称所有用户已获得 | 规范正文单源维护,同步已注册内嵌知识和插件/CLI资源,验证宿主默认路由及包内文件/哈希;源码、构建包、发布渠道和新工作区实际初始化分别记回执。未实际跑过的模型不称已实测 | `microi-docs-coverage`、`microi-codex-installer` |
49
49
 
50
+ ## 跨端与长任务中容易遗漏的边界
51
+
52
+ | 现象 | 下一次执行方法 | 所属规范 |
53
+ |---|---|---|
54
+ | 独立 H5 是手机预览,嵌入原菜单却拉满桌面 | 将呈现目的与 embedded 分开;移动预览保持内屏尺寸,工作台才满宽。比较真实 CSS viewport、宿主可用区域、底栏与滚动所有者 | `ui-design/references/mobile-product-language.md` |
55
+ | 功能和构建通过,整体视觉仍粗糙 | 先明确移动产品表达强度,再统一 token、图标、Tab、表单与动效;逐页面模式截图批判。图标间距/中心线和触控尺寸做实际几何断言 | `microi-ui`、`microi-mobile-app-quality` |
56
+ | 角色通过率看似很高,仍漏了大量管理动作 | 开工建立角色×资源×动作×范围分母,单列原生菜单、H5工作台、报表、附件和混合角色;每格记录真实身份、写后回读与失败分支 | `playwright-e2e`、`v8-security` |
57
+ | 网络丢响应后重复聊天、出入库或资产命令 | 幂等键、初始 ExpectedVersion 与业务意图绑定;重试先回读相同业务键,保持首次参数。不能重新生成意图或用最新版本重放旧意图 | `v8-crud-api` |
58
+ | 私有附件路径签名正确但归属仍不安全 | 同时核对实际业务记录、上传者/关联对象、当前角色范围和存储路径;公共商品图与私有工单图分别处理,签名不能代替授权 | `uniapp-mall-assets`、`v8-security` |
59
+ | 普通业务 DTO 被宿主传输字段污染 | 白名单剥离已确认的宿主元数据,业务字段继续严格拒绝未知项;不要整体关闭参数校验 | `microi-microservice`、`v8-security` |
60
+ | 接口源码能运行,但拉取与本地生成永久有差异 | 逐引擎保存发布头和 schema 快照依赖;对未使用新字段的旧引擎声明快照例外,按实际全文回读验证,不伪造零差异 | `v8-crud-api`、`context-quality.md` |
61
+ | 大目录同步调用超时,被误判失败或直接重写 | 为目录操作配置有界长超时与进度续时;未知结果先比候选 manifest,并逐文件回读原始字节。候选已原子提交时不重复上传或取得新基线补票 | `microi-microservice`、`v8-file-upload` |
62
+ | 对比度检查忽略渐变/透明叠层而误报或漏报 | 同时检查实际合成背景与渐变最不利位置,保留实色降级背景;不能通过降低阈值或只测白底消除失败 | `ui-design`、`playwright-e2e` |
63
+ | 主租户短信可用,被假定子租户也有凭据 | 只读核对成对凭据、签名/模板、可信新用户最低角色和会话链;使用受审阅的安全迁移工具,缺能力明确缺口,不取明文、不盲拷密文、不伪造发送成功 | `microi-mobile-app-quality/references/mobile-first-delivery.md` |
64
+
65
+ ### 失败记录要区分归因
66
+
67
+ 命令路径猜错、`rg` 无匹配、缺少本机包管理器、测试程序读取协议字段错误,与平台真实缺陷分别记录。搜索先使用 `rg --files`,读取按语义范围和输出预算进行;依赖、凭据、源码基线与验收分母在首次业务开发前验证。不要给每个项目复制庞大一次性测试脚本,优先维护可复用的小工具与明确的失败恢复点。
68
+
50
69
  ## 失败时的交付规则
51
70
 
52
71
  - 修复清单必须保留用户原编号及默认交付 1–10 的映射,不用“优化完成”代替位置、证据与未完成项。
@@ -14,12 +14,12 @@ Microi.UI 是 Microi 产品共享前端设计系统。Vue 3 网站、响应式
14
14
  这是自动规则。不要等用户明确说“遵循 `microi.skills/microi-ui/SKILL.md`”。只要仓库、需求、文件路径或项目上下文属于 Microi 生态,且工作涉及前端界面、网站界面、H5、uni-app、小程序、客户/员工/会员页面、报告、仪表盘或视觉打磨,就默认读取并应用本 skill。
15
15
 
16
16
  <!-- microi-progressive:begin -->
17
- <!-- microi-progressive:chunk id=microi-ui-000 sha256=a400da7a05d4e24e763880a997f27c1fcd859bcbe01693765695f02214bdb550 -->
17
+ <!-- microi-progressive:chunk id=microi-ui-000 sha256=1229187f57bb1623782c22a9086a8e93dc03362397e7a137c7c9a6d68df3ddc3 -->
18
18
  ## 核心承诺
19
19
 
20
20
  Microi.UI 不只是组件集合,它是 AI 构建软件的视觉交付标准:
21
21
 
22
- - 默认紧凑适度,不鼓励大标题、大圆角、大间距;只有用户明确选择表现性方向或真实可读/触控需要才扩大相应尺度。减少重复标题、说明、统计卡和无业务意义装饰,用清楚层级、稳定对齐与真实内容建立品质。
22
+ - 标准后台表单和高频数据区默认紧凑适度;定制微服务、移动产品、门户和内容页先确定自己的构图与视觉性格,不能把后台 token 的示例值当全产品上限。用户明确要求个性化时,主动形成有业务依据的排版、媒体、形状和空间关系;避免重复标题、同权统计卡与无意义装饰,也避免全站只有换色白卡。
23
23
  - 清爽不等于大面积空白或固定白底;页面必须在信息密度与可扫读性之间取得平衡,核心任务和主要操作应在首屏内清楚可见。管理/分析/监控页先读取 [数据工作台密度规范](../ui-design/references/data-workspace-density.md),按宿主可用内容区满宽、容器断点和实际字号/几何验收,不把移动 premium 或营销 Hero 作为后台默认。
24
24
  - 每个组件和页面都必须消费语义 token,适配任意租户主题色,并同时支持亮色、暗色模式;禁止把某一种主色、白色表面或深色背景写成唯一正确外观。
25
25
  - 新增视觉验收至少覆盖一个浅色主题、一个暗色主题和一个非默认租户主题色,并检查文字、边界、状态色及焦点态的可读性。
@@ -30,7 +30,7 @@ Microi.UI 不只是组件集合,它是 AI 构建软件的视觉交付标准:
30
30
  - 每个移动端页面都必须处理安全区、加载状态、按下反馈和底部操作。
31
31
 
32
32
  <!-- /microi-progressive:chunk -->
33
- <!-- microi-progressive:chunk id=microi-ui-001 sha256=33d0fbc900090983a0e5959e10f611a3ebb3b9b2c0dc1d13ce7569cfc4701211 -->
33
+ <!-- microi-progressive:chunk id=microi-ui-001 sha256=cda04dc6f6e7b164ca2de2a7f7aeec711d629bf82a546849dc56b09bdb3aa64a -->
34
34
  ## 内置设计模式
35
35
 
36
36
  当需求只说“主流、高级、好看”时,先为页面确定一种主模式,再开始选组件和写样式:
@@ -45,6 +45,7 @@ Microi.UI 不只是组件集合,它是 AI 构建软件的视觉交付标准:
45
45
  | 数据工作台 | 优先异常、趋势、明细和筛选回显 | `MciMetricCard + MciFilterBar + MciDataState` |
46
46
 
47
47
  - 一页只能有一个主模式,辅助能力最多两项;禁止把六种风格堆成拼盘。
48
+ - 整站或显著重设计先读取 [项目设计签名与场景配方](../ui-design/references/design-pattern-library.md#项目设计签名与场景配方)。主模式只决定任务优先级,不要求所有页面套同一骨架;首页、资产、目录、表单与 PC 工作台共享语义 token,同时各自组织主要对象和动作。
48
49
  - 先完成默认、加载、空、错误、禁用、权限、成功状态,再增加装饰和动效。
49
50
  - 涉及完整产品设计时,读取 [设计模式库](../ui-design/references/design-pattern-library.md);涉及登录、订阅、支付、权限、搜索和设置时读取 [产品流程配方](../ui-design/references/product-flow-recipes.md);涉及动效、Canvas/WebGL、图片或视频时读取 [动效与媒体规范](../ui-design/references/motion-and-media.md)。
50
51
  - 整站或长期维护项目必须在项目根目录维护 `MCI-DESIGN.md`,按 [设计契约规范](../ui-design/references/mci-design-contract.md) 描述 token、组件状态、动效、响应式和降级策略;可复制 [契约模板](../ui-design/assets/templates/MCI-DESIGN.md)。
@@ -121,11 +122,13 @@ Microi.UI 不只是组件集合,它是 AI 构建软件的视觉交付标准:
121
122
  - 可点击整卡必须有 hover/focus/pressed、键盘 Enter/Space、可见焦点与内部控件事件隔离;骨架屏和最终卡片结构等高。
122
123
 
123
124
  <!-- /microi-progressive:chunk -->
124
- <!-- microi-progressive:chunk id=microi-ui-005 sha256=f46f6672b60d4faad4a0fc501036bcb7b9d04545952ad8acb716668aac699454 -->
125
+ <!-- microi-progressive:chunk id=microi-ui-005 sha256=3d000f626ee1b0a3560577033f95b948845236fb117d47f4adfa1a93c076cfd3 -->
125
126
  ## 高品质移动端视觉标准
126
127
 
127
128
  移动端应用必须像经过打磨的产品,而不是把后台表单硬塞进手机视口。
128
129
 
130
+ 整站设计、重设计及用户反馈复测前,必读 [移动产品设计语言与可执行视觉门禁](../ui-design/references/mobile-product-language.md)。先把参考中的排版、主体比例、色块用途和任务顺序转译为当前产品的原创设计签名,再确定共享组件和动效;“默认紧凑”不能否定用户明确要求的表现性方向。Tab、图标与排序控件须量测真实中心线、间距和触控框,桌面独立与原菜单的手机预览必须同视口对比;无报错或几何正确不代表视觉已经出众。原创可交互场景见 [模式实验室](../ui-design/assets/pattern-showcase/index.html#expressive)。
131
+
129
132
  写页面局部 CSS 前,优先使用这些基础能力:
130
133
 
131
134
  - `.mci-page--mobile-premium`
@@ -9,6 +9,8 @@ description: Microi 吾码 UniApp/H5/App/小程序前端规范。用于创建或
9
9
 
10
10
  本 Skill 适用于任何 Microi 吾码 UniApp/H5 项目,包括商城、OA、ERP、MES、CRM、互联网项目、预约项目等。不要把规则写成某一个业务应用专属规范。
11
11
 
12
+ 设计、创建或修改 UniApp、移动 H5、App、微信小程序页面时,默认执行[前端界面任务默认路由](../microi-system-delivery/SKILL.md#前端界面任务默认路由)。用户直接提出页面需求时,同样先读取并应用 [吾码 UI 设计](../ui-design/SKILL.md) 和 [Microi.UI](../microi-ui/SKILL.md),并执行下方移动端质量门禁。
13
+
12
14
  ## 视频选择与开发者工具兼容
13
15
 
14
16
  视频上传必须区分微信开发者工具与真机:只在微信运行时明确返回 `platform='devtools'`
@@ -38,7 +40,7 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
38
40
  创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md`,并读取其[首版交付与外部服务验收](../microi-mobile-app-quality/references/mobile-first-delivery.md)。手机号快捷登录、会话续签、导航几何、真实地图、页面动效和公开发布回读从首版纳入需求与测试,不能先交静态占位版,再等待用户逐页指出问题。涉及后台与第三方服务时按实际业务范围执行,既有授权和租户策略优先。
39
41
 
40
42
  <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=de245aa65643e8bbb5d9cfd5256066295b4857bfa2fc8ef2689161eee9b2bc25 -->
43
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=0e8369c5c302af076eede55b45b251bbb96861602432a612c172bd9521a9f4c9 -->
42
44
  ## 标准产品、视图协议与租户扩展
43
45
 
44
46
  地图提供行政区与附近距离两类筛选时,应复用省市区字典,并允许省、市、区逐级选“全部”;省级“全部”须显式启用,不能改变普通地址录入的默认值。行政区域查询不依赖手机定位、不叠加附近半径,空地区仍可保留既有附近模式。范围筛选必须在原有菜单/租户/行权限内执行,分批读取并丢弃迟到响应;来源列表存在同表不同菜单时,地图入口与查询应保留准确的来源菜单和固定业务条件。验收覆盖全国、全省、全市、区县、直辖市、定位拒绝、旧接口兼容和快速切换。
@@ -49,6 +51,8 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
49
51
 
50
52
  Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile + 租户插件”架构,不能把某个交付项目直接写死成平台产品:
51
53
 
54
+ 组合字段替代原生字段渲染时,必须保留原字段的租户动作、授权上下文与只读行为。标签旁动作通过通用插槽接入(如 `mci-visit-target-fields` 的 `target-label-actions`),动作仍由原字段 `getFieldActions/runFieldAction` 声明和执行;不要因为成员字段被组合控件隐藏就丢失详情入口。关联跳转使用真实关联 Id 和目标菜单权限,不能按显示名称猜测记录;已有业务列表详情时优先复用同一详情路由及参数,不用通用表单代替而丢失统计、关联和操作。验收覆盖新增、编辑、查看、未关联和撤权,比较列表与快捷入口的实际导航目标,并检查完整详情、按钮尺寸及标签间距。
55
+
52
56
  JSON 历史字段的只读展示使用 `Config.ReadonlyView.Type=Timeline`,通过 `TitleField/TimeField/Fields[{Name,Label}]/ToneMap/EmptyText` 声明;复用 `mci-record-timeline` 与 `record-timeline.mjs`。只展示映射的标量字段,不泄露内部 ID,不执行 HTML 或 V8;模块详情整行布局,最近三条和逐批展开,空值及损坏数据均有可读提示。通用组件不得按客户表名或字段名硬编码。更新后验证旧记录、排序、长说明及两套小程序构建。
53
57
 
54
58
  - `src/platform/`、通用 `mci-*` 组件、动态模块页和动态表单页只实现平台能力,不得出现租户表名、字段名、品牌文案、素材或客户路由。
@@ -63,6 +67,7 @@ JSON 历史字段的只读展示使用 `Config.ReadonlyView.Type=Timeline`,通
63
67
  - 表单元数据必须通过 `V8.FormEngine.GetDiyTableModel/GetDiyFieldList` 访问当前 FormEngine 缓存入口,并携带真实菜单授权上下文;页面和控件不得用普通 `GetFormData/GetTableData` 直查受保护的 `diy_table/diy_field`,也不得散落裸元数据接口 URL。
64
68
  - ViewSchema 未配置、配置不完整或网络暂时失败时,必须回退到菜单移动字段和完整 `diy_field` 定义;定制详情还必须把未显式编排的新字段追加到折叠分组,不能静默丢字段。
65
69
  - 列表、详情、编辑和保存请求应携带真实授权 `_SysMenuId`;客户端不能自行声明角色、数据范围或表权限,服务端仍是最终权限边界。
70
+ - 普通模块查询的 `ModuleEngineKey` 优先使用显式模块配置或真实授权菜单 Id;本地路由/业务 `key` 不得覆盖已解析的菜单 Id。关联下拉报“sys_menu 不存在”时,先核对请求是否误传本地代号,再只读验证真实菜单和数据,不凭报错补建菜单或重建业务数据。回归覆盖静态入口、动态菜单、显式模块 Key、无权限和子表委托。
66
71
  - 动态列表和子表必须读取授权菜单的 `SelectApi`,单条详情读取表级 `ApiReplace.Select`;接口缺失时沿用普通查询,接口失败时保留错误,不能回退到空物理表伪装暂无数据。子表继续传完整 `_TableChildAuth`、父子外键条件和分页参数;虚拟记录 Id 原样传递,分区月份由后端解析。接口地址只允许当前 API 同源,并委托已配置 SDK 处理租户与续签。只读日志的月份字段和支持的筛选能力由租户插件声明,普通表编辑权限保持原契约;验收覆盖预览、分页、详情、历史月份、跨设备拒绝及普通子表。
67
72
  - 原生详情进入编辑后,取消丢弃未保存字段并返回同一详情/Tab,保存成功后回读服务端结果并通知来源列表刷新;直接新增/编辑仍返回来源列表。验收覆盖系统返回、保存/子表失败、迟到响应和权限撤销,不能用重复压入详情页替代原实例恢复。
68
73
  - IoT/关联快照的“记录不存在”应展示业务空状态并隐藏表名/SQL,权限与网络失败仍保留真实错误;未知遥测使用占位值,零值和离线不能被当作缺失。依赖租户 V8 的契约测试从授权同步目录按唯一 ApiEngineKey 定位,测试前核验源码完整性与哈希,不靠旧分类文件夹名定位或跳过缺失依赖。
@@ -223,6 +228,10 @@ row.OwnerAvatarUrl = await resolveAvatarUrl(rawAvatar);
223
228
  ```
224
229
 
225
230
  <!-- /microi-progressive:chunk -->
231
+ ## 跨平台构建插件与无浏览器依赖
232
+
233
+ Vite/Rollup 插件匹配依赖时,须统一模块 ID 与 `require.resolve()` 路径的斜杠;Windows 的反斜杠不能直接与 Vite 正斜杠 ID 比较。兼容加载仅处理真实依赖入口,不能扩大到虚拟模块或 CommonJS 代理模块。第三方依赖读取 `navigator.appName` 或 `window` 导致启动失败时,在模块局部兼容,不向 App/小程序全局伪造浏览器对象。回归同时覆盖两种路径、真实 Vite 打包产物在无浏览器环境中初始化、既有加密协议与浏览器随机数接口;只直调插件原始文件路径不足以证明真实构建有效。编译配置更新后重新运行原开发入口,再确认页面注册,不能把启动异常后的页面未注册当作独立路由缺失处理。
234
+
226
235
  ## 详细参考路由(渐进披露)
227
236
 
228
237
  仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
@@ -569,7 +569,7 @@ function installDatePrototypeCompat() {
569
569
  }
570
570
  }
571
571
 
572
- // BEGIN GENERATED PUBLIC RESOURCE ROUTER; source SHA256 94e9f239a70d003f6513a205d02e5d3dcaf3e80268bb3735523047949518ce9a
572
+ // BEGIN GENERATED PUBLIC RESOURCE ROUTER; source SHA256 724a7bfc54e88d348232943681bd70505d5c3af2b2be7b84992be8c574a1f5fc
573
573
  const createSdkPublicResourceClient = (() => {
574
574
  // 公有资源路由的纯校验器与实际消费者桥接;私有分支继续走既有授权接口。
575
575
  const HASH = /^[a-f0-9]{64}$/;
@@ -583,9 +583,21 @@ function key(value) {
583
583
  return value;
584
584
  }
585
585
  const encodeKey = value => value.split('/').map(encodeURIComponent).join('/');
586
+ function primaryHttpUrl(value) {
587
+ if (typeof URL === 'function') return new URL(value);
588
+ // 小程序可能没有 WHATWG URL;这里只校验原始主地址,不仿造全局 URL 或据此签发备份路由。
589
+ // 无法可靠识别的主机(含凭据、编码主机、IPv6/国际域名)保持失败关闭。
590
+ if (typeof value !== 'string' || /[\\@\u0000-\u0020\u007f]/.test(value)) throw Error('InvalidPublicBinding');
591
+ const match = /^(https?):\/\/([a-z0-9.-]+)(?::([0-9]{1,5}))?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/i.exec(value);
592
+ if (!match || match[2].length > 253 || match[2].split('.').some(label =>
593
+ !/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i.test(label))
594
+ || (match[3] && Number(match[3]) > 65535)) throw Error('InvalidPublicBinding');
595
+ return { protocol: match[1].toLowerCase() + ':', pathname: match[4] || '/',
596
+ search: match[5] || '', hash: match[6] || '', username: '', password: '' };
597
+ }
586
598
  function plainBase(value, originOnly = false, legacyPrimary = false) {
587
599
  if (typeof value !== 'string' || /[\\%?#@\u0000-\u0020\u007f]/.test(value)) throw Error('InvalidPublicBinding');
588
- const parsed = new URL(value);
600
+ const parsed = legacyPrimary ? primaryHttpUrl(value) : new URL(value);
589
601
  if ((parsed.protocol !== 'https:' && !(legacyPrimary && parsed.protocol === 'http:')) || parsed.username || parsed.password || parsed.search || parsed.hash
590
602
  || (originOnly && parsed.pathname !== '/')) throw Error('InvalidPublicBinding');
591
603
  return value.replace(/\/+$/, '');
@@ -607,7 +619,7 @@ function legacyPublicFallback(input, binding) {
607
619
  const path = input.path;
608
620
  try {
609
621
  if (/^https?:/i.test(path)) {
610
- const url = new URL(path);
622
+ const url = primaryHttpUrl(path);
611
623
  return !/[\\\u0000-\u0020\u007f]/.test(path) && !url.username && !url.password ? path : '';
612
624
  }
613
625
  if (path.startsWith('//') || path.startsWith('.')) return '';
@@ -841,6 +853,8 @@ function createPublicResourceClient({ getContext, post, now = Date.now, fetchHea
841
853
  async function ensureBinding() {
842
854
  const current = context(), id = signature(current);
843
855
  if (active !== id) { active = id; binding = null; bootstrap = null; expires = 0; generation++; router.clear(); aliases.clear(); }
856
+ // 缺少浏览器原子能力时只使用经过校验的原 FileServer;不启动会悬挂或返回空地址的备份解析。
857
+ if (typeof URL !== 'function' || typeof AbortController !== 'function' || typeof queueMicrotask !== 'function') return false;
844
858
  if (binding && expires > now()) return true;
845
859
  if (!binding && expires > now()) return false;
846
860
  if (bootstrap) return bootstrap;
@@ -3,6 +3,8 @@ name: module-engine
3
3
  description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修改后台菜单、菜单统计角标、模块标题指标、复合列表列、移动端业务卡片、查询列、接口替换、跨端 ViewSchema、动态按钮、PageTabs、树形加表格布局和 MicroService 菜单。
4
4
  ---
5
5
 
6
+ 官方系统目录(系统帐号、角色、岗位)的批量操作通过 `BatchSelectMoreBtns` 与 `platform-directory-batch-delete` 交付;不要让 AI 用通用 SQL 删除系统表或绕过可信目录接口。角色权限界面提供基础信息、MCP配置、表直连权限三个 Tab,切换必须保留未保存草稿。新应用登记界面只把名称、唯一应用 Id、版本、应用类型、分类、公开状态、预览图和介绍放在应用信息,运行状态与兼容字段放更多信息;制作应用与更新日志保留独立 Tab。微服务打开该标准表单时须继承冻结宿主菜单上下文,仍由后端校验目标表/记录权限,不能传 `_IsAdmin` 绕过。
7
+
6
8
  > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
9
 
8
10
  # Microi 模块引擎
@@ -17,6 +19,9 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
17
19
  代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
18
20
  未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
19
21
 
22
+ 模块详情要由微服务接管时,配置真实入口模块的 `sys_menu.DetailPageV8`;隐藏子表模块也使用自己的该字段,不能只修改同表另一个可见菜单。`InFormV8` 在原生表单已打开后初始化字段,不能承担无闪窗的详情替换。迁移只移动 View 接管段,保留 Add/Edit 初始化、原按钮、事件、`ParentV8` 和数据权限;具体取消/异步边界见 `../v8-frontend-events/references/progressive-01-列表事件.md`。
23
+ 列表与 full 入口均为“配置即替换”,`undefined/Code=1` 不继续原生;显式原生用既有 `V8.OpenForm(V8.Form, 'View')` 防递归,无 Hook 时保持原生。微服务接管后显式 `return false` 兼容旧 PC,不新增继续原生 flag。
24
+
20
25
  列表【更多功能】使用与【更多搜索】一致的次级按钮样式。模块物理字段
21
26
  `sys_menu.HideMoreFunctions` 对应【隐藏更多功能】,只有明确 `1/true` 隐藏当前模块入口,
22
27
  缺失/空/0 保持显示;嵌入页 `PropsHideMoreFunctions=true` 同样可隐藏当前实例。
@@ -238,6 +243,8 @@ Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使
238
243
 
239
244
  ## 跨端 ViewSchema
240
245
 
246
+ 移动端业务详情的人员电话组合使用 `ViewSchema.MobileDetail.PhoneBindings[]`,在模块展示设计器【移动端详情】中配置 `PersonField/PhoneField/Enabled/ShowNumber/EnableDial/HidePhoneRow`。这是标准详情的显式局部展示扩展,不依赖或修改 `EnableViewSchema`,不改变已有 Detail/Edit/List/Card。通过 `microi_update_module` 合并原 JSON、递增 `ViewConfigVersion` 并回读;不得覆盖其它视图或写入废弃 DiyConfig。只有同一可见分组的两个字段都存在、电话字段在当前查询中确实返回时才合并,缺失/隐藏/重复/交叉绑定回退原行;空值和脱敏值不得拨号,也不得另取电话原文。此功能需同时更新 PC 设计器和 UniApp `pages/business/detail`,保存菜单不等于客户端已更新。
247
+
241
248
  顶层 PC 数据列表默认使用紧凑的新模块标题样式;即使未启用自定义表单视图,也不能退回无标题的旧外观。无指标头部固定 `44px`、含指标头部固定 `62px`,连同间距总纵向占用约 `50px / 68px`。子表、关联表、嵌入表不重复显示,移动端由固定导航栏承载标题。`Scene=List/Card` 的个性化标题、指标、复合列和卡片配置存在时必须直接生效;`EnableViewSchema` 只控制 Detail/Edit 自定义表单视图。
242
249
 
243
250
  PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标)→ PageTabs → 查询与表格”,Hero 必须渲染在页面多 Tab 上方。头部只使用一次性入场和一次性轻量光效,禁止持续循环动画;`prefers-reduced-motion: reduce` 必须关闭动画和过渡。
@@ -1,12 +1,18 @@
1
1
  ---
2
2
  name: page-engine
3
- description: 生成和审查 Microi 界面引擎 Page Engine 页面 JSON。用于创建仪表盘、图表、表格、地图、组件、页面布局,或校验 mic_page formData JSON。
3
+ description: 生成和审查 Microi 界面引擎 Page Engine 与内置 GoView 数据大屏 JSON。用于 mic_page 页面、mic_data_dashboard 可编辑大屏、图表、表格、画布布局与真实渲染验收。
4
4
  ---
5
5
 
6
6
  > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
7
 
8
8
  # Microi 界面引擎(Page Engine)页面 JSON 生成
9
9
 
10
+ ## 先区分 Page Engine 与内置 GoView
11
+
12
+ 用户指定 GoView、数据大屏或提供科技风自由画布截图时,先读取 [GoView 原生 JSON、MCP 与完整示例](references/go-view-json.md)。吾码已将 GoView 集成在前端,不需要独立 GoView Docker、端口或后端;不能根据容器清单或菜单名称断言未安装。先调用 `microi_get_go_view_schema`、`microi_list_go_view_projects` 发现实际能力,旧 MCP 没有这些工具时核对工具版本与 `mic_data_dashboard` 实时 Schema,不得改用 `mic_page` 冒充 GoView。
13
+
14
+ 两种 JSON 不可混用:Page Engine 是 `mic_page` 的 `formConfig/widgetList`;GoView 是 `mic_data_dashboard.ContentData` 的 `editCanvasConfig/componentList/requestGlobalConfig`。下文继续描述 Page Engine。
15
+
10
16
  MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_page_design`;版本治理入口见下文。保存工具写入后仍需回读 `mic_page`,不能把生成成功当作持久化成功。
11
17
 
12
18
  ## 完整 AI 开发默认报表(强制)