open-index/open-npm huggingface dataset:
npm package: @seelink/sdk
Description: SeeLink SDK - 让 AI Agent 自由访问全球网络
Author: SeeLink
Latest version: 1.0.2

# SeeLink SDK

**让 AI Agent 自由访问全球网络**

[![npm version](https://badge.fury.io/js/@seelink%2Fsdk.svg)](https://badge.fury.io/js/@seelink%2Fsdk)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## 📦 安装

```bash
npm install @seelink/sdk
```

## 🚀 快速开始

### 方式一：使用 SDK（推荐）

```bash
npm install @seelink/sdk
```

```javascript
import { SeeLink } from '@seelink/sdk';

const client = new SeeLink({
  apiKey: 'YOUR_API_KEY' // 或环境变量 SEELINK_API_KEY
});

// 获取网页内容
const result = await client.fetch('https://x.com', {
  extractMode: 'markdown'
});

console.log(result.content);

// 查询余额
const balance = await client.getBalance();
console.log(balance);
```

### 方式二：使用 REST API

```javascript
// 无需安装任何包，直接使用 fetch
const response = await fetch('https://seelink.ai/v1/fetch', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify({
    url: 'https://x.com',
    extractMode: 'markdown'
  })
});

const data = await response.json();
console.log(data);
```

### 方式三：使用 curl

```bash
# 获取网页内容
curl -X POST https://seelink.ai/v1/fetch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://x.com"}'

# 查询余额
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://seelink.ai/v1/balance
```

---

## 📦 API 端点

| 端点 | 方法 | 描述 |
|------|------|------|
| `/v1/fetch` | POST | 获取网页内容 |
| `/v1/search` | POST | 搜索网页 |
| `/v1/api` | POST | 代理 API 调用 |
| `/v1/balance` | GET | 查询余额 |
| `/v1/health` | GET | 健康检查 |

---

## 🔑 获取 API Key

1. 访问 [https://seelink.ai/console/register](https://seelink.ai/console/register)
2. 注册账户（送 ¥10 体验金）
3. 在控制台获取 API Key

---

## 📚 完整示例

### Node.js

```javascript
const API_KEY = 'sk_live_xxxxxxxxxxxx';
const API_URL = 'https://seelink.ai/v1';

// 获取网页
async function fetchUrl(url) {
  const response = await fetch(`${API_URL}/fetch`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${API_KEY}`
    },
    body: JSON.stringify({ url })
  });
  return response.json();
}

// 使用
const result = await fetchUrl('https://github.com');
console.log(result.data.content);
```

### Python

```python
import requests

API_KEY = 'sk_live_xxxxxxxxxxxx'
API_URL = 'https://seelink.ai/v1'

def fetch_url(url):
    response = requests.post(
        f'{API_URL}/fetch',
        headers={'Authorization': f'Bearer {API_KEY}'},
        json={'url': url}
    )
    return response.json()

