workday-daemon 0.1.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 +95 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +710 -0
- package/dist/cli.js.map +1 -0
- package/dist/collectors/git-client.d.ts +16 -0
- package/dist/collectors/git-client.js +58 -0
- package/dist/collectors/git-client.js.map +1 -0
- package/dist/collectors/git-tracker.d.ts +43 -0
- package/dist/collectors/git-tracker.js +168 -0
- package/dist/collectors/git-tracker.js.map +1 -0
- package/dist/collectors/reflog-parser.d.ts +30 -0
- package/dist/collectors/reflog-parser.js +71 -0
- package/dist/collectors/reflog-parser.js.map +1 -0
- package/dist/collectors/snapshot-parser.d.ts +34 -0
- package/dist/collectors/snapshot-parser.js +79 -0
- package/dist/collectors/snapshot-parser.js.map +1 -0
- package/dist/core/activity-evaluator.d.ts +33 -0
- package/dist/core/activity-evaluator.js +94 -0
- package/dist/core/activity-evaluator.js.map +1 -0
- package/dist/core/config.d.ts +18 -0
- package/dist/core/config.js +174 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +39 -0
- package/dist/core/constants.js +51 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/daily-log.d.ts +56 -0
- package/dist/core/daily-log.js +366 -0
- package/dist/core/daily-log.js.map +1 -0
- package/dist/core/session-tracker.d.ts +110 -0
- package/dist/core/session-tracker.js +460 -0
- package/dist/core/session-tracker.js.map +1 -0
- package/dist/core/status-renderer.d.ts +20 -0
- package/dist/core/status-renderer.js +178 -0
- package/dist/core/status-renderer.js.map +1 -0
- package/dist/core/types.d.ts +320 -0
- package/dist/core/types.js +52 -0
- package/dist/core/types.js.map +1 -0
- package/dist/daemon.d.ts +31 -0
- package/dist/daemon.js +266 -0
- package/dist/daemon.js.map +1 -0
- package/dist/http-server.d.ts +30 -0
- package/dist/http-server.js +342 -0
- package/dist/http-server.js.map +1 -0
- package/dist/push/jira-client.d.ts +5 -0
- package/dist/push/jira-client.js +84 -0
- package/dist/push/jira-client.js.map +1 -0
- package/dist/push/report-builder.d.ts +9 -0
- package/dist/push/report-builder.js +77 -0
- package/dist/push/report-builder.js.map +1 -0
- package/dist/push/tempo-client.d.ts +27 -0
- package/dist/push/tempo-client.js +92 -0
- package/dist/push/tempo-client.js.map +1 -0
- package/dist/push/tempo-pusher.d.ts +17 -0
- package/dist/push/tempo-pusher.js +317 -0
- package/dist/push/tempo-pusher.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Secrets, JiraIssue } from '../core/types.js';
|
|
2
|
+
/** Get current user's Jira accountId (cached) */
|
|
3
|
+
export declare function getAccountId(secrets: Secrets): Promise<string>;
|
|
4
|
+
/** Resolve task keys to Jira issue IDs and summaries (cached) */
|
|
5
|
+
export declare function resolveIssueIds(keys: readonly string[], secrets: Secrets): Promise<Map<string, JiraIssue>>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { getDataDir } from '../core/config.js';
|
|
4
|
+
import { ISSUE_CACHE_FILE } from '../core/constants.js';
|
|
5
|
+
const ACCOUNT_ID_CACHE_KEY = '__accountId__';
|
|
6
|
+
function getCachePath() {
|
|
7
|
+
return join(getDataDir(), ISSUE_CACHE_FILE);
|
|
8
|
+
}
|
|
9
|
+
function loadCache() {
|
|
10
|
+
const path = getCachePath();
|
|
11
|
+
if (!existsSync(path))
|
|
12
|
+
return {};
|
|
13
|
+
try {
|
|
14
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function saveCache(cache) {
|
|
21
|
+
writeFileSync(getCachePath(), JSON.stringify(cache, null, 2), 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
/** GET request to Jira REST API */
|
|
24
|
+
async function jiraGet(path, secrets) {
|
|
25
|
+
const url = new URL(path, secrets.Jira_BaseUrl);
|
|
26
|
+
const auth = Buffer.from(`${secrets.Jira_Email}:${secrets.Jira_Token}`).toString('base64');
|
|
27
|
+
const res = await fetch(url.toString(), {
|
|
28
|
+
method: 'GET',
|
|
29
|
+
headers: {
|
|
30
|
+
'Authorization': `Basic ${auth}`,
|
|
31
|
+
'Accept': 'application/json',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
const body = await res.text();
|
|
36
|
+
throw new Error(`Jira API ${res.status} GET ${path}: ${body.slice(0, 300)}`);
|
|
37
|
+
}
|
|
38
|
+
return res.json();
|
|
39
|
+
}
|
|
40
|
+
/** Get current user's Jira accountId (cached) */
|
|
41
|
+
export async function getAccountId(secrets) {
|
|
42
|
+
const cache = loadCache();
|
|
43
|
+
if (cache[ACCOUNT_ID_CACHE_KEY]) {
|
|
44
|
+
return cache[ACCOUNT_ID_CACHE_KEY];
|
|
45
|
+
}
|
|
46
|
+
const data = await jiraGet('/rest/api/3/myself', secrets);
|
|
47
|
+
cache[ACCOUNT_ID_CACHE_KEY] = data.accountId;
|
|
48
|
+
saveCache(cache);
|
|
49
|
+
return data.accountId;
|
|
50
|
+
}
|
|
51
|
+
/** Resolve task keys to Jira issue IDs and summaries (cached) */
|
|
52
|
+
export async function resolveIssueIds(keys, secrets) {
|
|
53
|
+
const results = new Map();
|
|
54
|
+
const cache = loadCache();
|
|
55
|
+
const toFetch = [];
|
|
56
|
+
for (const key of keys) {
|
|
57
|
+
const cached = cache[key];
|
|
58
|
+
if (cached) {
|
|
59
|
+
results.set(key, cached);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
toFetch.push(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (toFetch.length > 0) {
|
|
66
|
+
for (const key of toFetch) {
|
|
67
|
+
try {
|
|
68
|
+
const data = await jiraGet(`/rest/api/3/issue/${encodeURIComponent(key)}?fields=summary`, secrets);
|
|
69
|
+
const issue = {
|
|
70
|
+
issueId: Number(data.id),
|
|
71
|
+
summary: data.fields?.summary ?? '',
|
|
72
|
+
};
|
|
73
|
+
cache[key] = issue;
|
|
74
|
+
results.set(key, issue);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.error(`WARNING: Failed to resolve ${key}: ${err instanceof Error ? err.message : String(err)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
saveCache(cache);
|
|
81
|
+
}
|
|
82
|
+
return results;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=jira-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../src/push/jira-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AppConfig, TaskDayReport, ReportResponse } from '../core/types.js';
|
|
2
|
+
/** First day of current month as YYYY-MM-DD */
|
|
3
|
+
export declare function getDefaultFromDate(config: AppConfig): string;
|
|
4
|
+
/** Today as YYYY-MM-DD */
|
|
5
|
+
export declare function getDefaultToDate(config: AppConfig): string;
|
|
6
|
+
/** Aggregate daily logs into per-task-per-day report entries */
|
|
7
|
+
export declare function buildReport(from: string, to: string, config: AppConfig): TaskDayReport[];
|
|
8
|
+
/** Build full report response with totals */
|
|
9
|
+
export declare function buildReportResponse(from: string, to: string, config: AppConfig): ReportResponse;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { readDailyLog, computeFullEffectiveDuration } from '../core/daily-log.js';
|
|
2
|
+
import { formatDate } from '../core/config.js';
|
|
3
|
+
/** Iterate calendar dates from `from` to `to` (inclusive) */
|
|
4
|
+
function* iterateDates(from, to) {
|
|
5
|
+
const current = new Date(from + 'T12:00:00Z');
|
|
6
|
+
const end = new Date(to + 'T12:00:00Z');
|
|
7
|
+
while (current <= end) {
|
|
8
|
+
const y = current.getUTCFullYear();
|
|
9
|
+
const m = String(current.getUTCMonth() + 1).padStart(2, '0');
|
|
10
|
+
const d = String(current.getUTCDate()).padStart(2, '0');
|
|
11
|
+
yield `${y}-${m}-${d}`;
|
|
12
|
+
current.setUTCDate(current.getUTCDate() + 1);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Round seconds to nearest N-minute block, minimum one block */
|
|
16
|
+
function roundToMinutes(seconds, minutes) {
|
|
17
|
+
const blockSeconds = minutes * 60;
|
|
18
|
+
const blocks = Math.round(seconds / blockSeconds);
|
|
19
|
+
return Math.max(blocks, 1) * blockSeconds;
|
|
20
|
+
}
|
|
21
|
+
/** First day of current month as YYYY-MM-DD */
|
|
22
|
+
export function getDefaultFromDate(config) {
|
|
23
|
+
const now = formatDate(Date.now(), config.timezone);
|
|
24
|
+
return now.slice(0, 8) + '01';
|
|
25
|
+
}
|
|
26
|
+
/** Today as YYYY-MM-DD */
|
|
27
|
+
export function getDefaultToDate(config) {
|
|
28
|
+
return formatDate(Date.now(), config.timezone);
|
|
29
|
+
}
|
|
30
|
+
/** Aggregate daily logs into per-task-per-day report entries */
|
|
31
|
+
export function buildReport(from, to, config) {
|
|
32
|
+
const entries = [];
|
|
33
|
+
for (const date of iterateDates(from, to)) {
|
|
34
|
+
const log = readDailyLog(date);
|
|
35
|
+
if (!log)
|
|
36
|
+
continue;
|
|
37
|
+
// Group sessions by task, skip null tasks
|
|
38
|
+
const taskMap = new Map();
|
|
39
|
+
for (const session of log.sessions) {
|
|
40
|
+
if (!session.task)
|
|
41
|
+
continue;
|
|
42
|
+
const durationMs = computeFullEffectiveDuration(session);
|
|
43
|
+
if (durationMs <= 0)
|
|
44
|
+
continue;
|
|
45
|
+
const existing = taskMap.get(session.task);
|
|
46
|
+
if (existing) {
|
|
47
|
+
existing.totalMs += durationMs;
|
|
48
|
+
existing.count++;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
taskMap.set(session.task, { totalMs: durationMs, count: 1 });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
for (const [task, { totalMs, count }] of taskMap) {
|
|
55
|
+
let totalSeconds = Math.round(totalMs / 1000);
|
|
56
|
+
if (config.report.roundingMinutes > 0) {
|
|
57
|
+
totalSeconds = roundToMinutes(totalSeconds, config.report.roundingMinutes);
|
|
58
|
+
}
|
|
59
|
+
if (totalSeconds <= 0)
|
|
60
|
+
continue;
|
|
61
|
+
entries.push({ date, task, totalSeconds, sessionCount: count });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return entries;
|
|
65
|
+
}
|
|
66
|
+
/** Build full report response with totals */
|
|
67
|
+
export function buildReportResponse(from, to, config) {
|
|
68
|
+
const entries = buildReport(from, to, config);
|
|
69
|
+
const taskTotals = {};
|
|
70
|
+
let totalSeconds = 0;
|
|
71
|
+
for (const entry of entries) {
|
|
72
|
+
taskTotals[entry.task] = (taskTotals[entry.task] ?? 0) + entry.totalSeconds;
|
|
73
|
+
totalSeconds += entry.totalSeconds;
|
|
74
|
+
}
|
|
75
|
+
return { from, to, entries, taskTotals, totalSeconds };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=report-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-builder.js","sourceRoot":"","sources":["../../src/push/report-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TempoWorklog } from '../core/types.js';
|
|
2
|
+
interface CreateWorklogParams {
|
|
3
|
+
readonly issueId: number;
|
|
4
|
+
readonly authorAccountId: string;
|
|
5
|
+
readonly timeSpentSeconds: number;
|
|
6
|
+
readonly startDate: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class TempoClient {
|
|
9
|
+
private readonly token;
|
|
10
|
+
private lastRequestTime;
|
|
11
|
+
constructor(token: string);
|
|
12
|
+
private rateLimit;
|
|
13
|
+
private request;
|
|
14
|
+
/** Fetch user worklogs for a date range with pagination */
|
|
15
|
+
getUserWorklogs(accountId: string, from: string, to: string): Promise<TempoWorklog[]>;
|
|
16
|
+
/** Create a new worklog */
|
|
17
|
+
createWorklog(params: CreateWorklogParams): Promise<{
|
|
18
|
+
tempoWorklogId: number;
|
|
19
|
+
}>;
|
|
20
|
+
/** Update an existing worklog */
|
|
21
|
+
updateWorklog(worklogId: number, params: CreateWorklogParams): Promise<{
|
|
22
|
+
tempoWorklogId: number;
|
|
23
|
+
}>;
|
|
24
|
+
/** Delete a worklog */
|
|
25
|
+
deleteWorklog(worklogId: number): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { TEMPO_BASE_URL, TEMPO_RATE_LIMIT_MS } from '../core/constants.js';
|
|
2
|
+
export class TempoClient {
|
|
3
|
+
token;
|
|
4
|
+
lastRequestTime = 0;
|
|
5
|
+
constructor(token) {
|
|
6
|
+
this.token = token;
|
|
7
|
+
}
|
|
8
|
+
async rateLimit() {
|
|
9
|
+
const elapsed = Date.now() - this.lastRequestTime;
|
|
10
|
+
if (elapsed < TEMPO_RATE_LIMIT_MS) {
|
|
11
|
+
await new Promise(r => setTimeout(r, TEMPO_RATE_LIMIT_MS - elapsed));
|
|
12
|
+
}
|
|
13
|
+
this.lastRequestTime = Date.now();
|
|
14
|
+
}
|
|
15
|
+
async request(method, path, body) {
|
|
16
|
+
await this.rateLimit();
|
|
17
|
+
const url = `${TEMPO_BASE_URL}${path}`;
|
|
18
|
+
const headers = {
|
|
19
|
+
'Authorization': `Bearer ${this.token}`,
|
|
20
|
+
'Accept': 'application/json',
|
|
21
|
+
};
|
|
22
|
+
if (body !== undefined) {
|
|
23
|
+
headers['Content-Type'] = 'application/json';
|
|
24
|
+
}
|
|
25
|
+
const res = await fetch(url, {
|
|
26
|
+
method,
|
|
27
|
+
headers,
|
|
28
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
29
|
+
});
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
const text = await res.text();
|
|
32
|
+
throw new Error(`Tempo API ${res.status} ${method} ${path}: ${text.slice(0, 300)}`);
|
|
33
|
+
}
|
|
34
|
+
// DELETE returns 204 No Content
|
|
35
|
+
if (res.status === 204)
|
|
36
|
+
return {};
|
|
37
|
+
return res.json();
|
|
38
|
+
}
|
|
39
|
+
/** Fetch user worklogs for a date range with pagination */
|
|
40
|
+
async getUserWorklogs(accountId, from, to) {
|
|
41
|
+
const allWorklogs = [];
|
|
42
|
+
let offset = 0;
|
|
43
|
+
const limit = 50;
|
|
44
|
+
while (true) {
|
|
45
|
+
const path = `/4/worklogs/user/${encodeURIComponent(accountId)}`
|
|
46
|
+
+ `?from=${from}&to=${to}&offset=${offset}&limit=${limit}`;
|
|
47
|
+
const response = await this.request('GET', path);
|
|
48
|
+
for (const wl of response.results ?? []) {
|
|
49
|
+
allWorklogs.push({
|
|
50
|
+
tempoWorklogId: wl.tempoWorklogId,
|
|
51
|
+
issueId: wl.issue?.id ?? wl.issueId ?? 0,
|
|
52
|
+
startDate: wl.startDate,
|
|
53
|
+
timeSpentSeconds: wl.timeSpentSeconds,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const meta = response.metadata;
|
|
57
|
+
if (!meta || offset + limit >= meta.count)
|
|
58
|
+
break;
|
|
59
|
+
offset += limit;
|
|
60
|
+
}
|
|
61
|
+
return allWorklogs;
|
|
62
|
+
}
|
|
63
|
+
/** Create a new worklog */
|
|
64
|
+
async createWorklog(params) {
|
|
65
|
+
const body = {
|
|
66
|
+
issueId: params.issueId,
|
|
67
|
+
authorAccountId: params.authorAccountId,
|
|
68
|
+
timeSpentSeconds: params.timeSpentSeconds,
|
|
69
|
+
startDate: params.startDate,
|
|
70
|
+
startTime: '09:00:00',
|
|
71
|
+
attributes: [{ key: '_Activity_', value: 'Development' }],
|
|
72
|
+
};
|
|
73
|
+
return this.request('POST', '/4/worklogs', body);
|
|
74
|
+
}
|
|
75
|
+
/** Update an existing worklog */
|
|
76
|
+
async updateWorklog(worklogId, params) {
|
|
77
|
+
const body = {
|
|
78
|
+
issueId: params.issueId,
|
|
79
|
+
authorAccountId: params.authorAccountId,
|
|
80
|
+
timeSpentSeconds: params.timeSpentSeconds,
|
|
81
|
+
startDate: params.startDate,
|
|
82
|
+
startTime: '09:00:00',
|
|
83
|
+
attributes: [{ key: '_Activity_', value: 'Development' }],
|
|
84
|
+
};
|
|
85
|
+
return this.request('PUT', `/4/worklogs/${worklogId}`, body);
|
|
86
|
+
}
|
|
87
|
+
/** Delete a worklog */
|
|
88
|
+
async deleteWorklog(worklogId) {
|
|
89
|
+
await this.request('DELETE', `/4/worklogs/${worklogId}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=tempo-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo-client.js","sourceRoot":"","sources":["../../src/push/tempo-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AppConfig, type Secrets, type TaskDayReport, type TempoWorklog, type JiraIssue, type PushPlanEntry, type PushLogEntry, type PushResult, type PushResponse } from '../core/types.js';
|
|
2
|
+
import { TempoClient } from './tempo-client.js';
|
|
3
|
+
/** Build a plan by comparing report entries with push log and existing Tempo worklogs */
|
|
4
|
+
export declare function buildPushPlan(report: readonly TaskDayReport[], jiraMap: Map<string, JiraIssue>, pushLog: Record<string, PushLogEntry>, tempoWorklogs: readonly TempoWorklog[]): PushPlanEntry[];
|
|
5
|
+
/** Execute mutations from the plan, update push log */
|
|
6
|
+
export declare function executePlan(plan: readonly PushPlanEntry[], tempoClient: TempoClient, accountId: string): Promise<PushResult>;
|
|
7
|
+
interface RunPushOptions {
|
|
8
|
+
readonly from: string;
|
|
9
|
+
readonly to: string;
|
|
10
|
+
readonly commit: boolean;
|
|
11
|
+
readonly config: AppConfig;
|
|
12
|
+
readonly secrets: Secrets;
|
|
13
|
+
readonly filePath?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Full push pipeline: build report → resolve Jira → fetch Tempo → plan → execute */
|
|
16
|
+
export declare function runPush(options: RunPushOptions): Promise<PushResponse>;
|
|
17
|
+
export {};
|