ccjk 12.0.0 → 12.0.2

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.
Files changed (161) hide show
  1. package/dist/chunks/agent-teams.mjs +17 -18
  2. package/dist/chunks/agent.mjs +105 -102
  3. package/dist/chunks/agents.mjs +87 -77
  4. package/dist/chunks/api-cli.mjs +41 -27
  5. package/dist/chunks/api-providers.mjs +2 -4
  6. package/dist/chunks/api.mjs +22 -11
  7. package/dist/chunks/auto-bootstrap.mjs +3 -5
  8. package/dist/chunks/auto-init.mjs +3 -4
  9. package/dist/chunks/auto-updater.mjs +103 -91
  10. package/dist/chunks/banner.mjs +41 -42
  11. package/dist/chunks/boost.mjs +30 -31
  12. package/dist/chunks/ccjk-agents.mjs +6 -9
  13. package/dist/chunks/ccjk-all.mjs +703 -85
  14. package/dist/chunks/ccjk-config.mjs +6 -6
  15. package/dist/chunks/ccjk-hooks.mjs +20 -9
  16. package/dist/chunks/ccjk-mcp.mjs +64 -52
  17. package/dist/chunks/ccjk-setup.mjs +35 -25
  18. package/dist/chunks/ccjk-skills.mjs +51 -41
  19. package/dist/chunks/ccr.mjs +42 -32
  20. package/dist/chunks/ccu.mjs +16 -12
  21. package/dist/chunks/check-updates.mjs +30 -19
  22. package/dist/chunks/claude-code-config-manager.mjs +25 -10
  23. package/dist/chunks/claude-code-incremental-manager.mjs +65 -51
  24. package/dist/chunks/claude-config.mjs +2 -2
  25. package/dist/chunks/claude-wrapper.mjs +9 -6
  26. package/dist/chunks/cleanup-migration.mjs +1 -1
  27. package/dist/chunks/cli-hook.mjs +10 -3
  28. package/dist/chunks/cloud-sync.mjs +1 -1
  29. package/dist/chunks/codex-config-switch.mjs +58 -45
  30. package/dist/chunks/codex-provider-manager.mjs +29 -16
  31. package/dist/chunks/codex-uninstaller.mjs +5 -6
  32. package/dist/chunks/codex.mjs +89 -89
  33. package/dist/chunks/commands.mjs +28 -29
  34. package/dist/chunks/commands2.mjs +4 -3
  35. package/dist/chunks/commit.mjs +42 -23
  36. package/dist/chunks/completion.mjs +46 -47
  37. package/dist/chunks/config-consolidator.mjs +12 -13
  38. package/dist/chunks/config-switch.mjs +66 -53
  39. package/dist/chunks/config.mjs +10 -10
  40. package/dist/chunks/config2.mjs +53 -42
  41. package/dist/chunks/config3.mjs +107 -93
  42. package/dist/chunks/constants.mjs +2 -4
  43. package/dist/chunks/context-loader.mjs +5 -4
  44. package/dist/chunks/context.mjs +77 -76
  45. package/dist/chunks/convoy-manager.mjs +4 -4
  46. package/dist/chunks/dashboard.mjs +28 -29
  47. package/dist/chunks/doctor.mjs +68 -54
  48. package/dist/chunks/evolution.mjs +37 -38
  49. package/dist/chunks/features.mjs +103 -92
  50. package/dist/chunks/fs-operations.mjs +1 -1
  51. package/dist/chunks/health-alerts.mjs +1 -1
  52. package/dist/chunks/health-check.mjs +1 -1
  53. package/dist/chunks/help.mjs +117 -116
  54. package/dist/chunks/hook-installer.mjs +3 -2
  55. package/dist/chunks/index.mjs +20 -6
  56. package/dist/chunks/index10.mjs +1171 -0
  57. package/dist/chunks/index11.mjs +1008 -0
  58. package/dist/chunks/index12.mjs +193 -0
  59. package/dist/chunks/index13.mjs +218 -0
  60. package/dist/chunks/index14.mjs +663 -0
  61. package/dist/chunks/index2.mjs +19 -10
  62. package/dist/chunks/index3.mjs +19079 -164
  63. package/dist/chunks/index4.mjs +8 -1171
  64. package/dist/chunks/index5.mjs +7479 -884
  65. package/dist/chunks/index6.mjs +160 -184
  66. package/dist/chunks/index7.mjs +3573 -653
  67. package/dist/chunks/index8.mjs +19 -0
  68. package/dist/chunks/index9.mjs +616 -0
  69. package/dist/chunks/init.mjs +173 -173
  70. package/dist/chunks/installer.mjs +92 -82
  71. package/dist/chunks/installer2.mjs +3 -2
  72. package/dist/chunks/interview.mjs +118 -107
  73. package/dist/chunks/json-config.mjs +3 -2
  74. package/dist/chunks/linux.mjs +3863 -0
  75. package/dist/chunks/macos.mjs +69 -0
  76. package/dist/chunks/main.mjs +635 -0
  77. package/dist/chunks/marketplace.mjs +69 -66
  78. package/dist/chunks/mcp-cli.mjs +61 -48
  79. package/dist/chunks/mcp.mjs +140 -127
  80. package/dist/chunks/menu.mjs +85 -85
  81. package/dist/chunks/metrics-display.mjs +41 -40
  82. package/dist/chunks/migrator.mjs +4 -5
  83. package/dist/chunks/monitor.mjs +95 -95
  84. package/dist/chunks/notification.mjs +151 -141
  85. package/dist/chunks/onboarding.mjs +26 -15
  86. package/dist/chunks/package.mjs +1 -1
  87. package/dist/chunks/paradigm.mjs +24 -23
  88. package/dist/chunks/permission-manager.mjs +10 -11
  89. package/dist/chunks/permissions.mjs +72 -57
  90. package/dist/chunks/persistence-manager.mjs +97 -84
  91. package/dist/chunks/persistence.mjs +1 -1
  92. package/dist/chunks/platform.mjs +29 -29
  93. package/dist/chunks/plugin.mjs +104 -105
  94. package/dist/chunks/prompts.mjs +36 -25
  95. package/dist/chunks/providers.mjs +68 -69
  96. package/dist/chunks/quick-actions.mjs +71 -72
  97. package/dist/chunks/quick-provider.mjs +56 -40
  98. package/dist/chunks/quick-setup.mjs +71 -60
  99. package/dist/chunks/remote.mjs +21 -12
  100. package/dist/chunks/session.mjs +116 -103
  101. package/dist/chunks/sessions.mjs +29 -28
  102. package/dist/chunks/silent-updater.mjs +8 -10
  103. package/dist/chunks/simple-config.mjs +13 -10
  104. package/dist/chunks/skill.mjs +8560 -103
  105. package/dist/chunks/skills-sync.mjs +5212 -79
  106. package/dist/chunks/skills.mjs +105 -94
  107. package/dist/chunks/slash-commands.mjs +36 -37
  108. package/dist/chunks/smart-defaults.mjs +7 -3
  109. package/dist/chunks/smart-guide.mjs +1 -1
  110. package/dist/chunks/startup.mjs +2 -4
  111. package/dist/chunks/stats.mjs +41 -42
  112. package/dist/chunks/status.mjs +49 -50
  113. package/dist/chunks/team.mjs +24 -12
  114. package/dist/chunks/thinking.mjs +74 -63
  115. package/dist/chunks/trace.mjs +20 -19
  116. package/dist/chunks/uninstall.mjs +69 -56
  117. package/dist/chunks/update.mjs +39 -28
  118. package/dist/chunks/upgrade-manager.mjs +24 -18
  119. package/dist/chunks/version-checker.mjs +45 -41
  120. package/dist/chunks/vim.mjs +81 -69
  121. package/dist/chunks/windows.mjs +14 -0
  122. package/dist/chunks/workflows.mjs +15 -15
  123. package/dist/chunks/wsl.mjs +129 -0
  124. package/dist/chunks/zero-config.mjs +45 -34
  125. package/dist/cli.mjs +20 -20
  126. package/dist/index.mjs +41 -31
  127. package/dist/shared/ccjk.BAGoDD49.mjs +36 -0
  128. package/dist/shared/ccjk.BBtCGd_g.mjs +899 -0
  129. package/dist/shared/{ccjk.CGcy7cNM.mjs → ccjk.BDKUdmLk.mjs} +1 -1
  130. package/dist/shared/{ccjk.DtMBiwVG.mjs → ccjk.BFxsJM0k.mjs} +1 -1
  131. package/dist/shared/{ccjk.j4uut26D.mjs → ccjk.BIxuVL3_.mjs} +5 -5
  132. package/dist/shared/ccjk.BRZ9ww8S.mjs +142 -0
  133. package/dist/shared/{ccjk.CN0edl87.mjs → ccjk.BSYWk9ML.mjs} +1 -1
  134. package/dist/shared/{ccjk.Dk1HDseQ.mjs → ccjk.BnpWvs9V.mjs} +75 -75
  135. package/dist/shared/ccjk.BoApaI4j.mjs +28 -0
  136. package/dist/shared/{ccjk.DKojSRzw.mjs → ccjk.BrPUmTqm.mjs} +1 -1
  137. package/dist/shared/{ccjk.C10pepYx.mjs → ccjk.BxSmJ8B7.mjs} +1 -1
  138. package/dist/shared/ccjk.Bx_rmYfN.mjs +69 -0
  139. package/dist/shared/ccjk.COweQ1RR.mjs +5 -0
  140. package/dist/shared/{ccjk.BN90X6oc.mjs → ccjk.CePkJq2S.mjs} +17 -17
  141. package/dist/shared/{ccjk.Bvoex4TZ.mjs → ccjk.CfKKcvWy.mjs} +1 -1
  142. package/dist/shared/ccjk.Cjgrln_h.mjs +297 -0
  143. package/dist/shared/ccjk.CxpGa6MC.mjs +2724 -0
  144. package/dist/shared/{ccjk.DfwJOEok.mjs → ccjk.D5MFQT7w.mjs} +1 -1
  145. package/dist/shared/{ccjk.cChAaGgT.mjs → ccjk.DG_o24cZ.mjs} +6 -6
  146. package/dist/shared/{ccjk.bhFAMRyc.mjs → ccjk.DLLw-h4Y.mjs} +32 -32
  147. package/dist/shared/ccjk.DOwtZMk8.mjs +4019 -0
  148. package/dist/shared/{ccjk.BsXQugfY.mjs → ccjk.DTdjs-qK.mjs} +13 -13
  149. package/dist/shared/{ccjk.Bdhyg3X-.mjs → ccjk.DsYaCCx4.mjs} +1 -1
  150. package/dist/shared/ccjk.KfSWcGlE.mjs +38 -0
  151. package/dist/shared/ccjk.RyizuzOI.mjs +21 -0
  152. package/dist/shared/{ccjk.h7_W-wTs.mjs → ccjk.SPoXMvZD.mjs} +1 -1
  153. package/dist/shared/ccjk.T_cX87dY.mjs +15 -0
  154. package/dist/shared/{ccjk.CrB6OYHv.mjs → ccjk._dESH4Rk.mjs} +2 -2
  155. package/dist/shared/ccjk.bQ7Dh1g4.mjs +249 -0
  156. package/dist/shared/{ccjk.CBhIZiPz.mjs → ccjk.hoqrwWdN.mjs} +1 -1
  157. package/dist/shared/{ccjk.BNwRnWYx.mjs → ccjk.s7OCVzdd.mjs} +1230 -33
  158. package/dist/shared/{ccjk.BOIUTf5z.mjs → ccjk.waa2ikKJ.mjs} +8 -9
  159. package/package.json +31 -30
  160. package/dist/shared/ccjk.DHbrGcgg.mjs +0 -13
  161. package/dist/shared/ccjk.DntgA8fQ.mjs +0 -42
