kimi-code-usage 0.1.3__tar.gz → 0.1.4__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.
- kimi_code_usage-0.1.4/.github/workflows/ci.yml +42 -0
- kimi_code_usage-0.1.4/AGENTS.md +76 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/PKG-INFO +10 -2
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/README.md +9 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/README.zh.md +9 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/class_index.html +37 -37
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/function_index.html +112 -112
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/index.html +27 -27
- kimi_code_usage-0.1.4/htmlcov/status.json +1 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_581a990e2fe7e610___init___py.html +2 -2
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_581a990e2fe7e610_config_py.html +203 -204
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_581a990e2fe7e610_main_py.html +62 -62
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_581a990e2fe7e610_mcp_py.html +26 -26
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_aaf3485d2243f1af___init___py.html +23 -23
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_aaf3485d2243f1af_anthropic_py.html +74 -73
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_aaf3485d2243f1af_kimi_py.html +161 -157
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_aaf3485d2243f1af_openai_py.html +79 -77
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/z_aaf3485d2243f1af_openrouter_py.html +365 -364
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/pyproject.toml +37 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/config.py +18 -19
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/main.py +18 -18
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/mcp.py +1 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/providers/__init__.py +17 -17
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/providers/anthropic.py +22 -21
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/providers/kimi.py +58 -11
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/providers/openai.py +5 -3
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/providers/openrouter.py +8 -7
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/conftest.py +2 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_config.py +31 -30
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_main.py +50 -48
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_mcp.py +17 -15
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_provider_anthropic.py +6 -3
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_provider_kimi.py +8 -6
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_provider_openai.py +8 -5
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_provider_openrouter.py +5 -3
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/test_providers_init.py +15 -12
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/uv.lock +441 -1
- kimi_code_usage-0.1.3/htmlcov/status.json +0 -1
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/.claude/settings.local.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/.env.example +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/.gitignore +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/kimi-code-usage.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/plans/2026-05-09-pace-indicator.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/plans/2026-05-14-pace-theme-thresholds.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/plans/2026-06-10-multi-llm-quota.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/plans/2026-06-10-vscode-extension-ts-strictness.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/specs/2026-05-09-pace-indicator-design.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/specs/2026-05-14-pace-theme-thresholds-design.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/specs/2026-06-10-multi-llm-quota-design.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/specs/2026-06-10-vscode-extension-multi-provider-design.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/docs/superpowers/specs/2026-06-10-vscode-extension-ts-refactor-design.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/.gitignore +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/coverage_html_cb_dd2e7eb5.js +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/favicon_32_cb_c827f16f.png +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/keybd_closed_cb_900cfef5.png +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/htmlcov/style_cb_4667309f.css +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/kimi_usage.code-workspace +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/requirements.txt +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/src/kimi_code_usage/__init__.py +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/tests/__init__.py +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/.claude/settings.local.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/.github/workflows/ci.yml +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/.prettierignore +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/.prettierrc.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/.vscodeignore +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/LICENSE +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/README.md +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/assets/icon.png +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/assets/moon.svg +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/eslint.config.mjs +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.de.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.en.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.es.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.fr.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.it.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.ja.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.ko.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.pt.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.ru.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/l10n/bundle.l10n.zh-cn.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/package.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/scripts/copy-assets.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/__mocks__/vscode.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/api.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/api.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/apiCache.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/apiCache.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/config.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/config.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/extension.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/extension.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/historyPanel.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/historyPanel.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/i18n.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/i18n.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/notifier.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/notifier.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/pace.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/pace.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/predict.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/predict.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/statusBar.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/statusBar.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/storage-unlink.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/storage.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/storage.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/types.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/src/vscode-mock.test.ts +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/tsconfig.eslint.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/tsconfig.json +0 -0
- {kimi_code_usage-0.1.3 → kimi_code_usage-0.1.4}/vscode-extension/vitest.config.ts +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
timeout-minutes: 10
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v5
|
|
19
|
+
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
run: uv python install 3.12
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: uv sync --dev
|
|
25
|
+
|
|
26
|
+
- name: Run ruff check
|
|
27
|
+
run: uv run ruff check src/
|
|
28
|
+
|
|
29
|
+
- name: Run mypy
|
|
30
|
+
run: uv run mypy src/ || true
|
|
31
|
+
- name: Run security scan (bandit)
|
|
32
|
+
run: uv tool run bandit -r src/ || true
|
|
33
|
+
|
|
34
|
+
- name: Run dependency audit
|
|
35
|
+
run: uv audit || true
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
- name: Run tests with coverage
|
|
39
|
+
run: uv run pytest --cov --cov-report=term-missing tests/
|
|
40
|
+
|
|
41
|
+
- name: Enforce coverage threshold
|
|
42
|
+
run: uv run coverage report
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Agent 协作指南
|
|
2
|
+
|
|
3
|
+
本文件记录本项目的开发流程、发布经验和常见陷阱,供后续 AI/人类协作者参考。
|
|
4
|
+
|
|
5
|
+
## 发布流程(Release Checklist)
|
|
6
|
+
|
|
7
|
+
### 1. 前置条件
|
|
8
|
+
|
|
9
|
+
- 所有变更已合并到 `main`
|
|
10
|
+
- 测试全部通过且覆盖率达到预期
|
|
11
|
+
- `pyproject.toml` 中的版本号已更新
|
|
12
|
+
|
|
13
|
+
### 2. 版本号与标签
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
rtk git add pyproject.toml
|
|
17
|
+
rtk git commit -m "chore: bump version to X.Y.Z
|
|
18
|
+
|
|
19
|
+
chore: 将版本号提升至 X.Y.Z"
|
|
20
|
+
rtk git tag vX.Y.Z
|
|
21
|
+
rtk git push origin main --tags
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 3. 构建与发布
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 清理旧版本构建产物
|
|
28
|
+
rm -f dist/kimi_code_usage-*
|
|
29
|
+
|
|
30
|
+
# 构建 sdist 和 wheel
|
|
31
|
+
uv build
|
|
32
|
+
|
|
33
|
+
# 发布到 PyPI
|
|
34
|
+
# 注意:uv publish 不会自动读取 ~/.pypirc,需要通过环境变量传入凭据
|
|
35
|
+
UV_PUBLISH_USERNAME=__token__ UV_PUBLISH_PASSWORD=<your-pypi-token> uv publish dist/*
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 4. 验证
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
uv run -- python -c "import urllib.request, json; print(json.load(urllib.request.urlopen('https://pypi.org/pypi/kimi-code-usage/json'))['info']['version'])"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 已知陷阱
|
|
45
|
+
|
|
46
|
+
### uv publish 不读取 ~/.pypirc
|
|
47
|
+
|
|
48
|
+
`uv publish` 当前版本不会自动读取 `~/.pypirc` 中的用户名/密码配置。即使 `~/.pypirc` 已正确配置,也必须通过以下方式之一提供凭据:
|
|
49
|
+
|
|
50
|
+
- 环境变量:`UV_PUBLISH_USERNAME` 和 `UV_PUBLISH_PASSWORD`
|
|
51
|
+
- 命令行参数:`--username` 和 `--password`
|
|
52
|
+
|
|
53
|
+
### dist/ 目录残留旧版本
|
|
54
|
+
|
|
55
|
+
`uv build` 不会自动清理 `dist/` 中的旧文件。如果目录中存在旧版本(如 `0.1.2`)的 wheel/tar.gz,`uv publish dist/*` 会尝试上传这些旧文件并导致冲突。发布前务必清理:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
rm -f dist/kimi_code_usage-*
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 版本号与 git tag 必须一致
|
|
62
|
+
|
|
63
|
+
PyPI 包版本来自 `pyproject.toml`,git tag 用于标记代码状态。两者应保持一致(如 `v0.1.3` 对应 `version = "0.1.3"`)。
|
|
64
|
+
|
|
65
|
+
## 测试与覆盖率
|
|
66
|
+
|
|
67
|
+
- 运行全部测试:`uv run pytest`
|
|
68
|
+
- 带覆盖率检查:`uv run pytest --cov=kimi_code_usage --cov-report=term-missing`
|
|
69
|
+
- 目标覆盖率:100%
|
|
70
|
+
|
|
71
|
+
## Git 工作流
|
|
72
|
+
|
|
73
|
+
- 使用 `git-feature` skill 创建功能分支
|
|
74
|
+
- 按文件粒度提交,遵循 conventional commits
|
|
75
|
+
- 通过 PR 合并到 `main`
|
|
76
|
+
- 合并后删除本地和远程 feature 分支
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kimi-code-usage
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: A curated Kimi Coding Plan usage monitor with aesthetic CLI and MCP server.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Golden0Voyager/kimi-code-usage
|
|
6
6
|
Project-URL: Repository, https://github.com/Golden0Voyager/kimi-code-usage
|
|
@@ -40,7 +40,15 @@ Description-Content-Type: text/markdown
|
|
|
40
40
|
|
|
41
41
|
In the era of "Vibecoding," transparency of resources is a prerequisite for flow. **Kimi Code Usage** is a meticulously crafted toolchain — three components, one soul.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
> **⚠️ 重要:API Key 类型说明**
|
|
44
|
+
>
|
|
45
|
+
> 本工具查询的是 **Kimi Code 平台(Coding Plan 会员)** 的用量数据。你需要的是 **Kimi Code 控制台** 创建的 API Key(格式 `sk-kimi-xxx`),
|
|
46
|
+
> **不是** Kimi 开放平台(platform.kimi.com)的 API Key(格式 `sk-xxx`)。两种 Key 不互通。
|
|
47
|
+
>
|
|
48
|
+
> 获取方式:登录 Kimi Code 控制台 → 创建 API Key → 设置环境变量 `KIMI_API_KEY`。
|
|
49
|
+
> 详见 [Kimi Code 文档](https://www.kimi.com/code/docs/)。
|
|
50
|
+
|
|
51
|
+
**Prerequisite:** A [Kimi Coding Plan](https://api.kimi.com/coding/v1) API Key (`sk-kimi-xxx`), set as `KIMI_API_KEY` in your environment or `.env` file.
|
|
44
52
|
|
|
45
53
|
---
|
|
46
54
|
|
|
@@ -22,7 +22,15 @@
|
|
|
22
22
|
|
|
23
23
|
In the era of "Vibecoding," transparency of resources is a prerequisite for flow. **Kimi Code Usage** is a meticulously crafted toolchain — three components, one soul.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
> **⚠️ 重要:API Key 类型说明**
|
|
26
|
+
>
|
|
27
|
+
> 本工具查询的是 **Kimi Code 平台(Coding Plan 会员)** 的用量数据。你需要的是 **Kimi Code 控制台** 创建的 API Key(格式 `sk-kimi-xxx`),
|
|
28
|
+
> **不是** Kimi 开放平台(platform.kimi.com)的 API Key(格式 `sk-xxx`)。两种 Key 不互通。
|
|
29
|
+
>
|
|
30
|
+
> 获取方式:登录 Kimi Code 控制台 → 创建 API Key → 设置环境变量 `KIMI_API_KEY`。
|
|
31
|
+
> 详见 [Kimi Code 文档](https://www.kimi.com/code/docs/)。
|
|
32
|
+
|
|
33
|
+
**Prerequisite:** A [Kimi Coding Plan](https://api.kimi.com/coding/v1) API Key (`sk-kimi-xxx`), set as `KIMI_API_KEY` in your environment or `.env` file.
|
|
26
34
|
|
|
27
35
|
---
|
|
28
36
|
|
|
@@ -22,7 +22,15 @@
|
|
|
22
22
|
|
|
23
23
|
在"直觉编程"时代,资源的透明度是进入心流状态的前提。**Kimi Code Usage** 是一套精心打磨的工具链 — 三种形态,一个灵魂。
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
> **⚠️ 重要:API Key 类型说明**
|
|
26
|
+
>
|
|
27
|
+
> 本工具查询的是 **Kimi Code 平台(Coding Plan 会员)** 的用量数据。你需要的是 **Kimi Code 控制台** 创建的 API Key(格式 `sk-kimi-xxx`),
|
|
28
|
+
> **不是** Kimi 开放平台(platform.kimi.com)的 API Key(格式 `sk-xxx`)。两种 Key 不互通。
|
|
29
|
+
>
|
|
30
|
+
> 获取方式:登录 Kimi Code 控制台 → 创建 API Key → 设置环境变量 `KIMI_API_KEY`。
|
|
31
|
+
> 详见 [Kimi Code 文档](https://www.kimi.com/code/docs/)。
|
|
32
|
+
|
|
33
|
+
**统一前提:** 在环境变量或 `.env` 文件中设置 `KIMI_API_KEY`([Kimi Coding Plan](https://api.kimi.com/coding/v1) API Key,格式 `sk-kimi-xxx`)。
|
|
26
34
|
|
|
27
35
|
---
|
|
28
36
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<header>
|
|
12
12
|
<div class="content">
|
|
13
13
|
<h1>Coverage report:
|
|
14
|
-
<span class="pc_cov">
|
|
14
|
+
<span class="pc_cov">100%</span>
|
|
15
15
|
</h1>
|
|
16
16
|
<aside id="help_panel_wrapper">
|
|
17
17
|
<input id="help_panel_state" type="checkbox">
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
</h2>
|
|
56
56
|
<p class="text">
|
|
57
57
|
<a class="nav" href="https://coverage.readthedocs.io/en/7.14.1">coverage.py v7.14.1</a>,
|
|
58
|
-
created at 2026-06-
|
|
58
|
+
created at 2026-06-20 20:05 +0800
|
|
59
59
|
</p>
|
|
60
60
|
</div>
|
|
61
61
|
</header>
|
|
@@ -85,8 +85,8 @@
|
|
|
85
85
|
<td data-ratio="0 0">100%</td>
|
|
86
86
|
</tr>
|
|
87
87
|
<tr class="region">
|
|
88
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
89
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
88
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t9">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>config.py</a></td>
|
|
89
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t9"><data value='ProviderConfig'>ProviderConfig</data></a></td>
|
|
90
90
|
<td class="spacer"> </td>
|
|
91
91
|
<td>0</td>
|
|
92
92
|
<td>0</td>
|
|
@@ -95,8 +95,8 @@
|
|
|
95
95
|
<td data-ratio="0 0">100%</td>
|
|
96
96
|
</tr>
|
|
97
97
|
<tr class="region">
|
|
98
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
99
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
98
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t16">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>config.py</a></td>
|
|
99
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t16"><data value='AppConfig'>AppConfig</data></a></td>
|
|
100
100
|
<td class="spacer"> </td>
|
|
101
101
|
<td>1</td>
|
|
102
102
|
<td>0</td>
|
|
@@ -105,44 +105,44 @@
|
|
|
105
105
|
<td data-ratio="1 1">100%</td>
|
|
106
106
|
</tr>
|
|
107
107
|
<tr class="region">
|
|
108
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
109
|
-
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#
|
|
108
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t31">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>config.py</a></td>
|
|
109
|
+
<td class="name"><a href="z_581a990e2fe7e610_config_py.html#t31"><data value='ConfigResolver'>ConfigResolver</data></a></td>
|
|
110
110
|
<td class="spacer"> </td>
|
|
111
111
|
<td>70</td>
|
|
112
|
-
<td>
|
|
112
|
+
<td>0</td>
|
|
113
113
|
<td>0</td>
|
|
114
114
|
<td class="spacer"> </td>
|
|
115
|
-
<td data-ratio="
|
|
115
|
+
<td data-ratio="70 70">100%</td>
|
|
116
116
|
</tr>
|
|
117
117
|
<tr class="region">
|
|
118
118
|
<td class="name"><a href="z_581a990e2fe7e610_config_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>config.py</a></td>
|
|
119
119
|
<td class="name"><a href="z_581a990e2fe7e610_config_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
120
120
|
<td class="spacer"> </td>
|
|
121
|
-
<td>
|
|
122
|
-
<td>
|
|
121
|
+
<td>50</td>
|
|
122
|
+
<td>0</td>
|
|
123
123
|
<td>0</td>
|
|
124
124
|
<td class="spacer"> </td>
|
|
125
|
-
<td data-ratio="50
|
|
125
|
+
<td data-ratio="50 50">100%</td>
|
|
126
126
|
</tr>
|
|
127
127
|
<tr class="region">
|
|
128
128
|
<td class="name"><a href="z_581a990e2fe7e610_main_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>main.py</a></td>
|
|
129
129
|
<td class="name"><a href="z_581a990e2fe7e610_main_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
130
130
|
<td class="spacer"> </td>
|
|
131
|
-
<td>
|
|
132
|
-
<td>
|
|
131
|
+
<td>657</td>
|
|
132
|
+
<td>0</td>
|
|
133
133
|
<td>14</td>
|
|
134
134
|
<td class="spacer"> </td>
|
|
135
|
-
<td data-ratio="
|
|
135
|
+
<td data-ratio="657 657">100%</td>
|
|
136
136
|
</tr>
|
|
137
137
|
<tr class="region">
|
|
138
138
|
<td class="name"><a href="z_581a990e2fe7e610_mcp_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>mcp.py</a></td>
|
|
139
139
|
<td class="name"><a href="z_581a990e2fe7e610_mcp_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
140
140
|
<td class="spacer"> </td>
|
|
141
|
-
<td>
|
|
142
|
-
<td>
|
|
141
|
+
<td>121</td>
|
|
142
|
+
<td>0</td>
|
|
143
143
|
<td>0</td>
|
|
144
144
|
<td class="spacer"> </td>
|
|
145
|
-
<td data-ratio="
|
|
145
|
+
<td data-ratio="121 121">100%</td>
|
|
146
146
|
</tr>
|
|
147
147
|
<tr class="region">
|
|
148
148
|
<td class="name"><a href="z_aaf3485d2243f1af___init___py.html#t8">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>__init__.py</a></td>
|
|
@@ -188,25 +188,25 @@
|
|
|
188
188
|
<td class="name"><a href="z_aaf3485d2243f1af___init___py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>__init__.py</a></td>
|
|
189
189
|
<td class="name"><a href="z_aaf3485d2243f1af___init___py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
190
190
|
<td class="spacer"> </td>
|
|
191
|
-
<td>
|
|
191
|
+
<td>71</td>
|
|
192
192
|
<td>0</td>
|
|
193
193
|
<td>0</td>
|
|
194
194
|
<td class="spacer"> </td>
|
|
195
|
-
<td data-ratio="
|
|
195
|
+
<td data-ratio="71 71">100%</td>
|
|
196
196
|
</tr>
|
|
197
197
|
<tr class="region">
|
|
198
198
|
<td class="name"><a href="z_aaf3485d2243f1af_anthropic_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>anthropic.py</a></td>
|
|
199
199
|
<td class="name"><a href="z_aaf3485d2243f1af_anthropic_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
200
200
|
<td class="spacer"> </td>
|
|
201
|
-
<td>
|
|
201
|
+
<td>19</td>
|
|
202
202
|
<td>0</td>
|
|
203
203
|
<td>0</td>
|
|
204
204
|
<td class="spacer"> </td>
|
|
205
|
-
<td data-ratio="
|
|
205
|
+
<td data-ratio="19 19">100%</td>
|
|
206
206
|
</tr>
|
|
207
207
|
<tr class="region">
|
|
208
|
-
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html#
|
|
209
|
-
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html#
|
|
208
|
+
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html#t67">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>kimi.py</a></td>
|
|
209
|
+
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html#t67"><data value='KimiRow'>KimiRow</data></a></td>
|
|
210
210
|
<td class="spacer"> </td>
|
|
211
211
|
<td>5</td>
|
|
212
212
|
<td>0</td>
|
|
@@ -218,31 +218,31 @@
|
|
|
218
218
|
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>kimi.py</a></td>
|
|
219
219
|
<td class="name"><a href="z_aaf3485d2243f1af_kimi_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
220
220
|
<td class="spacer"> </td>
|
|
221
|
-
<td>
|
|
221
|
+
<td>118</td>
|
|
222
222
|
<td>0</td>
|
|
223
223
|
<td>0</td>
|
|
224
224
|
<td class="spacer"> </td>
|
|
225
|
-
<td data-ratio="
|
|
225
|
+
<td data-ratio="118 118">100%</td>
|
|
226
226
|
</tr>
|
|
227
227
|
<tr class="region">
|
|
228
228
|
<td class="name"><a href="z_aaf3485d2243f1af_openai_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>openai.py</a></td>
|
|
229
229
|
<td class="name"><a href="z_aaf3485d2243f1af_openai_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
230
230
|
<td class="spacer"> </td>
|
|
231
|
-
<td>
|
|
231
|
+
<td>42</td>
|
|
232
232
|
<td>0</td>
|
|
233
233
|
<td>0</td>
|
|
234
234
|
<td class="spacer"> </td>
|
|
235
|
-
<td data-ratio="
|
|
235
|
+
<td data-ratio="42 42">100%</td>
|
|
236
236
|
</tr>
|
|
237
237
|
<tr class="region">
|
|
238
238
|
<td class="name"><a href="z_aaf3485d2243f1af_openrouter_py.html">src<span class="sep">/</span>kimi_code_usage<span class="sep">/</span>providers<span class="sep">/</span>openrouter.py</a></td>
|
|
239
239
|
<td class="name"><a href="z_aaf3485d2243f1af_openrouter_py.html"><data value=''><span class='no-noun'>(no class)</span></data></a></td>
|
|
240
240
|
<td class="spacer"> </td>
|
|
241
|
-
<td>
|
|
242
|
-
<td>8</td>
|
|
241
|
+
<td>167</td>
|
|
243
242
|
<td>0</td>
|
|
243
|
+
<td>4</td>
|
|
244
244
|
<td class="spacer"> </td>
|
|
245
|
-
<td data-ratio="
|
|
245
|
+
<td data-ratio="167 167">100%</td>
|
|
246
246
|
</tr>
|
|
247
247
|
</tbody>
|
|
248
248
|
<tfoot>
|
|
@@ -250,11 +250,11 @@
|
|
|
250
250
|
<td class="name">Total</td>
|
|
251
251
|
<td class="name"> </td>
|
|
252
252
|
<td class="spacer"> </td>
|
|
253
|
-
<td>
|
|
254
|
-
<td>
|
|
255
|
-
<td>
|
|
253
|
+
<td>1321</td>
|
|
254
|
+
<td>0</td>
|
|
255
|
+
<td>18</td>
|
|
256
256
|
<td class="spacer"> </td>
|
|
257
|
-
<td data-ratio="
|
|
257
|
+
<td data-ratio="1321 1321">100%</td>
|
|
258
258
|
</tr>
|
|
259
259
|
</tfoot>
|
|
260
260
|
</table>
|
|
@@ -266,7 +266,7 @@
|
|
|
266
266
|
<div class="content">
|
|
267
267
|
<p>
|
|
268
268
|
<a class="nav" href="https://coverage.readthedocs.io/en/7.14.1">coverage.py v7.14.1</a>,
|
|
269
|
-
created at 2026-06-
|
|
269
|
+
created at 2026-06-20 20:05 +0800
|
|
270
270
|
</p>
|
|
271
271
|
</div>
|
|
272
272
|
<aside class="hidden">
|