weaver-work-cli 0.1.36 → 0.1.38

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.
Files changed (93) hide show
  1. package/dist/chunks/{archive-XBVH7JU7.js → archive-PDV724YK.js} +5 -4
  2. package/dist/chunks/{archive-oa-MZM3EKFQ.js → archive-oa-4XE4MNXQ.js} +4 -3
  3. package/dist/chunks/{asset-4XO7UOUW.js → asset-PDL2QE2N.js} +8 -7
  4. package/dist/chunks/{attachment-content-VXSWANAC.js → attachment-content-MDDGOE5E.js} +3 -3
  5. package/dist/chunks/{blog-PGZKOPSC.js → blog-UYR3EUXW.js} +5 -4
  6. package/dist/chunks/{caizhilian-BH4ZVGUN.js → caizhilian-LG2X5NMF.js} +5 -4
  7. package/dist/chunks/{calendar-MXEMTIO4.js → calendar-FG4BAZHE.js} +4 -3
  8. package/dist/chunks/{chunk-NCOVUAZK.js → chunk-6FTTSA45.js} +4 -3
  9. package/dist/chunks/{chunk-HXJQI5NM.js → chunk-6LTFIFLM.js} +3 -2
  10. package/dist/chunks/{chunk-QYGO5EE2.js → chunk-CORFRD7Q.js} +4 -3
  11. package/dist/chunks/{chunk-QHFANTX7.js → chunk-DMV2TOMH.js} +1348 -90
  12. package/dist/chunks/{chunk-TC6MZAO3.js → chunk-ELYDWBZJ.js} +52 -2
  13. package/dist/chunks/{chunk-JCSN3JGM.js → chunk-FUWVHMVV.js} +7 -6
  14. package/dist/chunks/{chunk-BPE37FPB.js → chunk-GGJFMNJM.js} +3 -3
  15. package/dist/chunks/{chunk-6LLJFKJE.js → chunk-IZUDA353.js} +1 -1
  16. package/dist/chunks/{chunk-XMGSYD6S.js → chunk-J7USS3ED.js} +4 -4
  17. package/dist/chunks/{chunk-F746NKNF.js → chunk-JSMFPO43.js} +1 -1
  18. package/dist/chunks/{chunk-T72N74ZT.js → chunk-KKRL3REV.js} +5 -4
  19. package/dist/chunks/{chunk-VPUTVEMC.js → chunk-NI6GIPIM.js} +98 -3
  20. package/dist/chunks/{chunk-VPXOPQJI.js → chunk-NR6RKXPA.js} +2 -2
  21. package/dist/chunks/{chunk-JNG42JKG.js → chunk-OJQUJZQF.js} +4 -6
  22. package/dist/chunks/{chunk-I6QGIBDM.js → chunk-UJJD4QWF.js} +4 -3
  23. package/dist/chunks/{chunk-JUXVYKII.js → chunk-UZZBA6PV.js} +174 -14
  24. package/dist/chunks/{chunk-JYKABYCV.js → chunk-VRYHGG6O.js} +2 -2
  25. package/dist/chunks/{chunk-WXFPWCXG.js → chunk-XJY7G4DD.js} +3 -3
  26. package/dist/chunks/{chunk-5DQEEGCC.js → chunk-Z32KWY6G.js} +1 -1
  27. package/dist/chunks/{conflict-JAB2LJEZ.js → conflict-BQZEQ4SP.js} +2 -2
  28. package/dist/chunks/{contract-XI2EEIZU.js → contract-XIRAFTEV.js} +4 -3
  29. package/dist/chunks/{cowork-SCPGLBA4.js → cowork-BLG62BL2.js} +4 -3
  30. package/dist/chunks/{ebuilder-form-EYLHNOTA.js → ebuilder-form-NUKG5QW4.js} +3 -3
  31. package/dist/chunks/{ehr-EAP77IMT.js → ehr-2STW5ILH.js} +4 -3
  32. package/dist/chunks/{esb-2TGGXEE7.js → esb-UUDQUNKY.js} +4 -4
  33. package/dist/chunks/{fna-2X7ZE7BU.js → fna-6RCY4NU5.js} +4 -3
  34. package/dist/chunks/{host-C6EL2RKL.js → host-7RXEDMAH.js} +3 -3
  35. package/dist/chunks/{host-XCLDDXKQ.js → host-EJZFROU3.js} +3 -3
  36. package/dist/chunks/{host-I4NRK4MX.js → host-FWDOSRH5.js} +3 -3
  37. package/dist/chunks/{host-Q4LZGCRU.js → host-RHM3NPXV.js} +3 -3
  38. package/dist/chunks/{host-UEI5FGDM.js → host-UFF33TWJ.js} +3 -3
  39. package/dist/chunks/{hrm-YXERJM76.js → hrm-PKJ6ELSH.js} +3 -3
  40. package/dist/chunks/{im-A4VZN2TQ.js → im-YJAXS7CO.js} +3 -3
  41. package/dist/chunks/{invoice-2Z6YPMIS.js → invoice-HWVSXGX6.js} +3 -3
  42. package/dist/chunks/{jiuchuanhui-AR5GMKZB.js → jiuchuanhui-L7VKILZB.js} +4 -3
  43. package/dist/chunks/{lazy-dispatch-QXW7P4X3.js → lazy-dispatch-NMYEIHRH.js} +4 -4
  44. package/dist/chunks/{mail-7GZ6CPBJ.js → mail-B42RRU7G.js} +4 -3
  45. package/dist/chunks/{meeting-3NMGA3MB.js → meeting-CFYVBJSS.js} +13 -12
  46. package/dist/chunks/{okr-BZ6XUOAG.js → okr-GCLF6V7W.js} +4 -3
  47. package/dist/chunks/{plan-DR5CMUYP.js → plan-ZVL7GBRI.js} +4 -3
  48. package/dist/chunks/{project-6J63MK33.js → project-4YWAAE2K.js} +4 -3
  49. package/dist/chunks/{registry-VRTNC6UR.js → registry-EP4VTHZS.js} +8 -8
  50. package/dist/chunks/{registry-KDD7DHNK.js → registry-FRJ6H7BT.js} +4 -4
  51. package/dist/chunks/{registry-TKX2E7C7.js → registry-SG2PGVCF.js} +2 -2
  52. package/dist/chunks/{room-recommend-XCWRMB5P.js → room-recommend-R3JVUUAC.js} +4 -4
  53. package/dist/chunks/{schedule-IVBICP32.js → schedule-NIJBTYDO.js} +4 -4
  54. package/dist/chunks/{workflow-D74NFK3C.js → workflow-BB24DFBY.js} +4 -4
  55. package/dist/index.js +27 -27
  56. package/dist/internal/e10/auth-recovery.js +114 -1
  57. package/dist/internal/e10/client.js +16 -2
  58. package/dist/internal/e10/request-runtime.js +103 -7
  59. package/dist/shortcuts/archive/host.js +3 -2
  60. package/dist/shortcuts/archive-oa/host.js +2 -1
  61. package/dist/shortcuts/asset/host.js +6 -5
  62. package/dist/shortcuts/blog/host.js +3 -2
  63. package/dist/shortcuts/caizhilian/host.js +3 -2
  64. package/dist/shortcuts/calendar/host.js +2 -1
  65. package/dist/shortcuts/contract/host.js +2 -1
  66. package/dist/shortcuts/cowork/host.js +2 -1
  67. package/dist/shortcuts/ebuilder-form/host.js +3 -1
  68. package/dist/shortcuts/ehr/host.js +2 -1
  69. package/dist/shortcuts/esb/host.js +2 -1
  70. package/dist/shortcuts/fna/host.js +2 -1
  71. package/dist/shortcuts/hrm/host.js +2 -1
  72. package/dist/shortcuts/im/host.js +3 -2
  73. package/dist/shortcuts/invoice/host.js +5 -4
  74. package/dist/shortcuts/jiuchuanhui/host.js +2 -1
  75. package/dist/shortcuts/mail/host.js +2 -1
  76. package/dist/shortcuts/meeting/host.js +3 -2
  77. package/dist/shortcuts/meeting/invitation/text.js +71 -0
  78. package/dist/shortcuts/meeting/operations/eb/create-flow.js +1073 -50
  79. package/dist/shortcuts/meeting/operations/eb/crm-search.js +478 -0
  80. package/dist/shortcuts/meeting/operations/eb/factory.js +60 -1
  81. package/dist/shortcuts/meeting/operations/eb/index.js +2 -0
  82. package/dist/shortcuts/meeting/operations/invitation.js +122 -9
  83. package/dist/shortcuts/okr/host.js +2 -1
  84. package/dist/shortcuts/plan/host.js +2 -1
  85. package/dist/shortcuts/project/host.js +2 -1
  86. package/dist/shortcuts/workflow/operations/form.js +160 -2
  87. package/package.json +1 -1
  88. package/skills/weaver-e10-meeting/SKILL.md +250 -301
  89. package/skills/weaver-e10-meeting/references/meeting-eb.md +203 -0
  90. package/skills/weaver-e10-meeting/references/meeting-invitation.md +37 -5
  91. package/skills/weaver-e10-meeting.zip +0 -0
  92. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  93. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