@@ -2,15 +2,26 @@ import { existsSync } from 'node:fs';
2
2
  import { writeFile, mkdir, readFile } from 'node:fs/promises';
3
3
  import { resolve, dirname, join } from 'node:path';
4
4
  import process__default from 'node:process';
5
- import ansis from 'ansis';
6
- import inquirer from 'inquirer';
7
- import { i18n } from './index3.mjs';
8
- import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.j4uut26D.mjs';
5
+ import a from './index2.mjs';
6
+ import { i as inquirer } from './index3.mjs';
7
+ import { i18n } from './index5.mjs';
8
+ import { h as handleExitPromptError, a as handleGeneralError } from '../shared/ccjk.BIxuVL3_.mjs';
9
9
  import { randomUUID } from 'node:crypto';
10
+ import '../shared/ccjk.BAGoDD49.mjs';
11
+ import 'node:readline';
12
+ import 'stream';
13
+ import 'node:tty';
14
+ import 'node:async_hooks';
15
+ import '../shared/ccjk.Cjgrln_h.mjs';
16
+ import 'node:util';
17
+ import 'tty';
18
+ import 'fs';
19
+ import 'child_process';
20
+ import 'node:os';
21
+ import 'buffer';
22
+ import 'string_decoder';
10
23
  import 'node:url';
