@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.
- package/README.md +129 -48
- package/dist/cli/clean.d.ts +7 -0
- package/dist/cli/clean.d.ts.map +1 -0
- package/dist/cli/clean.js +49 -0
- package/dist/cli/clean.js.map +1 -0
- package/dist/cli/config.d.ts +8 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +368 -42
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/diff.d.ts +6 -0
- package/dist/cli/diff.d.ts.map +1 -0
- package/dist/cli/diff.js +63 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +15 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/notifications.d.ts +7 -0
- package/dist/cli/notifications.d.ts.map +1 -0
- package/dist/cli/notifications.js +77 -0
- package/dist/cli/notifications.js.map +1 -0
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +2 -1
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/plan.d.ts +7 -0
- package/dist/cli/plan.d.ts.map +1 -0
- package/dist/cli/plan.js +111 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/review.d.ts +6 -0
- package/dist/cli/review.d.ts.map +1 -0
- package/dist/cli/review.js +167 -0
- package/dist/cli/review.js.map +1 -0
- package/dist/cli/snooze.d.ts +12 -0
- package/dist/cli/snooze.d.ts.map +1 -0
- package/dist/cli/snooze.js +155 -0
- package/dist/cli/snooze.js.map +1 -0
- package/dist/cli/today.d.ts.map +1 -1
- package/dist/cli/today.js +85 -11
- package/dist/cli/today.js.map +1 -1
- package/dist/cli/tune.d.ts +8 -0
- package/dist/cli/tune.d.ts.map +1 -0
- package/dist/cli/tune.js +62 -0
- package/dist/cli/tune.js.map +1 -0
- package/dist/engine/__tests__/prioritize.test.d.ts +2 -0
- package/dist/engine/__tests__/prioritize.test.d.ts.map +1 -0
- package/dist/engine/__tests__/prioritize.test.js +199 -0
- package/dist/engine/__tests__/prioritize.test.js.map +1 -0
- package/dist/engine/prioritize.d.ts +10 -2
- package/dist/engine/prioritize.d.ts.map +1 -1
- package/dist/engine/prioritize.js +249 -50
- package/dist/engine/prioritize.js.map +1 -1
- package/dist/index.js +61 -5
- package/dist/index.js.map +1 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +6 -10
- package/dist/notifications/index.js.map +1 -1
- package/dist/sources/__tests__/git.test.d.ts +2 -0
- package/dist/sources/__tests__/git.test.d.ts.map +1 -0
- package/dist/sources/__tests__/git.test.js +52 -0
- package/dist/sources/__tests__/git.test.js.map +1 -0
- package/dist/sources/activity.d.ts +32 -0
- package/dist/sources/activity.d.ts.map +1 -0
- package/dist/sources/activity.js +101 -0
- package/dist/sources/activity.js.map +1 -0
- package/dist/sources/calendar.d.ts +6 -0
- package/dist/sources/calendar.d.ts.map +1 -1
- package/dist/sources/calendar.js +114 -0
- package/dist/sources/calendar.js.map +1 -1
- package/dist/sources/git.d.ts +3 -0
- package/dist/sources/git.d.ts.map +1 -1
- package/dist/sources/git.js +62 -6
- package/dist/sources/git.js.map +1 -1
- package/dist/sources/issues.d.ts +2 -0
- package/dist/sources/issues.d.ts.map +1 -1
- package/dist/sources/issues.js +33 -0
- package/dist/sources/issues.js.map +1 -1
- package/dist/store/config.d.ts +8 -0
- package/dist/store/config.d.ts.map +1 -1
- package/dist/store/config.js +22 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/muted.d.ts +17 -0
- package/dist/store/muted.d.ts.map +1 -0
- package/dist/store/muted.js +55 -0
- package/dist/store/muted.js.map +1 -0
- package/dist/store/snapshot.d.ts +12 -0
- package/dist/store/snapshot.d.ts.map +1 -0
- package/dist/store/snapshot.js +41 -0
- package/dist/store/snapshot.js.map +1 -0
- package/package.json +11 -3
- package/src/cli/config.ts +0 -66
- package/src/cli/context.ts +0 -109
- package/src/cli/daemon.ts +0 -217
- package/src/cli/onboard.ts +0 -335
- package/src/cli/status.ts +0 -77
- package/src/cli/switch.ts +0 -93
- package/src/cli/today.ts +0 -114
- package/src/engine/prioritize.ts +0 -257
- package/src/index.ts +0 -58
- package/src/notifications/index.ts +0 -42
- package/src/sources/calendar.ts +0 -170
- package/src/sources/git.ts +0 -168
- package/src/sources/issues.ts +0 -62
- package/src/store/config.ts +0 -104
- package/tsconfig.json +0 -19
package/dist/cli/config.js
CHANGED
|
@@ -1,54 +1,380 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
}
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
package/dist/cli/config.js.map
CHANGED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/cli/diff.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD"}
|
package/dist/cli/init.js
ADDED
|
@@ -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 @@
|
|
|
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
|