@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.
- package/LICENSE +21 -0
- package/README.md +92 -0
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +54 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/context.d.ts +6 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +76 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/daemon.d.ts +2 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +190 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/onboard.d.ts +2 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +286 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/status.d.ts +6 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +57 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/switch.d.ts +2 -0
- package/dist/cli/switch.d.ts.map +1 -0
- package/dist/cli/switch.js +78 -0
- package/dist/cli/switch.js.map +1 -0
- package/dist/cli/today.d.ts +7 -0
- package/dist/cli/today.d.ts.map +1 -0
- package/dist/cli/today.js +80 -0
- package/dist/cli/today.js.map +1 -0
- package/dist/engine/prioritize.d.ts +21 -0
- package/dist/engine/prioritize.d.ts.map +1 -0
- package/dist/engine/prioritize.js +204 -0
- package/dist/engine/prioritize.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +41 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/sources/calendar.d.ts +17 -0
- package/dist/sources/calendar.d.ts.map +1 -0
- package/dist/sources/calendar.js +120 -0
- package/dist/sources/calendar.js.map +1 -0
- package/dist/sources/git.d.ts +20 -0
- package/dist/sources/git.d.ts.map +1 -0
- package/dist/sources/git.js +124 -0
- package/dist/sources/git.js.map +1 -0
- package/dist/sources/issues.d.ts +14 -0
- package/dist/sources/issues.d.ts.map +1 -0
- package/dist/sources/issues.js +34 -0
- package/dist/sources/issues.js.map +1 -0
- package/dist/store/config.d.ts +22 -0
- package/dist/store/config.d.ts.map +1 -0
- package/dist/store/config.js +74 -0
- package/dist/store/config.js.map +1 -0
- package/package.json +45 -0
- package/src/cli/config.ts +66 -0
- package/src/cli/context.ts +109 -0
- package/src/cli/daemon.ts +217 -0
- package/src/cli/onboard.ts +335 -0
- package/src/cli/status.ts +77 -0
- package/src/cli/switch.ts +93 -0
- package/src/cli/today.ts +114 -0
- package/src/engine/prioritize.ts +257 -0
- package/src/index.ts +58 -0
- package/src/notifications/index.ts +42 -0
- package/src/sources/calendar.ts +170 -0
- package/src/sources/git.ts +168 -0
- package/src/sources/issues.ts +62 -0
- package/src/store/config.ts +104 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|