ccjk 1.5.0 → 2.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 (56) hide show
  1. package/README.ja.md +249 -297
  2. package/README.ko.md +241 -290
  3. package/README.md +222 -364
  4. package/README.zh-CN.md +553 -295
  5. package/dist/chunks/claude-code-config-manager.mjs +7 -7
  6. package/dist/chunks/claude-code-incremental-manager.mjs +1 -1
  7. package/dist/chunks/codex-config-switch.mjs +3 -3
  8. package/dist/chunks/codex-provider-manager.mjs +1 -1
  9. package/dist/chunks/codex-uninstaller.mjs +2 -2
  10. package/dist/chunks/commands.mjs +1 -1
  11. package/dist/chunks/features.mjs +10 -10
  12. package/dist/chunks/simple-config.mjs +321 -389
  13. package/dist/chunks/smart-guide.mjs +234 -0
  14. package/dist/cli.mjs +1795 -433
  15. package/dist/i18n/locales/en/configuration.json +12 -1
  16. package/dist/i18n/locales/en/marketplace.json +84 -0
  17. package/dist/i18n/locales/en/menu.json +38 -1
  18. package/dist/i18n/locales/en/skills.json +140 -0
  19. package/dist/i18n/locales/en/smartGuide.json +49 -0
  20. package/dist/i18n/locales/en/subagent.json +69 -0
  21. package/dist/i18n/locales/en/superpowers.json +58 -0
  22. package/dist/i18n/locales/zh-CN/configuration.json +12 -1
  23. package/dist/i18n/locales/zh-CN/marketplace.json +84 -0
  24. package/dist/i18n/locales/zh-CN/menu.json +38 -1
  25. package/dist/i18n/locales/zh-CN/skills.json +140 -0
  26. package/dist/i18n/locales/zh-CN/smartGuide.json +49 -0
  27. package/dist/i18n/locales/zh-CN/subagent.json +69 -0
  28. package/dist/i18n/locales/zh-CN/superpowers.json +58 -0
  29. package/dist/index.d.mts +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.mjs +366 -7
  32. package/package.json +26 -27
  33. package/templates/common/skills/en/brainstorming.md +64 -0
  34. package/templates/common/skills/en/code-review.md +81 -0
  35. package/templates/common/skills/en/documentation-gen.md +808 -0
  36. package/templates/common/skills/en/executing-plans.md +75 -0
  37. package/templates/common/skills/en/git-commit.md +216 -0
  38. package/templates/common/skills/en/interview.md +223 -0
  39. package/templates/common/skills/en/migration-assistant.md +312 -0
  40. package/templates/common/skills/en/performance-profiling.md +576 -0
  41. package/templates/common/skills/en/pr-review.md +341 -0
  42. package/templates/common/skills/en/refactoring.md +384 -0
  43. package/templates/common/skills/en/security-audit.md +462 -0
  44. package/templates/common/skills/en/systematic-debugging.md +82 -0
  45. package/templates/common/skills/en/tdd-workflow.md +93 -0
  46. package/templates/common/skills/en/verification.md +81 -0
  47. package/templates/common/skills/en/workflow.md +370 -0
  48. package/templates/common/skills/en/writing-plans.md +78 -0
  49. package/templates/common/skills/zh-CN/documentation-gen.md +807 -0
  50. package/templates/common/skills/zh-CN/migration-assistant.md +318 -0
  51. package/templates/common/skills/zh-CN/performance-profiling.md +746 -0
  52. package/templates/common/skills/zh-CN/pr-review.md +341 -0
  53. package/templates/common/skills/zh-CN/refactoring.md +384 -0
  54. package/templates/common/skills/zh-CN/security-audit.md +462 -0
  55. package/templates/common/smart-guide/en/smart-guide.md +72 -0
  56. package/templates/common/smart-guide/zh-CN/smart-guide.md +72 -0
