@su-record/vibe 3.2.60 → 3.2.61
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CLAUDE.md +7 -3
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/dist/cli/commands/codex-proxy.d.ts.map +1 -1
- package/dist/cli/commands/codex-proxy.js +8 -7
- package/dist/cli/commands/codex-proxy.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +19 -18
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/evolution.d.ts.map +1 -1
- package/dist/cli/commands/evolution.js +35 -34
- package/dist/cli/commands/evolution.js.map +1 -1
- package/dist/cli/commands/figma.d.ts.map +1 -1
- package/dist/cli/commands/figma.js +21 -20
- package/dist/cli/commands/figma.js.map +1 -1
- package/dist/cli/commands/info.js +4 -4
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/llm.d.ts.map +1 -1
- package/dist/cli/commands/llm.js +11 -10
- package/dist/cli/commands/llm.js.map +1 -1
- package/dist/cli/commands/remove.js +13 -13
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/sentinel.d.ts +10 -1
- package/dist/cli/commands/sentinel.d.ts.map +1 -1
- package/dist/cli/commands/sentinel.js +51 -49
- package/dist/cli/commands/sentinel.js.map +1 -1
- package/dist/cli/commands/skills.js +3 -3
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/slack.d.ts.map +1 -1
- package/dist/cli/commands/slack.js +16 -15
- package/dist/cli/commands/slack.js.map +1 -1
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +30 -29
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telegram.d.ts.map +1 -1
- package/dist/cli/commands/telegram.js +26 -25
- package/dist/cli/commands/telegram.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts +11 -0
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +29 -0
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/infra/lib/browser/launch.d.ts.map +1 -1
- package/dist/infra/lib/browser/launch.js +0 -1
- package/dist/infra/lib/browser/launch.js.map +1 -1
- package/dist/tools/memory/getMemoryGraph.d.ts.map +1 -1
- package/dist/tools/memory/getMemoryGraph.js.map +1 -1
- package/dist/tools/spec/specGenerator.js +3 -5
- package/dist/tools/spec/specGenerator.js.map +1 -1
- package/hooks/scripts/figma-extract.js +6 -2
- package/hooks/scripts/figma-to-scss.js +10 -3
- package/hooks/scripts/llm-orchestrate.js +2 -2
- package/hooks/scripts/session-start.js +30 -23
- package/hooks/scripts/utils.js +4 -5
- package/package.json +14 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"figma.js","sourceRoot":"","sources":["../../../src/cli/commands/figma.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,+CAA+C,CAAC;AAGvD,MAAM,mBAAmB,GAAqB;IAC5C,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,GAAG;IACnB,aAAa,EAAE,GAAG;IAClB,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,GAAG;CAClB,CAAC;AAEF,SAAS,eAAe;IACtB,OAAO,gBAAgB,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,mBAAmB,CAAC;IACxC,OAAO,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,
|
|
1
|
+
{"version":3,"file":"figma.js","sourceRoot":"","sources":["../../../src/cli/commands/figma.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import fs from 'fs';
|
|
6
|
-
import { getPackageJson } from '../utils.js';
|
|
6
|
+
import { log, getPackageJson } from '../utils.js';
|
|
7
7
|
import { formatLLMStatus } from '../auth.js';
|
|
8
8
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
9
9
|
import { missingNativeDeps } from '../setup/NativeDeps.js';
|
|
@@ -14,7 +14,7 @@ import { getCoreConfigDir } from '../setup/GlobalInstaller.js';
|
|
|
14
14
|
* 도움말 표시
|
|
15
15
|
*/
|
|
16
16
|
export function showHelp() {
|
|
17
|
-
|
|
17
|
+
log(`
|
|
18
18
|
VIBE - AI Coding Harness (Claude Code / Codex / Antigravity)
|
|
19
19
|
|
|
20
20
|
Commands:
|
|
@@ -243,7 +243,7 @@ export function showStatus() {
|
|
|
243
243
|
const projectStatus = isCoreProject
|
|
244
244
|
? `✅ ${projectRoot}`
|
|
245
245
|
: `⬚ Not a core project (run: vibe init)`;
|
|
246
|
-
|
|
246
|
+
log(`
|
|
247
247
|
VIBE Status (v${packageJson.version})
|
|
248
248
|
|
|
249
249
|
Project: ${projectStatus}
|
|
@@ -258,6 +258,6 @@ ${formatLLMStatus()}
|
|
|
258
258
|
*/
|
|
259
259
|
export function showVersion() {
|
|
260
260
|
const packageJson = getPackageJson();
|
|
261
|
-
|
|
261
|
+
log(`core v${packageJson.version}`);
|
|
262
262
|
}
|
|
263
263
|
//# sourceMappingURL=info.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7C;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAehD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAY9B"}
|
package/dist/cli/commands/llm.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* vibe llm help
|
|
7
7
|
*/
|
|
8
8
|
import { fetchAllProviders, applyToConfig } from '../llm/model-refresh.js';
|
|
9
|
+
import { log } from '../utils.js';
|
|
9
10
|
function sourceLabel(p) {
|
|
10
11
|
if (p.source === 'no-key')
|
|
11
12
|
return 'no key — curated list';
|
|
@@ -16,38 +17,38 @@ function sourceLabel(p) {
|
|
|
16
17
|
return 'live';
|
|
17
18
|
}
|
|
18
19
|
function printProvider(p) {
|
|
19
|
-
|
|
20
|
+
log(`\n${p.label} [${sourceLabel(p)}]`);
|
|
20
21
|
for (const id of p.models) {
|
|
21
22
|
const star = id === p.recommended ? ' ★' : '';
|
|
22
|
-
|
|
23
|
+
log(` ${id}${star}`);
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
export async function llmList() {
|
|
26
|
-
|
|
27
|
+
log('Fetching available models from providers...');
|
|
27
28
|
const providers = await fetchAllProviders();
|
|
28
29
|
for (const p of providers)
|
|
29
30
|
printProvider(p);
|
|
30
|
-
|
|
31
|
+
log('\n★ = recommended (latest). Update SSOT: vibe llm refresh');
|
|
31
32
|
}
|
|
32
33
|
export async function llmRefresh() {
|
|
33
|
-
|
|
34
|
+
log('Refreshing models from provider APIs...');
|
|
34
35
|
const providers = await fetchAllProviders();
|
|
35
36
|
for (const p of providers)
|
|
36
37
|
printProvider(p);
|
|
37
38
|
const changes = applyToConfig(providers);
|
|
38
|
-
|
|
39
|
+
log('\n─── SSOT update (~/.vibe/config.json models) ───');
|
|
39
40
|
if (changes.length === 0) {
|
|
40
|
-
|
|
41
|
+
log(' Already up to date — no changes.');
|
|
41
42
|
}
|
|
42
43
|
else {
|
|
43
44
|
for (const c of changes) {
|
|
44
|
-
|
|
45
|
+
log(` ${c.key}: ${c.from ?? '(unset)'} → ${c.to}`);
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
+
log('\nNote: Claude models are managed as Claude Code tiers (sonnet/opus/haiku) and are not auto-overwritten.');
|
|
48
49
|
}
|
|
49
50
|
export function llmHelp() {
|
|
50
|
-
|
|
51
|
+
log(`
|
|
51
52
|
vibe llm — LLM model discovery & SSOT refresh
|
|
52
53
|
|
|
53
54
|
vibe llm list List currently available models per provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../src/cli/commands/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAuB,MAAM,yBAAyB,CAAC;AAEhG,SAAS,WAAW,CAAC,CAAiB;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,uBAAuB,CAAC;IAC1D,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,8BAA8B,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,gCAAgC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,CAAiB;IACtC,
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../src/cli/commands/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAuB,MAAM,yBAAyB,CAAC;AAEhG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,SAAS,WAAW,CAAC,CAAiB;IACpC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,uBAAuB,CAAC;IAC1D,IAAI,CAAC,CAAC,SAAS;QAAE,OAAO,8BAA8B,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,gCAAgC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,CAAiB;IACtC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,GAAG,CAAC,6CAA6C,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,2DAA2D,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,GAAG,CAAC,0GAA0G,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,GAAG,CAAC;;;;;;;;;;CAUL,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import fs from 'fs';
|
|
6
6
|
import os from 'os';
|
|
7
|
-
import { removeDirRecursive } from '../utils.js';
|
|
7
|
+
import { log, removeDirRecursive } from '../utils.js';
|
|
8
8
|
/**
|
|
9
9
|
* remove 명령어 실행
|
|
10
10
|
*/
|
|
@@ -17,24 +17,24 @@ export function remove() {
|
|
|
17
17
|
const hasAny = fs.existsSync(vibeDir) || fs.existsSync(legacyClaudeVibe) ||
|
|
18
18
|
fs.existsSync(legacyCoreDir);
|
|
19
19
|
if (!hasAny) {
|
|
20
|
-
|
|
20
|
+
log('❌ Not a vibe project.');
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
log('🗑️ Removing vibe...\n');
|
|
24
24
|
// .vibe 폴더 제거 (SSOT)
|
|
25
25
|
if (fs.existsSync(vibeDir)) {
|
|
26
26
|
removeDirRecursive(vibeDir);
|
|
27
|
-
|
|
27
|
+
log(' ✅ .vibe/ removed\n');
|
|
28
28
|
}
|
|
29
29
|
// 레거시 `.claude/vibe/` 제거
|
|
30
30
|
if (fs.existsSync(legacyClaudeVibe)) {
|
|
31
31
|
removeDirRecursive(legacyClaudeVibe);
|
|
32
|
-
|
|
32
|
+
log(' ✅ .claude/vibe/ removed (legacy)\n');
|
|
33
33
|
}
|
|
34
34
|
// 레거시 .core 폴더도 제거
|
|
35
35
|
if (fs.existsSync(legacyCoreDir)) {
|
|
36
36
|
removeDirRecursive(legacyCoreDir);
|
|
37
|
-
|
|
37
|
+
log(' ✅ .core/ removed (legacy)\n');
|
|
38
38
|
}
|
|
39
39
|
// .claude/commands 제거
|
|
40
40
|
const commandsDir = path.join(claudeDir, 'commands');
|
|
@@ -46,7 +46,7 @@ export function remove() {
|
|
|
46
46
|
fs.unlinkSync(cmdPath);
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
|
-
|
|
49
|
+
log(' ✅ Slash commands removed\n');
|
|
50
50
|
}
|
|
51
51
|
// .claude/agents 제거
|
|
52
52
|
const agentsDir = path.join(claudeDir, 'agents');
|
|
@@ -61,7 +61,7 @@ export function remove() {
|
|
|
61
61
|
fs.unlinkSync(agentPath);
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
-
|
|
64
|
+
log(' ✅ Subagents removed\n');
|
|
65
65
|
}
|
|
66
66
|
// .claude/settings.json에서 hooks 제거
|
|
67
67
|
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
@@ -71,7 +71,7 @@ export function remove() {
|
|
|
71
71
|
if (settings.hooks) {
|
|
72
72
|
delete settings.hooks;
|
|
73
73
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
74
|
-
|
|
74
|
+
log(' ✅ Hooks removed\n');
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
catch { /* ignore: optional operation */ }
|
|
@@ -102,7 +102,7 @@ export function remove() {
|
|
|
102
102
|
}
|
|
103
103
|
});
|
|
104
104
|
if (removedAgents > 0) {
|
|
105
|
-
|
|
105
|
+
log(` ✅ Cursor agents removed (${removedAgents})\n`);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
// Cursor skills 제거 (7 core skills)
|
|
@@ -118,7 +118,7 @@ export function remove() {
|
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
120
|
if (removedSkills > 0) {
|
|
121
|
-
|
|
121
|
+
log(` ✅ Cursor skills removed (${removedSkills})\n`);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
// Cursor rules template 제거 (5 rules)
|
|
@@ -137,10 +137,10 @@ export function remove() {
|
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
139
|
if (removedRules > 0) {
|
|
140
|
-
|
|
140
|
+
log(` ✅ Cursor rules template removed (${removedRules})\n`);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
log(`
|
|
144
144
|
✅ vibe removed!
|
|
145
145
|
|
|
146
146
|
Removed:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,16 @@
|
|
|
3
3
|
* Security Sentinel 관리 명령어
|
|
4
4
|
*/
|
|
5
5
|
export declare function sentinelStatus(): void;
|
|
6
|
-
|
|
6
|
+
/** `vibe sentinel audit` 의 필터·액션 인자 묶음 */
|
|
7
|
+
export interface SentinelAuditOptions {
|
|
8
|
+
type?: string;
|
|
9
|
+
risk?: string;
|
|
10
|
+
days?: string;
|
|
11
|
+
deadLetter?: boolean;
|
|
12
|
+
retryId?: string;
|
|
13
|
+
discardId?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function sentinelAudit(options?: SentinelAuditOptions): void;
|
|
7
16
|
export declare function sentinelApprove(id: string): void;
|
|
8
17
|
export declare function sentinelReject(id: string): void;
|
|
9
18
|
export declare function sentinelPolicyList(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sentinel.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sentinel.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsCH,wBAAgB,cAAc,IAAI,IAAI,CAiDrC;AAED,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,IAAI,CA8EtE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CA2BhD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CA2B/C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CA6BzC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAsBxE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAgDtE;AAED,wBAAgB,YAAY,IAAI,IAAI,CAkBnC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { join } from 'path';
|
|
6
6
|
import { existsSync } from 'fs';
|
|
7
|
+
import { log } from '../utils.js';
|
|
7
8
|
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
8
9
|
// Helpers
|
|
9
10
|
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -34,7 +35,7 @@ function tryLoadStorage() {
|
|
|
34
35
|
export function sentinelStatus() {
|
|
35
36
|
const storage = tryLoadStorage();
|
|
36
37
|
if (!storage) {
|
|
37
|
-
|
|
38
|
+
log('Sentinel: No database found. Run a session first.');
|
|
38
39
|
return;
|
|
39
40
|
}
|
|
40
41
|
const db = storage.getDatabase();
|
|
@@ -65,7 +66,7 @@ export function sentinelStatus() {
|
|
|
65
66
|
catch {
|
|
66
67
|
// Table may not exist
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
+
log(`
|
|
69
70
|
Security Sentinel Status
|
|
70
71
|
========================
|
|
71
72
|
Policies: ${policyCount} active
|
|
@@ -78,10 +79,11 @@ Security Sentinel Status
|
|
|
78
79
|
Blocked: ${blockedActions}
|
|
79
80
|
`);
|
|
80
81
|
}
|
|
81
|
-
export function sentinelAudit(
|
|
82
|
+
export function sentinelAudit(options = {}) {
|
|
83
|
+
const { type, risk, days, deadLetter, retryId, discardId } = options;
|
|
82
84
|
const storage = tryLoadStorage();
|
|
83
85
|
if (!storage) {
|
|
84
|
-
|
|
86
|
+
log('No audit data found.');
|
|
85
87
|
return;
|
|
86
88
|
}
|
|
87
89
|
const db = storage.getDatabase();
|
|
@@ -89,36 +91,36 @@ export function sentinelAudit(type, risk, days, deadLetter, retryId, discardId)
|
|
|
89
91
|
try {
|
|
90
92
|
const rows = db.prepare('SELECT * FROM dead_letter_events ORDER BY failedAt DESC LIMIT 50').all();
|
|
91
93
|
if (rows.length === 0) {
|
|
92
|
-
|
|
94
|
+
log('No dead letter events.');
|
|
93
95
|
return;
|
|
94
96
|
}
|
|
95
|
-
|
|
97
|
+
log(`Dead Letter Events (${rows.length}):`);
|
|
96
98
|
for (const row of rows) {
|
|
97
|
-
|
|
99
|
+
log(` [${row.id}] ${row.eventType} — retries: ${row.retryCount}, failed: ${row.failedAt}`);
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
catch {
|
|
101
|
-
|
|
103
|
+
log('Dead letter table not found.');
|
|
102
104
|
}
|
|
103
105
|
return;
|
|
104
106
|
}
|
|
105
107
|
if (retryId) {
|
|
106
108
|
try {
|
|
107
109
|
db.prepare("UPDATE event_outbox SET status = 'pending', retryCount = 0 WHERE id = ?").run(retryId);
|
|
108
|
-
|
|
110
|
+
log(`Event ${retryId} re-queued for retry.`);
|
|
109
111
|
}
|
|
110
112
|
catch (err) {
|
|
111
|
-
|
|
113
|
+
log(`Failed to retry: ${err.message}`);
|
|
112
114
|
}
|
|
113
115
|
return;
|
|
114
116
|
}
|
|
115
117
|
if (discardId) {
|
|
116
118
|
try {
|
|
117
119
|
db.prepare('DELETE FROM dead_letter_events WHERE id = ?').run(discardId);
|
|
118
|
-
|
|
120
|
+
log(`Dead letter event ${discardId} discarded.`);
|
|
119
121
|
}
|
|
120
122
|
catch (err) {
|
|
121
|
-
|
|
123
|
+
log(`Failed to discard: ${err.message}`);
|
|
122
124
|
}
|
|
123
125
|
return;
|
|
124
126
|
}
|
|
@@ -138,149 +140,149 @@ export function sentinelAudit(type, risk, days, deadLetter, retryId, discardId)
|
|
|
138
140
|
try {
|
|
139
141
|
const rows = db.prepare(query).all(...params);
|
|
140
142
|
if (rows.length === 0) {
|
|
141
|
-
|
|
143
|
+
log('No audit events found.');
|
|
142
144
|
return;
|
|
143
145
|
}
|
|
144
|
-
|
|
146
|
+
log(`Audit Events (${rows.length}):`);
|
|
145
147
|
for (const row of rows) {
|
|
146
148
|
const risk = row.riskLevel ?? '-';
|
|
147
149
|
const outcome = row.outcome ?? '-';
|
|
148
|
-
|
|
150
|
+
log(` [${row.id}] ${row.eventType} | risk=${risk} | outcome=${outcome} | ${row.createdAt}`);
|
|
149
151
|
}
|
|
150
152
|
}
|
|
151
153
|
catch (err) {
|
|
152
|
-
|
|
154
|
+
log(`Query failed: ${err.message}`);
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
export function sentinelApprove(id) {
|
|
156
158
|
if (!id) {
|
|
157
|
-
|
|
159
|
+
log('Usage: vibe sentinel approve <confirmation-id>');
|
|
158
160
|
return;
|
|
159
161
|
}
|
|
160
162
|
const storage = tryLoadStorage();
|
|
161
163
|
if (!storage) {
|
|
162
|
-
|
|
164
|
+
log('No database found.');
|
|
163
165
|
return;
|
|
164
166
|
}
|
|
165
167
|
const db = storage.getDatabase();
|
|
166
168
|
try {
|
|
167
169
|
const row = db.prepare('SELECT * FROM confirmations WHERE id = ?').get(id);
|
|
168
170
|
if (!row) {
|
|
169
|
-
|
|
171
|
+
log(`Confirmation ${id} not found.`);
|
|
170
172
|
return;
|
|
171
173
|
}
|
|
172
174
|
if (row.status !== 'pending') {
|
|
173
|
-
|
|
175
|
+
log(`Confirmation ${id} is already ${row.status}.`);
|
|
174
176
|
return;
|
|
175
177
|
}
|
|
176
178
|
db.prepare("UPDATE confirmations SET status = 'approved', ownerResponse = 'CLI approval', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
|
|
177
|
-
|
|
179
|
+
log(`Confirmation ${id} approved.`);
|
|
178
180
|
}
|
|
179
181
|
catch (err) {
|
|
180
|
-
|
|
182
|
+
log(`Failed: ${err.message}`);
|
|
181
183
|
}
|
|
182
184
|
}
|
|
183
185
|
export function sentinelReject(id) {
|
|
184
186
|
if (!id) {
|
|
185
|
-
|
|
187
|
+
log('Usage: vibe sentinel reject <confirmation-id>');
|
|
186
188
|
return;
|
|
187
189
|
}
|
|
188
190
|
const storage = tryLoadStorage();
|
|
189
191
|
if (!storage) {
|
|
190
|
-
|
|
192
|
+
log('No database found.');
|
|
191
193
|
return;
|
|
192
194
|
}
|
|
193
195
|
const db = storage.getDatabase();
|
|
194
196
|
try {
|
|
195
197
|
const row = db.prepare('SELECT * FROM confirmations WHERE id = ?').get(id);
|
|
196
198
|
if (!row) {
|
|
197
|
-
|
|
199
|
+
log(`Confirmation ${id} not found.`);
|
|
198
200
|
return;
|
|
199
201
|
}
|
|
200
202
|
if (row.status !== 'pending') {
|
|
201
|
-
|
|
203
|
+
log(`Confirmation ${id} is already ${row.status}.`);
|
|
202
204
|
return;
|
|
203
205
|
}
|
|
204
206
|
db.prepare("UPDATE confirmations SET status = 'rejected', ownerResponse = 'CLI rejection', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
|
|
205
|
-
|
|
207
|
+
log(`Confirmation ${id} rejected.`);
|
|
206
208
|
}
|
|
207
209
|
catch (err) {
|
|
208
|
-
|
|
210
|
+
log(`Failed: ${err.message}`);
|
|
209
211
|
}
|
|
210
212
|
}
|
|
211
213
|
export function sentinelPolicyList() {
|
|
212
214
|
const storage = tryLoadStorage();
|
|
213
215
|
if (!storage) {
|
|
214
|
-
|
|
216
|
+
log('No policies found.');
|
|
215
217
|
return;
|
|
216
218
|
}
|
|
217
219
|
const db = storage.getDatabase();
|
|
218
220
|
try {
|
|
219
221
|
const rows = db.prepare('SELECT name, description, action, priority, enabled FROM policies ORDER BY priority DESC').all();
|
|
220
222
|
if (rows.length === 0) {
|
|
221
|
-
|
|
223
|
+
log('No policies configured.');
|
|
222
224
|
return;
|
|
223
225
|
}
|
|
224
|
-
|
|
226
|
+
log('Sentinel Policies:');
|
|
225
227
|
for (const row of rows) {
|
|
226
228
|
const status = row.enabled ? 'ON' : 'OFF';
|
|
227
|
-
|
|
229
|
+
log(` [${status}] ${row.name} (priority: ${row.priority}, action: ${row.action})`);
|
|
228
230
|
if (row.description)
|
|
229
|
-
|
|
231
|
+
log(` ${row.description}`);
|
|
230
232
|
}
|
|
231
233
|
}
|
|
232
234
|
catch (err) {
|
|
233
|
-
|
|
235
|
+
log(`Failed: ${err.message}`);
|
|
234
236
|
}
|
|
235
237
|
}
|
|
236
238
|
export function sentinelPolicyToggle(name, enable) {
|
|
237
239
|
if (!name) {
|
|
238
|
-
|
|
240
|
+
log(`Usage: vibe sentinel policy ${enable ? 'enable' : 'disable'} <policy-name>`);
|
|
239
241
|
return;
|
|
240
242
|
}
|
|
241
243
|
const storage = tryLoadStorage();
|
|
242
244
|
if (!storage) {
|
|
243
|
-
|
|
245
|
+
log('No database found.');
|
|
244
246
|
return;
|
|
245
247
|
}
|
|
246
248
|
const db = storage.getDatabase();
|
|
247
249
|
try {
|
|
248
250
|
const result = db.prepare('UPDATE policies SET enabled = ?, updatedAt = ? WHERE name = ?').run(enable ? 1 : 0, new Date().toISOString(), name);
|
|
249
251
|
if (result.changes === 0) {
|
|
250
|
-
|
|
252
|
+
log(`Policy '${name}' not found.`);
|
|
251
253
|
}
|
|
252
254
|
else {
|
|
253
|
-
|
|
255
|
+
log(`Policy '${name}' ${enable ? 'enabled' : 'disabled'}.`);
|
|
254
256
|
}
|
|
255
257
|
}
|
|
256
258
|
catch (err) {
|
|
257
|
-
|
|
259
|
+
log(`Failed: ${err.message}`);
|
|
258
260
|
}
|
|
259
261
|
}
|
|
260
262
|
export function sentinelSuggestions(action, id) {
|
|
261
263
|
const storage = tryLoadStorage();
|
|
262
264
|
if (!storage) {
|
|
263
|
-
|
|
265
|
+
log('No suggestions found.');
|
|
264
266
|
return;
|
|
265
267
|
}
|
|
266
268
|
const db = storage.getDatabase();
|
|
267
269
|
if (action === 'accept' && id) {
|
|
268
270
|
try {
|
|
269
271
|
db.prepare("UPDATE suggestions SET status = 'accepted', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
|
|
270
|
-
|
|
272
|
+
log(`Suggestion ${id} accepted.`);
|
|
271
273
|
}
|
|
272
274
|
catch (err) {
|
|
273
|
-
|
|
275
|
+
log(`Failed: ${err.message}`);
|
|
274
276
|
}
|
|
275
277
|
return;
|
|
276
278
|
}
|
|
277
279
|
if (action === 'dismiss' && id) {
|
|
278
280
|
try {
|
|
279
281
|
db.prepare("UPDATE suggestions SET status = 'dismissed', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
|
|
280
|
-
|
|
282
|
+
log(`Suggestion ${id} dismissed.`);
|
|
281
283
|
}
|
|
282
284
|
catch (err) {
|
|
283
|
-
|
|
285
|
+
log(`Failed: ${err.message}`);
|
|
284
286
|
}
|
|
285
287
|
return;
|
|
286
288
|
}
|
|
@@ -288,20 +290,20 @@ export function sentinelSuggestions(action, id) {
|
|
|
288
290
|
try {
|
|
289
291
|
const rows = db.prepare("SELECT id, type, title, priority, riskLevel FROM suggestions WHERE status = 'pending' ORDER BY priority ASC LIMIT 20").all();
|
|
290
292
|
if (rows.length === 0) {
|
|
291
|
-
|
|
293
|
+
log('No pending suggestions.');
|
|
292
294
|
return;
|
|
293
295
|
}
|
|
294
|
-
|
|
296
|
+
log(`Pending Suggestions (${rows.length}):`);
|
|
295
297
|
for (const row of rows) {
|
|
296
|
-
|
|
298
|
+
log(` [P${row.priority}] ${row.type}: ${row.title} (risk: ${row.riskLevel}) — id: ${row.id}`);
|
|
297
299
|
}
|
|
298
300
|
}
|
|
299
301
|
catch (err) {
|
|
300
|
-
|
|
302
|
+
log(`Failed: ${err.message}`);
|
|
301
303
|
}
|
|
302
304
|
}
|
|
303
305
|
export function sentinelHelp() {
|
|
304
|
-
|
|
306
|
+
log(`
|
|
305
307
|
Sentinel Commands:
|
|
306
308
|
vibe sentinel status Show sentinel status
|
|
307
309
|
vibe sentinel audit [--type X] [--risk Y] [--days N]
|