@knpkv/jira-clockify 1.3.0 → 1.4.1

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 (242) hide show
  1. package/README.md +245 -1
  2. package/dist/package.json +36 -12
  3. package/dist/src/agent/agentSettings.d.ts +18 -0
  4. package/dist/src/agent/agentSettings.d.ts.map +1 -0
  5. package/dist/src/agent/agentSettings.js +23 -0
  6. package/dist/src/agent/agentSettings.js.map +1 -0
  7. package/dist/src/agent/schedule.d.ts +20 -0
  8. package/dist/src/agent/schedule.d.ts.map +1 -0
  9. package/dist/src/agent/schedule.js +189 -0
  10. package/dist/src/agent/schedule.js.map +1 -0
  11. package/dist/src/agent/sessions.d.ts +427 -0
  12. package/dist/src/agent/sessions.d.ts.map +1 -0
  13. package/dist/src/agent/sessions.js +868 -0
  14. package/dist/src/agent/sessions.js.map +1 -0
  15. package/dist/src/agent/sourceConsumption.d.ts +79 -0
  16. package/dist/src/agent/sourceConsumption.d.ts.map +1 -0
  17. package/dist/src/agent/sourceConsumption.js +191 -0
  18. package/dist/src/agent/sourceConsumption.js.map +1 -0
  19. package/dist/src/agent/watch.d.ts +76 -0
  20. package/dist/src/agent/watch.d.ts.map +1 -0
  21. package/dist/src/agent/watch.js +45 -0
  22. package/dist/src/agent/watch.js.map +1 -0
  23. package/dist/src/agent/writePlanning.d.ts +154 -0
  24. package/dist/src/agent/writePlanning.d.ts.map +1 -0
  25. package/dist/src/agent/writePlanning.js +210 -0
  26. package/dist/src/agent/writePlanning.js.map +1 -0
  27. package/dist/src/bin.d.ts +3 -0
  28. package/dist/src/bin.d.ts.map +1 -0
  29. package/dist/src/bin.js +9 -3
  30. package/dist/src/bin.js.map +1 -1
  31. package/dist/src/cli/agentWrite.d.ts +164 -0
  32. package/dist/src/cli/agentWrite.d.ts.map +1 -0
  33. package/dist/src/cli/agentWrite.js +362 -0
  34. package/dist/src/cli/agentWrite.js.map +1 -0
  35. package/dist/src/cli/auth.d.ts +8 -0
  36. package/dist/src/cli/auth.d.ts.map +1 -0
  37. package/dist/src/cli/auth.js +10 -10
  38. package/dist/src/cli/auth.js.map +1 -1
  39. package/dist/src/cli/calendar.d.ts +42 -0
  40. package/dist/src/cli/calendar.d.ts.map +1 -0
  41. package/dist/src/cli/calendar.js +189 -0
  42. package/dist/src/cli/calendar.js.map +1 -0
  43. package/dist/src/cli/config.d.ts +12 -0
  44. package/dist/src/cli/config.d.ts.map +1 -0
  45. package/dist/src/cli/config.js +163 -21
  46. package/dist/src/cli/config.js.map +1 -1
  47. package/dist/src/cli/fetchTicket.d.ts +51 -0
  48. package/dist/src/cli/fetchTicket.d.ts.map +1 -0
  49. package/dist/src/cli/fetchTicket.js +18 -2
  50. package/dist/src/cli/fetchTicket.js.map +1 -1
  51. package/dist/src/cli/fuzzySelect.d.ts +24 -0
  52. package/dist/src/cli/fuzzySelect.d.ts.map +1 -0
  53. package/dist/src/cli/layers.d.ts +40 -0
  54. package/dist/src/cli/layers.d.ts.map +1 -0
  55. package/dist/src/cli/layers.js +57 -13
  56. package/dist/src/cli/layers.js.map +1 -1
  57. package/dist/src/cli/list.d.ts +8 -0
  58. package/dist/src/cli/list.d.ts.map +1 -0
  59. package/dist/src/cli/list.js +2 -2
  60. package/dist/src/cli/list.js.map +1 -1
  61. package/dist/src/cli/reconcile.d.ts +129 -0
  62. package/dist/src/cli/reconcile.d.ts.map +1 -0
  63. package/dist/src/cli/reconcile.js +635 -46
  64. package/dist/src/cli/reconcile.js.map +1 -1
  65. package/dist/src/cli/root.d.ts +15 -0
  66. package/dist/src/cli/root.d.ts.map +1 -0
  67. package/dist/src/cli/root.js +4 -3
  68. package/dist/src/cli/root.js.map +1 -1
  69. package/dist/src/cli/runtimeFailure.d.ts +10 -0
  70. package/dist/src/cli/runtimeFailure.d.ts.map +1 -0
  71. package/dist/src/cli/runtimeFailure.js +17 -0
  72. package/dist/src/cli/runtimeFailure.js.map +1 -0
  73. package/dist/src/cli/setup.d.ts +10 -0
  74. package/dist/src/cli/setup.d.ts.map +1 -0
  75. package/dist/src/cli/setup.js +7 -7
  76. package/dist/src/cli/setup.js.map +1 -1
  77. package/dist/src/cli/timer/discard.d.ts +4 -0
  78. package/dist/src/cli/timer/discard.d.ts.map +1 -0
  79. package/dist/src/cli/timer/discard.js +2 -2
  80. package/dist/src/cli/timer/discard.js.map +1 -1
  81. package/dist/src/cli/timer/edit.d.ts +22 -0
  82. package/dist/src/cli/timer/edit.d.ts.map +1 -0
  83. package/dist/src/cli/timer/edit.js +62 -42
  84. package/dist/src/cli/timer/edit.js.map +1 -1
  85. package/dist/src/cli/timer/index.d.ts +12 -0
  86. package/dist/src/cli/timer/index.d.ts.map +1 -0
  87. package/dist/src/cli/timer/log.d.ts +16 -0
  88. package/dist/src/cli/timer/log.d.ts.map +1 -0
  89. package/dist/src/cli/timer/log.js +6 -6
  90. package/dist/src/cli/timer/log.js.map +1 -1
  91. package/dist/src/cli/timer/start.d.ts +21 -0
  92. package/dist/src/cli/timer/start.d.ts.map +1 -0
  93. package/dist/src/cli/timer/start.js +9 -9
  94. package/dist/src/cli/timer/start.js.map +1 -1
  95. package/dist/src/cli/timer/status.d.ts +22 -0
  96. package/dist/src/cli/timer/status.d.ts.map +1 -0
  97. package/dist/src/cli/timer/status.js +3 -3
  98. package/dist/src/cli/timer/status.js.map +1 -1
  99. package/dist/src/cli/timer/stop.d.ts +48 -0
  100. package/dist/src/cli/timer/stop.d.ts.map +1 -0
  101. package/dist/src/cli/timer/stop.js +19 -19
  102. package/dist/src/cli/timer/stop.js.map +1 -1
  103. package/dist/src/cli/timer.d.ts +11 -0
  104. package/dist/src/cli/timer.d.ts.map +1 -0
  105. package/dist/src/cli/timer.js +1 -1
  106. package/dist/src/cli/timer.js.map +1 -1
  107. package/dist/src/cli/watch.d.ts +54 -0
  108. package/dist/src/cli/watch.d.ts.map +1 -0
  109. package/dist/src/cli/watch.js +412 -0
  110. package/dist/src/cli/watch.js.map +1 -0
  111. package/dist/src/cli/watchLease.d.ts +99 -0
  112. package/dist/src/cli/watchLease.d.ts.map +1 -0
  113. package/dist/src/cli/watchLease.js +204 -0
  114. package/dist/src/cli/watchLease.js.map +1 -0
  115. package/dist/src/cli/writerGuard.d.ts +37 -0
  116. package/dist/src/cli/writerGuard.d.ts.map +1 -0
  117. package/dist/src/cli/writerGuard.js +92 -0
  118. package/dist/src/cli/writerGuard.js.map +1 -0
  119. package/dist/src/index.d.ts +46 -0
  120. package/dist/src/index.d.ts.map +1 -0
  121. package/dist/src/index.js +46 -0
  122. package/dist/src/index.js.map +1 -0
  123. package/dist/src/main.d.ts +4 -0
  124. package/dist/src/main.d.ts.map +1 -0
  125. package/dist/src/services/AgentSessionReader.d.ts +121 -0
  126. package/dist/src/services/AgentSessionReader.d.ts.map +1 -0
  127. package/dist/src/services/AgentSessionReader.js +392 -0
  128. package/dist/src/services/AgentSessionReader.js.map +1 -0
  129. package/dist/src/services/ClockifyAuth.d.ts +47 -0
  130. package/dist/src/services/ClockifyAuth.d.ts.map +1 -0
  131. package/dist/src/services/ClockifyAuth.js +2 -2
  132. package/dist/src/services/ClockifyAuth.js.map +1 -1
  133. package/dist/src/services/CodexTranscript.d.ts +112 -0
  134. package/dist/src/services/CodexTranscript.d.ts.map +1 -0
  135. package/dist/src/services/CodexTranscript.js +96 -0
  136. package/dist/src/services/CodexTranscript.js.map +1 -0
  137. package/dist/src/services/ConfigService.d.ts +99 -0
  138. package/dist/src/services/ConfigService.d.ts.map +1 -0
  139. package/dist/src/services/ConfigService.js +79 -7
  140. package/dist/src/services/ConfigService.js.map +1 -1
  141. package/dist/src/services/HomeDirectory.d.ts +17 -0
  142. package/dist/src/services/HomeDirectory.d.ts.map +1 -0
  143. package/dist/src/services/HomeDirectory.js +1 -1
  144. package/dist/src/services/IssueFacts.d.ts +127 -0
  145. package/dist/src/services/IssueFacts.d.ts.map +1 -0
  146. package/dist/src/services/IssueFacts.js +277 -0
  147. package/dist/src/services/IssueFacts.js.map +1 -0
  148. package/dist/src/services/ProviderDeletion.d.ts +19 -0
  149. package/dist/src/services/ProviderDeletion.d.ts.map +1 -0
  150. package/dist/src/services/ProviderDeletion.js +37 -0
  151. package/dist/src/services/ProviderDeletion.js.map +1 -0
  152. package/dist/src/services/ReconcileService.d.ts +378 -0
  153. package/dist/src/services/ReconcileService.d.ts.map +1 -0
  154. package/dist/src/services/ReconcileService.js +1270 -79
  155. package/dist/src/services/ReconcileService.js.map +1 -1
  156. package/dist/src/services/SavedEntries.d.ts +40 -0
  157. package/dist/src/services/SavedEntries.d.ts.map +1 -0
  158. package/dist/src/services/SavedEntries.js +209 -0
  159. package/dist/src/services/SavedEntries.js.map +1 -0
  160. package/dist/src/services/SessionAttributor.d.ts +114 -0
  161. package/dist/src/services/SessionAttributor.d.ts.map +1 -0
  162. package/dist/src/services/SessionAttributor.js +240 -0
  163. package/dist/src/services/SessionAttributor.js.map +1 -0
  164. package/dist/src/services/SourceLedger.d.ts +104 -0
  165. package/dist/src/services/SourceLedger.d.ts.map +1 -0
  166. package/dist/src/services/SourceLedger.js +302 -0
  167. package/dist/src/services/SourceLedger.js.map +1 -0
  168. package/dist/src/services/StateWriter.d.ts +39 -0
  169. package/dist/src/services/StateWriter.d.ts.map +1 -0
  170. package/dist/src/services/TicketService.d.ts +63 -0
  171. package/dist/src/services/TicketService.d.ts.map +1 -0
  172. package/dist/src/services/TimerService.d.ts +145 -0
  173. package/dist/src/services/TimerService.d.ts.map +1 -0
  174. package/dist/src/services/TimerService.js +113 -80
  175. package/dist/src/services/TimerService.js.map +1 -1
  176. package/dist/src/services/internal/JiraWorklogPost.d.ts +7 -0
  177. package/dist/src/services/internal/JiraWorklogPost.d.ts.map +1 -0
  178. package/dist/src/services/internal/JiraWorklogPost.js +32 -0
  179. package/dist/src/services/internal/JiraWorklogPost.js.map +1 -0
  180. package/dist/src/testing/fakeHeadless.d.ts +318 -0
  181. package/dist/src/testing/fakeHeadless.d.ts.map +1 -0
  182. package/dist/src/testing/fakeHeadless.js +1149 -0
  183. package/dist/src/testing/fakeHeadless.js.map +1 -0
  184. package/dist/src/tui/App.d.ts +6 -0
  185. package/dist/src/tui/App.d.ts.map +1 -0
  186. package/dist/src/tui/App.js +1 -1
  187. package/dist/src/tui/App.js.map +1 -1
  188. package/dist/src/tui/atoms/runtime.d.ts +8 -0
  189. package/dist/src/tui/atoms/runtime.d.ts.map +1 -0
  190. package/dist/src/tui/atoms/runtime.js +1 -1
  191. package/dist/src/tui/atoms/runtime.js.map +1 -1
  192. package/dist/src/tui/atoms/tickets.d.ts +3 -0
  193. package/dist/src/tui/atoms/tickets.d.ts.map +1 -0
  194. package/dist/src/tui/atoms/timer.d.ts +11 -0
  195. package/dist/src/tui/atoms/timer.d.ts.map +1 -0
  196. package/dist/src/tui/atoms/timer.js +1 -1
  197. package/dist/src/tui/atoms/timer.js.map +1 -1
  198. package/dist/src/tui/atoms/ui.d.ts +11 -0
  199. package/dist/src/tui/atoms/ui.d.ts.map +1 -0
  200. package/dist/src/tui/atoms/ui.js +1 -1
  201. package/dist/src/tui/atoms/ui.js.map +1 -1
  202. package/dist/src/tui/components/BigTimer.d.ts +2 -0
  203. package/dist/src/tui/components/BigTimer.d.ts.map +1 -0
  204. package/dist/src/tui/components/Footer.d.ts +2 -0
  205. package/dist/src/tui/components/Footer.d.ts.map +1 -0
  206. package/dist/src/tui/components/Header.d.ts +2 -0
  207. package/dist/src/tui/components/Header.d.ts.map +1 -0
  208. package/dist/src/tui/components/Header.js +1 -1
  209. package/dist/src/tui/components/Header.js.map +1 -1
  210. package/dist/src/tui/components/PopupInput.d.ts +18 -0
  211. package/dist/src/tui/components/PopupInput.d.ts.map +1 -0
  212. package/dist/src/tui/components/PopupMessage.d.ts +20 -0
  213. package/dist/src/tui/components/PopupMessage.d.ts.map +1 -0
  214. package/dist/src/tui/components/TicketList.d.ts +2 -0
  215. package/dist/src/tui/components/TicketList.d.ts.map +1 -0
  216. package/dist/src/tui/components/TicketList.js +1 -1
  217. package/dist/src/tui/components/TicketList.js.map +1 -1
  218. package/dist/src/tui/components/TicketRow.d.ts +8 -0
  219. package/dist/src/tui/components/TicketRow.d.ts.map +1 -0
  220. package/dist/src/tui/components/TimerDisplay.d.ts +2 -0
  221. package/dist/src/tui/components/TimerDisplay.d.ts.map +1 -0
  222. package/dist/src/tui/components/index.d.ts +12 -0
  223. package/dist/src/tui/components/index.d.ts.map +1 -0
  224. package/dist/src/tui/context/theme.d.ts +15 -0
  225. package/dist/src/tui/context/theme.d.ts.map +1 -0
  226. package/dist/src/tui/hooks/useElapsedTimer.d.ts +6 -0
  227. package/dist/src/tui/hooks/useElapsedTimer.d.ts.map +1 -0
  228. package/dist/src/tui/hooks/useElapsedTimer.js +1 -1
  229. package/dist/src/tui/hooks/useElapsedTimer.js.map +1 -1
  230. package/dist/src/tui/hooks/useTerminalSize.d.ts +5 -0
  231. package/dist/src/tui/hooks/useTerminalSize.d.ts.map +1 -0
  232. package/dist/src/utils/hints.d.ts +12 -0
  233. package/dist/src/utils/hints.d.ts.map +1 -0
  234. package/dist/src/utils/hints.js +12 -0
  235. package/dist/src/utils/hints.js.map +1 -0
  236. package/dist/src/utils/time.d.ts +104 -0
  237. package/dist/src/utils/time.d.ts.map +1 -0
  238. package/dist/src/utils/time.js +74 -8
  239. package/dist/src/utils/time.js.map +1 -1
  240. package/dist/tsconfig.tsbuildinfo +1 -1
  241. package/package.json +36 -18
  242. package/skills/jcf/SKILL.md +93 -1
