@fureworks/scope 0.1.0 → 0.2.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 (80) hide show
  1. package/README.md +129 -48
  2. package/dist/cli/config.d.ts +8 -1
  3. package/dist/cli/config.d.ts.map +1 -1
  4. package/dist/cli/config.js +368 -42
  5. package/dist/cli/config.js.map +1 -1
  6. package/dist/cli/init.d.ts +2 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +15 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/notifications.d.ts +7 -0
  11. package/dist/cli/notifications.d.ts.map +1 -0
  12. package/dist/cli/notifications.js +77 -0
  13. package/dist/cli/notifications.js.map +1 -0
  14. package/dist/cli/onboard.d.ts.map +1 -1
  15. package/dist/cli/onboard.js +2 -1
  16. package/dist/cli/onboard.js.map +1 -1
  17. package/dist/cli/plan.d.ts +7 -0
  18. package/dist/cli/plan.d.ts.map +1 -0
  19. package/dist/cli/plan.js +111 -0
  20. package/dist/cli/plan.js.map +1 -0
  21. package/dist/cli/review.d.ts +6 -0
  22. package/dist/cli/review.d.ts.map +1 -0
  23. package/dist/cli/review.js +167 -0
  24. package/dist/cli/review.js.map +1 -0
  25. package/dist/cli/snooze.d.ts +12 -0
  26. package/dist/cli/snooze.d.ts.map +1 -0
  27. package/dist/cli/snooze.js +155 -0
  28. package/dist/cli/snooze.js.map +1 -0
  29. package/dist/cli/today.d.ts.map +1 -1
  30. package/dist/cli/today.js +69 -9
  31. package/dist/cli/today.js.map +1 -1
  32. package/dist/cli/tune.d.ts +8 -0
  33. package/dist/cli/tune.d.ts.map +1 -0
  34. package/dist/cli/tune.js +62 -0
  35. package/dist/cli/tune.js.map +1 -0
  36. package/dist/engine/prioritize.d.ts +10 -2
  37. package/dist/engine/prioritize.d.ts.map +1 -1
  38. package/dist/engine/prioritize.js +156 -25
  39. package/dist/engine/prioritize.js.map +1 -1
  40. package/dist/index.js +48 -5
  41. package/dist/index.js.map +1 -1
  42. package/dist/notifications/index.d.ts.map +1 -1
  43. package/dist/notifications/index.js +6 -10
  44. package/dist/notifications/index.js.map +1 -1
  45. package/dist/sources/activity.d.ts +32 -0
  46. package/dist/sources/activity.d.ts.map +1 -0
  47. package/dist/sources/activity.js +101 -0
  48. package/dist/sources/activity.js.map +1 -0
  49. package/dist/sources/calendar.d.ts +6 -0
  50. package/dist/sources/calendar.d.ts.map +1 -1
  51. package/dist/sources/calendar.js +114 -0
  52. package/dist/sources/calendar.js.map +1 -1
  53. package/dist/store/config.d.ts +8 -0
  54. package/dist/store/config.d.ts.map +1 -1
  55. package/dist/store/config.js +22 -0
  56. package/dist/store/config.js.map +1 -1
  57. package/dist/store/muted.d.ts +17 -0
  58. package/dist/store/muted.d.ts.map +1 -0
  59. package/dist/store/muted.js +55 -0
  60. package/dist/store/muted.js.map +1 -0
  61. package/dist/store/snapshot.d.ts +12 -0
  62. package/dist/store/snapshot.d.ts.map +1 -0
  63. package/dist/store/snapshot.js +41 -0
  64. package/dist/store/snapshot.js.map +1 -0
  65. package/package.json +8 -2
  66. package/src/cli/config.ts +0 -66
  67. package/src/cli/context.ts +0 -109
  68. package/src/cli/daemon.ts +0 -217
  69. package/src/cli/onboard.ts +0 -335
  70. package/src/cli/status.ts +0 -77
  71. package/src/cli/switch.ts +0 -93
  72. package/src/cli/today.ts +0 -114
  73. package/src/engine/prioritize.ts +0 -257
  74. package/src/index.ts +0 -58
  75. package/src/notifications/index.ts +0 -42
  76. package/src/sources/calendar.ts +0 -170
  77. package/src/sources/git.ts +0 -168
  78. package/src/sources/issues.ts +0 -62
  79. package/src/store/config.ts +0 -104
  80. package/tsconfig.json +0 -19
