@things-factory/board-ai 10.1.4 → 10.1.6
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/default-catalog-entries.ts +1 -1
- package/client/components/default-slash-templates.ts +1 -1
- package/client/index.ts +27 -6
- package/dist-client/client/components/default-catalog-entries.d.ts +1 -1
- package/dist-client/client/components/default-catalog-entries.js.map +1 -1
- package/dist-client/client/components/default-slash-templates.d.ts +1 -1
- package/dist-client/client/components/default-slash-templates.js.map +1 -1
- package/dist-client/client/index.d.ts +3 -11
- package/dist-client/client/index.js +25 -6
- package/dist-client/client/index.js.map +1 -1
- package/dist-client/server/service/assistant.d.ts +22 -22
- package/dist-client/server/service/assistant.js +32 -70
- package/dist-client/server/service/assistant.js.map +1 -1
- package/dist-client/server/service/grounding.d.ts +2 -12
- package/dist-client/server/service/grounding.js +15 -23
- package/dist-client/server/service/grounding.js.map +1 -1
- package/dist-client/server/service/types.d.ts +2 -4
- package/dist-client/server/service/types.js.map +1 -1
- package/dist-client/server/service/validation/board-model-schema.d.ts +270 -270
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/assistant.d.ts +22 -22
- package/dist-server/service/assistant.js +25 -76
- package/dist-server/service/assistant.js.map +1 -1
- package/dist-server/service/board-ai-resolver.js +41 -30
- package/dist-server/service/board-ai-resolver.js.map +1 -1
- package/dist-server/service/board-session-resolver.d.ts +12 -0
- package/dist-server/service/board-session-resolver.js +203 -0
- package/dist-server/service/board-session-resolver.js.map +1 -0
- package/dist-server/service/board-tool-rights.d.ts +7 -0
- package/dist-server/service/board-tool-rights.js +62 -0
- package/dist-server/service/board-tool-rights.js.map +1 -0
- package/dist-server/service/grounding.d.ts +2 -12
- package/dist-server/service/grounding.js +16 -24
- package/dist-server/service/grounding.js.map +1 -1
- package/dist-server/service/index.d.ts +4 -10
- package/dist-server/service/index.js +16 -23
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/patch-entry/board-patch-subscription.js +2 -2
- package/dist-server/service/patch-entry/board-patch-subscription.js.map +1 -1
- package/dist-server/service/patch-entry/patch-entry.d.ts +1 -1
- package/dist-server/service/patch-entry/patch-entry.js +3 -3
- package/dist-server/service/patch-entry/patch-entry.js.map +1 -1
- package/dist-server/service/types.d.ts +2 -4
- package/dist-server/service/types.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/server/service/apply-patch-drift.test.ts +3 -1
- package/server/service/assistant.ts +47 -73
- package/server/service/board-ai-resolver.ts +22 -12
- package/server/service/board-session-resolver.ts +183 -0
- package/server/service/board-tool-rights.test.ts +96 -0
- package/server/service/board-tool-rights.ts +73 -0
- package/server/service/dock-contract.test.ts +3 -0
- package/server/service/grounding.test.ts +3 -3
- package/server/service/grounding.ts +15 -34
- package/server/service/index.ts +16 -22
- package/server/service/patch-entry/board-patch-subscription.ts +1 -1
- package/server/service/patch-entry/patch-entry.ts +3 -2
- package/server/service/registry-tool-loop.test.ts +1 -0
- package/server/service/tool-exposure.test.ts +2 -0
- package/server/service/types.ts +3 -4
- package/client/components/board-ai-chat.test.ts +0 -149
- package/client/components/board-ai-chat.ts +0 -3184
- package/client/components/chat-echo-dedup.test.ts +0 -230
- package/client/components/chat-echo-dedup.ts +0 -155
- package/client/components/chat-input-builder.ts +0 -69
- package/client/components/markdown.test.ts +0 -518
- package/client/components/markdown.ts +0 -508
- package/client/components/mention-popup-helpers.ts +0 -433
- package/client/components/mention-popup.test.ts +0 -588
- package/client/components/mention-popup.ts +0 -238
- package/client/utils/board-edit-patch.ts +0 -374
- package/dist-client/client/components/board-ai-chat.d.ts +0 -384
- package/dist-client/client/components/board-ai-chat.js +0 -3008
- package/dist-client/client/components/board-ai-chat.js.map +0 -1
- package/dist-client/client/components/board-ai-chat.test.d.ts +0 -1
- package/dist-client/client/components/board-ai-chat.test.js +0 -138
- package/dist-client/client/components/board-ai-chat.test.js.map +0 -1
- package/dist-client/client/components/chat-echo-dedup.d.ts +0 -54
- package/dist-client/client/components/chat-echo-dedup.js +0 -115
- package/dist-client/client/components/chat-echo-dedup.js.map +0 -1
- package/dist-client/client/components/chat-echo-dedup.test.d.ts +0 -1
- package/dist-client/client/components/chat-echo-dedup.test.js +0 -203
- package/dist-client/client/components/chat-echo-dedup.test.js.map +0 -1
- package/dist-client/client/components/chat-input-builder.d.ts +0 -55
- package/dist-client/client/components/chat-input-builder.js +0 -32
- package/dist-client/client/components/chat-input-builder.js.map +0 -1
- package/dist-client/client/components/markdown.d.ts +0 -60
- package/dist-client/client/components/markdown.js +0 -422
- package/dist-client/client/components/markdown.js.map +0 -1
- package/dist-client/client/components/markdown.test.d.ts +0 -1
- package/dist-client/client/components/markdown.test.js +0 -418
- package/dist-client/client/components/markdown.test.js.map +0 -1
- package/dist-client/client/components/mention-popup-helpers.d.ts +0 -165
- package/dist-client/client/components/mention-popup-helpers.js +0 -330
- package/dist-client/client/components/mention-popup-helpers.js.map +0 -1
- package/dist-client/client/components/mention-popup.d.ts +0 -35
- package/dist-client/client/components/mention-popup.js +0 -223
- package/dist-client/client/components/mention-popup.js.map +0 -1
- package/dist-client/client/components/mention-popup.test.d.ts +0 -1
- package/dist-client/client/components/mention-popup.test.js +0 -474
- package/dist-client/client/components/mention-popup.test.js.map +0 -1
- package/dist-client/client/utils/board-edit-patch.d.ts +0 -157
- package/dist-client/client/utils/board-edit-patch.js +0 -284
- package/dist-client/client/utils/board-edit-patch.js.map +0 -1
- package/dist-server/service/chat-message/chat-message-broadcast.d.ts +0 -13
- package/dist-server/service/chat-message/chat-message-broadcast.js +0 -13
- package/dist-server/service/chat-message/chat-message-broadcast.js.map +0 -1
- package/dist-server/service/chat-message/chat-message-publish.d.ts +0 -6
- package/dist-server/service/chat-message/chat-message-publish.js +0 -27
- package/dist-server/service/chat-message/chat-message-publish.js.map +0 -1
- package/dist-server/service/chat-message/chat-message-subscription.d.ts +0 -8
- package/dist-server/service/chat-message/chat-message-subscription.js +0 -53
- package/dist-server/service/chat-message/chat-message-subscription.js.map +0 -1
- package/dist-server/service/chat-message/chat-message.d.ts +0 -68
- package/dist-server/service/chat-message/chat-message.js +0 -172
- package/dist-server/service/chat-message/chat-message.js.map +0 -1
- package/dist-server/service/chat-message/fold-history.d.ts +0 -43
- package/dist-server/service/chat-message/fold-history.js +0 -33
- package/dist-server/service/chat-message/fold-history.js.map +0 -1
- package/dist-server/service/chat-message/history-summary.d.ts +0 -43
- package/dist-server/service/chat-message/history-summary.js +0 -77
- package/dist-server/service/chat-message/history-summary.js.map +0 -1
- package/dist-server/service/chat-message/index.d.ts +0 -5
- package/dist-server/service/chat-message/index.js +0 -12
- package/dist-server/service/chat-message/index.js.map +0 -1
- package/dist-server/service/chat-message/llm-history.d.ts +0 -46
- package/dist-server/service/chat-message/llm-history.js +0 -87
- package/dist-server/service/chat-message/llm-history.js.map +0 -1
- package/dist-server/service/chat-session/chat-session.d.ts +0 -62
- package/dist-server/service/chat-session/chat-session.js +0 -164
- package/dist-server/service/chat-session/chat-session.js.map +0 -1
- package/dist-server/service/chat-session/index.d.ts +0 -3
- package/dist-server/service/chat-session/index.js +0 -7
- package/dist-server/service/chat-session/index.js.map +0 -1
- package/dist-server/service/chat-session/session-activity-broadcast.d.ts +0 -30
- package/dist-server/service/chat-session/session-activity-broadcast.js +0 -34
- package/dist-server/service/chat-session/session-activity-broadcast.js.map +0 -1
- package/dist-server/service/chat-session/session-activity-publish.d.ts +0 -12
- package/dist-server/service/chat-session/session-activity-publish.js +0 -37
- package/dist-server/service/chat-session/session-activity-publish.js.map +0 -1
- package/dist-server/service/chat-session/session-activity-subscription.d.ts +0 -14
- package/dist-server/service/chat-session/session-activity-subscription.js +0 -87
- package/dist-server/service/chat-session/session-activity-subscription.js.map +0 -1
- package/dist-server/service/chat-session/session-anchor.d.ts +0 -12
- package/dist-server/service/chat-session/session-anchor.js +0 -20
- package/dist-server/service/chat-session/session-anchor.js.map +0 -1
- package/dist-server/service/chat-session/session-inbox.d.ts +0 -80
- package/dist-server/service/chat-session/session-inbox.js +0 -133
- package/dist-server/service/chat-session/session-inbox.js.map +0 -1
- package/dist-server/service/chat-session-participant/chat-session-participant.d.ts +0 -49
- package/dist-server/service/chat-session-participant/chat-session-participant.js +0 -141
- package/dist-server/service/chat-session-participant/chat-session-participant.js.map +0 -1
- package/dist-server/service/chat-session-participant/index.d.ts +0 -4
- package/dist-server/service/chat-session-participant/index.js +0 -10
- package/dist-server/service/chat-session-participant/index.js.map +0 -1
- package/dist-server/service/chat-session-participant/invite-notification.d.ts +0 -27
- package/dist-server/service/chat-session-participant/invite-notification.js +0 -30
- package/dist-server/service/chat-session-participant/invite-notification.js.map +0 -1
- package/dist-server/service/chat-session-participant/presence.d.ts +0 -4
- package/dist-server/service/chat-session-participant/presence.js +0 -22
- package/dist-server/service/chat-session-participant/presence.js.map +0 -1
- package/dist-server/service/chat-session-resolver.d.ts +0 -102
- package/dist-server/service/chat-session-resolver.js +0 -856
- package/dist-server/service/chat-session-resolver.js.map +0 -1
- package/dist-server/service/subscribe-auth.d.ts +0 -14
- package/dist-server/service/subscribe-auth.js +0 -33
- package/dist-server/service/subscribe-auth.js.map +0 -1
- package/server/service/chat-message/chat-message-broadcast.integration.test.ts +0 -73
- package/server/service/chat-message/chat-message-broadcast.test.ts +0 -40
- package/server/service/chat-message/chat-message-broadcast.ts +0 -27
- package/server/service/chat-message/chat-message-publish.ts +0 -22
- package/server/service/chat-message/chat-message-subscription.ts +0 -41
- package/server/service/chat-message/chat-message.ts +0 -195
- package/server/service/chat-message/fold-history.test.ts +0 -98
- package/server/service/chat-message/fold-history.ts +0 -77
- package/server/service/chat-message/history-summary.test.ts +0 -127
- package/server/service/chat-message/history-summary.ts +0 -100
- package/server/service/chat-message/index.ts +0 -12
- package/server/service/chat-message/llm-history.test.ts +0 -194
- package/server/service/chat-message/llm-history.ts +0 -163
- package/server/service/chat-session/chat-session.ts +0 -182
- package/server/service/chat-session/index.ts +0 -5
- package/server/service/chat-session/session-activity-broadcast.ts +0 -57
- package/server/service/chat-session/session-activity-publish.ts +0 -44
- package/server/service/chat-session/session-activity-subscription.ts +0 -67
- package/server/service/chat-session/session-anchor.ts +0 -35
- package/server/service/chat-session/session-inbox.test.ts +0 -185
- package/server/service/chat-session/session-inbox.ts +0 -161
- package/server/service/chat-session-participant/chat-session-participant.ts +0 -135
- package/server/service/chat-session-participant/index.ts +0 -6
- package/server/service/chat-session-participant/invite-notification.test.ts +0 -30
- package/server/service/chat-session-participant/invite-notification.ts +0 -48
- package/server/service/chat-session-participant/presence.test.ts +0 -39
- package/server/service/chat-session-participant/presence.ts +0 -21
- package/server/service/chat-session-resolver.ts +0 -779
- package/server/service/session-anchor.test.ts +0 -65
- package/server/service/subscribe-auth.test.ts +0 -57
- package/server/service/subscribe-auth.ts +0 -34
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
import type { AIClient, AITool, AIToolCall, AIToolChatResult } from '@things-factory/ai-client-base';
|
|
5
5
|
import { type BoardModel, type ComponentCategory } from '@things-factory/board-import';
|
|
6
6
|
import type { BoardAIAssistant, BoardEditOp, ChatOptions, ChatResponse, LLMMessage } from './types.js';
|
|
7
|
-
import { type
|
|
8
|
-
import { type
|
|
7
|
+
import { formatAbortNotice, summarizeToolResult, type ToolGate as NeutralToolGate } from '@things-factory/ai-client-base';
|
|
8
|
+
import { type ToolCategoryFilter } from '@things-factory/ai-client-base';
|
|
9
9
|
export interface BoardAIAssistantOptions {
|
|
10
10
|
/** 기본 scope (chat 호출 시 옵션이 없으면 사용) */
|
|
11
11
|
scopes?: string[];
|
|
@@ -51,20 +51,7 @@ export declare function listColorPaletteNames(): string[];
|
|
|
51
51
|
* 등록된 레이아웃 템플릿 이름 목록 — 위와 동일.
|
|
52
52
|
*/
|
|
53
53
|
export declare function listLayoutTemplateNames(): string[];
|
|
54
|
-
|
|
55
|
-
* agentic loop 의 비정상 종료 사유 → 사용자 메시지에 부기할 한국어 한 줄.
|
|
56
|
-
*
|
|
57
|
-
* 정상 종료 (abortReason undefined) 면 빈 문자열 — concat 해도 무해.
|
|
58
|
-
* 사용자에게 "왜 중간에 멈췄는지" 단서 제공이 목적 — 침묵 종료 금지.
|
|
59
|
-
*/
|
|
60
|
-
export declare function formatAbortNotice(abortReason: AgenticLoopResult['abortReason']): string;
|
|
61
|
-
/**
|
|
62
|
-
* tool 결과를 UI fold-able 박스에 보여줄 만한 크기로 요약.
|
|
63
|
-
*
|
|
64
|
-
* 원본 그대로면 findComponents 50개 / getAtmosphereGuide 같은 큰 객체가 ChatMessage
|
|
65
|
-
* 영속까지 부담 — 핵심 모양만 유지하고 나머지는 marker.
|
|
66
|
-
*/
|
|
67
|
-
export declare function summarizeToolResult(value: any, depth?: number): any;
|
|
54
|
+
export { formatAbortNotice, summarizeToolResult };
|
|
68
55
|
export declare function isWriteTool(name: string): boolean;
|
|
69
56
|
export declare function isActionTool(name: string): boolean;
|
|
70
57
|
/**
|
|
@@ -86,14 +73,27 @@ export interface ToolExposure {
|
|
|
86
73
|
/** 외부 카테고리 화이트리스트(registerToolCategory 이름). 미지정 = 전부. */
|
|
87
74
|
toolCategories?: ToolCategoryFilter;
|
|
88
75
|
}
|
|
89
|
-
|
|
76
|
+
/**
|
|
77
|
+
* 보드의 게이트 — 공용 게이트 + 이 패키지가 가진 코어 도구 이름집합.
|
|
78
|
+
*
|
|
79
|
+
* `coreOn` 이 여기 있는 이유: 「코어 보드 편집 도구」라는 것이 board-ai 에만 있는 개념이다.
|
|
80
|
+
* 공용 게이트는 레지스트리만 안다.
|
|
81
|
+
*/
|
|
82
|
+
export interface ToolGate extends NeutralToolGate {
|
|
90
83
|
coreOn: boolean;
|
|
91
|
-
filter: ToolCategoryFilter;
|
|
92
|
-
isRead(name: string): boolean;
|
|
93
|
-
isWrite(name: string): boolean;
|
|
94
|
-
isAction(name: string): boolean;
|
|
95
|
-
spec(name: string): ToolSpec | undefined;
|
|
96
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* ── 레지스트리 판정을 공용으로 옮겼다 (2026-09-10) ─────────────────────────
|
|
87
|
+
* 이 함수가 두 출처에 답하고 있었다 — **도구 레지스트리**(등록된 카테고리의 kind·spec)와
|
|
88
|
+
* **이 패키지의 코어 이름집합**. 앞엣것은 중립이다: 「이 이름이 어느 종류이고 이 대화가 볼 수
|
|
89
|
+
* 있나」는 호스트가 누구든 같은 답이다.
|
|
90
|
+
*
|
|
91
|
+
* 그래서 앞엣것은 `registryToolGate` 로 내려갔고, 여기서 뒤엣것을 **더한다**. 이 갈이가 없으면
|
|
92
|
+
* 보드 없는 제품이 같은 dispatch 규율을 받으려고 자기 게이트를 써야 하고, 그러면 접지 가드가
|
|
93
|
+
* 갈렸던 것과 같은 일이 게이트에서 난다.
|
|
94
|
+
*
|
|
95
|
+
* 더하는 것이지 덮는 것이 아니다 — 덮으면 코어 이름집합에 없는 등록 도구가 조용히 잠긴다.
|
|
96
|
+
*/
|
|
97
97
|
export declare function buildToolGate(exposure?: ToolExposure): ToolGate;
|
|
98
98
|
/**
|
|
99
99
|
* Tool call → BoardActionOp 변환 (C-1 ephemeral scene 조작).
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultBoardAIAssistant = void 0;
|
|
3
|
+
exports.summarizeToolResult = exports.formatAbortNotice = exports.DefaultBoardAIAssistant = void 0;
|
|
4
4
|
exports.buildBoardEditTools = buildBoardEditTools;
|
|
5
5
|
exports.executeReadTool = executeReadTool;
|
|
6
6
|
exports.isReadTool = isReadTool;
|
|
7
7
|
exports.listColorPaletteNames = listColorPaletteNames;
|
|
8
8
|
exports.listLayoutTemplateNames = listLayoutTemplateNames;
|
|
9
|
-
exports.formatAbortNotice = formatAbortNotice;
|
|
10
|
-
exports.summarizeToolResult = summarizeToolResult;
|
|
11
9
|
exports.isWriteTool = isWriteTool;
|
|
12
10
|
exports.isActionTool = isActionTool;
|
|
13
11
|
exports.buildToolGate = buildToolGate;
|
|
@@ -30,6 +28,8 @@ const read_tools_1 = require("./styling/read-tools");
|
|
|
30
28
|
* board 의 것(문서·선택 refid·편집 op)은 타입 매개변수로 넘긴다 — 루프는 그 모양을 모른다.
|
|
31
29
|
*/
|
|
32
30
|
const ai_client_base_1 = require("@things-factory/ai-client-base");
|
|
31
|
+
Object.defineProperty(exports, "formatAbortNotice", { enumerable: true, get: function () { return ai_client_base_1.formatAbortNotice; } });
|
|
32
|
+
Object.defineProperty(exports, "summarizeToolResult", { enumerable: true, get: function () { return ai_client_base_1.summarizeToolResult; } });
|
|
33
33
|
const grounding_1 = require("./grounding");
|
|
34
34
|
const component_tree_1 = require("./component-tree");
|
|
35
35
|
const registry_js_1 = require("./styling/registry.js");
|
|
@@ -184,7 +184,7 @@ class DefaultBoardAIAssistant {
|
|
|
184
184
|
/* 문서에서 부품을 꺼내는 일은 **여기서** 한다 — 루프는 board 의 모양을 모른다. */
|
|
185
185
|
validateWriteToolCall: (tc, ctx) => (0, tool_validation_1.validateWriteToolCall)(tc, (ctx.board?.components ?? [])),
|
|
186
186
|
toolCallToOp: toolCallToBoardActionOp,
|
|
187
|
-
summarizeToolResult
|
|
187
|
+
summarizeToolResult: ai_client_base_1.summarizeToolResult
|
|
188
188
|
},
|
|
189
189
|
context: { board: currentBoard, selectedRefids }
|
|
190
190
|
});
|
|
@@ -205,7 +205,7 @@ class DefaultBoardAIAssistant {
|
|
|
205
205
|
// abortReason 이 있으면 사용자 메시지에 한 줄 부기 — 침묵 종료 방지.
|
|
206
206
|
// (정상 종료 시 abortReason undefined 로 부기 없음.)
|
|
207
207
|
const baseReply = lastText || (ops.length > 0 ? '변경했습니다.' : '');
|
|
208
|
-
const reply = baseReply + formatAbortNotice(loopResult.abortReason);
|
|
208
|
+
const reply = baseReply + (0, ai_client_base_1.formatAbortNotice)(loopResult.abortReason);
|
|
209
209
|
let patch;
|
|
210
210
|
if (ops.length > 0) {
|
|
211
211
|
patch = {
|
|
@@ -218,7 +218,8 @@ class DefaultBoardAIAssistant {
|
|
|
218
218
|
* 근거집합의 정의와 사정거리는 ./grounding 머리말 참조(식별자 없는 창작 서술은 잡지 못한다). */
|
|
219
219
|
const warnings = (0, grounding_1.checkReplyGrounding)(baseReply, {
|
|
220
220
|
systemPrompt,
|
|
221
|
-
|
|
221
|
+
/* 근거집합의 칸 이름은 공용 패키지의 것이다 — 이 값이 보드 문맥이라는 것은 이 파일만 안다. */
|
|
222
|
+
hostContext: boardContext,
|
|
222
223
|
messages: messages.map(m => (typeof m.content === 'string' ? m.content : '')),
|
|
223
224
|
toolResults: loopResult.groundedTexts
|
|
224
225
|
});
|
|
@@ -1811,66 +1812,6 @@ function listColorPaletteNames() {
|
|
|
1811
1812
|
function listLayoutTemplateNames() {
|
|
1812
1813
|
return Object.keys(LAYOUT_TEMPLATES.templates);
|
|
1813
1814
|
}
|
|
1814
|
-
/**
|
|
1815
|
-
* agentic loop 의 비정상 종료 사유 → 사용자 메시지에 부기할 한국어 한 줄.
|
|
1816
|
-
*
|
|
1817
|
-
* 정상 종료 (abortReason undefined) 면 빈 문자열 — concat 해도 무해.
|
|
1818
|
-
* 사용자에게 "왜 중간에 멈췄는지" 단서 제공이 목적 — 침묵 종료 금지.
|
|
1819
|
-
*/
|
|
1820
|
-
function formatAbortNotice(abortReason) {
|
|
1821
|
-
if (!abortReason)
|
|
1822
|
-
return '';
|
|
1823
|
-
switch (abortReason.type) {
|
|
1824
|
-
case 'aborted':
|
|
1825
|
-
return '\n\n_(요청이 중단되어 일부만 처리됐어요.)_';
|
|
1826
|
-
case 'provider_error':
|
|
1827
|
-
/* 남의 말(SDK 원문)을 사용자에게 보여주지 않는다 — "Error fetching from undefined: [503 …]" 은
|
|
1828
|
-
* 사용자가 할 수 있는 일을 알려주지 않는다. 일시 장애는 이미 몇 번 다시 시도한 뒤이므로,
|
|
1829
|
-
* 지금 필요한 안내는 "잠시 후 다시" 하나다. 원문은 서버 로그에 남는다. */
|
|
1830
|
-
return (0, ai_client_base_2.isTransientAIError)({ message: abortReason.message })
|
|
1831
|
-
? '\n\n_(AI 서비스가 일시적으로 응답하지 않았어요. 잠시 후 다시 시도해 주세요.)_'
|
|
1832
|
-
: '\n\n_(처리 중 오류가 발생했어요. 같은 요청이 계속 실패하면 관리자에게 알려 주세요.)_';
|
|
1833
|
-
case 'max_iterations':
|
|
1834
|
-
return `\n\n_(작업이 너무 길어 ${abortReason.iter}회에서 중단했어요. 더 작게 나눠 요청해보세요.)_`;
|
|
1835
|
-
case 'repeated_validation_failure':
|
|
1836
|
-
return `\n\n_(\`${abortReason.toolName}\` 호출이 ${abortReason.consecutive}회 연속 실패해 중단했어요. 요청을 다시 표현해보세요.)_`;
|
|
1837
|
-
}
|
|
1838
|
-
}
|
|
1839
|
-
/**
|
|
1840
|
-
* tool 결과를 UI fold-able 박스에 보여줄 만한 크기로 요약.
|
|
1841
|
-
*
|
|
1842
|
-
* 원본 그대로면 findComponents 50개 / getAtmosphereGuide 같은 큰 객체가 ChatMessage
|
|
1843
|
-
* 영속까지 부담 — 핵심 모양만 유지하고 나머지는 marker.
|
|
1844
|
-
*/
|
|
1845
|
-
function summarizeToolResult(value, depth = 0) {
|
|
1846
|
-
if (value === null || value === undefined)
|
|
1847
|
-
return value;
|
|
1848
|
-
if (typeof value === 'string') {
|
|
1849
|
-
return value.length > 200 ? `${value.slice(0, 200)}…[+${value.length - 200} chars]` : value;
|
|
1850
|
-
}
|
|
1851
|
-
if (typeof value === 'number' || typeof value === 'boolean')
|
|
1852
|
-
return value;
|
|
1853
|
-
if (Array.isArray(value)) {
|
|
1854
|
-
if (depth >= 2)
|
|
1855
|
-
return `[Array(${value.length})]`;
|
|
1856
|
-
const out = value.slice(0, 5).map(v => summarizeToolResult(v, depth + 1));
|
|
1857
|
-
if (value.length > 5)
|
|
1858
|
-
out.push(`…[+${value.length - 5} items]`);
|
|
1859
|
-
return out;
|
|
1860
|
-
}
|
|
1861
|
-
if (typeof value === 'object') {
|
|
1862
|
-
if (depth >= 3) {
|
|
1863
|
-
const keys = Object.keys(value).slice(0, 6).join(',');
|
|
1864
|
-
return `{${keys}${Object.keys(value).length > 6 ? ',…' : ''}}`;
|
|
1865
|
-
}
|
|
1866
|
-
const out = {};
|
|
1867
|
-
for (const key of Object.keys(value)) {
|
|
1868
|
-
out[key] = summarizeToolResult(value[key], depth + 1);
|
|
1869
|
-
}
|
|
1870
|
-
return out;
|
|
1871
|
-
}
|
|
1872
|
-
return undefined;
|
|
1873
|
-
}
|
|
1874
1815
|
function isWriteTool(name) {
|
|
1875
1816
|
if (WRITE_TOOL_NAMES.has(name))
|
|
1876
1817
|
return true;
|
|
@@ -1881,18 +1822,26 @@ function isActionTool(name) {
|
|
|
1881
1822
|
return true;
|
|
1882
1823
|
return (0, ai_client_base_2.getToolKind)(name) === 'action';
|
|
1883
1824
|
}
|
|
1825
|
+
/**
|
|
1826
|
+
* ── 레지스트리 판정을 공용으로 옮겼다 (2026-09-10) ─────────────────────────
|
|
1827
|
+
* 이 함수가 두 출처에 답하고 있었다 — **도구 레지스트리**(등록된 카테고리의 kind·spec)와
|
|
1828
|
+
* **이 패키지의 코어 이름집합**. 앞엣것은 중립이다: 「이 이름이 어느 종류이고 이 대화가 볼 수
|
|
1829
|
+
* 있나」는 호스트가 누구든 같은 답이다.
|
|
1830
|
+
*
|
|
1831
|
+
* 그래서 앞엣것은 `registryToolGate` 로 내려갔고, 여기서 뒤엣것을 **더한다**. 이 갈이가 없으면
|
|
1832
|
+
* 보드 없는 제품이 같은 dispatch 규율을 받으려고 자기 게이트를 써야 하고, 그러면 접지 가드가
|
|
1833
|
+
* 갈렸던 것과 같은 일이 게이트에서 난다.
|
|
1834
|
+
*
|
|
1835
|
+
* 더하는 것이지 덮는 것이 아니다 — 덮으면 코어 이름집합에 없는 등록 도구가 조용히 잠긴다.
|
|
1836
|
+
*/
|
|
1884
1837
|
function buildToolGate(exposure = {}) {
|
|
1885
1838
|
const coreOn = exposure.boardTools !== false;
|
|
1886
|
-
const
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
coreOn
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
isWrite: name => (coreOn && WRITE_TOOL_NAMES.has(name)) || kind(name) === 'write',
|
|
1893
|
-
isAction: name => (coreOn && ACTION_TOOL_NAMES.has(name)) || kind(name) === 'action',
|
|
1894
|
-
spec: name => (0, ai_client_base_2.findToolSpec)(name, filter)
|
|
1895
|
-
};
|
|
1839
|
+
const gate = (0, ai_client_base_1.extendToolGate)((0, ai_client_base_1.registryToolGate)(exposure.toolCategories), {
|
|
1840
|
+
isRead: name => coreOn && READ_TOOL_NAMES.has(name),
|
|
1841
|
+
isWrite: name => coreOn && WRITE_TOOL_NAMES.has(name),
|
|
1842
|
+
isAction: name => coreOn && ACTION_TOOL_NAMES.has(name)
|
|
1843
|
+
});
|
|
1844
|
+
return { ...gate, coreOn };
|
|
1896
1845
|
}
|
|
1897
1846
|
/**
|
|
1898
1847
|
* tool-registry plugin point — 등록된 모든 외부 카테고리의 LLM tool 정의를 도출.
|