@tienne/gestalt 0.77.1 → 0.78.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/dist/package.json +1 -1
- package/dist/plugin/skills/_shared/proactive-routing.md +39 -2
- package/dist/plugin/skills/_shared/rule-sources.md +262 -0
- package/dist/plugin/skills/execute/SKILL.md +81 -1
- package/dist/plugin/skills/interview/SKILL.md +53 -0
- package/dist/plugin/skills/review/SKILL.md +14 -1
- package/dist/plugin/skills/solve/SKILL.md +34 -1
- package/dist/plugin/skills/spec/SKILL.md +36 -0
- package/dist/schemas/gestalt.schema.json +65 -0
- package/dist/src/core/config.d.ts +156 -2
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +454 -10
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/mcp/input-guard.d.ts +90 -0
- package/dist/src/mcp/input-guard.d.ts.map +1 -0
- package/dist/src/mcp/input-guard.js +531 -0
- package/dist/src/mcp/input-guard.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +70 -70
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +31 -22
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +32 -23
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/status.d.ts +14 -2
- package/dist/src/mcp/tools/status.d.ts.map +1 -1
- package/dist/src/mcp/tools/status.js +41 -8
- package/dist/src/mcp/tools/status.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/_shared/proactive-routing.md +39 -2
- package/plugin/skills/_shared/rule-sources.md +262 -0
- package/plugin/skills/execute/SKILL.md +81 -1
- package/plugin/skills/interview/SKILL.md +53 -0
- package/plugin/skills/review/SKILL.md +14 -1
- package/plugin/skills/solve/SKILL.md +34 -1
- package/plugin/skills/spec/SKILL.md +36 -0
- package/schemas/gestalt.schema.json +65 -0
package/dist/src/core/config.js
CHANGED
|
@@ -33,6 +33,268 @@ const executeConfigSchema = z.object({
|
|
|
33
33
|
/** 호스트 Agent 도구가 받는 모델 별칭. API 모델 ID(llm.model)와는 층위가 다르다. */
|
|
34
34
|
const agentModelAliasSchema = z.enum(['fable', 'opus', 'sonnet', 'haiku']);
|
|
35
35
|
const reasoningModelSchema = agentModelAliasSchema;
|
|
36
|
+
/** .env, .env.local, prod.env. env.md 처럼 env 를 설명하는 문서는 안 걸린다 */
|
|
37
|
+
const ENV_FILE_REF = /(^|\/)(\.env(\.[^/]*)?|[^/]*\.env)$/i;
|
|
38
|
+
/**
|
|
39
|
+
* 레포 안이어도 기준 문서일 리 없는 자리.
|
|
40
|
+
*
|
|
41
|
+
* 레포 밖을 막는 검사만으로는 부족하다. 남의 레포를 검사하러 들어갔을 때 그쪽
|
|
42
|
+
* gestalt.json 이 자기 `.env` 를 "조직 컨벤션"으로 선언하면, 스킬이 그걸 읽어
|
|
43
|
+
* "적용한 기준"으로 보고에 옮겨 적는다.
|
|
44
|
+
*
|
|
45
|
+
* 한 줄짜리 정규식으로 두면 항목을 더할 때마다 읽기 어려워져서 배열로 나눠 둔다.
|
|
46
|
+
*/
|
|
47
|
+
const SECRET_FILE_REFS = [
|
|
48
|
+
ENV_FILE_REF, // 위에 따로 선언돼 있다 — 예외를 이 패턴 하나에만 걸어야 해서다
|
|
49
|
+
/(^|\/)\.(git|ssh|aws|kube|docker|gnupg)\//i,
|
|
50
|
+
/(^|\/)(\.npmrc|\.netrc|\.pgpass|\.envrc|\.htpasswd)$/i,
|
|
51
|
+
// 뒤에 .pub 까지만 붙는다. id_rsa-rotation.md 같은 설명 문서는 안 걸린다
|
|
52
|
+
/(^|\/)id_(rsa|dsa|ecdsa|ed25519)(\.pub)?$/i,
|
|
53
|
+
/\.(pem|key|p8|p12|pfx|der|cer|ppk|jks|keystore|kdbx)$/i,
|
|
54
|
+
/(^|\/)(credentials|secrets?)(\.(json|ya?ml|toml))?$/i,
|
|
55
|
+
];
|
|
56
|
+
/**
|
|
57
|
+
* `.env` 패턴에만 걸리는 예외.
|
|
58
|
+
*
|
|
59
|
+
* `.env.example` 은 값이 아니라 **키 목록**이라 레포에 커밋된다. 무엇을 채워야 하는지
|
|
60
|
+
* 적힌 파일이라 규칙 소스로 선언할 이유가 오히려 크다.
|
|
61
|
+
*/
|
|
62
|
+
const SECRET_FILE_ALLOW = /(^|\/)[^/]*\.env\.(example|sample|template|dist)$/i;
|
|
63
|
+
/** 거부 목록과 그 예외를 함께 판정한다 */
|
|
64
|
+
function isSecretRef(ref) {
|
|
65
|
+
const matched = SECRET_FILE_REFS.filter((pattern) => pattern.test(ref));
|
|
66
|
+
if (matched.length === 0)
|
|
67
|
+
return false;
|
|
68
|
+
// 예외는 .env 패턴 하나에만 건다. 목록 전체를 건너뛰게 두면 `.ssh/id_rsa.env.example`
|
|
69
|
+
// 이 예외를 타고 빠져나간다 — 이름 끝을 맞추는 것만으로 검사를 끌 수 있으면 안 된다
|
|
70
|
+
const onlyEnv = matched.length === 1 && matched[0] === ENV_FILE_REF;
|
|
71
|
+
return !(onlyEnv && SECRET_FILE_ALLOW.test(ref));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 위 목록에 걸기 전에 경로를 맞춘다.
|
|
75
|
+
*
|
|
76
|
+
* 조각 끝의 점을 떼는 건 윈도우가 그걸 떼고 파일을 열기 때문이다 — `".env."` 를
|
|
77
|
+
* 그대로 두면 목록에는 안 걸리는데 실제로는 `.env` 가 열린다.
|
|
78
|
+
*
|
|
79
|
+
* 구분자 통일은 FILE_REF 가 이미 `\` 를 거부해서 이 함수로는 안 온다. file 밖에서
|
|
80
|
+
* 불릴 때를 대비해 둔다.
|
|
81
|
+
*/
|
|
82
|
+
function normalizeRefForMatch(ref) {
|
|
83
|
+
return ref
|
|
84
|
+
.replace(/\\/g, '/')
|
|
85
|
+
.split('/')
|
|
86
|
+
.map((segment) => segment.replace(/\.+$/, ''))
|
|
87
|
+
.join('/');
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 보고 화면에 그대로 찍히는 값에서 막을 문자.
|
|
91
|
+
*
|
|
92
|
+
* 이름 꼴을 영숫자로 좁히면 한글 id 를 쓰는 레포가 깨진다. 막아야 하는 건 글자
|
|
93
|
+
* 종류가 아니라 **줄이나 칸을 새로 만드는 문자**다 — 그게 섞이면 대상 레포가 쓴
|
|
94
|
+
* 값이 게슈탈트가 쓴 줄처럼 보인다. 제어문자는 줄을, 백틱은 코드 블록을,
|
|
95
|
+
* 세로줄은 표의 칸을 연다. 기울임 같은 나머지 서식은 그렇게 못 하므로 안 막는다.
|
|
96
|
+
*/
|
|
97
|
+
const UNSAFE_IN_REPORT = /[\p{C}\p{Zl}\p{Zp}`|]/u;
|
|
98
|
+
/**
|
|
99
|
+
* file 소스의 ref 로 받을 문자.
|
|
100
|
+
*
|
|
101
|
+
* **막을 것을 세지 않고 받을 것을 적는다.** 검사하는 값과 실제로 여는 값을 갈라놓는
|
|
102
|
+
* 문자는 한 부류가 아니다 — 공백, 안 보이는 글자, 정규화하면 바뀌는 글자, 구분자처럼
|
|
103
|
+
* 보이는 글자가 차례로 나왔고 셀 때마다 다음 것이 남았다. 경로에 들어갈 글자를 적으면
|
|
104
|
+
* 나머지는 세지 않아도 전부 빠진다.
|
|
105
|
+
*
|
|
106
|
+
* 글자와 숫자는 스크립트를 안 가린다. 한글 경로가 그대로 통과해야 해서다. 정규화하면
|
|
107
|
+
* 다른 글자가 되는 꼴(전각 `e`)은 글자이므로 여기를 지나가고 아래 drift 검사가 받는다.
|
|
108
|
+
*
|
|
109
|
+
* 문장부호는 ASCII 만 받는다. 여기만 열거인 건 **닫힌 집합**이라서다 — 구분자를 닮은
|
|
110
|
+
* 유니코드 글자는 새로 나오는데 ASCII 문장부호는 안 는다. `docs/API (v2).md` 나
|
|
111
|
+
* `it's.md` 같은 실제 파일명이 거부되면 그것도 멀쩡한 선언을 막는 것이다.
|
|
112
|
+
*
|
|
113
|
+
* 결합 문자를 받는 건 데바나가리나 태국어처럼 그게 글자의 일부인 경로가 있어서다.
|
|
114
|
+
* 구분자를 만들지도, 검사한 값과 여는 값을 갈라놓지도 않는다.
|
|
115
|
+
*/
|
|
116
|
+
const FILE_REF = /^[\p{L}\p{N}\p{M}_.+@~#,'!&=()[\]%\- /]+$/u;
|
|
117
|
+
/**
|
|
118
|
+
* 화면에 안 나오기로 유니코드가 정해둔 글자.
|
|
119
|
+
*
|
|
120
|
+
* 허용 목록이 `\p{L}` 을 받는데 그 안에 안 보이는 글자가 있다 — 한글 채움 문자
|
|
121
|
+
* U+1160 은 카테고리가 Lo 이고 호환 분해도 없어서 정규화 검사도 지나간다.
|
|
122
|
+
* `.env\u1160` 이 시크릿 목록을 그냥 통과한다. 읽는 쪽은 안 보이는 글자를 지우고
|
|
123
|
+
* `.env` 를 연다.
|
|
124
|
+
*
|
|
125
|
+
* **여기서도 글자를 세지 않는다.** 유니코드가 관리하는 속성 하나를 빼면 새 글자가
|
|
126
|
+
* 늘어도 이 자리를 다시 고칠 일이 없다.
|
|
127
|
+
*/
|
|
128
|
+
const IGNORABLE_IN_REF = /\p{Default_Ignorable_Code_Point}/u;
|
|
129
|
+
/**
|
|
130
|
+
* 조각 끝에 공백이 붙었는지 본다.
|
|
131
|
+
*
|
|
132
|
+
* 조각 안의 공백은 괜찮다 — `a b.md` 는 그대로 열린다. 끝에 붙은 것만 위험하다.
|
|
133
|
+
* `" /etc/passwd"` 는 앞 공백 때문에 절대 경로로 안 보인다. `".. /x"` 는 조각이
|
|
134
|
+
* `".. "` 라 `..` 검사를 지나간다. 읽는 쪽은 둘 다 다듬어서 연다.
|
|
135
|
+
*/
|
|
136
|
+
function hasEdgeSpace(ref) {
|
|
137
|
+
return ref.split('/').some((segment) => segment !== segment.trim());
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 정규화하면 다른 문자가 되는지 본다.
|
|
141
|
+
*
|
|
142
|
+
* 안 보이는 문자를 막아도 **다른 문자로 바뀌는** 문자가 남는다. 전각 슬래시(`/`)는
|
|
143
|
+
* 눈에 보이고 경로 구분자도 아니라 `..` 검사를 그냥 지나가는데, 정규화하면 `../` 다.
|
|
144
|
+
* 전각 `e` 는 `.env` 를 `.env` 로 만든다. 검사하는 값과 여는 값이 갈라지는 자리가
|
|
145
|
+
* 공백에서 여기로 옮겨간 것뿐이다.
|
|
146
|
+
*
|
|
147
|
+
* NFC 와 NFKC 를 견주면 호환 분해가 있는 문자가 걸린다. 한글은 두 꼴이 같아서 안
|
|
148
|
+
* 걸린다 — macOS 가 NFD 로 주는 경로도 마찬가지다.
|
|
149
|
+
*
|
|
150
|
+
* **여기까지가 이 검사의 범위다.** 키릴 `е` 처럼 분해가 없는 동형자는 안 걸린다. 그건
|
|
151
|
+
* 실제로 그런 이름의 파일이 없어서 읽기가 실패하고 onMissing 을 타므로 경계가 열리는
|
|
152
|
+
* 쪽은 아니다. 조용히 지나가지 않게 하는 건 거기서 받는다.
|
|
153
|
+
*/
|
|
154
|
+
function hasNormalizationDrift(value) {
|
|
155
|
+
return value.normalize('NFC') !== value.normalize('NFKC');
|
|
156
|
+
}
|
|
157
|
+
/** MCP 도구 이름 꼴 */
|
|
158
|
+
const MCP_REF = /^[A-Za-z0-9_][A-Za-z0-9_.-]*$/;
|
|
159
|
+
/** 스킬 이름 꼴. `review` 와 `gestalt:review` 를 받는다 */
|
|
160
|
+
const SKILL_REF = /^[a-z0-9][a-z0-9-]*(:[a-z0-9][a-z0-9-]*)?$/;
|
|
161
|
+
/**
|
|
162
|
+
* 레포 밖에 있는 규칙 소스. 게슈탈트도 대상 레포도 소유하지 않은 기준을 가리킨다.
|
|
163
|
+
*
|
|
164
|
+
* 선언된 것만 읽는다 — 붙어 있는 MCP를 훑어 고르면 무엇을 근거로 삼았는지 사라진다.
|
|
165
|
+
* 적용 규칙은 `plugin/skills/_shared/rule-sources.md`가 원본이다.
|
|
166
|
+
*/
|
|
167
|
+
const ruleSourceSchema = z
|
|
168
|
+
.object({
|
|
169
|
+
/** 보고에 쓰는 이름. 레포 안에서 고유해야 한다. ref 와 같이 NFC 로 맞춰 둔다 */
|
|
170
|
+
id: z
|
|
171
|
+
.string()
|
|
172
|
+
.min(1)
|
|
173
|
+
.transform((value) => value.normalize('NFC'))
|
|
174
|
+
.pipe(z.string().min(1).max(64)),
|
|
175
|
+
kind: z.enum(['mcp', 'file', 'skill']),
|
|
176
|
+
/**
|
|
177
|
+
* kind별 대상 — mcp면 도구 이름, file이면 경로, skill이면 스킬 이름.
|
|
178
|
+
*
|
|
179
|
+
* 상한이 있는 건 이 값이 ges_status 응답으로 매번 실려 나가서다. 넘으면 자르지
|
|
180
|
+
* 않고 거부한다 — 자른 ref 는 스킬이 가진 유일한 ref 라, 읽기에 실패한 뒤
|
|
181
|
+
* onMissing 을 타고 조용히 지나간다. 거부하면 ruleSourceErrors 로 드러난다.
|
|
182
|
+
*
|
|
183
|
+
* NFC 로 맞춰 둔다. 검사만 정규화하고 원본을 저장하면 검사한 값과 스킬이 받는 값이
|
|
184
|
+
* 또 갈라진다 — 그 틈을 없애려고 고친 자리라 여기서 되풀이하지 않는다
|
|
185
|
+
*/
|
|
186
|
+
ref: z
|
|
187
|
+
.string()
|
|
188
|
+
.min(1)
|
|
189
|
+
.transform((value) => value.normalize('NFC'))
|
|
190
|
+
// 상한은 변환 뒤에 건다. 앞에 두면 NFC 로 길어지는 글자가 상한을 넘겨 저장된다
|
|
191
|
+
.pipe(z.string().min(1).max(512)),
|
|
192
|
+
/** 이 태그가 걸린 작업에서만 읽는다. 비면 항상 읽는다 */
|
|
193
|
+
scope: z.array(z.string().min(1).max(32)).max(16).default([]),
|
|
194
|
+
/** convention=형식을 따른다, delegate=그 작업을 넘긴다 */
|
|
195
|
+
trust: z.enum(['convention', 'delegate']).default('convention'),
|
|
196
|
+
/** 못 읽었을 때. warn 이상은 결과에 남는다 */
|
|
197
|
+
onMissing: z.enum(['skip', 'warn', 'stop']).default('warn'),
|
|
198
|
+
// strict 다. 모르는 키를 조용히 버리면 onMising 같은 오타가 기본값으로 떨어져
|
|
199
|
+
// stop 으로 걸어둔 검사가 warn 으로 강등된 사실을 어디서도 알 수 없다.
|
|
200
|
+
// JSON 스키마의 additionalProperties: false 와 같은 선이다
|
|
201
|
+
})
|
|
202
|
+
.strict()
|
|
203
|
+
.superRefine((source, ctx) => {
|
|
204
|
+
// ref 는 스키마가 NFC 로 맞춰서 넘긴다. 저장되는 값도 같은 값이다
|
|
205
|
+
const ref = source.ref;
|
|
206
|
+
// 아래 경로 검사들은 전부 문자열을 그대로 본다. 그런데 이 값을 실제로 여는 주체는
|
|
207
|
+
// fs 가 아니라 에이전트라, 검사하는 값과 여는 값이 갈라지면 그 경계가 무의미해진다.
|
|
208
|
+
// 받을 문자를 적어두고 나머지를 거부한다 — 막을 것을 세면 매번 다음 것이 남는다
|
|
209
|
+
if (IGNORABLE_IN_REF.test(ref)) {
|
|
210
|
+
ctx.addIssue({
|
|
211
|
+
code: z.ZodIssueCode.custom,
|
|
212
|
+
path: ['ref'],
|
|
213
|
+
message: 'ref 에는 화면에 안 나오는 글자를 넣을 수 없습니다',
|
|
214
|
+
});
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (hasNormalizationDrift(ref)) {
|
|
218
|
+
ctx.addIssue({
|
|
219
|
+
code: z.ZodIssueCode.custom,
|
|
220
|
+
path: ['ref'],
|
|
221
|
+
message: 'ref 에는 정규화하면 다른 문자가 되는 글자를 넣을 수 없습니다',
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (source.kind === 'file' && (!FILE_REF.test(ref) || hasEdgeSpace(ref))) {
|
|
226
|
+
ctx.addIssue({
|
|
227
|
+
code: z.ZodIssueCode.custom,
|
|
228
|
+
path: ['ref'],
|
|
229
|
+
message: 'file 소스의 ref 에는 글자와 숫자, ASCII 문장부호만 쓸 수 있고 경로 조각 끝에 공백을 둘 수 없습니다',
|
|
230
|
+
});
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
// ref 는 코드가 읽기 전에 에이전트가 읽는다. rule-sources.md 가 선언된 소스를
|
|
234
|
+
// 읽고 결과 보고에 남기라고 지시하므로, 적대적인 gestalt.json 이 레포 밖 비밀
|
|
235
|
+
// 파일을 "조직 컨벤션"으로 선언하면 그게 보고에 실리는 경로가 열린다
|
|
236
|
+
if (source.kind === 'file') {
|
|
237
|
+
if (isAbsolute(ref)) {
|
|
238
|
+
ctx.addIssue({
|
|
239
|
+
code: z.ZodIssueCode.custom,
|
|
240
|
+
path: ['ref'],
|
|
241
|
+
message: 'file 소스의 ref 는 레포 기준 상대 경로여야 합니다',
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
else if (ref.split(/[/\\]/).includes('..')) {
|
|
245
|
+
ctx.addIssue({
|
|
246
|
+
code: z.ZodIssueCode.custom,
|
|
247
|
+
path: ['ref'],
|
|
248
|
+
message: 'file 소스의 ref 는 레포 밖을 가리킬 수 없습니다',
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else if (isSecretRef(normalizeRefForMatch(ref))) {
|
|
252
|
+
ctx.addIssue({
|
|
253
|
+
code: z.ZodIssueCode.custom,
|
|
254
|
+
path: ['ref'],
|
|
255
|
+
message: 'file 소스의 ref 로 자격 증명이 담기는 자리를 가리킬 수 없습니다',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// 정규화 자체를 막지 않는다. id 는 경로가 아니라 보고에 찍히는 이름이라
|
|
260
|
+
// ㈜ 나 Ⅲ, 반각 가타카나를 쓰는 레포가 있다. 정규화한 결과가 줄이나 칸을
|
|
261
|
+
// 새로 여는지만 본다
|
|
262
|
+
if (UNSAFE_IN_REPORT.test(source.id) ||
|
|
263
|
+
UNSAFE_IN_REPORT.test(source.id.normalize('NFKC')) ||
|
|
264
|
+
IGNORABLE_IN_REF.test(source.id) ||
|
|
265
|
+
source.id !== source.id.trim()) {
|
|
266
|
+
ctx.addIssue({
|
|
267
|
+
code: z.ZodIssueCode.custom,
|
|
268
|
+
path: ['id'],
|
|
269
|
+
message: 'id 에는 줄이나 표의 칸을 새로 여는 문자(제어문자, 백틱, 세로줄)를 쓸 수 없고 앞뒤에 공백을 둘 수 없습니다',
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// 이름 꼴만 본다. 이 도구가 읽기인지 쓰기인지는 코드가 알 방법이 없어서
|
|
273
|
+
// rule-sources.md 가 "쓰기 도구면 부르지 않고 사용자에게 알린다"로 받는다
|
|
274
|
+
if (source.kind === 'mcp' && !MCP_REF.test(ref)) {
|
|
275
|
+
ctx.addIssue({
|
|
276
|
+
code: z.ZodIssueCode.custom,
|
|
277
|
+
path: ['ref'],
|
|
278
|
+
message: 'mcp 소스의 ref 는 도구 이름이어야 합니다',
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
if (source.kind === 'skill' && !SKILL_REF.test(ref)) {
|
|
282
|
+
ctx.addIssue({
|
|
283
|
+
code: z.ZodIssueCode.custom,
|
|
284
|
+
path: ['ref'],
|
|
285
|
+
message: 'skill 소스의 ref 는 스킬 이름이어야 합니다',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// delegate 는 "이 작업을 저 스킬이 맡는다"는 뜻이라 kind 가 skill 이어야 성립한다.
|
|
289
|
+
// mcp 나 file 에 붙으면 무엇을 넘기라는 것인지 정의된 자리가 없다
|
|
290
|
+
if (source.trust === 'delegate' && source.kind !== 'skill') {
|
|
291
|
+
ctx.addIssue({
|
|
292
|
+
code: z.ZodIssueCode.custom,
|
|
293
|
+
path: ['trust'],
|
|
294
|
+
message: 'delegate 는 kind 가 skill 일 때만 쓸 수 있습니다',
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
});
|
|
36
298
|
/** 에이전트 tier를 Agent 도구 model 별칭으로 옮기는 표 */
|
|
37
299
|
const tierModelsSchema = z.object({
|
|
38
300
|
frugal: agentModelAliasSchema.default(DEFAULT_TIER_MODELS.frugal),
|
|
@@ -46,6 +308,30 @@ const configSchema = z.object({
|
|
|
46
308
|
reasoningModel: reasoningModelSchema.default(DEFAULT_REASONING_MODEL),
|
|
47
309
|
reasoningModelFallback: reasoningModelSchema.default(REASONING_MODEL_FALLBACK),
|
|
48
310
|
tierModels: tierModelsSchema.default({}),
|
|
311
|
+
ruleSources: z
|
|
312
|
+
.array(ruleSourceSchema)
|
|
313
|
+
// 손으로 적는 선언이라 이 정도면 넉넉하다. 상한이 없으면 선언 수가 그대로
|
|
314
|
+
// 매 ges_status 응답 크기가 된다
|
|
315
|
+
.max(32)
|
|
316
|
+
// id가 겹치면 "어느 기준으로 작업했나" 보고에서 둘을 구분할 수 없다
|
|
317
|
+
// 눈에 같아 보이는 id 가 통과하면 안 된다. 스키마가 NFC 로 맞춰 넘기므로 그대로 센다
|
|
318
|
+
.refine((s) => new Set(s.map((r) => r.id)).size === s.length, {
|
|
319
|
+
message: 'ruleSources[].id는 서로 달라야 합니다',
|
|
320
|
+
})
|
|
321
|
+
.default([]),
|
|
322
|
+
/**
|
|
323
|
+
* ruleSources 선언이 깨졌을 때 그 이유. 사용자가 쓰는 필드가 아니라 loadConfig가 채운다.
|
|
324
|
+
* 비어 있지 않으면 선언은 있었는데 못 읽은 상태이므로 스킬은 진행하지 않는다.
|
|
325
|
+
*/
|
|
326
|
+
ruleSourceErrors: z.array(z.string()).default([]),
|
|
327
|
+
/**
|
|
328
|
+
* 선언이 깨지진 않았는데 짚어줄 게 있을 때. 마찬가지로 loadConfig가 채운다.
|
|
329
|
+
*
|
|
330
|
+
* **멈춤 사유와 한 필드에 담지 않는다.** 담으면 탐지기를 한 번 넓힐 때마다 그게
|
|
331
|
+
* 세션을 세우는 레버가 된다 — 실제로 키 이름 오타 탐지를 넓혔더니 `resources` 같은
|
|
332
|
+
* 남의 키 하나로 이 값을 읽는 자리가 전부 멈췄다. 확실하지 않은 판정은 여기로 온다.
|
|
333
|
+
*/
|
|
334
|
+
ruleSourceWarnings: z.array(z.string()).default([]),
|
|
49
335
|
notifications: z.boolean().default(false),
|
|
50
336
|
// 상수가 아니라 함수다. 모듈을 읽을 때 굳히면 테스트 setupFiles가 GESTALT_HOME을
|
|
51
337
|
// 세우기 전에 값이 정해져서 진짜 홈을 가리킨다
|
|
@@ -227,30 +513,76 @@ function normalizeInvalidPath(path) {
|
|
|
227
513
|
path.length > 2) {
|
|
228
514
|
return ['llm', path[1]];
|
|
229
515
|
}
|
|
516
|
+
// 배열 원소 안의 필드가 잘못되면 그 원소를 통째로 뺀다. 필드만 지우면 남은 원소가
|
|
517
|
+
// required 검사에 다시 걸려 복구가 실패한다. 그러면 설정 전체가 기본값으로 떨어진다
|
|
518
|
+
const firstIndex = path.findIndex((segment) => typeof segment === 'number');
|
|
519
|
+
if (firstIndex >= 0 && firstIndex < path.length - 1) {
|
|
520
|
+
return path.slice(0, firstIndex + 1);
|
|
521
|
+
}
|
|
230
522
|
return path;
|
|
231
523
|
}
|
|
232
|
-
|
|
233
|
-
|
|
524
|
+
/**
|
|
525
|
+
* 잘못된 값 하나를 걷어낸다. 걷어내면 나머지 설정이 기본값으로 안 되돌아간다.
|
|
526
|
+
*
|
|
527
|
+
* 배열 원소는 그 자리에서 빼지 않고 인덱스만 모은다. 한 원소에 잘못된 필드가 둘이면
|
|
528
|
+
* zod가 issue를 둘 내고 둘 다 같은 원소를 가리키는데, 받는 대로 빼면 두 번째가 이미
|
|
529
|
+
* 당겨진 배열의 옆 원소를 지운다. 그래서 전부 모은 뒤 한 번에 걸러낸다.
|
|
530
|
+
*/
|
|
531
|
+
function removePath(root, path, arrayDrops) {
|
|
234
532
|
if (path.length === 0)
|
|
235
533
|
return false;
|
|
236
534
|
let current = root;
|
|
237
535
|
for (const segment of path.slice(0, -1)) {
|
|
536
|
+
if (Array.isArray(current)) {
|
|
537
|
+
const index = Number(segment);
|
|
538
|
+
if (!Number.isInteger(index))
|
|
539
|
+
return false;
|
|
540
|
+
current = current[index];
|
|
541
|
+
continue;
|
|
542
|
+
}
|
|
238
543
|
if (!isRecord(current))
|
|
239
544
|
return false;
|
|
240
545
|
current = current[String(segment)];
|
|
241
546
|
}
|
|
547
|
+
const finalSegment = path[path.length - 1];
|
|
548
|
+
if (Array.isArray(current)) {
|
|
549
|
+
const index = Number(finalSegment);
|
|
550
|
+
if (!Number.isInteger(index) || index < 0 || index >= current.length)
|
|
551
|
+
return false;
|
|
552
|
+
const drops = arrayDrops.get(current) ?? new Set();
|
|
553
|
+
drops.add(index);
|
|
554
|
+
arrayDrops.set(current, drops);
|
|
555
|
+
return true;
|
|
556
|
+
}
|
|
242
557
|
if (!isRecord(current))
|
|
243
558
|
return false;
|
|
244
|
-
const
|
|
245
|
-
if (!(
|
|
559
|
+
const key = String(finalSegment);
|
|
560
|
+
if (!(key in current))
|
|
246
561
|
return false;
|
|
247
|
-
delete current[
|
|
562
|
+
delete current[key];
|
|
248
563
|
return true;
|
|
249
564
|
}
|
|
250
565
|
function pruneInvalidConfig(input, paths) {
|
|
251
566
|
const pruned = cloneRecord(input);
|
|
567
|
+
// 정규화한 뒤 같은 자리를 가리키는 경로를 하나로 접는다. 접지 않으면 한 원소의
|
|
568
|
+
// 필드 둘이 각각 삭제를 요구해 옆 원소까지 빠진다
|
|
569
|
+
const unique = new Map();
|
|
252
570
|
for (const path of paths) {
|
|
253
|
-
|
|
571
|
+
const normalized = normalizeInvalidPath(path);
|
|
572
|
+
unique.set(JSON.stringify(normalized), normalized);
|
|
573
|
+
}
|
|
574
|
+
const arrayDrops = new Map();
|
|
575
|
+
for (const path of unique.values()) {
|
|
576
|
+
removePath(pruned, path, arrayDrops);
|
|
577
|
+
}
|
|
578
|
+
// 배열은 마지막에 한 번만 걸러낸다. 인덱스가 당겨지지 않으니 순서를 맞출 필요가 없다.
|
|
579
|
+
// 되돌릴 때 스프레드를 안 쓰는 건 원소 수가 그대로 인자 개수가 되기 때문이다.
|
|
580
|
+
// ruleSources 는 상한이 32라 이 경로로는 안 닿지만 여기는 설정 전체를 받는 자리다
|
|
581
|
+
for (const [array, drops] of arrayDrops) {
|
|
582
|
+
const kept = array.filter((_, index) => !drops.has(index));
|
|
583
|
+
array.length = kept.length;
|
|
584
|
+
for (let i = 0; i < kept.length; i++)
|
|
585
|
+
array[i] = kept[i];
|
|
254
586
|
}
|
|
255
587
|
return pruned;
|
|
256
588
|
}
|
|
@@ -266,20 +598,132 @@ export function loadConfig(overrides = {}, options) {
|
|
|
266
598
|
const envConfig = buildEnvConfig();
|
|
267
599
|
// 4. Merge: defaults ← gestalt.json ← envConfig ← overrides
|
|
268
600
|
const merged = deepMerge(deepMerge(jsonConfig, envConfig), overrides);
|
|
601
|
+
// ruleSourceErrors 는 로더가 채우는 출력이다. 스킬 여러 자리가 "비어 있지 않으면
|
|
602
|
+
// 멈춘다"로 읽으므로, 작성자가 적은 값을 살려두면 gestalt.json 한 줄로 파이프라인을
|
|
603
|
+
// 세우거나 게슈탈트 경고를 사칭할 수 있다
|
|
604
|
+
delete merged.ruleSourceErrors;
|
|
605
|
+
delete merged.ruleSourceWarnings;
|
|
606
|
+
// 이름이 비슷하다는 건 정황이지 선언이 깨졌다는 증거가 아니다. 경고로 간다
|
|
607
|
+
const misspelled = findMisspelledRuleSourcesKey(jsonConfig);
|
|
608
|
+
const declared = Array.isArray(merged.ruleSources) && merged.ruleSources.length > 0;
|
|
269
609
|
// 5. Validate with Zod — warn + fallback on invalid values
|
|
270
610
|
const result = configSchema.safeParse(merged);
|
|
271
611
|
if (!result.success) {
|
|
272
|
-
const messages = result.error.issues.map((i) => `${i.path
|
|
612
|
+
const messages = result.error.issues.map((i) => `${describeIssuePath(i.path, merged)}: ${i.message}`);
|
|
273
613
|
console.error(`[gestalt] Warning: Invalid configuration, using defaults for invalid fields:\n${messages.join('\n')}`);
|
|
274
614
|
const pruned = pruneInvalidConfig(merged, result.error.issues.map((issue) => issue.path));
|
|
615
|
+
const broken = messages.filter((m) => m.startsWith('ruleSources'));
|
|
275
616
|
const recovered = configSchema.safeParse(pruned);
|
|
276
617
|
if (recovered.success) {
|
|
277
|
-
return applyPostProcessing(recovered.data);
|
|
618
|
+
return applyPostProcessing(withRuleSourceNotes(recovered.data, broken, misspelled));
|
|
278
619
|
}
|
|
279
620
|
console.error('[gestalt] Warning: Failed to recover configuration, using defaults');
|
|
280
|
-
|
|
621
|
+
// 여기서는 ruleSources 가 멀쩡했어도 함께 날아간다. 앞에 세워 두는 건 고칠 자리가
|
|
622
|
+
// 선언 안이 아니라 다른 필드라서다 — 안 적으면 "선언한 적 없는 레포"와 구분이 안 된다
|
|
623
|
+
if (declared) {
|
|
624
|
+
broken.unshift('ruleSources: 설정을 복구하지 못해 선언 전체가 빠졌습니다');
|
|
625
|
+
}
|
|
626
|
+
return applyPostProcessing(withRuleSourceNotes(configSchema.parse({}), broken, misspelled));
|
|
281
627
|
}
|
|
282
|
-
return applyPostProcessing(result.data);
|
|
628
|
+
return applyPostProcessing(withRuleSourceNotes(result.data, [], misspelled));
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* ruleSources 를 적으려다 키 이름을 틀린 자리를 찾는다.
|
|
632
|
+
*
|
|
633
|
+
* 최상위 스키마는 strict 가 아니다. `$schema` 가 들어와야 하고 예전 gestalt.json 을
|
|
634
|
+
* 쓰는 레포를 깨뜨릴 수도 없다. 그래서 모르는 키는 조용히 버려지는데, 하필 그 키가
|
|
635
|
+
* `ruleSource` 였으면 결과가 `ruleSources: []` 이고 이건 선언을 안 한 레포와 똑같다.
|
|
636
|
+
* onMissing: "stop" 으로 걸어둔 검사가 있었는지조차 아무도 모른 채 지나간다.
|
|
637
|
+
*
|
|
638
|
+
* **이 결과는 ruleSourceWarnings 로 간다 — 멈추지 않는다.** 이름이 비슷하다는 건
|
|
639
|
+
* 정황이지 선언이 깨졌다는 증거가 아니다. 그래도 매 응답에 실려 사용자에게 보이므로
|
|
640
|
+
* 값이 선언 꼴일 때만 올린다.
|
|
641
|
+
*
|
|
642
|
+
* **gestalt.json 만 본다.** env 는 이 필드를 표현할 방법이 없고 overrides 는 호출한
|
|
643
|
+
* 코드가 만든 값이라 작성자의 오타로 볼 자리가 아니다.
|
|
644
|
+
*/
|
|
645
|
+
function findMisspelledRuleSourcesKey(jsonConfig) {
|
|
646
|
+
const known = new Set(Object.keys(configSchema.shape));
|
|
647
|
+
return Object.keys(jsonConfig)
|
|
648
|
+
.filter((key) => !known.has(key))
|
|
649
|
+
.filter((key) => looksLikeRuleSources(key.toLowerCase().replace(/[_-]/g, '')))
|
|
650
|
+
.filter((key) => looksLikeDeclaration(jsonConfig[key]))
|
|
651
|
+
.map((key) => `${JSON.stringify(key.slice(0, 40))}: 모르는 키입니다. ruleSources 를 적으려던 것인지 확인해주세요`);
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* 오류 자리를 사람이 따라갈 수 있게 적는다.
|
|
655
|
+
*
|
|
656
|
+
* 인덱스만 적으면 못 따라간다 — 응답에 실리는 `ruleSources` 는 깨진 원소가 빠진 뒤
|
|
657
|
+
* 다시 매겨진 배열이라, `ruleSources.1` 을 세어 보면 멀쩡한 다른 소스를 짚는다.
|
|
658
|
+
* 그래서 원본 원소의 `id` 를 붙인다.
|
|
659
|
+
*/
|
|
660
|
+
function describeIssuePath(path, merged) {
|
|
661
|
+
const joined = path.join('.');
|
|
662
|
+
if (path[0] !== 'ruleSources' || typeof path[1] !== 'number')
|
|
663
|
+
return joined;
|
|
664
|
+
const sources = merged['ruleSources'];
|
|
665
|
+
if (!Array.isArray(sources))
|
|
666
|
+
return joined;
|
|
667
|
+
const source = sources[path[1]];
|
|
668
|
+
if (!isRecord(source))
|
|
669
|
+
return joined;
|
|
670
|
+
// id 가 빠진 것 자체가 흔한 오타라 그때는 ref 로, 그것도 없으면 kind 로 짚는다
|
|
671
|
+
for (const field of ['id', 'ref', 'kind']) {
|
|
672
|
+
const value = source[field];
|
|
673
|
+
if (typeof value === 'string') {
|
|
674
|
+
return `${joined} (${field}: ${JSON.stringify(value.slice(0, 64))})`;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
return joined;
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* 선언하려던 값인지 본다. 스칼라 하나가 들어 있으면 오타로 안 본다.
|
|
681
|
+
*
|
|
682
|
+
* 빈 배열은 선언 꼴로 안 본다. `every` 가 true 를 주는 자리라 그냥 두면 `{"resources": []}`
|
|
683
|
+
* 한 줄이 판정을 타고 들어온다 — 어차피 빈 선언은 안 한 것과 결과가 같다.
|
|
684
|
+
*/
|
|
685
|
+
function looksLikeDeclaration(value) {
|
|
686
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
687
|
+
return false;
|
|
688
|
+
return value.every((item) => isRecord(item));
|
|
689
|
+
}
|
|
690
|
+
/**
|
|
691
|
+
* 접두 일치만 보면 `ruleSource` 는 잡아도 `ruleSorces` 같은 자리 바뀜은 놓친다.
|
|
692
|
+
* 두 글자까지 어긋난 것을 같은 의도로 본다.
|
|
693
|
+
*/
|
|
694
|
+
function looksLikeRuleSources(normalized) {
|
|
695
|
+
return normalized === 'rulesource' || editDistanceWithin(normalized, 'rulesources', 2);
|
|
696
|
+
}
|
|
697
|
+
function editDistanceWithin(a, b, limit) {
|
|
698
|
+
if (Math.abs(a.length - b.length) > limit)
|
|
699
|
+
return false;
|
|
700
|
+
let previous = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
701
|
+
for (let i = 1; i <= a.length; i++) {
|
|
702
|
+
const current = [i];
|
|
703
|
+
for (let j = 1; j <= b.length; j++) {
|
|
704
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
705
|
+
current[j] = Math.min(current[j - 1] + 1, previous[j] + 1, previous[j - 1] + cost);
|
|
706
|
+
}
|
|
707
|
+
// 이 행 전체가 한계를 넘었으면 남은 행도 줄어들지 않는다
|
|
708
|
+
if (Math.min(...current) > limit)
|
|
709
|
+
return false;
|
|
710
|
+
previous = current;
|
|
711
|
+
}
|
|
712
|
+
return previous[b.length] <= limit;
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* 빠진 ruleSources 선언의 이유와 짚어줄 거리를 config에 실어 보낸다.
|
|
716
|
+
*
|
|
717
|
+
* 잘못된 항목은 prune이 걷어내고 나머지는 살아남는다. 그런데 무엇이 빠졌는지를 안 알리면
|
|
718
|
+
* 스킬 쪽에서 처음부터 선언 안 한 것과 구분할 수 없다. onMissing: "stop"으로 걸어둔
|
|
719
|
+
* 검사가 그 상태로 안 돈 채 지나간다.
|
|
720
|
+
*
|
|
721
|
+
* 둘을 갈라 싣는 건 `errors`만 멈춤 사유이기 때문이다.
|
|
722
|
+
*/
|
|
723
|
+
function withRuleSourceNotes(config, errors, warnings) {
|
|
724
|
+
if (errors.length === 0 && warnings.length === 0)
|
|
725
|
+
return config;
|
|
726
|
+
return { ...config, ruleSourceErrors: errors, ruleSourceWarnings: warnings };
|
|
283
727
|
}
|
|
284
728
|
function applyPostProcessing(config) {
|
|
285
729
|
config.skillsDir = resolveDir(config.skillsDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"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"}
|