@tienne/gestalt 0.69.0 → 0.70.0
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.md +1 -0
- package/dist/package.json +1 -1
- package/dist/plugin/role-agents/humanize-monolith/AGENT.md +89 -11
- package/dist/src/cli/commands/humanize-check.d.ts +2 -0
- package/dist/src/cli/commands/humanize-check.d.ts.map +1 -1
- package/dist/src/cli/commands/humanize-check.js +11 -5
- package/dist/src/cli/commands/humanize-check.js.map +1 -1
- package/dist/src/cli/commands/humanize-scan.d.ts +23 -0
- package/dist/src/cli/commands/humanize-scan.d.ts.map +1 -0
- package/dist/src/cli/commands/humanize-scan.js +30 -0
- package/dist/src/cli/commands/humanize-scan.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +11 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/humanize/check.d.ts +75 -7
- package/dist/src/humanize/check.d.ts.map +1 -1
- package/dist/src/humanize/check.js +241 -30
- package/dist/src/humanize/check.js.map +1 -1
- package/dist/src/humanize/detectors.d.ts.map +1 -1
- package/dist/src/humanize/detectors.js +7 -8
- package/dist/src/humanize/detectors.js.map +1 -1
- package/dist/src/humanize/index.d.ts +3 -2
- package/dist/src/humanize/index.d.ts.map +1 -1
- package/dist/src/humanize/index.js +3 -2
- package/dist/src/humanize/index.js.map +1 -1
- package/dist/src/humanize/rules.d.ts +12 -0
- package/dist/src/humanize/rules.d.ts.map +1 -1
- package/dist/src/humanize/rules.js +4 -0
- package/dist/src/humanize/rules.js.map +1 -1
- package/dist/src/humanize/scan.d.ts +24 -0
- package/dist/src/humanize/scan.d.ts.map +1 -0
- package/dist/src/humanize/scan.js +65 -0
- package/dist/src/humanize/scan.js.map +1 -0
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/role-agents/humanize-monolith/AGENT.md +89 -11
package/CLAUDE.md
CHANGED
|
@@ -35,6 +35,7 @@ pnpm tsx bin/gestalt.ts status
|
|
|
35
35
|
pnpm tsx bin/gestalt.ts init # gestalt.json + code graph + post-commit hook
|
|
36
36
|
pnpm verify:rules # 룰북과 에이전트 문서의 룰 ID·심각도 정합 검사
|
|
37
37
|
pnpm build:output-style # 룰북 → ~/.claude/output-styles/tienne-voice.md 생성
|
|
38
|
+
pnpm tsx bin/gestalt.ts humanize-scan --file a.md --register chat # 걸린 룰만 추린다
|
|
38
39
|
pnpm tsx bin/gestalt.ts humanize-check --before a.md --after b.md --register report
|
|
39
40
|
```
|
|
40
41
|
|
package/dist/package.json
CHANGED
|
@@ -72,13 +72,44 @@ S2
|
|
|
72
72
|
|
|
73
73
|
## 3단계 프로세스 (윤문 모드)
|
|
74
74
|
|
|
75
|
+
### 0단계 — 스캔 (룰을 좁힌다)
|
|
76
|
+
|
|
77
|
+
원문이 파일로 있으면 먼저 스캔을 돌린다. 말투는 산문이 `doc`, 리뷰 코멘트와 슬랙이 `chat`,
|
|
78
|
+
보고서가 `report`다.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
gestalt humanize-scan --file <원문> --register <doc|chat|report>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
종료 코드로도 답한다. 걸린 게 있으면 0, 탐지기가 가리는 범위에서 0건이면 10이다.
|
|
85
|
+
파일이 없으면 3이다. 셸에서 분기할 때 stdout 을 파싱하지 않아도 된다.
|
|
86
|
+
|
|
87
|
+
스캔이 내놓는 것만 본다.
|
|
88
|
+
|
|
89
|
+
- **걸린 룰**: ID, 건수, 실제 표현, 처방이 함께 나온다. 이번 윤문의 작업 목록이다
|
|
90
|
+
- **탐지기가 못 가리는 S1**: ID 목록만 나온다. 이건 직접 읽어서 판단한다
|
|
91
|
+
- **그 밖의 룰**: 이번 텍스트에서 안 걸렸다. 찾아 나서지 않는다
|
|
92
|
+
|
|
93
|
+
룰북은 59개까지 자랐다. 매번 전부 펼치면 실제로 걸린 서너 개가 안 걸린 쉰 개에 묻힌다.
|
|
94
|
+
스캔은 이번에 볼 목록을 좁히는 장치다. 목록 밖의 룰을 굳이 뒤지면 그 자리에서 과윤문이 시작된다.
|
|
95
|
+
|
|
96
|
+
**S1 0건이면 윤문하지 않는다.** 탐지기가 가리는 범위에서 걸리는 게 없고 직접 확인할 룰도
|
|
97
|
+
안 보이면, 원문을 그대로 돌려주고 그렇게 말한다. 고칠 게 없는 글에 윤문을 돌리면 남는 건
|
|
98
|
+
과윤문뿐이다.
|
|
99
|
+
|
|
100
|
+
인라인 텍스트만 받아 스캔을 못 돌리는 경우에만 룰북을 직접 읽는다. 이때도 말투에 해당하는
|
|
101
|
+
S1부터 본다. 전 카테고리를 훑지 않는다.
|
|
102
|
+
|
|
75
103
|
### 1단계 — 탐지
|
|
76
104
|
|
|
77
|
-
|
|
105
|
+
스캔 결과에 탐지기가 못 가리는 S1을 더해 이번 작업 목록을 확정한다.
|
|
78
106
|
|
|
79
|
-
- S1(심각):
|
|
107
|
+
- S1(심각): 스캔이 짚은 룰 + 직접 확인 목록에서 실제로 걸린 것 — 반드시 제거
|
|
80
108
|
- S2(경미): 빈도, 맥락을 보고 선별 교정. 무리하게 다 고치지 않는다
|
|
81
109
|
|
|
110
|
+
스캔을 못 돌린 경우에만 룰북 자체검증 5번의 S1 목록을 기준으로 삼는다. 대화나 리뷰 말투면
|
|
111
|
+
거기 적힌 격상분까지 포함한다.
|
|
112
|
+
|
|
82
113
|
### 2단계 — 처방
|
|
83
114
|
|
|
84
115
|
탐지한 패턴마다 룰북의 처방을 적용한다. 정보와 의미, 말투는 그대로 두고 표현만 바꾼다.
|
|
@@ -98,8 +129,13 @@ S2
|
|
|
98
129
|
2. 변경률 30% 이하 (50% 초과는 작업 중단)
|
|
99
130
|
3. 장르나 말투 이탈 없음 (칼럼→에세이, 격식체→평어체 금지)
|
|
100
131
|
4. 잔존 S1 패턴 0건 (B-3 음차 표기 포함)
|
|
101
|
-
5.
|
|
102
|
-
|
|
132
|
+
5. 0단계가 짚은 S1을 절반 넘게 걷어냄. 하나도 못 줄였으면 윤문한 게 아니다
|
|
133
|
+
(잔존이 0건이라야 잔존 측면이 통과다. 남았으면 제거율이 높아도 경고가 붙는다)
|
|
134
|
+
**탐지기가 없는 룰을 고쳤으면 어느 것인지 summary에 적는다.** 코드가 못 세는 자리라
|
|
135
|
+
여기서 직접 확인한다. 댈 게 없으면 안 고친 것이다
|
|
136
|
+
6. 원문에 없던 S1을 새로 심지 않음
|
|
137
|
+
7. 원문에 없던 비유나 수사를 임의로 추가하지 않음
|
|
138
|
+
8. 삭제 처방(D-2, D-3, D-4, D-6, C-10)을 재작성으로 처리하지 않음
|
|
103
139
|
|
|
104
140
|
## Do-NOT (탐지·윤문 모두 제외)
|
|
105
141
|
|
|
@@ -115,29 +151,71 @@ S2
|
|
|
115
151
|
- **구조 라벨 접두**: 커밋과 PR 제목의 `type(scope):` — 팀이 형식으로 정한 라벨이라 C-10 콜론 부제가 아니다(룰북 C-10 예외). 라벨은 그대로 두고 콜론 뒤 본문만 다듬는다. 리뷰 코멘트의 `r:`/`c:`/`a:`도 같은 예외이고 설명은 아래 작성자 voice 항목에 있다 — 여기 두 번 적지 않는다
|
|
116
152
|
- **작성자 voice (리뷰 코멘트·PR/변경 문서)**: `author-voice.md`의 보존 패턴 — 제안형 "~것 같아요/같습니다", 물결 친근체 "~해주세요~/~할게요~", "개인적으로/제 취향이긴 한데", 이모지(코멘트당 1개 안팎). 이건 AI-tell이 아니라 작성자 voice이므로 단언, 격식으로 평탄화하지 않는다. (단 `[출처]`·"권장." 은 Claude artifact이니 보이면 제거. **`r:`/`c:`/`a:` 접두어는 예외** — 팀이 채택한 PR 리뷰 강제성 라벨이므로 코멘트 맨 앞에 있으면 보존한다. voice 시그니처 흉내가 아니라 구조적 라벨이다.)
|
|
117
153
|
|
|
118
|
-
##
|
|
154
|
+
## 윤문 가드 (양방향)
|
|
155
|
+
|
|
156
|
+
너무 많이 고치는 것과 하나도 안 고치는 것은 같은 무게로 실패다. 한쪽만 막으면 안 고치는
|
|
157
|
+
쪽이 늘 안전해져서, 결국 아무것도 안 하는 윤문이 통과한다.
|
|
158
|
+
|
|
159
|
+
과윤문 쪽
|
|
119
160
|
|
|
120
161
|
- 변경률 30% 초과 = 경고 (summary에 명시)
|
|
121
162
|
- 변경률 50% 초과 = 강제 중단, 롤백 후 D등급으로 반환
|
|
122
|
-
-
|
|
163
|
+
- 원문에 없던 S1을 새로 심으면 강제 중단. AI 티는 빼기만 하고 넣지 않는다
|
|
164
|
+
|
|
165
|
+
과소윤문 쪽
|
|
166
|
+
|
|
167
|
+
- S1을 한 건도 못 줄이고 변경도 문턱 아래면 강제 중단. 윤문을 안 한 것이다
|
|
168
|
+
- 절반도 못 줄였으면 경고. 남긴 이유를 summary에 적는다
|
|
169
|
+
- 잔존이 0건이라야 잔존 측면이 통과다. 제거율이 아무리 높아도 남은 게 있으면 경고다
|
|
170
|
+
|
|
171
|
+
**제거율은 탐지기가 있는 룰만 센다.** 0단계의 "직접 확인" 목록에 있는 룰만 고쳤으면
|
|
172
|
+
제거율은 0으로 보인다. 그때 검사 결과는 둘 중 하나다.
|
|
173
|
+
|
|
174
|
+
- 변경도 문턱 아래다 → 윤문을 안 한 것이다. 채택 금지
|
|
175
|
+
- 변경은 문턱을 넘었다 → 경고. 탐지기 밖 룰은 이 검사로 확인되지 않는다
|
|
176
|
+
|
|
177
|
+
**탐지기가 없는 S1은 코드가 판정하지 못한다.** doc 기준 A-16, B-3, C-5, C-8, C-10,
|
|
178
|
+
D-5, J-2 일곱 개다. 네가 그걸 고쳤는지는 측정할 방법이 없다. 그래서 검사는 판정 대신
|
|
179
|
+
측정값만 낸다.
|
|
180
|
+
|
|
181
|
+
그 자리는 자가검증 5번이 맡는다. 경고가 나오면 직접 확인 목록에서 무엇을 고쳤는지
|
|
182
|
+
summary에 적는다. 댈 게 없으면 그건 안 고친 것이라 원문을 그대로 낸다.
|
|
183
|
+
|
|
184
|
+
**검사를 돌렸든 안 돌렸든 기준은 같다.** 경고가 나왔다고 그걸 근거로 채택하고 끝내지
|
|
185
|
+
않는다. 인라인 텍스트라 검사를 못 돌리는 경우에도 판단은 같다 — 탐지 가능한 S1이
|
|
186
|
+
하나도 안 줄었으면 직접 확인 목록에서 무엇을 고쳤는지 댈 수 있을 때만 결과를 낸다.
|
|
187
|
+
|
|
188
|
+
윤문은 "AI 티 제거"가 목적이다. 원문을 더 멋지게 쓰는 작업도 아니고 손대는 시늉만 하는
|
|
189
|
+
작업도 아니다.
|
|
123
190
|
|
|
124
191
|
## 코드 검사 (자가검증 위)
|
|
125
192
|
|
|
126
193
|
위 3단계 자가검증은 스스로 매기는 참고값이다. 원문과 윤문본이 파일로 있으면 판단은 코드에 맡긴다.
|
|
127
194
|
|
|
128
195
|
```bash
|
|
129
|
-
gestalt humanize-check --before <원문> --after <윤문본> --register chat
|
|
196
|
+
gestalt humanize-check --before <원문> --after <윤문본> --register chat --attempt 1
|
|
130
197
|
```
|
|
131
198
|
|
|
132
|
-
변경률, S1
|
|
199
|
+
변경률, S1 제거율, 보호 토큰 생존, 구조 보존, 신규 유입을 각각 측정하고 exit code로 답한다
|
|
133
200
|
(0 통과 / 1 경고 / 2 채택 금지 / 3 판정 불가). 변경률만 보면 구조 편집이 안 보인다 —
|
|
134
201
|
변경률이 3%인데 문장 3할이 갈려나갈 수 있다.
|
|
135
202
|
코드 검사는 정규식으로 오탐 적게 잡을 수 있는 룰만 본다. 의미 판단이 필요한 룰은 모델 자가검증에서
|
|
136
203
|
따로 본다.
|
|
137
204
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
205
|
+
리포트 마지막 줄의 `[다음]`이 다음 행동을 지시한다. 그 지시를 따른다.
|
|
206
|
+
|
|
207
|
+
| 지시 | 할 일 |
|
|
208
|
+
|---|---|
|
|
209
|
+
| `accept` | 윤문본을 채택한다 |
|
|
210
|
+
| `accept-with-warning` | 채택하되 걸린 측면을 summary에 적는다 |
|
|
211
|
+
| `retry` | 윤문본을 버리고 원문에서 다시 윤문한 뒤 `--attempt 2`로 재검사한다 |
|
|
212
|
+
| `fallback` | 재시도를 소진했다. 윤문본을 버리고 **원문을 그대로 낸다** |
|
|
213
|
+
|
|
214
|
+
`fallback`은 실패가 아니라 계약이다. 윤문이 원문보다 나아졌다고 증명하지 못했으면 남는
|
|
215
|
+
선택지는 원문뿐이다. 이때는 D등급과 함께 원문을 돌려준다. 무엇이 막았는지도 적는다.
|
|
216
|
+
|
|
217
|
+
- **판정과 변경률은 검사 출력값이다.** 자가 산출 등급이나 어림한 변경률로 덮어쓰지 않는다.
|
|
218
|
+
자가검증 2번은 검사를 못 돌리는 자리에서만 쓰는 어림값이다.
|
|
141
219
|
- 검사를 못 돌리는 상황(파일 없이 인라인 텍스트만 받은 경우)이면 자가검증만으로 진행하되,
|
|
142
220
|
변경률이 추정값임을 밝힌다.
|
|
143
221
|
|
|
@@ -3,6 +3,8 @@ export interface HumanizeCheckOptions {
|
|
|
3
3
|
after: string;
|
|
4
4
|
register?: string;
|
|
5
5
|
json?: boolean;
|
|
6
|
+
/** 몇 번째 윤문인지. 재시도를 소진하면 원문을 채택하라고 지시한다 */
|
|
7
|
+
attempt?: string | number;
|
|
6
8
|
}
|
|
7
9
|
export declare function humanizeCheckCommand(options: HumanizeCheckOptions): void;
|
|
8
10
|
//# sourceMappingURL=humanize-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-check.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"humanize-check.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAWD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAyBxE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { formatReport, runCheck, EXIT_CODE } from '../../humanize/index.js';
|
|
3
|
+
import { decide, formatReport, parseRegister, parseRuleBook, prescan, runCheck, EXIT_CODE, } from '../../humanize/index.js';
|
|
4
4
|
function read(label, path) {
|
|
5
5
|
const full = resolve(process.cwd(), path);
|
|
6
6
|
if (!existsSync(full)) {
|
|
@@ -10,19 +10,25 @@ function read(label, path) {
|
|
|
10
10
|
return readFileSync(full, 'utf-8');
|
|
11
11
|
}
|
|
12
12
|
export function humanizeCheckCommand(options) {
|
|
13
|
-
const register = options.register
|
|
13
|
+
const register = parseRegister(options.register);
|
|
14
14
|
const before = read('원문', options.before);
|
|
15
15
|
const after = read('윤문본', options.after);
|
|
16
16
|
if (before.trim().length === 0) {
|
|
17
17
|
console.error('원문이 비어 있어 판정할 수 없습니다.');
|
|
18
18
|
process.exit(EXIT_CODE.unknown);
|
|
19
19
|
}
|
|
20
|
-
const
|
|
20
|
+
const attempt = Math.max(1, Number(options.attempt ?? 1) || 1);
|
|
21
|
+
// 룰북은 한 번만 읽어 두 호출이 나눠 쓴다. 각자 부르면 같은 마크다운을 두 번 파싱한다.
|
|
22
|
+
const book = parseRuleBook();
|
|
23
|
+
// 세는 대상은 언제나 원문이다. CLI는 두 파일을 한꺼번에 받아 기준선이 갈릴 일이 없다.
|
|
24
|
+
const baseline = prescan(before, { register, book });
|
|
25
|
+
const report = runCheck(before, after, { register, book, prescanned: baseline.s1ByRule });
|
|
26
|
+
const decision = decide(report, attempt);
|
|
21
27
|
if (options.json) {
|
|
22
|
-
console.log(JSON.stringify(report, null, 2));
|
|
28
|
+
console.log(JSON.stringify({ ...report, attempt, decision }, null, 2));
|
|
23
29
|
}
|
|
24
30
|
else {
|
|
25
|
-
console.log(formatReport(report));
|
|
31
|
+
console.log(formatReport(report, attempt));
|
|
26
32
|
}
|
|
27
33
|
process.exit(report.exitCode);
|
|
28
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-check.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"humanize-check.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,OAAO,EACP,QAAQ,EACR,SAAS,GACV,MAAM,yBAAyB,CAAC;AAWjC,SAAS,IAAI,CAAC,KAAa,EAAE,IAAY;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,cAAc,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA6B;IAChE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,qDAAqD;IACrD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,qDAAqD;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface HumanizeScanOptions {
|
|
2
|
+
file: string;
|
|
3
|
+
register?: string;
|
|
4
|
+
json?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 스캔 결과의 종료 코드.
|
|
8
|
+
*
|
|
9
|
+
* humanize-check 는 판정을 exit code 로 답하는데 scan 만 늘 0 이면 같은 CLI 안에서
|
|
10
|
+
* 계약이 갈린다. AGENT.md 0단계가 "S1 0건이면 윤문하지 않는다"를 분기로 세워 뒀는데
|
|
11
|
+
* 그걸 기계가 읽으려면 stdout 을 파싱해야 했다.
|
|
12
|
+
*
|
|
13
|
+
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다. 걸린 게
|
|
14
|
+
* 있나 없나만 갈라 준다.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SCAN_EXIT: {
|
|
17
|
+
/** 걸린 S1 이 있다. 윤문할 자리다 */
|
|
18
|
+
readonly found: 0;
|
|
19
|
+
/** 탐지기가 가리는 범위에서는 0건이다. 비탐지 룰은 사람이 따로 본다 */
|
|
20
|
+
readonly clean: 10;
|
|
21
|
+
};
|
|
22
|
+
export declare function humanizeScanCommand(options: HumanizeScanOptions): void;
|
|
23
|
+
//# sourceMappingURL=humanize-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"humanize-scan.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS;IACpB,0BAA0B;;IAE1B,4CAA4C;;CAEpC,CAAC;AAEX,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAWtE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { EXIT_CODE, formatScan, parseRegister, scan } from '../../humanize/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* 스캔 결과의 종료 코드.
|
|
6
|
+
*
|
|
7
|
+
* humanize-check 는 판정을 exit code 로 답하는데 scan 만 늘 0 이면 같은 CLI 안에서
|
|
8
|
+
* 계약이 갈린다. AGENT.md 0단계가 "S1 0건이면 윤문하지 않는다"를 분기로 세워 뒀는데
|
|
9
|
+
* 그걸 기계가 읽으려면 stdout 을 파싱해야 했다.
|
|
10
|
+
*
|
|
11
|
+
* scan 은 판정 도구가 아니라 자문 도구라 실패를 뜻하는 코드는 안 낸다. 걸린 게
|
|
12
|
+
* 있나 없나만 갈라 준다.
|
|
13
|
+
*/
|
|
14
|
+
export const SCAN_EXIT = {
|
|
15
|
+
/** 걸린 S1 이 있다. 윤문할 자리다 */
|
|
16
|
+
found: 0,
|
|
17
|
+
/** 탐지기가 가리는 범위에서는 0건이다. 비탐지 룰은 사람이 따로 본다 */
|
|
18
|
+
clean: 10,
|
|
19
|
+
};
|
|
20
|
+
export function humanizeScanCommand(options) {
|
|
21
|
+
const full = resolve(process.cwd(), options.file);
|
|
22
|
+
if (!existsSync(full)) {
|
|
23
|
+
console.error(`파일이 없습니다: ${full}`);
|
|
24
|
+
process.exit(EXIT_CODE.unknown);
|
|
25
|
+
}
|
|
26
|
+
const report = scan(readFileSync(full, 'utf-8'), { register: parseRegister(options.register) });
|
|
27
|
+
console.log(options.json ? JSON.stringify(report, null, 2) : formatScan(report));
|
|
28
|
+
process.exit(report.worthHumanizing ? SCAN_EXIT.found : SCAN_EXIT.clean);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=humanize-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"humanize-scan.js","sourceRoot":"","sources":["../../../../src/cli/commands/humanize-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAQrF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,0BAA0B;IAC1B,KAAK,EAAE,CAAC;IACR,4CAA4C;IAC5C,KAAK,EAAE,EAAE;CACD,CAAC;AAEX,MAAM,UAAU,mBAAmB,CAAC,OAA4B;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEhG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,SAAS,IAAI,OAAO,CAoOnC"}
|
package/dist/src/cli/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { graphVisualizeCommand } from './commands/graph-visualize.js';
|
|
|
9
9
|
import { updateCommand } from './commands/update.js';
|
|
10
10
|
import { usageReportCommand } from './commands/usage-report.js';
|
|
11
11
|
import { humanizeCheckCommand } from './commands/humanize-check.js';
|
|
12
|
+
import { humanizeScanCommand } from './commands/humanize-scan.js';
|
|
12
13
|
import { getVersion } from '../core/version.js';
|
|
13
14
|
import { prCheckoutCommand, prCloseCommand, prCommentCommand, prCommentsCommand, prCreateCommand, prDiffCommand, prEditCommand, prListCommand, prMergeCommand, prReposCommand, prResolveCommand, prReviewCommand, prPruneCommand, prServeCommand, prShowCommand, prUnregisterCommand, prUpdateCommand, } from './commands/pr.js';
|
|
14
15
|
export function createCli() {
|
|
@@ -159,12 +160,22 @@ export function createCli() {
|
|
|
159
160
|
pr.command('unregister <key>')
|
|
160
161
|
.description('그 레포를 웹 UI 목록에서 뺀다. 레포 자체는 안 건드린다')
|
|
161
162
|
.action((key, o, cmd) => prUnregisterCommand({ ...inherited(cmd), ...o, key }));
|
|
163
|
+
program
|
|
164
|
+
.command('humanize-scan')
|
|
165
|
+
.description('원문에서 실제로 걸린 S1 룰만 처방과 함께 추린다 (exit 0 걸림 / 10 없음)')
|
|
166
|
+
.requiredOption('--file <path>', '스캔할 텍스트 파일')
|
|
167
|
+
.option('--register <doc|chat|report>', '어느 말투 기준으로 볼지 (기본 doc)', 'doc')
|
|
168
|
+
.option('--json', '스캔 결과를 JSON으로')
|
|
169
|
+
.action((options) => {
|
|
170
|
+
humanizeScanCommand(options);
|
|
171
|
+
});
|
|
162
172
|
program
|
|
163
173
|
.command('humanize-check')
|
|
164
174
|
.description('Judge a humanized draft against the rulebook (exit 0 pass / 1 warn / 2 abort)')
|
|
165
175
|
.requiredOption('--before <path>', 'Original text file')
|
|
166
176
|
.requiredOption('--after <path>', 'Humanized text file')
|
|
167
177
|
.option('--register <doc|chat|report>', 'Register to judge against (default: doc)', 'doc')
|
|
178
|
+
.option('--attempt <n>', 'Which humanize attempt this is (default: 1)', '1')
|
|
168
179
|
.option('--json', 'Emit the full report as JSON')
|
|
169
180
|
.action((options) => {
|
|
170
181
|
humanizeCheckCommand(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,30 @@
|
|
|
1
|
-
import { type Register, type
|
|
1
|
+
import { type Register, type RuleScanOptions } from './rules.js';
|
|
2
2
|
export type Verdict = 'pass' | 'warn' | 'abort';
|
|
3
3
|
export declare const EXIT_CODE: Record<Verdict | 'unknown', number>;
|
|
4
4
|
export declare const THRESHOLD: {
|
|
5
5
|
readonly changeWarn: 0.3;
|
|
6
6
|
readonly changeAbort: 0.5;
|
|
7
7
|
readonly sentenceDrop: 0.25;
|
|
8
|
+
/** S1을 이만큼도 못 줄이면 경고. 한 건도 못 줄인 쪽은 아래 idleChange 와 함께 본다 */
|
|
9
|
+
readonly s1RemovalWarn: 0.5;
|
|
10
|
+
/**
|
|
11
|
+
* 손을 대긴 했다고 볼 최소 변경률.
|
|
12
|
+
*
|
|
13
|
+
* 제거율만 보면 탐지기가 가리는 룰만 세게 된다. 탐지기 없는 S1(doc 기준 일곱 개)만
|
|
14
|
+
* 제대로 고친 윤문본은 제거율이 0이라 채택 금지로 떨어진다. 원문을 그대로 돌려준
|
|
15
|
+
* 것과 같은 판정을 받는 셈인데, 그쪽은 변경률도 0이라 여기서 갈린다.
|
|
16
|
+
*
|
|
17
|
+
* 이 값으로 가르는 건 "윤문을 아예 안 했나"까지다. 문턱을 넘었다고 제대로 고쳤다는
|
|
18
|
+
* 뜻은 아니다 — 그건 이 검사의 판정 범위 밖이라 경고로 넘긴다.
|
|
19
|
+
*
|
|
20
|
+
* 변경률은 비율이라 문서가 길수록 같은 양의 교정이 낮은 값으로 나온다. 실측하면
|
|
21
|
+
* 한 곳을 고칠 때 2문단에서 20%, 50문단에서 0.75%다. 그래서 문턱 아래라는 게 안
|
|
22
|
+
* 고쳤다는 뜻이 아니다. 문구도 "텍스트가 그대로다"가 아니라 "변경이 문턱 아래다"이다.
|
|
23
|
+
*/
|
|
24
|
+
readonly idleChange: 0.05;
|
|
8
25
|
};
|
|
9
26
|
export interface AxisResult {
|
|
10
|
-
axis: 'change-rate' | 'residual-s1' | 'preservation' | 'structure' | 'report-register';
|
|
27
|
+
axis: 'change-rate' | 'residual-s1' | 'preservation' | 'structure' | 'introduced' | 'report-register';
|
|
11
28
|
verdict: Verdict;
|
|
12
29
|
detail: string;
|
|
13
30
|
evidence?: string[];
|
|
@@ -18,6 +35,10 @@ export interface CheckReport {
|
|
|
18
35
|
exitCode: number;
|
|
19
36
|
changeRate: number;
|
|
20
37
|
changeRateNoMarkup: number;
|
|
38
|
+
/** 원문 대비 S1을 얼마나 걷어냈나. 원문에 S1이 없었으면 1 */
|
|
39
|
+
s1Removal: number;
|
|
40
|
+
s1Before: number;
|
|
41
|
+
s1After: number;
|
|
21
42
|
axes: AxisResult[];
|
|
22
43
|
residualS1: {
|
|
23
44
|
ruleId: string;
|
|
@@ -30,10 +51,57 @@ export interface CheckReport {
|
|
|
30
51
|
after: number;
|
|
31
52
|
}[];
|
|
32
53
|
}
|
|
33
|
-
export interface
|
|
34
|
-
register
|
|
35
|
-
|
|
54
|
+
export interface PrescanReport {
|
|
55
|
+
register: Register;
|
|
56
|
+
/** 이 말투 기준 S1 총 건수 */
|
|
57
|
+
s1Total: number;
|
|
58
|
+
/** 룰 ID별 건수. runCheck 에 그대로 넘겨 기준선으로 쓴다 */
|
|
59
|
+
s1ByRule: Map<string, number>;
|
|
60
|
+
/** 걸리는 게 없으면 윤문할 이유도 없다 */
|
|
61
|
+
worthHumanizing: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 윤문 전에 원문을 훑는다.
|
|
65
|
+
*
|
|
66
|
+
* 두 가지를 한다. 첫째, S1이 0건이면 윤문 자체를 건너뛴다 — 고칠 게 없는 글에
|
|
67
|
+
* 윤문을 돌리면 남는 건 과윤문뿐이다. 둘째, 여기서 센 건수를 runCheck의 prescanned로
|
|
68
|
+
* 넘기면 그 값이 제거율의 기준선이 된다.
|
|
69
|
+
*
|
|
70
|
+
* 비용은 문서 크기가 아니라 걸린 룰 종류 수에 비례한다. scan 을 거치며 라벨과 처방을
|
|
71
|
+
* 조회하지만 그건 걸린 룰마다 한 번씩이라, 2.5KB 와 5MB 사이에서 오버헤드가 커지지 않는다.
|
|
72
|
+
* 룰북이 수백 룰로 자라면 그때 다시 본다.
|
|
73
|
+
*
|
|
74
|
+
* 기준선이 실제로 의미를 가지려면 윤문 전에 불러 그 값을 들고 있어야 한다. 원문과
|
|
75
|
+
* 윤문본을 한꺼번에 받는 자리(예: humanize-check CLI)에서는 검사 시점에 다시 세는
|
|
76
|
+
* 것과 결과가 같다. 그 자리에서 이 함수는 편의일 뿐이다. 기준선이 갈릴 수 있는
|
|
77
|
+
* 흐름은 윤문 파이프라인이 원문을 먼저 훑는 경우다.
|
|
78
|
+
*/
|
|
79
|
+
export declare function prescan(text: string, options?: RuleScanOptions): PrescanReport;
|
|
80
|
+
/** @deprecated rules.ts 의 RuleScanOptions 를 쓴다. 이름이 runCheck 전용처럼 보인다 */
|
|
81
|
+
export type RunCheckOptions = RuleScanOptions;
|
|
82
|
+
export interface RunCheckWithPrescan extends RuleScanOptions {
|
|
83
|
+
/** prescan() 이 센 원문 기준선. 안 넘기면 여기서 다시 센다 */
|
|
84
|
+
prescanned?: ReadonlyMap<string, number>;
|
|
85
|
+
}
|
|
86
|
+
export declare function runCheck(before: string, after: string, options?: RunCheckWithPrescan): CheckReport;
|
|
87
|
+
/** 검사 결과가 지시하는 다음 행동 */
|
|
88
|
+
export type NextAction = 'accept' | 'accept-with-warning' | 'retry' | 'fallback';
|
|
89
|
+
export interface Decision {
|
|
90
|
+
action: NextAction;
|
|
91
|
+
message: string;
|
|
36
92
|
}
|
|
37
|
-
|
|
38
|
-
export declare
|
|
93
|
+
/** 윤문은 한 번만 다시 시킨다. 두 번째도 막히면 원문이 답이다 */
|
|
94
|
+
export declare const MAX_ATTEMPTS = 2;
|
|
95
|
+
/**
|
|
96
|
+
* 검사 결과를 다음 행동으로 옮긴다.
|
|
97
|
+
*
|
|
98
|
+
* "exit 2면 채택하지 않는다"를 문서에만 적어두면 모델이 자기 결과를 스스로
|
|
99
|
+
* 버려야 성립한다. 그건 지켜지지 않는다. 판정과 지시를 코드가 같이 낸다.
|
|
100
|
+
* 실행하는 쪽은 따르기만 한다.
|
|
101
|
+
*
|
|
102
|
+
* 재시도가 소진되면 윤문본을 버리고 원문을 낸다. 윤문이 원문보다 나아졌다고
|
|
103
|
+
* 증명하지 못했으니, 남는 선택지는 원문뿐이다.
|
|
104
|
+
*/
|
|
105
|
+
export declare function decide(report: CheckReport, attempt?: number, maxAttempts?: number): Decision;
|
|
106
|
+
export declare function formatReport(report: CheckReport, attempt?: number): string;
|
|
39
107
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/humanize/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/humanize/check.ts"],"names":[],"mappings":"AAwBA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,EAAE,MAAM,CAKzD,CAAC;AAEF,eAAO,MAAM,SAAS;;;;IAIpB,4DAA4D;;IAE5D;;;;;;;;;;;;;OAaG;;CAEK,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,IAAI,EACA,aAAa,GACb,aAAa,GACb,cAAc,GACd,WAAW,GACX,YAAY,GACZ,iBAAiB,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChE,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACjE;AA0OD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,2BAA2B;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,aAAa,CAWlF;AAED,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC;AAE9C,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,4CAA4C;IAC5C,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,WAAW,CA4Db;AAED,wBAAwB;AACxB,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,qBAAqB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yCAAyC;AACzC,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,MAAU,EACnB,WAAW,GAAE,MAAqB,GACjC,QAAQ,CA8BV;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,MAAU,GAAG,MAAM,CAgB7E"}
|