@fureworks/scope 0.1.0 → 0.3.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 (104) hide show
  1. package/README.md +129 -48
  2. package/dist/cli/clean.d.ts +7 -0
  3. package/dist/cli/clean.d.ts.map +1 -0
  4. package/dist/cli/clean.js +49 -0
  5. package/dist/cli/clean.js.map +1 -0
  6. package/dist/cli/config.d.ts +8 -1
  7. package/dist/cli/config.d.ts.map +1 -1
  8. package/dist/cli/config.js +368 -42
  9. package/dist/cli/config.js.map +1 -1
  10. package/dist/cli/diff.d.ts +6 -0
  11. package/dist/cli/diff.d.ts.map +1 -0
  12. package/dist/cli/diff.js +63 -0
  13. package/dist/cli/diff.js.map +1 -0
  14. package/dist/cli/init.d.ts +2 -0
  15. package/dist/cli/init.d.ts.map +1 -0
  16. package/dist/cli/init.js +15 -0
  17. package/dist/cli/init.js.map +1 -0
  18. package/dist/cli/notifications.d.ts +7 -0
  19. package/dist/cli/notifications.d.ts.map +1 -0
  20. package/dist/cli/notifications.js +77 -0
  21. package/dist/cli/notifications.js.map +1 -0
  22. package/dist/cli/onboard.d.ts.map +1 -1
  23. package/dist/cli/onboard.js +2 -1
  24. package/dist/cli/onboard.js.map +1 -1
  25. package/dist/cli/plan.d.ts +7 -0
  26. package/dist/cli/plan.d.ts.map +1 -0
  27. package/dist/cli/plan.js +111 -0
  28. package/dist/cli/plan.js.map +1 -0
  29. package/dist/cli/review.d.ts +6 -0
  30. package/dist/cli/review.d.ts.map +1 -0
  31. package/dist/cli/review.js +167 -0
  32. package/dist/cli/review.js.map +1 -0
  33. package/dist/cli/snooze.d.ts +12 -0
  34. package/dist/cli/snooze.d.ts.map +1 -0
  35. package/dist/cli/snooze.js +155 -0
  36. package/dist/cli/snooze.js.map +1 -0
  37. package/dist/cli/today.d.ts.map +1 -1
  38. package/dist/cli/today.js +85 -11
  39. package/dist/cli/today.js.map +1 -1
  40. package/dist/cli/tune.d.ts +8 -0
  41. package/dist/cli/tune.d.ts.map +1 -0
  42. package/dist/cli/tune.js +62 -0
  43. package/dist/cli/tune.js.map +1 -0
  44. package/dist/engine/__tests__/prioritize.test.d.ts +2 -0
  45. package/dist/engine/__tests__/prioritize.test.d.ts.map +1 -0
  46. package/dist/engine/__tests__/prioritize.test.js +199 -0
  47. package/dist/engine/__tests__/prioritize.test.js.map +1 -0
  48. package/dist/engine/prioritize.d.ts +10 -2
  49. package/dist/engine/prioritize.d.ts.map +1 -1
  50. package/dist/engine/prioritize.js +249 -50
  51. package/dist/engine/prioritize.js.map +1 -1
  52. package/dist/index.js +61 -5
  53. package/dist/index.js.map +1 -1
  54. package/dist/notifications/index.d.ts.map +1 -1
  55. package/dist/notifications/index.js +6 -10
  56. package/dist/notifications/index.js.map +1 -1
  57. package/dist/sources/__tests__/git.test.d.ts +2 -0
  58. package/dist/sources/__tests__/git.test.d.ts.map +1 -0
  59. package/dist/sources/__tests__/git.test.js +52 -0
  60. package/dist/sources/__tests__/git.test.js.map +1 -0
  61. package/dist/sources/activity.d.ts +32 -0
  62. package/dist/sources/activity.d.ts.map +1 -0
  63. package/dist/sources/activity.js +101 -0
  64. package/dist/sources/activity.js.map +1 -0
  65. package/dist/sources/calendar.d.ts +6 -0
  66. package/dist/sources/calendar.d.ts.map +1 -1
  67. package/dist/sources/calendar.js +114 -0
  68. package/dist/sources/calendar.js.map +1 -1
  69. package/dist/sources/git.d.ts +3 -0
  70. package/dist/sources/git.d.ts.map +1 -1
  71. package/dist/sources/git.js +62 -6
  72. package/dist/sources/git.js.map +1 -1
  73. package/dist/sources/issues.d.ts +2 -0
  74. package/dist/sources/issues.d.ts.map +1 -1
  75. package/dist/sources/issues.js +33 -0
  76. package/dist/sources/issues.js.map +1 -1
  77. package/dist/store/config.d.ts +8 -0
  78. package/dist/store/config.d.ts.map +1 -1
  79. package/dist/store/config.js +22 -0
  80. package/dist/store/config.js.map +1 -1
  81. package/dist/store/muted.d.ts +17 -0
  82. package/dist/store/muted.d.ts.map +1 -0
  83. package/dist/store/muted.js +55 -0
  84. package/dist/store/muted.js.map +1 -0
  85. package/dist/store/snapshot.d.ts +12 -0
  86. package/dist/store/snapshot.d.ts.map +1 -0
  87. package/dist/store/snapshot.js +41 -0
  88. package/dist/store/snapshot.js.map +1 -0
  89. package/package.json +11 -3
  90. package/src/cli/config.ts +0 -66
  91. package/src/cli/context.ts +0 -109
  92. package/src/cli/daemon.ts +0 -217
  93. package/src/cli/onboard.ts +0 -335
  94. package/src/cli/status.ts +0 -77
  95. package/src/cli/switch.ts +0 -93
  96. package/src/cli/today.ts +0 -114
  97. package/src/engine/prioritize.ts +0 -257
  98. package/src/index.ts +0 -58
  99. package/src/notifications/index.ts +0 -42
  100. package/src/sources/calendar.ts +0 -170
  101. package/src/sources/git.ts +0 -168
  102. package/src/sources/issues.ts +0 -62
  103. package/src/store/config.ts +0 -104
  104. package/tsconfig.json +0 -19
