open-index/open-npm huggingface dataset:
npm package: @fwgi/fwgi-x-tool
Description: X(Twitter) 营销管理助手 OpenClaw 插件 — 账号信息、受众管理、活动管理、收件箱/私信
Latest version: 1.2.0

# FWGI X Tool — OpenClaw Plugin

X(Twitter) 营销管理助手 — 账号信息查看、受众管理（导入/筛选/分组/标签/营销活动）

## 版本

v1.1.0

## 功能概览

| 模块 | 工具数 | 说明 |
|------|--------|------|
| 连接验证 | 1 | API Key 验证 |
| 账号信息 | 3 | 账号列表/详情/字段说明 |
| 受众管理 | 14 | 导入/筛选/分组/标签/营销活动 |
| **合计** | **18** | |

## 认证方式

通过 `x-api-key` 请求头调用后端 API，无需登录或 OAuth 授权。

## 安装

### 方式一：npm 安装（推荐）

```bash
openclaw plugins install @fwgi/fwgi-x-tool
```

> **中国大陆用户**：如遇安装失败（ECONNRESET 等），请先配置 scope registry：
> ```bash
> npm config set @fwgi:registry https://registry.npmjs.org/
> openclaw plugins install @fwgi/fwgi-x-tool
> ```

### 安装后手动步骤

npm 安装完成后，需要手动复制 Skill 认知文件到工作区：

```bash
# 创建 skill 目录
mkdir -p ~/.openclaw/workspace/skills/fwgi_x_tool/docs

# 复制 skill 文件
cp ~/.openclaw/extensions/fwgi-x-tool/SKILL.md ~/.openclaw/workspace/skills/fwgi_x_tool/
cp -r ~/.openclaw/extensions/fwgi-x-tool/docs/* ~/.openclaw/workspace/skills/fwgi_x_tool/docs/
```

### 方式二：本地安装

```bash
chmod +x install.sh
./install.sh
```

安装时会提示输入 API Key，也可以首次使用时由机器人引导配置。

## 配置

```bash
openclaw config set plugins.entries.fwgi-x-tool.config.apiKey "你的API-KEY"
```

| 配置项 | 说明 |
|--------|------|
| apiBaseUrl | 后端地址，默认 https://api-backend.fwgi.ai |
| apiKey | x-api-key 密钥（**必填**） |
| requestTimeoutMs | 超时(ms)，默认 30000 |

## 工具清单

### 连接与账号信息
- `x_verify_connection` — 验证 API Key
- `x_account_list` — 获取账号列表
- `x_account_detail` — 获取账号详情
- `x_get_field_info` — 获取字段说明

### 受众管理
- `x_audience_list` — 受众列表（多维筛选）
- `x_audience_import_url` — 从用户关注列表导入
- `x_audience_interactive_users` — 从推文互动用户导入
- `x_audience_search_keyword` — 关键词搜索导入
- `x_audience_group_create` — 创建分组
- `x_audience_group_list` — 分组列表
- `x_audience_group_detail` — 分组详情
- `x_audience_group_update` — 更新分组
- `x_audience_group_delete` — 删除分组
- `x_audience_interest_tags` — 标签统计
- `x_audience_interest_tags_add` — 添加标签
- `x_audience_interest_tags_remove` — 移除标签
- `x_audience_add_to_activity` — 添加到营销活动
- `x_audience_activity_progress` — 查询活动进度
npm package: @fwgi/openclaw-x-marketing
Description: X(Twitter) 营销管理助手 OpenClaw 插件 — 账号信息、受众管理、营销活动
Latest version: 1.0.0
Deprecated: Renamed to @fwgi/fwgi-x-tool. Install: openclaw plugins install @fwgi/fwgi-x-tool

# X Marketing OpenClaw Plugin

X(Twitter) 营销管理助手 — 账号信息查看、受众管理（导入/筛选/分组/标签/营销活动）

## 版本

v4.0.0

## 功能概览

