weaver-work-cli 0.1.33 → 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 (126) hide show
  1. package/dist/chunks/{archive-FVFY6GZN.js → archive-PDV724YK.js} +5 -4
  2. package/dist/chunks/{archive-oa-NW3OD4UV.js → archive-oa-4XE4MNXQ.js} +4 -3
  3. package/dist/chunks/{asset-7QJKMIDV.js → asset-PDL2QE2N.js} +8 -7
  4. package/dist/chunks/{attachment-content-OSAVA6K3.js → attachment-content-MDDGOE5E.js} +3 -3
  5. package/dist/chunks/{blog-I7SDPNW4.js → blog-UYR3EUXW.js} +5 -4
  6. package/dist/chunks/{caizhilian-O37ZIQNY.js → caizhilian-LG2X5NMF.js} +5 -4
  7. package/dist/chunks/{calendar-7KXE4ED3.js → calendar-FG4BAZHE.js} +4 -3
  8. package/dist/chunks/{chunk-Q6LWB5HX.js → chunk-6FTTSA45.js} +4 -3
  9. package/dist/chunks/{chunk-MQ2I5AA3.js → chunk-6LTFIFLM.js} +3 -2
  10. package/dist/chunks/{chunk-WRRJ4GG2.js → chunk-CORFRD7Q.js} +4 -3
  11. package/dist/chunks/{chunk-WY74UBJ6.js → chunk-DMV2TOMH.js} +2194 -240
  12. package/dist/chunks/{chunk-MEEFGWTM.js → chunk-ELYDWBZJ.js} +135 -10
  13. package/dist/chunks/{chunk-EEWPQE3O.js → chunk-FUWVHMVV.js} +7 -6
  14. package/dist/chunks/{chunk-HEL5XTYI.js → chunk-GGJFMNJM.js} +26 -4
  15. package/dist/chunks/{chunk-KAS45KNR.js → chunk-IZUDA353.js} +1 -1
  16. package/dist/chunks/{chunk-2FLWXFVS.js → chunk-J7USS3ED.js} +4 -4
  17. package/dist/chunks/{chunk-IHUYP6LO.js → chunk-JSMFPO43.js} +1 -1
  18. package/dist/chunks/{chunk-RBGOMK4Y.js → chunk-KKRL3REV.js} +5 -4
  19. package/dist/chunks/{chunk-OCU4RLHC.js → chunk-NI6GIPIM.js} +195 -36
  20. package/dist/chunks/{chunk-PRHJGPMA.js → chunk-NR6RKXPA.js} +2 -2
  21. package/dist/chunks/{chunk-D223PTXU.js → chunk-OJQUJZQF.js} +33 -7
  22. package/dist/chunks/{chunk-ILMBNVSG.js → chunk-UJJD4QWF.js} +4 -3
  23. package/dist/chunks/{chunk-6ATGWRZM.js → chunk-UZZBA6PV.js} +177 -14
  24. package/dist/chunks/{chunk-GFPXQIY2.js → chunk-VRYHGG6O.js} +2 -2
  25. package/dist/chunks/{chunk-NHA62QD7.js → chunk-XJY7G4DD.js} +3 -3
  26. package/dist/chunks/{chunk-VBCFFFGT.js → chunk-Z32KWY6G.js} +4 -1
  27. package/dist/chunks/{conflict-SFNEVJY5.js → conflict-BQZEQ4SP.js} +2 -2
  28. package/dist/chunks/contract-XIRAFTEV.js +9111 -0
  29. package/dist/chunks/{cowork-CKWYHXYB.js → cowork-BLG62BL2.js} +46 -26
  30. package/dist/chunks/{ebuilder-form-KOLJRVZD.js → ebuilder-form-NUKG5QW4.js} +3 -3
  31. package/dist/chunks/{ehr-WFOC3B4D.js → ehr-2STW5ILH.js} +174 -10
  32. package/dist/chunks/{esb-LJZTN663.js → esb-UUDQUNKY.js} +4 -4
  33. package/dist/chunks/{fna-F7QRIIZC.js → fna-6RCY4NU5.js} +15 -9
  34. package/dist/chunks/{host-VQ6JJXGQ.js → host-7RXEDMAH.js} +3 -3
  35. package/dist/chunks/{host-KXPTEWFS.js → host-EJZFROU3.js} +3 -3
  36. package/dist/chunks/{host-BCGUVEWX.js → host-FWDOSRH5.js} +3 -3
  37. package/dist/chunks/{host-DGE2TZD4.js → host-RHM3NPXV.js} +3 -3
  38. package/dist/chunks/{host-BQBRHVR3.js → host-UFF33TWJ.js} +3 -3
  39. package/dist/chunks/{hrm-NI6XAKW5.js → hrm-PKJ6ELSH.js} +3 -3
  40. package/dist/chunks/{im-7TRTF3KT.js → im-YJAXS7CO.js} +3 -3
  41. package/dist/chunks/{invoice-AOXWJKYT.js → invoice-HWVSXGX6.js} +3 -3
  42. package/dist/chunks/{jiuchuanhui-7NQWEZAW.js → jiuchuanhui-L7VKILZB.js} +4 -3
  43. package/dist/chunks/{lazy-dispatch-RNS4EE4S.js → lazy-dispatch-NMYEIHRH.js} +4 -4
  44. package/dist/chunks/{mail-VDHJAB4O.js → mail-B42RRU7G.js} +46 -24
  45. package/dist/chunks/{meeting-GA7XCNNP.js → meeting-CFYVBJSS.js} +77 -12
  46. package/dist/chunks/{okr-TQIRERPQ.js → okr-GCLF6V7W.js} +4 -3
  47. package/dist/chunks/{plan-4RY4LN2P.js → plan-ZVL7GBRI.js} +4 -3
  48. package/dist/chunks/{project-D6XT2OC5.js → project-4YWAAE2K.js} +4 -3
  49. package/dist/chunks/{registry-QKMI43Q6.js → registry-EP4VTHZS.js} +8 -8
  50. package/dist/chunks/{registry-JHRIDQ3A.js → registry-FRJ6H7BT.js} +4 -4
  51. package/dist/chunks/{registry-VOGKFFTR.js → registry-SG2PGVCF.js} +2 -2
  52. package/dist/chunks/{room-recommend-D4EUOOWY.js → room-recommend-R3JVUUAC.js} +4 -4
  53. package/dist/chunks/{schedule-XPFBHPCV.js → schedule-NIJBTYDO.js} +4 -4
  54. package/dist/chunks/{workflow-HLBZRWIY.js → workflow-BB24DFBY.js} +11 -4
  55. package/dist/index.js +31 -26
  56. package/dist/internal/e10/auth-recovery.js +114 -1
  57. package/dist/internal/e10/client.js +16 -2
  58. package/dist/internal/e10/fetch-timing.js +31 -0
  59. package/dist/internal/e10/request-runtime.js +108 -7
  60. package/dist/shortcuts/archive/host.js +3 -2
  61. package/dist/shortcuts/archive-oa/host.js +2 -1
  62. package/dist/shortcuts/asset/host.js +6 -5
  63. package/dist/shortcuts/blog/host.js +3 -2
  64. package/dist/shortcuts/caizhilian/host.js +3 -2
  65. package/dist/shortcuts/calendar/host.js +2 -1
  66. package/dist/shortcuts/contract/host.js +2 -1
  67. package/dist/shortcuts/cowork/host.js +10 -1
  68. package/dist/shortcuts/cowork/operations/types.js +17 -2
  69. package/dist/shortcuts/ebuilder-form/host.js +3 -1
  70. package/dist/shortcuts/ehr/host.js +2 -1
  71. package/dist/shortcuts/ehr/operations/recruit-write.js +35 -0
  72. package/dist/shortcuts/ehr/operations/recruit.js +147 -0
  73. package/dist/shortcuts/esb/host.js +2 -1
  74. package/dist/shortcuts/fna/host.js +2 -1
  75. package/dist/shortcuts/fna/operations/expense-chart.js +19 -7
  76. package/dist/shortcuts/hrm/host.js +2 -1
  77. package/dist/shortcuts/im/host.js +3 -2
  78. package/dist/shortcuts/index.js +5 -0
  79. package/dist/shortcuts/invoice/host.js +5 -4
  80. package/dist/shortcuts/jiuchuanhui/host.js +2 -1
  81. package/dist/shortcuts/mail/host.js +10 -1
  82. package/dist/shortcuts/mail/operations/types.js +17 -2
  83. package/dist/shortcuts/meeting/host.js +3 -2
  84. package/dist/shortcuts/meeting/index.js +79 -1
  85. package/dist/shortcuts/meeting/invitation/text.js +71 -0
  86. package/dist/shortcuts/meeting/manifest.js +10 -0
  87. package/dist/shortcuts/meeting/operations/eb/catalog.js +5 -0
  88. package/dist/shortcuts/meeting/operations/eb/conflict.js +6 -1
  89. package/dist/shortcuts/meeting/operations/eb/create-flow.js +2105 -169
  90. package/dist/shortcuts/meeting/operations/eb/crm-search.js +478 -0
  91. package/dist/shortcuts/meeting/operations/eb/factory.js +161 -8
  92. package/dist/shortcuts/meeting/operations/eb/index.js +2 -0
  93. package/dist/shortcuts/meeting/operations/eb/room-recommend.js +36 -2
  94. package/dist/shortcuts/meeting/operations/eb-fallback.js +4 -0
  95. package/dist/shortcuts/meeting/operations/env.js +6 -0
  96. package/dist/shortcuts/meeting/operations/invitation.js +200 -28
  97. package/dist/shortcuts/okr/host.js +2 -1
  98. package/dist/shortcuts/plan/host.js +2 -1
  99. package/dist/shortcuts/project/host.js +2 -1
  100. package/dist/shortcuts/workflow/endpoints.js +8 -3
  101. package/dist/shortcuts/workflow/operations/form.js +341 -36
  102. package/dist/shortcuts/workflow/operations.js +23 -1
  103. package/docs/ehr.md +1 -1
  104. package/docs/fna.md +2 -1
  105. package/package.json +1 -1
  106. package/skill-template/business-info.json +18 -0
  107. package/skill-template/domains/cowork.md +14 -0
  108. package/skills/weaver-e10-cowork/SKILL.md +101 -0
  109. package/skills/weaver-e10-cowork/references/cowork-read.md +90 -0
  110. package/skills/weaver-e10-cowork/references/cowork-write.md +131 -0
  111. package/skills/weaver-e10-cowork/references/safety-boundaries.md +45 -0
  112. package/skills/weaver-e10-jucailin/SKILL.md +21 -3
  113. package/skills/weaver-e10-jucailin/references/recruit-read.md +25 -0
  114. package/skills/weaver-e10-jucailin/references/recruit-write.md +13 -0
  115. package/skills/weaver-e10-jucailin/references/salary.md +15 -11
  116. package/skills/weaver-e10-mail/SKILL.md +12 -9
  117. package/skills/weaver-e10-meeting/SKILL.md +499 -300
  118. package/skills/weaver-e10-meeting/references/meeting-eb.md +334 -0
  119. package/skills/weaver-e10-meeting/references/meeting-invitation.md +64 -6
  120. package/skills/weaver-e10-meeting.zip +0 -0
  121. package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
  122. package/skills/weaver-e10-qiyecheng/SKILL.md +5 -2
  123. package/skills/weaver-e10-qiyecheng/references/catalog.md +2 -2
  124. package/skills/weaver-e10-qiyecheng/references/expense-chart.md +15 -1
  125. package/skills/weaver-e10-qiyecheng/references/source-manifest.json +22 -21
  126. package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
