@knpkv/jira-clockify 0.4.0 → 1.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/README.md +10 -10
- package/dist/package.json +1 -1
- package/dist/src/bin.js +1 -15
- package/dist/src/bin.js.map +1 -1
- package/dist/src/cli/fetchTicket.js +12 -0
- package/dist/src/cli/fetchTicket.js.map +1 -1
- package/dist/src/cli/layers.js +7 -2
- package/dist/src/cli/layers.js.map +1 -1
- package/dist/src/cli/list.js +1 -0
- package/dist/src/cli/list.js.map +1 -1
- package/dist/src/cli/reconcile.js +131 -0
- package/dist/src/cli/reconcile.js.map +1 -0
- package/dist/src/cli/root.js +25 -0
- package/dist/src/cli/root.js.map +1 -0
- package/dist/src/cli/setup.js +1 -1
- package/dist/src/cli/setup.js.map +1 -1
- package/dist/src/cli/timer/log.js +5 -1
- package/dist/src/cli/timer/log.js.map +1 -1
- package/dist/src/cli/timer/start.js +6 -2
- package/dist/src/cli/timer/start.js.map +1 -1
- package/dist/src/cli/timer/stop.js +36 -2
- package/dist/src/cli/timer/stop.js.map +1 -1
- package/dist/src/cli/timer.js +4 -0
- package/dist/src/cli/timer.js.map +1 -1
- package/dist/src/services/ReconcileService.js +0 -0
- package/dist/src/services/ReconcileService.js.map +1 -0
- package/dist/src/services/TimerService.js +52 -21
- package/dist/src/services/TimerService.js.map +1 -1
- package/dist/src/tui/App.js +66 -11
- package/dist/src/tui/App.js.map +1 -1
- package/dist/src/tui/atoms/timer.js +5 -0
- package/dist/src/tui/atoms/timer.js.map +1 -1
- package/dist/src/tui/components/PopupMessage.js +7 -2
- package/dist/src/tui/components/PopupMessage.js.map +1 -1
- package/dist/test/ReconcileService.test.js +146 -0
- package/dist/test/ReconcileService.test.js.map +1 -0
- package/dist/test/TimerService.test.js +106 -4
- package/dist/test/TimerService.test.js.map +1 -1
- package/dist/test/commandSurface.test.js +42 -0
- package/dist/test/commandSurface.test.js.map +1 -0
- package/dist/test/fetchTicket.test.js +30 -3
- package/dist/test/fetchTicket.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/nvim/lua/jcf/init.lua +8 -8
- package/nvim/lua/jcf/state.lua +3 -3
- package/nvim/lua/jcf/telescope.lua +3 -3
- package/package.json +3 -3
- package/skills/jcf/SKILL.md +17 -17
- package/skills/jcf/agents/openai.yaml +1 -1
package/README.md
CHANGED
|
@@ -47,16 +47,16 @@ jcf config reset # Reset to defaults
|
|
|
47
47
|
```bash
|
|
48
48
|
jcf # Launch TUI (or guided setup if not configured)
|
|
49
49
|
jcf tui # Launch TUI explicitly
|
|
50
|
-
jcf start [ISSUE-KEY]
|
|
51
|
-
jcf start KEY --ago 15m
|
|
52
|
-
jcf start KEY --since 09:30 # Start backdated to a past time today
|
|
53
|
-
jcf stop
|
|
54
|
-
|
|
55
|
-
jcf discard
|
|
56
|
-
jcf log KEY -t 1h30m
|
|
57
|
-
jcf edit
|
|
58
|
-
jcf status
|
|
59
|
-
jcf list [--json]
|
|
50
|
+
jcf timer start [ISSUE-KEY] # Start timer on a Jira ticket
|
|
51
|
+
jcf timer start KEY --ago 15m # Start backdated by a duration
|
|
52
|
+
jcf timer start KEY --since 09:30 # Start backdated to a past time today or ISO timestamp
|
|
53
|
+
jcf timer stop # Stop timer, log to Clockify + Jira
|
|
54
|
+
# no timer running? offers to add a correction interval instead
|
|
55
|
+
jcf timer discard # Discard timer (delete Clockify entry, no Jira worklog)
|
|
56
|
+
jcf timer log KEY -t 1h30m # Log past work manually (--date, --at HH:MM, --comment)
|
|
57
|
+
jcf timer edit # Edit running timer
|
|
58
|
+
jcf timer status # Show current timer status
|
|
59
|
+
jcf issue list [--json] # List Jira tickets from configured JQL
|
|
60
60
|
jcf auth status # Show auth status for both services
|
|
61
61
|
```
|
|
62
62
|
|
package/dist/package.json
CHANGED
package/dist/src/bin.js
CHANGED
|
@@ -5,31 +5,17 @@
|
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
7
|
import { NodeRuntime, NodeStdio } from "@effect/platform-node";
|
|
8
|
-
import { makeInstallCommand } from "@knpkv/agent-skills";
|
|
9
8
|
import { Effect } from "effect";
|
|
10
|
-
import * as Console from "effect/Console";
|
|
11
9
|
import * as Runtime from "effect/Runtime";
|
|
12
10
|
import * as Stdio from "effect/Stdio";
|
|
13
11
|
import { Command } from "effect/unstable/cli";
|
|
14
|
-
import { auth } from "./cli/auth.js";
|
|
15
|
-
import { config } from "./cli/config.js";
|
|
16
12
|
import { HeadlessLayer } from "./cli/layers.js";
|
|
17
|
-
import {
|
|
18
|
-
import { launchTuiOrSetup } from "./cli/setup.js";
|
|
19
|
-
import { discard, edit, log, start, statusCmd, stop } from "./cli/timer.js";
|
|
13
|
+
import { root } from "./cli/root.js";
|
|
20
14
|
const processArgv = Effect.gen(function* () {
|
|
21
15
|
const stdio = yield* Stdio.Stdio;
|
|
22
16
|
const args = yield* stdio.args;
|
|
23
17
|
return args;
|
|
24
18
|
});
|
|
25
|
-
const tui = Command.make("tui", {}, () => processArgv.pipe(Effect.flatMap(launchTuiOrSetup)));
|
|
26
|
-
const skillsInstall = makeInstallCommand({
|
|
27
|
-
description: "Install the Jira Clockify agent skill",
|
|
28
|
-
name: "install",
|
|
29
|
-
skills: ["jcf"]
|
|
30
|
-
});
|
|
31
|
-
const skills = Command.make("skills", {}, () => Console.log("Usage: jcf skills install")).pipe(Command.withSubcommands([skillsInstall]));
|
|
32
|
-
const root = Command.make("jcf", {}, () => processArgv.pipe(Effect.flatMap(launchTuiOrSetup))).pipe(Command.withSubcommands([tui, auth, start, stop, discard, log, statusCmd, list, config, edit, skills]));
|
|
33
19
|
const cli = Command.runWith(root, {
|
|
34
20
|
version: "0.1.0"
|
|
35
21
|
});
|
package/dist/src/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAC9B,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,OAAO;CACjB,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACnC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAC7B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAChC,CAAA;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,sEAAsE;AACtE,MAAM,iBAAiB,GAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEjH,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAA"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { JiraApiClient, toEffect } from "@knpkv/jira-api-client";
|
|
2
|
+
import { JiraAuth } from "@knpkv/jira-cli/JiraAuth";
|
|
2
3
|
import { Effect } from "effect";
|
|
3
4
|
import { mapIssueToTicket } from "../services/TicketService.js";
|
|
5
|
+
/** Shared user hint for the {@link FetchTicketResult} `NotLoggedIn` case. */
|
|
6
|
+
export const NOT_LOGGED_IN_HINT = "Not logged in to Jira. Run: jcf auth jira login";
|
|
4
7
|
export const fetchTicketByKey = (key) => Effect.gen(function* () {
|
|
8
|
+
// Without a Jira login the request would 404 on a malformed URL; surface
|
|
9
|
+
// the real cause so callers can point the user at `jcf auth jira login`.
|
|
10
|
+
// A *clean* absent token resolves to `false` (→ NotLoggedIn); a genuine
|
|
11
|
+
// platform error (unreadable token file, unresolvable HOME) is a fetch
|
|
12
|
+
// failure, not a benign logged-out state, so it routes to FetchError.
|
|
13
|
+
const auth = yield* JiraAuth;
|
|
14
|
+
const loginCheck = yield* auth.isLoggedIn().pipe(Effect.map((loggedIn) => (loggedIn ? null : { _tag: "NotLoggedIn" })), Effect.catch((e) => Effect.succeed({ _tag: "FetchError", message: e.message })));
|
|
15
|
+
if (loginCheck)
|
|
16
|
+
return loginCheck;
|
|
5
17
|
const jira = yield* JiraApiClient;
|
|
6
18
|
return yield* toEffect(jira.v3.client.GET("/rest/api/3/issue/{issueIdOrKey}", {
|
|
7
19
|
params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchTicket.js","sourceRoot":"","sources":["../../../src/cli/fetchTicket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetchTicket.js","sourceRoot":"","sources":["../../../src/cli/fetchTicket.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAmB,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEhF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,iDAAiD,CAAA;AASnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,GAAW,EACwD,EAAE,CACrE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAA;IAC5B,MAAM,UAAU,GAA6B,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CACxE,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAsB,EAAE,CAAC,CAAC,EAC9E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAoB,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CACnG,CAAA;IACD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAA;IAEjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACjC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,kCAAkC,EAAE;QAC5E,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;YAC3B,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;SACnG;KACF,CAAC,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAqB,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,gBAAgB,CAAC,KAAgC,EAAE,GAAG,CAAC;KAChE,CAAC,CAAC,EACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAmB,EAAE,EAAE,CACnC,MAAM,CAAC,OAAO,CACZ,CAAC,CAAC,MAAM,KAAK,GAAG;QACd,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;QACtB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAC/C,CACF,CACF,CAAA;AACH,CAAC,CAAC,CAAA"}
|
package/dist/src/cli/layers.js
CHANGED
|
@@ -11,13 +11,17 @@ import { Effect, Layer, Redacted } from "effect";
|
|
|
11
11
|
import { ClockifyAuth, layer as ClockifyAuthLayer } from "../services/ClockifyAuth.js";
|
|
12
12
|
import { layer as ConfigLayer } from "../services/ConfigService.js";
|
|
13
13
|
import { layer as HomeDirectoryLayer } from "../services/HomeDirectory.js";
|
|
14
|
+
import { layer as ReconcileServiceLayer } from "../services/ReconcileService.js";
|
|
14
15
|
import { layer as StateWriterLayer } from "../services/StateWriter.js";
|
|
15
16
|
import { layer as TicketServiceLayer } from "../services/TicketService.js";
|
|
16
17
|
import { layer as TimerServiceLayer } from "../services/TimerService.js";
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
18
19
|
// Platform
|
|
19
20
|
// ---------------------------------------------------------------------------
|
|
20
|
-
|
|
21
|
+
// HttpClient backs TimerService's raw Jira worklog POST. Use the fetch implementation, not
|
|
22
|
+
// undici: the TUI runs under Bun (see main.tsx) where undici fails with a transport error,
|
|
23
|
+
// while fetch works in both Bun and Node — the same fetch the Jira/Clockify API clients use.
|
|
24
|
+
export const PlatformLayer = Layer.mergeAll(NodeServices.layer, NodeHttpClient.layerFetch);
|
|
21
25
|
// ---------------------------------------------------------------------------
|
|
22
26
|
// Leaf layers
|
|
23
27
|
// ---------------------------------------------------------------------------
|
|
@@ -54,8 +58,9 @@ export const JiraApiLive = JiraApiClient.layer.pipe(Layer.provide(JiraApiConfigL
|
|
|
54
58
|
// ---------------------------------------------------------------------------
|
|
55
59
|
export const TicketServiceLive = TicketServiceLayer.pipe(Layer.provide(JiraApiLive), Layer.provide(ConfigLive));
|
|
56
60
|
export const TimerServiceLive = TimerServiceLayer.pipe(Layer.provide(ClockifyApiLive), Layer.provide(JiraApiLive), Layer.provide(JiraAuthLive), Layer.provide(ClockifyAuthLive), Layer.provide(ConfigLive), Layer.provide(StateWriterLive), Layer.provide(PlatformLayer));
|
|
61
|
+
export const ReconcileServiceLive = ReconcileServiceLayer.pipe(Layer.provide(ClockifyApiLive), Layer.provide(ClockifyAuthLive), Layer.provide(JiraApiLive), Layer.provide(JiraAuthLive), Layer.provide(ConfigLive), Layer.provide(TimerServiceLive));
|
|
57
62
|
// ---------------------------------------------------------------------------
|
|
58
63
|
// Fully closed layer for headless CLI
|
|
59
64
|
// ---------------------------------------------------------------------------
|
|
60
|
-
export const HeadlessLayer = Layer.mergeAll(TimerServiceLive, TicketServiceLive, ConfigLive, StateWriterLive, ClockifyAuthLive, ClockifyApiLive, JiraAuthLive, JiraApiLive).pipe(Layer.provideMerge(PlatformLayer));
|
|
65
|
+
export const HeadlessLayer = Layer.mergeAll(TimerServiceLive, ReconcileServiceLive, TicketServiceLive, ConfigLive, StateWriterLive, ClockifyAuthLive, ClockifyApiLive, JiraAuthLive, JiraApiLive).pipe(Layer.provideMerge(PlatformLayer));
|
|
61
66
|
//# sourceMappingURL=layers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/cli/layers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,KAAK,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAExE,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/cli/layers.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli/list.js
CHANGED
|
@@ -24,4 +24,5 @@ export const list = Command.make("list", { json: Options.boolean("json").pipe(Op
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
}));
|
|
27
|
+
export const issue = Command.make("issue", {}, () => Console.log("Usage: jcf issue list")).pipe(Command.withDescription("Jira issue commands"), Command.withSubcommands([list]));
|
|
27
28
|
//# sourceMappingURL=list.js.map
|
package/dist/src/cli/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,gDAAgD;AAChD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAC9B,MAAM,EACN,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAClE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IAC1C,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAA;IAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAEjC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAEnE,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5F,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CACL,CAAA"}
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,gDAAgD;AAChD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAC9B,MAAM,EACN,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAClE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IAC1C,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAA;IAC5B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAEjC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAEnE,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5F,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CACL,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAC7F,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,EAC9C,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `jcf sync reconcile` — compare Clockify time against Jira worklogs over a period and
|
|
3
|
+
* fill gaps one row at a time.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import { Console, Effect, Option } from "effect";
|
|
8
|
+
import { Argument as Args, Command, Flag as Options, Prompt } from "effect/unstable/cli";
|
|
9
|
+
import { ReconcileService } from "../services/ReconcileService.js";
|
|
10
|
+
import { formatDuration } from "../utils/time.js";
|
|
11
|
+
import { NOT_LOGGED_IN_HINT } from "./fetchTicket.js";
|
|
12
|
+
// Differences under a minute are noise (Jira floors worklogs to 60s), so don't flag them.
|
|
13
|
+
const TOLERANCE_SECONDS = 60;
|
|
14
|
+
/** Start of a local calendar day `YYYY-MM-DD` (00:00 local). */
|
|
15
|
+
const startOfDay = (day) => new Date(`${day}T00:00:00`);
|
|
16
|
+
const localDay = (date) => {
|
|
17
|
+
const y = date.getFullYear();
|
|
18
|
+
const m = String(date.getMonth() + 1).padStart(2, "0");
|
|
19
|
+
const d = String(date.getDate()).padStart(2, "0");
|
|
20
|
+
return `${y}-${m}-${d}`;
|
|
21
|
+
};
|
|
22
|
+
const isYmd = (s) => /^\d{4}-\d{2}-\d{2}$/.test(s);
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the reconcile window from flags (local-day aligned, half-open `[from, to)`):
|
|
25
|
+
* `--since/--until` (custom) wins, else `--week` (last 7 days incl. today), else today.
|
|
26
|
+
*/
|
|
27
|
+
export const resolvePeriod = (opts) => {
|
|
28
|
+
const today = new Date();
|
|
29
|
+
const endExclusive = (day) => new Date(startOfDay(day).getTime() + 24 * 60 * 60 * 1000);
|
|
30
|
+
if (opts.since !== undefined || opts.until !== undefined) {
|
|
31
|
+
const fromDay = opts.since ?? localDay(today);
|
|
32
|
+
const toDay = opts.until ?? localDay(today);
|
|
33
|
+
if (!isYmd(fromDay) || !isYmd(toDay))
|
|
34
|
+
return { error: "Use --since/--until as YYYY-MM-DD." };
|
|
35
|
+
if (fromDay > toDay)
|
|
36
|
+
return { error: "--since must be on or before --until." };
|
|
37
|
+
return { from: startOfDay(fromDay), to: endExclusive(toDay) };
|
|
38
|
+
}
|
|
39
|
+
if (opts.week) {
|
|
40
|
+
const from = new Date(startOfDay(localDay(today)).getTime() - 6 * 24 * 60 * 60 * 1000);
|
|
41
|
+
return { from, to: endExclusive(localDay(today)) };
|
|
42
|
+
}
|
|
43
|
+
return { from: startOfDay(localDay(today)), to: endExclusive(localDay(today)) };
|
|
44
|
+
};
|
|
45
|
+
/** `+Xs` worth of work the *target* is missing for this row, or 0 if it's not short. */
|
|
46
|
+
export const deltaToApply = (row, direction) => {
|
|
47
|
+
const delta = direction === "clockify-to-jira"
|
|
48
|
+
? row.clockifySeconds - row.jiraSeconds
|
|
49
|
+
: row.jiraSeconds - row.clockifySeconds;
|
|
50
|
+
return delta >= TOLERANCE_SECONDS ? delta : 0;
|
|
51
|
+
};
|
|
52
|
+
const sign = (n) => (n > 0 ? `+${formatDuration(n)}` : n < 0 ? `-${formatDuration(-n)}` : "0");
|
|
53
|
+
export const reconcile = Command.make("reconcile", {
|
|
54
|
+
direction: Args.string("direction").pipe(Args.optional),
|
|
55
|
+
week: Options.boolean("week").pipe(Options.withDescription("Reconcile the last 7 days (default: today)"), Options.withDefault(false)),
|
|
56
|
+
day: Options.boolean("day").pipe(Options.withDescription("Reconcile today (the default)"), Options.withDefault(false)),
|
|
57
|
+
since: Options.string("since").pipe(Options.withDescription("Start of a custom window, YYYY-MM-DD"), Options.optional),
|
|
58
|
+
until: Options.string("until").pipe(Options.withDescription("End of a custom window (inclusive), YYYY-MM-DD"), Options.optional)
|
|
59
|
+
}, ({ direction, since, until, week }) => Effect.gen(function* () {
|
|
60
|
+
const dir = Option.isSome(direction) ? direction.value : "clockify-to-jira";
|
|
61
|
+
if (dir !== "clockify-to-jira" && dir !== "jira-to-clockify") {
|
|
62
|
+
yield* Console.log("Usage: jcf sync reconcile [clockify-to-jira|jira-to-clockify] [--day|--week|--since|--until]");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const directionTag = dir;
|
|
66
|
+
const period = resolvePeriod({
|
|
67
|
+
week,
|
|
68
|
+
since: Option.isSome(since) ? since.value : undefined,
|
|
69
|
+
until: Option.isSome(until) ? until.value : undefined
|
|
70
|
+
});
|
|
71
|
+
if ("error" in period) {
|
|
72
|
+
yield* Console.log(period.error);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const svc = yield* ReconcileService;
|
|
76
|
+
const rows = yield* svc.compare(period).pipe(Effect.catch((e) => Console.log(`Reconcile failed: ${e.message}`).pipe(Effect.as(null))));
|
|
77
|
+
if (rows === null)
|
|
78
|
+
return;
|
|
79
|
+
const fromDay = localDay(period.from);
|
|
80
|
+
const toDay = localDay(new Date(period.to.getTime() - 1));
|
|
81
|
+
yield* Console.log(`Reconcile ${directionTag} (${fromDay === toDay ? fromDay : `${fromDay}..${toDay}`})`);
|
|
82
|
+
if (rows.length === 0) {
|
|
83
|
+
yield* Console.log(" No time logged on either side for this period.");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Report every bucket, marking the gap relative to the chosen target.
|
|
87
|
+
for (const row of rows) {
|
|
88
|
+
const delta = row.clockifySeconds - row.jiraSeconds;
|
|
89
|
+
const mark = Math.abs(delta) < TOLERANCE_SECONDS ? "=" : "Δ";
|
|
90
|
+
yield* Console.log(` ${row.day} ${row.ticketKey.padEnd(12)} Clockify ${formatDuration(row.clockifySeconds).padStart(6)}` +
|
|
91
|
+
` Jira ${formatDuration(row.jiraSeconds).padStart(6)} ${mark} ${sign(delta)}`);
|
|
92
|
+
}
|
|
93
|
+
const fixable = rows.filter((r) => deltaToApply(r, directionTag) > 0);
|
|
94
|
+
if (fixable.length === 0) {
|
|
95
|
+
yield* Console.log(directionTag === "clockify-to-jira"
|
|
96
|
+
? " Jira is in sync with Clockify (nothing to add)."
|
|
97
|
+
: " Clockify is in sync with Jira (nothing to add).");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const target = directionTag === "clockify-to-jira" ? "Jira" : "Clockify";
|
|
101
|
+
yield* Console.log(`\n ${fixable.length} row(s) where ${target} is short — confirm each fix:`);
|
|
102
|
+
for (const row of fixable) {
|
|
103
|
+
const delta = deltaToApply(row, directionTag);
|
|
104
|
+
const apply = yield* Prompt.confirm({
|
|
105
|
+
message: ` Add ${formatDuration(delta)} to ${target} for ${row.ticketKey} on ${row.day}?`,
|
|
106
|
+
initial: true
|
|
107
|
+
});
|
|
108
|
+
if (!apply)
|
|
109
|
+
continue;
|
|
110
|
+
if (directionTag === "clockify-to-jira") {
|
|
111
|
+
const outcome = yield* svc.applyToJira(row.ticketKey, row.day, delta, row.clockifyDescription ?? undefined);
|
|
112
|
+
if (outcome._tag === "Posted") {
|
|
113
|
+
yield* Console.log(` ✓ posted to Jira`);
|
|
114
|
+
}
|
|
115
|
+
else if (outcome._tag === "NotLoggedIn") {
|
|
116
|
+
yield* Console.log(` ✗ ${NOT_LOGGED_IN_HINT}`);
|
|
117
|
+
return; // no point continuing — every Jira write will fail
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
yield* Console.log(` ✗ ${outcome.message}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const ok = yield* svc.applyToClockify(row.ticketKey, row.day, delta).pipe(Effect.catch((e) => Console.log(` ✗ ${e.message}`).pipe(Effect.as(false))));
|
|
125
|
+
if (ok)
|
|
126
|
+
yield* Console.log(` ✓ created Clockify entry`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}));
|
|
130
|
+
export const sync = Command.make("sync", {}, () => Console.log("Usage: jcf sync reconcile")).pipe(Command.withDescription("Sync workflow commands"), Command.withSubcommands([reconcile]));
|
|
131
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/cli/reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { makeInstallCommand } from "@knpkv/agent-skills";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import * as Console from "effect/Console";
|
|
4
|
+
import * as Stdio from "effect/Stdio";
|
|
5
|
+
import { Command } from "effect/unstable/cli";
|
|
6
|
+
import { auth } from "./auth.js";
|
|
7
|
+
import { config } from "./config.js";
|
|
8
|
+
import { issue } from "./list.js";
|
|
9
|
+
import { sync } from "./reconcile.js";
|
|
10
|
+
import { launchTuiOrSetup } from "./setup.js";
|
|
11
|
+
import { timer } from "./timer.js";
|
|
12
|
+
const processArgv = Effect.gen(function* () {
|
|
13
|
+
const stdio = yield* Stdio.Stdio;
|
|
14
|
+
const args = yield* stdio.args;
|
|
15
|
+
return args;
|
|
16
|
+
});
|
|
17
|
+
const tui = Command.make("tui", {}, () => processArgv.pipe(Effect.flatMap(launchTuiOrSetup)));
|
|
18
|
+
const skillsInstall = makeInstallCommand({
|
|
19
|
+
description: "Install the Jira Clockify agent skill",
|
|
20
|
+
name: "install",
|
|
21
|
+
skills: ["jcf"]
|
|
22
|
+
});
|
|
23
|
+
const skills = Command.make("skills", {}, () => Console.log("Usage: jcf skills install")).pipe(Command.withSubcommands([skillsInstall]));
|
|
24
|
+
export const root = Command.make("jcf", {}, () => processArgv.pipe(Effect.flatMap(launchTuiOrSetup))).pipe(Command.withSubcommands([tui, auth, timer, issue, sync, config, skills]));
|
|
25
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/cli/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAC9B,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAE7F,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACvC,WAAW,EAAE,uCAAuC;IACpD,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,CAAC,KAAK,CAAC;CAChB,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAC5F,OAAO,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,CAAC,CACzC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CACxG,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CACzE,CAAA"}
|
package/dist/src/cli/setup.js
CHANGED
|
@@ -108,7 +108,7 @@ export const launchTui = (args) => Effect.gen(function* () {
|
|
|
108
108
|
yield* Console.log("TUI requires Bun runtime (@opentui/react dependency).");
|
|
109
109
|
yield* Console.log("Install Bun: curl -fsSL https://bun.sh/install | bash");
|
|
110
110
|
yield* Console.log("");
|
|
111
|
-
yield* Console.log("CLI commands work without Bun: jcf start, jcf stop, jcf status, jcf list");
|
|
111
|
+
yield* Console.log("CLI commands work without Bun: jcf timer start, jcf timer stop, jcf timer status, jcf issue list");
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
// Re-exec with bun — must point to bin.ts, not this module
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { Console, Effect, Option } from "effect";
|
|
|
7
7
|
import { Argument as Args, Command, Flag as Options } from "effect/unstable/cli";
|
|
8
8
|
import { TimerService } from "../../services/TimerService.js";
|
|
9
9
|
import { formatDuration, isFullIsoTimestamp, parseDuration, parseStartTime } from "../../utils/time.js";
|
|
10
|
-
import { fetchTicketByKey } from "../fetchTicket.js";
|
|
10
|
+
import { fetchTicketByKey, NOT_LOGGED_IN_HINT } from "../fetchTicket.js";
|
|
11
11
|
/** Today's calendar day in the user's *local* timezone as `YYYY-MM-DD`. */
|
|
12
12
|
const localToday = () => {
|
|
13
13
|
const d = new Date();
|
|
@@ -43,6 +43,10 @@ export const log = Command.make("log", {
|
|
|
43
43
|
}
|
|
44
44
|
// Validate ticket exists
|
|
45
45
|
const fetched = yield* fetchTicketByKey(key);
|
|
46
|
+
if (fetched._tag === "NotLoggedIn") {
|
|
47
|
+
yield* Console.log(NOT_LOGGED_IN_HINT);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
46
50
|
if (fetched._tag === "NotFound") {
|
|
47
51
|
yield* Console.log(`Ticket ${key} not found in Jira.`);
|
|
48
52
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../src/cli/timer/log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../src/cli/timer/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { ConfigService } from "../../services/ConfigService.js";
|
|
|
11
11
|
import { TicketService } from "../../services/TicketService.js";
|
|
12
12
|
import { TimerService } from "../../services/TimerService.js";
|
|
13
13
|
import { formatElapsed, parseDuration, parseStartTime } from "../../utils/time.js";
|
|
14
|
-
import { fetchTicketByKey } from "../fetchTicket.js";
|
|
14
|
+
import { fetchTicketByKey, NOT_LOGGED_IN_HINT } from "../fetchTicket.js";
|
|
15
15
|
import { fuzzySelect } from "../fuzzySelect.js";
|
|
16
16
|
export const start = Command.make("start", {
|
|
17
17
|
key: Args.string("key").pipe(Args.optional),
|
|
@@ -80,7 +80,7 @@ export const start = Command.make("start", {
|
|
|
80
80
|
let ticket;
|
|
81
81
|
if (key._tag === "None") {
|
|
82
82
|
if (allTickets.length === 0) {
|
|
83
|
-
yield* Console.log("No tickets found. Usage: jcf start PROJ-123");
|
|
83
|
+
yield* Console.log("No tickets found. Usage: jcf timer start PROJ-123");
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
86
|
const selectedKey = yield* fuzzySelect({
|
|
@@ -100,6 +100,10 @@ export const start = Command.make("start", {
|
|
|
100
100
|
else {
|
|
101
101
|
// Key provided — fetch from Jira to validate and get title
|
|
102
102
|
const fetched = yield* fetchTicketByKey(key.value);
|
|
103
|
+
if (fetched._tag === "NotLoggedIn") {
|
|
104
|
+
yield* Console.log(NOT_LOGGED_IN_HINT);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
103
107
|
if (fetched._tag === "NotFound") {
|
|
104
108
|
yield* Console.log(`Ticket ${key.value} not found in Jira.`);
|
|
105
109
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/timer/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/timer/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,20 @@ import { ClockifyAuth } from "../../services/ClockifyAuth.js";
|
|
|
10
10
|
import { ConfigService } from "../../services/ConfigService.js";
|
|
11
11
|
import { TimerService } from "../../services/TimerService.js";
|
|
12
12
|
import { formatDuration, parseDuration, parseStartTime } from "../../utils/time.js";
|
|
13
|
-
import { fetchTicketByKey } from "../fetchTicket.js";
|
|
13
|
+
import { fetchTicketByKey, NOT_LOGGED_IN_HINT } from "../fetchTicket.js";
|
|
14
|
+
/** Final one-line Jira worklog status, including the reason a non-retried failure stuck. */
|
|
15
|
+
const worklogStatusLine = (outcome) => {
|
|
16
|
+
if (outcome === null)
|
|
17
|
+
return "skipped";
|
|
18
|
+
switch (outcome._tag) {
|
|
19
|
+
case "Posted":
|
|
20
|
+
return "✓";
|
|
21
|
+
case "NotLoggedIn":
|
|
22
|
+
return `✗ — not logged in (${NOT_LOGGED_IN_HINT})`;
|
|
23
|
+
case "Failed":
|
|
24
|
+
return `✗ — ${outcome.message} (Clockify time saved; worklog not posted)`;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
14
27
|
/**
|
|
15
28
|
* Interactively resolve a Clockify project for the stop/correction flows.
|
|
16
29
|
*
|
|
@@ -118,6 +131,10 @@ export const stop = Command.make("stop", {
|
|
|
118
131
|
return;
|
|
119
132
|
}
|
|
120
133
|
const fetched = yield* fetchTicketByKey(key);
|
|
134
|
+
if (fetched._tag === "NotLoggedIn") {
|
|
135
|
+
yield* Console.log(NOT_LOGGED_IN_HINT);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
121
138
|
if (fetched._tag === "NotFound") {
|
|
122
139
|
yield* Console.log(`Ticket ${key} not found in Jira.`);
|
|
123
140
|
return;
|
|
@@ -196,7 +213,24 @@ export const stop = Command.make("stop", {
|
|
|
196
213
|
const s = Math.floor(secs % 60);
|
|
197
214
|
yield* Console.log(`Timer stopped: ${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}`);
|
|
198
215
|
yield* Console.log(` Clockify: ${result.clockifyLogged ? "✓" : "✗"}`);
|
|
199
|
-
|
|
216
|
+
// Clockify saved but the Jira worklog failed — show why, and offer to retry just the
|
|
217
|
+
// worklog when it's retryable. The Clockify entry stays put, so retrying never double-logs.
|
|
218
|
+
// `NotLoggedIn` can't be fixed by retrying, so we skip the loop and point at the login command.
|
|
219
|
+
let outcome = result.jiraWorklog;
|
|
220
|
+
const worklog = result.worklog;
|
|
221
|
+
if (outcome?._tag === "Failed" && worklog) {
|
|
222
|
+
yield* Console.log(` Jira worklog: ✗ — ${outcome.message}`);
|
|
223
|
+
let retry = yield* Prompt.confirm({ message: " Retry Jira worklog?", initial: true });
|
|
224
|
+
while (retry) {
|
|
225
|
+
outcome = yield* timer.logWorklog(worklog);
|
|
226
|
+
if (outcome._tag === "Posted" || outcome._tag === "NotLoggedIn")
|
|
227
|
+
break;
|
|
228
|
+
yield* Console.log(` Jira worklog: ✗ — ${outcome.message}`);
|
|
229
|
+
// Default the re-prompt to No: if a retry just failed, don't keep nudging Yes.
|
|
230
|
+
retry = yield* Prompt.confirm({ message: " Retry again?", initial: false });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
yield* Console.log(` Jira worklog: ${worklogStatusLine(outcome)}`);
|
|
200
234
|
}
|
|
201
235
|
}));
|
|
202
236
|
//# sourceMappingURL=stop.js.map
|