agent-army 0.1.6 → 0.1.8

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.
@@ -9,14 +9,16 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.APIAdapterCancelError = exports.APIAdapterValidationError = exports.APIAdapterNeedsInputError = void 0;
11
11
  exports.createAPIAdapter = createAPIAdapter;
12
+ const vendor_1 = require("../lib/vendor");
12
13
  // ============================================================================
13
14
  // Execution Adapter Implementation
14
15
  // ============================================================================
15
16
  class APIExecAdapter {
16
17
  capture(command, args = [], cwd) {
17
18
  const { execFileSync } = require("child_process");
19
+ const resolved = (0, vendor_1.resolveCommand)(command);
18
20
  try {
19
- const result = execFileSync(command, args, {
21
+ const result = execFileSync(resolved, args, {
20
22
  cwd,
21
23
  encoding: "utf-8",
22
24
  stdio: ["pipe", "pipe", "pipe"],
@@ -38,10 +40,7 @@ class APIExecAdapter {
38
40
  return result.exitCode;
39
41
  }
40
42
  commandExists(command) {
41
- const { spawnSync } = require("child_process");
42
- const bin = process.platform === "win32" ? "where" : "which";
43
- const result = spawnSync(bin, [command], { shell: false, stdio: "ignore" });
44
- return result.status === 0;
43
+ return (0, vendor_1.commandExistsWithVendor)(command);
45
44
  }
46
45
  }
47
46
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"api-adapter.js","sourceRoot":"","sources":["../../adapters/api-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-adapter.js","sourceRoot":"","sources":["../../adapters/api-adapter.ts"],"names":[],"mappings":"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"}
@@ -48,13 +48,15 @@ const p = __importStar(require("@clack/prompts"));
48
48
  const picocolors_1 = __importDefault(require("picocolors"));
49
49
  const child_process_1 = require("child_process");
50
50
  const process_1 = require("../lib/process");
51
+ const vendor_1 = require("../lib/vendor");
51
52
  // ============================================================================
52
53
  // Execution Adapter Implementation
53
54
  // ============================================================================
54
55
  class CLIExecAdapter {
55
56
  capture(command, args = [], cwd) {
57
+ const resolved = (0, vendor_1.resolveCommand)(command);
56
58
  try {
57
- const result = (0, child_process_1.execSync)([command, ...args].join(" "), {
59
+ const result = (0, child_process_1.execSync)([resolved, ...args].join(" "), {
58
60
  cwd,
59
61
  encoding: "utf-8",
60
62
  stdio: ["pipe", "pipe", "pipe"],
@@ -71,13 +73,14 @@ class CLIExecAdapter {
71
73
  }
72
74
  }
73
75
  stream(command, args = [], options) {
76
+ const resolved = (0, vendor_1.resolveCommand)(command);
74
77
  return new Promise((resolve) => {
75
78
  const opts = {
76
79
  cwd: options?.cwd,
77
80
  stdio: options?.capture ? "pipe" : "inherit",
78
81
  shell: true,
79
82
  };
80
- const child = (0, child_process_1.spawn)(command, args, opts);
83
+ const child = (0, child_process_1.spawn)(resolved, args, opts);
81
84
  (0, process_1.trackChild)(child);
82
85
  child.on("close", (code) => resolve(code ?? 1));
83
86
  child.on("error", (err) => {
@@ -87,9 +90,7 @@ class CLIExecAdapter {
87
90
  });
88
91
  }
89
92
  commandExists(command) {
90
- const bin = process.platform === "win32" ? "where" : "which";
91
- const result = (0, child_process_1.spawnSync)(bin, [command], { shell: false, stdio: "ignore" });
92
- return result.status === 0;
93
+ return (0, vendor_1.commandExistsWithVendor)(command);
93
94
  }
94
95
  }
95
96
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"cli-adapter.js","sourceRoot":"","sources":["../../adapters/cli-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-adapter.js","sourceRoot":"","sources":["../../adapters/cli-adapter.ts"],"names":[],"mappings":"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"}
package/dist/bin.js CHANGED
@@ -51,6 +51,8 @@ const ssh_1 = require("./commands/ssh");
51
51
  const validate_1 = require("./commands/validate");
52
52
  const destroy_1 = require("./commands/destroy");
53
53
  const list_1 = require("./commands/list");
54
+ const update_1 = require("./commands/update");
55
+ const update_check_1 = require("./lib/update-check");
54
56
  // Forward SIGINT/SIGTERM to child processes before exiting
55
57
  (0, process_1.setupGracefulShutdown)();
56
58
  // Read version from package.json so it stays in sync with npm publish
@@ -116,5 +118,13 @@ program
116
118
  .action(async (opts) => {
117
119
  await (0, list_1.listCommand)(opts);
118
120
  });
121
+ program
122
+ .command("update")
123
+ .description("Update agent-army CLI to the latest version")
124
+ .action(async (opts) => {
125
+ await (0, update_1.updateCommand)(opts);
126
+ });
119
127
  program.parse();
128
+ // Fire-and-forget update check — never blocks exit
129
+ (0, update_check_1.checkForUpdates)(pkgJson.version).catch(() => { });
120
130
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Update the agent-army CLI to the latest version
3
+ */
4
+ interface UpdateOptions {
5
+ }
6
+ export declare function updateCommand(_opts: UpdateOptions): Promise<void>;
7
+ export {};
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Update the agent-army CLI to the latest version
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.updateCommand = updateCommand;
43
+ const p = __importStar(require("@clack/prompts"));
44
+ const picocolors_1 = __importDefault(require("picocolors"));
45
+ const exec_1 = require("../lib/exec");
46
+ async function updateCommand(_opts) {
47
+ p.intro(picocolors_1.default.bgCyan(picocolors_1.default.black(" Agent Army — Update ")));
48
+ const s = p.spinner();
49
+ s.start("Checking npm for latest version…");
50
+ // Fetch latest version info
51
+ const { default: https } = await Promise.resolve().then(() => __importStar(require("https")));
52
+ const latest = await new Promise((resolve) => {
53
+ const req = https.get("https://registry.npmjs.org/agent-army/latest", { timeout: 5000 }, (res) => {
54
+ let data = "";
55
+ res.on("data", (chunk) => (data += chunk));
56
+ res.on("end", () => {
57
+ try {
58
+ resolve(JSON.parse(data).version ?? null);
59
+ }
60
+ catch {
61
+ resolve(null);
62
+ }
63
+ });
64
+ });
65
+ req.on("timeout", () => { req.destroy(); resolve(null); });
66
+ req.on("error", () => resolve(null));
67
+ });
68
+ if (!latest) {
69
+ s.stop("Failed to reach npm registry");
70
+ p.log.error("Could not check for updates. Check your internet connection.");
71
+ process.exit(1);
72
+ }
73
+ // Read current version
74
+ const fs = await Promise.resolve().then(() => __importStar(require("fs")));
75
+ const path = await Promise.resolve().then(() => __importStar(require("path")));
76
+ const pkgJson = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "package.json"), "utf-8"));
77
+ const current = pkgJson.version;
78
+ s.stop(`Current: ${picocolors_1.default.dim(current)} Latest: ${picocolors_1.default.green(latest)}`);
79
+ // Compare versions
80
+ const cParts = current.split(".").map(Number);
81
+ const lParts = latest.split(".").map(Number);
82
+ let isOutdated = false;
83
+ for (let i = 0; i < 3; i++) {
84
+ if ((lParts[i] ?? 0) > (cParts[i] ?? 0)) {
85
+ isOutdated = true;
86
+ break;
87
+ }
88
+ if ((lParts[i] ?? 0) < (cParts[i] ?? 0))
89
+ break;
90
+ }
91
+ if (!isOutdated) {
92
+ p.log.success("You're already on the latest version!");
93
+ p.outro("Done");
94
+ return;
95
+ }
96
+ p.log.step(`Updating ${picocolors_1.default.dim(current)} → ${picocolors_1.default.green(latest)}`);
97
+ console.log();
98
+ const exitCode = await (0, exec_1.stream)("npm", ["install", "-g", `agent-army@${latest}`]);
99
+ console.log();
100
+ if (exitCode === 0) {
101
+ p.log.success(`Updated to ${picocolors_1.default.green(latest)}`);
102
+ }
103
+ else {
104
+ p.log.error("Update failed. You may need to run with sudo:");
105
+ p.log.message(` sudo npm install -g agent-army@${latest}`);
106
+ process.exit(1);
107
+ }
108
+ p.outro("Done");
109
+ }
110
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../commands/update.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,sCA0EC;AAlFD,kDAAoC;AACpC,4DAA4B;AAC5B,sCAAqC;AAM9B,KAAK,UAAU,aAAa,CAAC,KAAoB;IACtD,CAAC,CAAC,KAAK,CAAC,oBAAE,CAAC,MAAM,CAAC,oBAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAEtD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAE5C,4BAA4B;IAC5B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CACnB,8CAA8C,EAC9C,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACvC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uBAAuB;IACvB,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,wDAAa,MAAM,GAAC,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACrE,CAAC;IACF,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC;IAExC,CAAC,CAAC,IAAI,CAAC,YAAY,oBAAE,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,oBAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEnE,mBAAmB;IACnB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,UAAU,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM;IACjD,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,oBAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,oBAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,QAAQ,GAAG,MAAM,IAAA,aAAM,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC;IAEhF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,oBAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC7D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
@@ -8,15 +8,17 @@ export interface ExecResult {
8
8
  exitCode: number;
9
9
  }
10
10
  /**
11
- * Execute a command and capture output
11
+ * Execute a command and capture output.
12
+ * Resolves vendored binaries before falling back to system PATH.
12
13
  */
13
14
  export declare function capture(command: string, args?: string[], cwd?: string): ExecResult;
14
15
  /**
15
16
  * Execute a command with streaming output (stdout/stderr pass-through)
16
17
  * Returns the exit code.
18
+ * Resolves vendored binaries before falling back to system PATH.
17
19
  */
18
20
  export declare function stream(command: string, args?: string[], cwd?: string): Promise<number>;
19
21
  /**
20
- * Check if a command exists on the system
22
+ * Check if a command exists, checking vendor directory first, then system PATH.
21
23
  */
22
24
  export declare function commandExists(command: string): boolean;
package/dist/lib/exec.js CHANGED
@@ -8,12 +8,15 @@ exports.stream = stream;
8
8
  exports.commandExists = commandExists;
9
9
  const child_process_1 = require("child_process");
10
10
  const process_1 = require("./process");
11
+ const vendor_1 = require("./vendor");
11
12
  /**
12
- * Execute a command and capture output
13
+ * Execute a command and capture output.
14
+ * Resolves vendored binaries before falling back to system PATH.
13
15
  */
14
16
  function capture(command, args = [], cwd) {
17
+ const resolved = (0, vendor_1.resolveCommand)(command);
15
18
  try {
16
- const result = (0, child_process_1.execSync)([command, ...args].join(" "), {
19
+ const result = (0, child_process_1.execSync)([resolved, ...args].join(" "), {
17
20
  cwd,
18
21
  encoding: "utf-8",
19
22
  stdio: ["pipe", "pipe", "pipe"],
@@ -32,15 +35,17 @@ function capture(command, args = [], cwd) {
32
35
  /**
33
36
  * Execute a command with streaming output (stdout/stderr pass-through)
34
37
  * Returns the exit code.
38
+ * Resolves vendored binaries before falling back to system PATH.
35
39
  */
36
40
  function stream(command, args = [], cwd) {
41
+ const resolved = (0, vendor_1.resolveCommand)(command);
37
42
  return new Promise((resolve) => {
38
43
  const opts = {
39
44
  cwd,
40
45
  stdio: "inherit",
41
46
  shell: true,
42
47
  };
43
- const child = (0, child_process_1.spawn)(command, args, opts);
48
+ const child = (0, child_process_1.spawn)(resolved, args, opts);
44
49
  (0, process_1.trackChild)(child);
45
50
  child.on("close", (code) => resolve(code ?? 1));
46
51
  child.on("error", (err) => {
@@ -50,11 +55,9 @@ function stream(command, args = [], cwd) {
50
55
  });
51
56
  }
52
57
  /**
53
- * Check if a command exists on the system
58
+ * Check if a command exists, checking vendor directory first, then system PATH.
54
59
  */
55
60
  function commandExists(command) {
56
- const bin = process.platform === "win32" ? "where" : "which";
57
- const result = (0, child_process_1.spawnSync)(bin, [command], { shell: false, stdio: "ignore" });
58
- return result.status === 0;
61
+ return (0, vendor_1.commandExistsWithVendor)(command);
59
62
  }
60
63
  //# sourceMappingURL=exec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../lib/exec.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAeH,0BAgBC;AAMD,wBAeC;AAKD,sCAIC;AA3DD,iDAA8E;AAC9E,uCAAuC;AASvC;;GAEG;AACH,SAAgB,OAAO,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACxE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACpD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAA4D,CAAC;QACvE,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;SACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,MAAM,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAiB;YACzB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAA,oBAAU,EAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../lib/exec.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAiBH,0BAiBC;AAOD,wBAgBC;AAKD,sCAEC;AA9DD,iDAAmE;AACnE,uCAAuC;AACvC,qCAAmE;AASnE;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACxE,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAA4D,CAAC;QACvE,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC;SACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,GAAY;IACvE,MAAM,QAAQ,GAAG,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAiB;YACzB,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAA,oBAAU,EAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAA,gCAAuB,EAAC,OAAO,CAAC,CAAC;AAC1C,CAAC"}
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.checkPrerequisites = checkPrerequisites;
40
40
  const p = __importStar(require("@clack/prompts"));
41
41
  const exec_1 = require("./exec");
42
+ const vendor_1 = require("./vendor");
42
43
  const workspace_1 = require("./workspace");
43
44
  /**
44
45
  * Run all prerequisite checks and display results.
@@ -49,14 +50,15 @@ async function checkPrerequisites() {
49
50
  // Pulumi CLI
50
51
  if ((0, exec_1.commandExists)("pulumi")) {
51
52
  const ver = (0, exec_1.capture)("pulumi", ["version"]);
52
- results.push({ name: "Pulumi", ok: true, message: `found (${ver.stdout})` });
53
+ const source = (0, vendor_1.isVendored)("pulumi") ? "vendored" : "system";
54
+ results.push({ name: "Pulumi", ok: true, message: `found (${ver.stdout}, ${source})` });
53
55
  }
54
56
  else {
55
57
  results.push({
56
58
  name: "Pulumi",
57
59
  ok: false,
58
60
  message: "not found",
59
- hint: "Install from https://www.pulumi.com/docs/iac/download-install/",
61
+ hint: "Install from https://www.pulumi.com/docs/iac/download-install/ or run `npm install` to vendor automatically",
60
62
  });
61
63
  }
62
64
  // Node.js 18+
@@ -85,14 +87,15 @@ async function checkPrerequisites() {
85
87
  }
86
88
  // AWS CLI
87
89
  if ((0, exec_1.commandExists)("aws")) {
88
- results.push({ name: "AWS CLI", ok: true, message: "found" });
90
+ const source = (0, vendor_1.isVendored)("aws") ? "vendored" : "system";
91
+ results.push({ name: "AWS CLI", ok: true, message: `found (${source})` });
89
92
  }
90
93
  else {
91
94
  results.push({
92
95
  name: "AWS CLI",
93
96
  ok: false,
94
97
  message: "not found",
95
- hint: "Install from https://aws.amazon.com/cli/",
98
+ hint: "Install from https://aws.amazon.com/cli/ or run `npm install` to vendor automatically",
96
99
  });
97
100
  }
98
101
  // pnpm (only required in dev mode — installed mode uses npm in the workspace)
@@ -1 +1 @@
1
- {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../lib/prerequisites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prerequisites.js","sourceRoot":"","sources":["../../lib/prerequisites.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Background update notifier — checks npm for newer versions
3
+ */
4
+ /**
5
+ * Check for updates and print a notice if a newer version is available.
6
+ * Non-blocking — errors are silently ignored.
7
+ */
8
+ export declare function checkForUpdates(currentVersion: string): Promise<void>;
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Background update notifier — checks npm for newer versions
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.checkForUpdates = checkForUpdates;
43
+ const https = __importStar(require("https"));
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const picocolors_1 = __importDefault(require("picocolors"));
48
+ const PACKAGE_NAME = "agent-army";
49
+ const CACHE_FILE = ".update-check.json";
50
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
51
+ const FETCH_TIMEOUT_MS = 3000;
52
+ function getCacheDir() {
53
+ return path.join(os.homedir(), ".agent-army");
54
+ }
55
+ function getCachePath() {
56
+ return path.join(getCacheDir(), CACHE_FILE);
57
+ }
58
+ function loadCache() {
59
+ try {
60
+ const raw = fs.readFileSync(getCachePath(), "utf-8");
61
+ return JSON.parse(raw);
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ function saveCache(cache) {
68
+ const dir = getCacheDir();
69
+ if (!fs.existsSync(dir)) {
70
+ fs.mkdirSync(dir, { recursive: true });
71
+ }
72
+ fs.writeFileSync(getCachePath(), JSON.stringify(cache), "utf-8");
73
+ }
74
+ /**
75
+ * Compare two semver strings. Returns:
76
+ * 1 if a > b, -1 if a < b, 0 if equal
77
+ */
78
+ function compareSemver(a, b) {
79
+ const pa = a.split(".").map(Number);
80
+ const pb = b.split(".").map(Number);
81
+ for (let i = 0; i < 3; i++) {
82
+ const na = pa[i] ?? 0;
83
+ const nb = pb[i] ?? 0;
84
+ if (na > nb)
85
+ return 1;
86
+ if (na < nb)
87
+ return -1;
88
+ }
89
+ return 0;
90
+ }
91
+ function fetchLatestVersion() {
92
+ return new Promise((resolve) => {
93
+ const req = https.get(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, { timeout: FETCH_TIMEOUT_MS }, (res) => {
94
+ let data = "";
95
+ res.on("data", (chunk) => (data += chunk));
96
+ res.on("end", () => {
97
+ try {
98
+ const json = JSON.parse(data);
99
+ resolve(json.version ?? null);
100
+ }
101
+ catch {
102
+ resolve(null);
103
+ }
104
+ });
105
+ });
106
+ req.on("timeout", () => {
107
+ req.destroy();
108
+ resolve(null);
109
+ });
110
+ req.on("error", () => resolve(null));
111
+ });
112
+ }
113
+ /**
114
+ * Check for updates and print a notice if a newer version is available.
115
+ * Non-blocking — errors are silently ignored.
116
+ */
117
+ async function checkForUpdates(currentVersion) {
118
+ try {
119
+ const cache = loadCache();
120
+ const now = Date.now();
121
+ // Use cached version if fresh enough
122
+ if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {
123
+ if (compareSemver(cache.latestVersion, currentVersion) > 0) {
124
+ printUpdateNotice(currentVersion, cache.latestVersion);
125
+ }
126
+ return;
127
+ }
128
+ // Fetch in background — don't block CLI exit
129
+ const latest = await fetchLatestVersion();
130
+ if (!latest)
131
+ return;
132
+ saveCache({ lastChecked: now, latestVersion: latest });
133
+ if (compareSemver(latest, currentVersion) > 0) {
134
+ printUpdateNotice(currentVersion, latest);
135
+ }
136
+ }
137
+ catch {
138
+ // Never fail the CLI over an update check
139
+ }
140
+ }
141
+ function printUpdateNotice(current, latest) {
142
+ console.log();
143
+ console.log(` Update available: ${picocolors_1.default.dim(current)} ${picocolors_1.default.dim("→")} ${picocolors_1.default.green(latest)}`);
144
+ console.log(` Run ${picocolors_1.default.cyan("agent-army update")} to install`);
145
+ console.log();
146
+ }
147
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../lib/update-check.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFH,0CAyBC;AAhHD,6CAA+B;AAC/B,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,4DAA4B;AAE5B,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAO9B,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,CAAS,EAAE,CAAS;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CACnB,8BAA8B,YAAY,SAAS,EACnD,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;gBAChC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,eAAe,CAAC,cAAsB;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,qCAAqC;QACrC,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,GAAG,iBAAiB,EAAE,CAAC;YACzD,IAAI,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3D,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACzD,CAAC;YACD,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QAEvD,IAAI,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACxD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,uBAAuB,oBAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,oBAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAC5E,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,SAAS,oBAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Vendor binary management
3
+ *
4
+ * Resolves vendored CLI binaries (Pulumi, AWS CLI) installed to cli/vendor/
5
+ * by the postinstall script. Falls back to system PATH if not found.
6
+ */
7
+ /**
8
+ * Get the vendor directory path.
9
+ * At runtime this resolves from cli/dist/lib/vendor.js → ../../vendor/
10
+ */
11
+ export declare function getVendorDir(): string;
12
+ /**
13
+ * Resolve a command to its vendored binary path if available.
14
+ * Returns the full path to the vendored binary, or null if not found.
15
+ */
16
+ export declare function resolveVendoredBinary(command: string): string | null;
17
+ /**
18
+ * Resolve a command, checking vendor directory first, then system PATH.
19
+ * Returns the resolved command string (full path for vendor, original for system).
20
+ */
21
+ export declare function resolveCommand(command: string): string;
22
+ /**
23
+ * Check if a vendored binary exists for the given command.
24
+ */
25
+ export declare function isVendored(command: string): boolean;
26
+ /**
27
+ * Check if a command exists, checking vendor directory first, then system PATH.
28
+ */
29
+ export declare function commandExistsWithVendor(command: string): boolean;
30
+ /**
31
+ * Get the vendor PATH prefix for adding to child process environment.
32
+ * This allows vendored binaries to be found by child processes.
33
+ */
34
+ export declare function getVendorPATH(): string;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Vendor binary management
4
+ *
5
+ * Resolves vendored CLI binaries (Pulumi, AWS CLI) installed to cli/vendor/
6
+ * by the postinstall script. Falls back to system PATH if not found.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getVendorDir = getVendorDir;
43
+ exports.resolveVendoredBinary = resolveVendoredBinary;
44
+ exports.resolveCommand = resolveCommand;
45
+ exports.isVendored = isVendored;
46
+ exports.commandExistsWithVendor = commandExistsWithVendor;
47
+ exports.getVendorPATH = getVendorPATH;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const child_process_1 = require("child_process");
51
+ /**
52
+ * Get the vendor directory path.
53
+ * At runtime this resolves from cli/dist/lib/vendor.js → ../../vendor/
54
+ */
55
+ function getVendorDir() {
56
+ return path.join(__dirname, "..", "..", "vendor");
57
+ }
58
+ /**
59
+ * Get the vendor bin directory for the current platform.
60
+ * Structure: vendor/pulumi/, vendor/aws-cli/
61
+ */
62
+ function getVendorBinDir(tool) {
63
+ return path.join(getVendorDir(), tool);
64
+ }
65
+ /**
66
+ * Map of commands to their vendor subdirectory and binary name.
67
+ */
68
+ const VENDOR_COMMANDS = {
69
+ pulumi: { dir: "pulumi", bin: process.platform === "win32" ? "pulumi.exe" : "pulumi" },
70
+ aws: { dir: "aws-cli", bin: process.platform === "win32" ? "aws.exe" : "aws" },
71
+ };
72
+ /**
73
+ * Resolve a command to its vendored binary path if available.
74
+ * Returns the full path to the vendored binary, or null if not found.
75
+ */
76
+ function resolveVendoredBinary(command) {
77
+ const entry = VENDOR_COMMANDS[command];
78
+ if (!entry)
79
+ return null;
80
+ const binPath = path.join(getVendorBinDir(entry.dir), entry.bin);
81
+ if (fs.existsSync(binPath)) {
82
+ return binPath;
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Resolve a command, checking vendor directory first, then system PATH.
88
+ * Returns the resolved command string (full path for vendor, original for system).
89
+ */
90
+ function resolveCommand(command) {
91
+ const vendored = resolveVendoredBinary(command);
92
+ if (vendored)
93
+ return vendored;
94
+ return command;
95
+ }
96
+ /**
97
+ * Check if a vendored binary exists for the given command.
98
+ */
99
+ function isVendored(command) {
100
+ return resolveVendoredBinary(command) !== null;
101
+ }
102
+ /**
103
+ * Check if a command exists, checking vendor directory first, then system PATH.
104
+ */
105
+ function commandExistsWithVendor(command) {
106
+ // Check vendor first
107
+ if (isVendored(command))
108
+ return true;
109
+ // Fall back to system PATH
110
+ const bin = process.platform === "win32" ? "where" : "which";
111
+ const result = (0, child_process_1.spawnSync)(bin, [command], { shell: false, stdio: "ignore" });
112
+ return result.status === 0;
113
+ }
114
+ /**
115
+ * Get the vendor PATH prefix for adding to child process environment.
116
+ * This allows vendored binaries to be found by child processes.
117
+ */
118
+ function getVendorPATH() {
119
+ const dirs = [];
120
+ for (const entry of Object.values(VENDOR_COMMANDS)) {
121
+ const dir = getVendorBinDir(entry.dir);
122
+ if (fs.existsSync(dir)) {
123
+ dirs.push(dir);
124
+ }
125
+ }
126
+ return dirs.join(path.delimiter);
127
+ }
128
+ //# sourceMappingURL=vendor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor.js","sourceRoot":"","sources":["../../lib/vendor.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,oCAEC;AAsBD,sDAUC;AAMD,wCAIC;AAKD,gCAEC;AAKD,0DAQC;AAMD,sCASC;AAvFD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAA0C;AAE1C;;;GAGG;AACH,SAAgB,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,eAAe,GAAiD;IACpE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtF,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE;CAC/E,CAAC;AAEF;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,OAAe;IACnD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,qBAAqB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,OAAe;IACrD,qBAAqB;IACrB,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,2BAA2B;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "agent-army",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Deploy and manage a fleet of OpenClaw AI agents on AWS",
5
5
  "bin": {
6
6
  "agent-army": "dist/bin.js"
7
7
  },
8
8
  "files": [
9
9
  "dist",
10
- "infra"
10
+ "infra",
11
+ "scripts"
11
12
  ],
12
13
  "scripts": {
13
14
  "build": "tsc",
14
- "watch": "tsc --watch"
15
+ "watch": "tsc --watch",
16
+ "postinstall": "node scripts/postinstall.mjs"
15
17
  },
16
18
  "dependencies": {
17
19
  "@clack/prompts": "^0.9",
@@ -0,0 +1,395 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Postinstall script for agent-army CLI
5
+ *
6
+ * Downloads vendored binaries (Pulumi CLI, AWS CLI v2) for the current
7
+ * platform to cli/vendor/. Runs automatically after `npm install`.
8
+ *
9
+ * Versions and checksums are fetched dynamically:
10
+ * - Pulumi: latest release from GitHub API, checksums from release assets
11
+ * - AWS CLI: latest from AWS, checksums from .sha256 sidecar files
12
+ *
13
+ * If downloads fail (network issues, unsupported platform), the CLI
14
+ * falls back to system PATH binaries — this is not a fatal error.
15
+ */
16
+
17
+ import fs from "node:fs";
18
+ import path from "node:path";
19
+ import os from "node:os";
20
+ import https from "node:https";
21
+ import crypto from "node:crypto";
22
+ import { execSync } from "node:child_process";
23
+
24
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
25
+ const VENDOR_DIR = path.join(__dirname, "..", "vendor");
26
+
27
+ function getPlatform() {
28
+ const platform = process.platform;
29
+ const arch = process.arch;
30
+
31
+ let osName;
32
+ if (platform === "darwin") osName = "darwin";
33
+ else if (platform === "linux") osName = "linux";
34
+ else if (platform === "win32") osName = "windows";
35
+ else return null;
36
+
37
+ let archName;
38
+ if (arch === "x64") archName = "x64";
39
+ else if (arch === "arm64") archName = "arm64";
40
+ else return null;
41
+
42
+ return { os: osName, arch: archName };
43
+ }
44
+
45
+ /**
46
+ * Compute SHA256 hash of a file.
47
+ */
48
+ function sha256File(filePath) {
49
+ const hash = crypto.createHash("sha256");
50
+ const data = fs.readFileSync(filePath);
51
+ hash.update(data);
52
+ return hash.digest("hex");
53
+ }
54
+
55
+ /**
56
+ * Verify SHA256 checksum of a downloaded file.
57
+ * Throws if checksum doesn't match.
58
+ */
59
+ function verifyChecksum(filePath, expectedHash, label) {
60
+ if (!expectedHash) {
61
+ console.log(` ⚠ No checksum available for ${label} — skipping verification`);
62
+ return;
63
+ }
64
+ const actualHash = sha256File(filePath);
65
+ if (actualHash !== expectedHash) {
66
+ throw new Error(
67
+ `Checksum mismatch for ${label}!\n` +
68
+ ` Expected: ${expectedHash}\n` +
69
+ ` Got: ${actualHash}\n` +
70
+ ` This could indicate a corrupted download or supply chain attack.\n` +
71
+ ` Delete the file and retry, or install the CLI manually.`
72
+ );
73
+ }
74
+ console.log(` ✓ Checksum verified for ${label}`);
75
+ }
76
+
77
+ /**
78
+ * Make an HTTPS GET request and return the response body as a string.
79
+ */
80
+ function httpsGet(url) {
81
+ return new Promise((resolve, reject) => {
82
+ const doRequest = (reqUrl, redirectCount = 0) => {
83
+ if (redirectCount > 5) {
84
+ reject(new Error("Too many redirects"));
85
+ return;
86
+ }
87
+ https.get(reqUrl, { headers: { "User-Agent": "agent-army-postinstall" } }, (res) => {
88
+ if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
89
+ res.resume();
90
+ doRequest(res.headers.location, redirectCount + 1);
91
+ return;
92
+ }
93
+ if (res.statusCode !== 200) {
94
+ res.resume();
95
+ reject(new Error(`HTTP ${res.statusCode} for ${reqUrl}`));
96
+ return;
97
+ }
98
+ let data = "";
99
+ res.on("data", (chunk) => (data += chunk));
100
+ res.on("end", () => resolve(data));
101
+ }).on("error", reject);
102
+ };
103
+ doRequest(url);
104
+ });
105
+ }
106
+
107
+ function download(url, destPath) {
108
+ return new Promise((resolve, reject) => {
109
+ const file = fs.createWriteStream(destPath);
110
+ const request = (reqUrl, redirectCount = 0) => {
111
+ if (redirectCount > 5) {
112
+ reject(new Error("Too many redirects"));
113
+ return;
114
+ }
115
+ https
116
+ .get(reqUrl, { headers: { "User-Agent": "agent-army-postinstall" } }, (response) => {
117
+ if (response.statusCode && response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
118
+ response.resume();
119
+ request(response.headers.location, redirectCount + 1);
120
+ return;
121
+ }
122
+ if (response.statusCode !== 200) {
123
+ response.resume();
124
+ reject(new Error(`HTTP ${response.statusCode} for ${reqUrl}`));
125
+ return;
126
+ }
127
+ response.pipe(file);
128
+ file.on("finish", () => {
129
+ file.close();
130
+ resolve();
131
+ });
132
+ })
133
+ .on("error", (err) => {
134
+ try { fs.unlinkSync(destPath); } catch {}
135
+ reject(err);
136
+ });
137
+ };
138
+ request(url);
139
+ });
140
+ }
141
+
142
+ /**
143
+ * Fetch the latest Pulumi version from GitHub releases API.
144
+ */
145
+ async function getLatestPulumiVersion() {
146
+ const data = await httpsGet("https://api.github.com/repos/pulumi/pulumi/releases/latest");
147
+ const release = JSON.parse(data);
148
+ const version = release.tag_name.replace(/^v/, "");
149
+ console.log(` Resolved Pulumi latest version: v${version}`);
150
+ return version;
151
+ }
152
+
153
+ /**
154
+ * Fetch Pulumi checksums from the GitHub release checksums.txt asset.
155
+ * Returns a map of filename -> sha256 hash.
156
+ */
157
+ async function getPulumiChecksums(version) {
158
+ const url = `https://github.com/pulumi/pulumi/releases/download/v${version}/pulumi-${version}-checksums.txt`;
159
+ try {
160
+ const data = await httpsGet(url);
161
+ const checksums = {};
162
+ for (const line of data.trim().split("\n")) {
163
+ const [hash, filename] = line.trim().split(/\s+/);
164
+ if (hash && filename) {
165
+ checksums[filename] = hash;
166
+ }
167
+ }
168
+ return checksums;
169
+ } catch (err) {
170
+ console.warn(` ⚠ Could not fetch Pulumi checksums: ${err.message}`);
171
+ return {};
172
+ }
173
+ }
174
+
175
+ function getPulumiFilename(version, platform) {
176
+ const ext = platform.os === "windows" ? "zip" : "tar.gz";
177
+ return `pulumi-v${version}-${platform.os}-${platform.arch}.${ext}`;
178
+ }
179
+
180
+ function getPulumiUrl(version, platform) {
181
+ return `https://get.pulumi.com/releases/sdk/${getPulumiFilename(version, platform)}`;
182
+ }
183
+
184
+ function getAwsCliUrl(platform) {
185
+ if (platform.os === "linux" && platform.arch === "x64") {
186
+ return "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip";
187
+ }
188
+ if (platform.os === "linux" && platform.arch === "arm64") {
189
+ return "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip";
190
+ }
191
+ if (platform.os === "darwin") {
192
+ return "https://awscli.amazonaws.com/AWSCLIV2.pkg";
193
+ }
194
+ if (platform.os === "windows") {
195
+ return "https://awscli.amazonaws.com/AWSCLIV2.msi";
196
+ }
197
+ return null;
198
+ }
199
+
200
+ /**
201
+ * Fetch the SHA256 checksum for an AWS CLI download from the .sha256 sidecar.
202
+ */
203
+ async function getAwsCliChecksum(url) {
204
+ try {
205
+ const data = await httpsGet(`${url}.sha256`);
206
+ // Format: "<hash> filename" or just the hash
207
+ const hash = data.trim().split(/\s+/)[0];
208
+ if (hash && /^[a-f0-9]{64}$/.test(hash)) {
209
+ return hash;
210
+ }
211
+ return null;
212
+ } catch {
213
+ return null;
214
+ }
215
+ }
216
+
217
+ async function installPulumi(platform) {
218
+ // Resolve version dynamically
219
+ const version = await getLatestPulumiVersion();
220
+ const checksums = await getPulumiChecksums(version);
221
+ const filename = getPulumiFilename(version, platform);
222
+ const expectedChecksum = checksums[filename] || null;
223
+ const url = getPulumiUrl(version, platform);
224
+ const platformKey = `${platform.os}-${platform.arch}`;
225
+ const destDir = path.join(VENDOR_DIR, "pulumi");
226
+ fs.mkdirSync(destDir, { recursive: true });
227
+
228
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "agent-army-pulumi-"));
229
+
230
+ try {
231
+ if (platform.os === "windows") {
232
+ const zipPath = path.join(tmpDir, "pulumi.zip");
233
+ console.log(` Downloading Pulumi v${version} (${platformKey})...`);
234
+ await download(url, zipPath);
235
+ verifyChecksum(zipPath, expectedChecksum, `Pulumi v${version} (${platformKey})`);
236
+
237
+ execSync(`powershell -Command "Expand-Archive -Path '${zipPath}' -DestinationPath '${tmpDir}' -Force"`, {
238
+ stdio: "pipe",
239
+ });
240
+
241
+ const extractedDir = path.join(tmpDir, "pulumi", "bin");
242
+ if (fs.existsSync(extractedDir)) {
243
+ for (const file of fs.readdirSync(extractedDir)) {
244
+ fs.copyFileSync(path.join(extractedDir, file), path.join(destDir, file));
245
+ }
246
+ }
247
+ } else {
248
+ const tarPath = path.join(tmpDir, "pulumi.tar.gz");
249
+ console.log(` Downloading Pulumi v${version} (${platformKey})...`);
250
+ await download(url, tarPath);
251
+ verifyChecksum(tarPath, expectedChecksum, `Pulumi v${version} (${platformKey})`);
252
+
253
+ execSync(`tar xzf "${tarPath}" -C "${tmpDir}"`, { stdio: "pipe" });
254
+
255
+ const extractedDir = path.join(tmpDir, "pulumi");
256
+ if (fs.existsSync(extractedDir)) {
257
+ for (const file of fs.readdirSync(extractedDir)) {
258
+ const srcPath = path.join(extractedDir, file);
259
+ const dstPath = path.join(destDir, file);
260
+ fs.copyFileSync(srcPath, dstPath);
261
+ fs.chmodSync(dstPath, 0o755);
262
+ }
263
+ }
264
+ }
265
+
266
+ // Write version file for runtime reference
267
+ fs.writeFileSync(path.join(destDir, ".version"), version);
268
+ console.log(` ✓ Pulumi v${version} installed to vendor/pulumi/`);
269
+ } finally {
270
+ fs.rmSync(tmpDir, { recursive: true, force: true });
271
+ }
272
+ }
273
+
274
+ async function installAwsCli(platform) {
275
+ const url = getAwsCliUrl(platform);
276
+ if (!url) {
277
+ console.log(" AWS CLI: unsupported platform, skipping vendor install");
278
+ return;
279
+ }
280
+
281
+ const platformKey = `${platform.os}-${platform.arch}`;
282
+ const destDir = path.join(VENDOR_DIR, "aws-cli");
283
+ fs.mkdirSync(destDir, { recursive: true });
284
+
285
+ // Fetch checksum from AWS .sha256 sidecar file
286
+ const expectedChecksum = await getAwsCliChecksum(url);
287
+
288
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "agent-army-awscli-"));
289
+
290
+ try {
291
+ if (platform.os === "linux") {
292
+ const zipPath = path.join(tmpDir, "awscli.zip");
293
+ console.log(` Downloading AWS CLI v2 (${platformKey})...`);
294
+ await download(url, zipPath);
295
+ verifyChecksum(zipPath, expectedChecksum, `AWS CLI v2 (${platformKey})`);
296
+
297
+ execSync(`unzip -q "${zipPath}" -d "${tmpDir}"`, { stdio: "pipe" });
298
+
299
+ const installDir = path.join(destDir, "v2");
300
+ execSync(
301
+ `"${tmpDir}/aws/install" --install-dir "${installDir}" --bin-dir "${destDir}" --update`,
302
+ { stdio: "pipe" }
303
+ );
304
+
305
+ console.log(` ✓ AWS CLI v2 installed to vendor/aws-cli/`);
306
+ } else if (platform.os === "darwin") {
307
+ const pkgPath = path.join(tmpDir, "AWSCLIV2.pkg");
308
+ console.log(` Downloading AWS CLI v2 (${platformKey})...`);
309
+ await download(url, pkgPath);
310
+ verifyChecksum(pkgPath, expectedChecksum, `AWS CLI v2 (${platformKey})`);
311
+
312
+ const expandDir = path.join(tmpDir, "expanded");
313
+ execSync(`pkgutil --expand "${pkgPath}" "${expandDir}"`, { stdio: "pipe" });
314
+
315
+ const payloadDir = path.join(tmpDir, "payload");
316
+ fs.mkdirSync(payloadDir, { recursive: true });
317
+
318
+ const awsCliPkg = path.join(expandDir, "aws-cli.pkg");
319
+ if (fs.existsSync(path.join(awsCliPkg, "Payload"))) {
320
+ execSync(`cd "${payloadDir}" && cat "${awsCliPkg}/Payload" | cpio -idm 2>/dev/null || true`, {
321
+ stdio: "pipe",
322
+ });
323
+ }
324
+
325
+ const awsBinSrc = path.join(payloadDir, "aws-cli", "aws");
326
+ if (fs.existsSync(awsBinSrc)) {
327
+ copyDirSync(path.join(payloadDir, "aws-cli"), destDir);
328
+ fs.chmodSync(path.join(destDir, "aws"), 0o755);
329
+ console.log(` ✓ AWS CLI v2 installed to vendor/aws-cli/`);
330
+ } else {
331
+ console.log(" AWS CLI: could not locate binary in .pkg payload, skipping");
332
+ }
333
+ } else if (platform.os === "windows") {
334
+ console.log(" AWS CLI: Windows uses MSI installer, skipping vendor install");
335
+ console.log(" Install from: https://awscli.amazonaws.com/AWSCLIV2.msi");
336
+ }
337
+ } finally {
338
+ fs.rmSync(tmpDir, { recursive: true, force: true });
339
+ }
340
+ }
341
+
342
+ function copyDirSync(src, dest) {
343
+ fs.mkdirSync(dest, { recursive: true });
344
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
345
+ const srcPath = path.join(src, entry.name);
346
+ const destPath = path.join(dest, entry.name);
347
+ if (entry.isDirectory()) {
348
+ copyDirSync(srcPath, destPath);
349
+ } else {
350
+ fs.copyFileSync(srcPath, destPath);
351
+ }
352
+ }
353
+ }
354
+
355
+ async function main() {
356
+ // Skip in CI or if AGENT_ARMY_SKIP_POSTINSTALL is set
357
+ if (process.env.AGENT_ARMY_SKIP_POSTINSTALL || process.env.CI) {
358
+ console.log("agent-army: skipping postinstall (CI or AGENT_ARMY_SKIP_POSTINSTALL set)");
359
+ return;
360
+ }
361
+
362
+ const platform = getPlatform();
363
+ if (!platform) {
364
+ console.log(`agent-army: unsupported platform (${process.platform}/${process.arch}), skipping vendor install`);
365
+ console.log(" Pulumi and AWS CLI must be installed manually.");
366
+ return;
367
+ }
368
+
369
+ console.log(`agent-army: installing vendored binaries (${platform.os}/${platform.arch})...`);
370
+
371
+ // Install Pulumi
372
+ try {
373
+ await installPulumi(platform);
374
+ } catch (err) {
375
+ console.warn(` ✗ Failed to install Pulumi: ${err instanceof Error ? err.message : String(err)}`);
376
+ console.warn(" The CLI will fall back to system PATH for Pulumi.");
377
+ }
378
+
379
+ // Install AWS CLI
380
+ try {
381
+ await installAwsCli(platform);
382
+ } catch (err) {
383
+ console.warn(` ✗ Failed to install AWS CLI: ${err instanceof Error ? err.message : String(err)}`);
384
+ console.warn(" The CLI will fall back to system PATH for AWS CLI.");
385
+ }
386
+
387
+ console.log("agent-army: postinstall complete.");
388
+ }
389
+
390
+ main().catch((err) => {
391
+ // Non-fatal — the CLI will fall back to system PATH
392
+ console.warn(`agent-army postinstall: ${err instanceof Error ? err.message : String(err)}`);
393
+ console.warn(" Vendored binaries may not be available. Falling back to system PATH.");
394
+ process.exit(0); // Exit 0 so npm install doesn't fail
395
+ });