@things-factory/board-ai 10.0.0-beta.64
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/client/components/board-ai-chat.test.ts +120 -0
- package/client/components/board-ai-chat.ts +1502 -0
- package/client/components/chat-input-builder.ts +40 -0
- package/client/components/markdown.test.ts +220 -0
- package/client/components/markdown.ts +184 -0
- package/client/index.ts +11 -0
- package/client/tsconfig.json +13 -0
- package/client/utils/board-edit-patch.ts +200 -0
- package/config/config.development.js +43 -0
- package/config/config.production.js +15 -0
- package/dist-client/components/board-ai-chat.d.ts +127 -0
- package/dist-client/components/board-ai-chat.js +1455 -0
- package/dist-client/components/board-ai-chat.js.map +1 -0
- package/dist-client/components/board-ai-chat.test.d.ts +1 -0
- package/dist-client/components/board-ai-chat.test.js +112 -0
- package/dist-client/components/board-ai-chat.test.js.map +1 -0
- package/dist-client/components/chat-input-builder.d.ts +30 -0
- package/dist-client/components/chat-input-builder.js +25 -0
- package/dist-client/components/chat-input-builder.js.map +1 -0
- package/dist-client/components/markdown.d.ts +16 -0
- package/dist-client/components/markdown.js +167 -0
- package/dist-client/components/markdown.js.map +1 -0
- package/dist-client/components/markdown.test.d.ts +1 -0
- package/dist-client/components/markdown.test.js +187 -0
- package/dist-client/components/markdown.test.js.map +1 -0
- package/dist-client/index.d.ts +11 -0
- package/dist-client/index.js +12 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-client/utils/board-edit-patch.d.ts +73 -0
- package/dist-client/utils/board-edit-patch.js +159 -0
- package/dist-client/utils/board-edit-patch.js.map +1 -0
- package/dist-server/index.d.ts +21 -0
- package/dist-server/index.js +25 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/apply-patch.d.ts +46 -0
- package/dist-server/service/apply-patch.js +211 -0
- package/dist-server/service/apply-patch.js.map +1 -0
- package/dist-server/service/assistant.d.ts +75 -0
- package/dist-server/service/assistant.js +1298 -0
- package/dist-server/service/assistant.js.map +1 -0
- package/dist-server/service/board-ai-resolver.d.ts +40 -0
- package/dist-server/service/board-ai-resolver.js +260 -0
- package/dist-server/service/board-ai-resolver.js.map +1 -0
- package/dist-server/service/chat-message/chat-message.d.ts +24 -0
- package/dist-server/service/chat-message/chat-message.js +108 -0
- package/dist-server/service/chat-message/chat-message.js.map +1 -0
- package/dist-server/service/chat-message/index.d.ts +3 -0
- package/dist-server/service/chat-message/index.js +7 -0
- package/dist-server/service/chat-message/index.js.map +1 -0
- package/dist-server/service/chat-session/chat-session.d.ts +22 -0
- package/dist-server/service/chat-session/chat-session.js +109 -0
- package/dist-server/service/chat-session/chat-session.js.map +1 -0
- package/dist-server/service/chat-session/index.d.ts +3 -0
- package/dist-server/service/chat-session/index.js +7 -0
- package/dist-server/service/chat-session/index.js.map +1 -0
- package/dist-server/service/chat-session-resolver.d.ts +13 -0
- package/dist-server/service/chat-session-resolver.js +178 -0
- package/dist-server/service/chat-session-resolver.js.map +1 -0
- package/dist-server/service/index.d.ts +14 -0
- package/dist-server/service/index.js +26 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/patch-entry/index.d.ts +3 -0
- package/dist-server/service/patch-entry/index.js +7 -0
- package/dist-server/service/patch-entry/index.js.map +1 -0
- package/dist-server/service/patch-entry/patch-entry.d.ts +16 -0
- package/dist-server/service/patch-entry/patch-entry.js +96 -0
- package/dist-server/service/patch-entry/patch-entry.js.map +1 -0
- package/dist-server/service/types.d.ts +137 -0
- package/dist-server/service/types.js +3 -0
- package/dist-server/service/types.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -0
- package/server/index.ts +21 -0
- package/server/service/apply-patch.test.ts +640 -0
- package/server/service/apply-patch.ts +250 -0
- package/server/service/assistant.test.ts +1317 -0
- package/server/service/assistant.ts +1431 -0
- package/server/service/board-ai-resolver.ts +239 -0
- package/server/service/chat-message/chat-message.ts +110 -0
- package/server/service/chat-message/index.ts +5 -0
- package/server/service/chat-session/chat-session.ts +103 -0
- package/server/service/chat-session/index.ts +5 -0
- package/server/service/chat-session-resolver.ts +154 -0
- package/server/service/index.ts +24 -0
- package/server/service/patch-entry/index.ts +5 -0
- package/server/service/patch-entry/patch-entry.ts +89 -0
- package/server/service/types.ts +138 -0
- package/things-factory.config.js +1 -0
- package/translations/en.json +39 -0
- package/translations/ja.json +39 -0
- package/translations/ko.json +40 -0
- package/translations/ms.json +39 -0
- package/translations/zh.json +39 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
/*
|
|
3
|
+
Board AI Configuration
|
|
4
|
+
|
|
5
|
+
Settings for AI-driven board modeling. Override in your application's config
|
|
6
|
+
to tune behavior. Requires the `aiClient` key (see @things-factory/ai-client-base
|
|
7
|
+
config/config.development.js).
|
|
8
|
+
*/
|
|
9
|
+
boardAI: {
|
|
10
|
+
/*
|
|
11
|
+
Patch confidence threshold for automatic application.
|
|
12
|
+
Patches with confidence >= this value are auto-applied to the board;
|
|
13
|
+
below this threshold, the UI requests user review before applying.
|
|
14
|
+
|
|
15
|
+
Range: 0..1
|
|
16
|
+
*/
|
|
17
|
+
patchAutoApplyConfidence: 0.85,
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
Maximum number of recent messages included in LLM context for each chat() call.
|
|
21
|
+
Older messages will be compressed into ChatSession.lastSummary (planned).
|
|
22
|
+
|
|
23
|
+
Higher = better long-term memory, more tokens per call.
|
|
24
|
+
*/
|
|
25
|
+
maxContextMessages: 50,
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
Default LLM options for chat() calls. Overridable per-request via mutation input.
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
defaultChatOptions: {
|
|
32
|
+
model: 'claude-sonnet-4-6',
|
|
33
|
+
temperature: 0.4,
|
|
34
|
+
maxTokens: 4096
|
|
35
|
+
}
|
|
36
|
+
*/
|
|
37
|
+
defaultChatOptions: {
|
|
38
|
+
// model: undefined,
|
|
39
|
+
// temperature: undefined,
|
|
40
|
+
// maxTokens: 4096
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
/*
|
|
3
|
+
Board AI Configuration — Production
|
|
4
|
+
|
|
5
|
+
See config.development.js for the full reference. Production typically uses
|
|
6
|
+
the same defaults; tune only when telemetry shows specific need.
|
|
7
|
+
*/
|
|
8
|
+
boardAI: {
|
|
9
|
+
patchAutoApplyConfidence: 0.85,
|
|
10
|
+
maxContextMessages: 50,
|
|
11
|
+
defaultChatOptions: {
|
|
12
|
+
// maxTokens: 4096
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <ox-board-ai-chat> — AI 주도 보드 모델링 채팅 컴포넌트 (Lit).
|
|
3
|
+
*
|
|
4
|
+
* 입력:
|
|
5
|
+
* - sessionId: 영속 ChatSession 식별자 (없으면 ad-hoc 모드, 메시지 영속 안 됨)
|
|
6
|
+
* - currentBoard: 현재 BoardModel JSON (호스트가 동기화)
|
|
7
|
+
* - scopes / knownTypes / categories: 도메인 컨텍스트
|
|
8
|
+
*
|
|
9
|
+
* 출력 (이벤트):
|
|
10
|
+
* - `board-edit-patch` { detail: { patch, summary, confidence, patchId } }
|
|
11
|
+
* 호스트가 받아서 보드 모델에 적용 (applyBoardEditPatch helper).
|
|
12
|
+
* - `chat-followup` { detail: { question } }
|
|
13
|
+
*
|
|
14
|
+
* 모드 전환은 컨테이너 (워크스페이스) 의 책임. 이 컴포넌트는 자체로 풀 채팅 UX.
|
|
15
|
+
*/
|
|
16
|
+
import '@material/web/icon/icon.js';
|
|
17
|
+
import { LitElement } from 'lit';
|
|
18
|
+
export declare class OxBoardAIChat extends LitElement {
|
|
19
|
+
/** 영속 세션 id. 없으면 ad-hoc (메시지 영속 안 됨). */
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
/**
|
|
22
|
+
* 현재 BoardModel — chat() 입력으로 그대로 전달.
|
|
23
|
+
*
|
|
24
|
+
* 주의: 호스트가 라이브 편집 가능한 캔버스(things-scene)를 갖고 있다면, 캔버스 안에서
|
|
25
|
+
* 일어나는 수작업 편집이 이 property 에는 자동 반영되지 않는다. 이 경우 `boardProvider`
|
|
26
|
+
* 콜백을 같이 넘기면 send() 시점에 라이브 보드를 pull 한다.
|
|
27
|
+
*/
|
|
28
|
+
currentBoard?: any;
|
|
29
|
+
/**
|
|
30
|
+
* 라이브 보드 모델 공급자 (선택).
|
|
31
|
+
*
|
|
32
|
+
* 호스트가 things-scene 같은 캔버스를 사용 중이면 사용자가 캔버스에서 수작업 편집한
|
|
33
|
+
* 내용은 `currentBoard` property 에 자동 반영되지 않는다. 이 콜백을 등록하면 `send()`
|
|
34
|
+
* 직전에 호출해 가장 최신 보드를 pull → AI 가 항상 라이브 상태를 본다.
|
|
35
|
+
*
|
|
36
|
+
* 우선순위: boardProvider() ?? currentBoard.
|
|
37
|
+
*/
|
|
38
|
+
boardProvider?: () => any;
|
|
39
|
+
/**
|
|
40
|
+
* 모델러에서 현재 선택된 컴포넌트의 `refid` 목록.
|
|
41
|
+
*
|
|
42
|
+
* refid 는 things-scene 이 모든 컴포넌트에 자동 발급하는 universal numeric handle.
|
|
43
|
+
* 호스트가 매 render 마다 `.selectedRefids=${...}` 로 갱신. AI 한테 selection 정보로
|
|
44
|
+
* 그대로 전달되어 "선택한" / "selected" / "this" 류 지시어 해석에 사용.
|
|
45
|
+
*/
|
|
46
|
+
selectedRefids: number[];
|
|
47
|
+
/** board-import registry scopes. */
|
|
48
|
+
scopes?: string[];
|
|
49
|
+
knownTypes?: string[];
|
|
50
|
+
categories?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* 컴포넌트 type 별 유효 속성 스킴.
|
|
53
|
+
* 형태: [{ type, description?, group?, properties? }]
|
|
54
|
+
* LLM 이 정확한 컴포넌트를 만들도록 mutation input 으로 forwarding.
|
|
55
|
+
*/
|
|
56
|
+
componentSchemas?: Array<{
|
|
57
|
+
type: string;
|
|
58
|
+
description?: string;
|
|
59
|
+
group?: string;
|
|
60
|
+
properties?: Record<string, any>;
|
|
61
|
+
}>;
|
|
62
|
+
placeholder: string;
|
|
63
|
+
private lines;
|
|
64
|
+
private input;
|
|
65
|
+
/** 마지막 send 실패 시 보존 — 다시 시도 버튼 클릭 시 사용 */
|
|
66
|
+
private lastFailedInput?;
|
|
67
|
+
/** 되돌려진 patch id 들 — 한 번 revert 한 patch 는 버튼 비활성 */
|
|
68
|
+
private revertedPatchIds;
|
|
69
|
+
/** mini action — 인라인 예시 토글 */
|
|
70
|
+
private examplesOpen;
|
|
71
|
+
/** 복사 toast 표시 상태 */
|
|
72
|
+
private toastMessage?;
|
|
73
|
+
/** 복사 confirmation feedback (메시지 idx → 짧은 시간 동안 ✓ 표시) */
|
|
74
|
+
private copiedIdx?;
|
|
75
|
+
private busy;
|
|
76
|
+
private errorMessage?;
|
|
77
|
+
static styles: import("lit").CSSResult[];
|
|
78
|
+
connectedCallback(): void;
|
|
79
|
+
updated(changed: Map<string, any>): void;
|
|
80
|
+
private loadHistory;
|
|
81
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
82
|
+
private onKeyDown;
|
|
83
|
+
/** 예시 그룹 — i18n 키. localize mixin 이 언어 변경 시 자동 재렌더. */
|
|
84
|
+
private static readonly EXAMPLE_GROUPS;
|
|
85
|
+
private renderEmpty;
|
|
86
|
+
/** 예시 클릭 — 입력창에 채우고 포커스 (사용자가 수정 후 전송 가능) */
|
|
87
|
+
private useExample;
|
|
88
|
+
/** "새 대화" — UI 의 메시지 라인 비움 (서버 ChatSession 이력은 그대로 보존) */
|
|
89
|
+
private clearChat;
|
|
90
|
+
private renderInlineExamples;
|
|
91
|
+
private retryLastSend;
|
|
92
|
+
/**
|
|
93
|
+
* 메시지별 hover 액션 — 텍스트 chip 으로 명확.
|
|
94
|
+
* user : 액션 row 자체 X (자기 메시지에 시각 노이즈 X — 편집은 input 위 "새 대화" 흐름 또는 마우스 더블클릭)
|
|
95
|
+
* assistant : 복사 + 재생성 + (patch 적용된 경우만) 되돌리기
|
|
96
|
+
* system : 없음
|
|
97
|
+
*/
|
|
98
|
+
private renderMessageActions;
|
|
99
|
+
/**
|
|
100
|
+
* "AI 가 이런 도구를 사용했습니다" fold-able 박스.
|
|
101
|
+
*
|
|
102
|
+
* - 기본 닫힘 (toolUsagesOpen=false). 헤더 클릭 시 toggle.
|
|
103
|
+
* - 펼쳤을 때 도구 별로 name + arguments + result + read/write 색상 배지.
|
|
104
|
+
* - 디버그 / 신뢰도 향상용 — 사용자가 "왜 이렇게 답했지" 의문 가질 때 즉시 검증.
|
|
105
|
+
*/
|
|
106
|
+
private renderToolUsages;
|
|
107
|
+
private toggleToolUsages;
|
|
108
|
+
private formatJson;
|
|
109
|
+
private copyMessage;
|
|
110
|
+
private showToast;
|
|
111
|
+
/**
|
|
112
|
+
* 사용자 메시지 편집 — 해당 메시지 + 이후 모두 UI 에서 제거하고 입력창에 채움.
|
|
113
|
+
* 서버 영속 history 는 그대로 유지 (다음 send 시 새 메시지로 추가).
|
|
114
|
+
*/
|
|
115
|
+
private editUserMessage;
|
|
116
|
+
/**
|
|
117
|
+
* AI 응답 재생성 — 해당 assistant 메시지 + 이후 제거하고, 직전 user 메시지를 다시 send.
|
|
118
|
+
*/
|
|
119
|
+
private regenerateAssistant;
|
|
120
|
+
private onRevertClick;
|
|
121
|
+
private send;
|
|
122
|
+
}
|
|
123
|
+
declare global {
|
|
124
|
+
interface HTMLElementTagNameMap {
|
|
125
|
+
'ox-board-ai-chat': OxBoardAIChat;
|
|
126
|
+
}
|
|
127
|
+
}
|