@@ -1,54 +1,380 @@
1
- import chalk from "chalk";
2
- import { loadConfig, configExists } from "../store/config.js";
3
- import { readFileSync } from "node:fs";
4
- import { join } from "node:path";
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync, lstatSync, readFileSync, readdirSync, statSync, } from "node:fs";
5
3
  import { homedir } from "node:os";
6
- export async function configCommand(key, value) {
7
- if (!configExists()) {
8
- console.log(chalk.yellow("\n No config found. Run `scope onboard` to get started.\n"));
4
+ import { isAbsolute, join, resolve } from "node:path";
5
+ import { configExists, loadConfig, saveConfig } from "../store/config.js";
6
+ function output(json, payload, text) {
7
+ if (json) {
8
+ console.log(JSON.stringify(payload));
9
9
  return;
10
10
  }
11
- // If no args, show config file contents
11
+ console.log(text);
12
+ }
13
+ function fail(json, message, payload) {
14
+ if (json) {
15
+ console.log(JSON.stringify({
16
+ ok: false,
17
+ error: message,
18
+ ...(payload && typeof payload === "object" ? payload : {}),
19
+ }));
20
+ }
21
+ else {
22
+ console.error(message);
23
+ }
24
+ process.exitCode = 1;
25
+ }
26
+ function expandPath(input) {
27
+ if (input === "~") {
28
+ return homedir();
29
+ }
30
+ if (input.startsWith("~/")) {
31
+ return join(homedir(), input.slice(2));
32
+ }
33
+ return input;
34
+ }
35
+ function toAbsolutePath(input) {
36
+ const expanded = expandPath(input);
37
+ return isAbsolute(expanded) ? expanded : resolve(expanded);
38
+ }
39
+ function parseScalar(value) {
40
+ if (value === "true")
41
+ return true;
42
+ if (value === "false")
43
+ return false;
44
+ const parsedNumber = Number(value);
45
+ if (!Number.isNaN(parsedNumber) && value.trim() !== "") {
46
+ return parsedNumber;
47
+ }
48
+ return value;
49
+ }
50
+ function setConfigValue(config, key, value) {
51
+ const parts = key.split(".").filter(Boolean);
52
+ if (parts.length === 0) {
53
+ return false;
54
+ }
55
+ const parsedValue = parseScalar(value);
56
+ let cursor = config;
57
+ for (let i = 0; i < parts.length - 1; i += 1) {
58
+ const part = parts[i];
59
+ const existing = cursor[part];
60
+ if (!existing || typeof existing !== "object") {
61
+ cursor[part] = {};
62
+ }
63
+ cursor = cursor[part];
64
+ }
65
+ cursor[parts[parts.length - 1]] = parsedValue;
66
+ return true;
67
+ }
68
+ function runCommand(command) {
69
+ try {
70
+ const stdout = execSync(command, { stdio: "pipe", encoding: "utf8" });
71
+ return { ok: true, output: stdout.trim() };
72
+ }
73
+ catch (error) {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ return { ok: false, output: message.trim() };
76
+ }
77
+ }
78
+ function collectGitRepos(rootDir) {
79
+ const repos = new Set();
80
+ const queue = [rootDir];
81
+ while (queue.length > 0) {
82
+ const current = queue.pop();
83
+ if (!current)
84
+ continue;
85
+ let entries;
86
+ try {
87
+ entries = readdirSync(current);
88
+ }
89
+ catch {
90
+ continue;
91
+ }
92
+ for (const entry of entries) {
93
+ const fullPath = join(current, entry);
94
+ let stats;
95
+ try {
96
+ stats = lstatSync(fullPath);
97
+ }
98
+ catch {
99
+ continue;
100
+ }
101
+ if (stats.isSymbolicLink()) {
102
+ continue;
103
+ }
104
+ if (entry === ".git" && stats.isDirectory()) {
105
+ repos.add(current);
106
+ continue;
107
+ }
108
+ if (stats.isDirectory() && entry !== ".git") {
109
+ queue.push(fullPath);
110
+ }
111
+ }
112
+ }
113
+ return [...repos];
114
+ }
115
+ export async function configCommand(key, value, options = {}) {
116
+ const json = Boolean(options.json);
12
117
  if (!key) {
118
+ if (json) {
119
+ output(true, { ok: true, config: loadConfig() }, "");
120
+ return;
121
+ }
122
+ if (!configExists()) {
123
+ console.log("No config found");
124
+ return;
125
+ }
13
126
  const configPath = join(homedir(), ".scope", "config.toml");
14
127
  try {
15
- const content = readFileSync(configPath, "utf-8");
16
- console.log("");
17
- console.log(chalk.bold(" ~/.scope/config.toml"));
18
- console.log(chalk.dim(" ─────────────────────\n"));
19
- console.log(content
20
- .split("\n")
21
- .map((line) => ` ${line}`)
22
- .join("\n"));
23
- console.log("");
128
+ const content = readFileSync(configPath, "utf-8").trimEnd();
129
+ console.log(content);
24
130
  }
25
131
  catch {
26
- console.log(chalk.yellow("\n Could not read config file.\n"));
27
- }
28
- return;
29
- }
30
- // Subcommands
31
- switch (key) {
32
- case "git":
33
- console.log(chalk.dim("\n To manage repos, edit ~/.scope/config.toml"));
34
- console.log(chalk.dim(" or re-run: scope onboard\n"));
35
- break;
36
- case "calendar":
37
- console.log(chalk.dim("\n To set up calendar, install gws:"));
38
- console.log(chalk.dim(" npm install -g @googleworkspace/cli"));
39
- console.log(chalk.dim(" Then re-run: scope onboard\n"));
40
- break;
41
- case "projects":
42
- const config = loadConfig();
43
- console.log(chalk.bold("\n Projects:"));
44
- for (const [name, project] of Object.entries(config.projects)) {
45
- console.log(` ${name} → ${project.path}`);
132
+ fail(false, "Could not read config file");
133
+ }
134
+ return;
135
+ }
136
+ if (value === undefined) {
137
+ const config = loadConfig();
138
+ const parts = key.split(".").filter(Boolean);
139
+ let cursor = config;
140
+ for (const part of parts) {
141
+ if (!cursor || typeof cursor !== "object" || !(part in cursor)) {
142
+ fail(json, `Unknown config key: ${key}`);
143
+ return;
46
144
  }
47
- console.log(chalk.dim("\n Edit: ~/.scope/config.toml\n"));
48
- break;
49
- default:
50
- console.log(chalk.yellow(`\n Unknown config key: ${key}`));
51
- console.log(chalk.dim(" Available: git, calendar, projects\n"));
145
+ cursor = cursor[part];
146
+ }
147
+ output(json, { ok: true, key, value: cursor }, `${key}=${String(cursor)}`);
148
+ return;
149
+ }
150
+ const config = loadConfig();
151
+ const updated = setConfigValue(config, key, value);
152
+ if (!updated) {
153
+ fail(json, `Invalid config key: ${key}`);
154
+ return;
155
+ }
156
+ saveConfig(config);
157
+ output(json, { ok: true, key, value: parseScalar(value) }, "Config updated");
158
+ }
159
+ async function reposAdd(paths, options) {
160
+ const json = Boolean(options.json);
161
+ const config = loadConfig();
162
+ const existing = new Set(config.repos);
163
+ const added = [];
164
+ const invalid = [];
165
+ for (const rawPath of paths) {
166
+ const absolutePath = toAbsolutePath(rawPath);
167
+ if (!existsSync(absolutePath)) {
168
+ invalid.push(absolutePath);
169
+ continue;
170
+ }
171
+ let isDirectory = false;
172
+ try {
173
+ isDirectory = statSync(absolutePath).isDirectory();
174
+ }
175
+ catch {
176
+ invalid.push(absolutePath);
177
+ continue;
178
+ }
179
+ if (!isDirectory) {
180
+ invalid.push(absolutePath);
181
+ continue;
182
+ }
183
+ if (!existing.has(absolutePath)) {
184
+ existing.add(absolutePath);
185
+ added.push(absolutePath);
186
+ }
187
+ }
188
+ if (invalid.length > 0) {
189
+ fail(json, `Invalid repo path(s): ${invalid.join(", ")}`, { invalid });
190
+ return;
191
+ }
192
+ if (added.length > 0) {
193
+ config.repos = [...existing];
194
+ saveConfig(config);
195
+ }
196
+ output(json, { ok: true, added, total: existing.size }, added.length > 0 ? `Added ${added.length} repo(s)` : "No changes");
197
+ }
198
+ async function reposRemove(path, options) {
199
+ const json = Boolean(options.json);
200
+ const absolutePath = toAbsolutePath(path);
201
+ const config = loadConfig();
202
+ const before = config.repos.length;
203
+ config.repos = config.repos.filter((repoPath) => repoPath !== absolutePath);
204
+ if (config.repos.length !== before) {
205
+ saveConfig(config);
206
+ }
207
+ output(json, {
208
+ ok: true,
209
+ removed: before !== config.repos.length ? absolutePath : null,
210
+ total: config.repos.length,
211
+ }, before !== config.repos.length ? "Repo removed" : "No changes");
212
+ }
213
+ async function reposList(options) {
214
+ const json = Boolean(options.json);
215
+ const config = loadConfig();
216
+ output(json, { ok: true, repos: config.repos }, config.repos.length > 0 ? config.repos.join(", ") : "No repos configured");
217
+ }
218
+ async function reposScan(directory, options) {
219
+ const json = Boolean(options.json);
220
+ const absoluteDirectory = toAbsolutePath(directory);
221
+ if (!existsSync(absoluteDirectory) || !statSync(absoluteDirectory).isDirectory()) {
222
+ fail(json, `Directory not found: ${absoluteDirectory}`);
223
+ return;
224
+ }
225
+ const found = collectGitRepos(absoluteDirectory);
226
+ const config = loadConfig();
227
+ const existing = new Set(config.repos);
228
+ const added = [];
229
+ for (const repoPath of found) {
230
+ if (!existing.has(repoPath)) {
231
+ existing.add(repoPath);
232
+ added.push(repoPath);
233
+ }
234
+ }
235
+ if (added.length > 0) {
236
+ config.repos = [...existing];
237
+ saveConfig(config);
52
238
  }
239
+ output(json, { ok: true, scanned: absoluteDirectory, found, added, total: existing.size }, added.length > 0 ? `Added ${added.length} repo(s)` : "No changes");
240
+ }
241
+ async function calendarSet(enabled, options) {
242
+ const json = Boolean(options.json);
243
+ const config = loadConfig();
244
+ const changed = config.calendar.enabled !== enabled;
245
+ config.calendar.enabled = enabled;
246
+ if (changed) {
247
+ saveConfig(config);
248
+ }
249
+ output(json, { ok: true, enabled }, changed ? `Calendar ${enabled ? "enabled" : "disabled"}` : "No changes");
250
+ }
251
+ async function calendarTest(options) {
252
+ const json = Boolean(options.json);
253
+ const result = runCommand("gws --help");
254
+ if (!result.ok) {
255
+ fail(json, "Calendar test failed");
256
+ return;
257
+ }
258
+ output(json, { ok: true, backend: "gws" }, "Calendar test passed");
259
+ }
260
+ async function githubTest(options) {
261
+ const json = Boolean(options.json);
262
+ const result = runCommand("gh auth status");
263
+ if (!result.ok) {
264
+ fail(json, "GitHub test failed");
265
+ return;
266
+ }
267
+ output(json, { ok: true }, "GitHub auth is valid");
268
+ }
269
+ async function projectsAdd(name, options) {
270
+ const json = Boolean(options.json);
271
+ if (!options.dir) {
272
+ fail(json, "--dir is required");
273
+ return;
274
+ }
275
+ const absoluteDirectory = toAbsolutePath(options.dir);
276
+ if (!existsSync(absoluteDirectory) || !statSync(absoluteDirectory).isDirectory()) {
277
+ fail(json, `Directory not found: ${absoluteDirectory}`);
278
+ return;
279
+ }
280
+ const config = loadConfig();
281
+ const existing = config.projects[name];
282
+ const changed = !existing || existing.path !== absoluteDirectory;
283
+ config.projects[name] = { path: absoluteDirectory };
284
+ if (changed) {
285
+ saveConfig(config);
286
+ }
287
+ output(json, { ok: true, name, path: absoluteDirectory }, changed ? "Project saved" : "No changes");
288
+ }
289
+ async function projectsRemove(name, options) {
290
+ const json = Boolean(options.json);
291
+ const config = loadConfig();
292
+ if (config.projects[name]) {
293
+ delete config.projects[name];
294
+ saveConfig(config);
295
+ output(json, { ok: true, removed: name }, "Project removed");
296
+ return;
297
+ }
298
+ output(json, { ok: true, removed: null }, "No changes");
299
+ }
300
+ async function projectsList(options) {
301
+ const json = Boolean(options.json);
302
+ const config = loadConfig();
303
+ const projects = Object.entries(config.projects).map(([name, project]) => ({
304
+ name,
305
+ path: project.path,
306
+ }));
307
+ output(json, { ok: true, projects }, projects.length > 0
308
+ ? projects.map((project) => `${project.name}=${project.path}`).join(", ")
309
+ : "No projects configured");
310
+ }
311
+ export function registerConfigCommand(program) {
312
+ const config = program
313
+ .command("config")
314
+ .description("View or edit configuration")
315
+ .argument("[key]")
316
+ .argument("[value]")
317
+ .option("--json", "Output as JSON")
318
+ .action(configCommand);
319
+ const repos = config.command("repos").description("Manage watched repos");
320
+ repos
321
+ .command("add <path...>")
322
+ .description("Add one or more repo paths")
323
+ .option("--json", "Output as JSON")
324
+ .action(reposAdd);
325
+ repos
326
+ .command("remove <path>")
327
+ .description("Remove a repo path")
328
+ .option("--json", "Output as JSON")
329
+ .action(reposRemove);
330
+ repos
331
+ .command("list")
332
+ .description("List watched repos")
333
+ .option("--json", "Output as JSON")
334
+ .action(reposList);
335
+ repos
336
+ .command("scan <directory>")
337
+ .description("Recursively scan for .git directories")
338
+ .option("--json", "Output as JSON")
339
+ .action(reposScan);
340
+ const calendar = config.command("calendar").description("Manage calendar integration");
341
+ calendar
342
+ .command("enable")
343
+ .description("Enable calendar integration")
344
+ .option("--json", "Output as JSON")
345
+ .action(async (options) => calendarSet(true, options));
346
+ calendar
347
+ .command("disable")
348
+ .description("Disable calendar integration")
349
+ .option("--json", "Output as JSON")
350
+ .action(async (options) => calendarSet(false, options));
351
+ calendar
352
+ .command("test")
353
+ .description("Test gws availability")
354
+ .option("--json", "Output as JSON")
355
+ .action(calendarTest);
356
+ const github = config.command("github").description("Manage GitHub integration");
357
+ github
358
+ .command("test")
359
+ .description("Test gh auth status")
360
+ .option("--json", "Output as JSON")
361
+ .action(githubTest);
362
+ const projects = config.command("projects").description("Manage projects");
363
+ projects
364
+ .command("add <name>")
365
+ .description("Add or update a project")
366
+ .requiredOption("--dir <path>", "Project directory")
367
+ .option("--json", "Output as JSON")
368
+ .action(projectsAdd);
369
+ projects
370
+ .command("remove <name>")
371
+ .description("Remove a project")
372
+ .option("--json", "Output as JSON")
373
+ .action(projectsRemove);
374
+ projects
375
+ .command("list")
376
+ .description("List projects")
377
+ .option("--json", "Output as JSON")
378
+ .action(projectsList);
53
379
  }
54
380
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface DiffOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function diffCommand(options: DiffOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFrE"}
@@ -0,0 +1,63 @@
1
+ import chalk from "chalk";
2
+ import { loadSnapshot } from "../store/snapshot.js";
3
+ import { loadConfig, configExists } from "../store/config.js";
4
+ import { scanAllRepos } from "../sources/git.js";
5
+ import { scanAssignedIssues } from "../sources/issues.js";
6
+ import { prioritize } from "../engine/prioritize.js";
7
+ export async function diffCommand(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 snapshot = loadSnapshot();
13
+ if (!snapshot) {
14
+ console.log(chalk.yellow(" No morning snapshot found. Run `scope today` first to create one.\n"));
15
+ process.exit(1);
16
+ }
17
+ const config = loadConfig();
18
+ const gitSignals = await scanAllRepos(config.repos);
19
+ const issueScan = await scanAssignedIssues();
20
+ const current = prioritize(gitSignals, [], [], issueScan.issues, config.weights);
21
+ const morningKeys = new Set([...snapshot.now, ...snapshot.today].map((i) => `${i.source}|${i.label}`));
22
+ const currentKeys = new Set([...current.now, ...current.today].map((i) => `${i.source}|${i.label}`));
23
+ const resolved = [...snapshot.now, ...snapshot.today].filter((i) => !currentKeys.has(`${i.source}|${i.label}`));
24
+ const newItems = [...current.now, ...current.today].filter((i) => !morningKeys.has(`${i.source}|${i.label}`));
25
+ const persisted = [...current.now, ...current.today].filter((i) => morningKeys.has(`${i.source}|${i.label}`));
26
+ if (options.json) {
27
+ console.log(JSON.stringify({ resolved, newItems, persisted, snapshotTime: snapshot.timestamp }, null, 2));
28
+ return;
29
+ }
30
+ console.log("");
31
+ console.log(chalk.dim(` Compared against snapshot from ${new Date(snapshot.timestamp).toLocaleTimeString()}\n`));
32
+ if (resolved.length > 0) {
33
+ console.log(chalk.bold(" RESOLVED"));
34
+ console.log(chalk.dim(" ────────"));
35
+ for (const item of resolved) {
36
+ console.log(` ${chalk.green("✓")} ${item.label}`);
37
+ }
38
+ console.log("");
39
+ }
40
+ if (newItems.length > 0) {
41
+ console.log(chalk.bold(" NEW"));
42
+ console.log(chalk.dim(" ───"));
43
+ for (const item of newItems) {
44
+ console.log(` ${chalk.yellow("+")} ${item.label} — ${item.detail}`);
45
+ }
46
+ console.log("");
47
+ }
48
+ if (persisted.length > 0) {
49
+ console.log(chalk.bold(" UNCHANGED"));
50
+ console.log(chalk.dim(" ─────────"));
51
+ for (const item of persisted) {
52
+ console.log(` ${chalk.dim("·")} ${item.label}`);
53
+ }
54
+ console.log("");
55
+ }
56
+ if (resolved.length === 0 && newItems.length === 0) {
57
+ console.log(chalk.dim(" No changes since this morning.\n"));
58
+ }
59
+ else {
60
+ console.log(chalk.dim(` ${resolved.length} resolved · ${newItems.length} new · ${persisted.length} unchanged\n`));
61
+ }
62
+ }
63
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/cli/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD"}
@@ -0,0 +1,15 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ export async function initCommand() {
5
+ const scopeDir = join(homedir(), ".scope");
6
+ const configPath = join(scopeDir, "config.toml");
7
+ if (existsSync(configPath)) {
8
+ console.log("Already initialized");
9
+ return;
10
+ }
11
+ mkdirSync(scopeDir, { recursive: true });
12
+ writeFileSync(configPath, "", "utf-8");
13
+ console.log("Initialized ~/.scope/config.toml");
14
+ }
15
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEjD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface NotificationsOptions {
2
+ clear?: boolean;
3
+ all?: boolean;
4
+ }
5
+ export declare function notificationsCommand(options: NotificationsOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/cli/notifications.ts"],"names":[],"mappings":"AAwCA,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyDf"}
@@ -0,0 +1,77 @@
1
+ import chalk from "chalk";
2
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { getScopeDir, ensureScopeDir } from "../store/config.js";
5
+ const LOG_PATH = join(getScopeDir(), "notifications.log");
6
+ function parseLog() {
7
+ if (!existsSync(LOG_PATH))
8
+ return [];
9
+ const raw = readFileSync(LOG_PATH, "utf-8").trim();
10
+ if (!raw)
11
+ return [];
12
+ return raw.split("\n").map((line) => {
13
+ // Format: [2026-03-07T10:00:00.000Z] Title: Body
14
+ const match = line.match(/^\[(.+?)\]\s*(.+?):\s*(.+)$/);
15
+ if (match) {
16
+ return {
17
+ timestamp: match[1],
18
+ title: match[2],
19
+ body: match[3],
20
+ seen: false,
21
+ };
22
+ }
23
+ return {
24
+ timestamp: new Date().toISOString(),
25
+ title: "Notification",
26
+ body: line,
27
+ seen: false,
28
+ };
29
+ });
30
+ }
31
+ export async function notificationsCommand(options) {
32
+ if (options.clear) {
33
+ ensureScopeDir();
34
+ writeFileSync(LOG_PATH, "", "utf-8");
35
+ console.log(chalk.green("\n ✓ Notifications cleared.\n"));
36
+ return;
37
+ }
38
+ const entries = parseLog();
39
+ if (entries.length === 0) {
40
+ console.log(chalk.dim("\n No notifications. You're all clear.\n"));
41
+ return;
42
+ }
43
+ // Show recent (last 24h unless --all)
44
+ const cutoff = options.all
45
+ ? 0
46
+ : Date.now() - 24 * 60 * 60 * 1000;
47
+ const filtered = entries.filter((e) => new Date(e.timestamp).getTime() > cutoff);
48
+ if (filtered.length === 0) {
49
+ console.log(chalk.dim("\n No notifications in the last 24 hours."));
50
+ console.log(chalk.dim(" Use --all to see older ones.\n"));
51
+ return;
52
+ }
53
+ console.log("");
54
+ console.log(chalk.bold(` Notifications (${filtered.length})`));
55
+ console.log(chalk.dim(" ─────────────────────\n"));
56
+ // Group by date
57
+ const grouped = new Map();
58
+ for (const entry of filtered.reverse()) {
59
+ const date = new Date(entry.timestamp).toLocaleDateString();
60
+ if (!grouped.has(date))
61
+ grouped.set(date, []);
62
+ grouped.get(date).push(entry);
63
+ }
64
+ for (const [date, items] of grouped) {
65
+ console.log(chalk.dim(` ${date}`));
66
+ for (const item of items) {
67
+ const time = new Date(item.timestamp).toLocaleTimeString([], {
68
+ hour: "2-digit",
69
+ minute: "2-digit",
70
+ });
71
+ console.log(` ${chalk.dim(time)} ${item.body}`);
72
+ }
73
+ console.log("");
74
+ }
75
+ console.log(chalk.dim(` scope notifications --clear to dismiss all\n`));
76
+ }
77
+ //# sourceMappingURL=notifications.js.map