@things-factory/operato-board 10.0.0-beta.61 → 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.
Files changed (2) hide show
  1. package/package.json +7 -5
  2. package/schema.graphql +284 -23
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/operato-board",
3
- "version": "10.0.0-beta.61",
3
+ "version": "10.0.0-beta.64",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -98,8 +98,8 @@
98
98
  "@things-factory/auth-google": "^10.0.0-beta.57",
99
99
  "@things-factory/auth-ui": "^10.0.0-beta.57",
100
100
  "@things-factory/board-service": "^10.0.0-beta.61",
101
- "@things-factory/board-ui": "^10.0.0-beta.61",
102
- "@things-factory/codelingua": "^10.0.0-beta.57",
101
+ "@things-factory/board-ui": "^10.0.0-beta.64",
102
+ "@things-factory/codelingua": "^10.0.0-beta.64",
103
103
  "@things-factory/context-ui": "^10.0.0-beta.53",
104
104
  "@things-factory/evaluation": "^10.0.0-beta.53",
105
105
  "@things-factory/export-ui": "^10.0.0-beta.53",
@@ -110,11 +110,13 @@
110
110
  "@things-factory/i18n-base": "^10.0.0-beta.57",
111
111
  "@things-factory/import-ui": "^10.0.0-beta.57",
112
112
  "@things-factory/integration-base": "^10.0.0-beta.57",
113
+ "@things-factory/integration-data-go-kr": "^10.0.0-beta.63",
113
114
  "@things-factory/integration-email": "^10.0.0-beta.57",
114
115
  "@things-factory/integration-influxdb": "^10.0.0-beta.57",
116
+ "@things-factory/integration-juso": "^10.0.0-beta.63",
115
117
  "@things-factory/integration-msgraph": "^10.0.0-beta.57",
116
118
  "@things-factory/integration-notification": "^10.0.0-beta.61",
117
- "@things-factory/integration-openai": "^10.0.0-beta.57",
119
+ "@things-factory/integration-openai": "^10.0.0-beta.64",
118
120
  "@things-factory/integration-ui": "^10.0.0-beta.57",
119
121
  "@things-factory/integration-weather": "^10.0.0-beta.57",
120
122
  "@things-factory/more-ui": "^10.0.0-beta.53",
@@ -136,5 +138,5 @@
136
138
  "resolutions": {
137
139
  "passport": "^0.7.0"
138
140
  },
139
- "gitHead": "af0f3368e167919fb061cce4f3069849f67bde94"
141
+ "gitHead": "8a2729cb8c838ed8fc3c7921fa67f7279c2d13b1"
140
142
  }
package/schema.graphql CHANGED
@@ -3,15 +3,6 @@
3
3
  # !!! DO NOT MODIFY THIS FILE BY YOURSELF !!!
4
4
  # -----------------------------------------------
5
5
 
6
- input APIDocCompletionInput {
7
- code: String!
8
- language: String
9
- }
10
-
11
- type APIDocCompletionOutput {
12
- message: String
13
- }
14
-
15
6
  """Represents a pair of access and refresh tokens."""