package/dist/index.mjs CHANGED
@@ -1,22 +1,22 @@
1
- import { C as CCJK_PLUGINS_DIR, a as CCJK_SKILLS_DIR, b as CCJK_GROUPS_DIR, A as AIDER_DIR, c as AIDER_CONFIG_FILE, d as AIDER_ENV_FILE, e as CONTINUE_DIR, f as CONTINUE_CONFIG_FILE, s as sectionDivider, g as COLORS, S as STATUS } from './chunks/simple-config.mjs';
2
- export { $ as AI_OUTPUT_LANGUAGES, V as API_DEFAULT_URL, W as API_ENV_KEY, I as CCJK_CONFIG_DIR, J as CCJK_CONFIG_FILE, q as CLAUDE_DIR, u as CLAUDE_MD_FILE, w as CLAUDE_VSC_CONFIG_FILE, F as CLINE_CONFIG_FILE, E as CLINE_DIR, B as CODEX_AGENTS_FILE, z as CODEX_AUTH_FILE, y as CODEX_CONFIG_FILE, x as CODEX_DIR, D as CODEX_PROMPTS_DIR, R as CODE_TOOL_ALIASES, Q as CODE_TOOL_BANNERS, T as CODE_TOOL_INFO, O as CODE_TOOL_TYPES, H as CURSOR_CONFIG_FILE, G as CURSOR_DIR, v as ClAUDE_CONFIG_FILE, P as DEFAULT_CODE_TOOL_TYPE, _ as LANG_LABELS, L as LEGACY_ZCF_CONFIG_DIR, K as LEGACY_ZCF_CONFIG_FILE, M as LEGACY_ZCF_CONFIG_FILES, bX as PERMISSION_TEMPLATES, t as SETTINGS_FILE, Y as SUPPORTED_LANGS, Z as ZCF_CONFIG_DIR, N as ZCF_CONFIG_FILE, c3 as addAutoApprovePattern, an as addCompletedOnboarding, bp as applyAiLanguageDirective, b1 as applyCodexPlatformCommand, b_ as applyTemplate, as as backupCodexAgents, at as backupCodexComplete, au as backupCodexConfig, av as backupCodexFiles, aw as backupCodexPrompts, bg as backupExistingConfig, aj as backupMcpConfig, ae as boxify, al as buildMcpServerConfig, ch as checkAllVersions, cb as checkCcjkVersion, ca as checkClaudeCodeVersion, ax as checkCodexUpdate, cc as checkPluginVersions, j as cleanupPermissions, ay as codexSwitchToOfficialLogin, k as commandExists, bt as compareConfigs, bi as configureApi, az as configureCodexApi, b0 as configureCodexMcp, bu as consolidateConfigs, bh as copyConfigFiles, aA as createBackupDirectory, bP as createHomebrewSymlink, bs as detectAllConfigs, a3 as detectBuildTools, a5 as detectCICDSystems, aZ as detectConfigManagementMode, a2 as detectFrameworks, bK as detectInstalledVersion, a6 as detectLanguages, a1 as detectPackageManager, a8 as detectProject, a4 as detectTestFrameworks, a7 as determineProjectType, ab as displayBanner, ac as displayBannerWithInfo, bx as displayConfigScan, h as displayCurrentStatus, bz as displayHealthReport, c9 as displayPermissions, bQ as displayVerificationResult, ao as ensureApiKeyApproved, bf as ensureClaudeDir, aB as ensureEnvKeyMigration, bM as executeInstallMethod, c6 as exportPermissions, bW as exportProjectKnowledge, am as fixWindowsMcpConfig, bd as formatToolStatus, a9 as generateSuggestions, a0 as getAiOutputLanguageLabel, bb as getAllToolsInfo, b7 as getAllToolsStatus, a$ as getAvailableManagementActions, aC as getBackupMessage, aD as getCodexVersion, aE as getCurrentCodexProvider, c8 as getCurrentTemplateId, bo as getExistingApiConfig, bn as getExistingModelConfig, bG as getInstallationStatus, b8 as getInstalledTools, ag as getMcpConfigPath, l as getPlatform, bV as getProjectKnowledge, aa as getProjectSummary, be as getRecommendedTools, b2 as getToolConfigPath, b3 as getToolDir, ba as getToolInfo, b6 as getToolStatus, b5 as getToolVersion, bc as getToolsByCategory, bN as handleInstallFailure, c7 as importPermissions, n as importRecommendedEnv, o as importRecommendedPermissions, i as init, bC as installClaudeCode, bE as installCodex, aF as installCodexCli, b9 as installTool, bB as isClaudeCodeInstalled, U as isCodeToolType, aG as isCodexCliInstalled, bD as isCodexInstalled, c2 as isDirectoryTrusted, bF as isLocalClaudeCodeInstalled, c1 as isPermissionAllowed, b4 as isToolInstalled, aH as listCodexProviders, bR as loadKnowledgeBase, aq as manageApiKeyApproval, af as menuItem, m as mergeAndCleanPermissions, bj as mergeConfigs, ak as mergeMcpServers, bm as mergeSettingsFile, aI as migrateEnvKeyInContent, aJ as migrateEnvKeyToTempEnvKey, aK as needsEnvKeyMigration, p as openSettingsJson, aL as parseCodexConfig, br as promptApiConfigurationAction, bU as quickSync, aM as readCodexConfig, ah as readMcpConfig, bY as readPermissions, ap as removeApiKeyFromRejected, c4 as removeAutoApprovePattern, bH as removeLocalClaudeCode, bw as removeRedundantConfigs, aN as renderCodexConfig, ad as renderProgressBar, c5 as resetPermissions, X as resolveCodeToolType, aO as runCodexFullInit, aP as runCodexSystemPromptSelection, aQ as runCodexUninstall, aR as runCodexUpdate, aS as runCodexWorkflowImport, aT as runCodexWorkflowImportWithLanguageSelection, aU as runCodexWorkflowSelection, r as runConfigWizard, bA as runDoctor, by as runHealthCheck, bT as runOnboarding, bS as saveKnowledgeBase, bL as selectInstallMethod, bJ as setInstallMethod, ar as setPrimaryApiKey, a_ as shouldShowManagementMode, aV as switchCodexProvider, bq as switchToOfficialLogin, aW as switchToProvider, b$ as trustDirectory, bI as uninstallCodeTool, c0 as untrustDirectory, bk as updateCustomModel, bl as updateDefaultModel, ci as upgradeAll, cg as upgradeAllPlugins, ce as upgradeCcjk, cd as upgradeClaudeCode, cf as upgradePlugin, bO as verifyInstallation, aX as writeAuthFile, aY as writeCodexConfig, bv as writeConsolidatedConfig, ai as writeMcpConfig, bZ as writePermissions } from './chunks/simple-config.mjs';
1
+ import { C as CCJK_PLUGINS_DIR, a as CCJK_SKILLS_DIR, b as CCJK_GROUPS_DIR, A as AIDER_DIR, c as AIDER_CONFIG_FILE, d as AIDER_ENV_FILE, e as CONTINUE_DIR, f as CONTINUE_CONFIG_FILE, S as STATUS, r as renderProgressBar, g as checkClaudeCodeVersion, h as checkCcjkVersion, v as version, i as detectAllConfigs, j as getCurrentTemplateId, s as sectionDivider, k as COLORS } from './chunks/simple-config.mjs';
2
+ export { a5 as AI_OUTPUT_LANGUAGES, a0 as API_DEFAULT_URL, a1 as API_ENV_KEY, O as CCJK_CONFIG_DIR, P as CCJK_CONFIG_FILE, y as CLAUDE_DIR, B as CLAUDE_MD_FILE, E as CLAUDE_VSC_CONFIG_FILE, L as CLINE_CONFIG_FILE, K as CLINE_DIR, I as CODEX_AGENTS_FILE, H as CODEX_AUTH_FILE, G as CODEX_CONFIG_FILE, F as CODEX_DIR, J as CODEX_PROMPTS_DIR, Y as CODE_TOOL_ALIASES, X as CODE_TOOL_BANNERS, _ as CODE_TOOL_INFO, V as CODE_TOOL_TYPES, N as CURSOR_CONFIG_FILE, M as CURSOR_DIR, D as ClAUDE_CONFIG_FILE, W as DEFAULT_CODE_TOOL_TYPE, a4 as LANG_LABELS, Q as LEGACY_ZCF_CONFIG_DIR, R as LEGACY_ZCF_CONFIG_FILE, T as LEGACY_ZCF_CONFIG_FILES, bY as PERMISSION_TEMPLATES, z as SETTINGS_FILE, a3 as SUPPORTED_LANGS, Z as ZCF_CONFIG_DIR, U as ZCF_CONFIG_FILE, c4 as addAutoApprovePattern, as as addCompletedOnboarding, bu as applyAiLanguageDirective, b6 as applyCodexPlatformCommand, b$ as applyTemplate, ax as backupCodexAgents, ay as backupCodexComplete, az as backupCodexConfig, aA as backupCodexFiles, aB as backupCodexPrompts, bl as backupExistingConfig, ao as backupMcpConfig, aj as boxify, aq as buildMcpServerConfig, cf as checkAllVersions, aC as checkCodexUpdate, ca as checkPluginVersions, o as cleanupPermissions, aD as codexSwitchToOfficialLogin, q as commandExists, bx as compareConfigs, bn as configureApi, aE as configureCodexApi, b5 as configureCodexMcp, by as consolidateConfigs, bm as copyConfigFiles, aF as createBackupDirectory, bQ as createHomebrewSymlink, a9 as detectBuildTools, ab as detectCICDSystems, b2 as detectConfigManagementMode, a8 as detectFrameworks, bL as detectInstalledVersion, ac as detectLanguages, a7 as detectPackageManager, ae as detectProject, aa as detectTestFrameworks, ad as determineProjectType, ah as displayBanner, ai as displayBannerWithInfo, bB as displayConfigScan, m as displayCurrentStatus, c9 as displayPermissions, bR as displayVerificationResult, at as ensureApiKeyApproved, bk as ensureClaudeDir, aG as ensureEnvKeyMigration, bN as executeInstallMethod, c7 as exportPermissions, bX as exportProjectKnowledge, ar as fixWindowsMcpConfig, bi as formatToolStatus, af as generateSuggestions, a6 as getAiOutputLanguageLabel, bg as getAllToolsInfo, bc as getAllToolsStatus, b4 as getAvailableManagementActions, aH as getBackupMessage, aI as getCodexVersion, aJ as getCurrentCodexProvider, bt as getExistingApiConfig, bs as getExistingModelConfig, bH as getInstallationStatus, bd as getInstalledTools, al as getMcpConfigPath, t as getPlatform, bW as getProjectKnowledge, ag as getProjectSummary, bj as getRecommendedTools, b7 as getToolConfigPath, b8 as getToolDir, bf as getToolInfo, bb as getToolStatus, ba as getToolVersion, bh as getToolsByCategory, bO as handleInstallFailure, c8 as importPermissions, u as importRecommendedEnv, w as importRecommendedPermissions, l as init, bD as installClaudeCode, bF as installCodex, aK as installCodexCli, be as installTool, bC as isClaudeCodeInstalled, $ as isCodeToolType, aL as isCodexCliInstalled, bE as isCodexInstalled, c3 as isDirectoryTrusted, bG as isLocalClaudeCodeInstalled, c2 as isPermissionAllowed, b9 as isToolInstalled, aM as listCodexProviders, bS as loadKnowledgeBase, av as manageApiKeyApproval, ak as menuItem, p as mergeAndCleanPermissions, bo as mergeConfigs, ap as mergeMcpServers, br as mergeSettingsFile, aN as migrateEnvKeyInContent, aO as migrateEnvKeyToTempEnvKey, aP as needsEnvKeyMigration, x as openSettingsJson, aQ as parseCodexConfig, bw as promptApiConfigurationAction, bV as quickSync, aR as readCodexConfig, am as readMcpConfig, bZ as readPermissions, au as removeApiKeyFromRejected, c5 as removeAutoApprovePattern, bI as removeLocalClaudeCode, bA as removeRedundantConfigs, aS as renderCodexConfig, c6 as resetPermissions, a2 as resolveCodeToolType, aT as runCodexFullInit, aU as runCodexSystemPromptSelection, aV as runCodexUninstall, aW as runCodexUpdate, aX as runCodexWorkflowImport, aY as runCodexWorkflowImportWithLanguageSelection, aZ as runCodexWorkflowSelection, n as runConfigWizard, bU as runOnboarding, bT as saveKnowledgeBase, bM as selectInstallMethod, bK as setInstallMethod, aw as setPrimaryApiKey, b3 as shouldShowManagementMode, a_ as switchCodexProvider, bv as switchToOfficialLogin, a$ as switchToProvider, c0 as trustDirectory, bJ as uninstallCodeTool, c1 as untrustDirectory, bp as updateCustomModel, bq as updateDefaultModel, cg as upgradeAll, ce as upgradeAllPlugins, cc as upgradeCcjk, cb as upgradeClaudeCode, cd as upgradePlugin, bP as verifyInstallation, b0 as writeAuthFile, b1 as writeCodexConfig, bz as writeConsolidatedConfig, an as writeMcpConfig, b_ as writePermissions } from './chunks/simple-config.mjs';
3
+ import { homedir } from 'node:os';
4
+ import ansis from 'ansis';
5
+ import ora from 'ora';
6
+ import { exec } from 'tinyexec';
3
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
4
8
  import { join } from 'pathe';
