@things-factory/board-ai 10.0.0-beta.108
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/PLAN-styling-tools.md +1253 -0
- package/client/components/board-ai-chat.test.ts +149 -0
- package/client/components/board-ai-chat.ts +2574 -0
- package/client/components/chat-echo-dedup.test.ts +116 -0
- package/client/components/chat-echo-dedup.ts +89 -0
- package/client/components/chat-input-builder.ts +47 -0
- package/client/components/default-catalog-entries.test.ts +59 -0
- package/client/components/default-catalog-entries.ts +100 -0
- package/client/components/default-slash-templates.test.ts +55 -0
- package/client/components/default-slash-templates.ts +129 -0
- package/client/components/markdown.test.ts +518 -0
- package/client/components/markdown.ts +508 -0
- package/client/components/mention-popup-helpers.ts +433 -0
- package/client/components/mention-popup.test.ts +588 -0
- package/client/components/mention-popup.ts +238 -0
- package/client/index.ts +11 -0
- package/client/tsconfig.json +13 -0
- package/client/utils/board-edit-patch.ts +374 -0
- package/config/config.development.js +43 -0
- package/config/config.production.js +15 -0
- package/dist-client/client/components/board-ai-chat.d.ts +277 -0
- package/dist-client/client/components/board-ai-chat.js +2444 -0
- package/dist-client/client/components/board-ai-chat.js.map +1 -0
- package/dist-client/client/components/board-ai-chat.test.d.ts +1 -0
- package/dist-client/client/components/board-ai-chat.test.js +138 -0
- package/dist-client/client/components/board-ai-chat.test.js.map +1 -0
- package/dist-client/client/components/chat-echo-dedup.d.ts +45 -0
- package/dist-client/client/components/chat-echo-dedup.js +58 -0
- package/dist-client/client/components/chat-echo-dedup.js.map +1 -0
- package/dist-client/client/components/chat-echo-dedup.test.d.ts +1 -0
- package/dist-client/client/components/chat-echo-dedup.test.js +101 -0
- package/dist-client/client/components/chat-echo-dedup.test.js.map +1 -0
- package/dist-client/client/components/chat-input-builder.d.ts +39 -0
- package/dist-client/client/components/chat-input-builder.js +26 -0
- package/dist-client/client/components/chat-input-builder.js.map +1 -0
- package/dist-client/client/components/default-catalog-entries.d.ts +15 -0
- package/dist-client/client/components/default-catalog-entries.js +86 -0
- package/dist-client/client/components/default-catalog-entries.js.map +1 -0
- package/dist-client/client/components/default-catalog-entries.test.d.ts +1 -0
- package/dist-client/client/components/default-catalog-entries.test.js +52 -0
- package/dist-client/client/components/default-catalog-entries.test.js.map +1 -0
- package/dist-client/client/components/default-slash-templates.d.ts +17 -0
- package/dist-client/client/components/default-slash-templates.js +113 -0
- package/dist-client/client/components/default-slash-templates.js.map +1 -0
- package/dist-client/client/components/default-slash-templates.test.d.ts +1 -0
- package/dist-client/client/components/default-slash-templates.test.js +51 -0
- package/dist-client/client/components/default-slash-templates.test.js.map +1 -0
- package/dist-client/client/components/markdown.d.ts +60 -0
- package/dist-client/client/components/markdown.js +422 -0
- package/dist-client/client/components/markdown.js.map +1 -0
- package/dist-client/client/components/markdown.test.d.ts +1 -0
- package/dist-client/client/components/markdown.test.js +418 -0
- package/dist-client/client/components/markdown.test.js.map +1 -0
- package/dist-client/client/components/mention-popup-helpers.d.ts +165 -0
- package/dist-client/client/components/mention-popup-helpers.js +330 -0
- package/dist-client/client/components/mention-popup-helpers.js.map +1 -0
- package/dist-client/client/components/mention-popup.d.ts +35 -0
- package/dist-client/client/components/mention-popup.js +223 -0
- package/dist-client/client/components/mention-popup.js.map +1 -0
- package/dist-client/client/components/mention-popup.test.d.ts +1 -0
- package/dist-client/client/components/mention-popup.test.js +474 -0
- package/dist-client/client/components/mention-popup.test.js.map +1 -0
- package/dist-client/client/index.d.ts +11 -0
- package/dist-client/client/index.js +12 -0
- package/dist-client/client/index.js.map +1 -0
- package/dist-client/client/utils/board-edit-patch.d.ts +157 -0
- package/dist-client/client/utils/board-edit-patch.js +284 -0
- package/dist-client/client/utils/board-edit-patch.js.map +1 -0
- package/dist-client/server/service/agentic-loop.d.ts +87 -0
- package/dist-client/server/service/agentic-loop.js +276 -0
- package/dist-client/server/service/agentic-loop.js.map +1 -0
- package/dist-client/server/service/assistant.d.ts +84 -0
- package/dist-client/server/service/assistant.js +2220 -0
- package/dist-client/server/service/assistant.js.map +1 -0
- package/dist-client/server/service/catalog-resolver.d.ts +18 -0
- package/dist-client/server/service/catalog-resolver.js +93 -0
- package/dist-client/server/service/catalog-resolver.js.map +1 -0
- package/dist-client/server/service/component-tree.d.ts +68 -0
- package/dist-client/server/service/component-tree.js +68 -0
- package/dist-client/server/service/component-tree.js.map +1 -0
- package/dist-client/server/service/mention-resolver.d.ts +96 -0
- package/dist-client/server/service/mention-resolver.js +172 -0
- package/dist-client/server/service/mention-resolver.js.map +1 -0
- package/dist-client/server/service/prefab-registry.d.ts +73 -0
- package/dist-client/server/service/prefab-registry.js +252 -0
- package/dist-client/server/service/prefab-registry.js.map +1 -0
- package/dist-client/server/service/styling/clear-tools.d.ts +15 -0
- package/dist-client/server/service/styling/clear-tools.js +50 -0
- package/dist-client/server/service/styling/clear-tools.js.map +1 -0
- package/dist-client/server/service/styling/color-utils.d.ts +43 -0
- package/dist-client/server/service/styling/color-utils.js +205 -0
- package/dist-client/server/service/styling/color-utils.js.map +1 -0
- package/dist-client/server/service/styling/copy-tools.d.ts +27 -0
- package/dist-client/server/service/styling/copy-tools.js +78 -0
- package/dist-client/server/service/styling/copy-tools.js.map +1 -0
- package/dist-client/server/service/styling/effect-tools.d.ts +45 -0
- package/dist-client/server/service/styling/effect-tools.js +85 -0
- package/dist-client/server/service/styling/effect-tools.js.map +1 -0
- package/dist-client/server/service/styling/fill-tools.d.ts +60 -0
- package/dist-client/server/service/styling/fill-tools.js +226 -0
- package/dist-client/server/service/styling/fill-tools.js.map +1 -0
- package/dist-client/server/service/styling/material-tools.d.ts +32 -0
- package/dist-client/server/service/styling/material-tools.js +88 -0
- package/dist-client/server/service/styling/material-tools.js.map +1 -0
- package/dist-client/server/service/styling/read-tools.d.ts +34 -0
- package/dist-client/server/service/styling/read-tools.js +42 -0
- package/dist-client/server/service/styling/read-tools.js.map +1 -0
- package/dist-client/server/service/styling/registry.d.ts +91 -0
- package/dist-client/server/service/styling/registry.js +345 -0
- package/dist-client/server/service/styling/registry.js.map +1 -0
- package/dist-client/server/service/styling/stroke-tools.d.ts +35 -0
- package/dist-client/server/service/styling/stroke-tools.js +94 -0
- package/dist-client/server/service/styling/stroke-tools.js.map +1 -0
- package/dist-client/server/service/styling/text-tools.d.ts +32 -0
- package/dist-client/server/service/styling/text-tools.js +101 -0
- package/dist-client/server/service/styling/text-tools.js.map +1 -0
- package/dist-client/server/service/types.d.ts +265 -0
- package/dist-client/server/service/types.js +2 -0
- package/dist-client/server/service/types.js.map +1 -0
- package/dist-client/server/service/validation/board-model-schema.d.ts +8311 -0
- package/dist-client/server/service/validation/board-model-schema.js +402 -0
- package/dist-client/server/service/validation/board-model-schema.js.map +1 -0
- package/dist-client/server/service/validation/tool-validation.d.ts +31 -0
- package/dist-client/server/service/validation/tool-validation.js +193 -0
- package/dist-client/server/service/validation/tool-validation.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/index.d.ts +23 -0
- package/dist-server/index.js +27 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/agentic-loop.d.ts +87 -0
- package/dist-server/service/agentic-loop.js +280 -0
- package/dist-server/service/agentic-loop.js.map +1 -0
- package/dist-server/service/apply-patch.d.ts +47 -0
- package/dist-server/service/apply-patch.js +369 -0
- package/dist-server/service/apply-patch.js.map +1 -0
- package/dist-server/service/assistant.d.ts +84 -0
- package/dist-server/service/assistant.js +2237 -0
- package/dist-server/service/assistant.js.map +1 -0
- package/dist-server/service/board-ai-resolver.d.ts +54 -0
- package/dist-server/service/board-ai-resolver.js +409 -0
- package/dist-server/service/board-ai-resolver.js.map +1 -0
- package/dist-server/service/catalog-resolver.d.ts +18 -0
- package/dist-server/service/catalog-resolver.js +98 -0
- package/dist-server/service/catalog-resolver.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-broadcast.d.ts +13 -0
- package/dist-server/service/chat-message/chat-message-broadcast.js +13 -0
- package/dist-server/service/chat-message/chat-message-broadcast.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-publish.d.ts +6 -0
- package/dist-server/service/chat-message/chat-message-publish.js +27 -0
- package/dist-server/service/chat-message/chat-message-publish.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-subscription.d.ts +8 -0
- package/dist-server/service/chat-message/chat-message-subscription.js +53 -0
- package/dist-server/service/chat-message/chat-message-subscription.js.map +1 -0
- package/dist-server/service/chat-message/chat-message.d.ts +56 -0
- package/dist-server/service/chat-message/chat-message.js +149 -0
- package/dist-server/service/chat-message/chat-message.js.map +1 -0
- package/dist-server/service/chat-message/index.d.ts +5 -0
- package/dist-server/service/chat-message/index.js +12 -0
- package/dist-server/service/chat-message/index.js.map +1 -0
- package/dist-server/service/chat-session/chat-session.d.ts +31 -0
- package/dist-server/service/chat-session/chat-session.js +131 -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-participant/chat-session-participant.d.ts +30 -0
- package/dist-server/service/chat-session-participant/chat-session-participant.js +112 -0
- package/dist-server/service/chat-session-participant/chat-session-participant.js.map +1 -0
- package/dist-server/service/chat-session-participant/index.d.ts +4 -0
- package/dist-server/service/chat-session-participant/index.js +10 -0
- package/dist-server/service/chat-session-participant/index.js.map +1 -0
- package/dist-server/service/chat-session-participant/invite-notification.d.ts +27 -0
- package/dist-server/service/chat-session-participant/invite-notification.js +30 -0
- package/dist-server/service/chat-session-participant/invite-notification.js.map +1 -0
- package/dist-server/service/chat-session-participant/presence.d.ts +4 -0
- package/dist-server/service/chat-session-participant/presence.js +22 -0
- package/dist-server/service/chat-session-participant/presence.js.map +1 -0
- package/dist-server/service/chat-session-resolver.d.ts +20 -0
- package/dist-server/service/chat-session-resolver.js +356 -0
- package/dist-server/service/chat-session-resolver.js.map +1 -0
- package/dist-server/service/component-tree.d.ts +68 -0
- package/dist-server/service/component-tree.js +73 -0
- package/dist-server/service/component-tree.js.map +1 -0
- package/dist-server/service/index.d.ts +20 -0
- package/dist-server/service/index.js +34 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/mention-marker.d.ts +78 -0
- package/dist-server/service/mention-marker.js +162 -0
- package/dist-server/service/mention-marker.js.map +1 -0
- package/dist-server/service/mention-resolver.d.ts +96 -0
- package/dist-server/service/mention-resolver.js +177 -0
- package/dist-server/service/mention-resolver.js.map +1 -0
- package/dist-server/service/patch-entry/board-patch-broadcast.d.ts +13 -0
- package/dist-server/service/patch-entry/board-patch-broadcast.js +13 -0
- package/dist-server/service/patch-entry/board-patch-broadcast.js.map +1 -0
- package/dist-server/service/patch-entry/board-patch-subscription.d.ts +12 -0
- package/dist-server/service/patch-entry/board-patch-subscription.js +63 -0
- package/dist-server/service/patch-entry/board-patch-subscription.js.map +1 -0
- package/dist-server/service/patch-entry/index.d.ts +4 -0
- package/dist-server/service/patch-entry/index.js +12 -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/prefab-registry.d.ts +73 -0
- package/dist-server/service/prefab-registry.js +258 -0
- package/dist-server/service/prefab-registry.js.map +1 -0
- package/dist-server/service/styling/clear-tools.d.ts +15 -0
- package/dist-server/service/styling/clear-tools.js +53 -0
- package/dist-server/service/styling/clear-tools.js.map +1 -0
- package/dist-server/service/styling/color-utils.d.ts +43 -0
- package/dist-server/service/styling/color-utils.js +210 -0
- package/dist-server/service/styling/color-utils.js.map +1 -0
- package/dist-server/service/styling/copy-tools.d.ts +27 -0
- package/dist-server/service/styling/copy-tools.js +81 -0
- package/dist-server/service/styling/copy-tools.js.map +1 -0
- package/dist-server/service/styling/effect-tools.d.ts +45 -0
- package/dist-server/service/styling/effect-tools.js +90 -0
- package/dist-server/service/styling/effect-tools.js.map +1 -0
- package/dist-server/service/styling/fill-tools.d.ts +60 -0
- package/dist-server/service/styling/fill-tools.js +229 -0
- package/dist-server/service/styling/fill-tools.js.map +1 -0
- package/dist-server/service/styling/material-tools.d.ts +32 -0
- package/dist-server/service/styling/material-tools.js +92 -0
- package/dist-server/service/styling/material-tools.js.map +1 -0
- package/dist-server/service/styling/read-tools.d.ts +34 -0
- package/dist-server/service/styling/read-tools.js +45 -0
- package/dist-server/service/styling/read-tools.js.map +1 -0
- package/dist-server/service/styling/registry.d.ts +91 -0
- package/dist-server/service/styling/registry.js +352 -0
- package/dist-server/service/styling/registry.js.map +1 -0
- package/dist-server/service/styling/stroke-tools.d.ts +35 -0
- package/dist-server/service/styling/stroke-tools.js +97 -0
- package/dist-server/service/styling/stroke-tools.js.map +1 -0
- package/dist-server/service/styling/text-tools.d.ts +32 -0
- package/dist-server/service/styling/text-tools.js +105 -0
- package/dist-server/service/styling/text-tools.js.map +1 -0
- package/dist-server/service/subscribe-auth.d.ts +14 -0
- package/dist-server/service/subscribe-auth.js +33 -0
- package/dist-server/service/subscribe-auth.js.map +1 -0
- package/dist-server/service/types.d.ts +265 -0
- package/dist-server/service/types.js +3 -0
- package/dist-server/service/types.js.map +1 -0
- package/dist-server/service/validation/board-model-schema.d.ts +8311 -0
- package/dist-server/service/validation/board-model-schema.js +409 -0
- package/dist-server/service/validation/board-model-schema.js.map +1 -0
- package/dist-server/service/validation/tool-validation.d.ts +31 -0
- package/dist-server/service/validation/tool-validation.js +196 -0
- package/dist-server/service/validation/tool-validation.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +48 -0
- package/server/index.ts +23 -0
- package/server/service/agentic-loop.test.ts +705 -0
- package/server/service/agentic-loop.ts +431 -0
- package/server/service/apply-patch-drift.test.ts +829 -0
- package/server/service/apply-patch.test.ts +757 -0
- package/server/service/apply-patch.ts +411 -0
- package/server/service/assistant-integration.test.ts +922 -0
- package/server/service/assistant-llm-smoke.test.ts +296 -0
- package/server/service/assistant.test.ts +2034 -0
- package/server/service/assistant.ts +2378 -0
- package/server/service/board-ai-resolver.ts +407 -0
- package/server/service/catalog-resolver.test.ts +137 -0
- package/server/service/catalog-resolver.ts +102 -0
- package/server/service/chat-message/chat-message-broadcast.integration.test.ts +73 -0
- package/server/service/chat-message/chat-message-broadcast.test.ts +40 -0
- package/server/service/chat-message/chat-message-broadcast.ts +27 -0
- package/server/service/chat-message/chat-message-publish.ts +22 -0
- package/server/service/chat-message/chat-message-subscription.ts +41 -0
- package/server/service/chat-message/chat-message.ts +169 -0
- package/server/service/chat-message/index.ts +12 -0
- package/server/service/chat-session/chat-session.ts +130 -0
- package/server/service/chat-session/index.ts +5 -0
- package/server/service/chat-session-participant/chat-session-participant.ts +110 -0
- package/server/service/chat-session-participant/index.ts +6 -0
- package/server/service/chat-session-participant/invite-notification.test.ts +30 -0
- package/server/service/chat-session-participant/invite-notification.ts +48 -0
- package/server/service/chat-session-participant/presence.test.ts +39 -0
- package/server/service/chat-session-participant/presence.ts +21 -0
- package/server/service/chat-session-resolver.ts +312 -0
- package/server/service/component-tree.test.ts +248 -0
- package/server/service/component-tree.ts +135 -0
- package/server/service/index.ts +32 -0
- package/server/service/mention-marker.extract.test.ts +61 -0
- package/server/service/mention-marker.test.ts +228 -0
- package/server/service/mention-marker.ts +184 -0
- package/server/service/mention-resolver.test.ts +273 -0
- package/server/service/mention-resolver.ts +264 -0
- package/server/service/patch-entry/board-patch-broadcast.ts +24 -0
- package/server/service/patch-entry/board-patch-subscription.test.ts +40 -0
- package/server/service/patch-entry/board-patch-subscription.ts +50 -0
- package/server/service/patch-entry/index.ts +12 -0
- package/server/service/patch-entry/patch-entry.ts +89 -0
- package/server/service/prefab-registry.test.ts +172 -0
- package/server/service/prefab-registry.ts +332 -0
- package/server/service/styling/clear-tools.test.ts +164 -0
- package/server/service/styling/clear-tools.ts +69 -0
- package/server/service/styling/color-utils.test.ts +130 -0
- package/server/service/styling/color-utils.ts +226 -0
- package/server/service/styling/copy-tools.test.ts +152 -0
- package/server/service/styling/copy-tools.ts +115 -0
- package/server/service/styling/effect-tools.test.ts +277 -0
- package/server/service/styling/effect-tools.ts +124 -0
- package/server/service/styling/fill-tools.test.ts +331 -0
- package/server/service/styling/fill-tools.ts +293 -0
- package/server/service/styling/material-tools.test.ts +294 -0
- package/server/service/styling/material-tools.ts +114 -0
- package/server/service/styling/read-tools.test.ts +78 -0
- package/server/service/styling/read-tools.ts +67 -0
- package/server/service/styling/registry.test.ts +203 -0
- package/server/service/styling/registry.ts +423 -0
- package/server/service/styling/stroke-tools.test.ts +245 -0
- package/server/service/styling/stroke-tools.ts +145 -0
- package/server/service/styling/text-tools.test.ts +253 -0
- package/server/service/styling/text-tools.ts +131 -0
- package/server/service/styling/tier1-tools.test.ts +300 -0
- package/server/service/subscribe-auth.test.ts +57 -0
- package/server/service/subscribe-auth.ts +34 -0
- package/server/service/types.ts +235 -0
- package/server/service/validation/board-model-schema.test.ts +778 -0
- package/server/service/validation/board-model-schema.ts +446 -0
- package/server/service/validation/tool-validation.ts +228 -0
- package/things-factory.config.js +1 -0
- package/translations/en.json +49 -0
- package/translations/ja.json +48 -0
- package/translations/ko.json +49 -0
- package/translations/ms.json +48 -0
- package/translations/zh.json +48 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board AI — 자연어 채팅 인터페이스 타입 정의.
|
|
3
|
+
*
|
|
4
|
+
* 핵심 개념:
|
|
5
|
+
* - 단일 진입점 `chat()`. 의도 분류(생성/편집/스타일/질문)는 AI 의 일.
|
|
6
|
+
* - 출력은 항상 `ChatResponse`. 보드 변경이 있으면 `patch` 동봉.
|
|
7
|
+
* - patch 의 op 는 직교 4 종 (add / remove / modify / replace).
|
|
8
|
+
* style/move 등은 modify.patch 안에 흡수.
|
|
9
|
+
*/
|
|
10
|
+
import type { BoardComponent, BoardModel } from '@things-factory/board-import'
|
|
11
|
+
|
|
12
|
+
export interface LLMMessage {
|
|
13
|
+
role: 'user' | 'assistant'
|
|
14
|
+
content: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ChatOptions {
|
|
18
|
+
/** board-import 의 registry scope — 등록된 ImportRule 에서 type/category 후보 추출 */
|
|
19
|
+
scopes?: string[]
|
|
20
|
+
/** 사용 가능한 도메인 type (override). 미지정 시 scopes 에서 자동 추출 */
|
|
21
|
+
knownTypes?: string[]
|
|
22
|
+
/** 사용 가능한 카테고리 (override). 미지정 시 scopes 에서 자동 추출 */
|
|
23
|
+
categories?: string[]
|
|
24
|
+
/**
|
|
25
|
+
* 컴포넌트 type 별 유효 속성 스킴.
|
|
26
|
+
* LLM 이 정확한 컴포넌트 생성을 하도록 type 의 description, group, default model 키 전달.
|
|
27
|
+
*
|
|
28
|
+
* 예:
|
|
29
|
+
* [{ type: 'rect', description: 'Rectangle', group: 'shape',
|
|
30
|
+
* properties: { fillStyle: '#fff', strokeStyle: '#000' } }, ...]
|
|
31
|
+
*/
|
|
32
|
+
componentSchemas?: ComponentSchema[]
|
|
33
|
+
/**
|
|
34
|
+
* 사용자가 모델러에서 현재 선택한 컴포넌트의 `refid` 목록.
|
|
35
|
+
*
|
|
36
|
+
* refid 는 things-scene 이 모든 컴포넌트에 자동 발급하는 universal numeric handle.
|
|
37
|
+
* id (데이터 바인딩 이름, unique 아님) 와는 다른 개념 — 선택은 항상 refid 로 표현.
|
|
38
|
+
*/
|
|
39
|
+
selectedRefids?: number[]
|
|
40
|
+
/**
|
|
41
|
+
* popup 에서 사용자가 명시 선택한 #mention 매핑 — {token, refid}.
|
|
42
|
+
* server 가 mention 해석 시 이 매핑을 우선 사용. 본문엔 #token 만 남고
|
|
43
|
+
* refid 는 사용자에게 노출되지 않음 (LLM mention map 에만 첨부).
|
|
44
|
+
*/
|
|
45
|
+
mentionPicks?: Array<{ token: string; refid: number }>
|
|
46
|
+
/** LLM 모델 override */
|
|
47
|
+
model?: string
|
|
48
|
+
/** LLM 옵션 */
|
|
49
|
+
temperature?: number
|
|
50
|
+
maxTokens?: number
|
|
51
|
+
/**
|
|
52
|
+
* Tool 카테고리 (read/external) builder 가 사용할 컨텍스트.
|
|
53
|
+
*
|
|
54
|
+
* board-ai 자체는 ResolverContext / typeorm 을 직접 알지 않지만, 외부 도메인 패키지가
|
|
55
|
+
* 등록한 tool (예: board-import 의 importBoardAsync) 은 server-side 의존성 (도메인,
|
|
56
|
+
* 사용자, 트랜잭션) 이 필요할 수 있다. board-ai-resolver 가 ResolverContext.state 등을
|
|
57
|
+
* 이 필드로 전달하면, dispatch 시 closure 로 builder 의 ctx.state 에 주입.
|
|
58
|
+
*
|
|
59
|
+
* 미지정이면 외부 builder 는 ctx.state === undefined — 빈 응답이나 에러를 반환할 책임.
|
|
60
|
+
*/
|
|
61
|
+
toolCallContext?: any
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface ComponentSchema {
|
|
65
|
+
type: string
|
|
66
|
+
description?: string
|
|
67
|
+
group?: string
|
|
68
|
+
/**
|
|
69
|
+
* 좌표/크기/경로 관련 키들 — type 마다 다름.
|
|
70
|
+
* 예) ['left', 'top', 'width', 'height'] vs ['cx', 'cy', 'radius'] vs ['points']
|
|
71
|
+
* LLM 이 type 별 정확한 좌표 키를 사용하도록 명시.
|
|
72
|
+
*/
|
|
73
|
+
geometryKeys?: string[]
|
|
74
|
+
/**
|
|
75
|
+
* 좌표 외 type 특화 속성 (style, value, min/max 등).
|
|
76
|
+
* default 값 또는 keys 만 — LLM 의 token 절감을 위해 호출자가 적절히 압축.
|
|
77
|
+
*/
|
|
78
|
+
properties?: Record<string, any>
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* AI 가 응답을 만드는 동안 호출한 도구의 시간순 trace.
|
|
83
|
+
*
|
|
84
|
+
* UX 목적 — 사용자가 "왜 이렇게 답했지" 의문 가질 때 fold-able 박스에서 확인.
|
|
85
|
+
* 디버그용 + 신뢰도 향상.
|
|
86
|
+
*/
|
|
87
|
+
export interface ToolUsage {
|
|
88
|
+
/** 도구 이름 (예: 'getSelection', 'modifyBoard', 'addComponent') */
|
|
89
|
+
name: string
|
|
90
|
+
/** 호출 인자 JSON */
|
|
91
|
+
arguments: any
|
|
92
|
+
/** 도구 결과 — read tool 은 실제 값 (truncated 가능), write tool 은 queued 마커 */
|
|
93
|
+
result: any
|
|
94
|
+
/** read tool / write tool 분류 */
|
|
95
|
+
kind: 'read' | 'write' | 'unknown'
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface ChatResponse {
|
|
99
|
+
/** 사용자에게 보여줄 텍스트 응답 */
|
|
100
|
+
reply: string
|
|
101
|
+
/** 보드 변경이 있으면 patch */
|
|
102
|
+
patch?: BoardEditPatch
|
|
103
|
+
/**
|
|
104
|
+
* Scene 조작 action (ephemeral — 모델 변경 없음 / undo 영향 없음).
|
|
105
|
+
* 시간순 시퀀스로 호스트가 things-scene API 직접 실행.
|
|
106
|
+
*/
|
|
107
|
+
actions?: BoardActionOp[]
|
|
108
|
+
/** 모호한 입력 시 명확화 질문 (patch 없음) */
|
|
109
|
+
followUp?: string
|
|
110
|
+
/** AI 가 응답 만드는 과정에서 호출한 도구들 (시간순). UI fold-able 박스용. */
|
|
111
|
+
toolUsages?: ToolUsage[]
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface BoardEditPatch {
|
|
115
|
+
ops: BoardEditOp[]
|
|
116
|
+
/** 사용자 검수용 1-2 문장 요약 */
|
|
117
|
+
summary: string
|
|
118
|
+
/** 0..1 신뢰도 */
|
|
119
|
+
confidence: number
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* 보드 변경 op.
|
|
124
|
+
*
|
|
125
|
+
* 식별자 정책 — 기존 컴포넌트 타깃팅은 `refid` (number) 만 사용.
|
|
126
|
+
* things-scene 의 모든 컴포넌트는 `refid` 를 자동 발급받는다 (universal).
|
|
127
|
+
* `model.id` 는 optional metadata 일 뿐 — 항상 존재하지 않으므로 targeting 에는
|
|
128
|
+
* 부적합. 별개 개념이므로 BoardEditOp / tool 인자에서도 별개 식별자로 분리하지
|
|
129
|
+
* 않고 refid 단일 채널로 일원화.
|
|
130
|
+
*
|
|
131
|
+
* 계층 — 보드는 **최상위 부모** (things-scene 의 model-layer) 이고 그 자체로 자기
|
|
132
|
+
* 속성을 갖는다 (fillStyle, width, height, fitMode, translate, scale, sky, skyColor,
|
|
133
|
+
* exposure, hemi/dirLight 계열, camera 계열). 자식 컴포넌트와 별개. 보드 속성 변경은
|
|
134
|
+
* `modifyBoard`, 자식 변경은 `modify` (refid 기반).
|
|
135
|
+
*
|
|
136
|
+
* 주의 — `name` 은 보드 *엔티티* (DB row) 의 컬럼이지 scene MODEL 의 필드가 아니다.
|
|
137
|
+
* things-scene 의 model-layer 가 인식 안 함. modifyBoard 로 name 을 보내면 model
|
|
138
|
+
* JSON 에 죽은 필드로 박힐 뿐 렌더링/동작에 영향 없음. 보드 라벨 변경은 GraphQL
|
|
139
|
+
* boardPatch (BoardPatch input 의 name 필드) 영역.
|
|
140
|
+
*
|
|
141
|
+
* style 변경 / 이동 / 크기 변경 등 자식 컴포넌트의 변경은 모두 `modify.patch` 안에
|
|
142
|
+
* 흡수. 보드 root 속성 변경은 `modifyBoard.patch` 로.
|
|
143
|
+
*/
|
|
144
|
+
/**
|
|
145
|
+
* Phase 2 — Scene 조작 op 들. 모델 차원 (좌표 / 부모-자식 관계 / z-order) 변경이지만
|
|
146
|
+
* things-scene 의 자체 API (align/distribute/group/ungroup/zorder) 가 일관된 결과를
|
|
147
|
+
* 보장하므로 호스트가 직접 호출. 모델 차원 시뮬레이션 (apply-patch) 은 단순화 —
|
|
148
|
+
* scene 호출 결과가 정본.
|
|
149
|
+
*/
|
|
150
|
+
export type AlignDirection =
|
|
151
|
+
| 'left'
|
|
152
|
+
| 'right'
|
|
153
|
+
| 'center'
|
|
154
|
+
| 'top'
|
|
155
|
+
| 'middle'
|
|
156
|
+
| 'bottom'
|
|
157
|
+
|
|
158
|
+
export type DistributeAxis = 'horizontal' | 'vertical'
|
|
159
|
+
|
|
160
|
+
export type ZorderDirection = 'front' | 'back' | 'forward' | 'backward'
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Sugar layout — `arrange` op 의 layout 종류.
|
|
164
|
+
*
|
|
165
|
+
* 의도: align/distribute 위에 얹는 high-level 의도 표현. AI 가 "3x2 그리드로",
|
|
166
|
+
* "한 줄로", "세로로 일렬" 같은 자연어를 픽셀 노가다 없이 단일 op 로 표현.
|
|
167
|
+
*
|
|
168
|
+
* left/top 만 변경 — width/height 는 유지. AI 가 사이즈도 바꾸려면 별도 modify.
|
|
169
|
+
*
|
|
170
|
+
* 위치 계산은 호스트 (things-scene 측) 가 담당 — 각 컴포넌트의 현재 width/height 를
|
|
171
|
+
* 정확히 알아야 하므로 model 차원 시뮬레이션은 SCENE_ONLY (apply-patch noop).
|
|
172
|
+
*/
|
|
173
|
+
export type ArrangeLayout =
|
|
174
|
+
| { type: 'grid'; cols: number; gap?: number; anchor?: { left: number; top: number } }
|
|
175
|
+
| {
|
|
176
|
+
type: 'row'
|
|
177
|
+
gap?: number
|
|
178
|
+
anchor?: { left: number; top: number }
|
|
179
|
+
align?: 'start' | 'center' | 'end'
|
|
180
|
+
}
|
|
181
|
+
| {
|
|
182
|
+
type: 'column'
|
|
183
|
+
gap?: number
|
|
184
|
+
anchor?: { left: number; top: number }
|
|
185
|
+
align?: 'start' | 'center' | 'end'
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* C-1 — Scene 조작 action 들 (ephemeral). 모델 변경 X, 따라서 BoardEditOp 와 별개
|
|
190
|
+
* 채널 (board-action-execute 이벤트). undo 히스토리 미영향, dirty flag 미영향.
|
|
191
|
+
*
|
|
192
|
+
* 종류:
|
|
193
|
+
* - selectComponents: scene.selected 직접 set (사용자 선택 변경)
|
|
194
|
+
* - centerToComponent: 특정 컴포넌트로 view 이동
|
|
195
|
+
* - fitToView: 보드 전체가 보이도록 fit
|
|
196
|
+
* - setSceneMode: edit / view 모드 전환
|
|
197
|
+
*/
|
|
198
|
+
export type BoardActionOp =
|
|
199
|
+
| { action: 'selectComponents'; refids: number[] }
|
|
200
|
+
| { action: 'centerToComponent'; refid: number; animated?: boolean }
|
|
201
|
+
| { action: 'fitToView'; mode?: 'fit' | 'ratio' | 'width' | 'height' }
|
|
202
|
+
| { action: 'setSceneMode'; mode: 'edit' | 'view' }
|
|
203
|
+
/** 다중 컴포넌트 outline highlight — search/finder UX 의 "이게 모두 매칭이다" 시각화.
|
|
204
|
+
* things-scene 의 highlightSearchResults API 위임 (2D/3D 모두 지원). */
|
|
205
|
+
| { action: 'highlightComponents'; refids: number[] }
|
|
206
|
+
|
|
207
|
+
export type BoardEditOp =
|
|
208
|
+
| { op: 'add'; component: BoardComponent }
|
|
209
|
+
| { op: 'remove'; refid: number }
|
|
210
|
+
| { op: 'modify'; refid: number; patch: Partial<BoardComponent> }
|
|
211
|
+
| { op: 'modifyBoard'; patch: Partial<BoardModel> }
|
|
212
|
+
| { op: 'replace'; board: BoardModel }
|
|
213
|
+
| { op: 'align'; refids: number[]; direction: AlignDirection }
|
|
214
|
+
| { op: 'distribute'; refids: number[]; axis: DistributeAxis }
|
|
215
|
+
| { op: 'group'; refids: number[] }
|
|
216
|
+
| { op: 'ungroup'; refid: number }
|
|
217
|
+
| { op: 'zorder'; refid: number; direction: ZorderDirection }
|
|
218
|
+
| { op: 'arrange'; refids: number[]; layout: ArrangeLayout }
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* BoardAIAssistant — 자연어 채팅으로 보드를 다루는 단일 인터페이스.
|
|
222
|
+
*
|
|
223
|
+
* 사용:
|
|
224
|
+
* const ai = new DefaultBoardAIAssistant(baseClient, { scopes: ['fmsim'] })
|
|
225
|
+
* const r = await ai.chat([{ role: 'user', content: 'AGV 3대 추가' }], currentBoard)
|
|
226
|
+
* if (r.patch) currentBoard = applyBoardEditPatch(currentBoard, r.patch)
|
|
227
|
+
*/
|
|
228
|
+
export interface BoardAIAssistant {
|
|
229
|
+
readonly id: string
|
|
230
|
+
chat(
|
|
231
|
+
messages: LLMMessage[],
|
|
232
|
+
currentBoard: BoardModel | undefined,
|
|
233
|
+
options?: ChatOptions
|
|
234
|
+
): Promise<ChatResponse>
|
|
235
|
+
}
|