# 使用
result = fetch_url('https://github.com')
print(result['data']['content'])
```

---

## 💰 定价

- 网页浏览：¥0.01/MB
- API 调用：¥0.02/MB
- 搜索请求：¥0.005/次

---

## 🔗 链接

- 官网: [https://seelink.ai](https://seelink.ai)
- 文档: [https://seelink.ai/docs](https://seelink.ai/docs)
- 控制台: [https://seelink.ai/console](https://seelink.ai/console)

---

## 📝 License

MIT
npm package: @seemusic/element-plus-theme-daflow
Description: Element Plus Theme For daflow.ai
Author: cuiguojie@kanjian.com
Latest version: 2.5.6-alpha.2

# @seemusic/element-plus-theme-daflow

daflow.ai 自定义 Element Plus 皮肤。

本项目只包含当前公司业务中涉及到的组件（及组件子功能）的样式， **不会去做全功能兼容**

## 关于版本
Element Plus **经常** 会在版本更迭时 **破坏性** 的改变样式实现方式，这给自定义皮肤的使用带来了不少困扰，比如升级了 Element Plus，但是由于皮肤和组件库版本不匹配导致样式出问题。

基于这些情况，本项目发布时的版本号更迭，遵循以下规则：
* 和开发时使用的 Element Plus 版本号保持一致，如 `2.2.4`
* **不保证** 兼容所有 Element Plus 版本，即可能 `2.2.4` 的下一个版本为 `2.2.7`
* 如果某版本的实现有 BUG，可能会发布类似 `2.2.4-rc.1` 格式的版本去做修正（主版本和使用的 Element Plus 版本保持一致更重要）

这样，使用者可以通过版本号，清晰的知道本项目的适配范围。

## 本地预览

```
npm run storybook
```

## 支持组件列表

- [x] Button
- [ ] CheckboxButton
- [ ] CheckboxGroup
- [ ] DatePicker
- [x] Drawer
- [x] Form
- [x] Input
- [x] Message
- [x] Option
- [x] Pagination
- [x] Popconfirm
- [x] Popover
- [x] Radio
- [x] RadioButton
- [x] RadioGroup
- [x] Select
- [x] Table
- [x] Tabs
- [x] Tag
- [x] Upload
npm package: @seemusic/element-plus-theme-sop
Description: 星球发行 SOP 系统自定义 Element Plus 皮肤
Author: cuiguojie@kanjian.com
Latest version: 2.4.3-rc.0.0.2

# @seemusic/element-plus-theme-sop

看见音乐后台项目自定义 Element Plus 皮肤。

本项目只包含当前公司设计规范中涉及到的组件（及组件子功能）的样式， **不会去做全功能兼容**

## 关于版本
Element Plus **经常** 会在版本更迭时 **破坏性** 的改变样式实现方式，这给自定义皮肤的使用带来了不少困扰，比如升级了 Element Plus，但是由于皮肤和组件库版本不匹配导致样式出问题。

基于这些情况，本项目发布时的版本号更迭，遵循以下规则：
* 和开发时使用的 Element Plus 版本号保持一致，如 `2.2.4`
* **不保证** 兼容所有 Element Plus 版本，即可能 `2.2.4` 的下一个版本为 `2.2.7`
* 如果某版本的实现有 BUG，可能会发布类似 `2.2.4-rc.1` 格式的版本去做修正（主版本和使用的 Element Plus 版本保持一致更重要）

这样，使用者可以通过版本号，清晰的知道本项目的适配范围。

## 本地预览

```
npm run storybook
```

## 支持组件列表

- [x] Button
- [x] Cascader
- [x] Checkbox
- [x] CheckboxButton
- [x] CheckboxGroup
- [x] DatePicker
- [x] Drawer
- [x] Form
- [x] Input
- [x] Message
- [x] Option
- [x] Pagination
- [x] Popconfirm
- [x] Popover
- [x] Pagination
- [x] Radio
- [x] RadioButton
- [x] RadioGroup
- [x] Select
- [x] Table
- [x] Tabs
- [x] Tag
npm package: @seemusic/element-plus-theme-starcast
Description: 星球发行 前台 自定义 Element Plus 皮肤
Author: cuiguojie@kanjian.com
Latest version: 2.4.3-rc.0.0.2

# @seemusic/element-plus-theme-starcast

星球发行 前台 自定义 Element Plus 皮肤

本项目只包含当前公司设计规范中涉及到的组件（及组件子功能）的样式， **不会去做全功能兼容**

## 关于版本
Element Plus **经常** 会在版本更迭时 **破坏性** 的改变样式实现方式，这给自定义皮肤的使用带来了不少困扰，比如升级了 Element Plus，但是由于皮肤和组件库版本不匹配导致样式出问题。

基于这些情况，本项目发布时的版本号更迭，遵循以下规则：
* 和开发时使用的 Element Plus 版本号保持一致，如 `2.2.4`
* **不保证** 兼容所有 Element Plus 版本，即可能 `2.2.4` 的下一个版本为 `2.2.7`
* 如果某版本的实现有 BUG，可能会发布类似 `2.2.4-rc.1` 格式的版本去做修正（主版本和使用的 Element Plus 版本保持一致更重要）

这样，使用者可以通过版本号，清晰的知道本项目的适配范围。

## 本地预览

```
npm run storybook
```

## 支持组件列表

- [x] Button
- [x] Cascader
- [x] Checkbox
- [x] CheckboxButton
- [x] CheckboxGroup
- [x] DatePicker
- [x] Dialog
- [x] Drawer
- [x] Form
- [x] Input
- [x] Message
- [x] Option
- [x] Pagination
- [x] Popconfirm
- [x] Popover
- [x] Radio
- [x] RadioButton
- [x] RadioGroup
- [x] Select
- [x] Table
- [x] Tabs
- [x] Tag
npm package: @seemusic/eslint-config-nuxt3
Description: Nuxt3 ESLint config for Kanjian Music
Author: cuiguojie@kanjian.com
Latest version: 0.0.1

# eslint-config-nuxt3

Nuxt3 + TypeScript 项目的 通用 eslint-config 配置。

## 功能说明

* 集成了官方的 ESLint 配置项，及依赖包
* 添加团队常用的自定义规则覆写

## 使用：

安装：
```
pnpm i @seemusic/eslint-config-nuxt3 -D
```

配置 `.eslintrc.cjs` （或者其他格式的 eslintrc 文件）：

```
/* eslint-env node */
module.exports = {
  'extends': [
    '@seemusic/eslint-config-nuxt3'
  ]
};
```
> 如果项目 packages.json 中已经有低版本的 eslint，需要按照 peer 提示的说明升级或者重新安装

## 其他
eslint 的多个 extends 配置存在 **覆盖及合并** 操作，如果需要查看最终结果，在调用方项目中，执行以下命令可以把最终结果保存到指定的文件查看：

```
pnpm eslint --print-config .eslintrc.cjs > eslint-config-log.json
```

> 命令中，`.eslintrc.cjs` 是项目中 eslintrc 文件名，`eslint-config-log.json` 是输出的文件名
npm package: @seemusic/eslint-config-vue3
Description: Vue3 ESLint config for Kanjian Music
Author: cuiguojie@kanjian.com
Latest version: 2.0.0

# eslint-config-vue3

源生 vue3 + typescript 项目的 通用 eslint-config 配置。

## 版本说明
`1.0.0` 之前的版本，基于 `eslint@8` 的规则。

`1.0.0` 及后续版本，基于 `eslint@9` 的 flat 格式规则 （**注意：`eslint@9` 需要 node 版本 >= 18.18.0**）。

`2.0.0` 之后版本为 vite7 的 NodeJS 环境适配，要求 node 版本 >= 22.12.0。

## 功能说明

* 集成了 Vue 官方脚手架自带的 ESLint 配置项，及依赖包
* 修改 Vue 官方校验规则等级（`essential` 改为 `recommended`）
* 添加团队常用的自定义规则覆写

## 使用：

安装：
```
pnpm i @seemusic/eslint-config-vue3 -D
```

### 1.0.0 之前版本（eslint 8）
配置 `.eslintrc.cjs` （或者其他格式的 eslintrc 文件）：

```
/* eslint-env node */
module.exports = {
  'extends': [
    '@seemusic/eslint-config-vue3'
  ]
};
```

> 如果是从 `create-vue` 创建的项目，需要清理已经封装过的脚手架自带的依赖

```
pnpm uninstall @rushstack/eslint-patch @vue/eslint-config-typescript eslint-plugin-vue
```

> 如果项目 packages.json 中已经有低版本的 eslint，需要按照 peer 提示的说明升级或者重新安装

### 1.0.0 及后续版本（eslint 9）

配置 `.eslint.config.js` （或者其他格式的 eslint 配置 文件）：

> 注意：ESLint 9 放弃了所有 `eslintrc` 格式的配置，统一使用 `config` 格式，如 `eslint.config.js` 或 `eslint.config.mjs`

```
import config from '@seemusic/eslint-config-vue3';