@@ -3,17 +3,17 @@ const require = __esbuildCreateRequire(import.meta.url);
3
3
  import {
4
4
  getMeetingOperation,
5
5
  meetingOperationDefinitions
6
- } from "./chunk-QHFANTX7.js";
7
- import "./chunk-BPE37FPB.js";
8
- import "./chunk-XMGSYD6S.js";
9
- import "./chunk-F746NKNF.js";
10
- import "./chunk-WXFPWCXG.js";
11
- import "./chunk-HXJQI5NM.js";
6
+ } from "./chunk-DMV2TOMH.js";
7
+ import "./chunk-GGJFMNJM.js";
8
+ import "./chunk-J7USS3ED.js";
9
+ import "./chunk-JSMFPO43.js";
10
+ import "./chunk-XJY7G4DD.js";
11
+ import "./chunk-6LTFIFLM.js";
12
12
  import {
13
13
  degradeMeetingEnvToStandard,
14
14
  meetingStateDir,
15
15
  readCache
16
- } from "./chunk-5DQEEGCC.js";
16
+ } from "./chunk-Z32KWY6G.js";
17
17
  import {
18
18
  MeetingCliError,
19
19
  asObject,
@@ -21,16 +21,17 @@ import {
21
21
  meetingAuthError,
22
22
  meetingNetworkError,
23
23
  meetingValidationError
24
- } from "./chunk-TC6MZAO3.js";
24
+ } from "./chunk-ELYDWBZJ.js";
25
25
  import {
26
26
  E10ApiError,
27
27
  createE10RequestRuntime,
28
+ isE10SessionExpiredResponse,
28
29
  requireE10Session
29
- } from "./chunk-JUXVYKII.js";
30
+ } from "./chunk-UZZBA6PV.js";
30
31
  import {
31
32
  E10_SESSION_EXPIRED_MESSAGE,
32
33
  getActiveProfile
33
- } from "./chunk-JNG42JKG.js";
34
+ } from "./chunk-OJQUJZQF.js";
34
35
  import {
35
36
  isCliError,
36
37
  toErrorEnvelope
@@ -210,7 +211,7 @@ function createMeetingHost(ctx, dependencies = {}) {
210
211
  } catch (error) {
211
212
  mapRuntimeNetworkError(error);
212
213
  }
213
- if (response.status === 401 || response.status === 302) {
214
+ if (isE10SessionExpiredResponse(response)) {
214
215
  throw meetingAuthError("session_expired", E10_SESSION_EXPIRED_MESSAGE, { httpStatus: response.status });
215
216
  }
216
217
  if (response.status !== 200) {
@@ -256,7 +257,7 @@ function createMeetingHost(ctx, dependencies = {}) {
256
257
  } catch (error) {
257
258
  mapRuntimeNetworkError(error);
258
259
  }
259
- if (response.status === 401 || response.status === 302) {
260
+ if (isE10SessionExpiredResponse(response)) {
260
261
  throw meetingAuthError("session_expired", E10_SESSION_EXPIRED_MESSAGE, { httpStatus: response.status });
261
262
  }
262
263
  if (response.parseError) {
@@ -3,12 +3,13 @@ const require = __esbuildCreateRequire(import.meta.url);
3
3
  import {
4
4
  E10ApiError,
5
5
  createE10RequestRuntime,
6
+ isE10SessionExpiredResponse,
6
7
  requireE10Session
7
- } from "./chunk-JUXVYKII.js";
8
+ } from "./chunk-UZZBA6PV.js";
8
9
  import {
9
10
  E10_SESSION_EXPIRED_MESSAGE,
10
11
  getActiveProfile
11
- } from "./chunk-JNG42JKG.js";
12
+ } from "./chunk-OJQUJZQF.js";
12
13
  import {
13
14
  CliError,
14
15
  isCliError,
@@ -286,7 +287,7 @@ function createOkrHost(ctx, dependencies = {}) {
286
287
  } catch (error) {
287
288
  mapRuntimeNetworkError(error);
288
289
  }
289
- if (response.status === 401 || response.status === 302) {
290
+ if (isE10SessionExpiredResponse(response)) {
290
291
  throw okrAuthError(
291
292
  "session_expired",
292
293
  E10_SESSION_EXPIRED_MESSAGE,
@@ -3,12 +3,13 @@ const require = __esbuildCreateRequire(import.meta.url);
3
3
  import {
4
4
  E10ApiError,
5
5
  createE10RequestRuntime,
6
+ isE10SessionExpiredResponse,
6
7
  requireE10Session
7
- } from "./chunk-JUXVYKII.js";
8
+ } from "./chunk-UZZBA6PV.js";
8
9
  import {
9
10
  E10_SESSION_EXPIRED_MESSAGE,
10
11
  getActiveProfile
11
- } from "./chunk-JNG42JKG.js";
12
+ } from "./chunk-OJQUJZQF.js";
12
13
  import {
13
14
  CliError,
14
15
  isCliError,
@@ -290,7 +291,7 @@ function createPlanHost(ctx, dependencies = {}) {
290
291
  } catch (error) {
291
292
  mapRuntimeNetworkError(error);
292
293
  }
293
- if (response.status === 401 || response.status === 302) {
294
+ if (isE10SessionExpiredResponse(response)) {
294
295
  throw planAuthError(
295
296
  "session_expired",
296
297
  E10_SESSION_EXPIRED_MESSAGE,
@@ -3,12 +3,13 @@ const require = __esbuildCreateRequire(import.meta.url);
3
3
  import {
4
4
  E10ApiError,
5
5
  createE10RequestRuntime,
6
+ isE10SessionExpiredResponse,
6
7
  requireE10Session
7
- } from "./chunk-JUXVYKII.js";
8
+ } from "./chunk-UZZBA6PV.js";
8
9
  import {
9
10
  E10_SESSION_EXPIRED_MESSAGE,
10
11
  getActiveProfile
11
- } from "./chunk-JNG42JKG.js";
12
+ } from "./chunk-OJQUJZQF.js";
12
13
  import {
13
14
  CliError,
14
15
  isCliError,
@@ -266,7 +267,7 @@ function createProjectHost(ctx, dependencies = {}) {
266
267
  } catch (error) {
267
268
  mapRuntimeNetworkError(error);
268
269
  }
269
- if (response.status === 401 || response.status === 302) {
270
+ if (isE10SessionExpiredResponse(response)) {
270
271
  throw projectAuthError("session_expired", E10_SESSION_EXPIRED_MESSAGE, {
271
272
  httpStatus: response.status
272
273
  });
@@ -4,14 +4,14 @@ import {
4
4
  getMeetingOperation,
5
5
  hasMeetingOperation,
6
6
  meetingOperationDefinitions
7
- } from "./chunk-QHFANTX7.js";
8
- import "./chunk-BPE37FPB.js";
9
- import "./chunk-XMGSYD6S.js";
10
- import "./chunk-F746NKNF.js";
11
- import "./chunk-WXFPWCXG.js";
12
- import "./chunk-HXJQI5NM.js";
13
- import "./chunk-5DQEEGCC.js";
14
- import "./chunk-TC6MZAO3.js";
7
+ } from "./chunk-DMV2TOMH.js";
8
+ import "./chunk-GGJFMNJM.js";
9
+ import "./chunk-J7USS3ED.js";
10
+ import "./chunk-JSMFPO43.js";
11
+ import "./chunk-XJY7G4DD.js";
12
+ import "./chunk-6LTFIFLM.js";
13
+ import "./chunk-Z32KWY6G.js";
14
+ import "./chunk-ELYDWBZJ.js";
15
15
  import "./chunk-LUSPKZKY.js";
16
16
  import "./chunk-BUSC6UAE.js";
17
17
  export {
@@ -4,11 +4,11 @@ import {
4
4
  esbOperationDefinitions,
5
5
  getEsbOperation,
6
6
  hasEsbOperation
7
- } from "./chunk-6LLJFKJE.js";
8
- import "./chunk-I6QGIBDM.js";
7
+ } from "./chunk-IZUDA353.js";
8
+ import "./chunk-UJJD4QWF.js";
9
9
  import "./chunk-GPMFD4RD.js";
10
- import "./chunk-JUXVYKII.js";
11
- import "./chunk-JNG42JKG.js";
10
+ import "./chunk-UZZBA6PV.js";
11
+ import "./chunk-OJQUJZQF.js";
12
12
  import "./chunk-LUSPKZKY.js";
13
13
  import "./chunk-BUSC6UAE.js";
14
14
  export {
@@ -4,12 +4,12 @@ import {
4
4
  getWorkflowOperation,
5
5
  hasWorkflowOperation,
6
6
  workflowOperationDefinitions
7
- } from "./chunk-VPUTVEMC.js";
7
+ } from "./chunk-NI6GIPIM.js";
8
8
  import "./chunk-EZALDOQH.js";
9
9
  import "./chunk-FMPJJYYI.js";
10
10
  import "./chunk-EG6ZU444.js";
11
11
  import "./chunk-AJ62BGAW.js";
12
- import "./chunk-JNG42JKG.js";
12
+ import "./chunk-OJQUJZQF.js";
13
13
  import "./chunk-LUSPKZKY.js";
14
14
  import "./chunk-BUSC6UAE.js";
15
15
  export {
@@ -6,10 +6,10 @@ import {
6
6
  loadRooms,
7
7
  recommendRooms,
8
8
  rememberFrequentRoom
9
- } from "./chunk-BPE37FPB.js";
10
- import "./chunk-F746NKNF.js";
11
- import "./chunk-5DQEEGCC.js";
12
- import "./chunk-TC6MZAO3.js";
9
+ } from "./chunk-GGJFMNJM.js";
10
+ import "./chunk-JSMFPO43.js";
11
+ import "./chunk-Z32KWY6G.js";
12
+ import "./chunk-ELYDWBZJ.js";
13
13
  import "./chunk-LUSPKZKY.js";
14
14
  import "./chunk-BUSC6UAE.js";
15
15
  export {
@@ -8,10 +8,10 @@ import {
8
8
  resolveMeetingScheduleTypeIds,
9
9
  resolveMemberIdsByName,
10
10
  runScheduleConflictFlow
11
- } from "./chunk-XMGSYD6S.js";
12
- import "./chunk-F746NKNF.js";
13
- import "./chunk-5DQEEGCC.js";
14
- import "./chunk-TC6MZAO3.js";
11
+ } from "./chunk-J7USS3ED.js";
12
+ import "./chunk-JSMFPO43.js";
13
+ import "./chunk-Z32KWY6G.js";
14
+ import "./chunk-ELYDWBZJ.js";
15
15
  import "./chunk-LUSPKZKY.js";
16
16
  import "./chunk-BUSC6UAE.js";
17
17
  export {
@@ -2,7 +2,7 @@ import { createRequire as __esbuildCreateRequire } from 'node:module';
2
2
  const require = __esbuildCreateRequire(import.meta.url);
3
3
  import {
4
4
  createWorkflowHost
5
- } from "./chunk-VPXOPQJI.js";
5
+ } from "./chunk-NR6RKXPA.js";
6
6
  import {
7
7
  USER_INTENT_RULE_FILE,
8
8
  aigroupUserDir,
@@ -17,7 +17,7 @@ import {
17
17
  validateRuleFile,
18
18
  workflowOperationDefinitions,
19
19
  workflowSuccess
20
- } from "./chunk-VPUTVEMC.js";
20
+ } from "./chunk-NI6GIPIM.js";
21
21
  import {
22
22
  createWorkflowContinuationSigner
23
23
  } from "./chunk-EZALDOQH.js";
@@ -28,8 +28,8 @@ import {
28
28
  } from "./chunk-FMPJJYYI.js";
29
29
  import "./chunk-EG6ZU444.js";
30
30
  import "./chunk-AJ62BGAW.js";
31
- import "./chunk-JUXVYKII.js";
32
- import "./chunk-JNG42JKG.js";
31
+ import "./chunk-UZZBA6PV.js";
32
+ import "./chunk-OJQUJZQF.js";
33
33
  import {
34
34
  isCliError,
35
35
  toErrorEnvelope
package/dist/index.js CHANGED
@@ -7,12 +7,12 @@ import {
7
7
  firstPositionalToken,
8
8
  registerCommands,
9
9
  toCommandMetadata
10
- } from "./chunks/chunk-JYKABYCV.js";
10
+ } from "./chunks/chunk-VRYHGG6O.js";
11
11
  import "./chunks/chunk-EG6ZU444.js";
12
12
  import "./chunks/chunk-AJ62BGAW.js";
13
- import "./chunks/chunk-JCSN3JGM.js";
14
- import "./chunks/chunk-JUXVYKII.js";
15
- import "./chunks/chunk-JNG42JKG.js";
13
+ import "./chunks/chunk-FUWVHMVV.js";
14
+ import "./chunks/chunk-UZZBA6PV.js";
15
+ import "./chunks/chunk-OJQUJZQF.js";
16
16
  import "./chunks/chunk-LUSPKZKY.js";
17
17
  import "./chunks/chunk-BUSC6UAE.js";
18
18
 
@@ -29,7 +29,7 @@ function lazyShortcut(definition) {
29
29
  placeholder.allowExcessArguments(true);
30
30
  placeholder.helpOption(false);
31
31
  placeholder.action(async () => {
32
- const { dispatchLazyShortcut } = await import("./chunks/lazy-dispatch-QXW7P4X3.js");
32
+ const { dispatchLazyShortcut } = await import("./chunks/lazy-dispatch-NMYEIHRH.js");
33
33
  await dispatchLazyShortcut(definition, shortcutMetadata());
34
34
  });
35
35
  }
@@ -39,112 +39,112 @@ var builtinShortcuts = [
39
39
  lazyShortcut({
40
40
  name: "invoice",
41
41
  description: "E10 \u4E1A\u7968\u901A\u53D1\u7968\u7BA1\u7406 CLI",
42
- load: async () => (await import("./chunks/invoice-2Z6YPMIS.js")).invoiceShortcut
42
+ load: async () => (await import("./chunks/invoice-HWVSXGX6.js")).invoiceShortcut
43
43
  }),
44
44
  lazyShortcut({
45
45
  name: "ehr",
46
46
  description: "\u6CDB\u5FAEE10\u805A\u624D\u6797\uFF08\u4EBA\u4E8B/\u51FA\u52E4/\u85AA\u916C\uFF09CLI",
47
- load: async () => (await import("./chunks/ehr-EAP77IMT.js")).ehrShortcut
47
+ load: async () => (await import("./chunks/ehr-2STW5ILH.js")).ehrShortcut
48
48
  }),
49
49
  lazyShortcut({
50
50
  name: "cowork",
51
51
  description: "\u6CDB\u5FAEE10\u534F\u4F5C\u533A\uFF08\u534F\u4F5C\u4E8B\u9879/\u8BA8\u8BBA/\u5BA1\u6279/\u5171\u4EAB\u6743\u9650\uFF09CLI",
52
- load: async () => (await import("./chunks/cowork-SCPGLBA4.js")).coworkShortcut
52
+ load: async () => (await import("./chunks/cowork-BLG62BL2.js")).coworkShortcut
53
53
  }),
54
54
  lazyShortcut({
55
55
  name: "archive",
56
56
  description: "E10 \u6587\u4E66\u5B9A\u6863\u6848\u7BA1\u7406 CLI",
57
- load: async () => (await import("./chunks/archive-XBVH7JU7.js")).archiveShortcut
57
+ load: async () => (await import("./chunks/archive-PDV724YK.js")).archiveShortcut
58
58
  }),
59
59
  lazyShortcut({
60
60
  name: "archive-oa",
61
61
  description: "E10 \u6863\u6848\u5B9A\u4F4D\u4E0E OA \u5546\u52A1\u5408\u540C\u501F\u9605 CLI",
62
- load: async () => (await import("./chunks/archive-oa-MZM3EKFQ.js")).archiveOaShortcut
62
+ load: async () => (await import("./chunks/archive-oa-4XE4MNXQ.js")).archiveOaShortcut
63
63
  }),
64
64
  lazyShortcut({
65
65
  name: "calendar",
66
66
  description: "\u6CDB\u5FAEE10\u65E5\u7A0B\u7BA1\u7406 CLI\uFF08\u521B\u5EFA/\u67E5\u8BE2/\u66F4\u65B0/\u5220\u9664/\u5B57\u5178\uFF09",
67
- load: async () => (await import("./chunks/calendar-MXEMTIO4.js")).calendarShortcut
67
+ load: async () => (await import("./chunks/calendar-FG4BAZHE.js")).calendarShortcut
68
68
  }),
69
69
  lazyShortcut({
70
70
  name: "fna",
71
71
  description: "\u6CDB\u5FAEE10\u9F50\u4E1A\u6210\u8D39\u63A7\u4E2D\u5FC3\uFF08\u9884\u7B97/\u8D39\u7528\u4E2D\u5FC3/\u501F\u6B3E\u7BA1\u7406/\u53D1\u7968\u6838\u9500\uFF09CLI",
72
- load: async () => (await import("./chunks/fna-2X7ZE7BU.js")).fnaShortcut
72
+ load: async () => (await import("./chunks/fna-6RCY4NU5.js")).fnaShortcut
73
73
  }),
74
74
  lazyShortcut({
75
75
  name: "hrm",
76
76
  description: "\u6CDB\u5FAEE10\u7EC4\u7EC7\u7BA1\u7406\uFF08\u5458\u5DE5/\u7EC4\u7EC7/\u5C97\u4F4D\u67E5\u8BE2\uFF09CLI",
77
- load: async () => (await import("./chunks/hrm-YXERJM76.js")).hrmShortcut
77
+ load: async () => (await import("./chunks/hrm-PKJ6ELSH.js")).hrmShortcut
78
78
  }),
79
79
  lazyShortcut({
80
80
  name: "mail",
81
81
  description: "\u6CDB\u5FAEE10\u90AE\u4EF6\u7BA1\u7406 CLI",
82
- load: async () => (await import("./chunks/mail-7GZ6CPBJ.js")).mailShortcut
82
+ load: async () => (await import("./chunks/mail-B42RRU7G.js")).mailShortcut
83
83
  }),
84
84
  lazyShortcut({
85
85
  name: "meeting",
86
86
  description: "\u6CDB\u5FAEE10\u4F1A\u8BAE\u7BA1\u7406 CLI\uFF08\u6807\u51C6\u7248\uFF1A\u67E5\u8BE2/\u51B2\u7A81/\u9884\u7EA6/\u56DE\u6267/\u7B7E\u5230\uFF09",
87
- load: async () => (await import("./chunks/meeting-3NMGA3MB.js")).meetingShortcut
87
+ load: async () => (await import("./chunks/meeting-CFYVBJSS.js")).meetingShortcut
88
88
  }),
89
89
  lazyShortcut({
90
90
  name: "okr",
91
91
  description: "\u6CDB\u5FAEE10 OKR \u76EE\u6807\u7BA1\u7406 CLI\uFF08\u76EE\u6807\u67E5\u8BE2/\u65B0\u5EFA/\u7F16\u8F91\u3001\u5173\u952E\u6210\u679C\u3001\u76EE\u6807\u5BF9\u9F50\u3001\u8BC4\u8BBA\uFF09",
92
- load: async () => (await import("./chunks/okr-BZ6XUOAG.js")).okrShortcut
92
+ load: async () => (await import("./chunks/okr-GCLF6V7W.js")).okrShortcut
93
93
  }),
94
94
  lazyShortcut({
95
95
  name: "plan",
96
96
  description: "\u6CDB\u5FAEE10\u8BA1\u5212\u62A5\u544A CLI\uFF08\u67E5\u8BE2/\u65B0\u5EFA/\u4FEE\u6539/\u53D1\u5E03/\u64A4\u56DE/\u63D0\u4EA4\u63D0\u9192/\u8BC4\u8BBA\uFF09",
97
- load: async () => (await import("./chunks/plan-DR5CMUYP.js")).planShortcut
97
+ load: async () => (await import("./chunks/plan-ZVL7GBRI.js")).planShortcut
98
98
  }),
99
99
  lazyShortcut({
100
100
  name: "esb",
101
101
  description: "\u6CDB\u5FAEE10 ESB \u4E2D\u5FC3\u81EA\u5B9A\u4E49\u89E6\u53D1\u52A8\u4F5C\u6D41 CLI",
102
- load: async () => (await import("./chunks/esb-2TGGXEE7.js")).esbShortcut
102
+ load: async () => (await import("./chunks/esb-UUDQUNKY.js")).esbShortcut
103
103
  }),
104
104
  lazyShortcut({
105
105
  name: "ebuilder-form",
106
106
  description: "\u6CDB\u5FAEE10 eBuilder \u8868\u5355\u83DC\u5355\u3001\u5217\u8868\u548C\u8868\u5355\u6570\u636E CLI",
107
- load: async () => (await import("./chunks/ebuilder-form-EYLHNOTA.js")).ebuilderFormShortcut
107
+ load: async () => (await import("./chunks/ebuilder-form-NUKG5QW4.js")).ebuilderFormShortcut
108
108
  }),
109
109
  lazyShortcut({
110
110
  name: "jiuchuanhui",
111
111
  description: "\u6CDB\u5FAEE10\u4E5D\u6C1A\u6C47\u8425\u9500\u7BA1\u7406 CLI\uFF08\u5BA2\u6237/\u8054\u7CFB\u4EBA/\u5546\u673A/\u7EBF\u7D22/\u8054\u7CFB\u8BA1\u5212/\u516C\u6D77\uFF09",
112
- load: async () => (await import("./chunks/jiuchuanhui-AR5GMKZB.js")).jiuchuanhuiShortcut
112
+ load: async () => (await import("./chunks/jiuchuanhui-L7VKILZB.js")).jiuchuanhuiShortcut
113
113
  }),
114
114
  lazyShortcut({
115
115
  name: "asset",
116
116
  description: "E10 \u8D44\u4EA7\u7BA1\u7406\uFF08\u8D44\u7BA1\u5BB6\uFF09CLI",
117
- load: async () => (await import("./chunks/asset-4XO7UOUW.js")).assetShortcut
117
+ load: async () => (await import("./chunks/asset-PDL2QE2N.js")).assetShortcut
118
118
  }),
119
119
  lazyShortcut({
120
120
  name: "im",
121
121
  description: "\u6CDB\u5FAEE10\u6613\u79D2\u529E\uFF08\u5373\u65F6\u901A\u8BAF\uFF09CLI",
122
- load: async () => (await import("./chunks/im-A4VZN2TQ.js")).imShortcut
122
+ load: async () => (await import("./chunks/im-YJAXS7CO.js")).imShortcut
123
123
  }),
124
124
  lazyShortcut({
125
125
  name: "project",
126
126
  description: "\u6CDB\u5FAEE10\u4E8B\u4E95\u7136\u9879\u76EE\u7BA1\u7406 CLI\uFF08\u9879\u76EE/\u4EFB\u52A1\u67E5\u8BE2\u4E0E\u786E\u8BA4\u5199\u5165\uFF09",
127
- load: async () => (await import("./chunks/project-6J63MK33.js")).projectShortcut
127
+ load: async () => (await import("./chunks/project-4YWAAE2K.js")).projectShortcut
128
128
  }),
129
129
  lazyShortcut({
130
130
  name: "workflow",
131
131
  description: "\u6CDB\u5FAEE10\u6D41\u7A0B\u667A\u80FD\u52A9\u624B CLI\uFF08\u67E5\u8BE2/\u67E5\u770B/\u64CD\u4F5C/\u6279\u91CF/\u53D1\u8D77/\u4FEE\u6539\uFF09",
132
- load: async () => (await import("./chunks/workflow-D74NFK3C.js")).workflowShortcut
132
+ load: async () => (await import("./chunks/workflow-BB24DFBY.js")).workflowShortcut
133
133
  }),
134
134
  lazyShortcut({
135
135
  name: "blog",
136
136
  description: "\u6CDB\u5FAEE10\u5DE5\u4F5C\u65E5\u62A5 CLI\uFF08\u67E5\u8BE2/\u53D1\u5E03/\u7F16\u8F91/\u8BC4\u8BBA/\u70B9\u8D5E/\u63D0\u9192/\u5BFC\u51FA\uFF09",
137
- load: async () => (await import("./chunks/blog-PGZKOPSC.js")).blogShortcut
137
+ load: async () => (await import("./chunks/blog-UYR3EUXW.js")).blogShortcut
138
138
  }),
139
139
  lazyShortcut({
140
140
  name: "caizhilian",
141
141
  description: "\u6CDB\u5FAEE10\u91C7\u77E5\u8FDE\uFF08\u6587\u6863\u4E2D\u5FC3\uFF09CLI",
142
- load: async () => (await import("./chunks/caizhilian-BH4ZVGUN.js")).caizhilianShortcut
142
+ load: async () => (await import("./chunks/caizhilian-LG2X5NMF.js")).caizhilianShortcut
143
143
  }),
144
144
  lazyShortcut({
145
145
  name: "contract",
146
146
  description: "\u6CDB\u5FAEE10\u4ECA\u627F\u8FBE\u5408\u540C\u7BA1\u7406 CLI",
147
- load: async () => (await import("./chunks/contract-XI2EEIZU.js")).contractShortcut
147
+ load: async () => (await import("./chunks/contract-XIRAFTEV.js")).contractShortcut
148
148
  })
149
149
  ];
150
150
  function shortcutMetadata() {
@@ -23,6 +23,116 @@ const AUTH_REQUIRED_MARKERS = [
23
23
  'not logged in',
24
24
  'not login',
25
25
  ];
26
+ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
27
+ /** Location 命中这些特征即为登录类跳转。 */
28
+ const LOGIN_REDIRECT_MARKERS = [
29
+ 'login',
30
+ 'passport',
31
+ 'sso',
32
+ 'oauth',
33
+ 'signin',
34
+ 'sign-in',
35
+ 'authorize',
36
+ 'authn',
37
+ 'atrust',
38
+ 'checkticket',
39
+ ];
40
+ /** Location 命中这些特征即为文件服务/对象存储交接。 */
41
+ const FILE_REDIRECT_MARKERS = [
42
+ 'fileservice',
43
+ '/file/download',
44
+ '/file/remotedownload',
45
+ '/remotedownload/',
46
+ '/api/file/',
47
+ '/download/',
48
+ 'aliyuncs.com',
49
+ 'myqcloud.com',
50
+ 'qiniucdn.com',
51
+ 'qbox.me',
52
+ 'jdcloud.com',
53
+ 'amazonaws.com',
54
+ 'blob.core.windows.net',
55
+ 'ctyunapi.cn',
56
+ 'hiclouds.com',
57
+ 'minio',
58
+ 's3.',
59
+ 'obs.',
60
+ 'ks3',
61
+ ];
62
+ /** 这些请求路径本身就是取文件:其 3xx 只要不是登录页,就是文件服务交接。 */
63
+ const FILE_REQUEST_PATH_MARKERS = [
64
+ '/api/file/',
65
+ '/file/download',
66
+ '/remotedownload/',
67
+ '/fileservice',
68
+ '/download',
69
+ ];
70
+ /** 跳转目标是前端页面骨架(如 wui/index.html#/main),不是文件直链。 */
71
+ const APP_SHELL_REDIRECT = /(?:\.html?(?:[?#]|$)|#\/|wui\/)/u;
72
+ export function isE10RedirectStatus(status) {
73
+ return REDIRECT_STATUSES.has(status);
74
+ }
75
+ /**
76
+ * 取跳转目标里「有语义」的部分:主机名 + 路径 + hash,**丢掉 query**。
77
+ * 对象存储的签名 query 是长随机串,拿去匹配关键词容易误伤(例如签名里恰好
78
+ * 出现 `sso`),所以只在主机与路径上判定。
79
+ */
80
+ function redirectTarget(location) {
81
+ const raw = location.trim().toLowerCase();
82
+ if (!raw)
83
+ return '';
84
+ try {
85
+ const url = new URL(raw, 'https://e10.invalid');
86
+ return `${url.hostname}${url.pathname}${url.hash}`.toLowerCase();
87
+ }
88
+ catch {
89
+ return raw.split('?')[0];
90
+ }
91
+ }
92
+ /**
93
+ * 识别 3xx 的真实语义。登录跳转优先判定,避免对象存储地址里的参数误伤;
94
+ * 若是下载类请求且目标不像登录页,则认为是文件服务交接(对象存储的签名地址
95
+ * 不一定带 `fileservice` 之类的特征,只能靠请求路径反推)。
96
+ */
97
+ export function classifyE10Redirect(response) {
98
+ if (!isE10RedirectStatus(response.status))
99
+ return 'other';
100
+ const target = redirectTarget(response.headers?.get('location') || '');
101
+ if (!target)
102
+ return 'other';
103
+ if (LOGIN_REDIRECT_MARKERS.some((marker) => target.includes(marker)))
104
+ return 'login';
105
+ if (FILE_REDIRECT_MARKERS.some((marker) => target.includes(marker)))
106
+ return 'file';
107
+ const requestPath = (response.requestPath || '').toLowerCase();
108
+ if (requestPath
109
+ && FILE_REQUEST_PATH_MARKERS.some((marker) => requestPath.includes(marker))
110
+ // 跳到前端页面骨架说明不是文件直链,继续按「无法判定」保守处理。
111
+ && !APP_SHELL_REDIRECT.test(target)) {
112
+ return 'file';
113
+ }
114
+ return 'other';
115
+ }
116
+ /** 3xx 指向文件服务:属于下载直传,登录态有效,不得触发重新登录。 */
117
+ export function isE10FileRedirect(response) {
118
+ return classifyE10Redirect(response) === 'file';
119
+ }
120
+ /** 3xx 指向登录页:登录态确实失效。 */
121
+ export function isE10LoginRedirect(response) {
122
+ return classifyE10Redirect(response) === 'login';
123
+ }
124
+ /**
125
+ * 业务层统一的「HTTP 层登录态失效」判定:401,或 3xx 且不是文件服务交接。
126
+ * 各 shortcut 用它替代原来的 `status === 401 || status === 302`,避免把下载
127
+ * 直传的 302 误报成登录失效。
128
+ */
129
+ export function isE10SessionExpiredResponse(response) {
130
+ if (response.status === 401)
131
+ return true;
132
+ if (isE10RedirectStatus(response.status))
133
+ return !isE10FileRedirect(response);
134
+ return false;
135
+ }
26
136
  const recoveryInFlight = new Map();
27
137
  function asRecord(value) {
28
138
  return value && typeof value === 'object' && !Array.isArray(value)
@@ -77,9 +187,12 @@ function responseText(response) {
77
187
  * Detect only explicit authentication rejection signals. A bare HTTP 403 is
78
188
  * deliberately excluded because E10 also uses it for ordinary permission
79
189
  * denials, which must never trigger a credential refresh.
190
+ *
191
+ * 3xx 只在「跳到登录页」或「无法判定」时才算认证失败:下载接口把文件交接给
192
+ * 文件服务时同样返回 302,那不是登录失效,重新登录既无用也会白白换一次票据。
80
193
  */
81
194
  export function isE10AuthenticationRequired(response) {
82
- if (response.status === 401 || response.status === 302)
195
+ if (isE10SessionExpiredResponse(response))
83
196
  return true;
84
197
  if (responseCodes(response.value).some((code) => AUTH_REQUIRED_CODES.has(code)))
85
198
  return true;
@@ -1,4 +1,4 @@
1
- import { isE10AuthenticationRequired, sameE10SessionIdentity, } from './auth-recovery.js';
1
+ import { isE10AuthenticationRequired, isE10LoginRedirect, isE10RedirectStatus, sameE10SessionIdentity, } from './auth-recovery.js';
2
2
  class E10AuthenticationContextChangedError extends Error {
3
3
  }
4
4
  export class E10ApiClient {
@@ -78,6 +78,7 @@ export class E10ApiClient {
78
78
  if (!authenticationRecoveryAttempted && isE10AuthenticationRequired({
79
79
  status: resp.status,
80
80
  headers: resp.headers,
81
+ requestPath: safePathname(url),
81
82
  text,
82
83
  value,
83
84
  })) {
@@ -94,7 +95,12 @@ export class E10ApiClient {
94
95
  }
95
96
  }
96
97
  // Preserve the legacy password-based refresh for non-XiaoE callers.
97
- if (resp.status === 302) {
98
+ // 只有真的跳到登录页才刷新;3xx 交给文件服务(下载直传)时登录态仍有效。
99
+ if (isE10LoginRedirect({
100
+ status: resp.status,
101
+ headers: resp.headers,
102
+ requestPath: safePathname(url),
103
+ }) || (isE10RedirectStatus(resp.status) && !resp.headers.get('location'))) {
98
104
  const ok = await this.auth.ensureValid();
99
105
  if (!ok)
100
106
  throw new Error('E10 session expired; please login again');
@@ -134,3 +140,11 @@ function refreshAuthenticationHeaders(init, session) {
134
140
  headers['user-agent'] = session.uaHeader();
135
141
  init.headers = headers;
136
142
  }
143
+ function safePathname(rawUrl) {
144
+ try {
145
+ return new URL(rawUrl).pathname;
146
+ }
147
+ catch {
148
+ return rawUrl.startsWith('/') ? rawUrl.split('?')[0] : '';
149
+ }
150
+ }