devez-vibe 1.6.61 → 1.6.63
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 +13 -39
- package/package.json +46 -46
package/bin/dvz.exe
CHANGED
|
Binary file
|
|
@@ -365,31 +365,30 @@ function permissionError(error) {
|
|
|
365
365
|
return error?.message || String(error);
|
|
366
366
|
}
|
|
367
367
|
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
// session instead of
|
|
368
|
+
// Each session tries bypass once. When policy rejects it, the session silently
|
|
369
|
+
// stays on confirmed auto mode for its remaining lifetime. A double rejection
|
|
370
|
+
// fails the session instead of continuing in the bootstrap default mode.
|
|
371
371
|
async function applyPermissionMode(session) {
|
|
372
372
|
if (session.permissionModeVerified
|
|
373
373
|
&& (session.permissionMode === PREFERRED_PERMISSION_MODE
|
|
374
374
|
|| (session.bypassUnavailable && session.permissionMode === FALLBACK_PERMISSION_MODE))) {
|
|
375
|
-
return
|
|
375
|
+
return;
|
|
376
376
|
}
|
|
377
377
|
if (!session.bypassUnavailable) {
|
|
378
378
|
try {
|
|
379
379
|
await session.query.setPermissionMode(PREFERRED_PERMISSION_MODE);
|
|
380
380
|
session.permissionMode = PREFERRED_PERMISSION_MODE;
|
|
381
381
|
session.permissionModeVerified = true;
|
|
382
|
-
return
|
|
382
|
+
return;
|
|
383
383
|
} catch (error) {
|
|
384
384
|
session.bypassUnavailable = true;
|
|
385
|
-
session.bypassRejection = permissionError(error);
|
|
386
385
|
}
|
|
387
386
|
}
|
|
388
387
|
try {
|
|
389
388
|
await session.query.setPermissionMode(FALLBACK_PERMISSION_MODE);
|
|
390
389
|
session.permissionMode = FALLBACK_PERMISSION_MODE;
|
|
391
390
|
session.permissionModeVerified = true;
|
|
392
|
-
return
|
|
391
|
+
return;
|
|
393
392
|
} catch (error) {
|
|
394
393
|
session.permissionModeVerified = false;
|
|
395
394
|
throw new Error(
|
|
@@ -398,16 +397,6 @@ async function applyPermissionMode(session) {
|
|
|
398
397
|
}
|
|
399
398
|
}
|
|
400
399
|
|
|
401
|
-
function notifyPermissionFallback(session, rejection) {
|
|
402
|
-
if (!rejection) return;
|
|
403
|
-
notify("claude/permissionMode/rejected", {
|
|
404
|
-
threadId: visibleSession(session.id),
|
|
405
|
-
permissionMode: PREFERRED_PERMISSION_MODE,
|
|
406
|
-
effectivePermissionMode: FALLBACK_PERMISSION_MODE,
|
|
407
|
-
message: `Bypass 모드를 사용할 수 없어 auto 모드로 실행합니다: ${rejection}`,
|
|
408
|
-
});
|
|
409
|
-
}
|
|
410
|
-
|
|
411
400
|
async function claudePermissionStatus(params) {
|
|
412
401
|
const resolved = await resolveSettings({
|
|
413
402
|
cwd: params.cwd || process.cwd(),
|
|
@@ -1160,7 +1149,6 @@ async function createSession(params, resumeId) {
|
|
|
1160
1149
|
permissionMode: BOOTSTRAP_PERMISSION_MODE,
|
|
1161
1150
|
permissionModeVerified: false,
|
|
1162
1151
|
bypassUnavailable: false,
|
|
1163
|
-
bypassRejection: null,
|
|
1164
1152
|
models: [],
|
|
1165
1153
|
queue,
|
|
1166
1154
|
query: null,
|
|
@@ -1204,10 +1192,9 @@ async function createSession(params, resumeId) {
|
|
|
1204
1192
|
});
|
|
1205
1193
|
session.consumer = consumer;
|
|
1206
1194
|
let initialization;
|
|
1207
|
-
let permissionRejection;
|
|
1208
1195
|
try {
|
|
1209
1196
|
initialization = await agentQuery.initializationResult();
|
|
1210
|
-
|
|
1197
|
+
await applyPermissionMode(session);
|
|
1211
1198
|
} catch (error) {
|
|
1212
1199
|
sessions.delete(id);
|
|
1213
1200
|
queue.close();
|
|
@@ -1215,7 +1202,6 @@ async function createSession(params, resumeId) {
|
|
|
1215
1202
|
await Promise.race([consumer, new Promise((resolve) => setTimeout(resolve, 1000))]);
|
|
1216
1203
|
throw error;
|
|
1217
1204
|
}
|
|
1218
|
-
notifyPermissionFallback(session, permissionRejection);
|
|
1219
1205
|
session.models = Array.isArray(initialization.models) ? initialization.models : [];
|
|
1220
1206
|
const capabilities = modelCapabilities(session.models, params.model);
|
|
1221
1207
|
// A resumed session can only name its model as the resolved id the transcript
|
|
@@ -2590,9 +2576,6 @@ async function runPrompt(session, params) {
|
|
|
2590
2576
|
const model = stripClaudeModel(params.model);
|
|
2591
2577
|
await session.query.setModel(model);
|
|
2592
2578
|
session.model = visibleModel(params.model);
|
|
2593
|
-
// Model switches can change which permission modes policy accepts. Recheck
|
|
2594
|
-
// the preferred/fallback pair before admitting the turn.
|
|
2595
|
-
session.permissionModeVerified = false;
|
|
2596
2579
|
}
|
|
2597
2580
|
session.steerPending = 0;
|
|
2598
2581
|
const effort = supportedEffort(modelCapabilities(session.models, params.model || session.model), params.effort);
|
|
@@ -2600,8 +2583,6 @@ async function runPrompt(session, params) {
|
|
|
2600
2583
|
await session.query.applyFlagSettings({ effortLevel: effort });
|
|
2601
2584
|
}
|
|
2602
2585
|
session.effort = effort;
|
|
2603
|
-
const permissionRejection = await applyPermissionMode(session);
|
|
2604
|
-
notifyPermissionFallback(session, permissionRejection);
|
|
2605
2586
|
const content = await inputContent(params.input, params.handoffContext);
|
|
2606
2587
|
const turnId = beginTurn(session, params.input);
|
|
2607
2588
|
session.queue.push({
|
|
@@ -3047,12 +3028,7 @@ async function dispatch(method, params = {}) {
|
|
|
3047
3028
|
if (method === "session/permissionMode") {
|
|
3048
3029
|
const session = lookupSession(params.sessionId);
|
|
3049
3030
|
if (!session) return { permissionMode: PREFERRED_PERMISSION_MODE };
|
|
3050
|
-
|
|
3051
|
-
notifyPermissionFallback(session, rejection);
|
|
3052
|
-
return {
|
|
3053
|
-
permissionMode: session.permissionMode,
|
|
3054
|
-
...(rejection ? { rejection } : {}),
|
|
3055
|
-
};
|
|
3031
|
+
return { permissionMode: session.permissionMode };
|
|
3056
3032
|
}
|
|
3057
3033
|
// The host clears its `Working` row on `turn/completed` alone, so a single
|
|
3058
3034
|
// dropped notification would strand the spinner forever. This answers "is the
|
|
@@ -3222,15 +3198,14 @@ async function runPermissionModeSelfTest() {
|
|
|
3222
3198
|
permissionMode: BOOTSTRAP_PERMISSION_MODE,
|
|
3223
3199
|
permissionModeVerified: false,
|
|
3224
3200
|
bypassUnavailable: false,
|
|
3225
|
-
bypassRejection: null,
|
|
3226
3201
|
query: { setPermissionMode },
|
|
3227
3202
|
});
|
|
3228
3203
|
|
|
3229
3204
|
const preferredCalls = [];
|
|
3230
3205
|
const preferred = fakeSession(async (mode) => preferredCalls.push(mode));
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3206
|
+
await applyPermissionMode(preferred);
|
|
3207
|
+
await applyPermissionMode(preferred);
|
|
3208
|
+
if (preferred.permissionMode !== PREFERRED_PERMISSION_MODE
|
|
3234
3209
|
|| preferredCalls.join(",") !== PREFERRED_PERMISSION_MODE) {
|
|
3235
3210
|
throw new Error(`Claude bypass permission self-test failed: ${JSON.stringify(preferredCalls)}`);
|
|
3236
3211
|
}
|
|
@@ -3240,10 +3215,9 @@ async function runPermissionModeSelfTest() {
|
|
|
3240
3215
|
fallbackCalls.push(mode);
|
|
3241
3216
|
if (mode === PREFERRED_PERMISSION_MODE) throw new Error("organization policy");
|
|
3242
3217
|
});
|
|
3243
|
-
const fallbackRejection = await applyPermissionMode(fallback);
|
|
3244
3218
|
await applyPermissionMode(fallback);
|
|
3245
|
-
|
|
3246
|
-
|
|
3219
|
+
await applyPermissionMode(fallback);
|
|
3220
|
+
if (fallback.permissionMode !== FALLBACK_PERMISSION_MODE
|
|
3247
3221
|
|| fallbackCalls.join(",") !== `${PREFERRED_PERMISSION_MODE},${FALLBACK_PERMISSION_MODE}`) {
|
|
3248
3222
|
throw new Error(`Claude auto fallback self-test failed: ${JSON.stringify(fallbackCalls)}`);
|
|
3249
3223
|
}
|
package/package.json
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "devez-vibe",
|
|
3
|
-
"version": "1.6.
|
|
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.251"
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "devez-vibe",
|
|
3
|
+
"version": "1.6.63",
|
|
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.251"
|
|
45
|
+
}
|
|
46
|
+
}
|