weaver-work-cli 0.1.25 → 0.1.28
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.
- package/README.md +35 -30
- package/dist/cmd/root.js +1 -0
- package/dist/cmd/setup/index.js +1 -1
- package/dist/core/runtime-agent.js +19 -0
- package/dist/internal/e10/auth/commands.js +48 -33
- package/dist/internal/e10/auth/messages.js +3 -0
- package/dist/internal/e10/auth/session.js +8 -0
- package/dist/internal/e10/auth/xiaoe.js +62 -43
- package/dist/internal/e10/auth-recovery.js +148 -0
- package/dist/internal/e10/client.js +47 -15
- package/dist/internal/e10/context.js +9 -31
- package/dist/internal/e10/index.js +1 -0
- package/dist/internal/e10/request-runtime.js +51 -9
- package/dist/shortcuts/archive/host.js +3 -2
- package/dist/shortcuts/archive/manifest.js +1 -1
- package/dist/shortcuts/archive-oa/constants.js +66 -0
- package/dist/shortcuts/archive-oa/continuation.js +70 -0
- package/dist/shortcuts/archive-oa/errors.js +53 -0
- package/dist/shortcuts/archive-oa/host.js +158 -0
- package/dist/shortcuts/archive-oa/index.js +225 -0
- package/dist/shortcuts/archive-oa/manifest.js +62 -0
- package/dist/shortcuts/archive-oa/operations/borrow-car.js +159 -0
- package/dist/shortcuts/archive-oa/operations/borrow-url.js +108 -0
- package/dist/shortcuts/archive-oa/operations/confirm.js +48 -0
- package/dist/shortcuts/archive-oa/operations/contract.js +120 -0
- package/dist/shortcuts/archive-oa/operations/locate.js +50 -0
- package/dist/shortcuts/archive-oa/operations/registry.js +40 -0
- package/dist/shortcuts/archive-oa/operations/shared.js +181 -0
- package/dist/shortcuts/archive-oa/operations/types.js +45 -0
- package/dist/shortcuts/archive-oa/operations.js +13 -0
- package/dist/shortcuts/asset/host.js +7 -6
- package/dist/shortcuts/blog/host.js +4 -3
- package/dist/shortcuts/caizhilian/host.js +3 -2
- package/dist/shortcuts/caizhilian/manifest.js +1 -1
- package/dist/shortcuts/calendar/host.js +2 -1
- package/dist/shortcuts/contract/host.js +34 -59
- package/dist/shortcuts/ehr/host.js +2 -1
- package/dist/shortcuts/esb/host.js +2 -1
- package/dist/shortcuts/fna/host.js +6 -3
- package/dist/shortcuts/fna/manifest.js +10 -5
- package/dist/shortcuts/fna/operations/expense-chart.js +162 -0
- package/dist/shortcuts/fna/operations/registry.js +2 -0
- package/dist/shortcuts/hrm/host.js +2 -1
- package/dist/shortcuts/im/host.js +3 -2
- package/dist/shortcuts/index.js +2 -0
- package/dist/shortcuts/invoice/host.js +9 -7
- package/dist/shortcuts/invoice/manifest.js +38 -47
- package/dist/shortcuts/invoice/operations/issuing-qys.js +328 -0
- package/dist/shortcuts/invoice/operations/registry.js +2 -3
- package/dist/shortcuts/jiuchuanhui/host.js +2 -1
- package/dist/shortcuts/mail/host.js +2 -1
- package/dist/shortcuts/meeting/host.js +2 -1
- package/dist/shortcuts/meeting/operations/eb/conflict.js +78 -12
- package/dist/shortcuts/okr/host.js +2 -1
- package/dist/shortcuts/plan/host.js +2 -1
- package/dist/shortcuts/project/host.js +2 -1
- package/dist/shortcuts/workflow/endpoints.js +11 -0
- package/dist/shortcuts/workflow/host.js +5 -7
- package/dist/shortcuts/workflow/index.js +6 -36
- package/dist/shortcuts/workflow/operations/chatscene.js +252 -0
- package/dist/shortcuts/workflow/operations/form.js +1047 -191
- package/dist/shortcuts/workflow/operations/read.js +137 -8
- package/dist/shortcuts/workflow/operations/sign-input.js +106 -0
- package/dist/shortcuts/workflow/operations/write.js +9 -1
- package/dist/shortcuts/workflow/stdout-compact.js +16 -1
- package/docs/SKILL.md +1 -1
- package/docs/_catalog.md +1 -1
- package/docs/agent-invoice.md +1 -1
- package/docs/archive-oa.md +79 -0
- package/docs/caizhilian.md +1 -1
- package/docs/e10-auth.md +7 -6
- package/docs/fna.md +7 -3
- package/docs/invoice.md +4 -6
- package/package.json +1 -1
- package/skill-template/business-info.json +20 -1
- package/skill-template/domains/archive-oa.md +19 -0
- package/skill-template/domains/caizhilian.md +2 -1
- package/skill-template/domains/qiyecheng.md +1 -0
- package/skill-template/domains/yepiaotong.md +8 -4
- package/skill-template/skill-template.md +1 -0
- package/skills/weaver-e10-archive-oa/SKILL.md +159 -0
- package/skills/weaver-e10-archive-oa/references/archive-locate.md +49 -0
- package/skills/weaver-e10-archive-oa/references/borrow-car.md +76 -0
- package/skills/weaver-e10-archive-oa/references/borrow-flow.md +53 -0
- package/skills/weaver-e10-archive-oa/references/contract-search.md +63 -0
- package/skills/weaver-e10-archive-oa/references/disabled-capabilities.md +29 -0
- package/skills/weaver-e10-archive-oa/references/qys-contract-search.md +47 -0
- package/skills/weaver-e10-archive-oa/references/source-manifest.json +400 -0
- package/skills/weaver-e10-blog/SKILL.md +6 -1
- package/skills/weaver-e10-blog/references/blog-query.md +3 -1
- package/skills/weaver-e10-builder/SKILL.md +22 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +47 -16
- package/skills/weaver-e10-caizhilian/references/action-flow.md +70 -0
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +12 -4
- package/skills/weaver-e10-caizhilian/references/auth-and-install.md +207 -0
- package/skills/weaver-e10-caizhilian/references/collaboration.md +5 -3
- package/skills/weaver-e10-caizhilian/references/document.md +33 -11
- package/skills/weaver-e10-caizhilian/references/file-collection.md +57 -54
- package/skills/weaver-e10-caizhilian/references/file-upload.md +5 -6
- package/skills/weaver-e10-caizhilian/references/files.md +9 -3
- package/skills/weaver-e10-caizhilian/references/folder.md +48 -16
- package/skills/weaver-e10-caizhilian/references/host-executor-prompt.md +32 -0
- package/skills/weaver-e10-caizhilian/references/host-platform-integration.md +46 -0
- package/skills/weaver-e10-caizhilian/references/rule-index.md +56 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +17 -54
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +16 -63
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +24 -64
- package/skills/weaver-e10-caizhilian/references/setting-storage-docs-summary.md +126 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage-field-map.md +57 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +143 -548
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +7 -7
- package/skills/weaver-e10-caizhilian/references/task-workflow.md +87 -0
- package/skills/weaver-e10-caizhilian/references/withheld.md +21 -45
- package/skills/weaver-e10-caizhilian/references/write-protocol.md +7 -0
- package/skills/weaver-e10-calendar/SKILL.md +6 -1
- package/skills/weaver-e10-esb/SKILL.md +8 -0
- package/skills/weaver-e10-esb/references/input-format.md +3 -1
- package/skills/weaver-e10-esb/references/source-manifest.json +5 -5
- package/skills/weaver-e10-hrm/SKILL.md +6 -1
- package/skills/weaver-e10-hrm/references/employee.md +1 -1
- package/skills/weaver-e10-hrm/references/org.md +1 -1
- package/skills/weaver-e10-hrm/references/position.md +1 -1
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
- package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +1 -1
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/SKILL.md +6 -1
- package/skills/weaver-e10-jucailin/references/hr-contact.md +1 -1
- package/skills/weaver-e10-jucailin/references/salary.md +1 -1
- package/skills/weaver-e10-mail/SKILL.md +6 -1
- package/skills/weaver-e10-meeting/SKILL.md +11 -6
- package/skills/weaver-e10-meeting/references/meeting-eb.md +7 -3
- package/skills/weaver-e10-meeting/references/meeting-queries.md +3 -1
- package/skills/weaver-e10-meeting/references/meeting-verification.md +4 -2
- package/skills/weaver-e10-okr/SKILL.md +6 -1
- package/skills/weaver-e10-okr/references/source-manifest.json +5 -5
- package/skills/weaver-e10-plan/SKILL.md +6 -1
- package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +3 -1
- package/skills/weaver-e10-plan/references/plan-report-query.md +3 -1
- package/skills/weaver-e10-plan/references/source-manifest.json +7 -7
- package/skills/weaver-e10-qiyecheng/SKILL.md +16 -6
- package/skills/weaver-e10-qiyecheng/references/catalog.md +6 -3
- package/skills/weaver-e10-qiyecheng/references/expense-center.md +2 -0
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +78 -0
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +87 -33
- package/skills/weaver-e10-shared/SKILL.md +53 -28
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +22 -20
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +13 -13
- package/skills/weaver-e10-shared/references/weaver-e10-installation.md +3 -1
- package/skills/weaver-e10-wenshuding/SKILL.md +6 -1
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +3 -3
- package/skills/weaver-e10-workflow/references/source-manifest.json +33 -24
- package/skills/weaver-e10-workflow/references/workflow-create.md +41 -26
- package/skills/weaver-e10-yepiaotong/SKILL.md +23 -18
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-examples.md +87 -45
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-form-fill-rules.md +152 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-workflow.md +210 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +59 -36
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +63 -512
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +205 -346
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +4 -5
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +231 -344
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +5 -5
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +201 -162
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +121 -145
- package/skills/weaver-e10-yimiaoban/SKILL.md +9 -2
- package/skills/weaver-e10-yimiaoban/references/file-user-i18n.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/msg-read.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +9 -9
- package/skills/weaver-e10-ziguanjia/SKILL.md +6 -1
- package/dist/shortcuts/invoice/operations/issuing.js +0 -198
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing-field-rules.md +0 -161
- package/skills/weaver-e10-yepiaotong/references/invoice-issuing.md +0 -107
- package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +0 -119
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: weaver-setting-storage
|
|
3
|
-
description: "
|
|
3
|
+
description: "对话式查改文件存储设置(系统级 + 租户级):存储实例只读查询,存储规则(业务/静态/默认/子规则)的查询、保存、启停、排序与删除。字段语义见 setting-storage-field-map.md,目录架构与存储方案见 setting-storage-docs-summary.md。Use for 系统存储设置、租户平台存储设置、租户后台存储设置、文件存储规则、业务规则、静态规则、默认规则、子目录、压缩存储、加密存储、SM4、nginx 配置。"
|
|
4
4
|
license: Proprietary
|
|
5
|
-
compatibility: 泛微E10
|
|
5
|
+
compatibility: 泛微E10采知连配套使用,随 weaver-e10-caizhilian 技能分发
|
|
6
6
|
metadata:
|
|
7
7
|
maintainer: unknown
|
|
8
8
|
type: capability
|
|
@@ -11,369 +11,126 @@ metadata:
|
|
|
11
11
|
tags: [存储设置, 系统存储, 租户存储, 存储规则, 业务规则, 静态规则, 压缩存储, 加密存储]
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
#
|
|
14
|
+
# 文件存储设置(系统级 + 租户级)
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
让「文件存储设置」用对话就能查 + 改:查当前值 → 列差异让用户确认 → 写入 → 回读校验。写操作一律走 prepare → apply(见 `write-protocol.md`)。
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
- 存储实例:`/papi/file/storage/listStorageInstance` / `getStorageInstance` / `testConnect`
|
|
20
|
-
- 存储规则:`/papi/file/storage/rule/frontComp/ruleForm` / `rule/saveData` / `rule/saveOrder` / `rule/saveOpen` / `rule/search`
|
|
21
|
-
- 浏览器辅助:`/papi/file/common/browser/associate/storageInstance`
|
|
22
|
-
- **鉴权**:三件套(v0.4.16)
|
|
18
|
+
## 认证前置(必须)
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
- 存储实例:`/papi/file/storage/listStorageInstance` / `getStorageInstance` / `testConnect`
|
|
26
|
-
- 存储规则:`/papi/file/storage/rule/frontComp/ruleForm` / `rule/saveData` / `rule/delete` / `rule/frontComp/ruleTable`
|
|
27
|
-
- 浏览器辅助:`/papi/file/common/browser/{associate,complete,history}/{storageInstance,module}`(前端用,agent 对话式不需要)
|
|
28
|
-
- **鉴权**:三件套(v0.4.16 改:跟 system 一样都要三件套,不再"普通 SSO")
|
|
20
|
+
本模块通过 CLI 托管的认证获取凭证(base_url + Cookie + eteamsid + User-Agent),凭证契约见 `auth-and-install.md`,不依赖手动配置文件,Agent 不得自己读取或输出凭证。
|
|
29
21
|
|
|
30
|
-
|
|
22
|
+
**使用前必须确保**:
|
|
31
23
|
|
|
32
|
-
|
|
24
|
+
1. CLI 已安装:`weaver-work-cli --version` 能正常输出版本号
|
|
25
|
+
2. 已完成登录:`weaver-work-cli auth status` 显示已登录
|
|
33
26
|
|
|
34
|
-
-
|
|
35
|
-
- `ETEAMSID=<id>`(如 `PCACCOUNT_xxx-xxx`)
|
|
36
|
-
- `authToken=<JWT>`(eyJ 开头)
|
|
37
|
-
- `LOGIN_TYPE=pc_account` / `langId=7` / `langType=zh_CN`(辅助,不严格校验)
|
|
38
|
-
- **URL query**:
|
|
39
|
-
- `token=<freepass token>`(从 `/sp/file/SysStorageSet/freepass?token=xxx` 来的,32 字符 hex)
|
|
40
|
-
- `wea_link_keep_freepass=1`(免登标志)
|
|
41
|
-
- `tenant_langType=zh_CN`
|
|
42
|
-
- `randomkey_<6 chars>=<6 chars>`(CSRF 防护,每次请求生成一对)
|
|
27
|
+
**登录与登录失效处理**:读取 `auth-and-install.md`,由 Agent 复用任务开始时的宿主判定,禁止调用任何其他登录 Skill。明确为 XiaoE 时只执行 `weaver-work-cli auth xiaoe`,失败即停止且不得改走浏览器;非 XiaoE 时先取得用户确认的真实 E10 域名,再执行 `weaver-work-cli auth login --base-url "<用户确认的 E10 登录域名>" --agent_type "<当前智能体名称>"`。
|
|
43
28
|
|
|
44
|
-
|
|
45
|
-
> 接口用的,E10 后台业务接口用 freepass token。v0.4.16 改:业务接口全部拼 freepass token。
|
|
29
|
+
## 两个层级(改之前先确认)
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
| 层级 | 入口页面 | 影响范围 |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| **系统级** | 租户平台(`<your-tenant-platform-domain>/tenant/tenant/doc/storageSet`) | 所有租户(公共业务目录) |
|
|
34
|
+
| **租户级** | 后台管理中心(`<your-e10-domain>` 文件设置 → 存储设置) | 仅当前租户,可覆盖系统级 |
|
|
35
|
+
|
|
36
|
+
- 用户**没明说改哪一级时必须主动问**,不能假设。
|
|
37
|
+
- 用户分不清时按上表解释:系统级 = 给所有租户统一落点;租户级 = 单租户特殊化(例如某个租户文件量大单独挂云存储)。
|
|
38
|
+
- 两个层级都通过同一组操作处理,`rule.save` 的 `default_rule` 标明是否默认规则。
|
|
48
39
|
|
|
49
40
|
## When to use
|
|
50
41
|
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- 改后台管理中心"文件设置 → 存储设置"页(`<your-e10-domain>`,租户级 / 当前租户,v0.3.0 新加)
|
|
54
|
-
- 改 eteams-file 后端 `StoRuleServiceImpl.saveRule` 走的业务/静态/默认规则
|
|
42
|
+
- 用户说「看一下存了哪些存储」「默认规则是什么」「改一下业务规则路径」
|
|
43
|
+
- 改系统级(租户平台「文件存储设置」)或租户级(后台「文件设置 → 存储设置」)的业务/静态/默认规则
|
|
55
44
|
- 解释存储实例类型(本地/腾讯云/阿里云/华为云/S3/FastDFS/HDFS)的字段差异
|
|
56
|
-
-
|
|
45
|
+
- 解释「子目录 / 压缩存储 / 加密存储 / 文件来源 / 规则顺序 / nginx 配置」的语义
|
|
57
46
|
|
|
58
47
|
**不适用**:
|
|
59
48
|
|
|
60
|
-
- 附件设置 → `
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
- **存储实例的写操作**(新增/修改/删除实例)—— 实例是「系统级只读」,
|
|
64
|
-
改实例要进 E10 后台"系统级存储"页面
|
|
49
|
+
- 附件设置 → `setting-attach.md`;加解密设置 → `setting-encrypt.md`;备份设置 → `setting-backup.md`
|
|
50
|
+
- **存储实例的写操作**(新增/修改/删除实例)与连通性测试——当前只支持实例只读查询,改实例要引导用户进后台「系统级存储」页面
|
|
51
|
+
- 恢复系统默认规则、静态规则的「同步到 nginx」——同样引导后台页面操作
|
|
65
52
|
|
|
66
|
-
##
|
|
53
|
+
## 操作清单
|
|
67
54
|
|
|
68
|
-
|
|
69
|
-
> 目录架构 / 7 种存储类型 / 4 种方案推荐 / 清理说明 / 联系人索引 → 都在
|
|
70
|
-
> [setting-storage-docs-summary.md](setting-storage-docs-summary.md)。客户对话时按里面"对应 skill 能力映射"节对应命令即可。
|
|
71
|
-
>
|
|
72
|
-
> **话术模板库**(v0.4.12):13 大场景的话术示例(对话式规则 1-10 + 操作回执 + 概念解释 + 错误兜底) → 都在
|
|
73
|
-
> [setting-storage-dialogue-templates.md](setting-storage-dialogue-templates.md)。agent 在客户对话中按场景查模板直接套用。
|
|
55
|
+
命令形式见 SKILL.md:`weaver-work-cli --json caizhilian run caizhilian.setting-storage.<操作> --input-json '<json>'`。
|
|
74
56
|
|
|
75
|
-
|
|
57
|
+
| 操作 | 作用 | 类型 |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `instance.list` | 列存储实例 | 只读 |
|
|
60
|
+
| `instance.get` | 实例详情(敏感字段自动掩码) | 只读 |
|
|
61
|
+
| `rule.form` | 拉规则表单(不传 `id` 为默认规则) | 只读 |
|
|
62
|
+
| `rule.table` | 拉规则表 | 只读 |
|
|
63
|
+
| `rule.search` | 高级搜索规则(`conditions` + 可选 `rule_type`) | 只读 |
|
|
64
|
+
| `rule.save` | 保存规则(改字段或新建子规则,`rule_info_list` + `default_rule`) | 写 |
|
|
65
|
+
| `rule.enable` | 启用/停用规则(`rule_info_list` 含 `id`、`openStatus`) | 写 |
|
|
66
|
+
| `rule.order` | 改规则顺序(`rule_ids` 按顺序) | 写 |
|
|
67
|
+
| `rule.delete` | 删除子规则(`rule_ids`) | 写 |
|
|
76
68
|
|
|
77
|
-
|
|
69
|
+
写操作都分 `.prepare` / `.apply` 两步,确认协议见 `write-protocol.md`。
|
|
78
70
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| `storage show <instance_id> --config <name>` | 单实例详情(7 类字段全展开,accessKey 自动 mask) | both |
|
|
85
|
-
| `storage test <instance_id> --config <name>` | 测试某实例连接 | both |
|
|
86
|
-
| `storage rule show --config <name> [--default] [--id <ruleId>]` | 拉规则详情(系统级同时返回业务+静态;租户级只返回业务) | both |
|
|
87
|
-
| `storage rule list --config <name> [--name <kw>]` | 高级搜索规则列表 | both |
|
|
88
|
-
| `storage rule set --config <name> (--default \| --id N) --item k=v [--item ...] [--rule-type 0\|1] [--dry-run] [--yes]` | 改规则:GET → merge → diff → 询问 → POST → 校验。<br>**租户级不支持 `--rule-type 1`(静态规则)**。 | both(rule-type 1 仅 system) |
|
|
89
|
-
| `storage rule add --config <name> --name <X> --source <id\|name> --source-type {0\|1\|2\|3} --instance <id> --sub-dir {1..5} [--storage-path] [--algorithm SM4] [--on\|--off] [--compressed] [--encrypted] --yes` | **新建子规则**(v0.4.14):走 `POST /api/file/storage/rule/saveData` ADD 路径,传 `ruleInfoList` 含 1 条不带 id 的 `StoRuleInfo`。 | both |
|
|
90
|
-
| `storage rule order --config <name> --ids 1,2,3 [--yes]` | 改规则顺序 | system(租户级可调但意义小) |
|
|
91
|
-
| `storage rule delete --config <name> --id <ruleId> --yes` | **删除子规则**(v0.4.14):走 `POST /api/file/storage/rule/delete` 删一条子规则。 | both |
|
|
92
|
-
| `storage rule open --config <name> --id N (--on \| --off) [--yes]` | 启用/停用某条 | both |
|
|
93
|
-
| `storage rule reset-default --config <name> --yes` | 恢复系统默认 | system only(租户级没有"系统默认"可恢复) |
|
|
94
|
-
| `storage explain <field\|type\|concept>` | 解释某字段/存储类型/概念,**不调任何接口** | both |
|
|
95
|
-
|
|
96
|
-
## 13 个支持字段(rule 子字段,CLI 接受 3 种写法)
|
|
97
|
-
|
|
98
|
-
snake-case 别名 / 中文别名 / DTO 字段名(驼峰)。完整别名表见
|
|
99
|
-
[setting-storage-field-map.md](setting-storage-field-map.md)。
|
|
100
|
-
|
|
101
|
-
### 通用(业务/静态都可用)
|
|
102
|
-
|
|
103
|
-
| CLI key | DTO 字段 | 类型 | 备注 |
|
|
104
|
-
|---|---|---|---|
|
|
105
|
-
| `rule-name` | `ruleName` | str | 多语言字段 |
|
|
106
|
-
| `rule-open` | `ruleOpen` | bool | true=启用 / false=停用 |
|
|
107
|
-
|
|
108
|
-
### 业务规则(`--rule-type 0`,默认)
|
|
109
|
-
|
|
110
|
-
| CLI key | DTO 字段 | 类型 | 备注 |
|
|
111
|
-
|---|---|---|---|
|
|
112
|
-
| `storage-instance` | `storageInstanceId` | str | 业务文件落到哪个实例 |
|
|
113
|
-
| `storage-path` | `storagePath` | str | 业务文件存储路径(相对 tenantKey) |
|
|
114
|
-
| `file-source` | `fileSourceValue` | str | 文件来源 id 列表,逗号分隔 |
|
|
115
|
-
| `file-source-type` | `fileSourceType` | enum | `-1`=默认 `0`=模块 `1`=目录 `2`=分部 `3`=部门 |
|
|
116
|
-
| `sub-directory-type` | `subDirectoryType` | enum | `1`=年 `2`=月 `3`=天 `4`=部门 `5`=无 |
|
|
117
|
-
| `compressed-storage` | `compressedStorage` | bool | 仅本地存储生效 |
|
|
118
|
-
| `encrypted-storage` | `encryptedStorage` | bool | 仅本地存储,配套 `sys-file-algorithm` |
|
|
119
|
-
| `sys-file-algorithm` | `sysFileAlgorithm` | str | 默认 `SM4` |
|
|
120
|
-
|
|
121
|
-
### 静态规则(`--rule-type 1`)
|
|
122
|
-
|
|
123
|
-
| CLI key | DTO 字段 | 类型 | 备注 |
|
|
124
|
-
|---|---|---|---|
|
|
125
|
-
| `static-storage-instance` | `staticStorageInstanceId` | str | 静态资源落到哪个实例 |
|
|
126
|
-
| `static-storage-path` | `staticStoragePath` | str | 静态资源路径/存储桶 |
|
|
127
|
-
| `static-nginx-config` | `expandRuleConfig.staticNginxConfig` | str | nginx 配置(嵌套 JSON 子字段,CLI 子字段 merge) |
|
|
128
|
-
|
|
129
|
-
## 7 种存储类型
|
|
130
|
-
|
|
131
|
-
CLI 改规则时"选存储实例"指的就是这些。完整字段差异见
|
|
132
|
-
[setting-storage-storage-types.md](setting-storage-storage-types.md):
|
|
133
|
-
|
|
134
|
-
| code | 名称 | 关键字段 |
|
|
135
|
-
|---|---|---|
|
|
136
|
-
| 0 | 本地存储 | `storagePath` |
|
|
137
|
-
| 1 | 腾讯云 COS | `region` / `bucket` / `accessId` / `accessKey` / `endPoint` |
|
|
138
|
-
| 2 | 阿里云 OSS | 同上 + `cname` |
|
|
139
|
-
| 3 | 华为云 OBS | 同上 + `rootPath` |
|
|
140
|
-
| 4 | S3 标准 | `region` / `bucket` / `accessId` / `accessKey` / `storageHost` / `pathStyle` / `rootPath` |
|
|
141
|
-
| 5 | FastDFS | `trackerServers` / `downLoadHost` |
|
|
142
|
-
| 6 | HDFS | `hdfsServerIp` / `hdfsServerPort` / `hdfsUserName` / `rootPath` |
|
|
71
|
+
## 字段与概念
|
|
72
|
+
|
|
73
|
+
- **规则 13 个字段**(通用 2 + 业务 8 + 静态 3)与 DTO 键名、实例类型关键字段:`setting-storage-field-map.md`
|
|
74
|
+
- **目录架构(7 个标识)、7 种存储类型、4 种方案推荐、清理说明**:`setting-storage-docs-summary.md`
|
|
75
|
+
- 业务规则(ruleType=0)与静态规则(ruleType=1)字段集不同,保存时不要混用。
|
|
143
76
|
|
|
144
77
|
## 硬性门禁
|
|
145
78
|
|
|
146
|
-
1.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
6. **不写日志到 home 之外** —— 所有凭证 / 日志只落在
|
|
158
|
-
`~/.minimax/skills/weaver-setting-storage/` 下。
|
|
159
|
-
7. **未指定子字段保留** —— CLI 走 GET 拉整对象再 merge;只改指定子字段,其它保留。
|
|
160
|
-
8. **租户平台实例只读(v0.4.0 已开放实例写操作,v0.4.2 修字段路由)** —— CLI 走
|
|
161
|
-
`instance add / delete` 改实例。**对象存储凭证必须嵌套 `storageConfigInfo` 字段**:
|
|
162
|
-
- 顶层(`StorageInstanceConfigParam` 顶层):`instanceName / storagePath / storageState / instanceType / httpHttps`
|
|
163
|
-
- 嵌套(`StorageConfigInfo` 实体):`bucket / region / accessId / accessKey / endPoint / rootPath / storageHost / pathStyle / cname / hdfsServerIp / hdfsServerPort / hdfsUserName / trackerServers / group / ...`
|
|
164
|
-
- CLI 自动按字段名归类,调用方无需关心平铺/嵌套。**注意**:
|
|
165
|
-
- 华为云 (`instanceType=3`) 的 `defaultField()` 不含 `REGION`(区域信息塞在 endPoint 里,形如 `obs.cn-north-4.myhuaweicloud.com`),后端 `getRequiredStorageConfigInfo` 会主动过滤掉 region,传了也白传。
|
|
166
|
-
- 腾讯云/阿里云/华为云/S3 这四种"对象存储"的 `storagePath` 顶层字段**通常为空**(信息在 `bucket` 里),CLI 不校验。
|
|
167
|
-
- **空壳实例 update 触发后端 NPE**:`StoInstanceDataServiceImpl.canProceed:269-271` 在 `db.configInfo` 为 NULL 时 NPE。
|
|
168
|
-
这是 eteams-file 后端 bug,CLI 不自动修。**解法**:新建一个不同名字的实例(避开空壳),或让 DBA 在 db 里把空壳的 `config_info` 字段从 NULL 改成 `{}`,或走 E10 二开流程修 canProceed。
|
|
169
|
-
9. **license 检查** —— 没 `STORAGE_RULE` license 时 `ruleList` 走 `StoRuleFrontCompServiceImpl.java:317`
|
|
170
|
-
直接返回空;CLI 会给 warning 但仍允许 POST(让后端真拒)。
|
|
171
|
-
10. **本地/远程分流(v0.2.0 新增,v0.4.16 保留)** —— CLI 按 `BASE_URL` 自动判断:
|
|
172
|
-
- `127.0.0.1` / `localhost` / `0.0.0.0` / `127.*` → **local**:不自动 login、不自动 fetch 三件套;缺三件套直接报错并提示用户填到 `.env.local`
|
|
173
|
-
- 其它 → **remote**:`login` 自动起专用 Chrome 让用户登录 + 抓三件套;业务调用时从 `.env.local` 读
|
|
174
|
-
- `--local` 可显式强制标记
|
|
175
|
-
11. **papi URL 必须拼三件套(v0.4.16 重写)** —— 所有 papi 业务接口都要求:
|
|
176
|
-
- URL query 拼 `token=<freepass token>` + `wea_link_keep_freepass=1` + `tenant_langType=zh_CN` + `randomkey_xxxx`(每次生成)
|
|
177
|
-
- Cookie 设 `ETEAMSID` + `authToken`(JWT)
|
|
178
|
-
- CLI 走 `_papi_qs(freepass_token, randomkey)` + `_session(eteams_id, auth_token)` 统一处理
|
|
179
|
-
- **v0.4.16 之前 SKILL.md 写"拼 listPageToken.data.token"是错的**——listPageToken 是租户平台管理类接口用的;E10 后台业务接口用 freepass token
|
|
180
|
-
12. **系统级 vs 租户级分流(v0.3.0 新增,v0.4.16 改:两个 level 都走 papi)** —— CLI 按 `BASE_URL` 域名自动判断 level(system/tenant),但**两个 level 的业务接口都是 `/papi/file/...`**:
|
|
181
|
-
- `<your-tenant-platform-domain>` → **system**(系统级 / papi / all_teams / 需 sysStorageRule=true)
|
|
182
|
-
- `<your-e10-domain>` → **tenant**(E10 后台 / papi / 当前租户 / 需 sysStorageRule=false)—— **v0.4.16 改:之前误写"api/file/..."**
|
|
183
|
-
- 其它 → 保守默认 `system`
|
|
184
|
-
- `--level system|tenant` 可显式强制
|
|
185
|
-
13. **租户级不支持静态规则(v0.3.0 新增,v0.4.16 保留)** —— 后台管理中心只支持业务规则 + 默认规则;
|
|
186
|
-
`--rule-type 1` 在 tenant 模式下 CLI 直接报"租户级没有静态规则"。
|
|
187
|
-
14. **agent 不得擅自新建 / 改 / 删数据绕开校验(v0.4.15 新加,客户纠错后固化)** ——
|
|
188
|
-
客户回执"好的"**只代表同意本次确认的字段和值**,**不代表**同意 agent 擅自做超出范围的操作(新建 / 修改 / 删除任何数据、修改任何环境配置、调整任何不在确认清单里的字段)。
|
|
189
|
-
- **典型违规场景**(v0.4.15 客户现场纠错):客户说"用默认存储实例" → 校验过不去 → agent 擅自新建一个存储实例(或新建一个测试实例)绕开校验 → **绝对禁止**
|
|
190
|
-
- **正确做法**:
|
|
191
|
-
1. **停下来**,直接告诉客户失败原因(校验过不去的具体异常信息)
|
|
192
|
-
2. **列出 2-3 条可行路径**让客户选(换已有实例 / 客户在自己环境试 / 找二开修后端 bug),**不擅自造数据**
|
|
193
|
-
3. **不**为"测试验证"而新建任何数据(包括"临时"实例、"测试"子规则);实在需要验证,优先用 mock / 静态分析 / HAR 抓包
|
|
194
|
-
- **判断标准**:客户没明确说"建一个新的" / "新建一个绕开" 时,agent **不要**主动做"新建 / 改 / 删"任何数据
|
|
195
|
-
- **覆盖范围**:
|
|
196
|
-
- 存储实例(不能擅自 `instance add` 绕开 `validateStorageInstance` 等校验)
|
|
197
|
-
- 子规则(不能擅自 `rule add` 试各种 source-type 找能过的)
|
|
198
|
-
- 任何其它写操作(instanceType / configInfo / rule / 备份规则 / 附件设置 / 加解密设置 都受这条约束)
|
|
199
|
-
- **例外**(agent 可以自动做的):**只读**操作(`list / show / test / search / explain`)+ **已经在客户确认清单里的写操作**(客户明确"好的" + 已经在确认对话里列出了完整 payload)
|
|
200
|
-
- **如果客户**明确说"你帮我建一个试一下" / "新建一个本地存储实例来跑测试" / "建一个空壳的看看能不能触发"——才算"客户明确同意新建",但仍建议 agent 在执行前再**简短复述一下"我建一个 X 实例,只用于测试,完事我会删"** 让客户二次确认
|
|
79
|
+
1. **写操作必须先确认**——先把「改前值 / 改后影响 / 要改成什么」讲清楚,得到用户明确同意才执行 apply;用户回执「好的」只代表同意确认清单里的字段和值。
|
|
80
|
+
2. **业务规则 vs 静态规则字段互斥**——`rule.save` 的 `rule_info_list` 里:业务规则只放业务/通用字段,静态规则只放静态/通用字段;混用属入参错误,不要发出去试探。
|
|
81
|
+
3. **改完后回读校验**——保存后用 `rule.form`(或 `rule.table`)重拉,比对目标值与服务端真实值,不一致要明确报告未保存成功。
|
|
82
|
+
4. **未指定子字段保留**——只改用户点名的字段,其它保持原值;不要「顺便」改。
|
|
83
|
+
5. **license 未开时规则列表为空**——没有存储规则 license 时查询返回空、保存会被拒;引导用户找管理员开通,不要反复重试。
|
|
84
|
+
6. **改默认规则会脱离系统默认**——改默认规则后不再继承系统初始化的默认存储实例;改之前必须提示这一点。当前没有一键恢复操作,需要回退时引导后台处理。
|
|
85
|
+
7. **agent 不得擅自新建 / 改 / 删数据绕开校验**——
|
|
86
|
+
- **典型违规**:用户说「用默认存储实例」→ 校验过不去 → agent 擅自新建一个实例绕开校验 → **绝对禁止**
|
|
87
|
+
- **正确做法**:① 停下来,直接说明失败原因;② 列出 2-3 条可行路径让用户选(换已有实例 / 用户在自己环境试 / 走后台或二开处理),**不擅自造数据**;③ 不为「测试验证」新建任何数据(包括「临时」实例、「测试」子规则)
|
|
88
|
+
- **判断标准**:用户没明确说「建一个新的」时,不要主动做任何新建 / 修改 / 删除
|
|
89
|
+
- **例外**:只读查询 + 已在确认清单里的写操作可以执行;用户明确要求新建时,执行前简短复述「我建一个 X,只用于测试,完事我删」再二次确认
|
|
201
90
|
|
|
202
91
|
## 对话式交互规则
|
|
203
92
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
-
|
|
211
|
-
-
|
|
212
|
-
-
|
|
213
|
-
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
- **本地**(baseUrl 是 127.*/localhost/0.0.0.0):**不自动起 Chrome**,
|
|
244
|
-
直接提示用户在浏览器登录后从 DevTools 抓三件套复制到 `.env.local`:
|
|
245
|
-
`WEILE_<NAME>_ETEAMSID` / `WEILE_<NAME>_AUTH_TOKEN` / `WEILE_<NAME>_FREEPASS_TOKEN`
|
|
246
|
-
- **(6) 三件套齐全才发业务请求** — `Session.require_auth()` 会校验三件套;缺哪件报具体错误
|
|
247
|
-
- **(7) 登录 / 三件套准备好后立即调 `storage list` 验证**,失败的话让客户重新登录 / 提供三件套
|
|
248
|
-
|
|
249
|
-
3. **查询要简洁**(`list / show / rule show` 时的输出格式)
|
|
250
|
-
- **只返回三样**:**真实租户名**(v0.1.0 改的是系统级,不区分租户,可省)、
|
|
251
|
-
设置项名(中文别名或 DTO 字段名)、当前值
|
|
252
|
-
- **不要**返回:bool 三态展开、enum 解释、字段语义说明、风险提示、
|
|
253
|
-
"建议/可以这么做" 等附加内容 —— 这些只在用户追问时再说
|
|
254
|
-
- 多项查询时一行一项,格式固定:
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
<租户名或「系统级」> · <设置项名>:<当前值>
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
4. **修改前必须三步问清**
|
|
261
|
-
- 步骤 a — **改前的值**:说清楚这一项当前是什么(从 GET 里取,不要瞎猜)
|
|
262
|
-
- 步骤 b — **改后影响**:说清楚改完会影响什么业务、放行/禁止哪些场景、
|
|
263
|
-
触及哪些用户,以及是否会**间接影响其他字段**(如 `encrypted-storage=true`
|
|
264
|
-
后 `sys-file-algorithm` 才生效;改默认规则会脱离系统默认)
|
|
265
|
-
- 步骤 c — **明确询问**:用一句话问"要改成 X 吗?",**得到用户肯定回复
|
|
266
|
-
(y / 改 / 确认 / 好的 之类)才发 POST**,即使 CLI 已带 `--yes` 也不许跳过
|
|
267
|
-
- 三步可以一次消息里说全,但步骤 c 的问句**必须独立成行**,不能藏在
|
|
268
|
-
长段落里让人找不到
|
|
269
|
-
|
|
270
|
-
5. **话术面向客户(非开发)**
|
|
271
|
-
本 skill 的对话对象是**客户/业务人员**,不是开发。所有输出话术:
|
|
272
|
-
- **禁止出现**:CLI key(`rule-name`、`storage-instance` 等)、DTO 字段名
|
|
273
|
-
(`ruleName`、`storageInstanceId` 等)、布尔字面值(`true` / `false`)、
|
|
274
|
-
HTTP 术语(POST / GET / 200 / 401)、内部流程术语("步骤 a / 步骤 b / 步骤 c"、
|
|
275
|
-
"diff"、"回 y / 改"、"落库")、内部命令(`storage rule set`、`--item`)
|
|
276
|
-
- **必须使用**:业务中文名("业务规则"、"默认规则"、"存储实例"、"子目录")、
|
|
277
|
-
业务状态("已启用 / 已停用")、自然语言确认("要改吗?回 改 / 确认 / 好的")
|
|
278
|
-
- 需要看技术细节时(用户主动问"用的什么字段" / "接口是啥" / "为什么改不了"),
|
|
279
|
-
**只在该轮回应**展开,平时一律隐藏
|
|
280
|
-
- 身份信息隐藏 `userId` / `tenantKey` / `ETEAMSID` 这类内部 ID,只说"当前租户"
|
|
281
|
-
或"系统级"
|
|
282
|
-
- 可选自检:`python3 scripts/reply_lint.py --text '...'` 跑一遍话术合规
|
|
283
|
-
|
|
284
|
-
6. **做不到时正确引导**
|
|
285
|
-
客户要改的项**当前工具/接口改不了**时,**不要**静默截断、**不要**发注定失败
|
|
286
|
-
的请求。常见场景:
|
|
287
|
-
- **租户平台实例是系统级只读**:客户说"我想新建一个本地存储实例" →
|
|
288
|
-
CLI 没法做。引导客户去 E10 后台"系统级存储 → 新建",在那边建完再来
|
|
289
|
-
改业务规则里选这个新实例
|
|
290
|
-
- **license 没开**:租户没 `STORAGE_RULE` license 时 `ruleList` 返回空,
|
|
291
|
-
改规则会失败。引导客户找管理员开 license
|
|
292
|
-
- **三件套拿不到**(v0.4.16 重写):远程环境 `storage login` 失败时,引导客户
|
|
293
|
-
`storage login --config <name>` 重新登录;或手动从浏览器 DevTools 抓三件套
|
|
294
|
-
写到 `WEILE_<NAME>_ETEAMSID` + `WEILE_<NAME>_AUTH_TOKEN` + `WEILE_<NAME>_FREEPASS_TOKEN`
|
|
295
|
-
—— 注意 v0.4.16 改:token 来自 freepass 入口 URL(`/sp/file/SysStorageSet/freepass?token=xxx`),
|
|
296
|
-
不是 listPageToken 响应
|
|
297
|
-
- **字段间依赖**:
|
|
298
|
-
- `encrypted-storage=true` 但 `sys-file-algorithm` 为空 → CLI 自动填 `SM4`(门禁)
|
|
299
|
-
- 业务规则下 `sub-directory-type=4`(按部门)但没分部 license → 后端会拒
|
|
300
|
-
- 静态规则 `static-nginx-config` 改完还要"同步到 nginx 服务器"才能生效
|
|
301
|
-
→ 引导客户去 E10 后台"系统级存储 → 静态文件规则"点"同步"按钮
|
|
302
|
-
- **改默认规则的副作用**:脱离系统默认(前端弹窗原话),要回退用
|
|
303
|
-
`storage rule reset-default`
|
|
304
|
-
- **后端返回致命错误**(已知):不重试,直接告诉客户失败原因 + 正确路径
|
|
305
|
-
- 话术模板:
|
|
306
|
-
"这里改不了:<原因>。需要去<正确路径>那里先做<前置操作>。
|
|
307
|
-
在那边保存后,回到这里再让我帮你改存储设置里的对应项,
|
|
308
|
-
就能改到你想要的值了。"
|
|
309
|
-
|
|
310
|
-
7. **改存储规则前:先列当前所有项 + 逐项说明,按 level 分流(v0.4.2 客户规则 2,v0.4.4 补租户级,v0.4.14 补新建子规则)**
|
|
311
|
-
改存储规则时按 level 走不同流程,**都先列当前所有项再问客户改哪些**:
|
|
312
|
-
|
|
313
|
-
**A. 系统级**(租户平台):
|
|
314
|
-
- 调 `storage rule show --default` 拉出"**业务文件存储规则**" + "**静态文件存储规则**"两套全部当前值
|
|
315
|
-
- 把每一项用**业务中文名**列出来(参考 `setting-storage-docs-summary.md` 第 1 节"7 个标识目录"和 `setting-storage-field-map.md` 13 个字段),并**逐项说明这一项是控制什么的**(业务含义 + 改了会影响哪些业务)
|
|
316
|
-
- **只**改客户说想改的项;其它项保持原值(门禁 7:未指定子字段保留)
|
|
317
|
-
- 不要在列出当前值的同时"顺便"推荐改某项;客户没问就不主动建议
|
|
318
|
-
|
|
319
|
-
**B. 租户级**(E10 后台管理中心,v0.4.4 客户规则 2 重点):
|
|
320
|
-
- 调 `storage rule show --default` 拉**当前租户的默认存储规则**详细信息(含里面挂的存储实例的【名称 / 类型 / 启用状态】)
|
|
321
|
-
- 调 `storage rule list` 拉**当前租户的所有存储子规则**(`--name` 可选模糊),**每条规则都要给客户展示完整详情**:
|
|
322
|
-
- 规则名称 / 启用状态 / 文件来源 / 子目录类型
|
|
323
|
-
- **这条规则挂的存储实例的【名称 / 类型 / 启用状态】**(客户要知道这条规则最终落到哪个实例)
|
|
324
|
-
- 然后告诉客户"默认规则 + N 条子规则"的全景,问要改哪条
|
|
325
|
-
- 改的是"默认规则" → 调 `storage rule set --default --item ...`
|
|
326
|
-
- 改的是"子规则 id=N" → 调 `storage rule set --id N --item ...`
|
|
327
|
-
- **绝不**只看默认规则就跳过子规则——子规则可能"挂的实例"跟默认规则完全不一样(按文件来源分部)
|
|
328
|
-
|
|
329
|
-
**C. 租户级 新建子规则**(v0.4.14 新加,v0.4.15 字段含义 + 保存关系搞清楚后固化,v0.4.15 第二次修:客户截图实证"选了本地存储就显示压缩/加密"——前端不是固定 6 字段,是按存储实例类型动态显示):
|
|
330
|
-
- **走 `storage rule add` CLI**(不是 `rule set`),走 `POST /api/file/storage/rule/saveData` ADD 路径——传 `ruleInfoList` 含 1 条**不带 id** 的 `StoRuleInfo`
|
|
331
|
-
- **前端"新建存储规则"页面字段是动态的,按"存储实例"类型切换**(v0.4.15 客户截图 + 第二次纠错,`useRuleDetail.tsx:557-566` `onFormChange` 里 `formStore.setHide(filedKey, isNotLocal)` 决定显隐):
|
|
332
|
-
- **基础 6 字段(无论选什么存储实例都显示)**:
|
|
333
|
-
- 规则名
|
|
334
|
-
- 文件来源(前端只让用户选"模块 / 文件夹"两种——分部/部门被前端 `fileSourceTypeOptions` 注释掉,见 `constants.tsx:221-226`)
|
|
335
|
-
- 存储实例
|
|
336
|
-
- 存储路径
|
|
337
|
-
- 子目录
|
|
338
|
-
- 启用
|
|
339
|
-
- **本地存储 专属字段**(选了本地存储才出现):
|
|
340
|
-
- **压缩存储**(`compressedStorage` Switch 开关)
|
|
341
|
-
- **加密存储**(`encryptedStorage` Switch 开关)
|
|
342
|
-
- **加密算法**(`sysFileAlgorithm`,开了"加密存储"才出现,是个 Icon 按钮点开弹窗选,默认 `SM4`,可选 `AES-256`)
|
|
343
|
-
- **非本地存储(腾讯 / 阿里 / 华为 / S3 / FastDFS / HDFS)**:基础 6 字段,**不**显示压缩/加密/算法(云存储不需要)
|
|
344
|
-
- **前端动态显隐逻辑**(`useRuleDetail.tsx:558-566`):
|
|
345
|
-
```ts
|
|
346
|
-
if ('storageInstance' in value) {
|
|
347
|
-
const instanceType = value.storageInstance[0]?.instanceType;
|
|
348
|
-
const isNotLocal = instanceType !== InstanceType.LOCAL;
|
|
349
|
-
// 存储路径,子目录,压缩存储,加密存储 在非本地存储下需要隐藏
|
|
350
|
-
['compressedStorage', 'encryptedStorage'].forEach(filedKey => formStore.setHide(filedKey, isNotLocal))
|
|
351
|
-
// 本地存储 且还没选择子目录时 子目录页默认更新为 "按【天】生成子目录"
|
|
352
|
-
if (!formStore.getFormDatas()?.subDirectoryType && !isNotLocal) {
|
|
353
|
-
formStore.updateDatas({subDirectoryType: '2'});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
- **v0.4.15 第一次改错了:以为"租户级子规则 = 6 字段固定",是看客户截图"还没选存储实例"时的状态得出的**——客户第二次纠错明确:选了本地存储就有压缩/加密/算法 3 个。**正确认知**:基础 6 + 选了本地再加 2-3 个 = 6~9 字段之间
|
|
358
|
-
- **`fileSourceType` 实际值是 1/2/3/4**(v0.4.15 修 v0.4.14 错误:v0.4.14 SKILL.md 写 0/1/2/3,但后端 `FileSourceTypeEnum` 真实值是 1=模块 2=文件夹 3=分部 4=部门 -1=默认):
|
|
359
|
-
- `fileSourceType=1`(模块):`fileSourceValue` = **moduleFlag 英文**(如 `"document"`),不是模块中文名"文档"——后端 `searchModuleStrToEntry` 用它去 `fileModuleBrowser.getModuleMap()` 里查,找不到就 `filter(Objects::nonNull)` 静默丢弃
|
|
360
|
-
- `fileSourceType=2`(文件夹):`fileSourceValue` = **文档中心目录 id**(数字字符串,多个用逗号分隔)
|
|
361
|
-
- `fileSourceType=3`(分部):`fileSourceValue` = **分部 id**(数字)
|
|
362
|
-
- `fileSourceType=4`(部门):`fileSourceValue` = **部门 id**(数字)
|
|
363
|
-
- **`fileSourceValue` 怎么传值**(v0.4.15 关键认知,前端 + 后端双向验证):
|
|
364
|
-
- **前端 Browser(type=module)** 调 `/api/file/common/browser/complete/module` 拿 `Map<moduleFlag, moduleName>`,每条 module 包装成 `{id: moduleFlag, title: moduleFlag, content: moduleName}`(HAR 实测确认)
|
|
365
|
-
- 前端保存时 `useRuleDetail.tsx:346` `(fileSource || []).map((item: any) => item.id).join(',')` —— **`item.id` = moduleFlag 英文**,不是中文 moduleName
|
|
366
|
-
- **后端 `saveGeneralRule` → `splitFileSourceValue` → case MODULE**(`StoRuleServiceImpl.java:1146-1153`):`searchModuleStrToEntry(fileSourceValue)` 在 `getModuleMap()` 里查,**找到就 `setFileSourceStr(moduleFlag)` 入库,找不到就 filter 掉(静默丢弃)**
|
|
367
|
-
- **反推**:传中文 moduleName(如"文档")→ `getModuleMap()` 找不到 → 被 filter 掉 → 看似保存成功但 `fileSourceValue` 入库为空(v0.4.14 已踩此坑)
|
|
368
|
-
- **给必填值的话术**(v0.4.15 修正版 + 本地存储专属字段):
|
|
369
|
-
- 基础 6 字段:规则名 / 文件来源 / 存储实例 / 存储路径 / 子目录 / 启用
|
|
370
|
-
- **如果选本地存储**:追加问"压缩存储"开不开(默认关)+ "加密存储"开不开(默认关)+ 开了加密就问"加密算法"(默认 `SM4`,可选 `AES-256`)
|
|
371
|
-
- **如果选云存储**:不追问压缩/加密/算法
|
|
372
|
-
- **模块对应关系速查表**(v0.4.15 HAR 实测当前租户 license,常见模块,跨租户可能有出入):
|
|
373
|
-
|
|
374
|
-
| 业务中文名 | moduleFlag(英文) |
|
|
93
|
+
1. **查询要简洁**
|
|
94
|
+
- 只返回三样:层级(系统级 / 当前租户)、设置项名(业务中文名)、当前值
|
|
95
|
+
- 不要主动展开 enum 解释、字段语义、风险提示、建议——用户追问再说
|
|
96
|
+
- 多项查询一行一项:`<层级> · <设置项名>:<当前值>`
|
|
97
|
+
|
|
98
|
+
2. **修改前必须三步问清**
|
|
99
|
+
- **改前的值**:说清这一项当前是什么(从查询结果取,不猜测)
|
|
100
|
+
- **改后影响**:说清改完影响什么业务、是否连带影响其他字段(如开启加密存储后加密算法才生效;改默认规则会脱离系统默认)
|
|
101
|
+
- **明确询问**:一句话问「要改成 X 吗?」,**得到肯定回复才执行**;问句独立成行,不藏在长段落里
|
|
102
|
+
- 三步可以在一条消息里说全,但询问句必须独立成行
|
|
103
|
+
|
|
104
|
+
3. **话术面向客户(非开发)**
|
|
105
|
+
- 禁止出现:DTO 字段名、布尔字面值、HTTP 术语、内部命令与操作 ID
|
|
106
|
+
- 必须使用:业务中文名(「业务规则」「默认规则」「存储实例」「子目录」)、业务状态(「已启用 / 已停用」)、自然语言确认
|
|
107
|
+
- 隐藏内部 ID(用户 ID / 租户标识 / 会话凭证),只说「当前租户」或「系统级」
|
|
108
|
+
|
|
109
|
+
4. **做不到时正确引导**(不要静默截断,不要发注定失败的请求)
|
|
110
|
+
- **实例是只读的**:用户要新建/改存储实例 → 引导去后台「系统级存储」页面,建完再来改业务规则里选这个新实例
|
|
111
|
+
- **license 没开**:规则列表为空、保存失败 → 引导找管理员开 license
|
|
112
|
+
- **字段间依赖**:开启加密存储但算法为空 → 默认按 SM4;子目录「按部门」需要对应 license,否则后端拒绝;静态规则的 nginx 配置改完还要在后台「静态文件规则」点「同步」才生效
|
|
113
|
+
- **改默认规则的副作用**:脱离系统默认继承,改前提示
|
|
114
|
+
- **后端返回致命错误**:不重试,直接告诉用户失败原因 + 正确路径
|
|
115
|
+
- 话术模板:「这里改不了:<原因>。需要去<正确路径>那里先做<前置操作>。在那边保存后,回到这里再让我帮你改存储设置里的对应项,就能改到你想要的值了。」
|
|
116
|
+
|
|
117
|
+
5. **改存储规则前:先列当前所有项 + 逐项说明**
|
|
118
|
+
- 先拉当前规则(系统级用 `rule.form` 看默认业务 + 静态两套;租户级用 `rule.form` 看默认规则、`rule.table` / `rule.search` 看全部子规则),**每条规则都要展示完整详情**:规则名称 / 启用状态 / 文件来源 / 子目录类型 / 挂的存储实例(名称 / 类型 / 启用状态)
|
|
119
|
+
- 用**业务中文名**逐项说明这一项控制什么、改了影响哪些业务(参考 `setting-storage-docs-summary.md` 第 1 节「7 个标识目录」和 `setting-storage-field-map.md` 13 个字段)
|
|
120
|
+
- **只**改用户点名的项;其它保持原值;列出当前值时不要「顺便」推荐改动
|
|
121
|
+
- **绝不**只看默认规则就跳过子规则——子规则挂的实例可能跟默认规则完全不一样(按文件来源覆盖)
|
|
122
|
+
|
|
123
|
+
6. **新建子规则的字段**
|
|
124
|
+
- 走 `rule.save`(`rule_info_list` 里放**不带 id** 的一条规则信息)
|
|
125
|
+
- 页面字段随存储实例类型动态变化:**基础字段**为规则名 / 文件来源 / 存储实例 / 存储路径 / 子目录 / 启用;**选本地存储**再加压缩存储、加密存储、加密算法(开启加密才出现,默认 SM4);**云存储**不显示压缩/加密/算法
|
|
126
|
+
- **文件来源类型取值**(不要写成 0/1/2/3):`1`=模块 `2`=文件夹 `3`=分部 `4`=部门 `-1`=默认
|
|
127
|
+
- 模块:`fileSourceValue` 传**模块标识英文**(如 `"document"`),不是中文名——传中文会保存「看似成功」但实际被丢弃
|
|
128
|
+
- 文件夹:传文档中心目录 ID(数字字符串,多个逗号分隔);分部/部门:传对应数字 ID
|
|
129
|
+
- 模块标识速查(跨环境可能有出入,以用户在页面上选到的为准):
|
|
130
|
+
|
|
131
|
+
| 业务中文名 | 模块标识 |
|
|
375
132
|
|---|---|
|
|
376
|
-
|
|
|
133
|
+
| 知识管理(「文档」) | `document` |
|
|
377
134
|
| 公文管理 | `odoc` |
|
|
378
135
|
| 流程 | `workflow` |
|
|
379
136
|
| 邮件 | `email` |
|
|
@@ -381,223 +138,61 @@ CLI 改规则时"选存储实例"指的就是这些。完整字段差异见
|
|
|
381
138
|
| 协作 | `cowork` |
|
|
382
139
|
| 日程 | `calendar` |
|
|
383
140
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
-
|
|
389
|
-
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
-
|
|
402
|
-
-
|
|
403
|
-
-
|
|
404
|
-
-
|
|
405
|
-
-
|
|
406
|
-
-
|
|
407
|
-
|
|
408
|
-
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
客户问"现在系统是什么存储"/"现在业务文件存哪了"/"现在用的哪套存储"等**纯查询场景**(不是要改),必须**综合查三处**再综合回答:
|
|
419
|
-
|
|
420
|
-
- **A. 查系统级业务文件存储规则** → `storage rule show --level system --default` 拿"业务文件最终落点"(含挂的存储实例 + 子目录规则 + 存储路径)
|
|
421
|
-
- **B. 查系统级静态文件存储规则** → 走 `getStorageInstance` 拿"静态资源最终落点的存储实例详情"(含存储路径/桶/端点等)
|
|
422
|
-
- **C. 查当前租户的存储信息** → `storage rule show --level tenant --default` 拿"租户级默认规则挂的实例"
|
|
423
|
-
|
|
424
|
-
**输出格式硬约束(v0.4.6 客户原话)**:
|
|
425
|
-
- **禁止出现 ID**:任何 instance.id / rule.id / usageType 等**纯内部状态字段都不能出现**——这些是开发用字段,不是客户要的"现在用什么"
|
|
426
|
-
- **必须包含业务信息**:每个落点要包含 **存储类型 / 实例名 / 桶名(对象存储) / 区域 / 终端节点 / 存储路径(本地) / 子目录规则**——客户问"现在用什么"就是要这些业务信息,不要只回个名字
|
|
427
|
-
- **分段写但不用编号**:业务文件 / 静态文件 / 租户是否覆盖三段分开写,每段一段自然语言
|
|
428
|
-
- **去重规则**:C 跟 A/B 一致时,**不单独列 C 那一行**——客户问的是"系统是什么存储",租户级跟系统级一致时只说一次
|
|
429
|
-
|
|
430
|
-
**标准输出模板(v0.4.6 → v0.4.7 → v0.4.8 → v0.4.9 → v0.4.10 → v0.4.11 markdown bullet 强制换行)**:
|
|
431
|
-
```markdown
|
|
432
|
-
当前系统存储概况:
|
|
433
|
-
|
|
434
|
-
- 业务文件(租户业务 / 系统公共 / 临时文件)
|
|
435
|
-
- 存储类型:<腾讯云存储/阿里云存储/...>
|
|
436
|
-
- 存储实例:<实例名>
|
|
437
|
-
- 桶:<桶名> ← 对象存储才有
|
|
438
|
-
- 区域:<区域> ← 华为云在终端节点里,可不填
|
|
439
|
-
- 终端节点:<终端节点> ← 对象存储才有
|
|
440
|
-
- 子目录规则:按【...】自动生成(YYYY/MM/DD)
|
|
441
|
-
|
|
442
|
-
- 静态文件
|
|
443
|
-
- 存储类型:<本地存储/...>
|
|
444
|
-
- 存储实例:<实例名>
|
|
445
|
-
- 存储路径:<路径> ← 本地存储才有
|
|
446
|
-
|
|
447
|
-
- 当前租户
|
|
448
|
-
- <没有单独覆盖,跟系统级一致> ← 跟 A/B 一致时
|
|
449
|
-
- <单独挂的:<类型> - <实例名>...> ← 跟 A/B 不一致时
|
|
450
|
-
```
|
|
451
|
-
- **格式说明(v0.4.11 关键修复)**:**用 markdown `-` bullet 强制每项独立成行**——所有现代 chat 客户端都会把 `- ` 开头识别为列表项,**强制独占一行**,不会被"压缩单换行"合并
|
|
452
|
-
- 顶层 3 段(业务/静态/租户)用 `-`(顶格 bullet)
|
|
453
|
-
- 段内每个属性用 ` - `(2 空格缩进 bullet)
|
|
454
|
-
- 段间用**单空行**分隔
|
|
455
|
-
- 桶 / 区域 / 终端节点这三项仅在"对象存储(腾讯/阿里/华为/S3)"时才有,本地存储写"存储路径"即可
|
|
456
|
-
- 区域对华为云可不填(信息在终端节点里,见 v0.4.2 硬性门禁 8)
|
|
457
|
-
- 客户问"列出来本地环境的存储信息"实际就是"现在用什么"——不要把全部 21 个实例平铺出来,只讲"正在用的"
|
|
458
|
-
- **反例**(v0.4.6 客户截图标红的错误):表格里出现 id / usageType 列;正文里出现 `storage show <id>` 命令;罗列所有 21+15 个实例——这些都是开发视角,不是客户视角
|
|
459
|
-
- **反例**(v0.4.7 客户反馈):v0.4.6 用"长段落"写法(214 字符挤成 4 段),客户希望**每个属性独立成行**
|
|
460
|
-
- **反例**(v0.4.8 客户反馈):v0.4.7 用"2 空格缩进"写法,客户希望**无缩进直接 key:value**(类似 `存储类型:` 这种示例),让每行更扁更易扫
|
|
461
|
-
- **反例**(v0.4.9 客户反馈):v0.4.8 用"业务文件: / 静态文件: / 当前租户:"这种冒号分段,客户希望用 `###` 三级标题让 3 段更醒目
|
|
462
|
-
- **反例**(v0.4.10 客户反馈):v0.4.9 用 `###` 三级标题 markdown,**某些客户端不渲染 markdown 标题**;v0.4.10 改纯换行,但**chat 客户端会压缩单换行成空格**,多个 key:value 还是挤在一行
|
|
463
|
-
- **反例**(v0.4.11 客户反馈):v0.4.10 纯换行在 chat 客户端被压成空格,key:value 还是挤一行。v0.4.11 用 markdown `-` bullet——列表项在所有 chat 客户端都**强制独占一行**,不会被压缩
|
|
141
|
+
- 必填值话术:先要基础 6 项;用户选本地存储再追问压缩/加密(默认关),开了加密追问算法(默认 SM4);云存储不追问。
|
|
142
|
+
|
|
143
|
+
7. **改/选存储实例:先列已有 + 让用户选**
|
|
144
|
+
- 用 `instance.list` 列出已有实例,每个给三要素:**名称 / 类型(本地/腾讯/阿里/华为/S3/FastDFS/HDFS)/ 启用状态**
|
|
145
|
+
- 问用户「选已有 / 去后台新建」——不要直接跳到新建;用户选已有时用 `instance.get` 给详情确认后再改规则里的实例字段
|
|
146
|
+
- 实例写入(新建/修改/删除、连通测试)当前不支持,一律引导后台
|
|
147
|
+
|
|
148
|
+
8. **查询「现在系统是什么存储」:综合多处回答**
|
|
149
|
+
- 系统级默认规则(业务 + 静态)→ `rule.form`;静态落点实例详情 → `instance.get`;租户级默认规则 → `rule.form`
|
|
150
|
+
- 输出格式硬约束:**禁止出现 ID**(实例 ID / 规则 ID 等内部字段);**必须包含业务信息**(存储类型 / 实例名 / 桶名 / 区域 / 终端节点 / 存储路径 / 子目录规则);业务文件、静态文件、租户是否覆盖分三段写
|
|
151
|
+
- 租户级与系统级一致时不单独列租户段
|
|
152
|
+
- **标准输出模板**(用 markdown `-` 列表,每项独立成行):
|
|
153
|
+
|
|
154
|
+
```markdown
|
|
155
|
+
当前系统存储概况:
|
|
156
|
+
|
|
157
|
+
- 业务文件(租户业务 / 系统公共 / 临时文件)
|
|
158
|
+
- 存储类型:<腾讯云存储/本地存储/...>
|
|
159
|
+
- 存储实例:<实例名>
|
|
160
|
+
- 桶:<桶名> ← 对象存储才有
|
|
161
|
+
- 区域:<区域> ← 华为云在终端节点里,可不填
|
|
162
|
+
- 终端节点:<终端节点> ← 对象存储才有
|
|
163
|
+
- 子目录规则:按【...】自动生成
|
|
164
|
+
|
|
165
|
+
- 静态文件
|
|
166
|
+
- 存储类型:<本地存储/...>
|
|
167
|
+
- 存储实例:<实例名>
|
|
168
|
+
- 存储路径:<路径> ← 本地存储才有
|
|
169
|
+
|
|
170
|
+
- 当前租户
|
|
171
|
+
- <没有单独覆盖,跟系统级一致> ← 跟系统级一致时
|
|
172
|
+
- <单独挂的:<类型> - <实例名>...> ← 不一致时
|
|
173
|
+
```
|
|
174
|
+
- 对象存储写「桶 / 区域 / 终端节点」,本地存储写「存储路径」;不要把全部实例平铺出来,只讲「正在用的」。
|
|
464
175
|
|
|
465
176
|
## 宿主
|
|
466
177
|
|
|
467
|
-
CLI
|
|
468
|
-
|
|
469
|
-
```text
|
|
470
|
-
python3 scripts/setting_storage.py <cmd> [args]
|
|
471
|
-
```
|
|
472
|
-
|
|
178
|
+
CLI 入口:`weaver-work-cli caizhilian run caizhilian.setting-storage.<operation>`(操作清单见 SKILL.md 路由表)。
|
|
473
179
|
|
|
474
|
-
##
|
|
180
|
+
## 与设置系列其它模块的关系
|
|
475
181
|
|
|
476
|
-
|
|
182
|
+
四个设置模块互相独立,同一环境可共存:
|
|
477
183
|
|
|
478
|
-
| |
|
|
184
|
+
| | 附件设置 | 加解密设置 | 备份设置 | 存储设置 |
|
|
479
185
|
|---|---|---|---|---|
|
|
480
|
-
| 改的页面 | 文件设置 → 附件设置 | 文件设置 → 加解密设置 | 文件设置 → 备份设置 | 租户平台 → 文件存储设置 |
|
|
481
|
-
|
|
|
482
|
-
|
|
|
483
|
-
| 作用范围 | 租户 | 租户 | 租户 | **系统级(all_teams)** |
|
|
484
|
-
| CLI 软链 | `setting-attach` | `setting-encrypt` | `setting-backup` | **`storage`** |
|
|
485
|
-
| 共享 | 互相独立 `.env.local`;可共享同一 ETEAMSID(同 SSO 域) |
|
|
486
|
-
|
|
487
|
-
## 版本
|
|
488
|
-
|
|
489
|
-
- **0.4.16**(2026-08-17)**auth 模型全错重写(基于客户 2026-08-17 发的两个 HAR 文件实证)**。修正:
|
|
490
|
-
- **之前 v0.2.0 章节 3 错了**:真实业务接口 URL 拼的 `token=` 不是 listPageToken.data.token,是 freepass token(来自 `/sp/file/SysStorageSet/freepass?token=xxx` 入口)
|
|
491
|
-
- **之前 v0.3.0 章节错了**:租户级实际是 `/papi/file/...`,不是 `/api/file/...`(HAR 里一个 `/api/` 都没有)
|
|
492
|
-
- **之前章节 2 错了**:只抓 ETEAMSID 不够,真实要三件套 `ETEAMSID` + `authToken`(JWT cookie)+ `freepass token`(URL 参数)
|
|
493
|
-
- **之前章节 11 错了**:业务接口还多一个 `randomkey_xxxx`(CSRF 防护,每次请求生成一对)
|
|
494
|
-
- 新 env vars:`WEILE_<NAME>_AUTH_TOKEN` + `WEILE_<NAME>_FREEPASS_TOKEN`(之前 `WEILE_<NAME>_TOKEN` 已废弃)
|
|
495
|
-
- 删 `fetch_page_token` / `_papi_qs(token)` 的旧用法;加 `generate_randomkey()` 和 `fetch_auth_cookies()`
|
|
496
|
-
- `Session.require_auth()` 三件套校验;`require_token()` 兼容只校验 freepass
|
|
497
|
-
- `cmd_login` 重写:让用户从租户平台点链接到 E10 后台再抓三件套
|
|
498
|
-
- 所有 storage_api 函数加 `auth_token` / `freepass_token` 参数(替换 `token`)
|
|
499
|
-
- `auth-flow.md` 完整记录 HAR 实证 + 5 处旧文档错误 + 修方向
|
|
500
|
-
- 现有客户已建的 `webapp` config 需要重新 `storage login` 拿新三件套
|
|
501
|
-
- **0.4.15**(2026-08-10)**修子规则字段含义 + fileSourceType 取值 + 本地存储显示压缩/加密/算法**。
|
|
502
|
-
- **0.4.14**(2026-08-09)**新建/删除子规则**。
|
|
503
|
-
- **0.4.13**(2026-08-09)**7 种存储类型 defaultField 精准化**。
|
|
504
|
-
- **0.4.12**(2026-08-09)**完整话术模板库**。
|
|
505
|
-
- **0.4.11**(2026-08-09)**对话式输出格式 markdown bullet 强制换行**。
|
|
506
|
-
- **0.4.2**(2026-08-08)**对象存储凭证字段路由**(凭证必须嵌套 `storageConfigInfo`)。
|
|
507
|
-
- **0.4.0**(2026-08-08)**开放实例写操作**(`instance add / delete`)。
|
|
508
|
-
- **0.3.0**(2026-08-09)**租户级接入**(**v0.4.16 改:当时写的 `/api/file/storage/...` 是错的,实际是 `/papi/file/...`**)。
|
|
509
|
-
- **0.2.0**(2026-08-09)**鉴权补全**(**v0.4.16 改:当时写的 listPageToken 自动获取 + URL 拼 token 模型是错的,真实是 freepass token**)。
|
|
510
|
-
- **0.1.0**(2026-08-06)首次创建。覆盖租户平台(papi / all_teams)「存储实例 +
|
|
511
|
-
存储规则」的系统级查看 + 规则改写。13 个 rule 子字段全部走 CLI 别名 + 中文 + DTO 驼峰三套。
|
|
512
|
-
|
|
513
|
-
版本号规则 `x.y.z`:
|
|
514
|
-
- **x 升** — 大重构(GET/POST 模式变化、DTO 结构变化、字段大幅增删)
|
|
515
|
-
- **y 升** — 新增字段、新增命令、新增子模块
|
|
516
|
-
- **z 升** — 文案修正、门禁澄清、依赖注补充、不改行为的小修
|
|
517
|
-
|
|
518
|
-
## 计划中的下一版
|
|
519
|
-
|
|
520
|
-
- **0.5.0** —— 批量启停规则(`rule open --batch --ids 1,2,3 --on`)
|
|
521
|
-
- **0.6.0** —— 规则按"文件来源"browser 化(用 `list_storage_instance_options`
|
|
522
|
-
+ 后端的 `FileModuleBrowser` 给出可选 id 列表,agent 直接对话式问"我帮
|
|
523
|
-
你选了文件来源 X,要不要确认?")
|
|
524
|
-
# 接口协议
|
|
525
|
-
|
|
526
|
-
v0.1.0 范围:仅**租户平台 / 系统级**(papi + `all_teams`)。weapp 后台的租户级设置走 v0.2.0。
|
|
527
|
-
|
|
528
|
-
## 端点
|
|
529
|
-
|
|
530
|
-
### 存储实例
|
|
531
|
-
|
|
532
|
-
| 操作 | 方法 | URL | 入参 | 出参(data 字段) |
|
|
533
|
-
|---|---|---|---|---|
|
|
534
|
-
| 列实例 | `POST` | `{base}/papi/file/storage/listStorageInstance` | `{pageNo, pageSize}` | `{columns, operates, data[], total, current}` |
|
|
535
|
-
| 单实例详情 | `POST` | `{base}/papi/file/storage/getStorageInstance` | `{id, instanceType?}` | `{weaForm, encFieldList, readOnly}` |
|
|
536
|
-
| 保存实例 | `POST` | `{base}/papi/file/storage/saveStorageInstance` | `StorageInstanceConfigParam` | `{code, msg}` |
|
|
537
|
-
| 测试连接 | `POST` | `{base}/papi/file/storage/testConnect` | `StorageConfigParam + StorageConfigInfo` | `true / false` |
|
|
538
|
-
|
|
539
|
-
### 存储规则
|
|
186
|
+
| 改的页面 | 文件设置 → 附件设置 | 文件设置 → 加解密设置 | 文件设置 → 备份设置 | 租户平台 → 文件存储设置 / 后台文件设置 → 存储设置 |
|
|
187
|
+
| 作用范围 | 租户 | 租户 | 租户 | 系统级 + 租户级 |
|
|
188
|
+
| 本文档 | `setting-attach.md` | `setting-encrypt.md` | `setting-backup.md` | `setting-storage.md` |
|
|
540
189
|
|
|
541
|
-
|
|
542
|
-
|---|---|---|---|---|
|
|
543
|
-
| 拉规则表单 | `GET` | `{base}/papi/file/storage/rule/frontComp/ruleForm?defaultRule=true&id=N&sysStorageRule=true` | query | `{defaultFsRuleWeaForm, fsRuleWeaForm, defaultStaticRuleWeaForm, ...}` |
|
|
544
|
-
| 保存规则 | `POST` | `{base}/papi/file/storage/rule/saveData` | `{defaultRule, ruleInfoList[]}` | `{ruleInfoList[]}` |
|
|
545
|
-
| 改顺序 | `POST` | `{base}/papi/file/storage/rule/saveOrder` | `{ruleIdList[]}` | `{}` |
|
|
546
|
-
| 改启用 | `POST` | `{base}/papi/file/storage/rule/saveOpen` | `{ruleInfoList[]}` | `{}` |
|
|
547
|
-
| 删除 | `POST` | `{base}/papi/file/storage/rule/delete` | `{ruleIdList[]}` | `{}` |
|
|
548
|
-
| 高级搜索 | `POST` | `{base}/papi/file/storage/rule/search` | `{conditionArr[], ruleType?}` | `{ruleInfoList[]}` |
|
|
549
|
-
| 拉规则表 | `GET` | `{base}/papi/file/storage/rule/frontComp/ruleTable` | (无) | `{defaultFsRuleWeaForm, fsRuleTable, ...}` |
|
|
190
|
+
## 接口行为备查
|
|
550
191
|
|
|
551
|
-
|
|
192
|
+
CLI 封装了后端接口,Agent 不手写请求体;以下是便于理解行为的备查信息:
|
|
552
193
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
```
|
|
560
|
-
Cookie: ETEAMSID=<id>
|
|
561
|
-
```
|
|
562
|
-
|
|
563
|
-
papi 端点都带 `?wea_link_keep_freepass=1&tenant_langType=zh_CN` 通用 query(browser 端点额外要 `token`)。
|
|
564
|
-
|
|
565
|
-
## POST 注意事项
|
|
566
|
-
|
|
567
|
-
1. **租户平台实例是「系统级只读」**:v0.1.0 CLI **不开放** `saveStorageInstance` 写操作;
|
|
568
|
-
`StorageConfigController.java:84` 写操作走 `StorageConfigManagerImpl.saveStorageInstance`,
|
|
569
|
-
`StorageConfigInfo` 字段值是租户级 / 系统级混合的;租户平台只该有读权限
|
|
570
|
-
2. **业务规则 vs 静态规则同时改**:调用 `rule/saveData` 时 `defaultRule=true` 会触发
|
|
571
|
-
`StoRuleServiceImpl.java:140-170` 的 saveDefaultRule / saveStaticDefaultRule,
|
|
572
|
-
一次请求可同时改两条(业务 + 静态),按 `ruleType` 字段路由
|
|
573
|
-
3. **`staticNginxConfig` 是嵌套 JSON 子字段**:存在 `StoRuleInfo.expandRuleConfig`(JSON 字符串)里;
|
|
574
|
-
改 nginx 配置 → CLI 走子字段 merge,不能整段覆盖
|
|
575
|
-
4. **改默认规则会脱离系统默认**:见 `useRuleDetail.tsx:374` 前端弹窗原话
|
|
576
|
-
"修改后将不再继承系统初始化的默认存储实例"
|
|
577
|
-
5. **保存后要 GET 校验**:`StoRuleServiceImpl.saveRule` 不回显完整对象,只回 `ruleInfoList`;
|
|
578
|
-
CLI 改完要 `GET ruleForm` 重新拉一遍
|
|
579
|
-
6. **`canSelect=false` 的实例不可选**:前端会显示 tooltip "系统级存储实例,不允许修改";
|
|
580
|
-
CLI 改规则时如果 `storage-instance` 选了这类实例会被前端拒(实际后端按 usageType 过滤)
|
|
581
|
-
|
|
582
|
-
## 后端实现位置
|
|
583
|
-
|
|
584
|
-
- Controller(租户平台):
|
|
585
|
-
- `eteams-file/src/main/java/com/weaver/teams/file/e10/mvc/web/storageconfig/PublicStorageConfigController.java`
|
|
586
|
-
- `eteams-file/src/main/java/com/weaver/teams/file/e10/mvc/web/storagerule/PublicStoRuleController.java`
|
|
587
|
-
- `eteams-file/src/main/java/com/weaver/teams/file/e10/mvc/web/storagerule/PublicStoRuleFrontCompController.java`
|
|
588
|
-
- Service:`eteams-file/src/main/java/com/weaver/teams/file/e10/service/web/storagerule/impl/StoRuleServiceImpl.java`
|
|
589
|
-
- `StoRuleFrontCompServiceImpl.java`(表单渲染)
|
|
590
|
-
- DTO:
|
|
591
|
-
- `eteams-file/src/main/java/com/weaver/teams/file/e10/param/StorageInstanceConfigParam.java`
|
|
592
|
-
- `eteams-file/src/main/java/com/weaver/teams/file/e10/entity/storagerule/StoRuleParam.java`(含 `StoRuleInfo`)
|
|
593
|
-
- 枚举:
|
|
594
|
-
- `eteams-file-client/src/main/java/com/weaver/eteams/file/client/file/enums/storage/StoInstanceTypeEnum.java`(7 种存储类型)
|
|
595
|
-
- `eteams-storage/src/main/java/com/weaver/teams/storage/constant/FileStorage.java`(运行时实例)
|
|
596
|
-
- 实体:
|
|
597
|
-
- `eteams-storage/src/main/java/com/weaver/teams/storage/entity/StorageConfigInfo.java`(每种存储类型的字段集)
|
|
598
|
-
- 前端:
|
|
599
|
-
- `weapp-file/src/components/pc/FileSet/components/StorageSet/index.tsx`
|
|
600
|
-
- `weapp-file/src/components/pc/FileSet/components/StorageSet/StorageInstance.tsx`(实例)
|
|
601
|
-
- `weapp-file/src/components/pc/FileSet/components/StorageSet/StorageRules.tsx`(规则列表)
|
|
602
|
-
- `weapp-file/src/components/pc/FileSet/components/StorageSet/hooks/useInstanceDetail.tsx`(实例编辑弹窗)
|
|
603
|
-
- `weapp-file/src/components/pc/FileSet/components/StorageSet/hooks/useRuleDetail.tsx`(规则编辑弹窗)
|
|
194
|
+
- 存储实例:列表 / 详情查询(敏感字段掩码);实例写入与连通测试当前不开放
|
|
195
|
+
- 存储规则:表单 / 表 / 高级搜索查询;保存(`defaultRule=true` 时会同时处理默认业务规则与默认静态规则)、顺序、启停、删除
|
|
196
|
+
- 静态规则的 nginx 配置是嵌套配置子字段,保存时按子字段合并,不能整段覆盖
|
|
197
|
+
- 保存接口不回显完整对象,**保存后必须重新查询校验**
|
|
198
|
+
- 有些系统级实例不允许在规则里选(后端按使用类型过滤),选了会被拒绝
|