@things-factory/board-ai 10.1.5 → 10.1.7

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.
Files changed (204) hide show
  1. package/client/components/default-catalog-entries.ts +1 -1
  2. package/client/components/default-slash-templates.ts +1 -1
  3. package/client/index.ts +39 -6
  4. package/dist-client/client/components/default-catalog-entries.d.ts +1 -1
  5. package/dist-client/client/components/default-catalog-entries.js.map +1 -1
  6. package/dist-client/client/components/default-slash-templates.d.ts +1 -1
  7. package/dist-client/client/components/default-slash-templates.js.map +1 -1
  8. package/dist-client/client/index.d.ts +3 -11
  9. package/dist-client/client/index.js +37 -6
  10. package/dist-client/client/index.js.map +1 -1
  11. package/dist-client/server/service/assistant.d.ts +22 -22
  12. package/dist-client/server/service/assistant.js +32 -70
  13. package/dist-client/server/service/assistant.js.map +1 -1
  14. package/dist-client/server/service/grounding.d.ts +2 -12
  15. package/dist-client/server/service/grounding.js +15 -23
  16. package/dist-client/server/service/grounding.js.map +1 -1
  17. package/dist-client/server/service/types.d.ts +2 -4
  18. package/dist-client/server/service/types.js.map +1 -1
  19. package/dist-client/server/service/validation/board-model-schema.d.ts +270 -270
  20. package/dist-client/tsconfig.tsbuildinfo +1 -1
  21. package/dist-server/service/assistant.d.ts +22 -22
  22. package/dist-server/service/assistant.js +25 -76
  23. package/dist-server/service/assistant.js.map +1 -1
  24. package/dist-server/service/board-ai-resolver.js +41 -30
  25. package/dist-server/service/board-ai-resolver.js.map +1 -1
  26. package/dist-server/service/board-session-resolver.d.ts +12 -0
  27. package/dist-server/service/board-session-resolver.js +203 -0
  28. package/dist-server/service/board-session-resolver.js.map +1 -0
  29. package/dist-server/service/board-tool-rights.d.ts +7 -0
  30. package/dist-server/service/board-tool-rights.js +62 -0
  31. package/dist-server/service/board-tool-rights.js.map +1 -0
  32. package/dist-server/service/grounding.d.ts +2 -12
  33. package/dist-server/service/grounding.js +16 -24
  34. package/dist-server/service/grounding.js.map +1 -1
  35. package/dist-server/service/index.d.ts +4 -10
  36. package/dist-server/service/index.js +16 -23
  37. package/dist-server/service/index.js.map +1 -1
  38. package/dist-server/service/patch-entry/board-patch-subscription.js +2 -2
  39. package/dist-server/service/patch-entry/board-patch-subscription.js.map +1 -1
  40. package/dist-server/service/patch-entry/patch-entry.d.ts +1 -1
  41. package/dist-server/service/patch-entry/patch-entry.js +3 -3
  42. package/dist-server/service/patch-entry/patch-entry.js.map +1 -1
  43. package/dist-server/service/types.d.ts +2 -4
  44. package/dist-server/service/types.js.map +1 -1
  45. package/dist-server/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +7 -6
  47. package/server/service/apply-patch-drift.test.ts +3 -1
  48. package/server/service/assistant.ts +47 -73
  49. package/server/service/board-ai-resolver.ts +22 -12
  50. package/server/service/board-session-resolver.ts +183 -0
  51. package/server/service/board-tool-rights.test.ts +96 -0
  52. package/server/service/board-tool-rights.ts +73 -0
  53. package/server/service/dock-contract.test.ts +3 -0
  54. package/server/service/grounding.test.ts +3 -3
  55. package/server/service/grounding.ts +15 -34
  56. package/server/service/index.ts +16 -22
  57. package/server/service/patch-entry/board-patch-subscription.ts +1 -1
  58. package/server/service/patch-entry/patch-entry.ts +3 -2
  59. package/server/service/registry-tool-loop.test.ts +1 -0
  60. package/server/service/tool-exposure.test.ts +2 -0
  61. package/server/service/types.ts +3 -4
  62. package/translations/en.json +1 -62
  63. package/translations/ja.json +1 -61
  64. package/translations/ko.json +1 -62
  65. package/translations/ms.json +1 -61
  66. package/translations/zh.json +1 -61
  67. package/client/components/board-ai-chat.test.ts +0 -149
  68. package/client/components/board-ai-chat.ts +0 -3184
  69. package/client/components/chat-echo-dedup.test.ts +0 -230
  70. package/client/components/chat-echo-dedup.ts +0 -155
  71. package/client/components/chat-input-builder.ts +0 -69
  72. package/client/components/markdown.test.ts +0 -518
  73. package/client/components/markdown.ts +0 -508
  74. package/client/components/mention-popup-helpers.ts +0 -433
  75. package/client/components/mention-popup.test.ts +0 -588
  76. package/client/components/mention-popup.ts +0 -238
  77. package/client/utils/board-edit-patch.ts +0 -374
  78. package/dist-client/client/components/board-ai-chat.d.ts +0 -384
  79. package/dist-client/client/components/board-ai-chat.js +0 -3008
  80. package/dist-client/client/components/board-ai-chat.js.map +0 -1
  81. package/dist-client/client/components/board-ai-chat.test.d.ts +0 -1
  82. package/dist-client/client/components/board-ai-chat.test.js +0 -138
  83. package/dist-client/client/components/board-ai-chat.test.js.map +0 -1
  84. package/dist-client/client/components/chat-echo-dedup.d.ts +0 -54
  85. package/dist-client/client/components/chat-echo-dedup.js +0 -115
  86. package/dist-client/client/components/chat-echo-dedup.js.map +0 -1
  87. package/dist-client/client/components/chat-echo-dedup.test.d.ts +0 -1
  88. package/dist-client/client/components/chat-echo-dedup.test.js +0 -203
  89. package/dist-client/client/components/chat-echo-dedup.test.js.map +0 -1
  90. package/dist-client/client/components/chat-input-builder.d.ts +0 -55
  91. package/dist-client/client/components/chat-input-builder.js +0 -32
  92. package/dist-client/client/components/chat-input-builder.js.map +0 -1
  93. package/dist-client/client/components/markdown.d.ts +0 -60
  94. package/dist-client/client/components/markdown.js +0 -422
  95. package/dist-client/client/components/markdown.js.map +0 -1
  96. package/dist-client/client/components/markdown.test.d.ts +0 -1
  97. package/dist-client/client/components/markdown.test.js +0 -418
  98. package/dist-client/client/components/markdown.test.js.map +0 -1
  99. package/dist-client/client/components/mention-popup-helpers.d.ts +0 -165
  100. package/dist-client/client/components/mention-popup-helpers.js +0 -330
  101. package/dist-client/client/components/mention-popup-helpers.js.map +0 -1
  102. package/dist-client/client/components/mention-popup.d.ts +0 -35
  103. package/dist-client/client/components/mention-popup.js +0 -223
  104. package/dist-client/client/components/mention-popup.js.map +0 -1
  105. package/dist-client/client/components/mention-popup.test.d.ts +0 -1
  106. package/dist-client/client/components/mention-popup.test.js +0 -474
  107. package/dist-client/client/components/mention-popup.test.js.map +0 -1
  108. package/dist-client/client/utils/board-edit-patch.d.ts +0 -157
  109. package/dist-client/client/utils/board-edit-patch.js +0 -284
  110. package/dist-client/client/utils/board-edit-patch.js.map +0 -1
  111. package/dist-server/service/chat-message/chat-message-broadcast.d.ts +0 -13
  112. package/dist-server/service/chat-message/chat-message-broadcast.js +0 -13
  113. package/dist-server/service/chat-message/chat-message-broadcast.js.map +0 -1
  114. package/dist-server/service/chat-message/chat-message-publish.d.ts +0 -6
  115. package/dist-server/service/chat-message/chat-message-publish.js +0 -27
  116. package/dist-server/service/chat-message/chat-message-publish.js.map +0 -1
  117. package/dist-server/service/chat-message/chat-message-subscription.d.ts +0 -8
  118. package/dist-server/service/chat-message/chat-message-subscription.js +0 -53
  119. package/dist-server/service/chat-message/chat-message-subscription.js.map +0 -1
  120. package/dist-server/service/chat-message/chat-message.d.ts +0 -68
  121. package/dist-server/service/chat-message/chat-message.js +0 -172
  122. package/dist-server/service/chat-message/chat-message.js.map +0 -1
  123. package/dist-server/service/chat-message/fold-history.d.ts +0 -43
  124. package/dist-server/service/chat-message/fold-history.js +0 -33
  125. package/dist-server/service/chat-message/fold-history.js.map +0 -1
  126. package/dist-server/service/chat-message/history-summary.d.ts +0 -43
  127. package/dist-server/service/chat-message/history-summary.js +0 -77
  128. package/dist-server/service/chat-message/history-summary.js.map +0 -1
  129. package/dist-server/service/chat-message/index.d.ts +0 -5
  130. package/dist-server/service/chat-message/index.js +0 -12
  131. package/dist-server/service/chat-message/index.js.map +0 -1
  132. package/dist-server/service/chat-message/llm-history.d.ts +0 -46
  133. package/dist-server/service/chat-message/llm-history.js +0 -87
  134. package/dist-server/service/chat-message/llm-history.js.map +0 -1
  135. package/dist-server/service/chat-session/chat-session.d.ts +0 -62
  136. package/dist-server/service/chat-session/chat-session.js +0 -164
  137. package/dist-server/service/chat-session/chat-session.js.map +0 -1
  138. package/dist-server/service/chat-session/index.d.ts +0 -3
  139. package/dist-server/service/chat-session/index.js +0 -7
  140. package/dist-server/service/chat-session/index.js.map +0 -1
  141. package/dist-server/service/chat-session/session-activity-broadcast.d.ts +0 -30
  142. package/dist-server/service/chat-session/session-activity-broadcast.js +0 -34
  143. package/dist-server/service/chat-session/session-activity-broadcast.js.map +0 -1
  144. package/dist-server/service/chat-session/session-activity-publish.d.ts +0 -12
  145. package/dist-server/service/chat-session/session-activity-publish.js +0 -37
  146. package/dist-server/service/chat-session/session-activity-publish.js.map +0 -1
  147. package/dist-server/service/chat-session/session-activity-subscription.d.ts +0 -14
  148. package/dist-server/service/chat-session/session-activity-subscription.js +0 -87
  149. package/dist-server/service/chat-session/session-activity-subscription.js.map +0 -1
  150. package/dist-server/service/chat-session/session-anchor.d.ts +0 -12
  151. package/dist-server/service/chat-session/session-anchor.js +0 -20
  152. package/dist-server/service/chat-session/session-anchor.js.map +0 -1
  153. package/dist-server/service/chat-session/session-inbox.d.ts +0 -80
  154. package/dist-server/service/chat-session/session-inbox.js +0 -133
  155. package/dist-server/service/chat-session/session-inbox.js.map +0 -1
  156. package/dist-server/service/chat-session-participant/chat-session-participant.d.ts +0 -49
  157. package/dist-server/service/chat-session-participant/chat-session-participant.js +0 -141
  158. package/dist-server/service/chat-session-participant/chat-session-participant.js.map +0 -1
  159. package/dist-server/service/chat-session-participant/index.d.ts +0 -4
  160. package/dist-server/service/chat-session-participant/index.js +0 -10
  161. package/dist-server/service/chat-session-participant/index.js.map +0 -1
  162. package/dist-server/service/chat-session-participant/invite-notification.d.ts +0 -27
  163. package/dist-server/service/chat-session-participant/invite-notification.js +0 -30
  164. package/dist-server/service/chat-session-participant/invite-notification.js.map +0 -1
  165. package/dist-server/service/chat-session-participant/presence.d.ts +0 -4
  166. package/dist-server/service/chat-session-participant/presence.js +0 -22
  167. package/dist-server/service/chat-session-participant/presence.js.map +0 -1
  168. package/dist-server/service/chat-session-resolver.d.ts +0 -102
  169. package/dist-server/service/chat-session-resolver.js +0 -856
  170. package/dist-server/service/chat-session-resolver.js.map +0 -1
  171. package/dist-server/service/subscribe-auth.d.ts +0 -14
  172. package/dist-server/service/subscribe-auth.js +0 -33
  173. package/dist-server/service/subscribe-auth.js.map +0 -1
  174. package/server/service/chat-message/chat-message-broadcast.integration.test.ts +0 -73
  175. package/server/service/chat-message/chat-message-broadcast.test.ts +0 -40
  176. package/server/service/chat-message/chat-message-broadcast.ts +0 -27
  177. package/server/service/chat-message/chat-message-publish.ts +0 -22
  178. package/server/service/chat-message/chat-message-subscription.ts +0 -41
  179. package/server/service/chat-message/chat-message.ts +0 -195
  180. package/server/service/chat-message/fold-history.test.ts +0 -98
  181. package/server/service/chat-message/fold-history.ts +0 -77
  182. package/server/service/chat-message/history-summary.test.ts +0 -127
  183. package/server/service/chat-message/history-summary.ts +0 -100
  184. package/server/service/chat-message/index.ts +0 -12
  185. package/server/service/chat-message/llm-history.test.ts +0 -194
  186. package/server/service/chat-message/llm-history.ts +0 -163
  187. package/server/service/chat-session/chat-session.ts +0 -182
  188. package/server/service/chat-session/index.ts +0 -5
  189. package/server/service/chat-session/session-activity-broadcast.ts +0 -57
  190. package/server/service/chat-session/session-activity-publish.ts +0 -44
  191. package/server/service/chat-session/session-activity-subscription.ts +0 -67
  192. package/server/service/chat-session/session-anchor.ts +0 -35
  193. package/server/service/chat-session/session-inbox.test.ts +0 -185
  194. package/server/service/chat-session/session-inbox.ts +0 -161
  195. package/server/service/chat-session-participant/chat-session-participant.ts +0 -135
  196. package/server/service/chat-session-participant/index.ts +0 -6
  197. package/server/service/chat-session-participant/invite-notification.test.ts +0 -30
  198. package/server/service/chat-session-participant/invite-notification.ts +0 -48
  199. package/server/service/chat-session-participant/presence.test.ts +0 -39
  200. package/server/service/chat-session-participant/presence.ts +0 -21
  201. package/server/service/chat-session-resolver.ts +0 -779
  202. package/server/service/session-anchor.test.ts +0 -65
  203. package/server/service/subscribe-auth.test.ts +0 -57
  204. package/server/service/subscribe-auth.ts +0 -34
