agendex-cli 0.3.2 → 0.4.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/dist/cli.js +118 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -3006,11 +3006,128 @@ async function syncAll() {
|
|
|
3006
3006
|
console.log(`[agendex] Sync complete: ${synced} synced, ${failed} failed`);
|
|
3007
3007
|
}
|
|
3008
3008
|
|
|
3009
|
+
// src/version.ts
|
|
3010
|
+
import { existsSync as existsSync7, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "node:fs";
|
|
3011
|
+
import { tmpdir } from "node:os";
|
|
3012
|
+
import { join as join11 } from "node:path";
|
|
3013
|
+
// package.json
|
|
3014
|
+
var package_default = {
|
|
3015
|
+
name: "agendex-cli",
|
|
3016
|
+
version: "0.4.0",
|
|
3017
|
+
description: "Agendex CLI for login, sync, and daemon workflows",
|
|
3018
|
+
homepage: "https://github.com/Tyru5/Agendex#readme",
|
|
3019
|
+
repository: {
|
|
3020
|
+
type: "git",
|
|
3021
|
+
url: "git+https://github.com/Tyru5/Agendex.git",
|
|
3022
|
+
directory: "packages/cli"
|
|
3023
|
+
},
|
|
3024
|
+
bugs: {
|
|
3025
|
+
url: "https://github.com/Tyru5/Agendex/issues"
|
|
3026
|
+
},
|
|
3027
|
+
type: "module",
|
|
3028
|
+
license: "AGPL-3.0-only",
|
|
3029
|
+
bin: {
|
|
3030
|
+
agendex: "./dist/cli.js"
|
|
3031
|
+
},
|
|
3032
|
+
files: [
|
|
3033
|
+
"dist",
|
|
3034
|
+
"README.md",
|
|
3035
|
+
"LICENSE"
|
|
3036
|
+
],
|
|
3037
|
+
publishConfig: {
|
|
3038
|
+
access: "public"
|
|
3039
|
+
},
|
|
3040
|
+
engines: {
|
|
3041
|
+
node: ">=20"
|
|
3042
|
+
},
|
|
3043
|
+
scripts: {
|
|
3044
|
+
build: "node ./scripts/build-release.mjs --dist-only",
|
|
3045
|
+
"build:release": "node ./scripts/build-release.mjs",
|
|
3046
|
+
prepack: "node ./scripts/build-release.mjs --dist-only"
|
|
3047
|
+
},
|
|
3048
|
+
dependencies: {
|
|
3049
|
+
"better-sqlite3": "^12.6.2"
|
|
3050
|
+
},
|
|
3051
|
+
devDependencies: {
|
|
3052
|
+
"@agendex/shared": "workspace:*",
|
|
3053
|
+
"@types/bun": "^1.3.9"
|
|
3054
|
+
}
|
|
3055
|
+
};
|
|
3056
|
+
|
|
3057
|
+
// src/version.ts
|
|
3058
|
+
var CLI_VERSION = package_default.version;
|
|
3059
|
+
var CACHE_FILE = join11(tmpdir(), ".agendex-update-cache.json");
|
|
3060
|
+
var CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
3061
|
+
function readCache() {
|
|
3062
|
+
try {
|
|
3063
|
+
if (!existsSync7(CACHE_FILE))
|
|
3064
|
+
return null;
|
|
3065
|
+
const { result, ts } = JSON.parse(readFileSync4(CACHE_FILE, "utf8"));
|
|
3066
|
+
if (Date.now() - ts > CACHE_TTL_MS)
|
|
3067
|
+
return null;
|
|
3068
|
+
return result;
|
|
3069
|
+
} catch {
|
|
3070
|
+
return null;
|
|
3071
|
+
}
|
|
3072
|
+
}
|
|
3073
|
+
function writeCache(result) {
|
|
3074
|
+
try {
|
|
3075
|
+
writeFileSync3(CACHE_FILE, JSON.stringify({ result, ts: Date.now() }));
|
|
3076
|
+
} catch {}
|
|
3077
|
+
}
|
|
3078
|
+
async function checkForUpdate() {
|
|
3079
|
+
const current = CLI_VERSION;
|
|
3080
|
+
const cached = readCache();
|
|
3081
|
+
if (cached)
|
|
3082
|
+
return { ...cached, current };
|
|
3083
|
+
try {
|
|
3084
|
+
const controller = new AbortController;
|
|
3085
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
3086
|
+
const res = await fetch("https://registry.npmjs.org/agendex-cli/latest", {
|
|
3087
|
+
signal: controller.signal
|
|
3088
|
+
});
|
|
3089
|
+
clearTimeout(timeout);
|
|
3090
|
+
if (!res.ok) {
|
|
3091
|
+
return { updateAvailable: false, current, latest: current };
|
|
3092
|
+
}
|
|
3093
|
+
const data = await res.json();
|
|
3094
|
+
const latest = data.version;
|
|
3095
|
+
const result = { updateAvailable: isNewer(latest, current), current, latest };
|
|
3096
|
+
writeCache(result);
|
|
3097
|
+
return result;
|
|
3098
|
+
} catch {
|
|
3099
|
+
return { updateAvailable: false, current, latest: current };
|
|
3100
|
+
}
|
|
3101
|
+
}
|
|
3102
|
+
function isNewer(latest, current) {
|
|
3103
|
+
const l = latest.split(".").map(Number);
|
|
3104
|
+
const c = current.split(".").map(Number);
|
|
3105
|
+
for (let i = 0;i < Math.max(l.length, c.length); i++) {
|
|
3106
|
+
const lv = l[i] ?? 0;
|
|
3107
|
+
const cv = c[i] ?? 0;
|
|
3108
|
+
if (lv > cv)
|
|
3109
|
+
return true;
|
|
3110
|
+
if (lv < cv)
|
|
3111
|
+
return false;
|
|
3112
|
+
}
|
|
3113
|
+
return false;
|
|
3114
|
+
}
|
|
3115
|
+
|
|
3009
3116
|
// src/cli.ts
|
|
3010
3117
|
var args = process.argv.slice(2);
|
|
3011
3118
|
var command = args[0] ?? "start";
|
|
3012
3119
|
var cliEntry = resolve5(process.argv[1] ?? fileURLToPath2(import.meta.url));
|
|
3013
3120
|
async function main() {
|
|
3121
|
+
const isInternal = args.includes("--daemon") || args.includes("--worker");
|
|
3122
|
+
const isPassthrough = ["stop", "status", "login", "logout", "help", "--help", "-h"].includes(command);
|
|
3123
|
+
if (!isInternal && !isPassthrough) {
|
|
3124
|
+
const { updateAvailable, current, latest } = await checkForUpdate();
|
|
3125
|
+
if (updateAvailable) {
|
|
3126
|
+
writeStderr(`[agendex] update required: v${current} → v${latest}`);
|
|
3127
|
+
writeStderr(`[agendex] run: npm i -g agendex-cli`);
|
|
3128
|
+
return 1;
|
|
3129
|
+
}
|
|
3130
|
+
}
|
|
3014
3131
|
switch (command) {
|
|
3015
3132
|
case "start": {
|
|
3016
3133
|
if (args.includes("--daemon")) {
|
|
@@ -3087,6 +3204,7 @@ async function main() {
|
|
|
3087
3204
|
writeStdout(`[agendex] Convex URL: ${config?.convexUrl ?? "not set"}`);
|
|
3088
3205
|
writeStdout(`[agendex] Enabled adapters: ${config?.enabledAdapters.join(", ") || "none"}`);
|
|
3089
3206
|
writeStdout(`[agendex] Daemon: ${running ? `running (PID ${pid})` : "not running"}`);
|
|
3207
|
+
writeStdout(`[agendex] CLI version: ${CLI_VERSION}`);
|
|
3090
3208
|
return 0;
|
|
3091
3209
|
}
|
|
3092
3210
|
case "help":
|