devez-vibe 1.7.34 → 1.7.35
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/LICENSE +33 -33
- package/README.md +5 -5
- package/bin/dvz.exe +0 -0
- package/bridge/claude-agent-sdk-bridge.mjs +36 -36
- package/package.json +46 -46
- package/skills/luna-loop/agents/openai.yaml +7 -7
package/LICENSE
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
DevezCode source code license
|
|
2
|
-
|
|
3
|
-
The MIT License below applies only to the DevezCode source code and to files
|
|
4
|
-
that are not listed in the exception below.
|
|
5
|
-
|
|
6
|
-
Exceptions:
|
|
7
|
-
|
|
8
|
-
* `Resources/Images/FileTypes/` and `Resources/Licenses/` are Microsoft Visual
|
|
9
|
-
Studio Image Library materials, subject to the included Microsoft terms.
|
|
10
|
-
* `Resources/Images/ShellPresets/` contains third-party brand assets, subject
|
|
11
|
-
to their respective owners' terms.
|
|
12
|
-
|
|
13
|
-
MIT License
|
|
14
|
-
|
|
15
|
-
Copyright (c) 2026 DevezCode contributors
|
|
16
|
-
|
|
17
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
-
in the Software without restriction, including without limitation the rights
|
|
20
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
-
furnished to do so, subject to the following conditions:
|
|
23
|
-
|
|
24
|
-
The above copyright notice and this permission notice shall be included in all
|
|
25
|
-
copies or substantial portions of the Software.
|
|
26
|
-
|
|
27
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
-
SOFTWARE.
|
|
1
|
+
DevezCode source code license
|
|
2
|
+
|
|
3
|
+
The MIT License below applies only to the DevezCode source code and to files
|
|
4
|
+
that are not listed in the exception below.
|
|
5
|
+
|
|
6
|
+
Exceptions:
|
|
7
|
+
|
|
8
|
+
* `Resources/Images/FileTypes/` and `Resources/Licenses/` are Microsoft Visual
|
|
9
|
+
Studio Image Library materials, subject to the included Microsoft terms.
|
|
10
|
+
* `Resources/Images/ShellPresets/` contains third-party brand assets, subject
|
|
11
|
+
to their respective owners' terms.
|
|
12
|
+
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (c) 2026 DevezCode contributors
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
npm install -g devez-vibe
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
설치하면 `dvz` 명령을 사용할 수 있습니다.
|
|
14
|
-
|
|
15
|
-
설치 과정에서 `luna-loop` 스킬도 Codex와 Claude의 사용자 스킬 경로에 함께 설치됩니다.
|
|
16
|
-
스킬은 자동 적용되지 않으며 `$luna-loop`로 직접 호출해야 합니다. 실제
|
|
17
|
-
`gpt-5.6-luna` 검증을 사용하려면 Codex provider와 Luna 위임 기능이 연결돼 있어야 합니다.
|
|
13
|
+
설치하면 `dvz` 명령을 사용할 수 있습니다.
|
|
14
|
+
|
|
15
|
+
설치 과정에서 `luna-loop` 스킬도 Codex와 Claude의 사용자 스킬 경로에 함께 설치됩니다.
|
|
16
|
+
스킬은 자동 적용되지 않으며 `$luna-loop`로 직접 호출해야 합니다. 실제
|
|
17
|
+
`gpt-5.6-luna` 검증을 사용하려면 Codex provider와 Luna 위임 기능이 연결돼 있어야 합니다.
|
|
18
18
|
|
|
19
19
|
| 요건 | 값 |
|
|
20
20
|
| --- | --- |
|
package/bin/dvz.exe
CHANGED
|
Binary file
|
|
@@ -1546,9 +1546,9 @@ function processAssistant(session, message) {
|
|
|
1546
1546
|
capabilities,
|
|
1547
1547
|
message.message?.model,
|
|
1548
1548
|
session.model,
|
|
1549
|
-
);
|
|
1550
|
-
const content = Array.isArray(message.message?.content) ? message.message.content : [];
|
|
1551
|
-
// Without partial SDK events, replay completed text before tool items so the
|
|
1549
|
+
);
|
|
1550
|
+
const content = Array.isArray(message.message?.content) ? message.message.content : [];
|
|
1551
|
+
// Without partial SDK events, replay completed text before tool items so the
|
|
1552
1552
|
// visible order still matches the assistant content order.
|
|
1553
1553
|
if (!session.streamBlocks.size && !session.turn.sawStreamText) {
|
|
1554
1554
|
for (const block of content) {
|
|
@@ -2898,22 +2898,22 @@ function historyState(messages) {
|
|
|
2898
2898
|
}));
|
|
2899
2899
|
turn.items.push({ id: "claude-plan-latest", type: "plan", text, steps });
|
|
2900
2900
|
}
|
|
2901
|
-
return {
|
|
2902
|
-
tasks,
|
|
2903
|
-
turns: turns
|
|
2904
|
-
.filter((candidate) => !candidate.synthetic)
|
|
2905
|
-
.map(({ synthetic: _, ...candidate }) => {
|
|
2906
|
-
const answered = candidate.items.some((item) =>
|
|
2907
|
-
item.type === "agentMessage" && String(item.text || "").trim());
|
|
2908
|
-
// Claude persists the user record before an immediate interrupt. Native
|
|
2909
|
-
// resume hides that dangling prompt, so expose it as interrupted for the
|
|
2910
|
-
// common host history filter instead of calling every transcript turn
|
|
2911
|
-
// completed.
|
|
2912
|
-
if (!answered) candidate.status = "interrupted";
|
|
2913
|
-
return candidate;
|
|
2914
|
-
}),
|
|
2915
|
-
};
|
|
2916
|
-
}
|
|
2901
|
+
return {
|
|
2902
|
+
tasks,
|
|
2903
|
+
turns: turns
|
|
2904
|
+
.filter((candidate) => !candidate.synthetic)
|
|
2905
|
+
.map(({ synthetic: _, ...candidate }) => {
|
|
2906
|
+
const answered = candidate.items.some((item) =>
|
|
2907
|
+
item.type === "agentMessage" && String(item.text || "").trim());
|
|
2908
|
+
// Claude persists the user record before an immediate interrupt. Native
|
|
2909
|
+
// resume hides that dangling prompt, so expose it as interrupted for the
|
|
2910
|
+
// common host history filter instead of calling every transcript turn
|
|
2911
|
+
// completed.
|
|
2912
|
+
if (!answered) candidate.status = "interrupted";
|
|
2913
|
+
return candidate;
|
|
2914
|
+
}),
|
|
2915
|
+
};
|
|
2916
|
+
}
|
|
2917
2917
|
|
|
2918
2918
|
function historyTurns(messages) {
|
|
2919
2919
|
return historyState(messages).turns;
|
|
@@ -3604,15 +3604,15 @@ async function runSelfTest() {
|
|
|
3604
3604
|
["say hello", "claude:claude-sonnet-5"],
|
|
3605
3605
|
["hay zzz", "claude:claude-haiku-4-5-20251001"],
|
|
3606
3606
|
];
|
|
3607
|
-
if (turns.length !== expected.length
|
|
3608
|
-
|| prompts.some((prompt, index) => prompt?.content?.[0]?.text !== expected[index][0]
|
|
3609
|
-
|| prompt.model !== expected[index][1])) {
|
|
3610
|
-
throw new Error(`Claude history self-test failed: ${JSON.stringify(turns)}`);
|
|
3611
|
-
}
|
|
3612
|
-
const interrupted = historyTurns([user("cancelled", "취소한 요청")]);
|
|
3613
|
-
if (interrupted.length !== 1 || interrupted[0].status !== "interrupted") {
|
|
3614
|
-
throw new Error(`Claude interrupted prompt history self-test failed: ${JSON.stringify(interrupted)}`);
|
|
3615
|
-
}
|
|
3607
|
+
if (turns.length !== expected.length
|
|
3608
|
+
|| prompts.some((prompt, index) => prompt?.content?.[0]?.text !== expected[index][0]
|
|
3609
|
+
|| prompt.model !== expected[index][1])) {
|
|
3610
|
+
throw new Error(`Claude history self-test failed: ${JSON.stringify(turns)}`);
|
|
3611
|
+
}
|
|
3612
|
+
const interrupted = historyTurns([user("cancelled", "취소한 요청")]);
|
|
3613
|
+
if (interrupted.length !== 1 || interrupted[0].status !== "interrupted") {
|
|
3614
|
+
throw new Error(`Claude interrupted prompt history self-test failed: ${JSON.stringify(interrupted)}`);
|
|
3615
|
+
}
|
|
3616
3616
|
const taskUse = (uuid, id, name, input) => ({
|
|
3617
3617
|
type: "assistant",
|
|
3618
3618
|
uuid,
|
|
@@ -4434,14 +4434,14 @@ async function runSelfTest() {
|
|
|
4434
4434
|
.split("\n")
|
|
4435
4435
|
.filter(Boolean)
|
|
4436
4436
|
.map((line) => JSON.parse(line));
|
|
4437
|
-
const openingMessageIndex = openingEvents.findIndex((event) =>
|
|
4438
|
-
event.method === "item/completed"
|
|
4439
|
-
&& event.params?.item?.type === "agentMessage");
|
|
4440
|
-
const openingToolIndex = openingEvents.findIndex((event) =>
|
|
4441
|
-
event.method === "item/started" && event.params?.item?.type === "dynamicToolCall");
|
|
4442
|
-
if (openingMessageIndex >= 0 || openingToolIndex < 0) {
|
|
4443
|
-
throw new Error(`Claude tool-first turn self-test failed: ${JSON.stringify(openingEvents)}`);
|
|
4444
|
-
}
|
|
4437
|
+
const openingMessageIndex = openingEvents.findIndex((event) =>
|
|
4438
|
+
event.method === "item/completed"
|
|
4439
|
+
&& event.params?.item?.type === "agentMessage");
|
|
4440
|
+
const openingToolIndex = openingEvents.findIndex((event) =>
|
|
4441
|
+
event.method === "item/started" && event.params?.item?.type === "dynamicToolCall");
|
|
4442
|
+
if (openingMessageIndex >= 0 || openingToolIndex < 0) {
|
|
4443
|
+
throw new Error(`Claude tool-first turn self-test failed: ${JSON.stringify(openingEvents)}`);
|
|
4444
|
+
}
|
|
4445
4445
|
const languageCaptured = [];
|
|
4446
4446
|
process.stdout.write = (chunk) => {
|
|
4447
4447
|
languageCaptured.push(String(chunk));
|
package/package.json
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "devez-vibe",
|
|
3
|
-
"version": "1.7.
|
|
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
|
-
"install-skills.mjs",
|
|
27
|
-
"skills/luna-loop/",
|
|
28
|
-
"README.md",
|
|
29
|
-
"LICENSE"
|
|
30
|
-
],
|
|
31
|
-
"os": [
|
|
32
|
-
"win32"
|
|
33
|
-
],
|
|
34
|
-
"cpu": [
|
|
35
|
-
"x64"
|
|
36
|
-
],
|
|
37
|
-
"engines": {
|
|
38
|
-
"node": ">=18"
|
|
39
|
-
},
|
|
40
|
-
"scripts": {
|
|
41
|
-
"postinstall": "node install-skills.mjs"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "devez-vibe",
|
|
3
|
+
"version": "1.7.35",
|
|
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
|
+
"install-skills.mjs",
|
|
27
|
+
"skills/luna-loop/",
|
|
28
|
+
"README.md",
|
|
29
|
+
"LICENSE"
|
|
30
|
+
],
|
|
31
|
+
"os": [
|
|
32
|
+
"win32"
|
|
33
|
+
],
|
|
34
|
+
"cpu": [
|
|
35
|
+
"x64"
|
|
36
|
+
],
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"postinstall": "node install-skills.mjs"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.260"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "루프 검증"
|
|
3
|
-
short_description: "수정 후 Luna 반복 검증과 병렬 재검수를 자동화"
|
|
4
|
-
default_prompt: "직접 $luna-loop을 호출해 수정 사항을 검증하고 문제가 남으면 재수정한 뒤 다시 검증해 주세요."
|
|
5
|
-
|
|
6
|
-
policy:
|
|
7
|
-
allow_implicit_invocation: false
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "루프 검증"
|
|
3
|
+
short_description: "수정 후 Luna 반복 검증과 병렬 재검수를 자동화"
|
|
4
|
+
default_prompt: "직접 $luna-loop을 호출해 수정 사항을 검증하고 문제가 남으면 재수정한 뒤 다시 검증해 주세요."
|
|
5
|
+
|
|
6
|
+
policy:
|
|
7
|
+
allow_implicit_invocation: false
|