@mandujs/core 0.13.0 → 0.13.2
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/README.ko.md +4 -4
- package/README.md +653 -653
- package/package.json +1 -1
- package/src/bundler/build.ts +91 -91
- package/src/bundler/css.ts +302 -302
- package/src/client/Link.tsx +227 -227
- package/src/client/globals.ts +44 -44
- package/src/client/hooks.ts +267 -267
- package/src/client/index.ts +5 -5
- package/src/client/island.ts +8 -8
- package/src/client/router.ts +435 -435
- package/src/client/runtime.ts +23 -23
- package/src/client/serialize.ts +404 -404
- package/src/client/window-state.ts +101 -101
- package/src/config/mandu.ts +9 -0
- package/src/config/validate.ts +12 -0
- package/src/config/watcher.ts +311 -311
- package/src/constants.ts +40 -40
- package/src/content/content-layer.ts +314 -314
- package/src/content/content.test.ts +433 -433
- package/src/content/data-store.ts +245 -245
- package/src/content/digest.ts +133 -133
- package/src/content/index.ts +164 -164
- package/src/content/loader-context.ts +172 -172
- package/src/content/loaders/api.ts +216 -216
- package/src/content/loaders/file.ts +169 -169
- package/src/content/loaders/glob.ts +252 -252
- package/src/content/loaders/index.ts +34 -34
- package/src/content/loaders/types.ts +137 -137
- package/src/content/meta-store.ts +209 -209
- package/src/content/types.ts +282 -282
- package/src/content/watcher.ts +135 -135
- package/src/contract/client-safe.test.ts +42 -42
- package/src/contract/client-safe.ts +114 -114
- package/src/contract/client.ts +16 -16
- package/src/contract/define.ts +459 -459
- package/src/contract/handler.ts +10 -10
- package/src/contract/normalize.test.ts +276 -276
- package/src/contract/normalize.ts +404 -404
- package/src/contract/registry.test.ts +206 -206
- package/src/contract/registry.ts +568 -568
- package/src/contract/schema.ts +48 -48
- package/src/contract/types.ts +58 -58
- package/src/contract/validator.ts +32 -32
- package/src/devtools/ai/context-builder.ts +375 -375
- package/src/devtools/ai/index.ts +25 -25
- package/src/devtools/ai/mcp-connector.ts +465 -465
- package/src/devtools/client/catchers/error-catcher.ts +327 -327
- package/src/devtools/client/catchers/index.ts +18 -18
- package/src/devtools/client/catchers/network-proxy.ts +363 -363
- package/src/devtools/client/components/index.ts +39 -39
- package/src/devtools/client/components/kitchen-root.tsx +362 -362
- package/src/devtools/client/components/mandu-character.tsx +241 -241
- package/src/devtools/client/components/overlay.tsx +368 -368
- package/src/devtools/client/components/panel/errors-panel.tsx +259 -259
- package/src/devtools/client/components/panel/guard-panel.tsx +244 -244
- package/src/devtools/client/components/panel/index.ts +32 -32
- package/src/devtools/client/components/panel/islands-panel.tsx +304 -304
- package/src/devtools/client/components/panel/network-panel.tsx +292 -292
- package/src/devtools/client/components/panel/panel-container.tsx +259 -259
- package/src/devtools/client/filters/context-filters.ts +282 -282
- package/src/devtools/client/filters/index.ts +16 -16
- package/src/devtools/client/index.ts +63 -63
- package/src/devtools/client/persistence.ts +335 -335
- package/src/devtools/client/state-manager.ts +478 -478
- package/src/devtools/design-tokens.ts +263 -263
- package/src/devtools/hook/create-hook.ts +207 -207
- package/src/devtools/hook/index.ts +13 -13
- package/src/devtools/index.ts +439 -439
- package/src/devtools/init.ts +266 -266
- package/src/devtools/protocol.ts +237 -237
- package/src/devtools/server/index.ts +17 -17
- package/src/devtools/server/source-context.ts +444 -444
- package/src/devtools/types.ts +319 -319
- package/src/devtools/worker/index.ts +25 -25
- package/src/devtools/worker/redaction-worker.ts +222 -222
- package/src/devtools/worker/worker-manager.ts +409 -409
- package/src/error/domains.ts +265 -265
- package/src/error/result.ts +46 -46
- package/src/error/types.ts +6 -6
- package/src/errors/extractor.ts +409 -409
- package/src/errors/index.ts +19 -19
- package/src/filling/auth.ts +308 -308
- package/src/filling/context.ts +24 -1
- package/src/filling/deps.ts +238 -238
- package/src/filling/index.ts +4 -0
- package/src/filling/sse-catchup.test.ts +56 -0
- package/src/filling/sse-catchup.ts +67 -0
- package/src/filling/sse.test.ts +168 -0
- package/src/filling/sse.ts +162 -0
- package/src/generator/index.ts +3 -3
- package/src/guard/analyzer.ts +360 -360
- package/src/guard/ast-analyzer.ts +806 -806
- package/src/guard/contract-guard.ts +9 -9
- package/src/guard/file-type.test.ts +24 -24
- package/src/guard/presets/atomic.ts +70 -70
- package/src/guard/presets/clean.ts +77 -77
- package/src/guard/presets/fsd.ts +79 -79
- package/src/guard/presets/hexagonal.ts +68 -68
- package/src/guard/presets/index.ts +291 -291
- package/src/guard/reporter.ts +445 -445
- package/src/guard/rules.ts +12 -12
- package/src/guard/statistics.ts +578 -578
- package/src/guard/suggestions.ts +358 -358
- package/src/guard/types.ts +348 -348
- package/src/guard/validator.ts +834 -834
- package/src/guard/watcher.ts +404 -404
- package/src/index.ts +6 -1
- package/src/intent/index.ts +310 -310
- package/src/island/index.ts +304 -304
- package/src/logging/index.ts +22 -22
- package/src/logging/transports.ts +365 -365
- package/src/plugins/index.ts +38 -38
- package/src/plugins/registry.ts +377 -377
- package/src/plugins/types.ts +363 -363
- package/src/report/index.ts +1 -1
- package/src/router/fs-patterns.ts +387 -387
- package/src/router/fs-scanner.ts +497 -497
- package/src/runtime/boundary.tsx +232 -232
- package/src/runtime/compose.ts +222 -222
- package/src/runtime/escape.ts +44 -0
- package/src/runtime/lifecycle.ts +381 -381
- package/src/runtime/logger.test.ts +345 -345
- package/src/runtime/logger.ts +677 -677
- package/src/runtime/router.test.ts +476 -476
- package/src/runtime/router.ts +105 -105
- package/src/runtime/security.ts +155 -155
- package/src/runtime/server.ts +257 -0
- package/src/runtime/session-key.ts +328 -328
- package/src/runtime/ssr.ts +16 -21
- package/src/runtime/streaming-ssr.ts +24 -33
- package/src/runtime/trace.ts +144 -144
- package/src/seo/index.ts +214 -214
- package/src/seo/integration/ssr.ts +307 -307
- package/src/seo/render/basic.ts +427 -427
- package/src/seo/render/index.ts +143 -143
- package/src/seo/render/jsonld.ts +539 -539
- package/src/seo/render/opengraph.ts +191 -191
- package/src/seo/render/robots.ts +116 -116
- package/src/seo/render/sitemap.ts +137 -137
- package/src/seo/render/twitter.ts +126 -126
- package/src/seo/resolve/index.ts +353 -353
- package/src/seo/resolve/opengraph.ts +143 -143
- package/src/seo/resolve/robots.ts +73 -73
- package/src/seo/resolve/title.ts +94 -94
- package/src/seo/resolve/twitter.ts +73 -73
- package/src/seo/resolve/url.ts +97 -97
- package/src/seo/routes/index.ts +290 -290
- package/src/seo/types.ts +575 -575
- package/src/slot/validator.ts +39 -39
- package/src/spec/index.ts +3 -3
- package/src/spec/load.ts +76 -76
- package/src/spec/lock.ts +56 -56
- package/src/utils/bun.ts +8 -8
- package/src/utils/lru-cache.ts +75 -75
- package/src/utils/safe-io.ts +188 -188
- package/src/utils/string-safe.ts +298 -298
package/src/devtools/index.ts
CHANGED
|
@@ -1,439 +1,439 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mandu Kitchen DevTools
|
|
3
|
-
* AI-Native Developer Tools for Mandu Framework
|
|
4
|
-
*
|
|
5
|
-
* @version 1.1.0
|
|
6
|
-
* @description "만두를 찌듯 편안하게 디버깅한다"
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// ============================================================================
|
|
10
|
-
// Types
|
|
11
|
-
// ============================================================================
|
|
12
|
-
|
|
13
|
-
export type {
|
|
14
|
-
// Core
|
|
15
|
-
KitchenEvent,
|
|
16
|
-
|
|
17
|
-
// Error
|
|
18
|
-
ErrorType,
|
|
19
|
-
Severity,
|
|
20
|
-
NormalizedError,
|
|
21
|
-
|
|
22
|
-
// Island
|
|
23
|
-
HydrationStrategy,
|
|
24
|
-
IslandStatus,
|
|
25
|
-
IslandSnapshot,
|
|
26
|
-
|
|
27
|
-
// Network
|
|
28
|
-
NetworkRequest,
|
|
29
|
-
NetworkBodyPolicy,
|
|
30
|
-
|
|
31
|
-
// Guard
|
|
32
|
-
GuardViolation,
|
|
33
|
-
|
|
34
|
-
// AI Context
|
|
35
|
-
CodeContextInfo,
|
|
36
|
-
AIContextPayload,
|
|
37
|
-
|
|
38
|
-
// Redaction
|
|
39
|
-
RedactPattern,
|
|
40
|
-
|
|
41
|
-
// Persistence
|
|
42
|
-
PreserveLogConfig,
|
|
43
|
-
|
|
44
|
-
// Worker
|
|
45
|
-
WorkerPolicy,
|
|
46
|
-
WorkerTask,
|
|
47
|
-
|
|
48
|
-
// Config
|
|
49
|
-
Position,
|
|
50
|
-
Theme,
|
|
51
|
-
DevToolsConfig,
|
|
52
|
-
|
|
53
|
-
// Plugin
|
|
54
|
-
KitchenAPI,
|
|
55
|
-
KitchenPanelPlugin,
|
|
56
|
-
|
|
57
|
-
// Meta
|
|
58
|
-
MetaLogType,
|
|
59
|
-
KitchenMetaLog,
|
|
60
|
-
|
|
61
|
-
// Character
|
|
62
|
-
ManduState,
|
|
63
|
-
ManduCharacterData,
|
|
64
|
-
} from './types';
|
|
65
|
-
|
|
66
|
-
export { MANDU_CHARACTERS } from './types';
|
|
67
|
-
|
|
68
|
-
// ============================================================================
|
|
69
|
-
// Design Tokens
|
|
70
|
-
// ============================================================================
|
|
71
|
-
|
|
72
|
-
export {
|
|
73
|
-
colors,
|
|
74
|
-
typography,
|
|
75
|
-
spacing,
|
|
76
|
-
borderRadius,
|
|
77
|
-
borderWidth,
|
|
78
|
-
shadows,
|
|
79
|
-
animation,
|
|
80
|
-
zIndex,
|
|
81
|
-
breakpoints,
|
|
82
|
-
ManduDesignTokens,
|
|
83
|
-
generateCSSVariables,
|
|
84
|
-
testIds,
|
|
85
|
-
type TestId,
|
|
86
|
-
} from './design-tokens';
|
|
87
|
-
|
|
88
|
-
// ============================================================================
|
|
89
|
-
// Client
|
|
90
|
-
// ============================================================================
|
|
91
|
-
|
|
92
|
-
export {
|
|
93
|
-
// State
|
|
94
|
-
KitchenStateManager,
|
|
95
|
-
getStateManager,
|
|
96
|
-
resetStateManager,
|
|
97
|
-
type KitchenState,
|
|
98
|
-
type StateListener,
|
|
99
|
-
|
|
100
|
-
// Error Catching
|
|
101
|
-
ErrorCatcher,
|
|
102
|
-
getErrorCatcher,
|
|
103
|
-
initializeErrorCatcher,
|
|
104
|
-
destroyErrorCatcher,
|
|
105
|
-
|
|
106
|
-
// Network Proxy
|
|
107
|
-
NetworkProxy,
|
|
108
|
-
getNetworkProxy,
|
|
109
|
-
initializeNetworkProxy,
|
|
110
|
-
destroyNetworkProxy,
|
|
111
|
-
|
|
112
|
-
// Filters
|
|
113
|
-
removeComments,
|
|
114
|
-
handleStrings,
|
|
115
|
-
redactBuiltInSecrets,
|
|
116
|
-
redactCustomPatterns,
|
|
117
|
-
truncate,
|
|
118
|
-
applyContextFilters,
|
|
119
|
-
sanitizeStackTrace,
|
|
120
|
-
sanitizeErrorMessage,
|
|
121
|
-
type FilterOptions,
|
|
122
|
-
|
|
123
|
-
// Persistence
|
|
124
|
-
PersistenceManager,
|
|
125
|
-
getPersistenceManager,
|
|
126
|
-
initializePersistence,
|
|
127
|
-
destroyPersistence,
|
|
128
|
-
|
|
129
|
-
// Components
|
|
130
|
-
ManduCharacter,
|
|
131
|
-
ManduBadge,
|
|
132
|
-
ErrorOverlay,
|
|
133
|
-
mountKitchen,
|
|
134
|
-
unmountKitchen,
|
|
135
|
-
isKitchenMounted,
|
|
136
|
-
type ManduCharacterProps,
|
|
137
|
-
type ManduBadgeProps,
|
|
138
|
-
type ErrorOverlayProps,
|
|
139
|
-
} from './client';
|
|
140
|
-
|
|
141
|
-
// ============================================================================
|
|
142
|
-
// Initialization
|
|
143
|
-
// ============================================================================
|
|
144
|
-
|
|
145
|
-
export {
|
|
146
|
-
initManduKitchen,
|
|
147
|
-
destroyManduKitchen,
|
|
148
|
-
autoInit,
|
|
149
|
-
type KitchenInstance,
|
|
150
|
-
} from './init';
|
|
151
|
-
|
|
152
|
-
// ============================================================================
|
|
153
|
-
// Protocol
|
|
154
|
-
// ============================================================================
|
|
155
|
-
|
|
156
|
-
export type { KitchenEvents } from './protocol';
|
|
157
|
-
|
|
158
|
-
export {
|
|
159
|
-
// Type guards
|
|
160
|
-
isErrorEvent,
|
|
161
|
-
isIslandEvent,
|
|
162
|
-
isNetworkEvent,
|
|
163
|
-
isGuardEvent,
|
|
164
|
-
isHmrEvent,
|
|
165
|
-
|
|
166
|
-
// Event factories
|
|
167
|
-
createErrorEvent,
|
|
168
|
-
createIslandRegisterEvent,
|
|
169
|
-
createIslandHydrateStartEvent,
|
|
170
|
-
createIslandHydrateEndEvent,
|
|
171
|
-
createNetworkRequestEvent,
|
|
172
|
-
createNetworkResponseEvent,
|
|
173
|
-
createGuardViolationEvent,
|
|
174
|
-
createHmrUpdateEvent,
|
|
175
|
-
createHmrErrorEvent,
|
|
176
|
-
|
|
177
|
-
// Constants
|
|
178
|
-
DEVTOOLS_VERSION,
|
|
179
|
-
DEFAULT_CONFIG,
|
|
180
|
-
ALLOWED_HEADERS,
|
|
181
|
-
BLOCKED_HEADERS,
|
|
182
|
-
} from './protocol';
|
|
183
|
-
|
|
184
|
-
// ============================================================================
|
|
185
|
-
// Hook
|
|
186
|
-
// ============================================================================
|
|
187
|
-
|
|
188
|
-
export {
|
|
189
|
-
createDevtoolsHook,
|
|
190
|
-
getOrCreateHook,
|
|
191
|
-
getHook,
|
|
192
|
-
initializeHook,
|
|
193
|
-
type ManduDevtoolsHook,
|
|
194
|
-
type EventSink,
|
|
195
|
-
} from './hook';
|
|
196
|
-
|
|
197
|
-
// ============================================================================
|
|
198
|
-
// Convenience Functions
|
|
199
|
-
// ============================================================================
|
|
200
|
-
|
|
201
|
-
import { getOrCreateHook } from './hook';
|
|
202
|
-
import type { NormalizedError, GuardViolation } from './types';
|
|
203
|
-
import {
|
|
204
|
-
createErrorEvent,
|
|
205
|
-
createHmrUpdateEvent,
|
|
206
|
-
createHmrErrorEvent,
|
|
207
|
-
createGuardViolationEvent,
|
|
208
|
-
} from './protocol';
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* 에러 리포트 (간편 API)
|
|
212
|
-
*
|
|
213
|
-
* @example
|
|
214
|
-
* ```typescript
|
|
215
|
-
* import { reportError } from '@mandu/core/devtools';
|
|
216
|
-
*
|
|
217
|
-
* try {
|
|
218
|
-
* // ...
|
|
219
|
-
* } catch (e) {
|
|
220
|
-
* reportError(e);
|
|
221
|
-
* }
|
|
222
|
-
* ```
|
|
223
|
-
*/
|
|
224
|
-
export function reportError(
|
|
225
|
-
error: Error | string,
|
|
226
|
-
options?: Partial<Omit<NormalizedError, 'id' | 'timestamp' | 'message'>>
|
|
227
|
-
): void {
|
|
228
|
-
const hook = getOrCreateHook();
|
|
229
|
-
const message = typeof error === 'string' ? error : error.message;
|
|
230
|
-
const stack = typeof error === 'string' ? undefined : error.stack;
|
|
231
|
-
|
|
232
|
-
hook.emit(
|
|
233
|
-
createErrorEvent({
|
|
234
|
-
type: options?.type ?? 'runtime',
|
|
235
|
-
severity: options?.severity ?? 'error',
|
|
236
|
-
message,
|
|
237
|
-
stack,
|
|
238
|
-
url: typeof window !== 'undefined' ? window.location.href : '',
|
|
239
|
-
...options,
|
|
240
|
-
})
|
|
241
|
-
);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* HMR 업데이트 알림 (간편 API)
|
|
246
|
-
*/
|
|
247
|
-
export function notifyHmrUpdate(routeId: string): void {
|
|
248
|
-
const hook = getOrCreateHook();
|
|
249
|
-
hook.emit(createHmrUpdateEvent(routeId));
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* HMR 에러 알림 (간편 API)
|
|
254
|
-
*/
|
|
255
|
-
export function notifyHmrError(message: string, stack?: string): void {
|
|
256
|
-
const hook = getOrCreateHook();
|
|
257
|
-
hook.emit(createHmrErrorEvent(message, stack));
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Guard 위반 리포트 (간편 API)
|
|
262
|
-
*/
|
|
263
|
-
export function reportGuardViolation(
|
|
264
|
-
violation: Omit<GuardViolation, 'id' | 'timestamp'>
|
|
265
|
-
): void {
|
|
266
|
-
const hook = getOrCreateHook();
|
|
267
|
-
hook.emit(createGuardViolationEvent(violation));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// ============================================================================
|
|
271
|
-
// DevTools API (for external use)
|
|
272
|
-
// ============================================================================
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* DevTools 공개 API
|
|
276
|
-
* window.ManduDevTools로 접근 가능
|
|
277
|
-
*/
|
|
278
|
-
export const ManduDevTools = {
|
|
279
|
-
/**
|
|
280
|
-
* 로그 출력
|
|
281
|
-
*/
|
|
282
|
-
log(level: 'info' | 'warn' | 'error', message: string, data?: unknown): void {
|
|
283
|
-
const hook = getOrCreateHook();
|
|
284
|
-
hook.emit({
|
|
285
|
-
type: 'log',
|
|
286
|
-
timestamp: Date.now(),
|
|
287
|
-
data: { level, message, data },
|
|
288
|
-
});
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* 에러 리포트
|
|
293
|
-
*/
|
|
294
|
-
reportError,
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* 타이머 시작
|
|
298
|
-
*/
|
|
299
|
-
time(label: string): void {
|
|
300
|
-
if (typeof performance !== 'undefined') {
|
|
301
|
-
performance.mark(`mandu-time-${label}`);
|
|
302
|
-
}
|
|
303
|
-
},
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* 타이머 종료 및 시간 반환
|
|
307
|
-
*/
|
|
308
|
-
timeEnd(label: string): number {
|
|
309
|
-
if (typeof performance !== 'undefined') {
|
|
310
|
-
const markName = `mandu-time-${label}`;
|
|
311
|
-
try {
|
|
312
|
-
performance.measure(`mandu-measure-${label}`, markName);
|
|
313
|
-
const entries = performance.getEntriesByName(`mandu-measure-${label}`);
|
|
314
|
-
const duration = entries[entries.length - 1]?.duration ?? 0;
|
|
315
|
-
performance.clearMarks(markName);
|
|
316
|
-
performance.clearMeasures(`mandu-measure-${label}`);
|
|
317
|
-
return duration;
|
|
318
|
-
} catch {
|
|
319
|
-
return 0;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
return 0;
|
|
323
|
-
},
|
|
324
|
-
|
|
325
|
-
/**
|
|
326
|
-
* DevTools 토글
|
|
327
|
-
*/
|
|
328
|
-
toggle(): void {
|
|
329
|
-
const hook = getOrCreateHook();
|
|
330
|
-
hook.emit({
|
|
331
|
-
type: 'devtools:toggle',
|
|
332
|
-
timestamp: Date.now(),
|
|
333
|
-
data: {},
|
|
334
|
-
});
|
|
335
|
-
},
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* DevTools 열기
|
|
339
|
-
*/
|
|
340
|
-
open(): void {
|
|
341
|
-
const hook = getOrCreateHook();
|
|
342
|
-
hook.emit({
|
|
343
|
-
type: 'devtools:open',
|
|
344
|
-
timestamp: Date.now(),
|
|
345
|
-
data: {},
|
|
346
|
-
});
|
|
347
|
-
},
|
|
348
|
-
|
|
349
|
-
/**
|
|
350
|
-
* DevTools 닫기
|
|
351
|
-
*/
|
|
352
|
-
close(): void {
|
|
353
|
-
const hook = getOrCreateHook();
|
|
354
|
-
hook.emit({
|
|
355
|
-
type: 'devtools:close',
|
|
356
|
-
timestamp: Date.now(),
|
|
357
|
-
data: {},
|
|
358
|
-
});
|
|
359
|
-
},
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* 에러 목록 클리어
|
|
363
|
-
*/
|
|
364
|
-
clearErrors(): void {
|
|
365
|
-
const hook = getOrCreateHook();
|
|
366
|
-
hook.emit({
|
|
367
|
-
type: 'error:clear',
|
|
368
|
-
timestamp: Date.now(),
|
|
369
|
-
data: {},
|
|
370
|
-
});
|
|
371
|
-
},
|
|
372
|
-
};
|
|
373
|
-
|
|
374
|
-
// 브라우저 환경에서 전역 객체에 등록
|
|
375
|
-
if (typeof window !== 'undefined') {
|
|
376
|
-
(window as Window & { ManduDevTools?: typeof ManduDevTools }).ManduDevTools =
|
|
377
|
-
ManduDevTools;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
// ============================================================================
|
|
381
|
-
// v1.1: Server Module (Source Context Provider)
|
|
382
|
-
// ============================================================================
|
|
383
|
-
|
|
384
|
-
export {
|
|
385
|
-
SourceContextProvider,
|
|
386
|
-
SourcemapParser,
|
|
387
|
-
createViteMiddleware,
|
|
388
|
-
manduSourceContextPlugin,
|
|
389
|
-
type SourceContextRequest,
|
|
390
|
-
type SourceContextResponse,
|
|
391
|
-
type SourceContextProviderOptions,
|
|
392
|
-
type SourcemapPosition,
|
|
393
|
-
type SourcemapParseResult,
|
|
394
|
-
} from './server';
|
|
395
|
-
|
|
396
|
-
// ============================================================================
|
|
397
|
-
// v1.1: Worker Module (Redaction Worker)
|
|
398
|
-
// ============================================================================
|
|
399
|
-
|
|
400
|
-
export {
|
|
401
|
-
// Redaction Worker
|
|
402
|
-
redactText,
|
|
403
|
-
truncateText,
|
|
404
|
-
BUILT_IN_SECRET_PATTERNS,
|
|
405
|
-
PII_PATTERNS,
|
|
406
|
-
type WorkerRequest,
|
|
407
|
-
type WorkerResponse,
|
|
408
|
-
|
|
409
|
-
// Worker Manager
|
|
410
|
-
WorkerManager,
|
|
411
|
-
getWorkerManager,
|
|
412
|
-
initializeWorkerManager,
|
|
413
|
-
destroyWorkerManager,
|
|
414
|
-
type WorkerStatus,
|
|
415
|
-
type WorkerManagerOptions,
|
|
416
|
-
} from './worker';
|
|
417
|
-
|
|
418
|
-
// ============================================================================
|
|
419
|
-
// v1.1: AI Module (Context Builder, MCP Connector)
|
|
420
|
-
// ============================================================================
|
|
421
|
-
|
|
422
|
-
export {
|
|
423
|
-
// Context Builder
|
|
424
|
-
AIContextBuilder,
|
|
425
|
-
getContextBuilder,
|
|
426
|
-
resetContextBuilder,
|
|
427
|
-
type ContextBuilderOptions,
|
|
428
|
-
type UserAction,
|
|
429
|
-
|
|
430
|
-
// MCP Connector
|
|
431
|
-
MCPConnector,
|
|
432
|
-
getMCPConnector,
|
|
433
|
-
destroyMCPConnector,
|
|
434
|
-
type MCPConnectorOptions,
|
|
435
|
-
type MCPMessage,
|
|
436
|
-
type AnalysisRequest,
|
|
437
|
-
type AnalysisResponse,
|
|
438
|
-
type MCPConnectionStatus,
|
|
439
|
-
} from './ai';
|
|
1
|
+
/**
|
|
2
|
+
* Mandu Kitchen DevTools
|
|
3
|
+
* AI-Native Developer Tools for Mandu Framework
|
|
4
|
+
*
|
|
5
|
+
* @version 1.1.0
|
|
6
|
+
* @description "만두를 찌듯 편안하게 디버깅한다"
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Types
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
export type {
|
|
14
|
+
// Core
|
|
15
|
+
KitchenEvent,
|
|
16
|
+
|
|
17
|
+
// Error
|
|
18
|
+
ErrorType,
|
|
19
|
+
Severity,
|
|
20
|
+
NormalizedError,
|
|
21
|
+
|
|
22
|
+
// Island
|
|
23
|
+
HydrationStrategy,
|
|
24
|
+
IslandStatus,
|
|
25
|
+
IslandSnapshot,
|
|
26
|
+
|
|
27
|
+
// Network
|
|
28
|
+
NetworkRequest,
|
|
29
|
+
NetworkBodyPolicy,
|
|
30
|
+
|
|
31
|
+
// Guard
|
|
32
|
+
GuardViolation,
|
|
33
|
+
|
|
34
|
+
// AI Context
|
|
35
|
+
CodeContextInfo,
|
|
36
|
+
AIContextPayload,
|
|
37
|
+
|
|
38
|
+
// Redaction
|
|
39
|
+
RedactPattern,
|
|
40
|
+
|
|
41
|
+
// Persistence
|
|
42
|
+
PreserveLogConfig,
|
|
43
|
+
|
|
44
|
+
// Worker
|
|
45
|
+
WorkerPolicy,
|
|
46
|
+
WorkerTask,
|
|
47
|
+
|
|
48
|
+
// Config
|
|
49
|
+
Position,
|
|
50
|
+
Theme,
|
|
51
|
+
DevToolsConfig,
|
|
52
|
+
|
|
53
|
+
// Plugin
|
|
54
|
+
KitchenAPI,
|
|
55
|
+
KitchenPanelPlugin,
|
|
56
|
+
|
|
57
|
+
// Meta
|
|
58
|
+
MetaLogType,
|
|
59
|
+
KitchenMetaLog,
|
|
60
|
+
|
|
61
|
+
// Character
|
|
62
|
+
ManduState,
|
|
63
|
+
ManduCharacterData,
|
|
64
|
+
} from './types';
|
|
65
|
+
|
|
66
|
+
export { MANDU_CHARACTERS } from './types';
|
|
67
|
+
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Design Tokens
|
|
70
|
+
// ============================================================================
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
colors,
|
|
74
|
+
typography,
|
|
75
|
+
spacing,
|
|
76
|
+
borderRadius,
|
|
77
|
+
borderWidth,
|
|
78
|
+
shadows,
|
|
79
|
+
animation,
|
|
80
|
+
zIndex,
|
|
81
|
+
breakpoints,
|
|
82
|
+
ManduDesignTokens,
|
|
83
|
+
generateCSSVariables,
|
|
84
|
+
testIds,
|
|
85
|
+
type TestId,
|
|
86
|
+
} from './design-tokens';
|
|
87
|
+
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Client
|
|
90
|
+
// ============================================================================
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
// State
|
|
94
|
+
KitchenStateManager,
|
|
95
|
+
getStateManager,
|
|
96
|
+
resetStateManager,
|
|
97
|
+
type KitchenState,
|
|
98
|
+
type StateListener,
|
|
99
|
+
|
|
100
|
+
// Error Catching
|
|
101
|
+
ErrorCatcher,
|
|
102
|
+
getErrorCatcher,
|
|
103
|
+
initializeErrorCatcher,
|
|
104
|
+
destroyErrorCatcher,
|
|
105
|
+
|
|
106
|
+
// Network Proxy
|
|
107
|
+
NetworkProxy,
|
|
108
|
+
getNetworkProxy,
|
|
109
|
+
initializeNetworkProxy,
|
|
110
|
+
destroyNetworkProxy,
|
|
111
|
+
|
|
112
|
+
// Filters
|
|
113
|
+
removeComments,
|
|
114
|
+
handleStrings,
|
|
115
|
+
redactBuiltInSecrets,
|
|
116
|
+
redactCustomPatterns,
|
|
117
|
+
truncate,
|
|
118
|
+
applyContextFilters,
|
|
119
|
+
sanitizeStackTrace,
|
|
120
|
+
sanitizeErrorMessage,
|
|
121
|
+
type FilterOptions,
|
|
122
|
+
|
|
123
|
+
// Persistence
|
|
124
|
+
PersistenceManager,
|
|
125
|
+
getPersistenceManager,
|
|
126
|
+
initializePersistence,
|
|
127
|
+
destroyPersistence,
|
|
128
|
+
|
|
129
|
+
// Components
|
|
130
|
+
ManduCharacter,
|
|
131
|
+
ManduBadge,
|
|
132
|
+
ErrorOverlay,
|
|
133
|
+
mountKitchen,
|
|
134
|
+
unmountKitchen,
|
|
135
|
+
isKitchenMounted,
|
|
136
|
+
type ManduCharacterProps,
|
|
137
|
+
type ManduBadgeProps,
|
|
138
|
+
type ErrorOverlayProps,
|
|
139
|
+
} from './client';
|
|
140
|
+
|
|
141
|
+
// ============================================================================
|
|
142
|
+
// Initialization
|
|
143
|
+
// ============================================================================
|
|
144
|
+
|
|
145
|
+
export {
|
|
146
|
+
initManduKitchen,
|
|
147
|
+
destroyManduKitchen,
|
|
148
|
+
autoInit,
|
|
149
|
+
type KitchenInstance,
|
|
150
|
+
} from './init';
|
|
151
|
+
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// Protocol
|
|
154
|
+
// ============================================================================
|
|
155
|
+
|
|
156
|
+
export type { KitchenEvents } from './protocol';
|
|
157
|
+
|
|
158
|
+
export {
|
|
159
|
+
// Type guards
|
|
160
|
+
isErrorEvent,
|
|
161
|
+
isIslandEvent,
|
|
162
|
+
isNetworkEvent,
|
|
163
|
+
isGuardEvent,
|
|
164
|
+
isHmrEvent,
|
|
165
|
+
|
|
166
|
+
// Event factories
|
|
167
|
+
createErrorEvent,
|
|
168
|
+
createIslandRegisterEvent,
|
|
169
|
+
createIslandHydrateStartEvent,
|
|
170
|
+
createIslandHydrateEndEvent,
|
|
171
|
+
createNetworkRequestEvent,
|
|
172
|
+
createNetworkResponseEvent,
|
|
173
|
+
createGuardViolationEvent,
|
|
174
|
+
createHmrUpdateEvent,
|
|
175
|
+
createHmrErrorEvent,
|
|
176
|
+
|
|
177
|
+
// Constants
|
|
178
|
+
DEVTOOLS_VERSION,
|
|
179
|
+
DEFAULT_CONFIG,
|
|
180
|
+
ALLOWED_HEADERS,
|
|
181
|
+
BLOCKED_HEADERS,
|
|
182
|
+
} from './protocol';
|
|
183
|
+
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// Hook
|
|
186
|
+
// ============================================================================
|
|
187
|
+
|
|
188
|
+
export {
|
|
189
|
+
createDevtoolsHook,
|
|
190
|
+
getOrCreateHook,
|
|
191
|
+
getHook,
|
|
192
|
+
initializeHook,
|
|
193
|
+
type ManduDevtoolsHook,
|
|
194
|
+
type EventSink,
|
|
195
|
+
} from './hook';
|
|
196
|
+
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Convenience Functions
|
|
199
|
+
// ============================================================================
|
|
200
|
+
|
|
201
|
+
import { getOrCreateHook } from './hook';
|
|
202
|
+
import type { NormalizedError, GuardViolation } from './types';
|
|
203
|
+
import {
|
|
204
|
+
createErrorEvent,
|
|
205
|
+
createHmrUpdateEvent,
|
|
206
|
+
createHmrErrorEvent,
|
|
207
|
+
createGuardViolationEvent,
|
|
208
|
+
} from './protocol';
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* 에러 리포트 (간편 API)
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```typescript
|
|
215
|
+
* import { reportError } from '@mandu/core/devtools';
|
|
216
|
+
*
|
|
217
|
+
* try {
|
|
218
|
+
* // ...
|
|
219
|
+
* } catch (e) {
|
|
220
|
+
* reportError(e);
|
|
221
|
+
* }
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
export function reportError(
|
|
225
|
+
error: Error | string,
|
|
226
|
+
options?: Partial<Omit<NormalizedError, 'id' | 'timestamp' | 'message'>>
|
|
227
|
+
): void {
|
|
228
|
+
const hook = getOrCreateHook();
|
|
229
|
+
const message = typeof error === 'string' ? error : error.message;
|
|
230
|
+
const stack = typeof error === 'string' ? undefined : error.stack;
|
|
231
|
+
|
|
232
|
+
hook.emit(
|
|
233
|
+
createErrorEvent({
|
|
234
|
+
type: options?.type ?? 'runtime',
|
|
235
|
+
severity: options?.severity ?? 'error',
|
|
236
|
+
message,
|
|
237
|
+
stack,
|
|
238
|
+
url: typeof window !== 'undefined' ? window.location.href : '',
|
|
239
|
+
...options,
|
|
240
|
+
})
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* HMR 업데이트 알림 (간편 API)
|
|
246
|
+
*/
|
|
247
|
+
export function notifyHmrUpdate(routeId: string): void {
|
|
248
|
+
const hook = getOrCreateHook();
|
|
249
|
+
hook.emit(createHmrUpdateEvent(routeId));
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* HMR 에러 알림 (간편 API)
|
|
254
|
+
*/
|
|
255
|
+
export function notifyHmrError(message: string, stack?: string): void {
|
|
256
|
+
const hook = getOrCreateHook();
|
|
257
|
+
hook.emit(createHmrErrorEvent(message, stack));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Guard 위반 리포트 (간편 API)
|
|
262
|
+
*/
|
|
263
|
+
export function reportGuardViolation(
|
|
264
|
+
violation: Omit<GuardViolation, 'id' | 'timestamp'>
|
|
265
|
+
): void {
|
|
266
|
+
const hook = getOrCreateHook();
|
|
267
|
+
hook.emit(createGuardViolationEvent(violation));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// ============================================================================
|
|
271
|
+
// DevTools API (for external use)
|
|
272
|
+
// ============================================================================
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* DevTools 공개 API
|
|
276
|
+
* window.ManduDevTools로 접근 가능
|
|
277
|
+
*/
|
|
278
|
+
export const ManduDevTools = {
|
|
279
|
+
/**
|
|
280
|
+
* 로그 출력
|
|
281
|
+
*/
|
|
282
|
+
log(level: 'info' | 'warn' | 'error', message: string, data?: unknown): void {
|
|
283
|
+
const hook = getOrCreateHook();
|
|
284
|
+
hook.emit({
|
|
285
|
+
type: 'log',
|
|
286
|
+
timestamp: Date.now(),
|
|
287
|
+
data: { level, message, data },
|
|
288
|
+
});
|
|
289
|
+
},
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* 에러 리포트
|
|
293
|
+
*/
|
|
294
|
+
reportError,
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* 타이머 시작
|
|
298
|
+
*/
|
|
299
|
+
time(label: string): void {
|
|
300
|
+
if (typeof performance !== 'undefined') {
|
|
301
|
+
performance.mark(`mandu-time-${label}`);
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* 타이머 종료 및 시간 반환
|
|
307
|
+
*/
|
|
308
|
+
timeEnd(label: string): number {
|
|
309
|
+
if (typeof performance !== 'undefined') {
|
|
310
|
+
const markName = `mandu-time-${label}`;
|
|
311
|
+
try {
|
|
312
|
+
performance.measure(`mandu-measure-${label}`, markName);
|
|
313
|
+
const entries = performance.getEntriesByName(`mandu-measure-${label}`);
|
|
314
|
+
const duration = entries[entries.length - 1]?.duration ?? 0;
|
|
315
|
+
performance.clearMarks(markName);
|
|
316
|
+
performance.clearMeasures(`mandu-measure-${label}`);
|
|
317
|
+
return duration;
|
|
318
|
+
} catch {
|
|
319
|
+
return 0;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return 0;
|
|
323
|
+
},
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* DevTools 토글
|
|
327
|
+
*/
|
|
328
|
+
toggle(): void {
|
|
329
|
+
const hook = getOrCreateHook();
|
|
330
|
+
hook.emit({
|
|
331
|
+
type: 'devtools:toggle',
|
|
332
|
+
timestamp: Date.now(),
|
|
333
|
+
data: {},
|
|
334
|
+
});
|
|
335
|
+
},
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* DevTools 열기
|
|
339
|
+
*/
|
|
340
|
+
open(): void {
|
|
341
|
+
const hook = getOrCreateHook();
|
|
342
|
+
hook.emit({
|
|
343
|
+
type: 'devtools:open',
|
|
344
|
+
timestamp: Date.now(),
|
|
345
|
+
data: {},
|
|
346
|
+
});
|
|
347
|
+
},
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* DevTools 닫기
|
|
351
|
+
*/
|
|
352
|
+
close(): void {
|
|
353
|
+
const hook = getOrCreateHook();
|
|
354
|
+
hook.emit({
|
|
355
|
+
type: 'devtools:close',
|
|
356
|
+
timestamp: Date.now(),
|
|
357
|
+
data: {},
|
|
358
|
+
});
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* 에러 목록 클리어
|
|
363
|
+
*/
|
|
364
|
+
clearErrors(): void {
|
|
365
|
+
const hook = getOrCreateHook();
|
|
366
|
+
hook.emit({
|
|
367
|
+
type: 'error:clear',
|
|
368
|
+
timestamp: Date.now(),
|
|
369
|
+
data: {},
|
|
370
|
+
});
|
|
371
|
+
},
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// 브라우저 환경에서 전역 객체에 등록
|
|
375
|
+
if (typeof window !== 'undefined') {
|
|
376
|
+
(window as Window & { ManduDevTools?: typeof ManduDevTools }).ManduDevTools =
|
|
377
|
+
ManduDevTools;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// ============================================================================
|
|
381
|
+
// v1.1: Server Module (Source Context Provider)
|
|
382
|
+
// ============================================================================
|
|
383
|
+
|
|
384
|
+
export {
|
|
385
|
+
SourceContextProvider,
|
|
386
|
+
SourcemapParser,
|
|
387
|
+
createViteMiddleware,
|
|
388
|
+
manduSourceContextPlugin,
|
|
389
|
+
type SourceContextRequest,
|
|
390
|
+
type SourceContextResponse,
|
|
391
|
+
type SourceContextProviderOptions,
|
|
392
|
+
type SourcemapPosition,
|
|
393
|
+
type SourcemapParseResult,
|
|
394
|
+
} from './server';
|
|
395
|
+
|
|
396
|
+
// ============================================================================
|
|
397
|
+
// v1.1: Worker Module (Redaction Worker)
|
|
398
|
+
// ============================================================================
|
|
399
|
+
|
|
400
|
+
export {
|
|
401
|
+
// Redaction Worker
|
|
402
|
+
redactText,
|
|
403
|
+
truncateText,
|
|
404
|
+
BUILT_IN_SECRET_PATTERNS,
|
|
405
|
+
PII_PATTERNS,
|
|
406
|
+
type WorkerRequest,
|
|
407
|
+
type WorkerResponse,
|
|
408
|
+
|
|
409
|
+
// Worker Manager
|
|
410
|
+
WorkerManager,
|
|
411
|
+
getWorkerManager,
|
|
412
|
+
initializeWorkerManager,
|
|
413
|
+
destroyWorkerManager,
|
|
414
|
+
type WorkerStatus,
|
|
415
|
+
type WorkerManagerOptions,
|
|
416
|
+
} from './worker';
|
|
417
|
+
|
|
418
|
+
// ============================================================================
|
|
419
|
+
// v1.1: AI Module (Context Builder, MCP Connector)
|
|
420
|
+
// ============================================================================
|
|
421
|
+
|
|
422
|
+
export {
|
|
423
|
+
// Context Builder
|
|
424
|
+
AIContextBuilder,
|
|
425
|
+
getContextBuilder,
|
|
426
|
+
resetContextBuilder,
|
|
427
|
+
type ContextBuilderOptions,
|
|
428
|
+
type UserAction,
|
|
429
|
+
|
|
430
|
+
// MCP Connector
|
|
431
|
+
MCPConnector,
|
|
432
|
+
getMCPConnector,
|
|
433
|
+
destroyMCPConnector,
|
|
434
|
+
type MCPConnectorOptions,
|
|
435
|
+
type MCPMessage,
|
|
436
|
+
type AnalysisRequest,
|
|
437
|
+
type AnalysisResponse,
|
|
438
|
+
type MCPConnectionStatus,
|
|
439
|
+
} from './ai';
|