ccjk 10.1.0 → 10.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/chunks/agent-teams.mjs +1 -1
- package/dist/chunks/agent.mjs +1 -1
- package/dist/chunks/api-providers.mjs +1 -1
- package/dist/chunks/api.mjs +3 -3
- package/dist/chunks/auto-bootstrap.mjs +1 -1
- package/dist/chunks/auto-updater.mjs +1 -1
- package/dist/{shared/ccjk.Br91zBIG.mjs → chunks/banner.mjs} +52 -3
- package/dist/chunks/boost.mjs +2 -2
- package/dist/chunks/ccjk-agents.mjs +1 -1
- package/dist/chunks/ccjk-all.mjs +1 -1
- package/dist/chunks/ccjk-config.mjs +1 -1
- package/dist/chunks/ccjk-hooks.mjs +1 -1
- package/dist/chunks/ccjk-mcp.mjs +2 -2
- package/dist/chunks/ccjk-setup.mjs +1 -1
- package/dist/chunks/ccjk-skills.mjs +1 -1
- package/dist/chunks/ccr.mjs +11 -10
- package/dist/chunks/ccu.mjs +1 -1
- package/dist/chunks/check-updates.mjs +4 -3
- package/dist/chunks/claude-code-config-manager.mjs +8 -7
- package/dist/chunks/claude-code-incremental-manager.mjs +3 -2
- package/dist/chunks/claude-config.mjs +3 -3
- package/dist/chunks/claude-wrapper.mjs +2 -2
- package/dist/chunks/codex-config-switch.mjs +3 -2
- package/dist/chunks/codex-provider-manager.mjs +3 -2
- package/dist/chunks/codex-uninstaller.mjs +2 -2
- package/dist/chunks/codex.mjs +5 -5
- package/dist/chunks/commands.mjs +88 -391
- package/dist/chunks/commands2.mjs +391 -88
- package/dist/chunks/completion.mjs +1 -1
- package/dist/chunks/config-consolidator.mjs +2 -2
- package/dist/chunks/config-switch.mjs +4 -3
- package/dist/chunks/config.mjs +6 -98
- package/dist/chunks/config2.mjs +411 -400
- package/dist/chunks/config3.mjs +401 -410
- package/dist/chunks/constants.mjs +1 -1
- package/dist/chunks/context.mjs +283 -1
- package/dist/chunks/dashboard.mjs +365 -0
- package/dist/chunks/doctor.mjs +4 -4
- package/dist/chunks/features.mjs +12 -11
- package/dist/chunks/fs-operations.mjs +1 -1
- package/dist/chunks/health-alerts.mjs +304 -0
- package/dist/chunks/health-check.mjs +532 -0
- package/dist/chunks/index.mjs +10 -177
- package/dist/chunks/index2.mjs +168 -1162
- package/dist/chunks/index3.mjs +1076 -910
- package/dist/chunks/index4.mjs +947 -137
- package/dist/chunks/index5.mjs +167 -635
- package/dist/chunks/index6.mjs +663 -0
- package/dist/chunks/init.mjs +19 -19
- package/dist/chunks/installer.mjs +649 -147
- package/dist/chunks/installer2.mjs +147 -649
- package/dist/chunks/interview.mjs +2 -2
- package/dist/chunks/marketplace.mjs +1 -1
- package/dist/chunks/mcp.mjs +5 -4
- package/dist/chunks/menu.mjs +22 -9
- package/dist/chunks/metrics-display.mjs +152 -0
- package/dist/chunks/migrator.mjs +1 -1
- package/dist/chunks/monitor.mjs +2 -2
- package/dist/chunks/notification.mjs +1 -1
- package/dist/chunks/onboarding.mjs +2 -2
- package/dist/chunks/package.mjs +1 -1
- package/dist/chunks/permission-manager.mjs +2 -2
- package/dist/chunks/permissions.mjs +1 -1
- package/dist/chunks/persistence-manager.mjs +781 -0
- package/dist/chunks/persistence.mjs +667 -0
- package/dist/chunks/platform.mjs +1 -1
- package/dist/chunks/plugin.mjs +1 -1
- package/dist/chunks/prompts.mjs +1 -1
- package/dist/chunks/providers.mjs +1 -1
- package/dist/chunks/quick-actions.mjs +321 -0
- package/dist/chunks/quick-provider.mjs +2 -0
- package/dist/chunks/quick-setup.mjs +9 -8
- package/dist/chunks/silent-updater.mjs +1 -1
- package/dist/chunks/simple-config.mjs +3 -8
- package/dist/chunks/skill.mjs +1 -1
- package/dist/chunks/skills-sync.mjs +1 -1
- package/dist/chunks/skills.mjs +1 -1
- package/dist/chunks/slash-commands.mjs +208 -0
- package/dist/chunks/smart-defaults.mjs +1 -1
- package/dist/chunks/startup.mjs +1 -1
- package/dist/chunks/stats.mjs +1 -1
- package/dist/chunks/status.mjs +31 -2
- package/dist/chunks/team.mjs +1 -1
- package/dist/chunks/thinking.mjs +2 -2
- package/dist/chunks/uninstall.mjs +5 -5
- package/dist/chunks/update.mjs +8 -7
- package/dist/chunks/upgrade-manager.mjs +2 -2
- package/dist/chunks/version-checker.mjs +3 -3
- package/dist/chunks/vim.mjs +1 -1
- package/dist/chunks/zero-config.mjs +359 -0
- package/dist/cli.mjs +212 -21
- package/dist/i18n/locales/en/cli.json +14 -1
- package/dist/i18n/locales/en/common.json +27 -0
- package/dist/i18n/locales/en/configuration.json +33 -0
- package/dist/i18n/locales/en/context.json +54 -1
- package/dist/i18n/locales/en/dashboard.json +78 -0
- package/dist/i18n/locales/en/persistence.json +127 -0
- package/dist/i18n/locales/en/quick-actions.json +78 -0
- package/dist/i18n/locales/zh-CN/cli.json +14 -1
- package/dist/i18n/locales/zh-CN/common.json +27 -0
- package/dist/i18n/locales/zh-CN/configuration.json +33 -0
- package/dist/i18n/locales/zh-CN/context.json +54 -1
- package/dist/i18n/locales/zh-CN/dashboard.json +78 -0
- package/dist/i18n/locales/zh-CN/persistence.json +127 -0
- package/dist/i18n/locales/zh-CN/quick-actions.json +78 -0
- package/dist/index.mjs +3 -2
- package/dist/shared/{ccjk.DE91nClQ.mjs → ccjk.BKoi8-Hy.mjs} +1 -1
- package/dist/shared/ccjk.BiCrMV5O.mjs +94 -0
- package/dist/shared/{ccjk.Dpw86UX0.mjs → ccjk.CxtuJxaS.mjs} +1 -1
- package/dist/shared/{ccjk.ClzTOz9n.mjs → ccjk.DB2UYcq0.mjs} +5 -5
- package/dist/shared/{ccjk.CmsW23FN.mjs → ccjk.DVBW2wxp.mjs} +4 -3
- package/dist/shared/{ccjk.Bndhan7G.mjs → ccjk.DfwJOEok.mjs} +1 -1
- package/dist/shared/{ccjk.DvIrK0wz.mjs → ccjk.DrMygfCF.mjs} +1 -1
- package/package.json +19 -19
package/dist/index.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { promisify } from 'node:util';
|
|
|
7
7
|
import ansis from 'ansis';
|
|
8
8
|
import { version } from './chunks/package.mjs';
|
|
9
9
|
import { join as join$1 } from 'pathe';
|
|
10
|
-
export {
|
|
10
|
+
export { j as config } from './chunks/config.mjs';
|
|
11
11
|
export { e as extractDisplayName, a as extractString, i as i18nHelpers, n as normalizeRecommendation, b as normalizeRecommendations } from './shared/ccjk.AqnXPAzw.mjs';
|
|
12
12
|
export { p as platform } from './chunks/platform.mjs';
|
|
13
13
|
import { Transform } from 'node:stream';
|
|
@@ -16,7 +16,7 @@ import 'node:url';
|
|
|
16
16
|
import 'dayjs';
|
|
17
17
|
import 'inquirer';
|
|
18
18
|
import './chunks/constants.mjs';
|
|
19
|
-
import './chunks/
|
|
19
|
+
import './chunks/index2.mjs';
|
|
20
20
|
import 'node:process';
|
|
21
21
|
import 'i18next';
|
|
22
22
|
import 'i18next-fs-backend';
|
|
@@ -25,6 +25,7 @@ import './chunks/json-config.mjs';
|
|
|
25
25
|
import './chunks/fs-operations.mjs';
|
|
26
26
|
import 'node:crypto';
|
|
27
27
|
import 'node:fs/promises';
|
|
28
|
+
import './shared/ccjk.BiCrMV5O.mjs';
|
|
28
29
|
import 'tinyexec';
|
|
29
30
|
|
|
30
31
|
const execAsync$1 = promisify(exec);
|
|
@@ -4,7 +4,7 @@ import { readFile } from 'node:fs/promises';
|
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
5
|
import { promisify } from 'node:util';
|
|
6
6
|
import { join } from 'pathe';
|
|
7
|
-
import { i18n } from '../chunks/
|
|
7
|
+
import { i18n } from '../chunks/index2.mjs';
|
|
8
8
|
|
|
9
9
|
const execAsync = promisify(exec);
|
|
10
10
|
function getClaudePluginDir() {
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const INVALID_PERMISSION_NAMES = /* @__PURE__ */ new Set([
|
|
2
|
+
"AllowEdit",
|
|
3
|
+
"AllowWrite",
|
|
4
|
+
"AllowRead",
|
|
5
|
+
"AllowExec",
|
|
6
|
+
"AllowCreateProcess",
|
|
7
|
+
"AllowKillProcess",
|
|
8
|
+
"AllowNetworkAccess",
|
|
9
|
+
"AllowFileSystemAccess",
|
|
10
|
+
"AllowShellAccess",
|
|
11
|
+
"AllowHttpAccess"
|
|
12
|
+
]);
|
|
13
|
+
const DANGEROUS_BASH_PATTERNS = /* @__PURE__ */ new Set([
|
|
14
|
+
"Bash(passwd *)",
|
|
15
|
+
"Bash(reboot *)",
|
|
16
|
+
"Bash(shutdown *)",
|
|
17
|
+
"Bash(halt *)",
|
|
18
|
+
"Bash(poweroff *)",
|
|
19
|
+
"Bash(init *)",
|
|
20
|
+
"Bash(telinit *)",
|
|
21
|
+
"Bash(rm *)",
|
|
22
|
+
"Bash(kill *)",
|
|
23
|
+
"Bash(pkill *)",
|
|
24
|
+
"Bash(killall *)",
|
|
25
|
+
"Bash(su *)",
|
|
26
|
+
"Bash(sudo *)",
|
|
27
|
+
"Bash(visudo *)",
|
|
28
|
+
"Bash(useradd *)",
|
|
29
|
+
"Bash(userdel *)",
|
|
30
|
+
"Bash(usermod *)",
|
|
31
|
+
"Bash(groupadd *)",
|
|
32
|
+
"Bash(groupdel *)",
|
|
33
|
+
"Bash(groupmod *)",
|
|
34
|
+
"Bash(modprobe *)",
|
|
35
|
+
"Bash(insmod *)",
|
|
36
|
+
"Bash(rmmod *)"
|
|
37
|
+
]);
|
|
38
|
+
function isValidPermission(perm) {
|
|
39
|
+
if (INVALID_PERMISSION_NAMES.has(perm)) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (["mcp__.*", "mcp__*", "mcp__(*)"].includes(perm)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
if (/^[a-z]/.test(perm) && !perm.startsWith("mcp__")) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
function isCoveredByWildcard(perm, wildcardPerm) {
|
|
51
|
+
const wildcardMatch = wildcardPerm.match(/^(\w+)\((.+)\)$/);
|
|
52
|
+
if (!wildcardMatch) return false;
|
|
53
|
+
const [, tool, wildcardArg] = wildcardMatch;
|
|
54
|
+
if (!wildcardArg.includes("*")) return false;
|
|
55
|
+
const permMatch = perm.match(/^(\w+)\((.+)\)$/);
|
|
56
|
+
if (!permMatch) return false;
|
|
57
|
+
const [, permTool, permArg] = permMatch;
|
|
58
|
+
if (tool !== permTool) return false;
|
|
59
|
+
const regexStr = wildcardArg.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".+");
|
|
60
|
+
return new RegExp(`^${regexStr}$`).test(permArg);
|
|
61
|
+
}
|
|
62
|
+
function mergeAndCleanPermissions(templatePermissions, userPermissions) {
|
|
63
|
+
const template = templatePermissions || [];
|
|
64
|
+
const user = userPermissions || [];
|
|
65
|
+
const result = [...template];
|
|
66
|
+
for (const perm of user) {
|
|
67
|
+
if (result.includes(perm)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (!isValidPermission(perm)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (DANGEROUS_BASH_PATTERNS.has(perm)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
let isRedundant = false;
|
|
77
|
+
for (const templatePerm of template) {
|
|
78
|
+
if (perm.startsWith(`${templatePerm}(`)) {
|
|
79
|
+
isRedundant = true;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
if (isCoveredByWildcard(perm, templatePerm)) {
|
|
83
|
+
isRedundant = true;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!isRedundant) {
|
|
88
|
+
result.push(perm);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { mergeAndCleanPermissions as m };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { detectCodeToolType } from '../chunks/smart-defaults.mjs';
|
|
2
2
|
import { DEFAULT_CODE_TOOL_TYPE } from '../chunks/constants.mjs';
|
|
3
|
-
import { i18n } from '../chunks/
|
|
3
|
+
import { i18n } from '../chunks/index2.mjs';
|
|
4
4
|
import { readZcfConfigAsync } from '../chunks/ccjk-config.mjs';
|
|
5
5
|
|
|
6
6
|
const CODE_TYPE_ABBREVIATIONS = {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
|
-
import {
|
|
3
|
+
import { i as getMcpService, j as dynamicMcpRegistry, a as readCodexConfig, k as applyCodexPlatformCommand, w as writeCodexConfig, M as MCP_SERVICE_CONFIGS } from '../chunks/codex.mjs';
|
|
4
4
|
import 'pathe';
|
|
5
5
|
import { SETTINGS_FILE, CLAUDE_DIR, ClAUDE_CONFIG_FILE, CODEX_CONFIG_FILE } from '../chunks/constants.mjs';
|
|
6
6
|
import { exists, ensureDir } from '../chunks/fs-operations.mjs';
|
|
7
7
|
import { readJsonConfig, writeJsonConfig } from '../chunks/json-config.mjs';
|
|
8
|
-
import {
|
|
9
|
-
import { ensureI18nInitialized, i18n } from '../chunks/
|
|
10
|
-
import { i as isWindows,
|
|
8
|
+
import { d as deepMerge, r as readMcpConfig, a as buildMcpServerConfig, w as writeMcpConfig } from '../chunks/claude-config.mjs';
|
|
9
|
+
import { ensureI18nInitialized, i18n } from '../chunks/index2.mjs';
|
|
10
|
+
import { i as isWindows, l as getSystemRoot } from '../chunks/platform.mjs';
|
|
11
11
|
|
|
12
12
|
function readClaudeConfig(configPath = SETTINGS_FILE) {
|
|
13
13
|
try {
|
|
@@ -349,4 +349,4 @@ async function removeAuthorizeMcpService(serviceId) {
|
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
export {
|
|
352
|
+
export { isMcpServiceInstalled as a, installMcpService as b, displayInstalledMcpServices as d, installMcpServices as i, uninstallMcpService as u };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import ansis from 'ansis';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
3
|
import { CLAUDE_DIR, SETTINGS_FILE } from '../chunks/constants.mjs';
|
|
4
|
-
import { ensureI18nInitialized, i18n } from '../chunks/
|
|
5
|
-
import {
|
|
4
|
+
import { ensureI18nInitialized, i18n } from '../chunks/index2.mjs';
|
|
5
|
+
import { e as getExistingApiConfig, f as configureApi, s as switchToOfficialLogin, b as backupExistingConfig, a as applyAiLanguageDirective } from '../chunks/config.mjs';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { join, dirname } from 'pathe';
|
|
8
8
|
import { updateZcfConfig } from '../chunks/ccjk-config.mjs';
|
|
9
9
|
import { exists, removeFile, ensureDir, copyFile } from '../chunks/fs-operations.mjs';
|
|
10
10
|
import { readJsonConfig, writeJsonConfig } from '../chunks/json-config.mjs';
|
|
11
|
+
import { m as mergeAndCleanPermissions } from './ccjk.BiCrMV5O.mjs';
|
|
11
12
|
import { a as addNumbersToChoices } from './ccjk.BFQ7yr5S.mjs';
|
|
12
13
|
import { p as promptBoolean } from './ccjk.DHbrGcgg.mjs';
|
|
13
14
|
import { existsSync } from 'node:fs';
|
|
@@ -1047,4 +1048,4 @@ async function cleanupOldVersionFiles() {
|
|
|
1047
1048
|
}
|
|
1048
1049
|
}
|
|
1049
1050
|
|
|
1050
|
-
export { WORKFLOW_CONFIG_BASE as W,
|
|
1051
|
+
export { WORKFLOW_CONFIG_BASE as W, modifyApiConfigPartially as a, configureApiCompletely as b, configureOutputStyle as c, displayMigrationResult as d, formatApiKeyDisplay as f, migrateSettingsForTokenRetrieval as m, needsMigration as n, promptMigration as p, selectAndInstallWorkflows as s, updatePromptOnly as u, validateApiKey as v };
|
|
@@ -368,7 +368,7 @@ function mapCategory(name) {
|
|
|
368
368
|
return "general";
|
|
369
369
|
}
|
|
370
370
|
async function runHealthCheck(checks) {
|
|
371
|
-
const activeChecks = DEFAULT_CHECKS;
|
|
371
|
+
const activeChecks = checks || DEFAULT_CHECKS;
|
|
372
372
|
const results = [];
|
|
373
373
|
const promises = activeChecks.map(async (check) => {
|
|
374
374
|
try {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import process__default from 'node:process';
|
|
2
2
|
import ansis from 'ansis';
|
|
3
|
-
import { ensureI18nInitialized, i18n } from '../chunks/
|
|
3
|
+
import { ensureI18nInitialized, i18n } from '../chunks/index2.mjs';
|
|
4
4
|
|
|
5
5
|
function handleExitPromptError(error) {
|
|
6
6
|
const isExitError = error instanceof Error && (error.name === "ExitPromptError" || error.message?.includes("ExitPromptError") || error.message?.includes("User force closed the prompt"));
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ccjk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "10.
|
|
4
|
+
"version": "10.3.0",
|
|
5
5
|
"packageManager": "pnpm@10.17.1",
|
|
6
6
|
"description": "CLI toolkit for Claude Code and Codex setup. Simplifies MCP service installation, API configuration, workflow management, and multi-provider support with guided interactive setup.",
|
|
7
7
|
"author": {
|
|
@@ -138,36 +138,36 @@
|
|
|
138
138
|
},
|
|
139
139
|
"dependencies": {
|
|
140
140
|
"@anthropic-ai/sdk": "^0.52.0",
|
|
141
|
-
"ansis": "^4.
|
|
141
|
+
"ansis": "^4.2.0",
|
|
142
142
|
"better-sqlite3": "^12.6.2",
|
|
143
143
|
"cac": "^6.7.14",
|
|
144
144
|
"chokidar": "^4.0.3",
|
|
145
145
|
"consola": "^3.4.2",
|
|
146
|
-
"dayjs": "^1.11.
|
|
146
|
+
"dayjs": "^1.11.19",
|
|
147
147
|
"fdir": "^6.5.0",
|
|
148
148
|
"find-up-simple": "^1.0.1",
|
|
149
|
-
"fs-extra": "^11.3.
|
|
149
|
+
"fs-extra": "^11.3.3",
|
|
150
150
|
"glob": "^11.0.3",
|
|
151
151
|
"gray-matter": "^4.0.3",
|
|
152
152
|
"handlebars": "^4.7.8",
|
|
153
|
-
"i18next": "^25.
|
|
154
|
-
"i18next-fs-backend": "^2.6.
|
|
153
|
+
"i18next": "^25.8.13",
|
|
154
|
+
"i18next-fs-backend": "^2.6.1",
|
|
155
155
|
"inquirer": "^12.9.6",
|
|
156
156
|
"inquirer-toggle": "^1.0.1",
|
|
157
|
-
"ioredis": "^5.9.
|
|
157
|
+
"ioredis": "^5.9.3",
|
|
158
158
|
"nanoid": "^5.1.6",
|
|
159
159
|
"ofetch": "^1.5.1",
|
|
160
160
|
"ohash": "^1.1.4",
|
|
161
|
-
"ora": "^9.
|
|
161
|
+
"ora": "^9.3.0",
|
|
162
162
|
"pathe": "^2.0.3",
|
|
163
|
-
"semver": "^7.7.
|
|
164
|
-
"smol-toml": "^1.
|
|
165
|
-
"tar": "^7.5.
|
|
166
|
-
"tinyexec": "^1.0.
|
|
163
|
+
"semver": "^7.7.4",
|
|
164
|
+
"smol-toml": "^1.6.0",
|
|
165
|
+
"tar": "^7.5.9",
|
|
166
|
+
"tinyexec": "^1.0.2",
|
|
167
167
|
"tinyglobby": "^0.2.15",
|
|
168
|
-
"trash": "^10.
|
|
168
|
+
"trash": "^10.1.0",
|
|
169
169
|
"uuid": "^11.1.0",
|
|
170
|
-
"web-tree-sitter": "^0.26.
|
|
170
|
+
"web-tree-sitter": "^0.26.5"
|
|
171
171
|
},
|
|
172
172
|
"devDependencies": {
|
|
173
173
|
"@antfu/eslint-config": "^5.4.1",
|
|
@@ -183,12 +183,12 @@
|
|
|
183
183
|
"@vitest/ui": "^3.2.4",
|
|
184
184
|
"concurrently": "^9.2.1",
|
|
185
185
|
"eslint": "^9.36.0",
|
|
186
|
-
"eslint-plugin-format": "^1.0
|
|
186
|
+
"eslint-plugin-format": "^1.4.0",
|
|
187
187
|
"husky": "^9.1.7",
|
|
188
|
-
"lint-staged": "^16.2.
|
|
189
|
-
"prettier": "^3.
|
|
190
|
-
"tsx": "^4.
|
|
191
|
-
"typescript": "^5.9.
|
|
188
|
+
"lint-staged": "^16.2.7",
|
|
189
|
+
"prettier": "^3.8.1",
|
|
190
|
+
"tsx": "^4.21.0",
|
|
191
|
+
"typescript": "^5.9.3",
|
|
192
192
|
"unbuild": "^3.6.1",
|
|
193
193
|
"vitest": "^3.2.4"
|
|
194
194
|
}
|