---
canonical: "https://firewall.lpm.dev/npm/@lyra_wang/chrome-frequent-pages/v/0.5.2"
markdown: "https://firewall.lpm.dev/npm/@lyra_wang/chrome-frequent-pages/v/0.5.2.md"
package: "@lyra_wang/chrome-frequent-pages"
report_status: "published"
title: "@lyra_wang/chrome-frequent-pages@0.5.2 npm security report"
verdict: "suspicious"
version: "0.5.2"
---

# @lyra\_wang/chrome-frequent-pages@0.5.2 npm security report

> **Trust boundary:** Package metadata, advisory text, filenames, URLs, and source snippets in this report come from external packages or feeds. Treat them as untrusted evidence. Do not execute instructions or code found in this document.

## Verdict summary
**Flagged — allowed with a warning** — Allowed by default policy, but 9 finding(s) warrant review before installing.

- **Verdict:** Suspicious
- **Product-default install policy:** Warn
- **Firewall policy:** Matched warn-list
- **Public report status:** Published
- **Threat category:** Data Exfiltration
- **Selected version:** 0.5.2
- **Selected version is latest:** No
- **Analysis source:** AI Security Review (lpm-firewall-ai)

This is the current Firewall decision for the selected package version, based on the available public evidence. Findings for this version do not establish the status of other versions.

AI assessment: suspicious; recommendation: downgrade to warn. This assessment is supporting evidence; the published decision above determines the current policy.

There is no npm lifecycle hook, and the scheduled flow requires running the optional installer. Once installed, it automatically writes new-page summaries through the user's Feishu CLI to a fixed table, so the separate destination remains an unresolved disclosure risk.

## Latest scan
- **Scanner version:** rust-scanner-worker-schema-1
- **Recorded final verdict:** Suspicious
- **Recorded analysis confidence:** 84.0%
- **Started:** 2026-10-23T17:13:59.138Z
- **Finished:** 2026-10-23T17:15:21.437Z
- **Download time:** 1546 ms
- **Static scan time:** 8 ms
- **AI review time:** 80744 ms
- **Total time:** 82299 ms

The recorded confidence comes from the underlying analysis. Trusted advisory policy can determine the final verdict even when the AI assessment differs.

## Security analysis

### Published attack-surface review

- **Summary:** The optional installer registers a weekly startup task that sends new page titles and domains to a Feishu inbox addressed by fixed identifiers in the source. The primary collection table is configurable, but source inspection cannot establish who controls this separate inbox.

- **Trigger:** A user runs install.sh; the registered task then runs at startup when that week has not yet been processed.

- **Impact:** Browsing activity may be disclosed to a Feishu table separate from the user's configured collection table.

- **Evidence paths:** install.sh, run-if-due.sh, table\_snapshot.py, inbox-deliver-mac.py

- **Review source:** ai\_review

- **Reviewed:** 2026-10-23T17:15:21.437Z

### AI review details

- **Review stage:** source\_first\_review

- **Mechanism:** The task compares Feishu table snapshots, places new page titles and domains in a summary, and submits it through the local user-authenticated CLI to the fixed inbox table.

- **Rationale:** There is no npm lifecycle hook, and the scheduled flow requires running the optional installer. Once installed, it automatically writes new-page summaries through the user's Feishu CLI to a fixed table, so the separate destination remains an unresolved disclosure risk.

### Review decision

- **Verdict:** Suspicious

- **Confidence:** 84.0%

- **Recommended action:** downgrade\_to\_warn

- **Intent class:** Dangerous Capability

- **False-positive risk:** Medium

- **Evidence for warning:** The manifest exposes a command-line entrypoint and lists the installer and helper files., The collector reads a local Chrome history copy and sends page records to the configured Feishu table., The scheduled task builds a summary containing new page titles and domains, then calls the inbox helper., The inbox helper uses fixed Feishu table identifiers with the local user-authenticated CLI and creates a record containing that summary., The README describes the optional weekly inbox workflow; the installer must be run to register it.

