kivault-cli 1.4.1__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.
Files changed (36) hide show
  1. kivault_cli-1.4.1/.gitignore +13 -0
  2. kivault_cli-1.4.1/PKG-INFO +240 -0
  3. kivault_cli-1.4.1/README.md +223 -0
  4. kivault_cli-1.4.1/kivault_cli/__init__.py +1 -0
  5. kivault_cli-1.4.1/kivault_cli/app.py +363 -0
  6. kivault_cli-1.4.1/kivault_cli/bundled_skills/kivault-cli/SKILL.md +97 -0
  7. kivault_cli-1.4.1/kivault_cli/bundled_skills/kivault-cli/agents/openai.yaml +4 -0
  8. kivault_cli-1.4.1/kivault_cli/bundled_skills/kivault-cli/references/command-guide.md +171 -0
  9. kivault_cli-1.4.1/kivault_cli/client.py +111 -0
  10. kivault_cli-1.4.1/kivault_cli/commands/__init__.py +1 -0
  11. kivault_cli-1.4.1/kivault_cli/commands/identity.py +49 -0
  12. kivault_cli-1.4.1/kivault_cli/commands/items/__init__.py +15 -0
  13. kivault_cli-1.4.1/kivault_cli/commands/items/create.py +202 -0
  14. kivault_cli-1.4.1/kivault_cli/commands/items/listing.py +108 -0
  15. kivault_cli-1.4.1/kivault_cli/commands/items/manage.py +152 -0
  16. kivault_cli-1.4.1/kivault_cli/commands/items/shared.py +39 -0
  17. kivault_cli-1.4.1/kivault_cli/commands/objects.py +255 -0
  18. kivault_cli-1.4.1/kivault_cli/commands/public.py +63 -0
  19. kivault_cli-1.4.1/kivault_cli/commands/tags.py +146 -0
  20. kivault_cli-1.4.1/kivault_cli/commands/vaults.py +141 -0
  21. kivault_cli-1.4.1/kivault_cli/errors.py +12 -0
  22. kivault_cli-1.4.1/kivault_cli/object_upload_tasks.py +97 -0
  23. kivault_cli-1.4.1/kivault_cli/output.py +57 -0
  24. kivault_cli-1.4.1/kivault_cli/settings.py +34 -0
  25. kivault_cli-1.4.1/kivault_cli/utils.py +90 -0
  26. kivault_cli-1.4.1/main.py +5 -0
  27. kivault_cli-1.4.1/pyproject.toml +43 -0
  28. kivault_cli-1.4.1/tests/conftest.py +22 -0
  29. kivault_cli-1.4.1/tests/test_api_errors.py +76 -0
  30. kivault_cli-1.4.1/tests/test_entrypoint.py +65 -0
  31. kivault_cli-1.4.1/tests/test_identity.py +153 -0
  32. kivault_cli-1.4.1/tests/test_item_objects.py +192 -0
  33. kivault_cli-1.4.1/tests/test_items.py +236 -0
  34. kivault_cli-1.4.1/tests/test_skill_install.py +97 -0
  35. kivault_cli-1.4.1/tests/test_upgrade.py +86 -0
  36. kivault_cli-1.4.1/tests/test_vaults.py +43 -0
