🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기
비교 대상 선택
추가 29줄 삭제 5줄 변경 39줄 동일 76줄
r1 파일 가져오기: plugin-ai.md
2026-04-17 14:54

플러그인 개요

ai 플러그인은 T2Editor의 기본 설치에 포함되는 확장 모듈로, 특정 기능을 에디터에 추가하거나 사용자 경험을 향상시키기 위해 제공됩니다. 본 문서는 플러그인의 역할과 동작 방식을 초보자와 일반 웹마스터도 이해할 수 있도록 설명하고, 전문 개발자를 위한 내부 구조와 확장 포인트를 상세히 제공합니다.

초보자와 웹마스터를 위한 기능 설명

이 섹션에서는 플러그인의 주요 기능과 사용법을 쉽게 설명합니다. 각 플러그인은 툴바 버튼이나 단축키를 통해 호출되며, 파일이나 미디어를 삽입하고, 콘텐츠를 포맷하고, 검색과 협업을 지원합니다.

  • 주요 역할: 플러그인이 어떤 기능을 사용자에게 제공하는지 요약합니다. 예를 들어, image 플러그인은 이미지 업로드와 미리보기, 크기 조절을 지원하며, search 플러그인은 에디터 내 검색과 T2Search API 연동을 제공합니다.
  • 사용 시나리오: 플러그인을 언제 사용해야 하는지, 어떤 메뉴나 버튼에서 접근하는지 설명합니다.
  • 권한 및 설정: 플러그인이 파일 업로드를 수행하는 경우, 서버의 /data 또는 /collab 디렉터리에 적절한 권한(707)을 부여해야 합니다.

초보자는 플러그인의 코드를 수정할 필요 없이, 제공되는 설정과 기본 동작을 활용해 에디터를 사용할 수 있습니다.

전문 개발자를 위한 구조 분석

파일 구조

  • JavaScript: 9.0.0/t2editor/plugin/ai/ai.js
  • CSS: 9.0.0/t2editor/plugin/ai/ai.css

내부 메서드

