poly-weaver 0.9.3 → 0.9.4
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/auto-update/check-agent-updates.d.ts +28 -0
- package/dist/auto-update/check-agent-updates.d.ts.map +1 -0
- package/dist/auto-update/check-agent-updates.js +130 -0
- package/dist/auto-update/check-agent-updates.js.map +1 -0
- package/dist/auto-update/detect-agents.d.ts +77 -0
- package/dist/auto-update/detect-agents.d.ts.map +1 -0
- package/dist/auto-update/detect-agents.js +333 -0
- package/dist/auto-update/detect-agents.js.map +1 -0
- package/dist/auto-update/gate.d.ts +20 -0
- package/dist/auto-update/gate.d.ts.map +1 -0
- package/dist/auto-update/gate.js +85 -0
- package/dist/auto-update/gate.js.map +1 -0
- package/dist/auto-update/install-agents.d.ts +12 -0
- package/dist/auto-update/install-agents.d.ts.map +1 -0
- package/dist/auto-update/install-agents.js +75 -0
- package/dist/auto-update/install-agents.js.map +1 -0
- package/dist/auto-update/install-method.d.ts +2 -0
- package/dist/auto-update/install-method.d.ts.map +1 -0
- package/dist/auto-update/install-method.js +16 -0
- package/dist/auto-update/install-method.js.map +1 -0
- package/dist/auto-update/semver.d.ts +9 -0
- package/dist/auto-update/semver.d.ts.map +1 -0
- package/dist/auto-update/semver.js +72 -0
- package/dist/auto-update/semver.js.map +1 -0
- package/dist/auto-update/timeouts.d.ts +2 -0
- package/dist/auto-update/timeouts.d.ts.map +1 -0
- package/dist/auto-update/timeouts.js +2 -0
- package/dist/auto-update/timeouts.js.map +1 -0
- package/dist/auto-update/tui.d.ts +38 -0
- package/dist/auto-update/tui.d.ts.map +1 -0
- package/dist/auto-update/tui.js +140 -0
- package/dist/auto-update/tui.js.map +1 -0
- package/dist/auto-update/winget-retry.d.ts +22 -0
- package/dist/auto-update/winget-retry.d.ts.map +1 -0
- package/dist/auto-update/winget-retry.js +40 -0
- package/dist/auto-update/winget-retry.js.map +1 -0
- package/dist/cli.js +37 -25
- package/dist/cli.js.map +1 -1
- package/dist/preflight.d.ts +1 -40
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +1 -135
- package/dist/preflight.js.map +1 -1
- package/dist/preview-panel.d.ts +2 -0
- package/dist/preview-panel.d.ts.map +1 -1
- package/dist/preview-panel.js +28 -7
- package/dist/preview-panel.js.map +1 -1
- package/dist/providers/option-catalog.d.ts.map +1 -1
- package/dist/providers/option-catalog.js +42 -1
- package/dist/providers/option-catalog.js.map +1 -1
- package/dist/resume-tui.d.ts +3 -3
- package/dist/resume-tui.d.ts.map +1 -1
- package/dist/resume-tui.js +4 -14
- package/dist/resume-tui.js.map +1 -1
- package/dist/startup-tui.d.ts +5 -11
- package/dist/startup-tui.d.ts.map +1 -1
- package/dist/startup-tui.js +8 -28
- package/dist/startup-tui.js.map +1 -1
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +20 -6
- package/dist/update-check.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { UpdateInfo } from "../update-check.js";
|
|
2
|
+
import { type AgentName, type DetectAgentsResult, type ExecAsync, type InstallMethod } from "./detect-agents.js";
|
|
3
|
+
export interface AgentUpdateInfo {
|
|
4
|
+
kind: "agent";
|
|
5
|
+
name: AgentName;
|
|
6
|
+
productName: string;
|
|
7
|
+
current: string;
|
|
8
|
+
latest: string;
|
|
9
|
+
installMethod: InstallMethod;
|
|
10
|
+
}
|
|
11
|
+
export interface PolyWeaverUpdateInfo {
|
|
12
|
+
kind: "poly-weaver";
|
|
13
|
+
current: string;
|
|
14
|
+
latest: string;
|
|
15
|
+
installMethod: "npm";
|
|
16
|
+
}
|
|
17
|
+
export type OutdatedTarget = PolyWeaverUpdateInfo | AgentUpdateInfo;
|
|
18
|
+
export interface CheckAllUpdatesDeps {
|
|
19
|
+
checkForUpdate?: () => Promise<UpdateInfo | null>;
|
|
20
|
+
execAsync?: ExecAsync;
|
|
21
|
+
platform?: NodeJS.Platform;
|
|
22
|
+
stderr?: Pick<NodeJS.WriteStream, "write" | "isTTY">;
|
|
23
|
+
wingetRetrySleep?: (ms: number) => Promise<void>;
|
|
24
|
+
wingetRetryRandom?: () => number;
|
|
25
|
+
}
|
|
26
|
+
export declare function checkAllUpdates(detected: DetectAgentsResult, isPolyWeaverGlobal: boolean, deps?: CheckAllUpdatesDeps): Promise<OutdatedTarget[]>;
|
|
27
|
+
export declare function parseWingetShowVersion(stdout: string): string | undefined;
|
|
28
|
+
//# sourceMappingURL=check-agent-updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-agent-updates.d.ts","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,OAAO,EAML,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,kBAAkB,EAAE,OAAO,EAC3B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CA4C3B;AA2ED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { checkForUpdate as checkForPolyWeaverUpdate } from "../update-check.js";
|
|
2
|
+
import { compareVersions, parseVersion } from "../providers/version.js";
|
|
3
|
+
import { UPDATE_CHECK_TIMEOUT_MS } from "./timeouts.js";
|
|
4
|
+
import { isKilledByParent, wingetExecWithRetry } from "./winget-retry.js";
|
|
5
|
+
import { AGENT_ORDER, AGENT_PACKAGE_NPM, AGENT_PACKAGE_WINGET, AGENT_PRODUCT_NAME, } from "./detect-agents.js";
|
|
6
|
+
export async function checkAllUpdates(detected, isPolyWeaverGlobal, deps = {}) {
|
|
7
|
+
const checkForUpdate = deps.checkForUpdate ?? checkForPolyWeaverUpdate;
|
|
8
|
+
const stderr = deps.stderr ?? process.stderr;
|
|
9
|
+
const hasAgent = detected.agents.length > 0;
|
|
10
|
+
const showProgress = stderr.isTTY === true && (isPolyWeaverGlobal || hasAgent);
|
|
11
|
+
if (showProgress) {
|
|
12
|
+
// The trailing glyph is U+2026, not three periods.
|
|
13
|
+
stderr.write("Checking for updates…");
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const byName = new Map(detected.agents.map((agent) => [agent.name, agent]));
|
|
17
|
+
const updatePromises = [
|
|
18
|
+
isPolyWeaverGlobal ? checkForUpdate() : Promise.resolve(null),
|
|
19
|
+
...AGENT_ORDER.map((name) => {
|
|
20
|
+
const agent = byName.get(name);
|
|
21
|
+
return agent ? checkAgentUpdate(agent, deps) : Promise.resolve(null);
|
|
22
|
+
}),
|
|
23
|
+
];
|
|
24
|
+
const [pwInfo, ...agentUpdates] = await Promise.all(updatePromises);
|
|
25
|
+
const outdated = [];
|
|
26
|
+
if (pwInfo) {
|
|
27
|
+
outdated.push({
|
|
28
|
+
kind: "poly-weaver",
|
|
29
|
+
current: pwInfo.current,
|
|
30
|
+
latest: pwInfo.latest,
|
|
31
|
+
installMethod: "npm",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
for (const update of agentUpdates) {
|
|
35
|
+
if (update)
|
|
36
|
+
outdated.push(update);
|
|
37
|
+
}
|
|
38
|
+
return outdated;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
if (showProgress)
|
|
42
|
+
stderr.write("\r\x1b[2K");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function checkAgentUpdate(agent, deps) {
|
|
46
|
+
const installMethod = pickManager(agent);
|
|
47
|
+
if (installMethod === null)
|
|
48
|
+
return null;
|
|
49
|
+
const latest = installMethod === "npm"
|
|
50
|
+
? await queryNpmLatest(agent.name, deps)
|
|
51
|
+
: await queryWingetLatest(agent.name, deps);
|
|
52
|
+
return buildAgentUpdate(agent, latest, installMethod);
|
|
53
|
+
}
|
|
54
|
+
function pickManager(agent) {
|
|
55
|
+
if (agent.activeManager === "npm")
|
|
56
|
+
return "npm";
|
|
57
|
+
if (agent.activeManager === "winget")
|
|
58
|
+
return "winget";
|
|
59
|
+
if (agent.managedBy.has("npm"))
|
|
60
|
+
return "npm";
|
|
61
|
+
if (agent.managedBy.has("winget"))
|
|
62
|
+
return "winget";
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function buildAgentUpdate(agent, latest, installMethod) {
|
|
66
|
+
if (!latest)
|
|
67
|
+
return null;
|
|
68
|
+
if (compareVersions(agent.version, latest) >= 0)
|
|
69
|
+
return null;
|
|
70
|
+
return {
|
|
71
|
+
kind: "agent",
|
|
72
|
+
name: agent.name,
|
|
73
|
+
productName: AGENT_PRODUCT_NAME[agent.name],
|
|
74
|
+
current: agent.version,
|
|
75
|
+
latest,
|
|
76
|
+
installMethod,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async function queryNpmLatest(name, deps) {
|
|
80
|
+
const execAsync = deps.execAsync ?? defaultExecAsync;
|
|
81
|
+
try {
|
|
82
|
+
const result = await execAsync(`npm view ${AGENT_PACKAGE_NPM[name]} version`, {
|
|
83
|
+
timeout: UPDATE_CHECK_TIMEOUT_MS,
|
|
84
|
+
});
|
|
85
|
+
return parseVersion(result.stdout);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function queryWingetLatest(name, deps) {
|
|
92
|
+
const execAsync = deps.execAsync ?? defaultExecAsync;
|
|
93
|
+
const id = AGENT_PACKAGE_WINGET[name];
|
|
94
|
+
try {
|
|
95
|
+
const result = await wingetExecWithRetry(`winget show --id ${id} --exact --accept-source-agreements --disable-interactivity`, { timeout: UPDATE_CHECK_TIMEOUT_MS }, (err) => !isKilledByParent(err) && parseWingetShowVersion(stdoutFromError(err)) === undefined, { execAsync, sleep: deps.wingetRetrySleep, random: deps.wingetRetryRandom });
|
|
96
|
+
return parseWingetShowVersion(result.stdout);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return parseWingetShowVersion(stdoutFromError(err));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function parseWingetShowVersion(stdout) {
|
|
103
|
+
const match = /^Version:\s+(\S+)/m.exec(stdout);
|
|
104
|
+
if (!match)
|
|
105
|
+
return undefined;
|
|
106
|
+
return parseVersion(match[1]);
|
|
107
|
+
}
|
|
108
|
+
async function defaultExecAsync(command, options) {
|
|
109
|
+
const { exec } = await import("node:child_process");
|
|
110
|
+
const { promisify } = await import("node:util");
|
|
111
|
+
const result = await promisify(exec)(command, options);
|
|
112
|
+
return {
|
|
113
|
+
stdout: bufferToString(result.stdout),
|
|
114
|
+
stderr: bufferToString(result.stderr),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function stdoutFromError(err) {
|
|
118
|
+
if (err && typeof err === "object" && "stdout" in err) {
|
|
119
|
+
const stdout = err.stdout;
|
|
120
|
+
if (typeof stdout === "string")
|
|
121
|
+
return stdout;
|
|
122
|
+
if (Buffer.isBuffer(stdout))
|
|
123
|
+
return stdout.toString();
|
|
124
|
+
}
|
|
125
|
+
return "";
|
|
126
|
+
}
|
|
127
|
+
function bufferToString(value) {
|
|
128
|
+
return typeof value === "string" ? value : value.toString();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=check-agent-updates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-agent-updates.js","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type ExecFileOptions, type ExecOptions } from "node:child_process";
|
|
2
|
+
export type AgentName = "claude" | "codex" | "copilot";
|
|
3
|
+
export type InstallMethod = "npm" | "winget";
|
|
4
|
+
export type ActiveManager = InstallMethod | "unknown";
|
|
5
|
+
export declare const AGENT_ORDER: readonly AgentName[];
|
|
6
|
+
export declare const AGENT_PACKAGE_NPM: Record<AgentName, string>;
|
|
7
|
+
export declare const AGENT_PACKAGE_WINGET: Record<AgentName, string>;
|
|
8
|
+
export declare const AGENT_PRODUCT_NAME: Record<AgentName, string>;
|
|
9
|
+
export declare const AGENT_INSTALL_HINT: Record<AgentName, string>;
|
|
10
|
+
export interface AgentDetection {
|
|
11
|
+
name: AgentName;
|
|
12
|
+
version: string;
|
|
13
|
+
managedBy: Set<InstallMethod>;
|
|
14
|
+
activeManager: ActiveManager;
|
|
15
|
+
}
|
|
16
|
+
export type NodePtyResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
export interface DetectAgentsResult {
|
|
23
|
+
nodePty: NodePtyResult;
|
|
24
|
+
agents: AgentDetection[];
|
|
25
|
+
}
|
|
26
|
+
export interface PreflightNeeds {
|
|
27
|
+
needClaude: boolean;
|
|
28
|
+
needCodex: boolean;
|
|
29
|
+
needCopilot: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface PreflightResult {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
errors: string[];
|
|
34
|
+
versions: Map<string, string>;
|
|
35
|
+
}
|
|
36
|
+
export type ExecAsync = (command: string, options?: ExecOptions) => Promise<{
|
|
37
|
+
stdout: string;
|
|
38
|
+
stderr: string;
|
|
39
|
+
}>;
|
|
40
|
+
export type ExecFileAsync = (file: string, args?: string[], options?: ExecFileOptions) => Promise<{
|
|
41
|
+
stdout: string;
|
|
42
|
+
stderr: string;
|
|
43
|
+
}>;
|
|
44
|
+
export interface DetectAgentsDeps {
|
|
45
|
+
execAsync?: ExecAsync;
|
|
46
|
+
execFileAsync?: ExecFileAsync;
|
|
47
|
+
importNodePty?: () => Promise<unknown>;
|
|
48
|
+
platform?: NodeJS.Platform;
|
|
49
|
+
wingetRetrySleep?: (ms: number) => Promise<void>;
|
|
50
|
+
wingetRetryRandom?: () => number;
|
|
51
|
+
}
|
|
52
|
+
export declare function detectAgents(deps?: DetectAgentsDeps): Promise<DetectAgentsResult>;
|
|
53
|
+
export declare function computePreflightNeeds(opts: {
|
|
54
|
+
planner: string;
|
|
55
|
+
reviewer: string;
|
|
56
|
+
implementor: string;
|
|
57
|
+
simplifier?: string;
|
|
58
|
+
interviewer?: string;
|
|
59
|
+
planOnly?: boolean;
|
|
60
|
+
}): PreflightNeeds;
|
|
61
|
+
export declare function validateCopilotVersion(version: string | undefined): {
|
|
62
|
+
ok: true;
|
|
63
|
+
version: string;
|
|
64
|
+
} | {
|
|
65
|
+
ok: false;
|
|
66
|
+
error: string;
|
|
67
|
+
};
|
|
68
|
+
export declare function runPreflight(opts: {
|
|
69
|
+
needClaude: boolean;
|
|
70
|
+
needCodex: boolean;
|
|
71
|
+
needCopilot: boolean;
|
|
72
|
+
}, deps?: DetectAgentsDeps): Promise<PreflightResult>;
|
|
73
|
+
export declare function detectCliVersion(command: string, args: string[], deps?: DetectAgentsDeps): Promise<string | undefined | false>;
|
|
74
|
+
export declare function checkNodePty(deps?: DetectAgentsDeps): Promise<NodePtyResult>;
|
|
75
|
+
export declare function parseNpmGlobalPackages(stdout: string): Set<string>;
|
|
76
|
+
export declare function wingetOutputContainsId(stdout: string, id: string): boolean;
|
|
77
|
+
//# sourceMappingURL=detect-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-agents.d.ts","sourceRoot":"","sources":["../../src/auto-update/detect-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { exec, execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { compareVersions, parseVersion } from "../providers/version.js";
|
|
4
|
+
import { UPDATE_CHECK_TIMEOUT_MS } from "./timeouts.js";
|
|
5
|
+
import { isKilledByParent, wingetExecWithRetry } from "./winget-retry.js";
|
|
6
|
+
const execAsyncDefault = promisify(exec);
|
|
7
|
+
const execFileAsyncDefault = promisify(execFile);
|
|
8
|
+
export const AGENT_ORDER = ["claude", "codex", "copilot"];
|
|
9
|
+
export const AGENT_PACKAGE_NPM = {
|
|
10
|
+
claude: "@anthropic-ai/claude-code",
|
|
11
|
+
codex: "@openai/codex",
|
|
12
|
+
copilot: "@github/copilot",
|
|
13
|
+
};
|
|
14
|
+
export const AGENT_PACKAGE_WINGET = {
|
|
15
|
+
claude: "Anthropic.ClaudeCode",
|
|
16
|
+
codex: "OpenAI.Codex",
|
|
17
|
+
copilot: "GitHub.Copilot",
|
|
18
|
+
};
|
|
19
|
+
export const AGENT_PRODUCT_NAME = {
|
|
20
|
+
claude: "Claude Code",
|
|
21
|
+
codex: "Codex CLI",
|
|
22
|
+
copilot: "GitHub Copilot CLI",
|
|
23
|
+
};
|
|
24
|
+
export const AGENT_INSTALL_HINT = {
|
|
25
|
+
claude: "Claude Code CLI not found. Install it:\n" +
|
|
26
|
+
` npm install -g ${AGENT_PACKAGE_NPM.claude}\n` +
|
|
27
|
+
` or: winget install ${AGENT_PACKAGE_WINGET.claude}`,
|
|
28
|
+
codex: "Codex CLI not found. Install it:\n" +
|
|
29
|
+
` npm install -g ${AGENT_PACKAGE_NPM.codex}\n` +
|
|
30
|
+
` or: winget install ${AGENT_PACKAGE_WINGET.codex}`,
|
|
31
|
+
copilot: "GitHub Copilot CLI not found. Install it:\n" +
|
|
32
|
+
` npm install -g ${AGENT_PACKAGE_NPM.copilot}\n` +
|
|
33
|
+
` or: winget install ${AGENT_PACKAGE_WINGET.copilot}`,
|
|
34
|
+
};
|
|
35
|
+
export async function detectAgents(deps = {}) {
|
|
36
|
+
const nodePty = await checkNodePty(deps);
|
|
37
|
+
if (!nodePty.ok) {
|
|
38
|
+
return { nodePty, agents: [] };
|
|
39
|
+
}
|
|
40
|
+
const npmPackagesPromise = detectGlobalNpmPackages(deps);
|
|
41
|
+
const wingetManagedPromises = new Map(AGENT_ORDER.map((name) => [name, detectWingetManagedAgent(name, deps)]));
|
|
42
|
+
const cliVersionPromises = new Map(AGENT_ORDER.map((name) => [name, detectAgentCli(name, deps)]));
|
|
43
|
+
const getNpmPrefix = createNpmPrefixResolver(deps);
|
|
44
|
+
const activeManagerPromises = new Map(AGENT_ORDER.map((name) => [
|
|
45
|
+
name,
|
|
46
|
+
resolveActiveManager(name, deps, getNpmPrefix),
|
|
47
|
+
]));
|
|
48
|
+
const agents = [];
|
|
49
|
+
for (const name of AGENT_ORDER) {
|
|
50
|
+
const detected = await cliVersionPromises.get(name);
|
|
51
|
+
if (!detected.ok)
|
|
52
|
+
continue;
|
|
53
|
+
const activeManager = await activeManagerPromises.get(name);
|
|
54
|
+
if (activeManager !== "unknown") {
|
|
55
|
+
agents.push({
|
|
56
|
+
name,
|
|
57
|
+
version: detected.version,
|
|
58
|
+
managedBy: new Set([activeManager]),
|
|
59
|
+
activeManager,
|
|
60
|
+
});
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const [npmPackages, wingetManaged] = await Promise.all([
|
|
64
|
+
npmPackagesPromise,
|
|
65
|
+
wingetManagedPromises.get(name),
|
|
66
|
+
]);
|
|
67
|
+
const managedBy = new Set();
|
|
68
|
+
if (npmPackages.has(AGENT_PACKAGE_NPM[name]))
|
|
69
|
+
managedBy.add("npm");
|
|
70
|
+
if (wingetManaged)
|
|
71
|
+
managedBy.add("winget");
|
|
72
|
+
agents.push({
|
|
73
|
+
name,
|
|
74
|
+
version: detected.version,
|
|
75
|
+
managedBy,
|
|
76
|
+
activeManager,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return { nodePty, agents };
|
|
80
|
+
}
|
|
81
|
+
export function computePreflightNeeds(opts) {
|
|
82
|
+
const check = (cli) => opts.planner === cli ||
|
|
83
|
+
opts.reviewer === cli ||
|
|
84
|
+
(!opts.planOnly && opts.implementor === cli) ||
|
|
85
|
+
(!opts.planOnly && opts.simplifier === cli) ||
|
|
86
|
+
(opts.interviewer !== undefined && opts.interviewer === cli);
|
|
87
|
+
return {
|
|
88
|
+
needClaude: check("claude"),
|
|
89
|
+
needCodex: check("codex"),
|
|
90
|
+
needCopilot: check("copilot"),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function validateCopilotVersion(version) {
|
|
94
|
+
if (!version) {
|
|
95
|
+
return {
|
|
96
|
+
ok: false,
|
|
97
|
+
error: "Could not detect GitHub Copilot CLI version.\n" +
|
|
98
|
+
"Poly-weaver only runs on Copilot CLI < 1.0.35 or >= 1.0.51.\n" +
|
|
99
|
+
`To upgrade on Windows: winget upgrade ${AGENT_PACKAGE_WINGET.copilot}\n` +
|
|
100
|
+
"For other platforms: https://docs.github.com/copilot/github-copilot-in-the-cli",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const unsupported = compareVersions(version, "1.0.35") >= 0 &&
|
|
104
|
+
compareVersions(version, "1.0.50") <= 0;
|
|
105
|
+
if (unsupported) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
error: `GitHub Copilot CLI version ${version} is not supported by poly-weaver.\n` +
|
|
109
|
+
"Reason: this CLI version range has incompatible session-ID flags.\n" +
|
|
110
|
+
"Supported versions: < 1.0.35 or >= 1.0.51.\n" +
|
|
111
|
+
`To upgrade on Windows: winget upgrade ${AGENT_PACKAGE_WINGET.copilot}\n` +
|
|
112
|
+
"For other platforms: https://docs.github.com/copilot/github-copilot-in-the-cli",
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return { ok: true, version };
|
|
116
|
+
}
|
|
117
|
+
export async function runPreflight(opts, deps = {}) {
|
|
118
|
+
const errors = [];
|
|
119
|
+
const versions = new Map();
|
|
120
|
+
const nodePty = await checkNodePty(deps);
|
|
121
|
+
if (!nodePty.ok)
|
|
122
|
+
errors.push(nodePty.error);
|
|
123
|
+
const checks = [];
|
|
124
|
+
if (opts.needClaude) {
|
|
125
|
+
checks.push(detectCliVersion("claude", ["--version"], deps).then((version) => {
|
|
126
|
+
if (version === false) {
|
|
127
|
+
errors.push(AGENT_INSTALL_HINT.claude);
|
|
128
|
+
}
|
|
129
|
+
else if (version) {
|
|
130
|
+
versions.set("claude", version);
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
if (opts.needCodex) {
|
|
135
|
+
checks.push(detectCliVersion("codex", ["--version"], deps).then((version) => {
|
|
136
|
+
if (version === false) {
|
|
137
|
+
errors.push(AGENT_INSTALL_HINT.codex);
|
|
138
|
+
}
|
|
139
|
+
else if (version) {
|
|
140
|
+
versions.set("codex", version);
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
if (opts.needCopilot) {
|
|
145
|
+
checks.push(detectCliVersion("copilot", ["--version"], deps).then((version) => {
|
|
146
|
+
if (version === false) {
|
|
147
|
+
errors.push(AGENT_INSTALL_HINT.copilot);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const validation = validateCopilotVersion(version);
|
|
151
|
+
if (validation.ok) {
|
|
152
|
+
versions.set("copilot", validation.version);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
errors.push(validation.error);
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
await Promise.all(checks);
|
|
160
|
+
return {
|
|
161
|
+
ok: errors.length === 0,
|
|
162
|
+
errors,
|
|
163
|
+
versions,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
export async function detectCliVersion(command, args, deps = {}) {
|
|
167
|
+
const execAsync = deps.execAsync ?? execAsyncDefault;
|
|
168
|
+
const execFileAsync = deps.execFileAsync ?? execFileAsyncDefault;
|
|
169
|
+
const platform = deps.platform ?? process.platform;
|
|
170
|
+
try {
|
|
171
|
+
let stdout;
|
|
172
|
+
if (platform === "win32") {
|
|
173
|
+
// On Windows, globally-installed npm packages are .cmd shims that
|
|
174
|
+
// execFile cannot resolve without a shell.
|
|
175
|
+
const result = await execAsync(`${command} ${args.join(" ")}`, {
|
|
176
|
+
timeout: UPDATE_CHECK_TIMEOUT_MS,
|
|
177
|
+
});
|
|
178
|
+
stdout = result.stdout;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
const result = await execFileAsync(command, args, { timeout: UPDATE_CHECK_TIMEOUT_MS });
|
|
182
|
+
stdout = result.stdout;
|
|
183
|
+
}
|
|
184
|
+
return parseVersion(stdout) ?? undefined;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export async function checkNodePty(deps = {}) {
|
|
191
|
+
try {
|
|
192
|
+
const importNodePty = deps.importNodePty ?? (() => import("node-pty"));
|
|
193
|
+
await importNodePty();
|
|
194
|
+
return { ok: true };
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
error: "node-pty is not loadable. Ensure native dependencies are built:\n" +
|
|
200
|
+
" npm rebuild node-pty",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async function detectAgentCli(name, deps) {
|
|
205
|
+
const version = await detectCliVersion(name, ["--version"], deps);
|
|
206
|
+
if (version === false || version === undefined)
|
|
207
|
+
return { ok: false };
|
|
208
|
+
if (name === "copilot") {
|
|
209
|
+
const validation = validateCopilotVersion(version);
|
|
210
|
+
if (!validation.ok)
|
|
211
|
+
return { ok: false };
|
|
212
|
+
return { ok: true, version: validation.version };
|
|
213
|
+
}
|
|
214
|
+
return { ok: true, version };
|
|
215
|
+
}
|
|
216
|
+
async function detectGlobalNpmPackages(deps) {
|
|
217
|
+
const execAsync = deps.execAsync ?? execAsyncDefault;
|
|
218
|
+
try {
|
|
219
|
+
const result = await execAsync("npm ls -g --json --depth=0", {
|
|
220
|
+
timeout: UPDATE_CHECK_TIMEOUT_MS,
|
|
221
|
+
});
|
|
222
|
+
return parseNpmGlobalPackages(result.stdout);
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
return parseNpmGlobalPackages(stdoutFromError(err));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
export function parseNpmGlobalPackages(stdout) {
|
|
229
|
+
try {
|
|
230
|
+
const json = JSON.parse(stdout);
|
|
231
|
+
return new Set(Object.keys(json.dependencies ?? {}));
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
return new Set();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function createNpmPrefixResolver(deps) {
|
|
238
|
+
let promise;
|
|
239
|
+
return () => {
|
|
240
|
+
promise ??= detectNpmGlobalPrefix(deps);
|
|
241
|
+
return promise;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
async function detectNpmGlobalPrefix(deps) {
|
|
245
|
+
const execAsync = deps.execAsync ?? execAsyncDefault;
|
|
246
|
+
try {
|
|
247
|
+
const result = await execAsync("npm prefix -g", {
|
|
248
|
+
timeout: UPDATE_CHECK_TIMEOUT_MS,
|
|
249
|
+
});
|
|
250
|
+
return firstNonEmptyLine(result.stdout);
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async function resolveActiveManager(name, deps, getNpmPrefix) {
|
|
257
|
+
const execAsync = deps.execAsync ?? execAsyncDefault;
|
|
258
|
+
const platform = deps.platform ?? process.platform;
|
|
259
|
+
let resolvedPath;
|
|
260
|
+
try {
|
|
261
|
+
const command = platform === "win32" ? `where ${name}` : `command -v ${name}`;
|
|
262
|
+
const result = await execAsync(command, { timeout: UPDATE_CHECK_TIMEOUT_MS });
|
|
263
|
+
resolvedPath = firstNonEmptyLine(result.stdout);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return "unknown";
|
|
267
|
+
}
|
|
268
|
+
if (!resolvedPath)
|
|
269
|
+
return "unknown";
|
|
270
|
+
if (isWingetPath(resolvedPath))
|
|
271
|
+
return "winget";
|
|
272
|
+
const npmPrefix = await getNpmPrefix();
|
|
273
|
+
if (npmPrefix && isSameOrUnderPath(resolvedPath, npmPrefix))
|
|
274
|
+
return "npm";
|
|
275
|
+
if (platform === "win32" && npmPrefix === undefined) {
|
|
276
|
+
const appData = process.env.APPDATA;
|
|
277
|
+
if (appData && isSameOrUnderPath(resolvedPath, `${appData}\\npm`)) {
|
|
278
|
+
return "npm";
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return "unknown";
|
|
282
|
+
}
|
|
283
|
+
function firstNonEmptyLine(stdout) {
|
|
284
|
+
return stdout.split(/\r?\n/).find((line) => line.trim().length > 0)?.trim();
|
|
285
|
+
}
|
|
286
|
+
function isWingetPath(value) {
|
|
287
|
+
const normalized = normalizePathForCompare(value);
|
|
288
|
+
return (normalized.includes("\\microsoft\\winget\\packages\\") ||
|
|
289
|
+
normalized.includes("\\microsoft\\winget\\links\\"));
|
|
290
|
+
}
|
|
291
|
+
function isSameOrUnderPath(value, root) {
|
|
292
|
+
const normalizedValue = trimTrailingSlashes(normalizePathForCompare(value));
|
|
293
|
+
const normalizedRoot = trimTrailingSlashes(normalizePathForCompare(root));
|
|
294
|
+
return (normalizedValue === normalizedRoot ||
|
|
295
|
+
normalizedValue.startsWith(`${normalizedRoot}\\`));
|
|
296
|
+
}
|
|
297
|
+
function normalizePathForCompare(value) {
|
|
298
|
+
return value.replace(/\//g, "\\").toLowerCase();
|
|
299
|
+
}
|
|
300
|
+
function trimTrailingSlashes(value) {
|
|
301
|
+
return value.replace(/\\+$/g, "");
|
|
302
|
+
}
|
|
303
|
+
async function detectWingetManagedAgent(name, deps) {
|
|
304
|
+
const platform = deps.platform ?? process.platform;
|
|
305
|
+
if (platform !== "win32")
|
|
306
|
+
return false;
|
|
307
|
+
const execAsync = deps.execAsync ?? execAsyncDefault;
|
|
308
|
+
const id = AGENT_PACKAGE_WINGET[name];
|
|
309
|
+
try {
|
|
310
|
+
const result = await wingetExecWithRetry(`winget list --id ${id} --exact --accept-source-agreements --disable-interactivity`, { timeout: UPDATE_CHECK_TIMEOUT_MS }, (err) => !isKilledByParent(err) && !wingetOutputContainsId(stdoutFromError(err), id), { execAsync, sleep: deps.wingetRetrySleep, random: deps.wingetRetryRandom });
|
|
311
|
+
return wingetOutputContainsId(result.stdout, id);
|
|
312
|
+
}
|
|
313
|
+
catch (err) {
|
|
314
|
+
return wingetOutputContainsId(stdoutFromError(err), id);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
export function wingetOutputContainsId(stdout, id) {
|
|
318
|
+
const normalizedId = id.toLowerCase();
|
|
319
|
+
return stdout
|
|
320
|
+
.split(/\r?\n/)
|
|
321
|
+
.some((line) => line.toLowerCase().includes(normalizedId));
|
|
322
|
+
}
|
|
323
|
+
function stdoutFromError(err) {
|
|
324
|
+
if (err && typeof err === "object" && "stdout" in err) {
|
|
325
|
+
const stdout = err.stdout;
|
|
326
|
+
if (typeof stdout === "string")
|
|
327
|
+
return stdout;
|
|
328
|
+
if (Buffer.isBuffer(stdout))
|
|
329
|
+
return stdout.toString();
|
|
330
|
+
}
|
|
331
|
+
return "";
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=detect-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-agents.js","sourceRoot":"","sources":["../../src/auto-update/detect-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { UpdateInfo } from "../update-check.js";
|
|
2
|
+
import { type AutoUpdateChoice } from "./tui.js";
|
|
3
|
+
import { type AgentName, type DetectAgentsResult } from "./detect-agents.js";
|
|
4
|
+
import { type OutdatedTarget } from "./check-agent-updates.js";
|
|
5
|
+
export interface GateResult {
|
|
6
|
+
installedAgents: Set<AgentName>;
|
|
7
|
+
updateInfo: UpdateInfo | null;
|
|
8
|
+
}
|
|
9
|
+
export interface AutoUpdateGateDeps {
|
|
10
|
+
detectAgents?: () => Promise<DetectAgentsResult>;
|
|
11
|
+
isGlobalNpmInstall?: () => boolean;
|
|
12
|
+
checkAllUpdates?: (detected: DetectAgentsResult, isPolyWeaverGlobal: boolean) => Promise<OutdatedTarget[]>;
|
|
13
|
+
showAutoUpdateTui?: (outdated: OutdatedTarget[], cwd?: string) => Promise<AutoUpdateChoice | null>;
|
|
14
|
+
installAgents?: (targets: readonly OutdatedTarget[]) => Promise<Map<string, number>>;
|
|
15
|
+
setProviderVersions?: (versions: Map<string, string>) => void;
|
|
16
|
+
exit?: (code: number) => void;
|
|
17
|
+
stderr?: Pick<NodeJS.WriteStream, "write" | "isTTY">;
|
|
18
|
+
}
|
|
19
|
+
export declare function runAutoUpdateGate(cwd?: string, deps?: AutoUpdateGateDeps): Promise<GateResult>;
|
|
20
|
+
//# sourceMappingURL=gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/auto-update/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjD,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,kBAAkB,EAC5B,kBAAkB,EAAE,OAAO,KACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,CAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,GAAG,CAAC,EAAE,MAAM,KACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;CACtD;AAED,wBAAsB,iBAAiB,CACrC,GAAG,SAAgB,EACnB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CAoErB"}
|