@fureworks/scope 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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +92 -0
  3. package/dist/cli/config.d.ts +2 -0
  4. package/dist/cli/config.d.ts.map +1 -0
  5. package/dist/cli/config.js +54 -0
  6. package/dist/cli/config.js.map +1 -0
  7. package/dist/cli/context.d.ts +6 -0
  8. package/dist/cli/context.d.ts.map +1 -0
  9. package/dist/cli/context.js +76 -0
  10. package/dist/cli/context.js.map +1 -0
  11. package/dist/cli/daemon.d.ts +2 -0
  12. package/dist/cli/daemon.d.ts.map +1 -0
  13. package/dist/cli/daemon.js +190 -0
  14. package/dist/cli/daemon.js.map +1 -0
  15. package/dist/cli/onboard.d.ts +2 -0
  16. package/dist/cli/onboard.d.ts.map +1 -0
  17. package/dist/cli/onboard.js +286 -0
  18. package/dist/cli/onboard.js.map +1 -0
  19. package/dist/cli/status.d.ts +6 -0
  20. package/dist/cli/status.d.ts.map +1 -0
  21. package/dist/cli/status.js +57 -0
  22. package/dist/cli/status.js.map +1 -0
  23. package/dist/cli/switch.d.ts +2 -0
  24. package/dist/cli/switch.d.ts.map +1 -0
  25. package/dist/cli/switch.js +78 -0
  26. package/dist/cli/switch.js.map +1 -0
  27. package/dist/cli/today.d.ts +7 -0
  28. package/dist/cli/today.d.ts.map +1 -0
  29. package/dist/cli/today.js +80 -0
  30. package/dist/cli/today.js.map +1 -0
  31. package/dist/engine/prioritize.d.ts +21 -0
  32. package/dist/engine/prioritize.d.ts.map +1 -0
  33. package/dist/engine/prioritize.js +204 -0
  34. package/dist/engine/prioritize.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +48 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/notifications/index.d.ts +2 -0
  40. package/dist/notifications/index.d.ts.map +1 -0
  41. package/dist/notifications/index.js +41 -0
  42. package/dist/notifications/index.js.map +1 -0
  43. package/dist/sources/calendar.d.ts +17 -0
  44. package/dist/sources/calendar.d.ts.map +1 -0
  45. package/dist/sources/calendar.js +120 -0
  46. package/dist/sources/calendar.js.map +1 -0
  47. package/dist/sources/git.d.ts +20 -0
  48. package/dist/sources/git.d.ts.map +1 -0
  49. package/dist/sources/git.js +124 -0
  50. package/dist/sources/git.js.map +1 -0
  51. package/dist/sources/issues.d.ts +14 -0
  52. package/dist/sources/issues.d.ts.map +1 -0
  53. package/dist/sources/issues.js +34 -0
  54. package/dist/sources/issues.js.map +1 -0
  55. package/dist/store/config.d.ts +22 -0
  56. package/dist/store/config.d.ts.map +1 -0
  57. package/dist/store/config.js +74 -0
  58. package/dist/store/config.js.map +1 -0
  59. package/package.json +45 -0
  60. package/src/cli/config.ts +66 -0
  61. package/src/cli/context.ts +109 -0
  62. package/src/cli/daemon.ts +217 -0
  63. package/src/cli/onboard.ts +335 -0
  64. package/src/cli/status.ts +77 -0
  65. package/src/cli/switch.ts +93 -0
  66. package/src/cli/today.ts +114 -0
  67. package/src/engine/prioritize.ts +257 -0
  68. package/src/index.ts +58 -0
  69. package/src/notifications/index.ts +42 -0
  70. package/src/sources/calendar.ts +170 -0
  71. package/src/sources/git.ts +168 -0
  72. package/src/sources/issues.ts +62 -0
  73. package/src/store/config.ts +104 -0
  74. package/tsconfig.json +19 -0
