clockify-unofficial-cli 0.2.0__py3-none-any.whl

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 (49) hide show
  1. clockify_unofficial_cli/__init__.py +3 -0
  2. clockify_unofficial_cli/__main__.py +3 -0
  3. clockify_unofficial_cli/_version.py +3 -0
  4. clockify_unofficial_cli/auth/__init__.py +0 -0
  5. clockify_unofficial_cli/auth/credentials.py +70 -0
  6. clockify_unofficial_cli/auth/env_store.py +26 -0
  7. clockify_unofficial_cli/auth/file_store.py +49 -0
  8. clockify_unofficial_cli/auth/keyring_store.py +62 -0
  9. clockify_unofficial_cli/auth/resolver.py +34 -0
  10. clockify_unofficial_cli/commands/__init__.py +0 -0
  11. clockify_unofficial_cli/commands/auth.py +153 -0
  12. clockify_unofficial_cli/commands/client.py +116 -0
  13. clockify_unofficial_cli/commands/config.py +50 -0
  14. clockify_unofficial_cli/commands/custom_field.py +130 -0
  15. clockify_unofficial_cli/commands/entry.py +275 -0
  16. clockify_unofficial_cli/commands/group.py +89 -0
  17. clockify_unofficial_cli/commands/project.py +174 -0
  18. clockify_unofficial_cli/commands/tag.py +107 -0
  19. clockify_unofficial_cli/commands/task.py +194 -0
  20. clockify_unofficial_cli/commands/timer_shortcuts.py +130 -0
  21. clockify_unofficial_cli/commands/user.py +45 -0
  22. clockify_unofficial_cli/commands/workspace.py +68 -0
  23. clockify_unofficial_cli/config/__init__.py +0 -0
  24. clockify_unofficial_cli/config/paths.py +25 -0
  25. clockify_unofficial_cli/config/settings.py +75 -0
  26. clockify_unofficial_cli/config/store.py +56 -0
  27. clockify_unofficial_cli/main.py +131 -0
  28. clockify_unofficial_cli/output/__init__.py +0 -0
  29. clockify_unofficial_cli/output/columns.py +88 -0
  30. clockify_unofficial_cli/output/formats.py +82 -0
  31. clockify_unofficial_cli/output/registry.py +29 -0
  32. clockify_unofficial_cli/output/renderer.py +68 -0
  33. clockify_unofficial_cli/runtime/__init__.py +0 -0
  34. clockify_unofficial_cli/runtime/client_factory.py +42 -0
  35. clockify_unofficial_cli/runtime/context.py +99 -0
  36. clockify_unofficial_cli/runtime/errors.py +89 -0
  37. clockify_unofficial_cli/runtime/exit_codes.py +15 -0
  38. clockify_unofficial_cli/runtime/params.py +39 -0
  39. clockify_unofficial_cli/runtime/prompts.py +24 -0
  40. clockify_unofficial_cli/services/__init__.py +0 -0
  41. clockify_unofficial_cli/services/listing.py +58 -0
  42. clockify_unofficial_cli/services/parsing.py +118 -0
  43. clockify_unofficial_cli/services/resolve.py +128 -0
  44. clockify_unofficial_cli/services/timer.py +126 -0
  45. clockify_unofficial_cli-0.2.0.dist-info/METADATA +278 -0
  46. clockify_unofficial_cli-0.2.0.dist-info/RECORD +49 -0
  47. clockify_unofficial_cli-0.2.0.dist-info/WHEEL +4 -0
  48. clockify_unofficial_cli-0.2.0.dist-info/entry_points.txt +2 -0
  49. clockify_unofficial_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,278 @@
