weaver-work-cli 0.1.33 → 0.1.36
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/dist/chunks/{archive-FVFY6GZN.js → archive-XBVH7JU7.js} +2 -2
- package/dist/chunks/{archive-oa-NW3OD4UV.js → archive-oa-MZM3EKFQ.js} +2 -2
- package/dist/chunks/{asset-7QJKMIDV.js → asset-4XO7UOUW.js} +2 -2
- package/dist/chunks/{attachment-content-OSAVA6K3.js → attachment-content-VXSWANAC.js} +3 -3
- package/dist/chunks/{blog-I7SDPNW4.js → blog-PGZKOPSC.js} +2 -2
- package/dist/chunks/{caizhilian-O37ZIQNY.js → caizhilian-BH4ZVGUN.js} +2 -2
- package/dist/chunks/{calendar-7KXE4ED3.js → calendar-MXEMTIO4.js} +2 -2
- package/dist/chunks/{chunk-VBCFFFGT.js → chunk-5DQEEGCC.js} +4 -1
- package/dist/chunks/{chunk-KAS45KNR.js → chunk-6LLJFKJE.js} +1 -1
- package/dist/chunks/{chunk-HEL5XTYI.js → chunk-BPE37FPB.js} +26 -4
- package/dist/chunks/{chunk-IHUYP6LO.js → chunk-F746NKNF.js} +1 -1
- package/dist/chunks/{chunk-MQ2I5AA3.js → chunk-HXJQI5NM.js} +2 -2
- package/dist/chunks/{chunk-ILMBNVSG.js → chunk-I6QGIBDM.js} +2 -2
- package/dist/chunks/{chunk-EEWPQE3O.js → chunk-JCSN3JGM.js} +2 -2
- package/dist/chunks/{chunk-D223PTXU.js → chunk-JNG42JKG.js} +29 -1
- package/dist/chunks/{chunk-6ATGWRZM.js → chunk-JUXVYKII.js} +4 -1
- package/dist/chunks/{chunk-GFPXQIY2.js → chunk-JYKABYCV.js} +2 -2
- package/dist/chunks/{chunk-Q6LWB5HX.js → chunk-NCOVUAZK.js} +2 -2
- package/dist/chunks/{chunk-WY74UBJ6.js → chunk-QHFANTX7.js} +900 -204
- package/dist/chunks/{chunk-WRRJ4GG2.js → chunk-QYGO5EE2.js} +2 -2
- package/dist/chunks/{chunk-RBGOMK4Y.js → chunk-T72N74ZT.js} +2 -2
- package/dist/chunks/{chunk-MEEFGWTM.js → chunk-TC6MZAO3.js} +84 -9
- package/dist/chunks/{chunk-OCU4RLHC.js → chunk-VPUTVEMC.js} +98 -34
- package/dist/chunks/{chunk-PRHJGPMA.js → chunk-VPXOPQJI.js} +2 -2
- package/dist/chunks/{chunk-NHA62QD7.js → chunk-WXFPWCXG.js} +3 -3
- package/dist/chunks/{chunk-2FLWXFVS.js → chunk-XMGSYD6S.js} +4 -4
- package/dist/chunks/{conflict-SFNEVJY5.js → conflict-JAB2LJEZ.js} +2 -2
- package/dist/chunks/contract-XI2EEIZU.js +9110 -0
- package/dist/chunks/{cowork-CKWYHXYB.js → cowork-SCPGLBA4.js} +44 -25
- package/dist/chunks/{ebuilder-form-KOLJRVZD.js → ebuilder-form-EYLHNOTA.js} +3 -3
- package/dist/chunks/{ehr-WFOC3B4D.js → ehr-EAP77IMT.js} +172 -9
- package/dist/chunks/{esb-LJZTN663.js → esb-2TGGXEE7.js} +4 -4
- package/dist/chunks/{fna-F7QRIIZC.js → fna-2X7ZE7BU.js} +13 -8
- package/dist/chunks/{host-VQ6JJXGQ.js → host-C6EL2RKL.js} +3 -3
- package/dist/chunks/{host-BCGUVEWX.js → host-I4NRK4MX.js} +3 -3
- package/dist/chunks/{host-DGE2TZD4.js → host-Q4LZGCRU.js} +3 -3
- package/dist/chunks/{host-BQBRHVR3.js → host-UEI5FGDM.js} +3 -3
- package/dist/chunks/{host-KXPTEWFS.js → host-XCLDDXKQ.js} +3 -3
- package/dist/chunks/{hrm-NI6XAKW5.js → hrm-YXERJM76.js} +3 -3
- package/dist/chunks/{im-7TRTF3KT.js → im-A4VZN2TQ.js} +3 -3
- package/dist/chunks/{invoice-AOXWJKYT.js → invoice-2Z6YPMIS.js} +3 -3
- package/dist/chunks/{jiuchuanhui-7NQWEZAW.js → jiuchuanhui-AR5GMKZB.js} +2 -2
- package/dist/chunks/{lazy-dispatch-RNS4EE4S.js → lazy-dispatch-QXW7P4X3.js} +4 -4
- package/dist/chunks/{mail-VDHJAB4O.js → mail-7GZ6CPBJ.js} +44 -23
- package/dist/chunks/{meeting-GA7XCNNP.js → meeting-3NMGA3MB.js} +74 -10
- package/dist/chunks/{okr-TQIRERPQ.js → okr-BZ6XUOAG.js} +2 -2
- package/dist/chunks/{plan-4RY4LN2P.js → plan-DR5CMUYP.js} +2 -2
- package/dist/chunks/{project-D6XT2OC5.js → project-6J63MK33.js} +2 -2
- package/dist/chunks/{registry-JHRIDQ3A.js → registry-KDD7DHNK.js} +4 -4
- package/dist/chunks/{registry-VOGKFFTR.js → registry-TKX2E7C7.js} +2 -2
- package/dist/chunks/{registry-QKMI43Q6.js → registry-VRTNC6UR.js} +8 -8
- package/dist/chunks/{room-recommend-D4EUOOWY.js → room-recommend-XCWRMB5P.js} +4 -4
- package/dist/chunks/{schedule-XPFBHPCV.js → schedule-IVBICP32.js} +4 -4
- package/dist/chunks/{workflow-HLBZRWIY.js → workflow-D74NFK3C.js} +11 -4
- package/dist/index.js +31 -26
- package/dist/internal/e10/fetch-timing.js +31 -0
- package/dist/internal/e10/request-runtime.js +5 -0
- package/dist/shortcuts/cowork/host.js +8 -0
- package/dist/shortcuts/cowork/operations/types.js +17 -2
- package/dist/shortcuts/ehr/operations/recruit-write.js +35 -0
- package/dist/shortcuts/ehr/operations/recruit.js +147 -0
- package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/mail/host.js +8 -0
- package/dist/shortcuts/mail/operations/types.js +17 -2
- package/dist/shortcuts/meeting/index.js +79 -1
- package/dist/shortcuts/meeting/manifest.js +10 -0
- package/dist/shortcuts/meeting/operations/eb/catalog.js +5 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +6 -1
- package/dist/shortcuts/meeting/operations/eb/create-flow.js +1047 -134
- package/dist/shortcuts/meeting/operations/eb/factory.js +101 -7
- package/dist/shortcuts/meeting/operations/eb/room-recommend.js +36 -2
- package/dist/shortcuts/meeting/operations/eb-fallback.js +4 -0
- package/dist/shortcuts/meeting/operations/env.js +6 -0
- package/dist/shortcuts/meeting/operations/invitation.js +79 -20
- package/dist/shortcuts/workflow/endpoints.js +8 -3
- package/dist/shortcuts/workflow/operations/form.js +181 -34
- package/dist/shortcuts/workflow/operations.js +23 -1
- package/docs/ehr.md +1 -1
- package/docs/fna.md +2 -1
- package/package.json +1 -1
- package/skill-template/business-info.json +18 -0
- package/skill-template/domains/cowork.md +14 -0
- package/skills/weaver-e10-cowork/SKILL.md +101 -0
- package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
- package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
- package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
- package/skills/weaver-e10-jucailin/SKILL.md +21 -3
- package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
- package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
- package/skills/weaver-e10-jucailin/references/salary.md +15 -11
- package/skills/weaver-e10-mail/SKILL.md +12 -9
- package/skills/weaver-e10-meeting/SKILL.md +284 -34
- package/skills/weaver-e10-meeting/references/meeting-eb.md +131 -0
- package/skills/weaver-e10-meeting/references/meeting-invitation.md +28 -2
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
- package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
- package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
|
@@ -11,15 +11,41 @@
|
|
|
11
11
|
|
|
12
12
|
## 入参
|
|
13
13
|
|
|
14
|
+
**两种用法,二选一**:
|
|
15
|
+
|
|
14
16
|
| 参数 | 必填 | 说明 |
|
|
15
17
|
| --- | --- | --- |
|
|
16
|
-
| `mtId` |
|
|
18
|
+
| `mtId` | 二选一 | 会议 id(EB 版会议主键,长 id 用字符串)。给了就按**会议真实数据**生成 |
|
|
19
|
+
| `mt_name` | 二选一✓ | **无 `mtId` 时必填** —— 会议名称 |
|
|
20
|
+
| `begin_datetime` | 二选一✓ | **无 `mtId` 时必填** —— 开始时间 `yyyy-MM-dd HH:mm` |
|
|
21
|
+
| `end_datetime` | | 结束时间(不填则文档里结束时间是【待补充】) |
|
|
22
|
+
| `address` | | 会议地点/会议室**名称**(不是 id) |
|
|
23
|
+
| `hrm_members` | | 参会人姓名,逗号/顿号分隔 |
|
|
24
|
+
| `mt_desc` | | 会议内容/议题概要 |
|
|
25
|
+
| `org_members` | | 落款单位(不传则取当前登录人部门,取不到留【待补充】) |
|
|
26
|
+
| `caller` / `contacter` / `total_member` | | 召集人 / 联系人 / 参会人数 |
|
|
17
27
|
| `extra` | | 键值对。**① 租户自定义字段**,如 `{"guest_org":"某某集团"}`——会议接口不会返回这类字段,只能从这里传;**② 保留键 `agenda`** 手动指定议程(见下文「议程表」),仅在会议没有议题时生效 |
|
|
18
28
|
| `outputPath` | | 输出文件完整路径;缺省写到 `~/.weaver-work-cli/meeting/invitations/邀请函-{会议名}-{yyyyMMdd}.docx` |
|
|
19
29
|
|
|
30
|
+
> ⛔ **既没 `mtId` 又没 `mt_name`+`begin_datetime`** → 报 `invitation_source_required`。
|
|
31
|
+
|
|
32
|
+
**无 `mtId` 模式**用于「会议还没生成」(流程审批中、或只有申请单信息)时预生成**预置函**——
|
|
33
|
+
邀请函本就是给人下载后自己改再自己发的,不该卡在"会议必须有 id"。缺的字段黄色高亮【待补充】。
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 无会议 id:按申请单信息出预置函
|
|
37
|
+
weaver-work-cli --json meeting run meeting.invitation.render --input-json \
|
|
38
|
+
'{"mt_name":"研讨AI对接会议管理落地","begin_datetime":"2026-10-31 09:00","end_datetime":"2026-10-31 12:00","address":"120会议室","hrm_members":"易鹏、卜伟领","extra":{"guest_org":"某某集团"}}'
|
|
39
|
+
```
|
|
40
|
+
|
|
20
41
|
## 出参
|
|
21
42
|
|
|
22
|
-
`filePath` / `fileName` / `bytes` / `meetingId` / `meetingName` / `filledFields[]` / `pendingFields[]
|
|
43
|
+
`filePath` / `fileName` / `bytes` / `meetingId` / `meetingName` / `filledFields[]` / `pendingFields[]` / **`dataSource`**,以及 `warnings`(有待补充字段时会列出)。
|
|
44
|
+
|
|
45
|
+
| `dataSource` | 含义 |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| `meeting` | 按会议真实数据生成(`mtId` 模式),字段最全 |
|
|
48
|
+
| `payload` | 按申请单字段预生成(无 `mtId` 模式),属**预置函**,请人工核对 |
|
|
23
49
|
|
|
24
50
|
议程相关三个字段:
|
|
25
51
|
|
|
Binary file
|
|
@@ -5,7 +5,7 @@ display_name_en: Weaver Qiyecheng FNA
|
|
|
5
5
|
description: 泛微齐业成费控中心(预算查询/费用中心/报销报表/借款管理/发票核销)的 E10 查询与提醒写操作能力,通过 weaver-work-cli fna 命令执行。
|
|
6
6
|
description_zh: 泛微齐业成费控中心助手:事前申请单预算详情、预算执行报表、报销/借款/预付核销金额、报销报表 AI 问答(自然语言出部门/期间/费用类型分组报表)、全公司借款汇总与列表、提醒还款、发票核销金额与列表、催票。所有能力通过 weaver-work-cli fna 命令执行,提醒还款与催票为写操作,必须先 prepare 预览并经用户明确确认后 apply。
|
|
7
7
|
description_en: Expense, budget and loan assistant for Weaver Qiyecheng FNA. Queries pre-application budget details, budget execution reports, reimbursed/loan/prepay amounts, natural-language expense reports (grouping by department, period or expense type), company-wide loan summary and list, invoice write-off summary and list. Sends repayment reminders and invoice call-tickets through the weaver-work-cli fna command with a prepare/apply confirmation chain.
|
|
8
|
-
version: 1.0.
|
|
8
|
+
version: 1.0.5
|
|
9
9
|
author: 泛微网络科技股份有限公司
|
|
10
10
|
agent_created: true
|
|
11
11
|
requires:
|
|
@@ -87,6 +87,7 @@ cliHelp: "weaver-work-cli fna --help"
|
|
|
87
87
|
- 费用中心日期口径不同:报销按明细费用日期、借款按流程创建时间、预付核销按核销记录创建时间。
|
|
88
88
|
- 借款费用中心接口 requestId/employeeId/workflowId 只认**数字**(字符串会静默返回空);超 2^53 的巨型 ID 保留字符串并提示人工核验。
|
|
89
89
|
- `fna.expense.chart` 是二开接口(`/api/secondev/fna/getExpenseChart`):服务端只把当前人/当前部门作为**提示文本**拼进 prompt,不做强制过滤,返回可能是全租户数据;个人金额口径必须改用 `fna.expense.reimbursed.sum`(按 `employeeId` 过滤),并在汇报中注明数据范围。
|
|
90
|
+
- `fna.expense.chart` 返回 `meta.permissionDenied=true`(或文案含「权限 / 越权」)表示当前账号数据权限不覆盖该范围,按执行原则第 9 条**立即停住**,不得改调其它接口拼装同一份报表。
|
|
90
91
|
|
|
91
92
|
## 执行原则
|
|
92
93
|
|
|
@@ -98,6 +99,7 @@ cliHelp: "weaver-work-cli fna --help"
|
|
|
98
99
|
6. 金额结论口径存疑时(如借款缺陷、瞬时空响应)先说明不确定性;`total=0` 或空列表提示「暂无记录」,不得伪造成功。
|
|
99
100
|
7. `fna.expense.chart` 的成败看 `data.kind` 而不是 `code`(`code` 恒为 200,追问/拦截也走 success):`rows`/`empty` 属正常,`clarify` 按文案补口径后最多重问一次,`blocked` 换更贴近报销业务的问法而**不是**自己写 SQL;`unexpected` 只描述现象并反馈维护者。
|
|
100
101
|
8. `fna.expense.chart` 每次调用都真实消耗一次大模型对话 + 一次 SQL,一轮对话最多问 1-2 次,禁止循环试探;`maxRows` 只截断本地展示、不改变服务端查询;列名由 AI SQL 别名决定,不要假设固定列名。
|
|
102
|
+
9. **权限拦截即终点(硬规则)**:`fna.expense.chart` 返回 `meta.permissionDenied=true`,或文案明确提示无数据权限 / 越权访问时,把接口原文如实告知用户并说明「当前账号数据权限不足,查不到该范围数据」,然后给出替代路径(换具备该权限的账号 / 请管理员扩权 / 由有权限方导出明细后再分析),由用户决定下一步。**禁止**换问法、换口径继续试探,**禁止**改调 `fna.expense.reimbursed.sum`、`fna.budget.*`、借款 / 发票核销等其它接口按部门 / 人员 / 金额自行拼装同一份报表,**禁止**自写 SQL 绕过——拼装结果与原报表口径不同源,属于越权尝试且极易产出错误结论。详见 [references/expense-chart.md](references/expense-chart.md) 的「无权限时的处理」。
|
|
101
103
|
|
|
102
104
|
## References
|
|
103
105
|
|
|
@@ -106,7 +108,7 @@ cliHelp: "weaver-work-cli fna --help"
|
|
|
106
108
|
| 接口目录与按模块路由 | [references/catalog.md](references/catalog.md) |
|
|
107
109
|
| 预算:事前申请单预算详情 / 预算执行报表 | [references/budget.md](references/budget.md) |
|
|
108
110
|
| 费用中心:报销 / 借款 / 预付核销 | [references/expense-center.md](references/expense-center.md) |
|
|
109
|
-
| 报销报表 AI 问答:自然语言出报表、五个 `kind
|
|
111
|
+
| 报销报表 AI 问答:自然语言出报表、五个 `kind`、无权限硬规则、额度与数据范围风险 | [references/expense-chart.md](references/expense-chart.md) |
|
|
110
112
|
| 借款管理:汇总 / 列表 / 提醒还款(prepare→apply) | [references/loan-management.md](references/loan-management.md) |
|
|
111
113
|
| 发票核销:金额 tab / 列表 / 催票(prepare→apply) | [references/invoice-writeoff.md](references/invoice-writeoff.md) |
|
|
112
114
|
| 源资料指纹与更新检测 | [references/source-manifest.json](references/source-manifest.json) |
|
|
@@ -139,5 +141,6 @@ weaver-work-cli --json fna run fna.loan.main.list --input-json '{"current":1,"pa
|
|
|
139
141
|
|
|
140
142
|
- 借款「确认已还 confirmRepay」、核销明细等页面按钮能力(源资料未提供接口)→ 见 `weaver-work-cli fna schema` 的 `withheldOperations`,不得编造 operation 或直连接口。
|
|
141
143
|
- 报销报表 AI 问答只接受自然语言 `userInput`:不接受自写 SQL、不暴露 AI 生成的 SQL,也没有 `scope=self/dept/tenant` 之类的强制过滤参数(服务端未提供)。
|
|
144
|
+
- 报表返回无权限后改调其它报销/借款/预算/流程接口拼装同一份报表,或自写 SQL 绕过权限边界——属于越权尝试,一律禁止。
|
|
142
145
|
- 姓名/流程名 → ID 的解析、创建借款单/预付单/事前申请单等需联动工作流的写流程(未提供接口依据)。
|
|
143
146
|
- 其它模块(发票票夹、人事、流程待办)请路由到对应 Skill,不在此重复实现。
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
- 报销口径:明细状态 `status=1`(审批完成)的 `reimburse_amount` 合计 = 已报销金额;无数据返回 `0.0`。
|
|
27
27
|
- ⚠️ 借款接口缺陷:仅统计首条借款记录(对外汇报注明);且首次/冷启动可能瞬时空响应(缺 data 键),CLI 自动重试最多 2 次。
|
|
28
28
|
- 借款接口 requestId 等必须传数字;预付核销接口日期按核销记录创建时间、employeeId 匹配预付单创建人。
|
|
29
|
-
- 报销报表 AI 问答(`fna.expense.chart`)是二开接口(`/api/secondev/fna/getExpenseChart`):自然语言进 AI 场景生成 SQL,服务端做租户隔离改写 + 安全校验后执行;返回 `kind=rows/empty/clarify/blocked/unexpected`(`code` 恒为 200,不能用它判成败)。每次调用消耗一次大模型对话 + 一次 SQL,且不做当前人强制过滤,详见 `expense-chart.md
|
|
29
|
+
- 报销报表 AI 问答(`fna.expense.chart`)是二开接口(`/api/secondev/fna/getExpenseChart`):自然语言进 AI 场景生成 SQL,服务端做租户隔离改写 + 安全校验后执行;返回 `kind=rows/empty/clarify/blocked/unexpected`(`code` 恒为 200,不能用它判成败)。每次调用消耗一次大模型对话 + 一次 SQL,且不做当前人强制过滤,详见 `expense-chart.md`。**返回无权限时(`meta.permissionDenied=true` 或文案含「权限 / 越权」)到此为止,不得改调其它接口拼数据,见 `expense-chart.md` 的「无权限时的处理」。**
|
|
30
30
|
|
|
31
31
|
## 三、借款管理(loan,管理员)
|
|
32
32
|
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
|
|
56
56
|
- 失败时按错误 envelope 的 `type/subtype` 处理:`confirmation.required` 缺确认;`partial.write_uncertain` 不确定结果立即停止并回查,禁止自动重试。
|
|
57
57
|
- 无记录时输出 `total=0`/空 `rows` 或 `segments:null`,提示「暂无记录」,不得伪造成功。
|
|
58
|
-
- `fna.expense.chart` 的「有结果」判断看 `kind`(不是 `code`):`code` 恒为 200,追问与安全拦截同样走 `WeaResult.success`;`clarify` 最多重问一次,`blocked` 换业务问法而不是自己写 SQL
|
|
58
|
+
- `fna.expense.chart` 的「有结果」判断看 `kind`(不是 `code`):`code` 恒为 200,追问与安全拦截同样走 `WeaResult.success`;`clarify` 最多重问一次,`blocked` 换业务问法而不是自己写 SQL;`meta.permissionDenied=true` 时不再追问,直接告知权限边界。
|
|
59
59
|
- 全部金额字段单位为元。
|
|
@@ -49,13 +49,25 @@ weaver-work-cli --json fna run fna.expense.chart --input-json '{"userInput":"202
|
|
|
49
49
|
|---|---|---|
|
|
50
50
|
| `rows` | 拿到结果集(`rows`/`columns`/`rowCount`) | 给「结论摘要 + 列名 + 行数」,不原样粘贴长 JSON;`truncated=true` 说明只展示前 `maxRows` 行,`meta.requestedRows` 是服务端实际返回行数 |
|
|
51
51
|
| `empty` | SQL 执行成功但 0 行 | 提示「暂无匹配记录」,可换问法再问一次,不得编造数据 |
|
|
52
|
-
| `clarify` | AI 判定需求不明确,`message` 是追问文案 |
|
|
52
|
+
| `clarify` | AI 判定需求不明确,`message` 是追问文案 | 转述文案,补充时间/部门/口径后**最多再问一次**;若文案属**权限类**(如「需求不明确,请注意权限」,此时 `meta.permissionDenied=true`),直接执行下文「无权限处理」硬规则,不再追问 |
|
|
53
53
|
| `blocked` | AI 生成的 SQL 未通过服务端安全校验 | 说明该问法触发安全拦截,换更贴近报销业务的问法;**不要**自己写 SQL 绕过 |
|
|
54
54
|
| `unexpected` | `data` 类型意外 | 只描述现象,不猜测数据,反馈维护者 |
|
|
55
55
|
|
|
56
56
|
- 列名由 AI 生成 SQL 的别名决定、**不固定**,展示时不要假设 `dept_name` / `total_amount` 一定存在。
|
|
57
57
|
- 金额单位为元;口径由 AI SQL 决定,关键结论建议用 `fna.expense.reimbursed.sum` 等标准接口交叉核对。
|
|
58
58
|
- `kind=clarify/blocked` 是按返回文案推断的(`meta.messageKindInferred=true`),原始 `message` 一并返回,口径存疑时以原文为准。
|
|
59
|
+
- `meta.permissionDenied` 是同一批字符串结果上的稳定布尔字段:文案含「权限 / 越权」即为 `true`(CLI 同时把它归到 `clarify`),其余为 `false`。判断权限时优先读它,不要自己再对中文做正则;`data.kind` 仍是 `rows/empty/clarify/blocked/unexpected` 五个值,不新增 kind。
|
|
60
|
+
|
|
61
|
+
## 无权限时的处理(硬规则)
|
|
62
|
+
|
|
63
|
+
**若报表接口返回无权限(`meta.permissionDenied=true`,即 `kind=clarify` 且文案含「权限」,或文案明确提示无数据权限 / 越权访问),则直接输出该结果,禁止再拼接参数去调用其他报销 / 借款 / 预算等查询接口。**
|
|
64
|
+
|
|
65
|
+
具体约束:
|
|
66
|
+
|
|
67
|
+
1. **到此为止**:把接口原文返回给用户(说明「当前账号数据权限不足,查不到该范围数据」),不再换问法、不再换口径、不再试探。
|
|
68
|
+
2. **不得绕行**:不允许为了「凑出」同一份报表,转而拼接 `fna.expense.reimbursed.sum`、`fna.budget.*`、借款 / 发票核销 / 流程查询(`workflow.search`、`ebuilder-form.*`)等其它接口,按部门 / 人员 / 金额自行拼装数据。这类拼装得到的数字与原报表口径不同源,属于越权尝试,且极易产出错误结论。
|
|
69
|
+
3. **不得自写 SQL**:`raw.sql` 之类需要自行拼 SQL 的方式同样禁止。
|
|
70
|
+
4. **正确做法**:如实告知权限边界 + 给出可行替代路径(换具备该数据权限的账号 / 请管理员扩权 / 由有权限方导出明细文件后再分析),由用户决定下一步。
|
|
59
71
|
|
|
60
72
|
## 注意
|
|
61
73
|
|
|
@@ -64,6 +76,7 @@ weaver-work-cli --json fna run fna.expense.chart --input-json '{"userInput":"202
|
|
|
64
76
|
3. **无服务端 LIMIT**:大租户下可能很慢或返回大量行;`maxRows` 只做本地截断。
|
|
65
77
|
4. **单轮问答**:每次请求生成新的会话 ID,不能凭上一次结果续聊;追问请把上下文重新写进新的 `userInput`。
|
|
66
78
|
5. **二开接口依赖**:路径是 `/api/secondev/fna/`(`FexsCommonController`)。若同租户其它 `fna.*` 正常、只有本 operation 返回 404 或 500,先怀疑该租户未安装 seconddev 的 fna 二开包,不要判为「能力不存在」。
|
|
79
|
+
6. **权限拦截即终点**:返回无权限时按上文「无权限时的处理」执行,直接输出结果,禁止拼接参数改写问法或改调其他报销 / 借款 / 预算接口绕行。
|
|
67
80
|
|
|
68
81
|
## 失败处理
|
|
69
82
|
|
|
@@ -74,5 +87,6 @@ weaver-work-cli --json fna run fna.expense.chart --input-json '{"userInput":"202
|
|
|
74
87
|
| `validation.max_rows_invalid` | `maxRows` 越界 | 用 1-5000 的整数 |
|
|
75
88
|
| `api.server_error`(HTTP 500) | 当前人查不到(服务端 NPE)/ AI 场景异常 / SQL 执行失败 | **不自动重试**;说明可能原因,必要时换标准接口 |
|
|
76
89
|
| `api.business_error` | `code != 200` | 按 `message` 转述,不猜测数据 |
|
|
90
|
+
| 返回无权限(`meta.permissionDenied=true`,文案含「权限 / 越权」) | 当前账号数据权限不覆盖该范围 | **直接输出该结果并说明权限边界**,不再换问法,禁止拼接参数改调其他报销 / 借款 / 预算接口 |
|
|
77
91
|
| `authentication.session_expired` | 登录态失效 | 先向用户确认 E10 登录域名,再刷新登录;不得带失效 Cookie 重试 |
|
|
78
92
|
| `network.timeout` | AI/SQL 串行超过 90s | 换更窄的时间范围;是否重试由用户决定(重试会再消耗一次模型额度) |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"module": "fna",
|
|
4
4
|
"skill": "weaver-e10-qiyecheng",
|
|
5
|
-
"generatedAt": "2026-10-
|
|
5
|
+
"generatedAt": "2026-10-30T11:22:07.931Z",
|
|
6
6
|
"generatedFrom": {
|
|
7
7
|
"kind": "user-provided-folder",
|
|
8
8
|
"sourceRoots": [
|
|
@@ -557,7 +557,7 @@
|
|
|
557
557
|
}
|
|
558
558
|
},
|
|
559
559
|
"artifactBaseline": {
|
|
560
|
-
"aggregateSha256": "
|
|
560
|
+
"aggregateSha256": "bc00a72b5448ee047ebfe3a224281bce87d7a35745fec7eb19b2f9673a841424",
|
|
561
561
|
"files": [
|
|
562
562
|
{
|
|
563
563
|
"path": "src/shortcuts/fna/manifest.ts",
|
|
@@ -640,14 +640,14 @@
|
|
|
640
640
|
{
|
|
641
641
|
"path": "src/shortcuts/index.ts",
|
|
642
642
|
"role": "generated",
|
|
643
|
-
"size":
|
|
644
|
-
"sha256": "
|
|
643
|
+
"size": 7750,
|
|
644
|
+
"sha256": "e12effd55fa2bc226f257762fc5061a9cca402fdea7a0efee0399b23afdf01b9"
|
|
645
645
|
},
|
|
646
646
|
{
|
|
647
647
|
"path": "test/business/fna-operations.test.ts",
|
|
648
648
|
"role": "generated",
|
|
649
|
-
"size":
|
|
650
|
-
"sha256": "
|
|
649
|
+
"size": 26986,
|
|
650
|
+
"sha256": "1dc4526a89e2e5fea11748eda841c1a6960fd57bf3971bc8ad3f4a047268d15e"
|
|
651
651
|
},
|
|
652
652
|
{
|
|
653
653
|
"path": "test/business/fna-host.test.ts",
|
|
@@ -658,14 +658,14 @@
|
|
|
658
658
|
{
|
|
659
659
|
"path": "docs/fna.md",
|
|
660
660
|
"role": "generated",
|
|
661
|
-
"size":
|
|
662
|
-
"sha256": "
|
|
661
|
+
"size": 7032,
|
|
662
|
+
"sha256": "e6ddd7ff74f049ec71210007fbd78887e74afabdd346b8c06863a866d27da7c3"
|
|
663
663
|
},
|
|
664
664
|
{
|
|
665
665
|
"path": "docs/_catalog.md",
|
|
666
666
|
"role": "generated",
|
|
667
|
-
"size":
|
|
668
|
-
"sha256": "
|
|
667
|
+
"size": 5515,
|
|
668
|
+
"sha256": "efb1dfb14eb3f97565046c406237c2b0c6f5bd41063acaa30b1772ab88e84187"
|
|
669
669
|
},
|
|
670
670
|
{
|
|
671
671
|
"path": "docs/SKILL.md",
|
|
@@ -676,8 +676,8 @@
|
|
|
676
676
|
{
|
|
677
677
|
"path": "skills/weaver-e10-qiyecheng/SKILL.md",
|
|
678
678
|
"role": "generated",
|
|
679
|
-
"size":
|
|
680
|
-
"sha256": "
|
|
679
|
+
"size": 15116,
|
|
680
|
+
"sha256": "ecc74612a2ff5802d3c05cfab2414787cc7538b040d55729961b75c48234796f"
|
|
681
681
|
},
|
|
682
682
|
{
|
|
683
683
|
"path": "skill-template/product.json",
|
|
@@ -688,8 +688,8 @@
|
|
|
688
688
|
{
|
|
689
689
|
"path": "skills/weaver-e10-qiyecheng/references/catalog.md",
|
|
690
690
|
"role": "generated",
|
|
691
|
-
"size":
|
|
692
|
-
"sha256": "
|
|
691
|
+
"size": 5254,
|
|
692
|
+
"sha256": "07e2a8477fabb3458127cf61933c156ee8bfc1537cf7ff9c89a47c65dca5504c"
|
|
693
693
|
},
|
|
694
694
|
{
|
|
695
695
|
"path": "skills/weaver-e10-qiyecheng/references/budget.md",
|
|
@@ -718,8 +718,8 @@
|
|
|
718
718
|
{
|
|
719
719
|
"path": "skill-template/business-info.json",
|
|
720
720
|
"role": "generated",
|
|
721
|
-
"size":
|
|
722
|
-
"sha256": "
|
|
721
|
+
"size": 9027,
|
|
722
|
+
"sha256": "aa2dcebc6e186761b4953a856a86d6d9acdfc227e39b107a293326f574f69f1c"
|
|
723
723
|
},
|
|
724
724
|
{
|
|
725
725
|
"path": "skill-template/domains/qiyecheng.md",
|
|
@@ -730,14 +730,14 @@
|
|
|
730
730
|
{
|
|
731
731
|
"path": "src/shortcuts/fna/operations/expense-chart.ts",
|
|
732
732
|
"role": "generated",
|
|
733
|
-
"size":
|
|
734
|
-
"sha256": "
|
|
733
|
+
"size": 7065,
|
|
734
|
+
"sha256": "c2e9e724144149ba20e9fa9aa8ca82617940b5ad6d77355305d65507151f4d56"
|
|
735
735
|
},
|
|
736
736
|
{
|
|
737
737
|
"path": "skills/weaver-e10-qiyecheng/references/expense-chart.md",
|
|
738
738
|
"role": "generated",
|
|
739
|
-
"size":
|
|
740
|
-
"sha256": "
|
|
739
|
+
"size": 7529,
|
|
740
|
+
"sha256": "7dae4ebfa5b1306299112e9474fbf0e340271a7ae5ba21d00ff84f8a5ab0def3"
|
|
741
741
|
}
|
|
742
742
|
]
|
|
743
743
|
},
|
|
@@ -747,6 +747,7 @@
|
|
|
747
747
|
"已知实现缺陷与口径(借款仅统计首条、日期口径差异、menuCode/permissionSetCode 环境相关、超 2^53 ID 保留字符串)写入 docs/fna.md 与 Skill references。",
|
|
748
748
|
"2026-09-09 由 weaver-e10-skill-maker 首次生成:CLI 命令后缀 fna、Skill 后缀 qiyecheng。",
|
|
749
749
|
"fna.expense.chart 只暴露自然语言 userInput,不接受也不回传 AI 生成的 SQL;data 由 CLI 归一化为 kind=rows/empty/clarify/blocked/unexpected,clarify 与 blocked 按文案推断并在 meta.messageKindInferred 标注;每次调用消耗一次大模型对话 + 一次 SQL,CLI 超时 180s。",
|
|
750
|
-
"2026-10-26 集成报销报表 AI 问答:新增 GET /api/secondev/fna/getExpenseChart(userInput 必填 ≤500 字、maxRows 本地截断 1-5000),同步 CLI operation、host 路径白名单、SKILL.md/catalog/docs/domain 与测试。"
|
|
750
|
+
"2026-10-26 集成报销报表 AI 问答:新增 GET /api/secondev/fna/getExpenseChart(userInput 必填 ≤500 字、maxRows 本地截断 1-5000),同步 CLI operation、host 路径白名单、SKILL.md/catalog/docs/domain 与测试。",
|
|
751
|
+
"2026-10-30 报销报表新增「无权限禁止绕行」硬规则:expense-chart 的字符串结果在文案命中「权限 / 越权」时归类为 clarify 并输出 meta.permissionDenied=true(纯权限提示不带「不明确」也识别,避免落进 unexpected),kind 枚举不变;Agent 侧必须停住并告知权限边界,禁止改调 reimbursed.sum / budget.* / 借款 / 核销等接口按部门或人员拼装同一份报表,也禁止自写 SQL 绕过。SKILL.md 执行原则第 9 条与 expense-chart.md「无权限时的处理」为权威口径。"
|
|
751
752
|
]
|
|
752
753
|
}
|