@@ -0,0 +1,286 @@
1
+ import chalk from "chalk";
2
+ import { createInterface } from "node:readline";
3
+ import { execSync } from "node:child_process";
4
+ import { existsSync, readdirSync, statSync } from "node:fs";
5
+ import { resolve, join, basename } from "node:path";
6
+ import { homedir } from "node:os";
7
+ import { saveConfig, ensureScopeDir } from "../store/config.js";
8
+ function ask(rl, question) {
9
+ return new Promise((resolve) => {
10
+ rl.question(question, (answer) => {
11
+ resolve(answer.trim());
12
+ });
13
+ });
14
+ }
15
+ function checkCommand(cmd) {
16
+ try {
17
+ execSync(`which ${cmd}`, { stdio: "pipe" });
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ function findGitRepos() {
25
+ const home = homedir();
26
+ const repos = [];
27
+ // Scan all top-level directories in home for git repos (1-2 levels deep)
28
+ const searchRoots = [home];
29
+ // Collect all immediate subdirectories of home as potential search roots
30
+ try {
31
+ const homeEntries = readdirSync(home);
32
+ for (const entry of homeEntries) {
33
+ if (entry.startsWith("."))
34
+ continue; // Skip dotfiles/dirs
35
+ const fullPath = join(home, entry);
36
+ try {
37
+ if (statSync(fullPath).isDirectory()) {
38
+ // Check if this dir itself is a repo
39
+ if (existsSync(join(fullPath, ".git"))) {
40
+ repos.push({ path: fullPath, name: entry });
41
+ }
42
+ else {
43
+ // Search one level deeper inside this directory
44
+ searchRoots.push(fullPath);
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // Skip permission errors
50
+ }
51
+ }
52
+ }
53
+ catch {
54
+ // Skip if home is inaccessible
55
+ }
56
+ // Scan each search root (one level deep)
57
+ for (const dir of searchRoots) {
58
+ if (dir === home)
59
+ continue; // Already scanned top-level
60
+ try {
61
+ const entries = readdirSync(dir);
62
+ for (const entry of entries) {
63
+ if (entry.startsWith("."))
64
+ continue;
65
+ const fullPath = join(dir, entry);
66
+ try {
67
+ if (statSync(fullPath).isDirectory() &&
68
+ existsSync(join(fullPath, ".git"))) {
69
+ repos.push({ path: fullPath, name: `${basename(dir)}/${entry}` });
70
+ }
71
+ }
72
+ catch {
73
+ // Skip permission errors
74
+ }
75
+ }
76
+ }
77
+ catch {
78
+ // Skip inaccessible dirs
79
+ }
80
+ }
81
+ // Dedupe by path
82
+ const seen = new Set();
83
+ return repos.filter((r) => {
84
+ if (seen.has(r.path))
85
+ return false;
86
+ seen.add(r.path);
87
+ return true;
88
+ });
89
+ }
90
+ function askSelection(rl, question, options) {
91
+ return new Promise((resolvePromise) => {
92
+ const selected = new Set();
93
+ console.log(question);
94
+ options.forEach((opt, i) => {
95
+ console.log(chalk.dim(` ${i + 1}) ${opt.label}`));
96
+ });
97
+ console.log(chalk.dim(`\n Enter numbers separated by commas (e.g. 1,3,5), 'all' for everything, or 'none' to skip`));
98
+ rl.question(" ? Select: ", (answer) => {
99
+ const trimmed = answer.trim().toLowerCase();
100
+ if (trimmed === "all") {
101
+ resolvePromise(options.map((o) => o.value));
102
+ return;
103
+ }
104
+ if (trimmed === "none" || trimmed === "") {
105
+ resolvePromise([]);
106
+ return;
107
+ }
108
+ const indices = trimmed
109
+ .split(",")
110
+ .map((s) => parseInt(s.trim(), 10) - 1)
111
+ .filter((i) => i >= 0 && i < options.length);
112
+ resolvePromise(indices.map((i) => options[i].value));
113
+ });
114
+ });
115
+ }
116
+ export async function onboardCommand() {
117
+ const rl = createInterface({
118
+ input: process.stdin,
119
+ output: process.stdout,
120
+ });
121
+ console.log("");
122
+ console.log(chalk.bold(" Welcome to Scope — let's get you set up.\n"));
123
+ const config = {
124
+ repos: [],
125
+ projects: {},
126
+ calendar: { enabled: false, backend: "gws" },
127
+ daemon: { enabled: false, intervalMinutes: 15 },
128
+ };
129
+ // Step 1: Git repos
130
+ console.log(chalk.bold(" Step 1/4: Git repos"));
131
+ console.log(chalk.dim(" ─────────────────────"));
132
+ console.log(chalk.dim(" Scanning for repos...\n"));
133
+ const foundRepos = findGitRepos();
134
+ if (foundRepos.length > 0) {
135
+ console.log(chalk.green(` Found ${foundRepos.length} repo${foundRepos.length !== 1 ? "s" : ""}:\n`));
136
+ const selectedPaths = await askSelection(rl, "", foundRepos.map((r) => ({
137
+ label: `${r.name} ${chalk.dim(`(${r.path})`)}`,
138
+ value: r.path,
139
+ })));
140
+ config.repos.push(...selectedPaths);
141
+ if (selectedPaths.length > 0) {
142
+ console.log(chalk.green(`\n ✓ Added ${selectedPaths.length} repo${selectedPaths.length !== 1 ? "s" : ""}`));
143
+ }
144
+ }
145
+ else {
146
+ console.log(chalk.dim(" No repos found in common directories."));
147
+ }
148
+ // Only ask for manual paths if no repos were found automatically
149
+ if (foundRepos.length === 0) {
150
+ console.log("");
151
+ let addingMore = true;
152
+ while (addingMore) {
153
+ const input = await ask(rl, " ? Add a repo path (or 'done'): ");
154
+ if (input.toLowerCase() === "done" || input === "") {
155
+ addingMore = false;
156
+ }
157
+ else if (input.startsWith("http://") || input.startsWith("https://") || input.startsWith("git@")) {
158
+ console.log(chalk.yellow(` ✗ Scope needs local paths, not URLs.`));
159
+ console.log(chalk.dim(` Clone it first, then add the local path`));
160
+ }
161
+ else {
162
+ const resolved = resolve(input.replace(/^~/, process.env.HOME || "~"));
163
+ if (existsSync(resolved)) {
164
+ config.repos.push(resolved);
165
+ console.log(chalk.green(` ✓ Added ${resolved}`));
166
+ }
167
+ else {
168
+ console.log(chalk.yellow(` ✗ Path not found: ${resolved}`));
169
+ }
170
+ }
171
+ }
172
+ }
173
+ console.log(chalk.green(`\n ✓ Watching ${config.repos.length} repo${config.repos.length !== 1 ? "s" : ""}\n`));
174
+ // Step 2: GitHub CLI
175
+ console.log(chalk.bold(" Step 2/4: GitHub CLI"));
176
+ console.log(chalk.dim(" ─────────────────────"));
177
+ const hasGh = checkCommand("gh");
178
+ if (hasGh) {
179
+ console.log(chalk.green(" Checking for gh CLI... ✓ Found"));
180
+ try {
181
+ const authStatus = execSync("gh auth status 2>&1", {
182
+ encoding: "utf-8",
183
+ });
184
+ if (authStatus.includes("Logged in")) {
185
+ console.log(chalk.green(" Checking auth... ✓ Logged in"));
186
+ }
187
+ else {
188
+ console.log(chalk.yellow(" Checking auth... ✗ Not authenticated"));
189
+ console.log(chalk.dim(" Run 'gh auth login' to enable PR data\n"));
190
+ }
191
+ }
192
+ catch {
193
+ console.log(chalk.yellow(" Checking auth... ✗ Not authenticated"));
194
+ console.log(chalk.dim(" Run 'gh auth login' to enable PR data\n"));
195
+ }
196
+ }
197
+ else {
198
+ console.log(chalk.yellow(" gh CLI not found — PR data will be skipped"));
199
+ console.log(chalk.dim(" Install: https://cli.github.com/\n"));
200
+ }
201
+ console.log(chalk.green(" ✓ GitHub PR data " + (hasGh ? "available" : "skipped") + "\n"));
202
+ // Step 3: Google Calendar
203
+ console.log(chalk.bold(" Step 3/4: Google Calendar (optional)"));
204
+ console.log(chalk.dim(" ─────────────────────"));
205
+ const hasGws = checkCommand("gws");
206
+ if (hasGws) {
207
+ console.log(chalk.green(" Checking for gws CLI... ✓ Found"));
208
+ const enableCal = await ask(rl, " ? Enable calendar integration? (Y/n): ");
209
+ if (enableCal.toLowerCase() !== "n") {
210
+ config.calendar.enabled = true;
211
+ console.log(chalk.green("\n ✓ Calendar enabled\n"));
212
+ }
213
+ else {
214
+ console.log(chalk.dim("\n Calendar skipped. Enable later with 'scope config calendar'\n"));
215
+ }
216
+ }
217
+ else {
218
+ console.log(chalk.yellow(" gws CLI not found — calendar will be skipped"));
219
+ console.log(chalk.dim(" Install: npm install -g @googleworkspace/cli"));
220
+ console.log(chalk.dim(" Enable later with 'scope config calendar'\n"));
221
+ }
222
+ // Step 4: Projects — group repos under names
223
+ console.log(chalk.bold(" Step 4/4: Projects"));
224
+ console.log(chalk.dim(" ─────────────────────"));
225
+ console.log(chalk.dim(" Projects group your repos for context switching."));
226
+ console.log(chalk.dim(" e.g. 'wtl' = your work repos, 'personal' = side projects\n"));
227
+ if (config.repos.length > 0) {
228
+ let assigningProjects = true;
229
+ const unassigned = [...config.repos];
230
+ while (assigningProjects && unassigned.length > 0) {
231
+ const projectName = await ask(rl, " ? Project name (or 'done'): ");
232
+ if (projectName.toLowerCase() === "done" || projectName === "") {
233
+ assigningProjects = false;
234
+ continue;
235
+ }
236
+ console.log(chalk.dim("\n Which repos belong to this project?\n"));
237
+ unassigned.forEach((r, i) => {
238
+ const name = r.split("/").slice(-2).join("/");
239
+ console.log(chalk.dim(` ${i + 1}) ${name}`));
240
+ });
241
+ console.log(chalk.dim(`\n Enter numbers (e.g. 1,3,5), 'all', or 'none'`));
242
+ const pick = await ask(rl, " ? Select: ");
243
+ const trimmed = pick.trim().toLowerCase();
244
+ let selectedPaths = [];
245
+ if (trimmed === "all") {
246
+ selectedPaths = [...unassigned];
247
+ }
248
+ else if (trimmed === "none" || trimmed === "") {
249
+ // skip
250
+ }
251
+ else {
252
+ const indices = trimmed
253
+ .split(",")
254
+ .map((s) => parseInt(s.trim(), 10) - 1)
255
+ .filter((i) => i >= 0 && i < unassigned.length);
256
+ selectedPaths = indices.map((i) => unassigned[i]);
257
+ }
258
+ if (selectedPaths.length > 0) {
259
+ config.projects[projectName] = { path: selectedPaths[0], repos: selectedPaths };
260
+ // Remove assigned repos from unassigned
261
+ for (const p of selectedPaths) {
262
+ const idx = unassigned.indexOf(p);
263
+ if (idx !== -1)
264
+ unassigned.splice(idx, 1);
265
+ }
266
+ console.log(chalk.green(`\n ✓ Project "${projectName}" — ${selectedPaths.length} repo${selectedPaths.length !== 1 ? "s" : ""}\n`));
267
+ }
268
+ if (unassigned.length > 0) {
269
+ console.log(chalk.dim(` ${unassigned.length} repo${unassigned.length !== 1 ? "s" : ""} unassigned. Add another project or 'done'.\n`));
270
+ }
271
+ }
272
+ }
273
+ else {
274
+ console.log(chalk.dim(" No repos to group. Add projects later with 'scope config projects'\n"));
275
+ }
276
+ // Save
277
+ ensureScopeDir();
278
+ saveConfig(config);
279
+ console.log(chalk.dim(" ─────────────────────"));
280
+ console.log(chalk.bold.green(" Setup complete!"));
281
+ console.log(chalk.dim(` Config saved to ~/.scope/config.toml\n`));
282
+ console.log(` Try: ${chalk.bold("scope today")}`);
283
+ console.log(chalk.dim(`\n Tip: run 'npm link' in this directory to use 'scope' globally\n`));
284
+ rl.close();
285
+ }
286
+ //# sourceMappingURL=onboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/cli/onboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface StatusOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoEzE"}
@@ -0,0 +1,57 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, configExists } from "../store/config.js";
3
+ import { scanAllRepos } from "../sources/git.js";
4
+ export async function statusCommand(options) {
5
+ if (!configExists()) {
6
+ console.log(chalk.yellow(" Scope isn't set up yet. Run `scope onboard` to get started.\n"));
7
+ return;
8
+ }
9
+ const config = loadConfig();
10
+ const gitSignals = await scanAllRepos(config.repos);
11
+ if (options.json) {
12
+ console.log(JSON.stringify({ repos: gitSignals, config }, null, 2));
13
+ return;
14
+ }
15
+ console.log("");
16
+ console.log(chalk.bold(" Scope Status"));
17
+ console.log(chalk.dim(" ─────────────────────\n"));
18
+ // Repos
19
+ console.log(chalk.bold(" Repos"));
20
+ if (gitSignals.length === 0) {
21
+ console.log(chalk.dim(" No repos configured or accessible.\n"));
22
+ }
23
+ else {
24
+ for (const signal of gitSignals) {
25
+ const status = [];
26
+ if (signal.uncommittedFiles > 0) {
27
+ status.push(chalk.yellow(`${signal.uncommittedFiles} uncommitted`));
28
+ }
29
+ if (signal.openPRs.length > 0) {
30
+ status.push(chalk.blue(`${signal.openPRs.length} PRs`));
31
+ }
32
+ if (signal.staleBranches.length > 0) {
33
+ status.push(chalk.dim(`${signal.staleBranches.length} stale branches`));
34
+ }
35
+ if (status.length === 0) {
36
+ status.push(chalk.green("clean"));
37
+ }
38
+ console.log(` ${signal.repo} ${chalk.dim(`(${signal.branch})`)} — ${status.join(", ")}`);
39
+ }
40
+ console.log("");
41
+ }
42
+ // Projects
43
+ const projectNames = Object.keys(config.projects);
44
+ if (projectNames.length > 0) {
45
+ console.log(chalk.bold(" Projects"));
46
+ for (const name of projectNames) {
47
+ const p = config.projects[name];
48
+ console.log(` ${name} ${chalk.dim(`→ ${p.path}`)}`);
49
+ }
50
+ console.log("");
51
+ }
52
+ // Calendar
53
+ console.log(chalk.bold(" Integrations"));
54
+ console.log(` Calendar: ${config.calendar.enabled ? chalk.green("enabled") : chalk.dim("disabled")}`);
55
+ console.log("");
56
+ }
57
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function switchCommand(project: string): Promise<void>;
2
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../src/cli/switch.ts"],"names":[],"mappings":"AAkCA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DlE"}
@@ -0,0 +1,78 @@
1
+ import chalk from "chalk";
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { loadConfig, getScopeDir } from "../store/config.js";
5
+ import { simpleGit } from "simple-git";
6
+ function getContextPath(projectName) {
7
+ return join(getScopeDir(), "contexts", `${projectName}.json`);
8
+ }
9
+ function loadContext(projectName) {
10
+ const contextPath = getContextPath(projectName);
11
+ if (!existsSync(contextPath))
12
+ return null;
13
+ try {
14
+ return JSON.parse(readFileSync(contextPath, "utf-8"));
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ function saveContext(context) {
21
+ const dir = join(getScopeDir(), "contexts");
22
+ if (!existsSync(dir))
23
+ mkdirSync(dir, { recursive: true });
24
+ writeFileSync(getContextPath(context.name), JSON.stringify(context, null, 2));
25
+ }
26
+ export async function switchCommand(project) {
27
+ const config = loadConfig();
28
+ const projectConfig = config.projects[project];
29
+ if (!projectConfig) {
30
+ console.log(chalk.yellow(`\n Project "${project}" not found.\n`));
31
+ console.log(chalk.dim(" Available projects:"));
32
+ for (const name of Object.keys(config.projects)) {
33
+ console.log(chalk.dim(` - ${name}`));
34
+ }
35
+ console.log(chalk.dim(`\n Add with: scope config projects\n`));
36
+ return;
37
+ }
38
+ // Save current context if we can detect one
39
+ // (We save the project we're switching FROM)
40
+ // Load target context
41
+ const existingContext = loadContext(project);
42
+ // Get current git branch for the target project
43
+ let branch = "unknown";
44
+ try {
45
+ const git = simpleGit(projectConfig.path);
46
+ const branchInfo = await git.branch();
47
+ branch = branchInfo.current;
48
+ }
49
+ catch {
50
+ // Not a git repo or error
51
+ }
52
+ // Save/update context
53
+ const context = {
54
+ name: project,
55
+ path: projectConfig.path,
56
+ branch,
57
+ lastSwitchedAt: new Date().toISOString(),
58
+ notes: existingContext?.notes || "",
59
+ };
60
+ saveContext(context);
61
+ console.log("");
62
+ console.log(chalk.bold(` Switched to: ${project}`));
63
+ console.log(chalk.dim(` ─────────────────────`));
64
+ console.log(` 📁 ${projectConfig.path}`);
65
+ console.log(` 🌿 ${branch}`);
66
+ if (existingContext?.notes) {
67
+ console.log(` 📝 ${existingContext.notes}`);
68
+ }
69
+ if (existingContext?.lastSwitchedAt) {
70
+ const last = new Date(existingContext.lastSwitchedAt);
71
+ const ago = Math.round((Date.now() - last.getTime()) / (1000 * 60 * 60));
72
+ console.log(chalk.dim(` Last here: ${ago}h ago`));
73
+ }
74
+ console.log("");
75
+ console.log(chalk.dim(` cd ${projectConfig.path}`));
76
+ console.log("");
77
+ }
78
+ //# sourceMappingURL=switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../src/cli/switch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface TodayOptions {
2
+ calendar?: boolean;
3
+ json?: boolean;
4
+ }
5
+ export declare function todayCommand(options: TodayOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=today.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,80 @@
1
+ import chalk from "chalk";
2
+ import { loadConfig, configExists } from "../store/config.js";
3
+ import { scanAllRepos } from "../sources/git.js";
4
+ import { getCalendarToday } from "../sources/calendar.js";
5
+ import { scanAssignedIssues } from "../sources/issues.js";
6
+ import { prioritize } from "../engine/prioritize.js";
7
+ export async function todayCommand(options) {
8
+ if (!configExists()) {
9
+ console.log(chalk.yellow(" Scope isn't set up yet. Run `scope onboard` to get started.\n"));
10
+ process.exit(1);
11
+ }
12
+ const config = loadConfig();
13
+ if (config.repos.length === 0) {
14
+ console.log(chalk.yellow(" No repos configured. Run `scope config git` to add some.\n"));
15
+ process.exit(1);
16
+ }
17
+ // Scan git repos
18
+ const gitSignals = await scanAllRepos(config.repos);
19
+ // Get calendar events
20
+ let calendarEvents = null;
21
+ if (options.calendar !== false && config.calendar.enabled) {
22
+ calendarEvents = await getCalendarToday();
23
+ if (!calendarEvents) {
24
+ console.log(chalk.dim(" ⚠ Calendar not available. Try: gws auth login\n"));
25
+ }
26
+ }
27
+ const events = calendarEvents?.events ?? [];
28
+ const freeBlocks = calendarEvents?.freeBlocks ?? [];
29
+ const issueScan = await scanAssignedIssues();
30
+ if (!issueScan.available) {
31
+ console.log(chalk.dim(" ⚠ GitHub issues not available. Install/auth gh to enable issue signals.\n"));
32
+ }
33
+ // Prioritize
34
+ const result = prioritize(gitSignals, events, freeBlocks, issueScan.issues);
35
+ // Output
36
+ if (options.json) {
37
+ console.log(JSON.stringify(result, null, 2));
38
+ return;
39
+ }
40
+ console.log("");
41
+ 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`));
45
+ }
46
+ return;
47
+ }
48
+ // NOW section
49
+ if (result.now.length > 0) {
50
+ console.log(chalk.bold(" NOW"));
51
+ console.log(chalk.dim(" ───"));
52
+ for (const item of result.now) {
53
+ console.log(` ${item.emoji} ${chalk.bold(item.label)}`);
54
+ console.log(` ${chalk.dim(item.detail)}`);
55
+ }
56
+ console.log("");
57
+ }
58
+ // TODAY section
59
+ if (result.today.length > 0) {
60
+ console.log(chalk.bold(" TODAY"));
61
+ console.log(chalk.dim(" ────"));
62
+ for (const item of result.today) {
63
+ console.log(` ${item.emoji} ${chalk.bold(item.label)}`);
64
+ console.log(` ${chalk.dim(item.detail)}`);
65
+ }
66
+ console.log("");
67
+ }
68
+ // Suggestions
69
+ if (result.suggestions.length > 0) {
70
+ for (const suggestion of result.suggestions) {
71
+ console.log(` 💡 ${suggestion}`);
72
+ }
73
+ console.log("");
74
+ }
75
+ // Later count
76
+ if (result.laterCount > 0) {
77
+ console.log(chalk.dim(` ${result.laterCount} other items can wait → scope status\n`));
78
+ }
79
+ }
80
+ //# sourceMappingURL=today.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"today.js","sourceRoot":"","sources":["../../src/cli/today.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { GitSignal } from "../sources/git.js";
2
+ import { CalendarEvent, FreeBlock } from "../sources/calendar.js";
3
+ import { IssueSignal } from "../sources/issues.js";
4
+ export type Priority = "now" | "today" | "later";
5
+ export interface ScoredItem {
6
+ priority: Priority;
7
+ score: number;
8
+ emoji: string;
9
+ label: string;
10
+ detail: string;
11
+ source: "git" | "calendar" | "pr" | "issue";
12
+ }
13
+ export interface PrioritizedOutput {
14
+ now: ScoredItem[];
15
+ today: ScoredItem[];
16
+ laterCount: number;
17
+ freeBlocks: FreeBlock[];
18
+ suggestions: string[];
19
+ }
20
+ export declare function prioritize(gitSignals: GitSignal[], calendarEvents: CalendarEvent[], freeBlocks: FreeBlock[], issues: IssueSignal[]): PrioritizedOutput;
21
+ //# sourceMappingURL=prioritize.d.ts.map
@@ -0,0 +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"}