@knpkv/clockify-api-client 2.0.0 → 3.0.0
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.
- package/CHANGELOG.md +33 -0
- package/dist/generated/ClockifyApi.d.ts +191 -1619
- package/dist/generated/ClockifyApi.d.ts.map +1 -1
- package/dist/generated/ClockifyApi.js +4 -4
- package/dist/generated/ClockifyApi.js.map +1 -1
- package/package.json +1 -1
- package/src/generated/ClockifyApi.ts +8 -8
- package/test/ClockifyApiClient.test.ts +19 -0
- package/test/GeneratedSchemas.test.ts +42 -26
- package/test/WorkspaceSubscription.test.ts +11 -0
- package/test/fixtures/clockify-workspaces.json +144 -0
- package/vitest.config.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @knpkv/clockify-api-client
|
|
2
2
|
|
|
3
|
+
## 3.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [#521](https://github.com/knpkv/npm/pull/521) [`28c22ae`](https://github.com/knpkv/npm/commit/28c22ae49825b06472c0d35aa9d7ef92ed5748ff) Thanks [@konopkov](https://github.com/konopkov)! - `jcf auth clockify setup` reported "No workspaces found." and saved nothing, even when the key had workspaces. The generated client could not decode a real `/v1/workspaces` response, and setup turned that failure into an empty list.
|
|
8
|
+
|
|
9
|
+
- **`@knpkv/clockify-api-client`**: `WorkspaceDtoV1` now matches what the API returns.
|
|
10
|
+
- `featureSubscriptionType` is a `string` (e.g. `FREE_2026`), not a `FeaturePlan` object.
|
|
11
|
+
- `features` is a `ReadonlyArray<string>`.
|
|
12
|
+
- `workspaceSettings` is no longer modelled, because the upstream schema disagrees with live responses on many nullable and enum fields.
|
|
13
|
+
- `MembershipDtoV1.costRate` and `hourlyRate`, and `WorkspaceSubdomainDtoV1.name`, accept `null`.
|
|
14
|
+
- `FeaturePlan` and `WorkspaceSettingsDtoV1` stay exported.
|
|
15
|
+
- These are incompatible type changes to exported generated schemas, so this is a major release. The previous types could not decode a real response, so code relying on them could not have run.
|
|
16
|
+
- **`@knpkv/jira-clockify`**: setup now fails with a typed `ClockifyRequestError` that names the failed request, instead of reporting no workspaces. "Invalid API key" is reported only when Clockify rejects the key with 401 or 403; before, any failure looked up the user as an invalid key. The account lookup is exported as `loadClockifyAccount`, so it can be tested against real-shaped responses.
|
|
17
|
+
|
|
18
|
+
- [#483](https://github.com/knpkv/npm/pull/483) [`da0e5ff`](https://github.com/knpkv/npm/commit/da0e5ff70ec5926beaeceff060a37b2b0f27b6f9) Thanks [@konopkov](https://github.com/konopkov)! - Discover every worked ticket from Claude Code and Codex sessions.
|
|
19
|
+
|
|
20
|
+
Presence is now a supervised turn: a typed prompt, including one queued while the agent was busy, opens a turn and the agent's work inside it counts until the turn ends, a task notification or auto-continuation takes over, or the idle cap passes. Task notifications, auto-continuations and `isMeta` lines no longer count as typed. Legacy Codex tool-call response items keep a turn alive. `decodeTranscript` now requires `idleCapMs`; `decodeSessionLines` and `SessionLine` are new.
|
|
21
|
+
|
|
22
|
+
Parallel stretches no longer drop tickets: every attributed ticket keeps a share, overlapping short tickets stay co-owners, and the web calendar shows suggestions down to Jira's one-minute minimum. When minutes are scarce, open-sprint tickets assigned to you rank first, then tickets not yet logged that day; the same facts appear as tie-breakers in the attribution prompt. Inside one unbroken stretch each ticket now gets a single block, ordered by first activity and packed with no gaps; a ticket that cannot reach a minute folds into the one ranked above it.
|
|
23
|
+
|
|
24
|
+
Ignore a ticket in every week with `jcf config set session-ignore <KEY>` or the web's Ignore button, and restore it from the Ignored tickets list. An ignored ticket is never suggested or offered to the attribution agent; a branch or path match to it falls through to the session's other candidates, and its parallel time goes to the tickets it ran alongside. Reports carry its raw time as `ignored`. In the web calendar, back-to-back short suggestions show as one card per stretch, and the page uses the full window width.
|
|
25
|
+
|
|
26
|
+
An orchestrating session nothing else places is split across the open-sprint tickets it mentions, by mention count, per active stretch (new attribution signal `split`); deterministic reads such as `jcf watch` leave it unplaced. The web lists low-confidence matches with a "Log as" action, and saved entries can be deleted or moved to another ticket; a delete releases its session claim so the time is suggested again, and a move carries the claim to the replacement. `SavedEntries` gains `remove` and an optional `ticketKey` on update.
|
|
27
|
+
|
|
28
|
+
Quick approvals are confirmed in batches of up to fifty under one provider re-read (new `/api/rows/confirm-batch`), Jira worklogs are read eight issues at a time, and idempotent Jira reads retry a dropped connection twice, so a long queue no longer waits on one full re-read per approval.
|
|
29
|
+
|
|
30
|
+
A provider window that needs manual review no longer fails a read: proposals carry a per-provider `writeBlocked` hold, the web shows the hold and disables writes to held providers, and writes keep refusing.
|
|
31
|
+
|
|
32
|
+
Ticket moves persist a replacement intent before creating provider time. Uncertain or partial moves stay held across restart and cannot create another replacement on retry; a verified pair can be resolved by explicitly deleting either entry. Ordinary replacements retain their verified ID and start so extending a reviewed window does not mistake the move for unknown earlier time. The private source ledger upgrades to version 5 while retaining existing claims and holds.
|
|
33
|
+
|
|
34
|
+
Breaking (`@knpkv/clockify-api-client`): `TimeEntryWithRatesDtoV1.costRate` and `hourlyRate` are now `RateDtoV1 | null`, matching the live API, which returns `null` when no rate applies.
|
|
35
|
+
|
|
3
36
|
## 2.0.0
|
|
4
37
|
|
|
5
38
|
### Major Changes
|