@tienne/gestalt 0.72.7 → 0.72.9

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.
Files changed (49) hide show
  1. package/CLAUDE.md +11 -4
  2. package/README.ko.md +5 -5
  3. package/README.md +5 -5
  4. package/dist/package.json +1 -1
  5. package/dist/plugin/role-agents/explainer/AGENT.md +71 -0
  6. package/dist/plugin/role-agents/explainer/references/audience.md +147 -0
  7. package/dist/plugin/skills/_shared/agent-delegation.md +1 -1
  8. package/dist/plugin/skills/_shared/proactive-routing.md +2 -0
  9. package/dist/plugin/skills/explain/SKILL.md +179 -0
  10. package/dist/src/cli/commands/explain-check.d.ts +11 -0
  11. package/dist/src/cli/commands/explain-check.d.ts.map +1 -0
  12. package/dist/src/cli/commands/explain-check.js +53 -0
  13. package/dist/src/cli/commands/explain-check.js.map +1 -0
  14. package/dist/src/cli/commands/explain-eval.d.ts +110 -0
  15. package/dist/src/cli/commands/explain-eval.d.ts.map +1 -0
  16. package/dist/src/cli/commands/explain-eval.js +272 -0
  17. package/dist/src/cli/commands/explain-eval.js.map +1 -0
  18. package/dist/src/cli/index.d.ts.map +1 -1
  19. package/dist/src/cli/index.js +26 -0
  20. package/dist/src/cli/index.js.map +1 -1
  21. package/dist/src/explain/audience.d.ts +85 -0
  22. package/dist/src/explain/audience.d.ts.map +1 -0
  23. package/dist/src/explain/audience.js +121 -0
  24. package/dist/src/explain/audience.js.map +1 -0
  25. package/dist/src/explain/check.d.ts +83 -0
  26. package/dist/src/explain/check.d.ts.map +1 -0
  27. package/dist/src/explain/check.js +506 -0
  28. package/dist/src/explain/check.js.map +1 -0
  29. package/dist/src/explain/grounding.d.ts +40 -0
  30. package/dist/src/explain/grounding.d.ts.map +1 -0
  31. package/dist/src/explain/grounding.js +114 -0
  32. package/dist/src/explain/grounding.js.map +1 -0
  33. package/dist/src/explain/index.d.ts +5 -0
  34. package/dist/src/explain/index.d.ts.map +1 -0
  35. package/dist/src/explain/index.js +5 -0
  36. package/dist/src/explain/index.js.map +1 -0
  37. package/dist/src/explain/terms.d.ts +71 -0
  38. package/dist/src/explain/terms.d.ts.map +1 -0
  39. package/dist/src/explain/terms.js +266 -0
  40. package/dist/src/explain/terms.js.map +1 -0
  41. package/package.json +1 -1
  42. package/plugin/.codex-plugin/plugin.json +1 -1
  43. package/plugin/.mcp.json +1 -1
  44. package/plugin/mcp.json +1 -1
  45. package/plugin/role-agents/explainer/AGENT.md +71 -0
  46. package/plugin/role-agents/explainer/references/audience.md +147 -0
  47. package/plugin/skills/_shared/agent-delegation.md +1 -1
  48. package/plugin/skills/_shared/proactive-routing.md +2 -0
  49. package/plugin/skills/explain/SKILL.md +179 -0
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod';
2
+ import type { LLMAdapter } from '../../llm/types.js';
3
+ import { type Audience, type ExplainAxis, type Verdict } from '../../explain/index.js';
4
+ export declare const DEFAULT_CASES_PATH = "evals/explain-cases.json";
5
+ declare const caseSchema: z.ZodObject<{
6
+ id: z.ZodString;
7
+ title: z.ZodString;
8
+ audience: z.ZodEnum<[Audience, ...Audience[]]>;
9
+ source: z.ZodString;
10
+ assertions: z.ZodDefault<z.ZodObject<{
11
+ mustMention: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
12
+ mustAvoid: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ mustMention: string[];
15
+ mustAvoid: string[];
16
+ }, {
17
+ mustMention?: string[] | undefined;
18
+ mustAvoid?: string[] | undefined;
19
+ }>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ id: string;
22
+ title: string;
23
+ audience: Audience;
24
+ source: string;
25
+ assertions: {
26
+ mustMention: string[];
27
+ mustAvoid: string[];
28
+ };
29
+ }, {
30
+ id: string;
31
+ title: string;
32
+ audience: Audience;
33
+ source: string;
34
+ assertions?: {
35
+ mustMention?: string[] | undefined;
36
+ mustAvoid?: string[] | undefined;
37
+ } | undefined;
38
+ }>;
39
+ export type EvalCase = z.infer<typeof caseSchema>;
40
+ /** 결정론 여섯 축에 케이스별 어서션과 심판 축을 더한 것 */
41
+ export type EvalAxis = ExplainAxis | 'assertions';
42
+ export declare const EVAL_AXES: readonly EvalAxis[];
43
+ /** explain-check 의 AxisResult 에 케이스 어서션 축을 더한 꼴 */
44
+ export interface EvalAxisResult {
45
+ axis: EvalAxis;
46
+ verdict: Verdict;
47
+ detail: string;
48
+ evidence?: string[];
49
+ }
50
+ export interface CaseResult {
51
+ caseId: string;
52
+ variant: string;
53
+ explanation: string;
54
+ axes: EvalAxisResult[];
55
+ verdict: Verdict;
56
+ }
57
+ export interface AxisRate {
58
+ axis: EvalAxis;
59
+ a: number;
60
+ b: number;
61
+ delta: number;
62
+ }
63
+ export interface Summary {
64
+ cases: number;
65
+ labels: {
66
+ a: string;
67
+ b: string;
68
+ };
69
+ axes: AxisRate[];
70
+ overall: {
71
+ a: number;
72
+ b: number;
73
+ delta: number;
74
+ };
75
+ }
76
+ export declare function loadCases(path: string): EvalCase[];
77
+ /**
78
+ * 케이스가 직접 적은 기대. 축 여섯이 못 보는 자리를 케이스마다 따로 잡는다.
79
+ *
80
+ * 있어야 할 말과 있으면 안 되는 말만 본다. 이걸 늘리기 시작하면 케이스 파일이 두 번째
81
+ * 룰북이 되므로 두 갈래로 묶어 둔다.
82
+ */
83
+ export declare function scoreAssertions(explanation: string, testCase: EvalCase): EvalAxisResult;
84
+ /** --b 를 안 주면 이 자리가 베이스라인이다. 에이전트 프롬프트 없이 그냥 시킨다 */
85
+ export declare const BASELINE_PROMPT = "\uB2E4\uC74C \uB0B4\uC6A9\uC744 \uC77D\uB294 \uC0AC\uB78C\uC5D0\uAC8C \uC124\uBA85\uD558\uC138\uC694.";
86
+ export declare const BASELINE_LABEL = "baseline";
87
+ export declare function readVariant(path?: string): {
88
+ label: string;
89
+ prompt: string;
90
+ };
91
+ export declare function runVariant(adapter: LLMAdapter, variant: {
92
+ label: string;
93
+ prompt: string;
94
+ }, cases: readonly EvalCase[], options: {
95
+ judge: boolean;
96
+ }): Promise<CaseResult[]>;
97
+ export declare function aggregate(labels: {
98
+ a: string;
99
+ b: string;
100
+ }, a: readonly CaseResult[], b: readonly CaseResult[]): Summary;
101
+ export declare function formatSummary(summary: Summary): string;
102
+ export interface ExplainEvalOptions {
103
+ a: string;
104
+ b?: string;
105
+ cases?: string;
106
+ json?: boolean;
107
+ }
108
+ export declare function explainEvalCommand(options: ExplainEvalOptions): Promise<void>;
109
+ export {};
110
+ //# sourceMappingURL=explain-eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-eval.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/explain-eval.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAOL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,OAAO,EACb,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,kBAAkB,6BAA6B,CAAC;AAE7D,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWd,CAAC;AAOH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAElD,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAsD,CAAC;AAEhG,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAcD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAQlD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAgBvF;AAOD,oDAAoD;AACpD,eAAO,MAAM,eAAe,0GAA0B,CAAC;AACvD,eAAO,MAAM,cAAc,aAAa,CAAC;AAkEzC,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAK5E;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,OAAO,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CAmCvB;AA0BD,wBAAgB,SAAS,CACvB,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,CAAC,EAAE,SAAS,UAAU,EAAE,EACxB,CAAC,EAAE,SAAS,UAAU,EAAE,GACvB,OAAO,CAgBT;AAYD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAmBtD;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCnF"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * 설명 프롬프트 두 벌을 같은 케이스로 돌려 비교한다.
3
+ *
4
+ * ELI5 의 run-evals.py 가 참고 대상인데 저쪽은 채점이 전부 심판 모델이라 같은 답에 다른
5
+ * 점수가 나온다. 여기서는 EVAL_AXES 일곱 중 여섯이 결정론이라 **채점이** 재현된다 —
6
+ * 같은 설명문을 두 번 채점하면 같은 점수가 나온다. 심판이 필요한 자리는 사실 정확도 하나다.
7
+ *
8
+ * 재현되는 건 채점까지다. 설명문을 만드는 쪽은 모델이라 같은 프롬프트로도 답이 흔들린다.
9
+ * 케이스가 적으면 그 흔들림이 축별 통과율의 눈금보다 커질 수 있으니, 프롬프트를 고쳤을 때
10
+ * 움직인 숫자를 읽을 때는 케이스 수를 함께 본다.
11
+ */
12
+ import matter from 'gray-matter';
13
+ import { existsSync, realpathSync } from 'node:fs';
14
+ import { dirname, isAbsolute, relative, resolve } from 'node:path';
15
+ import { z } from 'zod';
16
+ import { loadConfig } from '../../core/config.js';
17
+ import { isReadFailure, readInput } from '../../humanize/read-input.js';
18
+ import { createAdapter } from '../../llm/factory.js';
19
+ import { AUDIENCES, DETERMINISTIC_AXES, EXIT_CODE, judgeAccuracy, presetOf, runExplainCheck, } from '../../explain/index.js';
20
+ export const DEFAULT_CASES_PATH = 'evals/explain-cases.json';
21
+ const caseSchema = z.object({
22
+ id: z.string().min(1),
23
+ title: z.string().min(1),
24
+ audience: z.enum(AUDIENCES),
25
+ source: z.string().min(1),
26
+ assertions: z
27
+ .object({
28
+ mustMention: z.array(z.string()).default([]),
29
+ mustAvoid: z.array(z.string()).default([]),
30
+ })
31
+ .default({ mustMention: [], mustAvoid: [] }),
32
+ });
33
+ const fileSchema = z.object({
34
+ version: z.literal(1),
35
+ cases: z.array(caseSchema).min(1),
36
+ });
37
+ export const EVAL_AXES = [...DETERMINISTIC_AXES, 'assertions', 'accuracy'];
38
+ /**
39
+ * 파일을 읽는 자리는 explain-check 와 같은 문을 쓴다.
40
+ *
41
+ * readFileSync 를 직접 부르면 2MB 상한과 파일 종류 검사가 안 걸린다. 한쪽만 막으면
42
+ * 다른 쪽이 우회로가 된다고 read-input.ts 가 적어둔 바로 그 자리다.
43
+ */
44
+ function read(label, path) {
45
+ const input = readInput(path, label);
46
+ if (isReadFailure(input))
47
+ throw new Error(input.message);
48
+ return input;
49
+ }
50
+ export function loadCases(path) {
51
+ const full = resolve(process.cwd(), path);
52
+ const parsed = fileSchema.safeParse(JSON.parse(read('케이스 파일', path)));
53
+ if (!parsed.success) {
54
+ const issues = parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
55
+ throw new Error(`케이스 파일이 형식에 안 맞습니다: ${full}\n${issues.join('\n')}`);
56
+ }
57
+ return parsed.data.cases;
58
+ }
59
+ /**
60
+ * 케이스가 직접 적은 기대. 축 여섯이 못 보는 자리를 케이스마다 따로 잡는다.
61
+ *
62
+ * 있어야 할 말과 있으면 안 되는 말만 본다. 이걸 늘리기 시작하면 케이스 파일이 두 번째
63
+ * 룰북이 되므로 두 갈래로 묶어 둔다.
64
+ */
65
+ export function scoreAssertions(explanation, testCase) {
66
+ const missing = testCase.assertions.mustMention.filter((word) => !explanation.includes(word));
67
+ const banned = testCase.assertions.mustAvoid.filter((word) => explanation.includes(word));
68
+ if (missing.length === 0 && banned.length === 0) {
69
+ return { axis: 'assertions', verdict: 'pass', detail: '어서션 통과' };
70
+ }
71
+ return {
72
+ axis: 'assertions',
73
+ verdict: 'abort',
74
+ detail: `어서션 ${missing.length + banned.length}건 실패`,
75
+ evidence: [
76
+ ...missing.map((word) => `빠짐: ${word}`),
77
+ ...banned.map((word) => `있으면 안 됨: ${word}`),
78
+ ],
79
+ };
80
+ }
81
+ const SYSTEM_TAIL = (audience) => {
82
+ const preset = presetOf(audience);
83
+ return `\n\n[대상] ${audience} — ${preset.who}\n어미는 ${preset.register === 'polite' ? '해요체' : '합니다체'}로 끝까지 간다. 설명문만 출력한다.`;
84
+ };
85
+ /** --b 를 안 주면 이 자리가 베이스라인이다. 에이전트 프롬프트 없이 그냥 시킨다 */
86
+ export const BASELINE_PROMPT = '다음 내용을 읽는 사람에게 설명하세요.';
87
+ export const BASELINE_LABEL = 'baseline';
88
+ /**
89
+ * AGENT.md 본문이 가리키는 마크다운 링크. 첫 등장 순서를 지킨다.
90
+ *
91
+ * 콜론을 뺀 건 원격 주소를 거르려고 그런다. 앵커는 붙어 있어도 파일만 뽑는다.
92
+ */
93
+ const MARKDOWN_LINK = /\]\(([^)\s:]+\.md)(?:#[^)\s]*)?\)/g;
94
+ /**
95
+ * 에이전트가 실제로 읽는 것까지 함께 싣는다.
96
+ *
97
+ * explainer 본문의 첫 지시가 references/audience.md 를 작성 전에 읽으라고 한다. 그런데
98
+ * eval 은 chat 을 한 번 부를 뿐이라 그 파일을 못 읽는다. 본문만 넘기면 A 는 룰북이 빠진
99
+ * 채로 겨루고 delta 가 "이 에이전트를 쓰면 나아진다"의 근거가 못 된다.
100
+ *
101
+ * 그래서 본문의 상대 링크를 따라가 그 마크다운을 프롬프트에 붙인다. 한 겹만 따라간다 —
102
+ * 참조의 참조까지 열면 공유 룰북 전체가 딸려 와 무엇을 재는지 흐려진다.
103
+ */
104
+ /**
105
+ * 그 경로가 허용된 자리 안인지 본다.
106
+ *
107
+ * 변형 파일은 밖에서 받은 AGENT.md 후보일 수 있다. 링크를 그대로 따라가면 레포 밖 마크다운을
108
+ * 읽어 LLM 프롬프트에 실어 보낸다 — 리뷰에서 실제로 재현됐다. 심링크도 realpath 로 풀어
109
+ * 같은 기준을 적용한다. 안 풀면 레포 안 파일인 척하는 링크 하나로 그대로 새어 나간다.
110
+ */
111
+ function withinRoots(roots, candidate) {
112
+ let real;
113
+ try {
114
+ real = realpathSync(candidate);
115
+ }
116
+ catch {
117
+ return false;
118
+ }
119
+ return roots.some((root) => {
120
+ const rel = relative(root, real);
121
+ return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
122
+ });
123
+ }
124
+ /** 심링크를 미리 풀어 둔다. macOS 의 /tmp 처럼 루트 자신이 링크면 비교가 어긋난다 */
125
+ function realOrSelf(path) {
126
+ try {
127
+ return realpathSync(path);
128
+ }
129
+ catch {
130
+ return path;
131
+ }
132
+ }
133
+ function inlineReferences(prompt, from) {
134
+ const base = dirname(from);
135
+ // 레포 안 AGENT.md 는 ../_shared/ 를 정당하게 가리키므로 cwd 아래를 함께 연다.
136
+ // 밖에서 받은 변형 파일은 자기 디렉토리 아래만 열린다
137
+ const roots = [realOrSelf(process.cwd()), realOrSelf(base)];
138
+ const seen = new Set();
139
+ const blocks = [];
140
+ for (const [, target] of prompt.matchAll(MARKDOWN_LINK)) {
141
+ const full = resolve(base, target);
142
+ if (seen.has(full) || !existsSync(full) || !withinRoots(roots, full))
143
+ continue;
144
+ seen.add(full);
145
+ blocks.push(`\n\n=== ${target} ===\n${read(target, full)}`);
146
+ }
147
+ return prompt + blocks.join('');
148
+ }
149
+ export function readVariant(path) {
150
+ if (!path)
151
+ return { label: BASELINE_LABEL, prompt: BASELINE_PROMPT };
152
+ const full = resolve(process.cwd(), path);
153
+ const { content } = matter(read('변형 파일', full));
154
+ return { label: path, prompt: inlineReferences(content.trim(), full) };
155
+ }
156
+ export async function runVariant(adapter, variant, cases, options) {
157
+ const results = [];
158
+ for (const testCase of cases) {
159
+ const response = await adapter.chat({
160
+ system: variant.prompt + SYSTEM_TAIL(testCase.audience),
161
+ messages: [{ role: 'user', content: testCase.source }],
162
+ temperature: 0.3,
163
+ maxTokens: 2048,
164
+ });
165
+ const explanation = response.content.trim();
166
+ const report = runExplainCheck(testCase.source, explanation, { audience: testCase.audience });
167
+ const axes = [...report.axes, scoreAssertions(explanation, testCase)];
168
+ if (options.judge) {
169
+ axes.push(await judgeAccuracy(adapter, {
170
+ source: testCase.source,
171
+ explanation,
172
+ audience: testCase.audience,
173
+ }));
174
+ }
175
+ results.push({
176
+ caseId: testCase.id,
177
+ variant: variant.label,
178
+ explanation,
179
+ axes,
180
+ verdict: worstOf(axes.map((a) => a.verdict)),
181
+ });
182
+ }
183
+ return results;
184
+ }
185
+ const WORST = { pass: 0, warn: 1, abort: 2 };
186
+ function worstOf(verdicts) {
187
+ return verdicts.reduce((acc, v) => (WORST[v] > WORST[acc] ? v : acc), 'pass');
188
+ }
189
+ /**
190
+ * 그 축을 실제로 잰 케이스만 분모에 넣는다.
191
+ *
192
+ * 심판을 안 태운 판에서 accuracy 가 0%로 보이면 안 된다. coverage 도 같다 — 용어를 금지한
193
+ * 대상은 축이 꺼져 있어도 결과를 하나 내는데, 그걸 분모에 넣으면 통과율에 바닥이 생겨
194
+ * 실제로 잰 케이스의 변화가 절반으로 눌린다. 안 잰 자리는 detail 이 그렇게 말한다.
195
+ */
196
+ const NOT_MEASURED = /안 (?:본다|잰다)/;
197
+ function passRate(results, axis) {
198
+ const scored = results.filter((r) => r.axes.some((a) => a.axis === axis && !NOT_MEASURED.test(a.detail)));
199
+ if (scored.length === 0)
200
+ return 0;
201
+ const passed = scored.filter((r) => r.axes.some((a) => a.axis === axis && a.verdict === 'pass'));
202
+ return passed.length / scored.length;
203
+ }
204
+ export function aggregate(labels, a, b) {
205
+ const axes = EVAL_AXES.map((axis) => {
206
+ const left = passRate(a, axis);
207
+ const right = passRate(b, axis);
208
+ return { axis, a: left, b: right, delta: right - left };
209
+ });
210
+ const overallA = a.length === 0 ? 0 : a.filter((r) => r.verdict === 'pass').length / a.length;
211
+ const overallB = b.length === 0 ? 0 : b.filter((r) => r.verdict === 'pass').length / b.length;
212
+ return {
213
+ cases: Math.max(a.length, b.length),
214
+ labels,
215
+ axes,
216
+ overall: { a: overallA, b: overallB, delta: overallB - overallA },
217
+ };
218
+ }
219
+ function pct(value) {
220
+ return `${(value * 100).toFixed(0)}%`;
221
+ }
222
+ function signed(value) {
223
+ const text = pct(Math.abs(value));
224
+ if (value === 0)
225
+ return ' 0%';
226
+ return value > 0 ? `+${text}` : `-${text}`;
227
+ }
228
+ export function formatSummary(summary) {
229
+ const lines = [
230
+ `케이스 ${summary.cases}개`,
231
+ `A = ${summary.labels.a}`,
232
+ `B = ${summary.labels.b}`,
233
+ '',
234
+ '항목 A B 차이',
235
+ ];
236
+ for (const row of summary.axes) {
237
+ lines.push(`${row.axis.padEnd(12)} ${pct(row.a).padStart(4)} ${pct(row.b).padStart(4)} ${signed(row.delta)}`);
238
+ }
239
+ lines.push('', `전체 통과 ${pct(summary.overall.a).padStart(4)} ${pct(summary.overall.b).padStart(4)} ${signed(summary.overall.delta)}`);
240
+ return lines.join('\n');
241
+ }
242
+ export async function explainEvalCommand(options) {
243
+ let cases;
244
+ try {
245
+ cases = loadCases(options.cases ?? DEFAULT_CASES_PATH);
246
+ }
247
+ catch (error) {
248
+ console.error(error instanceof Error ? error.message : String(error));
249
+ process.exit(EXIT_CODE.unknown);
250
+ }
251
+ const config = loadConfig();
252
+ if (!config.llm.apiKey) {
253
+ console.error('설명본을 만들려면 API 키가 필요합니다. 결정론 축도 채점할 대상이 없습니다.');
254
+ process.exit(EXIT_CODE.unknown);
255
+ }
256
+ const adapter = createAdapter(config.llm);
257
+ const left = readVariant(options.a);
258
+ const right = readVariant(options.b);
259
+ // 설명본을 만드느라 이미 모델을 부르는 자리라 심판은 옵트인으로 두지 않는다.
260
+ // 플래그를 늘리는 대신 사실 정확도를 항상 잰다
261
+ const a = await runVariant(adapter, left, cases, { judge: true });
262
+ const b = await runVariant(adapter, right, cases, { judge: true });
263
+ const summary = aggregate({ a: left.label, b: right.label }, a, b);
264
+ if (options.json) {
265
+ console.log(JSON.stringify({ summary, results: { a, b } }, null, 2));
266
+ }
267
+ else {
268
+ console.log(formatSummary(summary));
269
+ }
270
+ process.exit(summary.overall.b < summary.overall.a ? EXIT_CODE.warn : EXIT_CODE.pass);
271
+ }
272
+ //# sourceMappingURL=explain-eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-eval.js","sourceRoot":"","sources":["../../../../src/cli/commands/explain-eval.ts"],"names":[],"mappings":"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"}
@@ -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;AAiCpC,wBAAgB,SAAS,IAAI,OAAO,CAoOnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,wBAAgB,SAAS,IAAI,OAAO,CAuQnC"}
@@ -10,6 +10,8 @@ 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
12
  import { humanizeScanCommand } from './commands/humanize-scan.js';
13
+ import { explainCheckCommand } from './commands/explain-check.js';
14
+ import { DEFAULT_CASES_PATH, explainEvalCommand } from './commands/explain-eval.js';
13
15
  import { getVersion } from '../core/version.js';
14
16
  import { prCheckoutCommand, prCloseCommand, prCommentCommand, prCommentsCommand, prCreateCommand, prDiffCommand, prEditCommand, prListCommand, prMergeCommand, prReposCommand, prResolveCommand, prReviewCommand, prPruneCommand, prServeCommand, prShowCommand, prUnregisterCommand, prUpdateCommand, } from './commands/pr.js';
15
17
  export function createCli() {
@@ -180,6 +182,30 @@ export function createCli() {
180
182
  .action((options) => {
181
183
  humanizeCheckCommand(options);
182
184
  });
185
+ program
186
+ .command('explain-check')
187
+ .description('설명본이 그 대상에게 읽히는 글인지 판정한다 (exit 0 통과 / 1 경고 / 2 중단)')
188
+ .requiredOption('--source <path>', '설명하려는 원문 파일')
189
+ .requiredOption('--explain <path>', '설명본 파일')
190
+ // 기본값을 여기 안 적는다. commander 가 채우면 audience.ts 의 DEFAULT_AUDIENCE 가
191
+ // CLI 경로에서 죽은 코드가 되고 기본값이 두 자리로 갈린다
192
+ .option('--audience <nontech|junior|peer|manager|exec|outsider>', '누가 읽는지 (기본 peer)')
193
+ .option('--judge', '사실 정확도 축을 심판 모델에게 맡긴다 (나머지 여섯 축은 항상 코드가 잰다)')
194
+ .option('--attempt <n>', '몇 번째 설명본인지 (기본 1)', '1')
195
+ .option('--json', '판정 결과를 JSON으로')
196
+ .action(async (options) => {
197
+ await explainCheckCommand(options);
198
+ });
199
+ program
200
+ .command('explain-eval')
201
+ .description('설명 프롬프트 두 벌을 같은 케이스로 돌려 항목별 통과율을 비교한다')
202
+ .requiredOption('--a <path>', '기준이 되는 AGENT.md')
203
+ .option('--b <path>', '비교할 AGENT.md. 비우면 에이전트 없이 돌린 베이스라인과 비교한다')
204
+ .option('--cases <path>', `케이스 파일 (기본 ${DEFAULT_CASES_PATH})`)
205
+ .option('--json', '결과를 JSON으로')
206
+ .action(async (options) => {
207
+ await explainEvalCommand(options);
208
+ });
183
209
  program
184
210
  .command('usage-report')
185
211
  .description('Show event frequency report grouped by event type')
@@ -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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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 설명 대상 프리셋.
3
+ *
4
+ * 여섯 값이 용어 허용치와 문장 길이, 원문 핵심어를 얼마나 남겨야 하는지, 비유가 필요한지,
5
+ * 어미를 무엇으로 끝낼지를 한꺼번에 정한다. 사람이 읽는 기준은
6
+ * `plugin/role-agents/explainer/references/audience.md`가 말로 정하고 숫자는 이 파일이 갖는다.
7
+ * 두 곳에 같은 숫자를 적으면 갈라지므로 문서는 방향을, 코드는 값을 든다.
8
+ *
9
+ * 임계값이 프리셋마다 다른 이유는 설명이 잘될수록 원문에서 멀어지기 때문이다. 같은 잣대를
10
+ * 들이대면 `outsider`용 좋은 설명이 `peer` 기준으로는 내용을 버린 글이 된다.
11
+ */
12
+ export type Audience = 'nontech' | 'junior' | 'peer' | 'manager' | 'exec' | 'outsider';
13
+ export declare const AUDIENCES: readonly Audience[];
14
+ /**
15
+ * 대상을 안 밝히면 동료 개발자로 본다.
16
+ *
17
+ * 개발 레포 안에서 `outsider`를 기본으로 잡으면 옆자리 개발자에게 일상 비유를 늘어놓는
18
+ * 글이 나간다. 반대 방향 실수가 훨씬 싸다.
19
+ */
20
+ export declare const DEFAULT_AUDIENCE: Audience;
21
+ /** 원문에서 핵심어로 볼 상위 몇 개 */
22
+ export declare const CORE_TERM_COUNT = 5;
23
+ /** 비유가 필요한 정도. required 는 없으면 채택 금지, recommended 는 경고 */
24
+ export type AnalogyRule = 'required' | 'recommended' | 'off';
25
+ /** polite 는 해요체, formal 은 합니다체 */
26
+ export type Register = 'polite' | 'formal';
27
+ /**
28
+ * 상한을 재는 축은 warn 을 넘으면 경고이고 abort 를 넘으면 채택 금지다.
29
+ * 하한을 재는 축(coverage)은 방향이 반대라 warn 아래가 경고이고 abort 아래가 채택 금지다.
30
+ */
31
+ export interface Band {
32
+ warn: number;
33
+ abort: number;
34
+ }
35
+ /**
36
+ * coverage 를 안 재는 대상.
37
+ *
38
+ * audience.md 가 용어를 전면 금지한 대상에게 핵심어를 남기라고 요구하면 두 규칙이 정면으로
39
+ * 부딪힌다. 시킨 대로 쓰면 검사에 걸리고 안 걸리려면 룰북을 어겨야 하는 자리가 생긴다.
40
+ * 그 대상은 축을 끈다. 사실이 틀렸는지는 `--judge` 의 accuracy 가 보는데 그건 기본으로
41
+ * 안 켜지므로, 기본 실행에서 그 세 대상의 내용 정합을 판정하는 축은 없다.
42
+ */
43
+ export type CoverageRule = Band | 'off';
44
+ export interface AudiencePreset {
45
+ audience: Audience;
46
+ who: string;
47
+ /** 풀이 없이 남은 전문용어 밀도. 출현 수를 설명본 어절 수로 나눈 값 */
48
+ jargon: Band;
49
+ /** 평균 문장 길이. 글자 수로 센다 */
50
+ sentence: Band;
51
+ /** 원문 핵심어 중 다뤄야 하는 최소 비율. 용어를 금지한 대상은 'off' */
52
+ coverage: CoverageRule;
53
+ analogy: AnalogyRule;
54
+ register: Register;
55
+ }
56
+ /**
57
+ * 숫자를 고를 때 쓴 기준.
58
+ *
59
+ * 이 값들은 audience.md 의 프리셋 표에서 옮겨온 게 아니다. 그 표는 용어와 비유, 깊이를
60
+ * 말로 정하고 숫자는 여기서 처음 정해진다 — 두 곳에 같은 숫자를 적으면 갈라지므로
61
+ * 문서는 방향을, 코드는 값을 갖는다. 값을 바꿀 때 대조할 곳은 아래 근거지 문서가 아니다.
62
+ *
63
+ * **jargon** — nontech 과 exec 는 어절 200개에 풀이 없는 용어가 하나 나오면 경고(0.005)다.
64
+ * 그보다 잦으면 풀이를 빠뜨린 것이다. outsider 는 그보다 엄격해 하나만 나와도 바로
65
+ * 경고(warn 0)다 — 룰북이 그 대상에게는 우회할 수 없으면 그 얘기를 빼라고 적어서다.
66
+ * peer 는 반대로 거의 안 걸려야 한다 — 재보면 동료용 짧은 문장 하나에 용어 셋이 30%
67
+ * 근처라 그 위(0.35)에 둔다.
68
+ *
69
+ * **sentence** — 기준은 peer 의 70자다. 한글 산문에서 그쯤이면 한 번에 읽히는 끝이다.
70
+ * outsider 는 그 절반(35)이고 나머지는 사이에 둔다.
71
+ *
72
+ * **coverage** — 용어를 허용한 대상만 잰다. 핵심어를 다섯 개 잡으므로 0.6 은 셋, 0.8 은
73
+ * 넷이다. peer 는 넷을 요구하고 manager 는 절반이면 된다. 나머지 셋은 아래 CoverageRule
74
+ * 주석대로 축을 끈다.
75
+ */
76
+ export declare const PRESETS: Record<Audience, AudiencePreset>;
77
+ export declare function isAudience(value: string): value is Audience;
78
+ /**
79
+ * 값이 없으면 기본값, 모르는 값이면 undefined. 종료 코드는 부르는 쪽이 정한다.
80
+ *
81
+ * 빈 문자열도 안 준 것으로 본다. commander 가 `--audience` 를 값 없이 받으면 그 꼴로 온다.
82
+ */
83
+ export declare function parseAudience(value?: string): Audience | undefined;
84
+ export declare function presetOf(audience: Audience): AudiencePreset;
85
+ //# sourceMappingURL=audience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../../../src/explain/audience.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvF,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAOxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAiB,CAAC;AAEjD,yBAAyB;AACzB,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK,CAAC;AAE7D,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,KAAK,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,MAAM,EAAE,IAAI,CAAC;IACb,yBAAyB;IACzB,QAAQ,EAAE,IAAI,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,cAAc,CAuDpD,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAGlE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAE3D"}