vps-work 2.5.1 → 2.7.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.
- package/.well-known/skills/index.json +14 -4
- package/README.md +1 -0
- package/USAGE.md +22 -0
- package/dist/vps-work.cjs +824 -546
- package/package.json +1 -1
- package/skills/vps-documents/references/api.md +4 -0
- package/skills/vps-okr/SKILL.md +12 -2
- package/skills/vps-okr-management-assistant/SKILL.md +2 -0
- package/skills/vps-store-management/references/store-reception.md +14 -2
- package/dist/packages/vps-work/src/bin/vps-work.js +0 -271
- package/dist/packages/vps-work/src/commands/agent/index.js +0 -264
- package/dist/packages/vps-work/src/commands/approval/index.js +0 -7
- package/dist/packages/vps-work/src/commands/approval/shortcuts.js +0 -259
- package/dist/packages/vps-work/src/commands/attendance/applications.js +0 -21
- package/dist/packages/vps-work/src/commands/attendance/index.js +0 -9
- package/dist/packages/vps-work/src/commands/attendance/scheduling.js +0 -183
- package/dist/packages/vps-work/src/commands/attendance/shortcuts.js +0 -131
- package/dist/packages/vps-work/src/commands/auth/check.js +0 -34
- package/dist/packages/vps-work/src/commands/auth/index.js +0 -21
- package/dist/packages/vps-work/src/commands/auth/list.js +0 -50
- package/dist/packages/vps-work/src/commands/auth/scopes.js +0 -17
- package/dist/packages/vps-work/src/commands/auth/status.js +0 -127
- package/dist/packages/vps-work/src/commands/auth/tenants.js +0 -35
- package/dist/packages/vps-work/src/commands/auth/use.js +0 -40
- package/dist/packages/vps-work/src/commands/calendar/index.js +0 -7
- package/dist/packages/vps-work/src/commands/calendar/shortcuts.js +0 -598
- package/dist/packages/vps-work/src/commands/catalog.js +0 -29
- package/dist/packages/vps-work/src/commands/cli-install.js +0 -70
- package/dist/packages/vps-work/src/commands/collab-invoke.js +0 -19
- package/dist/packages/vps-work/src/commands/corporate/index.js +0 -204
- package/dist/packages/vps-work/src/commands/creative/index.js +0 -369
- package/dist/packages/vps-work/src/commands/documents/index.js +0 -991
- package/dist/packages/vps-work/src/commands/drive/index.js +0 -435
- package/dist/packages/vps-work/src/commands/exec.js +0 -46
- package/dist/packages/vps-work/src/commands/hr/business.js +0 -22
- package/dist/packages/vps-work/src/commands/hr/data-view-shortcuts.js +0 -519
- package/dist/packages/vps-work/src/commands/hr/index.js +0 -15
- package/dist/packages/vps-work/src/commands/hr/job-responsibilities.js +0 -266
- package/dist/packages/vps-work/src/commands/hr/payslip.js +0 -45
- package/dist/packages/vps-work/src/commands/hr/shortcuts.js +0 -146
- package/dist/packages/vps-work/src/commands/im/im-message-payload.js +0 -150
- package/dist/packages/vps-work/src/commands/im/index.js +0 -7
- package/dist/packages/vps-work/src/commands/im/shortcuts.js +0 -856
- package/dist/packages/vps-work/src/commands/knowledge/index.js +0 -36
- package/dist/packages/vps-work/src/commands/login.js +0 -52
- package/dist/packages/vps-work/src/commands/logout.js +0 -12
- package/dist/packages/vps-work/src/commands/mail/email.js +0 -132
- package/dist/packages/vps-work/src/commands/mail/index.js +0 -9
- package/dist/packages/vps-work/src/commands/mail/shortcuts.js +0 -43
- package/dist/packages/vps-work/src/commands/meeting/index.js +0 -7
- package/dist/packages/vps-work/src/commands/meeting/shortcuts.js +0 -120
- package/dist/packages/vps-work/src/commands/odoo-invoke.js +0 -21
- package/dist/packages/vps-work/src/commands/odoo-leaf-registry.js +0 -13
- package/dist/packages/vps-work/src/commands/office/index.js +0 -59
- package/dist/packages/vps-work/src/commands/okr/index.js +0 -7
- package/dist/packages/vps-work/src/commands/okr/shortcuts.js +0 -75
- package/dist/packages/vps-work/src/commands/org-structure.js +0 -347
- package/dist/packages/vps-work/src/commands/popup/index.js +0 -147
- package/dist/packages/vps-work/src/commands/product/abnormal-statistics.js +0 -250
- package/dist/packages/vps-work/src/commands/product/data-view-shortcuts.js +0 -253
- package/dist/packages/vps-work/src/commands/product/index.js +0 -11
- package/dist/packages/vps-work/src/commands/purchase/index.js +0 -45
- package/dist/packages/vps-work/src/commands/reauth.js +0 -127
- package/dist/packages/vps-work/src/commands/report/index.js +0 -7
- package/dist/packages/vps-work/src/commands/report/missing-daily-reports.js +0 -9
- package/dist/packages/vps-work/src/commands/report/shortcuts.js +0 -251
- package/dist/packages/vps-work/src/commands/sales/index.js +0 -11
- package/dist/packages/vps-work/src/commands/sales/period-params.js +0 -75
- package/dist/packages/vps-work/src/commands/sales/shortcuts-personnel.js +0 -124
- package/dist/packages/vps-work/src/commands/sales/shortcuts.js +0 -800
- package/dist/packages/vps-work/src/commands/shortcut-common.js +0 -88
- package/dist/packages/vps-work/src/commands/shortcut-params.js +0 -22
- package/dist/packages/vps-work/src/commands/skill/index.js +0 -136
- package/dist/packages/vps-work/src/commands/skill/personal.js +0 -167
- package/dist/packages/vps-work/src/commands/store/index.js +0 -82
- package/dist/packages/vps-work/src/commands/task/index.js +0 -7
- package/dist/packages/vps-work/src/commands/task/task-center.js +0 -595
- package/dist/packages/vps-work/src/commands/tools/index.js +0 -127
- package/dist/packages/vps-work/src/commands/vemory/index.js +0 -7
- package/dist/packages/vps-work/src/commands/vemory/shortcuts.js +0 -53
- package/dist/packages/vps-work/src/commands/vertu-aisales.js +0 -30
- package/dist/packages/vps-work/src/commands/vertu-erp.js +0 -30
- package/dist/packages/vps-work/src/core/aisales-mcp-client.js +0 -35
- package/dist/packages/vps-work/src/core/auth.js +0 -240
- package/dist/packages/vps-work/src/core/cli-bin.js +0 -11
- package/dist/packages/vps-work/src/core/cli-root-help.js +0 -190
- package/dist/packages/vps-work/src/core/client.js +0 -158
- package/dist/packages/vps-work/src/core/config.js +0 -183
- package/dist/packages/vps-work/src/core/corporate-client.js +0 -52
- package/dist/packages/vps-work/src/core/creative-attachment-download.js +0 -48
- package/dist/packages/vps-work/src/core/documents-client.js +0 -57
- package/dist/packages/vps-work/src/core/endpoints.js +0 -46
- package/dist/packages/vps-work/src/core/erp-mcp-client.js +0 -11
- package/dist/packages/vps-work/src/core/errors.js +0 -107
- package/dist/packages/vps-work/src/core/execute-catalog-client.js +0 -42
- package/dist/packages/vps-work/src/core/hermes-client.js +0 -70
- package/dist/packages/vps-work/src/core/im-attachment-download.js +0 -109
- package/dist/packages/vps-work/src/core/im-client.js +0 -64
- package/dist/packages/vps-work/src/core/keychain.js +0 -58
- package/dist/packages/vps-work/src/core/mail-client.js +0 -82
- package/dist/packages/vps-work/src/core/mcp-client.js +0 -129
- package/dist/packages/vps-work/src/core/office-client.js +0 -25
- package/dist/packages/vps-work/src/core/office-files.js +0 -82
- package/dist/packages/vps-work/src/core/paths.js +0 -70
- package/dist/packages/vps-work/src/core/public-result.js +0 -43
- package/dist/packages/vps-work/src/core/sales-invoice-attachments-client.js +0 -75
- package/dist/packages/vps-work/src/core/sales-query-client.js +0 -452
- package/dist/packages/vps-work/src/core/skill-catalog.js +0 -158
- package/dist/packages/vps-work/src/core/skill-key.js +0 -19
- package/dist/packages/vps-work/src/core/v-drive-store.js +0 -392
- package/dist/packages/vps-work/src/core/vertu-agent-env.js +0 -32
- package/dist/packages/vps-work/src/core/vps-auth-scopes.js +0 -73
- package/dist/packages/vps-work/src/core/vps-service-auth.js +0 -382
- package/dist/packages/vps-work/src/core/vps-service-config.js +0 -83
- package/dist/packages/vps-work/src/core/vps-service-http.js +0 -187
- package/dist/packages/vps-work/src/utils/at-file.js +0 -34
- package/dist/packages/vps-work/src/utils/cli-option-helpers.js +0 -52
- package/dist/packages/vps-work/src/utils/frontmatter.js +0 -26
- package/dist/packages/vps-work/src/utils/normalize-argv.js +0 -51
- package/dist/packages/vps-work/src/utils/parse-json-arg.js +0 -85
- package/dist/packages/vps-work/src/utils/prompt.js +0 -46
- package/dist/packages/vps-work/src/utils/read-text.js +0 -44
- package/dist/packages/vps-work/src/utils/schema-to-options.js +0 -307
- package/dist/packages/vps-work/src/utils/unwrap-envelope.js +0 -31
- package/dist/shared/im-org-tree/index.js +0 -200
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IM 通讯录组织架构:部门列表口径与树构建(vps-service / im-desktop 共用)。
|
|
3
|
-
* 数据源以 `/v1/im/org/departments` 返回的 VPS 原生企业组织为准。
|
|
4
|
-
*/
|
|
5
|
-
/** 身份同步占位部门在通讯录中的展示名,与 vps_org_units.unit_key=unassigned 对应。 */
|
|
6
|
-
export const UNASSIGNED_ORG_DEPARTMENT_NAME = '未分配部门';
|
|
7
|
-
/** 通讯录不展示身份同步占位部门。 */
|
|
8
|
-
export function isUnassignedDirectoryDepartment(department) {
|
|
9
|
-
return department.name.trim() === UNASSIGNED_ORG_DEPARTMENT_NAME
|
|
10
|
-
|| department.complete_name?.trim() === UNASSIGNED_ORG_DEPARTMENT_NAME;
|
|
11
|
-
}
|
|
12
|
-
export function excludeUnassignedDirectoryDepartments(departments) {
|
|
13
|
-
return departments.filter((department) => !isUnassignedDirectoryDepartment(department));
|
|
14
|
-
}
|
|
15
|
-
export function imOrgDepartmentDisplayName(department) {
|
|
16
|
-
const name = department.name.trim();
|
|
17
|
-
if (name) {
|
|
18
|
-
return name;
|
|
19
|
-
}
|
|
20
|
-
const complete = department.complete_name?.trim();
|
|
21
|
-
if (complete) {
|
|
22
|
-
return complete;
|
|
23
|
-
}
|
|
24
|
-
return `部门 ${department.department_id}`;
|
|
25
|
-
}
|
|
26
|
-
export function sortImOrgDepartmentsByName(a, b) {
|
|
27
|
-
return imOrgDepartmentDisplayName(a).localeCompare(imOrgDepartmentDisplayName(b), 'zh-CN');
|
|
28
|
-
}
|
|
29
|
-
/** 通讯录口径:去掉本部门及全部子部门都没有在职人员的节点。 */
|
|
30
|
-
export function filterImOrgDepartmentsWithSubtreeStaff(departments) {
|
|
31
|
-
const byId = new Map();
|
|
32
|
-
const childrenByParent = new Map();
|
|
33
|
-
for (const dept of departments) {
|
|
34
|
-
byId.set(dept.department_id, dept);
|
|
35
|
-
const parentId = dept.parent_id;
|
|
36
|
-
if (parentId !== null) {
|
|
37
|
-
const siblings = childrenByParent.get(parentId) ?? [];
|
|
38
|
-
siblings.push(dept.department_id);
|
|
39
|
-
childrenByParent.set(parentId, siblings);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const subtreeTotals = new Map();
|
|
43
|
-
const computeSubtreeTotal = (departmentId) => {
|
|
44
|
-
const cached = subtreeTotals.get(departmentId);
|
|
45
|
-
if (cached !== undefined) {
|
|
46
|
-
return cached;
|
|
47
|
-
}
|
|
48
|
-
const dept = byId.get(departmentId);
|
|
49
|
-
if (!dept) {
|
|
50
|
-
return 0;
|
|
51
|
-
}
|
|
52
|
-
let total = dept.employee_count;
|
|
53
|
-
for (const childId of childrenByParent.get(departmentId) ?? []) {
|
|
54
|
-
total += computeSubtreeTotal(childId);
|
|
55
|
-
}
|
|
56
|
-
subtreeTotals.set(departmentId, total);
|
|
57
|
-
return total;
|
|
58
|
-
};
|
|
59
|
-
for (const dept of departments) {
|
|
60
|
-
computeSubtreeTotal(dept.department_id);
|
|
61
|
-
}
|
|
62
|
-
return departments.filter((dept) => (subtreeTotals.get(dept.department_id) ?? 0) > 0);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* 构建森林:父节点不在当前列表中的部门提升为根(与 IM 通讯录一致)。
|
|
66
|
-
*/
|
|
67
|
-
export function buildImOrgDepartmentForest(departments) {
|
|
68
|
-
const nodes = new Map();
|
|
69
|
-
for (const department of departments) {
|
|
70
|
-
nodes.set(department.department_id, {
|
|
71
|
-
department,
|
|
72
|
-
children: [],
|
|
73
|
-
subtreeEmployeeCount: 0,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
const roots = [];
|
|
77
|
-
for (const node of nodes.values()) {
|
|
78
|
-
const parentId = node.department.parent_id;
|
|
79
|
-
const parent = parentId !== null ? nodes.get(parentId) : undefined;
|
|
80
|
-
if (parent) {
|
|
81
|
-
parent.children.push(node);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
roots.push(node);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const fillSubtreeCount = (node) => {
|
|
88
|
-
node.subtreeEmployeeCount =
|
|
89
|
-
node.department.employee_count +
|
|
90
|
-
node.children.reduce((sum, child) => sum + fillSubtreeCount(child), 0);
|
|
91
|
-
return node.subtreeEmployeeCount;
|
|
92
|
-
};
|
|
93
|
-
roots.sort((a, b) => sortImOrgDepartmentsByName(a.department, b.department));
|
|
94
|
-
const sortRecursive = (items) => {
|
|
95
|
-
items.sort((a, b) => sortImOrgDepartmentsByName(a.department, b.department));
|
|
96
|
-
for (const item of items) {
|
|
97
|
-
sortRecursive(item.children);
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
sortRecursive(roots);
|
|
101
|
-
roots.forEach(fillSubtreeCount);
|
|
102
|
-
return roots;
|
|
103
|
-
}
|
|
104
|
-
/** 企业根名称与公司名重复时,这一级只是容器:有下级则提升子部门,没有则不再单独占一层。 */
|
|
105
|
-
export function flattenDuplicateCompanyRoot(forest, companyName) {
|
|
106
|
-
const company = companyName.trim();
|
|
107
|
-
if (!company)
|
|
108
|
-
return { forest, collapsedRoots: [] };
|
|
109
|
-
const collapsedRoots = [];
|
|
110
|
-
const next = [];
|
|
111
|
-
for (const node of forest) {
|
|
112
|
-
const name = node.department.name.trim();
|
|
113
|
-
const path = node.department.complete_name?.trim() || name;
|
|
114
|
-
const sameCompany = name === company && (path === company || path === name);
|
|
115
|
-
if (!sameCompany) {
|
|
116
|
-
next.push(node);
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
collapsedRoots.push(node);
|
|
120
|
-
next.push(...node.children);
|
|
121
|
-
}
|
|
122
|
-
return { forest: next, collapsedRoots };
|
|
123
|
-
}
|
|
124
|
-
function matchesImOrgDepartmentKeyword(department, keyword) {
|
|
125
|
-
const q = keyword.trim().toLowerCase();
|
|
126
|
-
if (!q) {
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
const haystack = [
|
|
130
|
-
department.department_id,
|
|
131
|
-
department.parent_id,
|
|
132
|
-
department.name,
|
|
133
|
-
department.complete_name,
|
|
134
|
-
department.employee_count,
|
|
135
|
-
]
|
|
136
|
-
.join(' ')
|
|
137
|
-
.toLowerCase();
|
|
138
|
-
return haystack.includes(q);
|
|
139
|
-
}
|
|
140
|
-
export function filterImOrgDepartmentForestByKeyword(nodes, keyword) {
|
|
141
|
-
if (!keyword.trim()) {
|
|
142
|
-
return nodes;
|
|
143
|
-
}
|
|
144
|
-
const filtered = [];
|
|
145
|
-
for (const node of nodes) {
|
|
146
|
-
const childMatches = filterImOrgDepartmentForestByKeyword(node.children, keyword);
|
|
147
|
-
if (matchesImOrgDepartmentKeyword(node.department, keyword) || childMatches.length > 0) {
|
|
148
|
-
filtered.push({
|
|
149
|
-
department: node.department,
|
|
150
|
-
subtreeEmployeeCount: node.subtreeEmployeeCount,
|
|
151
|
-
children: childMatches.length > 0 ? childMatches : node.children,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
return filtered;
|
|
156
|
-
}
|
|
157
|
-
export function collectImOrgDepartmentForestIds(nodes) {
|
|
158
|
-
const ids = [];
|
|
159
|
-
const walk = (items) => {
|
|
160
|
-
for (const node of items) {
|
|
161
|
-
ids.push(node.department.department_id);
|
|
162
|
-
walk(node.children);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
walk(nodes);
|
|
166
|
-
return ids;
|
|
167
|
-
}
|
|
168
|
-
export function buildImOrgDepartmentChildrenIndex(departments) {
|
|
169
|
-
const childrenByParent = new Map();
|
|
170
|
-
const knownIds = new Set(departments.map((dept) => dept.department_id));
|
|
171
|
-
for (const department of departments) {
|
|
172
|
-
const parentId = department.parent_id;
|
|
173
|
-
if (parentId === null || !knownIds.has(parentId)) {
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
const siblings = childrenByParent.get(parentId) ?? [];
|
|
177
|
-
siblings.push(department.department_id);
|
|
178
|
-
childrenByParent.set(parentId, siblings);
|
|
179
|
-
}
|
|
180
|
-
return childrenByParent;
|
|
181
|
-
}
|
|
182
|
-
export function resolveImOrgDepartmentSubtreeScope(childrenByParent, selectedDepartmentIds) {
|
|
183
|
-
if (!selectedDepartmentIds.length) {
|
|
184
|
-
return new Set();
|
|
185
|
-
}
|
|
186
|
-
const scope = new Set();
|
|
187
|
-
const walk = (departmentId) => {
|
|
188
|
-
if (scope.has(departmentId)) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
scope.add(departmentId);
|
|
192
|
-
for (const childId of childrenByParent.get(departmentId) ?? []) {
|
|
193
|
-
walk(childId);
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
for (const departmentId of selectedDepartmentIds) {
|
|
197
|
-
walk(departmentId);
|
|
198
|
-
}
|
|
199
|
-
return scope;
|
|
200
|
-
}
|