@@ -27,13 +27,18 @@ import * as Data from "effect/Data";
27
27
  import * as DateTime from "effect/DateTime";
28
28
  import * as Duration from "effect/Duration";
29
29
  import * as Effect from "effect/Effect";
30
+ import * as FileSystem from "effect/FileSystem";
31
+ import * as HttpClient from "effect/http/HttpClient";
30
32
  import * as Layer from "effect/Layer";
31
33
  import * as Option from "effect/Option";
32
- import * as Predicate from "effect/Predicate";
34
+ import * as Path from "effect/Path";
35
+ import * as Ref from "effect/Ref";
36
+ import * as Semaphore from "effect/Semaphore";
33
37
  import * as SubscriptionRef from "effect/SubscriptionRef";
34
- import * as HttpClient from "effect/unstable/http/HttpClient";
38
+ import * as WriterGuard from "../cli/writerGuard.js";
35
39
  import { ClockifyAuth } from "./ClockifyAuth.js";
36
40
  import { ConfigService } from "./ConfigService.js";
41
+ import { postJiraWorklog as postWithClient } from "./internal/JiraWorklogPost.js";
37
42
  import { StateWriter } from "./StateWriter.js";
38
43
  export class TimerError extends Data.TaggedError("TimerError") {
39
44
  }
