vps-work 1.0.0 → 1.1.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.
@@ -2,53 +2,60 @@
2
2
  "skills": [
3
3
  {
4
4
  "name": "vps-shared",
5
- "description": "Vertu CLI 共用约定:登录、能力缓存、当前用户身份、数据查询与反馈。业务域技能开始前应先读本文件。",
5
+ "description": "vps-work 共用约定:登录、当前用户身份、活目录 catalog / exec、数据查询与反馈。业务域技能开始前应先读本文件。",
6
6
  "files": [
7
7
  "skills/vps-shared/SKILL.md"
8
8
  ]
9
9
  },
10
10
  {
11
11
  "name": "vps-meeting",
12
- "description": "查询会议录音、逐字稿、纪要、总结、章节、问答和待办。按本人、递归下属、全域或已授权的指定部门/人员控制访问。入口 `vps-work meeting +…`。触发词:会议、录音、逐字稿、会议纪要、会议总结、会议待办、谁说了什么。",
12
+ "description": "查询会议录音、逐字稿、纪要、总结、章节、问答、待办和部门/模版统计。按本人、递归下属、全域或已授权的指定部门/人员控制访问。入口 `vps-work meeting +…`。触发词:会议、录音、逐字稿、会议纪要、会议总结、会议待办、会议统计、会议模版、谁说了什么。",
13
13
  "files": [
14
14
  "skills/vps-meeting/SKILL.md"
15
15
  ]
16
16
  },
17
+ {
18
+ "name": "vps-vemory",
19
+ "description": "旧版 Vemory 会议查询兼容入口。新调用应使用 `vps-meeting` 与 `vps-work meeting +list`。",
20
+ "files": [
21
+ "skills/vps-vemory/SKILL.md"
22
+ ]
23
+ },
17
24
  {
18
25
  "name": "sale-performance-query",
19
- "description": "使用 `vps-work sales +…` 查询 Vertu 销售业绩、普通订单、订单财务全景、开票申请状态、正式发票、会计凭证、已对账销售收款和经销商经营数据。",
26
+ "description": "使用 `vps-work sales +…` 查询 Vertu 销售业绩和订单。用于公司、部门、销售员的销售额、销量、普通销售订单、订单关联的开票申请、正式发票、会计凭证与付款状态、已对账销售收款、JXSD 经销商订单、代理商 Sell-in/Sell-out、代理商五件套来源和 Walk-in、经销商库存与终销、客户画像、新老客占比、环比同比、部门下钻、目标达成、定金退款、人效、个人 OKR、团队 PK,以及按商品系列、款式或 IOT 分析销量销额。除经销商默认仓库库存外,通用商品库存、价格、发货与商品主数据改用 vps-product。",
20
27
  "files": [
21
28
  "skills/sale-performance-query/SKILL.md",
29
+ "skills/sale-performance-query/references/vps-sales-account-orders.md",
30
+ "skills/sale-performance-query/references/vps-sales-agent-five-suite.md",
31
+ "skills/sale-performance-query/references/vps-sales-customer-mix.md",
32
+ "skills/sale-performance-query/references/vps-sales-customer-region.md",
33
+ "skills/sale-performance-query/references/vps-sales-daily-trend.md",
34
+ "skills/sale-performance-query/references/vps-sales-dealer-orders.md",
35
+ "skills/sale-performance-query/references/vps-sales-dealer-performance.md",
36
+ "skills/sale-performance-query/references/vps-sales-deposit-breakdown.md",
37
+ "skills/sale-performance-query/references/vps-sales-dept-breakdown.md",
38
+ "skills/sale-performance-query/references/vps-sales-dept-comparison.md",
22
39
  "skills/sale-performance-query/references/vps-sales-entities.md",
23
- "skills/sale-performance-query/references/vps-sales-shared-params.md",
24
40
  "skills/sale-performance-query/references/vps-sales-headline-kpi.md",
25
- "skills/sale-performance-query/references/vps-sales-account-orders.md",
26
41
  "skills/sale-performance-query/references/vps-sales-invoice-attachments.md",
27
42
  "skills/sale-performance-query/references/vps-sales-invoice-status.md",
28
43
  "skills/sale-performance-query/references/vps-sales-order-finance.md",
29
44
  "skills/sale-performance-query/references/vps-sales-order-logistics.md",
45
+ "skills/sale-performance-query/references/vps-sales-per-person-kpi.md",
46
+ "skills/sale-performance-query/references/vps-sales-personal-okr.md",
47
+ "skills/sale-performance-query/references/vps-sales-ranking.md",
30
48
  "skills/sale-performance-query/references/vps-sales-reconciled-receipts.md",
31
- "skills/sale-performance-query/references/vps-sales-dealer-orders.md",
32
- "skills/sale-performance-query/references/vps-sales-dealer-performance.md",
33
- "skills/sale-performance-query/references/vps-sales-agent-five-suite.md",
34
- "skills/sale-performance-query/references/vps-sales-dept-breakdown.md",
35
- "skills/sale-performance-query/references/vps-sales-customer-mix.md",
36
- "skills/sale-performance-query/references/vps-sales-customer-region.md",
37
- "skills/sale-performance-query/references/vps-sales-dept-comparison.md",
38
- "skills/sale-performance-query/references/vps-sales-target-achievement.md",
39
- "skills/sale-performance-query/references/vps-sales-deposit-breakdown.md",
40
49
  "skills/sale-performance-query/references/vps-sales-refund-summary.md",
41
50
  "skills/sale-performance-query/references/vps-sales-service-sales.md",
42
- "skills/sale-performance-query/references/vps-sales-daily-trend.md",
43
- "skills/sale-performance-query/references/vps-sales-ranking.md",
44
- "skills/sale-performance-query/references/vps-sales-per-person-kpi.md",
45
- "skills/sale-performance-query/references/vps-sales-personal-okr.md",
51
+ "skills/sale-performance-query/references/vps-sales-shared-params.md",
52
+ "skills/sale-performance-query/references/vps-sales-target-achievement.md",
46
53
  "skills/sale-performance-query/references/vps-sales-team-pk.md"
47
54
  ]
48
55
  },
49
56
  {
50
57
  "name": "vps-store-management",
51
- "description": "门店管理:查询国内渠道门店接待、进店客流、客户画像、意向商品、加微信、有效客户、产品触摸/试用与现场成交过程数据。入口 `vps-work store +reception`。",
58
+ "description": "门店管理:查询国内渠道门店接待、进店客流、客户画像、意向商品、加微信、有效客户、产品触摸/试用和现场成交过程数据。用户问门店接待情况、进店组数、进店人数、客户画像、意向商品、加微率、有效客户、触摸率、使用率、现场成交率、门店客流排行时使用 `vps-work store +reception`。",
52
59
  "files": [
53
60
  "skills/vps-store-management/SKILL.md",
54
61
  "skills/vps-store-management/references/store-reception.md"
@@ -63,36 +70,57 @@
63
70
  },
64
71
  {
65
72
  "name": "vps-product",
66
- "description": "VPS 商品与供应链:商品销量、销额、订单数、IOT、折扣与趋势,以及普通库存、VSN 库存位置、价格、发货、齐套物料、机头库存、在库激活和异常 IMEI。",
73
+ "description": "VPS 商品与供应链:商品销量、销额、订单数、IOT、商品折扣、日/周/月趋势、款式环比,以及库存、价格、发货、齐套物料、机头库存、在库激活和异常 IMEI。用户问某商品/系列/款式卖了多少时使用 `vps-work sales +trend` 等销售聚合;用户问普通库存、价格、发货或设备异常时使用 `vps-work product +…`。触发词:商品销量、商品销额、IOT、折扣、款式、库存、价格、发货、齐套、BOM、机头、在库激活、仓位异常、异常设备、异常 IMEI。",
67
74
  "files": [
68
75
  "skills/vps-product/SKILL.md"
69
76
  ]
70
77
  },
71
78
  {
72
79
  "name": "vps-device-abnormal-statistics",
73
- "description": "查询设备在库激活与异常统计:按仓位查看库存、在途和异常 IMEI,并按 IMEI 下钻未处理异常原因;仅限具备 VPS 设备异常分析角色的员工。入口 `vps-work product +abnormal-…`。",
80
+ "description": "查询 Vertu 设备在库激活与异常统计:按仓位查看总库存、实物库存、在途、门店库存和异常 IMEI,查询仓位选项,以及按 IMEI 下钻未处理异常原因、销售、激活、出库和维修信息。用户提到在库激活、仓位异常、异常设备、异常 IMEI、激活异常或设备异常明细时使用 `vps-work product +abnormal-…`。",
74
81
  "files": [
75
82
  "skills/vps-device-abnormal-statistics/SKILL.md",
76
- "skills/vps-device-abnormal-statistics/references/api.md",
77
- "skills/vps-device-abnormal-statistics/agents/openai.yaml"
83
+ "skills/vps-device-abnormal-statistics/agents/openai.yaml",
84
+ "skills/vps-device-abnormal-statistics/references/api.md"
78
85
  ]
79
86
  },
80
87
  {
81
88
  "name": "vps-im",
82
- "description": "Vertu IM:读取与发送消息、私聊/群聊/组织群、群发、撤回、互动卡片、群成员管理、机器人、语音视频通话。当用户需要查看会话列表、读历史消息、监听新消息、给某人或某群发消息、群发通知、发审批卡片、撤回消息、建群拉人、管理机器人或发起通话时使用。入口 `vps-work im +…`。触发词:发消息、私聊、群聊、群发、通知、撤回、会话、历史消息、监听、机器人、语音通话、视频通话、IM。",
89
+ "description": "Vertu IM:读取与发送消息、下载会话图片/附件原文件、私聊/群聊/组织群、员工 VPS Harness Agent 互相请求或以机器人身份联系人、群发、撤回、互动卡片、群成员管理、机器人、语音视频通话。当用户需要查看会话列表、读历史消息、获取或下载聊天图片/附件、监听新消息、让另一名员工的 Harness Agent 协作、让自己的 Harness Agent 联系员工、给某人或某群发消息、群发通知、发审批卡片、撤回、建群拉人、管理机器人或发起通话时使用。入口 `vps-work im +…`、`vps-work agent ask` 与 `vps-work agent message-user`。触发词:聊天图片、聊天附件、附件下载、Agent 协作、员工 Agent、机器人私聊、发消息、私聊、群聊、群发、通知、撤回、会话、历史消息、监听、机器人、语音通话、视频通话、IM。",
83
90
  "files": [
84
91
  "skills/vps-im/SKILL.md",
85
- "skills/vps-im/references/vps-im-shared-params.md",
92
+ "skills/vps-im/references/vps-im-bots.md",
93
+ "skills/vps-im/references/vps-im-calls.md",
94
+ "skills/vps-im/references/vps-im-channels.md",
86
95
  "skills/vps-im/references/vps-im-read.md",
87
96
  "skills/vps-im/references/vps-im-send.md",
88
- "skills/vps-im/references/vps-im-channels.md",
89
- "skills/vps-im/references/vps-im-bots.md",
90
- "skills/vps-im/references/vps-im-calls.md"
97
+ "skills/vps-im/references/vps-im-shared-params.md"
98
+ ]
99
+ },
100
+ {
101
+ "name": "vps-mail",
102
+ "description": "站内信发送。`vps-work mail +…`。",
103
+ "files": [
104
+ "skills/vps-mail/SKILL.md"
105
+ ]
106
+ },
107
+ {
108
+ "name": "vps-approval",
109
+ "description": "审批队列与通过/拒绝。`vps-work approval +…`。",
110
+ "files": [
111
+ "skills/vps-approval/SKILL.md"
112
+ ]
113
+ },
114
+ {
115
+ "name": "vps-corporate",
116
+ "description": "VPS 企业综合管理只读查询:合作企业档案、合同及非合同文件用印、印章证照外借、人资用印、业务管理审批、规章制度和对应附件。用户询问合作方资料、营业执照、合同盖章件、制度文件、业务政策等内容时使用 `vps-work corporate +…`。",
117
+ "files": [
118
+ "skills/vps-corporate/SKILL.md"
91
119
  ]
92
120
  },
93
121
  {
94
122
  "name": "vps-calendar",
95
- "description": "查询、创建和修改 Vertu 日程,并管理日历与多人忙闲。用户要查看某段日期内我的日程、点名查看某个人的忙碌日程、查看指定日历、创建或调整日程,或为会议查多人空闲时间时使用。入口为 `vps-work calendar +…`。",
123
+ "description": "查询、创建和修改 Vertu 日程,并管理日历与多人忙闲。用户要查看某段日期内我的日程、点名查看某个人的忙碌日程、查看指定日历、创建或调整日程、列出可访问日历,或为会议查多人空闲时间时使用。入口为 `vps-work calendar +…`。触发词:日程、日历、行程、安排、创建日程、修改日程、忙闲、空闲时间、agenda、calendar、schedule。",
96
124
  "files": [
97
125
  "skills/vps-calendar/SKILL.md",
98
126
  "skills/vps-calendar/agents/openai.yaml"
@@ -100,11 +128,11 @@
100
128
  },
101
129
  {
102
130
  "name": "vps-documents",
103
- "description": "查询、读取、新建、重命名、复制、导出和共享 Vertu 企业云文档、智能表格与文件夹,并将文档卡片发送到当前 VPS IM 会话。用户提到云文档、V盘文档、企业文档、智能表格、创建文档、读取文档内容、查找文档、修改标题、复制文档、导出 Markdown、设置文档权限或把文档发到当前会话时使用。入口为 `vps-work docs +…`。",
131
+ "description": "查询、读取、新建、重命名、复制、导出和共享 Vertu 企业云文档、智能表格、多维表与文件夹,读取智能表格工作簿并批量更新单元格,操作多维表记录/字段/视图,以及将文档卡片发送到当前 VPS IM 会话。用户提到云文档、V盘文档、企业文档、智能表格、多维表、创建文档、读取或更新表格单元格、修改标题、复制文档、导出 Markdown、设置文档权限或把文档发到当前会话时使用。入口为 `vps-work docs +…`。",
104
132
  "files": [
105
133
  "skills/vps-documents/SKILL.md",
106
- "skills/vps-documents/references/api.md",
107
- "skills/vps-documents/agents/openai.yaml"
134
+ "skills/vps-documents/agents/openai.yaml",
135
+ "skills/vps-documents/references/api.md"
108
136
  ]
109
137
  },
110
138
  {
@@ -123,7 +151,7 @@
123
151
  },
124
152
  {
125
153
  "name": "vps-tools",
126
- "description": "VPS 平台公共工具:按需解析用户附件,以及把本地文件上传到统一 OSS。附件默认读取原文件,复杂 PDF、Office、扫描件才由 Agent 调用 MinerU。",
154
+ "description": "VPS 平台公共工具:按需解析用户附件,以及把本地文件上传到统一 OSS。附件默认读取原文件;只有复杂 PDF、Office、扫描件等确有需要时才调用 `vps-work tools +attachment-parse` 启动 MinerU。",
127
155
  "files": [
128
156
  "skills/vps-tools/SKILL.md",
129
157
  "skills/vps-tools/agents/openai.yaml"
@@ -131,23 +159,25 @@
131
159
  },
132
160
  {
133
161
  "name": "vps-current-user-identity",
134
- "description": "适用场景:用户提到「我」「我的」「本人」「我自己」「我们部门」「本部门」「我的上级」「我的领导」「汇报对象」「我的销售订单 / 采购 / 审批 / 任务」「我创建的」「我负责的」「以我的名义」等任何一人称指代时使用。提供 3 条等价路径取当前身份:(1) CLI vps-work hr +me 一次性返回 user_id / partner_id / employee_id / department_id / department_chain / manager_user_id / company_id;(2) Domain DSL 宏 @me / @my_partner / @my_employee / @my_department / @company / @companies 可在各域命令的 domain 参数中直接用,无需先取身份;(3) vps-work auth status --json 极简身份(uid / login)。常见误区:禁止把 partner_id 当 user_id、禁止扫 res.users 找自己、禁止重复取身份。触发词:我、我的、本人、我自己、我们部门、本部门、我上级、我领导、汇报对象、当前用户、current user、@me、auth status、self identity、me。",
162
+ "description": "适用场景:用户提到「我」「我的」「本人」「我自己」「我们部门」「本部门」「我的上级」「我的领导」「汇报对象」「我的销售订单 / 采购 / 审批 / 任务」「我创建的」「我负责的」「以我的名义」等任何一人称指代时使用。提供 3 条等价路径取当前身份:(1) CLI vps-work hr +me 一次性返回 user_id / employee_id / department_id / department_chain / manager_user_id;(2) Domain DSL 宏 @me / @my_partner / @my_employee / @my_department / @company / @companies 可在各域命令的 domain 参数中直接用,无需先取身份;(3) vps-work auth status --json 极简身份(uid / login)。常见误区:禁止把 partner_id 当 user_id、禁止扫 res.users 找自己、禁止重复取身份。触发词:我、我的、本人、我自己、我们部门、本部门、我上级、我领导、汇报对象、当前用户、current user、@me、auth status、self identity、me。",
135
163
  "files": [
136
- "skills/vps-current-user-identity/SKILL.md"
164
+ "skills/vps-current-user-identity/SKILL.md",
165
+ "skills/vps-current-user-identity/reference.md"
137
166
  ]
138
167
  },
139
168
  {
140
169
  "name": "vps-daily-report-assistant",
141
- "description": "面向 Vertu 日报系统的查询与提交。用户要查打卡未交日报名单、员工日报与个人 OKR、自己的日报、可汇报任务、提交今日日报、同步日报助手卡片时使用。入口 CLI 为 `vps-work report +…`,当前提供 `+checkin-missing`、`+user-summary`、`+mine`、`+tasks`、`+submit`、`+sync`。触发词:日报、未交日报、打卡未交、员工日报、个人 OKR、我的日报、日报任务、提交日报、同步日报助手、daily report。",
170
+ "description": "面向 Vertu 日报系统的查询与提交。用户要查每日应填未交或打卡未交日报名单、本部门日报、员工日报、自己的日报、可汇报任务、提交今日日报、管理员删除当日日报测试数据、同步日报助手卡片时使用。入口 CLI 为 `vps-work report +…`,当前提供 `+missing-daily-reports`、`+checkin-missing`、`+mine`、`+department`、`+tasks`、`+submit`、`+delete-today`、`+sync`。触发词:日报、部门日报、应填未交、未交日报、打卡未交、员工日报、我的日报、日报任务、提交日报、删除今日日报、同步日报助手、daily report。",
142
171
  "files": [
143
172
  "skills/vps-daily-report-assistant/SKILL.md"
144
173
  ]
145
174
  },
146
175
  {
147
176
  "name": "vps-daily-sales-report",
148
- "description": "公司级全部门销售总览,含销售额/销量、新老客销售占比、已对账销售收款、环比/同比、部门目标达成率。通过 `vps-work sales +…` 取数。触发词:总销日报、公司日销、已对账收款、销售收款明细、新老客占比、环比、同比、部门达成率、全部门销售。",
177
+ "description": "公司级全部门销售总览,含销售额/销量、新老客销售占比、环比/同比、商品系列周月趋势、IOT 商品页订单数、已对账销售收款明细、销售单开票申请状态、正式发票、会计凭证与付款状态、含/不含代理折扣、最新组织渠道、高定销售、智能穿戴、大折叠黄金3/黄金4/金钻、部门目标达成率。支持任意时间窗口(CLI: period 枚举或 YYYY-MM-DD、--start-date/--end-date;execute/API: start_date/end_date),数据基于代码化销售行口径 + 管理端同源的部门目标,通过 `vps-work sales +…` 取数。本技能面向公司全部门汇总,并有新客/老客结构、环比/同比/目标达成。触发词:总销日报、公司日销、日报、今日销售、本月销售、已对账收款、销售收款明细、申请开票、开票状态、开票审批、正式发票、会计凭证、付款状态、商品趋势、IOT、商品订单数、商品折扣、含代理、不含代理、高定、智能穿戴、大折叠、黄金3、黄金4、金钻、新客销售、上月、上周、环比、同比、部门达成率、全部门销售。",
149
178
  "files": [
150
- "skills/vps-daily-sales-report/SKILL.md"
179
+ "skills/vps-daily-sales-report/SKILL.md",
180
+ "skills/vps-daily-sales-report/reference.md"
151
181
  ]
152
182
  },
153
183
  {
@@ -161,40 +191,53 @@
161
191
  "name": "vps-hr-compensation-documents",
162
192
  "description": "员工月度工资条只读查询(VPS 原生 HR,vps_tenant_payslips)。本人可查本人已发放工资条,企业管理员可查本企业成员。取数通过 `vps-work hr +payslip`。",
163
193
  "files": [
164
- "skills/vps-hr-compensation-documents/SKILL.md"
194
+ "skills/vps-hr-compensation-documents/SKILL.md",
195
+ "skills/vps-hr-compensation-documents/reference.md",
196
+ "skills/vps-hr-compensation-documents/references/+payslip.md",
197
+ "skills/vps-hr-compensation-documents/references/runtime-and-helpers.md"
165
198
  ]
166
199
  },
167
200
  {
168
201
  "name": "vps-okr-management-assistant",
169
- "description": "面向 Vertu OKR 的结构化取数与分析。部门使用 `vps-work okr +dept-okr`,员工使用 `+employee-okr`;支持按名称或 ID 过滤,周期必须为 YYYY-MM。当前 CLI 不提供 `+org-tree`、`+dept-objectives` 或 `--include-sub-departments`。",
202
+ "description": "面向 Vertu 部门和员工 OKR 的结构化取数与分析。用户询问某月部门 OKR、员工个人 OKR、绩效与管理目标、低分目标、目标金额和实际金额时使用。真实入口只有 `vps-work okr +dept-okr`、`+employee-okr` 及其两个别名;周期必须为 YYYY-MM,可按部门或员工名称、ID 过滤。",
203
+ "files": [
204
+ "skills/vps-okr-management-assistant/SKILL.md",
205
+ "skills/vps-okr-management-assistant/reference.md"
206
+ ]
207
+ },
208
+ {
209
+ "name": "vps-okr",
210
+ "description": "部门与员工 OKR。`vps-work okr +…`。",
170
211
  "files": [
171
- "skills/vps-okr-management-assistant/SKILL.md"
212
+ "skills/vps-okr/SKILL.md"
172
213
  ]
173
214
  },
174
215
  {
175
216
  "name": "vps-pending-approval-assistant",
176
- "description": "提供 VPS 审批相关能力:`vps-work approval +wait` / `+my-submitted` / `+my-approved` 拉取待办与历史视图,`+logs` 看单证轨迹,`+pass` / `+refuse` 在明确意图下操作当前步骤。在用户查看待我审批、审批流、签核历史、我提交的审批、我已批过的单子、同意或驳回、统计待办类型或整理审批队列时使用。业务单据金额/明细等结构化取数由对应业务域 skill 负责,本技能不下钻业务表。",
217
+ "description": "提供 VPS 审批相关能力:`vps-work approval +wait` / `+pending` / `+my-submitted` / `+my-approved` 拉取本人、部门或全员待办与历史视图,`+logs` 看单证轨迹,`+pass` / `+refuse` 在明确意图下操作当前步骤。在用户查看待我审批、审批流、签核历史、我提交的审批、我已批过的单子、同意或驳回、统计待办类型或整理审批队列时使用。业务单据金额/明细等结构化取数由对应业务域 skill 负责,本技能不下钻业务表。",
177
218
  "files": [
178
- "skills/vps-pending-approval-assistant/SKILL.md"
219
+ "skills/vps-pending-approval-assistant/SKILL.md",
220
+ "skills/vps-pending-approval-assistant/reference.md"
179
221
  ]
180
222
  },
181
223
  {
182
224
  "name": "vps-sale-personnel-efficiency",
183
- "description": "面向销售人效(人产、人均产出)、开单率、个人销售业绩查询、个人 OKR 达成、团队/个人 PK 排名等场景。开单率按开单工号数除以有个人业绩目标工号数;人产按业绩除以同一目标人数。两项固定排除国内渠道-国内代理与AI渠道-AI电商并披露排除项。查某人销售额直接用 personal_okr_achievement + salesperson_like。支持任意时间窗口,通过 `vps-work sales +…` 取数。触发词:人效、人产、人均产出、开单率、开单人数、销售业绩、个人业绩、个人 OKR、PK、销售榜单、个人达成率。",
225
+ "description": "面向销售人效(人产、人均产出)、开单率、个人销售业绩查询、个人月度/季度/年度 OKR 达成、团队/个人 PK 排名等场景。查某人销售额/业绩/卖了多少钱直接用 personal_okr_achievement 脚本 + salesperson_like 参数。支持任意时间窗口(CLI: period 枚举或 YYYY-MM-DD、--start-date/--end-date;execute/API: start_date/end_date)。数据基于销售行口径 + Postgres/PMS 个人目标 + 人员信息,通过 `vps-work sales +per-person-kpi` 等命令取数。部门汇总走 vps-daily-sales-report。触发词:人效、人产、人均产出、开单率、开单人数、个人业绩、销售员业绩、个人 OKR、销售员目标、PK、销售榜单、销售员排名、谁卖最多、谁卖了、卖了多少、个人达成率、上月人效、季度达成。",
184
226
  "files": [
185
- "skills/vps-sale-personnel-efficiency/SKILL.md"
227
+ "skills/vps-sale-personnel-efficiency/SKILL.md",
228
+ "skills/vps-sale-personnel-efficiency/reference.md"
186
229
  ]
187
230
  },
188
231
  {
189
232
  "name": "vps-work-onboard",
190
- "description": "新机器安装 vps-work、登录、铺设公开 skill。触发词:装 vps-work、onboard、初始化 vps-work。",
233
+ "description": "新机器安装 vps-work、登录,并把随包分发的公开 vps-* 业务 skill 铺到各 Agent 目录。触发词:装 vps-work、onboard、初始化 vps-work、装 Vertu skills。",
191
234
  "files": [
192
235
  "skills/vps-work-onboard/SKILL.md"
193
236
  ]
194
237
  },
195
238
  {
196
239
  "name": "vps-work",
197
- "description": "VPS Work CLI(npm 包 vps-work,全局命令 vps-work)的安装、登录、使用、升级与卸载引导。触发词:装 vps-work、命令找不到、auth login 报错、升级卸载、Agent skill 安装。",
240
+ "description": "VPS Work CLI(npm 包 vps-work,全局命令 vps-work)的安装、登录、使用、升级与卸载引导。",
198
241
  "files": [
199
242
  "skills/vps-work/SKILL.md"
200
243
  ]
package/USAGE.md CHANGED
@@ -145,7 +145,7 @@ vps-work attendance +schedules --rule-id <rule-id> --from-date 2026-08-26 --to-d
145
145
  vps-work attendance +schedule-preview --rule-id <rule-id> --employee-ids 123,456 --from-date 2026-08-26 --to-date 2026-08-31 --shift-template-id <shift-id>
146
146
  vps-work attendance +schedule-apply --rule-id <rule-id> --items-file ./schedule-plan.json --mode fill_missing --preview-token <token> --client-request-id <uuid>
147
147
  vps-work creative +models --type image
148
- vps-work creative +image --model <id> --prompt "一只金丝猴在雪山上" --aspect-ratio 16:9
148
+ vps-work creative +image --model openai/gpt-image-2.5-sunburst --prompt "一只金丝猴在雪山上" --aspect-ratio 16:9
149
149
  vps-work creative +video --model <id> --prompt "..." --ratio 16:9 --duration 5 --wait
150
150
  vps-work creative +video-status --model <id> --task-id <task_id>
151
151
  vps-work creative +tts --model <id> --text "你好,欢迎使用"
package/dist/vps-work.cjs CHANGED
@@ -61467,7 +61467,7 @@ function attachCreativeShortcuts(parent) {
61467
61467
  printResult5(opts, await vpsServiceGet("/v1/creative/models", query2, baseUrl4, "\u521B\u610F\u5DE5\u574A\u6A21\u578B"));
61468
61468
  });
61469
61469
  attachSharedShortcutOptions(
61470
- parent.command("+image").description("AI \u751F\u56FE / \u6539\u56FE\uFF0C\u8FD4\u56DE image_url \u4E0E\u8BA1\u8D39\uFF08POST /api/aigc/image-edit\uFF09").option("--model <id>", "\u6A21\u578B id \u6216 model_id\uFF08\u5FC5\u586B\uFF09").option("--prompt <text>", "\u753B\u9762\u63D0\u793A\u8BCD\uFF08\u5FC5\u586B\uFF09").option("--source-image-url <url>", "\u53C2\u8003/\u5E95\u56FE URL").option("--reference-images <urls>", "\u53C2\u8003\u56FE URL \u5217\u8868\uFF08\u9017\u53F7\u5206\u9694\uFF09").option("--size <size>", "\u8F93\u51FA\u5C3A\u5BF8\uFF0C\u5982 1024x1024 / auto").option("--quality <q>", "\u8D28\u91CF\uFF1Alow|medium|high|auto").option("--resolution <r>", "\u5206\u8FA8\u7387\u6863\uFF1A512|1K|2K|4K").option("--aspect-ratio <ratio>", "\u5BBD\u9AD8\u6BD4\uFF0C\u5982 1:1 / 16:9").option("--background <text>", "\u80CC\u666F\u63CF\u8FF0").option("--output-compression <n>", "\u8F93\u51FA\u538B\u7F29\u7EA7\u522B\uFF08\u6574\u6570\uFF09").option("--n <n>", "\u751F\u6210\u5F20\u6570\uFF08\u5F53\u524D\u63A5\u53E3\u56FA\u5B9A\u5355\u56FE\uFF09")
61470
+ parent.command("+image").description("AI \u751F\u56FE / \u6539\u56FE\uFF0C\u8FD4\u56DE image_url \u4E0E\u8BA1\u8D39\uFF08POST /api/aigc/image-edit\uFF09").option("--model <id>", "\u6A21\u578B id \u6216 model_id\uFF08\u5FC5\u586B\uFF09").option("--prompt <text>", "\u753B\u9762\u63D0\u793A\u8BCD\uFF08\u5FC5\u586B\uFF09").option("--source-image-url <url>", "\u53C2\u8003/\u5E95\u56FE URL").option("--reference-images <urls>", "\u53C2\u8003\u56FE URL \u5217\u8868\uFF08\u9017\u53F7\u5206\u9694\uFF09").option("--size <size>", "\u8F93\u51FA\u5C3A\u5BF8\uFF0C\u5982 1024x1024 / auto").option("--quality <q>", "\u8D28\u91CF\uFF1Aauto|low|medium|high|xhigh|max\uFF08\u540E\u4E24\u6863\u4EC5 gpt-image-2.5-sunburst\uFF09").option("--resolution <r>", "\u5206\u8FA8\u7387\u6863\uFF1A512|1K|2K|4K").option("--aspect-ratio <ratio>", "\u5BBD\u9AD8\u6BD4\uFF0C\u5982 1:1 / 16:9").option("--background <text>", "\u80CC\u666F\uFF1Aauto|opaque|transparent\uFF08transparent \u4EC5 gpt-image-2.5-sunburst\uFF09").option("--output-compression <n>", "\u8F93\u51FA\u538B\u7F29\u7EA7\u522B\uFF08\u6574\u6570\uFF09").option("--n <n>", "\u751F\u6210\u5F20\u6570\uFF08\u5F53\u524D\u63A5\u53E3\u56FA\u5B9A\u5355\u56FE\uFF09")
61471
61471
  ).action(async (opts, cmd) => {
61472
61472
  if (!opts.model || !opts.prompt) {
61473
61473
  throw new VertuError("\u751F\u56FE\u9700\u8981 --model \u4E0E --prompt");
@@ -61988,10 +61988,10 @@ async function resolveBlockPatch(opts) {
61988
61988
  }
61989
61989
  function parseDocType(value) {
61990
61990
  const normalized = value?.trim() || "block";
61991
- if (normalized === "block" || normalized === "sheet" || normalized === "folder") {
61991
+ if (normalized === "block" || normalized === "sheet" || normalized === "folder" || normalized === "base") {
61992
61992
  return normalized;
61993
61993
  }
61994
- throw new VertuError("--type \u9700\u4E3A block\u3001sheet \u6216 folder\u3002");
61994
+ throw new VertuError("--type \u9700\u4E3A block\u3001sheet\u3001folder \u6216 base\u3002");
61995
61995
  }
61996
61996
  function parseScope(value) {
61997
61997
  const normalized = value?.trim() || "mine";
@@ -62032,7 +62032,7 @@ function text2(recordValue, ...keys) {
62032
62032
  return "";
62033
62033
  }
62034
62034
  function documentType(value) {
62035
- return value === "sheet" || value === "folder" || value === "html" ? value : "block";
62035
+ return value === "sheet" || value === "folder" || value === "html" || value === "base" ? value : "block";
62036
62036
  }
62037
62037
  function documentExcerpt(value) {
62038
62038
  return typeof value === "string" ? value.replace(/\s+/g, " ").trim().slice(0, 800) : "";
@@ -62059,6 +62059,20 @@ async function resolveSheetUpdates(opts) {
62059
62059
  }
62060
62060
  return parsed;
62061
62061
  }
62062
+ async function resolveJsonRecords(opts) {
62063
+ if (opts.records !== void 0 && opts.recordsFile !== void 0) {
62064
+ throw new VertuError("--records \u548C --records-file \u4E0D\u80FD\u540C\u65F6\u4F7F\u7528\u3002");
62065
+ }
62066
+ const raw = await resolveContent({ content: opts.records, contentFile: opts.recordsFile });
62067
+ if (raw === void 0) {
62068
+ throw new VertuError("\u8BF7\u63D0\u4F9B --records \u6216 --records-file\u3002");
62069
+ }
62070
+ const parsed = parseJsonArg(raw, "--records", { fileFlagSuggestion: "--records-file" });
62071
+ if (!Array.isArray(parsed) || parsed.length === 0) {
62072
+ throw new VertuError("\u8BB0\u5F55\u5FC5\u987B\u662F\u975E\u7A7A JSON \u6570\u7EC4\u3002");
62073
+ }
62074
+ return parsed;
62075
+ }
62062
62076
  function positiveIntegerEnv(...keys) {
62063
62077
  for (const key of keys) {
62064
62078
  const raw = process.env[key]?.trim();
@@ -62109,7 +62123,7 @@ function buildDocumentsCommand() {
62109
62123
  printDocumentsResult(opts.json, payload);
62110
62124
  });
62111
62125
  attachBaseOptions(
62112
- documents.command("+create").description("\u65B0\u5EFA\u6587\u6863\u3001\u667A\u80FD\u8868\u683C\u6216\u6587\u4EF6\u5939").requiredOption("--title <title>", "\u6807\u9898").option("--type <type>", "block / sheet / folder", "block").option("--content <text>", "\u65B0\u5EFA\u6587\u6863\u7684 Markdown \u521D\u59CB\u6B63\u6587").option("--content-file <path>", "\u4ECE UTF-8 \u6587\u4EF6\u8BFB\u53D6\u521D\u59CB\u6B63\u6587\uFF1B- \u8868\u793A stdin").option("--parent-id <id>", "\u7236\u6587\u4EF6\u5939 ID")
62126
+ documents.command("+create").description("\u65B0\u5EFA\u6587\u6863\u3001\u667A\u80FD\u8868\u683C\u3001\u591A\u7EF4\u8868\u6216\u6587\u4EF6\u5939").requiredOption("--title <title>", "\u6807\u9898").option("--type <type>", "block / sheet / folder / base", "block").option("--content <text>", "\u65B0\u5EFA\u6587\u6863\u7684 Markdown \u521D\u59CB\u6B63\u6587").option("--content-file <path>", "\u4ECE UTF-8 \u6587\u4EF6\u8BFB\u53D6\u521D\u59CB\u6B63\u6587\uFF1B- \u8868\u793A stdin").option("--parent-id <id>", "\u7236\u6587\u4EF6\u5939 ID")
62113
62127
  ).action(async (opts) => {
62114
62128
  const type = parseDocType(opts.type);
62115
62129
  const content = await resolveContent(opts);
@@ -62231,6 +62245,160 @@ Notes:
62231
62245
  );
62232
62246
  printDocumentsResult(opts.json, payload);
62233
62247
  });
62248
+ attachBaseOptions(
62249
+ documents.command("+base-schema").description("\u8BFB\u53D6\u591A\u7EF4\u8868\u7684\u8868\u3001\u5B57\u6BB5\u548C\u89C6\u56FE").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID")
62250
+ ).action(async (opts) => {
62251
+ printDocumentsResult(
62252
+ opts.json,
62253
+ await documentsRequest("GET", documentPath(required(opts.docId, "--doc-id"), "/base"), {
62254
+ baseUrl: opts.baseUrl
62255
+ })
62256
+ );
62257
+ });
62258
+ attachBaseOptions(
62259
+ documents.command("+base-tables").description("\u5217\u51FA\u591A\u7EF4\u8868\u4E2D\u7684\u6570\u636E\u8868").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID")
62260
+ ).action(async (opts) => {
62261
+ const payload = await documentsRequest(
62262
+ "GET",
62263
+ documentPath(required(opts.docId, "--doc-id"), "/base"),
62264
+ { baseUrl: opts.baseUrl }
62265
+ );
62266
+ printDocumentsResult(opts.json, { tables: payload.base?.tables ?? [] });
62267
+ });
62268
+ attachBaseOptions(
62269
+ documents.command("+base-create-table").description("\u65B0\u5EFA\u4E00\u5F20\u6570\u636E\u8868").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--name <name>", "\u6570\u636E\u8868\u540D\u79F0")
62270
+ ).action(async (opts) => {
62271
+ printDocumentsResult(
62272
+ opts.json,
62273
+ await documentsRequest("POST", documentPath(required(opts.docId, "--doc-id"), "/base/tables"), {
62274
+ baseUrl: opts.baseUrl,
62275
+ body: { name: required(opts.name, "--name") }
62276
+ })
62277
+ );
62278
+ });
62279
+ attachBaseOptions(
62280
+ documents.command("+base-records").description("\u8BFB\u53D6\u591A\u7EF4\u8868\u8BB0\u5F55").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").option("--view-id <id>", "\u6309\u89C6\u56FE\u8FC7\u6EE4").option("--query <text>", "\u5173\u952E\u5B57\u641C\u7D22").option("--limit <n>", "\u8FD4\u56DE\u6761\u6570")
62281
+ ).action(async (opts) => {
62282
+ printDocumentsResult(
62283
+ opts.json,
62284
+ await documentsRequest(
62285
+ "GET",
62286
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/records`),
62287
+ {
62288
+ baseUrl: opts.baseUrl,
62289
+ query: {
62290
+ limit: opts.limit,
62291
+ q: opts.query,
62292
+ viewId: opts.viewId
62293
+ }
62294
+ }
62295
+ )
62296
+ );
62297
+ });
62298
+ attachBaseOptions(
62299
+ documents.command("+base-create-records").description("\u6279\u91CF\u65B0\u589E\u8BB0\u5F55\uFF0Cfields \u4F7F\u7528\u5B57\u6BB5 ID").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").option("--records <json>", "\u8BB0\u5F55 JSON \u6570\u7EC4").option("--records-file <path>", "\u4ECE UTF-8 JSON \u6587\u4EF6\u8BFB\u53D6\u8BB0\u5F55\uFF1B- \u8868\u793A stdin")
62300
+ ).action(async (opts) => {
62301
+ printDocumentsResult(
62302
+ opts.json,
62303
+ await documentsRequest(
62304
+ "POST",
62305
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/records`),
62306
+ {
62307
+ baseUrl: opts.baseUrl,
62308
+ body: { records: await resolveJsonRecords(opts) }
62309
+ }
62310
+ )
62311
+ );
62312
+ });
62313
+ attachBaseOptions(
62314
+ documents.command("+base-update-records").description("\u6279\u91CF\u66F4\u65B0\u8BB0\u5F55\uFF0C\u6BCF\u9879\u9700\u542B id \u548C fields").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").option("--records <json>", "\u66F4\u65B0 JSON \u6570\u7EC4").option("--records-file <path>", "\u4ECE UTF-8 JSON \u6587\u4EF6\u8BFB\u53D6\u66F4\u65B0\uFF1B- \u8868\u793A stdin")
62315
+ ).action(async (opts) => {
62316
+ printDocumentsResult(
62317
+ opts.json,
62318
+ await documentsRequest(
62319
+ "PATCH",
62320
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/records`),
62321
+ {
62322
+ baseUrl: opts.baseUrl,
62323
+ body: { records: await resolveJsonRecords(opts) }
62324
+ }
62325
+ )
62326
+ );
62327
+ });
62328
+ attachBaseOptions(
62329
+ documents.command("+base-create-field").description("\u65B0\u589E\u5B57\u6BB5").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").requiredOption("--name <name>", "\u5B57\u6BB5\u540D\u79F0").requiredOption("--type <type>", "singleLineText / longText / number / singleSelect / multipleSelect / checkbox / date / attachment").option("--choices <json>", "\u5355\u9009/\u591A\u9009\u9009\u9879 JSON \u6570\u7EC4")
62330
+ ).action(async (opts) => {
62331
+ printDocumentsResult(
62332
+ opts.json,
62333
+ await documentsRequest(
62334
+ "POST",
62335
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/fields`),
62336
+ {
62337
+ baseUrl: opts.baseUrl,
62338
+ body: {
62339
+ name: required(opts.name, "--name"),
62340
+ options: opts.choices ? { choices: parseJsonArg(opts.choices, "--choices") } : void 0,
62341
+ type: required(opts.type, "--type")
62342
+ }
62343
+ }
62344
+ )
62345
+ );
62346
+ });
62347
+ attachBaseOptions(
62348
+ documents.command("+base-views").description("\u5217\u51FA\u6570\u636E\u8868\u89C6\u56FE").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID")
62349
+ ).action(async (opts) => {
62350
+ printDocumentsResult(
62351
+ opts.json,
62352
+ await documentsRequest(
62353
+ "GET",
62354
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/views`),
62355
+ { baseUrl: opts.baseUrl }
62356
+ )
62357
+ );
62358
+ });
62359
+ attachBaseOptions(
62360
+ documents.command("+base-create-view").description("\u65B0\u5EFA\u53EA\u8BFB\u89C6\u56FE\u5B9A\u4E49").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").requiredOption("--name <name>", "\u89C6\u56FE\u540D\u79F0").option("--type <type>", "grid / kanban / form", "grid")
62361
+ ).action(async (opts) => {
62362
+ printDocumentsResult(
62363
+ opts.json,
62364
+ await documentsRequest(
62365
+ "POST",
62366
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/views`),
62367
+ {
62368
+ baseUrl: opts.baseUrl,
62369
+ body: { name: required(opts.name, "--name"), type: opts.type ?? "grid" }
62370
+ }
62371
+ )
62372
+ );
62373
+ });
62374
+ attachBaseOptions(
62375
+ documents.command("+base-import").description("\u4ECE CSV \u5BFC\u5165\u8BB0\u5F55").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").option("--csv <text>", "CSV \u6587\u672C").option("--csv-file <path>", "\u4ECE UTF-8 \u6587\u4EF6\u8BFB\u53D6 CSV\uFF1B- \u8868\u793A stdin")
62376
+ ).action(async (opts) => {
62377
+ const csv = await resolveContent({ content: opts.csv, contentFile: opts.csvFile });
62378
+ if (csv === void 0) {
62379
+ throw new VertuError("\u8BF7\u63D0\u4F9B --csv \u6216 --csv-file\u3002");
62380
+ }
62381
+ printDocumentsResult(
62382
+ opts.json,
62383
+ await documentsRequest(
62384
+ "POST",
62385
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/import`),
62386
+ { baseUrl: opts.baseUrl, body: { csv, hasHeader: true } }
62387
+ )
62388
+ );
62389
+ });
62390
+ attachBaseOptions(
62391
+ documents.command("+base-export").description("\u5BFC\u51FA\u5F53\u524D\u89C6\u56FE\u6216\u5168\u8868\u4E3A CSV").requiredOption("--doc-id <id>", "\u591A\u7EF4\u8868\u6587\u6863 ID").requiredOption("--table <id>", "\u6570\u636E\u8868 ID").option("--view-id <id>", "\u6309\u89C6\u56FE\u5BFC\u51FA")
62392
+ ).action(async (opts) => {
62393
+ printDocumentsResult(
62394
+ opts.json,
62395
+ await documentsRequest(
62396
+ "GET",
62397
+ documentPath(required(opts.docId, "--doc-id"), `/base/tables/${encodeURIComponent(required(opts.table, "--table"))}/export`),
62398
+ { baseUrl: opts.baseUrl, query: { viewId: opts.viewId } }
62399
+ )
62400
+ );
62401
+ });
62234
62402
  attachBaseOptions(
62235
62403
  documents.command("+share").description("\u8BBE\u7F6E\u94FE\u63A5\u6216\u4F01\u4E1A\u5185\u90E8\u5171\u4EAB\u6743\u9650").requiredOption("--doc-id <id>", "\u6587\u6863 ID").requiredOption("--mode <mode>", "private / public-view / public-edit / login-view / login-edit / team-view / team-edit")
62236
62404
  ).action(async (opts) => {
@@ -63948,7 +64116,7 @@ function buildCliRootHelpAfter() {
63948
64116
  "",
63949
64117
  " # Content creation (AI image / video / audio)",
63950
64118
  ` ${b} creative +models --type image`,
63951
- ` ${b} creative +image --model <id> --prompt "\u4E00\u53EA\u91D1\u4E1D\u7334\u5728\u96EA\u5C71\u4E0A" --aspect-ratio 16:9`,
64119
+ ` ${b} creative +image --model openai/gpt-image-2.5-sunburst --prompt "\u4E00\u53EA\u91D1\u4E1D\u7334\u5728\u96EA\u5C71\u4E0A" --aspect-ratio 16:9`,
63952
64120
  ` ${b} creative +video --model <id> --prompt "..." --ratio 16:9 --duration 5 --wait`,
63953
64121
  ` ${b} creative +video-status --model <id> --task-id <task_id>`,
63954
64122
  ` ${b} creative +tts --model <id> --text "\u4F60\u597D\uFF0C\u6B22\u8FCE\u4F7F\u7528" --voice-id <voice_id>`,
@@ -64041,7 +64209,7 @@ function rewriteLongFlag(tok) {
64041
64209
  }
64042
64210
 
64043
64211
  // src/bin/vps-work.ts
64044
- var PKG_VERSION = "1.0.0" ? "1.0.0" : "0.0.0-dev";
64212
+ var PKG_VERSION = "1.1.0" ? "1.1.0" : "0.0.0-dev";
64045
64213
  function smartFlagSuggest(flag, candidates) {
64046
64214
  if (!flag.startsWith("--") || flag.length < 4) return "";
64047
64215
  const word = flag.slice(2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vps-work",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "VPS Work CLI - tenant-aware domain shortcuts and bundled agent skills for Cursor / Claude Code / Trae.",
5
5
  "license": "MIT",
6
6
  "author": "he-linyan",
@@ -27,13 +27,13 @@ description: "内容创作画布(创意工坊)AI 生成:生图/改图、
27
27
  | Shortcut | flags |
28
28
  |----------|-------|
29
29
  | `+models` | `--type`(image / video / audio / tts / text) |
30
- | `+image` | `--model`(必填)`--prompt`(必填)`--source-image-url` `--reference-images`(逗号分隔)`--size` `--quality` `--resolution` `--aspect-ratio` `--background` `--output-compression` `--n` |
30
+ | `+image` | `--model`(必填)`--prompt`(必填)`--source-image-url` `--reference-images`(逗号分隔)`--size` `--quality`(`auto\|low\|medium\|high`,Sunburst 另有 `xhigh\|max`)`--resolution` `--aspect-ratio` `--background`(`auto\|opaque`,Sunburst 另有 `transparent`)`--output-compression` `--n` |
31
31
  | `+video` | `--model`(必填)`--prompt` `--reference-images` `--reference-videos` `--reference-audios` `--reference-audio-durations-sec` `--first-frame-image` `--last-frame-image` `--ratio` `--resolution` `--duration` `--generate-audio` `--watermark` `--wait` `--wait-timeout` `--poll-interval` |
32
32
  | `+video-status` | `--model`(必填)`--task-id`(必填) |
33
33
  | `+tts` | `--model`(必填)`--text`(必填)`--voice-id` `--speed` `--vol` `--pitch` `--emotion` `--format` `--sample-rate` `--bitrate` |
34
34
  | `+music` | `--model`(必填)`--prompt`(必填)`--lyrics` `--instrumental` `--lyrics-optimizer` `--format` `--sample-rate` `--bitrate` |
35
35
 
36
- `model` 可填 `model_id`(如 `gpt-image-1`、`doubao-seedance-2-0-*`、`speech-2.8-hd`、`music-2.6`)或模型行 UUID;不确定时先 `creative +models --type <image|video|tts|audio>` 查。
36
+ `model` 可填 `model_id`(如 `openai/gpt-image-2.5-sunburst`、`openai/gpt-image-2`、`google/gemini-3.1-flash-image`、`doubao-seedance-2-0-*`)或模型行 UUID;不确定时先 `creative +models --type <image|video|tts|audio>` 查。
37
37
 
38
38
  ## 生视频(异步)流程
39
39
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vps-documents
3
- description: 查询、读取、新建、重命名、复制、导出和共享 Vertu 企业云文档、智能表格与文件夹,读取智能表格工作簿并批量更新单元格,以及将文档卡片发送到当前 VPS IM 会话。用户提到云文档、V盘文档、企业文档、智能表格、创建文档、读取或更新表格单元格、修改标题、复制文档、导出 Markdown、设置文档权限或把文档发到当前会话时使用。入口为 `vps-work docs +…`。
3
+ description: 查询、读取、新建、重命名、复制、导出和共享 Vertu 企业云文档、智能表格、多维表与文件夹,读取智能表格工作簿并批量更新单元格,操作多维表记录/字段/视图,以及将文档卡片发送到当前 VPS IM 会话。用户提到云文档、V盘文档、企业文档、智能表格、多维表、创建文档、读取或更新表格单元格、修改标题、复制文档、导出 Markdown、设置文档权限或把文档发到当前会话时使用。入口为 `vps-work docs +…`。
4
4
  ---
5
5
 
6
6
  # Vertu 企业云文档
@@ -20,6 +20,14 @@ description: 查询、读取、新建、重命名、复制、导出和共享 Ver
20
20
  | 精确修改段落格式 | `vps-work docs +update-block --doc-id <uuid> --block-id <id> --patch <json>` |
21
21
  | 新建文档 | `vps-work docs +create --title <标题> [--content-file <md>]` |
22
22
  | 新建智能表格 | `vps-work docs +create --title <标题> --type sheet` |
23
+ | 新增多维表 | `vps-work docs +create --title <标题> --type base` |
24
+ | 读取多维表结构 | `vps-work docs +base-schema --doc-id <uuid>` |
25
+ | 读取多维表记录 | `vps-work docs +base-records --doc-id <uuid> --table <id>` |
26
+ | 新增多维表记录 | `vps-work docs +base-create-records --doc-id <uuid> --table <id> --records-file <json>` |
27
+ | 更新多维表记录 | `vps-work docs +base-update-records --doc-id <uuid> --table <id> --records-file <json>` |
28
+ | 新增多维表字段 | `vps-work docs +base-create-field --doc-id <uuid> --table <id> --name <名称> --type <类型>` |
29
+ | 导入 CSV | `vps-work docs +base-import --doc-id <uuid> --table <id> --csv-file <csv>` |
30
+ | 导出 CSV | `vps-work docs +base-export --doc-id <uuid> --table <id>` |
23
31
  | 读取智能表格 | `vps-work docs +sheet-get --doc-id <uuid>` |
24
32
  | 更新智能表格单元格 | `vps-work docs +sheet-set-cells --doc-id <uuid> --updates-file <json>` |
25
33
  | 新建文件夹 | `vps-work docs +create --title <标题> --type folder` |
@@ -53,6 +61,7 @@ description: 查询、读取、新建、重命名、复制、导出和共享 Ver
53
61
  - `public-edit` 会允许持链接编辑,风险较高;用户没有明确要求时不得启用。
54
62
  - 复制、创建、重命名和共享是写操作;根据用户意图执行。删除能力目前不向 Agent CLI 开放。
55
63
  - 命令默认输出 JSON,优先读取 `id`、`title`、`type`、`role`、`shareMode`、`content`。
64
+ - 多维表字段 `--type`:`singleLineText`、`longText`、`number`、`singleSelect`、`multipleSelect`、`checkbox`、`date`、`attachment`。附件字段值为 `{ name, url, mimeType?, sizeBytes? }` 数组。
56
65
 
57
66
  ## 示例
58
67
 
@@ -14,6 +14,17 @@ CLI 统一请求 `vps-service`,由服务端校验 Hermes Agent Key、解析当
14
14
  | `docs +update-block` | `PATCH /v1/documents/:id/blocks/:blockId` | 在协作事务内精确修改一个块的白名单格式 |
15
15
  | `docs +sheet-get` | `GET /v1/documents/:id/sheet` | 返回智能表格当前工作簿 JSON |
16
16
  | `docs +sheet-set-cells` | `PUT /v1/documents/:id/sheet` | 通过实时协作工作簿批量更新 A1 单元格 |
17
+ | `docs +base-schema` | `GET /v1/documents/:id/base` | 多维表结构 |
18
+ | `docs +base-tables` | `GET /v1/documents/:id/base` | 从 schema 取出 tables |
19
+ | `docs +base-create-table` | `POST /v1/documents/:id/base/tables` | 新建数据表 |
20
+ | `docs +base-records` | `GET /v1/documents/:id/base/tables/:tableId/records` | 记录列表 |
21
+ | `docs +base-create-records` | `POST /v1/documents/:id/base/tables/:tableId/records` | 批量新增记录 |
22
+ | `docs +base-update-records` | `PATCH /v1/documents/:id/base/tables/:tableId/records` | 批量更新记录 |
23
+ | `docs +base-create-field` | `POST /v1/documents/:id/base/tables/:tableId/fields` | 新增字段 |
24
+ | `docs +base-views` | `GET /v1/documents/:id/base/tables/:tableId/views` | 视图列表 |
25
+ | `docs +base-create-view` | `POST /v1/documents/:id/base/tables/:tableId/views` | 新建视图 |
26
+ | `docs +base-import` | `POST /v1/documents/:id/base/tables/:tableId/import` | CSV 导入 |
27
+ | `docs +base-export` | `GET /v1/documents/:id/base/tables/:tableId/export` | CSV 导出 |
17
28
  | `docs +share` | `POST /v1/documents/:id/share` | 修改共享模式 |
18
29
  | `docs +send` | `GET /v1/documents/:id` + 可选 `POST /share` + IM 消息接口 | 生成 `document_share` 卡片并发送到当前 Hermes/VPS IM 会话 |
19
30
  | `docs +duplicate` | `POST /v1/documents/:id/duplicate` | 复制文档 |
@@ -36,6 +47,7 @@ API 调用方若不是 `vps-work`,也应调用公开的 `/v1/documents` 接口
36
47
 
37
48
  - `block`:块文档,创建时支持 Markdown 初始正文。
38
49
  - `sheet`:智能表格,支持创建、查询、读取工作簿、批量更新单元格、重命名、复制、共享和导出。
50
+ - `base`:多维表,独立服务保存表/字段/记录/视图;权限继承云文档 ACL。
39
51
  - `folder`:文件夹,用 `parentId` 组织层级。
40
52
 
41
53
  ## 共享模式