@knpkv/jira-clockify 0.2.0 → 0.5.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.
Files changed (83) hide show
  1. package/README.md +4 -1
  2. package/dist/package.json +12 -13
  3. package/dist/src/bin.js +30 -13
  4. package/dist/src/bin.js.map +1 -1
  5. package/dist/src/cli/auth.js +23 -19
  6. package/dist/src/cli/auth.js.map +1 -1
  7. package/dist/src/cli/config.js +4 -4
  8. package/dist/src/cli/config.js.map +1 -1
  9. package/dist/src/cli/fetchTicket.js +30 -0
  10. package/dist/src/cli/fetchTicket.js.map +1 -0
  11. package/dist/src/cli/fuzzySelect.js +6 -5
  12. package/dist/src/cli/fuzzySelect.js.map +1 -1
  13. package/dist/src/cli/layers.js +10 -8
  14. package/dist/src/cli/layers.js.map +1 -1
  15. package/dist/src/cli/list.js +1 -1
  16. package/dist/src/cli/list.js.map +1 -1
  17. package/dist/src/cli/setup.js +19 -19
  18. package/dist/src/cli/setup.js.map +1 -1
  19. package/dist/src/cli/timer/discard.js +2 -2
  20. package/dist/src/cli/timer/discard.js.map +1 -1
  21. package/dist/src/cli/timer/edit.js +11 -11
  22. package/dist/src/cli/timer/edit.js.map +1 -1
  23. package/dist/src/cli/timer/log.js +56 -79
  24. package/dist/src/cli/timer/log.js.map +1 -1
  25. package/dist/src/cli/timer/start.js +56 -40
  26. package/dist/src/cli/timer/start.js.map +1 -1
  27. package/dist/src/cli/timer/status.js +7 -7
  28. package/dist/src/cli/timer/status.js.map +1 -1
  29. package/dist/src/cli/timer/stop.js +183 -59
  30. package/dist/src/cli/timer/stop.js.map +1 -1
  31. package/dist/src/main.js +15 -3
  32. package/dist/src/main.js.map +1 -1
  33. package/dist/src/services/ClockifyAuth.js +12 -23
  34. package/dist/src/services/ClockifyAuth.js.map +1 -1
  35. package/dist/src/services/ConfigService.js +7 -7
  36. package/dist/src/services/ConfigService.js.map +1 -1
  37. package/dist/src/services/HomeDirectory.js +14 -0
  38. package/dist/src/services/HomeDirectory.js.map +1 -0
  39. package/dist/src/services/StateWriter.js +8 -8
  40. package/dist/src/services/StateWriter.js.map +1 -1
  41. package/dist/src/services/TicketService.js +22 -15
  42. package/dist/src/services/TicketService.js.map +1 -1
  43. package/dist/src/services/TimerService.js +126 -60
  44. package/dist/src/services/TimerService.js.map +1 -1
  45. package/dist/src/tui/App.js +72 -8
  46. package/dist/src/tui/App.js.map +1 -1
  47. package/dist/src/tui/atoms/runtime.js +1 -1
  48. package/dist/src/tui/atoms/runtime.js.map +1 -1
  49. package/dist/src/tui/atoms/tickets.js +1 -1
  50. package/dist/src/tui/atoms/tickets.js.map +1 -1
  51. package/dist/src/tui/atoms/timer.js +7 -2
  52. package/dist/src/tui/atoms/timer.js.map +1 -1
  53. package/dist/src/tui/atoms/ui.js +1 -1
  54. package/dist/src/tui/atoms/ui.js.map +1 -1
  55. package/dist/src/tui/components/BigTimer.js +2 -2
  56. package/dist/src/tui/components/BigTimer.js.map +1 -1
  57. package/dist/src/tui/components/Footer.js +1 -1
  58. package/dist/src/tui/components/Footer.js.map +1 -1
  59. package/dist/src/tui/components/Header.js +3 -2
  60. package/dist/src/tui/components/Header.js.map +1 -1
  61. package/dist/src/tui/components/PopupMessage.js +7 -2
  62. package/dist/src/tui/components/PopupMessage.js.map +1 -1
  63. package/dist/src/tui/components/TicketList.js +3 -2
  64. package/dist/src/tui/components/TicketList.js.map +1 -1
  65. package/dist/src/tui/context/theme.js.map +1 -1
  66. package/dist/src/tui/hooks/useElapsedTimer.js +3 -2
  67. package/dist/src/tui/hooks/useElapsedTimer.js.map +1 -1
  68. package/dist/src/tui/hooks/useTerminalSize.js +1 -21
  69. package/dist/src/tui/hooks/useTerminalSize.js.map +1 -1
  70. package/dist/src/utils/time.js +55 -5
  71. package/dist/src/utils/time.js.map +1 -1
  72. package/dist/test/TimerService.test.js +224 -31
  73. package/dist/test/TimerService.test.js.map +1 -1
  74. package/dist/test/fetchTicket.test.js +89 -0
  75. package/dist/test/fetchTicket.test.js.map +1 -0
  76. package/dist/test/stopPrompts.test.js +93 -0
  77. package/dist/test/stopPrompts.test.js.map +1 -0
  78. package/dist/test/time.test.js +84 -0
  79. package/dist/test/time.test.js.map +1 -0
  80. package/dist/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +16 -17
  82. package/skills/jcf/SKILL.md +89 -0
  83. package/skills/jcf/agents/openai.yaml +4 -0