@@ -49,16 +54,6 @@ const emptyState = {
49
54
  billable: null,
50
55
  startedViaJcf: false
51
56
  };
52
- const formatJiraFailure = (error) => {
53
- if (!Predicate.isReadonlyObject(error))
54
- return String(error);
55
- const response = Predicate.isReadonlyObject(error.response) ? error.response : undefined;
56
- const status = Predicate.isNumber(response?.status) ? `HTTP ${response.status}` : "Jira request failed";
57
- if (!("cause" in error))
58
- return status;
59
- const detail = Predicate.isString(error.cause) ? error.cause : JSON.stringify(error.cause);
60
- return detail.length === 0 ? status : `${status}: ${detail}`;
61
- };
62
57
  export class TimerService extends Context.Service()("jcf/TimerService") {
63
58
  }
64
59
  export const layer = Layer.effect(TimerService, Effect.gen(function* () {
@@ -67,8 +62,12 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
67
62
  const httpClient = yield* HttpClient.HttpClient;
68
63
  const clockifyAuth = yield* ClockifyAuth;
69
64
  const config = yield* ConfigService;
65
+ const fileSystem = yield* FileSystem.FileSystem;
66
+ const path = yield* Path.Path;
70
67
  const stateWriter = yield* StateWriter;
71
68
  const ref = yield* SubscriptionRef.make(emptyState);
69
+ const stateRevision = yield* Ref.make(0);
70
+ const stateMutations = yield* Semaphore.make(1);
72
71
  const tagCache = new Map();
73
72
  const writeStateFile = (state) => Effect.gen(function* () {
74
73
  const nowMs = yield* Clock.currentTimeMillis;
@@ -78,22 +77,32 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
78
77
  summary: state.summary,
79
78
  project: state.project,
80
79
  startedAt: state.startedAt?.toISOString() ?? null,
81
- startedAt_unix: state.startedAt ? Math.floor(state.startedAt.getTime() / 1000) : null,
82
- elapsed: state.startedAt ? Math.floor((nowMs - state.startedAt.getTime()) / 1000) : 0,
80
+ startedAt_unix: state.startedAt === null ? null : Math.floor(state.startedAt.getTime() / 1000),
81
+ elapsed: state.startedAt === null ? 0 : Math.floor((nowMs - state.startedAt.getTime()) / 1000),
83
82
  clockifyEntryId: state.clockifyEntryId
84
83
  };
85
84
  return yield* stateWriter.write(file);
86
85
  });
87
86
  const getAuth = clockifyAuth.getConfig.pipe(Effect.mapError((e) => new TimerError({ message: e.message })));
87
+ const storeState = (state) => stateMutations.withPermits(1)(Effect.gen(function* () {
88
+ yield* writeStateFile(state);
89
+ yield* SubscriptionRef.set(ref, state);
90
+ yield* Ref.update(stateRevision, (revision) => revision + 1);
91
+ }));
92
+ const clearState = stateMutations.withPermits(1)(Effect.gen(function* () {
93
+ yield* SubscriptionRef.set(ref, emptyState);
94
+ yield* stateWriter.clear;
95
+ yield* Ref.update(stateRevision, (revision) => revision + 1);
96
+ }));
88
97
  // Resolve projectId: explicit > config default > auto-match by Jira-project name > null
89
98
  const resolveProjectId = (ticket, workspaceId, explicit) => Effect.gen(function* () {
90
99
  const cfg = yield* config.get;
91
100
  let projectId = explicit ?? cfg.defaultProjectId ?? null;
92
- if (!projectId) {
101
+ if (projectId === null || projectId === "") {
93
102
  const jiraProject = ticket.key.split("-")[0] ?? "";
94
103
  const clockifyProjectName = cfg.projectMap[jiraProject] ?? jiraProject;
95
- const project = yield* clockify.getProjectByName(workspaceId, clockifyProjectName).pipe(Effect.catch(() => Effect.succeed(null)));
96
- if (project)
104
+ const project = yield* clockify.getProjectByName(workspaceId, clockifyProjectName).pipe(Effect.orElseSucceed(() => null));
105
+ if (project !== null && project !== undefined)
97
106
  projectId = project.id;
98
107
  }
99
108
  return projectId;
@@ -104,12 +113,12 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
104
113
  const tagIds = [];
105
114
  for (const tagName of tagNames) {
106
115
  const cached = tagCache.get(tagName);
107
- if (cached) {
116
+ if (cached !== undefined && cached !== "") {
108
117
  tagIds.push(cached);
109
118
  continue;
110
119
  }
111
- const tag = yield* clockify.findOrCreateTag(workspaceId, tagName).pipe(Effect.catch(() => Effect.succeed(null)));
112
- if (tag) {
120
+ const tag = yield* clockify.findOrCreateTag(workspaceId, tagName).pipe(Effect.orElseSucceed(() => null));
121
+ if (tag !== undefined && tag !== null) {
113
122
  tagIds.push(tag.id);
114
123
  tagCache.set(tagName, tag.id);
115
124
  }
@@ -119,11 +128,7 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
119
128
  });
120
129
  // Post a Jira worklog through the generated, Schema-validated client.
121
130
  const postJiraWorklog = (ticketKey, startedAt, durationSeconds, comment) => Effect.gen(function* () {
122
- // Jira rejects worklogs <60s — floor to 60s. Clockify keeps actual elapsed.
123
- const timeSpent = Math.max(60, Math.floor(durationSeconds));
124
- const started = startedAt.toISOString().replace("Z", "+0000");
125
- yield* Effect.logDebug(`Jira worklog: ${ticketKey} ${timeSpent}s`);
126
- const loggedIn = yield* jiraAuth.isLoggedIn().pipe(Effect.catch(() => Effect.succeed(false)));
131
+ const loggedIn = yield* jiraAuth.isLoggedIn().pipe(Effect.orElseSucceed(() => false));
127
132
  if (!loggedIn) {
128
133
  yield* Effect.logDebug("Jira worklog skipped: missing access token or cloudId");
129
134
  return { _tag: "NotLoggedIn" };
@@ -140,21 +145,13 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
140
145
  baseUrl: "",
141
146
  auth: { type: "oauth2", ...auth.value }
142
147
  });
143
- return yield* jira.addWorklog(ticketKey, {
144
- payload: {
145
- started,
146
- timeSpentSeconds: timeSpent,
147
- ...(comment && {
148
- comment: {
149
- type: "doc",
150
- version: 1,
151
- content: [{ type: "paragraph", content: [{ type: "text", text: comment }] }]
152
- }
153
- })
154
- }
155
- }).pipe(Effect.as({ _tag: "Posted" }), Effect.catchTag("AddWorklog401", () => Effect.succeed({ _tag: "NotLoggedIn" })), Effect.catch((error) => Effect.logDebug(`Jira worklog failed: ${formatJiraFailure(error)}`).pipe(Effect.as({ _tag: "Failed", message: formatJiraFailure(error) }))));
148
+ return yield* postWithClient(jira, { ticketKey, startedAt, durationSeconds, comment });
156
149
  });
157
- const start = (ticket, options) => Effect.gen(function* () {
150
+ const provideGuard = (effect) => effect.pipe(Effect.provideService(ConfigService, config), Effect.provideService(FileSystem.FileSystem, fileSystem), Effect.provideService(Path.Path, path));
151
+ const guardTimerMutation = (effect) => provideGuard(WriterGuard.mutate(effect)).pipe(Effect.mapError((error) => error._tag === "WriterGuardError"
152
+ ? new TimerError({ message: error.message, cause: error })
153
+ : error));
154
+ const startUnGuarded = (ticket, options) => Effect.gen(function* () {
158
155
  const auth = yield* getAuth;
159
156
  const cfg = yield* config.get;
160
157
  // The new entry's start (possibly backdated to correct a forgotten start).
@@ -168,8 +165,8 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
168
165
  const projectId = yield* resolveProjectId(ticket, auth.workspaceId, options?.projectId ?? null);
169
166
  // Resolve project name
170
167
  let projectName = cfg.defaultProjectName ?? null;
171
- if (projectId && !projectName) {
172
- const projects = yield* clockify.getProjects(auth.workspaceId).pipe(Effect.catch(() => Effect.succeed([])));
168
+ if (projectId !== null && projectId !== "" && (projectName === null || projectName === "")) {
169
+ const projects = yield* clockify.getProjects(auth.workspaceId).pipe(Effect.orElseSucceed(() => []));
173
170
  projectName = projects.find((p) => p.id === projectId)?.name ?? null;
174
171
  }
175
172
  // Resolve billable: explicit > config default > null (will prompt on stop)
@@ -196,9 +193,9 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
196
193
  billable,
197
194
  startedViaJcf: true
198
195
  };
199
- yield* writeStateFile(newState);
200
- yield* SubscriptionRef.set(ref, newState);
196
+ yield* storeState(newState);
201
197
  });
198
+ const start = (ticket, options) => guardTimerMutation(startUnGuarded(ticket, options));
202
199
  // Two ways the end can be moved off "now", with deliberately opposite
203
200
  // out-of-bounds behaviour:
204
201
  //
@@ -213,22 +210,22 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
213
210
  const internalStop = (options, endAt) => Effect.gen(function* () {
214
211
  const auth = yield* getAuth;
215
212
  const current = yield* SubscriptionRef.get(ref);
216
- if (!current.active || !current.startedAt) {
217
- return yield* Effect.fail(new TimerError({ message: "No active timer" }));
213
+ if (!current.active || current.startedAt === null) {
214
+ return yield* new TimerError({ message: "No active timer" });
218
215
  }
219
216
  const realNow = yield* DateTime.nowAsDate;
220
217
  let now;
221
- if (options?.endedAt) {
218
+ if (options?.endedAt !== undefined) {
222
219
  const corrected = options.endedAt;
223
220
  if (corrected.getTime() <= current.startedAt.getTime()) {
224
- return yield* Effect.fail(new TimerError({ message: "Corrected end is at or before the timer start." }));
221
+ return yield* new TimerError({ message: "Corrected end is at or before the timer start." });
225
222
  }
226
223
  if (corrected.getTime() > realNow.getTime()) {
227
- return yield* Effect.fail(new TimerError({ message: "Corrected end is in the future." }));
224
+ return yield* new TimerError({ message: "Corrected end is in the future." });
228
225
  }
229
226
  now = corrected;
230
227
  }
231
- else if (endAt && endAt.getTime() >= current.startedAt.getTime()) {
228
+ else if (endAt !== null && endAt !== undefined && endAt.getTime() >= current.startedAt.getTime()) {
232
229
  now = endAt;
233
230
  }
234
231
  else {
@@ -241,13 +238,13 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
241
238
  const billable = options?.billable ?? current.billable ?? null;
242
239
  const comment = options?.comment;
243
240
  // Stop via PUT — preserve existing tagIds from the entry
244
- if (current.clockifyEntryId) {
245
- const existing = yield* clockify.getTimeEntry(auth.workspaceId, current.clockifyEntryId).pipe(Effect.catch(() => Effect.succeed(null)));
241
+ if (current.clockifyEntryId !== null) {
242
+ const existing = yield* clockify.getTimeEntry(auth.workspaceId, current.clockifyEntryId).pipe(Effect.orElseSucceed(() => null));
246
243
  const tagIds = existing?.tagIds ?? [];
247
244
  // Append comment to Clockify description if provided
248
- const description = comment
249
- ? `${existing?.description ?? ""} | ${comment}`
250
- : undefined;
245
+ const description = comment === undefined || comment === ""
246
+ ? undefined
247
+ : `${existing?.description ?? ""} | ${comment}`;
251
248
  yield* clockify.updateTimeEntry(auth.workspaceId, current.clockifyEntryId, {
252
249
  start: current.startedAt.toISOString(),
253
250
  end: now.toISOString(),
@@ -263,19 +260,19 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
263
260
  }).pipe(Effect.mapError((e) => new TimerError({ message: `Failed to stop timer: ${e.message}`, cause: e })));
264
261
  }
265
262
  // Log Jira worklog through the generated Jira client.
266
- const worklog = current.ticketKey
267
- ? { ticketKey: current.ticketKey, startedAt: current.startedAt, durationSeconds: durationMs / 1000, comment }
268
- : null;
263
+ const ticketKey = current.ticketKey;
264
+ const worklog = ticketKey === null || ticketKey === ""
265
+ ? null
266
+ : { ticketKey, startedAt: current.startedAt, durationSeconds: durationMs / 1000, comment };
269
267
  // Use worklog.* throughout so the live POST and the stored retry params can never drift.
270
- const jiraWorklog = worklog
271
- ? yield* postJiraWorklog(worklog.ticketKey, worklog.startedAt, worklog.durationSeconds, worklog.comment)
272
- : null;
273
- yield* SubscriptionRef.set(ref, emptyState);
274
- yield* stateWriter.clear;
268
+ const jiraWorklog = worklog === null
269
+ ? null
270
+ : yield* postJiraWorklog(worklog.ticketKey, worklog.startedAt, worklog.durationSeconds, worklog.comment);
271
+ yield* clearState;
275
272
  return {
276
273
  duration,
277
274
  clockifyLogged: true,
278
- needsProjectId: !projectId,
275
+ needsProjectId: projectId === null || projectId === "",
279
276
  needsBillable: billable === null,
280
277
  jiraWorklog,
281
278
  // Only a retryable `Failed` exposes retry params — `NotLoggedIn` can't be fixed by retrying.
@@ -283,20 +280,22 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
283
280
  };
284
281
  });
285
282
  // Retry a worklog post in isolation (Clockify already saved during the failed stop).
286
- const logWorklog = (params) => postJiraWorklog(params.ticketKey, params.startedAt, params.durationSeconds, params.comment);
283
+ const logWorklog = (params) => provideGuard(WriterGuard.mutate(postJiraWorklog(params.ticketKey, params.startedAt, params.durationSeconds, params.comment))).pipe(Effect.catchTag("WriterGuardError", (error) => Effect.succeed({ _tag: "Failed", message: error.message })));
287
284
  // Log a completed interval after the fact — for when the timer was never started.
288
285
  // Writes a closed Clockify entry (start + end) and posts the matching Jira worklog,
289
286
  // without ever touching the running-timer state.
290
- const logManual = (ticket, options) => Effect.gen(function* () {
287
+ const logManualUnGuarded = (ticket, options) => Effect.gen(function* () {
291
288
  const nowMs = yield* Clock.currentTimeMillis;
292
289
  // Shared future-time guard for all backdating callers (log + stop-correction).
293
290
  // Mirrors `start --since`, which rejects future starts at the command layer.
294
291
  if (options.start.getTime() > nowMs) {
295
- return yield* Effect.fail(new TimerError({ message: "Start time is in the future. Pick a time at or before now." }));
292
+ return yield* new TimerError({ message: "Start time is in the future. Pick a time at or before now." });
296
293
  }
297
294
  const end = new Date(options.start.getTime() + options.durationSeconds * 1000);
298
295
  if (end.getTime() > nowMs) {
299
- return yield* Effect.fail(new TimerError({ message: "End time is in the future. Shorten the duration or pick an earlier start." }));
296
+ return yield* new TimerError({
297
+ message: "End time is in the future. Shorten the duration or pick an earlier start."
298
+ });
300
299
  }
301
300
  const auth = yield* getAuth;
302
301
  const cfg = yield* config.get;
@@ -322,10 +321,16 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
322
321
  billable
323
322
  };
324
323
  });
324
+ const logManual = (ticket, options) => guardTimerMutation(logManualUnGuarded(ticket, options));
325
325
  const detectRunning = Effect.gen(function* () {
326
+ const observedRevision = yield* Ref.get(stateRevision);
326
327
  const auth = yield* getAuth;
327
- const running = yield* clockify.getRunningTimer(auth.workspaceId, auth.userId).pipe(Effect.catch(() => Effect.succeed(null)));
328
- if (running && running.timeInterval.start) {
328
+ // Propagated, not swallowed into `null`. "Could not ask" and "nothing is running" are opposite
329
+ // answers to a caller deciding whether time is safe to write: a running entry has no end and
330
+ // so is invisible to every tally, and treating an unreachable Clockify as an all-clear is how
331
+ // those hours get written a second time.
332
+ const running = yield* clockify.getRunningTimer(auth.workspaceId, auth.userId).pipe(Effect.mapError((cause) => new TimerError({ message: `Could not check for a running Clockify timer: ${cause.message}`, cause })));
333
+ if (running !== null && running.timeInterval.start !== undefined && running.timeInterval.start !== "") {
329
334
  const startedAt = new Date(running.timeInterval.start);
330
335
  // Parse "[KEY] summary" or "KEY: summary" format
331
336
  const desc = running.description ?? "";
@@ -333,13 +338,13 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
333
338
  const colonMatch = desc.match(/^([^:]+):\s*(.*)$/);
334
339
  const ticketKey = bracketMatch?.[1]?.trim() ?? colonMatch?.[1]?.trim() ?? null;
335
340
  const summary = bracketMatch?.[2]?.trim() ?? colonMatch?.[2]?.trim() ?? null;
336
- if (!ticketKey) {
341
+ if (ticketKey === null || ticketKey === "") {
337
342
  yield* Effect.logWarning(`Running Clockify timer has unparseable description: "${desc}"`);
338
343
  }
339
344
  // Resolve project name
340
345
  let resolvedProjectName = null;
341
- if (running.projectId) {
342
- const projects = yield* clockify.getProjects(auth.workspaceId).pipe(Effect.catch(() => Effect.succeed([])));
346
+ if (running.projectId !== undefined && running.projectId !== null) {
347
+ const projects = yield* clockify.getProjects(auth.workspaceId).pipe(Effect.orElseSucceed(() => []));
343
348
  resolvedProjectName = projects.find((p) => p.id === running.projectId)?.name ?? null;
344
349
  }
345
350
  const newState = {
@@ -354,25 +359,53 @@ export const layer = Layer.effect(TimerService, Effect.gen(function* () {
354
359
  billable: running.billable ?? null,
355
360
  startedViaJcf: false
356
361
  };
357
- yield* writeStateFile(newState);
358
- yield* SubscriptionRef.set(ref, newState);
362
+ yield* stateMutations.withPermits(1)(Effect.gen(function* () {
363
+ if ((yield* Ref.get(stateRevision)) !== observedRevision)
364
+ return;
365
+ yield* writeStateFile(newState);
366
+ yield* SubscriptionRef.set(ref, newState);
367
+ yield* Ref.update(stateRevision, (revision) => revision + 1);
368
+ }));
369
+ return;
359
370
  }
371
+ // Clockify is the source of truth, so "nothing running" has to clear a stale active state —
372
+ // otherwise a timer stopped from the web keeps a long-lived `jcf watch` excluding its day for
373
+ // the rest of the run. Only once the entry was known to Clockify: a state with no entry id yet
374
+ // may simply be a start this poll overtook.
375
+ yield* stateMutations.withPermits(1)(Effect.gen(function* () {
376
+ if ((yield* Ref.get(stateRevision)) !== observedRevision)
377
+ return;
378
+ const current = yield* SubscriptionRef.get(ref);
379
+ if (!current.active || current.clockifyEntryId === null)
380
+ return;
381
+ yield* writeStateFile(emptyState);
382
+ yield* SubscriptionRef.set(ref, emptyState);
383
+ yield* Ref.update(stateRevision, (revision) => revision + 1);
384
+ }));
360
385
  });
361
386
  // Discard: delete the Clockify entry, clear state, no Jira worklog
362
- const discard = Effect.gen(function* () {
387
+ const discardUnGuarded = Effect.gen(function* () {
363
388
  const current = yield* SubscriptionRef.get(ref);
364
389
  if (!current.active) {
365
- return yield* Effect.fail(new TimerError({ message: "No active timer to discard" }));
390
+ return yield* new TimerError({ message: "No active timer to discard" });
366
391
  }
367
392
  const auth = yield* getAuth;
368
- if (current.clockifyEntryId) {
393
+ if (current.clockifyEntryId !== null) {
369
394
  yield* clockify
370
395
  .deleteTimeEntry(auth.workspaceId, current.clockifyEntryId)
371
396
  .pipe(Effect.mapError(() => new TimerError({ message: "delete failed" })), Effect.catchTag("TimerError", () => Effect.void));
372
397
  }
373
- yield* SubscriptionRef.set(ref, emptyState);
374
- yield* stateWriter.clear;
398
+ yield* clearState;
375
399
  });
376
- return { state: ref, start, stop: internalStop, logWorklog, logManual, discard, detectRunning };
400
+ const discard = guardTimerMutation(discardUnGuarded);
401
+ return {
402
+ state: ref,
403
+ start,
404
+ stop: (options) => guardTimerMutation(internalStop(options)),
405
+ logWorklog,
406
+ logManual,
407
+ discard,
408
+ detectRunning
409
+ };
377
410
  }));
378
411
  //# sourceMappingURL=TimerService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimerService.js","sourceRoot":"","sources":["../../../src/services/TimerService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TimerService.js","sourceRoot":"","sources":["../../../src/services/TimerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Post through the already selected Jira client; never resolve credentials inside this boundary. */
2
+ import type { JiraApiClientContract } from "@knpkv/jira-api-client";
3
+ import * as Effect from "effect/Effect";
4
+ import type { JiraWorklogOutcome, WorklogParams } from "../TimerService.js";
5
+ /** The selected client's credential, site, and account must already have been verified by its caller. */
6
+ export declare const postJiraWorklog: (jira: Pick<JiraApiClientContract, "addWorklog">, params: WorklogParams) => Effect.Effect<JiraWorklogOutcome, never, never>;
7
+ //# sourceMappingURL=JiraWorklogPost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JiraWorklogPost.d.ts","sourceRoot":"","sources":["../../../../src/services/internal/JiraWorklogPost.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAW3E,yGAAyG;AACzG,eAAO,MAAM,eAAe,SAAU,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,UAAU,aAAa,oDA0BlG,CAAA"}
@@ -0,0 +1,32 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Predicate from "effect/Predicate";
3
+ const failureMessage = (error) => {
4
+ if (!Predicate.isReadonlyObject(error))
5
+ return String(error);
6
+ const response = Predicate.isReadonlyObject(error.response) ? error.response : undefined;
7
+ const status = Predicate.isNumber(response?.status) ? `HTTP ${response.status}` : "Jira request failed";
8
+ if (!("cause" in error))
9
+ return status;
10
+ const detail = Predicate.isString(error.cause) ? error.cause : JSON.stringify(error.cause);
11
+ return detail.length === 0 ? status : `${status}: ${detail}`;
12
+ };
13
+ /** The selected client's credential, site, and account must already have been verified by its caller. */
14
+ export const postJiraWorklog = (jira, params) => Effect.gen(function* () {
15
+ const timeSpent = Math.max(60, Math.floor(params.durationSeconds));
16
+ const started = params.startedAt.toISOString().replace("Z", "+0000");
17
+ yield* Effect.logDebug(`Jira worklog: ${params.ticketKey} ${timeSpent}s`);
18
+ return yield* jira.addWorklog(params.ticketKey, {
19
+ payload: {
20
+ started,
21
+ timeSpentSeconds: timeSpent,
22
+ ...(params.comment && {
23
+ comment: {
24
+ type: "doc",
25
+ version: 1,
26
+ content: [{ type: "paragraph", content: [{ type: "text", text: params.comment }] }]
27
+ }
28
+ })
29
+ }
30
+ }).pipe(Effect.map((worklog) => ({ _tag: "Posted", entryId: worklog.id })), Effect.catchTag("AddWorklog401", () => Effect.succeed({ _tag: "NotLoggedIn" })), Effect.catch((error) => Effect.logDebug(`Jira worklog failed: ${failureMessage(error)}`).pipe(Effect.as({ _tag: "Failed", message: failureMessage(error) }))));
31
+ });
32
+ //# sourceMappingURL=JiraWorklogPost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JiraWorklogPost.js","sourceRoot":"","sources":["../../../../src/services/internal/JiraWorklogPost.ts"],"names":[],"mappings":"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"}