5
- import { exec } from 'tinyexec';
6
9
  export { configureIncrementalManagement } from './chunks/codex-config-switch.mjs';
7
10
  export { addProviderToExisting, deleteProviders, editExistingProvider, validateProviderData } from './chunks/codex-provider-manager.mjs';
8
11
  export { CodexUninstaller } from './chunks/codex-uninstaller.mjs';
9
- import ansis from 'ansis';
10
12
  import inquirer from 'inquirer';
11
13
  import 'node:process';
12
14
  import 'smol-toml';
13
15
  import 'dayjs';
14
16
  import 'node:child_process';
15
- import 'node:os';
16
17
  import 'node:util';
17
18
  import 'node:url';
18
19
  import 'inquirer-toggle';
19
- import 'ora';
20
20
  import 'semver';
21
21
  import 'node:fs/promises';
22
22
  import 'fs-extra';
@@ -1529,6 +1529,365 @@ function syncSkillsToContinue(skills) {
1529
1529
  writeContinueConfig(config);
1530
1530
  }
1531
1531
 
1532
+ async function checkClaudeCodeInstallation() {
1533
+ try {
1534
+ const versionInfo = await checkClaudeCodeVersion();
1535
+ if (versionInfo.current === "unknown") {
1536
+ return {
1537
+ name: "Claude Code",
1538
+ status: "fail",
1539
+ message: "Not installed",
1540
+ fixable: true,
1541
+ fixCommand: "npm install -g @anthropic-ai/claude-code"
1542
+ };
1543
+ }
1544
+ if (versionInfo.updateAvailable) {
1545
+ return {
1546
+ name: "Claude Code",
1547
+ status: "warn",
1548
+ message: `v${versionInfo.current} (update to v${versionInfo.latest} available)`,
1549
+ fixable: true,
1550
+ fixCommand: "ccjk upgrade claude-code"
1551
+ };
1552
+ }
1553
+ return {
1554
+ name: "Claude Code",
1555
+ status: "pass",
1556
+ message: `v${versionInfo.current} (latest)`
1557
+ };
1558
+ } catch (error) {
1559
+ return {
1560
+ name: "Claude Code",
1561
+ status: "fail",
1562
+ message: "Check failed",
1563
+ details: error instanceof Error ? error.message : "Unknown error"
1564
+ };
1565
+ }
1566
+ }
1567
+ async function checkCcjkInstallation() {
1568
+ try {
1569
+ const versionInfo = await checkCcjkVersion();
1570
+ if (versionInfo.updateAvailable) {
1571
+ return {
1572
+ name: "CCJK",
1573
+ status: "warn",
1574
+ message: `v${versionInfo.current} (update to v${versionInfo.latest} available)`,
1575
+ fixable: true,
1576
+ fixCommand: "ccjk upgrade ccjk"
1577
+ };
1578
+ }
1579
+ return {
1580
+ name: "CCJK",
1581
+ status: "pass",
1582
+ message: `v${versionInfo.current} (latest)`
1583
+ };
1584
+ } catch {
1585
+ return {
1586
+ name: "CCJK",
1587
+ status: "pass",
1588
+ message: `v${version}`
1589
+ };
1590
+ }
1591
+ }
1592
+ async function checkNodeVersion() {
1593
+ try {
1594
+ const result = await exec("node", ["--version"], { throwOnError: false });
1595
+ const nodeVersion = result.stdout.trim().replace("v", "");
1596
+ const major = Number.parseInt(nodeVersion.split(".")[0]);
1597
+ if (major < 18) {
1598
+ return {
1599
+ name: "Node.js",
1600
+ status: "fail",
1601
+ message: `v${nodeVersion} (requires v18+)`,
1602
+ fixable: false
1603
+ };
1604
+ }
1605
+ if (major < 20) {
1606
+ return {
1607
+ name: "Node.js",
1608
+ status: "warn",
1609
+ message: `v${nodeVersion} (v20+ recommended)`
1610
+ };
1611
+ }
1612
+ return {
1613
+ name: "Node.js",
1614
+ status: "pass",
1615
+ message: `v${nodeVersion}`
1616
+ };
1617
+ } catch {
1618
+ return {
1619
+ name: "Node.js",
1620
+ status: "fail",
1621
+ message: "Not found"
1622
+ };
1623
+ }
1624
+ }
1625
+ async function checkNpmVersion() {
1626
+ try {
1627
+ const result = await exec("npm", ["--version"], { throwOnError: false });
1628
+ const npmVersion = result.stdout.trim();
1629
+ return {
1630
+ name: "npm",
1631
+ status: "pass",
1632
+ message: `v${npmVersion}`
1633
+ };
1634
+ } catch {
1635
+ return {
1636
+ name: "npm",
1637
+ status: "fail",
1638
+ message: "Not found"
1639
+ };
1640
+ }
1641
+ }
1642
+ async function checkGitInstallation() {
1643
+ try {
1644
+ const result = await exec("git", ["--version"], { throwOnError: false });
1645
+ const match = result.stdout.match(/(\d+\.\d+\.\d+)/);
1646
+ const gitVersion = match ? match[1] : "unknown";
1647
+ return {
1648
+ name: "Git",
1649
+ status: "pass",
1650
+ message: `v${gitVersion}`
1651
+ };
1652
+ } catch {
1653
+ return {
1654
+ name: "Git",
1655
+ status: "warn",
1656
+ message: "Not found (optional)"
1657
+ };
1658
+ }
1659
+ }
1660
+ async function checkApiConnectivity() {
1661
+ try {
1662
+ const start = Date.now();
1663
+ const result = await exec("curl", ["-s", "-o", "/dev/null", "-w", "%{http_code}", "https://api.anthropic.com/health"], {
1664
+ throwOnError: false,
1665
+ timeout: 1e4
1666
+ });
1667
+ const elapsed = Date.now() - start;
1668
+ if (result.stdout.trim() === "200" || result.stdout.trim() === "404") {
1669
+ return {
1670
+ name: "API Connectivity",
1671
+ status: "pass",
1672
+ message: `OK (${elapsed}ms)`
1673
+ };
1674
+ }
1675
+ return {
1676
+ name: "API Connectivity",
1677
+ status: "warn",
1678
+ message: `Response: ${result.stdout.trim()}`
1679
+ };
1680
+ } catch {
1681
+ return {
1682
+ name: "API Connectivity",
1683
+ status: "info",
1684
+ message: "Could not test (curl not available)"
1685
+ };
1686
+ }
1687
+ }
1688
+ function checkConfigValidity() {
1689
+ const configs = detectAllConfigs();
1690
+ const existingConfigs = configs.filter((c) => c.exists);
1691
+ if (existingConfigs.length === 0) {
1692
+ return {
1693
+ name: "Config Files",
1694
+ status: "info",
1695
+ message: "No config files (run ccjk init)",
1696
+ fixable: true,
1697
+ fixCommand: "ccjk init"
1698
+ };
1699
+ }
1700
+ if (existingConfigs.length > 1) {
1701
+ return {
1702
+ name: "Config Files",
1703
+ status: "warn",
1704
+ message: `${existingConfigs.length} found (consolidation recommended)`,
1705
+ fixable: true,
1706
+ fixCommand: "ccjk config consolidate"
1707
+ };
1708
+ }
1709
+ return {
1710
+ name: "Config Files",
1711
+ status: "pass",
1712
+ message: "1 config file"
1713
+ };
1714
+ }
1715
+ function checkPermissions() {
1716
+ try {
1717
+ const templateId = getCurrentTemplateId();
1718
+ if (templateId) {
1719
+ return {
1720
+ name: "Permissions",
1721
+ status: "pass",
1722
+ message: `${templateId} template active`
1723
+ };
1724
+ }
1725
+ return {
1726
+ name: "Permissions",
1727
+ status: "info",
1728
+ message: "Custom permissions"
1729
+ };
1730
+ } catch {
1731
+ return {
1732
+ name: "Permissions",
1733
+ status: "info",
1734
+ message: "Not configured"
1735
+ };
1736
+ }
1737
+ }
1738
+ async function checkDiskSpace() {
1739
+ try {
1740
+ if (process.platform === "win32") {
1741
+ return {
1742
+ name: "Disk Space",
1743
+ status: "info",
1744
+ message: "Check skipped (Windows)"
1745
+ };
1746
+ }
1747
+ const result = await exec("df", ["-h", homedir()], { throwOnError: false });
1748
+ const lines = result.stdout.trim().split("\n");
1749
+ if (lines.length >= 2) {
1750
+ const parts = lines[1].split(/\s+/);
1751
+ const available = parts[3];
1752
+ const usePercent = Number.parseInt(parts[4]);
1753
+ if (usePercent > 90) {
1754
+ return {
1755
+ name: "Disk Space",
1756
+ status: "warn",
1757
+ message: `${available} available (${usePercent}% used)`
1758
+ };
1759
+ }
1760
+ return {
1761
+ name: "Disk Space",
1762
+ status: "pass",
1763
+ message: `${available} available`
1764
+ };
1765
+ }
1766
+ return {
1767
+ name: "Disk Space",
1768
+ status: "info",
1769
+ message: "Could not determine"
1770
+ };
1771
+ } catch {
1772
+ return {
1773
+ name: "Disk Space",
1774
+ status: "info",
1775
+ message: "Check skipped"
1776
+ };
1777
+ }
1778
+ }
1779
+ function calculateScore(checks) {
1780
+ let score = 100;
1781
+ const weights = {
1782
+ "Claude Code": 25,
1783
+ "CCJK": 15,
1784
+ "Node.js": 20,
1785
+ "npm": 10,
1786
+ "Git": 5,
1787
+ "API Connectivity": 10,
1788
+ "Config Files": 10,
1789
+ "Permissions": 5
1790
+ };
1791
+ for (const check of checks) {
1792
+ const checkWeight = weights[check.name] || 5;
1793
+ if (check.status === "fail") {
1794
+ score -= checkWeight;
1795
+ } else if (check.status === "warn") {
1796
+ score -= checkWeight * 0.5;
1797
+ }
1798
+ }
1799
+ return Math.max(0, Math.min(100, Math.round(score)));
1800
+ }
1801
+ function generateRecommendations(checks) {
1802
+ const recommendations = [];
1803
+ for (const check of checks) {
1804
+ if (check.fixable && check.fixCommand && (check.status === "fail" || check.status === "warn")) {
1805
+ recommendations.push(`Run '${check.fixCommand}' to fix ${check.name.toLowerCase()}`);
1806
+ }
1807
+ }
1808
+ return recommendations;
1809
+ }
1810
+ async function runHealthCheck() {
1811
+ const spinner = ora("Running health check...").start();
1812
+ const checks = [];
1813
+ spinner.text = "Checking Claude Code...";
1814
+ checks.push(await checkClaudeCodeInstallation());
1815
+ spinner.text = "Checking CCJK...";
1816
+ checks.push(await checkCcjkInstallation());
1817
+ spinner.text = "Checking Node.js...";
1818
+ checks.push(await checkNodeVersion());
1819
+ spinner.text = "Checking npm...";
1820
+ checks.push(await checkNpmVersion());
1821
+ spinner.text = "Checking Git...";
1822
+ checks.push(await checkGitInstallation());
1823
+ spinner.text = "Checking API connectivity...";
1824
+ checks.push(await checkApiConnectivity());
1825
+ spinner.text = "Checking config files...";
1826
+ checks.push(checkConfigValidity());
1827
+ spinner.text = "Checking permissions...";
1828
+ checks.push(checkPermissions());
1829
+ spinner.text = "Checking disk space...";
1830
+ checks.push(await checkDiskSpace());
1831
+ spinner.stop();
1832
+ const score = calculateScore(checks);
1833
+ const recommendations = generateRecommendations(checks);
1834
+ return {
1835
+ timestamp: /* @__PURE__ */ new Date(),
1836
+ score,
1837
+ checks,
1838
+ recommendations
1839
+ };
1840
+ }
1841
+ function displayHealthReport(report) {
1842
+ console.log(ansis.cyan("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 CCJK Environment Health \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
1843
+ for (const check of report.checks) {
1844
+ switch (check.status) {
1845
+ case "pass":
1846
+ console.log(STATUS.success(`${check.name.padEnd(20)} ${check.message}`));
1847
+ break;
1848
+ case "warn":
1849
+ console.log(STATUS.warning(`${check.name.padEnd(20)} ${check.message}`));
1850
+ break;
1851
+ case "fail":
1852
+ console.log(STATUS.error(`${check.name.padEnd(20)} ${check.message}`));
1853
+ break;
1854
+ case "info":
1855
+ console.log(STATUS.info(`${check.name.padEnd(20)} ${check.message}`));
1856
+ break;
1857
+ }
1858
+ }
1859
+ console.log("");
1860
+ console.log(`Score: ${ansis.cyan(report.score.toString())}/100`);
1861
+ console.log(renderProgressBar(report.score, 40));
1862
+ if (report.recommendations.length > 0) {
1863
+ console.log(ansis.yellow("\nRecommendations:"));
1864
+ for (const rec of report.recommendations) {
1865
+ console.log(ansis.yellow(` \u2022 ${rec}`));
1866
+ }
1867
+ }
1868
+ console.log("");
1869
+ }
1870
+ async function runDoctor(fix = false) {
1871
+ const report = await runHealthCheck();
1872
+ displayHealthReport(report);
1873
+ if (fix && report.recommendations.length > 0) {
1874
+ console.log(ansis.cyan("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Attempting Fixes \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
1875
+ for (const check of report.checks) {
1876
+ if (check.fixable && check.fixCommand && (check.status === "fail" || check.status === "warn")) {
1877
+ const spinner = ora(`Fixing ${check.name}...`).start();
1878
+ try {
1879
+ const parts = check.fixCommand.split(" ");
1880
+ await exec(parts[0], parts.slice(1), { throwOnError: true });
1881
+ spinner.succeed(`Fixed ${check.name}`);
1882
+ } catch (_error) {
1883
+ spinner.fail(`Failed to fix ${check.name}`);
1884
+ }
1885
+ }
1886
+ }
1887
+ console.log("");
1888
+ }
1889
+ }
1890
+
1532
1891
  class MenuBuilder {
1533
1892
  sections = [];
1534
1893
  options;
@@ -1703,4 +2062,4 @@ function showStatus(type, message) {
1703
2062
  console.log(STATUS[type](message));
1704
2063
  }
1705
2064
 
1706
- export { AIDER_CONFIG_FILE, AIDER_DIR, AIDER_ENV_FILE, CCJK_GROUPS_DIR, CCJK_PLUGINS_DIR, CCJK_SKILLS_DIR, COLORS, CONTINUE_CONFIG_FILE, CONTINUE_DIR, MenuBuilder, STATUS, addContinueCustomCommand, addContinueMcpServer, addContinueModel, addGroup, addSkill, configureAiderApi, configureContinueApi, confirm, createBatchSkills, disableGroup, disablePlugin, discoverPlugins, enableContinueContextProvider, enableGroup, enablePlugin, ensureAiderDir, ensureContinueDir, ensureGroupsDir, ensurePluginsDir, ensureSkillsDir, exportGroups, exportSkills, getAiderModelPresets, getAiderVersion, getAllGroups, getAllSkills, getBatchCategories, getContinueProviderPresets, getEnabledAgents, getEnabledSkillIds, getGroup, getRegistry as getGroupRegistry, getLoadedPlugins, getPluginAgents, getPluginInfo, getPluginMcpServices, getPluginOutputStyles, getPluginSkills, getPluginWorkflows, getSkill, getRegistry$1 as getSkillRegistry, importGroups, importSkills, initializePlugins, installAider, isAiderInstalled, isContinueConfigured, isGroupEnabled, listPlugins, loadPlugin, readAiderConfig, readContinueConfig, readPluginConfig, refreshRegistry as refreshGroupRegistry, refreshRegistry$1 as refreshSkillRegistry, removeContinueModel, removeGroup, removeSkill, runAider, searchGroups, searchSkills, sectionDivider, setSkillEnabled, showQuickMenu, showStatus, syncSkillsToContinue, unloadPlugin, writeAiderConfig, writeContinueConfig, writePluginConfig };
2065
+ export { AIDER_CONFIG_FILE, AIDER_DIR, AIDER_ENV_FILE, CCJK_GROUPS_DIR, CCJK_PLUGINS_DIR, CCJK_SKILLS_DIR, COLORS, CONTINUE_CONFIG_FILE, CONTINUE_DIR, MenuBuilder, STATUS, addContinueCustomCommand, addContinueMcpServer, addContinueModel, addGroup, addSkill, checkCcjkVersion, checkClaudeCodeVersion, configureAiderApi, configureContinueApi, confirm, createBatchSkills, detectAllConfigs, disableGroup, disablePlugin, discoverPlugins, displayHealthReport, enableContinueContextProvider, enableGroup, enablePlugin, ensureAiderDir, ensureContinueDir, ensureGroupsDir, ensurePluginsDir, ensureSkillsDir, exportGroups, exportSkills, getAiderModelPresets, getAiderVersion, getAllGroups, getAllSkills, getBatchCategories, getContinueProviderPresets, getCurrentTemplateId, getEnabledAgents, getEnabledSkillIds, getGroup, getRegistry as getGroupRegistry, getLoadedPlugins, getPluginAgents, getPluginInfo, getPluginMcpServices, getPluginOutputStyles, getPluginSkills, getPluginWorkflows, getSkill, getRegistry$1 as getSkillRegistry, importGroups, importSkills, initializePlugins, installAider, isAiderInstalled, isContinueConfigured, isGroupEnabled, listPlugins, loadPlugin, readAiderConfig, readContinueConfig, readPluginConfig, refreshRegistry as refreshGroupRegistry, refreshRegistry$1 as refreshSkillRegistry, removeContinueModel, removeGroup, removeSkill, renderProgressBar, runAider, runDoctor, runHealthCheck, searchGroups, searchSkills, sectionDivider, setSkillEnabled, showQuickMenu, showStatus, syncSkillsToContinue, unloadPlugin, writeAiderConfig, writeContinueConfig, writePluginConfig };
package/package.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "ccjk",
3
3
  "type": "module",
4
- "version": "1.5.0",
5
- "packageManager": "pnpm@10.17.1",
4
+ "version": "2.0.2",
6
5
  "description": "Claude Code JinKu - Advanced AI-powered development assistant with skills, agents, and LLM-driven audit",
7
6
  "author": {
8
7
  "name": "CCJK Team"
@@ -95,37 +94,15 @@
95
94
  "engines": {
96
95
  "node": ">=20"
97
96
  },
98
- "scripts": {
99
- "dev": "tsx ./src/cli.ts",
100
- "build": "unbuild",
101
- "start": "node bin/ccjk.mjs",
102
- "typecheck": "tsc --noEmit",
103
- "prepublishOnly": "pnpm build",
104
- "lint": "eslint",
105
- "lint:fix": "eslint --fix",
106
- "test": "vitest",
107
- "test:ui": "vitest --ui",
108
- "test:coverage": "vitest run --coverage",
109
- "test:run": "vitest run",
110
- "test:watch": "vitest watch",
111
- "changeset": "changeset",
112
- "version": "changeset version",
113
- "update:deps": "pnpx taze major -r -w",
114
- "release": "pnpm build && changeset publish",
115
- "prepare": "husky",
116
- "commitlint": "commitlint",
117
- "commitlint:check": "commitlint --from HEAD~1 --to HEAD --verbose",
118
- "docs:dev": "pnpm -F @ccjk/docs dev",
119
- "docs:build": "pnpm -F @ccjk/docs build",
120
- "docs:preview": "pnpm -F @ccjk/docs preview"
121
- },
122
97
  "dependencies": {
123
98
  "@types/semver": "^7.7.1",
124
99
  "ansis": "^4.1.0",
125
100
  "cac": "^6.7.14",
101
+ "chokidar": "^4.0.3",
126
102
  "dayjs": "^1.11.18",
127
103
  "find-up-simple": "^1.0.1",
128
104
  "fs-extra": "^11.3.2",
105
+ "gray-matter": "^4.0.3",
129
106
  "i18next": "^25.5.2",
130
107
  "i18next-fs-backend": "^2.6.0",
131
108
  "inquirer": "^12.9.6",
@@ -162,5 +139,27 @@
162
139
  "*": [
163
140
  "pnpm lint"
164
141
  ]
142
+ },
143
+ "scripts": {
144
+ "dev": "tsx ./src/cli.ts",
145
+ "build": "unbuild",
146
+ "start": "node bin/ccjk.mjs",
147
+ "typecheck": "tsc --noEmit",
148
+ "lint": "eslint",
149
+ "lint:fix": "eslint --fix",
150
+ "test": "vitest",
151
+ "test:ui": "vitest --ui",
152
+ "test:coverage": "vitest run --coverage",
153
+ "test:run": "vitest run",
154
+ "test:watch": "vitest watch",
155
+ "changeset": "changeset",
156
+ "version": "changeset version",
157
+ "update:deps": "pnpx taze major -r -w",
158
+ "release": "pnpm build && changeset publish",
159
+ "commitlint": "commitlint",
160
+ "commitlint:check": "commitlint --from HEAD~1 --to HEAD --verbose",
161
+ "docs:dev": "pnpm -F @ccjk/docs dev",
162
+ "docs:build": "pnpm -F @ccjk/docs build",
163
+ "docs:preview": "pnpm -F @ccjk/docs preview"
165
164
  }
166
- }
165
+ }
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: brainstorming
3
+ description: Interactive design exploration and refinement
4
+ version: 1.0.0
5
+ author: CCJK
6
+ category: planning
7
+ triggers:
8
+ - /brainstorm
9
+ - /bs
10
+ - /explore
11
+ use_when:
12
+ - "User wants to explore ideas"
13
+ - "Starting new feature design"
14
+ - "User mentions brainstorming or exploring options"
15
+ - "Need to evaluate different approaches"
16
+ auto_activate: true
17
+ priority: 8
18
+ difficulty: beginner
19
+ tags:
20
+ - design
21
+ - exploration
22
+ - ideation
23
+ ---
24
+
25
+ # Brainstorming
26
+
27
+ ## Context
28
+ $ARGUMENTS
29
+
30
+ ## Instructions
31
+
32
+ You are in brainstorming mode. Your goal is to help explore and refine ideas through interactive discussion.
33
+
34
+ ### Process
35
+
36
+ 1. **Understand the Goal**
37
+ - What problem are we solving?
38
+ - What constraints exist?
39
+ - What does success look like?
40
+
41
+ 2. **Generate Options**
42
+ - Propose 3-5 different approaches
43
+ - Consider trade-offs for each
44
+ - Think about edge cases
45
+
46
+ 3. **Evaluate Together**
47
+ - Discuss pros and cons
48
+ - Ask clarifying questions
49
+ - Refine based on feedback
50
+
51
+ 4. **Converge on Direction**
52
+ - Summarize the chosen approach
53
+ - Document key decisions
54
+ - Identify next steps
55
+
56
+ ### Output Format
57
+
58
+ Present options as:
59
+ - **Option A**: [Name] - [Brief description]
60
+ - Pros: ...
61
+ - Cons: ...
62
+ - Best for: ...
63
+
64
+ Ask questions to clarify requirements before finalizing.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: code-review
3
+ description: Two-stage code review - spec compliance and code quality
4
+ version: 1.0.0
5
+ author: CCJK
6
+ category: review
7
+ triggers:
8
+ - /review
9
+ - /cr
10
+ - /code-review
11
+ use_when:
12
+ - "User wants code review"
13
+ - "PR ready for review"
14
+ - "User mentions reviewing code"
15
+ - "Before merging changes"
16
+ auto_activate: true
17
+ priority: 7
18
+ difficulty: intermediate
19
+ tags:
20
+ - review
21
+ - quality
22
+ - pr
23
+ ---
24
+
25
+ # Code Review
26
+
27
+ ## Context
28
+ $ARGUMENTS
29
+
30
+ ## Instructions
31
+
32
+ Perform a two-stage code review:
33
+
34
+ ### Stage 1: Spec Compliance Review
35
+
36
+ Check if the implementation matches requirements:
37
+
38
+ - [ ] All requirements implemented
39
+ - [ ] Acceptance criteria met
40
+ - [ ] No scope creep (extra unrequested features)
41
+ - [ ] Edge cases from spec handled
42
+
43
+ ### Stage 2: Code Quality Review
44
+
45
+ Check code quality aspects:
46
+
47
+ - [ ] **Correctness**: Logic is correct
48
+ - [ ] **Readability**: Code is clear and understandable
49
+ - [ ] **Maintainability**: Easy to modify in future
50
+ - [ ] **Performance**: No obvious performance issues
51
+ - [ ] **Security**: No security vulnerabilities
52
+ - [ ] **Testing**: Adequate test coverage
53
+
54
+ ### Review Output Format
55
+
56
+ ```markdown
57
+ ## Code Review: [PR/Feature Name]
58
+
59
+ ### Stage 1: Spec Compliance
60
+ - ✅ Requirement 1: Implemented correctly
61
+ - ⚠️ Requirement 2: Partially implemented - [details]
62
+ - ❌ Requirement 3: Missing - [details]
63
+
64
+ ### Stage 2: Code Quality
65
+
66
+ #### Strengths
67
+ - Good separation of concerns
68
+ - Clear naming conventions
69
+
70
+ #### Issues Found
71
+ 1. **[Severity]** [File:Line] - [Description]
72
+ - Suggestion: [How to fix]
73
+
74
+ 2. **[Severity]** [File:Line] - [Description]
75
+ - Suggestion: [How to fix]
76
+
77
+ ### Verdict
78
+ - [ ] Approved
79
+ - [ ] Approved with minor changes
80
+ - [ ] Changes requested
81
+ ```