open-index/open-npm huggingface dataset:
npm package: @finstep/fsk
Description: Finstep Skills CLI - 技能市场命令行工具
Latest version: 0.0.5

# fsk — Finstep Skills CLI

`fsk` 是 [Finstep AI 技能市场](http://fin-skills.finstep.cn) 的命令行工具，无需打开浏览器即可搜索、安装、管理技能。

## 安装

```bash
npm install -g @finstep/fsk
```

或通过 `npx` 免安装使用：

```bash
npx @finstep/fsk search "股票分析"
```

## 命令

### 登录 / 登出

```bash
fsk login        # 打开浏览器完成飞书授权，token 保存至 ~/.finstep/credentials.json
fsk logout       # 清除本地凭证
fsk whoami       # 显示当前登录用户信息
```

### 搜索技能

```bash
fsk search "股票分析"
fsk search china-stock --sort stars --limit 10
fsk search --category finance --sort newest
```

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `--sort` | 排序：`downloads` \| `stars` \| `newest` \| `name` | `downloads` |
| `--category` | 按分类过滤 | — |
| `--page` | 页码 | `1` |
| `--limit` | 每页数量（最大 100） | `20` |

### 查看详情

```bash
fsk info china-stock-skill
```

### 安装技能

```bash
fsk install china-stock-skill                        # 安装最新版本
fsk install china-stock-skill --version 2.0.0        # 安装指定版本
fsk install china-stock-skill --dir custom-skills    # 自定义子目录名
fsk install china-stock-skill --workdir ~/mybot      # 自定义工作目录
fsk install china-stock-skill --force                # 已存在时直接覆盖
```

**安装路径解析（优先级从高到低）：**

1. `--workdir` 选项
2. `FSK_WORKDIR` 环境变量
3. 自动探测 openclaw / clawbot 工作区根目录
4. 当前目录（`cwd`）

最终路径：`<work_dir>/<skill_dir>/<skill-name>/`，`skill_dir` 默认为 `skills`。

### 更新技能

```bash
fsk update china-stock-skill                  # 更新到最新版本
fsk update china-stock-skill --force          # 本地有修改时强制覆盖
fsk update china-stock-skill --workdir ~/mybot
```

本地文件与已发布版本通过文件指纹（SHA-256）比对，未修改时才允许更新；若本地已修改需加 `--force`。

### Star / Unstar（需登录）

```bash
fsk star china-stock-skill
fsk unstar china-stock-skill
```

## 全局选项

| 选项 | 说明 |
|------|------|
| `--api-url <url>` | 覆盖 API 地址（本次生效） |
| `--json` | 以 JSON 格式输出，适合脚本化 |
| `--no-color` | 禁用颜色输出 |
| `-v, --version` | 显示版本号 |
| `-h, --help` | 显示帮助 |

## 配置文件

| 文件 | 说明 |
|------|------|
| `~/.finstep/config.json` | API 地址等配置 |
| `~/.finstep/credentials.json` | 登录凭证（权限 600，仅当前用户可读） |

**`--api-url` 优先级（从高到低）：**

| 来源 | 示例 |
|------|------|
| `--api-url` 命令行选项 | `fsk search --api-url=localhost:3000` |
| `FSK_API_URL` 环境变量 | `FSK_API_URL=localhost:3000 fsk search` |
| `~/.finstep/config.json` | `{ "api_url": "https://..." }` |
| 内置默认值 | `http://fin-skills.finstep.cn/api/v1` |

协议和 `/api/v1` 后缀均可省略，自动补全：`localhost:3000` → `http://localhost:3000/api/v1`

## 本地开发

```bash
# 安装依赖（在 monorepo 根目录）
npm install

# 直接运行源码（无需构建）
cd packages/cli
npm run dev -- search "股票"
npm run dev -- login
npm run dev -- install china-stock-skill --help

# 构建
npm run build

# 构建后测试
./dist/index.js --help

# 类型检查
npm run typecheck
```

从 monorepo 根目录构建：

```bash
npm run build:cli
```
npm package: @finstep/sso-page
Description: This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Latest version: 1.0.4

# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:

- Configure the top-level `parserOptions` property like this:

```js
export default tseslint.config({
  languageOptions: {
    // other options...
    parserOptions: {
      project: ['./tsconfig.node.json', './tsconfig.app.json'],
      tsconfigRootDir: import.meta.dirname,
    },
  },
})
```

- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
- Optionally add `...tseslint.configs.stylisticTypeChecked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config:

```js
// eslint.config.js
import react from 'eslint-plugin-react'

export default tseslint.config({
  // Set the react version
  settings: { react: { version: '18.3' } },
  plugins: {
    // Add the react plugin
    react,
  },
  rules: {
    // other rules...
    // Enable its recommended rules
    ...react.configs.recommended.rules,
    ...react.configs['jsx-runtime'].rules,
  },
})
```