16
7
  type AccessToken {
17
8
  """The access token for API authentication."""
@@ -356,6 +347,7 @@ type Attachment {
356
347
  refType: String
357
348
  size: String!
358
349
  tags: Object
350
+ thumbnail: String
359
351
  updatedAt: DateTimeISO!
360
352
  updater: User
361
353
  }
@@ -688,6 +680,77 @@ type Board {
688
680
  version: Float
689
681
  }
690
682
 
683
+ input BoardAIChatInput {
684
+ categories: [String!]
685
+
686
+ """
687
+ Component schemas — array of { type, description?, group?, properties? } so the LLM knows valid props per type.
688
+ """
689
+ componentSchemas: JSON
690
+
691
+ """Current BoardModel JSON."""
692
+ currentBoard: JSON
693
+ knownTypes: [String!]
694
+ maxTokens: Float
695
+
696
+ """
697
+ Conversation history (latest user message at the end). For persisted sessions, only the last user message is appended; older are loaded from DB.
698
+ """
699
+ messages: [BoardAILLMMessageInput!]!
700
+ model: String
701
+ scopes: [String!]
702
+
703
+ """
704
+ Refids of components currently selected in the modeller (universal numeric handle, things-scene auto-assigned). For "selected" / "선택한" intent. Note: distinct from `id` which is a data-binding name.
705
+ """
706
+ selectedRefids: [Int!]
707
+
708
+ """
709
+ ChatSession id. Omit for ad-hoc (no persistence). When given, messages/patches are persisted.
710
+ """
711
+ sessionId: String
712
+ temperature: Float
713
+ }
714
+
715
+ type BoardAIChatOutput {
716
+ """Persisted ChatMessage id of the AI reply."""
717
+ assistantMessageId: String
718
+
719
+ """AI client identifier (provider:model)."""
720
+ clientId: String!
721
+
722
+ """Clarifying question when input is ambiguous."""
723
+ followUp: String
724
+
725
+ """BoardEditPatch."""
726
+ patch: JSON
727
+
728
+ """Persisted PatchEntry id (when patch was generated)."""
729
+ patchId: String
730
+
731
+ """Conversational reply."""
732
+ reply: String!
733
+
734
+ """Echo of session id (when persisted)."""
735
+ sessionId: String
736
+
737
+ """
738
+ Tool usages collected during agentic loop — sequence of {name, arguments, result, kind}. UI fold-able box for transparency / debug.
739
+ """
740
+ toolUsages: JSON
741
+
742
+ """Persisted ChatMessage id of the user input."""
743
+ userMessageId: String
744
+ }
745
+
746
+ input BoardAILLMMessageInput {
747
+ """Message content"""
748
+ content: String!
749
+
750
+ """Role: 'user' or 'assistant'"""
751
+ role: String!
752
+ }
753
+
691
754
  """Represents a board that a user has marked as a favorite."""
692
755
  type BoardFavorite {
693
756
  """The timestamp when the board was created."""
@@ -921,12 +984,43 @@ input BoardTemplatePatch {
921
984
  visibility: String
922
985
  }
923
986
 
924
- input ChatCompletionInput {
987
+ """A single chat message in a ChatSession."""
988
+ type ChatMessage {
989
+ """Message content"""
925
990
  content: String!
991
+ createdAt: DateTimeISO
992
+ id: ID
993
+
994
+ """ImportSession.id this message triggered (if any)."""
995
+ relatedImportSessionId: String
996
+
997
+ """PatchEntry.id this message triggered (if any)."""
998
+ relatedPatchId: String
999
+
1000
+ """'user' | 'assistant' | 'system'"""
1001
+ role: String!
1002
+
1003
+ """
1004
+ Tool usage trace — array of {name, arguments, result, kind}. Only on assistant messages.
1005
+ """
1006
+ toolUsagesJson: JSON
926
1007
  }
927
1008
 
928
- type ChatCompletionOutput {
929
- message: String
1009
+ """AI 협력 세션 — Board 와 1:1 결합. 메시지/패치 이력을 영속하여 컨텍스트 복원."""
1010
+ type ChatSession {
1011
+ aiClientId: String
1012
+
1013
+ """Connected Board id (1:1)"""
1014
+ boardId: String
1015
+ createdAt: DateTimeISO
1016
+ creator: User
1017
+ domain: Domain
1018
+ id: ID
1019
+
1020
+ """Compressed summary of older messages (for token saving)."""
1021
+ lastSummary: String
1022
+ updatedAt: DateTimeISO
1023
+ updater: User
930
1024
  }
931
1025
 
932
1026
  input CodeDecipherInput {
@@ -1434,6 +1528,27 @@ type DomainList {
1434
1528
  total: Int
1435
1529
  }
1436
1530
 
1531
+ """An ownership record binding a User to a Domain (multi-owner support)."""
1532
+ type DomainOwner {
1533
+ """Domain that the user owns."""
1534
+ domain: Domain!
1535
+
1536
+ """When the ownership was granted."""
1537
+ grantedAt: DateTimeISO!
1538
+
1539
+ """User who granted this ownership (audit)."""
1540
+ grantedBy: User
1541
+
1542
+ """Unique identifier."""
1543
+ id: ID!
1544
+
1545
+ """Optional reason/memo for granting ownership."""
1546
+ reason: String
1547
+
1548
+ """User who owns the domain."""
1549
+ user: User!
1550
+ }
1551
+
1437
1552
  """Input type for updating an existing domain entity."""
1438
1553
  input DomainPatch {
1439
1554
  """Additional attributes for the domain in key-value pairs."""
@@ -1940,14 +2055,63 @@ input GroupPatch {
1940
2055
  name: String
1941
2056
  }
1942
2057
 
1943
- input ImageCompletionInput {
1944
- count: Float!
1945
- description: String!
1946
- size: String!
2058
+ input ImportBoardAsyncInput {
2059
+ """Apply Stage 4 (data binding)."""
2060
+ applyBinding: Boolean
2061
+
2062
+ """
2063
+ Attachment id of the source drawing file (uploaded via attachment-base).
2064
+ """
2065
+ attachmentId: String!
2066
+
2067
+ """ChatSession id when triggered from board-ai chat."""
2068
+ chatSessionId: String
2069
+
2070
+ """Flip Y axis (CAD Y-up → scene Y-down)."""
2071
+ flipY: Boolean
2072
+
2073
+ """Normalize coordinates so minX,minY=0"""
2074
+ normalizeOrigin: Boolean
2075
+
2076
+ """Adapter parse options (excludeLayers, maxEntities, ...)."""
2077
+ parseOptions: JSON
2078
+
2079
+ """Scale factor (e.g. 1 for mm:1unit)."""
2080
+ scale: Float
2081
+
2082
+ """Registry scopes to use (board-import)."""
2083
+ scopes: [String!]
1947
2084
  }
1948
2085
 
1949
- type ImageCompletionOutput {
1950
- images: String
2086
+ """도면 보드 변환 작업의 영속 단위 (비동기 진행상태 추적)."""
2087
+ type ImportSession {
2088
+ """Attachment id (the source drawing file)"""
2089
+ attachmentId: String!
2090
+
2091
+ """ChatSession id when triggered from chat (board-ai)."""
2092
+ chatSessionId: String
2093
+ completedAt: DateTimeISO
2094
+ createdAt: DateTimeISO
2095
+ creator: User
2096
+ domain: Domain
2097
+ id: ID
2098
+ message: String
2099
+
2100
+ """Options used (parsed JSON)."""
2101
+ options: JSON
2102
+
2103
+ """Progress percentage 0..100"""
2104
+ progress: Float!
2105
+
2106
+ """Result (parsed JSON): { boardModel, stats, warnings }."""
2107
+ result: JSON
2108
+
2109
+ """queued | parsing | mapping | assembling | binding | completed | failed"""
2110
+ status: String!
2111
+
2112
+ """Total entities counted (when known)."""
2113
+ totalEntities: Int
2114
+ updatedAt: DateTimeISO
1951
2115
  }
1952
2116
 
1953
2117
  """
@@ -2002,6 +2166,11 @@ type InvitationList {
2002
2166
  total: Int
2003
2167
  }
2004
2168
 
2169
+ """
2170
+ The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
2171
+ """
2172
+ scalar JSON @specifiedBy(url: "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf")
2173
+
2005
2174
  """
2006
2175
  A field whose value is a JSON Web Token (JWT): https://jwt.io/introduction.
2007
2176
  """
@@ -2417,10 +2586,21 @@ type Mutation {
2417
2586
  username: String!
2418
2587
  ): Boolean!
2419
2588
 
2589
+ """Add a user as owner of the current domain."""
2590
+ addDomainOwner(reason: String, username: String!): DomainOwner!
2591
+
2420
2592
  """
2421
2593
  Attaches an existing contact to an employee. The contact is identified by its ID and the employee is identified by their ID.
2422
2594
  """
2423
2595
  attachContact(contactId: String!, id: String!): Employee!
2596
+
2597
+ """
2598
+ 썸네일이 없는 기존 첨부파일들에 대해 서버에서 썸네일을 일괄 생성한다. 한 호출당 limit 개까지만 처리하며, remaining > 0 이면 반복 호출 필요.
2599
+ """
2600
+ backfillAttachmentThumbnails(limit: Int = 20): ThumbnailBackfillResult!
2601
+
2602
+ """AI 주도 보드 모델링 — 자연어 채팅으로 보드 생성·구조편집·스타일링. sessionId 로 영속 컨텍스트."""
2603
+ boardAIChat(input: BoardAIChatInput!): BoardAIChatOutput!
2424
2604
  cancelInvitation(email: EmailAddress!, reference: String!, type: String!): Boolean!
2425
2605
 
2426
2606
  """To clear translations cache"""
@@ -2931,6 +3111,9 @@ type Mutation {
2931
3111
  attributes: [AttributeSetPatch!]!
2932
3112
  ): Boolean!
2933
3113
 
3114
+ """도면 → 보드 변환을 비동기로 시작. 즉시 ImportSession 반환, 백그라운드에서 처리."""
3115
+ importBoardAsync(input: ImportBoardAsyncInput!): ImportSession!
3116
+
2934
3117
  """Imports multiple boards from JSON files."""
2935
3118
  importBoards(files: [Upload!]!, groupId: String!, overwrite: Boolean!): [Board!]!
2936
3119
 
@@ -3027,6 +3210,11 @@ type Mutation {
3027
3210
  leavePlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
3028
3211
  multipleUpload(files: [Upload!]!): [Attachment!]!
3029
3212
 
3213
+ """
3214
+ Record a patch from user direct edit. Adds a system message so AI sees the change next turn.
3215
+ """
3216
+ recordDirectPatch(ops: JSON!, sessionId: String!, summary: String): PatchEntry!
3217
+
3030
3218
  """To refresh oauth2 access token"""
3031
3219
  refreshOauth2AccessToken(id: String!): Oauth2Client!
3032
3220
 
@@ -3058,6 +3246,9 @@ type Mutation {
3058
3246
 
3059
3247
  """Releases a board, making it public and creating a version history."""
3060
3248
  releaseBoard(id: String!): Board!
3249
+
3250
+ """Remove a user from the owners of the current domain."""
3251
+ removeDomainOwner(reason: String, username: String!): Boolean!
3061
3252
  renewApplicationAccessToken(id: String!, scope: String!): AccessToken!
3062
3253
 
3063
3254
  """Reorders a board between two adjacent boards by ID."""
@@ -3077,6 +3268,9 @@ type Mutation {
3077
3268
  """Reverts a board to a specific historical version."""
3078
3269
  revertBoardVersion(id: String!, version: Float!): Board!
3079
3270
 
3271
+ """Mark a patch as reverted (does not undo, only flags)."""
3272
+ revertPatch(patchId: String!): Boolean!
3273
+
3080
3274
  """
3081
3275
  Runs a new scenario instance once and returns the result after it finishes.
3082
3276
  """
@@ -3084,6 +3278,9 @@ type Mutation {
3084
3278
  sendInvitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
3085
3279
  singleUpload(file: Upload!): Attachment!
3086
3280
 
3281
+ """Start (or get existing) AI chat session for a board. Idempotent."""
3282
+ startBoardAISession(boardId: String!): ChatSession!
3283
+
3087
3284
  """Starts a new scenario instance, which will run in the background."""
3088
3285
  startScenario(instanceName: String, scenarioName: String!, variables: Object): ScenarioInstanceStartResult!
3089
3286
 
@@ -4672,6 +4869,26 @@ type PasswordRule {
4672
4869
  useTightPattern: Boolean
4673
4870
  }
4674
4871
 
4872
+ """One board edit operation history (cascade-deleted with ChatSession)."""
4873
+ type PatchEntry {
4874
+ """AI confidence 0..1 (null for user-direct)."""
4875
+ confidence: Float
4876
+ createdAt: DateTimeISO
4877
+ id: ID
4878
+
4879
+ """BoardEditOp[] (parsed JSON array)."""
4880
+ opsJson: JSON!
4881
+
4882
+ """Whether this patch was reverted."""
4883
+ reverted: Boolean!
4884
+
4885
+ """'ai' | 'user-direct' | 'import'"""
4886
+ source: String!
4887
+
4888
+ """Short human summary of this patch."""
4889
+ summary: String
4890
+ }
4891
+
4675
4892
  """Logs the request and response payloads for API interactions."""
4676
4893
  type PayloadLog {
4677
4894
  """The timestamp when the log entry was created."""
@@ -4966,8 +5183,6 @@ type PropertySpec {
4966
5183
  }
4967
5184
 
4968
5185
  type Query {
4969
- APIDocCompletion(input: APIDocCompletionInput!): APIDocCompletionOutput!
4970
-
4971
5186
  """To fetch a PDFTemplate"""
4972
5187
  PDFTemplate(id: String!): PDFTemplate
4973
5188
 
@@ -5222,7 +5437,18 @@ type Query {
5222
5437
  Retrieves boards that have been updated or soft-deleted since the given timestamp.
5223
5438
  """
5224
5439
  boardsUpdatedSince(since: DateTimeISO!): [Board!]!
5225
- chatCompletion(input: ChatCompletionInput!): ChatCompletionOutput!
5440
+
5441
+ """List chat messages of a session, oldest first."""
5442
+ chatMessages(limit: Int = 100, offset: Int = 0, sessionId: String!): [ChatMessage!]!
5443
+
5444
+ """List patch entries of a session, newest first."""
5445
+ chatPatches(limit: Int = 100, sessionId: String!): [PatchEntry!]!
5446
+
5447
+ """Get AI chat session by id."""
5448
+ chatSession(id: String!): ChatSession
5449
+
5450
+ """Get AI chat session by board id."""
5451
+ chatSessionByBoard(boardId: String!): ChatSession
5226
5452
 
5227
5453
  """
5228
5454
  Checks if the system is configured to provide a default password for new users.
@@ -5346,7 +5572,10 @@ type Query {
5346
5572
  sortings: [Sorting!]
5347
5573
  ): ContactList!
5348
5574
  customers: [Domain!]!
5349
- decipherCode(input: CodeDecipherInput!): CodeDecipherOutput!
5575
+
5576
+ """
5577
+ Translate a cryptic system / framework / database error message into a concise, localized, actionable explanation for end users.
5578
+ """
5350
5579
  decipherErrorCode(input: CodeDecipherInput!): CodeDecipherOutput!
5351
5580
 
5352
5581
  """To fetch a Department"""
@@ -5405,6 +5634,9 @@ type Query {
5405
5634
  sortings: [Sorting!]
5406
5635
  ): DomainLinkList!
5407
5636
 
5637
+ """List owners of the current domain."""
5638
+ domainOwners: [DomainOwner!]!
5639
+
5408
5640
  """
5409
5641
  Fetches the list of available domain types from configuration. Only superusers are granted this privilege.
5410
5642
  """
@@ -5596,14 +5828,26 @@ type Query {
5596
5828
 
5597
5829
  """To query whether I have the given permission"""
5598
5830
  hasPrivilege(category: String!, privilege: String!): Boolean!
5831
+
5832
+ """
5833
+ Translate an i18n JSON (key-value) from a source locale into multiple target locales. Source/target locales are configurable; defaults preserve historical "ko → en/ja/zh/ms" behavior.
5834
+ """
5599
5835
  i18nCompletion(input: i18nCompletionInput!): i18nCompletionOutput!
5600
- imageCompletion(input: ImageCompletionInput!): ImageCompletionOutput!
5836
+
5837
+ """Get import session progress."""
5838
+ importSession(id: String!): ImportSession
5839
+
5840
+ """List recent import sessions for a chat session."""
5841
+ importSessionsByChatSession(chatSessionId: String!): [ImportSession!]!
5601
5842
 
5602
5843
  """To fetch integration Analyses"""
5603
5844
  integrationAnalysis: Object!
5604
5845
  invitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
5605
5846
  invitations(reference: String!, type: String!): InvitationList!
5606
5847
 
5848
+ """Check if a user is an owner of the current domain."""
5849
+ isDomainOwner(username: String!): Boolean!
5850
+
5607
5851
  """To fetch multiple LoginHistories"""
5608
5852
  loginHistories(
5609
5853
  """An array of filter conditions to apply to the list query."""
@@ -7226,6 +7470,21 @@ input ThemePatch {
7226
7470
  value: Object
7227
7471
  }
7228
7472
 
7473
+ """썸네일 백필 결과"""
7474
+ type ThumbnailBackfillResult {
7475
+ """이번 호출에서 처리 시도한 첨부 개수"""
7476
+ attempted: Int!
7477
+
7478
+ """실패(생성 실패/콘텐츠 없음 등) 개수"""
7479
+ failed: Int!
7480
+
7481
+ """이번 처리 후에도 남아있는 썸네일 미생성 후보 개수 (대략치). 0 이면 완료"""
7482
+ remaining: Int!
7483
+
7484
+ """썸네일 생성·저장 성공 개수"""
7485
+ succeeded: Int!
7486
+ }
7487
+
7229
7488
  """The `Upload` scalar type represents a file upload."""
7230
7489
  scalar Upload
7231
7490
 
@@ -7408,6 +7667,8 @@ type UsersAuthProviders {
7408
7667
 
7409
7668
  input i18nCompletionInput {
7410
7669
  json: String!
7670
+ sourceLocale: String
7671
+ targetLocales: [String!]
7411
7672
  }
7412
7673
 
7413
7674
  type i18nCompletionOutput {