ccjk 2.6.1 → 3.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 (53) hide show
  1. package/dist/chunks/agent.mjs +1412 -0
  2. package/dist/chunks/api.mjs +7 -7
  3. package/dist/chunks/auto-updater.mjs +9 -9
  4. package/dist/chunks/ccr.mjs +4 -4
  5. package/dist/chunks/ccu.mjs +1 -1
  6. package/dist/chunks/claude-code-incremental-manager.mjs +6 -6
  7. package/dist/chunks/claude-wrapper.mjs +18 -5
  8. package/dist/chunks/codex.mjs +4 -4
  9. package/dist/chunks/commands2.mjs +5 -5
  10. package/dist/chunks/commit.mjs +2 -2
  11. package/dist/chunks/config-consolidator.mjs +2 -2
  12. package/dist/chunks/config-switch.mjs +6 -6
  13. package/dist/chunks/config.mjs +1 -1
  14. package/dist/chunks/config2.mjs +14 -14
  15. package/dist/chunks/doctor.mjs +3 -3
  16. package/dist/chunks/features.mjs +12 -12
  17. package/dist/chunks/help.mjs +35 -35
  18. package/dist/chunks/index.mjs +12 -11
  19. package/dist/chunks/init.mjs +21 -21
  20. package/dist/chunks/interview.mjs +33 -33
  21. package/dist/chunks/marketplace.mjs +8 -8
  22. package/dist/chunks/mcp.mjs +8 -8
  23. package/dist/chunks/menu.mjs +302 -293
  24. package/dist/chunks/notification.mjs +5 -5
  25. package/dist/chunks/onboarding.mjs +17 -346
  26. package/dist/chunks/package.mjs +1 -1
  27. package/dist/chunks/permission-manager.mjs +3 -3
  28. package/dist/chunks/plugin.mjs +1937 -0
  29. package/dist/chunks/prompts.mjs +3 -3
  30. package/dist/chunks/providers.mjs +13 -13
  31. package/dist/chunks/session.mjs +17 -17
  32. package/dist/chunks/skill.mjs +304 -0
  33. package/dist/chunks/skills-sync.mjs +4 -4
  34. package/dist/chunks/skills.mjs +2 -2
  35. package/dist/chunks/team.mjs +1 -1
  36. package/dist/chunks/uninstall.mjs +8 -8
  37. package/dist/chunks/update.mjs +4 -4
  38. package/dist/chunks/upgrade-manager.mjs +3 -3
  39. package/dist/chunks/version-checker.mjs +6 -6
  40. package/dist/chunks/workflows.mjs +2 -2
  41. package/dist/cli.mjs +57 -4
  42. package/dist/index.d.mts +157 -14
  43. package/dist/index.d.ts +157 -14
  44. package/dist/index.mjs +6 -5
  45. package/dist/shared/ccjk.B2Aos9HI.mjs +333 -0
  46. package/dist/shared/{ccjk.rLRHmcqD.mjs → ccjk.BQzWKmC3.mjs} +3 -3
  47. package/dist/shared/{ccjk.uVUeWAt8.mjs → ccjk.BZT_f2go.mjs} +7 -7
  48. package/dist/shared/{ccjk.-FoZ3zat.mjs → ccjk.BlPCiSHj.mjs} +10 -10
  49. package/dist/shared/ccjk.DH6cOJsf.mjs +1674 -0
  50. package/dist/shared/{ccjk.tB4-Y4Qb.mjs → ccjk.DrMygfCF.mjs} +1 -1
  51. package/dist/shared/ccjk.tJ08-yZt.mjs +179 -0
  52. package/package.json +1 -1
  53. package/dist/shared/ccjk.BhKlRJ0h.mjs +0 -114
@@ -1679,7 +1679,7 @@ async function selectChannels() {
1679
1679
  }
