@chiendt/ack-cli 1.0.1-dev.2 → 1.0.1-dev.6

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.0.1-dev.2",
3
- "generatedAt": "2026-05-19T06:59:43.310Z",
2
+ "version": "1.0.1-dev.6",
3
+ "generatedAt": "2026-05-22T07:47:43.075Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
@@ -1810,6 +1810,92 @@
1810
1810
  }
1811
1811
  ]
1812
1812
  }
1813
+ ],
1814
+ "subcommands": [
1815
+ {
1816
+ "name": "install",
1817
+ "description": "Run skills dependency install script (install.sh / install.ps1)",
1818
+ "usage": "ack setup install [options]",
1819
+ "examples": [
1820
+ {
1821
+ "command": "ack setup install",
1822
+ "description": "Run install script in ./.claude/skills"
1823
+ },
1824
+ {
1825
+ "command": "ack setup install --global",
1826
+ "description": "Run install script in ~/.claude/skills"
1827
+ },
1828
+ {
1829
+ "command": "ack setup install --dir /custom/path --with-sudo",
1830
+ "description": "Custom dir with sudo for system packages"
1831
+ }
1832
+ ],
1833
+ "optionGroups": [
1834
+ {
1835
+ "title": "Options",
1836
+ "options": [
1837
+ {
1838
+ "flags": "--global",
1839
+ "description": "Use ~/.claude/skills"
1840
+ },
1841
+ {
1842
+ "flags": "--dir <dir>",
1843
+ "description": "Custom skills directory"
1844
+ },
1845
+ {
1846
+ "flags": "--with-sudo",
1847
+ "description": "Allow sudo for system packages (Linux)"
1848
+ },
1849
+ {
1850
+ "flags": "-y, --yes",
1851
+ "description": "Skip confirmation prompts"
1852
+ }
1853
+ ]
1854
+ }
1855
+ ]
1856
+ }
1857
+ ]
1858
+ },
1859
+ "setup install": {
1860
+ "name": "setup install",
1861
+ "description": "Run skills dependency install script (install.sh / install.ps1)",
1862
+ "usage": "ack setup install [options]",
1863
+ "examples": [
1864
+ {
1865
+ "command": "ack setup install",
1866
+ "description": "Run install script in ./.claude/skills"
1867
+ },
1868
+ {
1869
+ "command": "ack setup install --global",
1870
+ "description": "Run install script in ~/.claude/skills"
1871
+ },
1872
+ {
1873
+ "command": "ack setup install --dir /custom/path --with-sudo",
1874
+ "description": "Custom dir with sudo for system packages"
1875
+ }
1876
+ ],
1877
+ "optionGroups": [
1878
+ {
1879
+ "title": "Options",
1880
+ "options": [
1881
+ {
1882
+ "flags": "--global",
1883
+ "description": "Use ~/.claude/skills"
1884
+ },
1885
+ {
1886
+ "flags": "--dir <dir>",
1887
+ "description": "Custom skills directory"
1888
+ },
1889
+ {
1890
+ "flags": "--with-sudo",
1891
+ "description": "Allow sudo for system packages (Linux)"
1892
+ },
1893
+ {
1894
+ "flags": "-y, --yes",
1895
+ "description": "Skip confirmation prompts"
1896
+ }
1897
+ ]
1898
+ }
1813
1899
  ]
1814
1900
  },
