@su-record/vibe 3.2.28 → 3.2.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/.codex-plugin/plugin.json +1 -1
- package/README.md +10 -0
- package/dist/cli/commands/info.d.ts +8 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +16 -1
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +21 -1
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/setup/NativeDeps.d.ts +29 -0
- package/dist/cli/setup/NativeDeps.d.ts.map +1 -0
- package/dist/cli/setup/NativeDeps.js +79 -0
- package/dist/cli/setup/NativeDeps.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibe",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.30",
|
|
4
4
|
"description": "Verification harness for AI coding agents — \"done\" is decided by deterministic gates (test exit codes, run-ledger, regression memory), not the model self-report.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "su-record",
|
package/README.md
CHANGED
|
@@ -94,6 +94,16 @@ codex
|
|
|
94
94
|
/vibe "사용자 인증 추가"
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
+
> **npm 12 를 쓴다면** — npm 12 는 `allowScripts` 정책으로 install 스크립트를 기본 차단한다.
|
|
98
|
+
> 그러면 설치는 성공하는데 `better-sqlite3` 네이티브 바인딩이 빌드되지 않아 메모리·RAG 가 죽는다.
|
|
99
|
+
> `vibe upgrade` 가 자동 복구하지만, 근본적으로 막으려면 한 번 승인해 두면 된다:
|
|
100
|
+
>
|
|
101
|
+
> ```bash
|
|
102
|
+
> npm config set allow-scripts=@su-record/vibe,better-sqlite3 --location=user
|
|
103
|
+
> ```
|
|
104
|
+
>
|
|
105
|
+
> 상태는 `vibe status` 의 `Native bindings` 행으로 확인한다.
|
|
106
|
+
|
|
97
107
|
---
|
|
98
108
|
|
|
99
109
|
## Figma ↔ 코드
|
|
@@ -16,6 +16,14 @@ export declare function showHelp(): void;
|
|
|
16
16
|
export declare function formatHookStatus(projectRoot: string,
|
|
17
17
|
/** Codex CLI 설치 여부 — 생략하면 감지한다. 테스트가 머신 상태에 좌우되지 않도록 주입 가능. */
|
|
18
18
|
codexInstalled?: boolean): string;
|
|
19
|
+
/**
|
|
20
|
+
* 네이티브 바인딩 상태 — 빠져 있으면 메모리·RAG 가 매 훅마다 조용히 죽는다.
|
|
21
|
+
*
|
|
22
|
+
* npm 12 의 `allowScripts` 가 install 스크립트를 차단하면 설치는 성공하는데
|
|
23
|
+
* 바인딩만 없는 상태가 된다. 상태 화면이 이걸 보여주지 않으면 사용자는
|
|
24
|
+
* "설치는 됐는데 메모리가 안 붙는다" 를 진단할 방법이 없다.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatNativeDepStatus(packageRoot: string): string;
|
|
19
27
|
/**
|
|
20
28
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
21
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CA+C/B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM;AACnB,+DAA+D;AAC/D,cAAc,GAAE,OAAoC,GACnD,MAAM,CAmCR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA6BjC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
|
@@ -6,6 +6,7 @@ import fs from 'fs';
|
|
|
6
6
|
import { getPackageJson } from '../utils.js';
|
|
7
7
|
import { formatLLMStatus } from '../auth.js';
|
|
8
8
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
9
|
+
import { missingNativeDeps } from '../setup/NativeDeps.js';
|
|
9
10
|
/**
|
|
10
11
|
* 도움말 표시
|
|
11
12
|
*/
|
|
@@ -96,6 +97,19 @@ codexInstalled = detectCodexCli().installed) {
|
|
|
96
97
|
}
|
|
97
98
|
return lines.join('\n');
|
|
98
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* 네이티브 바인딩 상태 — 빠져 있으면 메모리·RAG 가 매 훅마다 조용히 죽는다.
|
|
102
|
+
*
|
|
103
|
+
* npm 12 의 `allowScripts` 가 install 스크립트를 차단하면 설치는 성공하는데
|
|
104
|
+
* 바인딩만 없는 상태가 된다. 상태 화면이 이걸 보여주지 않으면 사용자는
|
|
105
|
+
* "설치는 됐는데 메모리가 안 붙는다" 를 진단할 방법이 없다.
|
|
106
|
+
*/
|
|
107
|
+
export function formatNativeDepStatus(packageRoot) {
|
|
108
|
+
const missing = missingNativeDeps(packageRoot);
|
|
109
|
+
return missing.length === 0
|
|
110
|
+
? ' Native bindings ✓ ok'
|
|
111
|
+
: ` Native bindings ✗ ${missing.join(', ')} — memory/RAG disabled (run: vibe upgrade)`;
|
|
112
|
+
}
|
|
99
113
|
/**
|
|
100
114
|
* 상태 표시 — 모든 시스템 상태를 한 곳에서 확인
|
|
101
115
|
*/
|
|
@@ -120,7 +134,8 @@ VIBE Status (v${packageJson.version})
|
|
|
120
134
|
|
|
121
135
|
Project: ${projectStatus}
|
|
122
136
|
${isCoreProject ? `Language: ${config.language || 'ko'}\n` : ''}
|
|
123
|
-
${isCoreProject ? `Hooks (deterministic gates):\n${formatHookStatus(projectRoot)}\n` : ''}
|
|
137
|
+
${isCoreProject ? `Hooks (deterministic gates):\n${formatHookStatus(projectRoot)}\n` : ''}${formatNativeDepStatus(path.resolve(import.meta.dirname, '..', '..', '..'))}
|
|
138
|
+
|
|
124
139
|
${formatLLMStatus()}
|
|
125
140
|
`);
|
|
126
141
|
}
|
|
@@ -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;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,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":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BzC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAYjE;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpE;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CA+BhE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUzE;AA4BD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,GAAE,UAA8B,GAAG,IAAI,CAiFtE"}
|
|
@@ -10,6 +10,7 @@ import { formatLLMStatus } from '../auth.js';
|
|
|
10
10
|
import { installProjectHooks, installProjectCodexHooks } from '../setup.js';
|
|
11
11
|
import { detectCodexCli } from '../utils/cli-detector.js';
|
|
12
12
|
import { getCoreConfigDir } from '../setup/GlobalInstaller.js';
|
|
13
|
+
import { missingNativeDeps, repairNativeDeps, nativeDepHint } from '../setup/NativeDeps.js';
|
|
13
14
|
/**
|
|
14
15
|
* Remove stale npm temp directories that cause ENOTEMPTY errors
|
|
15
16
|
*/
|
|
@@ -147,6 +148,10 @@ export function staleGlobalAssets(installedVersion) {
|
|
|
147
148
|
* postinstall 을 직접 실행해 전역 자산을 복구한다.
|
|
148
149
|
*
|
|
149
150
|
* WHY: npm 이 lifecycle script 를 건너뛰는 환경이 있다 (`npm warn install-scripts`).
|
|
151
|
+
* npm 12 의 `allowScripts` 는 아예 **기본 차단**이다 — 승인 목록에 없는 패키지의
|
|
152
|
+
* install/postinstall 은 실행되지 않고 경고 한 줄만 남는다. 사용자 레벨 승인
|
|
153
|
+
* (`npm config set allow-scripts=…`)으로도 **최상위 패키지 자신의 postinstall 은
|
|
154
|
+
* 계속 차단된다**(npm 12.0.2 실측) — 그래서 이 복구는 승인 여부와 무관하게 필요하다.
|
|
150
155
|
* 그러면 전역 **패키지**는 새 버전인데 `~/.vibe/hooks/scripts/` 는 옛날 그대로다 —
|
|
151
156
|
* sentinel·scope·run-ledger·verify 가 전부 구버전 코드로 돌면서 upgrade 는
|
|
152
157
|
* "✅ 성공" 을 출력한다. 실측: 두 번의 릴리즈 동안 훅이 5일 전 상태로 멈춰 있었다.
|
|
@@ -211,6 +216,21 @@ export function upgrade(_options = { silent: false }) {
|
|
|
211
216
|
? `\n🔧 Global assets restored (postinstall did not run — was v${stale})\n`
|
|
212
217
|
: `\n⚠️ Global assets stale (v${after}) — hooks may run old code. Try: npm install -g @su-record/vibe@latest --force --foreground-scripts\n`;
|
|
213
218
|
}
|
|
219
|
+
// 네이티브 바인딩도 같은 이유(allowScripts 차단)로 빠진다 — 여기서도 복구한다.
|
|
220
|
+
// 빠지면 메모리·RAG·sentinel 이 매 훅마다 bindings 에러로 죽는데, 설치는 ✅ 로 보인다.
|
|
221
|
+
let nativeNote = '';
|
|
222
|
+
if (globalRoot) {
|
|
223
|
+
const pkgRoot = join(globalRoot, '@su-record', 'vibe');
|
|
224
|
+
if (missingNativeDeps(pkgRoot).length > 0) {
|
|
225
|
+
const { repaired: fixed, failed } = repairNativeDeps(pkgRoot);
|
|
226
|
+
if (fixed.length > 0)
|
|
227
|
+
nativeNote += `\n🔧 Native bindings rebuilt: ${fixed.join(', ')}\n`;
|
|
228
|
+
if (failed.length > 0) {
|
|
229
|
+
nativeNote += `\n⚠️ Native bindings missing (${failed.join(', ')}) — memory/RAG disabled.`
|
|
230
|
+
+ ` Try: ${nativeDepHint(failed)}\n`;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
214
234
|
const repaired = repairProjectHooks(process.cwd());
|
|
215
235
|
const hookNote = repaired.length > 0
|
|
216
236
|
? `\n🔧 Project hooks restored: ${repaired.join(', ')}\n`
|
|
@@ -218,7 +238,7 @@ export function upgrade(_options = { silent: false }) {
|
|
|
218
238
|
const pruneNote = postinstallReport.length > 0
|
|
219
239
|
? `\n🧹 ${postinstallReport.join('\n🧹 ')}\n`
|
|
220
240
|
: '';
|
|
221
|
-
log(`\n✅ vibe upgraded (v${newVersion})\n${globalNote}${hookNote}${pruneNote}\n${llmStatus}\n`);
|
|
241
|
+
log(`\n✅ vibe upgraded (v${newVersion})\n${globalNote}${nativeNote}${hookNote}${pruneNote}\n${llmStatus}\n`);
|
|
222
242
|
}
|
|
223
243
|
catch (error) {
|
|
224
244
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5F;;GAEG;AACH,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG;QACb,UAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG;QACpC,uDAAuD;QACvD,mFAAmF;KACpF,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;QAC3E,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC,OAAO,EAAE,CAAC;AACf,CAAC;AAED,kDAAkD;AAClD,MAAM,2BAA2B,GAAG;IAClC,2BAA2B;IAC3B,yBAAyB;CACjB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,OAAO,SAAS;SACb,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAClC,MAAM,CAAC,CAAC,IAAI,EAAW,EAAE,CACxB,2BAA2B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,+CAA+C;AAC/C,SAAS,cAAc,CAAC,WAAmB;IACzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,qBAAqB,CAAC,EAAE,OAAO,CAAC,CACpD,CAAC;QACzB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1D,mDAAmD;IACnD,+BAA+B;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC;IAED,kEAAkE;IAClE,sDAAsD;IACtD,4DAA4D;IAC5D,MAAM,SAAS,GAAG,WAAW,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC,SAAS,CAAC;IAC3E,IAAI,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,wBAAwB,CAAC,WAAW,CAAC,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,gBAAwB;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CACpC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAC9E,OAAO,CACR,CAAyB,CAAC;QAC3B,OAAO,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,uBAAuB,CAAC,UAAkB;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAC9F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,WAAuB,EAAE,MAAM,EAAE,KAAK,EAAE;IAC9D,IAAI,CAAC;QACH,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAE3C,kBAAkB,EAAE,CAAC;QAErB,8CAA8C;QAC9C,kEAAkE;QAClE,6DAA6D;QAC7D,qDAAqD;QACrD,qDAAqD;QACrD,wCAAwC;QACxC,yDAAyD;QACzD,MAAM,SAAS,GAAG,QAAQ,CACxB,4EAA4E,EAC5E,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CACrC,CAAC;QACF,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE9D,6CAA6C;QAC7C,IAAI,UAAU,GAAG,SAAS,CAAC;QAC3B,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAC7B,YAAY,CACV,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EACtD,OAAO,CACR,CACqB,CAAC;YACzB,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,cAAc,EAAE,CAAC,OAAO,CAAC;QACxC,CAAC;QAED,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,UAAU;gBAAE,SAAS,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;QAEvD,wDAAwD;QACxD,qDAAqD;QACrD,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAChE,UAAU,GAAG,KAAK,KAAK,IAAI;gBACzB,CAAC,CAAC,+DAA+D,KAAK,KAAK;gBAC3E,CAAC,CAAC,+BAA+B,KAAK,uGAAuG,CAAC;QAClJ,CAAC;QAED,qDAAqD;QACrD,8DAA8D;QAC9D,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YACvD,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,UAAU,IAAI,iCAAiC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1F,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,UAAU,IAAI,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B;0BACvF,SAAS,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;YAClC,CAAC,CAAC,gCAAgC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAC,QAAQ,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YAC7C,CAAC,CAAC,EAAE,CAAC;QAEP,GAAG,CAAC,uBAAuB,UAAU,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 바인딩이 빠진 네이티브 의존성 목록.
|
|
3
|
+
*
|
|
4
|
+
* 패키지 자체가 없으면 **누락이 아니다** — 설치되지 않은 선택 의존성과
|
|
5
|
+
* 설치됐는데 빌드가 안 된 상태는 다른 사건이다. 후자만 복구 대상이다.
|
|
6
|
+
*/
|
|
7
|
+
export declare function missingNativeDeps(packageRoot: string): string[];
|
|
8
|
+
/**
|
|
9
|
+
* 빠진 바인딩을 내려받아 복구한다.
|
|
10
|
+
*
|
|
11
|
+
* @returns 복구된 것과 실패한 것 — 실패는 숨기지 않는다. 조용히 실패하면
|
|
12
|
+
* "설치 성공" 이 또 거짓말이 된다.
|
|
13
|
+
*/
|
|
14
|
+
export declare function repairNativeDeps(packageRoot: string): {
|
|
15
|
+
repaired: string[];
|
|
16
|
+
failed: string[];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 복구 실패 시 사용자가 직접 쓸 명령 — npm 정책을 푸는 쪽이 근본 처방이다.
|
|
20
|
+
*
|
|
21
|
+
* `npm install-scripts approve` 를 안내하면 안 된다(실측). 그건 승인을 **설치된
|
|
22
|
+
* 패키지 자신의 package.json** 에 쓰는데, 그 파일은 다음 `npm i -g` 가 게시본으로
|
|
23
|
+
* 덮어쓴다 — 업그레이드 한 번이면 승인이 사라진다. 같은 이유로 `allowScripts` 를
|
|
24
|
+
* 우리 package.json 에 담아 게시해도 무의미하다(전역 설치에서 무시됨을 확인).
|
|
25
|
+
*
|
|
26
|
+
* 유일하게 지속되는 형태는 사용자 레벨 npm config 다.
|
|
27
|
+
*/
|
|
28
|
+
export declare function nativeDepHint(names: string[]): string;
|
|
29
|
+
//# sourceMappingURL=NativeDeps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeDeps.d.ts","sourceRoot":"","sources":["../../../src/cli/setup/NativeDeps.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAkB9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAGrD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 네이티브 의존성 자기복구.
|
|
3
|
+
*
|
|
4
|
+
* WHY: npm 12 는 `allowScripts` 정책으로 **install 스크립트를 기본 차단**한다.
|
|
5
|
+
*
|
|
6
|
+
* npm warn rebuild 1 package had install scripts blocked
|
|
7
|
+
* better-sqlite3@12.11.1 (install: prebuild-install || node-gyp rebuild --release)
|
|
8
|
+
*
|
|
9
|
+
* 그래서 `npm i -g @su-record/vibe` 는 성공하는데 `better-sqlite3` 의 네이티브
|
|
10
|
+
* 바인딩(`build/Release/better_sqlite3.node`)은 끝내 생기지 않는다. 설치는 ✅ 인데
|
|
11
|
+
* 메모리·RAG·sentinel 이 매 훅마다 "Could not locate the bindings file" 로 죽는다 —
|
|
12
|
+
* postinstall 이 통째로 건너뛰어졌던 것과 **같은 뿌리**이고, 그때와 같은 결론을 쓴다:
|
|
13
|
+
* npm 이 실행해주길 기다리지 말고 우리가 직접 실행한다.
|
|
14
|
+
*
|
|
15
|
+
* 복구는 `prebuild-install` 을 npm 라이프사이클 밖에서 직접 돌린다. `.bin/` 심링크가
|
|
16
|
+
* 아니라 JS 엔트리를 `process.execPath` 로 실행하는 이유는 셸·확장자(.cmd) 차이를
|
|
17
|
+
* 타지 않기 위해서다 — `runInstalledPostinstall` 과 같은 방식.
|
|
18
|
+
*/
|
|
19
|
+
import { execFileSync } from 'child_process';
|
|
20
|
+
import { existsSync } from 'fs';
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
/** 네이티브 바인딩이 필요한 런타임 의존성 — 이름 → 있어야 하는 산출물 */
|
|
23
|
+
const NATIVE_DEPS = [
|
|
24
|
+
{ name: 'better-sqlite3', artifact: join('build', 'Release', 'better_sqlite3.node') },
|
|
25
|
+
];
|
|
26
|
+
/** prebuild-install 의 JS 엔트리 (bin 심링크 대신 직접 실행한다) */
|
|
27
|
+
const PREBUILD_ENTRY = join('prebuild-install', 'bin.js');
|
|
28
|
+
/**
|
|
29
|
+
* 바인딩이 빠진 네이티브 의존성 목록.
|
|
30
|
+
*
|
|
31
|
+
* 패키지 자체가 없으면 **누락이 아니다** — 설치되지 않은 선택 의존성과
|
|
32
|
+
* 설치됐는데 빌드가 안 된 상태는 다른 사건이다. 후자만 복구 대상이다.
|
|
33
|
+
*/
|
|
34
|
+
export function missingNativeDeps(packageRoot) {
|
|
35
|
+
const modules = join(packageRoot, 'node_modules');
|
|
36
|
+
return NATIVE_DEPS
|
|
37
|
+
.filter(({ name, artifact }) => existsSync(join(modules, name)) && !existsSync(join(modules, name, artifact)))
|
|
38
|
+
.map(({ name }) => name);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 빠진 바인딩을 내려받아 복구한다.
|
|
42
|
+
*
|
|
43
|
+
* @returns 복구된 것과 실패한 것 — 실패는 숨기지 않는다. 조용히 실패하면
|
|
44
|
+
* "설치 성공" 이 또 거짓말이 된다.
|
|
45
|
+
*/
|
|
46
|
+
export function repairNativeDeps(packageRoot) {
|
|
47
|
+
const modules = join(packageRoot, 'node_modules');
|
|
48
|
+
const prebuild = join(modules, PREBUILD_ENTRY);
|
|
49
|
+
const repaired = [];
|
|
50
|
+
const failed = [];
|
|
51
|
+
for (const name of missingNativeDeps(packageRoot)) {
|
|
52
|
+
const dir = join(modules, name);
|
|
53
|
+
try {
|
|
54
|
+
if (!existsSync(prebuild))
|
|
55
|
+
throw new Error(`prebuild-install not found: ${prebuild}`);
|
|
56
|
+
execFileSync(process.execPath, [prebuild], { cwd: dir, stdio: 'ignore', timeout: 180_000 });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* 아래 재확인이 결과를 판정한다 — 종료 코드가 아니라 산출물이 기준이다 */
|
|
60
|
+
}
|
|
61
|
+
(missingNativeDeps(packageRoot).includes(name) ? failed : repaired).push(name);
|
|
62
|
+
}
|
|
63
|
+
return { repaired, failed };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 복구 실패 시 사용자가 직접 쓸 명령 — npm 정책을 푸는 쪽이 근본 처방이다.
|
|
67
|
+
*
|
|
68
|
+
* `npm install-scripts approve` 를 안내하면 안 된다(실측). 그건 승인을 **설치된
|
|
69
|
+
* 패키지 자신의 package.json** 에 쓰는데, 그 파일은 다음 `npm i -g` 가 게시본으로
|
|
70
|
+
* 덮어쓴다 — 업그레이드 한 번이면 승인이 사라진다. 같은 이유로 `allowScripts` 를
|
|
71
|
+
* 우리 package.json 에 담아 게시해도 무의미하다(전역 설치에서 무시됨을 확인).
|
|
72
|
+
*
|
|
73
|
+
* 유일하게 지속되는 형태는 사용자 레벨 npm config 다.
|
|
74
|
+
*/
|
|
75
|
+
export function nativeDepHint(names) {
|
|
76
|
+
return `npm config set allow-scripts=${names.join(',')} --location=user`
|
|
77
|
+
+ ` && npm install -g @su-record/vibe@latest --force`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=NativeDeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeDeps.js","sourceRoot":"","sources":["../../../src/cli/setup/NativeDeps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,8CAA8C;AAC9C,MAAM,WAAW,GAAG;IAClB,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,qBAAqB,CAAC,EAAE;CAC7E,CAAC;AAEX,qDAAqD;AACrD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;SAC/E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;YACtF,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QACD,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,OAAO,gCAAgC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB;UACpE,mDAAmD,CAAC;AAC1D,CAAC"}
|