duclaw-cli 1.8.39 → 1.8.40

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/dist/bundle.js CHANGED
@@ -30242,7 +30242,7 @@ function printHelp() {
30242
30242
  `);
30243
30243
  }
30244
30244
  function printVersion() {
30245
- console.log(`duclaw-cli v${true ? "1.8.39" : "unknown"}`);
30245
+ console.log(`duclaw-cli v${true ? "1.8.40" : "unknown"}`);
30246
30246
  }
30247
30247
  function getDuclawTemplate() {
30248
30248
  return {
@@ -42682,6 +42682,18 @@ var departmentCreate = {
42682
42682
 
42683
42683
  // src/tools/tools/department/DepartmentCommunicate.ts
42684
42684
  var CEO_MAILBOX_ID = `manager`;
42685
+ var MANAGER_ALIAS_PATTERN = /(^|::)(manager|main[-_\s]?manager|ceo)$/i;
42686
+ var looksLikePseudoManagerMailbox = (mailboxId) => {
42687
+ if (mailboxId === CEO_MAILBOX_ID) return true;
42688
+ if (!mailboxId.includes(`::`)) return false;
42689
+ return MANAGER_ALIAS_PATTERN.test(mailboxId.trim());
42690
+ };
42691
+ var buildManagerRoutingRejection = (activeContext) => [
42692
+ `[departmentCommunicate] \u62D2\u7EDD\u53D1\u9001\u5230\u4F2A manager mailbox\u3002`,
42693
+ `Main Manager/CEO \u4E0D\u662F\u90E8\u95E8\u6210\u5458\uFF0C\u4E0D\u80FD\u7528 department_communicate \u53D1\u9001\u5230 manager\u3001Department::Manager\u3001CEO::Manager \u7B49\u5730\u5740\u3002`,
42694
+ activeContext ? `\u5982\u679C\u8981\u5411\u4E0A\u6E38 CEO \u6C47\u62A5\uFF0C\u8BF7\u8C03\u7528 reply_mailbox(message_id="${activeContext.id}", content="...") \u6B63\u5F0F\u56DE\u590D\u539F\u90AE\u4EF6\uFF1B\u82E5\u53EA\u662F\u540C\u6B65\u9636\u6BB5\u8FDB\u5C55\uFF0C\u8BF7\u8C03\u7528 mailbox_followup(message_id="${activeContext.id}", content="...", kind="progress")\u3002` : `\u5982\u679C\u8981\u5411\u4E0A\u6E38 CEO \u6C47\u62A5\uFF0C\u8BF7\u56DE\u5230\u539F manager \u90AE\u4EF6\uFF0C\u4F7F\u7528 reply_mailbox(message_id="\u539F\u90AE\u4EF6ID", content="...") \u6216 mailbox_followup(message_id="\u539F\u90AE\u4EF6ID", content="...", kind="progress")\u3002`
42695
+ ].join(`
42696
+ `);
42685
42697
  var getActiveMailboxContext = (actorMailboxId, messageId) => {
42686
42698
  if (!messageId) return null;
42687
42699
  const db3 = createSqliteDB();
@@ -42708,6 +42720,7 @@ var DESCRIPTION21 = `
42708
42720
  - CEO \u9ED8\u8BA4\u901A\u8FC7 department_list \u53EA\u770B\u5230\u90E8\u95E8\u548C Department Head\uFF0C\u4E0D\u4E3B\u52A8\u66B4\u9732 Executor\u3002
42709
42721
  - Department Head \u9ED8\u8BA4\u7BA1\u7406\u672C\u90E8\u95E8\u6210\u5458\u3002
42710
42722
  - \u5982\u679C\u667A\u80FD\u4F53\u5DF2\u7ECF\u901A\u8FC7\u6B63\u5E38\u6C9F\u901A\u77E5\u9053\u4E86\u5176\u4ED6\u6210\u5458\u7684 mailbox \u5730\u5740\uFF0C\u5DE5\u5177\u4E0D\u4F1A\u786C\u6027\u963B\u6B62\u901A\u4FE1\uFF1B\u8FD9\u7C7B\u975E\u9ED8\u8BA4\u8DEF\u5F84\u4F1A\u5199\u5165\u5BA1\u8BA1\u4FE1\u606F\u3002
42723
+ - Main Manager/CEO \u7684 mailbox id \u56FA\u5B9A\u662F manager\u3002Department agent \u4E0D\u5E94\u4F7F\u7528 department_communicate \u7ED9 manager \u6216 Department::Manager \u53D1\u4FE1\uFF1B\u8981\u56DE\u590D\u4E0A\u6E38\u5FC5\u987B\u4F7F\u7528\u539F\u90AE\u4EF6\u7684 reply_mailbox \u6216 mailbox_followup\u3002
42711
42724
 
42712
42725
  \u53C2\u6570\u8BF4\u660E\uFF1A
42713
42726
  - department_name + member_name: \u9ED8\u8BA4\u5BFB\u5740\u65B9\u5F0F\u3002
@@ -42752,18 +42765,6 @@ var departmentCommunicate = {
42752
42765
  const targetMailboxId = input.target_mailbox_id;
42753
42766
  const content = input.content;
42754
42767
  const reason = input.reason;
42755
- let toMailboxId = targetMailboxId;
42756
- let targetMember = targetMailboxId ? getDepartmentMemberByMailboxId(targetMailboxId) : null;
42757
- if (!toMailboxId) {
42758
- if (!departmentName || !memberName) {
42759
- return `[departmentCommunicate] department_name/member_name \u6216 target_mailbox_id \u81F3\u5C11\u9700\u8981\u63D0\u4F9B\u4E00\u79CD`;
42760
- }
42761
- targetMember = getDepartmentMemberByName(departmentName, memberName);
42762
- if (!targetMember) {
42763
- return `[departmentCommunicate] \u4E0D\u5B58\u5728 ${departmentName} \u90E8\u95E8\u7684\u6210\u5458: ${memberName}`;
42764
- }
42765
- toMailboxId = getMailBoxId(departmentName, memberName);
42766
- }
42767
42768
  let fromMailboxId;
42768
42769
  const departmentAgentId = userRequest.departmentAgentId;
42769
42770
  const actorMember = departmentAgentId ? getDepartmentMemberByMailboxId(
@@ -42778,6 +42779,30 @@ var departmentCommunicate = {
42778
42779
  } else {
42779
42780
  fromMailboxId = CEO_MAILBOX_ID;
42780
42781
  }
42782
+ const activeContext = departmentAgentId ? getActiveMailboxContext(fromMailboxId, userRequest.requestId) : null;
42783
+ let toMailboxId = targetMailboxId;
42784
+ let targetMember = targetMailboxId ? getDepartmentMemberByMailboxId(targetMailboxId) : null;
42785
+ if (departmentAgentId && targetMailboxId && looksLikePseudoManagerMailbox(targetMailboxId)) {
42786
+ return buildManagerRoutingRejection(activeContext);
42787
+ }
42788
+ if (departmentAgentId && targetMailboxId && !targetMember) {
42789
+ return [
42790
+ `[departmentCommunicate] \u62D2\u7EDD\u53D1\u9001\u5230\u4E0D\u5B58\u5728\u7684 mailbox: ${targetMailboxId}`,
42791
+ `Department agent \u4F7F\u7528 target_mailbox_id \u65F6\uFF0C\u76EE\u6807\u5FC5\u987B\u662F\u5DF2\u5B58\u5728\u7684\u90E8\u95E8\u6210\u5458 mailbox\u3002`,
42792
+ `\u5982\u679C\u4F60\u60F3\u56DE\u590D\u4E0A\u6E38 CEO/Main Manager\uFF0C\u8BF7\u4E0D\u8981\u4F2A\u9020 manager \u5730\u5740\uFF1B\u8BF7\u4F7F\u7528\u539F\u90AE\u4EF6\u7684 reply_mailbox \u6216 mailbox_followup\u3002`
42793
+ ].join(`
42794
+ `);
42795
+ }
42796
+ if (!toMailboxId) {
42797
+ if (!departmentName || !memberName) {
42798
+ return `[departmentCommunicate] department_name/member_name \u6216 target_mailbox_id \u81F3\u5C11\u9700\u8981\u63D0\u4F9B\u4E00\u79CD`;
42799
+ }
42800
+ targetMember = getDepartmentMemberByName(departmentName, memberName);
42801
+ if (!targetMember) {
42802
+ return `[departmentCommunicate] \u4E0D\u5B58\u5728 ${departmentName} \u90E8\u95E8\u7684\u6210\u5458: ${memberName}`;
42803
+ }
42804
+ toMailboxId = getMailBoxId(departmentName, memberName);
42805
+ }
42781
42806
  const isCrossDepartment = Boolean(actorMember && targetMember && actorMember.departmentId !== targetMember.departmentId);
42782
42807
  const isKnownAddressPath = Boolean(targetMailboxId);
42783
42808
  const options = {
@@ -42794,7 +42819,6 @@ var departmentCommunicate = {
42794
42819
  options.originUserId = userRequest.userId;
42795
42820
  options.originPlatform = userRequest.platform;
42796
42821
  } else {
42797
- const activeContext = getActiveMailboxContext(fromMailboxId, userRequest.requestId);
42798
42822
  if (activeContext) {
42799
42823
  options.originUserId = activeContext.originUserId;
42800
42824
  options.originPlatform = activeContext.originPlatform;
@@ -47056,6 +47080,7 @@ var replyMailbox = {
47056
47080
  // src/cron/mailbox.ts
47057
47081
  var db2 = createSqliteDB();
47058
47082
  var DEFAULT_MAILBOX_PROCESSING_STALE_MS = 15 * 6e4;
47083
+ var PSEUDO_MANAGER_MAILBOX_PATTERN = /(^|::)(manager|main[-_\s]?manager|ceo)$/i;
47059
47084
  var selectStmt = db2.prepare(`select
47060
47085
  id,
47061
47086
  to_mailbox_id as toMailboxId,
@@ -47095,6 +47120,7 @@ var getMailboxLivenessSnapshot = () => {
47095
47120
  };
47096
47121
  };
47097
47122
  var hasUnresolvedInternalWork = (snapshot) => snapshot.pendingMailbox > 0 || snapshot.processingMailbox > 0 || snapshot.pendingCeoFollowups > 0 || snapshot.processingCeoFollowups > 0 || snapshot.failedCeoFollowups > 0;
47123
+ var looksLikePseudoManagerMailbox2 = (mailboxId) => mailboxId !== "manager" && mailboxId.includes("::") && PSEUDO_MANAGER_MAILBOX_PATTERN.test(mailboxId.trim());
47098
47124
  var reportMailboxLiveness = async (snapshot) => {
47099
47125
  if (!hasUnresolvedInternalWork(snapshot)) return;
47100
47126
  await reportRuntimeActivity({
@@ -47249,6 +47275,11 @@ var wakeDepartmentAgent = async (mailboxId, msgIds) => {
47249
47275
  const member = getDepartmentMemberByName(departmentName, memberName);
47250
47276
  if (!member) {
47251
47277
  console.warn(`[mailbox] \u76EE\u6807\u6210\u5458\u4E0D\u5B58\u5728\uFF08\u53EF\u80FD\u5DF2\u88AB\u5220\u9664\uFF09: ${mailboxId}`);
47278
+ if (looksLikePseudoManagerMailbox2(mailboxId)) {
47279
+ for (const id of msgIds) markMailboxStatus(id, "cancelled");
47280
+ console.warn(`[mailbox] \u5DF2\u53D6\u6D88\u4F2A manager mailbox \u6295\u9012 ${mailboxId}\uFF0C\u4E0D\u518D\u751F\u6210 CEO \u7CFB\u7EDF\u566A\u58F0`);
47281
+ return;
47282
+ }
47252
47283
  const notifyContent = `[\u7CFB\u7EDF\u901A\u77E5] \u90E8\u95E8\u6210\u5458 ${mailboxId} \u4E0D\u5B58\u5728\uFF08\u53EF\u80FD\u6240\u5C5E\u90E8\u95E8\u5DF2\u89E3\u6563\u6216\u6210\u5458\u5DF2\u88AB\u5220\u9664\uFF09\uFF0C\u4EE5\u4E0B\u6D88\u606F\u65E0\u6CD5\u6295\u9012\u5DF2\u88AB\u53D6\u6D88\u3002\u8BF7\u6839\u636E\u60C5\u51B5\u51B3\u5B9A\u662F\u5426\u9700\u8981\u91CD\u65B0\u7EC4\u5EFA\u90E8\u95E8\u6216\u8C03\u6574\u8BA1\u5212\u3002`;
47253
47284
  const originStmt = db2.prepare(
47254
47285
  `SELECT origin_user_id as originUserId, origin_platform as originPlatform
@@ -52520,7 +52551,7 @@ var systemRoutes = new Hono2();
52520
52551
  var startTime = Date.now();
52521
52552
  systemRoutes.get("/system/info", (c) => {
52522
52553
  return c.json({
52523
- version: true ? "1.8.39" : "unknown",
52554
+ version: true ? "1.8.40" : "unknown",
52524
52555
  uptime: Math.floor((Date.now() - startTime) / 1e3),
52525
52556
  env: process.env.NODE_ENV || "development",
52526
52557
  nodeVersion: process.version