package/dist/src/main.js CHANGED
@@ -8,13 +8,25 @@ import { createCliRenderer } from "@opentui/core";
8
8
  import { createRoot } from "@opentui/react";
9
9
  import { Deferred, Effect } from "effect";
10
10
  import { App } from "./tui/App.js";
11
- const program = Effect.gen(function* () {
11
+ const escape = "\u001b";
12
+ const isTerminalCapabilityResponse = (sequence) => (sequence.startsWith(`${escape}P>|`) && sequence.includes(`${escape}\\`)) ||
13
+ (sequence.startsWith(`${escape}[?`) && sequence.endsWith("$y")) ||
14
+ (sequence.startsWith(`${escape}[?`) && sequence.endsWith("u")) ||
15
+ (sequence.startsWith(`${escape}[?`) && sequence.endsWith("c")) ||
16
+ sequence.includes("|ghostty ");
17
+ const program = Effect.gen(function* makeProgram() {
12
18
  const exitSignal = yield* Deferred.make();
13
19
  const renderer = yield* Effect.acquireRelease(Effect.promise(() => createCliRenderer({
14
- exitOnCtrlC: false
20
+ exitOnCtrlC: false,
21
+ prependInputHandlers: [isTerminalCapabilityResponse],
22
+ useKittyKeyboard: null,
23
+ useThread: false
15
24
  })), (renderer) => Effect.sync(() => renderer.destroy()));
16
25
  const onQuit = () => {
17
- Effect.runSync(Deferred.succeed(exitSignal, void 0));
26
+ Effect.runFork(Effect.gen(function* quit() {
27
+ yield* Effect.sleep("100 millis");
28
+ yield* Deferred.succeed(exitSignal, void 0);
29
+ }));
18
30
  };
19
31
  const root = createRoot(renderer);
20
32
  root.render(_jsx(App, { onQuit: onQuit }));
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAA;IAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,iBAAiB,CAAC;QAChB,WAAW,EAAE,KAAK;KACnB,CAAC,CACH,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CACpD,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,KAAC,GAAG,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAA;IAEpC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAEtB,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAElC,MAAM,MAAM,GAAG,QAAQ,CAAA;AAEvB,MAAM,4BAA4B,GAAG,CAAC,QAAgB,EAAE,EAAE,CACxD,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;IACzE,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW;IAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAA;IAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,iBAAiB,CAAC;QAChB,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,CAAC,4BAA4B,CAAC;QACpD,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,KAAK;KACjB,CAAC,CACH,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CACpD,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI;YACvB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YACjC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;QAC7C,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,KAAC,GAAG,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAA;IAEpC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAEtB,eAAe,OAAO,CAAA"}
@@ -1,25 +1,12 @@
1
- /**
2
- * File-based Clockify API key storage with schema-validated reads.
3
- *
4
- * **Mental model**
5
- *
6
- * - **Credential file**: Reads/writes `~/.jcf/clockify.json` containing API key, workspace ID,
7
- * user ID, and base URL. The API key is wrapped in `Redacted` on read.
8
- * - **Schema-gated**: JSON is parsed then validated via `Schema.decodeUnknown(StoredAuth)` —
9
- * corrupt data yields {@link ClockifyAuthMissingError} instead of a crash.
10
- * - **Config-based home dir**: Uses Effect `Config.string("HOME")` for testable env access.
11
- *
12
- * @module
13
- */
14
- import * as FileSystem from "@effect/platform/FileSystem";
15
- import * as Path from "@effect/platform/Path";
16
1
  import * as Context from "effect/Context";
17
2
  import * as Data from "effect/Data";
18
3
  import * as Effect from "effect/Effect";
4
+ import * as FileSystem from "effect/FileSystem";
19
5
  import * as Layer from "effect/Layer";
6
+ import * as Path from "effect/Path";
20
7
  import * as Redacted from "effect/Redacted";
21
8
  import * as Schema from "effect/Schema";
22
- import { homedir } from "node:os";
9
+ import { HomeDirectory } from "./HomeDirectory.js";
23
10
  export class ClockifyAuthMissingError extends Data.TaggedError("ClockifyAuthMissingError") {
24
11
  }
25
12
  const StoredAuth = Schema.Struct({
@@ -28,7 +15,7 @@ const StoredAuth = Schema.Struct({
28
15
  userId: Schema.String,
29
16
  baseUrl: Schema.optional(Schema.String)
30
17
  });
31
- export class ClockifyAuth extends Context.Tag("jcf/ClockifyAuth")() {
18
+ export class ClockifyAuth extends Context.Service()("jcf/ClockifyAuth") {
32
19
  }
33
20
  const AUTH_DIR = ".jcf";
34
21
  const AUTH_FILE = "clockify.json";
@@ -36,7 +23,7 @@ const DEFAULT_BASE_URL = "https://api.clockify.me/api";
36
23
  export const layer = Layer.effect(ClockifyAuth, Effect.gen(function* () {
37
24
  const fs = yield* FileSystem.FileSystem;
38
25
  const path = yield* Path.Path;
39
- const home = yield* Effect.sync(() => homedir());
26
+ const home = (yield* HomeDirectory).path;
40
27
  const dir = path.join(home, AUTH_DIR);
41
28
  const filePath = path.join(dir, AUTH_FILE);
42
29
  const ensureDir = Effect.gen(function* () {
@@ -44,7 +31,7 @@ export const layer = Layer.effect(ClockifyAuth, Effect.gen(function* () {
44
31
  if (!exists)
45
32
  yield* fs.makeDirectory(dir, { recursive: true });
46
33
  });
47
- const decodeStoredAuth = Schema.decodeUnknown(StoredAuth);
34
+ const decodeStoredAuth = Schema.decodeUnknownEffect(StoredAuth);
48
35
  return {
49
36
  getConfig: Effect.gen(function* () {
50
37
  const exists = yield* fs.exists(filePath);
@@ -65,13 +52,15 @@ export const layer = Layer.effect(ClockifyAuth, Effect.gen(function* () {
65
52
  userId: stored.userId,
66
53
  baseUrl: stored.baseUrl ?? DEFAULT_BASE_URL
67
54
  };
68
- }).pipe(Effect.catchTag("SystemError", () => Effect.fail(new ClockifyAuthMissingError({ message: "Failed to read Clockify auth" }))), Effect.catchTag("BadArgument", () => Effect.fail(new ClockifyAuthMissingError({ message: "Invalid Clockify auth file" })))),
55
+ }).pipe(Effect.catch((error) => error instanceof ClockifyAuthMissingError
56
+ ? Effect.fail(error)
57
+ : Effect.fail(new ClockifyAuthMissingError({ message: "Failed to read Clockify auth" })))),
69
58
  save: (auth) => Effect.gen(function* () {
70
59
  yield* ensureDir;
71
60
  yield* fs.writeFileString(filePath, JSON.stringify(auth, null, 2));
72
- yield* Effect.tryPromise(() => import("node:fs/promises").then((f) => f.chmod(filePath, 0o600))).pipe(Effect.catchAll(() => Effect.void));
73
- }).pipe(Effect.catchAll(() => Effect.void)),
74
- isConfigured: fs.exists(filePath).pipe(Effect.catchAll(() => Effect.succeed(false)))
61
+ yield* fs.chmod(filePath, 0o600).pipe(Effect.catch(() => Effect.void));
62
+ }).pipe(Effect.catch(() => Effect.void)),
63
+ isConfigured: fs.exists(filePath).pipe(Effect.catch(() => Effect.succeed(false)))
75
64
  };
76
65
  }));
77
66
  //# sourceMappingURL=ClockifyAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClockifyAuth.js","sourceRoot":"","sources":["../../../src/services/ClockifyAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClockifyAuth.js","sourceRoot":"","sources":["../../../src/services/ClockifyAuth.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,12 @@
9
9
  *
10
10
  * @module
11
11
  */
12
- import * as FileSystem from "@effect/platform/FileSystem";
13
- import * as Path from "@effect/platform/Path";
14
12
  import * as Context from "effect/Context";
15
13
  import * as Effect from "effect/Effect";
14
+ import * as FileSystem from "effect/FileSystem";
16
15
  import * as Layer from "effect/Layer";
17
- import { homedir } from "node:os";
16
+ import * as Path from "effect/Path";
17
+ import { HomeDirectory } from "./HomeDirectory.js";
18
18
  const defaultConfig = {
19
19
  defaultJql: "assignee = currentUser() AND status != Done ORDER BY updated DESC",
20
20
  refreshInterval: 30,
@@ -24,14 +24,14 @@ const defaultConfig = {
24
24
  defaultProjectName: null,
25
25
  defaultBillable: true
26
26
  };
27
- export class ConfigService extends Context.Tag("jcf/ConfigService")() {
27
+ export class ConfigService extends Context.Service()("jcf/ConfigService") {
28
28
  }
29
29
  const CONFIG_DIR = ".jcf";
30
30
  const CONFIG_FILE = "config.json";
31
31
  export const layer = Layer.effect(ConfigService, Effect.gen(function* () {
32
32
  const fs = yield* FileSystem.FileSystem;
33
33
  const path = yield* Path.Path;
34
- const home = yield* Effect.sync(() => homedir());
34
+ const home = (yield* HomeDirectory).path;
35
35
  const dir = path.join(home, CONFIG_DIR);
36
36
  const filePath = path.join(dir, CONFIG_FILE);
37
37
  const ensureDir = Effect.gen(function* () {
@@ -49,7 +49,7 @@ export const layer = Layer.effect(ConfigService, Effect.gen(function* () {
49
49
  catch: () => ({})
50
50
  });
51
51
  return { ...defaultConfig, ...parsed };
52
- }).pipe(Effect.catchAll(() => Effect.succeed(defaultConfig)));
52
+ }).pipe(Effect.catch(() => Effect.succeed(defaultConfig)));
53
53
  const write = (config) => Effect.gen(function* () {
54
54
  yield* ensureDir;
55
55
  yield* fs.writeFileString(filePath, JSON.stringify(config, null, 2));
@@ -59,7 +59,7 @@ export const layer = Layer.effect(ConfigService, Effect.gen(function* () {
59
59
  set: (patch) => Effect.gen(function* () {
60
60
  const current = yield* read;
61
61
  yield* write({ ...current, ...patch });
62
- }).pipe(Effect.catchAll(() => Effect.void)),
62
+ }).pipe(Effect.catch(() => Effect.void)),
63
63
  configDir: Effect.succeed(dir)
64
64
  };
65
65
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../../src/services/ConfigService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../../src/services/ConfigService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * User home directory lookup as an Effect service.
3
+ *
4
+ * @module
5
+ */
6
+ import * as Config from "effect/Config";
7
+ import * as Context from "effect/Context";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ export class HomeDirectory extends Context.Service()("jcf/HomeDirectory") {
11
+ }
12
+ const homePath = Config.string("HOME").pipe(Config.orElse(() => Config.string("USERPROFILE")), Config.orElse(() => Config.succeed("/")));
13
+ export const layer = Layer.effect(HomeDirectory, homePath.pipe(Effect.map((path) => HomeDirectory.of({ path }))));
14
+ //# sourceMappingURL=HomeDirectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomeDirectory.js","sourceRoot":"","sources":["../../../src/services/HomeDirectory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAMrC,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAAqC,CAAC,mBAAmB,CAAC;CAAG;AAE/G,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACzC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EACjD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACzC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAC/B,aAAa,EACb,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAChE,CAAA"}
@@ -10,12 +10,12 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import * as FileSystem from "@effect/platform/FileSystem";
14
- import * as Path from "@effect/platform/Path";
15
13
  import * as Context from "effect/Context";
16
14
  import * as Effect from "effect/Effect";
15
+ import * as FileSystem from "effect/FileSystem";
17
16
  import * as Layer from "effect/Layer";
18
- import { homedir } from "node:os";
17
+ import * as Path from "effect/Path";
18
+ import { HomeDirectory } from "./HomeDirectory.js";
19
19
  const emptyState = {
20
20
  active: false,
21
21
  ticketKey: null,
@@ -26,14 +26,14 @@ const emptyState = {
26
26
  elapsed: 0,
27
27
  clockifyEntryId: null
28
28
  };
29
- export class StateWriter extends Context.Tag("jcf/StateWriter")() {
29
+ export class StateWriter extends Context.Service()("jcf/StateWriter") {
30
30
  }
31
31
  const STATE_DIR = ".jcf";
32
32
  const STATE_FILE = "state.json";
33
33
  export const layer = Layer.effect(StateWriter, Effect.gen(function* () {
34
34
  const fs = yield* FileSystem.FileSystem;
35
35
  const path = yield* Path.Path;
36
- const home = yield* Effect.sync(() => homedir());
36
+ const home = (yield* HomeDirectory).path;
37
37
  const dir = path.join(home, STATE_DIR);
38
38
  const filePath = path.join(dir, STATE_FILE);
39
39
  const ensureDir = Effect.gen(function* () {
@@ -47,7 +47,7 @@ export const layer = Layer.effect(StateWriter, Effect.gen(function* () {
47
47
  const tmpPath = `${filePath}.tmp`;
48
48
  yield* fs.writeFileString(tmpPath, JSON.stringify(state, null, 2));
49
49
  yield* fs.rename(tmpPath, filePath);
50
- }).pipe(Effect.catchAll(() => Effect.void)),
50
+ }).pipe(Effect.catch(() => Effect.void)),
51
51
  read: Effect.gen(function* () {
52
52
  const exists = yield* fs.exists(filePath);
53
53
  if (!exists)
@@ -57,13 +57,13 @@ export const layer = Layer.effect(StateWriter, Effect.gen(function* () {
57
57
  try: () => JSON.parse(content),
58
58
  catch: () => emptyState
59
59
  });
60
- }).pipe(Effect.catchAll(() => Effect.succeed(emptyState))),
60
+ }).pipe(Effect.catch(() => Effect.succeed(emptyState))),
61
61
  clear: Effect.gen(function* () {
62
62
  yield* ensureDir;
63
63
  const tmpPath = `${filePath}.tmp`;
64
64
  yield* fs.writeFileString(tmpPath, JSON.stringify(emptyState, null, 2));
65
65
  yield* fs.rename(tmpPath, filePath);
66
- }).pipe(Effect.catchAll(() => Effect.void))
66
+ }).pipe(Effect.catch(() => Effect.void))
67
67
  };
68
68
  }));
69
69
  //# sourceMappingURL=StateWriter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StateWriter.js","sourceRoot":"","sources":["../../../src/services/StateWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StateWriter.js","sourceRoot":"","sources":["../../../src/services/StateWriter.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,26 @@ const extractNested = (fields, key, nested) => {
44
44
  }
45
45
  return null;
46
46
  };
47
- export class TicketService extends Context.Tag("jcf/TicketService")() {
47
+ /**
48
+ * Shape a raw Jira issue (from `/rest/api/3/issue` or `/search/jql`) into a
49
+ * {@link JiraTicket}. Single source of truth for the nested-field extraction —
50
+ * reused by {@link fetchTicketByKey} so the two never drift.
51
+ */
52
+ export const mapIssueToTicket = (issue, fallbackKey) => {
53
+ const fields = issue["fields"];
54
+ const key = typeof issue["key"] === "string" ? issue["key"] : (fallbackKey ?? "?");
55
+ return {
56
+ key,
57
+ summary: extractString(fields, "summary") ?? (fallbackKey ?? "(no summary)"),
58
+ status: extractNested(fields, "status", "name") ?? "Unknown",
59
+ priority: extractNested(fields, "priority", "name"),
60
+ assignee: extractNested(fields, "assignee", "displayName"),
61
+ type: extractNested(fields, "issuetype", "name") ?? "Task",
62
+ labels: Array.isArray(fields?.["labels"]) ? fields["labels"] : [],
63
+ updated: extractString(fields, "updated") ?? new Date().toISOString()
64
+ };
65
+ };
66
+ export class TicketService extends Context.Service()("jcf/TicketService") {
48
67
  }
49
68
  export const layer = Layer.effect(TicketService, Effect.gen(function* () {
50
69
  const config = yield* ConfigService;
@@ -63,26 +82,14 @@ export const layer = Layer.effect(TicketService, Effect.gen(function* () {
63
82
  }
64
83
  }
65
84
  })).pipe(Effect.mapError((e) => new TicketError({ message: `Jira search failed: ${String(e)}`, cause: e })));
66
- const tickets = (result.issues ?? []).map((issue) => {
67
- const fields = issue.fields;
68
- return {
69
- key: String(issue.key ?? "?"),
70
- summary: extractString(fields, "summary") ?? "(no summary)",
71
- status: extractNested(fields, "status", "name") ?? "Unknown",
72
- priority: extractNested(fields, "priority", "name"),
73
- assignee: extractNested(fields, "assignee", "displayName"),
74
- type: extractNested(fields, "issuetype", "name") ?? "Task",
75
- labels: Array.isArray(fields?.["labels"]) ? fields["labels"] : [],
76
- updated: extractString(fields, "updated") ?? new Date().toISOString()
77
- };
78
- });
85
+ const tickets = (result.issues ?? []).map((issue) => mapIssueToTicket(issue));
79
86
  yield* SubscriptionRef.set(ref, {
80
87
  tickets,
81
88
  loading: false,
82
89
  error: null,
83
90
  lastRefreshed: new Date()
84
91
  });
85
- }).pipe(Effect.catchAll((e) => {
92
+ }).pipe(Effect.catch((e) => {
86
93
  const msg = e._tag === "TicketError"
87
94
  ? e.message
88
95
  : `Failed to fetch tickets: ${String(e)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"TicketService.js","sourceRoot":"","sources":["../../../src/services/TicketService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TicketService.js","sourceRoot":"","sources":["../../../src/services/TicketService.ts"],"names":[],"mappings":"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"}