| 模块 | 工具数 | 说明 |
|------|--------|------|
| 连接验证 | 1 | API Key 验证 |
| 账号信息 | 3 | 账号列表/详情/字段说明 |
| 受众管理 | 14 | 导入/筛选/分组/标签/营销活动 |
| **合计** | **18** | |

## 认证方式

通过 `x-api-key` 请求头调用后端 API，无需登录或 OAuth 授权。

## 安装

### 方式一：npm 安装（推荐）

```bash
openclaw plugins install @fwgi/openclaw-x-marketing
```

### 方式二：本地安装

```bash
chmod +x install.sh
./install.sh
```

安装时会提示输入 API Key，也可以首次使用时由机器人引导配置。

## 配置

| 配置项 | 环境变量 | 说明 |
|--------|----------|------|
| apiBaseUrl | X_MARKETING_API_BASE_URL | 后端地址，默认 https://api-backend.fwgi.ai |
| apiKey | X_MARKETING_API_KEY | x-api-key 密钥 |
| requestTimeoutMs | X_MARKETING_TIMEOUT_MS | 超时(ms)，默认 30000 |

## 工具清单

### 连接与账号信息
- `x_verify_connection` — 验证 API Key
- `x_account_list` — 获取账号列表
- `x_account_detail` — 获取账号详情
- `x_get_field_info` — 获取字段说明

### 受众管理
- `x_audience_list` — 受众列表（多维筛选）
- `x_audience_import_url` — 从用户关注列表导入
- `x_audience_interactive_users` — 从推文互动用户导入
- `x_audience_search_keyword` — 关键词搜索导入
- `x_audience_group_create` — 创建分组
- `x_audience_group_list` — 分组列表
- `x_audience_group_detail` — 分组详情
- `x_audience_group_update` — 更新分组
- `x_audience_group_delete` — 删除分组
- `x_audience_interest_tags` — 标签统计
- `x_audience_interest_tags_add` — 添加标签
- `x_audience_interest_tags_remove` — 移除标签
- `x_audience_add_to_activity` — 添加到营销活动
- `x_audience_activity_progress` — 查询活动进度
npm package: @fwgi/xiaohongshu-mcp-local
Description: 小红书全能助手（本地版）— 本地运行 MCP 二进制 + 远程 API Key 认证
Latest version: 1.0.0

# 📕 小红书全能助手（本地版）

> MCP 服务运行在本机，远程网关只负责 API Key 认证。

## 特点

- **本地运行**：MCP 二进制在用户本机运行 headless Chrome，不受海外 IP 限制
- **扫码更稳**：本机 IP 扫码登录，避免海外 IP 风控
- **无需上传**：图片/视频直接使用本地路径，无需上传到远程服务器
- **API Key 认证**：通过远程网关验证 Key 有效性，确保授权合规

## 系统要求

- OpenClaw 已安装
- Chrome 或 Chromium 浏览器（headless 模式需要）
- 至少 2GB 可用内存

## 快速安装

### 方式一：npm 安装（推荐）

```bash
openclaw plugins install @fwgi/xiaohongshu-mcp-local
```

### 方式二：本地安装

#### Linux / macOS

```bash
chmod +x install.sh
./install.sh
```

#### Windows

```powershell
# 以管理员权限运行 PowerShell
.\install.ps1
```

## 配置

安装脚本会自动配置 `gatewayUrl` 和 `mcpPort`。**API Key 不会自动写入**——首次使用时机器人会向你索要。

### 手动配置

```bash
# 设置 API Key
openclaw config set plugins.entries.xiaohongshu-mcp-local.config.apiKey '你的KEY'

# 修改本地 MCP 端口（默认 18060）
openclaw config set plugins.entries.xiaohongshu-mcp-local.config.mcpPort 18060

# 修改远程网关地址（默认 https://api-backend.fwgi.ai）
openclaw config set plugins.entries.xiaohongshu-mcp-local.config.gatewayUrl 'https://api-backend.fwgi.ai'
```

### 环境变量（可选，优先级低于插件配置）

```bash
export XHS_API_KEY="你的KEY"
export XHS_MCP_PORT=18060
export XHS_GATEWAY_URL="https://api-backend.fwgi.ai"
```

