goofish-cli 0.1.0__tar.gz
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.
- goofish_cli-0.1.0/.env.example +11 -0
- goofish_cli-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +54 -0
- goofish_cli-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +22 -0
- goofish_cli-0.1.0/.github/pull_request_template.md +26 -0
- goofish_cli-0.1.0/.github/workflows/ci.yml +57 -0
- goofish_cli-0.1.0/.github/workflows/publish.yml +42 -0
- goofish_cli-0.1.0/.gitignore +49 -0
- goofish_cli-0.1.0/CHANGELOG.md +32 -0
- goofish_cli-0.1.0/CONTRIBUTING.md +59 -0
- goofish_cli-0.1.0/LICENSE +190 -0
- goofish_cli-0.1.0/NOTICE +11 -0
- goofish_cli-0.1.0/PKG-INFO +279 -0
- goofish_cli-0.1.0/README.md +242 -0
- goofish_cli-0.1.0/docs/architecture.md +89 -0
- goofish_cli-0.1.0/docs/compliance.md +43 -0
- goofish_cli-0.1.0/docs/mcp-setup.md +69 -0
- goofish_cli-0.1.0/examples/README.md +8 -0
- goofish_cli-0.1.0/examples/publish_from_folder.py +70 -0
- goofish_cli-0.1.0/examples/watch_to_autoreply.sh +26 -0
- goofish_cli-0.1.0/pyproject.toml +66 -0
- goofish_cli-0.1.0/src/goofish_cli/__init__.py +1 -0
- goofish_cli-0.1.0/src/goofish_cli/cli.py +119 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/auth/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/auth/login.py +66 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/auth/reset_guard.py +16 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/auth/status.py +40 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/category/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/category/recommend.py +64 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/item/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/item/delete.py +32 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/item/get.py +34 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/item/publish.py +175 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/location/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/location/default.py +40 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/media/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/media/upload.py +53 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/message/__init__.py +0 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/message/history.py +23 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/message/send.py +102 -0
- goofish_cli-0.1.0/src/goofish_cli/commands/message/watch.py +58 -0
- goofish_cli-0.1.0/src/goofish_cli/core/__init__.py +26 -0
- goofish_cli-0.1.0/src/goofish_cli/core/errors.py +31 -0
- goofish_cli-0.1.0/src/goofish_cli/core/guard.py +63 -0
- goofish_cli-0.1.0/src/goofish_cli/core/limiter.py +60 -0
- goofish_cli-0.1.0/src/goofish_cli/core/mtop.py +131 -0
- goofish_cli-0.1.0/src/goofish_cli/core/output.py +82 -0
- goofish_cli-0.1.0/src/goofish_cli/core/registry.py +78 -0
- goofish_cli-0.1.0/src/goofish_cli/core/session.py +88 -0
- goofish_cli-0.1.0/src/goofish_cli/core/sign.py +37 -0
- goofish_cli-0.1.0/src/goofish_cli/core/strategy.py +10 -0
- goofish_cli-0.1.0/src/goofish_cli/core/token.py +88 -0
- goofish_cli-0.1.0/src/goofish_cli/core/ws.py +493 -0
- goofish_cli-0.1.0/src/goofish_cli/mcp_server.py +56 -0
- goofish_cli-0.1.0/src/goofish_cli/static/goofish_js_version_2.js +568 -0
- goofish_cli-0.1.0/tests/__init__.py +0 -0
- goofish_cli-0.1.0/tests/test_guard.py +46 -0
- goofish_cli-0.1.0/tests/test_limiter.py +29 -0
- goofish_cli-0.1.0/tests/test_mtop.py +40 -0
- goofish_cli-0.1.0/tests/test_publish_payload.py +70 -0
- goofish_cli-0.1.0/tests/test_registry.py +33 -0
- goofish_cli-0.1.0/tests/test_sign.py +29 -0
- goofish_cli-0.1.0/tests/test_ws_codec.py +127 -0
- goofish_cli-0.1.0/uv.lock +1291 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: 报告一个 bug
|
|
3
|
+
labels: [bug]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: version
|
|
7
|
+
attributes:
|
|
8
|
+
label: goofish-cli 版本
|
|
9
|
+
placeholder: "运行 `goofish version` 获取"
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: dropdown
|
|
13
|
+
id: os
|
|
14
|
+
attributes:
|
|
15
|
+
label: 操作系统
|
|
16
|
+
options: [macOS, Linux, Windows, WSL, 其他]
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: input
|
|
20
|
+
id: py
|
|
21
|
+
attributes:
|
|
22
|
+
label: Python 版本
|
|
23
|
+
placeholder: "3.11 / 3.12"
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: repro
|
|
28
|
+
attributes:
|
|
29
|
+
label: 复现步骤
|
|
30
|
+
description: 请给出最小复现命令(**不要粘贴 cookie**)
|
|
31
|
+
placeholder: |
|
|
32
|
+
1. `goofish auth login ...`
|
|
33
|
+
2. `goofish item get 12345`
|
|
34
|
+
3. 报错:...
|
|
35
|
+
validations:
|
|
36
|
+
required: true
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: expected
|
|
39
|
+
attributes:
|
|
40
|
+
label: 期望行为
|
|
41
|
+
- type: textarea
|
|
42
|
+
id: actual
|
|
43
|
+
attributes:
|
|
44
|
+
label: 实际行为(含报错栈)
|
|
45
|
+
render: shell
|
|
46
|
+
validations:
|
|
47
|
+
required: true
|
|
48
|
+
- type: checkboxes
|
|
49
|
+
id: sensitive
|
|
50
|
+
attributes:
|
|
51
|
+
label: 敏感信息检查
|
|
52
|
+
options:
|
|
53
|
+
- label: 我已经从日志/示例中去除了 cookie、token、_m_h5_tk 等敏感信息
|
|
54
|
+
required: true
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: 提个新功能 / 新命令
|
|
3
|
+
labels: [enhancement]
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: problem
|
|
7
|
+
attributes:
|
|
8
|
+
label: 要解决什么问题
|
|
9
|
+
placeholder: 现在没法 xxx;我在 yyy 场景下会被卡住
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: proposal
|
|
14
|
+
attributes:
|
|
15
|
+
label: 想要的接口 / 命令
|
|
16
|
+
placeholder: |
|
|
17
|
+
`goofish item list --status selling`
|
|
18
|
+
返回:[{itemId, title, price, updatedAt}]
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: alternatives
|
|
21
|
+
attributes:
|
|
22
|
+
label: 已考虑的替代方案
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
## 改动描述
|
|
2
|
+
<!-- 简述这个 PR 在做什么。一句话。 -->
|
|
3
|
+
|
|
4
|
+
## 动机 / 关联 issue
|
|
5
|
+
<!-- fix #xxx / close #yyy -->
|
|
6
|
+
|
|
7
|
+
## 改动类型
|
|
8
|
+
- [ ] bug 修复
|
|
9
|
+
- [ ] 新功能
|
|
10
|
+
- [ ] 重构(不改变外部行为)
|
|
11
|
+
- [ ] 文档
|
|
12
|
+
- [ ] CI / 构建
|
|
13
|
+
|
|
14
|
+
## 验证
|
|
15
|
+
<!-- 必填。贴出你做了什么真实验证。光单测绿不算完成。 -->
|
|
16
|
+
- [ ] `pytest` 全绿
|
|
17
|
+
- [ ] `ruff check src tests` 无告警
|
|
18
|
+
- [ ] 真实 CLI 跑通:`goofish <命令> ...` 的输出示例(粘贴在下方)
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
# 粘贴命令 + 真实输出
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 合规
|
|
25
|
+
- [ ] 我确认没有把 cookie / _m_h5_tk / 任何账号敏感信息 commit 进代码或测试 fixture
|
|
26
|
+
- [ ] 我确认本 PR 不会被用于欺诈、刷单、违反闲鱼用户协议等行为
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.11", "3.12"]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install Node.js (for execjs)
|
|
19
|
+
uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: "20"
|
|
22
|
+
|
|
23
|
+
- uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Install uv
|
|
28
|
+
run: pip install uv
|
|
29
|
+
|
|
30
|
+
- name: Install deps
|
|
31
|
+
run: |
|
|
32
|
+
uv venv
|
|
33
|
+
uv pip install -e ".[dev]"
|
|
34
|
+
|
|
35
|
+
- name: Lint (ruff)
|
|
36
|
+
run: uv run ruff check src tests
|
|
37
|
+
|
|
38
|
+
- name: Test (pytest)
|
|
39
|
+
run: uv run pytest -q
|
|
40
|
+
|
|
41
|
+
build:
|
|
42
|
+
needs: test
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
- uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.11"
|
|
49
|
+
- name: Build sdist + wheel
|
|
50
|
+
run: |
|
|
51
|
+
pip install build
|
|
52
|
+
python -m build
|
|
53
|
+
- name: Upload artifacts
|
|
54
|
+
uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist
|
|
57
|
+
path: dist/
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- uses: actions/setup-python@v5
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.11"
|
|
17
|
+
- name: Build sdist + wheel
|
|
18
|
+
run: |
|
|
19
|
+
pip install build
|
|
20
|
+
python -m build
|
|
21
|
+
- name: Upload dist
|
|
22
|
+
uses: actions/upload-artifact@v4
|
|
23
|
+
with:
|
|
24
|
+
name: dist
|
|
25
|
+
path: dist/
|
|
26
|
+
|
|
27
|
+
publish:
|
|
28
|
+
needs: build
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
environment:
|
|
31
|
+
name: pypi
|
|
32
|
+
url: https://pypi.org/project/goofish-cli/
|
|
33
|
+
permissions:
|
|
34
|
+
id-token: write
|
|
35
|
+
steps:
|
|
36
|
+
- name: Download dist
|
|
37
|
+
uses: actions/download-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: dist
|
|
40
|
+
path: dist/
|
|
41
|
+
- name: Publish to PyPI (Trusted Publisher)
|
|
42
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.egg
|
|
11
|
+
.pytest_cache/
|
|
12
|
+
.mypy_cache/
|
|
13
|
+
.ruff_cache/
|
|
14
|
+
.coverage
|
|
15
|
+
htmlcov/
|
|
16
|
+
|
|
17
|
+
# Virtual env
|
|
18
|
+
.venv/
|
|
19
|
+
venv/
|
|
20
|
+
env/
|
|
21
|
+
|
|
22
|
+
# Secrets — NEVER commit
|
|
23
|
+
.env
|
|
24
|
+
.env.*
|
|
25
|
+
!.env.example
|
|
26
|
+
cookies.json
|
|
27
|
+
*cookies*.json
|
|
28
|
+
credentials.json
|
|
29
|
+
|
|
30
|
+
# IDE
|
|
31
|
+
.vscode/
|
|
32
|
+
.idea/
|
|
33
|
+
.DS_Store
|
|
34
|
+
|
|
35
|
+
# Logs / runtime
|
|
36
|
+
*.log
|
|
37
|
+
logs/
|
|
38
|
+
*.db
|
|
39
|
+
*.sqlite
|
|
40
|
+
*.sqlite3
|
|
41
|
+
|
|
42
|
+
# OS
|
|
43
|
+
Thumbs.db
|
|
44
|
+
|
|
45
|
+
# Scratch
|
|
46
|
+
/tmp_*
|
|
47
|
+
*.tmp.json
|
|
48
|
+
/frames.jsonl
|
|
49
|
+
/ws_diag*.jsonl
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.0] - 2026-04-21
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- 初始发布。12 个命令覆盖闲鱼核心运营链路:
|
|
13
|
+
- `auth`:login / status / reset-guard
|
|
14
|
+
- `item`:get / publish / delete
|
|
15
|
+
- `media upload`、`category recommend`、`location default`
|
|
16
|
+
- `message`:watch / history / send(WebSocket IM)
|
|
17
|
+
- `message watch` 三类事件分类输出(JSONL):
|
|
18
|
+
- `event=message`:收到消息正文
|
|
19
|
+
- `event=read`:对方已读回执(带 msg_ids)
|
|
20
|
+
- `event=new_msg`:轻量新消息通知(无正文,需 history 拉取)
|
|
21
|
+
- WebSocket 自动重连 + 指数退避
|
|
22
|
+
- 全局速率限制(令牌桶 1 写/分钟)+ RGV587 熔断器
|
|
23
|
+
- MCP server:`goofish-mcp` 同一命令集自动暴露给 Claude Code / Cursor / Codex
|
|
24
|
+
- 统一输出契约 `--format json/yaml/table/md/csv`
|
|
25
|
+
- 29 个单测
|
|
26
|
+
|
|
27
|
+
### Notes
|
|
28
|
+
- 本版本需要用户手动从浏览器导入 cookie(含 `unb` / `_m_h5_tk` / `x5sec`)
|
|
29
|
+
- 遇到 `RGV587_ERROR` 风控时,需在浏览器完成滑块验证并**重新导出**带 `x5sec` 的 cookie
|
|
30
|
+
|
|
31
|
+
[Unreleased]: https://github.com/fancyboi999/goofish-cli/compare/v0.1.0...HEAD
|
|
32
|
+
[0.1.0]: https://github.com/fancyboi999/goofish-cli/releases/tag/v0.1.0
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Contributing to goofish-cli
|
|
2
|
+
|
|
3
|
+
感谢参与 👋。本文档讲清楚:环境搭建、加命令的流程、写测试和验证的要求、合规红线。
|
|
4
|
+
|
|
5
|
+
## 环境
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/fancyboi999/goofish-cli
|
|
9
|
+
cd goofish-cli
|
|
10
|
+
uv venv --python 3.11
|
|
11
|
+
uv pip install -e ".[dev]"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
运行时依赖 Node.js(`pyexecjs` 跑签名 JS):
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
brew install node # macOS
|
|
18
|
+
sudo apt install nodejs # Debian/Ubuntu
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
uv run pytest
|
|
25
|
+
uv run ruff check src tests
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
单测全绿 **不等于** 功能可用。下面三种情况是硬门槛:
|
|
29
|
+
|
|
30
|
+
1. **新增 HTTP 命令** — 必须用 `goofish auth login` 后的真实 cookie 跑一次对应 `goofish <cmd>`,并把 ret/data 的要点贴到 PR。
|
|
31
|
+
2. **新增 WebSocket 行为** — 必须让 `message watch` 跑起来并实际收到一条远端消息(或 send 到真实 cid),贴出现场日志。
|
|
32
|
+
3. **改签名 / 风控相关** — 必须手工跑 `goofish auth status` 验证旧 cookie 仍有效,以及新逻辑不触发 `RGV587_ERROR` / `FAIL_SYS_USER_VALIDATE`。
|
|
33
|
+
|
|
34
|
+
"我只是小改" 也不能跳过。参考 [真实验证准则](./docs/architecture.md#验证准则)。
|
|
35
|
+
|
|
36
|
+
## 加命令:典型流程
|
|
37
|
+
|
|
38
|
+
1. 在 `src/goofish_cli/commands/<namespace>/<cmd>.py` 写一个函数
|
|
39
|
+
2. 函数加 `@command(namespace="...", name="...", description="...", strategy=..., columns=[...], write=True/False)` 装饰器
|
|
40
|
+
3. 入参用 `typer.Option / typer.Argument` 声明
|
|
41
|
+
4. 返回 `dict` / `list[dict]`,格式由 `--format` 渲染
|
|
42
|
+
5. 写单测:纯函数逻辑(解析/编码/状态)用 pytest 覆盖。HTTP/WS 不要 mock 骨架,走真实 Session 的要标 `@pytest.mark.integration`。
|
|
43
|
+
6. 跑一次真实 CLI 验证,贴输出到 PR
|
|
44
|
+
|
|
45
|
+
新命令自动被 `registry()` 发现,同时对 MCP server 可见。**无需**改别的地方。
|
|
46
|
+
|
|
47
|
+
## 合规红线
|
|
48
|
+
|
|
49
|
+
- 任何情况下都**不要** commit cookie、`_m_h5_tk`、IM accessToken、可复现签名的 JSON fixture
|
|
50
|
+
- 新命令不得让工具更容易做:刷单、虚假交易、批量骚扰、规避平台封禁(例如"换设备重登"、"免滑块")
|
|
51
|
+
- 风控能用人工解(`goofish auth reset-guard` + 浏览器滑块)就用,别 PR "自动过滑块"、"自动生成 x5sec" 这类
|
|
52
|
+
- 写 demo 请脱敏:itemId 可公开,unb/cid 掩码处理
|
|
53
|
+
|
|
54
|
+
## 风格
|
|
55
|
+
|
|
56
|
+
- `ruff check` 零告警
|
|
57
|
+
- 函数/类名用英文。用户可见的 description、log、error 用简体中文
|
|
58
|
+
- 每个文件开头一行中文说明它在干啥
|
|
59
|
+
- 避免无用注释 / 无用 docstring
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for describing the origin of the Work and
|
|
141
|
+
reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Support. While redistributing the Work or
|
|
166
|
+
Derivative Works thereof, You may choose to offer, and charge a
|
|
167
|
+
fee for, acceptance of support, warranty, indemnity, or other
|
|
168
|
+
liability obligations and/or rights consistent with this License.
|
|
169
|
+
However, in accepting such obligations, You may act only on Your
|
|
170
|
+
own behalf and on Your sole responsibility, not on behalf of any
|
|
171
|
+
other Contributor, and only if You agree to indemnify, defend,
|
|
172
|
+
and hold each Contributor harmless for any liability incurred by,
|
|
173
|
+
or claims asserted against, such Contributor by reason of your
|
|
174
|
+
accepting any such warranty or support.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
Copyright 2026 fancy
|
|
179
|
+
|
|
180
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
|
+
you may not use this file except in compliance with the License.
|
|
182
|
+
You may obtain a copy of the License at
|
|
183
|
+
|
|
184
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
185
|
+
|
|
186
|
+
Unless required by applicable law or agreed to in writing, software
|
|
187
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
188
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
189
|
+
See the License for the specific language governing permissions and
|
|
190
|
+
limitations under the License.
|
goofish_cli-0.1.0/NOTICE
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
goofish-cli
|
|
2
|
+
Copyright 2026 fancy
|
|
3
|
+
|
|
4
|
+
This tool is provided for lawful automation of the user's own Goofish/Xianyu
|
|
5
|
+
(咸鱼) account. The authors explicitly disallow:
|
|
6
|
+
- Any use for fraud, scalping, or fake transactions
|
|
7
|
+
- Reselling this tool as a SaaS targeting the Goofish platform
|
|
8
|
+
- Any use that violates Goofish/Alibaba Terms of Service
|
|
9
|
+
|
|
10
|
+
Users are solely responsible for compliance with applicable laws and
|
|
11
|
+
platform policies.
|