@chiendt/ack-cli 1.1.0-dev.2 → 1.2.0-dev.1

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/cli-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.1.0-dev.2",
3
- "generatedAt": "2026-05-27T02:03:36.724Z",
2
+ "version": "1.2.0-dev.1",
3
+ "generatedAt": "2026-05-27T15:51:53.334Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
package/dist/index.js CHANGED
@@ -63710,7 +63710,7 @@ var package_default;
63710
63710
  var init_package = __esm(() => {
63711
63711
  package_default = {
63712
63712
  name: "@chiendt/ack-cli",
63713
- version: "1.1.0-dev.2",
63713
+ version: "1.2.0-dev.1",
63714
63714
  description: "ACK CLI - tool for bootstrapping and updating ACK kits (Claude Code agent kits)",
63715
63715
  type: "module",
63716
63716
  repository: {
@@ -77982,13 +77982,13 @@ function isNoiseCommit(title, author) {
77982
77982
  }
77983
77983
 
77984
77984
  // src/commands/content/phases/change-detector.ts
77985
- import { execSync as execSync9, spawnSync as spawnSync9 } from "node:child_process";
77985
+ import { execFileSync as execFileSync4, spawnSync as spawnSync9 } from "node:child_process";
77986
77986
  import { existsSync as existsSync89, readFileSync as readFileSync23, readdirSync as readdirSync15, statSync as statSync17 } from "node:fs";
77987
77987
  import { join as join170 } from "node:path";
77988
77988
  function detectCommits(repo, since) {
77989
77989
  try {
77990
77990
  const fetchUrl = sshToHttps(repo.remoteUrl);
77991
- execSync9(`git -C "${repo.path}" fetch ${fetchUrl} ${repo.defaultBranch} --quiet`, {
77991
+ execFileSync4("git", ["-C", repo.path, "fetch", fetchUrl, repo.defaultBranch, "--quiet"], {
77992
77992
  stdio: "pipe",
77993
77993
  timeout: 30000
77994
77994
  });
@@ -78000,11 +78000,22 @@ function detectCommits(repo, since) {
78000
78000
  try {
78001
78001
  let ref = `origin/${repo.defaultBranch}`;
78002
78002
  try {
78003
- execSync9(`git -C "${repo.path}" rev-parse --verify ${ref}`, { stdio: "pipe", timeout: 5000 });
78003
+ execFileSync4("git", ["-C", repo.path, "rev-parse", "--verify", ref], {
78004
+ stdio: "pipe",
78005
+ timeout: 5000
78006
+ });
78004
78007
  } catch {
78005
78008
  ref = repo.defaultBranch;
78006
78009
  }
78007
- const output2 = execSync9(`git -C "${repo.path}" log ${ref} --since="${since}" --format="%H%x00%s%x00%an%x00%aI" --no-merges`, { stdio: "pipe", timeout: 15000 }).toString().trim();
78010
+ const output2 = execFileSync4("git", [
78011
+ "-C",
78012
+ repo.path,
78013
+ "log",
78014
+ ref,
78015
+ `--since=${since}`,
78016
+ "--format=%H%x00%s%x00%an%x00%aI",
78017
+ "--no-merges"
78018
+ ], { stdio: "pipe", timeout: 15000 }).toString().trim();
78008
78019
  if (!output2)
78009
78020
  return [];
78010
78021
  return output2.split(`
@@ -78040,7 +78051,18 @@ function detectMergedPRs(repo, since) {
78040
78051
  if (!match2)
78041
78052
  return [];
78042
78053
  const [, owner, repoName] = match2;
78043
- const output2 = execSync9(`gh pr list --repo ${owner}/${repoName} --state merged --json number,title,body,author,mergedAt --limit 20`, { stdio: "pipe", timeout: 15000 }).toString().trim();
78054
+ const output2 = execFileSync4("gh", [
78055
+ "pr",
78056
+ "list",
78057
+ "--repo",
78058
+ `${owner}/${repoName}`,
78059
+ "--state",
78060
+ "merged",
78061
+ "--json",
78062
+ "number,title,body,author,mergedAt",
78063
+ "--limit",
78064
+ "20"
78065
+ ], { stdio: "pipe", timeout: 15000 }).toString().trim();
78044
78066
  if (!output2)
78045
78067
  return [];
78046
78068
  const prs = JSON.parse(output2);
@@ -78179,7 +78201,7 @@ function classifyCommit(event) {
78179
78201
  }
78180
78202
 
78181
78203
  // src/commands/content/phases/repo-discoverer.ts
78182
- import { execSync as execSync10 } from "node:child_process";
78204
+ import { execSync as execSync9 } from "node:child_process";
78183
78205
  import { readdirSync as readdirSync16 } from "node:fs";
78184
78206
  import { join as join171 } from "node:path";
78185
78207
  function discoverRepos2(cwd2) {
@@ -78206,7 +78228,7 @@ function discoverRepos2(cwd2) {
78206
78228
  }
78207
78229
  function isGitRepoRoot(dir) {
78208
78230
  try {
78209
- const toplevel = execSync10("git rev-parse --show-toplevel", {
78231
+ const toplevel = execSync9("git rev-parse --show-toplevel", {
78210
78232
  cwd: dir,
78211
78233
  stdio: "pipe",
78212
78234
  timeout: 5000
@@ -78221,7 +78243,7 @@ function getRepoInfo(dir) {
78221
78243
  const name = dir.split("/").pop() || dir;
78222
78244
  let remoteUrl = "";
78223
78245
  try {
78224
- remoteUrl = execSync10("git remote get-url origin", {
78246
+ remoteUrl = execSync9("git remote get-url origin", {
78225
78247
  cwd: dir,
78226
78248
  stdio: "pipe",
78227
78249
  timeout: 5000
@@ -78229,7 +78251,7 @@ function getRepoInfo(dir) {
78229
78251
  } catch {}
78230
78252
  let defaultBranch = "main";
78231
78253
  try {
78232
- const ref = execSync10("git symbolic-ref refs/remotes/origin/HEAD", {
78254
+ const ref = execSync9("git symbolic-ref refs/remotes/origin/HEAD", {
78233
78255
  cwd: dir,
78234
78256
  stdio: "pipe",
78235
78257
  timeout: 5000
@@ -78237,7 +78259,7 @@ function getRepoInfo(dir) {
78237
78259
  defaultBranch = ref.replace("refs/remotes/origin/", "");
78238
78260
  } catch {
78239
78261
  try {
78240
- defaultBranch = execSync10("git rev-parse --abbrev-ref HEAD", {
78262
+ defaultBranch = execSync9("git rev-parse --abbrev-ref HEAD", {
78241
78263
  cwd: dir,
78242
78264
  stdio: "pipe",
78243
78265
  timeout: 5000
@@ -78314,9 +78336,9 @@ var init_git_scanner = __esm(() => {
78314
78336
  });
78315
78337
 
78316
78338
  // src/commands/content/phases/platform-adapters/facebook-adapter.ts
78317
- import { execFileSync as execFileSync4 } from "node:child_process";
78339
+ import { execFileSync as execFileSync5 } from "node:child_process";
78318
78340
  function runFbcli(args, timeoutMs = 30000) {
78319
- return execFileSync4("fbcli", [...args, "--json"], {
78341
+ return execFileSync5("fbcli", [...args, "--json"], {
78320
78342
  stdio: "pipe",
78321
78343
  timeout: timeoutMs
78322
78344
  }).toString();
@@ -78356,7 +78378,7 @@ class FacebookAdapter {
78356
78378
  if (options2?.dryRun)
78357
78379
  return dryRunResult();
78358
78380
  try {
78359
- const raw = execFileSync4("fbcli", ["post", "--json"], {
78381
+ const raw = execFileSync5("fbcli", ["post", "--json"], {
78360
78382
  input: text,
78361
78383
  stdio: ["pipe", "pipe", "pipe"],
78362
78384
  timeout: 30000
@@ -78381,7 +78403,7 @@ class FacebookAdapter {
78381
78403
  if (options2?.dryRun)
78382
78404
  return dryRunResult();
78383
78405
  try {
78384
- const raw = execFileSync4("fbcli", ["post", "-i", mediaPath, "--json"], {
78406
+ const raw = execFileSync5("fbcli", ["post", "-i", mediaPath, "--json"], {
78385
78407
  input: text,
78386
78408
  stdio: ["pipe", "pipe", "pipe"],
78387
78409
  timeout: 60000
@@ -78420,16 +78442,11 @@ class FacebookAdapter {
78420
78442
  var init_facebook_adapter = () => {};
78421
78443
 
78422
78444
  // src/commands/content/phases/platform-adapters/x-adapter.ts
78423
- import { execSync as execSync11 } from "node:child_process";
78424
- function shellEscape(str2) {
78425
- return str2.replace(/'/g, "'\\''");
78426
- }
78445
+ import { execFileSync as execFileSync6 } from "node:child_process";
78427
78446
  function runXurl(args, timeoutMs = 30000) {
78428
- const shell = process.platform === "win32" ? "cmd.exe" : "/bin/sh";
78429
- return execSync11(`xurl ${args}`, {
78447
+ return execFileSync6("xurl", args, {
78430
78448
  stdio: "pipe",
78431
- timeout: timeoutMs,
78432
- shell
78449
+ timeout: timeoutMs
78433
78450
  }).toString();
78434
78451
  }
78435
78452
 
@@ -78437,7 +78454,7 @@ class XAdapter {
78437
78454
  platform = "x";
78438
78455
  async verifyAuth() {
78439
78456
  try {
78440
- const raw = runXurl("GET /2/users/me", 1e4);
78457
+ const raw = runXurl(["GET", "/2/users/me"], 1e4);
78441
78458
  const data = JSON.parse(raw);
78442
78459
  if (data.data?.username) {
78443
78460
  return { authenticated: true, username: data.data.username };
@@ -78460,7 +78477,7 @@ class XAdapter {
78460
78477
  }
78461
78478
  try {
78462
78479
  const body = JSON.stringify({ text });
78463
- const raw = runXurl(`POST /2/tweets --data '${shellEscape(body)}'`);
78480
+ const raw = runXurl(["POST", "/2/tweets", "--data", body]);
78464
78481
  const parsed = JSON.parse(raw);
78465
78482
  const postId = parsed.data?.id ?? "";
78466
78483
  return { success: true, postId, postUrl: `https://x.com/i/status/${postId}` };
@@ -78478,7 +78495,7 @@ class XAdapter {
78478
78495
  return { success: true, postId: "dry-run", postUrl: "https://x.com/dry-run" };
78479
78496
  }
78480
78497
  try {
78481
- const uploadRaw = runXurl(`POST /1.1/media/upload.json -F "media=@${mediaPath}"`, 60000);
78498
+ const uploadRaw = runXurl(["POST", "/1.1/media/upload.json", "-F", `media=@${mediaPath}`], 60000);
78482
78499
  const uploadParsed = JSON.parse(uploadRaw);
78483
78500
  const mediaId = uploadParsed.media_id_string;
78484
78501
  if (!mediaId) {
@@ -78490,7 +78507,7 @@ class XAdapter {
78490
78507
  };
78491
78508
  }
78492
78509
  const body = JSON.stringify({ text, media: { media_ids: [mediaId] } });
78493
- const raw = runXurl(`POST /2/tweets --data '${shellEscape(body)}'`);
78510
+ const raw = runXurl(["POST", "/2/tweets", "--data", body]);
78494
78511
  const parsed = JSON.parse(raw);
78495
78512
  const postId = parsed.data?.id ?? "";
78496
78513
  return { success: true, postId, postUrl: `https://x.com/i/status/${postId}` };
@@ -78519,7 +78536,7 @@ class XAdapter {
78519
78536
  if (previousId) {
78520
78537
  payload.reply = { in_reply_to_tweet_id: previousId };
78521
78538
  }
78522
- const raw = runXurl(`POST /2/tweets --data '${shellEscape(JSON.stringify(payload))}'`);
78539
+ const raw = runXurl(["POST", "/2/tweets", "--data", JSON.stringify(payload)]);
78523
78540
  const parsed = JSON.parse(raw);
78524
78541
  previousId = parsed.data?.id;
78525
78542
  if (previousId)
@@ -78540,7 +78557,7 @@ class XAdapter {
78540
78557
  }
78541
78558
  async getEngagement(postId) {
78542
78559
  try {
78543
- const raw = runXurl(`GET "/2/tweets/${postId}?tweet.fields=public_metrics"`, 1e4);
78560
+ const raw = runXurl(["GET", `/2/tweets/${postId}?tweet.fields=public_metrics`], 1e4);
78544
78561
  const parsed = JSON.parse(raw);
78545
78562
  const m3 = parsed.data?.public_metrics ?? {};
78546
78563
  return {
@@ -78926,7 +78943,7 @@ var init_state_manager = __esm(() => {
78926
78943
  });
78927
78944
 
78928
78945
  // src/commands/content/phases/platform-setup-facebook.ts
78929
- import { execSync as execSync12 } from "node:child_process";
78946
+ import { execFileSync as execFileSync7, execSync as execSync10 } from "node:child_process";
78930
78947
  async function setupFacebookPlatform(contentLogger) {
78931
78948
  oe("Facebook Pages Setup");
78932
78949
  if (!isFbcliInstalled()) {
@@ -78966,7 +78983,7 @@ async function setupFacebookPlatform(contentLogger) {
78966
78983
  return false;
78967
78984
  }
78968
78985
  try {
78969
- execSync12(`fbcli auth token "${token.trim()}"`, { stdio: "pipe", timeout: 15000 });
78986
+ execFileSync7("fbcli", ["auth", "token", token.trim()], { stdio: "pipe", timeout: 15000 });
78970
78987
  } catch (err) {
78971
78988
  f2.error("Failed to set token via `fbcli auth token`. Check the token and try again.");
78972
78989
  contentLogger.error("fbcli auth token command failed");
@@ -78984,7 +79001,7 @@ async function setupFacebookPlatform(contentLogger) {
78984
79001
  }
78985
79002
  function isFbcliInstalled() {
78986
79003
  try {
78987
- execSync12("which fbcli", { stdio: "pipe" });
79004
+ execSync10("which fbcli", { stdio: "pipe" });
78988
79005
  return true;
78989
79006
  } catch {
78990
79007
  return false;
@@ -78992,7 +79009,7 @@ function isFbcliInstalled() {
78992
79009
  }
78993
79010
  function isFbcliAuthenticated() {
78994
79011
  try {
78995
- const raw = execSync12("fbcli auth status --json", { stdio: "pipe", timeout: 1e4 }).toString();
79012
+ const raw = execSync10("fbcli auth status --json", { stdio: "pipe", timeout: 1e4 }).toString();
78996
79013
  const data = JSON.parse(raw);
78997
79014
  return data.authenticated === true || Boolean(data.page_name);
78998
79015
  } catch {
@@ -79001,7 +79018,7 @@ function isFbcliAuthenticated() {
79001
79018
  }
79002
79019
  function getFbcliPageName() {
79003
79020
  try {
79004
- const raw = execSync12("fbcli auth status --json", { stdio: "pipe", timeout: 1e4 }).toString();
79021
+ const raw = execSync10("fbcli auth status --json", { stdio: "pipe", timeout: 1e4 }).toString();
79005
79022
  const data = JSON.parse(raw);
79006
79023
  return String(data.page_name ?? "");
79007
79024
  } catch {
@@ -79010,9 +79027,9 @@ function getFbcliPageName() {
79010
79027
  }
79011
79028
  async function autoInstallFbcli(contentLogger) {
79012
79029
  try {
79013
- execSync12("which go", { stdio: "pipe" });
79030
+ execSync10("which go", { stdio: "pipe" });
79014
79031
  f2.info("Installing fbcli via `go install`...");
79015
- execSync12("go install github.com/mrgoonie/fbcli/cmd/fbcli@latest", {
79032
+ execSync10("go install github.com/mrgoonie/fbcli/cmd/fbcli@latest", {
79016
79033
  stdio: "inherit",
79017
79034
  timeout: 120000
79018
79035
  });
@@ -79041,7 +79058,7 @@ async function autoInstallFbcli(contentLogger) {
79041
79058
  return false;
79042
79059
  }
79043
79060
  f2.info(`Downloading fbcli binary for ${os9}/${cpu}...`);
79044
- execSync12(`curl -fsSL "${url}" -o "${dest}" && chmod +x "${dest}"`, {
79061
+ execSync10(`curl -fsSL "${url}" -o "${dest}" && chmod +x "${dest}"`, {
79045
79062
  stdio: "inherit",
79046
79063
  timeout: 60000
79047
79064
  });
@@ -79063,7 +79080,7 @@ var init_platform_setup_facebook = __esm(() => {
79063
79080
  });
79064
79081
 
79065
79082
  // src/commands/content/phases/platform-setup-x.ts
79066
- import { execFileSync as execFileSync5 } from "node:child_process";
79083
+ import { execFileSync as execFileSync8 } from "node:child_process";
79067
79084
  async function setupXPlatform(contentLogger) {
79068
79085
  oe("X (Twitter) Setup");
79069
79086
  if (!isXurlInstalled()) {
@@ -79094,7 +79111,7 @@ async function setupXPlatform(contentLogger) {
79094
79111
  function isXurlInstalled() {
79095
79112
  try {
79096
79113
  const cmd = process.platform === "win32" ? "where" : "which";
79097
- execFileSync5(cmd, ["xurl"], { stdio: "pipe" });
79114
+ execFileSync8(cmd, ["xurl"], { stdio: "pipe" });
79098
79115
  return true;
79099
79116
  } catch {
79100
79117
  return false;
@@ -79117,7 +79134,7 @@ function printXurlInstallInstructions() {
79117
79134
  }
79118
79135
  function isXurlAuthenticated() {
79119
79136
  try {
79120
- const status = execFileSync5("xurl", ["auth", "status"], {
79137
+ const status = execFileSync8("xurl", ["auth", "status"], {
79121
79138
  stdio: "pipe",
79122
79139
  timeout: 5000
79123
79140
  }).toString();