1
+ Metadata-Version: 2.5
2
+ Name: clockify-unofficial-cli
3
+ Version: 0.2.0
4
+ Summary: Unofficial command-line interface for Clockify, built on clockify-unofficial-sdk.
5
+ Author-email: "G.A.JAGUAR" <dev@gajaguar.com>
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Keywords: cli,clockify,time-tracking
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Environment :: Console
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Classifier: Typing :: Typed
14
+ Requires-Python: >=3.14
15
+ Requires-Dist: clockify-unofficial-sdk<2,>=1.0
16
+ Requires-Dist: keyring>=25.0
17
+ Requires-Dist: platformdirs>=4.0
18
+ Requires-Dist: pydantic>=2.9
19
+ Requires-Dist: rich>=14.0
20
+ Requires-Dist: tomli-w>=1.0
21
+ Requires-Dist: typer>=0.16
22
+ Description-Content-Type: text/markdown
23
+
24
+ # Clockify Unofficial CLI
25
+
26
+ [![CI](https://github.com/gajaguar/clockify-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/gajaguar/clockify-cli/actions/workflows/ci.yml)
27
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
28
+ [![Python 3.14+](https://img.shields.io/badge/python-3.14%2B-blue.svg)](pyproject.toml)
29
+ [![Topics](https://img.shields.io/badge/topics-python%20%7C%20cli%20%7C%20clockify%20%7C%20typer%20%7C%20time--tracking-informational)](https://github.com/gajaguar/clockify-cli)
30
+
31
+ > **Unofficial.** This project is not affiliated with, endorsed by, or
32
+ > supported by CAKE.com d.o.o. "Clockify" is a trademark of CAKE.com d.o.o.
33
+
34
+ Unofficial command-line interface for Clockify, built on
35
+ [`clockify-unofficial-sdk`](https://github.com/gajaguar/clockify-sdk).
36
+
37
+ ## Table of contents
38
+
39
+ - [About](#about)
40
+ - [Key features](#key-features)
41
+ - [Architecture](#architecture)
42
+ - [Getting started](#getting-started)
43
+ - [Prerequisites](#prerequisites)
44
+ - [Installation](#installation)
45
+ - [Usage](#usage)
46
+ - [Commands](#commands)
47
+ - [Global options](#global-options)
48
+ - [Exit codes](#exit-codes)
49
+ - [Configuration](#configuration)
50
+ - [Development](#development)
51
+ - [Platform notes](#platform-notes)
52
+ - [Roadmap](#roadmap)
53
+ - [Open items](#open-items)
54
+ - [Contributing](#contributing)
55
+ - [Security](#security)
56
+ - [License](#license)
57
+
58
+ ## About
59
+
60
+ `clockify` provides a terminal and scripting interface to Clockify. The CLI
61
+ handles profiles, credential storage, name-to-ID resolution, output formatting,
62
+ and stable exit codes. The SDK owns HTTP, retries, pagination, typed models,
63
+ and API error mapping.
64
+
65
+ The CLI is being delivered in phases. The authoritative endpoint mapping is in
66
+ [`docs/coverage.md`](docs/coverage.md), and the delivery plan is in
67
+ [`docs/ROADMAP.md`](docs/ROADMAP.md).
68
+
69
+ ## Key features
70
+
71
+ - **Profile-based configuration** - Store region, workspace, and user metadata
72
+ per profile.
73
+ - **Safe authentication** - Validate keys before storage and use the OS
74
+ keyring by default.
75
+ - **Script-friendly output** - Render data as `table`, `json`, `jsonl`, `csv`,
76
+ or one identifier per line with `id`.
77
+ - **Stable automation contract** - Keep data on stdout, diagnostics on stderr,
78
+ and use documented exit codes.
79
+ - **CI support** - Use `CLOCKIFY_API_KEY` without writing a credential to disk.
80
+ - **Typed API foundation** - Build on the SDK's typed models, retries, and
81
+ pagination instead of making HTTP requests in the CLI.
82
+
83
+ ## Architecture
84
+
85
+ The CLI is a thin product layer over the SDK. Commands use services and
86
+ runtime components for application context, credentials, configuration, output,
87
+ and error handling.
88
+
89
+ ```mermaid
90
+ flowchart TD
91
+ Main["main.py - root app"] --> Commands["commands/ - Typer apps"]
92
+ Commands --> Services["services/ - product logic"]
93
+ Commands --> Runtime["runtime/ - context and errors"]
94
+ Runtime --> Auth["auth/ - credential stores"]
95
+ Runtime --> Config["config/ - settings"]
96
+ Runtime --> Output["output/ - renderers"]
97
+ Services --> SDK["clockify-unofficial-sdk"]
98
+ Runtime --> SDK
99
+ SDK --> API["Clockify API"]
100
+ ```
101
+
102
+ Read [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for the full design,
103
+ security model, command conventions, and extension checklist.
104
+
105
+ ## Getting started
106
+
107
+ ### Prerequisites
108
+
109
+ - Python 3.14 or later
110
+ - A Clockify personal API key from **Profile settings -> API**
111
+ - [mise](https://mise.jdx.dev) for development from a repository checkout
112
+
113
+ Clockify does not provide OAuth2 for personal API access. The CLI uses a
114
+ personal API key and supports regional profiles.
115
+
116
+ ### Installation
117
+
118
+ Install the published package with [uv](https://docs.astral.sh/uv/) or
119
+ [pipx](https://pipx.pypa.io/); it needs Python 3.14 or newer:
120
+
121
+ ```bash
122
+ uv tool install clockify-unofficial-cli
123
+ # or
124
+ pipx install clockify-unofficial-cli
125
+ ```
126
+
127
+ To work on the CLI, install it from a checkout instead:
128
+
129
+ ```bash
130
+ git clone https://github.com/gajaguar/clockify-cli.git
131
+ cd clockify-cli
132
+ make install
133
+ ```
134
+
135
+ `make install` installs the pinned toolchain, Python dependencies, Node-based
136
+ documentation tools, and the pre-commit hook.
137
+
138
+ ## Usage
139
+
140
+ Log in interactively. The key is read from a hidden prompt, validated with
141
+ Clockify, and stored in the OS keyring:
142
+
143
+ ```bash
144
+ clockify auth login
145
+ clockify auth status
146
+ ```
147
+
148
+ Use standard input for CI or other non-interactive environments. Global
149
+ options must come before the command:
150
+
151
+ ```bash
152
+ export CLOCKIFY_API_KEY=...
153
+ clockify -o json auth status | jq .email
154
+ printf '%s' "$KEY" | clockify -p work auth login --with-token --region EU_CENTRAL_1
155
+ ```
156
+
157
+ ### Commands
158
+
159
+ - `auth login [--region] [--with-token] [--insecure-storage]` validates and
160
+ stores an API key.
161
+ - `auth status` shows the user, workspace, and credential source.
162
+ - `auth logout` removes the stored key and profile.
163
+ - `auth token` prints the raw key when explicitly requested.
164
+ - `config path` prints the settings file location.
165
+ - `config list` lists configured profiles.
166
+ - `config use NAME` sets the default profile.
167
+
168
+ Resource commands arrive in phases. See the
169
+ [roadmap](docs/ROADMAP.md) and [coverage matrix](docs/coverage.md) for their
170
+ status.
171
+
172
+ ### Global options
173
+
174
+ - `-p, --profile`: select a stored profile. Environment variable:
175
+ `CLOCKIFY_PROFILE`.
176
+ - `-w, --workspace`: override the profile's workspace. Environment variable:
177
+ `CLOCKIFY_WORKSPACE`.
178
+ - `-o, --output`: select `table`, `json`, `jsonl`, `csv`, or `id`. Environment
179
+ variable: `CLOCKIFY_OUTPUT`.
180
+ - `--version`: print the installed version.
181
+
182
+ ### Exit codes
183
+
184
+ Exit codes are stable for shell scripts:
185
+
186
+ - `0`: success.
187
+ - `1`: unexpected failure.
188
+ - `2`: invalid usage.
189
+ - `3`: configuration error.
190
+ - `4`: authentication failure.
191
+ - `5`: forbidden.
192
+ - `6`: resource not found.
193
+ - `7`: validation failure.
194
+ - `8`: rate limited.
195
+ - `9`: service unavailable.
196
+
197
+ ## Configuration
198
+
199
+ The settings file is stored in the platform-specific configuration directory.
200
+ Run `clockify config path` to locate it. On Linux, the default is usually
201
+ `~/.config/clockify-cli/config.toml`.
202
+
203
+ - `CLOCKIFY_API_KEY`: read-only credential source for automation.
204
+ - `CLOCKIFY_PROFILE`: select the active profile.
205
+ - `CLOCKIFY_WORKSPACE`: override the profile's workspace.
206
+ - `CLOCKIFY_OUTPUT`: select the default output format.
207
+ - `CLOCKIFY_CLI_CONFIG_DIR`: override the configuration directory.
208
+ - `CLOCKIFY_TEST_API_KEY`: enable live test authentication.
209
+
210
+ Credential resolution uses environment, then the OS keyring, then the
211
+ opt-in plaintext fallback. The fallback requires
212
+ `auth login --insecure-storage` and writes a file with `0600` permissions.
213
+
214
+ ## Development
215
+
216
+ Run these commands from the repository root:
217
+
218
+ ```bash
219
+ make install # toolchain, dependencies, and git hooks
220
+ make check # read-only quality gate
221
+ make fix # apply safe automated fixes
222
+ make test # pytest with a 90% coverage floor
223
+ make openapi-fetch # download Clockify's OpenAPI document
224
+ make coverage-report # compare coverage.md with the OpenAPI document
225
+ ```
226
+
227
+ Use `make help` for every target. Most targets accept `FILES="..."` to limit
228
+ their scope, for example:
229
+
230
+ ```bash
231
+ make md-lint FILES="README.md"
232
+ ```
233
+
234
+ Live tests are excluded from `make test`. They require
235
+ `CLOCKIFY_TEST_API_KEY` and a test workspace.
236
+
237
+ ## Platform notes
238
+
239
+ - Headless Linux hosts may not provide a Secret Service keyring backend. Use
240
+ `CLOCKIFY_API_KEY` or the explicit `--insecure-storage` fallback.
241
+ - The SDK is a `uv` git dependency pinned to a tag, so installation requires
242
+ access to GitHub.
243
+ - Python 3.14 is the minimum version required by the CLI and SDK.
244
+
245
+ ## Roadmap
246
+
247
+ - [x] Phase 0: foundation, authentication, profiles, renderers, and exit codes
248
+ - [x] Phase 1: workspace, user, project, task, tag, group, and entry commands
249
+ - [ ] Phase 2: core API completion
250
+ - [ ] Phase 3: reports
251
+ - [ ] Phase 4: time off, holidays, and approvals
252
+ - [ ] Phase 5: expenses and invoices
253
+ - [ ] Phase 6: scheduling, webhooks, and entity changes
254
+ - [ ] Phase 7: release hardening for `1.0.0`
255
+
256
+ See [`docs/ROADMAP.md`](docs/ROADMAP.md) for operation counts, dependencies,
257
+ and completion criteria.
258
+
259
+ ## Open items
260
+
261
+ - Only the `GLOBAL` region host is verified against a live account.
262
+ - Plan-gated endpoints need a paid workspace for live verification.
263
+ - Clockify's per-plan rate limits are not fully documented upstream.
264
+
265
+ ## Contributing
266
+
267
+ Bug reports, ideas and pull requests are welcome; see
268
+ [`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow.
269
+
270
+ ## Security
271
+
272
+ Report suspected vulnerabilities to <dev@gajaguar.com> instead of opening a
273
+ public issue. A Clockify API key grants access to a workspace. Never commit a
274
+ key, and rotate it immediately if it is exposed.
275
+
276
+ ## License
277
+
278
+ Distributed under the MIT License. See [`LICENSE`](LICENSE) for details.
@@ -0,0 +1,49 @@
1
+ clockify_unofficial_cli/__init__.py,sha256=yJLWGpnUNp7fx-JPaj7UUcwqLduST3KrGtFsE17uBTw,84
2
+ clockify_unofficial_cli/__main__.py,sha256=5rtGYz41aKZjC-wZ8R6j2glSYd92KlmO59jOXVz3YGw,52
3
+ clockify_unofficial_cli/_version.py,sha256=oG_VizVo0Tpcm6c8z4J2w3dtAf0VYfOV6qDmjuwhPx8,89
4
+ clockify_unofficial_cli/main.py,sha256=4KS9NnaPWcJsso_pf230hGEz9B0rGQ0XSVMkUyNU-rw,5485
5
+ clockify_unofficial_cli/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ clockify_unofficial_cli/auth/credentials.py,sha256=YaXAvy_mgjHaoGBXiSq-hcFX-xNwjgJ1btZY5Eu2DlM,1859
7
+ clockify_unofficial_cli/auth/env_store.py,sha256=lCvJF4Tpthlu7Q5lXsNHfYMGCgA5woy2WyADGfo4Kcc,833
8
+ clockify_unofficial_cli/auth/file_store.py,sha256=hzbwOk3yd8VpOoyW7SNrL71TJlPnpzDvAfLbH7Nk9gQ,1640
9
+ clockify_unofficial_cli/auth/keyring_store.py,sha256=yKu07fGhvBrS9lthorU_BKeSpCNczbWKEGE5WlVbdRI,2048
10
+ clockify_unofficial_cli/auth/resolver.py,sha256=_wYvcrEck_YcV4KV-cq9cb1xyQhWLCzpOqaAlU4SSCU,1336
11
+ clockify_unofficial_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ clockify_unofficial_cli/commands/auth.py,sha256=A_HRxU6XsNN6JOOHPjB5jQk1oR4HqVRRNLJHwjqIHeg,6159
13
+ clockify_unofficial_cli/commands/client.py,sha256=fhvqfRWtJPE-M6yx8S-wtPX7lcc-d225AAq52cAQbkQ,4639
14
+ clockify_unofficial_cli/commands/config.py,sha256=lpYaetBwQGJOOLTalnZ3xM-ylQtNk0HuetgpM6V8-TM,1913
15
+ clockify_unofficial_cli/commands/custom_field.py,sha256=E-Yh0Dvu69D3zH-_c2cl5E_bPC6gDhGkCfJgk2Y4Ki8,5623
16
+ clockify_unofficial_cli/commands/entry.py,sha256=p3_FSBknb-zT_13EqQw9RpBctPIceZRB3Tq4pheFY6w,10608
17
+ clockify_unofficial_cli/commands/group.py,sha256=3eajCqay1ubZ3PB9flYmfdjJb7Pk3x197MSVds1fJSM,3173
18
+ clockify_unofficial_cli/commands/project.py,sha256=hMURbxm_xT7M83D2iYjqXfcxd-yxThh8sCTFFKtrtiA,6612
19
+ clockify_unofficial_cli/commands/tag.py,sha256=Wcwi6Fqx5YAmJ43PYV62vVpibuTI7hRPzpxyumpLnWQ,3669
20
+ clockify_unofficial_cli/commands/task.py,sha256=JRLJYdlsbT2hhXTnQF5Rj9Bp3CmfzzSF_yvJnC3pSxw,7091
21
+ clockify_unofficial_cli/commands/timer_shortcuts.py,sha256=Kofuyn51G6uSp05xJtjTyqKcy6Z5V0dtDyb_NOyyU2E,6649
22
+ clockify_unofficial_cli/commands/user.py,sha256=bVzzHqlq3Ecfa2pDJD3a7tKYPjLHF6ZCfIcDAO8vbKE,1602
23
+ clockify_unofficial_cli/commands/workspace.py,sha256=KNLde_V1k1hIM0hfY8pdvlqkxCy4PN8AanXctH03J30,3084
24
+ clockify_unofficial_cli/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ clockify_unofficial_cli/config/paths.py,sha256=S-pOEqu37uxpEWEeLiYRSdN4Z1UAr3XSfRnGHfuDurQ,550
26
+ clockify_unofficial_cli/config/settings.py,sha256=ATR5iHVLxRS3sST8DbAsjN5bqEjJ4SwztwpGzKhBq8M,2267
27
+ clockify_unofficial_cli/config/store.py,sha256=dr61u2csyPHC2HRgvMrdVs3dnbSnGMAyxXkNx2WCyXU,1993
28
+ clockify_unofficial_cli/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ clockify_unofficial_cli/output/columns.py,sha256=om8bShsirGSDdkEmkA3J5ZTRBoAeCuzp4PWcZ0CK0i4,2006
30
+ clockify_unofficial_cli/output/formats.py,sha256=cyNvtQwHCpSN1dnmDg7ryfupYSVlP28eDb_UFNqKeE4,2741
31
+ clockify_unofficial_cli/output/registry.py,sha256=CYEszlz6527sIxrqoFuEFbEa3lt6xtVZ59lGcL5D48s,1063
32
+ clockify_unofficial_cli/output/renderer.py,sha256=MMHypFIbg4nl_lDv7A8pUb6yE0WFTZlh0XXo1xNpfHU,1971
33
+ clockify_unofficial_cli/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ clockify_unofficial_cli/runtime/client_factory.py,sha256=mnlBQPvpp4R3gKIxuzqyX8qojF1PfIsdBDX-ncVKB0Y,1429
35
+ clockify_unofficial_cli/runtime/context.py,sha256=7Ydx0ht261l5Ucnf_1dZ31GvRlS6tym1DIQm0tXQ4Lk,3641
36
+ clockify_unofficial_cli/runtime/errors.py,sha256=4cRM3nJ4wQVMELOmVP5S3nzLokKRmkOWa24GR4kMZkU,3071
37
+ clockify_unofficial_cli/runtime/exit_codes.py,sha256=y0DqVZyc2Lj6bdkMozgY5Gr3TkvlCWdqcTpfJf05vxQ,305
38
+ clockify_unofficial_cli/runtime/params.py,sha256=zxXphoRjqxn-CnauIyd4_LuVpi8d-g4AKsXGsZWkn1M,1720
39
+ clockify_unofficial_cli/runtime/prompts.py,sha256=sRv1ILXvmAJK2ZKoqwkV9uOu7C7fG7mQoMGCeWlrcGE,754
40
+ clockify_unofficial_cli/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ clockify_unofficial_cli/services/listing.py,sha256=zO7LPYgkkSvPZzfQVF793XAdGp8QnSrGFZwg3Tqi0lQ,1715
42
+ clockify_unofficial_cli/services/parsing.py,sha256=X1nYxLcJSBtSsVsYoFLH2OzECgpFb3kQyLJ3t0lRevE,4300
43
+ clockify_unofficial_cli/services/resolve.py,sha256=i9p2KGftA-bnCHc-LoSPNcI0gstpSSjb_Hxq9DAGvj8,4309
44
+ clockify_unofficial_cli/services/timer.py,sha256=qrlA2PZMFqrsuRnayao0VN5l4NYz2d_Sk4OQOhz6LDI,4231
45
+ clockify_unofficial_cli-0.2.0.dist-info/METADATA,sha256=jWLAuF8SXp8LFIBkvc61UeOqyKcchwVVvKRvgRCHsro,9480
46
+ clockify_unofficial_cli-0.2.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
47
+ clockify_unofficial_cli-0.2.0.dist-info/entry_points.txt,sha256=IWdqckOWVaZtCHzLKGkzubMhkURrAyFobCnBP5D8veg,62
48
+ clockify_unofficial_cli-0.2.0.dist-info/licenses/LICENSE,sha256=AIJIXGHfD5sOG6LME47OMGdplzyYxbE4vaSXLcWOj-c,1113
49
+ clockify_unofficial_cli-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ clockify = clockify_unofficial_cli.main:run
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gerardo Antonio Gerónimo Vasconcelos <dev@gajaguar.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.