@@ -0,0 +1,155 @@
1
+ import chalk from "chalk";
2
+ import { loadMuted, saveMuted, } from "../store/muted.js";
3
+ const DAY_NAMES = [
4
+ "sunday",
5
+ "monday",
6
+ "tuesday",
7
+ "wednesday",
8
+ "thursday",
9
+ "friday",
10
+ "saturday",
11
+ ];
12
+ export function parseUntilDate(input) {
13
+ const normalized = input.trim().toLowerCase();
14
+ const now = new Date();
15
+ if (normalized === "tomorrow") {
16
+ const tomorrow = new Date(now);
17
+ tomorrow.setHours(0, 0, 0, 0);
18
+ tomorrow.setDate(tomorrow.getDate() + 1);
19
+ return tomorrow;
20
+ }
21
+ const dayIndex = DAY_NAMES.indexOf(normalized);
22
+ if (dayIndex >= 0) {
23
+ const target = new Date(now);
24
+ target.setHours(0, 0, 0, 0);
25
+ const delta = (dayIndex - target.getDay() + 7) % 7 || 7;
26
+ target.setDate(target.getDate() + delta);
27
+ return target;
28
+ }
29
+ const relative = normalized.match(/^(\d+)([dw])$/);
30
+ if (relative) {
31
+ const amount = Number.parseInt(relative[1], 10);
32
+ const unit = relative[2];
33
+ const days = unit === "w" ? amount * 7 : amount;
34
+ const target = new Date(now);
35
+ target.setDate(target.getDate() + days);
36
+ return target;
37
+ }
38
+ if (/^\d{4}-\d{2}-\d{2}$/.test(normalized)) {
39
+ const target = new Date(`${normalized}T00:00:00`);
40
+ if (!Number.isNaN(target.getTime())) {
41
+ return target;
42
+ }
43
+ }
44
+ throw new Error("Invalid --until value. Use: tomorrow, monday-sunday, 3d, 1w, or YYYY-MM-DD.");
45
+ }
46
+ function isValidItemId(id) {
47
+ return (/^(pr|issue):[^#\s]+#\d+$/.test(id) ||
48
+ /^git:[^\s]+$/.test(id));
49
+ }
50
+ function upsertSnooze(snoozed, entry) {
51
+ return [...snoozed.filter((existing) => existing.id !== entry.id), entry];
52
+ }
53
+ function upsertMute(muted, entry) {
54
+ return [...muted.filter((existing) => existing.id !== entry.id), entry];
55
+ }
56
+ function printList() {
57
+ const store = loadMuted();
58
+ console.log("");
59
+ console.log(chalk.bold(" Muted Items"));
60
+ if (store.muted.length === 0) {
61
+ console.log(chalk.dim(" (none)"));
62
+ }
63
+ else {
64
+ for (const entry of store.muted) {
65
+ console.log(` - ${entry.id} ${chalk.dim(`(muted ${entry.created})`)}`);
66
+ }
67
+ }
68
+ console.log("");
69
+ console.log(chalk.bold(" Snoozed Items"));
70
+ if (store.snoozed.length === 0) {
71
+ console.log(chalk.dim(" (none)"));
72
+ }
73
+ else {
74
+ for (const entry of store.snoozed) {
75
+ console.log(` - ${entry.id} ${chalk.dim(`(until ${entry.until})`)}`);
76
+ }
77
+ }
78
+ console.log("");
79
+ }
80
+ function clearItem(id) {
81
+ if (!isValidItemId(id)) {
82
+ console.log(chalk.yellow(" Invalid item id. Use pr:repo#123, issue:repo#123, or git:repo.\n"));
83
+ return;
84
+ }
85
+ const store = loadMuted();
86
+ const next = {
87
+ muted: store.muted.filter((entry) => entry.id !== id),
88
+ snoozed: store.snoozed.filter((entry) => entry.id !== id),
89
+ };
90
+ saveMuted(next);
91
+ if (next.muted.length === store.muted.length &&
92
+ next.snoozed.length === store.snoozed.length) {
93
+ console.log(chalk.dim(` No entry found for ${id}\n`));
94
+ return;
95
+ }
96
+ console.log(chalk.green(` Cleared: ${id}\n`));
97
+ }
98
+ export async function snoozeCommand(itemId, options) {
99
+ if (!isValidItemId(itemId)) {
100
+ console.log(chalk.yellow(" Invalid item id. Use pr:repo#123, issue:repo#123, or git:repo.\n"));
101
+ return;
102
+ }
103
+ let untilDate;
104
+ try {
105
+ untilDate = parseUntilDate(options.until);
106
+ }
107
+ catch (error) {
108
+ console.log(chalk.yellow(` ${error.message}\n`));
109
+ return;
110
+ }
111
+ if (untilDate.getTime() <= Date.now()) {
112
+ console.log(chalk.yellow(" --until must resolve to a future time.\n"));
113
+ return;
114
+ }
115
+ const nowIso = new Date().toISOString();
116
+ const untilIso = untilDate.toISOString();
117
+ const store = loadMuted();
118
+ const next = {
119
+ muted: store.muted.filter((entry) => entry.id !== itemId),
120
+ snoozed: upsertSnooze(store.snoozed, {
121
+ id: itemId,
122
+ until: untilIso,
123
+ created: nowIso,
124
+ }),
125
+ };
126
+ saveMuted(next);
127
+ console.log(chalk.green(` Snoozed ${itemId} until ${untilIso}\n`));
128
+ }
129
+ export async function muteCommand(itemId, options) {
130
+ if (options.list) {
131
+ printList();
132
+ return;
133
+ }
134
+ if (options.clear) {
135
+ clearItem(options.clear);
136
+ return;
137
+ }
138
+ if (!itemId) {
139
+ console.log(chalk.yellow(" Missing item id. Use: scope mute <item-id>, scope mute --list, or scope mute --clear <item-id>.\n"));
140
+ return;
141
+ }
142
+ if (!isValidItemId(itemId)) {
143
+ console.log(chalk.yellow(" Invalid item id. Use pr:repo#123, issue:repo#123, or git:repo.\n"));
144
+ return;
145
+ }
146
+ const nowIso = new Date().toISOString();
147
+ const store = loadMuted();
148
+ const next = {
149
+ snoozed: store.snoozed.filter((entry) => entry.id !== itemId),
150
+ muted: upsertMute(store.muted, { id: itemId, created: nowIso }),
151
+ };
152
+ saveMuted(next);
153
+ console.log(chalk.green(` Muted ${itemId}\n`));
154
+ }
155
+ //# sourceMappingURL=snooze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snooze.js","sourceRoot":"","sources":["../../src/cli/snooze.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"today.d.ts","sourceRoot":"","sources":["../../src/cli/today.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGvE"}
1
+ {"version":3,"file":"today.d.ts","sourceRoot":"","sources":["../../src/cli/today.ts"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KvE"}
package/dist/cli/today.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { loadConfig, configExists } from "../store/config.js";
3
+ import { getTimeContext, loadSnapshot, saveSnapshot } from "../store/snapshot.js";
3
4
  import { scanAllRepos } from "../sources/git.js";
4
5
  import { getCalendarToday } from "../sources/calendar.js";
5
6
  import { scanAssignedIssues } from "../sources/issues.js";
@@ -31,7 +32,15 @@ export async function todayCommand(options) {
31
32
  console.log(chalk.dim(" ⚠ GitHub issues not available. Install/auth gh to enable issue signals.\n"));
32
33
  }
33
34
  // Prioritize
34
- const result = prioritize(gitSignals, events, freeBlocks, issueScan.issues);
35
+ const result = prioritize(gitSignals, events, freeBlocks, issueScan.issues, config.weights);
36
+ const timeContext = getTimeContext();
37
+ // Save a morning snapshot for scope review/progress checks.
38
+ if (timeContext === "morning") {
39
+ saveSnapshot(result.now, result.today);
40
+ }
41
+ const snapshot = timeContext === "midday" || timeContext === "afternoon"
42
+ ? loadSnapshot()
43
+ : null;
35
44
  // Output
36
45
  if (options.json) {
37
46
  console.log(JSON.stringify(result, null, 2));
@@ -39,19 +48,40 @@ export async function todayCommand(options) {
39
48
  }
40
49
  console.log("");
41
50
  if (result.now.length === 0 && result.today.length === 0) {
42
- console.log(chalk.green(" ✓ Nothing urgent. You're clear.\n"));
43
- if (result.laterCount > 0) {
44
- console.log(chalk.dim(` ${result.laterCount} low-priority items → scope status\n`));
51
+ if (timeContext === "evening") {
52
+ console.log(" Day's winding down. Run `scope review` to wrap up.\n");
53
+ }
54
+ else {
55
+ console.log(chalk.green(" ✓ Nothing urgent. You're clear.\n"));
56
+ }
57
+ // Show ignored items even when nothing is urgent
58
+ if (result.ignored.length > 0) {
59
+ console.log(chalk.bold(" IGNORED"));
60
+ console.log(chalk.dim(" ───────"));
61
+ const shown = result.ignored.slice(0, 10);
62
+ for (const item of shown) {
63
+ console.log(chalk.dim(` ✗ ${item.label} — ${item.reason}`));
64
+ }
65
+ if (result.ignored.length > shown.length) {
66
+ console.log(chalk.dim(` and ${result.ignored.length - shown.length} more`));
67
+ }
68
+ console.log("");
45
69
  }
70
+ console.log(chalk.dim(" Nothing else needs you today.\n"));
46
71
  return;
47
72
  }
73
+ if (timeContext === "morning") {
74
+ console.log(" Good morning. Here's what matters:\n");
75
+ }
48
76
  // NOW section
49
77
  if (result.now.length > 0) {
50
78
  console.log(chalk.bold(" NOW"));
51
79
  console.log(chalk.dim(" ───"));
52
80
  for (const item of result.now) {
53
- console.log(` ${item.emoji} ${chalk.bold(item.label)}`);
81
+ const confTag = item.confidenceNote ? chalk.yellow(` (${item.confidenceNote})`) : "";
82
+ console.log(` ${item.emoji} ${chalk.bold(item.label)}${confTag}`);
54
83
  console.log(` ${chalk.dim(item.detail)}`);
84
+ console.log(` ${chalk.dim(`Why: ${item.reason}`)}`);
55
85
  }
56
86
  console.log("");
57
87
  }
@@ -60,11 +90,29 @@ export async function todayCommand(options) {
60
90
  console.log(chalk.bold(" TODAY"));
61
91
  console.log(chalk.dim(" ────"));
62
92
  for (const item of result.today) {
63
- console.log(` ${item.emoji} ${chalk.bold(item.label)}`);
93
+ const confTag = item.confidenceNote ? chalk.yellow(` (${item.confidenceNote})`) : "";
94
+ console.log(` ${item.emoji} ${chalk.bold(item.label)}${confTag}`);
64
95
  console.log(` ${chalk.dim(item.detail)}`);
96
+ console.log(` ${chalk.dim(`Why: ${item.reason}`)}`);
65
97
  }
66
98
  console.log("");
67
99
  }
100
+ // IGNORED section
101
+ if (result.ignored.length > 0) {
102
+ console.log(chalk.bold(" IGNORED"));
103
+ console.log(chalk.dim(" ───────"));
104
+ const shown = result.ignored.slice(0, 10);
105
+ for (const item of shown) {
106
+ console.log(chalk.dim(` ✗ ${item.label} — ${item.reason}`));
107
+ }
108
+ if (result.ignored.length > shown.length) {
109
+ console.log(chalk.dim(` and ${result.ignored.length - shown.length} more`));
110
+ }
111
+ console.log("");
112
+ }
113
+ if (result.now.length === 0) {
114
+ console.log(chalk.dim(" Nothing else needs you today.\n"));
115
+ }
68
116
  // Suggestions
69
117
  if (result.suggestions.length > 0) {
70
118
  for (const suggestion of result.suggestions) {
@@ -72,9 +120,21 @@ export async function todayCommand(options) {
72
120
  }
73
121
  console.log("");
74
122
  }
75
- // Later count
76
- if (result.laterCount > 0) {
77
- console.log(chalk.dim(` ${result.laterCount} other items can wait → scope status\n`));
123
+ // Temporal context: progress tracking
124
+ if (timeContext === "midday" && snapshot) {
125
+ const total = snapshot.now.length + snapshot.today.length;
126
+ console.log(` You had ${total} items this morning. Check back later to see progress.\n`);
127
+ }
128
+ if (timeContext === "afternoon" && snapshot) {
129
+ const morningItems = [...snapshot.now, ...snapshot.today];
130
+ const currentKeys = new Set([...result.now, ...result.today].map((item) => `${item.source}|${item.label}|${item.detail}`));
131
+ const left = morningItems.filter((item) => currentKeys.has(`${item.source}|${item.label}|${item.detail}`)).length;
132
+ const total = morningItems.length;
133
+ const done = total - left;
134
+ console.log(` ${done}/${total} from this morning done. ${left} remaining.\n`);
135
+ }
136
+ if (timeContext === "evening" && result.now.length > 0) {
137
+ console.log(" Late day — consider if these can wait until tomorrow.\n");
78
138
  }
79
139
  }
80
140
  //# sourceMappingURL=today.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/cli/today.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/cli/today.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface TuneOptions {
2
+ show?: boolean;
3
+ reset?: boolean;
4
+ config?: boolean;
5
+ }
6
+ export declare function tuneCommand(key: string | undefined, value: string | undefined, options: TuneOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=tune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tune.d.ts","sourceRoot":"","sources":["../../src/cli/tune.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
@@ -0,0 +1,62 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, saveConfig, DEFAULT_WEIGHTS } from "../store/config.js";
3
+ const VALID_KEYS = ["staleness", "blocking", "timePressure", "effort"];
4
+ export async function tuneCommand(key, value, options) {
5
+ const config = loadConfig();
6
+ if (options.show || (!key && !options.reset && !options.config)) {
7
+ console.log("");
8
+ console.log(chalk.bold(" Scoring Weights"));
9
+ console.log(chalk.dim(" ───────────────"));
10
+ for (const [k, v] of Object.entries(config.weights)) {
11
+ const isDefault = v === DEFAULT_WEIGHTS[k];
12
+ const label = isDefault ? chalk.dim("(default)") : chalk.yellow("(custom)");
13
+ console.log(` ${k}: ${v} ${label}`);
14
+ }
15
+ console.log("");
16
+ console.log(chalk.dim(" Multipliers on raw scores. 1.0 = default. Higher = more priority."));
17
+ console.log(chalk.dim(" Example: scope tune staleness 1.5 → stale items rank higher\n"));
18
+ return;
19
+ }
20
+ if (options.reset) {
21
+ config.weights = { ...DEFAULT_WEIGHTS };
22
+ saveConfig(config);
23
+ console.log(" ✓ Weights reset to defaults.\n");
24
+ return;
25
+ }
26
+ if (options.config) {
27
+ const editor = process.env.EDITOR || process.env.VISUAL || "vi";
28
+ const { execSync } = await import("node:child_process");
29
+ const { join } = await import("node:path");
30
+ const { homedir } = await import("node:os");
31
+ const configPath = join(homedir(), ".scope", "config.toml");
32
+ try {
33
+ execSync(`${editor} ${configPath}`, { stdio: "inherit" });
34
+ console.log(" ✓ Config saved.\n");
35
+ }
36
+ catch {
37
+ console.log(chalk.red(" Failed to open editor.\n"));
38
+ }
39
+ return;
40
+ }
41
+ if (key && value) {
42
+ if (!VALID_KEYS.includes(key)) {
43
+ console.log(chalk.red(` Unknown weight: ${key}`));
44
+ console.log(chalk.dim(` Valid keys: ${VALID_KEYS.join(", ")}\n`));
45
+ process.exit(1);
46
+ }
47
+ const num = parseFloat(value);
48
+ if (isNaN(num) || num < 0 || num > 10) {
49
+ console.log(chalk.red(` Invalid value: ${value}. Must be 0-10.\n`));
50
+ process.exit(1);
51
+ }
52
+ config.weights[key] = num;
53
+ saveConfig(config);
54
+ console.log(` ✓ ${key} set to ${num}\n`);
55
+ return;
56
+ }
57
+ if (key && !value) {
58
+ console.log(chalk.red(` Missing value. Usage: scope tune ${key} <number>\n`));
59
+ process.exit(1);
60
+ }
61
+ }
62
+ //# sourceMappingURL=tune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tune.js","sourceRoot":"","sources":["../../src/cli/tune.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { GitSignal } from "../sources/git.js";
2
2
  import { CalendarEvent, FreeBlock } from "../sources/calendar.js";
3
3
  import { IssueSignal } from "../sources/issues.js";
4
+ import { ScoringWeights } from "../store/config.js";
4
5
  export type Priority = "now" | "today" | "later";
5
6
  export interface ScoredItem {
6
7
  priority: Priority;
@@ -8,14 +9,21 @@ export interface ScoredItem {
8
9
  emoji: string;
9
10
  label: string;
10
11
  detail: string;
12
+ reason: string;
13
+ confidence: "high" | "medium" | "low";
14
+ confidenceNote?: string;
11
15
  source: "git" | "calendar" | "pr" | "issue";
12
16
  }
13
17
  export interface PrioritizedOutput {
14
18
  now: ScoredItem[];
15
19
  today: ScoredItem[];
16
- laterCount: number;
20
+ ignored: Array<{
21
+ label: string;
22
+ reason: string;
23
+ }>;
24
+ readonly laterCount: number;
17
25
  freeBlocks: FreeBlock[];
18
26
  suggestions: string[];
19
27
  }
20
- export declare function prioritize(gitSignals: GitSignal[], calendarEvents: CalendarEvent[], freeBlocks: FreeBlock[], issues: IssueSignal[]): PrioritizedOutput;
28
+ export declare function prioritize(gitSignals: GitSignal[], calendarEvents: CalendarEvent[], freeBlocks: FreeBlock[], issues: IssueSignal[], weights?: ScoringWeights): PrioritizedOutput;
21
29
  //# sourceMappingURL=prioritize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prioritize.d.ts","sourceRoot":"","sources":["../../src/engine/prioritize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA4JD,wBAAgB,UAAU,CACxB,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,aAAa,EAAE,EAC/B,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,WAAW,EAAE,GACpB,iBAAiB,CA0EnB"}
1
+ {"version":3,"file":"prioritize.d.ts","sourceRoot":"","sources":["../../src/engine/prioritize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAmB,MAAM,oBAAoB,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAoPD,wBAAgB,UAAU,CACxB,UAAU,EAAE,SAAS,EAAE,EACvB,cAAc,EAAE,aAAa,EAAE,EAC/B,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,cAAgC,GACxC,iBAAiB,CAgHnB"}