export default [
  ...config
];
```

> 如果是从 `create-vue` 创建的项目，需要清理脚手架自带的依赖

```
pnpm uninstall @vue/eslint-config-typescript eslint-plugin-vue
```

## 其他
eslint 的多个 extends 配置存在 **覆盖及合并** 操作，如果需要查看最终结果，在调用方项目中，执行以下命令可以把最终结果保存到指定的文件查看：

```
pnpm eslint --print-config .eslintrc.cjs > eslint-config-log.json
```

> 命令中，`.eslintrc.cjs` 是项目中 eslint 配置文件名，需要注意不同版本的文件；`eslint-config-log.json` 是输出的文件名

如果是 `eslint@9` 版本，则可以使用 `npx @eslint/config-inspector` 通过 GUI 查看。
npm package: @seemusic/sdistro-element-theme
Description: 星球发行前台 自定义 ElementUI 皮肤
Author: cuiguojie@kanjian.com
Latest version: 1.0.0

# sdistro-element-theme

自定义 ElementUI 样式。仅提供 SCSS 文件及相关资源；使用 `storybook` 做控件样式预览

目前版本依赖：
* `ElementUI` 2.4.5+
* `@storybook/vue` 6.4.9

> ElementUI 2.15.6 有一些破坏式的 DOM 结构修改，此处直接做了额外的覆写。

## 本地预览

```
npm run storybook:serve
```

## 打包为静态文件

```
npm run storybook:build
```

## 组件列表

- [x] Button
- [x] Cascader
- [x] Checkbox
- [x] CheckboxGroup
- [x] Collapse
- [x] CollapseItem
- [x] DatePicker
- [x] Dialog
- [x] Drawer
- [x] Form
- [x] Input
- [x] Pager
- [x] Popconfirm
- [x] Popover
- [x] Radio
- [x] RadioGroup
- [x] Select
- [x] Table
- [x] Tabs
- [x] Tag
npm package: @seemusic/sdistro-sop-ui
Description: 看见音乐 SOP 系统自定义 UI 组件
Author: cuiguojie@kanjian.com
Latest version: 0.3.5

# sdistro-sop-ui

## Project setup
```
npm install
```

### Compiles and hot-reloads for development
```
npm run serve
```

### Compiles and minifies for production
```
npm run build
```

### Lints and fixes files
```
npm run lint
```

### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
npm package: @seemusic/sop-element-theme
Description: 星球发行 SOP 自定义 ElementUI 皮肤
Author: cuiguojie@kanjian.com
Latest version: 1.4.1

# sop-element-theme

SOP 系统自定义 ElementUI 样式。仅提供 SCSS 文件及相关资源；使用 `storybook` 做控件样式预览

目前版本依赖：
* `ElementUI` 2.4.5+
* `@storybook/vue` 6.4.9

> ElementUI 2.15.6 有一些破坏式的 DOM 结构修改，此处直接做了额外的覆写。

其他依赖：

一些组件内置的 icon 使用了公司自己设计的 icon 替换，所以需要引用在线的 webfont。

当前版本为 `//at.alicdn.com/t/font_2086495_xn38jpqufm.css`