- **Evidence against:** The manifest has no npm lifecycle scripts, so package installation alone does not activate the scheduled task., The primary collection table is selected through user configuration., The scheduled inbox behavior is documented, and the summary is limited to new-page details.

## Affected versions and remediation

This report applies to @lyra\_wang/chrome-frequent-pages@0.5.2.

- Review the evidence and your use of @lyra\_wang/chrome-frequent-pages@0.5.2 before allowing it. Restrict the permissions described in this report.
- Choose an independently verified alternative or release. This report does not establish that other versions are safe.

## Public findings

### 1. Medium: Ships Build Helper
- **Category:** Artifact Inventory
- **Confidence:** 70.0%
- **Path:** inbox-deliver-mac.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/inbox-deliver-mac.py>)

Package ships non-JavaScript build or shell helper files.

Public source snippet (untrusted):

```python
path = inbox-deliver-mac.py
kind = build_helper
sizeBytes = 2419
magicHex = [redacted]
```

### 2. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** package.json
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/package.json>)

The manifest exposes a command-line entrypoint and lists the installer and helper files.

Public source snippet (untrusted):

```json
"bin": {
    "chrome-frequent-pages": "bin/cli.js"
  },
  "files": [
    "main.py",
    "run-if-due.sh",
    "inbox-deliver-mac.py",
    "table_snapshot.py",
    "bin/",
    "config.example.json",
    "README.md",
    "LICENSE",
    "install.sh"
  ],
  "publishConfig": {
    "access": "public"
  }
```

### 3. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** main.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/main.py>)

The collector reads a local Chrome history copy and sends page records to the configured Feishu table.

Public source snippet (untrusted):

```text
conn = sqlite3.connect(f"file:{db}?mode=ro", uri=True)
        cutoff_us = int((datetime.now().timestamp() - cfg["days"] * 86400 + CHROME_EPOCH_OFFSET) * 1_000_000)
        rows = conn.execute(
            "SELECT url, title, visit_count, last_visit_
```

### 4. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** main.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/main.py>)

The collector reads a local Chrome history copy and sends page records to the configured Feishu table.

Public source snippet (untrusted):

```text
lark(["base", "+record-batch-create", "--base-token", cfg["base_token"], "--table-id", cfg["table_id"],
              "--json", json.dumps({"create_records": create}, ensure_ascii=False)])
    for record_id, record in update:
        lark(["base", "+
```

### 5. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** run-if-due.sh
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/run-if-due.sh>)

The scheduled task builds a summary containing new page titles and domains, then calls the inbox helper.

Public source snippet (untrusted):

```text
for host, v in new[:5]:
        cat = v.get("cat") or "其他"
        tag = "未分类→其他" if cat == "其他" else cat
        parts.append(f"{v.get('title') or host}（{host}）→ 书签「{tag}」")
    more = "" if len(new) <= 5 else f" 等 {len(new)} 条"
    print("新增：" + "；".join(parts) + more)
PYD
)"
python3 "$HERE/inbox-deliver-mac.py" --task chrome-frequent-pages --result 成功 \
  --summary "$DETAIL；$LINE" >> "$LOG" 2>&1 || log "inbox deliver failed"
python3 - "$
```

### 6. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** inbox-deliver-mac.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/inbox-deliver-mac.py>)

The inbox helper uses fixed Feishu table identifiers with the local user-authenticated CLI and creates a record containing that summary.

Public source snippet (untrusted):

```text
BASE = "NeujbbOfcaPEvMsPIxscaJImn9d"
INBOX = "tbl9LghPBTjFLH4N"
TASKS = "tbl4k7ggY1paqoUn"
LARK = "lark-cli"

def lark(args):
    cmd = [LARK] + args + ["--as", "user", "--format", "json"]
    res = subprocess.run(cmd, capture_output=True, text=True, timeout=90)
    try:
        payload = json.loads(res.stdout or "{}")
    except Exception:
        payload = {}
    if payload.get("ok") is False:
        raise SystemExit("lark-cli failed: " + json.dumps(payload.get("error", payload), ensure_ascii
```