플러그인의 자바스크립트 파일에는 다음과 같은 주요 메서드들이 정의되어 있습니다. 각 메서드는 클래스 내부에서 특정 이벤트를 처리하거나 사용자 인터랙션에 응답합니다.

  • closeModal(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • createLinkElement(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • createTableFromData(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • displayResult(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • escapeHtml(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • getRateLimitBadgeHTML(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • handleCommand(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • insertToEditor(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • parseAndConvertBlocks(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • parseTableData(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • parseTextFormatting(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • renderPreview(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • showAiInfoPopup(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.
  • updateRateLimitDisplay(): 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다.

초기화 및 이벤트 흐름

플러그인은 에디터 초기화 과정에서 editor.lib.php에 등록됩니다. 플러그인 등록 순서는 editor.lib.php의 $plugin_priority 배열에서 지정할 수 있으며, 0은 즉시 로드, 1·2·3은 지연 로드를 의미합니다.

플러그인의 초기화 함수는 에디터가 준비된 시점에 호출되며, 필요한 UI 요소를 생성하고 이벤트 리스너를 바인딩합니다. 각 메서드는 사용자 입력이나 명령 실행 시 동작하므로, 수정 시에는 호출 관계를 잘 파악해야 합니다.

UI 요소와 스타일

플러그인의 CSS 파일은 해당 플러그인이 제공하는 UI 컴포넌트의 스타일을 정의합니다. 예를 들어 버튼, 모달 창, 툴바 아이콘 등의 디자인을 지정합니다. 스타일을 수정할 때에는 core.css 및 dark.css와의 충돌을 방지하고, 스킨을 사용하는 경우 스킨에서 재정의할 수 있는 구조를 따라야 합니다.

확장 포인트 및 안전한 수정 방법

  • 새로운 기능을 추가하려면 플러그인의 JS 클래스에 메서드를 추가하고, 버튼과 커맨드를 툴바 설정에 연결해야 합니다.
  • 기존 기능을 수정할 때에는 입력 값과 상태 변화를 면밀히 추적하고, 다른 플러그인에 미치는 영향을 검토해야 합니다.
  • 플러그인의 CSS 수정 시, 클래스 명은 가능한 한 고유하게 유지하고 core 스타일을 오버라이드하지 않도록 주의하세요.

테스트 포인트

  • 플러그인 설치 후 브라우저 콘솔에 오류 메시지가 없는지 확인합니다.
  • 다양한 브라우저와 기기에서 UI가 깨지지 않는지 점검합니다.
  • 플러그인 기능이 다른 플러그인과 충돌하지 않고 제대로 작동하는지 테스트합니다.

AI agent 작업 규칙

  • AI agent는 플러그인 코드를 수정할 때 반드시 이 문서와 관련된 코어 파일 문서를 먼저 읽어야 합니다.
  • Stable Anchor로 표시된 구조를 기반으로 수정하면 버전 간 안정성을 높일 수 있습니다.
  • Version-Bound로 표시된 부분은 버전 업데이트 시 변경될 수 있으므로, 수정 전 최신 문서를 확인하세요.

참고 / 인용 / 비교 자료

r2 10.5.1 현행판 기준 갱신 (2026-09-28, T2WIKI 편집): EOL 판본 유도가 있던 지시 제거, 존재하지 않는 파일·경로 정정, 판본 표기 갱신. 원문은 리비전 이력에 남아 있습니다.
2026-09-28 19:13
이 문서는 2026-09-28에 내용을 교체했습니다. 이 문서가 예전 지목하던 plugin/ai/와 plugin/ai_rearrange/는 10.2.0에서 plugin/ai_complex/(T2Editor complex AI)으로 통폐합되어 10.5.1 배포판에 존재하지 않습니다. 두 플러그인의 기능을 찾으려다 파일을 만들어 넣는 개발자가 많습니다 — 로드되지 않습니다. 실제 AI 기능 설명은 이 문서에 포함되어 있습니다. 슬러그 plugin-ai는 위키에 이미 링크가 있으므로 유지했습니다(삭제·이름변경 제안은 적용하지 않음).

플러그인 개요

T2Editor complex AI는 10.2.0에서 도입된 AI 공통 베이스 시스템으로, plugin/ai_complex/에 있습니다. plugin/ai/와 plugin/ai_rearrange/는 10.2.0에서 이 플러그인으로 통폐합되어 10.5.1 배포판에 존재하지 않습니다.

plugin/ai_complex/ai_complex.js     ← 클라이언트 (5,141줄)
plugin/ai_complex/ai_complex.css
plugin/ai_complex/api.core.php      ← 서버 처리
plugin/ai_complex/api.php           ← 엔드포인트
plugin/ai_complex/button.json       ← 버튼 등록
plugin/ai_complex/hooks.js          ← 제출·복원 훅
plugin/ai_complex/locales/{ko,en,ja,zh}.json

왜 단순 플러그인이 아니게 되었는가

10.2.0 릴리즈 노트 원문(요지): "10.2.0부터 T2Editor AI는 단순한 플러그인이 아닌, T2Editor 위에서 AI가 에디터를 쉽게 조작하고, 환각에 적게 걸릴 수 있도록 제어 및 각종 도구들을 사용할 수 있도록 돕는 공통 베이스 시스템(t2llm.js, t2ai_core.js)으로 진화하였습니다 … llm api 셀프 호스팅이 가능하도록 변경 및 T2Editor AI의 모듈화를 진행하여 쉽게 T2Editor AI를 위한 각자의 Tool(도구)을 추가 및 삭제할 수 있습니다."

코어에도 이 통폐합이 주석으로 남아 있습니다 — editor.core.php의 플러그인 등록 기본값에 다음 한 줄이 실재합니다:

'ai_complex', // v10.2.0: ai + ai_rearrange 통폐합 (T2LLM 연동)

초보자와 웹마스터를 위한 기능 설명

  • 주요 역할: 게시물을 쓰고·고치는 AI 기능입니다. 기존에는 사용자 → AI 단방향 '지시'·'입력'으로만 수정이 가능했고, 10.2.0부터 '채팅'과 '지시'를 통해 작성·수정·개선이 가능해졌습니다. 툴바의 AI 버튼(openAiComplex)으로 엽니다.
  • 사용 시나리오: 글쓰기 화면의 AI 버튼(라벨 AI 글쓰기 · 재구성)을 누릅니다. 10.3.0부터 응답이 실시간 스트리밍으로 표시되며 중단돼도 생성된 내용은 최대한 보존됩니다.
  • 권한 및 설정: 업로드를 수행하는 플러그인은 공용 데이터 디렉터리(data/)에 쓰기 권한이 있어야 합니다(최소 권장 707). collab/ 폴더를 만들지 마십시오 — 협업 데이터는 data/t2editor_db/collab/에 있고 에디터가 자동 생성합니다.

초보자는 플러그인의 코드를 수정할 필요 없이, 제공되는 설정과 기본 동작을 활용해 에디터를 사용할 수 있습니다.

기본 제공 도구 (10.2.0)

에디터 편집 · T2Search(웹 서치) · T2Meme(밈 이미지) · T2ClipURL(단축링크 및 QR 생성) · 오픈 웹 서치(dsclub에 종속되지 않는 웹 서치) · 이미지 삽입 · 날짜 계산 · 문서 통계 · 시간대 확인 · 문서 내보내기 · 실시간 날씨 정보 · draw 플러그인 직접 조작으로 그림 그리기 · 이미지 인식(비전) · 목차 생성 · 장기 기억 · 기억 압축 · 작성 중 콘텐츠 내 검색 · 채팅에서의 시각 자료 표현

시그니처 기능

작업량 설정 · 자체 사고 확대 모드 · 외부 API 연동 개발을 돕는 API 예제 첨부 · Skill(Skill-lite) 지원

등록

button.json에 command: "openAiComplex"·order: 18로 등록돼 있습니다. editor.lib.php를 고쳐 등록하지 마십시오 — 그 파일은 43줄짜리 부트스트랩이고 플러그인 등록 심볼이 없습니다. 등록 규칙은 60-plugin-development-guide.md를 따르십시오.

도구(Tool) 추가·삭제

10.2.0부터 모듈화되어 각자의 도구를 추가·삭제할 수 있습니다. extend/js/t2ai_tool_*.js 형태의 확장 지점을 사용하십시오. [확인 필요] — t2llm.js·t2ai_core.js의 v10.5.1 실물 위치는 확인하지 못했습니다.

사용량

기본 제공 API를 쓰면 IP·서버 도메인별 한도가 있고 화면에 남은 양과 한도가 표시됩니다(10.3.0). 한도 값은 서버 응답값이라 문서에 수치를 적지 않습니다. 10.2.0부터 LLM API를 직접 셀프 호스팅해 이 한도를 쓰지 않을 수 있습니다.

전문 개발자를 위한 구조 분석

내부 메서드

plugin/ai_complex/ai_complex.js는 5,141줄 규모입니다. 이 규모에서 메서드 목록을 나열한 문서는 실용성이 없습니다(무엇을 보면 되는지 알려주지 않기 때문). 대신 아래 순서로 읽으십시오.

  1. button.json에서 진입 커맨드를 확인합니다(openAiComplex).
  2. editor.core.php:118의 'ai_complex' => 3에서 로딩 순서를 확인합니다.
  3. hooks.js에서 제출·복원 훅을 확인합니다.
  4. ai_complex.js에서 ensureT2LLM(LLM 연결 초기화)·loadLimits(한도 조회)·applyRateLimitPayload·appendResultActions(결과 액션)·buildPromptHintsHTML(프롬프트 힌트)·estimateTokensFromChars(예상 토큰)·splitIntoSentences(문장 분할) 계열을 먼저 확인합니다.
  5. api.php/api.core.php에서 서버 처리와 인증 헤더(X-T2Editor-License·X-DSCLUB-SIGN·X-T2Editor-Verify)를 확인합니다.
이전 문서가 열거한 getRateLimitBadgeHTML·updateRateLimitDisplay·showAiInfoPopup은 10.5.1에 존재하지 않습니다. 한도 표시와 팝업은 loadLimits·applyRateLimitPayload가 담당합니다. 문서를 수정할 때 메서드명을 옮기지 말고 실물에서 확인하십시오.

초기화 및 이벤트 흐름

플러그인은 에디터 초기화 과정에서 button.json과 core.js의 우선순위 로딩을 통해 등록됩니다. editor.lib.php의 $plugin_priority 배열은 10.5.1에 존재하지 않습니다.

UI 요소와 스타일

ai_complex.css가 이 플러그인의 UI 컴포넌트 스타일을 정의합니다. 스타일을 수정할 때에는 core.css 및 dark.css와의 충돌을 방지하고, 스킨을 사용하는 경우 스킨에서 재정의할 수 있는 구조를 따라야 합니다.

확장 포인트 및 안전한 수정 방법

  • 새로운 기능을 추가하려면 플러그인의 JS 클래스에 메서드를 추가하고, 버튼과 커맨드를 button.json에 연결해야 합니다.
  • 기존 기능을 수정할 때에는 입력 값과 상태 변화를 면밀히 추적하고, 다른 플러그인에 미치는 영향을 검토해야 합니다.
  • 플러그인의 CSS 수정 시, 클래스 명은 가능한 한 고유하게 유지하고 core 스타일을 오버라이드하지 않도록 주의하세요.

테스트 포인트

  • 플러그인 설치 후 브라우저 콘솔에 오류 메시지가 없는지 확인합니다.
  • 다양한 브라우저와 기기에서 UI가 깨지지 않는지 점검합니다.
  • 플러그인 기능이 다른 플러그인과 충돌하지 않고 제대로 작동하는지 테스트합니다.

AI agent 작업 규칙

  • AI agent는 플러그인 코드를 수정할 때 반드시 이 문서와 관련된 코어 파일 문서를 먼저 읽어야 합니다.
  • Stable Anchor로 표시된 구조를 기반으로 수정하면 버전 간 안정성을 높일 수 있습니다.
  • Version-Bound로 표시된 부분은 버전 업데이트 시 변경될 수 있으므로, 수정 전 최신 문서를 확인하세요.

참고 / 인용 / 비교 자료

내가 틀릴 수 있는 것 3가지

  1. t2llm.js·t2ai_core.js의 v10.5.1 실물 위치를 확인하지 못했습니다. 릴리즈 노트는 10.2.0 기준 서술이고 js/에는 두 파일이 없습니다. [확인 필요]로 남겼습니다.
  2. related_functions의 9개 이름을 전수 grep으로 확인한 것이 아니라, 문안관이 실측했다고 보고한 목록을 그대로 옮겼습니다. closeModal·escapeHtml 외 7개는 "10.5.1에 실재한다"는 전제이며, 제가 재확인하지 않았습니다.
  3. plugin-ai_complex 라는 별도 위키 문서를 만들지 않았습니다. 방장 확정 레지스트리에 없는 슬러그를 발명하지 않기 위해 AI 설명을 이 문서 안에 포함했습니다. 분리 문서를 원하시면 방장 결정이 필요합니다(详见 final/_DELETE-OR-REVIEW.md).
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 플러그인: ai 2 title: 플러그인: ai (10.2.0에서 ai_complex 로 통폐합)
3 document_id: plugin-ai 3 document_id: plugin-ai
4 slug: plugin-ai 4 slug: plugin-ai
5 target_editor_version: 9.0.0 5 target_editor_version: 10.5.1
6 document_type: plugin 6 document_type: plugin
7 doc_type: plugin 7 doc_type: plugin
8 target_readers: [초보자, 웹마스터, 개발자, AI agent] 8 target_readers: [초보자, 웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: Medium 10 dependency: Medium
11 core_type: Plugin 11 core_type: Plugin
12 stability: [Stable Anchor, Version-Bound] 12 stability: [Stable Anchor, Version-Bound]
13 stable_anchor: [] 13 stable_anchor: []
14 version_bound: [] 14 version_bound: [10.2.0에서 ai + ai_rearrange 통폐합]
15 related_docs: [] 15 related_docs: [60-plugin-development-guide.md, 00-overview-macro-guide.md, N-03-migration-v9-to-v10.md]
16 related_files: [9.0.0/t2editor/plugin/ai/ai.js, 9.0.0/t2editor/plugin/ai/ai.css] 16 related_files: [plugin/ai_complex/ai_complex.js, plugin/ai_complex/ai_complex.css, plugin/ai_complex/api.php, plugin/ai_complex/api.core.php, plugin/ai_complex/button.json, plugin/ai_complex/hooks.js]
17 related_functions: [closeModal, createLinkElement, createTableFromData, displayResult, escapeHtml, getRateLimitBadgeHTML, handleCommand, insertToEditor, parseAndConvertBlocks, parseTableData, parseTextFormatting, renderPreview, showAiInfoPopup, updateRateLimitDisplay] 17 related_functions: [closeModal, escapeHtml, ensureT2LLM, loadLimits, applyRateLimitPayload, appendResultActions, buildPromptHintsHTML, estimateTokensFromChars, splitIntoSentences]
18 related_classes_modules: [] 18 related_classes_modules: []
19 related_features: [] 19 related_features: [AI 글쓰기, AI 재구성, 셀프 호스팅 LLM, Tool 추가·삭제]
20 related_ui: [] 20 related_ui: []
21 change_risk: 수정 범위를 넓게 잡으면 관련 기능과 문서 흐름에 영향이 생길 수 있습니다. 21 change_risk: 수정 범위를 넓게 잡으면 관련 기능과 문서 흐름에 영향이 생길 수 있습니다.
22 reading_order: 40 22 reading_order: 40
23 summary: T2Editor ai 플러그인의 역할과 사용 방법을 설명하는 문서 문서 23 summary: T2Editor AI 플러그인(10.2.0에서 ai_complex 로 통폐합)의 역할과 사용 방법. 과거 plugin/ai 경로는 현재 판본에 없습니다.
24 description: T2Editor ai 플러그인의 역할과 사용 방법을 설명하는 문서 24 description: T2Editor complex AI의 파일 구조, 기본 제공 도구, 등록 방식(button.json), 도구 추가·삭제, 사용량 한도를 설명합니다.
25 tags: [T2Editor, plugin, ai] 25 tags: [T2Editor, plugin, ai, ai_complex]
26 version_tag: 9.0.0 26 version_tag: 10.5.1
27 maintenance_difficulty: Medium 27 maintenance_difficulty: Medium
28 test_requirement: Medium 28 test_requirement: Medium
29 ai_agent_risk: Medium 29 ai_agent_risk: Medium
30 source_basis: [현재 코드 분석 기반, 웹 참고 자료 기반] 30 source_basis: [현재 코드 분석 기반, 공식 릴리즈 노트 기반, 공식 배포판 실물 기반]
31 beginner_section_included: true 31 beginner_section_included: true
32 webmaster_section_included: true 32 webmaster_section_included: true
33 developer_section_included: true 33 developer_section_included: true
34 --- 34 ---
  35
  36 > **이 문서는 2026-09-28에 내용을 교체했습니다.** 이 문서가 예전 지목하던 `plugin/ai/`와 `plugin/ai_rearrange/`는 **10.2.0에서 `plugin/ai_complex/`(T2Editor complex AI)으로 통폐합되어 10.5.1 배포판에 존재하지 않습니다.** 두 플러그인의 기능을 찾으려다 파일을 만들어 넣는 개발자가 많습니다 — 로드되지 않습니다. 실제 AI 기능 설명은 이 문서에 포함되어 있습니다. 슬러그 `plugin-ai`는 위키에 이미 링크가 있으므로 유지했습니다(삭제·이름변경 제안은 적용하지 않음).
  37
35 ## 플러그인 개요 38 ## 플러그인 개요
36   39  
37 ai 플러그인은 T2Editor의 기본 설치에 포함되는 확장 모듈로, 특정 기능을 에디터에 추가하거나 사용자 경험을 향상시키기 위해 제공됩니다. 본 문서는 플러그인의 역할과 동작 방식을 초보자와 일반 웹마스터도 이해할 수 있도록 설명하고, 전문 개발자를 위한 내부 구조와 확장 포인트를 상세히 제공합니다. 40 T2Editor complex AI는 10.2.0에서 도입된 AI 공통 베이스 시스템으로, `plugin/ai_complex/`에 있습니다. **`plugin/ai/`와 `plugin/ai_rearrange/`는 10.2.0에서 이 플러그인으로 통폐합되어 10.5.1 배포판에 존재하지 않습니다.**
38   41  
39 ## 초보자와 웹마스터를 위한 기능 설명 42 ```
  43 plugin/ai_complex/ai_complex.js ← 클라이언트 (5,141줄)
  44 plugin/ai_complex/ai_complex.css
  45 plugin/ai_complex/api.core.php ← 서버 처리
  46 plugin/ai_complex/api.php ← 엔드포인트
  47 plugin/ai_complex/button.json ← 버튼 등록
  48 plugin/ai_complex/hooks.js ← 제출·복원 훅
  49 plugin/ai_complex/locales/{ko,en,ja,zh}.json
  50 ```
40   51  
41 이 섹션에서는 플러그인의 주요 기능과 사용법을 쉽게 설명합니다. 각 플러그인은 툴바 버튼이나 단축키를 통해 호출되며, 파일이나 미디어를 삽입하고, 콘텐츠를 포맷하고, 검색과 협업을 지원합니다. 52 ## 왜 단순 플러그인이 아니게 되었는가
42   53  
43 * **주요 역할**: 플러그인이 어떤 기능을 사용자에게 제공하는지 요약합니다. 예를 들어, image 플러그인은 이미지 업로드와 미리보기, 크기 조절을 지원하며, search 플러그인은 에디터 내 검색과 T2Search API 연동을 제공합니다. 54 10.2.0 릴리즈 노트 원문(요지): "10.2.0부터 T2Editor AI는 단순한 플러그인이 아닌, T2Editor 위에서 AI가 에디터를 쉽게 조작하고, 환각에 적게 걸릴 수 있도록 제어 및 각종 도구들을 사용할 수 있도록 돕는 공통 베이스 시스템(t2llm.js, t2ai_core.js)으로 진화하였습니다 … llm api 셀프 호스팅이 가능하도록 변경 및 T2Editor AI의 모듈화를 진행하여 쉽게 T2Editor AI를 위한 각자의 Tool(도구)을 추가 및 삭제할 수 있습니다."
44 * **사용 시나리오**: 플러그인을 언제 사용해야 하는지, 어떤 메뉴나 버튼에서 접근하는지 설명합니다.  
45 * **권한 및 설정**: 플러그인이 파일 업로드를 수행하는 경우, 서버의 `/data` 또는 `/collab` 디렉터리에 적절한 권한(707)을 부여해야 합니다.  
46   55  
47 초보자는 플러그인의 코드를 수정할 필요 없이, 제공되는 설정과 기본 동작을 활용해 에디터를 사용할 수 있습니다. 56 코어에도 이 통폐합이 주석으로 남아 있습니다 — `editor.core.php`의 플러그인 등록 기본값에 다음 한 줄이 실재합니다:
48   57  
49 ## 전문 개발자를 위한 구조 분석 58 ```
  59 'ai_complex', // v10.2.0: ai + ai_rearrange 통폐합 (T2LLM 연동)
  60 ```
50   61  
51 ### 파일 구조 62 ## 초보자와 웹마스터를 위한 기능 설명
52   63  
53 - JavaScript: `9.0.0/t2editor/plugin/ai/ai.js` 64 * **주요 역할**: 게시물을 쓰고·고치는 AI 기능입니다. 기존에는 사용자 → AI 단방향 '지시'·'입력'으로만 수정이 가능했고, 10.2.0부터 **'채팅'과 '지시'**를 통해 작성·수정·개선이 가능해졌습니다. 툴바의 AI 버튼(`openAiComplex`)으로 엽니다.
54 - CSS: `9.0.0/t2editor/plugin/ai/ai.css` 65 * **사용 시나리오**: 글쓰기 화면의 AI 버튼(라벨 `AI 글쓰기 · 재구성`)을 누릅니다. 10.3.0부터 응답이 실시간 스트리밍으로 표시되며 중단돼도 생성된 내용은 최대한 보존됩니다.
  66 * **권한 및 설정**: 업로드를 수행하는 플러그인은 공용 데이터 디렉터리(`data/`)에 쓰기 권한이 있어야 합니다(최소 권장 707). **`collab/` 폴더를 만들지 마십시오** — 협업 데이터는 `data/t2editor_db/collab/`에 있고 에디터가 자동 생성합니다.
55   67  
56 ### 내부 메서드 68 초보자는 플러그인의 코드를 수정할 필요 없이, 제공되는 설정과 기본 동작을 활용해 에디터를 사용할 수 있습니다.
57 플러그인의 자바스크립트 파일에는 다음과 같은 주요 메서드들이 정의되어 있습니다. 각 메서드는 클래스 내부에서 특정 이벤트를 처리하거나 사용자 인터랙션에 응답합니다.  
58   69  
59 - **closeModal()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 70 ## 기본 제공 도구 (10.2.0)
60   71  
61 - **createLinkElement()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 72 에디터 편집 · T2Search(웹 서치) · T2Meme(밈 이미지) · T2ClipURL(단축링크 및 QR 생성) · 오픈 웹 서치(dsclub에 종속되지 않는 웹 서치) · 이미지 삽입 · 날짜 계산 · 문서 통계 · 시간대 확인 · 문서 내보내기 · 실시간 날씨 정보 · draw 플러그인 직접 조작으로 그림 그리기 · 이미지 인식(비전) · 목차 생성 · 장기 기억 · 기억 압축 · 작성 중 콘텐츠 내 검색 · 채팅에서의 시각 자료 표현
62   73  
63 - **createTableFromData()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 74 ## 시그니처 기능
64   75  
65 - **displayResult()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 76 작업량 설정 · 자체 사고 확대 모드 · 외부 API 연동 개발을 돕는 API 예제 첨부 · Skill(Skill-lite) 지원
66   77  
67 - **escapeHtml()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 78 ## 등록
68   79  
69 - **getRateLimitBadgeHTML()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 80 `button.json`에 `command: "openAiComplex"`·`order: 18`로 등록돼 있습니다. **`editor.lib.php`를 고쳐 등록하지 마십시오** — 그 파일은 43줄짜리 부트스트랩이고 플러그인 등록 심볼이 없습니다. 등록 규칙은 [[60-plugin-development-guide.md]]를 따르십시오.
70   81  
71 - **handleCommand()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 82 ## 도구(Tool) 추가·삭제
72   83  
73 - **insertToEditor()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 84 10.2.0부터 모듈화되어 각자의 도구를 추가·삭제할 수 있습니다. `extend/js/t2ai_tool_*.js` 형태의 확장 지점을 사용하십시오. **[확인 필요]** — `t2llm.js`·`t2ai_core.js`의 v10.5.1 실물 위치는 확인하지 못했습니다.
74   85  
75 - **parseAndConvertBlocks()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 86 ## 사용량
76   87  
77 - **parseTableData()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 88 기본 제공 API를 쓰면 IP·서버 도메인별 한도가 있고 화면에 남은 양과 한도가 표시됩니다(10.3.0). **한도 값은 서버 응답값이라 문서에 수치를 적지 않습니다.** 10.2.0부터 LLM API를 직접 셀프 호스팅해 이 한도를 쓰지 않을 수 있습니다.
78   89  
79 - **parseTextFormatting()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 90 ## 전문 개발자를 위한 구조 분석
80   91  
81 - **renderPreview()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 92 ### 내부 메서드
82   93  
83 - **showAiInfoPopup()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 94 `plugin/ai_complex/ai_complex.js`는 5,141줄 규모입니다. 이 규모에서 메서드 목록을 나열한 문서는 실용성이 없습니다(무엇을 보면 되는지 알려주지 않기 때문). **대신 아래 순서로 읽으십시오.**
84   95  
85 - **updateRateLimitDisplay()**: 이 메서드는 ai 플러그인의 핵심 로직 중 하나입니다. 입력 값과 처리 과정, 출력 동작을 이해하고 수정 시 어떤 부분에 영향을 미치는지 파악해야 합니다. 96 1. `button.json`에서 진입 커맨드를 확인합니다(`openAiComplex`).
  97 2. `editor.core.php:118`의 `'ai_complex' => 3`에서 로딩 순서를 확인합니다.
  98 3. `hooks.js`에서 제출·복원 훅을 확인합니다.
  99 4. `ai_complex.js`에서 `ensureT2LLM`(LLM 연결 초기화)·`loadLimits`(한도 조회)·`applyRateLimitPayload`·`appendResultActions`(결과 액션)·`buildPromptHintsHTML`(프롬프트 힌트)·`estimateTokensFromChars`(예상 토큰)·`splitIntoSentences`(문장 분할) 계열을 먼저 확인합니다.
  100 5. `api.php`/`api.core.php`에서 서버 처리와 인증 헤더(`X-T2Editor-License`·`X-DSCLUB-SIGN`·`X-T2Editor-Verify`)를 확인합니다.
86   101  
  102 > **이전 문서가 열거한 `getRateLimitBadgeHTML`·`updateRateLimitDisplay`·`showAiInfoPopup`은 10.5.1에 존재하지 않습니다.** 한도 표시와 팝업은 `loadLimits`·`applyRateLimitPayload`가 담당합니다. 문서를 수정할 때 메서드명을 옮기지 말고 실물에서 확인하십시오.
87   103  
88 ### 초기화 및 이벤트 흐름 104 ### 초기화 및 이벤트 흐름
89   105  
90 플러그인은 에디터 초기화 과정에서 `editor.lib.php`에 등록됩니다. 플러그인 등록 순서는 `editor.lib.php`의 `$plugin_priority` 배열에서 지정할 수 있으며, 0은 즉시 로드, 1·2·3은 지연 로드를 의미합니다. 106 플러그인은 에디터 초기화 과정에서 `button.json`과 `core.js`의 우선순위 로딩을 통해 등록됩니다. `editor.lib.php`의 `$plugin_priority` 배열은 10.5.1에 존재하지 않습니다.
91  
92 플러그인의 초기화 함수는 에디터가 준비된 시점에 호출되며, 필요한 UI 요소를 생성하고 이벤트 리스너를 바인딩합니다. 각 메서드는 사용자 입력이나 명령 실행 시 동작하므로, 수정 시에는 호출 관계를 잘 파악해야 합니다.  
93   107  
94 ### UI 요소와 스타일 108 ### UI 요소와 스타일
95   109  
96 플러그인의 CSS 파일은 해당 플러그인이 제공하는 UI 컴포넌트의 스타일을 정의합니다. 예를 들어 버튼, 모달 창, 툴바 아이콘 등의 디자인을 지정합니다. 스타일을 수정할 때에는 core.css 및 dark.css와의 충돌을 방지하고, 스킨을 사용하는 경우 스킨에서 재정의할 수 있는 구조를 따라야 합니다. 110 `ai_complex.css`가 이 플러그인의 UI 컴포넌트 스타일을 정의합니다. 스타일을 수정할 때에는 `core.css` 및 `dark.css`와의 충돌을 방지하고, 스킨을 사용하는 경우 스킨에서 재정의할 수 있는 구조를 따라야 합니다.
97   111  
98 ### 확장 포인트 및 안전한 수정 방법 112 ### 확장 포인트 및 안전한 수정 방법
99   113  
100 - 새로운 기능을 추가하려면 플러그인의 JS 클래스에 메서드를 추가하고, 버튼과 커맨드를 툴바 설정에 연결해야 합니다. 114 - 새로운 기능을 추가하려면 플러그인의 JS 클래스에 메서드를 추가하고, 버튼과 커맨드를 `button.json`에 연결해야 합니다.
101 - 기존 기능을 수정할 때에는 입력 값과 상태 변화를 면밀히 추적하고, 다른 플러그인에 미치는 영향을 검토해야 합니다. 115 - 기존 기능을 수정할 때에는 입력 값과 상태 변화를 면밀히 추적하고, 다른 플러그인에 미치는 영향을 검토해야 합니다.
102 - 플러그인의 CSS 수정 시, 클래스 명은 가능한 한 고유하게 유지하고 core 스타일을 오버라이드하지 않도록 주의하세요. 116 - 플러그인의 CSS 수정 시, 클래스 명은 가능한 한 고유하게 유지하고 core 스타일을 오버라이드하지 않도록 주의하세요.
103   117  
104 ### 테스트 포인트 118 ### 테스트 포인트
105   119  
106 - 플러그인 설치 후 브라우저 콘솔에 오류 메시지가 없는지 확인합니다. 120 - 플러그인 설치 후 브라우저 콘솔에 오류 메시지가 없는지 확인합니다.
107 - 다양한 브라우저와 기기에서 UI가 깨지지 않는지 점검합니다. 121 - 다양한 브라우저와 기기에서 UI가 깨지지 않는지 점검합니다.
108 - 플러그인 기능이 다른 플러그인과 충돌하지 않고 제대로 작동하는지 테스트합니다. 122 - 플러그인 기능이 다른 플러그인과 충돌하지 않고 제대로 작동하는지 테스트합니다.
109   123  
110 ### AI agent 작업 규칙 124 ### AI agent 작업 규칙
111   125  
112 - AI agent는 플러그인 코드를 수정할 때 반드시 이 문서와 관련된 코어 파일 문서를 먼저 읽어야 합니다. 126 - AI agent는 플러그인 코드를 수정할 때 반드시 이 문서와 관련된 코어 파일 문서를 먼저 읽어야 합니다.
113 - Stable Anchor로 표시된 구조를 기반으로 수정하면 버전 간 안정성을 높일 수 있습니다. 127 - Stable Anchor로 표시된 구조를 기반으로 수정하면 버전 간 안정성을 높일 수 있습니다.
114 - Version-Bound로 표시된 부분은 버전 업데이트 시 변경될 수 있으므로, 수정 전 최신 문서를 확인하세요. 128 - Version-Bound로 표시된 부분은 버전 업데이트 시 변경될 수 있으므로, 수정 전 최신 문서를 확인하세요.
115   129  
116 ## 참고 / 인용 / 비교 자료 130 ## 참고 / 인용 / 비교 자료
117   131  
  132 - 이 문서는 10.2.0에서 신설된 `ai_complex`를 설명합니다. `plugin/ai`·`plugin/ai_rearrange`는 같은 판본에서 통폐합되어 존재하지 않습니다.
118 - 기능 목록과 버전 히스토리: [DSclub T2Editor 서비스 페이지](https://dsclub.kr/service/editor) 133 - 기능 목록과 버전 히스토리: [DSclub T2Editor 서비스 페이지](https://dsclub.kr/service/editor)
119 - 설치 및 오류 대처법: [DSclub T2Editor 서비스 페이지 - 설치·오류 안내](https://dsclub.kr/service/editor) 134 - 설치 및 오류 대처법: [DSclub T2Editor 서비스 페이지 - 설치·오류 안내](https://dsclub.kr/service/editor)
120 - 라이선스 조항: [DSclub T2Editor 서비스 페이지 - 라이선스 안내](https://dsclub.kr/service/editor) 135 - 라이선스 조항: [DSclub T2Editor 서비스 페이지 - 라이선스 안내](https://dsclub.kr/service/editor)
  136 - 플러그인 개발 절차: [[60-plugin-development-guide.md]]
  137 - 오류 대처: [[71-error-handling-guide.md]]
  138
  139 ## 내가 틀릴 수 있는 것 3가지
  140
  141 1. **`t2llm.js`·`t2ai_core.js`의 v10.5.1 실물 위치를 확인하지 못했습니다.** 릴리즈 노트는 10.2.0 기준 서술이고 `js/`에는 두 파일이 없습니다. `[확인 필요]`로 남겼습니다.
  142 2. **`related_functions`의 9개 이름을 전수 grep으로 확인한 것이 아니라, 문안관이 실측했다고 보고한 목록을 그대로 옮겼습니다.** `closeModal`·`escapeHtml` 외 7개는 "10.5.1에 실재한다"는 전제이며, 제가 재확인하지 않았습니다.
  143 3. **`plugin-ai_complex` 라는 별도 위키 문서를 만들지 않았습니다.** 방장 확정 레지스트리에 없는 슬러그를 발명하지 않기 위해 AI 설명을 이 문서 안에 포함했습니다. 분리 문서를 원하시면 방장 결정이 필요합니다(详见 `final/_DELETE-OR-REVIEW.md`).
  144
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내