mthds 0.2.1 → 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.
Files changed (37) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/binaries.d.ts +14 -1
  3. package/dist/agent/binaries.js +21 -6
  4. package/dist/agent/binaries.js.map +1 -1
  5. package/dist/agent/commands/doctor.js +25 -17
  6. package/dist/agent/commands/doctor.js.map +1 -1
  7. package/dist/agent/commands/install.js +2 -2
  8. package/dist/agent/commands/install.js.map +1 -1
  9. package/dist/agent/commands/update-check.d.ts +16 -0
  10. package/dist/agent/commands/update-check.js +169 -0
  11. package/dist/agent/commands/update-check.js.map +1 -0
  12. package/dist/agent/commands/upgrade.d.ts +17 -0
  13. package/dist/agent/commands/upgrade.js +155 -0
  14. package/dist/agent/commands/upgrade.js.map +1 -0
  15. package/dist/agent/passthrough.d.ts +1 -0
  16. package/dist/agent/passthrough.js +93 -32
  17. package/dist/agent/passthrough.js.map +1 -1
  18. package/dist/agent/snooze.d.ts +32 -0
  19. package/dist/agent/snooze.js +108 -0
  20. package/dist/agent/snooze.js.map +1 -0
  21. package/dist/agent/update-cache.d.ts +43 -0
  22. package/dist/agent/update-cache.js +125 -0
  23. package/dist/agent/update-cache.js.map +1 -0
  24. package/dist/agent-cli.js +47 -11
  25. package/dist/agent-cli.js.map +1 -1
  26. package/dist/cli/commands/install.js +3 -3
  27. package/dist/cli/commands/install.js.map +1 -1
  28. package/dist/config/credentials.d.ts +2 -0
  29. package/dist/config/credentials.js +64 -33
  30. package/dist/config/credentials.js.map +1 -1
  31. package/dist/installer/runtime/installer.d.ts +12 -6
  32. package/dist/installer/runtime/installer.js +49 -25
  33. package/dist/installer/runtime/installer.js.map +1 -1
  34. package/dist/installer/runtime/version-check.d.ts +31 -0
  35. package/dist/installer/runtime/version-check.js +78 -0
  36. package/dist/installer/runtime/version-check.js.map +1 -0
  37. package/package.json +1 -1
@@ -4,39 +4,100 @@
4
4
  */
5
5
  import { spawnSync } from "node:child_process";
6
6
  import { agentError, AGENT_ERROR_DOMAINS } from "./output.js";