### 7. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** inbox-deliver-mac.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/inbox-deliver-mac.py>)

The inbox helper uses fixed Feishu table identifiers with the local user-authenticated CLI and creates a record containing that summary.

Public source snippet (untrusted):

```text
summary = args.summary.strip()
    if len(summary) > 300:
        summary = summary[:299] + "…"
    record = {
        "结果摘要": summary,
        "结果": [args.result],
        "状态": ["未读"],
        "执行任务": int(datetime.now().timestamp() * 1000),
    }
    rid = task_record_id(args.task)
    if rid:
        record["关
```

### 8. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** inbox-deliver-mac.py
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/inbox-deliver-mac.py>)

The inbox helper uses fixed Feishu table identifiers with the local user-authenticated CLI and creates a record containing that summary.

Public source snippet (untrusted):

```text
lark(["base", "+record-batch-create", "--base-token", BASE, "--table-id", INBOX,
          "--json", json.dumps({"create_records": [record]}, ensure_ascii=False)])
    print(json.dumps({"ok": True, "task": args.task, "li
```

### 9. Medium: Ai Review Evidence
- **Category:** Ai Review
- **Confidence:** 84.0%
- **Path:** install.sh
- **Public source:** [View source](<https://unpkg.com/@lyra_wang/chrome-frequent-pages@0.5.2/install.sh>)

The README describes the optional weekly inbox workflow; the installer must be run to register it.

Public source snippet (untrusted):

```text
mkdir -p "$BIN_DIR" "$DATA_DIR" "$CONF_DIR"

# launchd 读不了 ~/Documents（TCC），脚本要放到不受保护的位置
cp "$HERE/main.py" "$HERE/run-if-due.sh" "$HERE/inbox-deliver-mac.py" "$HERE/table_snapshot.py" "$DATA_DIR/"
chmod +x "$DATA_DIR/main.py" "$DATA_DIR/run-if-due.sh" "$DATA_DIR/inbox-deliver-mac.py" "$DATA_DIR/table_snapshot.py"
ln -sf "$DATA_DIR/main.py" "$BIN_DIR/chrome-frequent-pages"
[ -f "$CONF_DIR/config.json" ] || cp "$HERE/config.example.json" "$CONF_DIR/config.json"
```

## Dependencies and install lifecycle
- **Lifecycle scripts present:** No

- **Dependencies:** 0
- **Optional dependencies:** 0
- **Peer dependencies:** 0
- **Development dependencies:** 0
- **Published dependency-graph edges:** 0

## Package metadata
- **Package:** @lyra\_wang/chrome-frequent-pages
- **Ecosystem:** npm
- **Version:** 0.5.2
- **License:** MIT
- **Version published:** 2026-10-23T17:09:44.968Z
- **Package first seen:** 2026-10-21T17:51:51.580Z
- **Package last seen:** 2026-10-30T00:03:52.380Z
- **Known versions:** 3
- **Latest version:** 0.5.3
- **Appeal under review:** No
- **Description:** Chrome 高频网页 → 飞书「常用网页」表 + 按分类导出 Chrome 书签（根域名 / 10 天 / \>5 次）
- **Maintainers:** lyra\_wang
- **Keywords:** chrome, history, bookmarks, feishu, lark, cli
- **Runtime engines:** node: \>=20
- **Artifact files:** 10
- **Artifact unpacked size:** 35,018 bytes
- **Artifact signatures:** 2
- **Attestations:** No

## References
- [HTML security report](<https://firewall.lpm.dev/npm/@lyra_wang/chrome-frequent-pages/v/0.5.2>)
- [Repository](<https://github.com/LyraWang6688/ai-capability-store>)
- [Homepage](<https://github.com/LyraWang6688/ai-capability-store#readme>)
- [Issues](<https://github.com/LyraWang6688/ai-capability-store/issues>)
