@kenhkl/agent-moss 0.10.1 → 0.10.2

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.
@@ -467,8 +467,10 @@ function extractFilePaths(text) {
467
467
  return [...new Set(paths)];
468
468
  }
469
469
  function checkReadBeforeWrite(actionType, actionDetail, actionHistory, reason, cwd) {
470
+ if (NON_WRITE_TOOL_PREFIXES.some((p) => actionType.startsWith(p))) return null;
470
471
  if (NON_WRITE_TOOLS.has(actionType)) return null;
471
- let isWrite = WRITE_KEYWORDS.some((kw) => actionType.includes(kw) || actionDetail.includes(kw));
472
+ const isBashLike = actionType === "bash" || actionType === "executebash" || actionType === "terminal-executebash";
473
+ let isWrite = isBashLike ? WRITE_KEYWORDS.some((kw) => actionType.includes(kw) || actionDetail.includes(kw)) : WRITE_KEYWORDS.some((kw) => actionType.includes(kw));
472
474
  if (!isWrite && actionDetail.includes(">")) {
473
475
  const detailWithoutDevnull = actionDetail.replace(/(?:2|&|1)?\s*>\s*\/dev\/null\b/g, "");
474
476
  if (detailWithoutDevnull.includes(">")) {
@@ -634,7 +636,7 @@ function checkIndirectFileAccess(actionType, actionDetail, cwd) {
634
636
  violatedLayers: ["2"]
635
637
  };
636
638
  }
637
- var ROOT_SENSITIVE_PATHS, HOME_SENSITIVE_PATHS, CREDENTIAL_PATHS, NON_WRITE_TOOLS, READ_ONLY_REDIR_CMDS, WRITE_KEYWORDS, READ_KEYWORDS, CREATE_KEYWORDS, PASSWORD_MODIFY_PATTERNS, USER_DELETION_PATTERNS, INTENT_DEVIATION_PATTERNS, INLINE_SCRIPT_RE, DIR_TRAVERSAL_KW;
639
+ var ROOT_SENSITIVE_PATHS, HOME_SENSITIVE_PATHS, CREDENTIAL_PATHS, NON_WRITE_TOOLS, NON_WRITE_TOOL_PREFIXES, READ_ONLY_REDIR_CMDS, WRITE_KEYWORDS, READ_KEYWORDS, CREATE_KEYWORDS, PASSWORD_MODIFY_PATTERNS, USER_DELETION_PATTERNS, INTENT_DEVIATION_PATTERNS, INLINE_SCRIPT_RE, DIR_TRAVERSAL_KW;
638
640
  var init_logic_rules = __esm({
639
641
  "src/engine/logic-rules.ts"() {
640
642
  "use strict";
@@ -686,7 +688,26 @@ var init_logic_rules = __esm({
686
688
  { path: "secrets.yaml", riskLevel: "high", desc: "\u5BC6\u94A5\u914D\u7F6E\u6587\u4EF6" },
687
689
  { path: ".env", riskLevel: "high", desc: "\u73AF\u5883\u53D8\u91CF/\u51ED\u636E\u914D\u7F6E\u6587\u4EF6" }
688
690
  ];
689
- NON_WRITE_TOOLS = /* @__PURE__ */ new Set(["ask_user_question", "glob", "grep", "list_dir", "count_text_length", "search"]);
691
+ NON_WRITE_TOOLS = /* @__PURE__ */ new Set([
692
+ "ask_user_question",
693
+ "glob",
694
+ "grep",
695
+ "list_dir",
696
+ "count_text_length",
697
+ "search",
698
+ // filemgr 只读三件套(globfiles 在 coordinator FULLY_SAFE_TOOLS 提前放行,此处兜底防御非 coordinator 入口)
699
+ "filemgr-globfiles",
700
+ "filemgr-readfile",
701
+ "filemgr-grepfiles",
702
+ // 通用只读工具名
703
+ "read",
704
+ "read_file",
705
+ "file_read",
706
+ "head",
707
+ "tail",
708
+ "cat"
709
+ ]);
710
+ NON_WRITE_TOOL_PREFIXES = ["memory-", "skill-manager-", "mailbox-", "app-"];
690
711
  READ_ONLY_REDIR_CMDS = /* @__PURE__ */ new Set(["cat", "head", "tail", "less", "more", "grep", "find", "awk", "sed", "sort", "uniq", "wc", "cut", "strings", "od", "xxd", "hexdump"]);
691
712
  WRITE_KEYWORDS = ["write", "\u5199\u5165", "save", "\u4FDD\u5B58", "modify", "\u4FEE\u6539", "update", "\u66F4\u65B0", "delete", "\u5220\u9664", "remove", "\u79FB\u9664", "create", "\u521B\u5EFA", "append", "\u8FFD\u52A0", "truncate", "\u622A\u65AD", "overwrite", "\u8986\u76D6", "replace", "\u66FF\u6362"];
692
713
  READ_KEYWORDS = ["read", "\u8BFB\u53D6", "cat", "head", "tail", "less", "more", "view", "\u67E5\u770B", "open", "\u6253\u5F00", "load", "\u52A0\u8F7D", "grep", "search", "\u641C\u7D22", "find", "\u67E5\u627E"];