@gowelle/stint-agent 1.2.18 → 1.2.19
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/assets/logo.png +0 -0
- package/dist/{StatusDashboard-KCHNLVD7.js → StatusDashboard-I5DG5GEB.js} +2 -2
- package/dist/api-76OMVWNR.js +7 -0
- package/dist/{chunk-XPZNWXB4.js → chunk-6LQKDEQR.js} +2 -2
- package/dist/{chunk-WETVBZ6Z.js → chunk-HZ4K7EPF.js} +32 -2
- package/dist/{chunk-A2CVSQ3K.js → chunk-NVQIKLOA.js} +1 -1
- package/dist/chunk-ZUQRDCS2.js +2618 -0
- package/dist/daemon/runner.js +40 -4
- package/dist/index.js +172 -126
- package/package.json +3 -1
- package/dist/api-6EGHLTCT.js +0 -7
- package/dist/chunk-SXPP272L.js +0 -534
package/dist/daemon/runner.js
CHANGED
|
@@ -2,21 +2,23 @@
|
|
|
2
2
|
import {
|
|
3
3
|
commitQueue,
|
|
4
4
|
notify,
|
|
5
|
+
versionService,
|
|
5
6
|
websocketService
|
|
6
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-ZUQRDCS2.js";
|
|
7
8
|
import {
|
|
8
9
|
apiService
|
|
9
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-6LQKDEQR.js";
|
|
10
11
|
import {
|
|
11
12
|
gitService,
|
|
12
13
|
projectService,
|
|
13
14
|
removePidFile,
|
|
14
15
|
writePidFile
|
|
15
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-NVQIKLOA.js";
|
|
16
17
|
import {
|
|
17
18
|
authService,
|
|
19
|
+
config,
|
|
18
20
|
logger
|
|
19
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-HZ4K7EPF.js";
|
|
20
22
|
|
|
21
23
|
// src/daemon/runner.ts
|
|
22
24
|
import "dotenv/config";
|
|
@@ -240,6 +242,39 @@ var heartbeatInterval = null;
|
|
|
240
242
|
var isShuttingDown = false;
|
|
241
243
|
var shutdownReason;
|
|
242
244
|
var fileWatcher = new FileWatcher();
|
|
245
|
+
async function checkForUpdatesIfEnabled() {
|
|
246
|
+
try {
|
|
247
|
+
const autoCheck = config.get("autoCheckUpdates");
|
|
248
|
+
if (!autoCheck) {
|
|
249
|
+
logger.debug("daemon", "Automatic update checks disabled");
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const lastCheck = config.get("lastUpdateCheck");
|
|
253
|
+
if (lastCheck) {
|
|
254
|
+
const lastCheckTime = new Date(lastCheck).getTime();
|
|
255
|
+
const now = Date.now();
|
|
256
|
+
const cooldownMs = 24 * 60 * 60 * 1e3;
|
|
257
|
+
if (now - lastCheckTime < cooldownMs) {
|
|
258
|
+
logger.debug("daemon", "Update check cooldown active");
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
logger.info("daemon", "Checking for updates...");
|
|
263
|
+
const versionInfo = await versionService.checkForUpdates("stable");
|
|
264
|
+
config.set("lastUpdateCheck", (/* @__PURE__ */ new Date()).toISOString());
|
|
265
|
+
if (versionInfo.hasUpdate) {
|
|
266
|
+
logger.info("daemon", `Update available: ${versionInfo.current} \u2192 ${versionInfo.latest}`);
|
|
267
|
+
notify({
|
|
268
|
+
title: "Stint Agent Update Available",
|
|
269
|
+
message: `Version ${versionInfo.latest} is available. Run "stint update" to install.`
|
|
270
|
+
});
|
|
271
|
+
} else {
|
|
272
|
+
logger.debug("daemon", "No updates available");
|
|
273
|
+
}
|
|
274
|
+
} catch (error) {
|
|
275
|
+
logger.debug("daemon", "Failed to check for updates", error);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
243
278
|
async function startDaemon() {
|
|
244
279
|
logger.info("daemon", "Starting daemon...");
|
|
245
280
|
try {
|
|
@@ -352,6 +387,7 @@ Priority: ${suggestion.priority}`,
|
|
|
352
387
|
logger.success("daemon", "Initial project sync complete");
|
|
353
388
|
}
|
|
354
389
|
logger.success("daemon", "Daemon started successfully");
|
|
390
|
+
await checkForUpdatesIfEnabled();
|
|
355
391
|
await new Promise(() => {
|
|
356
392
|
});
|
|
357
393
|
} catch (error) {
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
commitQueue,
|
|
4
|
+
versionService,
|
|
4
5
|
websocketService
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ZUQRDCS2.js";
|
|
6
7
|
import {
|
|
7
8
|
apiService
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6LQKDEQR.js";
|
|
9
10
|
import {
|
|
10
11
|
getPidFilePath,
|
|
11
12
|
gitService,
|
|
@@ -14,17 +15,17 @@ import {
|
|
|
14
15
|
projectService,
|
|
15
16
|
spawnDetached,
|
|
16
17
|
validatePidFile
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-NVQIKLOA.js";
|
|
18
19
|
import {
|
|
19
20
|
authService,
|
|
20
21
|
config,
|
|
21
22
|
logger
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-HZ4K7EPF.js";
|
|
23
24
|
|
|
24
25
|
// src/index.ts
|
|
25
26
|
import "dotenv/config";
|
|
26
27
|
import { Command } from "commander";
|
|
27
|
-
import
|
|
28
|
+
import chalk14 from "chalk";
|
|
28
29
|
|
|
29
30
|
// src/commands/login.ts
|
|
30
31
|
import open from "open";
|
|
@@ -620,7 +621,7 @@ function registerStatusCommand(program2) {
|
|
|
620
621
|
try {
|
|
621
622
|
const { render } = await import("ink");
|
|
622
623
|
const { createElement } = await import("react");
|
|
623
|
-
const { StatusDashboard } = await import("./StatusDashboard-
|
|
624
|
+
const { StatusDashboard } = await import("./StatusDashboard-I5DG5GEB.js");
|
|
624
625
|
render(createElement(StatusDashboard, { cwd }));
|
|
625
626
|
return;
|
|
626
627
|
} catch (error) {
|
|
@@ -1631,113 +1632,158 @@ function registerUninstallCommand(program2) {
|
|
|
1631
1632
|
}
|
|
1632
1633
|
|
|
1633
1634
|
// src/commands/update.ts
|
|
1635
|
+
import ora12 from "ora";
|
|
1636
|
+
import chalk12 from "chalk";
|
|
1637
|
+
|
|
1638
|
+
// src/services/update.ts
|
|
1639
|
+
import { execSync as execSync2 } from "child_process";
|
|
1634
1640
|
import ora11 from "ora";
|
|
1635
1641
|
import chalk11 from "chalk";
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1642
|
+
var UpdateService = class {
|
|
1643
|
+
/**
|
|
1644
|
+
* Perform update to latest version
|
|
1645
|
+
* @param channel - Release channel to update to (stable or beta)
|
|
1646
|
+
* @returns Update result
|
|
1647
|
+
*/
|
|
1648
|
+
async performUpdate(channel = "stable") {
|
|
1649
|
+
const spinner = ora11("Preparing update...").start();
|
|
1650
|
+
try {
|
|
1651
|
+
const { valid, pid } = validatePidFile();
|
|
1652
|
+
const daemonWasRunning = valid && pid !== null;
|
|
1653
|
+
if (daemonWasRunning) {
|
|
1654
|
+
spinner.text = "Stopping daemon...";
|
|
1655
|
+
await this.stopDaemonForUpdate(pid);
|
|
1656
|
+
}
|
|
1657
|
+
spinner.text = `Installing latest ${channel} version...`;
|
|
1658
|
+
const packageSpec = channel === "beta" ? "@gowelle/stint-agent@beta" : "@gowelle/stint-agent@latest";
|
|
1659
|
+
try {
|
|
1660
|
+
execSync2(`npm install -g ${packageSpec}`, {
|
|
1661
|
+
stdio: "pipe",
|
|
1662
|
+
encoding: "utf8"
|
|
1663
|
+
});
|
|
1664
|
+
} catch (error) {
|
|
1665
|
+
const errorMessage = error.message;
|
|
1666
|
+
if (errorMessage.includes("EACCES") || errorMessage.includes("EPERM")) {
|
|
1667
|
+
spinner.fail("Permission denied");
|
|
1668
|
+
throw new Error(
|
|
1669
|
+
"Permission denied. Try running with elevated privileges:\n" + (process.platform === "win32" ? " Run PowerShell as Administrator" : " sudo npm install -g @gowelle/stint-agent")
|
|
1670
|
+
);
|
|
1655
1671
|
}
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1672
|
+
throw error;
|
|
1673
|
+
}
|
|
1674
|
+
if (daemonWasRunning) {
|
|
1675
|
+
spinner.text = "Restarting daemon...";
|
|
1676
|
+
await this.restartDaemonAfterUpdate();
|
|
1677
|
+
}
|
|
1678
|
+
spinner.succeed("Update completed successfully!");
|
|
1679
|
+
return { success: true };
|
|
1680
|
+
} catch (error) {
|
|
1681
|
+
spinner.fail("Update failed");
|
|
1682
|
+
logger.error("update", "Update failed", error);
|
|
1683
|
+
return {
|
|
1684
|
+
success: false,
|
|
1685
|
+
error: error.message
|
|
1686
|
+
};
|
|
1687
|
+
}
|
|
1659
1688
|
}
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1689
|
+
/**
|
|
1690
|
+
* Stop daemon before update
|
|
1691
|
+
* @param pid - Process ID of daemon
|
|
1692
|
+
*/
|
|
1693
|
+
async stopDaemonForUpdate(pid) {
|
|
1694
|
+
try {
|
|
1695
|
+
killProcess(pid, "SIGTERM");
|
|
1696
|
+
let attempts = 0;
|
|
1697
|
+
const maxAttempts = 10;
|
|
1698
|
+
while (attempts < maxAttempts) {
|
|
1699
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
1700
|
+
if (!isProcessRunning(pid)) {
|
|
1701
|
+
logger.info("update", "Daemon stopped successfully");
|
|
1702
|
+
return;
|
|
1703
|
+
}
|
|
1704
|
+
attempts++;
|
|
1705
|
+
}
|
|
1706
|
+
if (isProcessRunning(pid)) {
|
|
1707
|
+
logger.warn("update", "Daemon did not stop gracefully, forcing shutdown");
|
|
1708
|
+
killProcess(pid, "SIGKILL");
|
|
1709
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
1710
|
+
}
|
|
1711
|
+
} catch (error) {
|
|
1712
|
+
logger.error("update", "Failed to stop daemon", error);
|
|
1713
|
+
throw new Error("Failed to stop daemon before update");
|
|
1714
|
+
}
|
|
1679
1715
|
}
|
|
1680
|
-
|
|
1681
|
-
|
|
1716
|
+
/**
|
|
1717
|
+
* Restart daemon after update
|
|
1718
|
+
*/
|
|
1719
|
+
async restartDaemonAfterUpdate() {
|
|
1720
|
+
try {
|
|
1721
|
+
execSync2("stint daemon start", {
|
|
1722
|
+
stdio: "pipe",
|
|
1723
|
+
encoding: "utf8"
|
|
1724
|
+
});
|
|
1725
|
+
logger.info("update", "Daemon restarted successfully");
|
|
1726
|
+
} catch (error) {
|
|
1727
|
+
logger.error("update", "Failed to restart daemon", error);
|
|
1728
|
+
console.log(chalk11.yellow("\n\u26A0 Failed to restart daemon automatically."));
|
|
1729
|
+
console.log(chalk11.gray('Run "stint daemon start" to start it manually.\n'));
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
};
|
|
1733
|
+
var updateService = new UpdateService();
|
|
1734
|
+
|
|
1735
|
+
// src/commands/update.ts
|
|
1736
|
+
import prompts from "prompts";
|
|
1682
1737
|
function registerUpdateCommand(program2) {
|
|
1683
|
-
program2.command("update").description("Update stint
|
|
1684
|
-
const spinner = ora11("Checking for updates...").start();
|
|
1738
|
+
program2.command("update").description("Update stint-agent to the latest version").option("--check", "Check for updates without installing").option("--channel <channel>", "Release channel (stable or beta)", "stable").option("-y, --yes", "Skip confirmation prompt").action(async (options) => {
|
|
1685
1739
|
try {
|
|
1686
|
-
const
|
|
1687
|
-
const
|
|
1688
|
-
const
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1740
|
+
const channel = options.channel === "beta" ? "beta" : "stable";
|
|
1741
|
+
const spinner = ora12("Checking for updates...").start();
|
|
1742
|
+
const versionInfo = await versionService.checkForUpdates(channel);
|
|
1743
|
+
spinner.stop();
|
|
1744
|
+
console.log(chalk12.blue("\n\u{1F4E6} Version Information:"));
|
|
1745
|
+
console.log(chalk12.gray("\u2500".repeat(50)));
|
|
1746
|
+
console.log(`${chalk12.bold("Current:")} ${versionInfo.current}`);
|
|
1747
|
+
console.log(`${chalk12.bold("Latest:")} ${versionInfo.latest} (${channel})`);
|
|
1748
|
+
console.log();
|
|
1749
|
+
if (!versionInfo.hasUpdate) {
|
|
1750
|
+
console.log(chalk12.green("\u2713 You are already on the latest version!\n"));
|
|
1751
|
+
return;
|
|
1697
1752
|
}
|
|
1698
|
-
|
|
1699
|
-
const cleanLatestVersion = await getLatestVersionForChannel(channel);
|
|
1700
|
-
if (currentVersion === cleanLatestVersion) {
|
|
1701
|
-
spinner.succeed("Already up to date");
|
|
1702
|
-
console.log(chalk11.gray(`
|
|
1703
|
-
Current version: ${currentVersion}`));
|
|
1704
|
-
console.log(chalk11.gray(`Latest version: ${cleanLatestVersion}
|
|
1753
|
+
console.log(chalk12.yellow(`\u26A0 Update available: ${versionInfo.current} \u2192 ${versionInfo.latest}
|
|
1705
1754
|
`));
|
|
1755
|
+
if (options.check) {
|
|
1756
|
+
console.log(chalk12.gray('Run "stint update" to install the latest version.\n'));
|
|
1706
1757
|
return;
|
|
1707
1758
|
}
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
let attempts = 0;
|
|
1719
|
-
while (attempts < 10 && isProcessRunning(pid)) {
|
|
1720
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
1721
|
-
attempts++;
|
|
1722
|
-
}
|
|
1723
|
-
if (isProcessRunning(pid)) {
|
|
1724
|
-
killProcess(pid, "SIGKILL");
|
|
1725
|
-
}
|
|
1726
|
-
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
1727
|
-
await execAsync2("stint daemon start");
|
|
1728
|
-
restartSpinner.succeed("Daemon restarted successfully");
|
|
1729
|
-
logger.success("update", `Daemon restarted after update`);
|
|
1730
|
-
} catch (error) {
|
|
1731
|
-
restartSpinner.fail("Failed to restart daemon");
|
|
1732
|
-
logger.error("update", "Daemon restart failed", error);
|
|
1733
|
-
console.log(chalk11.yellow('\nPlease run "stint daemon start" manually.\n'));
|
|
1759
|
+
if (!options.yes) {
|
|
1760
|
+
const response = await prompts({
|
|
1761
|
+
type: "confirm",
|
|
1762
|
+
name: "proceed",
|
|
1763
|
+
message: "Do you want to update now?",
|
|
1764
|
+
initial: true
|
|
1765
|
+
});
|
|
1766
|
+
if (!response.proceed) {
|
|
1767
|
+
console.log(chalk12.gray("\nUpdate cancelled.\n"));
|
|
1768
|
+
return;
|
|
1734
1769
|
}
|
|
1735
1770
|
}
|
|
1736
|
-
|
|
1771
|
+
console.log();
|
|
1772
|
+
const result = await updateService.performUpdate(channel);
|
|
1773
|
+
if (result.success) {
|
|
1774
|
+
console.log(chalk12.green(`
|
|
1775
|
+
\u2713 Successfully updated to ${versionInfo.latest}!
|
|
1776
|
+
`));
|
|
1777
|
+
logger.success("update", `Updated to ${versionInfo.latest}`);
|
|
1778
|
+
} else {
|
|
1779
|
+
console.log(chalk12.red(`
|
|
1780
|
+
\u2716 Update failed: ${result.error}
|
|
1781
|
+
`));
|
|
1782
|
+
process.exit(1);
|
|
1783
|
+
}
|
|
1737
1784
|
} catch (error) {
|
|
1738
|
-
spinner.fail("Update failed");
|
|
1739
1785
|
logger.error("update", "Update command failed", error);
|
|
1740
|
-
console.error(
|
|
1786
|
+
console.error(chalk12.red(`
|
|
1741
1787
|
\u2716 Error: ${error.message}
|
|
1742
1788
|
`));
|
|
1743
1789
|
process.exit(1);
|
|
@@ -1746,8 +1792,8 @@ Current version: ${currentVersion}`));
|
|
|
1746
1792
|
}
|
|
1747
1793
|
|
|
1748
1794
|
// src/commands/doctor.ts
|
|
1749
|
-
import
|
|
1750
|
-
import
|
|
1795
|
+
import ora13 from "ora";
|
|
1796
|
+
import chalk13 from "chalk";
|
|
1751
1797
|
|
|
1752
1798
|
// src/utils/api-errors.ts
|
|
1753
1799
|
function formatApiError(error) {
|
|
@@ -1839,13 +1885,13 @@ function isServiceUnavailable(error) {
|
|
|
1839
1885
|
}
|
|
1840
1886
|
|
|
1841
1887
|
// src/commands/doctor.ts
|
|
1842
|
-
import { exec as
|
|
1843
|
-
import { promisify as
|
|
1888
|
+
import { exec as exec2 } from "child_process";
|
|
1889
|
+
import { promisify as promisify2 } from "util";
|
|
1844
1890
|
import process7 from "process";
|
|
1845
|
-
var
|
|
1891
|
+
var execAsync2 = promisify2(exec2);
|
|
1846
1892
|
function registerDoctorCommand(program2) {
|
|
1847
1893
|
program2.command("doctor").description("Run diagnostics to check environment health").action(async () => {
|
|
1848
|
-
const spinner =
|
|
1894
|
+
const spinner = ora13("Running diagnostics...").start();
|
|
1849
1895
|
let hasErrors = false;
|
|
1850
1896
|
try {
|
|
1851
1897
|
const checks = [
|
|
@@ -1853,7 +1899,7 @@ function registerDoctorCommand(program2) {
|
|
|
1853
1899
|
name: "Git Installation",
|
|
1854
1900
|
check: async () => {
|
|
1855
1901
|
try {
|
|
1856
|
-
const { stdout } = await
|
|
1902
|
+
const { stdout } = await execAsync2("git --version");
|
|
1857
1903
|
return {
|
|
1858
1904
|
success: true,
|
|
1859
1905
|
message: `Git ${stdout.trim()} found`
|
|
@@ -1874,8 +1920,8 @@ function registerDoctorCommand(program2) {
|
|
|
1874
1920
|
name: "Git Configuration",
|
|
1875
1921
|
check: async () => {
|
|
1876
1922
|
try {
|
|
1877
|
-
const { stdout: userName } = await
|
|
1878
|
-
const { stdout: userEmail } = await
|
|
1923
|
+
const { stdout: userName } = await execAsync2("git config --global user.name");
|
|
1924
|
+
const { stdout: userEmail } = await execAsync2("git config --global user.email");
|
|
1879
1925
|
if (!userName.trim() || !userEmail.trim()) {
|
|
1880
1926
|
return {
|
|
1881
1927
|
success: false,
|
|
@@ -1982,39 +2028,39 @@ function registerDoctorCommand(program2) {
|
|
|
1982
2028
|
}
|
|
1983
2029
|
}
|
|
1984
2030
|
];
|
|
1985
|
-
console.log(
|
|
2031
|
+
console.log(chalk13.blue("\n\u{1F50D} Running environment diagnostics...\n"));
|
|
1986
2032
|
for (const check of checks) {
|
|
1987
2033
|
spinner.text = `Checking ${check.name.toLowerCase()}...`;
|
|
1988
2034
|
try {
|
|
1989
2035
|
const result = await check.check();
|
|
1990
2036
|
if (result.success) {
|
|
1991
|
-
console.log(`${
|
|
2037
|
+
console.log(`${chalk13.green("\u2713")} ${chalk13.bold(check.name)}: ${result.message}`);
|
|
1992
2038
|
} else {
|
|
1993
2039
|
hasErrors = true;
|
|
1994
|
-
console.log(`${
|
|
2040
|
+
console.log(`${chalk13.red("\u2716")} ${chalk13.bold(check.name)}: ${result.message}`);
|
|
1995
2041
|
if (result.details) {
|
|
1996
2042
|
result.details.forEach((detail) => {
|
|
1997
|
-
console.log(
|
|
2043
|
+
console.log(chalk13.gray(` ${detail}`));
|
|
1998
2044
|
});
|
|
1999
2045
|
}
|
|
2000
2046
|
}
|
|
2001
2047
|
} catch (error) {
|
|
2002
2048
|
hasErrors = true;
|
|
2003
|
-
console.log(`${
|
|
2049
|
+
console.log(`${chalk13.red("\u2716")} ${chalk13.bold(check.name)}: Check failed - ${error.message}`);
|
|
2004
2050
|
}
|
|
2005
2051
|
}
|
|
2006
2052
|
spinner.stop();
|
|
2007
2053
|
console.log();
|
|
2008
2054
|
if (hasErrors) {
|
|
2009
|
-
console.log(
|
|
2055
|
+
console.log(chalk13.yellow("Some checks failed. Please address the issues above."));
|
|
2010
2056
|
process7.exit(1);
|
|
2011
2057
|
} else {
|
|
2012
|
-
console.log(
|
|
2058
|
+
console.log(chalk13.green("All checks passed! Your environment is healthy."));
|
|
2013
2059
|
}
|
|
2014
2060
|
} catch (error) {
|
|
2015
2061
|
spinner.fail("Diagnostics failed");
|
|
2016
2062
|
logger.error("doctor", "Diagnostics failed", error);
|
|
2017
|
-
console.error(
|
|
2063
|
+
console.error(chalk13.red(`
|
|
2018
2064
|
\u2716 Error: ${error.message}
|
|
2019
2065
|
`));
|
|
2020
2066
|
process7.exit(1);
|
|
@@ -2023,19 +2069,19 @@ function registerDoctorCommand(program2) {
|
|
|
2023
2069
|
}
|
|
2024
2070
|
|
|
2025
2071
|
// src/index.ts
|
|
2026
|
-
var AGENT_VERSION = "1.2.
|
|
2072
|
+
var AGENT_VERSION = "1.2.19";
|
|
2027
2073
|
var program = new Command();
|
|
2028
2074
|
program.name("stint").description("Stint Agent - Local daemon for Stint Project Assistant").version(AGENT_VERSION, "-v, --version", "output the current version").addHelpText("after", `
|
|
2029
|
-
${
|
|
2030
|
-
${
|
|
2031
|
-
${
|
|
2032
|
-
${
|
|
2033
|
-
${
|
|
2034
|
-
${
|
|
2035
|
-
${
|
|
2075
|
+
${chalk14.bold("Examples:")}
|
|
2076
|
+
${chalk14.cyan("$")} stint login ${chalk14.gray("# Authenticate with Stint")}
|
|
2077
|
+
${chalk14.cyan("$")} stint install ${chalk14.gray("# Install agent to run on startup")}
|
|
2078
|
+
${chalk14.cyan("$")} stint link ${chalk14.gray("# Link current directory to a project")}
|
|
2079
|
+
${chalk14.cyan("$")} stint daemon start ${chalk14.gray("# Start background daemon")}
|
|
2080
|
+
${chalk14.cyan("$")} stint status ${chalk14.gray("# Check status")}
|
|
2081
|
+
${chalk14.cyan("$")} stint commits ${chalk14.gray("# List pending commits")}
|
|
2036
2082
|
|
|
2037
|
-
${
|
|
2038
|
-
For more information, visit: ${
|
|
2083
|
+
${chalk14.bold("Documentation:")}
|
|
2084
|
+
For more information, visit: ${chalk14.blue("https://stint.codes/docs")}
|
|
2039
2085
|
`);
|
|
2040
2086
|
registerLoginCommand(program);
|
|
2041
2087
|
registerLogoutCommand(program);
|
|
@@ -2057,7 +2103,7 @@ try {
|
|
|
2057
2103
|
const commanderError = error;
|
|
2058
2104
|
if (commanderError.code !== "commander.help" && commanderError.code !== "commander.version" && commanderError.code !== "commander.helpDisplayed") {
|
|
2059
2105
|
logger.error("cli", "Command execution failed", error);
|
|
2060
|
-
console.error(
|
|
2106
|
+
console.error(chalk14.red(`
|
|
2061
2107
|
\u2716 Error: ${error.message}
|
|
2062
2108
|
`));
|
|
2063
2109
|
process.exit(1);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gowelle/stint-agent",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.19",
|
|
4
4
|
"description": "Local agent for Stint - Project Assistant",
|
|
5
5
|
"author": "Gowelle John <gowelle.john@icloud.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"node-notifier": "^10.0.1",
|
|
50
50
|
"open": "^10.0.0",
|
|
51
51
|
"ora": "^8.0.1",
|
|
52
|
+
"prompts": "^2.4.2",
|
|
52
53
|
"pusher-js": "^8.4.0",
|
|
53
54
|
"react": "^18.3.1",
|
|
54
55
|
"simple-git": "^3.22.0",
|
|
@@ -57,6 +58,7 @@
|
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@types/node": "^20.11.0",
|
|
59
60
|
"@types/node-notifier": "^8.0.5",
|
|
61
|
+
"@types/prompts": "^2.4.9",
|
|
60
62
|
"@types/react": "^18.3.27",
|
|
61
63
|
"@types/ws": "^8.5.10",
|
|
62
64
|
"@typescript-eslint/eslint-plugin": "^8.50.0",
|