@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
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.
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
78339
|
+
import { execFileSync as execFileSync5 } from "node:child_process";
|
|
78318
78340
|
function runFbcli(args, timeoutMs = 30000) {
|
|
78319
|
-
return
|
|
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 =
|
|
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 =
|
|
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 {
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
79030
|
+
execSync10("which go", { stdio: "pipe" });
|
|
79014
79031
|
f2.info("Installing fbcli via `go install`...");
|
|
79015
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
79137
|
+
const status = execFileSync8("xurl", ["auth", "status"], {
|
|
79121
79138
|
stdio: "pipe",
|
|
79122
79139
|
timeout: 5000
|
|
79123
79140
|
}).toString();
|