## 使用方式
参见 [在项目中改变 SCSS 变量](https://element.eleme.cn/#/zh-CN/component/custom-theme#zai-xiang-mu-zhong-gai-bian-scss-bian-liang)，引入 element 时引用 scss 入口文件 `index.scss` 即可。示例：

```
import Vue from 'vue';
import {
  Button,
  // ...
  // 你需要按需加载的组件
} from 'element-ui';
import '@seemusic/sop-element-theme/src/index.scss';
```

## 本地预览

```
npm run storybook:serve
```

## 打包为静态文件

```
npm run storybook:build
```

## 组件列表

- [x] Button
- [x] Cascader
- [x] Checkbox
- [x] CheckboxGroup
- [x] Collapse
- [x] CollapseItem
- [x] DatePicker
- [x] Drawer
- [x] Form
- [x] Input
- [x] Messagebox
- [x] Pager
- [x] Popconfirm
- [x] Popover
- [x] Radio
- [x] RadioButton
- [x] RadioGroup
- [x] Select
- [x] Table
- [x] Tabs
- [x] Tag
npm package: @seemusic/styles
Description: 看见音乐 CSS 公共库
Author: cuiguojie@kanjian.com
Latest version: 0.0.2-rc.1

# 看见音乐 CSS 公共样式库

一般情况下，成体系的网站设计规范，大多会有 [原子设计（Atomic Design）](https://atomicdesign.bradfrost.com/table-of-contents/) 的影子。

这个项目，专注于把看见音乐下各个子项目的设计规范，拆解成基础的 CSS 资源，方便项目引用。

## 典型场景
星球发行和看见音乐，共用公司主品牌蓝色 `#0040FF`，但是具体到页面、组件，不同时期的版本又有明显自定义区别。

每个项目中都独立设定一遍色值的话，会给维护带来很多困难，也很容易出错。

另外类似 [Barlow Condensed](https://f2e.seemusic.xyz/resource/barlow-condensed.html) 这样的字体实现，如果没有公共调用方式，则后来者去寻求字体实现方案会耗费大量时间。

## 边界

### 内涵（包含什么）
* 最底层的色彩变量
* 公共字体调用
* 通用公共样式，如排版规范，包含文字颜色、字体、字号、行高等
* 仅对上述内容进行 **CSS 变量映射** 后，提供给其他组件调用的公共配置样式文件，如 `ElementPlus` 的自带色彩覆盖

### 外延（不包含什么）

* 业务组件样式，如页头、页脚。这些应该交由组件库实现（组件库可以引用这里的基础配置）
* 复合组件样式，视作同业务组件
* 页面级样式
* 第三方组件/组件库的自定义样式，如 [Swiper](https://swiperjs.com/vue)、[ElementPlus](https://github.com/element-plus/element-plus)，这些应该创建独立的子项目维护，并且需要有完整的预览

### 切分基本原则
一般情况下，组件/组件库之类，需要提供完整的样式预览，不会放在此项目内。

比如 `ElementPlus` 自定义皮肤，此项目中允许以 theme 的形式提供基础 **变量配置文件**，如

```
@import "../colors/seemusic.scss";

:root {
  --el-color-primary: var(--seemusic-primary);
  --el-text-color-regular: var(--seemusic-text-normal);

  --el-disabled-bg-color: var(--seemusic-bg-disabled);
  --el-disabled-border-color: var(--seemusic-border-disabled);
  --el-disabled-text-color: var(--seemusic-text-disabled);

  --el-color-danger: var(--seemusic-danger);
}

```

但是具体到某个组件（比如 `ElButton`）的样式覆写，必须放到独立的项目中，因为要提供 storybook 预览。
npm package: @seemusic/ui-components
Description: A Vue 3 UI Library. Uses Composable.
Author: xsq
Latest version: 0.0.8-rc.7

`@seemusic/ui-components` 基于 `Vue3` 开发，看见音乐中后台组件库。

## 安装

``` bash
pnpm add @seemusic/ui-components
```

## 快速开始

本项目样式依赖于 `@seemusic/element-plus-theme-sop` `@seemusic/styles` 使用之前请先进行安装。

```bash
pnpm install @seemusic/element-plus-theme-sop @seemusic/styles
```

推荐项目内使用方式如下。

-  `src/assets` 新建 `css/theme.scss`。
-  `vite.config.ts` 中增加相应配置。

```scss 
@import "@seemusic/styles/src/colors/seemusic.scss";
@import "@seemusic/element-plus-theme-sop";
```

```ts [vite.config.ts]
import { defineConfig } from 'vite';

export default defineConfig({
  // ...
  css: {
    preprocessorOptions: {
      scss: {
        // 需要把 element 自定义样式提前加入; 在 main.ts 中引入会出现优先级顺序不对的问题
        additionalData: '@use "@/assets/css/theme.scss" as *;'
      }
    }
  },
  // ...
});
```

### 全量导入组件

```ts
// main.ts

import '@seemusic/ui-components/styles';
import { createApp } from 'vue';
import { createSeeMusic } from '@seemusic/ui-components';
import * as components from '@seemusic/ui-components/components';

const app = createApp(App);
const SeeMusicUI = createSeeMusic({ components });
app.use(SeeMusicUI);
```

### 按需导入组件

```ts
// xxx.vue
import { SopBasicInfo } from '@seemusic/ui-components/components';
```

### 自动导入组件（推荐）

使用 `unplugin-vue-components` 插件来开启自动按需导入组件的支持。

配置 `vite.config.ts` 并在 `Components` 插件中使用 `UIComponentsResolver` 组件解析器。

插件会自动解析模板中使用到的组件并导入。

```ts
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';
import { UIComponentsResolver } from '@seemusic/ui-components/resolver';

export default defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers: [
        // 自动导入
        UIComponentsResolver({ prefix: 'sop' })
      ],
      dts: 'src/dts/components.d.ts',
      extensions: ['vue'],
      include: [
        /\.vue$/,
        /\.vue\?vue/
      ]
    })
  ],
});
```

## `Volar` 支持

如果您使用 `VSCode`，请在 `tsconfig.json` 中通过 `compilerOptions.type` 指定全局组件类型。

```json
// tsconfig.json
{
  "compilerOptions": {
    // ...
    "types": ["@seemusic/ui-components/lib/volar"]
  }
}
```

## 国际化

```vue
<template>
  <SopConfigProvider :locale="zhCn" />
</template>

<script setup lang="ts">
// 配置自动导入后，组件可以不用具名导入
import { SopConfigProvider } from '@seemusic/ui-components/components';
import { zhCn, zhTw, enUs } from '@seemusic/ui-components/locales';
</script>
```

## 高级

如果你想使用 `SopStatus` 、 `SopFilterForm` 、 `SopDataTable`、`SopDataTableItem`、`SopCover`、`SopBasicInfo`、`SopCard`、`SopPageHeader` 之外的组件，需要做以下修改。

`main.ts` 中引入 `element-plus` 的样式文件

```ts
import './assets/css/basic.scss';
import 'element-plus/dist/index.css';
```

修改 `vite.config.ts` 中的 `element-plus` 自动导入配置

```ts
export default defineConfig({
  // ...
  plugins: [
    Components: {
      // ElementPlusResolver({
      //   importStyle: 'sass'
      // }),
      // 不再使用插件自动导入组件样式的功能
      ElementPlusResolver(),
      // ....
    }
    // ....
  ]
  // ....
})
```
npm package: @seendsouza/wagmi
Description: React Hooks for Ethereum
Author: awkweb.eth
Latest version: 0.10.0

# wagmi

## Documentation

For full documentation and examples, visit [wagmi.sh](https://wagmi.sh).

## Installation

Install wagmi and its ethers peer dependency.

```bash
npm install wagmi ethers
```

## Community

Check out the following places for more wagmi-related content:

- Join the [discussions on GitHub](https://github.com/wagmi-dev/wagmi/discussions)
- Follow [@wagmi_sh](https://twitter.com/wagmi_sh) on Twitter for project updates
- Share [your project/organization](https://github.com/wagmi-dev/wagmi/discussions/201) using wagmi
- Browse the [awesome-wagmi](https://github.com/wagmi-dev/awesome-wagmi) list of awesome projects and resources

## Support

If you find wagmi useful, please consider supporting development. Thank you 🙏

- [GitHub Sponsors](https://github.com/sponsors/wagmi-dev?metadata_campaign=readme_wagmi)
- [Gitcoin Grant](https://gitcoin.co/grants/4493/wagmi-react-hooks-library-for-ethereum)
- [wagmi-dev.eth](https://etherscan.io/enslookup-search?search=wagmi-dev.eth)
npm package: @seenn/cli
Description: Seenn CLI - Manage your Seenn account from the command line
Author: Seenn
Latest version: 0.2.0

# @seenn/cli

Official CLI for [Seenn](https://seenn.io) - Real-time push notifications and Live Activities for your apps.

## Installation

```bash
npm install -g @seenn/cli
```

Or use with npx:

```bash
npx @seenn/cli login
```

## Usage

### Login

Authenticate with your Seenn account using Google OAuth:

```bash
seenn login
```

This will open your browser for authentication. Once complete, your credentials are stored locally.

### View Account Info

```bash
seenn whoami
```

Output:
```
Email:      your@email.com
App:        My App (app_01HQ...)
Plan:       Free (1K jobs/mo)
Public Key: pk_live_abc123...
Secret Key: sk_live_••••••••

Docs: https://docs.seenn.io
```

### Manage API Keys

Show your API keys:

```bash
seenn keys           # Secret key masked
seenn keys --reveal  # Show full secret key
```

Regenerate API keys (invalidates current keys):

```bash
seenn keys:regenerate
```

### Logout

Remove stored credentials:

```bash
seenn logout
```

## Credentials

Credentials are stored in `~/.seenn/credentials.json` with secure file permissions (600).

## Documentation

For full documentation, visit [docs.seenn.io](https://docs.seenn.io).

## License

MIT
npm package: @seenn/types
Description: Shared TypeScript types for Seenn SDKs
Author: Seenn
Latest version: 0.5.0

# @seenn/types

Shared TypeScript types for all Seenn SDKs. This package is the **single source of truth** for type definitions.

## Installation

```bash
npm install @seenn/types
# or
pnpm add @seenn/types
```

## Usage

```typescript
import type {
  SeennJob,
  JobStatus,
  StageInfo,
  ConnectionState,
  SSEEventType,
} from '@seenn/types';
```

## SDK Sync Guidelines

When updating types in this package:

1. **Bump version** in package.json
2. **Publish** to npm: `npm publish`
3. **Update all SDKs** to use new version:
   - `@seenn/react-native`
   - `@seenn/node`
   - `seenn_flutter` (generate from TypeScript)

### Version Compatibility

| @seenn/types | @seenn/react-native | @seenn/node | seenn_flutter |
|--------------|---------------------|-------------|---------------|
| 0.1.0        | 0.2.6+              | 0.2.2+      | 0.1.0+        |

## Type Categories

### Core Types
- `SeennJob` - Main job object
- `JobStatus` - Status enum
- `StageInfo`, `QueueInfo` - Progress info
- `JobResult`, `JobError` - Completion data

### Parent-Child Types
- `ParentInfo`, `ChildrenStats` - Relationship data
- `ChildJobSummary` - Child job info
- `ParentWithChildren` - Full parent with children

### SSE Types
- `ConnectionState` - SSE connection states
- `SSEEventType` - All SSE event types
- `SSEEvent` - Event wrapper

### API Types
- `CreateJobParams`, `UpdateJobParams` - Request types
- `CompleteJobParams`, `FailJobParams` - Completion types

### Live Activity Types
- `LiveActivityStartParams`, `LiveActivityUpdateParams`
- `LiveActivityEndParams`, `LiveActivityResult`

## Flutter Integration

For Flutter SDK, generate Dart types from this package:

```bash
# In seenn-platform root
pnpm run generate:flutter-types
```

This runs `scripts/generate-flutter-types.ts` which converts TypeScript to Dart.

## License

MIT
npm package: @seepdea/api-factory
Description: Make traversible JS representation of a remote resource
Author: luthor
Latest version: 1.1.4

# api-factory
## quickly prototype a reusable API consumer using Javascript

### Installation
```
npm i @seepdea/api-factory
```

### Usage
```javascript
const APIFactory = require('api-factory')
```
APIFactory takes a function that returns a promise as an argument, such as `fetch` and returns a wrapped Proxy Function.

#### In Node
```javascript
const request = require('request-promise-native')

const API = APIFactory(request)

// the arguments passed to API are how you would usually use the function you supplied to the factory
const exampleAPI = API({
    uri: 'https://example.com',
    headers: {
        'Authorization': `Bearer ${token}`,
    },
    json: true,
})

exampleAPI.__url // https://example.com

// you can now traverse the API as such:
let foo = 'foo'
const subPath = exampleAPI[foo].bar

subPath.__url // https://example.com/foo/bar

// every 'modification' returns a new object extending the properties of the parent
exampleAPI.__url // https://example.com

// methods can be changed
exampleAPI.__method // GET
exampleAPI._POST.__method // POST
exampleAPI._METHOD('POST').__method // POST


// to run requests, use the API instance like you would a promise:
exampleAPI.then(res => /* doSomething */).catch(...)
await exampleAPI // result of request
subPath.then(res => /* doSomething */).catch(...)
await subPath // result of request to https://example.com/foo/bar
subPath._POST.then(res => /* doSomething */).catch(...)
await subPath._POST // result of POST request to subPath

// because every API instance is a function, calling this function will further augment its parameters.
// this would POST a body to https://example.com/foo/bar:
await subPath._POST({
    json: {
        foo: 'bar',
    },
})
```

#### In Browser

```javascript
const API = APIFactory(fetch)

const exampleAPI = API('https://example.com', { // pass parameters as you would to fetch
    headers: {
        'Authorization': `Bearer ${token}`,
    },
})

// promise handlers can be changed
const jsonAPI = exampleAPI._CHAIN(d => d.json())
// every call on jsonAPI will now be processed with `d => d.json()`

// the following sets up a POST end point to https://example.com/some/sub/path
// with added Content-Type header
const postEndpoint = exampleAPI.some.sub.path._POST._HEADERS({
    'Content-Type': 'application/json',
})

// to POST json data with fetch
await postEndpoint({
    body: JSON.stringify({
        foo: 'bar',
    })
}).then(d => d.json()) // parse JSON as you would with fetch
```

Every time you read `.then` on an API instance, the request is sent, so you can predefine references to specific endpoints and call them repeatedly.
npm package: @seepine/ai
Description: 帮助你快速构建拥有 MCP 能力的 Agent
Author: seepine
Latest version: 0.1.3

# @seepine/ai

帮助你快速构建拥有 MCP 能力的 Agent

## 一、基本用法

### 依赖安装

```
npm i @seepine/ai
```

### 创建 Agent

```ts
import { ChatOpenAI, Agent } from '@seepine/ai'

const agent = new Agent({
  baseURL: process.env['OPENAI_BASE_URL'],
  apiKey: process.env['OPENAI_API_KEY']!,
  model: process.env['OPENAI_MODEL']!,
  prompts: [
    {
      // 使用提示词构建 agent
      role: 'system',
      content: '你是一个中英文翻译专家，将用户输入的中文翻译成英文，或将用户输入的英文翻译成中文',
    },
  ],
})

agent.chatSync('荣誉').then((res) => {
  // 输出结果 Honor
  console.log(res)
})
```

### 流式输出

```ts
for await (const chunk of agent.chat(input)) {
  if (chunk.type === 'chat') {
    process.stdout.write(chunk.content)
  } else {
    console.log(chunk)
  }
}
```

## 二、使用 MCP

### 创建 MCP

```ts
import { McpClient } from '@seepine/ai'

// 这是获取网页内容和bing搜索的mcp
const fetchMCP = new McpClient({
  name: 'mcp-server-fetch',
  type: 'stdio',
  command: 'npx',
  args: ['-y', '@seepine/mcp-fetch'],
})
```

### 创建 Agent

```ts
import { ChatOpenAI, Agent, McpClient } from '@seepine/ai'

const agent = new Agent({
  baseURL: process.env['OPENAI_BASE_URL'],
  apiKey: process.env['OPENAI_API_KEY']!,
  model: process.env['OPENAI_MODEL']!,
  // 传给 Agent
  mcps: [fetchMCP],
})
```

### 使用

```ts
for await (const chunk of agent.chat(input)) {
  if (chunk.type === 'chat') {
    process.stdout.write(chunk.content)
  } else if (chunk.type === 'tool_call_begin') {
    // 开始调用mcp
  } else if (chunk.type === 'tool_call_end') {
    // 调用mcp结束
  }
}
```
npm package: @seepine/edge-tts
Description: @seepine/edge-tts is a module that using Microsoft Edge's online TTS (Text-to-Speech) service on the Node.js
Author: seepine
Latest version: 1.4.0

# seepine/edge-tts

seepine/edge-tts is a module that utilizes Microsoft Edge's online TTS (Text-to-Speech) service on Node.js

## Installation

```
npm install @seepine/edge-tts
```

## Use usage

```ts
import { EdgeTTS } from '@seepine/edge-tts'

const tts = new EdgeTTS();
const res = await tts.call("Hello world");

fs.writeFileSync(path.join(__dirname, "test.mp3"), res.data);
fs.writeFileSync(path.join(__dirname, "test.json"), JSON.stringify(res.subtitles));
```

### configure

```ts
const tts = new EdgeTTS({
  voice: 'en-US-AriaNeural',
  lang: 'en-US',
  outputFormat: 'audio-24khz-96kbitrate-mono-mp3',
  proxy: 'http://localhost:7890',
  pitch: '-10%',
  rate: '+10%',
  volume: '-50%',
  timeout: 10000
})
```

You can find the available options for speechconfig at [voice/lang](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=tts)|[outputFormat](https://learn.microsoft.com/en-us/dotnet/api/microsoft.cognitiveservices.speech.speechsynthesisoutputformat?view=azure-dotnet)|[pitch/rate/volume](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/speech-synthesis-markup-voice), but not all options are available due to limitations of the services provided by Microsoft Edge.

### subtitles

Subtitles are json files with the same name as the audio file, as shown below:

```json
\\ the *start* is the time point at which the *part* begins,
\\ the *end* is the time point at which the *part* ends,
\\ measured in milliseconds.
[
  { "part": "node-edge-tts ", "start": 100, "end": 1287 },
  { "part": "is ", "start": 1287, "end": 1450 },
  { "part": "a ", "start": 1450, "end": 1500 },
  { "part": "module ", "start": 1500, "end": 2037 },
  { "part": "that ", "start": 2037, "end": 2350 },
  { "part": "utilizes ", "start": 2350, "end": 3162 },
  { "part": "Microsoft ", "start": 3162, "end": 3762 },
  { "part": "Edge's ", "start": 3762, "end": 4212 },
  { "part": "online ", "start": 4212, "end": 4750 },
  { "part": "TTS (", "start": 4750, "end": 5450 },
  { "part": "Text-to-Speech) ", "start": 5600, "end": 6637 },
  { "part": "service ", "start": 6800, "end": 7387 },
  { "part": "on ", "start": 7387, "end": 7600 },
  { "part": "Node.", "start": 7600, "end": 7950 },
  { "part": "js", "start": 8012, "end": 8762 }
]
```
npm package: @seepine/hono-cache
Description: cache for hono
Author: seepine
Latest version: 0.0.1

# hono-cache

[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![bundle][bundle-src]][bundle-href]
[![License][license-src]][license-href]

基于 [Hono](https://hono.dev/) 的中间件，支持内存和 Redis 缓存，以及多级组合。

## 安装

```bash
npm install @seepine/hono-cache
```

## 使用方法

### 1. 注册中间件

```ts
import { Hono } from 'hono'
import { cacheMiddleware } from '@seepine/hono-cache'

const app = new Hono()
app.use(cacheMiddleware())
```

### 2. 使用

```ts
// service/userService.ts

app.get('/userinfo', async c => {
  const userinfo = await c.var.cache.get('key')
  return c.json(userinfo)
})
```

## 方法合集

### get

```ts
c.var.cache.get('key')
```

### set

```ts
c.var.cache.set('key', 'value')
c.var.cache.set('key', 'value', '30s') // 过期时间
```

### getIfPresent

```ts
c.var.cache.getIfPresent(
  'key',
  () => {
    return findById('userId')
  },
  '30s',
)
```

<!-- Refs -->

[npm-version-src]: https://img.shields.io/npm/v/@seepine/hono-cache
[npm-version-href]: https://www.npmjs.com/package/@seepine/hono-cache
[npm-downloads-src]: https://img.shields.io/npm/dm/@seepine/hono-cache
[npm-downloads-href]: https://npmjs.com/package/@seepine/hono-cache
[bundle-src]: https://img.shields.io/bundlephobia/minzip/@seepine/hono-cache
[bundle-href]: https://bundlephobia.com/result?p=@seepine/hono-cache
[license-src]: https://img.shields.io/github/license/seepine/hono-cache.svg
[license-href]: https://github.com/seepine/hono-cache/blob/main/LICENSE
npm package: @seepine/hono-global-context
Description: provide global context
Author: seepine
Latest version: 0.0.2

# hono-global-context

[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![bundle][bundle-src]][bundle-href]
[![License][license-src]][license-href]

基于 [Hono](https://hono.dev/) 的中间件，实现类似 Java ThreadLocal 的全局上下文功能。用于在一次请求生命周期内安全地存储和获取数据，适用于日志追踪、用户信息、请求 ID 等场景。

## 主要场景

在实际开发中，常常需要在 service 层、工具函数等深层调用链中访问请求相关的数据（如用户信息、traceId、请求参数等）。传统做法需要将 `context` 或相关数据层层传递，导致代码冗余且不易维护。

**hono-global-context** 通过全局上下文机制，解决了这一痛点：

- **无需在 service 层显式传递 context**  
  只需在中间件或 controller 层设置数据，service 层可随时获取，无需参数传递。
- **简化代码结构**  
  让业务逻辑更聚焦，减少重复参数传递。
- **适用于异步和多层调用场景**  
  保证每个请求的数据隔离，异步场景下也能安全访问。

## 安装

```bash
npm install @seepine/hono-global-context
```

## 使用方法

### 1. 注册中间件

```ts
import { Hono } from 'hono'
import { globalContextMiddleware } from 'hono-global-context'

const app = new Hono()
app.use(globalContextMiddleware())
```

### 2. 设置数据

```ts
app.use(async (c, next) => {
  // 例如根据token设置用户信息
  c.set('user', findUser(c.req.header('token')))
  await next()
})
```

### 3. 获取数据

```ts
// service/userService.ts
import { getGlobalContext } from 'hono-global-context'

export function getCurrentUser() {
  // 通过 ctx.get() 可以获取到 hono 的 context 实例
  return findById(ctx.get().var.user.userId)
}
```

```ts
// route
import { getCurrentUserId } from './service/userService'

app.get('/userinfo', c => {
  return c.json(getCurrentUser())
})
```

## 注意事项

- 仅在请求生命周期内有效，跨请求不可用
- 建议不要滥用，更多是为了简化业务层的 context 传递
- 若公共方法，还是建议显式传递 context

<!-- Refs -->

[npm-version-src]: https://img.shields.io/npm/v/@seepine/hono-global-context
[npm-version-href]: https://www.npmjs.com/package/@seepine/hono-global-context
[npm-downloads-src]: https://img.shields.io/npm/dm/@seepine/hono-global-context
[npm-downloads-href]: https://npmjs.com/package/@seepine/hono-global-context
[bundle-src]: https://img.shields.io/bundlephobia/minzip/@seepine/hono-global-context
[bundle-href]: https://bundlephobia.com/result?p=@seepine/hono-global-context
[license-src]: https://img.shields.io/github/license/seepine/hono-global-context.svg
[license-href]: https://github.com/seepine/hono-global-context/blob/main/LICENSE
npm package: @seepine/hono-logger
Description: logger for hono
Author: seepine
Latest version: 0.1.1

# @seepine/hono-logger

[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![bundle][bundle-src]][bundle-href]
[![License][license-src]][license-href]

适用于 Hono 框架的日志中间件，基于 pino 实现，支持请求日志、请求 ID 跟踪等功能。

## 特性

- 🚀 基于 pino 实现，性能优异
- 📝 支持请求日志记录
- 🔍 支持请求 ID 跟踪
- ⚙️ 高度可配置
- 🎨 开发环境下美化输出

## 安装

```bash
# npm
npm install @seepine/hono-logger

# yarn
yarn add @seepine/hono-logger

# pnpm
pnpm add @seepine/hono-logger

# bun
bun add @seepine/hono-logger
```

## 使用

### 基础用法

```typescript
import { Hono } from 'hono'
import { loggerMiddleware } from '@seepine/hono-logger'

const app = new Hono()

// 使用默认配置
app.use('*', loggerMiddleware())

// 或者使用自定义配置
app.use(
  '*',
  loggerMiddleware({
    level: 'debug',
  }),
)
```

### 配置选项

```typescript
export type HonoLoggerOptions = {
  // 日志级别
  level?: 'error' | 'warn' | 'info' | 'debug' | 'trace'

  // 是否在日志中记录请求 ID
  logWithRequestId?: boolean // 默认: true

  // 是否启用请求日志
  requestLogEnable?: boolean // 默认: true

  // 请求 ID 的请求头名称
  requestIdHeaderName?: string // 默认: 'X-Request-Id'

  // 响应时间的请求头名称
  responseTimeHeaderName?: string // 默认: 'X-Response-Time'

  // 自定义请求 ID 生成器
  generator?: (c: Context) => string

  // 自定义获取 IP 地址的方法
  getIpAddress?: (c: Context) => string

  // 从请求头获取 IP 地址的字段列表
  getIpFromHeaders?: string[] // 默认: ['X-Real-Ip', 'X-Forwarded-For']

  // pino 输出流
  stream?: pino.DestinationStream

  // pino-pretty 配置选项
  prettyOptions?: PrettyOptions
}
```

### Bun 运行时获取 IP 地址示例

```typescript
import { getConnInfo } from 'hono/bun'

app.use(
  '*',
  loggerMiddleware({
    getIpAddress: c => {
      const info = getConnInfo(c)
      return info.remote.address
    },
  }),
)
```

<!-- Refs -->

[npm-version-src]: https://img.shields.io/npm/v/@seepine/hono-logger
[npm-version-href]: https://www.npmjs.com/package/@seepine/hono-logger
[npm-downloads-src]: https://img.shields.io/npm/dm/@seepine/hono-logger
[npm-downloads-href]: https://npmjs.com/package/@seepine/hono-logger
[bundle-src]: https://img.shields.io/bundlephobia/minzip/@seepine/hono-logger
[bundle-href]: https://bundlephobia.com/result?p=@seepine/hono-logger
[license-src]: https://img.shields.io/github/license/seepine/hono-logger.svg
[license-href]: https://github.com/seepine/hono-logger/blob/main/LICENSE
npm package: @seepine/mcp-terminal
Description: Terminal Mcp Server
Author: seepine
Latest version: 0.2.0

# Terminal Mcp Server

提供执行命令mcp，方便 openclaw、picoclaw 等各机器人使用

> 请注意，命令执行有一定风险，请尽量在沙箱环境或你的机器人部署在 docker 容器中使用，避免造成损失

## Tools

- get_systeminfo: 获取系统信息
- exec_command: 执行命令

## Mcp Config

```json
{
  "mcpServers": {
    "mcp-terminal": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@seepine/mcp-terminal"],
      // 可选，设置默认执行目录
      "env": {
        "DEFAULT_CWD": "/Users/your_name/workspace"
      }
    }
  }
}
```
npm package: @seeplusplus/ngx-utils-cookies-port
Description: This library is a fork of [`ngx-utils-cookies-port`](https://github.com/junekpavel/ngx-utils-cookies-port), which is a  port of [`@ngx-utils/cookies`](https://github.com/ngx-utils/cookies). Created because `ngx-utils-cookies-port` hasn't been updated sinc
Latest version: 2.2.1

# ngx-utils-cookies-port

This library is a fork of [`ngx-utils-cookies-port`](https://github.com/junekpavel/ngx-utils-cookies-port), which is a 
port of [`@ngx-utils/cookies`](https://github.com/ngx-utils/cookies).
Created because `ngx-utils-cookies-port` hasn't been updated since Angular 9.

## Installation

```bash
npm install @seeplusplus/ngx-utils-cookies-port --save
```

## Usage
Follow [original documentation](https://github.com/ngx-utils/cookies#readme).

```typescript
import {BrowserCookiesModule} from 'ngx-utils-cookies-port';
import {CookiesService} from 'ngx-utils-cookies-port';

```

## Disclaimer

I'm not the original author of the library nor the source code. The source code was taken (almost unmodified)
from [`ngx-utils-cookies-port`](https://github.com/junekpavel/ngx-utils-cookies-port) which was derived
from [`@ngx-utils/cookies`](https://github.com/ngx-utils/cookies).
npm package: @seepossible/react-pg-bar
Description: Seepossible Progress Bar Component
Author: ankitseepossible
Latest version: 1.0.3

# @seepossible/react-pg-bar

> Seepossible Progress Bar Component

[![NPM](https://img.shields.io/npm/v/@seepossible/react-pg-bar.svg)](https://www.npmjs.com/package/@seepossible/react-pg-bar) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save @seepossible/react-pg-bar
```

## Usage

```jsx
import React, { Component } from 'react'

import MyComponent from '@seepossible/react-pg-bar'
import '@seepossible/react-pg-bar/dist/index.css'

class Example extends Component {
  render() {
    return <MyComponent />
  }
}
```

## License

MIT © [ankitseepossible](https://github.com/ankitseepossible)
npm package: @seeqdev/test01
Description: A library that allows you to build native UIs ... TODO
Author: Seeq
Latest version: 0.0.3

# Seeq Qomponents - UNDER CONSTRUCTION

## Development

Don't forget to add the component to your `index.ts` exports if you want the library to export the component!

To develop a qomponent and use the benefits of hot-reload for quick preview you can run:

```
npm run dev
```

This will start Ladle and watch for changes in the qomponents directory.

### Testing

```
npm run test
```

... or IntelliJ

### Building

Builds happen via gradle.