@dssp/dcsp 1.0.0-alpha.66 → 1.0.0-alpha.74
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/config/config.development.js +2 -1
- package/config/config.production.js +2 -1
- package/dist-client/bootstrap.js +24 -20
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/entries/auth/checkin.d.ts +38 -0
- package/dist-client/entries/auth/checkin.js +546 -0
- package/dist-client/entries/auth/checkin.js.map +1 -0
- package/dist-client/pages/sv-user-management.d.ts +1 -0
- package/dist-client/pages/sv-user-management.js +5 -0
- package/dist-client/pages/sv-user-management.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +12 -2
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/schema.graphql +769 -3
- package/translations/en.json +5 -1
- package/translations/ko.json +5 -1
package/schema.graphql
CHANGED
|
@@ -838,6 +838,7 @@ type Attachment {
|
|
|
838
838
|
refType: String
|
|
839
839
|
size: String!
|
|
840
840
|
tags: Object
|
|
841
|
+
thumbnail: String
|
|
841
842
|
updatedAt: DateTimeISO!
|
|
842
843
|
updater: User
|
|
843
844
|
}
|
|
@@ -1146,6 +1147,16 @@ type Board {
|
|
|
1146
1147
|
"""A list of play groups that this board is a part of."""
|
|
1147
1148
|
playGroups: [PlayGroup!]
|
|
1148
1149
|
|
|
1150
|
+
"""
|
|
1151
|
+
Sort order for display. Lower values appear first. Supports fractional values for insertion.
|
|
1152
|
+
"""
|
|
1153
|
+
sortOrder: Float
|
|
1154
|
+
|
|
1155
|
+
"""
|
|
1156
|
+
Source ImportSession id (board-import) when this board was generated from a drawing/image import.
|
|
1157
|
+
"""
|
|
1158
|
+
sourceImportSessionId: String
|
|
1159
|
+
|
|
1149
1160
|
"""The state of the board, can be 'draft' or 'released'."""
|
|
1150
1161
|
state: String
|
|
1151
1162
|
|
|
@@ -1165,6 +1176,120 @@ type Board {
|
|
|
1165
1176
|
version: Float
|
|
1166
1177
|
}
|
|
1167
1178
|
|
|
1179
|
+
input BoardAIChatInput {
|
|
1180
|
+
"""
|
|
1181
|
+
Component categories to surface (e.g. ["3D", "form"]). Subset filter for groupings exposed in component-schemas.
|
|
1182
|
+
"""
|
|
1183
|
+
categories: [String!]
|
|
1184
|
+
|
|
1185
|
+
"""
|
|
1186
|
+
Component schemas — array of { type, description?, group?, properties? } so the LLM knows valid props per type.
|
|
1187
|
+
"""
|
|
1188
|
+
componentSchemas: JSON
|
|
1189
|
+
|
|
1190
|
+
"""Current BoardModel JSON."""
|
|
1191
|
+
currentBoard: JSON
|
|
1192
|
+
|
|
1193
|
+
"""
|
|
1194
|
+
Component types the LLM is allowed to emit (e.g. ["rect", "label"]). Constrains generation to the current solution.
|
|
1195
|
+
"""
|
|
1196
|
+
knownTypes: [String!]
|
|
1197
|
+
|
|
1198
|
+
"""
|
|
1199
|
+
Max output tokens override per LLM call. Falls back to assistant default when omitted.
|
|
1200
|
+
"""
|
|
1201
|
+
maxTokens: Float
|
|
1202
|
+
|
|
1203
|
+
"""
|
|
1204
|
+
Explicit #mention picks from popup — {token, refid}. User text stays clean (#token only); these picks let server resolve deterministically without exposing refid in the user-visible message. Tokens not in this list fall back to free name/id/type matching.
|
|
1205
|
+
"""
|
|
1206
|
+
mentions: [BoardAIMentionPickInput!]
|
|
1207
|
+
|
|
1208
|
+
"""
|
|
1209
|
+
Conversation history (latest user message at the end). For persisted sessions, only the last user message is appended; older are loaded from DB.
|
|
1210
|
+
"""
|
|
1211
|
+
messages: [BoardAILLMMessageInput!]!
|
|
1212
|
+
|
|
1213
|
+
"""
|
|
1214
|
+
AI model identifier override (e.g. "claude-opus-4-7"). Falls back to the configured default when omitted.
|
|
1215
|
+
"""
|
|
1216
|
+
model: String
|
|
1217
|
+
|
|
1218
|
+
"""
|
|
1219
|
+
Capability scopes the AI is allowed to use (e.g. 'create', 'edit', 'style'). Filters which tools are exposed to the LLM.
|
|
1220
|
+
"""
|
|
1221
|
+
scopes: [String!]
|
|
1222
|
+
|
|
1223
|
+
"""
|
|
1224
|
+
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.
|
|
1225
|
+
"""
|
|
1226
|
+
selectedRefids: [Int!]
|
|
1227
|
+
|
|
1228
|
+
"""
|
|
1229
|
+
ChatSession id. Omit for ad-hoc (no persistence). When given, messages/patches are persisted.
|
|
1230
|
+
"""
|
|
1231
|
+
sessionId: String
|
|
1232
|
+
|
|
1233
|
+
"""
|
|
1234
|
+
Sampling temperature override. Falls back to assistant default when omitted.
|
|
1235
|
+
"""
|
|
1236
|
+
temperature: Float
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
type BoardAIChatOutput {
|
|
1240
|
+
"""
|
|
1241
|
+
Ephemeral scene actions (selection/view/mode) — sequence of BoardActionOp. Applied via board-action-execute event on the host. Distinct from `patch` which carries persistent model changes.
|
|
1242
|
+
"""
|
|
1243
|
+
actions: JSON
|
|
1244
|
+
|
|
1245
|
+
"""Persisted ChatMessage id of the AI reply."""
|
|
1246
|
+
assistantMessageId: String
|
|
1247
|
+
|
|
1248
|
+
"""AI client identifier (provider:model)."""
|
|
1249
|
+
clientId: String!
|
|
1250
|
+
|
|
1251
|
+
"""Clarifying question when input is ambiguous."""
|
|
1252
|
+
followUp: String
|
|
1253
|
+
|
|
1254
|
+
"""BoardEditPatch."""
|
|
1255
|
+
patch: JSON
|
|
1256
|
+
|
|
1257
|
+
"""Persisted PatchEntry id (when patch was generated)."""
|
|
1258
|
+
patchId: String
|
|
1259
|
+
|
|
1260
|
+
"""Conversational reply."""
|
|
1261
|
+
reply: String!
|
|
1262
|
+
|
|
1263
|
+
"""Echo of session id (when persisted)."""
|
|
1264
|
+
sessionId: String
|
|
1265
|
+
|
|
1266
|
+
"""
|
|
1267
|
+
Tool usages collected during agentic loop — sequence of {name, arguments, result, kind}. UI fold-able box for transparency / debug.
|
|
1268
|
+
"""
|
|
1269
|
+
toolUsages: JSON
|
|
1270
|
+
|
|
1271
|
+
"""Persisted ChatMessage id of the user input."""
|
|
1272
|
+
userMessageId: String
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
input BoardAILLMMessageInput {
|
|
1276
|
+
"""Message content"""
|
|
1277
|
+
content: String!
|
|
1278
|
+
|
|
1279
|
+
"""Role: 'user' or 'assistant'"""
|
|
1280
|
+
role: String!
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
input BoardAIMentionPickInput {
|
|
1284
|
+
"""
|
|
1285
|
+
Refid explicitly picked from popup. Server uses this for deterministic resolution — bypasses fallback name/id/type matching for this token.
|
|
1286
|
+
"""
|
|
1287
|
+
refid: Int!
|
|
1288
|
+
|
|
1289
|
+
"""Token used by user (e.g. "경광등1" — the part after #)."""
|
|
1290
|
+
token: String!
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1168
1293
|
"""Represents a board that a user has marked as a favorite."""
|
|
1169
1294
|
type BoardFavorite {
|
|
1170
1295
|
"""The timestamp when the board was created."""
|
|
@@ -1200,6 +1325,16 @@ type BoardFavorite {
|
|
|
1200
1325
|
"""A list of play groups that this board is a part of."""
|
|
1201
1326
|
playGroups: [PlayGroup!]
|
|
1202
1327
|
|
|
1328
|
+
"""
|
|
1329
|
+
Sort order for display. Lower values appear first. Supports fractional values for insertion.
|
|
1330
|
+
"""
|
|
1331
|
+
sortOrder: Float
|
|
1332
|
+
|
|
1333
|
+
"""
|
|
1334
|
+
Source ImportSession id (board-import) when this board was generated from a drawing/image import.
|
|
1335
|
+
"""
|
|
1336
|
+
sourceImportSessionId: String
|
|
1337
|
+
|
|
1203
1338
|
"""The state of the board, can be 'draft' or 'released'."""
|
|
1204
1339
|
state: String
|
|
1205
1340
|
|
|
@@ -1297,6 +1432,16 @@ type BoardList {
|
|
|
1297
1432
|
total: Int!
|
|
1298
1433
|
}
|
|
1299
1434
|
|
|
1435
|
+
type BoardMetaSuggestion {
|
|
1436
|
+
"""
|
|
1437
|
+
Suggested detailed description — combines user prompt, AI importStrategy narrative, and category distribution stats.
|
|
1438
|
+
"""
|
|
1439
|
+
description: String!
|
|
1440
|
+
|
|
1441
|
+
"""Suggested short board name (collision-free with current domain)."""
|
|
1442
|
+
name: String!
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1300
1445
|
"""Input for updating (patching) an existing board."""
|
|
1301
1446
|
input BoardPatch {
|
|
1302
1447
|
"""The new description for the board."""
|
|
@@ -1691,6 +1836,113 @@ input BuildingPatch {
|
|
|
1691
1836
|
name: String
|
|
1692
1837
|
}
|
|
1693
1838
|
|
|
1839
|
+
"""A single chat message in a ChatSession."""
|
|
1840
|
+
type ChatMessage {
|
|
1841
|
+
"""Message content"""
|
|
1842
|
+
content: String!
|
|
1843
|
+
|
|
1844
|
+
"""Creation timestamp."""
|
|
1845
|
+
createdAt: DateTimeISO
|
|
1846
|
+
|
|
1847
|
+
"""User who triggered this message."""
|
|
1848
|
+
creator: User
|
|
1849
|
+
|
|
1850
|
+
"""Soft delete timestamp."""
|
|
1851
|
+
deletedAt: DateTimeISO
|
|
1852
|
+
id: ID
|
|
1853
|
+
|
|
1854
|
+
"""
|
|
1855
|
+
Id of the message this one is in-response-to / continues. Enables linear / branching / tree structures.
|
|
1856
|
+
"""
|
|
1857
|
+
parentMessageId: String
|
|
1858
|
+
|
|
1859
|
+
"""ImportSession.id this message triggered (if any)."""
|
|
1860
|
+
relatedImportSessionId: String
|
|
1861
|
+
|
|
1862
|
+
"""PatchEntry.id this message triggered (if any)."""
|
|
1863
|
+
relatedPatchId: String
|
|
1864
|
+
|
|
1865
|
+
"""'user' | 'assistant' | 'system'"""
|
|
1866
|
+
role: String!
|
|
1867
|
+
|
|
1868
|
+
"""
|
|
1869
|
+
Tool usage trace — array of {name, arguments, result, kind}. Only on assistant messages.
|
|
1870
|
+
"""
|
|
1871
|
+
toolUsagesJson: JSON
|
|
1872
|
+
|
|
1873
|
+
"""Last update timestamp (relevant once message editing is supported)."""
|
|
1874
|
+
updatedAt: DateTimeISO
|
|
1875
|
+
|
|
1876
|
+
"""Last user to update this message (for future edit support)."""
|
|
1877
|
+
updater: User
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
"""AI 협력 세션 — Board 와 결합. 한 보드에 여러 세션 가능 (thread / 사용자별 / 컨텍스트별 등 미래 확장)."""
|
|
1881
|
+
type ChatSession {
|
|
1882
|
+
aiClientId: String
|
|
1883
|
+
|
|
1884
|
+
"""
|
|
1885
|
+
Connected Board id. Multiple sessions per board allowed (future: threads / per-user / contexts).
|
|
1886
|
+
"""
|
|
1887
|
+
boardId: String
|
|
1888
|
+
createdAt: DateTimeISO
|
|
1889
|
+
|
|
1890
|
+
"""User who created this session."""
|
|
1891
|
+
creator: User
|
|
1892
|
+
domain: Domain
|
|
1893
|
+
id: ID
|
|
1894
|
+
|
|
1895
|
+
"""Compressed summary of older messages (for token saving)."""
|
|
1896
|
+
lastSummary: String
|
|
1897
|
+
|
|
1898
|
+
"""User-given name of this session (tab label / identification)."""
|
|
1899
|
+
name: String
|
|
1900
|
+
updatedAt: DateTimeISO
|
|
1901
|
+
|
|
1902
|
+
"""User who last updated this session."""
|
|
1903
|
+
updater: User
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
"""
|
|
1907
|
+
Participant of a ChatSession — links a User to a session with a role. Foundation for multi-user chat / per-user filtering / member display.
|
|
1908
|
+
"""
|
|
1909
|
+
type ChatSessionParticipant {
|
|
1910
|
+
"""Joined-at timestamp."""
|
|
1911
|
+
createdAt: DateTimeISO
|
|
1912
|
+
|
|
1913
|
+
"""
|
|
1914
|
+
User who created this participant record (typically session owner who invited).
|
|
1915
|
+
"""
|
|
1916
|
+
creator: User
|
|
1917
|
+
|
|
1918
|
+
"""Soft delete (= left session) timestamp."""
|
|
1919
|
+
deletedAt: DateTimeISO
|
|
1920
|
+
|
|
1921
|
+
"""Domain to which this participant belongs."""
|
|
1922
|
+
domain: Domain
|
|
1923
|
+
|
|
1924
|
+
"""Unique participant id."""
|
|
1925
|
+
id: ID!
|
|
1926
|
+
|
|
1927
|
+
"""Last seen / activity timestamp (presence indicator)."""
|
|
1928
|
+
lastSeenAt: DateTimeISO
|
|
1929
|
+
|
|
1930
|
+
"""Role of this participant: owner | member | viewer."""
|
|
1931
|
+
role: String!
|
|
1932
|
+
|
|
1933
|
+
"""The ChatSession this participation belongs to."""
|
|
1934
|
+
session: ChatSession
|
|
1935
|
+
|
|
1936
|
+
"""Last update timestamp (role change / lastSeenAt bump)."""
|
|
1937
|
+
updatedAt: DateTimeISO
|
|
1938
|
+
|
|
1939
|
+
"""Last user to update this participant record (e.g., role change)."""
|
|
1940
|
+
updater: User
|
|
1941
|
+
|
|
1942
|
+
"""The user participating in the session."""
|
|
1943
|
+
user: User
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1694
1946
|
type Checklist {
|
|
1695
1947
|
buildingInspection: BuildingInspection!
|
|
1696
1948
|
checklistAttachments(description: String): [Attachment!]!
|
|
@@ -2193,6 +2445,68 @@ type ConnectorType {
|
|
|
2193
2445
|
taskPrefixes: [String!]
|
|
2194
2446
|
}
|
|
2195
2447
|
|
|
2448
|
+
type ConstructionChecklistTemplate {
|
|
2449
|
+
constructionChecklistTemplateItems: [ConstructionChecklistTemplateItem!]
|
|
2450
|
+
constructionDetailTypeId: String!
|
|
2451
|
+
constructionTypeId: String!
|
|
2452
|
+
createdAt: DateTimeISO
|
|
2453
|
+
creator: User
|
|
2454
|
+
deletedAt: DateTimeISO
|
|
2455
|
+
domain: Domain
|
|
2456
|
+
id: ID!
|
|
2457
|
+
updatedAt: DateTimeISO
|
|
2458
|
+
updater: User
|
|
2459
|
+
}
|
|
2460
|
+
|
|
2461
|
+
type ConstructionChecklistTemplateItem {
|
|
2462
|
+
constructionChecklistTemplate: ConstructionChecklistTemplate
|
|
2463
|
+
createdAt: DateTimeISO
|
|
2464
|
+
creator: User
|
|
2465
|
+
criteriaRequestStatus: CriteriaRequestStatus
|
|
2466
|
+
id: ID!
|
|
2467
|
+
inspctionCriteria: String
|
|
2468
|
+
mainType: String
|
|
2469
|
+
name: String!
|
|
2470
|
+
recommendation1: String
|
|
2471
|
+
recommendation2: String
|
|
2472
|
+
recommendation3: String
|
|
2473
|
+
recommendation4: String
|
|
2474
|
+
recommendation5: String
|
|
2475
|
+
sequence: Int
|
|
2476
|
+
updatedAt: DateTimeISO
|
|
2477
|
+
updater: User
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
type ConstructionChecklistTemplateItemList {
|
|
2481
|
+
items: [ConstructionChecklistTemplateItem!]!
|
|
2482
|
+
total: Int!
|
|
2483
|
+
}
|
|
2484
|
+
|
|
2485
|
+
input ConstructionChecklistTemplateItemPatch {
|
|
2486
|
+
id: ID
|
|
2487
|
+
inspctionCriteria: String
|
|
2488
|
+
mainType: String
|
|
2489
|
+
name: String
|
|
2490
|
+
recommendation1: String
|
|
2491
|
+
recommendation2: String
|
|
2492
|
+
recommendation3: String
|
|
2493
|
+
recommendation4: String
|
|
2494
|
+
recommendation5: String
|
|
2495
|
+
sequence: Int
|
|
2496
|
+
}
|
|
2497
|
+
|
|
2498
|
+
type ConstructionChecklistTemplateList {
|
|
2499
|
+
items: [ConstructionChecklistTemplate!]!
|
|
2500
|
+
total: Int!
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
input ConstructionChecklistTemplatePatch {
|
|
2504
|
+
constructionDetailTypeId: String
|
|
2505
|
+
constructionTypeId: String
|
|
2506
|
+
cuFlag: String
|
|
2507
|
+
id: ID
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2196
2510
|
"""세부 공종 타입"""
|
|
2197
2511
|
type ConstructionDetailType {
|
|
2198
2512
|
constructionType: ConstructionType
|
|
@@ -2227,6 +2541,7 @@ type ConstructionType {
|
|
|
2227
2541
|
domain: Domain
|
|
2228
2542
|
id: ID!
|
|
2229
2543
|
name: String
|
|
2544
|
+
projectType: String
|
|
2230
2545
|
updatedAt: DateTimeISO
|
|
2231
2546
|
updater: User
|
|
2232
2547
|
}
|
|
@@ -2241,6 +2556,7 @@ input ConstructionTypePatch {
|
|
|
2241
2556
|
description: String
|
|
2242
2557
|
id: ID
|
|
2243
2558
|
name: String
|
|
2559
|
+
projectType: String
|
|
2244
2560
|
}
|
|
2245
2561
|
|
|
2246
2562
|
"""Entity for Contact"""
|
|
@@ -3525,6 +3841,27 @@ type DomainList {
|
|
|
3525
3841
|
total: Int
|
|
3526
3842
|
}
|
|
3527
3843
|
|
|
3844
|
+
"""An ownership record binding a User to a Domain (multi-owner support)."""
|
|
3845
|
+
type DomainOwner {
|
|
3846
|
+
"""Domain that the user owns."""
|
|
3847
|
+
domain: Domain!
|
|
3848
|
+
|
|
3849
|
+
"""When the ownership was granted."""
|
|
3850
|
+
grantedAt: DateTimeISO!
|
|
3851
|
+
|
|
3852
|
+
"""User who granted this ownership (audit)."""
|
|
3853
|
+
grantedBy: User
|
|
3854
|
+
|
|
3855
|
+
"""Unique identifier."""
|
|
3856
|
+
id: ID!
|
|
3857
|
+
|
|
3858
|
+
"""Optional reason/memo for granting ownership."""
|
|
3859
|
+
reason: String
|
|
3860
|
+
|
|
3861
|
+
"""User who owns the domain."""
|
|
3862
|
+
user: User!
|
|
3863
|
+
}
|
|
3864
|
+
|
|
3528
3865
|
"""Input type for updating an existing domain entity."""
|
|
3529
3866
|
input DomainPatch {
|
|
3530
3867
|
"""Additional attributes for the domain in key-value pairs."""
|
|
@@ -4084,6 +4421,70 @@ input GroupPatch {
|
|
|
4084
4421
|
name: String
|
|
4085
4422
|
}
|
|
4086
4423
|
|
|
4424
|
+
input ImportBoardAsyncInput {
|
|
4425
|
+
"""Apply Stage 4 (data binding)."""
|
|
4426
|
+
applyBinding: Boolean
|
|
4427
|
+
|
|
4428
|
+
"""
|
|
4429
|
+
Attachment id of the source drawing file (uploaded via attachment-base).
|
|
4430
|
+
"""
|
|
4431
|
+
attachmentId: String!
|
|
4432
|
+
|
|
4433
|
+
"""ChatSession id when triggered from board-ai chat."""
|
|
4434
|
+
chatSessionId: String
|
|
4435
|
+
|
|
4436
|
+
"""Flip Y axis (CAD Y-up → scene Y-down)."""
|
|
4437
|
+
flipY: Boolean
|
|
4438
|
+
|
|
4439
|
+
"""Normalize coordinates so minX,minY=0"""
|
|
4440
|
+
normalizeOrigin: Boolean
|
|
4441
|
+
|
|
4442
|
+
"""Adapter parse options (excludeLayers, maxEntities, ...)."""
|
|
4443
|
+
parseOptions: JSON
|
|
4444
|
+
|
|
4445
|
+
"""Scale factor (e.g. 1 for mm:1unit)."""
|
|
4446
|
+
scale: Float
|
|
4447
|
+
|
|
4448
|
+
"""Registry scopes to use (board-import)."""
|
|
4449
|
+
scopes: [String!]
|
|
4450
|
+
|
|
4451
|
+
"""
|
|
4452
|
+
User-provided context / hints about the drawing — passed to VLM as additional guidance. e.g. "fab lithography zone, central rectangles are stockers, thin lines are OHT rails."
|
|
4453
|
+
"""
|
|
4454
|
+
userPrompt: String
|
|
4455
|
+
}
|
|
4456
|
+
|
|
4457
|
+
"""도면 → 보드 변환 작업의 영속 단위 (비동기 진행상태 추적)."""
|
|
4458
|
+
type ImportSession {
|
|
4459
|
+
"""Attachment id (the source drawing file)"""
|
|
4460
|
+
attachmentId: String!
|
|
4461
|
+
|
|
4462
|
+
"""ChatSession id when triggered from chat (board-ai)."""
|
|
4463
|
+
chatSessionId: String
|
|
4464
|
+
completedAt: DateTimeISO
|
|
4465
|
+
createdAt: DateTimeISO
|
|
4466
|
+
creator: User
|
|
4467
|
+
domain: Domain
|
|
4468
|
+
id: ID
|
|
4469
|
+
message: String
|
|
4470
|
+
|
|
4471
|
+
"""Options used (parsed JSON)."""
|
|
4472
|
+
options: JSON
|
|
4473
|
+
|
|
4474
|
+
"""Progress percentage 0..100"""
|
|
4475
|
+
progress: Float!
|
|
4476
|
+
|
|
4477
|
+
"""Result (parsed JSON): { boardModel, stats, warnings }."""
|
|
4478
|
+
result: JSON
|
|
4479
|
+
|
|
4480
|
+
"""queued | parsing | mapping | assembling | binding | completed | failed"""
|
|
4481
|
+
status: String!
|
|
4482
|
+
|
|
4483
|
+
"""Total entities counted (when known)."""
|
|
4484
|
+
totalEntities: Int
|
|
4485
|
+
updatedAt: DateTimeISO
|
|
4486
|
+
}
|
|
4487
|
+
|
|
4087
4488
|
"""
|
|
4088
4489
|
Enumeration for inherited value types: None, Only, or Include. Used to specify how values are inherited in queries or filters.
|
|
4089
4490
|
"""
|
|
@@ -4257,6 +4658,11 @@ enum IssueStatus {
|
|
|
4257
4658
|
STATUS_B
|
|
4258
4659
|
}
|
|
4259
4660
|
|
|
4661
|
+
"""
|
|
4662
|
+
The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
|
|
4663
|
+
"""
|
|
4664
|
+
scalar JSON @specifiedBy(url: "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf")
|
|
4665
|
+
|
|
4260
4666
|
"""
|
|
4261
4667
|
A field whose value is a JSON Web Token (JWT): https://jwt.io/introduction.
|
|
4262
4668
|
"""
|
|
@@ -4337,6 +4743,11 @@ type Kpi {
|
|
|
4337
4743
|
"""
|
|
4338
4744
|
scoreFormula: String
|
|
4339
4745
|
|
|
4746
|
+
"""
|
|
4747
|
+
value → score 변환 방식. NONE: 미설정, DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식, LOOKUP: grade table(1D), CUSTOM: 2D 룩업 등 특수 변환.
|
|
4748
|
+
"""
|
|
4749
|
+
scoreType: KpiScoreType
|
|
4750
|
+
|
|
4340
4751
|
"""Current state of the KPI (DRAFT, RELEASED, ARCHIVED)."""
|
|
4341
4752
|
state: String
|
|
4342
4753
|
targetValue: Float
|
|
@@ -4361,6 +4772,11 @@ type Kpi {
|
|
|
4361
4772
|
orgScope: String
|
|
4362
4773
|
): KpiValue
|
|
4363
4774
|
|
|
4775
|
+
"""
|
|
4776
|
+
value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 룩업 결과.
|
|
4777
|
+
"""
|
|
4778
|
+
valueType: KpiValueType
|
|
4779
|
+
|
|
4364
4780
|
"""
|
|
4365
4781
|
Version number of the KPI. Increments on each modification. When the KPI is released, a snapshot is saved in kpi-history and the status becomes RELEASED. Editing after release increases the version and sets status to DRAFT.
|
|
4366
4782
|
"""
|
|
@@ -4529,7 +4945,7 @@ input KpiMetricPatch {
|
|
|
4529
4945
|
"""데이터 수집 방식"""
|
|
4530
4946
|
collectType: KpiMetricCollectType
|
|
4531
4947
|
cuFlag: String
|
|
4532
|
-
|
|
4948
|
+
dataSet: ObjectRef
|
|
4533
4949
|
description: String
|
|
4534
4950
|
fieldName: String
|
|
4535
4951
|
id: ID
|
|
@@ -4772,6 +5188,9 @@ input KpiPatch {
|
|
|
4772
5188
|
"""
|
|
4773
5189
|
scoreFormula: String
|
|
4774
5190
|
|
|
5191
|
+
"""value → score 변환 방식."""
|
|
5192
|
+
scoreType: KpiScoreType
|
|
5193
|
+
|
|
4775
5194
|
"""Current state of the KPI (DRAFT, RELEASED, ARCHIVED)."""
|
|
4776
5195
|
state: KpiStatus
|
|
4777
5196
|
|
|
@@ -4781,6 +5200,9 @@ input KpiPatch {
|
|
|
4781
5200
|
"""Timezone for the KPI schedule."""
|
|
4782
5201
|
timezone: String
|
|
4783
5202
|
|
|
5203
|
+
"""value 획득 방식."""
|
|
5204
|
+
valueType: KpiValueType
|
|
5205
|
+
|
|
4784
5206
|
"""
|
|
4785
5207
|
Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, etc.
|
|
4786
5208
|
"""
|
|
@@ -4904,6 +5326,16 @@ input KpiScopePatch {
|
|
|
4904
5326
|
validationPattern: String
|
|
4905
5327
|
}
|
|
4906
5328
|
|
|
5329
|
+
"""
|
|
5330
|
+
value → score 변환 방식. DIRECT: value=score(변환 없음), FORMULA: scoreFormula 수식 적용, LOOKUP: grade table(1D) 매핑, CUSTOM: 2D 룩업 등 특수 변환.
|
|
5331
|
+
"""
|
|
5332
|
+
enum KpiScoreType {
|
|
5333
|
+
CUSTOM
|
|
5334
|
+
DIRECT
|
|
5335
|
+
FORMULA
|
|
5336
|
+
LOOKUP
|
|
5337
|
+
}
|
|
5338
|
+
|
|
4907
5339
|
"""
|
|
4908
5340
|
KPI Statistics Entity - Stores comprehensive statistical information for KPIs and Categories including central tendency measures (mean, median), dispersion metrics (standard deviation, variance), range indicators (min, max), and percentile distributions (25th, 75th percentiles, IQR). Supports both KPI and Category targets with flexible period-based aggregation (daily, weekly, monthly, yearly). Includes extensible JSON fields for additional metrics and metadata for calculation tracking.
|
|
4909
5341
|
"""
|
|
@@ -5174,6 +5606,16 @@ input KpiValuePatch {
|
|
|
5174
5606
|
version: Int
|
|
5175
5607
|
}
|
|
5176
5608
|
|
|
5609
|
+
"""
|
|
5610
|
+
value 획득 방식. MEASURED: 외부 시스템 수집 측정값, ASSESSED: 감리자 직접 평가(1~5), CALCULATED: formula 자동 계산, COMPOSITE: 다차원 복합 입력 결과.
|
|
5611
|
+
"""
|
|
5612
|
+
enum KpiValueType {
|
|
5613
|
+
ASSESSED
|
|
5614
|
+
CALCULATED
|
|
5615
|
+
COMPOSITE
|
|
5616
|
+
MEASURED
|
|
5617
|
+
}
|
|
5618
|
+
|
|
5177
5619
|
type KpiValuesObject {
|
|
5178
5620
|
kpiName: String!
|
|
5179
5621
|
value: Float!
|
|
@@ -5315,6 +5757,33 @@ input ManagerPatch {
|
|
|
5315
5757
|
userId: ID
|
|
5316
5758
|
}
|
|
5317
5759
|
|
|
5760
|
+
input MaterializeImportSessionInput {
|
|
5761
|
+
"""Optional Board description."""
|
|
5762
|
+
description: String
|
|
5763
|
+
|
|
5764
|
+
"""Optional Group id to attach the Board to."""
|
|
5765
|
+
groupId: ID
|
|
5766
|
+
|
|
5767
|
+
"""New Board name."""
|
|
5768
|
+
name: String!
|
|
5769
|
+
|
|
5770
|
+
"""ImportSession id (must be in completed state)."""
|
|
5771
|
+
sessionId: ID!
|
|
5772
|
+
|
|
5773
|
+
"""
|
|
5774
|
+
Base64 thumbnail. If omitted, board-service default empty thumbnail is used.
|
|
5775
|
+
"""
|
|
5776
|
+
thumbnail: String
|
|
5777
|
+
|
|
5778
|
+
"""Board type — 'main' | 'sub' | 'popup'. Default 'main'."""
|
|
5779
|
+
type: String
|
|
5780
|
+
|
|
5781
|
+
"""
|
|
5782
|
+
ImportSession 의 결과 시안 중 하나의 id. 'as-is' / 'scene' / 'auto-fit'. 미지정 시 default variant (보통 'scene') 사용.
|
|
5783
|
+
"""
|
|
5784
|
+
variantId: String
|
|
5785
|
+
}
|
|
5786
|
+
|
|
5318
5787
|
"""Entity for Menu"""
|
|
5319
5788
|
type Menu {
|
|
5320
5789
|
buttons: [MenuButton!]!
|
|
@@ -5693,6 +6162,9 @@ type Mutation {
|
|
|
5693
6162
|
username: String!
|
|
5694
6163
|
): Boolean!
|
|
5695
6164
|
|
|
6165
|
+
"""Add a user as owner of the current domain."""
|
|
6166
|
+
addDomainOwner(reason: String, username: String!): DomainOwner!
|
|
6167
|
+
|
|
5696
6168
|
"""To apply to all building inspection"""
|
|
5697
6169
|
applyToAllBuildingInspection(buildingInspectionId: String!): Boolean!
|
|
5698
6170
|
|
|
@@ -5713,6 +6185,14 @@ type Mutation {
|
|
|
5713
6185
|
"""
|
|
5714
6186
|
attachContact(contactId: String!, id: String!): Employee!
|
|
5715
6187
|
|
|
6188
|
+
"""
|
|
6189
|
+
썸네일이 없는 기존 첨부파일들에 대해 서버에서 썸네일을 일괄 생성한다. 한 호출당 limit 개까지만 처리하며, remaining > 0 이면 반복 호출 필요.
|
|
6190
|
+
"""
|
|
6191
|
+
backfillAttachmentThumbnails(limit: Int = 20): ThumbnailBackfillResult!
|
|
6192
|
+
|
|
6193
|
+
"""AI 주도 보드 모델링 — 자연어 채팅으로 보드 생성·구조편집·스타일링. sessionId 로 영속 컨텍스트."""
|
|
6194
|
+
boardAIChat(input: BoardAIChatInput!): BoardAIChatOutput!
|
|
6195
|
+
|
|
5716
6196
|
"""Bulk create or update KPI org-scope mappings."""
|
|
5717
6197
|
bulkUpsertKpiOrgScopes(
|
|
5718
6198
|
"""Array of org-scope mapping data for bulk upsert."""
|
|
@@ -5801,6 +6281,16 @@ type Mutation {
|
|
|
5801
6281
|
"""Create Daily Worklog by projectId+date"""
|
|
5802
6282
|
createBuildingInspectionDailyWorklog(patch: BuildingInspectionDailyWorklogNew!): BuildingInspectionDailyWorklog!
|
|
5803
6283
|
|
|
6284
|
+
"""
|
|
6285
|
+
Always create a new AI chat session for a board (no idempotent reuse). For multi-session UX — 새 탭 열기.
|
|
6286
|
+
"""
|
|
6287
|
+
createChatSession(
|
|
6288
|
+
boardId: String!
|
|
6289
|
+
|
|
6290
|
+
"""Optional name (defaults to auto-generated `세션 N`)."""
|
|
6291
|
+
name: String
|
|
6292
|
+
): ChatSession!
|
|
6293
|
+
|
|
5804
6294
|
"""To create new ChecklistItemComment"""
|
|
5805
6295
|
createChecklistItemComment(checklistItemComment: NewChecklistItemComment!): ChecklistItemComment!
|
|
5806
6296
|
|
|
@@ -5982,6 +6472,9 @@ type Mutation {
|
|
|
5982
6472
|
"""프로젝트 생성"""
|
|
5983
6473
|
createProject(project: NewProject!): Project!
|
|
5984
6474
|
|
|
6475
|
+
"""프로젝트 체크리스트 생성"""
|
|
6476
|
+
createProjectChecklist(constructionDetailTypeId: String!, constructionTypeId: String!, items: [ProjectChecklistItemInput!]!, name: String!, projectId: String!): ProjectChecklist!
|
|
6477
|
+
|
|
5985
6478
|
"""To create new ProjectReport"""
|
|
5986
6479
|
createProjectReport(projectReport: NewProjectReport!): ProjectReport!
|
|
5987
6480
|
|
|
@@ -6148,6 +6641,12 @@ type Mutation {
|
|
|
6148
6641
|
"""Deletes multiple connections by their names."""
|
|
6149
6642
|
deleteConnections(names: [String!]!): Boolean!
|
|
6150
6643
|
|
|
6644
|
+
"""공종 체크리스트 템플릿 아이템 삭제"""
|
|
6645
|
+
deleteConstructionChecklistTemplateItems(ids: [String!]!): Boolean!
|
|
6646
|
+
|
|
6647
|
+
"""공종 기반 체크리스트 템플릿 삭제"""
|
|
6648
|
+
deleteConstructionChecklistTemplates(ids: [String!]!): Boolean!
|
|
6649
|
+
|
|
6151
6650
|
"""To delete multiple ConstructionDetailTypes"""
|
|
6152
6651
|
deleteConstructionDetailTypes(ids: [String!]!): Boolean!
|
|
6153
6652
|
|
|
@@ -6435,6 +6934,9 @@ type Mutation {
|
|
|
6435
6934
|
"""To delete Project"""
|
|
6436
6935
|
deleteProject(id: String!): Boolean!
|
|
6437
6936
|
|
|
6937
|
+
"""프로젝트 체크리스트 삭제"""
|
|
6938
|
+
deleteProjectChecklists(ids: [String!]!): Boolean!
|
|
6939
|
+
|
|
6438
6940
|
"""To delete ProjectReport"""
|
|
6439
6941
|
deleteProjectReport(id: String!): Boolean!
|
|
6440
6942
|
|
|
@@ -6532,6 +7034,9 @@ type Mutation {
|
|
|
6532
7034
|
"""To delete multiple WorkerTypes"""
|
|
6533
7035
|
deleteWorkerTypes(ids: [String!]!): Boolean!
|
|
6534
7036
|
|
|
7037
|
+
"""프로젝트 테넌트 강등 (Domain soft-delete, Project.code 보존)"""
|
|
7038
|
+
demoteProjectTenant(projectId: String!): Boolean!
|
|
7039
|
+
|
|
6535
7040
|
"""
|
|
6536
7041
|
Detaches an existing contact from an employee. The employee is identified by their ID.
|
|
6537
7042
|
"""
|
|
@@ -6605,6 +7110,9 @@ type Mutation {
|
|
|
6605
7110
|
attributes: [AttributeSetPatch!]!
|
|
6606
7111
|
): Boolean!
|
|
6607
7112
|
|
|
7113
|
+
"""도면 → 보드 변환을 비동기로 시작. 즉시 ImportSession 반환, 백그라운드에서 처리."""
|
|
7114
|
+
importBoardAsync(input: ImportBoardAsyncInput!): ImportSession!
|
|
7115
|
+
|
|
6608
7116
|
"""Imports multiple boards from JSON files."""
|
|
6609
7117
|
importBoards(files: [Upload!]!, groupId: String!, overwrite: Boolean!): [Board!]!
|
|
6610
7118
|
|
|
@@ -6748,6 +7256,11 @@ type Mutation {
|
|
|
6748
7256
|
|
|
6749
7257
|
"""Removes one or more boards from a play group."""
|
|
6750
7258
|
leavePlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
|
|
7259
|
+
|
|
7260
|
+
"""
|
|
7261
|
+
완료된 ImportSession 의 결과 boardModel 을 새 Board entity 로 영속화한다. 검수 단계 (사용자/AI 가 import 결과를 확인 후 명시적으로 호출) 에서 사용. Board.state="draft" 로 생성되므로 release mutation 으로 별도 발행 필요.
|
|
7262
|
+
"""
|
|
7263
|
+
materializeImportSession(input: MaterializeImportSessionInput!): Board!
|
|
6751
7264
|
multipleUpload(files: [Upload!]!): [Attachment!]!
|
|
6752
7265
|
|
|
6753
7266
|
"""
|
|
@@ -6755,12 +7268,20 @@ type Mutation {
|
|
|
6755
7268
|
"""
|
|
6756
7269
|
pickActivityInstance(id: String!): ActivityThread
|
|
6757
7270
|
|
|
7271
|
+
"""프로젝트를 테넌트로 승격 (관리번호 발번 + project 카테고리 Domain 생성)"""
|
|
7272
|
+
promoteProjectToTenant(projectId: String!): Project!
|
|
7273
|
+
|
|
6758
7274
|
"""기존 KPI Value 인스턴스를 현재 formula/metric 값으로 재계산"""
|
|
6759
7275
|
recalculateKpiValue(id: String!): KpiValue!
|
|
6760
7276
|
|
|
6761
7277
|
"""Recalculate scores for all KpiValues of a specific KPI"""
|
|
6762
7278
|
recalculateScoresForKpi(kpiId: String!): Boolean!
|
|
6763
7279
|
|
|
7280
|
+
"""
|
|
7281
|
+
Record a patch from user direct edit. Adds a system message so AI sees the change next turn.
|
|
7282
|
+
"""
|
|
7283
|
+
recordDirectPatch(ops: JSON!, sessionId: String!, summary: String): PatchEntry!
|
|
7284
|
+
|
|
6764
7285
|
"""Record a metric value by metric name, value, meta, and org."""
|
|
6765
7286
|
recordKpiMetricValue(
|
|
6766
7287
|
"""Extended or non-numeric information (JSON)."""
|
|
@@ -6812,8 +7333,17 @@ type Mutation {
|
|
|
6812
7333
|
|
|
6813
7334
|
"""Release a KPI and create a version history."""
|
|
6814
7335
|
releaseKpi(id: String!): Kpi!
|
|
7336
|
+
|
|
7337
|
+
"""Remove a user from the owners of the current domain."""
|
|
7338
|
+
removeDomainOwner(reason: String, username: String!): Boolean!
|
|
7339
|
+
|
|
7340
|
+
"""Rename a ChatSession (tab label)."""
|
|
7341
|
+
renameChatSession(name: String!, sessionId: String!): Boolean!
|
|
6815
7342
|
renewApplicationAccessToken(id: String!, scope: String!): AccessToken!
|
|
6816
7343
|
|
|
7344
|
+
"""Reorders a board between two adjacent boards by ID."""
|
|
7345
|
+
reorderBoard(id: String!, nextId: String, prevId: String): Boolean!
|
|
7346
|
+
|
|
6817
7347
|
"""Sets the custom playback order for boards in a play group."""
|
|
6818
7348
|
reorderPlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
|
|
6819
7349
|
|
|
@@ -6834,6 +7364,9 @@ type Mutation {
|
|
|
6834
7364
|
"""Revert a KPI to a specific historical version."""
|
|
6835
7365
|
revertKpiVersion(id: String!, version: Float!): Kpi!
|
|
6836
7366
|
|
|
7367
|
+
"""Mark a patch as reverted (does not undo, only flags)."""
|
|
7368
|
+
revertPatch(patchId: String!): Boolean!
|
|
7369
|
+
|
|
6837
7370
|
"""
|
|
6838
7371
|
Runs a new scenario instance once and returns the result after it finishes.
|
|
6839
7372
|
"""
|
|
@@ -6853,6 +7386,11 @@ type Mutation {
|
|
|
6853
7386
|
"""To start ActivityThread"""
|
|
6854
7387
|
startActivityThread(id: String!, output: Object, reason: String): ActivityThread
|
|
6855
7388
|
|
|
7389
|
+
"""
|
|
7390
|
+
Start (or get existing) AI chat session for a board. Idempotent — returns first existing or creates one.
|
|
7391
|
+
"""
|
|
7392
|
+
startBoardAISession(boardId: String!): ChatSession!
|
|
7393
|
+
|
|
6856
7394
|
"""
|
|
6857
7395
|
Starts automated data collection scheduling for the specified dataset. This mutation registers a cron-based schedule that automatically triggers data collection tasks according to the dataset configuration.
|
|
6858
7396
|
"""
|
|
@@ -7117,6 +7655,12 @@ type Mutation {
|
|
|
7117
7655
|
"""Updates multiple connections at once."""
|
|
7118
7656
|
updateMultipleConnection(patches: [ConnectionPatch!]!): [Connection!]!
|
|
7119
7657
|
|
|
7658
|
+
"""공종 기반 체크리스트 템플릿 생성/수정"""
|
|
7659
|
+
updateMultipleConstructionChecklistTemplate(patches: [ConstructionChecklistTemplatePatch!]!): [ConstructionChecklistTemplate!]!
|
|
7660
|
+
|
|
7661
|
+
"""공종 체크리스트 템플릿 아이템 일괄 저장"""
|
|
7662
|
+
updateMultipleConstructionChecklistTemplateItems(constructionChecklistTemplateId: String!, patches: [ConstructionChecklistTemplateItemPatch!]!): [ConstructionChecklistTemplateItem!]!
|
|
7663
|
+
|
|
7120
7664
|
"""To modify multiple ConstructionDetailTypes' information"""
|
|
7121
7665
|
updateMultipleConstructionDetailType(constructionTypeId: String!, patches: [ConstructionDetailTypePatch!]!): [ConstructionDetailType!]!
|
|
7122
7666
|
|
|
@@ -7312,6 +7856,9 @@ type Mutation {
|
|
|
7312
7856
|
"""프로젝트 업데이트 (중복 사용 금지)"""
|
|
7313
7857
|
updateProject(project: ProjectPatch!): Project!
|
|
7314
7858
|
|
|
7859
|
+
"""프로젝트 체크리스트 수정"""
|
|
7860
|
+
updateProjectChecklist(id: String!, items: [ProjectChecklistItemInput!]!, name: String!): ProjectChecklist!
|
|
7861
|
+
|
|
7315
7862
|
"""프로젝트 도면 업데이트"""
|
|
7316
7863
|
updateProjectPlan(project: ProjectPatch!): Project!
|
|
7317
7864
|
|
|
@@ -7395,6 +7942,9 @@ type Mutation {
|
|
|
7395
7942
|
|
|
7396
7943
|
"""프로젝트 공정표 업로드"""
|
|
7397
7944
|
uploadProjectScheduleTable(param: UploadProjectScheduleTable!): Boolean!
|
|
7945
|
+
|
|
7946
|
+
"""공종+세부공종 조합으로 find-or-create"""
|
|
7947
|
+
upsertConstructionChecklistTemplate(constructionDetailTypeId: String!, constructionTypeId: String!): ConstructionChecklistTemplate!
|
|
7398
7948
|
}
|
|
7399
7949
|
|
|
7400
7950
|
input NewActionPlan {
|
|
@@ -8014,6 +8564,9 @@ input NewKpi {
|
|
|
8014
8564
|
"""
|
|
8015
8565
|
scoreFormula: String
|
|
8016
8566
|
|
|
8567
|
+
"""value → score 변환 방식."""
|
|
8568
|
+
scoreType: KpiScoreType
|
|
8569
|
+
|
|
8017
8570
|
"""Current state of the KPI (DRAFT, RELEASED, ARCHIVED)."""
|
|
8018
8571
|
state: KpiStatus
|
|
8019
8572
|
|
|
@@ -8023,6 +8576,9 @@ input NewKpi {
|
|
|
8023
8576
|
"""Timezone for the KPI schedule."""
|
|
8024
8577
|
timezone: String
|
|
8025
8578
|
|
|
8579
|
+
"""value 획득 방식."""
|
|
8580
|
+
valueType: KpiValueType
|
|
8581
|
+
|
|
8026
8582
|
"""
|
|
8027
8583
|
Visualization options and metadata for this KPI, such as color, icon, thresholds, unit, decimal places, etc.
|
|
8028
8584
|
"""
|
|
@@ -8047,8 +8603,8 @@ input NewKpiMetric {
|
|
|
8047
8603
|
"""데이터 수집 방식"""
|
|
8048
8604
|
collectType: KpiMetricCollectType
|
|
8049
8605
|
|
|
8050
|
-
"""
|
|
8051
|
-
|
|
8606
|
+
"""Source dataset for this metric."""
|
|
8607
|
+
dataSet: ObjectRef
|
|
8052
8608
|
|
|
8053
8609
|
"""User-friendly name or description of the metric."""
|
|
8054
8610
|
description: String
|
|
@@ -9197,6 +9753,26 @@ type PasswordRule {
|
|
|
9197
9753
|
useTightPattern: Boolean
|
|
9198
9754
|
}
|
|
9199
9755
|
|
|
9756
|
+
"""One board edit operation history (cascade-deleted with ChatSession)."""
|
|
9757
|
+
type PatchEntry {
|
|
9758
|
+
"""AI confidence 0..1 (null for user-direct)."""
|
|
9759
|
+
confidence: Float
|
|
9760
|
+
createdAt: DateTimeISO
|
|
9761
|
+
id: ID
|
|
9762
|
+
|
|
9763
|
+
"""BoardEditOp[] (parsed JSON array)."""
|
|
9764
|
+
opsJson: JSON!
|
|
9765
|
+
|
|
9766
|
+
"""Whether this patch was reverted."""
|
|
9767
|
+
reverted: Boolean!
|
|
9768
|
+
|
|
9769
|
+
"""'ai' | 'user-direct' | 'import'"""
|
|
9770
|
+
source: String!
|
|
9771
|
+
|
|
9772
|
+
"""Short human summary of this patch."""
|
|
9773
|
+
summary: String
|
|
9774
|
+
}
|
|
9775
|
+
|
|
9200
9776
|
"""Logs the request and response payloads for API interactions."""
|
|
9201
9777
|
type PayloadLog {
|
|
9202
9778
|
"""The timestamp when the log entry was created."""
|
|
@@ -9462,6 +10038,7 @@ input ProfileInput {
|
|
|
9462
10038
|
type Project {
|
|
9463
10039
|
buildingComplex: BuildingComplex
|
|
9464
10040
|
buildingUsage: String
|
|
10041
|
+
code: String
|
|
9465
10042
|
completeReport: Attachment
|
|
9466
10043
|
createdAt: DateTimeISO
|
|
9467
10044
|
creator: User
|
|
@@ -9488,12 +10065,60 @@ type Project {
|
|
|
9488
10065
|
state: String!
|
|
9489
10066
|
structuralSafetyRate: Float
|
|
9490
10067
|
tasks: [Task!]
|
|
10068
|
+
|
|
10069
|
+
"""활성 테넌트 Domain (extType=project). 미승격 또는 강등 상태이면 null"""
|
|
10070
|
+
tenantDomain: Domain
|
|
9491
10071
|
totalProgress: Float
|
|
9492
10072
|
updatedAt: DateTimeISO
|
|
9493
10073
|
updater: User
|
|
9494
10074
|
weeklyProgress: Float
|
|
9495
10075
|
}
|
|
9496
10076
|
|
|
10077
|
+
type ProjectChecklist {
|
|
10078
|
+
constructionDetailTypeId: String!
|
|
10079
|
+
constructionTypeId: String!
|
|
10080
|
+
createdAt: DateTimeISO
|
|
10081
|
+
creator: User
|
|
10082
|
+
deletedAt: DateTimeISO
|
|
10083
|
+
domain: Domain
|
|
10084
|
+
id: ID!
|
|
10085
|
+
name: String!
|
|
10086
|
+
projectChecklistItems: [ProjectChecklistItem!]
|
|
10087
|
+
projectId: String!
|
|
10088
|
+
updatedAt: DateTimeISO
|
|
10089
|
+
updater: User
|
|
10090
|
+
}
|
|
10091
|
+
|
|
10092
|
+
type ProjectChecklistItem {
|
|
10093
|
+
createdAt: DateTimeISO
|
|
10094
|
+
creator: User
|
|
10095
|
+
id: ID!
|
|
10096
|
+
inspctionCriteria: String
|
|
10097
|
+
mainType: String
|
|
10098
|
+
name: String!
|
|
10099
|
+
projectChecklist: ProjectChecklist
|
|
10100
|
+
sequence: Int
|
|
10101
|
+
updatedAt: DateTimeISO
|
|
10102
|
+
updater: User
|
|
10103
|
+
}
|
|
10104
|
+
|
|
10105
|
+
input ProjectChecklistItemInput {
|
|
10106
|
+
inspctionCriteria: String
|
|
10107
|
+
mainType: String
|
|
10108
|
+
name: String!
|
|
10109
|
+
sequence: Int
|
|
10110
|
+
}
|
|
10111
|
+
|
|
10112
|
+
type ProjectChecklistItemList {
|
|
10113
|
+
items: [ProjectChecklistItem!]!
|
|
10114
|
+
total: Int!
|
|
10115
|
+
}
|
|
10116
|
+
|
|
10117
|
+
type ProjectChecklistList {
|
|
10118
|
+
items: [ProjectChecklist!]!
|
|
10119
|
+
total: Int!
|
|
10120
|
+
}
|
|
10121
|
+
|
|
9497
10122
|
type ProjectList {
|
|
9498
10123
|
"""프로젝트 리스트 항목들"""
|
|
9499
10124
|
items: [Project!]!
|
|
@@ -10133,6 +10758,28 @@ type Query {
|
|
|
10133
10758
|
"""To fetch a building level"""
|
|
10134
10759
|
buildingLevel(id: String!): BuildingLevel
|
|
10135
10760
|
|
|
10761
|
+
"""List chat messages of a session, oldest first."""
|
|
10762
|
+
chatMessages(limit: Int = 100, offset: Int = 0, sessionId: String!): [ChatMessage!]!
|
|
10763
|
+
|
|
10764
|
+
"""List patch entries of a session, newest first."""
|
|
10765
|
+
chatPatches(limit: Int = 100, sessionId: String!): [PatchEntry!]!
|
|
10766
|
+
|
|
10767
|
+
"""Get AI chat session by id."""
|
|
10768
|
+
chatSession(id: String!): ChatSession
|
|
10769
|
+
|
|
10770
|
+
"""
|
|
10771
|
+
Get AI chat session by board id (returns first match — backward compat single-session lookup).
|
|
10772
|
+
"""
|
|
10773
|
+
chatSessionByBoard(boardId: String!): ChatSession
|
|
10774
|
+
|
|
10775
|
+
"""List participants of a ChatSession (members / owner)."""
|
|
10776
|
+
chatSessionParticipants(sessionId: String!): [ChatSessionParticipant!]!
|
|
10777
|
+
|
|
10778
|
+
"""
|
|
10779
|
+
List all AI chat sessions for a board (oldest first). Multi-session support — UI 탭으로 표시.
|
|
10780
|
+
"""
|
|
10781
|
+
chatSessionsByBoard(boardId: String!): [ChatSession!]!
|
|
10782
|
+
|
|
10136
10783
|
"""
|
|
10137
10784
|
Checks if the system is configured to provide a default password for new users.
|
|
10138
10785
|
"""
|
|
@@ -10360,6 +11007,36 @@ type Query {
|
|
|
10360
11007
|
"""Fetches a list of all available connector types."""
|
|
10361
11008
|
connectors: ConnectorList!
|
|
10362
11009
|
|
|
11010
|
+
"""공종 체크리스트 템플릿 아이템 목록"""
|
|
11011
|
+
constructionChecklistTemplateItems(
|
|
11012
|
+
"""An array of filter conditions to apply to the list query."""
|
|
11013
|
+
filters: [Filter!]
|
|
11014
|
+
|
|
11015
|
+
"""Inherited value type for the list query."""
|
|
11016
|
+
inherited: InheritedValueType
|
|
11017
|
+
|
|
11018
|
+
"""Pagination options for the list query."""
|
|
11019
|
+
pagination: Pagination
|
|
11020
|
+
|
|
11021
|
+
"""Sorting options for the list query."""
|
|
11022
|
+
sortings: [Sorting!]
|
|
11023
|
+
): ConstructionChecklistTemplateItemList!
|
|
11024
|
+
|
|
11025
|
+
"""공종 기반 체크리스트 템플릿 목록"""
|
|
11026
|
+
constructionChecklistTemplates(
|
|
11027
|
+
"""An array of filter conditions to apply to the list query."""
|
|
11028
|
+
filters: [Filter!]
|
|
11029
|
+
|
|
11030
|
+
"""Inherited value type for the list query."""
|
|
11031
|
+
inherited: InheritedValueType
|
|
11032
|
+
|
|
11033
|
+
"""Pagination options for the list query."""
|
|
11034
|
+
pagination: Pagination
|
|
11035
|
+
|
|
11036
|
+
"""Sorting options for the list query."""
|
|
11037
|
+
sortings: [Sorting!]
|
|
11038
|
+
): ConstructionChecklistTemplateList!
|
|
11039
|
+
|
|
10363
11040
|
"""To fetch multiple ConstructionDetailTypes"""
|
|
10364
11041
|
constructionDetailTypes(
|
|
10365
11042
|
"""An array of filter conditions to apply to the list query."""
|
|
@@ -10411,6 +11088,9 @@ type Query {
|
|
|
10411
11088
|
sortings: [Sorting!]
|
|
10412
11089
|
): ContactList!
|
|
10413
11090
|
|
|
11091
|
+
"""현재 테넌트 컨텍스트(extType=project)의 프로젝트. subdomain(=Project.code) 으로 조회."""
|
|
11092
|
+
currentProject: Project
|
|
11093
|
+
|
|
10414
11094
|
"""프로젝트 타입 조회"""
|
|
10415
11095
|
currentProjectType: String!
|
|
10416
11096
|
customers: [Domain!]!
|
|
@@ -10828,11 +11508,24 @@ type Query {
|
|
|
10828
11508
|
sortings: [Sorting!]
|
|
10829
11509
|
): DomainLinkList!
|
|
10830
11510
|
|
|
11511
|
+
"""List owners of the current domain."""
|
|
11512
|
+
domainOwners: [DomainOwner!]!
|
|
11513
|
+
|
|
10831
11514
|
"""
|
|
10832
11515
|
Fetches the list of available domain types from configuration. Only superusers are granted this privilege.
|
|
10833
11516
|
"""
|
|
10834
11517
|
domainTypes: [String!]!
|
|
10835
11518
|
|
|
11519
|
+
"""
|
|
11520
|
+
List users in the current domain for `@` mention popup. board-ai 권한이면 누구나 멘션용 검색 가능 (관리자 전용 users() 와 별도).
|
|
11521
|
+
"""
|
|
11522
|
+
domainUsersForMention(
|
|
11523
|
+
limit: Int = 50
|
|
11524
|
+
|
|
11525
|
+
"""Substring to match against name/email (case-insensitive). Empty → all."""
|
|
11526
|
+
query: String
|
|
11527
|
+
): [User!]!
|
|
11528
|
+
|
|
10836
11529
|
"""
|
|
10837
11530
|
Fetches all domain entities with pagination and filtering options. Only superusers are granted this privilege.
|
|
10838
11531
|
"""
|
|
@@ -11053,6 +11746,12 @@ type Query {
|
|
|
11053
11746
|
"""To query whether I have the given permission"""
|
|
11054
11747
|
hasPrivilege(category: String!, privilege: String!): Boolean!
|
|
11055
11748
|
|
|
11749
|
+
"""Get import session progress."""
|
|
11750
|
+
importSession(id: String!): ImportSession
|
|
11751
|
+
|
|
11752
|
+
"""List recent import sessions for a chat session."""
|
|
11753
|
+
importSessionsByChatSession(chatSessionId: String!): [ImportSession!]!
|
|
11754
|
+
|
|
11056
11755
|
"""BuildingInspection By ChecklistItemId"""
|
|
11057
11756
|
inspectionByChecklistItemId: BuildingInspection!
|
|
11058
11757
|
|
|
@@ -11115,6 +11814,9 @@ type Query {
|
|
|
11115
11814
|
invitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
|
|
11116
11815
|
invitations(reference: String!, type: String!): InvitationList!
|
|
11117
11816
|
|
|
11817
|
+
"""Check if a user is an owner of the current domain."""
|
|
11818
|
+
isDomainOwner(username: String!): Boolean!
|
|
11819
|
+
|
|
11118
11820
|
"""To fetch a Issue"""
|
|
11119
11821
|
issue(id: String!): Issue
|
|
11120
11822
|
|
|
@@ -11768,6 +12470,36 @@ type Query {
|
|
|
11768
12470
|
"""To fetch Project"""
|
|
11769
12471
|
projectByBuildingLevelId(buildingLevelId: String!): Project!
|
|
11770
12472
|
|
|
12473
|
+
"""프로젝트 체크리스트 아이템 목록"""
|
|
12474
|
+
projectChecklistItems(
|
|
12475
|
+
"""An array of filter conditions to apply to the list query."""
|
|
12476
|
+
filters: [Filter!]
|
|
12477
|
+
|
|
12478
|
+
"""Inherited value type for the list query."""
|
|
12479
|
+
inherited: InheritedValueType
|
|
12480
|
+
|
|
12481
|
+
"""Pagination options for the list query."""
|
|
12482
|
+
pagination: Pagination
|
|
12483
|
+
|
|
12484
|
+
"""Sorting options for the list query."""
|
|
12485
|
+
sortings: [Sorting!]
|
|
12486
|
+
): ProjectChecklistItemList!
|
|
12487
|
+
|
|
12488
|
+
"""프로젝트 체크리스트 목록"""
|
|
12489
|
+
projectChecklists(
|
|
12490
|
+
"""An array of filter conditions to apply to the list query."""
|
|
12491
|
+
filters: [Filter!]
|
|
12492
|
+
|
|
12493
|
+
"""Inherited value type for the list query."""
|
|
12494
|
+
inherited: InheritedValueType
|
|
12495
|
+
|
|
12496
|
+
"""Pagination options for the list query."""
|
|
12497
|
+
pagination: Pagination
|
|
12498
|
+
|
|
12499
|
+
"""Sorting options for the list query."""
|
|
12500
|
+
sortings: [Sorting!]
|
|
12501
|
+
): ProjectChecklistList!
|
|
12502
|
+
|
|
11771
12503
|
"""To fetch a ProjectReport"""
|
|
11772
12504
|
projectReport(id: String!): ProjectReport
|
|
11773
12505
|
|
|
@@ -11975,6 +12707,14 @@ type Query {
|
|
|
11975
12707
|
sortings: [Sorting!]
|
|
11976
12708
|
): StepList!
|
|
11977
12709
|
|
|
12710
|
+
"""
|
|
12711
|
+
도메인 안에서 충돌하지 않는 Board name + 상세 description 제안. name 은 짧고 심플 (30자 이내, 충돌 회피 (n) suffix), description 은 자세히 (사용자 prompt + AI importStrategy + 카테고리 분포 통계 합성).
|
|
12712
|
+
"""
|
|
12713
|
+
suggestBoardMeta(input: SuggestBoardNameInput!): BoardMetaSuggestion!
|
|
12714
|
+
|
|
12715
|
+
"""@deprecated suggestBoardMeta 사용 권장. 단순 string name 만 반환하는 구버전 query."""
|
|
12716
|
+
suggestBoardName(input: SuggestBoardNameInput!): String!
|
|
12717
|
+
|
|
11978
12718
|
"""To fetch the list of activities that I can report on"""
|
|
11979
12719
|
supervisableActivities(
|
|
11980
12720
|
"""An array of filter conditions to apply to the list query."""
|
|
@@ -12915,6 +13655,16 @@ type Subscription {
|
|
|
12915
13655
|
scenarioQueueState: ScenarioQueueState!
|
|
12916
13656
|
}
|
|
12917
13657
|
|
|
13658
|
+
input SuggestBoardNameInput {
|
|
13659
|
+
"""명시 hint. session 정보보다 우선. 사용자가 직접 적은 메모를 기반으로 추천받고 싶을 때."""
|
|
13660
|
+
hint: String
|
|
13661
|
+
|
|
13662
|
+
"""
|
|
13663
|
+
ImportSession id — 있으면 거기서 userPrompt / VLM reasoning / attachment.name 추출.
|
|
13664
|
+
"""
|
|
13665
|
+
sessionId: ID
|
|
13666
|
+
}
|
|
13667
|
+
|
|
12918
13668
|
"""Entity for Supervisor"""
|
|
12919
13669
|
type Supervisor {
|
|
12920
13670
|
active: Boolean
|
|
@@ -13216,6 +13966,21 @@ input ThemePatch {
|
|
|
13216
13966
|
value: Object
|
|
13217
13967
|
}
|
|
13218
13968
|
|
|
13969
|
+
"""썸네일 백필 결과"""
|
|
13970
|
+
type ThumbnailBackfillResult {
|
|
13971
|
+
"""이번 호출에서 처리 시도한 첨부 개수"""
|
|
13972
|
+
attempted: Int!
|
|
13973
|
+
|
|
13974
|
+
"""실패(생성 실패/콘텐츠 없음 등) 개수"""
|
|
13975
|
+
failed: Int!
|
|
13976
|
+
|
|
13977
|
+
"""이번 처리 후에도 남아있는 썸네일 미생성 후보 개수 (대략치). 0 이면 완료"""
|
|
13978
|
+
remaining: Int!
|
|
13979
|
+
|
|
13980
|
+
"""썸네일 생성·저장 성공 개수"""
|
|
13981
|
+
succeeded: Int!
|
|
13982
|
+
}
|
|
13983
|
+
|
|
13219
13984
|
input UpdateBuildingInspection {
|
|
13220
13985
|
drawingMarker: String
|
|
13221
13986
|
id: String!
|
|
@@ -13227,6 +13992,7 @@ input UpdateBuildingInspectionSubmitType {
|
|
|
13227
13992
|
checklistItem: [ChecklistItemSubmitInputType!]!
|
|
13228
13993
|
id: String!
|
|
13229
13994
|
memo: String
|
|
13995
|
+
requestDate: String
|
|
13230
13996
|
}
|
|
13231
13997
|
|
|
13232
13998
|
input UpdateTaskChecklistSubmitType {
|