7
- import { BINARY_RECOVERY } from "./binaries.js";
8
- import { isBinaryInstalled } from "../installer/runtime/check.js";
9
- import { installPipelexSync, installPlxtSync } from "../installer/runtime/installer.js";
10
- const AUTO_INSTALL_FN = {
11
- pipelex: installPipelexSync,
12
- "pipelex-agent": installPipelexSync,
13
- plxt: installPlxtSync,
14
- };
7
+ import { BINARY_RECOVERY, buildInstallCommand } from "./binaries.js";
8
+ import { checkBinaryVersion } from "../installer/runtime/version-check.js";
9
+ import { uvToolInstallSync } from "../installer/runtime/installer.js";
15
10
  export function passthrough(bin, args, options) {
16
11
  const recovery = BINARY_RECOVERY[bin];
17
- // Auto-install: attempt to install the binary before spawning
18
- if (options?.autoInstall && recovery?.auto_installable && !isBinaryInstalled(bin)) {
19
- const installFn = AUTO_INSTALL_FN[bin];
20
- if (installFn) {
21
- try {
22
- installFn();
23
- }
24
- catch (err) {
25
- const msg = err instanceof Error ? err.message : String(err);
26
- agentError(`Failed to auto-install ${bin}: ${msg}`, "InstallError", {
27
- error_domain: AGENT_ERROR_DOMAINS.INSTALL,
28
- hint: `Install manually: ${recovery.install_command}`,
29
- recovery,
30
- });
31
- }
32
- // Verify install succeeded
33
- if (!isBinaryInstalled(bin)) {
34
- agentError(`${bin} was installed but is not reachable in PATH.`, "InstallError", {
35
- error_domain: AGENT_ERROR_DOMAINS.INSTALL,
36
- hint: "You may need to restart your shell or add the install directory to your PATH.",
37
- recovery,
38
- });
39
- }
12
+ // Version check runs unconditionally when recovery info exists (unless
13
+ // explicitly skipped). autoInstall only controls whether to attempt a fix
14
+ // (install/upgrade). When autoInstall is false and status is missing/outdated,
15
+ // emit a structured error with install/upgrade instructions.
16
+ if (!options?.skipVersionCheck && recovery) {
17
+ const check = checkBinaryVersion(recovery);
18
+ const autoInstall = options?.autoInstall && recovery.auto_installable;
19
+ switch (check.status) {
20
+ case "ok":
21
+ break;
22
+ case "missing":
23
+ if (autoInstall) {
24
+ try {
25
+ uvToolInstallSync(recovery.uv_package, recovery.version_constraint);
26
+ }
27
+ catch (err) {
28
+ const msg = err instanceof Error ? err.message : String(err);
29
+ agentError(`Failed to auto-install ${bin}: ${msg}`, "InstallError", {
30
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
31
+ hint: `Install manually: ${buildInstallCommand(recovery)}`,
32
+ recovery,
33
+ });
34
+ }
35
+ // Verify install succeeded and version constraint is satisfied
36
+ {
37
+ const postCheck = checkBinaryVersion(recovery);
38
+ if (postCheck.status === "missing") {
39
+ agentError(`${bin} was installed but is not reachable in PATH.`, "InstallError", {
40
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
41
+ hint: "You may need to restart your shell or add the install directory to your PATH.",
42
+ recovery,
43
+ });
44
+ }
45
+ else if (postCheck.status !== "ok") {
46
+ process.stderr.write(JSON.stringify({
47
+ warning: true,
48
+ message: `Install of ${bin} may not have taken effect (status: ${postCheck.status}, installed: ${postCheck.installed_version}, needs: ${recovery.version_constraint}).`,
49
+ }) + "\n");
50
+ }
51
+ }
52
+ }
53
+ else {
54
+ agentError(`${bin} is not installed. Install it to continue.`, "BinaryNotFoundError", {
55
+ error_domain: AGENT_ERROR_DOMAINS.BINARY,
56
+ hint: `Install: ${buildInstallCommand(recovery)}`,
57
+ recovery,
58
+ });
59
+ }
60
+ break;
61
+ case "outdated":
62
+ if (autoInstall) {
63
+ try {
64
+ uvToolInstallSync(recovery.uv_package, recovery.version_constraint);
65
+ }
66
+ catch (err) {
67
+ const msg = err instanceof Error ? err.message : String(err);
68
+ agentError(`Failed to upgrade ${bin} (installed ${check.installed_version}, needs ${recovery.version_constraint}): ${msg}`, "InstallError", {
69
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
70
+ hint: `Upgrade manually: ${buildInstallCommand(recovery)}`,
71
+ recovery,
72
+ });
73
+ }
74
+ // Verify upgrade actually satisfied the constraint
75
+ {
76
+ const recheck = checkBinaryVersion(recovery);
77
+ if (recheck.status !== "ok") {
78
+ process.stderr.write(JSON.stringify({
79
+ warning: true,
80
+ message: `Upgrade of ${bin} may not have taken effect (status: ${recheck.status}, installed: ${recheck.installed_version}, needs: ${recovery.version_constraint}).`,
81
+ }) + "\n");
82
+ }
83
+ }
84
+ }
85
+ else {
86
+ agentError(`${bin} is outdated (installed ${check.installed_version}, needs ${recovery.version_constraint}). Upgrade to continue.`, "InstallError", {
87
+ error_domain: AGENT_ERROR_DOMAINS.INSTALL,
88
+ hint: `Upgrade: ${buildInstallCommand(recovery)}`,
89
+ recovery,
90
+ });
91
+ }
92
+ break;
93
+ case "unparseable":
94
+ // Warn to stderr but don't block execution
95
+ process.stderr.write(JSON.stringify({
96
+ warning: true,
97
+ message: `Could not parse version for ${bin}. Proceeding anyway.`,
98
+ version_constraint: check.version_constraint,
99
+ }) + "\n");
100
+ break;
40
101
  }
41
102
  }
42
103
  const result = spawnSync(bin, args, {
@@ -45,7 +106,7 @@ export function passthrough(bin, args, options) {
45
106
  if (result.error) {
46
107
  if (result.error.code === "ENOENT") {
47
108
  const hint = recovery
48
- ? `Install ${recovery.package}: ${recovery.install_command}`
109
+ ? `Install ${recovery.package}: ${buildInstallCommand(recovery)}`
49
110
  : "Make sure the required CLI binary is installed and in your PATH.";
50
111
  agentError(`${bin} not found. Make sure it is installed and in your PATH.`, "BinaryNotFoundError", {
51
112
  error_domain: AGENT_ERROR_DOMAINS.BINARY,
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough.js","sourceRoot":"","sources":["../../src/agent/passthrough.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAExF,MAAM,eAAe,GAA+B;IAClD,OAAO,EAAE,kBAAkB;IAC3B,eAAe,EAAE,kBAAkB;IACnC,IAAI,EAAE,eAAe;CACtB,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,GAAW,EACX,IAAc,EACd,OAAmC;IAEnC,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEtC,8DAA8D;IAC9D,IAAI,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,SAAS,EAAE,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,UAAU,CACR,0BAA0B,GAAG,KAAK,GAAG,EAAE,EACvC,cAAc,EACd;oBACE,YAAY,EAAE,mBAAmB,CAAC,OAAO;oBACzC,IAAI,EAAE,qBAAqB,QAAQ,CAAC,eAAe,EAAE;oBACrD,QAAQ;iBACT,CACF,CAAC;YACJ,CAAC;YACD,2BAA2B;YAC3B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,UAAU,CACR,GAAG,GAAG,8CAA8C,EACpD,cAAc,EACd;oBACE,YAAY,EAAE,mBAAmB,CAAC,OAAO;oBACzC,IAAI,EAAE,+EAA+E;oBACrF,QAAQ;iBACT,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAClC,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,IAAK,MAAM,CAAC,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,QAAQ;gBACnB,CAAC,CAAC,WAAW,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,eAAe,EAAE;gBAC5D,CAAC,CAAC,kEAAkE,CAAC;YACvE,UAAU,CACR,GAAG,GAAG,yDAAyD,EAC/D,qBAAqB,EACrB;gBACE,YAAY,EAAE,mBAAmB,CAAC,MAAM;gBACxC,IAAI;gBACJ,QAAQ;aACT,CACF,CAAC;QACJ,CAAC;QACD,UAAU,CACR,mBAAmB,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EACjD,kBAAkB,EAClB,EAAE,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"passthrough.js","sourceRoot":"","sources":["../../src/agent/passthrough.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Snooze state for update-check upgrade prompts.
3
+ *
4
+ * Manages ~/.mthds/state/update-snoozed — a single-line file:
5
+ * <versionKey> <level> <epoch>
6
+ *
7
+ * Version key is a plain concatenation of binary statuses (human-readable).
8
+ * Escalating backoff: level 1 = 24h, level 2 = 48h, level 3+ = 7d.
9
+ * Snooze resets when the version key changes (any binary constraint updated).
10
+ */
11
+ import type { CachePayload } from "./update-cache.js";
12
+ export interface SnoozeState {
13
+ versionKey: string;
14
+ level: number;
15
+ epoch: number;
16
+ }
17
+ /**
18
+ * Compute a human-readable version key from a cache payload.
19
+ * Format: "status1:status2:status3" with constraints appended for non-ok entries.
20
+ * Changes whenever any binary's status or constraint changes.
21
+ */
22
+ export declare function computeVersionKey(payload: CachePayload): string;
23
+ /** Read current snooze state. Returns null if missing or corrupt. */
24
+ export declare function readSnooze(): SnoozeState | null;
25
+ /**
26
+ * Write snooze state. Escalates level if same versionKey, resets if different.
27
+ */
28
+ export declare function writeSnooze(versionKey: string): void;
29
+ /** Check if snooze is active for the given versionKey. */
30
+ export declare function isSnoozed(versionKey: string): boolean;
31
+ /** Clear snooze file. */
32
+ export declare function clearSnooze(): void;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Snooze state for update-check upgrade prompts.
3
+ *
4
+ * Manages ~/.mthds/state/update-snoozed — a single-line file:
5
+ * <versionKey> <level> <epoch>
6
+ *
7
+ * Version key is a plain concatenation of binary statuses (human-readable).
8
+ * Escalating backoff: level 1 = 24h, level 2 = 48h, level 3+ = 7d.
9
+ * Snooze resets when the version key changes (any binary constraint updated).
10
+ */
11
+ import { join } from "node:path";
12
+ import { readFileSync, writeFileSync, unlinkSync } from "node:fs";
13
+ import { STATE_DIR, ensureStateDir } from "./update-cache.js";
14
+ // ── Constants ──────────────────────────────────────────────────────
15
+ const SNOOZE_PATH = join(STATE_DIR, "update-snoozed");
16
+ const SNOOZE_DURATIONS_MS = {
17
+ 1: 24 * 60 * 60 * 1000, // 24h
18
+ 2: 48 * 60 * 60 * 1000, // 48h
19
+ };
20
+ const SNOOZE_DEFAULT_MS = 7 * 24 * 60 * 60 * 1000; // 7d for level 3+
21
+ // ── Functions ──────────────────────────────────────────────────────
22
+ /**
23
+ * Compute a human-readable version key from a cache payload.
24
+ * Format: "status1:status2:status3" with constraints appended for non-ok entries.
25
+ * Changes whenever any binary's status or constraint changes.
26
+ */
27
+ export function computeVersionKey(payload) {
28
+ const parts = [
29
+ payload.mthds_agent.s + (payload.mthds_agent.r ?? ""),
30
+ ];
31
+ if (payload.pipelex_agent) {
32
+ parts.push(payload.pipelex_agent.s + (payload.pipelex_agent.r ?? ""));
33
+ }
34
+ parts.push(payload.plxt.s + (payload.plxt.r ?? ""));
35
+ return parts.join(":");
36
+ }
37
+ /** Read current snooze state. Returns null if missing or corrupt. */
38
+ export function readSnooze() {
39
+ let content;
40
+ try {
41
+ content = readFileSync(SNOOZE_PATH, "utf-8").trim();
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ // Format: "<versionKey> <level> <epoch>"
47
+ // The version key may contain colons but not spaces, so split from the right.
48
+ const lastSpace = content.lastIndexOf(" ");
49
+ if (lastSpace === -1)
50
+ return null;
51
+ const epochStr = content.slice(lastSpace + 1);
52
+ const rest = content.slice(0, lastSpace);
53
+ const secondLastSpace = rest.lastIndexOf(" ");
54
+ if (secondLastSpace === -1)
55
+ return null;
56
+ const versionKey = rest.slice(0, secondLastSpace);
57
+ const levelStr = rest.slice(secondLastSpace + 1);
58
+ const level = parseInt(levelStr, 10);
59
+ const epoch = parseInt(epochStr, 10);
60
+ if (isNaN(level) || isNaN(epoch) || level <= 0 || !versionKey)
61
+ return null;
62
+ return { versionKey, level, epoch };
63
+ }
64
+ /**
65
+ * Write snooze state. Escalates level if same versionKey, resets if different.
66
+ */
67
+ export function writeSnooze(versionKey) {
68
+ ensureStateDir();
69
+ const existing = readSnooze();
70
+ let level;
71
+ if (existing && existing.versionKey === versionKey) {
72
+ level = existing.level + 1;
73
+ }
74
+ else {
75
+ level = 1;
76
+ }
77
+ const content = `${versionKey} ${level} ${Date.now()}\n`;
78
+ try {
79
+ writeFileSync(SNOOZE_PATH, content, "utf-8");
80
+ }
81
+ catch (err) {
82
+ const code = err.code;
83
+ process.stderr.write(`Warning: could not write snooze state (${code ?? String(err)}).\n`);
84
+ }
85
+ }
86
+ /** Check if snooze is active for the given versionKey. */
87
+ export function isSnoozed(versionKey) {
88
+ const state = readSnooze();
89
+ if (!state)
90
+ return false;
91
+ // Different version key means the constraint changed — snooze is invalid
92
+ if (state.versionKey !== versionKey)
93
+ return false;
94
+ const duration = SNOOZE_DURATIONS_MS[state.level] ?? SNOOZE_DEFAULT_MS;
95
+ const elapsed = Date.now() - state.epoch;
96
+ // Negative elapsed beyond 1 minute means clock skew — treat snooze as expired
97
+ return elapsed >= -60_000 && elapsed < duration;
98
+ }
99
+ /** Clear snooze file. */
100
+ export function clearSnooze() {
101
+ try {
102
+ unlinkSync(SNOOZE_PATH);
103
+ }
104
+ catch {
105
+ // File may not exist — that's fine
106
+ }
107
+ }
108
+ //# sourceMappingURL=snooze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snooze.js","sourceRoot":"","sources":["../../src/agent/snooze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Cache for update-check results.
3
+ *
4
+ * Manages ~/.mthds/state/last-update-check — a two-line file:
5
+ * Line 1: aggregate status (UP_TO_DATE or UPGRADE_AVAILABLE)
6
+ * Line 2: JSON payload with per-binary check results
7
+ *
8
+ * TTL is based on file mtime (like gstack), not an embedded timestamp.
9
+ * Split TTL: 60 min for UP_TO_DATE, 720 min for UPGRADE_AVAILABLE.
10
+ */
11
+ import type { VersionStatus } from "../installer/runtime/version-check.js";
12
+ export type AggregateStatus = "UP_TO_DATE" | "UPGRADE_AVAILABLE";
13
+ export interface BinaryCheckEntry {
14
+ /** Version status: "ok", "outdated", "missing", "unparseable" */
15
+ s: VersionStatus;
16
+ /** Installed version, or null */
17
+ v: string | null;
18
+ /** Required constraint (present when s !== "ok") */
19
+ r?: string;
20
+ }
21
+ export interface CachePayload {
22
+ mthds_agent: BinaryCheckEntry;
23
+ pipelex_agent?: BinaryCheckEntry;
24
+ plxt: BinaryCheckEntry;
25
+ }
26
+ export interface CacheResult {
27
+ aggregate: AggregateStatus;
28
+ payload: CachePayload;
29
+ }
30
+ export declare const STATE_DIR: string;
31
+ /** Ensure the state directory exists. */
32
+ export declare function ensureStateDir(): void;
33
+ /** Compute aggregate status from a payload. */
34
+ export declare function computeAggregate(payload: CachePayload): AggregateStatus;
35
+ /**
36
+ * Read the update-check cache.
37
+ * Returns null if the file is missing, corrupt, or expired.
38
+ */
39
+ export declare function readCache(): CacheResult | null;
40
+ /** Write cache. Creates state directory if needed. */
41
+ export declare function writeCache(result: CacheResult): void;
42
+ /** Delete cache file (used by --force and after upgrade). */
43
+ export declare function clearCache(): void;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Cache for update-check results.
3
+ *
4
+ * Manages ~/.mthds/state/last-update-check — a two-line file:
5
+ * Line 1: aggregate status (UP_TO_DATE or UPGRADE_AVAILABLE)
6
+ * Line 2: JSON payload with per-binary check results
7
+ *
8
+ * TTL is based on file mtime (like gstack), not an embedded timestamp.
9
+ * Split TTL: 60 min for UP_TO_DATE, 720 min for UPGRADE_AVAILABLE.
10
+ */
11
+ import { join } from "node:path";
12
+ import { homedir } from "node:os";
13
+ import { mkdirSync, readFileSync, writeFileSync, unlinkSync, statSync, } from "node:fs";
14
+ // ── Constants ──────────────────────────────────────────────────────
15
+ export const STATE_DIR = join(homedir(), ".mthds", "state");
16
+ const CACHE_PATH = join(STATE_DIR, "last-update-check");
17
+ const TTL_UP_TO_DATE_MS = 60 * 60 * 1000; // 60 min
18
+ const TTL_UPGRADE_AVAILABLE_MS = 720 * 60 * 1000; // 720 min (12 hours)
19
+ const VALID_AGGREGATES = new Set([
20
+ "UP_TO_DATE",
21
+ "UPGRADE_AVAILABLE",
22
+ ]);
23
+ // ── Validation ──────────────────────────────────────────────────────
24
+ function isValidPayload(p) {
25
+ if (!p || typeof p !== "object")
26
+ return false;
27
+ const obj = p;
28
+ // mthds_agent and plxt are always required
29
+ for (const key of ["mthds_agent", "plxt"]) {
30
+ const entry = obj[key];
31
+ if (!entry || typeof entry !== "object")
32
+ return false;
33
+ if (typeof entry.s !== "string")
34
+ return false;
35
+ }
36
+ // pipelex_agent is optional, but if present must be valid
37
+ if (obj.pipelex_agent !== undefined) {
38
+ const entry = obj.pipelex_agent;
39
+ if (!entry || typeof entry !== "object")
40
+ return false;
41
+ if (typeof entry.s !== "string")
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+ // ── Functions ──────────────────────────────────────────────────────
47
+ /** Ensure the state directory exists. */
48
+ export function ensureStateDir() {
49
+ mkdirSync(STATE_DIR, { recursive: true });
50
+ }
51
+ /** Compute aggregate status from a payload. */
52
+ export function computeAggregate(payload) {
53
+ const entries = [payload.mthds_agent, payload.plxt];
54
+ if (payload.pipelex_agent)
55
+ entries.push(payload.pipelex_agent);
56
+ // Treat "unparseable" same as "ok" — the binary exists, we just can't parse
57
+ // its version. Treating it as UPGRADE_AVAILABLE would cause an infinite loop:
58
+ // preamble says upgrade available -> upgrade skips unparseable -> repeat.
59
+ return entries.every((e) => e.s === "ok" || e.s === "unparseable")
60
+ ? "UP_TO_DATE"
61
+ : "UPGRADE_AVAILABLE";
62
+ }
63
+ /**
64
+ * Read the update-check cache.
65
+ * Returns null if the file is missing, corrupt, or expired.
66
+ */
67
+ export function readCache() {
68
+ // Stat first so worst-case TOCTOU treats fresh data as stale (safe direction)
69
+ let mtimeMs;
70
+ let content;
71
+ try {
72
+ mtimeMs = statSync(CACHE_PATH).mtimeMs;
73
+ content = readFileSync(CACHE_PATH, "utf-8");
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ const lines = content.split("\n");
79
+ if (lines.length < 2)
80
+ return null;
81
+ const aggregate = lines[0].trim();
82
+ if (!VALID_AGGREGATES.has(aggregate))
83
+ return null;
84
+ let payload;
85
+ try {
86
+ const parsed = JSON.parse(lines[1]);
87
+ if (!isValidPayload(parsed))
88
+ return null;
89
+ payload = parsed;
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ // Check TTL based on file mtime
95
+ const ttl = aggregate === "UP_TO_DATE"
96
+ ? TTL_UP_TO_DATE_MS
97
+ : TTL_UPGRADE_AVAILABLE_MS;
98
+ const age = Date.now() - mtimeMs;
99
+ // Negative age beyond 1 minute means clock skew — treat as expired
100
+ if (age < -60_000 || age > ttl)
101
+ return null;
102
+ return { aggregate: aggregate, payload };
103
+ }
104
+ /** Write cache. Creates state directory if needed. */
105
+ export function writeCache(result) {
106
+ try {
107
+ ensureStateDir();
108
+ const content = result.aggregate + "\n" + JSON.stringify(result.payload) + "\n";
109
+ writeFileSync(CACHE_PATH, content, "utf-8");
110
+ }
111
+ catch (err) {
112
+ const code = err.code;
113
+ process.stderr.write(`Warning: could not write update-check cache (${code ?? String(err)}). Check will run again next time.\n`);
114
+ }
115
+ }
116
+ /** Delete cache file (used by --force and after upgrade). */
117
+ export function clearCache() {
118
+ try {
119
+ unlinkSync(CACHE_PATH);
120
+ }
121
+ catch {
122
+ // File may not exist — that's fine
123
+ }
124
+ }
125
+ //# sourceMappingURL=update-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-cache.js","sourceRoot":"","sources":["../../src/agent/update-cache.ts"],"names":[],"mappings":"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"}
package/dist/agent-cli.js CHANGED
@@ -20,12 +20,15 @@ import { registerPipelexRunnerCommands } from "./agent/commands/pipelex-commands
20
20
  import { passthroughToPipelexAgent } from "./agent/commands/pipelex-passthrough.js";
21
21
  import { registerPlxtCommands } from "./agent/commands/plxt.js";
22
22
  import { agentDoctor } from "./agent/commands/doctor.js";
23
+ import { agentUpdateCheck } from "./agent/commands/update-check.js";
24
+ import { agentUpgrade } from "./agent/commands/upgrade.js";
23
25
  import { agentConfigGet, agentConfigList, agentConfigSet } from "./agent/commands/config.js";
24
26
  import { agentInstall } from "./agent/commands/install.js";
25
27
  import { agentPublish } from "./agent/commands/publish.js";
26
28
  import { agentShare } from "./agent/commands/share.js";
27
- import { isPipelexInstalled } from "./installer/runtime/check.js";
28
- import { installPipelexSync } from "./installer/runtime/installer.js";
29
+ import { checkBinaryVersion } from "./installer/runtime/version-check.js";
30
+ import { uvToolInstallSync } from "./installer/runtime/installer.js";
31
+ import { BINARY_RECOVERY, buildInstallCommand } from "./agent/binaries.js";
29
32
  import { agentPackageInit, agentPackageList, agentPackageValidate } from "./agent/commands/package.js";
30
33
  import { createRunner } from "./runners/registry.js";
31
34
  import { Runners, RUNNER_NAMES } from "./runners/types.js";
@@ -213,27 +216,42 @@ runnerSetup
213
216
  .description("Install the Pipelex runner")
214
217
  .exitOverride()
215
218
  .action(() => {
216
- if (isPipelexInstalled()) {
217
- agentSuccess({ success: true, already_installed: true, message: "pipelex is already installed" });
219
+ const recovery = BINARY_RECOVERY["pipelex"];
220
+ const check = checkBinaryVersion(recovery);
221
+ if (check.status === "ok") {
222
+ agentSuccess({ success: true, already_installed: true, message: "pipelex is already installed and up to date" });
218
223
  return;
219
224
  }
225
+ const action = check.status === "outdated" ? "upgrade" : "install";
220
226
  try {
221
- installPipelexSync();
227
+ uvToolInstallSync(recovery.uv_package, recovery.version_constraint);
222
228
  }
223
229
  catch (err) {
224
230
  const msg = err instanceof Error ? err.message : String(err);
225
- agentError(`Failed to install pipelex: ${msg}`, "InstallError", {
231
+ agentError(`Failed to ${action} pipelex: ${msg}`, "InstallError", {
226
232
  error_domain: AGENT_ERROR_DOMAINS.INSTALL,
227
- hint: "Install manually: https://pipelex.com",
233
+ hint: `${action === "upgrade" ? "Upgrade" : "Install"} manually: ${buildInstallCommand(recovery)}`,
228
234
  });
229
235
  }
230
- if (!isPipelexInstalled()) {
231
- agentError("pipelex was installed but is not reachable in PATH.", "InstallError", {
236
+ const postCheck = checkBinaryVersion(recovery);
237
+ if (postCheck.status !== "ok") {
238
+ const detail = postCheck.status === "missing"
239
+ ? "pipelex was installed but is not reachable in PATH."
240
+ : `pipelex was ${action === "upgrade" ? "upgraded" : "installed"} but version check failed (status: ${postCheck.status}, installed: ${postCheck.installed_version}, needs: ${recovery.version_constraint}).`;
241
+ const hint = postCheck.status === "missing"
242
+ ? "Restart your shell or add the install directory to your PATH."
243
+ : `${action === "upgrade" ? "Upgrade" : "Install"} manually: ${buildInstallCommand(recovery)}`;
244
+ agentError(detail, "InstallError", {
232
245
  error_domain: AGENT_ERROR_DOMAINS.INSTALL,
233
- hint: "Restart your shell or add the install directory to your PATH.",
246
+ hint,
234
247
  });
235
248
  }
236
- agentSuccess({ success: true, already_installed: false, message: "pipelex installed successfully" });
249
+ agentSuccess({
250
+ success: true,
251
+ already_installed: action === "upgrade",
252
+ message: action === "upgrade" ? "pipelex upgraded successfully" : "pipelex installed successfully",
253
+ installed_version: postCheck.installed_version,
254
+ });
237
255
  });
238
256
  runnerSetup
239
257
  .command("api")
@@ -257,6 +275,24 @@ program
257
275
  .action(async () => {
258
276
  await agentDoctor();
259
277
  });
278
+ // ── mthds-agent update-check ──────────────────────────────────────
279
+ program
280
+ .command("update-check")
281
+ .description("Check if binary dependencies need updating")
282
+ .option("--force", "Ignore cache and snooze, re-check all binaries")
283
+ .option("--snooze", "Snooze upgrade reminders for this version set")
284
+ .exitOverride()
285
+ .action(async (opts) => {
286
+ await agentUpdateCheck(opts);
287
+ });
288
+ // ── mthds-agent upgrade ───────────────────────────────────────────
289
+ program
290
+ .command("upgrade")
291
+ .description("Upgrade Python binary dependencies (pipelex, plxt)")
292
+ .exitOverride()
293
+ .action(async () => {
294
+ await agentUpgrade();
295
+ });
260
296
  // ── Runner dispatch ──────────────────────────────────────────────────
261
297
  // API runner: register per-command handlers with full arg parsing.
262
298
  // Pipelex runner: register passthrough stubs that forward to pipelex-agent.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"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"}