@wooojin/forgen 0.4.12 → 0.4.13
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/CHANGELOG.md +15 -0
- package/dist/fgx.js +12 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.13] — 2026-06-02 — Hotfix: fgx 세션 종료 시 터미널 물림 방지
|
|
11
|
+
|
|
12
|
+
핫픽스 한 건.
|
|
13
|
+
|
|
14
|
+
- **fix(fgx)**: `fgx` 가 대화형 세션 성공 경로에서 `process.exit` 를 호출하지 않고 Node
|
|
15
|
+
이벤트 루프 자연 배수에 의존해 종료해 왔다. `spawnClaude` 는 세션 종료 시
|
|
16
|
+
`auto-compound-runner` 를 detached + unref 로 띄우고 즉시 resolve 하므로(0.4.12 에서
|
|
17
|
+
비차단 전환) 현재는 미해제 핸들이 없어 정상 종료한다. 그러나 향후 post-session 경로
|
|
18
|
+
(`indexTranscriptToFTS`·rate-limit scan 등)에 닫히지 않은 핸들(SQLite 커넥션·타이머·소켓)이
|
|
19
|
+
하나라도 생기면 fgx 가 종료하지 못하고 셸 프롬프트가 돌아오지 않는다(= 터미널 물림).
|
|
20
|
+
`runClaudeLauncher()` 직후 명시적 `process.exit(0)` 추가로 이 종류의 회귀를 원천 차단.
|
|
21
|
+
cli.js 위임 경로(`watch`/`dashboard`/`workflows` 등 long-running)는 자체 exit 를 책임지므로
|
|
22
|
+
손대지 않았다. detached 자식은 unref 되어 독립 세션에서 실행되므로 `process.exit(0)` 후에도
|
|
23
|
+
생존(PID 1 로 reparent 확인) — 백그라운드 compound 는 영향받지 않는다.
|
|
24
|
+
|
|
10
25
|
## [0.4.12] — 2026-06-01 — Hotfix: 훅 stdout 누출 + 세션 종료 블로킹
|
|
11
26
|
|
|
12
27
|
핫픽스 두 건.
|
package/dist/fgx.js
CHANGED
|
@@ -80,10 +80,22 @@ async function runClaudeLauncher() {
|
|
|
80
80
|
async function main() {
|
|
81
81
|
const sub = findFirstSubcommand(args);
|
|
82
82
|
if (sub !== null) {
|
|
83
|
+
// cli.js 위임 경로는 건드리지 않는다. watch/dashboard/workflows 등 long-running
|
|
84
|
+
// 서브커맨드가 여기서 강제 종료되면 잘린다. cli.js 가 자체 process.exit 를 책임진다.
|
|
83
85
|
await routeToCli();
|
|
84
86
|
return;
|
|
85
87
|
}
|
|
86
88
|
await runClaudeLauncher();
|
|
89
|
+
// 대화형 세션 종료 후 fgx 프로세스 종료를 명시적으로 보장한다.
|
|
90
|
+
//
|
|
91
|
+
// WHY: spawnClaude 는 세션 종료 시 auto-compound-runner 를 detached + unref 로 띄우고
|
|
92
|
+
// 즉시 resolve 한다(설계상 비차단). 그런데 fgx 는 성공 경로에서 process.exit 를 호출하지
|
|
93
|
+
// 않고 Node 이벤트 루프 자연 배수에 의존해 왔다. 지금은 미해제 핸들이 없어 정상 종료하지만,
|
|
94
|
+
// 향후 post-session 경로에 닫히지 않은 핸들(SQLite 커넥션, 타이머, 소켓 등)이 하나라도
|
|
95
|
+
// 생기면 fgx 가 종료하지 못하고 셸 프롬프트가 돌아오지 않는다(= 터미널 물림). 명시 종료로
|
|
96
|
+
// 이 종류의 회귀를 원천 차단한다. detached 자식은 unref 되어 독립 실행되므로 백그라운드
|
|
97
|
+
// compound 는 영향받지 않고 계속된다.
|
|
98
|
+
process.exit(0);
|
|
87
99
|
}
|
|
88
100
|
main().catch((err) => {
|
|
89
101
|
console.error('[forgen] Error:', err instanceof Error ? err.message : err);
|
package/package.json
CHANGED
package/plugin.json
CHANGED