@keepgoingdev/cli 1.5.0 → 1.6.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 +18 -5
- package/dist/index.js +104 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,14 +38,27 @@ Flags:
|
|
|
38
38
|
|
|
39
39
|
### `keepgoing save`
|
|
40
40
|
|
|
41
|
-
Save a new checkpoint
|
|
42
|
-
|
|
43
|
-
1. What did you work on? (required)
|
|
44
|
-
2. What's your next step? (required)
|
|
45
|
-
3. Any blockers? (optional)
|
|
41
|
+
Save a new checkpoint. By default, auto-generates the summary and next step from recent git activity (commits and touched files). No interactive prompts.
|
|
46
42
|
|
|
47
43
|
Git branch and touched files are auto-detected from the workspace.
|
|
48
44
|
|
|
45
|
+
Flags:
|
|
46
|
+
|
|
47
|
+
- `-m, --message <text>` — use a custom summary instead of auto-generating
|
|
48
|
+
- `-n, --next <text>` — use a custom next step instead of auto-generating
|
|
49
|
+
- `--force` — save even if a recent checkpoint exists or there are no detected changes
|
|
50
|
+
- `--json` — output raw JSON
|
|
51
|
+
- `--quiet` — suppress output
|
|
52
|
+
- `--cwd <path>` — override the working directory
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
keepgoing save # auto-generate from git
|
|
58
|
+
keepgoing save -m "Finished auth flow" # custom summary
|
|
59
|
+
keepgoing save --force # save even if no changes
|
|
60
|
+
```
|
|
61
|
+
|
|
49
62
|
### `keepgoing hook install`
|
|
50
63
|
|
|
51
64
|
Install a shell hook that runs `keepgoing status --quiet` automatically whenever you `cd` into a directory that contains `.keepgoing/`.
|
package/dist/index.js
CHANGED
|
@@ -5302,14 +5302,15 @@ function cancelAndExit() {
|
|
|
5302
5302
|
|
|
5303
5303
|
// src/commands/setup.ts
|
|
5304
5304
|
var execAsync = promisify2(exec2);
|
|
5305
|
-
var VALID_PRESETS = ["vscode", "claude", "copilot", "cursor", "windsurf", "jetbrains"];
|
|
5305
|
+
var VALID_PRESETS = ["vscode", "claude", "copilot", "cursor", "windsurf", "jetbrains", "desktop-tray"];
|
|
5306
5306
|
var PRESET_DEFAULTS = {
|
|
5307
5307
|
vscode: { ide: ["vscode"] },
|
|
5308
5308
|
jetbrains: { ide: ["jetbrains"] },
|
|
5309
5309
|
claude: { tools: ["claude-code"] },
|
|
5310
5310
|
copilot: { tools: ["copilot"] },
|
|
5311
5311
|
cursor: { tools: ["cursor"] },
|
|
5312
|
-
windsurf: { tools: ["windsurf"] }
|
|
5312
|
+
windsurf: { tools: ["windsurf"] },
|
|
5313
|
+
"desktop-tray": { desktopTray: true }
|
|
5313
5314
|
};
|
|
5314
5315
|
var PRESET_LABELS = {
|
|
5315
5316
|
vscode: "VS Code",
|
|
@@ -5317,7 +5318,8 @@ var PRESET_LABELS = {
|
|
|
5317
5318
|
claude: "Claude Code",
|
|
5318
5319
|
copilot: "GitHub Copilot",
|
|
5319
5320
|
cursor: "Cursor",
|
|
5320
|
-
windsurf: "Windsurf"
|
|
5321
|
+
windsurf: "Windsurf",
|
|
5322
|
+
"desktop-tray": "Desktop Tray"
|
|
5321
5323
|
};
|
|
5322
5324
|
var JETBRAINS_PLUGIN_URL = "https://plugins.jetbrains.com/plugin/30449-keepgoing";
|
|
5323
5325
|
var JETBRAINS_PLUGIN_ID = "com.keepgoing.plugin";
|
|
@@ -5367,7 +5369,7 @@ async function setupCommand(options) {
|
|
|
5367
5369
|
tools = presetDefaults.tools;
|
|
5368
5370
|
dist_exports.log.step(`AI tool: ${tools.map((t2) => t2 === "claude-code" ? "Claude Code" : t2.charAt(0).toUpperCase() + t2.slice(1)).join(", ")}`);
|
|
5369
5371
|
const addMore = await dist_exports.multiselect({
|
|
5370
|
-
message: "Also configure any of these?",
|
|
5372
|
+
message: "Also configure any of these? (enter to skip)",
|
|
5371
5373
|
options: [
|
|
5372
5374
|
...!tools.includes("claude-code") ? [{ label: "Claude Code", value: "claude-code" }] : [],
|
|
5373
5375
|
...!tools.includes("copilot") ? [{ label: "GitHub Copilot", value: "copilot" }] : [],
|
|
@@ -5406,12 +5408,14 @@ async function setupCommand(options) {
|
|
|
5406
5408
|
if (isCancel(pluginAnswer)) cancelAndExit();
|
|
5407
5409
|
claudePlugin = pluginAnswer === "plugin";
|
|
5408
5410
|
}
|
|
5411
|
+
const IDE_TOOLS = ["cursor", "windsurf"];
|
|
5412
|
+
const hasIdeTool = tools.some((t2) => IDE_TOOLS.includes(t2));
|
|
5409
5413
|
let ide;
|
|
5410
5414
|
if (presetDefaults?.ide) {
|
|
5411
5415
|
ide = presetDefaults.ide;
|
|
5412
5416
|
dist_exports.log.step(`IDE: ${ide.map((i) => i === "vscode" ? "VS Code" : i === "jetbrains" ? "JetBrains" : "Terminal").join(", ")}`);
|
|
5413
5417
|
const addMoreIde = await dist_exports.multiselect({
|
|
5414
|
-
message: "Also configure any of these?",
|
|
5418
|
+
message: "Also configure any of these? (enter to skip)",
|
|
5415
5419
|
options: [
|
|
5416
5420
|
...!ide.includes("vscode") ? [{ label: "VS Code", value: "vscode" }] : [],
|
|
5417
5421
|
...!ide.includes("jetbrains") ? [{ label: "JetBrains", hint: "IntelliJ, WebStorm, PyCharm, etc.", value: "jetbrains" }] : [],
|
|
@@ -5422,6 +5426,19 @@ async function setupCommand(options) {
|
|
|
5422
5426
|
if (!isCancel(addMoreIde) && addMoreIde.length > 0) {
|
|
5423
5427
|
ide = [...ide, ...addMoreIde];
|
|
5424
5428
|
}
|
|
5429
|
+
} else if (hasIdeTool) {
|
|
5430
|
+
ide = [];
|
|
5431
|
+
const addIdeExtensions = await dist_exports.multiselect({
|
|
5432
|
+
message: "Also configure IDE extensions? (enter to skip)",
|
|
5433
|
+
options: [
|
|
5434
|
+
{ label: "VS Code", value: "vscode" },
|
|
5435
|
+
{ label: "JetBrains", hint: "IntelliJ, WebStorm, PyCharm, etc.", value: "jetbrains" }
|
|
5436
|
+
],
|
|
5437
|
+
required: false
|
|
5438
|
+
});
|
|
5439
|
+
if (!isCancel(addIdeExtensions) && addIdeExtensions.length > 0) {
|
|
5440
|
+
ide = addIdeExtensions;
|
|
5441
|
+
}
|
|
5425
5442
|
} else {
|
|
5426
5443
|
const ideAnswer = await dist_exports.multiselect({
|
|
5427
5444
|
message: "Which IDE(s) do you use?",
|
|
@@ -5641,6 +5658,83 @@ async function setupCommand(options) {
|
|
|
5641
5658
|
}
|
|
5642
5659
|
}
|
|
5643
5660
|
}
|
|
5661
|
+
let installDesktopTray = false;
|
|
5662
|
+
const trayPreset = presetDefaults?.desktopTray === true;
|
|
5663
|
+
if (process.platform === "darwin") {
|
|
5664
|
+
const alreadyInstalled = fs10.existsSync("/Applications/KeepGoing.app");
|
|
5665
|
+
if (alreadyInstalled) {
|
|
5666
|
+
dist_exports.log.message(`${DIM5}Desktop tray: Already installed${RESET5}`);
|
|
5667
|
+
installDesktopTray = true;
|
|
5668
|
+
} else {
|
|
5669
|
+
if (!trayPreset) {
|
|
5670
|
+
dist_exports.note(
|
|
5671
|
+
"A menubar app that shows re-entry briefings, active sessions,\nand momentum across all your projects. Editor-agnostic, free.",
|
|
5672
|
+
"Desktop Tray"
|
|
5673
|
+
);
|
|
5674
|
+
}
|
|
5675
|
+
const wantsTray = trayPreset || await (async () => {
|
|
5676
|
+
const trayAnswer = await dist_exports.confirm({
|
|
5677
|
+
message: "Install the desktop tray app?",
|
|
5678
|
+
initialValue: trayPreset,
|
|
5679
|
+
active: "Yes",
|
|
5680
|
+
inactive: "No, skip"
|
|
5681
|
+
});
|
|
5682
|
+
return !isCancel(trayAnswer) && trayAnswer;
|
|
5683
|
+
})();
|
|
5684
|
+
if (wantsTray) {
|
|
5685
|
+
installDesktopTray = true;
|
|
5686
|
+
let installed = false;
|
|
5687
|
+
let hasHomebrew = false;
|
|
5688
|
+
try {
|
|
5689
|
+
execSync3("brew --version", { stdio: "pipe" });
|
|
5690
|
+
hasHomebrew = true;
|
|
5691
|
+
} catch {
|
|
5692
|
+
}
|
|
5693
|
+
if (hasHomebrew) {
|
|
5694
|
+
const ts = dist_exports.spinner();
|
|
5695
|
+
ts.start("Installing desktop tray via Homebrew...");
|
|
5696
|
+
try {
|
|
5697
|
+
const { stderr } = await execAsync(
|
|
5698
|
+
"brew tap keepgoing-dev/tap && brew install --cask keepgoing",
|
|
5699
|
+
{ timeout: 12e4 }
|
|
5700
|
+
);
|
|
5701
|
+
if (stderr?.includes("already installed")) {
|
|
5702
|
+
ts.stop("Desktop tray: Already installed via Homebrew");
|
|
5703
|
+
} else {
|
|
5704
|
+
ts.stop("Desktop tray installed");
|
|
5705
|
+
}
|
|
5706
|
+
installed = true;
|
|
5707
|
+
try {
|
|
5708
|
+
execSync3("open -a KeepGoing", { stdio: "pipe" });
|
|
5709
|
+
} catch {
|
|
5710
|
+
}
|
|
5711
|
+
} catch {
|
|
5712
|
+
ts.stop("Homebrew install failed");
|
|
5713
|
+
}
|
|
5714
|
+
}
|
|
5715
|
+
if (!installed) {
|
|
5716
|
+
dist_exports.log.info(
|
|
5717
|
+
"Install manually:\n 1. Download from https://github.com/keepgoing-dev/releases/releases/latest\n 2. Drag KeepGoing.app to /Applications\n 3. Run: xattr -cr /Applications/KeepGoing.app\n 4. Open KeepGoing from Applications"
|
|
5718
|
+
);
|
|
5719
|
+
}
|
|
5720
|
+
} else {
|
|
5721
|
+
dist_exports.log.info("Desktop tray: Install anytime with:\n brew tap keepgoing-dev/tap && brew install --cask keepgoing");
|
|
5722
|
+
}
|
|
5723
|
+
}
|
|
5724
|
+
if (installDesktopTray) {
|
|
5725
|
+
try {
|
|
5726
|
+
const existing = readTrayConfigProjects();
|
|
5727
|
+
if (!existing.includes(options.cwd)) {
|
|
5728
|
+
const trayConfigDir = path13.join(os6.homedir(), ".keepgoing");
|
|
5729
|
+
fs10.mkdirSync(trayConfigDir, { recursive: true });
|
|
5730
|
+
const trayConfigPath = path13.join(trayConfigDir, "tray-config.json");
|
|
5731
|
+
const updated = { projects: [...existing, options.cwd] };
|
|
5732
|
+
fs10.writeFileSync(trayConfigPath, JSON.stringify(updated, null, 2) + "\n", "utf-8");
|
|
5733
|
+
}
|
|
5734
|
+
} catch {
|
|
5735
|
+
}
|
|
5736
|
+
}
|
|
5737
|
+
}
|
|
5644
5738
|
if (hasLicense) {
|
|
5645
5739
|
const key = await dist_exports.text({
|
|
5646
5740
|
message: "Enter your license key",
|
|
@@ -5697,6 +5791,7 @@ async function setupCommand(options) {
|
|
|
5697
5791
|
scope,
|
|
5698
5792
|
shellHook: installShellHook,
|
|
5699
5793
|
claudePlugin,
|
|
5794
|
+
desktopTray: installDesktopTray,
|
|
5700
5795
|
licensed
|
|
5701
5796
|
};
|
|
5702
5797
|
const keepgoingDir = path13.join(os6.homedir(), ".keepgoing");
|
|
@@ -6159,7 +6254,7 @@ import { spawn } from "child_process";
|
|
|
6159
6254
|
import { readFileSync, existsSync } from "fs";
|
|
6160
6255
|
import path14 from "path";
|
|
6161
6256
|
import os7 from "os";
|
|
6162
|
-
var CLI_VERSION = "1.
|
|
6257
|
+
var CLI_VERSION = "1.6.0";
|
|
6163
6258
|
var NPM_REGISTRY_URL = "https://registry.npmjs.org/@keepgoingdev/cli/latest";
|
|
6164
6259
|
var FETCH_TIMEOUT_MS = 5e3;
|
|
6165
6260
|
var CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
|
|
@@ -6246,7 +6341,7 @@ var BOLD3 = "\x1B[1m";
|
|
|
6246
6341
|
var DIM4 = "\x1B[2m";
|
|
6247
6342
|
var GREEN3 = "\x1B[32m";
|
|
6248
6343
|
var YELLOW3 = "\x1B[33m";
|
|
6249
|
-
var CLI_VERSION2 = "1.
|
|
6344
|
+
var CLI_VERSION2 = "1.6.0";
|
|
6250
6345
|
async function updateCommand() {
|
|
6251
6346
|
console.log(`
|
|
6252
6347
|
${BOLD3}KeepGoing CLI${RESET4} ${DIM4}v${CLI_VERSION2}${RESET4}
|
|
@@ -6356,6 +6451,7 @@ Presets:
|
|
|
6356
6451
|
windsurf Pre-select Windsurf
|
|
6357
6452
|
vscode Pre-select VS Code IDE
|
|
6358
6453
|
jetbrains Pre-select JetBrains IDE
|
|
6454
|
+
desktop-tray Install the desktop tray app
|
|
6359
6455
|
|
|
6360
6456
|
Options:
|
|
6361
6457
|
--cwd <path> Override the working directory
|
|
@@ -6775,7 +6871,7 @@ async function main() {
|
|
|
6775
6871
|
await updateCommand();
|
|
6776
6872
|
break;
|
|
6777
6873
|
case "version":
|
|
6778
|
-
console.log(`keepgoing v${"1.
|
|
6874
|
+
console.log(`keepgoing v${"1.6.0"}`);
|
|
6779
6875
|
break;
|
|
6780
6876
|
case "activate":
|
|
6781
6877
|
await activateCommand({ licenseKey: subcommand });
|