devez-vibe 1.5.28 → 1.5.30
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/bin/dvz.exe +0 -0
- package/bridge/claude-agent-sdk-bridge.mjs +57 -1
- package/package.json +41 -41
package/bin/dvz.exe
CHANGED
|
Binary file
|
|
@@ -889,9 +889,53 @@ async function claudePluginDetail(params) {
|
|
|
889
889
|
};
|
|
890
890
|
}
|
|
891
891
|
|
|
892
|
+
// SKILL.md 앞머리(frontmatter)에서 슬래시 이름과 설명만 가볍게 읽는다.
|
|
893
|
+
async function readSkillMeta(skillMdPath, fallbackName) {
|
|
894
|
+
let name = fallbackName;
|
|
895
|
+
let description = "";
|
|
896
|
+
try {
|
|
897
|
+
const text = await readFile(skillMdPath, "utf8");
|
|
898
|
+
const front = text.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
899
|
+
const body = front ? front[1] : "";
|
|
900
|
+
const nameLine = body.match(/^name:\s*(.+?)\s*$/m);
|
|
901
|
+
const descLine = body.match(/^description:\s*(.+?)\s*$/m);
|
|
902
|
+
const unquote = (value) => value.replace(/^["']|["']$/g, "").trim();
|
|
903
|
+
if (nameLine && unquote(nameLine[1])) name = unquote(nameLine[1]);
|
|
904
|
+
if (descLine) description = unquote(descLine[1]);
|
|
905
|
+
} catch { /* SKILL.md가 없거나 읽을 수 없을 수 있다. */ }
|
|
906
|
+
return { name, description };
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
// 플러그인이 아닌 개인·프로젝트 스킬 디렉터리(<root>/<name>/SKILL.md)를 훑는다.
|
|
910
|
+
async function localSkills(root, scope) {
|
|
911
|
+
const skills = [];
|
|
912
|
+
let entries;
|
|
913
|
+
try {
|
|
914
|
+
entries = await readdir(root, { withFileTypes: true });
|
|
915
|
+
} catch {
|
|
916
|
+
return skills; // 스킬 디렉터리가 없을 수 있다.
|
|
917
|
+
}
|
|
918
|
+
for (const child of entries) {
|
|
919
|
+
if (!child.isDirectory()) continue;
|
|
920
|
+
const path = join(root, child.name, "SKILL.md");
|
|
921
|
+
if (!existsSync(path)) continue;
|
|
922
|
+
const meta = await readSkillMeta(path, child.name);
|
|
923
|
+
skills.push({
|
|
924
|
+
name: meta.name,
|
|
925
|
+
path,
|
|
926
|
+
description: meta.description || `${scope} skill`,
|
|
927
|
+
enabled: true,
|
|
928
|
+
scope,
|
|
929
|
+
pluginId: null,
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
return skills;
|
|
933
|
+
}
|
|
934
|
+
|
|
892
935
|
async function claudeSkills(params) {
|
|
893
936
|
const installed = await runClaudeJson(params, ["plugin", "list", "--json"]);
|
|
894
937
|
const skills = [];
|
|
938
|
+
const seen = new Set();
|
|
895
939
|
for (const plugin of Array.isArray(installed) ? installed : []) {
|
|
896
940
|
if (!plugin?.installPath) continue;
|
|
897
941
|
try {
|
|
@@ -905,10 +949,22 @@ async function claudeSkills(params) {
|
|
|
905
949
|
scope: plugin.scope || "user",
|
|
906
950
|
pluginId: plugin.id,
|
|
907
951
|
});
|
|
952
|
+
seen.add(child.name);
|
|
908
953
|
}
|
|
909
954
|
} catch { /* Plugins do not have to provide skills. */ }
|
|
910
955
|
}
|
|
911
|
-
|
|
956
|
+
const cwd = params.cwd || process.cwd();
|
|
957
|
+
const configDir = process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
|
|
958
|
+
const local = [
|
|
959
|
+
...(await localSkills(join(configDir, "skills"), "user")),
|
|
960
|
+
...(await localSkills(join(cwd, ".claude", "skills"), "project")),
|
|
961
|
+
];
|
|
962
|
+
for (const skill of local) {
|
|
963
|
+
if (seen.has(skill.name)) continue;
|
|
964
|
+
seen.add(skill.name);
|
|
965
|
+
skills.push(skill);
|
|
966
|
+
}
|
|
967
|
+
return { data: [{ cwd, skills }] };
|
|
912
968
|
}
|
|
913
969
|
|
|
914
970
|
function claudeMcpStatusValue(statuses) {
|
package/package.json
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "devez-vibe",
|
|
3
|
-
"version": "1.5.
|
|
4
|
-
"description": "Stable terminal UI for Codex and Claude Agent SDK",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"codex",
|
|
7
|
-
"cli",
|
|
8
|
-
"tui",
|
|
9
|
-
"terminal",
|
|
10
|
-
"app-server",
|
|
11
|
-
"claude-agent-sdk"
|
|
12
|
-
],
|
|
13
|
-
"homepage": "https://github.com/MrHoje/Devez-vibe#readme",
|
|
14
|
-
"bugs": "https://github.com/MrHoje/Devez-vibe/issues",
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "git+https://github.com/MrHoje/Devez-vibe.git"
|
|
18
|
-
},
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"bin": {
|
|
21
|
-
"dvz": "bin/dvz.exe"
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"bin/dvz.exe",
|
|
25
|
-
"bridge/claude-agent-sdk-bridge.mjs",
|
|
26
|
-
"README.md",
|
|
27
|
-
"LICENSE"
|
|
28
|
-
],
|
|
29
|
-
"os": [
|
|
30
|
-
"win32"
|
|
31
|
-
],
|
|
32
|
-
"cpu": [
|
|
33
|
-
"x64"
|
|
34
|
-
],
|
|
35
|
-
"engines": {
|
|
36
|
-
"node": ">=18"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.231"
|
|
40
|
-
}
|
|
41
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "devez-vibe",
|
|
3
|
+
"version": "1.5.30",
|
|
4
|
+
"description": "Stable terminal UI for Codex and Claude Agent SDK",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"codex",
|
|
7
|
+
"cli",
|
|
8
|
+
"tui",
|
|
9
|
+
"terminal",
|
|
10
|
+
"app-server",
|
|
11
|
+
"claude-agent-sdk"
|
|
12
|
+
],
|
|
13
|
+
"homepage": "https://github.com/MrHoje/Devez-vibe#readme",
|
|
14
|
+
"bugs": "https://github.com/MrHoje/Devez-vibe/issues",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/MrHoje/Devez-vibe.git"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"bin": {
|
|
21
|
+
"dvz": "bin/dvz.exe"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"bin/dvz.exe",
|
|
25
|
+
"bridge/claude-agent-sdk-bridge.mjs",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"os": [
|
|
30
|
+
"win32"
|
|
31
|
+
],
|
|
32
|
+
"cpu": [
|
|
33
|
+
"x64"
|
|
34
|
+
],
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.231"
|
|
40
|
+
}
|
|
41
|
+
}
|