@@ -1,65 +0,0 @@
1
- /*
2
- * 세션 앵커 검증 — 대화가 무엇에 매달리는가.
3
- *
4
- * 대화는 보드에만 매달리지 않는다. 저작 대화는 보드에, 운영 대화는 공간(사이트와 그 공간에서
5
- * 도는 트윈들)에 매달린다. 앵커가 대화의 성격과 **이력 경계**를 정한다.
6
- *
7
- * 이 테스트가 지키는 것:
8
- * ① **하위호환** — 앵커 컬럼이 빈 옛 행(boardId 만 있는 행)도 board 앵커 조회에 잡혀야 한다.
9
- * 백필 마이그레이션 없이 컬럼 추가만으로 끝내는 것이 이 설계의 전제다.
10
- * ② **dual-write** — board 앵커 세션은 anchorId 와 boardId 를 함께 써야 한다. 그래야 기존
11
- * 조회·인덱스·소비자(operato-board 등)가 그대로 동작한다.
12
- * ③ 공간·인스턴스 앵커는 boardId 를 오염시키지 않는다(보드 조회에 섞이면 이력 경계가 무너진다).
13
- */
14
- import { anchorColumns, anchorWhere } from './chat-session/session-anchor'
15
-
16
- describe('앵커 저장 값 (anchorColumns)', () => {
17
- it('board 앵커는 anchorId 와 boardId 에 같은 값을 쓴다 — 기존 조회 하위호환', () => {
18
- expect(anchorColumns('board', 'B1')).toEqual({ anchorType: 'board', anchorId: 'B1', boardId: 'B1' })
19
- })
20
-
21
- it('space 앵커는 boardId 를 쓰지 않는다 — 보드 조회에 섞이면 이력 경계가 무너진다', () => {
22
- expect(anchorColumns('space', 'busan')).toEqual({ anchorType: 'space', anchorId: 'busan', boardId: undefined })
23
- })
24
-
25
- it('instance 앵커도 boardId 를 쓰지 않는다', () => {
26
- expect(anchorColumns('instance', 'busan-wms')).toEqual({
27
- anchorType: 'instance',
28
- anchorId: 'busan-wms',
29
- boardId: undefined
30
- })
31
- })
32
-
33
- it('앵커 종류 미지정은 none — 임의로 board 로 승격하지 않는다(잘못된 소속 방지)', () => {
34
- expect(anchorColumns(undefined, 'X')).toEqual({ anchorType: 'none', anchorId: 'X', boardId: undefined })
35
- })
36
-
37
- it('빈 id 는 undefined 로 정규화된다(빈 문자열이 앵커로 저장되지 않게)', () => {
38
- expect(anchorColumns('space', '')).toEqual({ anchorType: 'space', anchorId: undefined, boardId: undefined })
39
- })
40
- })
41
-
42
- describe('앵커 조회 조건 (anchorWhere)', () => {
43
- it('board 앵커는 boardId 로 찾는다 — 앵커 컬럼이 빈 옛 행도 잡힌다', () => {
44
- /* 신규 행은 dual-write 로 boardId 도 채워지므로 같은 조건에 함께 걸린다. */
45
- expect(anchorWhere('dom-1', 'board', 'B1')).toEqual({ boardId: 'B1', domain: { id: 'dom-1' } })
46
- })
47
-
48
- it('space 앵커는 앵커 컬럼으로 찾는다', () => {
49
- expect(anchorWhere('dom-1', 'space', 'busan')).toEqual({
50
- anchorType: 'space',
51
- anchorId: 'busan',
52
- domain: { id: 'dom-1' }
53
- })
54
- })
55
-
56
- it('모든 조회에 domain 조건이 포함된다 — 빠지면 남의 테넌트 대화가 보인다', () => {
57
- for (const type of ['board', 'space', 'instance', 'none']) {
58
- expect(anchorWhere('dom-9', type, 'X').domain).toEqual({ id: 'dom-9' })
59
- }
60
- })
61
-
62
- it('공간 앵커 조회 조건에는 boardId 가 없다 — 보드 세션을 끌어오지 않는다', () => {
63
- expect(anchorWhere('dom-1', 'space', 'busan').boardId).toBeUndefined()
64
- })
65
- })
@@ -1,57 +0,0 @@
1
- /**
2
- * 구독 도메인 인증 게이트 — 단위 테스트 (보안 핵심: 도메인 격리).
3
- * board-patch / chat-message 양쪽 spine 이 공유하는 게이트.
4
- *
5
- * 회귀 방지: process.superUserGranted 는 async 다. 동기 `!process.superUserGranted(...)` 로
6
- * 평가하면 `!Promise` = 항상 false → membership throw 가 죽는다(fail-open). 게이트는 반드시
7
- * await 로 평가해야 한다. 아래 superUser 분기 테스트가 그 회귀를 박는다.
8
- */
9
- import { assertDomainSubscribeAllowed } from './subscribe-auth'
10
-
11
- const never = async () => false // superUser 아님 (async — 실제 process.superUserGranted 와 동일)
12
- const always = async () => true // superUser (async)
13
-
14
- const domain = { id: 'd1', subdomain: 'acme' }
15
- const userInDomain = { email: 'a@x.io', domains: [{ subdomain: 'acme' }, { subdomain: 'other' }] }
16
- const userOutDomain = { email: 'b@x.io', domains: [{ subdomain: 'other' }] }
17
-
18
- describe('assertDomainSubscribeAllowed (도메인 격리 게이트)', () => {
19
- it('domain 없으면 → reject (domain required)', async () => {
20
- await expect(assertDomainSubscribeAllowed(undefined, userInDomain, never)).rejects.toThrow('domain required')
21
- await expect(assertDomainSubscribeAllowed(null, userInDomain, never)).rejects.toThrow('domain required')
22
- })
23
-
24
- it('user 가 해당 subdomain 소속 → 통과 (superUser 검사 불필요)', async () => {
25
- await expect(assertDomainSubscribeAllowed(domain, userInDomain, never)).resolves.toBeUndefined()
26
- })
27
-
28
- it('user 가 미소속 + superUser 아님 → reject (격리 — 핵심)', async () => {
29
- await expect(assertDomainSubscribeAllowed(domain, userOutDomain, never)).rejects.toThrow(
30
- 'domain(acme) is not working for user(b@x.io).'
31
- )
32
- })
33
-
34
- it('user 가 미소속이어도 superUser(async resolve true) 면 → 통과 (await 회귀 방지)', async () => {
35
- await expect(assertDomainSubscribeAllowed(domain, userOutDomain, always)).resolves.toBeUndefined()
36
- })
37
-
38
- it('user.domains 없음 + superUser 아님 → reject', async () => {
39
- await expect(assertDomainSubscribeAllowed(domain, { email: 'c@x.io' }, never)).rejects.toThrow(
40
- 'domain(acme) is not working for user(c@x.io).'
41
- )
42
- })
43
-
44
- it('user.domains 없음 + superUser → 통과', async () => {
45
- await expect(assertDomainSubscribeAllowed(domain, { email: 'c@x.io' }, always)).resolves.toBeUndefined()
46
- })
47
-
48
- it('isSuperUser 는 domain+user 를 받아 호출되고 await 된다', async () => {
49
- const calls: any[] = []
50
- const spy = async (d: any, u: any) => {
51
- calls.push([d, u])
52
- return true
53
- }
54
- await assertDomainSubscribeAllowed(domain, userOutDomain, spy)
55
- expect(calls).toEqual([[domain, userOutDomain]])
56
- })
57
- })
@@ -1,34 +0,0 @@
1
- /*
2
- * 구독 도메인 인증 게이트 — 순수 로직 (데코레이터·pubsub 없음 → 테스트 가능).
3
- *
4
- * 실시간 구독(@Subscription)은 같은 도메인 구성원만 허용해야 한다(도메인 격리 = 보안 핵심).
5
- * 이 게이트는 board-patch / chat-message 양쪽 spine 의 subscribe 클로저가 공유한다
6
- * (reuse — fork 금지). superUserGranted 는 process 전역 의존이라 주입받아 순수성 유지.
7
- */
8
-
9
- /**
10
- * 구독 허용 여부 단언. 불가 시 throw (graphql-ws 가 구독 거부).
11
- * - domain 없음 → 거부.
12
- * - user 가 해당 subdomain 의 도메인 소속이 아니고 superUser 도 아니면 → 거부.
13
- *
14
- * 주의(버그 수정): process.superUserGranted 는 async(Promise<boolean>) 다. 기존 양쪽 spine 은
15
- * `!process.superUserGranted(...)` 로 동기 평가해 `!Promise` = 항상 false → membership throw 가
16
- * 발동하지 않는 fail-open 상태였다. 여기서는 await 로 제대로 평가한다 → subscribe 는 async.
17
- *
18
- * @param domain context.state.domain
19
- * @param user context.state.user (domains[] / email 사용)
20
- * @param isSuperUser (domain, user) → boolean | Promise<boolean> (process.superUserGranted 주입)
21
- */
22
- export async function assertDomainSubscribeAllowed(
23
- domain: any,
24
- user: any,
25
- isSuperUser: (domain: any, user: any) => boolean | Promise<boolean>
26
- ): Promise<void> {
27
- if (!domain) {
28
- throw new Error('domain required')
29
- }
30
- const subdomain = domain?.subdomain
31
- if (!user?.domains?.find((d: any) => d.subdomain === subdomain) && !(await isSuperUser(domain, user))) {
32
- throw new Error(`domain(${subdomain}) is not working for user(${user?.email}).`)
33
- }
34
- }