weaver-work-cli 0.1.38 → 0.1.39
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 +4 -2
- package/dist/chunks/{archive-PDV724YK.js → archive-ENZYBBME.js} +556 -66
- package/dist/chunks/{archive-oa-4XE4MNXQ.js → archive-oa-YWLEC5V4.js} +2 -2
- package/dist/chunks/{asset-PDL2QE2N.js → asset-OOV6DWPA.js} +2 -2
- package/dist/chunks/asset-idle-RE632MY5.js +670 -0
- package/dist/chunks/{attachment-content-MDDGOE5E.js → attachment-content-RWN2FCLL.js} +3 -3
- package/dist/chunks/{blog-UYR3EUXW.js → blog-PEPOJAL7.js} +2 -2
- package/dist/chunks/{caizhilian-LG2X5NMF.js → caizhilian-WYIQDVPJ.js} +2 -2
- package/dist/chunks/{calendar-FG4BAZHE.js → calendar-CIARBAOX.js} +2 -2
- package/dist/chunks/{chunk-6FTTSA45.js → chunk-36DIFZAH.js} +2 -2
- package/dist/chunks/{chunk-UJJD4QWF.js → chunk-BJGXMFGD.js} +2 -2
- package/dist/chunks/{chunk-ELYDWBZJ.js → chunk-CQHGNCK2.js} +1 -1
- package/dist/chunks/{chunk-XJY7G4DD.js → chunk-EINRJHQ3.js} +3 -3
- package/dist/chunks/{chunk-UZZBA6PV.js → chunk-EZGFHJFW.js} +28 -6
- package/dist/chunks/{chunk-NI6GIPIM.js → chunk-F2EQXUEE.js} +438 -387
- package/dist/chunks/{chunk-VRYHGG6O.js → chunk-GVPJZXJ2.js} +3 -3
- package/dist/chunks/{chunk-IZUDA353.js → chunk-HJYVHXUQ.js} +1 -1
- package/dist/chunks/{chunk-KKRL3REV.js → chunk-I2HB737U.js} +2 -2
- package/dist/chunks/{chunk-NR6RKXPA.js → chunk-K3RUEEOL.js} +4 -2
- package/dist/chunks/{chunk-6LTFIFLM.js → chunk-KTCB5R5H.js} +2 -2
- package/dist/chunks/{chunk-J7USS3ED.js → chunk-L4N7B7ZD.js} +4 -4
- package/dist/chunks/{chunk-CORFRD7Q.js → chunk-MUQUHKPG.js} +2 -2
- package/dist/chunks/{chunk-DMV2TOMH.js → chunk-NLK2RZKG.js} +46 -46
- package/dist/chunks/{chunk-JSMFPO43.js → chunk-P2DAISYW.js} +1 -1
- package/dist/chunks/{chunk-GGJFMNJM.js → chunk-T7JDJJ7H.js} +3 -3
- package/dist/chunks/{chunk-OJQUJZQF.js → chunk-XXJOSZTQ.js} +2 -0
- package/dist/chunks/{chunk-Z32KWY6G.js → chunk-YS5DPN4T.js} +1 -1
- package/dist/chunks/{chunk-EG6ZU444.js → chunk-ZUX3P6BQ.js} +10 -5
- package/dist/chunks/{chunk-FUWVHMVV.js → chunk-ZXRNHZTE.js} +2 -2
- package/dist/chunks/{conflict-BQZEQ4SP.js → conflict-DRMDOL56.js} +2 -2
- package/dist/chunks/{contract-XIRAFTEV.js → contract-73MERZWN.js} +2 -2
- package/dist/chunks/{cowork-BLG62BL2.js → cowork-HNGBPD7A.js} +2 -2
- package/dist/chunks/{ebuilder-form-NUKG5QW4.js → ebuilder-form-OY6DVNRK.js} +3 -3
- package/dist/chunks/{ehr-2STW5ILH.js → ehr-RAQNEQO7.js} +2 -2
- package/dist/chunks/{esb-UUDQUNKY.js → esb-6XV7C7YV.js} +4 -4
- package/dist/chunks/{fna-6RCY4NU5.js → fna-XTSRB7G7.js} +2 -2
- package/dist/chunks/{host-RHM3NPXV.js → host-3F5UM5GN.js} +3 -3
- package/dist/chunks/{host-EJZFROU3.js → host-A7J6GDUP.js} +3 -3
- package/dist/chunks/{host-FWDOSRH5.js → host-VGPVP7YF.js} +3 -3
- package/dist/chunks/{host-7RXEDMAH.js → host-YAQAPYNP.js} +3 -3
- package/dist/chunks/{host-UFF33TWJ.js → host-YMBXWFWX.js} +3 -3
- package/dist/chunks/{hrm-PKJ6ELSH.js → hrm-TLHKC545.js} +3 -3
- package/dist/chunks/{im-YJAXS7CO.js → im-YOUCFMUK.js} +3 -3
- package/dist/chunks/{invoice-HWVSXGX6.js → invoice-WNBS2B4C.js} +3 -3
- package/dist/chunks/{jiuchuanhui-L7VKILZB.js → jiuchuanhui-XABWS5RN.js} +2 -2
- package/dist/chunks/{lazy-dispatch-NMYEIHRH.js → lazy-dispatch-NLZ5UQQI.js} +5 -5
- package/dist/chunks/{mail-B42RRU7G.js → mail-LRYMBFNL.js} +2 -2
- package/dist/chunks/{meeting-CFYVBJSS.js → meeting-ESXL6MFI.js} +10 -10
- package/dist/chunks/{okr-GCLF6V7W.js → okr-EOV65SSF.js} +2 -2
- package/dist/chunks/{plan-ZVL7GBRI.js → plan-YFPVKW6Y.js} +2 -2
- package/dist/chunks/{project-4YWAAE2K.js → project-MDVZUYQW.js} +2 -2
- package/dist/chunks/{registry-EP4VTHZS.js → registry-QCLZEDAP.js} +8 -8
- package/dist/chunks/{registry-FRJ6H7BT.js → registry-VT5Y2HLA.js} +4 -4
- package/dist/chunks/{registry-SG2PGVCF.js → registry-YX4CSEMD.js} +3 -3
- package/dist/chunks/{room-recommend-R3JVUUAC.js → room-recommend-L3MWH4JW.js} +4 -4
- package/dist/chunks/{schedule-NIJBTYDO.js → schedule-UASAVDVD.js} +4 -4
- package/dist/chunks/{workflow-BB24DFBY.js → workflow-KDGIUCNW.js} +9 -6
- package/dist/core/output.js +16 -6
- package/dist/index.js +33 -28
- package/dist/internal/e10/auth/messages.js +1 -0
- package/dist/internal/e10/auth-recovery.js +13 -6
- package/dist/internal/e10/context.js +16 -3
- package/dist/internal/e10/request-runtime.js +3 -1
- package/dist/shortcuts/archive/host.js +2 -0
- package/dist/shortcuts/archive/manifest.js +1 -1
- package/dist/shortcuts/archive/operations/borrow-list.js +13 -1
- package/dist/shortcuts/archive/operations/flow-url.js +1 -1
- package/dist/shortcuts/archive/operations/prelib.js +472 -0
- package/dist/shortcuts/archive/operations/registry.js +2 -0
- package/dist/shortcuts/archive/operations/upload.js +1 -1
- package/dist/shortcuts/asset-idle/errors.js +44 -0
- package/dist/shortcuts/asset-idle/host.js +161 -0
- package/dist/shortcuts/asset-idle/index.js +114 -0
- package/dist/shortcuts/asset-idle/manifest.js +159 -0
- package/dist/shortcuts/asset-idle/operations/idle.js +47 -0
- package/dist/shortcuts/asset-idle/operations/registry.js +33 -0
- package/dist/shortcuts/asset-idle/operations/shared.js +142 -0
- package/dist/shortcuts/asset-idle/operations/types.js +9 -0
- package/dist/shortcuts/asset-idle/operations.js +15 -0
- package/dist/shortcuts/index.js +5 -0
- package/dist/shortcuts/workflow/host.js +3 -0
- package/dist/shortcuts/workflow/index.js +1 -1
- package/dist/shortcuts/workflow/operations/form.js +46 -171
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupRules.js +77 -26
- package/dist/shortcuts/workflow/operations/todoSmartConvert/aigroupStore.js +6 -0
- package/dist/shortcuts/workflow/operations/todoSmartConvert/summaryCache.js +59 -117
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailCache.js +44 -7
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoDetailFetcher.js +37 -29
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.collect.js +20 -6
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.detail.js +22 -18
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.groupSummary.js +34 -10
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.js +4 -2
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.smartGroup.js +9 -2
- package/dist/shortcuts/workflow/operations/todoSmartConvert/todoSmartConvert.summary.js +110 -20
- package/docs/_catalog.md +3 -0
- package/docs/asset-idle.md +45 -0
- package/docs/e10-auth.md +1 -1
- package/docs/todo-smart-convert/subgroup-rules.md +1 -1
- package/package.json +1 -1
- package/scripts/package-skill.mjs +2 -0
- package/skill-template/business-info.json +14 -1
- package/skill-template/domains/asset-idle.md +13 -0
- package/skill-template/domains/wenshuding.md +3 -0
- package/skills/weaver-e10-archive-oa/SKILL.md +1 -0
- package/skills/weaver-e10-archive-oa/references/my-borrow.md +49 -0
- package/skills/weaver-e10-asset-idle/SKILL.md +73 -0
- package/skills/weaver-e10-asset-idle/references/idle-list.md +62 -0
- package/skills/weaver-e10-asset-idle/references/idle-stats-and-charts.md +65 -0
- package/skills/weaver-e10-asset-idle/references/source-manifest.json +193 -0
- package/skills/weaver-e10-asset-idle/references/widget-style.md +205 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +29 -11
- package/skills/weaver-e10-caizhilian/references/auth-and-install.md +12 -0
- package/skills/weaver-e10-caizhilian/references/files.md +1 -1
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +1 -1
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +45 -45
- package/skills/weaver-e10-cowork/SKILL.md +2 -0
- package/skills/weaver-e10-jucailin/SKILL.md +2 -0
- package/skills/weaver-e10-jucailin/references/recruit-read.md +2 -0
- package/skills/weaver-e10-jucailin/references/recruit-write.md +1 -1
- package/skills/weaver-e10-mail/SKILL.md +3 -0
- package/skills/weaver-e10-shared/SKILL.md +5 -5
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +3 -3
- package/skills/weaver-e10-wenshuding/SKILL.md +29 -6
- package/skills/weaver-e10-wenshuding/references/archive-borrow-list.md +14 -0
- package/skills/weaver-e10-wenshuding/references/archive-download.md +2 -0
- package/skills/weaver-e10-wenshuding/references/archive-flow.md +1 -1
- package/skills/weaver-e10-wenshuding/references/archive-prelib-arrange.md +76 -0
- package/skills/weaver-e10-wenshuding/references/archive-prelib-list.md +107 -0
- package/skills/weaver-e10-wenshuding/references/archive-prelib-open.md +59 -0
- package/skills/weaver-e10-wenshuding/references/archive-upload.md +4 -1
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +108 -65
- package/skills/weaver-e10-workflow/SKILL.md +5 -2
- package/skills/weaver-e10-workflow/aigroup/default.json +154 -19
- package/skills/weaver-e10-workflow/references/todo-smart-convert.md +59 -27
- package/skills/weaver-e10-workflow/tools/todo-serve.cjs +113 -25
- package/skills/weaver-e10-workflow/tools/todo-summary.cjs +292 -42
|
@@ -0,0 +1,670 @@
|
|
|
1
|
+
import { createRequire as __esbuildCreateRequire } from 'node:module';
|
|
2
|
+
const require = __esbuildCreateRequire(import.meta.url);
|
|
3
|
+
import {
|
|
4
|
+
E10ApiError,
|
|
5
|
+
createE10RequestRuntime,
|
|
6
|
+
isE10SessionExpiredResponse,
|
|
7
|
+
requireE10Session
|
|
8
|
+
} from "./chunk-EZGFHJFW.js";
|
|
9
|
+
import {
|
|
10
|
+
E10_SESSION_EXPIRED_MESSAGE,
|
|
11
|
+
getActiveProfile
|
|
12
|
+
} from "./chunk-XXJOSZTQ.js";
|
|
13
|
+
import {
|
|
14
|
+
CliError,
|
|
15
|
+
isCliError,
|
|
16
|
+
toErrorEnvelope
|
|
17
|
+
} from "./chunk-LUSPKZKY.js";
|
|
18
|
+
import "./chunk-BUSC6UAE.js";
|
|
19
|
+
|
|
20
|
+
// src/shortcuts/asset-idle/index.ts
|
|
21
|
+
import { readFile } from "node:fs/promises";
|
|
22
|
+
|
|
23
|
+
// src/shortcuts/asset-idle/errors.ts
|
|
24
|
+
var AssetIdleCliError = class extends CliError {
|
|
25
|
+
type;
|
|
26
|
+
subtype;
|
|
27
|
+
code;
|
|
28
|
+
retryable;
|
|
29
|
+
details;
|
|
30
|
+
constructor(type, subtype, message, options = {}) {
|
|
31
|
+
super(message, options.exitCode ?? 5 /* InternalError */);
|
|
32
|
+
this.name = "AssetIdleCliError";
|
|
33
|
+
this.type = type;
|
|
34
|
+
this.subtype = subtype;
|
|
35
|
+
this.code = options.code;
|
|
36
|
+
this.retryable = options.retryable ?? false;
|
|
37
|
+
this.details = options.details;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
function assetIdleValidationError(subtype, message, details) {
|
|
41
|
+
return new AssetIdleCliError("validation", subtype, message, {
|
|
42
|
+
details,
|
|
43
|
+
exitCode: 2 /* UsageError */
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function assetIdleAuthError(subtype, message, details) {
|
|
47
|
+
return new AssetIdleCliError("authentication", subtype, message, {
|
|
48
|
+
details,
|
|
49
|
+
exitCode: 3 /* AuthError */
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function assetIdleNetworkError(subtype, message, options = {}) {
|
|
53
|
+
return new AssetIdleCliError("network", subtype, message, {
|
|
54
|
+
...options,
|
|
55
|
+
retryable: options.retryable ?? true,
|
|
56
|
+
exitCode: 4 /* NetworkError */
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function assetIdleApiError(subtype, message, options = {}) {
|
|
60
|
+
return new AssetIdleCliError("api", subtype, message, {
|
|
61
|
+
...options,
|
|
62
|
+
retryable: options.retryable ?? false,
|
|
63
|
+
exitCode: 1 /* GeneralError */
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/shortcuts/asset-idle/host.ts
|
|
68
|
+
var ASSET_IDLE_TRIGGER_PATH = "/api/esb/server/event/triggerActionFlow";
|
|
69
|
+
var ASSET_IDLE_MODULE_SOURCE = "ebuilder";
|
|
70
|
+
function assertPath(requestPath) {
|
|
71
|
+
if (typeof requestPath !== "string" || !requestPath.startsWith("/") || requestPath.startsWith("//")) {
|
|
72
|
+
throw assetIdleValidationError("path_invalid", "\u8BF7\u6C42\u8DEF\u5F84\u5FC5\u987B\u662F\u76F8\u5BF9\u7EDD\u5BF9\u8DEF\u5F84");
|
|
73
|
+
}
|
|
74
|
+
if (/^https?:/i.test(requestPath) || /[\r\n]/.test(requestPath) || requestPath.includes("/../")) {
|
|
75
|
+
throw assetIdleValidationError("path_invalid", "\u8BF7\u6C42\u8DEF\u5F84\u4E0D\u5141\u8BB8\u8DE8\u57DF\u6216\u8DEF\u5F84\u9003\u9038");
|
|
76
|
+
}
|
|
77
|
+
if (!requestPath.startsWith("/api/")) {
|
|
78
|
+
throw assetIdleValidationError("path_not_allowed", "\u95F2\u7F6E\u8D44\u4EA7\u67E5\u8BE2\u53EA\u80FD\u8C03\u7528 /api/ \u8DEF\u5F84");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function mapRuntimeNetworkError(error) {
|
|
82
|
+
if (error instanceof E10ApiError && error.type === "network") {
|
|
83
|
+
throw assetIdleNetworkError(error.subtype, error.message, {
|
|
84
|
+
retryable: error.retryable,
|
|
85
|
+
details: error.details
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
function isIdleAuthRejected(value) {
|
|
91
|
+
if (!value || typeof value !== "object") return false;
|
|
92
|
+
const record = value;
|
|
93
|
+
if (record.error === "authentication required") return true;
|
|
94
|
+
return String(record.code ?? "") === "-2" && typeof record.error === "string";
|
|
95
|
+
}
|
|
96
|
+
function pickMainTable(value) {
|
|
97
|
+
const root = value;
|
|
98
|
+
const mainTable = root?.actionData?.responseData?.customData?.mainTable;
|
|
99
|
+
if (!mainTable || typeof mainTable !== "object" || Array.isArray(mainTable)) return void 0;
|
|
100
|
+
const idleAssets = Array.isArray(mainTable.idleAssets) ? mainTable.idleAssets : void 0;
|
|
101
|
+
if (idleAssets === void 0) return void 0;
|
|
102
|
+
return { idleAssets, hasMore: mainTable.hasMore === true };
|
|
103
|
+
}
|
|
104
|
+
function resultCodeOf(value) {
|
|
105
|
+
if (!value || typeof value !== "object") return void 0;
|
|
106
|
+
const raw = value.resultCode;
|
|
107
|
+
if (raw === void 0 || raw === null || raw === "") return void 0;
|
|
108
|
+
const numeric = Number(raw);
|
|
109
|
+
return Number.isFinite(numeric) ? numeric : void 0;
|
|
110
|
+
}
|
|
111
|
+
function createAssetIdleHost(ctx, dependencies = {}) {
|
|
112
|
+
let e10Session = null;
|
|
113
|
+
let sessionContext = null;
|
|
114
|
+
const requireSession = dependencies.requireSession || requireE10Session;
|
|
115
|
+
async function ensureSession() {
|
|
116
|
+
if (!e10Session) {
|
|
117
|
+
e10Session = await requireSession(ctx);
|
|
118
|
+
sessionContext = {
|
|
119
|
+
baseUrl: e10Session.getBaseUrl(),
|
|
120
|
+
profile: ctx.getGlobalOptions().profile || getActiveProfile(),
|
|
121
|
+
userId: e10Session.userId,
|
|
122
|
+
tenantKey: e10Session.tenantKey
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return e10Session;
|
|
126
|
+
}
|
|
127
|
+
async function getSession() {
|
|
128
|
+
await ensureSession();
|
|
129
|
+
return sessionContext;
|
|
130
|
+
}
|
|
131
|
+
async function runtime() {
|
|
132
|
+
return createE10RequestRuntime(ctx, await ensureSession(), { fetch: dependencies.fetch });
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
async fetchPage(esbFlowId, curPage) {
|
|
136
|
+
const page = Number(curPage);
|
|
137
|
+
if (!Number.isInteger(page) || page < 1) {
|
|
138
|
+
throw assetIdleValidationError("cur_page_invalid", `curPage \u5FC5\u987B\u662F >= 1 \u7684\u6574\u6570\uFF0C\u6536\u5230\uFF1A${String(curPage)}`);
|
|
139
|
+
}
|
|
140
|
+
assertPath(ASSET_IDLE_TRIGGER_PATH);
|
|
141
|
+
const body = {
|
|
142
|
+
esbFlowId,
|
|
143
|
+
moduleSource: ASSET_IDLE_MODULE_SOURCE,
|
|
144
|
+
customParams: { mainTable: { curPage: page } }
|
|
145
|
+
};
|
|
146
|
+
let response;
|
|
147
|
+
try {
|
|
148
|
+
response = await (await runtime()).requestJson({
|
|
149
|
+
module: "asset-idle",
|
|
150
|
+
operation: "asset-idle.idle.list",
|
|
151
|
+
method: "POST",
|
|
152
|
+
path: ASSET_IDLE_TRIGGER_PATH,
|
|
153
|
+
body,
|
|
154
|
+
bigIntStrings: true,
|
|
155
|
+
headers: { "X-Requested-With": "XMLHttpRequest" },
|
|
156
|
+
timeoutMs: 6e4
|
|
157
|
+
});
|
|
158
|
+
} catch (error) {
|
|
159
|
+
mapRuntimeNetworkError(error);
|
|
160
|
+
}
|
|
161
|
+
if (isE10SessionExpiredResponse(response)) {
|
|
162
|
+
throw assetIdleAuthError("session_expired", E10_SESSION_EXPIRED_MESSAGE, { httpStatus: response.status });
|
|
163
|
+
}
|
|
164
|
+
if (response.parseError) {
|
|
165
|
+
if (response.status < 200 || response.status >= 300) {
|
|
166
|
+
throw assetIdleApiError("http_error", `\u6CDB\u5FAE\u63A5\u53E3 HTTP ${response.status}`, {
|
|
167
|
+
code: response.status,
|
|
168
|
+
details: { status: response.status }
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
throw assetIdleNetworkError("protocol", `\u63A5\u53E3\u8FD4\u56DE\u4E0D\u662F\u5408\u6CD5 JSON\uFF08HTTP ${response.status}\uFF09`, { retryable: false });
|
|
172
|
+
}
|
|
173
|
+
if (response.status < 200 || response.status >= 300) {
|
|
174
|
+
throw assetIdleApiError("http_error", `\u6CDB\u5FAE\u63A5\u53E3 HTTP ${response.status}`, {
|
|
175
|
+
code: response.status,
|
|
176
|
+
details: { status: response.status }
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const value = response.value;
|
|
180
|
+
if (isIdleAuthRejected(value)) {
|
|
181
|
+
throw assetIdleAuthError("session_expired", E10_SESSION_EXPIRED_MESSAGE, { details: { code: -2 } });
|
|
182
|
+
}
|
|
183
|
+
const code = resultCodeOf(value);
|
|
184
|
+
if (code === void 0) {
|
|
185
|
+
throw assetIdleNetworkError("protocol", "\u52A8\u4F5C\u6D41\u63A5\u53E3\u672A\u8FD4\u56DE resultCode\uFF0C\u65E0\u6CD5\u5224\u5B9A\u6267\u884C\u7ED3\u679C", { retryable: false });
|
|
186
|
+
}
|
|
187
|
+
if (code !== 200) {
|
|
188
|
+
const record = value && typeof value === "object" ? value : {};
|
|
189
|
+
const serverMessage = typeof record.resultMsg === "string" ? record.resultMsg.trim() : "";
|
|
190
|
+
throw assetIdleApiError("actionflow_failed", `\u52A8\u4F5C\u6D41\u6267\u884C\u672A\u6210\u529F\uFF08resultCode=${code}\uFF09\uFF1A${serverMessage || "\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE\u539F\u56E0"}`, {
|
|
191
|
+
code,
|
|
192
|
+
details: { resultCode: code, resultMsg: serverMessage }
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
const mainTable = pickMainTable(value);
|
|
196
|
+
if (!mainTable) {
|
|
197
|
+
throw assetIdleNetworkError("protocol", "\u8FD4\u56DE\u7F3A\u5C11 actionData.responseData.customData.mainTable.idleAssets\uFF0C\u65E0\u6CD5\u89E3\u6790\u5224\u5B9A\u7ED3\u679C", {
|
|
198
|
+
retryable: false
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return { items: mainTable.idleAssets, hasMore: mainTable.hasMore, resultCode: code };
|
|
202
|
+
},
|
|
203
|
+
getSession
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// src/shortcuts/asset-idle/manifest.ts
|
|
208
|
+
var flowId = { type: "string", pattern: "^\\d+$", minLength: 1, maxLength: 32 };
|
|
209
|
+
var listInputProperties = {
|
|
210
|
+
esbFlowId: {
|
|
211
|
+
...flowId,
|
|
212
|
+
description: "\u300C\u81EA\u7528-skill\u83B7\u53D6\u95F2\u7F6E\u8D44\u4EA7\u300D\u52A8\u4F5C\u6D41 ID\u3002\u6309\u540D\u79F0\u89E3\u6790\u9700\u8981 ESB \u5E94\u7528\u5217\u8868\u67E5\u8BE2\u63A5\u53E3\uFF0C\u672C\u6A21\u5757\u672A\u5B9E\u73B0\uFF08\u89C1 withheldOperations\uFF09\uFF1B\u53EF\u7531\u7528\u6237\u5728 ESB \u4E2D\u5FC3\u67E5\u5F97\u540E\u4F20\u5165"
|
|
213
|
+
},
|
|
214
|
+
maxPages: {
|
|
215
|
+
type: "integer",
|
|
216
|
+
minimum: 1,
|
|
217
|
+
maximum: 100,
|
|
218
|
+
default: 20,
|
|
219
|
+
description: "\u5355\u6B21\u6700\u591A\u7FFB\u9875\u6570\uFF08\u6BCF\u9875 1000 \u6761\uFF0C\u670D\u52A1\u7AEF\u56FA\u5B9A\uFF09\uFF1B\u8D85\u8FC7\u5373\u505C\u6B62\u5E76\u5728 warnings \u6807\u8BB0 truncated"
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
var idleItemSchema = {
|
|
223
|
+
type: "object",
|
|
224
|
+
additionalProperties: false,
|
|
225
|
+
properties: {
|
|
226
|
+
zclx: { type: ["string", "null"], description: "\u8D44\u4EA7\u7C7B\u578B\uFF0C\u5982 \u7B14\u8BB0\u672C\u7535\u8111 / \u663E\u793A\u5668 / \u4E58\u7528\u8F66" },
|
|
227
|
+
xzsz: { type: ["string", "null"], description: "\u95F2\u7F6E\u65F6\u957F\uFF08\u5929\uFF09\uFF0C\u5B57\u7B26\u4E32\u6570\u5B57\uFF0C\u670D\u52A1\u7AEF\u5DF2\u7B97\u597D\uFF0C\u76F4\u63A5\u4F7F\u7528\uFF1B\u7F3A\u5931\u6807\u300C\u65E0\u6CD5\u5224\u65AD\u300D" },
|
|
228
|
+
pdyj: { type: ["string", "null"], description: "\u5224\u5B9A\u4F9D\u636E\uFF0C\u539F\u6837\u5C55\u793A\uFF0C\u4E0D\u91CD\u65B0\u8868\u8FF0" },
|
|
229
|
+
zxd: { type: ["number", "null"], description: "\u7F6E\u4FE1\u5EA6\uFF0C\u670D\u52A1\u7AEF\u7ED9\u51FA\uFF08\u5B9E\u6D4B 0.8 / 0.85 / 0.9 / 0.95\uFF09" },
|
|
230
|
+
czjy: { type: ["string", "null"], description: "\u5904\u7F6E\u5EFA\u8BAE\u7F16\u7801\uFF1A0=\u5F85\u8C03\u62E8\u30011=\u5F85\u8C03\u5242\u30012=\u5F85\u8BC4\u4F30\uFF1B\u7F3A\u5931\u6807\u300C\u65E0\u6CD5\u5224\u65AD\u300D" },
|
|
231
|
+
xzdj: { type: ["string", "null"], description: "\u95F2\u7F6E\u7B49\u7EA7\u7F16\u7801\uFF080/1/2\uFF09\uFF0C\u542B\u4E49\u5F85\u786E\u8BA4\uFF0C\u539F\u6837\u900F\u51FA" },
|
|
232
|
+
zcmc: { type: ["string", "null"], description: "\u8D44\u4EA7\u6807\u8BC6\uFF0C\u5F53\u524D\u8FD4\u56DE\u8D44\u4EA7\u8BB0\u5F55 ID\uFF08\u4E0D\u662F\u540D\u79F0\uFF09" },
|
|
233
|
+
unique_key: { type: ["string", "null"], description: "\u8BB0\u5F55\u4E3B\u952E" },
|
|
234
|
+
id: { type: ["string", "null"], description: "\u8BB0\u5F55\u4E3B\u952E" }
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
var listOutputProperties = {
|
|
238
|
+
esbFlowId: { type: "string", description: "\u672C\u6B21\u67E5\u8BE2\u4F7F\u7528\u7684\u52A8\u4F5C\u6D41 ID" },
|
|
239
|
+
items: { type: "array", items: idleItemSchema, description: "\u5404\u9875 idleAssets \u5408\u5E76\u540E\u7684\u5224\u5B9A\u7ED3\u679C\u96C6\uFF0C\u8FD4\u56DE\u6761\u6570\u5373\u670D\u52A1\u7AEF\u5224\u5B9A\u7684\u95F2\u7F6E\u8D44\u4EA7\u5168\u96C6" },
|
|
240
|
+
total: { type: "integer", minimum: 0, description: "\u5408\u5E76\u540E\u7684\u603B\u6761\u6570\uFF08\u7EDF\u8BA1\u5206\u6BCD\uFF09" },
|
|
241
|
+
pages: { type: "integer", minimum: 0, description: "\u5B9E\u9645\u8BF7\u6C42\u9875\u6570" },
|
|
242
|
+
hasMore: { type: "boolean", description: "\u505C\u6B62\u65F6\u670D\u52A1\u7AEF\u662F\u5426\u4ECD\u6807\u8BB0\u6709\u4E0B\u4E00\u9875" },
|
|
243
|
+
truncated: { type: "boolean", description: "\u662F\u5426\u56E0\u8FBE\u5230 maxPages \u4E0A\u9650\u63D0\u524D\u505C\u6B62" }
|
|
244
|
+
};
|
|
245
|
+
var agingBucketSchema = {
|
|
246
|
+
type: "object",
|
|
247
|
+
additionalProperties: false,
|
|
248
|
+
properties: {
|
|
249
|
+
bucket: { type: "string", enum: ["1\u4E2A\u6708\u4EE5\u5185", "1\uFF5E3\u4E2A\u6708", "3\uFF5E6\u4E2A\u6708", "6\uFF5E12\u4E2A\u6708", "\u4E00\u5E74\u4EE5\u4E0A"], description: "\u95F2\u7F6E\u65F6\u957F\u6863\u4F4D\uFF081 \u4E2A\u6708\u6309 30 \u5929\u8BA1\uFF0C\u8FB9\u754C\u503C\u5F52\u524D\u4E00\u6863\uFF09" },
|
|
250
|
+
minDays: { type: "integer", description: "\u6863\u4F4D\u4E0B\u754C\uFF08\u5929\uFF0C\u542B\uFF09" },
|
|
251
|
+
maxDays: { type: ["integer", "null"], description: "\u6863\u4F4D\u4E0A\u754C\uFF08\u5929\uFF0C\u542B\uFF09\uFF1B\u4E00\u5E74\u4EE5\u4E0A\u4E3A null" },
|
|
252
|
+
count: { type: "integer", minimum: 0, description: "\u6863\u4F4D\u5185\u6761\u6570\uFF1B\u6570\u91CF\u4E3A 0 \u7684\u6863\u4F4D\u4E0D\u51FA\u73B0" }
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
var statsOutputProperties = {
|
|
256
|
+
esbFlowId: { type: "string", description: "\u672C\u6B21\u67E5\u8BE2\u4F7F\u7528\u7684\u52A8\u4F5C\u6D41 ID" },
|
|
257
|
+
total: { type: "integer", minimum: 0, description: "\u670D\u52A1\u7AEF\u5224\u5B9A\u7ED3\u679C\u96C6\u603B\u6761\u6570\uFF08\u7EDF\u8BA1\u5206\u6BCD\uFF09" },
|
|
258
|
+
pages: { type: "integer", minimum: 0, description: "\u5B9E\u9645\u8BF7\u6C42\u9875\u6570" },
|
|
259
|
+
truncated: { type: "boolean", description: "\u662F\u5426\u56E0\u8FBE\u5230 maxPages \u4E0A\u9650\u63D0\u524D\u505C\u6B62\uFF08\u6B64\u65F6\u7EDF\u8BA1\u4E0D\u5B8C\u6574\uFF09" },
|
|
260
|
+
czjyCounts: {
|
|
261
|
+
type: "array",
|
|
262
|
+
description: "\u5904\u7F6E\u5EFA\u8BAE\u5206\u7EC4\u8BA1\u6570\uFF08\u7F16\u7801\u6620\u5C04\u56FA\u5B9A\uFF1A0=\u5F85\u8C03\u62E8\u30011=\u5F85\u8C03\u5242\u30012=\u5F85\u8BC4\u4F30\uFF1B\u7F3A\u5931\u6807\u300C\u65E0\u6CD5\u5224\u65AD\u300D\uFF09",
|
|
263
|
+
items: {
|
|
264
|
+
type: "object",
|
|
265
|
+
additionalProperties: false,
|
|
266
|
+
properties: {
|
|
267
|
+
code: { type: ["string", "null"], description: "czjy \u7F16\u7801\uFF1B\u7F3A\u5931\u4E3A null" },
|
|
268
|
+
label: { type: "string", enum: ["\u5F85\u8C03\u62E8", "\u5F85\u8C03\u5242", "\u5F85\u8BC4\u4F30", "\u65E0\u6CD5\u5224\u65AD"] },
|
|
269
|
+
count: { type: "integer", minimum: 0 }
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
typeCounts: {
|
|
274
|
+
type: "array",
|
|
275
|
+
description: "\u6309 zclx \u8BA1\u6570\uFF0C\u964D\u5E8F\uFF1BTop10 + \u5176\u4ED6 \u7684\u5408\u5E76\u5C55\u793A\u7531\u6E32\u67D3\u4FA7\u5904\u7406",
|
|
276
|
+
items: {
|
|
277
|
+
type: "object",
|
|
278
|
+
additionalProperties: false,
|
|
279
|
+
properties: {
|
|
280
|
+
type: { type: "string", description: "zclx \u8D44\u4EA7\u7C7B\u578B\uFF1B\u7F3A\u5931\u6309\u300C\u672A\u77E5\u7C7B\u578B\u300D\u8BA1\u5165" },
|
|
281
|
+
count: { type: "integer", minimum: 0 }
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
agingBuckets: {
|
|
286
|
+
type: "array",
|
|
287
|
+
items: agingBucketSchema,
|
|
288
|
+
description: "\u95F2\u7F6E\u65F6\u957F\u5206\u6863\u8BA1\u6570\uFF0C\u56FA\u5B9A\u987A\u5E8F\uFF0C\u4EC5\u542B\u6570\u91CF\u5927\u4E8E 0 \u7684\u6863\u4F4D\uFF1Bxzsz \u7F3A\u5931\u7684\u8BB0\u5F55\u6392\u9664\u51FA\u6240\u6709\u6863\u4F4D"
|
|
289
|
+
},
|
|
290
|
+
unableToJudge: {
|
|
291
|
+
type: "integer",
|
|
292
|
+
minimum: 0,
|
|
293
|
+
description: "xzsz \u7F3A\u5931\uFF08\u65E0\u6CD5\u5224\u65AD\uFF09\u6761\u6570\uFF1A\u4E0D\u53C2\u4E0E\u7C7B\u578B\u7EDF\u8BA1\u4E0E\u65F6\u957F\u5206\u6863\uFF0C\u4E5F\u4E0D\u8BA1\u5165 agingBuckets"
|
|
294
|
+
},
|
|
295
|
+
unableToJudgeByType: {
|
|
296
|
+
type: "integer",
|
|
297
|
+
minimum: 0,
|
|
298
|
+
description: "zclx \u4E5F\u7F3A\u5931\u4E14 xzsz \u7F3A\u5931\u7684\u6761\u6570\uFF08\u65E2\u4E0D\u8FDB\u7C7B\u578B\u7EDF\u8BA1\u4E5F\u4E0D\u8FDB\u65F6\u957F\u5206\u6863\u7684\u53E3\u5F84\u63D0\u793A\uFF09"
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
var assetIdleOperations = [
|
|
302
|
+
{
|
|
303
|
+
name: "asset-idle.idle.list",
|
|
304
|
+
summary: "\u89E6\u53D1\u300C\u81EA\u7528-skill\u83B7\u53D6\u95F2\u7F6E\u8D44\u4EA7\u300D\u52A8\u4F5C\u6D41\uFF0C\u6309 hasMore \u81EA\u52A8\u7FFB\u9875\u5E76\u5408\u5E76\u5404\u9875\u95F2\u7F6E\u8D44\u4EA7\u5224\u5B9A\u7ED3\u679C\uFF08\u53EA\u8BFB\u67E5\u8BE2\uFF09",
|
|
305
|
+
risk: "read",
|
|
306
|
+
inputSchema: {
|
|
307
|
+
type: "object",
|
|
308
|
+
additionalProperties: false,
|
|
309
|
+
properties: listInputProperties,
|
|
310
|
+
required: ["esbFlowId"]
|
|
311
|
+
},
|
|
312
|
+
outputSchema: {
|
|
313
|
+
type: "object",
|
|
314
|
+
additionalProperties: false,
|
|
315
|
+
properties: listOutputProperties
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: "asset-idle.idle.stats",
|
|
320
|
+
summary: "\u5728 idle.list \u5408\u5E76\u7ED3\u679C\u4E0A\u505A\u805A\u5408\u7EDF\u8BA1\uFF1Aczjy \u5904\u7F6E\u5EFA\u8BAE\u5206\u7EC4\u3001zclx \u7C7B\u578B\u8BA1\u6570\u3001xzsz \u95F2\u7F6E\u65F6\u957F\u5206\u6863\uFF08\u4E0D\u505A\u5224\u5B9A\u3001\u4E0D\u91CD\u7B97\uFF09",
|
|
321
|
+
risk: "read",
|
|
322
|
+
inputSchema: {
|
|
323
|
+
type: "object",
|
|
324
|
+
additionalProperties: false,
|
|
325
|
+
properties: listInputProperties,
|
|
326
|
+
required: ["esbFlowId"]
|
|
327
|
+
},
|
|
328
|
+
outputSchema: {
|
|
329
|
+
type: "object",
|
|
330
|
+
additionalProperties: false,
|
|
331
|
+
properties: statsOutputProperties
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
];
|
|
335
|
+
var assetIdleManifest = {
|
|
336
|
+
schemaVersion: 1,
|
|
337
|
+
name: "asset-idle",
|
|
338
|
+
title: "E10 \u95F2\u7F6E\u8D44\u4EA7\u5224\u5B9A\u7ED3\u679C\u67E5\u8BE2",
|
|
339
|
+
version: "0.1.0",
|
|
340
|
+
host: "e10-asset-idle",
|
|
341
|
+
status: "builtin",
|
|
342
|
+
sourceSkill: "weaver-e10-ziguanjia-idle",
|
|
343
|
+
operations: assetIdleOperations,
|
|
344
|
+
withheldOperations: [
|
|
345
|
+
{
|
|
346
|
+
name: "asset-idle.flow.resolve",
|
|
347
|
+
reason: "\u6309\u540D\u79F0\u89E3\u6790\u300C\u81EA\u7528-skill\u83B7\u53D6\u95F2\u7F6E\u8D44\u4EA7\u300D\u52A8\u4F5C\u6D41 ID \u9700\u8981 ESB \u5E94\u7528\u5217\u8868\u67E5\u8BE2\u63A5\u53E3\uFF1B\u6E90\u8D44\u6599\u53EA\u63D0\u4F9B\u65E7\u7248 e10-cli \u7684 actionflow application-list \u547D\u4EE4\u540D\uFF0C\u6CA1\u6709 weaver-work-cli \u53EF\u7528\u7684\u63A5\u53E3\u8DEF\u5F84\u3001\u8BF7\u6C42\u5B57\u6BB5\u4E0E\u8FD4\u56DE\u7ED3\u6784\uFF0C\u65E0\u6CD5\u5B89\u5168\u5B9E\u73B0\u3002esbFlowId \u5FC5\u987B\u7531\u8C03\u7528\u65B9\u4F20\u5165\uFF08\u53EF\u5728\u65E7\u7248 e10-cli \u6267\u884C actionflow application-list \u6309 name \u7CBE\u786E\u5339\u914D moudle=ebuilder \u53D6 id\uFF0C\u5339\u914D\u4E0D\u5230\u6216\u591A\u6761\u540C\u540D\u65F6\u505C\u6B62\uFF09\u3002"
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
/** 源资料明确:接口不返回 idle_date / stockindate / use_term 等原始台账字段,不做基于日期的判定与阈值反推。 */
|
|
351
|
+
disabledCapabilities: [
|
|
352
|
+
{
|
|
353
|
+
name: "idle-date-recalculation",
|
|
354
|
+
reason: "\u95F2\u7F6E\u5224\u5B9A\u7531\u670D\u52A1\u7AEF\u52A8\u4F5C\u6D41\u5B8C\u6210\uFF08xzsz / pdyj / zxd / czjy \u76F4\u63A5\u4F7F\u7528\uFF09\uFF0CCLI \u4E0D\u505A\u4E8C\u6B21\u5224\u5B9A\u3001\u4E0D\u91CD\u7B97\u3001\u4E0D\u8865\u7B97\u3001\u4E0D\u6539\u5199\u7ED3\u8BBA\uFF1B\u63A5\u53E3\u4E0D\u8FD4\u56DE idle_date / stockindate / use_term\uFF0C\u4E0D\u5F97\u53CD\u67E5\u6216\u63A8\u7B97\u65E5\u671F\u8865\u9F50\u3002"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "display-only-fields",
|
|
358
|
+
reason: "czjy_obj / xzdj_obj / yjzczt_obj / czlc / czlc_obj / zcxzczrq \u5B9E\u6D4B\u6052\u4E3A\u7A7A\uFF0C\u4E0D\u53EF\u4F9D\u8D56\uFF0C\u6761\u76EE\u5F52\u4E00\u5316\u65F6\u4E0D\u900F\u51FA\uFF1B\u5B57\u6BB5\u8BED\u4E49\u53D8\u5316\u65F6\u4EE5 source-manifest \u7684\u66F4\u65B0\u68C0\u6D4B\u4E3A\u51C6\u3002"
|
|
359
|
+
}
|
|
360
|
+
]
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
// src/shortcuts/asset-idle/operations/types.ts
|
|
364
|
+
function assetIdleSuccess(action, data, meta, warnings = []) {
|
|
365
|
+
const payload = { ok: true, action, data };
|
|
366
|
+
if (meta && Object.keys(meta).length > 0) payload.meta = meta;
|
|
367
|
+
if (warnings.length > 0) payload.warnings = warnings;
|
|
368
|
+
return payload;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// src/shortcuts/asset-idle/operations/shared.ts
|
|
372
|
+
function asText(value) {
|
|
373
|
+
if (value === void 0 || value === null) return null;
|
|
374
|
+
if (typeof value === "object") return null;
|
|
375
|
+
const text = String(value).trim();
|
|
376
|
+
return text === "" ? null : text;
|
|
377
|
+
}
|
|
378
|
+
function normalizeIdleAsset(raw) {
|
|
379
|
+
const record = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {};
|
|
380
|
+
const zxdText = asText(record.zxd);
|
|
381
|
+
const zxd = zxdText === null ? null : Number.isFinite(Number(zxdText)) ? Number(zxdText) : null;
|
|
382
|
+
return {
|
|
383
|
+
zclx: asText(record.zclx),
|
|
384
|
+
xzsz: asText(record.xzsz),
|
|
385
|
+
pdyj: asText(record.pdyj),
|
|
386
|
+
zxd,
|
|
387
|
+
czjy: asText(record.czjy),
|
|
388
|
+
xzdj: asText(record.xzdj),
|
|
389
|
+
zcmc: asText(record.zcmc),
|
|
390
|
+
unique_key: asText(record.unique_key),
|
|
391
|
+
id: asText(record.id)
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
var AGING_BUCKETS = [
|
|
395
|
+
{ bucket: "1\u4E2A\u6708\u4EE5\u5185", minDays: 0, maxDays: 30 },
|
|
396
|
+
{ bucket: "1\uFF5E3\u4E2A\u6708", minDays: 31, maxDays: 90 },
|
|
397
|
+
{ bucket: "3\uFF5E6\u4E2A\u6708", minDays: 91, maxDays: 180 },
|
|
398
|
+
{ bucket: "6\uFF5E12\u4E2A\u6708", minDays: 181, maxDays: 365 },
|
|
399
|
+
{ bucket: "\u4E00\u5E74\u4EE5\u4E0A", minDays: 366, maxDays: null }
|
|
400
|
+
];
|
|
401
|
+
function agingBucketOf(days) {
|
|
402
|
+
if (!Number.isInteger(days) || days < 0) return null;
|
|
403
|
+
for (const bucket of AGING_BUCKETS) {
|
|
404
|
+
if (bucket.maxDays === null || days <= bucket.maxDays) return bucket.bucket;
|
|
405
|
+
}
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
function aggregateIdleAssets(items) {
|
|
409
|
+
const czjyOrder = [
|
|
410
|
+
{ code: "0", label: "\u5F85\u8C03\u62E8" },
|
|
411
|
+
{ code: "1", label: "\u5F85\u8C03\u5242" },
|
|
412
|
+
{ code: "2", label: "\u5F85\u8BC4\u4F30" },
|
|
413
|
+
{ code: null, label: "\u65E0\u6CD5\u5224\u65AD" }
|
|
414
|
+
];
|
|
415
|
+
const czjyCounts = czjyOrder.map(({ code, label }) => ({
|
|
416
|
+
code,
|
|
417
|
+
label,
|
|
418
|
+
count: items.filter((item) => item.czjy === code).length
|
|
419
|
+
}));
|
|
420
|
+
const judgedItems = items.filter((item) => item.xzsz !== null);
|
|
421
|
+
const unableToJudge = items.length - judgedItems.length;
|
|
422
|
+
const typeCounter = /* @__PURE__ */ new Map();
|
|
423
|
+
let unableToJudgeByType = 0;
|
|
424
|
+
for (const item of judgedItems) {
|
|
425
|
+
const type = item.zclx ?? "\u672A\u77E5\u7C7B\u578B";
|
|
426
|
+
if (item.zclx === null) unableToJudgeByType += 1;
|
|
427
|
+
typeCounter.set(type, (typeCounter.get(type) ?? 0) + 1);
|
|
428
|
+
}
|
|
429
|
+
const typeCounts = [...typeCounter.entries()].map(([type, count]) => ({ type, count })).sort((a, b) => b.count - a.count || a.type.localeCompare(b.type, "zh-Hans-CN"));
|
|
430
|
+
const agingCounts = /* @__PURE__ */ new Map();
|
|
431
|
+
for (const item of judgedItems) {
|
|
432
|
+
const days = Number(item.xzsz);
|
|
433
|
+
const bucket = Number.isFinite(days) ? agingBucketOf(Math.trunc(days)) : null;
|
|
434
|
+
if (bucket === null) continue;
|
|
435
|
+
agingCounts.set(bucket, (agingCounts.get(bucket) ?? 0) + 1);
|
|
436
|
+
}
|
|
437
|
+
const agingBuckets = AGING_BUCKETS.filter(({ bucket }) => (agingCounts.get(bucket) ?? 0) > 0).map(
|
|
438
|
+
({ bucket, minDays, maxDays }) => ({ bucket, minDays, maxDays, count: agingCounts.get(bucket) ?? 0 })
|
|
439
|
+
);
|
|
440
|
+
return { czjyCounts, typeCounts, agingBuckets, unableToJudge, unableToJudgeByType };
|
|
441
|
+
}
|
|
442
|
+
function assertNoForbiddenKeys(input) {
|
|
443
|
+
for (const key of ["cookie", "eteamsid", "token", "access_token"]) {
|
|
444
|
+
if (key in input) {
|
|
445
|
+
throw assetIdleValidationError("forbidden_key", `\u8F93\u5165\u4E0D\u5141\u8BB8\u643A\u5E26\u51ED\u636E\u7C7B\u5B57\u6BB5\uFF1A${key}`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
function assertKnownKeys(input, allowed, operation) {
|
|
450
|
+
for (const key of Object.keys(input)) {
|
|
451
|
+
if (!allowed.includes(key)) {
|
|
452
|
+
throw assetIdleValidationError(
|
|
453
|
+
"input_unknown_key",
|
|
454
|
+
`operation ${operation} \u4E0D\u652F\u6301\u8F93\u5165\u5B57\u6BB5\uFF1A${key}\uFF08\u53EF\u7528\u5B57\u6BB5\uFF1A${allowed.join(", ") || "\u65E0"}\uFF09`
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
function asObject(value) {
|
|
460
|
+
if (value === void 0 || value === null) return {};
|
|
461
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
462
|
+
throw assetIdleValidationError("input_invalid", "\u8F93\u5165\u5FC5\u987B\u662F JSON \u5BF9\u8C61");
|
|
463
|
+
}
|
|
464
|
+
return value;
|
|
465
|
+
}
|
|
466
|
+
function requiredFlowId(value) {
|
|
467
|
+
const text = typeof value === "string" ? value.trim() : String(value ?? "");
|
|
468
|
+
if (!/^\d{1,32}$/.test(text)) {
|
|
469
|
+
throw assetIdleValidationError("input_invalid", "esbFlowId \u5FC5\u987B\u662F 1-32 \u4F4D\u6570\u5B57\u5B57\u7B26\u4E32");
|
|
470
|
+
}
|
|
471
|
+
return text;
|
|
472
|
+
}
|
|
473
|
+
function maxPagesOf(value) {
|
|
474
|
+
if (value === void 0 || value === null || value === "") return 20;
|
|
475
|
+
const num = Number(value);
|
|
476
|
+
if (!Number.isInteger(num) || num < 1 || num > 100) {
|
|
477
|
+
throw assetIdleValidationError("input_invalid", "maxPages \u5FC5\u987B\u662F 1-100 \u7684\u6574\u6570");
|
|
478
|
+
}
|
|
479
|
+
return num;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// src/shortcuts/asset-idle/operations/idle.ts
|
|
483
|
+
async function fetchAllIdleAssets(esbFlowId, maxPages, env) {
|
|
484
|
+
const items = [];
|
|
485
|
+
let curPage = 1;
|
|
486
|
+
let hasMore = true;
|
|
487
|
+
let truncated = false;
|
|
488
|
+
while (hasMore) {
|
|
489
|
+
const page = await env.host.fetchPage(esbFlowId, curPage);
|
|
490
|
+
for (const raw of page.items) {
|
|
491
|
+
items.push(normalizeIdleAsset(raw));
|
|
492
|
+
}
|
|
493
|
+
hasMore = page.hasMore;
|
|
494
|
+
if (hasMore && curPage >= maxPages) {
|
|
495
|
+
truncated = true;
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
498
|
+
curPage += 1;
|
|
499
|
+
}
|
|
500
|
+
return { items, pages: truncated ? maxPages : curPage - 1, hasMore, truncated };
|
|
501
|
+
}
|
|
502
|
+
function listWarnings(truncated) {
|
|
503
|
+
const warnings = [];
|
|
504
|
+
if (truncated) {
|
|
505
|
+
warnings.push(
|
|
506
|
+
`\u5DF2\u8FBE\u5355\u6B21\u7FFB\u9875\u4E0A\u9650\uFF0ChasMore \u4ECD\u4E3A true\uFF1A\u8FD4\u56DE\u7ED3\u679C\u53EF\u80FD\u4E0D\u662F\u95F2\u7F6E\u8D44\u4EA7\u5168\u96C6\uFF0C\u7EDF\u8BA1\u524D\u8BF7\u589E\u5927 maxPages \u540E\u91CD\u67E5`
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
return warnings;
|
|
510
|
+
}
|
|
511
|
+
var assetIdleHandlers = {
|
|
512
|
+
"asset-idle.idle.list": async (input, env) => {
|
|
513
|
+
const esbFlowId = requiredFlowId(input.esbFlowId);
|
|
514
|
+
const maxPages = maxPagesOf(input.maxPages);
|
|
515
|
+
const { items, pages, hasMore, truncated } = await fetchAllIdleAssets(esbFlowId, maxPages, env);
|
|
516
|
+
return assetIdleSuccess(
|
|
517
|
+
"asset-idle.idle.list",
|
|
518
|
+
{ esbFlowId, items, total: items.length, pages, hasMore, truncated },
|
|
519
|
+
{ status: "COMPLETE" },
|
|
520
|
+
listWarnings(truncated)
|
|
521
|
+
);
|
|
522
|
+
},
|
|
523
|
+
"asset-idle.idle.stats": async (input, env) => {
|
|
524
|
+
const esbFlowId = requiredFlowId(input.esbFlowId);
|
|
525
|
+
const maxPages = maxPagesOf(input.maxPages);
|
|
526
|
+
const { items, pages, truncated } = await fetchAllIdleAssets(esbFlowId, maxPages, env);
|
|
527
|
+
const stats = aggregateIdleAssets(items);
|
|
528
|
+
return assetIdleSuccess(
|
|
529
|
+
"asset-idle.idle.stats",
|
|
530
|
+
{ esbFlowId, total: items.length, pages, truncated, ...stats },
|
|
531
|
+
{ status: "COMPLETE" },
|
|
532
|
+
listWarnings(truncated)
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
// src/shortcuts/asset-idle/operations/registry.ts
|
|
538
|
+
function buildRegistry() {
|
|
539
|
+
const registry = /* @__PURE__ */ new Map();
|
|
540
|
+
const handlerMap = assetIdleHandlers;
|
|
541
|
+
for (const contract of assetIdleManifest.operations) {
|
|
542
|
+
const handler = handlerMap[contract.name];
|
|
543
|
+
if (!handler) throw new Error(`asset-idle operation ${contract.name} has no handler`);
|
|
544
|
+
registry.set(contract.name, { ...contract, handler });
|
|
545
|
+
}
|
|
546
|
+
for (const name of Object.keys(handlerMap)) {
|
|
547
|
+
if (!registry.has(name)) throw new Error(`asset-idle handler ${name} is not declared in manifest`);
|
|
548
|
+
}
|
|
549
|
+
return registry;
|
|
550
|
+
}
|
|
551
|
+
var assetIdleOperationRegistry = buildRegistry();
|
|
552
|
+
function getAssetIdleOperation(operation) {
|
|
553
|
+
const definition = assetIdleOperationRegistry.get(operation);
|
|
554
|
+
if (!definition) {
|
|
555
|
+
throw assetIdleValidationError("operation_unknown", `\u95F2\u7F6E\u8D44\u4EA7\u67E5\u8BE2\u4E0D\u652F\u6301\u64CD\u4F5C\uFF1A${operation}`);
|
|
556
|
+
}
|
|
557
|
+
return definition;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// src/shortcuts/asset-idle/operations.ts
|
|
561
|
+
var ALLOWED_KEYS = Object.fromEntries(
|
|
562
|
+
assetIdleManifest.operations.map((operation) => [
|
|
563
|
+
operation.name,
|
|
564
|
+
Object.keys(operation.inputSchema.properties ?? {})
|
|
565
|
+
])
|
|
566
|
+
);
|
|
567
|
+
async function executeAssetIdleOperation(operation, rawInput, context) {
|
|
568
|
+
const definition = getAssetIdleOperation(operation);
|
|
569
|
+
const input = asObject(rawInput);
|
|
570
|
+
assertNoForbiddenKeys(input);
|
|
571
|
+
assertKnownKeys(input, ALLOWED_KEYS[operation] ?? [], operation);
|
|
572
|
+
return definition.handler(input, context);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
// src/shortcuts/asset-idle/index.ts
|
|
576
|
+
function asOptions(value) {
|
|
577
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
578
|
+
}
|
|
579
|
+
async function readStdin() {
|
|
580
|
+
const chunks = [];
|
|
581
|
+
for await (const chunk of process.stdin) {
|
|
582
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
583
|
+
}
|
|
584
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
585
|
+
}
|
|
586
|
+
function stripBom(value) {
|
|
587
|
+
return value.replace(/^\uFEFF+/, "");
|
|
588
|
+
}
|
|
589
|
+
async function inputFrom(options, extra = {}) {
|
|
590
|
+
const opts = asOptions(options);
|
|
591
|
+
let input = {};
|
|
592
|
+
if (opts.input && opts.inputJson) {
|
|
593
|
+
throw assetIdleValidationError("input_conflict", "\u4E0D\u80FD\u540C\u65F6\u4F20 --input \u548C --input-json");
|
|
594
|
+
}
|
|
595
|
+
if (opts.inputJson) {
|
|
596
|
+
input = parseJsonInput(String(opts.inputJson), "--input-json");
|
|
597
|
+
}
|
|
598
|
+
if (opts.input) {
|
|
599
|
+
let raw;
|
|
600
|
+
try {
|
|
601
|
+
raw = stripBom(opts.input === "-" ? await readStdin() : await readFile(String(opts.input), "utf8"));
|
|
602
|
+
} catch {
|
|
603
|
+
throw assetIdleValidationError("input_unreadable", `\u65E0\u6CD5\u8BFB\u53D6 --input\uFF1A${String(opts.input)}`);
|
|
604
|
+
}
|
|
605
|
+
input = parseJsonInput(raw, "--input");
|
|
606
|
+
}
|
|
607
|
+
return {
|
|
608
|
+
...input,
|
|
609
|
+
...Object.fromEntries(Object.entries(extra).filter(([, value]) => value !== void 0 && value !== ""))
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
function parseJsonInput(raw, label) {
|
|
613
|
+
try {
|
|
614
|
+
const parsed = JSON.parse(stripBom(raw));
|
|
615
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
616
|
+
throw new Error("input must be an object");
|
|
617
|
+
}
|
|
618
|
+
return parsed;
|
|
619
|
+
} catch {
|
|
620
|
+
throw assetIdleValidationError("input_invalid", `${label} \u4E0D\u662F\u5408\u6CD5 JSON \u5BF9\u8C61`);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
function successEnvelope(operation, result) {
|
|
624
|
+
return {
|
|
625
|
+
schemaVersion: 1,
|
|
626
|
+
ok: true,
|
|
627
|
+
operation,
|
|
628
|
+
data: result.data === void 0 ? null : result.data,
|
|
629
|
+
...result.meta ? { meta: result.meta } : {},
|
|
630
|
+
warnings: result.warnings ?? []
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
function failureEnvelope(error) {
|
|
634
|
+
return {
|
|
635
|
+
schemaVersion: 1,
|
|
636
|
+
ok: false,
|
|
637
|
+
error: toErrorEnvelope(error)
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
async function executeAndPrint(ctx, operation, input) {
|
|
641
|
+
try {
|
|
642
|
+
const result = await executeAssetIdleOperation(operation, input, {
|
|
643
|
+
ctx,
|
|
644
|
+
host: createAssetIdleHost(ctx)
|
|
645
|
+
});
|
|
646
|
+
ctx.output.write(successEnvelope(operation, result), { json: true });
|
|
647
|
+
} catch (error) {
|
|
648
|
+
console.error(JSON.stringify(failureEnvelope(error), null, 2));
|
|
649
|
+
process.exitCode = isCliError(error) ? error.exitCode : 1 /* GeneralError */;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
var assetIdleShortcut = {
|
|
653
|
+
name: "asset-idle",
|
|
654
|
+
description: "E10 \u95F2\u7F6E\u8D44\u4EA7\u5224\u5B9A\u7ED3\u679C\u67E5\u8BE2 CLI\uFF08\u5206\u9875\u83B7\u53D6/\u805A\u5408\u7EDF\u8BA1\uFF09",
|
|
655
|
+
category: "shortcut",
|
|
656
|
+
register({ program, action }) {
|
|
657
|
+
const assetIdle = program.command("asset-idle").description("E10 \u95F2\u7F6E\u8D44\u4EA7\u5224\u5B9A\u7ED3\u679C\u67E5\u8BE2\uFF08\u670D\u52A1\u7AEF\u5DF2\u5224\u5B9A\uFF0C\u53EA\u8BFB\uFF09");
|
|
658
|
+
assetIdle.command("schema").description("Print asset-idle operation manifest for agents").action(action((ctx) => {
|
|
659
|
+
ctx.output.write(assetIdleManifest, { json: true });
|
|
660
|
+
}));
|
|
661
|
+
assetIdle.command("run").description("Run an asset-idle operation with JSON input").argument("<operation>", "operation name, e.g. asset-idle.idle.list").option("--input <path>", "JSON input file, or - for stdin").option("--input-json <json>", "inline JSON input object").action(action(async (ctx, operation, options) => {
|
|
662
|
+
await executeAndPrint(ctx, String(operation), await inputFrom(options));
|
|
663
|
+
}));
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
export {
|
|
667
|
+
assetIdleShortcut,
|
|
668
|
+
inputFrom,
|
|
669
|
+
successEnvelope
|
|
670
|
+
};
|
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
looksLikeFileId,
|
|
9
9
|
meetingAttachmentContentOperations,
|
|
10
10
|
parseFileIdList
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-KTCB5R5H.js";
|
|
12
|
+
import "./chunk-YS5DPN4T.js";
|
|
13
|
+
import "./chunk-CQHGNCK2.js";
|
|
14
14
|
import "./chunk-LUSPKZKY.js";
|
|
15
15
|
import "./chunk-BUSC6UAE.js";
|
|
16
16
|
export {
|