## 使用方式

安装完成后，直接对你的 OpenClaw 机器人说：

- "帮我写一篇小红书并发布"
- "搜索小红书上的美食笔记"
- "帮我回复小红书评论"
- "查看我的小红书通知"

## 本地数据

MCP 的 Cookie 和浏览器数据保存在 `~/.xhs-mcp-local/` 目录下。

## 架构说明

```
用户 → OpenClaw Bot → 本地插件（index.ts）
                          │
                          ├─ API Key 验证 → 远程网关（api-backend.fwgi.ai）
                          │                  仅验证 Key 有效性
                          │
                          └─ 工具调用 → 本地 MCP 二进制（localhost:18060）
                                        headless Chrome → 小红书
```

## 与远程版的区别

| 特性 | 远程版 | 本地版 |
|------|--------|--------|
| MCP 运行位置 | 远程服务器 | 本机 |
| 图片/视频 | 需上传到远程 | 直接用本地路径 |
| 登录 IP | 远程服务器 IP | 本机 IP |
| 扫码登录 | 可能受海外 IP 限制 | 更稳定 |
| 网络依赖 | API Key + 所有操作 | 仅 API Key 验证 |
| 系统要求 | 无 | 需要 Chrome + 内存 |

## 工具列表

共 15 个工具，包括：登录管理、内容发布、搜索浏览、互动操作、通知管理。

详见 [SKILL.md](SKILL.md) 第三节。
npm package: @fwio/ts-mysql-parser
Description: A standalone, grammar-complete MySQL parser.
Author: Fwio
Latest version: 0.0.5

# ts-mysql-parser

``` shell
npm install @fwio/ts-mysql-parser
```