1815
1901
  "skills": {
package/dist/index.js CHANGED
@@ -63692,7 +63692,7 @@ var package_default;
63692
63692
  var init_package = __esm(() => {
63693
63693
  package_default = {
63694
63694
  name: "@chiendt/ack-cli",
63695
- version: "1.0.1-dev.2",
63695
+ version: "1.0.1-dev.6",
63696
63696
  description: "ACK CLI - tool for bootstrapping and updating ACK kits (Claude Code agent kits)",
63697
63697
  type: "module",
63698
63698
  repository: {
@@ -67614,7 +67614,8 @@ var init_config_version_checker = __esm(() => {
67614
67614
  CACHE_TTL_MS = parseCacheTtl();
67615
67615
  KIT_REPOS = {
67616
67616
  engineer: { owner: "ack", repo: "ack-engineer" },
67617
- marketing: { owner: "ack", repo: "claudekit-marketing" }
67617
+ marketing: { owner: "ack", repo: "claudekit-marketing" },
67618
+ "fqc-qa": { owner: "chiendt1108", repo: "ack-fqc-qa" }
67618
67619
  };
67619
67620
  });
67620
67621
 
@@ -76521,9 +76522,9 @@ async function listActiveWorktrees(projectDir) {
76521
76522
  for (const line of output2.split(`
76522
76523
  `)) {
76523
76524
  if (line.startsWith("worktree ")) {
76524
- const path9 = line.slice(9).replace(/\\/g, "/");
76525
- if (path9.startsWith(worktreePrefix)) {
76526
- const num = Number.parseInt(path9.slice(worktreePrefix.length), 10);
76525
+ const path10 = line.slice(9).replace(/\\/g, "/");
76526
+ if (path10.startsWith(worktreePrefix)) {
76527
+ const num = Number.parseInt(path10.slice(worktreePrefix.length), 10);
76527
76528
  if (!Number.isNaN(num))
76528
76529
  issueNumbers.push(num);
76529
76530
  }
@@ -80968,9 +80969,45 @@ var init_projects_command_help = __esm(() => {
80968
80969
  };
80969
80970
  });
80970
80971
 
80972
+ // src/domains/help/commands/setup-install-command-help.ts
80973
+ var setupInstallCommandHelp;
80974
+ var init_setup_install_command_help = __esm(() => {
80975
+ setupInstallCommandHelp = {
80976
+ name: "setup install",
80977
+ description: "Run skills dependency install script (install.sh / install.ps1)",
80978
+ usage: "ack setup install [options]",
80979
+ examples: [
80980
+ {
80981
+ command: "ack setup install",
80982
+ description: "Run install script in ./.claude/skills"
80983
+ },
80984
+ {
80985
+ command: "ack setup install --global",
80986
+ description: "Run install script in ~/.claude/skills"
80987
+ },
80988
+ {
80989
+ command: "ack setup install --dir /custom/path --with-sudo",
80990
+ description: "Custom dir with sudo for system packages"
80991
+ }
80992
+ ],
80993
+ optionGroups: [
80994
+ {
80995
+ title: "Options",
80996
+ options: [
80997
+ { flags: "--global", description: "Use ~/.claude/skills" },
80998
+ { flags: "--dir <dir>", description: "Custom skills directory" },
80999
+ { flags: "--with-sudo", description: "Allow sudo for system packages (Linux)" },
81000
+ { flags: "-y, --yes", description: "Skip confirmation prompts" }
81001
+ ]
81002
+ }
81003
+ ]
81004
+ };
81005
+ });
81006
+
80971
81007
  // src/domains/help/commands/setup-command-help.ts
80972
81008
  var setupCommandHelp;
80973
81009
  var init_setup_command_help = __esm(() => {
81010
+ init_setup_install_command_help();
80974
81011
  setupCommandHelp = {
80975
81012
  name: "setup",
80976
81013
  description: "Run guided setup for provider API keys, preferred image provider, and optional packages",
@@ -81008,6 +81045,15 @@ var init_setup_command_help = __esm(() => {
81008
81045
  }
81009
81046
  ]
81010
81047
  }
81048
+ ],
81049
+ subcommands: [
81050
+ {
81051
+ name: "install",
81052
+ description: setupInstallCommandHelp.description,
81053
+ usage: setupInstallCommandHelp.usage,
81054
+ examples: setupInstallCommandHelp.examples,
81055
+ optionGroups: setupInstallCommandHelp.optionGroups
81056
+ }
81011
81057
  ]
81012
81058
  };
81013
81059
  });
@@ -81395,6 +81441,7 @@ var init_commands2 = __esm(() => {
81395
81441
  init_plan_command_help();
81396
81442
  init_projects_command_help();
81397
81443
  init_setup_command_help();
81444
+ init_setup_install_command_help();
81398
81445
  init_skills_command_help();
81399
81446
  init_uninstall_command_help();
81400
81447
  init_update_command_help();
@@ -81425,6 +81472,7 @@ var init_help_commands = __esm(() => {
81425
81472
  plan: planCommandHelp,
81426
81473
  projects: projectsCommandHelp,
81427
81474
  setup: setupCommandHelp,
81475
+ "setup install": setupInstallCommandHelp,
81428
81476
  skills: skillsCommandHelp,
81429
81477
  uninstall: uninstallCommandHelp,
81430
81478
  update: updateCommandHelp,
@@ -100152,7 +100200,7 @@ init_types3();
100152
100200
  var import_fs_extra17 = __toESM(require_lib(), 1);
100153
100201
  async function writeManifest(claudeDir3, kitName, version, scope, kitType, trackedFiles, userConfigFiles) {
100154
100202
  const metadataPath = join111(claudeDir3, "metadata.json");
100155
- const kit = kitType || (/\bmarketing\b/i.test(kitName) ? "marketing" : "engineer");
100203
+ const kit = kitType || (/\bfqc[\s_-]?qa\b/i.test(kitName) ? "fqc-qa" : /\bmarketing\b/i.test(kitName) ? "marketing" : "engineer");
100156
100204
  await import_fs_extra17.ensureFile(metadataPath);
100157
100205
  let release = null;
100158
100206
  try {
@@ -108963,6 +109011,22 @@ async function setupCommand(options2) {
108963
109011
  f2.success(`Installed packages: ${ctx.packagesInstalled.join(", ")}`);
108964
109012
  }
108965
109013
  }
109014
+ // src/commands/setup/setup-install-command.ts
109015
+ init_package_installer();
109016
+ init_logger();
109017
+ init_path_resolver();
109018
+ import path9 from "node:path";
109019
+ async function setupInstallCommand(options2) {
109020
+ if (options2.dir && options2.global) {
109021
+ logger.error("--dir and --global are mutually exclusive. Use one or the other.");
109022
+ process.exit(1);
109023
+ }
109024
+ const resolvedDir = options2.dir ? path9.resolve(options2.dir) : PathResolver.buildSkillsPath(options2.global ? PathResolver.getGlobalKitDir() : process.cwd(), !!options2.global);
109025
+ await handleSkillsInstallation(resolvedDir, {
109026
+ skipConfirm: !!options2.yes,
109027
+ withSudo: !!options2.withSudo
109028
+ });
109029
+ }
108966
109030
  // src/commands/skills/skills-command.ts
108967
109031
  init_dist2();
108968
109032
  init_skill_catalog_generator();
@@ -112355,6 +112419,9 @@ function registerCommands(cli) {
112355
112419
  cli.command("setup", "Configure API keys and optional packages").option("--global", "Configure globally (~/.claude/)").option("--skip-packages", "Skip optional package installation").option("--dir <dir>", "Target directory (default: current directory)").action(async (options2) => {
112356
112420
  await setupCommand(options2);
112357
112421
  });
112422
+ cli.command("setup install", "Run skills dependency install script").option("--global", "Use ~/.claude/skills").option("--dir <dir>", "Custom skills directory").option("--with-sudo", "Allow sudo for system packages (Linux)").option("-y, --yes", "Skip confirmation prompts").action(async (options2) => {
112423
+ await setupInstallCommand(options2);
112424
+ });
112358
112425
  cli.command("skills", "Install AckKit skills to other coding agents").option("-n, --name <skill>", "Skill name to install/uninstall").option("-a, --agent <agents...>", "Target agents (claude-code, cursor, codex, etc.)").option("-g, --global", "Install/uninstall globally instead of project-level").option("-l, --list", "List available skills").option("--installed", "Show installed skills (use with --list)").option("--all", "Install to all supported agents").option("-u, --uninstall", "Uninstall skill(s)").option("--force", "Force uninstall even if not in registry").option("--sync", "Sync registry with filesystem (remove orphans)").option("-y, --yes", "Skip confirmation prompts").option("--catalog", "Show skill catalog stats").option("--regenerate", "Force regenerate catalog (use with --catalog)").option("--search <query>", "BM25 full-text search over skill catalog").option("--json", "Output search results as JSON (use with --search)").option("--limit <n>", "Max search results, default 10 (use with --search)").option("--validate", "Validate SKILL.md frontmatter fields").action(async (options2) => {
112359
112426
  if (options2.agent && !Array.isArray(options2.agent)) {
112360
112427
  options2.agent = [options2.agent];
@@ -112379,8 +112446,8 @@ function registerCommands(cli) {
112379
112446
  cli.command("plan [action] [target]", "Plan management: parse, validate, status, kanban, create, check, uncheck, add-phase").option("--json", "Output in JSON format").option("--strict", "Strict validation mode").option("--port <port>", "Port for kanban dashboard").option("--no-open", "Don't auto-open browser").option("--dev", "Development mode for dashboard").option("-g, --global", "Use global plans scope (~/.claude/plans or configured global root)").option("--title <title>", "Plan title (for create)").option("--phases <phases>", "Comma-separated phase names (for create)").option("--dir <dir>", "Plan directory (for create)").option("--priority <priority>", "Priority: P1, P2, P3 (for create)").option("--issue <issue>", "GitHub issue number (for create)").option("--after <after>", "Insert after phase ID (for add-phase)").option("--start", "Mark as in-progress instead of completed (for check)").option("--source <source>", "Creation source: skill | cli | dashboard (for create)").option("--session-id <id>", "Claude session ID for tracking (for create)").action(async (action, target, options2) => {
112380
112447
  await planCommand(action, target, options2);
112381
112448
  });
112382
- cli.command("api [action] [service] [path]", "Interact with AckKit API and proxy services").option("--method <method>", "HTTP method for proxy requests (default: GET)").option("--body <json>", "Request body as JSON string (proxy only)").option("--query <json>", "Query params as JSON string (proxy only)").option("--key <key>", "API key to use (setup only)").option("--force", "Force re-setup even if key exists (setup only)").option("--json", "Output raw JSON instead of formatted display").option("--locale <locale>", "Locale for vidcap summary/caption (default: en)").option("--max-results <n>", "Max results for vidcap search").option("--second <s>", "Timestamp in seconds for vidcap screenshot").option("--order <order>", "Sort order for vidcap comments (time/relevance)").option("--format <fmt>", "Summary format for reviewweb (bullet/paragraph)").option("--max-length <n>", "Max summary length for reviewweb").option("--instructions <text>", "Extraction instructions for reviewweb extract").option("--template <json>", "JSON template for reviewweb extract").option("--type <type>", "Link type filter for reviewweb links (web/image/file/all)").option("--country <code>", "Country code for reviewweb SEO commands").action(async (action, service, path9, options2) => {
112383
- await apiCommand(action, service, path9, options2);
112449
+ cli.command("api [action] [service] [path]", "Interact with AckKit API and proxy services").option("--method <method>", "HTTP method for proxy requests (default: GET)").option("--body <json>", "Request body as JSON string (proxy only)").option("--query <json>", "Query params as JSON string (proxy only)").option("--key <key>", "API key to use (setup only)").option("--force", "Force re-setup even if key exists (setup only)").option("--json", "Output raw JSON instead of formatted display").option("--locale <locale>", "Locale for vidcap summary/caption (default: en)").option("--max-results <n>", "Max results for vidcap search").option("--second <s>", "Timestamp in seconds for vidcap screenshot").option("--order <order>", "Sort order for vidcap comments (time/relevance)").option("--format <fmt>", "Summary format for reviewweb (bullet/paragraph)").option("--max-length <n>", "Max summary length for reviewweb").option("--instructions <text>", "Extraction instructions for reviewweb extract").option("--template <json>", "JSON template for reviewweb extract").option("--type <type>", "Link type filter for reviewweb links (web/image/file/all)").option("--country <code>", "Country code for reviewweb SEO commands").action(async (action, service, path10, options2) => {
112450
+ await apiCommand(action, service, path10, options2);
112384
112451
  });
112385
112452
  cli.command("migrate", "Migrate agents, commands, skills, config, rules, and hooks to other providers").option("-a, --agent <agents...>", "Target providers (cursor, codex, droid, opencode, etc.)").option("-g, --global", "Install globally instead of project-level").option("--all", "Migrate to all supported providers").option("-y, --yes", "Skip confirmation prompts").option("--only-agents", "Migrate agents only").option("--only-commands", "Migrate commands only").option("--only-skills", "Migrate skills only").option("--config", "Migrate CLAUDE.md config only").option("--rules", "Migrate .claude/rules/ only").option("--hooks", "Migrate .claude/hooks/ only").option("--skip-agents", "Skip agents migration").option("--skip-commands", "Skip commands migration").option("--skip-skills", "Skip skills migration (preserve symlinks/custom layouts)").option("--skip-config", "Skip config migration").option("--skip-rules", "Skip rules migration").option("--skip-hooks", "Skip hooks migration").option("--source <path>", "Custom CLAUDE.md source path (config only, not agents/commands/skills/hooks)").option("--dry-run", "Preview migration targets without writing files").option("-f, --force", "Force reinstall deleted/edited items").option("--install", "Opt-in install picker mode (select specific items to install)").option("--reconcile", "Force reconcile mode (current default when registry is valid)").option("--reinstall-empty-dirs", "Reinstall all items when their type directory is empty (default: true)").option("--respect-deletions", "Preserve deletion even when type directory is empty (disables reinstall-empty-dirs)").action(async (options2) => {
112386
112453
  if (options2.agent && !Array.isArray(options2.agent)) {
@@ -112480,10 +112547,13 @@ class VersionCacheManager {
112480
112547
 
112481
112548
  // src/domains/versioning/checking/kit-version-checker.ts
112482
112549
  init_version_utils();
112483
- async function fetchLatestRelease(currentVersion) {
112550
+ async function fetchLatestRelease(currentVersion, kitType) {
112484
112551
  try {
112485
112552
  const githubClient = new GitHubClient;
112486
- const kit = AVAILABLE_KITS.engineer;
112553
+ const kit = AVAILABLE_KITS[kitType];
112554
+ if (!kit) {
112555
+ throw new Error(`Unsupported kit type: ${kitType}`);
112556
+ }
112487
112557
  const timeoutPromise = new Promise((_4, reject) => setTimeout(() => reject(new Error("Timeout")), 5000));
112488
112558
  const releasePromise = githubClient.getLatestRelease(kit);
112489
112559
  const release = await Promise.race([releasePromise, timeoutPromise]);
@@ -112504,7 +112574,7 @@ async function fetchLatestRelease(currentVersion) {
112504
112574
  }
112505
112575
 
112506
112576
  class VersionChecker {
112507
- static async check(currentVersion) {
112577
+ static async check(currentVersion, kitType) {
112508
112578
  if (isUpdateCheckDisabled()) {
112509
112579
  logger.debug("Update check disabled by environment");
112510
112580
  return null;
@@ -112520,7 +112590,7 @@ class VersionChecker {
112520
112590
  };
112521
112591
  }
112522
112592
  logger.debug("Cache expired or invalid, fetching latest release");
112523
- const result = await fetchLatestRelease(currentVersion);
112593
+ const result = await fetchLatestRelease(currentVersion, kitType);
112524
112594
  if (result) {
112525
112595
  await VersionCacheManager.save({
112526
112596
  lastCheck: Date.now(),
@@ -112648,8 +112718,8 @@ function displayCliNotification(result) {
112648
112718
  }
112649
112719
  // src/domains/versioning/version-checker.ts
112650
112720
  class VersionChecker2 {
112651
- static async check(currentVersion) {
112652
- return VersionChecker.check(currentVersion);
112721
+ static async check(currentVersion, kitType) {
112722
+ return VersionChecker.check(currentVersion, kitType);
112653
112723
  }
112654
112724
  static displayNotification(result, options2 = {}) {
112655
112725
  displayKitNotification(result, options2);
@@ -112688,7 +112758,11 @@ function getInstalledKitTypes(metadata) {
112688
112758
  return Object.keys(metadata.kits);
112689
112759
  }
112690
112760
  function inferLegacyKitType(metadata) {
112691
- if (/\bmarketing\b/i.test(metadata.name ?? "")) {
112761
+ const name = metadata.name ?? "";
112762
+ if (/\bfqc[\s_-]?qa\b/i.test(name)) {
112763
+ return "fqc-qa";
112764
+ }
112765
+ if (/\bmarketing\b/i.test(name)) {
112692
112766
  return "marketing";
112693
112767
  }
112694
112768
  return "engineer";
@@ -112841,18 +112915,18 @@ class Logger2 {
112841
112915
  isVerbose() {
112842
112916
  return this.verboseEnabled;
112843
112917
  }
112844
- setLogFile(path9) {
112918
+ setLogFile(path10) {
112845
112919
  if (this.logFileStream) {
112846
112920
  this.logFileStream.end();
112847
112921
  this.logFileStream = undefined;
112848
112922
  }
112849
- if (path9) {
112850
- this.logFileStream = createWriteStream5(path9, {
112923
+ if (path10) {
112924
+ this.logFileStream = createWriteStream5(path10, {
112851
112925
  flags: "a",
112852
112926
  mode: 384
112853
112927
  });
112854
112928
  this.registerExitHandler();
112855
- this.verbose(`Logging to file: ${path9}`);
112929
+ this.verbose(`Logging to file: ${path10}`);
112856
112930
  }
112857
112931
  }
112858
112932
  close() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chiendt/ack-cli",
3
- "version": "1.0.1-dev.2",
3
+ "version": "1.0.1-dev.6",
4
4
  "description": "ACK CLI - tool for bootstrapping and updating ACK kits (Claude Code agent kits)",
5
5
  "type": "module",
6
6
  "repository": {