11
- import 'i18next';
12
- import 'i18next-fs-backend';
13
- import 'pathe';
24
+ import '../shared/ccjk.bQ7Dh1g4.mjs';
14
25
 
15
26
  const projectFoundationQuestions = [
16
27
  {
@@ -2309,14 +2320,14 @@ function createSpecGenerator(language = "en") {
2309
2320
  function displayInterviewBanner(compact = false) {
2310
2321
  console.log("");
2311
2322
  if (compact) {
2312
- console.log(ansis.green.bold(" \u{1F3A4} Interview-Driven Development"));
2313
- console.log(ansis.gray(' "Interview first. Spec second. Code last."'));
2323
+ console.log(a.green.bold(" \u{1F3A4} Interview-Driven Development"));
2324
+ console.log(a.gray(' "Interview first. Spec second. Code last."'));
2314
2325
  } else {
2315
- console.log(ansis.green("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"));
2316
- console.log(ansis.green("\u2551") + ansis.bold.white(" \u{1F3A4} Interview-Driven Development (IDD) ") + ansis.green("\u2551"));
2317
- console.log(ansis.green("\u2551") + ansis.gray(' "Interview first. Spec second. Code last." ') + ansis.green("\u2551"));
2318
- console.log(ansis.green("\u2551") + ansis.gray(" Based on Thariq (@trq212) workflow from Anthropic ") + ansis.green("\u2551"));
2319
- console.log(ansis.green("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
2326
+ console.log(a.green("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"));
2327
+ console.log(a.green("\u2551") + a.bold.white(" \u{1F3A4} Interview-Driven Development (IDD) ") + a.green("\u2551"));
2328
+ console.log(a.green("\u2551") + a.gray(' "Interview first. Spec second. Code last." ') + a.green("\u2551"));
2329
+ console.log(a.green("\u2551") + a.gray(" Based on Thariq (@trq212) workflow from Anthropic ") + a.green("\u2551"));
2330
+ console.log(a.green("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
2320
2331
  }
2321
2332
  console.log("");
2322
2333
  }
@@ -2349,22 +2360,22 @@ function displayProgressBar(session) {
2349
2360
  const barWidth = 30;
2350
2361
  const filled = Math.round(percentage / 100 * barWidth);
2351
2362
  const empty = barWidth - filled;
2352
- const bar = ansis.green("\u2588".repeat(filled)) + ansis.gray("\u2591".repeat(empty));
2363
+ const bar = a.green("\u2588".repeat(filled)) + a.gray("\u2591".repeat(empty));
2353
2364
  console.log("");
2354
- console.log(ansis.gray(` Progress: [${bar}] ${percentage}%`));
2365
+ console.log(a.gray(` Progress: [${bar}] ${percentage}%`));
2355
2366
  }
2356
2367
  function displayCategoryBreadcrumb(session) {
2357
2368
  const breadcrumb = session.progress.map((p) => {
2358
2369
  const category = getCategoryById(p.categoryId);
2359
2370
  const icon = category?.icon || "\u{1F4CC}";
2360
2371
  if (p.isComplete) {
2361
- return ansis.green(`${icon} ${p.name} \u2713`);
2372
+ return a.green(`${icon} ${p.name} \u2713`);
2362
2373
  }
2363
2374
  if (p.isCurrent) {
2364
- return ansis.green.bold(`${icon} ${p.name} \u25C0`);
2375
+ return a.green.bold(`${icon} ${p.name} \u25C0`);
2365
2376
  }
2366
- return ansis.gray(`${icon} ${p.name}`);
2367
- }).join(ansis.gray(" \u2192 "));
2377
+ return a.gray(`${icon} ${p.name}`);
2378
+ }).join(a.gray(" \u2192 "));
2368
2379
  console.log("");
2369
2380
  console.log(` ${breadcrumb}`);
2370
2381
  }
@@ -2372,26 +2383,26 @@ function displayQuestion(display, lang) {
2372
2383
  const questionText = display.question.question[lang];
2373
2384
  const headerText = display.question.header[lang];
2374
2385
  console.log("");
2375
- console.log(ansis.gray("\u2500".repeat(65)));
2386
+ console.log(a.gray("\u2500".repeat(65)));
2376
2387
  console.log("");
2377
- console.log(ansis.green.bold(` Q${display.questionNumber}`) + ansis.gray(` of ~${display.estimatedTotal}`) + ansis.gray(` \u2502 `) + ansis.yellow(headerText));
2388
+ console.log(a.green.bold(` Q${display.questionNumber}`) + a.gray(` of ~${display.estimatedTotal}`) + a.gray(` \u2502 `) + a.yellow(headerText));
2378
2389
  console.log("");
2379
- console.log(ansis.white.bold(` ${questionText}`));
2390
+ console.log(a.white.bold(` ${questionText}`));
2380
2391
  console.log("");
2381
2392
  }
2382
2393
  async function askQuestion(display, lang) {
2383
2394
  displayQuestion(display, lang);
2384
2395
  const choices = display.options.map((opt, index) => {
2385
- const label = opt.isRecommended ? `${opt.label} ${ansis.green("(Recommended)")}` : opt.label;
2396
+ const label = opt.isRecommended ? `${opt.label} ${a.green("(Recommended)")}` : opt.label;
2386
2397
  return {
2387
- name: `${ansis.green(`${index + 1}.`)} ${label}
2388
- ${ansis.gray(opt.description)}`,
2398
+ name: `${a.green(`${index + 1}.`)} ${label}
2399
+ ${a.gray(opt.description)}`,
2389
2400
  value: opt.value,
2390
2401
  short: opt.label
2391
2402
  };
2392
2403
  });
2393
2404
  choices.push({
2394
- name: `${ansis.green(`${choices.length + 1}.`)} ${ansis.italic("Type something else...")}`,
2405
+ name: `${a.green(`${choices.length + 1}.`)} ${a.italic("Type something else...")}`,
2395
2406
  value: "__custom__",
2396
2407
  short: "Custom"
2397
2408
  });
@@ -2400,7 +2411,7 @@ async function askQuestion(display, lang) {
2400
2411
  const { selected } = await inquirer.prompt({
2401
2412
  type: "checkbox",
2402
2413
  name: "selected",
2403
- message: ansis.gray("Select all that apply (space to select, enter to confirm):"),
2414
+ message: a.gray("Select all that apply (space to select, enter to confirm):"),
2404
2415
  choices: choices.map((c) => ({
2405
2416
  name: c.name,
2406
2417
  value: c.value,
@@ -2412,7 +2423,7 @@ async function askQuestion(display, lang) {
2412
2423
  const { customValue } = await inquirer.prompt({
2413
2424
  type: "input",
2414
2425
  name: "customValue",
2415
- message: ansis.gray("Enter your custom answer:")
2426
+ message: a.gray("Enter your custom answer:")
2416
2427
  });
2417
2428
  const filtered = selected.filter((s) => s !== "__custom__");
2418
2429
  return { values: filtered, customInput: customValue };
@@ -2422,7 +2433,7 @@ async function askQuestion(display, lang) {
2422
2433
  const { selected } = await inquirer.prompt({
2423
2434
  type: "list",
2424
2435
  name: "selected",
2425
- message: ansis.gray("Select one:"),
2436
+ message: a.gray("Select one:"),
2426
2437
  choices,
2427
2438
  pageSize: 10
2428
2439
  });
@@ -2430,7 +2441,7 @@ async function askQuestion(display, lang) {
2430
2441
  const { customValue } = await inquirer.prompt({
2431
2442
  type: "input",
2432
2443
  name: "customValue",
2433
- message: ansis.gray("Enter your custom answer:")
2444
+ message: a.gray("Enter your custom answer:")
2434
2445
  });
2435
2446
  return { values: [], customInput: customValue };
2436
2447
  }
@@ -2442,12 +2453,12 @@ async function askQuestion(display, lang) {
2442
2453
  }
2443
2454
  async function selectTemplate(lang) {
2444
2455
  console.log("");
2445
- console.log(ansis.green.bold(" \u{1F4CB} Select Interview Template"));
2456
+ console.log(a.green.bold(" \u{1F4CB} Select Interview Template"));
2446
2457
  console.log("");
2447
2458
  const choices = INTERVIEW_TEMPLATES.map((template, index) => ({
2448
- name: `${ansis.green(`${index + 1}.`)} ${ansis.bold(template.name[lang])}
2449
- ${ansis.gray(template.description[lang])}
2450
- ${ansis.gray(`~${template.estimatedQuestions} questions, ${template.defaultDepth} depth`)}`,
2459
+ name: `${a.green(`${index + 1}.`)} ${a.bold(template.name[lang])}
2460
+ ${a.gray(template.description[lang])}
2461
+ ${a.gray(`~${template.estimatedQuestions} questions, ${template.defaultDepth} depth`)}`,
2451
2462
  value: template.id,
2452
2463
  short: template.name[lang]
2453
2464
  }));
@@ -2455,7 +2466,7 @@ async function selectTemplate(lang) {
2455
2466
  const { templateId } = await inquirer.prompt({
2456
2467
  type: "list",
2457
2468
  name: "templateId",
2458
- message: ansis.gray("Choose a template:"),
2469
+ message: a.gray("Choose a template:"),
2459
2470
  choices,
2460
2471
  pageSize: 10
2461
2472
  });
@@ -2467,32 +2478,32 @@ async function selectTemplate(lang) {
2467
2478
  async function quickStartConfig(_lang) {
2468
2479
  const detectedType = await detectProjectType();
2469
2480
  const detectedTemplate = getTemplateById(detectedType);
2470
- console.log(ansis.gray(` Detected project type: ${ansis.white(detectedType)}`));
2481
+ console.log(a.gray(` Detected project type: ${a.white(detectedType)}`));
2471
2482
  console.log("");
2472
- console.log(ansis.green.bold(" How would you like to proceed?"));
2483
+ console.log(a.green.bold(" How would you like to proceed?"));
2473
2484
  console.log("");
2474
2485
  const quickChoices = [
2475
2486
  {
2476
- name: `${ansis.green("1.")} ${ansis.green("\u26A1 Quick Start")} ${ansis.gray("(Recommended)")}
2477
- ${ansis.gray(`Use ${detectedType} template, ~${detectedTemplate?.estimatedQuestions || 25} questions \u2192 SPEC.md`)}`,
2487
+ name: `${a.green("1.")} ${a.green("\u26A1 Quick Start")} ${a.gray("(Recommended)")}
2488
+ ${a.gray(`Use ${detectedType} template, ~${detectedTemplate?.estimatedQuestions || 25} questions \u2192 SPEC.md`)}`,
2478
2489
  value: "quick-start",
2479
2490
  short: "Quick Start"
2480
2491
  },
2481
2492
  {
2482
- name: `${ansis.green("2.")} ${ansis.yellow("\u{1F52C} Deep Dive")}
2483
- ${ansis.gray("40+ comprehensive questions for complex features")}`,
2493
+ name: `${a.green("2.")} ${a.yellow("\u{1F52C} Deep Dive")}
2494
+ ${a.gray("40+ comprehensive questions for complex features")}`,
2484
2495
  value: "deep",
2485
2496
  short: "Deep Dive"
2486
2497
  },
2487
2498
  {
2488
- name: `${ansis.green("3.")} ${ansis.green("\u2699\uFE0F Custom Setup")}
2489
- ${ansis.gray("Choose template, depth, and output file")}`,
2499
+ name: `${a.green("3.")} ${a.green("\u2699\uFE0F Custom Setup")}
2500
+ ${a.gray("Choose template, depth, and output file")}`,
2490
2501
  value: "custom",
2491
2502
  short: "Custom"
2492
2503
  },
2493
2504
  {
2494
- name: `${ansis.green("4.")} ${ansis.magenta("\u{1F4A8} Express Mode")}
2495
- ${ansis.gray("~10 essential questions only")}`,
2505
+ name: `${a.green("4.")} ${a.magenta("\u{1F4A8} Express Mode")}
2506
+ ${a.gray("~10 essential questions only")}`,
2496
2507
  value: "express",
2497
2508
  short: "Express"
2498
2509
  }
@@ -2501,7 +2512,7 @@ async function quickStartConfig(_lang) {
2501
2512
  const { mode } = await inquirer.prompt({
2502
2513
  type: "list",
2503
2514
  name: "mode",
2504
- message: ansis.gray("Select mode (press number or use arrows):"),
2515
+ message: a.gray("Select mode (press number or use arrows):"),
2505
2516
  choices: quickChoices,
2506
2517
  pageSize: 8
2507
2518
  });
@@ -2538,7 +2549,7 @@ async function getSpecFilePath(defaultPath) {
2538
2549
  const { specFile } = await inquirer.prompt({
2539
2550
  type: "input",
2540
2551
  name: "specFile",
2541
- message: ansis.gray("Spec file path (where to save the specification):"),
2552
+ message: a.gray("Spec file path (where to save the specification):"),
2542
2553
  default: defaultPath,
2543
2554
  validate: (value) => {
2544
2555
  if (!value.trim()) {
@@ -2560,42 +2571,42 @@ function displayCompletionSummary(session, specFile) {
2560
2571
  (session.lastActivityAt.getTime() - session.startedAt.getTime()) / 1e3 / 60
2561
2572
  );
2562
2573
  console.log("");
2563
- console.log(ansis.green("\u2550".repeat(65)));
2574
+ console.log(a.green("\u2550".repeat(65)));
2564
2575
  console.log("");
2565
- console.log(ansis.green.bold(" \u2713 Interview Complete!"));
2576
+ console.log(a.green.bold(" \u2713 Interview Complete!"));
2566
2577
  console.log("");
2567
- console.log(` ${ansis.gray("Questions answered:")} ${ansis.white(String(session.questionsAsked))}`);
2568
- console.log(` ${ansis.gray("Duration:")} ${ansis.white(`${duration} minutes`)}`);
2569
- console.log(` ${ansis.gray("Spec file:")} ${ansis.green(specFile)}`);
2578
+ console.log(` ${a.gray("Questions answered:")} ${a.white(String(session.questionsAsked))}`);
2579
+ console.log(` ${a.gray("Duration:")} ${a.white(`${duration} minutes`)}`);
2580
+ console.log(` ${a.gray("Spec file:")} ${a.green(specFile)}`);
2570
2581
  console.log("");
2571
- console.log(ansis.gray(" Category Summary:"));
2582
+ console.log(a.gray(" Category Summary:"));
2572
2583
  for (const progress of session.progress) {
2573
2584
  const category = getCategoryById(progress.categoryId);
2574
2585
  const icon = category?.icon || "\u{1F4CC}";
2575
- const status = progress.isComplete ? ansis.green("\u2713") : ansis.yellow("\u25CB");
2586
+ const status = progress.isComplete ? a.green("\u2713") : a.yellow("\u25CB");
2576
2587
  console.log(` ${status} ${icon} ${progress.name}: ${progress.answered}/${progress.total}`);
2577
2588
  }
2578
2589
  console.log("");
2579
- console.log(ansis.green("\u2550".repeat(65)));
2590
+ console.log(a.green("\u2550".repeat(65)));
2580
2591
  console.log("");
2581
- console.log(ansis.green(" Next steps:"));
2582
- console.log(ansis.gray(` 1. Review the spec: ${ansis.white(`cat ${specFile}`)}`));
2583
- console.log(ansis.gray(` 2. Start planning: ${ansis.white("/plan")}`));
2584
- console.log(ansis.gray(` 3. Begin coding: ${ansis.white("Use the spec as context")}`));
2592
+ console.log(a.green(" Next steps:"));
2593
+ console.log(a.gray(` 1. Review the spec: ${a.white(`cat ${specFile}`)}`));
2594
+ console.log(a.gray(` 2. Start planning: ${a.white("/plan")}`));
2595
+ console.log(a.gray(` 3. Begin coding: ${a.white("Use the spec as context")}`));
2585
2596
  console.log("");
2586
2597
  }
2587
2598
  function listTemplates(lang) {
2588
2599
  console.log("");
2589
- console.log(ansis.green.bold(" Available Interview Templates:"));
2600
+ console.log(a.green.bold(" Available Interview Templates:"));
2590
2601
  console.log("");
2591
2602
  for (const template of INTERVIEW_TEMPLATES) {
2592
- console.log(ansis.green(` ${template.id}`));
2593
- console.log(` ${ansis.white(template.name[lang])}`);
2594
- console.log(` ${ansis.gray(template.description[lang])}`);
2595
- console.log(` ${ansis.gray(`~${template.estimatedQuestions} questions, ${template.defaultDepth} depth`)}`);
2603
+ console.log(a.green(` ${template.id}`));
2604
+ console.log(` ${a.white(template.name[lang])}`);
2605
+ console.log(` ${a.gray(template.description[lang])}`);
2606
+ console.log(` ${a.gray(`~${template.estimatedQuestions} questions, ${template.defaultDepth} depth`)}`);
2596
2607
  console.log("");
2597
2608
  }
2598
- console.log(ansis.gray(" Usage: ccjk interview --template <template-id> [SPEC.md]"));
2609
+ console.log(a.gray(" Usage: ccjk interview --template <template-id> [SPEC.md]"));
2599
2610
  console.log("");
2600
2611
  }
2601
2612
  async function interview(options = {}) {
@@ -2619,13 +2630,13 @@ async function interview(options = {}) {
2619
2630
  } else {
2620
2631
  const selectedTemplate = await selectTemplate(lang);
2621
2632
  if (!selectedTemplate) {
2622
- console.log(ansis.yellow("\n Interview cancelled.\n"));
2633
+ console.log(a.yellow("\n Interview cancelled.\n"));
2623
2634
  return;
2624
2635
  }
2625
2636
  templateId = selectedTemplate;
2626
2637
  const template2 = getTemplateById(templateId);
2627
2638
  if (!template2) {
2628
- console.log(ansis.red(`
2639
+ console.log(a.red(`
2629
2640
  Template not found: ${templateId}
2630
2641
  `));
2631
2642
  return;
@@ -2633,20 +2644,20 @@ async function interview(options = {}) {
2633
2644
  const { selectedDepth } = await inquirer.prompt({
2634
2645
  type: "list",
2635
2646
  name: "selectedDepth",
2636
- message: ansis.gray("Interview depth:"),
2647
+ message: a.gray("Interview depth:"),
2637
2648
  choices: [
2638
2649
  {
2639
- name: `${ansis.green("1.")} \u26A1 Quick (~10 questions)`,
2650
+ name: `${a.green("1.")} \u26A1 Quick (~10 questions)`,
2640
2651
  value: "quick",
2641
2652
  short: "Quick"
2642
2653
  },
2643
2654
  {
2644
- name: `${ansis.green("2.")} \u{1F4CA} Standard (~25 questions) ${template2.defaultDepth === "standard" ? ansis.green("(Recommended)") : ""}`,
2655
+ name: `${a.green("2.")} \u{1F4CA} Standard (~25 questions) ${template2.defaultDepth === "standard" ? a.green("(Recommended)") : ""}`,
2645
2656
  value: "standard",
2646
2657
  short: "Standard"
2647
2658
  },
2648
2659
  {
2649
- name: `${ansis.green("3.")} \u{1F52C} Deep (~40+ questions) ${template2.defaultDepth === "deep" ? ansis.green("(Recommended)") : ""}`,
2660
+ name: `${a.green("3.")} \u{1F52C} Deep (~40+ questions) ${template2.defaultDepth === "deep" ? a.green("(Recommended)") : ""}`,
2650
2661
  value: "deep",
2651
2662
  short: "Deep"
2652
2663
  }
@@ -2657,7 +2668,7 @@ async function interview(options = {}) {
2657
2668
  depth = selectedDepth;
2658
2669
  const selectedSpecFile = await getSpecFilePath("SPEC.md");
2659
2670
  if (!selectedSpecFile) {
2660
- console.log(ansis.yellow("\n Interview cancelled.\n"));
2671
+ console.log(a.yellow("\n Interview cancelled.\n"));
2661
2672
  return;
2662
2673
  }
2663
2674
  specFile = selectedSpecFile;
@@ -2669,23 +2680,23 @@ async function interview(options = {}) {
2669
2680
  }
2670
2681
  const template = getTemplateById(templateId);
2671
2682
  if (!template) {
2672
- console.log(ansis.red(`
2683
+ console.log(a.red(`
2673
2684
  Template not found: ${templateId}
2674
2685
  `));
2675
- console.log(ansis.gray(" Available templates:"));
2676
- INTERVIEW_TEMPLATES.forEach((t) => console.log(ansis.gray(` - ${t.id}`)));
2686
+ console.log(a.gray(" Available templates:"));
2687
+ INTERVIEW_TEMPLATES.forEach((t) => console.log(a.gray(` - ${t.id}`)));
2677
2688
  return;
2678
2689
  }
2679
2690
  const absoluteSpecFile = resolve(process__default.cwd(), specFile);
2680
2691
  console.log("");
2681
- console.log(ansis.gray("\u2500".repeat(50)));
2682
- console.log(` ${ansis.gray("Template:")} ${ansis.white(template.name[lang])}`);
2683
- console.log(` ${ansis.gray("Depth:")} ${ansis.white(depth)} ${ansis.gray(`(~${depth === "quick" ? 10 : depth === "standard" ? 25 : 40}+ questions)`)}`);
2684
- console.log(` ${ansis.gray("Output:")} ${ansis.green(specFile)}`);
2685
- console.log(ansis.gray("\u2500".repeat(50)));
2692
+ console.log(a.gray("\u2500".repeat(50)));
2693
+ console.log(` ${a.gray("Template:")} ${a.white(template.name[lang])}`);
2694
+ console.log(` ${a.gray("Depth:")} ${a.white(depth)} ${a.gray(`(~${depth === "quick" ? 10 : depth === "standard" ? 25 : 40}+ questions)`)}`);
2695
+ console.log(` ${a.gray("Output:")} ${a.green(specFile)}`);
2696
+ console.log(a.gray("\u2500".repeat(50)));
2686
2697
  console.log("");
2687
- console.log(ansis.green(" Starting interview..."));
2688
- console.log(ansis.gray(" Press Ctrl+C to pause | Enter to select | Type for custom"));
2698
+ console.log(a.green(" Starting interview..."));
2699
+ console.log(a.gray(" Press Ctrl+C to pause | Enter to select | Type for custom"));
2689
2700
  console.log("");
2690
2701
  const engine = createInterviewEngine(lang);
2691
2702
  const session = await engine.startInterview(absoluteSpecFile, {
@@ -2703,7 +2714,7 @@ async function interview(options = {}) {
2703
2714
  const answer = await askQuestion(questionDisplay, lang);
2704
2715
  if (answer === null) {
2705
2716
  console.log("");
2706
- console.log(ansis.yellow(" Interview paused."));
2717
+ console.log(a.yellow(" Interview paused."));
2707
2718
  try {
2708
2719
  const { saveProgress } = await inquirer.prompt({
2709
2720
  type: "confirm",
@@ -2717,8 +2728,8 @@ async function interview(options = {}) {
2717
2728
  if (sessionJson) {
2718
2729
  const sessionFile = absoluteSpecFile.replace(".md", ".session.json");
2719
2730
  await writeFile(sessionFile, sessionJson, "utf-8");
2720
- console.log(ansis.gray(` Session saved to: ${sessionFile}`));
2721
- console.log(ansis.gray(` Resume with: ccjk interview --resume`));
2731
+ console.log(a.gray(` Session saved to: ${sessionFile}`));
2732
+ console.log(a.gray(` Resume with: ccjk interview --resume`));
2722
2733
  }
2723
2734
  }
2724
2735
  } catch {
@@ -2735,7 +2746,7 @@ async function interview(options = {}) {
2735
2746
  questionDisplay = await engine.getNextQuestion(session.id);
2736
2747
  }
2737
2748
  console.log("");
2738
- console.log(ansis.green(" Generating specification..."));
2749
+ console.log(a.green(" Generating specification..."));
2739
2750
  const specGenerator = createSpecGenerator(lang);
2740
2751
  const spec = await specGenerator.generateSpec(session);
2741
2752
  const specDir = dirname(absoluteSpecFile);
@@ -2779,18 +2790,18 @@ async function resumeInterview(sessionFile, options = {}) {
2779
2790
  }
2780
2791
  }
2781
2792
  if (sessions.length === 0) {
2782
- console.log(ansis.yellow("\n No saved sessions found.\n"));
2783
- console.log(ansis.gray(" Start a new interview with: ccjk interview"));
2793
+ console.log(a.yellow("\n No saved sessions found.\n"));
2794
+ console.log(a.gray(" Start a new interview with: ccjk interview"));
2784
2795
  return;
2785
2796
  }
2786
2797
  sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
2787
2798
  const { selectedSession } = await inquirer.prompt({
2788
2799
  type: "list",
2789
2800
  name: "selectedSession",
2790
- message: ansis.gray("Select a session to resume:"),
2801
+ message: a.gray("Select a session to resume:"),
2791
2802
  choices: sessions.map((s, i) => ({
2792
- name: `${ansis.green(`${i + 1}.`)} ${ansis.white(s.name)}
2793
- ${ansis.gray(`Modified: ${s.modified.toLocaleString()}`)}`,
2803
+ name: `${a.green(`${i + 1}.`)} ${a.white(s.name)}
2804
+ ${a.gray(`Modified: ${s.modified.toLocaleString()}`)}`,
2794
2805
  value: s.path,
2795
2806
  short: s.name
2796
2807
  })),
@@ -2799,7 +2810,7 @@ async function resumeInterview(sessionFile, options = {}) {
2799
2810
  targetSessionFile = selectedSession;
2800
2811
  }
2801
2812
  if (!existsSync(targetSessionFile)) {
2802
- console.log(ansis.red(`
2813
+ console.log(a.red(`
2803
2814
  Session file not found: ${targetSessionFile}
2804
2815
  `));
2805
2816
  return;
@@ -2808,17 +2819,17 @@ async function resumeInterview(sessionFile, options = {}) {
2808
2819
  const engine = createInterviewEngine(lang);
2809
2820
  const session = engine.importSession(sessionJson);
2810
2821
  if (!session) {
2811
- console.log(ansis.red("\n Failed to load session file.\n"));
2822
+ console.log(a.red("\n Failed to load session file.\n"));
2812
2823
  return;
2813
2824
  }
2814
2825
  displayInterviewBanner();
2815
- console.log(ansis.green(" Resuming interview session..."));
2816
- console.log(ansis.gray(` Session ID: ${session.id}`));
2817
- console.log(ansis.gray(` Progress: ${session.questionsAsked} questions answered`));
2826
+ console.log(a.green(" Resuming interview session..."));
2827
+ console.log(a.gray(` Session ID: ${session.id}`));
2828
+ console.log(a.gray(` Progress: ${session.questionsAsked} questions answered`));
2818
2829
  console.log("");
2819
2830
  const resumed = await engine.resumeInterview(session.id);
2820
2831
  if (!resumed) {
2821
- console.log(ansis.red("\n Failed to resume session.\n"));
2832
+ console.log(a.red("\n Failed to resume session.\n"));
2822
2833
  return;
2823
2834
  }
2824
2835
  let questionDisplay = await engine.getNextQuestion(session.id);
@@ -2828,12 +2839,12 @@ async function resumeInterview(sessionFile, options = {}) {
2828
2839
  const answer = await askQuestion(questionDisplay, lang);
2829
2840
  if (answer === null) {
2830
2841
  console.log("");
2831
- console.log(ansis.yellow(" Interview paused."));
2842
+ console.log(a.yellow(" Interview paused."));
2832
2843
  await engine.pauseInterview(session.id);
2833
2844
  const updatedSessionJson = engine.exportSession(session.id);
2834
2845
  if (updatedSessionJson) {
2835
2846
  await writeFile(targetSessionFile, updatedSessionJson, "utf-8");
2836
- console.log(ansis.gray(` Progress saved to: ${targetSessionFile}`));
2847
+ console.log(a.gray(` Progress saved to: ${targetSessionFile}`));
2837
2848
  }
2838
2849
  return;
2839
2850
  }
@@ -2847,7 +2858,7 @@ async function resumeInterview(sessionFile, options = {}) {
2847
2858
  questionDisplay = await engine.getNextQuestion(session.id);
2848
2859
  }
2849
2860
  console.log("");
2850
- console.log(ansis.green(" Generating specification..."));
2861
+ console.log(a.green(" Generating specification..."));
2851
2862
  const specGenerator = createSpecGenerator(lang);
2852
2863
  const spec = await specGenerator.generateSpec(session);
2853
2864
  await specGenerator.writeSpecToFile(spec, session.specFile);
@@ -2881,7 +2892,7 @@ async function listInterviewSessions() {
2881
2892
  const { readdir, stat } = await import('node:fs/promises');
2882
2893
  const { homedir } = await import('node:os');
2883
2894
  console.log("");
2884
- console.log(ansis.green.bold(" Saved Interview Sessions:"));
2895
+ console.log(a.green.bold(" Saved Interview Sessions:"));
2885
2896
  console.log("");
2886
2897
  const searchDirs = [
2887
2898
  process__default.cwd(),
@@ -2896,9 +2907,9 @@ async function listInterviewSessions() {
2896
2907
  const filePath = join(dir, file);
2897
2908
  const fileStats = await stat(filePath);
2898
2909
  const modified = fileStats.mtime.toLocaleString();
2899
- console.log(` ${ansis.green("\u2022")} ${ansis.white(file)}`);
2900
- console.log(` ${ansis.gray("Path:")} ${filePath}`);
2901
- console.log(` ${ansis.gray("Modified:")} ${modified}`);
2910
+ console.log(` ${a.green("\u2022")} ${a.white(file)}`);
2911
+ console.log(` ${a.gray("Path:")} ${filePath}`);
2912
+ console.log(` ${a.gray("Modified:")} ${modified}`);
2902
2913
  console.log("");
2903
2914
  foundAny = true;
2904
2915
  }
@@ -2906,9 +2917,9 @@ async function listInterviewSessions() {
2906
2917
  }
2907
2918
  }
2908
2919
  if (!foundAny) {
2909
- console.log(ansis.gray(" No saved sessions found."));
2920
+ console.log(a.gray(" No saved sessions found."));
2910
2921
  console.log("");
2911
- console.log(ansis.gray(" Start a new interview with: ccjk interview"));
2922
+ console.log(a.gray(" Start a new interview with: ccjk interview"));
2912
2923
  }
2913
2924
  console.log("");
2914
2925
  }
@@ -1,6 +1,7 @@
1
- import dayjs from 'dayjs';
2
- import { join } from 'pathe';
1
+ import { d as dayjs } from '../shared/ccjk.RyizuzOI.mjs';
3
2
  import { exists, readFile, writeFileAtomic, writeFile, ensureDir, copyFile } from './fs-operations.mjs';
3
+ import { j as join } from '../shared/ccjk.bQ7Dh1g4.mjs';
4
+ import '../shared/ccjk.BAGoDD49.mjs';
4
5
  import 'node:crypto';
5
6
  import 'node:fs';
6
7
  import 'node:fs/promises';