@@ -6,8 +6,9 @@ import {
6
6
  getActiveProfile,
7
7
  hasXiaoEEnv,
8
8
  isXiaoERuntimeAgent,
9
+ startFetchTiming,
9
10
  tryXiaoEUnifiedLogin
10
- } from "./chunk-D223PTXU.js";
11
+ } from "./chunk-OJQUJZQF.js";
11
12
  import {
12
13
  CliError
13
14
  } from "./chunk-LUSPKZKY.js";
@@ -35,6 +36,81 @@ var AUTH_REQUIRED_MARKERS = [
35
36
  "not logged in",
36
37
  "not login"
37
38
  ];
39
+ var REDIRECT_STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
40
+ var LOGIN_REDIRECT_MARKERS = [
41
+ "login",
42
+ "passport",
43
+ "sso",
44
+ "oauth",
45
+ "signin",
46
+ "sign-in",
47
+ "authorize",
48
+ "authn",
49
+ "atrust",
50
+ "checkticket"
51
+ ];
52
+ var FILE_REDIRECT_MARKERS = [
53
+ "fileservice",
54
+ "/file/download",
55
+ "/file/remotedownload",
56
+ "/remotedownload/",
57
+ "/api/file/",
58
+ "/download/",
59
+ "aliyuncs.com",
60
+ "myqcloud.com",
61
+ "qiniucdn.com",
62
+ "qbox.me",
63
+ "jdcloud.com",
64
+ "amazonaws.com",
65
+ "blob.core.windows.net",
66
+ "ctyunapi.cn",
67
+ "hiclouds.com",
68
+ "minio",
69
+ "s3.",
70
+ "obs.",
71
+ "ks3"
72
+ ];
73
+ var FILE_REQUEST_PATH_MARKERS = [
74
+ "/api/file/",
75
+ "/file/download",
76
+ "/remotedownload/",
77
+ "/fileservice",
78
+ "/download"
79
+ ];
80
+ var APP_SHELL_REDIRECT = /(?:\.html?(?:[?#]|$)|#\/|wui\/)/u;
81
+ function isE10RedirectStatus(status) {
82
+ return REDIRECT_STATUSES.has(status);
83
+ }
84
+ function redirectTarget(location) {
85
+ const raw = location.trim().toLowerCase();
86
+ if (!raw) return "";
87
+ try {
88
+ const url = new URL(raw, "https://e10.invalid");
89
+ return `${url.hostname}${url.pathname}${url.hash}`.toLowerCase();
90
+ } catch {
91
+ return raw.split("?")[0];
92
+ }
93
+ }
94
+ function classifyE10Redirect(response) {
95
+ if (!isE10RedirectStatus(response.status)) return "other";
96
+ const target = redirectTarget(response.headers?.get("location") || "");
97
+ if (!target) return "other";
98
+ if (LOGIN_REDIRECT_MARKERS.some((marker) => target.includes(marker))) return "login";
99
+ if (FILE_REDIRECT_MARKERS.some((marker) => target.includes(marker))) return "file";
100
+ const requestPath = (response.requestPath || "").toLowerCase();
101
+ if (requestPath && FILE_REQUEST_PATH_MARKERS.some((marker) => requestPath.includes(marker)) && !APP_SHELL_REDIRECT.test(target)) {
102
+ return "file";
103
+ }
104
+ return "other";
105
+ }
106
+ function isE10FileRedirect(response) {
107
+ return classifyE10Redirect(response) === "file";
108
+ }
109
+ function isE10SessionExpiredResponse(response) {
110
+ if (response.status === 401) return true;
111
+ if (isE10RedirectStatus(response.status)) return !isE10FileRedirect(response);
112
+ return false;
113
+ }
38
114
  var recoveryInFlight = /* @__PURE__ */ new Map();
39
115
  function asRecord(value) {
40
116
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
@@ -70,7 +146,7 @@ function responseText(response) {
70
146
  return "";
71
147
  }
72
148
  function isE10AuthenticationRequired(response) {
73
- if (response.status === 401 || response.status === 302) return true;
149
+ if (isE10SessionExpiredResponse(response)) return true;
74
150
  if (responseCodes(response.value).some((code) => AUTH_REQUIRED_CODES.has(code))) return true;
75
151
  const text = responseText(response).toLowerCase();
76
152
  if (!text) return false;
@@ -139,6 +215,7 @@ async function requireE10Session(ctx, load = {}) {
139
215
  // src/internal/e10/request-runtime.ts
140
216
  var DEFAULT_TIMEOUT_MS = 3e4;
141
217
  var DEFAULT_BIG_INT_STRINGS = true;
218
+ var MAX_DOWNLOAD_REDIRECTS = 3;
142
219
  var RESERVED_HEADERS = [
143
220
  "authorization",
144
221
  "cookie",
@@ -198,12 +275,12 @@ var E10RequestRuntime = class {
198
275
  }
199
276
  stripReservedHeaders(mutable.headers);
200
277
  const requestEteamsId = this.session.eteamsId;
201
- let parsed = await this.executeRequest(mutable, request.trustedHeaders);
202
- if (!mutable.streamBody && isE10AuthenticationRequired(parsed) && await this.recoverExpiredSession(requestEteamsId)) {
203
- parsed = await this.executeRequest(mutable, request.trustedHeaders);
278
+ let attempt = await this.executeRequest(mutable, request.trustedHeaders);
279
+ if (!mutable.streamBody && !attempt.fromFileRedirect && isE10AuthenticationRequired(authenticationProbe(mutable, attempt.parsed)) && await this.recoverExpiredSession(requestEteamsId)) {
280
+ attempt = await this.executeRequest(mutable, request.trustedHeaders);
204
281
  }
205
- await this.runAfterResponse(mutable, this.sessionContext(), parsed);
206
- return parsed;
282
+ await this.runAfterResponse(mutable, this.sessionContext(), attempt.parsed);
283
+ return attempt.parsed;
207
284
  } catch (error) {
208
285
  await this.runOnError(mutable, this.sessionContext(), error);
209
286
  throw error;
@@ -214,13 +291,77 @@ var E10RequestRuntime = class {
214
291
  const headers = this.composeHeaders(request, trustedHeaders);
215
292
  const init = this.buildFetchInit(request, headers);
216
293
  const response = await this.fetchWithTimeout(url, init, request.timeoutMs);
217
- return this.readResponse(
218
- response,
219
- request.responseType,
220
- request.bigIntStrings,
221
- request.maxResponseBytes,
222
- request.timeoutMs
223
- );
294
+ const followed = request.responseType === "binary" ? await this.followDownloadRedirect(response, request, url) : { response, followed: false };
295
+ if (followed.followed && (followed.response.status === 401 || followed.response.status === 403)) {
296
+ throw new E10ApiError(
297
+ "network",
298
+ "download_file_service_denied",
299
+ `\u6587\u4EF6\u670D\u52A1\u62D2\u7EDD\u4E0B\u8F7D\uFF08HTTP ${followed.response.status}\uFF09\uFF0C\u76F4\u94FE\u53EF\u80FD\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u8BD5\u4E0B\u8F7D`,
300
+ {
301
+ retryable: true,
302
+ exitCode: 4 /* NetworkError */,
303
+ details: { status: followed.response.status }
304
+ }
305
+ );
306
+ }
307
+ return {
308
+ parsed: await this.readResponse(
309
+ followed.response,
310
+ request.responseType,
311
+ request.bigIntStrings,
312
+ request.maxResponseBytes,
313
+ request.timeoutMs
314
+ ),
315
+ fromFileRedirect: followed.followed
316
+ };
317
+ }
318
+ /**
319
+ * 跟随下载直传的 3xx。仅当跳转目标是文件服务(非登录页)时才跟随,最多
320
+ * `MAX_DOWNLOAD_REDIRECTS` 跳;登录类跳转原样返回,交给上层认证恢复处理。
321
+ * 凭证规则:同源才继续带 Cookie/eteamsid,跨域(对象存储)不带任何鉴权头。
322
+ */
323
+ async followDownloadRedirect(response, request, requestUrl) {
324
+ const baseOrigin = safeOrigin(this.session.getBaseUrl());
325
+ let current = response;
326
+ let currentUrl = requestUrl;
327
+ let followed = false;
328
+ for (let hop = 0; hop < MAX_DOWNLOAD_REDIRECTS; hop += 1) {
329
+ const kind = classifyE10Redirect({
330
+ status: current.status,
331
+ headers: current.headers,
332
+ requestPath: request.path
333
+ });
334
+ if (kind !== "file") return { response: current, followed };
335
+ const location = current.headers.get("location");
336
+ if (!location) return { response: current, followed };
337
+ let next;
338
+ try {
339
+ next = new URL(location, currentUrl);
340
+ } catch {
341
+ return { response: current, followed };
342
+ }
343
+ if (!/^https?:$/u.test(next.protocol)) return { response: current, followed };
344
+ const sameOrigin = baseOrigin !== "" && safeOrigin(next.toString()) === baseOrigin;
345
+ current = await this.fetchWithTimeout(
346
+ next,
347
+ this.buildDownloadRedirectInit(sameOrigin),
348
+ request.timeoutMs
349
+ );
350
+ currentUrl = next;
351
+ followed = true;
352
+ }
353
+ return { response: current, followed };
354
+ }
355
+ buildDownloadRedirectInit(sameOrigin) {
356
+ const headers = {
357
+ Accept: "application/octet-stream, */*",
358
+ "User-Agent": this.session.uaHeader()
359
+ };
360
+ if (sameOrigin) {
361
+ headers.Cookie = this.attachSessionTicket ? this.session.cookieHeaderWithSessionTicket() : this.session.cookieHeader();
362
+ headers.eteamsid = this.session.eteamsId;
363
+ }
364
+ return { method: "GET", headers, redirect: "manual" };
224
365
  }
225
366
  async recoverExpiredSession(requestEteamsId) {
226
367
  if (this.session.eteamsId && this.session.eteamsId !== requestEteamsId) return true;
@@ -352,6 +493,7 @@ var E10RequestRuntime = class {
352
493
  async fetchWithTimeout(url, init, timeoutMs) {
353
494
  const controller = new AbortController();
354
495
  const timer = setTimeout(() => controller.abort(), timeoutMs);
496
+ const stopFetchTiming = startFetchTiming();
355
497
  try {
356
498
  return await this.fetchFn(url, { ...init, signal: controller.signal });
357
499
  } catch (error) {
@@ -368,6 +510,7 @@ var E10RequestRuntime = class {
368
510
  });
369
511
  } finally {
370
512
  clearTimeout(timer);
513
+ stopFetchTiming?.();
371
514
  }
372
515
  }
373
516
  async readResponse(response, responseType, bigIntStrings = DEFAULT_BIG_INT_STRINGS, maxResponseBytes, timeoutMs = DEFAULT_TIMEOUT_MS) {
@@ -399,6 +542,25 @@ var E10RequestRuntime = class {
399
542
  function parseJsonPreservingBigInts(text) {
400
543
  return JSON.parse(quoteLargeJsonIntegers(text));
401
544
  }
545
+ function authenticationProbe(request, response) {
546
+ if ("content" in response) {
547
+ return { status: response.status, headers: response.headers, requestPath: request.path };
548
+ }
549
+ return {
550
+ status: response.status,
551
+ headers: response.headers,
552
+ requestPath: request.path,
553
+ text: response.text,
554
+ value: response.value
555
+ };
556
+ }
557
+ function safeOrigin(rawUrl) {
558
+ try {
559
+ return new URL(rawUrl).origin.toLowerCase();
560
+ } catch {
561
+ return "";
562
+ }
563
+ }
402
564
  var LONG_INTEGER_MIN_DIGITS = 16;
403
565
  var JSON_STRING_OR_NUMBER = /"(?:[^"\\]|\\.)*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g;
404
566
  var LONG_DIGIT_RUN = /\d{16}/;
@@ -504,6 +666,7 @@ function cloneForHook(value) {
504
666
  }
505
667
 
506
668
  export {
669
+ isE10SessionExpiredResponse,
507
670
  requireE10Session,
508
671
  E10ApiError,
509
672
  createE10RequestRuntime
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-AJ62BGAW.js";
20
20
  import {
21
21
  clearInvoiceTokenForSession
22
- } from "./chunk-EEWPQE3O.js";
22
+ } from "./chunk-FUWVHMVV.js";
23
23
  import {
24
24
  E10AuthSession,
25
25
  XIAOE_AGENT_TYPE,
@@ -48,7 +48,7 @@ import {
48
48
  setActiveProfile,
49
49
  switchActiveProfile,
50
50
  tryXiaoEUnifiedLogin
51
- } from "./chunk-D223PTXU.js";
51
+ } from "./chunk-OJQUJZQF.js";
52
52
  import {
53
53
  CliError,
54
54
  isCliError,
@@ -12,7 +12,7 @@ import {
12
12
  meetingValidationError,
13
13
  queryBody,
14
14
  toIdCsv
15
- } from "./chunk-MEEFGWTM.js";
15
+ } from "./chunk-ELYDWBZJ.js";
16
16
 
17
17
  // src/shortcuts/meeting/operations/eb/conflict.ts
18
18
  var ACTIVE_MT_STATUS = "1,2,8,9";
@@ -296,7 +296,7 @@ var ebMeetingWritePreflight = async ({ endpoint, payload, args, env, extras }) =
296
296
  const items = rawMembers.split(/[,;,;]+/u).map((item) => item.trim()).filter((item) => item !== "");
297
297
  const nameLike = items.filter((item) => !/^\d+$/u.test(item));
298
298
  if (nameLike.length > 0) {
299
- const { resolveMemberIdsByName } = await import("./schedule-XPFBHPCV.js");
299
+ const { resolveMemberIdsByName } = await import("./schedule-NIJBTYDO.js");
300
300
  const idsByName = await resolveMemberIdsByName(env, nameLike);
301
301
  const resolved = items.map((item) => idsByName.get(item) ?? item);
302
302
  payload.mainTable.hrm_members = [...new Set(resolved)].join(",");
@@ -610,7 +610,7 @@ async function findCommonFreeSlots(env, input) {
610
610
  const scheduleItems = [];
611
611
  if (includeSchedule) {
612
612
  try {
613
- const { runScheduleConflictFlow, parseScheduleConflictMessage, resolveMemberIdsByName } = await import("./schedule-XPFBHPCV.js");
613
+ const { runScheduleConflictFlow, parseScheduleConflictMessage, resolveMemberIdsByName } = await import("./schedule-NIJBTYDO.js");
614
614
  const dayBegin = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate(), 0, 0, 0, 0);
615
615
  const dayEnd = new Date(rangeStart.getFullYear(), rangeStart.getMonth(), rangeStart.getDate(), 23, 59, 0, 0);
616
616
  const flow = await runScheduleConflictFlow(env, {
@@ -5,7 +5,7 @@ import {
5
5
  ebBusinessSuccess,
6
6
  meetingSuccess,
7
7
  meetingValidationError
8
- } from "./chunk-MEEFGWTM.js";
8
+ } from "./chunk-ELYDWBZJ.js";
9
9
 
10
10
  // src/shortcuts/meeting/operations/env.ts
11
11
  import { existsSync } from "node:fs";
@@ -109,6 +109,9 @@ async function probeAndPersist(host, ctx, knownEbError, options = {}) {
109
109
  }
110
110
  async function resolveMeetingEnvMode(host, ctx, options = {}) {
111
111
  const session = await host.getSession();
112
+ if (options.refresh !== true && String(process.env.WEAVER_MEETING_LOCK_MODE ?? "").trim().toLowerCase() === "eb") {
113
+ return { mode: "eb", smokePath: EB_SMOKE_PATH, fromCache: false, assumed: true, locked: true };
114
+ }
112
115
  if (options.refresh === true) {
113
116
  return { ...await probeAndPersist(host, ctx), fromCache: false };
114
117
  }
@@ -7,8 +7,8 @@ import {
7
7
  findCommonFreeSlots,
8
8
  meetingEbConflictOperations,
9
9
  runEbConflictCheck
10
- } from "./chunk-NHA62QD7.js";
11
- import "./chunk-MEEFGWTM.js";
10
+ } from "./chunk-XJY7G4DD.js";
11
+ import "./chunk-ELYDWBZJ.js";
12
12
  import "./chunk-LUSPKZKY.js";
13
13
  import "./chunk-BUSC6UAE.js";
14
14
  export {