1680
1680
  async function configureChannel(channel) {
1681
1681
  console.log("");
1682
- console.log(ansis.cyan(`\u914D\u7F6E ${i18n.t(`notification:channels.${channel}`)}:`));
1682
+ console.log(ansis.green(`\u914D\u7F6E ${i18n.t(`notification:channels.${channel}`)}:`));
1683
1683
  switch (channel) {
1684
1684
  case "feishu":
1685
1685
  await configureFeishu();
@@ -1939,7 +1939,7 @@ async function sendTestNotification() {
1939
1939
  return;
1940
1940
  }
1941
1941
  console.log("");
1942
- console.log(ansis.cyan(i18n.t("notification:test.sending")));
1942
+ console.log(ansis.green(i18n.t("notification:test.sending")));
1943
1943
  try {
1944
1944
  const client = CloudClient.getInstance();
1945
1945
  await client.initialize();
@@ -2017,7 +2017,7 @@ async function handleBind(code) {
2017
2017
  bindingCode = inputCode.trim();
2018
2018
  }
2019
2019
  console.log("");
2020
- console.log(ansis.cyan(i18n.t("notification:cloud.binding")));
2020
+ console.log(ansis.green(i18n.t("notification:cloud.binding")));
2021
2021
  try {
2022
2022
  const result = await bindDevice(bindingCode);
2023
2023
  if (result.success) {
@@ -2105,7 +2105,7 @@ async function showCloudStatus() {
2105
2105
  }
2106
2106
  async function sendCloudTestNotification() {
2107
2107
  console.log("");
2108
- console.log(ansis.cyan(i18n.t("notification:cloud.sendingTest")));
2108
+ console.log(ansis.green(i18n.t("notification:cloud.sendingTest")));
2109
2109
  try {
2110
2110
  const result = await sendNotification({
2111
2111
  title: i18n.t("notification:cloud.testTitle"),
@@ -2289,7 +2289,7 @@ async function configureBark() {
2289
2289
  async function testLocalNotification() {
2290
2290
  const config = await loadLocalNotificationConfig();
2291
2291
  console.log("");
2292
- console.log(ansis.cyan(i18n.t("notification:local.testing")));
2292
+ console.log(ansis.green(i18n.t("notification:local.testing")));
2293
2293
  console.log("");
2294
2294
  let hasAnyEnabled = false;
2295
2295
  if (config.shortcutName) {
@@ -6,336 +6,17 @@ import inquirer from 'inquirer';
6
6
  import ora from 'ora';
7
7
  import { join, basename } from 'pathe';
8
8
  import { CCJK_CONFIG_DIR } from './constants.mjs';
9
- import { b as boxify, C as COLORS, S as STATUS } from '../shared/ccjk.BhKlRJ0h.mjs';
9
+ import { h as detectProject, j as getProjectSummary, i as generateSuggestions } from '../shared/ccjk.B2Aos9HI.mjs';
10
+ import { a as boxify, t as theme, S as STATUS } from '../shared/ccjk.tJ08-yZt.mjs';
10
11
  import { writeFileAtomic } from './fs-operations.mjs';
11
-
12
- function readPackageJson(dir) {
13
- const pkgPath = join(dir, "package.json");
14
- if (!existsSync(pkgPath))
15
- return null;
16
- try {
17
- return JSON.parse(readFileSync(pkgPath, "utf-8"));
18
- } catch {
19
- return null;
20
- }
21
- }
22
- function detectPackageManager(dir) {
23
- if (existsSync(join(dir, "bun.lockb")))
24
- return "bun";
25
- if (existsSync(join(dir, "pnpm-lock.yaml")))
26
- return "pnpm";
27
- if (existsSync(join(dir, "yarn.lock")))
28
- return "yarn";
29
- if (existsSync(join(dir, "package-lock.json")))
30
- return "npm";
31
- const pkg = readPackageJson(dir);
32
- if (pkg?.packageManager) {
33
- if (pkg.packageManager.startsWith("pnpm"))
34
- return "pnpm";
35
- if (pkg.packageManager.startsWith("yarn"))
36
- return "yarn";
37
- if (pkg.packageManager.startsWith("bun"))
38
- return "bun";
39
- }
40
- return "unknown";
41
- }
42
- function detectFrameworks(dir) {
43
- const frameworks = [];
44
- const pkg = readPackageJson(dir);
45
- if (!pkg)
46
- return frameworks;
47
- const allDeps = {
48
- ...pkg.dependencies,
49
- ...pkg.devDependencies
50
- };
51
- if (allDeps.react)
52
- frameworks.push("react");
53
- if (allDeps.vue)
54
- frameworks.push("vue");
55
- if (allDeps["@angular/core"])
56
- frameworks.push("angular");
57
- if (allDeps.svelte)
58
- frameworks.push("svelte");
59
- if (allDeps.next)
60
- frameworks.push("nextjs");
61
- if (allDeps.nuxt)
62
- frameworks.push("nuxt");
63
- if (allDeps["@remix-run/react"])
64
- frameworks.push("remix");
65
- if (allDeps.astro)
66
- frameworks.push("astro");
67
- if (allDeps.express)
68
- frameworks.push("express");
69
- if (allDeps.fastify)
70
- frameworks.push("fastify");
71
- if (allDeps["@nestjs/core"])
72
- frameworks.push("nestjs");
73
- if (allDeps.koa)
74
- frameworks.push("koa");
75
- if (allDeps.hono)
76
- frameworks.push("hono");
77
- if (allDeps.electron)
78
- frameworks.push("electron");
79
- if (allDeps["@tauri-apps/api"])
80
- frameworks.push("tauri");
81
- if (allDeps["react-native"])
82
- frameworks.push("react-native");
83
- if (existsSync(join(dir, "requirements.txt")) || existsSync(join(dir, "pyproject.toml"))) {
84
- const reqPath = join(dir, "requirements.txt");
85
- if (existsSync(reqPath)) {
86
- const reqs = readFileSync(reqPath, "utf-8").toLowerCase();
87
- if (reqs.includes("django"))
88
- frameworks.push("django");
89
- if (reqs.includes("flask"))
90
- frameworks.push("flask");
91
- if (reqs.includes("fastapi"))
92
- frameworks.push("fastapi");
93
- }
94
- }
95
- if (existsSync(join(dir, "Gemfile"))) {
96
- const gemfile = readFileSync(join(dir, "Gemfile"), "utf-8").toLowerCase();
97
- if (gemfile.includes("rails"))
98
- frameworks.push("rails");
99
- }
100
- if (existsSync(join(dir, "composer.json"))) {
101
- try {
102
- const composer = JSON.parse(readFileSync(join(dir, "composer.json"), "utf-8"));
103
- if (composer.require?.["laravel/framework"])
104
- frameworks.push("laravel");
105
- } catch {
106
- }
107
- }
108
- return frameworks;
109
- }
110
- function detectBuildTools(dir) {
111
- const tools = [];
112
- const pkg = readPackageJson(dir);
113
- if (existsSync(join(dir, "vite.config.ts")) || existsSync(join(dir, "vite.config.js")))
114
- tools.push("vite");
115
- if (existsSync(join(dir, "webpack.config.js")) || existsSync(join(dir, "webpack.config.ts")))
116
- tools.push("webpack");
117
- if (existsSync(join(dir, "rollup.config.js")) || existsSync(join(dir, "rollup.config.ts")))
118
- tools.push("rollup");
119
- if (existsSync(join(dir, "tsup.config.ts")) || existsSync(join(dir, "tsup.config.js")))
120
- tools.push("tsup");
121
- if (pkg) {
122
- const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
123
- if (allDeps.esbuild)
124
- tools.push("esbuild");
125
- if (allDeps["@swc/core"])
126
- tools.push("swc");
127
- if (allDeps.turbo)
128
- tools.push("turbopack");
129
- if (allDeps.parcel)
130
- tools.push("parcel");
131
- if (allDeps.unbuild)
132
- tools.push("unbuild");
133
- }
134
- return tools;
135
- }
136
- function detectTestFrameworks(dir) {
137
- const frameworks = [];
138
- const pkg = readPackageJson(dir);
139
- if (existsSync(join(dir, "vitest.config.ts")) || existsSync(join(dir, "vitest.config.js")))
140
- frameworks.push("vitest");
141
- if (existsSync(join(dir, "jest.config.js")) || existsSync(join(dir, "jest.config.ts")))
142
- frameworks.push("jest");
143
- if (existsSync(join(dir, "cypress.config.ts")) || existsSync(join(dir, "cypress.config.js")))
144
- frameworks.push("cypress");
145
- if (existsSync(join(dir, "playwright.config.ts")))
146
- frameworks.push("playwright");
147
- if (existsSync(join(dir, "pytest.ini")) || existsSync(join(dir, "conftest.py")))
148
- frameworks.push("pytest");
149
- if (pkg) {
150
- const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
151
- if (allDeps.vitest && !frameworks.includes("vitest"))
152
- frameworks.push("vitest");
153
- if (allDeps.jest && !frameworks.includes("jest"))
154
- frameworks.push("jest");
155
- if (allDeps.mocha)
156
- frameworks.push("mocha");
157
- if (allDeps.cypress && !frameworks.includes("cypress"))
158
- frameworks.push("cypress");
159
- if (allDeps["@playwright/test"] && !frameworks.includes("playwright"))
160
- frameworks.push("playwright");
161
- }
162
- return frameworks;
163
- }
164
- function detectCICDSystems(dir) {
165
- const systems = [];
166
- if (existsSync(join(dir, ".github", "workflows")))
167
- systems.push("github-actions");
168
- if (existsSync(join(dir, ".gitlab-ci.yml")))
169
- systems.push("gitlab-ci");
170
- if (existsSync(join(dir, "Jenkinsfile")))
171
- systems.push("jenkins");
172
- if (existsSync(join(dir, ".circleci")))
173
- systems.push("circleci");
174
- if (existsSync(join(dir, ".travis.yml")))
175
- systems.push("travis");
176
- if (existsSync(join(dir, "azure-pipelines.yml")))
177
- systems.push("azure-pipelines");
178
- return systems;
179
- }
180
- function detectLanguages(dir) {
181
- const languages = [];
182
- if (existsSync(join(dir, "tsconfig.json")))
183
- languages.push("typescript");
184
- if (existsSync(join(dir, "package.json"))) {
185
- if (!languages.includes("typescript"))
186
- languages.push("javascript");
187
- }
188
- if (existsSync(join(dir, "requirements.txt")) || existsSync(join(dir, "pyproject.toml")) || existsSync(join(dir, "setup.py")))
189
- languages.push("python");
190
- if (existsSync(join(dir, "Gemfile")))
191
- languages.push("ruby");
192
- if (existsSync(join(dir, "go.mod")))
193
- languages.push("go");
194
- if (existsSync(join(dir, "Cargo.toml")))
195
- languages.push("rust");
196
- if (existsSync(join(dir, "pom.xml")) || existsSync(join(dir, "build.gradle"))) {
197
- languages.push("java");
198
- if (existsSync(join(dir, "build.gradle.kts")))
199
- languages.push("kotlin");
200
- }
201
- if (existsSync(join(dir, "composer.json")))
202
- languages.push("php");
203
- if (existsSync(join(dir, "Package.swift")))
204
- languages.push("swift");
205
- if (existsSync(join(dir, "pubspec.yaml")))
206
- languages.push("dart");
207
- return languages;
208
- }
209
- function determineProjectType(info) {
210
- const frameworks = info.frameworks || [];
211
- if (frameworks.includes("react-native") || frameworks.includes("flutter"))
212
- return "mobile";
213
- if (frameworks.includes("electron") || frameworks.includes("tauri"))
214
- return "desktop";
215
- const pkg = info.rootDir ? readPackageJson(info.rootDir) : null;
216
- if (pkg?.bin)
217
- return "cli";
218
- if (pkg?.main || pkg?.exports) {
219
- const hasAppFramework = frameworks.some(
220
- (f) => ["react", "vue", "angular", "svelte", "nextjs", "nuxt", "express", "fastify", "nestjs"].includes(f)
221
- );
222
- if (!hasAppFramework)
223
- return "library";
224
- }
225
- const frontendFrameworks = ["react", "vue", "angular", "svelte"];
226
- const backendFrameworks = ["express", "fastify", "nestjs", "koa", "hono", "django", "flask", "fastapi", "rails", "laravel"];
227
- const metaFrameworks = ["nextjs", "nuxt", "remix", "astro"];
228
- const hasFrontend = frameworks.some((f) => frontendFrameworks.includes(f));
229
- const hasBackend = frameworks.some((f) => backendFrameworks.includes(f));
230
- const hasMeta = frameworks.some((f) => metaFrameworks.includes(f));
231
- if (hasMeta)
232
- return "fullstack";
233
- if (hasFrontend && hasBackend)
234
- return "fullstack";
235
- if (hasFrontend)
236
- return "frontend";
237
- if (hasBackend)
238
- return "backend";
239
- return "unknown";
240
- }
241
- function detectProject(dir = process__default.cwd()) {
242
- const pkg = readPackageJson(dir);
243
- const frameworks = detectFrameworks(dir);
244
- const languages = detectLanguages(dir);
245
- const info = {
246
- name: pkg?.name || "unknown",
247
- type: "unknown",
248
- packageManager: detectPackageManager(dir),
249
- frameworks,
250
- buildTools: detectBuildTools(dir),
251
- testFrameworks: detectTestFrameworks(dir),
252
- cicd: detectCICDSystems(dir),
253
- languages,
254
- hasTypeScript: existsSync(join(dir, "tsconfig.json")),
255
- hasDocker: existsSync(join(dir, "Dockerfile")) || existsSync(join(dir, "docker-compose.yml")),
256
- hasMonorepo: existsSync(join(dir, "pnpm-workspace.yaml")) || existsSync(join(dir, "lerna.json")) || pkg?.workspaces != null,
257
- rootDir: dir
258
- };
259
- info.type = determineProjectType(info);
260
- return info;
261
- }
262
- function generateSuggestions(project) {
263
- const suggestions = {
264
- workflows: ["git"],
265
- mcpServices: [],
266
- agents: [],
267
- skills: [],
268
- subagentGroups: [],
269
- outputStyle: "technical-precise"
270
- };
271
- if (project.hasTypeScript || project.languages.includes("typescript")) {
272
- suggestions.subagentGroups.push("typescript-dev");
273
- suggestions.skills.push("ts-debug", "ts-refactor", "ts-test");
274
- }
275
- if (project.languages.includes("python")) {
276
- suggestions.subagentGroups.push("python-dev");
277
- suggestions.skills.push("py-debug", "py-refactor", "py-test");
278
- }
279
- if (project.frameworks.includes("nextjs") || project.frameworks.includes("nuxt")) {
280
- suggestions.workflows.push("frontend", "testing");
281
- suggestions.agents.push("ccjk-performance-expert");
282
- }
283
- if (project.frameworks.includes("express") || project.frameworks.includes("fastify") || project.frameworks.includes("nestjs")) {
284
- suggestions.workflows.push("backend", "testing");
285
- suggestions.agents.push("ccjk-security-expert");
286
- }
287
- if (project.hasDocker || project.cicd.length > 0) {
288
- suggestions.workflows.push("devops");
289
- suggestions.subagentGroups.push("devops-team");
290
- suggestions.skills.push("devops-docker", "devops-ci");
291
- }
292
- if (project.testFrameworks.length > 0) {
293
- suggestions.workflows.push("testing");
294
- suggestions.agents.push("ccjk-testing-specialist");
295
- }
296
- if (project.hasMonorepo) {
297
- suggestions.agents.push("ccjk-code-reviewer");
298
- }
299
- if (project.type === "frontend" || project.type === "fullstack") {
300
- suggestions.subagentGroups.push("seo-team");
301
- suggestions.skills.push("seo-meta", "seo-schema");
302
- }
303
- suggestions.subagentGroups.push("security-team");
304
- suggestions.workflows = [...new Set(suggestions.workflows)];
305
- suggestions.agents = [...new Set(suggestions.agents)];
306
- suggestions.skills = [...new Set(suggestions.skills)];
307
- suggestions.subagentGroups = [...new Set(suggestions.subagentGroups)];
308
- return suggestions;
309
- }
310
- function getProjectSummary(project) {
311
- const parts = [];
312
- parts.push(`Project: ${project.name}`);
313
- parts.push(`Type: ${project.type}`);
314
- if (project.languages.length > 0) {
315
- parts.push(`Languages: ${project.languages.join(", ")}`);
316
- }
317
- if (project.frameworks.length > 0) {
318
- parts.push(`Frameworks: ${project.frameworks.join(", ")}`);
319
- }
320
- if (project.buildTools.length > 0) {
321
- parts.push(`Build: ${project.buildTools.join(", ")}`);
322
- }
323
- if (project.testFrameworks.length > 0) {
324
- parts.push(`Testing: ${project.testFrameworks.join(", ")}`);
325
- }
326
- parts.push(`Package Manager: ${project.packageManager}`);
327
- const features = [];
328
- if (project.hasTypeScript)
329
- features.push("TypeScript");
330
- if (project.hasDocker)
331
- features.push("Docker");
332
- if (project.hasMonorepo)
333
- features.push("Monorepo");
334
- if (features.length > 0) {
335
- parts.push(`Features: ${features.join(", ")}`);
336
- }
337
- return parts.join("\n");
338
- }
12
+ import 'node:os';
13
+ import './index2.mjs';
14
+ import 'node:url';
15
+ import 'i18next';
16
+ import 'i18next-fs-backend';
17
+ import './package.mjs';
18
+ import 'node:crypto';
19
+ import 'node:fs/promises';
339
20
 
340
21
  const KNOWLEDGE_BASE_FILE = join(CCJK_CONFIG_DIR, "knowledge-base.json");
341
22
  function simpleHash(content) {
@@ -540,7 +221,7 @@ async function runOnboarding(projectDir = process__default.cwd()) {
540
221
  spinner.succeed("Project detected");
541
222
  result.projectDetected = true;
542
223
  console.log("");
543
- console.log(COLORS.secondary("\u{1F4C1} Project Info:"));
224
+ console.log(theme.secondary("\u{1F4C1} Project Info:"));
544
225
  console.log(ansis.gray(getProjectSummary(project)));
545
226
  console.log("");
546
227
  spinner.start("Looking for CLAUDE.md...");
@@ -646,9 +327,9 @@ async function runOnboarding(projectDir = process__default.cwd()) {
646
327
  result.knowledgeEntriesCreated++;
647
328
  saveKnowledgeBase(kb);
648
329
  console.log("");
649
- console.log(COLORS.primary("\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"));
650
- console.log(COLORS.accent(" Setup Complete! "));
651
- console.log(COLORS.primary("\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"));
330
+ console.log(theme.primary("\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"));
331
+ console.log(theme.accent(" Setup Complete! "));
332
+ console.log(theme.primary("\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"));
652
333
  console.log("");
653
334
  console.log(` \u{1F4DA} Knowledge entries: ${result.knowledgeEntriesCreated}`);
654
335
  console.log(` \u{1F4C4} CLAUDE.md: ${result.claudeMdFound ? "\u2713" : "\u2717"}`);
@@ -656,13 +337,13 @@ async function runOnboarding(projectDir = process__default.cwd()) {
656
337
  console.log(` \u26A1 Skills: ${result.skillsFound}`);
657
338
  console.log("");
658
339
  if (result.recommendations.length > 0) {
659
- console.log(COLORS.secondary("\u{1F4A1} Recommendations:"));
340
+ console.log(theme.secondary("\u{1F4A1} Recommendations:"));
660
341
  for (const rec of result.recommendations) {
661
342
  console.log(ansis.gray(` \u2022 ${rec}`));
662
343
  }
663
344
  console.log("");
664
345
  }
665
- console.log(COLORS.secondary("\u{1F4CC} Next Steps:"));
346
+ console.log(theme.secondary("\u{1F4CC} Next Steps:"));
666
347
  console.log(ansis.gray(" \u2022 Run `ccjk` to open the main menu"));
667
348
  console.log(ansis.gray(" \u2022 Run `ccjk doctor` to check environment"));
668
349
  console.log(ansis.gray(" \u2022 Run `ccjk groups enable typescript-dev` for TypeScript support"));
@@ -698,14 +379,4 @@ function exportProjectKnowledge(projectDir = process__default.cwd()) {
698
379
  return JSON.stringify(entries, null, 2);
699
380
  }
700
381
 
701
- const onboarding = {
702
- __proto__: null,
703
- exportProjectKnowledge: exportProjectKnowledge,
704
- getProjectKnowledge: getProjectKnowledge,
705
- loadKnowledgeBase: loadKnowledgeBase,
706
- quickSync: quickSync,
707
- runOnboarding: runOnboarding,
708
- saveKnowledgeBase: saveKnowledgeBase
709
- };
710
-
711
- export { detectFrameworks as a, detectBuildTools as b, detectTestFrameworks as c, detectPackageManager as d, detectCICDSystems as e, detectLanguages as f, determineProjectType as g, detectProject as h, generateSuggestions as i, getProjectSummary as j, getProjectKnowledge as k, loadKnowledgeBase as l, exportProjectKnowledge as m, onboarding as o, quickSync as q, runOnboarding as r, saveKnowledgeBase as s };
382
+ export { exportProjectKnowledge, getProjectKnowledge, loadKnowledgeBase, quickSync, runOnboarding, saveKnowledgeBase };
@@ -1,4 +1,4 @@
1
- const version = "2.6.1";
1
+ const version = "3.0.2";
2
2
  const homepage = "https://github.com/miounet11/ccjk";
3
3
 
4
4
  export { homepage, version };
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, mkdirSync } from 'node:fs';
2
2
  import ansis from 'ansis';
3
3
  import { join } from 'pathe';
4
4
  import { SETTINGS_FILE, CCJK_CONFIG_DIR } from './constants.mjs';
5
- import { S as STATUS } from '../shared/ccjk.BhKlRJ0h.mjs';
5
+ import { S as STATUS } from '../shared/ccjk.tJ08-yZt.mjs';
6
6
  import { writeFileAtomic } from './fs-operations.mjs';
7
7
  import 'node:os';
8
8
  import './index2.mjs';
@@ -165,7 +165,7 @@ function getCurrentTemplateId() {
165
165
  function displayPermissions() {
166
166
  const permissions = readPermissions();
167
167
  const templateId = getCurrentTemplateId();
168
- console.log(ansis.cyan("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Claude Code Permissions \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
168
+ console.log(ansis.green("\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 Claude Code Permissions \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n"));
169
169
  console.log(ansis.white.bold("Trusted Directories:"));
170
170
  if (permissions.trustedDirectories.length === 0) {
171
171
  console.log(ansis.gray(" (none)"));
@@ -200,7 +200,7 @@ function displayPermissions() {
200
200
  console.log("");
201
201
  if (templateId) {
202
202
  const template = PERMISSION_TEMPLATES.find((t) => t.id === templateId);
203
- console.log(ansis.gray(`Template: ${ansis.cyan(template?.name || templateId)}`));
203
+ console.log(ansis.gray(`Template: ${ansis.green(template?.name || templateId)}`));
204
204
  } else {
205
205
  console.log(ansis.gray("Template: custom"));
206
206
  }