@@ -0,0 +1,13 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # env
10
+ .env
11
+
12
+ # Virtual environments
13
+ .venv
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.4
2
+ Name: kivault-cli
3
+ Version: 1.4.1
4
+ Summary: Add your description here
5
+ Requires-Python: >=3.13
6
+ Requires-Dist: agent-skill-dist>=0.1.1
7
+ Requires-Dist: httpx[socks]>=0.28.1
8
+ Requires-Dist: typer>=0.24.2
9
+ Provides-Extra: dev
10
+ Requires-Dist: mypy>=1.20.2; extra == 'dev'
11
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
12
+ Requires-Dist: pytest>=9.0.3; extra == 'dev'
13
+ Requires-Dist: ruff>=0.15.12; extra == 'dev'
14
+ Requires-Dist: ty>=0.0.32; extra == 'dev'
15
+ Requires-Dist: uv>=0.11.7; extra == 'dev'
16
+ Description-Content-Type: text/markdown
17
+
18
+ # KiVault CLI
19
+
20
+ KiVault CLI 是 KiVault HTTP API 的命令行客户端,使用 `typer` 和 `httpx` 实现。
21
+ 当前命令以仓库内的 `openapi.json` 为准。
22
+ CLI 主要面向 `/api/v1` Data Plane;`item list` 使用 `/api/v2/items/search`,
23
+ `health`、`whoami` 和公开读取仍使用后端定义的对应路径。
24
+
25
+ ## 运行
26
+
27
+ 开发态直接运行:
28
+
29
+ ```bash
30
+ uv run python main.py --help
31
+ uv run python main.py --version
32
+ ```
33
+
34
+ 项目同步或安装后,也可以使用 console script:
35
+
36
+ ```bash
37
+ kivault --help
38
+ ```
39
+
40
+ 为了自动补全,可通过 `kivault --install-completion` 来拥有自动补全的能力。
41
+
42
+ ## 配置
43
+
44
+ CLI 不保存 token,也不提供 `login` 或 `token` 管理命令。认证统一通过环境变量传入:
45
+
46
+ ```bash
47
+ export KIVAULT_SERVER_URL=http://127.0.0.1:8000
48
+ export KIVAULT_TOKEN=<你的 KiVault token>
49
+ ```
50
+
51
+ `KIVAULT_SERVER_URL` 可选,默认值是 `http://127.0.0.1:8000`。
52
+ 也可以用全局参数临时覆盖服务地址:
53
+
54
+ ```bash
55
+ uv run python main.py --server http://127.0.0.1:8000 whoami
56
+ ```
57
+
58
+ `whoami` 会请求 `/api/whoami`,并同时输出当前服务地址与 `KIVAULT_TOKEN` 是否已设置:
59
+
60
+ ```bash
61
+ uv run python main.py whoami
62
+ ```
63
+
64
+ ## 常用流程
65
+
66
+ ```bash
67
+ uv run python main.py health
68
+ uv run python main.py whoami
69
+ uv run python main.py upgrade
70
+ uv run python main.py upgrade --yes
71
+
72
+ uv run python main.py vault create Inbox
73
+ uv run python main.py vault list
74
+
75
+ uv run python main.py item add-text --vault-id <vault-id> --title "Note" --content "hello"
76
+ uv run python main.py item add-text --vault-id <vault-id> --title "Note.md" --content-file ./note.md
77
+ uv run python main.py item list --vault-id <vault-id>
78
+ uv run python main.py item list -q report --search-field title --search-field object_filename
79
+ uv run python main.py item export <item-id> --format markdown
80
+
81
+ uv run python main.py --json item add-file ./document.pdf --vault-id <vault-id> # 通常会返回一个 access_url, 不加上 `--json` 可能被截断而看不到该参数。
82
+ uv run python main.py --json item object upload-task <item-id> <task-id> # 通常会返回一个 access_url, 不加上 `--json` 可能被截断而看不到该参数。
83
+ uv run python main.py item object list <item-id>
84
+ uv run python main.py item object download <item-id> <object-id> --output ./document.pdf
85
+
86
+ uv run python main.py tag create research
87
+ uv run python main.py tag add <tag-id> <item-id>
88
+
89
+ uv run python main.py skill status
90
+ uv run python main.py skill install --target repo
91
+ ```
92
+
93
+ ## 已实现命令
94
+
95
+ - `health`
96
+ - `whoami`
97
+ - `upgrade`
98
+ - `vault list|create|get|update|delete`
99
+ - `item list|create|add-text|add-file|get|update|delete|export`
100
+ - `item object list|upload|upload-multipart|upload-task|upload-task-wait|get|download|delete`
101
+ - `tag list|create|update|delete|add|remove`
102
+ - `public item|download-object`
103
+ - `skill status|install`
104
+
105
+ ## 版本与升级
106
+
107
+ 查看当前 CLI 版本:
108
+
109
+ ```bash
110
+ uv run python main.py --version
111
+ ```
112
+
113
+ 检查发布服务上的最新版本:
114
+
115
+ ```bash
116
+ uv run python main.py upgrade
117
+ ```
118
+
119
+ 确认升级时才会安装最新 wheel:
120
+
121
+ ```bash
122
+ uv run python main.py upgrade --yes
123
+ ```
124
+
125
+ `upgrade` 会读取:
126
+
127
+ ```text
128
+ https://releases.kispace.cc/api/public/latest?app=kivault_cli&tags=default
129
+ ```
130
+
131
+ ## 内置 Agent Skill
132
+
133
+ CLI wheel 内置了 `kivault-cli` agent skill。安装后,Codex 或其他兼容 skill 目录约定的 agent 可以通过该 skill 获取当前版本 CLI 的操作说明。
134
+
135
+ 查看 skill 安装状态:
136
+
137
+ ```bash
138
+ uv run python main.py skill status
139
+ uv run python main.py --json skill status
140
+ ```
141
+
142
+ 安装到当前仓库:
143
+
144
+ ```bash
145
+ uv run python main.py skill install --target repo
146
+ ```
147
+
148
+ 目标路径为:
149
+
150
+ ```text
151
+ ./.agents/skills/kivault-cli
152
+ ```
153
+
154
+ 安装到用户全局 Codex skills 目录:
155
+
156
+ ```bash
157
+ uv run python main.py skill install --target global
158
+ ```
159
+
160
+ 目标路径为:
161
+
162
+ ```text
163
+ ${CODEX_HOME:-~/.codex}/skills/kivault-cli
164
+ ```
165
+
166
+ 如果目标已存在,默认拒绝覆盖;确认覆盖时加 `--yes`:
167
+
168
+ ```bash
169
+ uv run python main.py skill install --target repo --yes
170
+ ```
171
+
172
+ 也可以指定自定义 skills 根目录:
173
+
174
+ ```bash
175
+ uv run python main.py skill install --output .agents/skills --yes
176
+ ```
177
+
178
+ 内置 skill 通过 `agent-skill-dist` 分发,随 KiVault CLI wheel 一起发布,因此 CLI 升级后可以重新运行 `skill install --yes` 同步 agent 使用的 skill。
179
+
180
+ ## 参数提示与内容输入
181
+
182
+ 每个命令都可以通过 `--help` 查看参数说明和使用示例:
183
+
184
+ ```bash
185
+ uv run python main.py item create --help
186
+ uv run python main.py item object upload --help
187
+ ```
188
+
189
+ 默认帮助输出启用 Rich 表格样式。Agent、脚本或日志采集场景如果更适合纯文本输出,可以在启动 CLI 时设置:
190
+
191
+ ```bash
192
+ KIVAULT_PLAIN_HELP=1 uv run python main.py item create --help
193
+ ```
194
+
195
+ `--content` 与 `--content-file` 都写入 Item 的 `content_text`:
196
+
197
+ - `--content "hello"` 直接使用命令行中的文本。
198
+ - `--content-file ./note.md` 读取本地 UTF-8 文本文件内容后写入;它不是上传附件。
199
+
200
+ 如果要上传 PDF、图片、压缩包或其他二进制文件,请使用:
201
+
202
+ ```bash
203
+ uv run python main.py item add-file ./document.pdf --vault-id <vault-id>
204
+ uv run python main.py item object upload <item-id> ./document.pdf
205
+ ```
206
+
207
+ 文件上传 API 是异步的:`add-file`、`item object upload` 和 `item object upload-multipart`
208
+ 会先创建 Object 上传任务。CLI 默认会轮询任务进度直到完成,并输出服务端返回的进度与日志。
209
+ 如果只想创建任务并稍后查询,可以加 `--no-wait`,推荐 agent 使用该参数,避免被 bash 执行工具杀掉:
210
+
211
+ ```bash
212
+ uv run python main.py item object upload <item-id> ./document.pdf --no-wait
213
+ uv run python main.py item object upload-task <item-id> <task-id>
214
+ uv run python main.py item object upload-task-wait <item-id> <task-id>
215
+ ```
216
+
217
+ 轮询参数:
218
+
219
+ - `--poll-interval <seconds>` 调整轮询间隔,默认 `1.0` 秒。
220
+ - `--timeout <seconds>` 调整等待超时,默认 `600` 秒;`0` 表示不超时。
221
+
222
+ 当 `--content-file` 指向的文件不能作为正常 UTF-8 文本读取,CLI 会直接拒绝并提示改用文件上传命令。
223
+
224
+ ## 上传多个 Object
225
+
226
+ `item object upload` 和 `item object upload-multipart` 都可以一次传入多个文件路径,
227
+ 并创建同一个异步上传任务:
228
+
229
+ ```bash
230
+ uv run python main.py item object upload <item-id> ./a.pdf ./b.md ./c.png
231
+ uv run python main.py item object upload-multipart <item-id> ./a.pdf ./b.md
232
+ ```
233
+
234
+ 后端限制为单个文件 100MB 以内,单次最多 20 个文件。
235
+
236
+ ## 测试
237
+
238
+ ```bash
239
+ .venv/bin/python -m pytest . -q
240
+ ```
@@ -0,0 +1,223 @@
1
+ # KiVault CLI
2
+
3
+ KiVault CLI 是 KiVault HTTP API 的命令行客户端,使用 `typer` 和 `httpx` 实现。
4
+ 当前命令以仓库内的 `openapi.json` 为准。
5
+ CLI 主要面向 `/api/v1` Data Plane;`item list` 使用 `/api/v2/items/search`,
6
+ `health`、`whoami` 和公开读取仍使用后端定义的对应路径。
7
+
8
+ ## 运行
9
+
10
+ 开发态直接运行:
11
+
12
+ ```bash
13
+ uv run python main.py --help
14
+ uv run python main.py --version
15
+ ```
16
+
17
+ 项目同步或安装后,也可以使用 console script:
18
+
19
+ ```bash
20
+ kivault --help
21
+ ```
22
+
23
+ 为了自动补全,可通过 `kivault --install-completion` 来拥有自动补全的能力。
24
+
25
+ ## 配置
26
+
27
+ CLI 不保存 token,也不提供 `login` 或 `token` 管理命令。认证统一通过环境变量传入:
28
+
29
+ ```bash
30
+ export KIVAULT_SERVER_URL=http://127.0.0.1:8000
31
+ export KIVAULT_TOKEN=<你的 KiVault token>
32
+ ```
33
+
34
+ `KIVAULT_SERVER_URL` 可选,默认值是 `http://127.0.0.1:8000`。
35
+ 也可以用全局参数临时覆盖服务地址:
36
+
37
+ ```bash
38
+ uv run python main.py --server http://127.0.0.1:8000 whoami
39
+ ```
40
+
41
+ `whoami` 会请求 `/api/whoami`,并同时输出当前服务地址与 `KIVAULT_TOKEN` 是否已设置:
42
+
43
+ ```bash
44
+ uv run python main.py whoami
45
+ ```
46
+
47
+ ## 常用流程
48
+
49
+ ```bash
50
+ uv run python main.py health
51
+ uv run python main.py whoami
52
+ uv run python main.py upgrade
53
+ uv run python main.py upgrade --yes
54
+
55
+ uv run python main.py vault create Inbox
56
+ uv run python main.py vault list
57
+
58
+ uv run python main.py item add-text --vault-id <vault-id> --title "Note" --content "hello"
59
+ uv run python main.py item add-text --vault-id <vault-id> --title "Note.md" --content-file ./note.md
60
+ uv run python main.py item list --vault-id <vault-id>
61
+ uv run python main.py item list -q report --search-field title --search-field object_filename
62
+ uv run python main.py item export <item-id> --format markdown
63
+
64
+ uv run python main.py --json item add-file ./document.pdf --vault-id <vault-id> # 通常会返回一个 access_url, 不加上 `--json` 可能被截断而看不到该参数。
65
+ uv run python main.py --json item object upload-task <item-id> <task-id> # 通常会返回一个 access_url, 不加上 `--json` 可能被截断而看不到该参数。
66
+ uv run python main.py item object list <item-id>
67
+ uv run python main.py item object download <item-id> <object-id> --output ./document.pdf
68
+
69
+ uv run python main.py tag create research
70
+ uv run python main.py tag add <tag-id> <item-id>
71
+
72
+ uv run python main.py skill status
73
+ uv run python main.py skill install --target repo
74
+ ```
75
+
76
+ ## 已实现命令
77
+
78
+ - `health`
79
+ - `whoami`
80
+ - `upgrade`
81
+ - `vault list|create|get|update|delete`
82
+ - `item list|create|add-text|add-file|get|update|delete|export`
83
+ - `item object list|upload|upload-multipart|upload-task|upload-task-wait|get|download|delete`
84
+ - `tag list|create|update|delete|add|remove`
85
+ - `public item|download-object`
86
+ - `skill status|install`
87
+
88
+ ## 版本与升级
89
+
90
+ 查看当前 CLI 版本:
91
+
92
+ ```bash
93
+ uv run python main.py --version
94
+ ```
95
+
96
+ 检查发布服务上的最新版本:
97
+
98
+ ```bash
99
+ uv run python main.py upgrade
100
+ ```
101
+
102
+ 确认升级时才会安装最新 wheel:
103
+
104
+ ```bash
105
+ uv run python main.py upgrade --yes
106
+ ```
107
+
108
+ `upgrade` 会读取:
109
+
110
+ ```text
111
+ https://releases.kispace.cc/api/public/latest?app=kivault_cli&tags=default
112
+ ```
113
+
114
+ ## 内置 Agent Skill
115
+
116
+ CLI wheel 内置了 `kivault-cli` agent skill。安装后,Codex 或其他兼容 skill 目录约定的 agent 可以通过该 skill 获取当前版本 CLI 的操作说明。
117
+
118
+ 查看 skill 安装状态:
119
+
120
+ ```bash
121
+ uv run python main.py skill status
122
+ uv run python main.py --json skill status
123
+ ```
124
+
125
+ 安装到当前仓库:
126
+
127
+ ```bash
128
+ uv run python main.py skill install --target repo
129
+ ```
130
+
131
+ 目标路径为:
132
+
133
+ ```text
134
+ ./.agents/skills/kivault-cli
135
+ ```
136
+
137
+ 安装到用户全局 Codex skills 目录:
138
+
139
+ ```bash
140
+ uv run python main.py skill install --target global
141
+ ```
142
+
143
+ 目标路径为:
144
+
145
+ ```text
146
+ ${CODEX_HOME:-~/.codex}/skills/kivault-cli
147
+ ```
148
+
149
+ 如果目标已存在,默认拒绝覆盖;确认覆盖时加 `--yes`:
150
+
151
+ ```bash
152
+ uv run python main.py skill install --target repo --yes
153
+ ```
154
+
155
+ 也可以指定自定义 skills 根目录:
156
+
157
+ ```bash
158
+ uv run python main.py skill install --output .agents/skills --yes
159
+ ```
160
+
161
+ 内置 skill 通过 `agent-skill-dist` 分发,随 KiVault CLI wheel 一起发布,因此 CLI 升级后可以重新运行 `skill install --yes` 同步 agent 使用的 skill。
162
+
163
+ ## 参数提示与内容输入
164
+
165
+ 每个命令都可以通过 `--help` 查看参数说明和使用示例:
166
+
167
+ ```bash
168
+ uv run python main.py item create --help
169
+ uv run python main.py item object upload --help
170
+ ```
171
+
172
+ 默认帮助输出启用 Rich 表格样式。Agent、脚本或日志采集场景如果更适合纯文本输出,可以在启动 CLI 时设置:
173
+
174
+ ```bash
175
+ KIVAULT_PLAIN_HELP=1 uv run python main.py item create --help
176
+ ```
177
+
178
+ `--content` 与 `--content-file` 都写入 Item 的 `content_text`:
179
+
180
+ - `--content "hello"` 直接使用命令行中的文本。
181
+ - `--content-file ./note.md` 读取本地 UTF-8 文本文件内容后写入;它不是上传附件。
182
+
183
+ 如果要上传 PDF、图片、压缩包或其他二进制文件,请使用:
184
+
185
+ ```bash
186
+ uv run python main.py item add-file ./document.pdf --vault-id <vault-id>
187
+ uv run python main.py item object upload <item-id> ./document.pdf
188
+ ```
189
+
190
+ 文件上传 API 是异步的:`add-file`、`item object upload` 和 `item object upload-multipart`
191
+ 会先创建 Object 上传任务。CLI 默认会轮询任务进度直到完成,并输出服务端返回的进度与日志。
192
+ 如果只想创建任务并稍后查询,可以加 `--no-wait`,推荐 agent 使用该参数,避免被 bash 执行工具杀掉:
193
+
194
+ ```bash
195
+ uv run python main.py item object upload <item-id> ./document.pdf --no-wait
196
+ uv run python main.py item object upload-task <item-id> <task-id>
197
+ uv run python main.py item object upload-task-wait <item-id> <task-id>
198
+ ```
199
+
200
+ 轮询参数:
201
+
202
+ - `--poll-interval <seconds>` 调整轮询间隔,默认 `1.0` 秒。
203
+ - `--timeout <seconds>` 调整等待超时,默认 `600` 秒;`0` 表示不超时。
204
+
205
+ 当 `--content-file` 指向的文件不能作为正常 UTF-8 文本读取,CLI 会直接拒绝并提示改用文件上传命令。
206
+
207
+ ## 上传多个 Object
208
+
209
+ `item object upload` 和 `item object upload-multipart` 都可以一次传入多个文件路径,
210
+ 并创建同一个异步上传任务:
211
+
212
+ ```bash
213
+ uv run python main.py item object upload <item-id> ./a.pdf ./b.md ./c.png
214
+ uv run python main.py item object upload-multipart <item-id> ./a.pdf ./b.md
215
+ ```
216
+
217
+ 后端限制为单个文件 100MB 以内,单次最多 20 个文件。
218
+
219
+ ## 测试
220
+
221
+ ```bash
222
+ .venv/bin/python -m pytest . -q
223
+ ```
@@ -0,0 +1 @@
1
+ """KiVault CLI package."""