Based on [@stevenmiller888](https://github.com/stevenmiller888)'s [ts-mysql-parser](https://www.npmjs.com/package/ts-mysql-parser).

Compared to the upstream, this fork:
- Uses `pnpm` and updates dependencies.
- Uses [esbuild](https://esbuild.github.io/) for bundling.
- Polyfills `node.js` modules with [assert](https://github.com/browserify/commonjs-assert), [process](https://github.com/defunctzombie/node-process), [url](https://github.com/defunctzombie/node-url) and [util](https://github.com/browserify/node-util), for use in the browser.
npm package: @fwj/lerna-package-1
Description: > TODO: description
Author: fengwujie
Latest version: 0.0.0
Deprecated: deprecate package 1

# `@fwj/lerna-package-1`

> TODO: description

## Usage

```
const lernaPackage1 = require('@fwj/lerna-package-1');

// TODO: DEMONSTRATE API
```
npm package: @fwj/lerna-package-3
Description: > TODO: description
Author: fengwujie
Latest version: 0.0.0
Deprecated: deprecate package 3

# `@fwj/lerna-package-3`

> TODO: description

## Usage

```
const lernaPackage3 = require('@fwj/lerna-package-3');

// TODO: DEMONSTRATE API
```
npm package: @fwl/logging
Description: Logging part of Fewlines Web Libraries
Author: Fewlines
Latest version: 0.1.8

# FWL Logging

**Disclaimer**: this package is made for our internal usage and is only open source for convenience so we might not consider Pull Requests or Issues. Feel free to fork though.

This is part of the Fewlines Web Libraries packages.

It provides an interface for either a JSON based or a Key/Value based logger.

Both have the same API and does not provide log levels.

This is intended as we consider that a log should either be there or not be there.
There should not be differences of level between production and development as we won't be able to use debug logging in production.

## Installation

```shell
yarn add @fwl/logging
```

## Usage

You first need to create the Logger:

```typescript
import { createLogger, EncoderTypeEnum } from "@fwl/logging";

const KVLogger = createLogger({
  service: "service-name",
  encoder: EncoderTypeEnum.KV,
});
const JSONLogger = createLogger({
  service: "service-name",
  encoder: EncoderTypeEnum.JSON,
});
```

After that you make a simple log with the `.log` function with or without arguments:

```typescript
KVLogger.log("this is a log");
// service=service-name message="this is a log"

JSONLogger.log("this is a log");
// {"message":"this is a log","service":"service-name"}

KVLogger.log("this is a log", { additionalData: "value" });
// service=service-name additonalData=value message="this is a log"

JSONLogger.log("this is a log", { additionalData: "value" });
// {"additionalData":"value","message":"this is a log","service":"service-name"}
```

Or you could create a new logger with additional data:

```typescript
const myProcessLogger = KVLogger.withMeta({ process: "my-process" });
myProcessLogger.log("this is a log");
// service=service-name process=my-process message="this is a log"

const myProcessJSONLogger = JSONLogger.withMeta({ process: "my-process" });
myProcessJSONLogger.log("this is a log");
// {"message":"this is a log","service":"service-name","process":"my-process"}
```

## Logging during tests

If you need to use the logger in a testing environment, we provide an `InMemoryLogger` class that act as a regular logger, except it will only store the logs. Logs can be accessed using the `getLog` method, which takes the log index as parameter. The usage is the same, you just need to initialize `InMemoryLogger` instead of using `createLogger()`.

Here is an example of use in a test file using `jest`:

```ts
import { InMemoryTracer } from "@fwl/tracing";

let logger: InMemoryLogger;

beforeEach(() => {
  logger = new InMemoryLogger();
});

test("verify log entry", () => {
  expect.assertions(1);

  // Call the code that is using a logger.

  const log = logger.getLog(0);

  expect(log).toBe("Your log");
});
```
npm package: @fwnanodev/cra-template-router
Description: A custom create-react-app template with react-router-dom v6 set up
Latest version: 1.0.2

# @fwnanodev/cra-template-router

This [@fwnanodev/cra-template-router](https://github.com/fwnanodev/cra-template-fwnd-router) template is based off [cra-template](https://www.npmjs.com/package/cra-template) that has react-router-dom v6 set up already with 5 pre-routed pages plus a Layout.jsx. It is mainly used for our Azure static web app creation script. You can find it in [npmjs package feed](https://www.npmjs.com/package/@fwnanodev/cra-template-router).

It is also configured to work with Azure Static Webapps.

## Usage

You can use it by specifying:\
`npx create-react-app my-custom-template-project --template @fwnanodev/router`

## Configuration

Once the project is built, you can customize the component names. To rename RootComponent into Home:
- Rename `/pages/RootComponent/RootComponent.jsx` to `/pages/Home/Home.jsx` 
- Inside the newly renamed `Home.jsx`, change `RootComponent` to `Home`
- Then in `route-constants.js`, rename `ROOT_COMPONENT_NAME` to `HOME_COMPONENT_NAME` and `ROOT_COMPONENT_ROUTE` to `HOME_COMPONENT_ROUTE`

After the components are renamed to your liking, you can begin adding your custom react code as normal.

## Additional Information
For more information, you can always refer to the create-react-app documentation:
- [Getting Started](https://create-react-app.dev/docs/getting-started) – How to create a new app.
- [User Guide](https://create-react-app.dev) – How to develop apps bootstrapped with Create React App.
npm package: @fwqaaq/translator
Description: Google translation API for JavaScript
Author: fwqaaq
Latest version: 1.0.3

<div align=center>
   <h1>Google Translation API for Deno🛠️</h1>
</div>

## Features

* Automatic language detection with default options.
* Option to specify source and target languages.
* Choice of translation models and clients for different response data.
* Customizable Google Translate URL.
* Error handling for common translation issues.
* Modern ESM module instead of CommonJS.

## Usage

> [!NOTE]
> Only ESM module is supported.

### Import

Deno:

```js
import { Translator } from "https://deno.land/x/translator/mod.ts";
```

ESM:

```js
import { Translator } from 'https://esm.sh/@fwqaaq/translator'
```

or:

```sh
pnpm add @fwqaaq/translator
```

### Example

```js
const options = {
  source: "zh-CN",
  model: 't',
  client: 'gtx',
  url: 'https://translate.googleapis.com/translate_a/'
};

async function main() {
  const translator = new Translator(options);
  const response = await translator.translate("你好");
  console.log(response) // { lang: 'zh-CN', text: 'Hello' }
}

main()
```

## API Reference

* **Constructor**
  * `options`: `TranslateOptions` - (Optional) The options to use when translating.
* **Methods**
  * `translate(_text: string, isRaw: boolean)`: `Promise<ResponseData | Array<any>>` - Translates the text. If `isRaw` is true, returns raw response data. **Default is false.**
  * `audio(_text: string, isOriginal: boolean)`: `string` - Returns google audio link. If `isOriginal` is true, using the original text to generate the audio, and set `source` to your target language. **Default is false**, read the translated text.
* **TranslateOptions** Interface
  * `source`: `string` - Source language (default: `'auto'`).
  * `target`: `string` - Target language (default: `'en'`).
  * `model`: `'t' | 'single'` - Translation model (default: `'t'`).
  * `client`: `'gtx' | 'dict-chrome-ex'` - Client for translation (default: `'gtx'`).
  * `url`: `string` - Google Translate URL (default: '<https://clients5.google.com/translate_a/>').
* **ResponseData** Interface
  * `lang`: `string` - The language of the source text.
  * `text`: `string` - The translated text.

## Links

* [Google Translate Query Params Explanation](https://stackoverflow.com/questions/26714426/what-is-the-meaning-of-google-translate-query-params/29537590#29537590)
* [Difference between the Google Translate API versions](https://stackoverflow.com/questions/57397073/difference-between-the-google-translate-api)
npm package: @fwrlines/generator-graphql-server-type
Description: Generates a type and the surrounding folders for graphql server
Author: fwrlines
Latest version: 2.9.3

# generator-react-component [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
> Creates a component for react 16.8 with a custom name and a scss file. 


## Installation

First, install [Yeoman](http://yeoman.io) and generator-react-component using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)).

```bash
npm install -g yo
npm install -g @fwrlines/generator-react-component
```

Then generate your new project:

```bash
yo component
```

## Aliasing




## Getting To Know Yeoman

 * Yeoman has a heart of gold.
 * Yeoman is a person with feelings and opinions, but is very easy to work with.
 * Yeoman can be too opinionated at times but is easily convinced not to be.
 * Feel free to [learn more about Yeoman](http://yeoman.io/).

## License

MIT © [fwrlines](https://github.com/fwrlines)

## TODO

* Document the code
* Features list
* Alias
* Example usage

[npm-image]: https://badge.fury.io/js/generator-react-component.svg
[npm-url]: https://npmjs.org/package/generator-react-component
[travis-image]: https://travis-ci.com/fwrlines/generator-react-component.svg?branch=master
[travis-url]: https://travis-ci.com/fwrlines/generator-react-component
[daviddm-image]: https://david-dm.org/fwrlines/generator-react-component.svg?theme=shields.io
[daviddm-url]: https://david-dm.org/fwrlines/generator-react-component
[coveralls-image]: https://coveralls.io/repos/fwrlines/generator-react-component/badge.svg
[coveralls-url]: https://coveralls.io/r/fwrlines/generator-react-component
npm package: @fwrlines/generator-react-component
Description: Creates a component for react 16.8 with a custom name and a scss file. To be used with @fwrlines/scss
Author: fwrlines
Latest version: 2.8.0

# generator-react-component [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
> Creates a component for react 16.8 with a custom name and a scss file. 


## Installation

First, install [Yeoman](http://yeoman.io) and generator-react-component using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)).

```bash
npm install -g yo
npm install -g @fwrlines/generator-react-component
```

Then generate your new project:

```bash
yo component
```

## Aliasing




## Getting To Know Yeoman

 * Yeoman has a heart of gold.
 * Yeoman is a person with feelings and opinions, but is very easy to work with.
 * Yeoman can be too opinionated at times but is easily convinced not to be.
 * Feel free to [learn more about Yeoman](http://yeoman.io/).

## License

MIT © [fwrlines](https://github.com/fwrlines)

## TODO

* Document the code
* Features list
* Alias
* Example usage

[npm-image]: https://badge.fury.io/js/generator-react-component.svg
[npm-url]: https://npmjs.org/package/generator-react-component
[travis-image]: https://travis-ci.com/fwrlines/generator-react-component.svg?branch=master
[travis-url]: https://travis-ci.com/fwrlines/generator-react-component
[daviddm-image]: https://david-dm.org/fwrlines/generator-react-component.svg?theme=shields.io
[daviddm-url]: https://david-dm.org/fwrlines/generator-react-component
[coveralls-image]: https://coveralls.io/repos/fwrlines/generator-react-component/badge.svg
[coveralls-url]: https://coveralls.io/r/fwrlines/generator-react-component
npm package: @fwrlines/generator-storybook-story
Description: Creates a story for the component created in @fwrlines/generator-react-component 
Author: fwrlines
Latest version: 1.6.1

# generator-storybook-story [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
> Creates a story for storybook. To be used with @fwrlines/generator-component

## Installation

First, install [Yeoman](http://yeoman.io) and generator-storybook-story using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)).

```bash
npm install -g yo
npm install -g generator-storybook-story
```

Then generate your new project:

```bash
yo storybook-story
```

## Getting To Know Yeoman

 * Yeoman has a heart of gold.
 * Yeoman is a person with feelings and opinions, but is very easy to work with.
 * Yeoman can be too opinionated at times but is easily convinced not to be.
 * Feel free to [learn more about Yeoman](http://yeoman.io/).

## License

MIT © [fwrlines](https://github.com/fwrlines)


[npm-image]: https://badge.fury.io/js/generator-storybook-story.svg
[npm-url]: https://npmjs.org/package/generator-storybook-story
[travis-image]: https://travis-ci.com/fwrlines/generator-storybook-story.svg?branch=master
[travis-url]: https://travis-ci.com/fwrlines/generator-storybook-story
[daviddm-image]: https://david-dm.org/fwrlines/generator-storybook-story.svg?theme=shields.io
[daviddm-url]: https://david-dm.org/fwrlines/generator-storybook-story
[coveralls-image]: https://coveralls.io/repos/fwrlines/generator-storybook-story/badge.svg
[coveralls-url]: https://coveralls.io/r/fwrlines/generator-storybook-story
npm package: @fwrlines/generator-type-map
Description: Creates a dataMap for the control panel
Author: fwrlines
Latest version: 1.3.0

# generator-react-component [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Coverage percentage][coveralls-image]][coveralls-url]
> Creates a component for react 16.8 with a custom name and a scss file. 


## Installation

First, install [Yeoman](http://yeoman.io) and generator-react-component using [npm](https://www.npmjs.com/) (we assume you have pre-installed [node.js](https://nodejs.org/)).

```bash
npm install -g yo
npm install -g @fwrlines/generator-react-component
```

Then generate your new project:

```bash
yo component
```

## Aliasing




## Getting To Know Yeoman

 * Yeoman has a heart of gold.
 * Yeoman is a person with feelings and opinions, but is very easy to work with.
 * Yeoman can be too opinionated at times but is easily convinced not to be.
 * Feel free to [learn more about Yeoman](http://yeoman.io/).

## License

MIT © [fwrlines](https://github.com/fwrlines)

## TODO

* Document the code
* Features list
* Alias
* Example usage

[npm-image]: https://badge.fury.io/js/generator-react-component.svg
[npm-url]: https://npmjs.org/package/generator-react-component
[travis-image]: https://travis-ci.com/fwrlines/generator-react-component.svg?branch=master
[travis-url]: https://travis-ci.com/fwrlines/generator-react-component
[daviddm-image]: https://david-dm.org/fwrlines/generator-react-component.svg?theme=shields.io
[daviddm-url]: https://david-dm.org/fwrlines/generator-react-component
[coveralls-image]: https://coveralls.io/repos/fwrlines/generator-react-component/badge.svg
[coveralls-url]: https://coveralls.io/r/fwrlines/generator-react-component