@nine-lab/nine-mu 0.1.345 → 0.1.347

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/nine-mu.js CHANGED
@@ -9,8 +9,9 @@ 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, _lastPath, _hasError, _cssPath, _oldOnError, _ExceptionHook_instances, setupGlobalSniffer_fn, _renderer2, injectShadowStylesheet_fn, _handleRuntimeError, _handlePromiseError, _handleLocationChange, _sendToAiAction, renderError_fn;
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;
13
13
  import { trace as trace$1, api, nine as nine$1 } from "@nine-lab/nine-util";
14
+ import React from "react";
14
15
  class Trace extends trace$1.constructor {
15
16
  constructor() {
16
17
  super();
@@ -17537,7 +17538,7 @@ render_fn = function() {
17537
17538
  const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
17538
17539
  this.shadowRoot.innerHTML = `
17539
17540
  <style>
17540
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
17541
+ @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.346"}/dist/css/nine-mu.css";
17541
17542
  ${customImport}
17542
17543
  </style>
17543
17544
  <div class="wrapper">
@@ -43787,7 +43788,7 @@ class NineDiff extends HTMLElement {
43787
43788
  const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
43788
43789
  this.shadowRoot.innerHTML = `
43789
43790
  <style>
43790
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
43791
+ @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.346"}/dist/css/nine-mu.css";
43791
43792
  ${customImport}
43792
43793
  </style>
43793
43794
 
@@ -43927,7 +43928,7 @@ renderScaffolding_fn = function() {
43927
43928
  const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
43928
43929
  this.shadowRoot.innerHTML = `
43929
43930
  <style>
43930
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
43931
+ @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.346"}/dist/css/nine-mu.css";
43931
43932
  ${customImport}
43932
43933
  </style>
43933
43934
 
@@ -44036,7 +44037,7 @@ render_fn2 = function() {
44036
44037
  const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
44037
44038
  this.shadowRoot.innerHTML = `
44038
44039
  <style>
44039
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
44040
+ @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.346"}/dist/css/nine-mu.css";
44040
44041
  ${customImport}
44041
44042
  </style>
44042
44043
 
@@ -44366,7 +44367,7 @@ class ChatMessageBody extends HTMLElement {
44366
44367
  const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
44367
44368
  this.shadowRoot.innerHTML = `
44368
44369
  <style>
44369
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
44370
+ @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.346"}/dist/css/nine-mu.css";
44370
44371
  ${customImport}
44371
44372
  </style>
44372
44373
 
@@ -44464,196 +44465,84 @@ if (!customElements.get("nine-chat-ing")) {
44464
44465
  if (!customElements.get("nine-chat-progress")) {
44465
44466
  customElements.define("nine-chat-progress", ProgressMessage);
44466
44467
  }
44467
- class ExceptionHook extends HTMLElement {
44468
- constructor() {
44469
- super();
44470
- __privateAdd(this, _ExceptionHook_instances);
44471
- __privateAdd(this, _lastPath, window.location.pathname);
44472
- __privateAdd(this, _hasError, false);
44473
- __privateAdd(this, _cssPath, "/css/nine-exception-hook.css");
44474
- __privateAdd(this, _oldOnError, null);
44475
- __privateAdd(this, _renderer2, () => {
44476
- const customImport = nine$1.cssPath ? `@import "${nine$1.cssPath}/nine-mu.css";` : "";
44477
- this.shadowRoot.innerHTML = `
44478
- <style>
44479
- @import "https://cdn.jsdelivr.net/npm/@nine-lab/nine-mu@${"0.1.344"}/dist/css/nine-mu.css";
44480
- ${customImport}
44481
-
44482
- :host {
44483
- display: block;
44484
- width: 100%;
44485
- height: 100%;
44486
- position: relative !important; /* 내부 에러 보드의 기준점 기둥 생성 */
44487
- }
44488
-
44489
- .nine-hook-core {
44490
- width: 100%;
44491
- height: 100%;
44492
- }
44493
-
44494
- /* 🎯 [핵심 변경 2] 리액트 슬롯을 가리지 않고, 오직 "이 컴포넌트 구역"만 가득 채우는 독립 팝업 레이어 */
44495
- .nine-hook-inner-cover {
44496
- position: absolute !important;
44497
- top: 0 !important;
44498
- left: 0 !important;
44499
- width: 100% !important;
44500
- height: 100% !important;
44501
- box-sizing: border-box !important;
44502
- background-color: #FFF5F5 !important;
44503
- z-index: 2147483647 !important; /* 리액트 내부 그 어떤 오버레이보다 무조건 위 */
44504
- overflow: auto !important;
44505
- display: none; /* 평소엔 숨김 */
44506
- }
44507
- </style>
44508
-
44509
- <div class="nine-hook-core">
44510
- <slot></slot>
44511
- </div>
44512
- <div class="nine-exception-board class-target-board"></div>
44513
- `;
44514
- });
44515
- __privateAdd(this, _handleRuntimeError, (event) => {
44516
- var _a2, _b;
44517
- if (__privateGet(this, _hasError)) return;
44518
- const errorMessage = ((_a2 = event.error) == null ? void 0 : _a2.message) || event.message || String(event);
44519
- const errorStack = ((_b = event.error) == null ? void 0 : _b.stack) || "No stack trace available";
44520
- if (errorMessage && errorMessage !== "Script error.") {
44521
- __privateMethod(this, _ExceptionHook_instances, renderError_fn).call(this, errorMessage, errorStack);
44522
- }
44523
- });
44524
- __privateAdd(this, _handlePromiseError, (event) => {
44525
- if (__privateGet(this, _hasError)) return;
44526
- const reason = event.reason;
44527
- const errorMessage = (reason == null ? void 0 : reason.message) || String(reason || "Unhandled Promise Rejection");
44528
- const errorStack = (reason == null ? void 0 : reason.stack) || "No stack trace available";
44529
- __privateMethod(this, _ExceptionHook_instances, renderError_fn).call(this, errorMessage, errorStack);
44530
- });
44531
- __privateAdd(this, _handleLocationChange, () => {
44532
- setTimeout(() => {
44533
- if (__privateGet(this, _hasError) && __privateGet(this, _lastPath) !== window.location.pathname) {
44534
- __privateSet(this, _lastPath, window.location.pathname);
44535
- __privateSet(this, _hasError, false);
44536
- const exceptionBoard = this.shadowRoot.querySelector(".nine-exception-board");
44537
- if (exceptionBoard) {
44538
- exceptionBoard.innerHTML = "";
44539
- exceptionBoard.className = "nine-exception-board";
44540
- }
44541
- }
44542
- }, 50);
44543
- });
44544
- __privateAdd(this, _sendToAiAction, async (errorMessage, errorStack) => {
44545
- const btn = this.shadowRoot.querySelector(".nine-ai-btn");
44546
- const footer = this.shadowRoot.querySelector(".nine-error-footer");
44547
- if (!btn) return;
44548
- btn.disabled = true;
44549
- btn.innerText = "⚡ AI 관제탑에 소스 분석 요청 중...";
44550
- btn.classList.add("loading");
44551
- try {
44552
- if (window.triggerAutoRecovery) {
44553
- await window.triggerAutoRecovery({
44554
- message: errorMessage,
44555
- stack: errorStack || "No stack trace available",
44556
- path: window.location.pathname
44557
- });
44558
- footer.innerHTML = `✅ <b>AI 관제탑 접수 완료:</b> 분석을 바탕으로 소스 코드를 교정하고 있습니다. 잠시만 기다려주세요.`;
44559
- btn.innerText = "🚀 전송 완료";
44560
- } else {
44561
- throw new Error("window.triggerAutoRecovery 관제탑 엔진이 로드되지 않았습니다.");
44562
- }
44563
- } catch (err) {
44564
- btn.disabled = false;
44565
- btn.innerText = "❌ 재전송 시도";
44566
- footer.innerHTML = `<span style="color: #E53E3E;">⚠️ 전송 실패: ${err.message}</span>`;
44567
- }
44568
- });
44569
- this.attachShadow({ mode: "open" });
44468
+ class NineExceptionHook extends React.Component {
44469
+ constructor(props) {
44470
+ super(props);
44471
+ this.state = { hasError: false, error: null };
44472
+ this.lastPath = window.location.pathname;
44473
+ this.handleLocationChange = this.handleLocationChange.bind(this);
44570
44474
  }
44571
- connectedCallback() {
44572
- __privateGet(this, _renderer2).call(this);
44573
- __privateMethod(this, _ExceptionHook_instances, injectShadowStylesheet_fn).call(this);
44574
- __privateMethod(this, _ExceptionHook_instances, setupGlobalSniffer_fn).call(this);
44575
- window.addEventListener("unhandledrejection", __privateGet(this, _handlePromiseError), true);
44576
- window.addEventListener("popstate", __privateGet(this, _handleLocationChange));
44577
- document.addEventListener("click", __privateGet(this, _handleLocationChange), true);
44475
+ static getDerivedStateFromError(error) {
44476
+ return { hasError: true, error };
44578
44477
  }
44579
- disconnectedCallback() {
44580
- window.removeEventListener("error", __privateGet(this, _handleRuntimeError), true);
44581
- window.removeEventListener("unhandledrejection", __privateGet(this, _handlePromiseError), true);
44582
- window.removeEventListener("popstate", __privateGet(this, _handleLocationChange));
44583
- document.removeEventListener("click", __privateGet(this, _handleLocationChange), true);
44584
- if (window.onerror === __privateGet(this, _handleRuntimeError) || __privateGet(this, _oldOnError)) {
44585
- window.onerror = __privateGet(this, _oldOnError);
44586
- }
44587
- }
44588
- }
44589
- _lastPath = new WeakMap();
44590
- _hasError = new WeakMap();
44591
- _cssPath = new WeakMap();
44592
- _oldOnError = new WeakMap();
44593
- _ExceptionHook_instances = new WeakSet();
44594
- setupGlobalSniffer_fn = function() {
44595
- window.addEventListener("error", __privateGet(this, _handleRuntimeError), true);
44596
- __privateSet(this, _oldOnError, window.onerror);
44597
- window.onerror = (message, source, lineno, colno, error) => {
44598
- if (!__privateGet(this, _hasError)) {
44599
- const errorMessage = (error == null ? void 0 : error.message) || message || "알 수 없는 런타임 예외";
44600
- const errorStack = (error == null ? void 0 : error.stack) || `${source}:${lineno}:${colno}`;
44601
- __privateMethod(this, _ExceptionHook_instances, renderError_fn).call(this, errorMessage, errorStack);
44602
- }
44603
- if (__privateGet(this, _oldOnError)) {
44604
- return __privateGet(this, _oldOnError).call(this, message, source, lineno, colno, error);
44478
+ componentDidCatch(error, errorInfo) {
44479
+ console.error("🚨 [Nine-Library] 본문 렌더링 에러 포착:", error);
44480
+ if (window.triggerAutoRecovery) {
44481
+ window.triggerAutoRecovery(error.message || String(error));
44605
44482
  }
44606
- return false;
44607
- };
44608
- };
44609
- _renderer2 = new WeakMap();
44610
- injectShadowStylesheet_fn = function() {
44611
- if (this.shadowRoot.querySelector(`link[href="${__privateGet(this, _cssPath)}"]`)) return;
44612
- const link = document.createElement("link");
44613
- link.rel = "stylesheet";
44614
- link.href = __privateGet(this, _cssPath);
44615
- this.shadowRoot.appendChild(link);
44616
- };
44617
- _handleRuntimeError = new WeakMap();
44618
- _handlePromiseError = new WeakMap();
44619
- _handleLocationChange = new WeakMap();
44620
- _sendToAiAction = new WeakMap();
44621
- renderError_fn = function(errorMessage, errorStack) {
44622
- if (__privateGet(this, _hasError)) return;
44623
- __privateSet(this, _hasError, true);
44624
- setTimeout(() => {
44625
- const exceptionBoard = this.shadowRoot.querySelector(".nine-exception-board");
44626
- if (!exceptionBoard) return;
44627
- exceptionBoard.className = "nine-hook-inner-cover";
44628
- const errorHTML = `
44629
- <div class="nine-error-container" style="padding: 30px; box-sizing: border-box; font-family: sans-serif; background: white; min-height: 100%; text-align: left;">
44630
- <h3 class="nine-error-title" style="color: #C53030; margin-top: 0; font-size: 20px; font-weight: 700; border-bottom: 2px solid #FED2D2; padding-bottom: 12px; font-family: sans-serif;">⚠️ 시스템 예외 감지 (${this.tagName.toLowerCase()})</h3>
44631
- <p class="nine-error-label" style="font-weight: bold; margin: 15px 0 6px 0; color: #4A5568; font-size: 14px; font-family: sans-serif;">[에러 원인 로그]:</p>
44632
- <pre class="nine-error-log" style="background: #1A202C; color: #EDF2F7; padding: 15px; border-radius: 6px; overflow-x: auto; white-space: pre-wrap; font-family: monospace; font-size: 13px; line-height: 1.5; margin-bottom: 20px;">${errorMessage}
44633
-
44634
- [Stack Trace]
44635
- ${errorStack}</pre>
44636
-
44637
- <div class="nine-action-area" style="display: flex; align-items: center; gap: 15px; border-top: 1px solid #E2E8F0; padding-top: 15px;">
44638
- <button class="nine-ai-btn" style="background: #3182CE; color: white; border: none; padding: 10px 20px; border-radius: 6px; font-weight: bold; cursor: pointer; font-size: 14px;">🤖 AI에게 소스코드 수정 요청</button>
44639
- <div class="nine-error-footer" style="font-size: 13px; color: #718096; line-height: 1.4; font-family: sans-serif;">
44640
- 버튼을 누르면 AI가 로그 및 컴포넌트 맵을 역추적하여 수정을 시작합니다.
44641
- </div>
44642
- </div>
44643
- </div>
44644
- `;
44645
- exceptionBoard.innerHTML = errorHTML;
44646
- const aiBtn = exceptionBoard.querySelector(".nine-ai-btn");
44647
- if (aiBtn) {
44648
- aiBtn.addEventListener("click", () => __privateGet(this, _sendToAiAction).call(this, errorMessage, errorStack));
44483
+ if (this.props.onCatch) {
44484
+ this.props.onCatch(error, errorInfo);
44649
44485
  }
44650
- }, 0);
44651
- };
44652
- if (!customElements.get("nine-exception-hook")) {
44653
- customElements.define("nine-exception-hook", ExceptionHook);
44486
+ }
44487
+ componentDidMount() {
44488
+ window.addEventListener("popstate", this.handleLocationChange);
44489
+ document.addEventListener("click", this.handleLocationChange, true);
44490
+ }
44491
+ componentWillUnmount() {
44492
+ window.removeEventListener("popstate", this.handleLocationChange);
44493
+ document.removeEventListener("click", this.handleLocationChange, true);
44494
+ }
44495
+ handleLocationChange() {
44496
+ setTimeout(() => {
44497
+ if (this.state.hasError && this.lastPath !== window.location.pathname) {
44498
+ console.log("✨ [Nine-Library] 페이지 주소 변경 감지 -> 리액트 에러 상태 초기화");
44499
+ this.lastPath = window.location.pathname;
44500
+ this.setState({ hasError: false, error: null });
44501
+ }
44502
+ }, 10);
44503
+ }
44504
+ render() {
44505
+ var _a2;
44506
+ if (this.state.hasError) {
44507
+ if (this.props.fallback) {
44508
+ return this.props.fallback(this.state.error);
44509
+ }
44510
+ const errorMessage = ((_a2 = this.state.error) == null ? void 0 : _a2.message) || String(this.state.error);
44511
+ return React.createElement(
44512
+ "div",
44513
+ {
44514
+ style: {
44515
+ padding: "30px",
44516
+ margin: "20px",
44517
+ background: "#FFF5F5",
44518
+ border: "1px solid #FEB2B2",
44519
+ borderRadius: "8px",
44520
+ fontFamily: "sans-serif",
44521
+ textAlign: "left",
44522
+ ...this.props.containerStyle
44523
+ }
44524
+ },
44525
+ React.createElement("h3", { style: { color: "#C53030", marginTop: 0, fontSize: "18px" } }, "⚠️ 컴포넌트 빌드/렌더링 에러 감지"),
44526
+ React.createElement("p", { style: { margin: "10px 0 5px 0", fontWeight: "bold", color: "#4A5568" } }, "[에러 원인 로그]:"),
44527
+ React.createElement("pre", {
44528
+ style: {
44529
+ background: "#1A202C",
44530
+ color: "#EDF2F7",
44531
+ padding: "15px",
44532
+ borderRadius: "6px",
44533
+ overflowX: "auto",
44534
+ whiteSpace: "pre-wrap",
44535
+ fontFamily: "monospace"
44536
+ }
44537
+ }, errorMessage),
44538
+ React.createElement("div", { style: { marginTop: "15px", fontSize: "14px", color: "#718096" } }, "🔄 에러 로그가 관제탑으로 자동 피드백되었습니다. AI가 소스 코드를 재수정하는 동안 잠시만 기다려주세요...")
44539
+ );
44540
+ }
44541
+ return this.props.children;
44542
+ }
44654
44543
  }
44655
44544
  const NineMu = {
44656
- version: "0.1.344",
44545
+ version: "0.1.346",
44657
44546
  init: (config2) => {
44658
44547
  trace$1.log("🛠️ Nine-Mu Engine initialized", config2);
44659
44548
  }
@@ -44662,6 +44551,7 @@ export {
44662
44551
  NineChat,
44663
44552
  NineDiff,
44664
44553
  NineDiffPopup,
44554
+ NineExceptionHook,
44665
44555
  NineMu,
44666
44556
  NineMu as default
44667
44557
  };