@nine-lab/nine-mu 0.1.333 → 0.1.335
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/css/nine-mu.css +88 -0
- package/dist/nine-mu.js +128 -68
- package/dist/nine-mu.js.map +1 -1
- package/dist/nine-mu.umd.js +3 -3
- package/dist/nine-mu.umd.js.map +1 -1
- package/package.json +1 -1
- package/public/css/nine-mu.css +88 -0
- package/src/components/ChatMessage.js +1 -1
- package/src/components/NineChat.js +2 -1
- package/src/components/NineDiff.js +1 -1
- package/src/components/NineNatualQueryInput.js +1 -1
- package/src/components/exception/ExceptionHook.js +107 -46
package/dist/css/nine-mu.css
CHANGED
|
@@ -940,4 +940,92 @@
|
|
|
940
940
|
/* JS로 내용이 채워지므로 별도의 CSS 애니메이션은 필요 없음 */
|
|
941
941
|
}
|
|
942
942
|
}
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
:host(nine-exception-hook) {
|
|
946
|
+
display: block;
|
|
947
|
+
width: 100%;
|
|
948
|
+
height: 100%;
|
|
949
|
+
color: inherit;
|
|
950
|
+
font-size: inherit;
|
|
951
|
+
line-height: inherit;
|
|
952
|
+
|
|
953
|
+
/* 내부 모든 엘리먼트의 여백 계산법을 어드민 기본형에 동기화 */
|
|
954
|
+
.nine-error-container *,
|
|
955
|
+
.nine-error-container *::before,
|
|
956
|
+
.nine-error-container *::after {
|
|
957
|
+
box-sizing: border-box;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
.nine-error-container {
|
|
961
|
+
padding: 30px;
|
|
962
|
+
margin: 20px;
|
|
963
|
+
background-color: #FFF5F5;
|
|
964
|
+
border: 1px solid #FEB2B2;
|
|
965
|
+
border-radius: 8px;
|
|
966
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
.nine-error-title {
|
|
970
|
+
color: #C53030;
|
|
971
|
+
margin-top: 0;
|
|
972
|
+
font-size: 18px;
|
|
973
|
+
font-weight: bold;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
.nine-error-label {
|
|
977
|
+
margin: 10px 0 5px 0;
|
|
978
|
+
font-weight: bold;
|
|
979
|
+
color: #4A5568;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
.nine-error-log {
|
|
983
|
+
background-color: #1A202C;
|
|
984
|
+
color: #EDF2F7;
|
|
985
|
+
padding: 15px;
|
|
986
|
+
border-radius: 6px;
|
|
987
|
+
overflow-x: auto;
|
|
988
|
+
white-space: pre-wrap;
|
|
989
|
+
font-family: 'Courier New', Courier, monospace;
|
|
990
|
+
font-size: 14px;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
/* 💡 버튼 커스텀 디자인 세트 */
|
|
994
|
+
.nine-ai-btn {
|
|
995
|
+
background-color: #3182CE;
|
|
996
|
+
color: white;
|
|
997
|
+
padding: 10px 20px;
|
|
998
|
+
font-size: 14px;
|
|
999
|
+
font-weight: bold;
|
|
1000
|
+
border: none;
|
|
1001
|
+
border-radius: 6px;
|
|
1002
|
+
cursor: pointer;
|
|
1003
|
+
transition: background-color 0.2s ease;
|
|
1004
|
+
white-space: nowrap;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
.nine-ai-btn:hover {
|
|
1008
|
+
background-color: #2B6CB0;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
.nine-ai-btn:disabled {
|
|
1012
|
+
background-color: #A0AEC0;
|
|
1013
|
+
cursor: not-allowed;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
.nine-ai-btn.loading {
|
|
1017
|
+
background-color: #4A5568;
|
|
1018
|
+
animation: pulse 1.5s infinite ease-in-out;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
.nine-error-footer {
|
|
1022
|
+
font-size: 14px;
|
|
1023
|
+
color: #718096;
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
@keyframes pulse {
|
|
1028
|
+
0% { opacity: 0.6; }
|
|
1029
|
+
50% { opacity: 1; }
|
|
1030
|
+
100% { opacity: 0.6; }
|
|
943
1031
|
}
|
package/dist/nine-mu.js
CHANGED
|
@@ -9,7 +9,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
9
9
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
10
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
11
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
12
|
-
var _owner, _collectedFiles, _NotificationHandler_instances, handleLoggingMessage_fn, _collectModifySource, _openDiffPopup, _openRouteDiffPopup, _generateSource, _generateMenu, _mcpClient, _onAction, _onStatus, _onMessage, _owner2, _routeUrl, _chatHistory, _notiHandler, _NineChatManager_instances, connect_fn, updateStatus_fn, callTool_fn, _getSourcePath, _service, _packageName, _routesPath, _connectorUrl, _manager, _config, _$nineChatMessage, _NineChat_instances, initInteractions_fn, initActions_fn, render_fn, _sourceGenHandler, _asisEditorView, _tobeEditorView, _asisEditorEl, _tobeEditorEl, _isDirty, _initialAsisSrc, _initialTobeSrc, _languageCompartment, _isScrollSyncActive, _initCodeMirror, _checkDirtyState, _setupScrollSync, _applyDiffDecorations, _dialog, _tabContainer, _fileList, _host, _NineDiffPopup_instances, renderScaffolding_fn, handleConfirmAll_fn, handleCancel_fn, _dialog2, _diffView, _asisBackup, _host2, _NineMenuDiffPopup_instances, render_fn2, handleConfirm_fn, handleCancel_fn2, _message, _data, _unique, _init, _message2, _init2, _progressData, _progressElements, _animationIntervals, _ProgressMessage_instances, updateCurrentActiveProgress_fn, renderProgress_fn, updateProgressItemVisuals_fn, startAnimation_fn, updateProgressItem_fn, _renderer, _init3;
|
|
12
|
+
var _owner, _collectedFiles, _NotificationHandler_instances, handleLoggingMessage_fn, _collectModifySource, _openDiffPopup, _openRouteDiffPopup, _generateSource, _generateMenu, _mcpClient, _onAction, _onStatus, _onMessage, _owner2, _routeUrl, _chatHistory, _notiHandler, _NineChatManager_instances, connect_fn, updateStatus_fn, callTool_fn, _getSourcePath, _service, _packageName, _routesPath, _connectorUrl, _manager, _config, _$nineChatMessage, _NineChat_instances, initInteractions_fn, initActions_fn, render_fn, _sourceGenHandler, _asisEditorView, _tobeEditorView, _asisEditorEl, _tobeEditorEl, _isDirty, _initialAsisSrc, _initialTobeSrc, _languageCompartment, _isScrollSyncActive, _initCodeMirror, _checkDirtyState, _setupScrollSync, _applyDiffDecorations, _dialog, _tabContainer, _fileList, _host, _NineDiffPopup_instances, renderScaffolding_fn, handleConfirmAll_fn, handleCancel_fn, _dialog2, _diffView, _asisBackup, _host2, _NineMenuDiffPopup_instances, render_fn2, handleConfirm_fn, handleCancel_fn2, _message, _data, _unique, _init, _message2, _init2, _progressData, _progressElements, _animationIntervals, _ProgressMessage_instances, updateCurrentActiveProgress_fn, renderProgress_fn, updateProgressItemVisuals_fn, startAnimation_fn, updateProgressItem_fn, _renderer, _init3, _lastPath, _hasError, _cssPath, _renderer2, _ExceptionHook_instances, injectShadowStylesheet_fn, _handleRuntimeError, _handlePromiseError, _handleLocationChange, _sendToAiAction, renderError_fn;
|
|
13
13
|
import { trace as trace$1, api, nine as nine$1 } from "@nine-lab/nine-util";
|
|
14
14
|
class Trace extends trace$1.constructor {
|
|
15
15
|
constructor() {
|
|
@@ -17534,10 +17534,10 @@ initActions_fn = function() {
|
|
|
17534
17534
|
};
|
|
17535
17535
|
render_fn = function() {
|
|
17536
17536
|
const placeholder = this.getAttribute("placeholder") || "나에게 무엇이든 물어봐...";
|
|
17537
|
-
const customImport =
|
|
17537
|
+
const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
|
|
17538
17538
|
this.shadowRoot.innerHTML = `
|
|
17539
17539
|
<style>
|
|
17540
|
-
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.
|
|
17540
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
17541
17541
|
${customImport}
|
|
17542
17542
|
</style>
|
|
17543
17543
|
<div class="wrapper">
|
|
@@ -43784,10 +43784,10 @@ class NineDiff extends HTMLElement {
|
|
|
43784
43784
|
return __privateGet(this, _isDirty);
|
|
43785
43785
|
}
|
|
43786
43786
|
connectedCallback() {
|
|
43787
|
-
const customImport =
|
|
43787
|
+
const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
|
|
43788
43788
|
this.shadowRoot.innerHTML = `
|
|
43789
43789
|
<style>
|
|
43790
|
-
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.
|
|
43790
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
43791
43791
|
${customImport}
|
|
43792
43792
|
</style>
|
|
43793
43793
|
|
|
@@ -43927,7 +43927,7 @@ renderScaffolding_fn = function() {
|
|
|
43927
43927
|
const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
|
|
43928
43928
|
this.shadowRoot.innerHTML = `
|
|
43929
43929
|
<style>
|
|
43930
|
-
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.
|
|
43930
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
43931
43931
|
${customImport}
|
|
43932
43932
|
</style>
|
|
43933
43933
|
|
|
@@ -44036,7 +44036,7 @@ render_fn2 = function() {
|
|
|
44036
44036
|
const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
|
|
44037
44037
|
this.shadowRoot.innerHTML = `
|
|
44038
44038
|
<style>
|
|
44039
|
-
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.
|
|
44039
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
44040
44040
|
${customImport}
|
|
44041
44041
|
</style>
|
|
44042
44042
|
|
|
@@ -44363,10 +44363,10 @@ class ChatMessageBody extends HTMLElement {
|
|
|
44363
44363
|
constructor() {
|
|
44364
44364
|
super();
|
|
44365
44365
|
__privateAdd(this, _renderer, () => {
|
|
44366
|
-
const customImport = nine.cssPath ? `@import "${nine.cssPath}/
|
|
44366
|
+
const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
|
|
44367
44367
|
this.shadowRoot.innerHTML = `
|
|
44368
44368
|
<style>
|
|
44369
|
-
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.
|
|
44369
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
44370
44370
|
${customImport}
|
|
44371
44371
|
</style>
|
|
44372
44372
|
|
|
@@ -44467,81 +44467,141 @@ if (!customElements.get("nine-chat-progress")) {
|
|
|
44467
44467
|
class ExceptionHook extends HTMLElement {
|
|
44468
44468
|
constructor() {
|
|
44469
44469
|
super();
|
|
44470
|
-
this
|
|
44471
|
-
|
|
44472
|
-
this
|
|
44470
|
+
__privateAdd(this, _ExceptionHook_instances);
|
|
44471
|
+
// 💡 [핵심] 비공개 인스턴스 필드는 클래스 최상단에 먼저 선언해야 합니다.
|
|
44472
|
+
__privateAdd(this, _lastPath, window.location.pathname);
|
|
44473
|
+
__privateAdd(this, _hasError, false);
|
|
44474
|
+
__privateAdd(this, _cssPath, "/css/nine-exception-hook.css");
|
|
44475
|
+
__privateAdd(this, _renderer2, () => {
|
|
44476
|
+
const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
|
|
44477
|
+
this.shadowRoot.innerHTML = `
|
|
44478
|
+
<style>
|
|
44479
|
+
@import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.334"}/dist/css/nine-mu.css";
|
|
44480
|
+
${customImport}
|
|
44481
|
+
</style>
|
|
44482
|
+
|
|
44483
|
+
<div class="nine-hook-core">
|
|
44484
|
+
<slot></slot>
|
|
44485
|
+
</div>
|
|
44486
|
+
<div class="nine-exception-board"></div>
|
|
44487
|
+
`;
|
|
44488
|
+
});
|
|
44489
|
+
__privateAdd(this, _handleRuntimeError, (event) => {
|
|
44490
|
+
var _a2, _b;
|
|
44491
|
+
if (__privateGet(this, _hasError)) return;
|
|
44492
|
+
if (this.contains(event.target) || event.error) {
|
|
44493
|
+
__privateMethod(this, _ExceptionHook_instances, renderError_fn).call(this, ((_a2 = event.error) == null ? void 0 : _a2.message) || event.message, (_b = event.error) == null ? void 0 : _b.stack);
|
|
44494
|
+
}
|
|
44495
|
+
});
|
|
44496
|
+
__privateAdd(this, _handlePromiseError, (event) => {
|
|
44497
|
+
var _a2, _b;
|
|
44498
|
+
if (__privateGet(this, _hasError)) return;
|
|
44499
|
+
__privateMethod(this, _ExceptionHook_instances, renderError_fn).call(this, ((_a2 = event.reason) == null ? void 0 : _a2.message) || String(event.reason), (_b = event.reason) == null ? void 0 : _b.stack);
|
|
44500
|
+
});
|
|
44501
|
+
__privateAdd(this, _handleLocationChange, () => {
|
|
44502
|
+
setTimeout(() => {
|
|
44503
|
+
if (__privateGet(this, _hasError) && __privateGet(this, _lastPath) !== window.location.pathname) {
|
|
44504
|
+
console.log("✨ [nine-exception-hook] Shadow DOM 내부 예외 청소 및 정상 복구");
|
|
44505
|
+
__privateSet(this, _lastPath, window.location.pathname);
|
|
44506
|
+
__privateSet(this, _hasError, false);
|
|
44507
|
+
const exceptionBoard = this.shadowRoot.querySelector(".nine-exception-board");
|
|
44508
|
+
if (exceptionBoard) exceptionBoard.innerHTML = "";
|
|
44509
|
+
const coreContainer = this.shadowRoot.querySelector(".nine-hook-core");
|
|
44510
|
+
if (coreContainer) coreContainer.style.display = "";
|
|
44511
|
+
}
|
|
44512
|
+
}, 10);
|
|
44513
|
+
});
|
|
44514
|
+
__privateAdd(this, _sendToAiAction, async (errorMessage, errorStack) => {
|
|
44515
|
+
const btn = this.shadowRoot.querySelector(".nine-ai-btn");
|
|
44516
|
+
const footer = this.shadowRoot.querySelector(".nine-error-footer");
|
|
44517
|
+
if (!btn) return;
|
|
44518
|
+
btn.disabled = true;
|
|
44519
|
+
btn.innerText = "⚡ AI 관제탑에 소스 분석 요청 중...";
|
|
44520
|
+
btn.classList.add("loading");
|
|
44521
|
+
try {
|
|
44522
|
+
if (window.triggerAutoRecovery) {
|
|
44523
|
+
await window.triggerAutoRecovery({
|
|
44524
|
+
message: errorMessage,
|
|
44525
|
+
stack: errorStack || "No stack trace available",
|
|
44526
|
+
path: window.location.pathname
|
|
44527
|
+
});
|
|
44528
|
+
footer.innerHTML = `✅ <b>AI 관제탑 접수 완료:</b> 분석을 바탕으로 소스 코드를 교정하고 있습니다. 잠시만 기다려주세요.`;
|
|
44529
|
+
btn.innerText = "🚀 전송 완료";
|
|
44530
|
+
} else {
|
|
44531
|
+
throw new Error("window.triggerAutoRecovery 관제탑 엔진이 로드되지 않았습니다.");
|
|
44532
|
+
}
|
|
44533
|
+
} catch (err) {
|
|
44534
|
+
console.error("❌ AI 전송 실패:", err);
|
|
44535
|
+
btn.disabled = false;
|
|
44536
|
+
btn.innerText = "❌ 재전송 시도";
|
|
44537
|
+
footer.innerHTML = `<span style="color: #E53E3E;">⚠️ 전송 실패: ${err.message}</span>`;
|
|
44538
|
+
}
|
|
44539
|
+
});
|
|
44540
|
+
this.attachShadow({ mode: "open" });
|
|
44473
44541
|
}
|
|
44474
44542
|
connectedCallback() {
|
|
44475
|
-
this.
|
|
44476
|
-
|
|
44477
|
-
window.addEventListener("
|
|
44478
|
-
window.addEventListener("
|
|
44479
|
-
|
|
44543
|
+
__privateGet(this, _renderer2).call(this);
|
|
44544
|
+
__privateMethod(this, _ExceptionHook_instances, injectShadowStylesheet_fn).call(this);
|
|
44545
|
+
window.addEventListener("error", __privateGet(this, _handleRuntimeError), true);
|
|
44546
|
+
window.addEventListener("unhandledrejection", __privateGet(this, _handlePromiseError), true);
|
|
44547
|
+
window.addEventListener("popstate", __privateGet(this, _handleLocationChange));
|
|
44548
|
+
document.addEventListener("click", __privateGet(this, _handleLocationChange), true);
|
|
44480
44549
|
}
|
|
44481
44550
|
disconnectedCallback() {
|
|
44482
|
-
window.removeEventListener("error", this
|
|
44483
|
-
window.removeEventListener("unhandledrejection", this
|
|
44484
|
-
window.removeEventListener("popstate", this
|
|
44485
|
-
document.removeEventListener("click", this
|
|
44486
|
-
}
|
|
44487
|
-
|
|
44488
|
-
|
|
44489
|
-
|
|
44490
|
-
|
|
44491
|
-
|
|
44492
|
-
|
|
44493
|
-
|
|
44494
|
-
|
|
44495
|
-
|
|
44496
|
-
|
|
44497
|
-
|
|
44498
|
-
|
|
44499
|
-
|
|
44500
|
-
|
|
44501
|
-
|
|
44502
|
-
|
|
44503
|
-
|
|
44504
|
-
|
|
44505
|
-
|
|
44506
|
-
|
|
44507
|
-
|
|
44508
|
-
|
|
44509
|
-
|
|
44510
|
-
|
|
44511
|
-
|
|
44512
|
-
Array.from(this.children).forEach((child) => {
|
|
44513
|
-
if (child.tagName !== "LINK") child.style.display = "";
|
|
44514
|
-
});
|
|
44515
|
-
}
|
|
44516
|
-
}, 10);
|
|
44517
|
-
}
|
|
44518
|
-
renderError(errorMessage) {
|
|
44519
|
-
if (this.hasError) return;
|
|
44520
|
-
this.hasError = true;
|
|
44521
|
-
if (window.triggerAutoRecovery) {
|
|
44522
|
-
window.triggerAutoRecovery(errorMessage);
|
|
44523
|
-
}
|
|
44524
|
-
Array.from(this.children).forEach((child) => {
|
|
44525
|
-
if (child.tagName !== "LINK") child.style.display = "none";
|
|
44526
|
-
});
|
|
44527
|
-
const errorHTML = `
|
|
44551
|
+
window.removeEventListener("error", __privateGet(this, _handleRuntimeError), true);
|
|
44552
|
+
window.removeEventListener("unhandledrejection", __privateGet(this, _handlePromiseError), true);
|
|
44553
|
+
window.removeEventListener("popstate", __privateGet(this, _handleLocationChange));
|
|
44554
|
+
document.removeEventListener("click", __privateGet(this, _handleLocationChange), true);
|
|
44555
|
+
}
|
|
44556
|
+
}
|
|
44557
|
+
_lastPath = new WeakMap();
|
|
44558
|
+
_hasError = new WeakMap();
|
|
44559
|
+
_cssPath = new WeakMap();
|
|
44560
|
+
_renderer2 = new WeakMap();
|
|
44561
|
+
_ExceptionHook_instances = new WeakSet();
|
|
44562
|
+
injectShadowStylesheet_fn = function() {
|
|
44563
|
+
if (this.shadowRoot.querySelector(`link[href="${__privateGet(this, _cssPath)}"]`)) return;
|
|
44564
|
+
const link = document.createElement("link");
|
|
44565
|
+
link.rel = "stylesheet";
|
|
44566
|
+
link.href = __privateGet(this, _cssPath);
|
|
44567
|
+
this.shadowRoot.appendChild(link);
|
|
44568
|
+
};
|
|
44569
|
+
_handleRuntimeError = new WeakMap();
|
|
44570
|
+
_handlePromiseError = new WeakMap();
|
|
44571
|
+
_handleLocationChange = new WeakMap();
|
|
44572
|
+
_sendToAiAction = new WeakMap();
|
|
44573
|
+
renderError_fn = function(errorMessage, errorStack) {
|
|
44574
|
+
if (__privateGet(this, _hasError)) return;
|
|
44575
|
+
__privateSet(this, _hasError, true);
|
|
44576
|
+
const coreContainer = this.shadowRoot.querySelector(".nine-hook-core");
|
|
44577
|
+
if (coreContainer) coreContainer.style.display = "none";
|
|
44578
|
+
const exceptionBoard = this.shadowRoot.querySelector(".nine-exception-board");
|
|
44579
|
+
if (!exceptionBoard) return;
|
|
44580
|
+
const errorHTML = `
|
|
44528
44581
|
<div class="nine-error-container">
|
|
44529
44582
|
<h3 class="nine-error-title">⚠️ 시스템 예외 감지 (${this.tagName.toLowerCase()})</h3>
|
|
44530
44583
|
<p class="nine-error-label">[에러 원인 로그]:</p>
|
|
44531
44584
|
<pre class="nine-error-log">${errorMessage}</pre>
|
|
44532
|
-
|
|
44533
|
-
|
|
44585
|
+
|
|
44586
|
+
<div class="nine-action-area" style="margin-top: 20px; display: flex; align-items: center; gap: 15px;">
|
|
44587
|
+
<button class="nine-ai-btn">🤖 AI에게 소스코드 수정 요청</button>
|
|
44588
|
+
<div class="nine-error-footer">
|
|
44589
|
+
버튼을 누르면 AI가 로그 및 컴포넌트 맵을 역추적하여 수정을 시작합니다.
|
|
44590
|
+
</div>
|
|
44534
44591
|
</div>
|
|
44535
44592
|
</div>
|
|
44536
44593
|
`;
|
|
44537
|
-
|
|
44594
|
+
exceptionBoard.innerHTML = errorHTML;
|
|
44595
|
+
const aiBtn = this.shadowRoot.querySelector(".nine-ai-btn");
|
|
44596
|
+
if (aiBtn) {
|
|
44597
|
+
aiBtn.addEventListener("click", () => __privateGet(this, _sendToAiAction).call(this, errorMessage, errorStack));
|
|
44538
44598
|
}
|
|
44539
|
-
}
|
|
44599
|
+
};
|
|
44540
44600
|
if (!customElements.get("nine-exception-hook")) {
|
|
44541
44601
|
customElements.define("nine-exception-hook", ExceptionHook);
|
|
44542
44602
|
}
|
|
44543
44603
|
const NineMu = {
|
|
44544
|
-
version: "0.1.
|
|
44604
|
+
version: "0.1.334",
|
|
44545
44605
|
init: (config2) => {
|
|
44546
44606
|
trace$1.log("🛠️ Nine-Mu Engine initialized", config2);
|
|
44547
44607
|
}
|