workday-daemon 0.21.0 → 0.23.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.
@@ -0,0 +1,157 @@
1
+ import { SEARCH_MIN_WORD_LENGTH } from '../core/constants.js';
2
+ const KEY_RE = /([A-Za-z][A-Za-z0-9]+)-(\d+)/g;
3
+ const MAX_CANDIDATE_KEYS = 50;
4
+ /** Project key of an issue key: everything before the last dash ("ATL-16" → "ATL"). */
5
+ export function projectKeyOf(issueKey) {
6
+ const dash = issueKey.lastIndexOf('-');
7
+ return dash > 0 ? issueKey.slice(0, dash) : issueKey;
8
+ }
9
+ /** Tokenize + classify a raw query against the allowed project keys. */
10
+ export function parseSearchQuery(query, allowedKeys) {
11
+ const raw = query.trim();
12
+ const upperAllowed = allowedKeys.map(k => k.toUpperCase());
13
+ const allowedSet = new Set(upperAllowed);
14
+ // 1) Explicit PROJ-NUM keys, then strip them so their pieces aren't re-tokenized.
15
+ const explicitKeys = [];
16
+ for (const m of raw.matchAll(KEY_RE)) {
17
+ explicitKeys.push(`${m[1].toUpperCase()}-${m[2]}`);
18
+ }
19
+ const remainder = raw.replace(KEY_RE, ' ');
20
+ // 2) Classify the leftover tokens.
21
+ const numbers = [];
22
+ const projectHints = [];
23
+ const words = [];
24
+ for (const tok of remainder.split(/[\s\-]+/).map(t => t.trim()).filter(Boolean)) {
25
+ if (/^\d+$/.test(tok))
26
+ numbers.push(tok);
27
+ else if (allowedSet.has(tok.toUpperCase()))
28
+ projectHints.push(tok.toUpperCase());
29
+ else
30
+ words.push(tok.toLowerCase());
31
+ }
32
+ // 3) Exact-key candidates.
33
+ const keySet = new Set(explicitKeys);
34
+ for (const p of projectHints)
35
+ for (const n of numbers)
36
+ keySet.add(`${p}-${n}`);
37
+ if (projectHints.length === 0) {
38
+ for (const n of numbers)
39
+ for (const k of upperAllowed)
40
+ keySet.add(`${k}-${n}`);
41
+ }
42
+ const candidateKeys = [...keySet].slice(0, MAX_CANDIDATE_KEYS);
43
+ // 4) Words usable in a `summary ~` clause (sanitized, long enough).
44
+ const searchWords = words
45
+ .map(w => w.replace(/[^\p{L}\p{N}]/gu, ''))
46
+ .filter(w => w.length >= SEARCH_MIN_WORD_LENGTH);
47
+ return {
48
+ raw,
49
+ candidateKeys,
50
+ numbers,
51
+ words,
52
+ searchWords,
53
+ projectHints: [...new Set(projectHints)],
54
+ };
55
+ }
56
+ function jqlString(value) {
57
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
58
+ }
59
+ function scopePrefix(allowedKeys) {
60
+ return allowedKeys.length > 0
61
+ ? `project in (${allowedKeys.map(jqlString).join(', ')}) AND `
62
+ : '';
63
+ }
64
+ /**
65
+ * Exact-key lookup JQL, or null when the query yielded no candidate keys. Run
66
+ * separately from the word search so a matched key is never crowded out of the
67
+ * result window by a flood of `summary ~` hits ordered by recency.
68
+ */
69
+ export function buildKeyJql(parsed, allowedKeys) {
70
+ if (parsed.candidateKeys.length === 0)
71
+ return null;
72
+ return `${scopePrefix(allowedKeys)}key in (${parsed.candidateKeys.map(jqlString).join(', ')}) ORDER BY updated DESC`;
73
+ }
74
+ /**
75
+ * Summary-prefix JQL, or null when there are no usable words. wordMode picks
76
+ * how multiple prefixes combine: 'and' (precision) first, 'or' (recall) as a
77
+ * fallback when AND returns nothing.
78
+ */
79
+ export function buildWordJql(parsed, allowedKeys, wordMode) {
80
+ if (parsed.searchWords.length === 0)
81
+ return null;
82
+ const joiner = wordMode === 'and' ? ' AND ' : ' OR ';
83
+ const words = parsed.searchWords.map(w => `summary ~ ${jqlString(w + '*')}`).join(joiner);
84
+ const clause = parsed.searchWords.length > 1 ? `(${words})` : words;
85
+ return `${scopePrefix(allowedKeys)}${clause} ORDER BY updated DESC`;
86
+ }
87
+ /** Does any word in the text start with the prefix? */
88
+ function anyWordStartsWith(text, prefix) {
89
+ if (!prefix)
90
+ return false;
91
+ for (const tok of text.split(/[^\p{L}\p{N}]+/u)) {
92
+ if (tok.startsWith(prefix))
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ /**
98
+ * Score and order candidates against the parsed query, hard-dropping anything
99
+ * outside the allow-list. Deterministic — exact key, then number-prefix, then
100
+ * summary word/phrase match, then project priority and recency.
101
+ */
102
+ export function rankCandidates(candidates, parsed, allowedKeys, cap) {
103
+ const priority = new Map(allowedKeys.map((k, i) => [k.toUpperCase(), i]));
104
+ const exactKeys = new Set(parsed.candidateKeys.map(k => k.toUpperCase()));
105
+ const phrase = parsed.words.join(' ');
106
+ const scored = candidates
107
+ .filter(c => priority.size === 0 || priority.has(c.projectKey.toUpperCase()))
108
+ .map(c => ({ c, score: scoreCandidate(c, parsed, exactKeys, phrase, priority) }));
109
+ scored.sort((a, b) => {
110
+ if (b.score !== a.score)
111
+ return b.score - a.score;
112
+ const ra = a.c.rank ?? Number.MAX_SAFE_INTEGER;
113
+ const rb = b.c.rank ?? Number.MAX_SAFE_INTEGER;
114
+ if (ra !== rb)
115
+ return ra - rb;
116
+ return a.c.key.localeCompare(b.c.key);
117
+ });
118
+ return scored.slice(0, cap).map(({ c }) => ({ key: c.key, summary: c.summary }));
119
+ }
120
+ function scoreCandidate(c, parsed, exactKeys, phrase, priority) {
121
+ let s = 0;
122
+ const keyUpper = c.key.toUpperCase();
123
+ const summaryLower = c.summary.toLowerCase();
124
+ // Exact key we explicitly resolved via `key in`.
125
+ if (exactKeys.has(keyUpper))
126
+ s += 1000;
127
+ // Query number is a prefix of the issue number.
128
+ const numPart = keyUpper.slice(keyUpper.lastIndexOf('-') + 1);
129
+ for (const n of parsed.numbers) {
130
+ if (numPart === n)
131
+ s += 500;
132
+ else if (numPart.startsWith(n))
133
+ s += 300 + Math.min(150, n.length * 30);
134
+ }
135
+ // Summary word/phrase match.
136
+ if (parsed.words.length > 0) {
137
+ if (parsed.words.every(w => anyWordStartsWith(summaryLower, w)))
138
+ s += 300;
139
+ if (phrase && summaryLower.includes(phrase))
140
+ s += 150;
141
+ if (summaryLower.startsWith(parsed.words[0]))
142
+ s += 100;
143
+ }
144
+ // Project hint match + configured priority (earlier in the allow-list = higher).
145
+ if (parsed.projectHints.includes(c.projectKey.toUpperCase()))
146
+ s += 200;
147
+ const pr = priority.get(c.projectKey.toUpperCase());
148
+ if (pr !== undefined)
149
+ s += Math.max(0, 50 - pr * 10);
150
+ // Recency tie-breakers.
151
+ if (c.fromHistory)
152
+ s += 40;
153
+ if (c.rank !== undefined)
154
+ s += Math.max(0, 20 - c.rank);
155
+ return s;
156
+ }
157
+ //# sourceMappingURL=issue-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-search.js","sourceRoot":"","sources":["../../src/push/issue-search.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Secrets, JiraIssue, JiraSearchHit } from '../core/types.js';
1
+ import type { Secrets, JiraIssue, JiraSearchHit, ProjectRef } from '../core/types.js';
2
2
  /** Jira HTTP failure with the status preserved — 404 means "no such issue". */
3
3
  export declare class JiraApiError extends Error {
4
4
  readonly status: number;
@@ -9,16 +9,12 @@ export declare function isJiraConfigured(secrets: Secrets): boolean;
9
9
  /** Get current user's Jira accountId (cached) */
10
10
  export declare function getAccountId(secrets: Secrets): Promise<string>;
11
11
  /**
12
- * Live issue search via the Jira Cloud issue picker (made for autocomplete:
13
- * matches key + summary text, ranks itself). Hits are deduped across picker
14
- * sections (history vs current search overlap).
15
- *
16
- * currentJQL is required even empty — without it the picker answers with the
17
- * History Search section only (recently viewed issues), so a user with no
18
- * view history gets zero hits for everything. showSubTasks keeps sub-task
19
- * issues findable (excluded by default).
12
+ * Relevance-ranked live issue search. Builds a bounded JQL (project scope +
13
+ * exact `key in` + prefix `summary ~`, AND then OR fallback), fills recency /
14
+ * key-number-prefix gaps from the picker, then re-ranks locally. projectKeys
15
+ * is the configured allow-list (order = priority); empty = no project scope.
20
16
  */
21
- export declare function searchIssues(query: string, secrets: Secrets): Promise<JiraSearchHit[]>;
17
+ export declare function searchIssues(query: string, secrets: Secrets, projectKeys?: readonly string[]): Promise<JiraSearchHit[]>;
22
18
  /**
23
19
  * Existence probe for a task key: found → JiraIssue (cached in
24
20
  * issue-cache.json), 404 → null (never cached — the issue may be created a
@@ -34,3 +30,30 @@ export declare function checkIssueExists(key: string, secrets: Secrets): Promise
34
30
  export declare function resolveIssueKeys(issueIds: readonly number[], secrets: Secrets): Promise<Record<string, string>>;
35
31
  /** Resolve task keys to Jira issue IDs and summaries (cached) */
36
32
  export declare function resolveIssueIds(keys: readonly string[], secrets: Secrets): Promise<Map<string, JiraIssue>>;
33
+ interface ProjectSearchPage {
34
+ readonly values?: ReadonlyArray<{
35
+ id?: string;
36
+ key?: string;
37
+ name?: string;
38
+ }>;
39
+ readonly isLast?: boolean;
40
+ }
41
+ /** Map one /project/search page to ProjectRefs, dropping malformed entries. */
42
+ export declare function parseProjectSearchPage(page: ProjectSearchPage): ProjectRef[];
43
+ /**
44
+ * Fetch the full Jira project catalog (all pages) for the search-scope picker.
45
+ * Sorted by key. Throws on network/auth failure — caller decides how to surface.
46
+ */
47
+ export declare function fetchProjects(secrets: Secrets): Promise<ProjectRef[]>;
48
+ /**
49
+ * Ticket summaries straight from the issue-cache — synchronous, never hits the
50
+ * network. Keys with no cached (or empty) summary are simply omitted.
51
+ */
52
+ export declare function loadCachedSummaries(keys: readonly string[]): Record<string, string>;
53
+ /**
54
+ * Best-effort background fill of missing issue summaries into the cache.
55
+ * Fetches only uncached keys that haven't just failed; never throws. Callers
56
+ * fire-and-forget — the summaries surface on the next today poll.
57
+ */
58
+ export declare function backfillIssueSummaries(keys: readonly string[], secrets: Secrets): Promise<void>;
59
+ export {};
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../src/push/jira-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jira-client.js","sourceRoot":"","sources":["../../src/push/jira-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workday-daemon",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "Lightweight activity tracker & timesheet tool",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "build": "tsc",
18
18
  "start": "node dist/daemon.js",
19
19
  "cli": "tsx src/cli.ts",
20
- "test": "tsx tests/unit/stamina-evidence.test.ts && tsx tests/unit/candidate-lifecycle.test.ts && tsx tests/unit/honest-session-end.test.ts && tsx tests/unit/gap-detection.test.ts && tsx tests/unit/janitor.test.ts && tsx tests/unit/stop-marker.test.ts && tsx tests/unit/report-clamp.test.ts && tsx tests/unit/update-manager.test.ts && tsx tests/unit/manual-entries.test.ts && tsx tests/unit/favorites.test.ts && tsx tests/unit/jira-search.test.ts && tsx tests/unit/day-start.test.ts && tsx tests/unit/push-plan.test.ts && tsx tests/unit/push-log.test.ts && tsx tests/unit/tempo-client.test.ts && tsx tests/unit/tempo-snapshot.test.ts && tsx tests/unit/tempo-import.test.ts && tsx tests/unit/month-report.test.ts && tsx tests/unit/day-edit.test.ts && tsx tests/integration/evidence-rebase.test.ts && tsx tests/integration/commit-ledger.test.ts",
20
+ "test": "tsx tests/unit/stamina-evidence.test.ts && tsx tests/unit/candidate-lifecycle.test.ts && tsx tests/unit/honest-session-end.test.ts && tsx tests/unit/gap-detection.test.ts && tsx tests/unit/janitor.test.ts && tsx tests/unit/stop-marker.test.ts && tsx tests/unit/report-clamp.test.ts && tsx tests/unit/update-manager.test.ts && tsx tests/unit/manual-entries.test.ts && tsx tests/unit/favorites.test.ts && tsx tests/unit/jira-search.test.ts && tsx tests/unit/issue-search.test.ts && tsx tests/unit/search-config.test.ts && tsx tests/unit/day-start.test.ts && tsx tests/unit/push-plan.test.ts && tsx tests/unit/push-log.test.ts && tsx tests/unit/tempo-client.test.ts && tsx tests/unit/tempo-snapshot.test.ts && tsx tests/unit/tempo-import.test.ts && tsx tests/unit/month-report.test.ts && tsx tests/unit/day-edit.test.ts && tsx tests/integration/evidence-rebase.test.ts && tsx tests/integration/commit-ledger.test.ts",
21
21
  "prepublishOnly": "npm run build"
22
22
  },
23
23
  "keywords": [