@dssp/dkpi 1.0.27 → 1.0.30

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 (56) hide show
  1. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +2 -0
  2. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +19 -4
  3. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -1
  4. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +2 -0
  5. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +19 -4
  6. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -1
  7. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +2 -0
  8. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +19 -4
  9. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -1
  10. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +2 -0
  11. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +78 -4
  12. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -1
  13. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +2 -0
  14. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +35 -4
  15. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -1
  16. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +2 -0
  17. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +29 -1
  18. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -1
  19. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +11 -0
  20. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +65 -12
  21. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
  22. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +18 -0
  23. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +138 -64
  24. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -1
  25. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +80 -8
  26. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -1
  27. package/dist-client/pages/sv-project-detail.d.ts +33 -0
  28. package/dist-client/pages/sv-project-detail.js +130 -8
  29. package/dist-client/pages/sv-project-detail.js.map +1 -1
  30. package/dist-client/pages/sv-project-update.js +98 -31
  31. package/dist-client/pages/sv-project-update.js.map +1 -1
  32. package/dist-client/shared/complete-api.d.ts +7 -0
  33. package/dist-client/shared/complete-api.js +27 -0
  34. package/dist-client/shared/complete-api.js.map +1 -1
  35. package/dist-client/shared/project-axis.d.ts +23 -0
  36. package/dist-client/shared/project-axis.js +42 -0
  37. package/dist-client/shared/project-axis.js.map +1 -0
  38. package/dist-client/shared/sentiment-index.d.ts +47 -0
  39. package/dist-client/shared/sentiment-index.js +119 -0
  40. package/dist-client/shared/sentiment-index.js.map +1 -0
  41. package/dist-client/tsconfig.tsbuildinfo +1 -1
  42. package/dist-server/index.js +14 -0
  43. package/dist-server/index.js.map +1 -1
  44. package/dist-server/scripts/load-grade-data-migration.js +17 -3
  45. package/dist-server/scripts/load-grade-data-migration.js.map +1 -1
  46. package/dist-server/scripts/propagate-parent-kpi-values.js +13 -2
  47. package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -1
  48. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +22 -0
  49. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +93 -1
  50. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -1
  51. package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +9 -9
  52. package/dist-server/service/kpi-stat/kpi-stat-query.js +71 -84
  53. package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -1
  54. package/dist-server/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +5 -5
  56. package/schema.graphql +2011 -67
package/schema.graphql CHANGED
@@ -70,10 +70,19 @@ type Activity {
70
70
  client: User
71
71
  createdAt: DateTimeISO
72
72
  creator: User
73
+
74
+ """Which input values an approver judges by, and the part each one plays"""
75
+ decisionKeys: [ActivityDecisionKeyItem!]
73
76
  description: String
74
77
  domain: Domain
75
78
  id: ID!
76
79
  issuerRole: Role
80
+
81
+ """Display name for a person. `name` is the callback key."""
82
+ label: String
83
+
84
+ """i18n key the label is translated from, computed from name"""
85
+ labelTKey: String!
77
86
  model: [ActivityModelItem!]
78
87
 
79
88
  """
@@ -82,6 +91,11 @@ type Activity {
82
91
  multiple: String
83
92
  name: String
84
93
  priority: Float
94
+
95
+ """
96
+ true when a rejection closes the case for good — it cannot be restarted
97
+ """
98
+ rejectionIsFinal: Boolean
85
99
  reportSource: String
86
100
 
87
101
  """The type of report to be shown when a task is approved"""
@@ -126,6 +140,11 @@ type ActivityApproval {
126
140
  approver: User
127
141
  approverRole: Role
128
142
  comment: String
143
+
144
+ """
145
+ When the opinion was said. Empty means nothing was said — silence is not consent.
146
+ """
147
+ commentedAt: DateTimeISO
129
148
  createdAt: DateTimeISO
130
149
  creator: User
131
150
  derivedApprovals: [ActivityApproval!]!
@@ -138,6 +157,11 @@ type ActivityApproval {
138
157
 
139
158
  """delegator approval"""
140
159
  originalApproval: ActivityApproval
160
+
161
+ """
162
+ In what capacity: approval decides, reference only comments. Empty means approval.
163
+ """
164
+ participation: String
141
165
  round: Float
142
166
  terminatedAt: DateTimeISO
143
167
  terminator: User
@@ -151,15 +175,67 @@ type ActivityApprovalList {
151
175
  total: Int!
152
176
  }
153
177
 
178
+ """Entity for ActivityDecisionKeyItem"""
179
+ type ActivityDecisionKeyItem {
180
+ """
181
+ Dotted path to the value inside the instance's input, e.g. 'shift.passes'
182
+ """
183
+ inputPath: String!
184
+
185
+ """Developer-facing note. Never shown on a screen."""
186
+ name: String
187
+
188
+ """sentence placeholder → inputPath"""
189
+ params: Object
190
+ role: ActivityDecisionRole!
191
+
192
+ """i18n key for the label. Without it the screen shows no label."""
193
+ tKey: String
194
+
195
+ """Unit to print after the value, when the activity fixes the unit"""
196
+ unit: String
197
+
198
+ """i18n key for the value sentence: approval.<door>.<inputPath>"""
199
+ valueTKey: String
200
+ }
201
+
202
+ """the part an input value plays on the approval screen"""
203
+ enum ActivityDecisionRole {
204
+ consequence
205
+ currentState
206
+ evidence
207
+ headline
208
+ reason
209
+ reversibility
210
+ subject
211
+ }
212
+
154
213
  type ActivityEvent {
214
+ basis: ActivityEventDateBasis
155
215
  date: DateTimeISO
156
216
  id: String
157
217
  name: String
158
218
  priority: Float
159
- state: String
219
+ state: ActivityEventStatus
160
220
  type: String
161
221
  }
162
222
 
223
+ """what the date of an Activity Event means"""
224
+ enum ActivityEventDateBasis {
225
+ Due
226
+ HandedOver
227
+ Terminated
228
+ }
229
+
230
+ """state enumeration of a Activity Event"""
231
+ enum ActivityEventStatus {
232
+ Aborted
233
+ Approved
234
+ Done
235
+ Pending
236
+ Rejected
237
+ }
238
+
163
239
  """Entity for ActivityInstance"""
164
240
  type ActivityInstance {
165
241
  activity: Activity
@@ -190,6 +266,9 @@ type ActivityInstance {
190
266
  priority: Float
191
267
  reason: String
192
268
  refBy: String
269
+
270
+ """true when a rejection closes this case for good"""
271
+ rejectionIsFinal: Boolean
193
272
  startedAt: DateTimeISO
194
273
  starter: User
195
274
  state: String
@@ -297,6 +376,14 @@ input ActivityInstanceIssue {
297
376
  priority: Float
298
377
  reason: String
299
378
  refBy: String
379
+
380
+ """true when a rejection closes this case for good"""
381
+ rejectionIsFinal: Boolean
382
+
383
+ """
384
+ true when the caller expects this to go through an approval line — issuing fails if the line is empty
385
+ """
386
+ requireApproval: Boolean
300
387
  supervisoryRole: ObjectRef
301
388
  threadsMax: Int
302
389
  threadsMin: Int
@@ -345,6 +432,7 @@ input ActivityPatch {
345
432
  assigneeRole: ObjectRef
346
433
  assignees: Object
347
434
  cuFlag: String
435
+ decisionKeys: Object
348
436
  description: String
349
437
  id: ID
350
438
  issuerRole: ObjectRef
@@ -352,6 +440,11 @@ input ActivityPatch {
352
440
  multiple: String
353
441
  name: String
354
442
  priority: Float
443
+
444
+ """
445
+ true when a rejection closes the case for good — it cannot be restarted
446
+ """
447
+ rejectionIsFinal: Boolean
355
448
  reportSource: String
356
449
  reportType: String
357
450
  schedule: String
@@ -369,6 +462,37 @@ input ActivityPatch {
369
462
  viewType: String
370
463
  }
371
464
 
465
+ """What the registering module declares about an installable activity"""
466
+ type ActivityReadiness {
467
+ """What is still missing, when the stage is partial"""
468
+ gaps: [String!]
469
+
470
+ """Result of the last recorded run of those tests"""
471
+ lastRun: ActivityTestRecord
472
+
473
+ """Anything a reader needs that the fields above do not carry"""
474
+ notes: String
475
+
476
+ """Working, partial, or declared only"""
477
+ stage: ActivityReadinessStage
478
+
479
+ """
480
+ Repo-relative test files that cover this activity. Named so the claim can be checked.
481
+ """
482
+ tests: [String!]
483
+ }
484
+
485
+ """
486
+ how far along an installable activity is, as declared by the module that registers it
487
+ """
488
+ enum ActivityReadinessStage {
489
+ Declared
490
+ NotWorklist
491
+ Partial
492
+ Planned
493
+ Working
494
+ }
495
+
372
496
  """Entity for ActivitySearchKeyItem"""
373
497
  type ActivitySearchKeyItem {
374
498
  description: String
@@ -436,6 +560,21 @@ input ActivityTemplatePatch {
436
560
  visibility: String
437
561
  }
438
562
 
563
+ """Recorded result of the test run that covers an installable activity"""
564
+ type ActivityTestRecord {
565
+ """When that run happened, ISO 8601"""
566
+ at: String
567
+
568
+ """The command that produced this record"""
569
+ command: String
570
+
571
+ """How many of the covering tests passed"""
572
+ passed: Float
573
+
574
+ """How many covering tests ran"""
575
+ total: Float
576
+ }
577
+
439
578
  """Entity for ActivityThread"""
440
579
  type ActivityThread {
441
580
  activityApprovals: [ActivityApproval!]!
@@ -497,6 +636,46 @@ input ActivityThreadSave {
497
636
  output: Object
498
637
  }
499
638
 
639
+ """
640
+ Whether this deployment has an AI, and what its registrations are missing.
641
+ """
642
+ type AiCapabilityView {
643
+ """The default model this deployment would use."""
644
+ model: String
645
+
646
+ """Which provider answers."""
647
+ provider: String
648
+
649
+ """
650
+ Why it is not configured: no-config · no-provider · unknown-provider · no-adapter.
651
+ """
652
+ reason: String
653
+
654
+ """
655
+ 'configured' or 'not-configured'. A screen that has not asked yet knows a third state of its own: it does not know.
656
+ """
657
+ state: String!
658
+
659
+ """
660
+ Tools with no declared privilege, and modes offering work their tools cannot do.
661
+ """
662
+ warnings: [AiRegistrationWarning!]!
663
+ }
664
+
665
+ """
666
+ A registration that was accepted but is not yet what the contract asks for.
667
+ """
668
+ type AiRegistrationWarning {
669
+ """What is missing, as a code — never prose a screen has to parse."""
670
+ code: String!
671
+
672
+ """The same thing in a sentence, for whoever reads a boot log."""
673
+ message: String!
674
+
675
+ """Which registration it is about (category, tool, mode, slash)."""
676
+ params: JSON!
677
+ }
678
+
500
679
  """
501
680
  A flexible scalar type that can represent any GraphQL value, including String, Boolean, Int, Float, Object, or List. Use this type for fields or arguments that may accept or return various data types.
502
681
  """
@@ -528,6 +707,11 @@ type AppBinding {
528
707
  """Locale or language preference for the user."""
529
708
  locale: String
530
709
 
710
+ """
711
+ When the account was locked. With the configured lock duration this says when it lifts.
712
+ """
713
+ lockedAt: DateTimeISO
714
+
531
715
  """Full name of the user."""
532
716
  name: String
533
717
 
@@ -778,6 +962,8 @@ type ApprovalLine {
778
962
  """Entity for approval line item"""
779
963
  type ApprovalLineItem {
780
964
  approver: OrgMemberTarget
965
+ notifyAfter: Int
966
+ participation: ApprovalParticipation
781
967
  type: String
782
968
  value: String
783
969
  }
@@ -816,12 +1002,159 @@ input ApprovalLinePatch {
816
1002
  ownerType: ApprovalLineOwnerType
817
1003
  }
818
1004
 
1005
+ """
1006
+ in what capacity this member joins the approval line: approval decides, reference only comments
1007
+ """
1008
+ enum ApprovalParticipation {
1009
+ Approval
1010
+ Reference
1011
+ }
1012
+
819
1013
  type AssigneeItem {
820
1014
  assignee: OrgMemberTarget
821
1015
  type: OrgMemberTargetType
822
1016
  value: String
823
1017
  }
824
1018
 
1019
+ """One turn of a conversation that has no document of its own."""
1020
+ input AssistantChatInput {
1021
+ """
1022
+ What this surface is looking at (e.g. { figureId } while modelling). Tools read it so the model never has to ask the user for identifiers. Client-supplied — never used for authorization; a tool verifies the scope belongs to the caller tenant.
1023
+ """
1024
+ hostContext: JSON
1025
+
1026
+ """
1027
+ Conversation, newest last. For a persisted session only the last user message is appended; the rest is read from storage.
1028
+ """
1029
+ messages: [AssistantMessageInput!]!
1030
+
1031
+ """
1032
+ Which conversation this is. The persona, the tool categories, the model and the limits come from the mode the app server registered (ADR-0061 decision 7) — a caller choosing its own tool categories would be a caller choosing its own authority.
1033
+ """
1034
+ mode: AssistantModeInput!
1035
+
1036
+ """ChatSession id. Omit for a one-off question with no persistence."""
1037
+ sessionId: String
1038
+
1039
+ """
1040
+ Last message to keep from the stored history. The client keeps its own truncation when a user edits a message, so pass the last kept id to hide the retracted span from the model.
1041
+ """
1042
+ truncateAfterMessageId: String
1043
+ }
1044
+
1045
+ type AssistantChatOutput {
1046
+ """Stored ChatMessage id of the reply."""
1047
+ assistantMessageId: String
1048
+
1049
+ """AI client identifier (provider:model)."""
1050
+ clientId: String!
1051
+
1052
+ """
1053
+ Identifiers in the reply that appear in nothing the model received. Hallucination candidates surfaced to the user; the reply itself is not altered. Null when the answer is grounded.
1054
+ """
1055
+ groundingWarnings: JSON
1056
+
1057
+ """
1058
+ Set when this turn did not fit: { omitted, summarized } — how many earlier messages the model did not see, and whether a summary stood in for them. Without it the person watches the conversation lose its beginning in silence, while the model is told.
1059
+ """
1060
+ historyFolded: JSON
1061
+
1062
+ """
1063
+ Tool names offered to the model this turn. A surface that expected a category and sees it missing here knows the registration did not happen, rather than reading a vague answer as a refusal.
1064
+ """
1065
+ offeredTools: [String!]
1066
+
1067
+ """
1068
+ Actions a tool recorded without executing — each carries what the tool returned alongside `proposed: true`. The surface renders a confirm button; executing is the user's act.
1069
+ """
1070
+ proposals: JSON
1071
+
1072
+ """The reply, including the notice when the loop stopped early."""
1073
+ reply: String!
1074
+
1075
+ """Echo of the session id, when persisted."""
1076
+ sessionId: String
1077
+
1078
+ """
1079
+ Tool usages during the turn — {name, arguments, result, kind}. The surface shows them foldably.
1080
+ """
1081
+ toolUsages: JSON
1082
+
1083
+ """Stored ChatMessage id of the user input."""
1084
+ userMessageId: String
1085
+ }
1086
+
1087
+ input AssistantMessageInput {
1088
+ """Message content"""
1089
+ content: String!
1090
+
1091
+ """Role: 'user' or 'assistant'"""
1092
+ role: String!
1093
+ }
1094
+
1095
+ """A conversation a screen may open for what it is showing."""
1096
+ type AssistantModeChoice {
1097
+ """Whether this is the one to open when the person has not chosen."""
1098
+ isDefault: Boolean!
1099
+
1100
+ """The mode kind to open."""
1101
+ kind: String!
1102
+
1103
+ """
1104
+ What to call it where a person chooses — already in the words of this request.
1105
+ """
1106
+ label: String!
1107
+ }
1108
+
1109
+ """Which conversation this is, and what it is about."""
1110
+ input AssistantModeInput {
1111
+ """
1112
+ A mode kind the app server registered — `<app>.<surface>`, e.g. "twin.space".
1113
+ """
1114
+ kind: String!
1115
+
1116
+ """
1117
+ What this conversation is about — the space, the station, the model being edited. With `kind` it is the conversation's lifetime: when either changes the screen closes the conversation and starts another.
1118
+ """
1119
+ target: String
1120
+ }
1121
+
1122
+ """One `/` sentence, in the words of this request."""
1123
+ type AssistantModeSlashView {
1124
+ """One line about what it does."""
1125
+ description: String!
1126
+
1127
+ """Short name shown in the list."""
1128
+ name: String!
1129
+
1130
+ """The sentence that lands in the input."""
1131
+ template: String!
1132
+ }
1133
+
1134
+ """What a conversation offers on screen."""
1135
+ type AssistantModeView {
1136
+ """What `@` offers."""
1137
+ catalogEntries: JSON!
1138
+
1139
+ """The line under an empty conversation."""
1140
+ footerNotice: String
1141
+
1142
+ """The mode kind this describes."""
1143
+ kind: String!
1144
+
1145
+ """What the empty input says — what this conversation is for."""
1146
+ placeholder: String
1147
+
1148
+ """Follow-up chips for a proposal that arrived without its own."""
1149
+ proposalChoices: JSON!
1150
+
1151
+ """What `/` offers."""
1152
+ slashTemplates: [AssistantModeSlashView!]!
1153
+
1154
+ """The line shown once the host reports a proposal staged."""
1155
+ stagedNotice: String
1156
+ }
1157
+
825
1158
  type Attachment {
826
1159
  category: String
827
1160
  createdAt: DateTimeISO!
@@ -1182,6 +1515,11 @@ type Board {
1182
1515
  }
1183
1516
 
1184
1517
  input BoardAIChatInput {
1518
+ """
1519
+ Whether core board editing tools (addComponent / styling / scene actions) are available. Defaults to true. Set false for surfaces that must not modify the board — e.g. an operations chat where irreversible commands live, so reversible edits and irreversible actions never share one conversation.
1520
+ """
1521
+ boardTools: Boolean
1522
+
1185
1523
  """
1186
1524
  Component categories to surface (e.g. ["3D", "form"]). Subset filter for groupings exposed in component-schemas.
1187
1525
  """
@@ -1195,6 +1533,11 @@ input BoardAIChatInput {
1195
1533
  """Current BoardModel JSON."""
1196
1534
  currentBoard: JSON
1197
1535
 
1536
+ """
1537
+ Host context describing what this surface is looking at (e.g. { spaceId } for a space deliberation, { boardId } for board authoring). Tools read it as ctx.state.host so the model never has to ask the user for identifiers. Client-supplied — never used for authorization; tools verify the scope belongs to the caller tenant.
1538
+ """
1539
+ hostContext: JSON
1540
+
1198
1541
  """
1199
1542
  Component types the LLM is allowed to emit (e.g. ["rect", "label"]). Constrains generation to the current solution.
1200
1543
  """
@@ -1220,6 +1563,11 @@ input BoardAIChatInput {
1220
1563
  """
1221
1564
  model: String
1222
1565
 
1566
+ """
1567
+ Force a tool call on the first turn (toolChoice: required). Turn this on for surfaces that discuss live state: the grounding guard catches invented identifiers but not an invented situation stated without any, which only happens when the model answers without querying at all. Concept / how-to questions are unaffected — they are answered through a documentation tool.
1568
+ """
1569
+ requireGroundingTools: Boolean
1570
+
1223
1571
  """
1224
1572
  Capability scopes the AI is allowed to use (e.g. 'create', 'edit', 'style'). Filters which tools are exposed to the LLM.
1225
1573
  """
@@ -1239,14 +1587,29 @@ input BoardAIChatInput {
1239
1587
  Sampling temperature override. Falls back to assistant default when omitted.
1240
1588
  """
1241
1589
  temperature: Float
1590
+
1591
+ """
1592
+ Registered external tool categories this conversation may use (registerToolCategory names, e.g. ["twin", "board-import"]). Omit to allow every registered category. Applies to tool definitions AND execution, so a surface cannot call a category it was not granted.
1593
+ """
1594
+ toolCategories: [String!]
1595
+
1596
+ """
1597
+ Id of the last message to keep from the stored history. The client keeps its own truncation when a user edits a message (the server history is intentionally preserved), so pass the last kept message id to hide the retracted span from the agent. Omit to use the whole stored history.
1598
+ """
1599
+ truncateAfterMessageId: String
1242
1600
  }
1243
1601
 
1244
1602
  type BoardAIChatOutput {
1245
1603
  """
1246
- 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.
1604
+ Ephemeral scene actions (selection/view/mode) — sequence of SceneActionOp. Applied via scene-action-execute event on the host. Distinct from `patch` which carries persistent model changes.
1247
1605
  """
1248
1606
  actions: JSON
1249
1607
 
1608
+ """
1609
+ Grounded analysis contract for this turn: scope, evidence-backed claims, limitations, proposal and explicit approval boundary. Null when the turn did not perform an analysis.
1610
+ """
1611
+ analysis: JSON
1612
+
1250
1613
  """Persisted ChatMessage id of the AI reply."""
1251
1614
  assistantMessageId: String
1252
1615
 
@@ -1256,12 +1619,27 @@ type BoardAIChatOutput {
1256
1619
  """Clarifying question when input is ambiguous."""
1257
1620
  followUp: String
1258
1621
 
1259
- """BoardEditPatch."""
1622
+ """
1623
+ Ungrounded identifiers mentioned by the reply — present in the answer but absent from everything the model received (prompt, board context, history, tool results). Hallucination candidates surfaced to the user; the reply itself is not altered. Null when the answer is grounded.
1624
+ """
1625
+ groundingWarnings: JSON
1626
+
1627
+ """
1628
+ Reported when the stored history exceeded the prompt cap for this turn: { omitted, summarized }. The surface uses it to tell the user the conversation grew long — a new conversation is better for a different topic. Objective fact only; no topic-change detection.
1629
+ """
1630
+ historyFolded: JSON
1631
+
1632
+ """SceneEditPatch."""
1260
1633
  patch: JSON
1261
1634
 
1262
1635
  """Persisted PatchEntry id (when patch was generated)."""
1263
1636
  patchId: String
1264
1637
 
1638
+ """
1639
+ Action proposals the AI recorded without executing — each carries what a tool returned alongside `proposed: true`. The surface renders a confirm button; execution is the user's act, never the assistant's. Null when nothing was proposed.
1640
+ """
1641
+ proposals: JSON
1642
+
1265
1643
  """Conversational reply."""
1266
1644
  reply: String!
1267
1645
 
@@ -1295,6 +1673,21 @@ input BoardAIMentionPickInput {
1295
1673
  token: String!
1296
1674
  }
1297
1675
 
1676
+ """A single component difference between two board versions."""
1677
+ type BoardComponentDiff {
1678
+ """The kind of change: 'added', 'removed', or 'modified'."""
1679
+ changeType: String!
1680
+
1681
+ """Names of the properties that changed (for modified components)."""
1682
+ changedProps: [String!]
1683
+
1684
+ """The refid of the component (identity used for diffing)."""
1685
+ refid: Int
1686
+
1687
+ """The component type (e.g. rect, text, table)."""
1688
+ type: String
1689
+ }
1690
+
1298
1691
  """Represents a board that a user has marked as a favorite."""
1299
1692
  type BoardFavorite {
1300
1693
  """The timestamp when the board was created."""
@@ -1380,6 +1773,9 @@ type BoardHistory {
1380
1773
  """
1381
1774
  action: String!
1382
1775
 
1776
+ """The release note/comment left when this version was published."""
1777
+ comment: String
1778
+
1383
1779
  """The creation timestamp of the original board."""
1384
1780
  createdAt: DateTimeISO
1385
1781
 
@@ -1555,6 +1951,31 @@ input BoardTemplatePatch {
1555
1951
  visibility: String
1556
1952
  }
1557
1953
 
1954
+ """
1955
+ The difference between two board versions (or a version and the current draft).
1956
+ """
1957
+ type BoardVersionDiff {
1958
+ """Number of components added."""
1959
+ addedCount: Int!
1960
+
1961
+ """Component-level changes."""
1962
+ componentDiffs: [BoardComponentDiff!]!
1963
+
1964
+ """The base version number being compared from."""
1965
+ fromVersion: Int!
1966
+
1967
+ """Number of components modified."""
1968
+ modifiedCount: Int!
1969
+
1970
+ """Number of components removed."""
1971
+ removedCount: Int!
1972
+
1973
+ """
1974
+ The target version number being compared to. Null means the current draft.
1975
+ """
1976
+ toVersion: Int
1977
+ }
1978
+
1558
1979
  """동 정보"""
1559
1980
  type Building {
1560
1981
  basementFloorCount: Float
@@ -1851,8 +2272,24 @@ input BuildingPatch {
1851
2272
  name: String
1852
2273
  }
1853
2274
 
2275
+ """채팅 실시간 이벤트"""
2276
+ type ChatEvent {
2277
+ action: String
2278
+ event: String!
2279
+ lastReadAt: DateTimeISO
2280
+ message: ChatRoomMessage
2281
+ messageId: ID
2282
+ roomId: ID!
2283
+ userId: ID
2284
+ }
2285
+
1854
2286
  """A single chat message in a ChatSession."""
1855
2287
  type ChatMessage {
2288
+ """
2289
+ Who this turn was for: 'assistant' | 'room'. Written by the door that stored it, never sent by the client.
2290
+ """
2291
+ addressee: String
2292
+
1856
2293
  """Message content"""
1857
2294
  content: String!
1858
2295
 
@@ -1864,6 +2301,16 @@ type ChatMessage {
1864
2301
 
1865
2302
  """Soft delete timestamp."""
1866
2303
  deletedAt: DateTimeISO
2304
+
2305
+ """
2306
+ GraphQL doors the tools behind this answer went through. Empty for what people typed. A reader who does not pass all of them gets a one-line notice in place of the content.
2307
+ """
2308
+ doors: [String!]
2309
+
2310
+ """
2311
+ Ungrounded identifiers mentioned by this reply (hallucination candidates). Null when grounded.
2312
+ """
2313
+ groundingWarningsJson: JSON
1867
2314
  id: ID
1868
2315
 
1869
2316
  """
@@ -1871,6 +2318,11 @@ type ChatMessage {
1871
2318
  """
1872
2319
  parentMessageId: String
1873
2320
 
2321
+ """
2322
+ True when the content was replaced because this reader does not pass the row doors.
2323
+ """
2324
+ redacted: Boolean
2325
+
1874
2326
  """ImportSession.id this message triggered (if any)."""
1875
2327
  relatedImportSessionId: String
1876
2328
 
@@ -1892,40 +2344,183 @@ type ChatMessage {
1892
2344
  updater: User
1893
2345
  }
1894
2346
 
1895
- """AI 협력 세션 — Board 와 결합. 한 보드에 여러 세션 가능 (thread / 사용자별 / 컨텍스트별 등 미래 확장)."""
1896
- type ChatSession {
1897
- aiClientId: String
1898
-
1899
- """
1900
- Connected Board id. Multiple sessions per board allowed (future: threads / per-user / contexts).
1901
- """
1902
- boardId: String
2347
+ """채팅 대화방"""
2348
+ type ChatRoom {
1903
2349
  createdAt: DateTimeISO
1904
-
1905
- """User who created this session."""
1906
2350
  creator: User
1907
2351
  domain: Domain
1908
- id: ID
1909
-
1910
- """Compressed summary of older messages (for token saving)."""
1911
- lastSummary: String
2352
+ id: ID!
2353
+ lastMessageAt: DateTimeISO
2354
+ lastMessagePreview: String
1912
2355
 
1913
- """User-given name of this session (tab label / identification)."""
2356
+ """대화방 멤버 목록"""
2357
+ members: [ChatRoomMember!]!
1914
2358
  name: String
1915
- updatedAt: DateTimeISO
1916
2359
 
1917
- """User who last updated this session."""
1918
- updater: User
2360
+ """내가 읽은 메시지 """
2361
+ unreadCount: Float!
2362
+ updatedAt: DateTimeISO
1919
2363
  }
1920
2364
 
1921
- """
1922
- Participant of a ChatSession — links a User to a session with a role. Foundation for multi-user chat / per-user filtering / member display.
1923
- """
1924
- type ChatSessionParticipant {
1925
- """Joined-at timestamp."""
2365
+ """채팅 대화방 멤버"""
2366
+ type ChatRoomMember {
1926
2367
  createdAt: DateTimeISO
2368
+ domain: Domain
2369
+ id: ID!
2370
+ lastReadAt: DateTimeISO
1927
2371
 
1928
- """
2372
+ """온라인 여부 (하트비트 60초 이내)"""
2373
+ online: Boolean!
2374
+ room: ChatRoom
2375
+ user: User
2376
+ userId: ID
2377
+ }
2378
+
2379
+ """채팅 메시지"""
2380
+ type ChatRoomMessage {
2381
+ """첨부파일 목록"""
2382
+ attachments: [Attachment!]!
2383
+ createdAt: DateTimeISO
2384
+ deletedAt: DateTimeISO
2385
+ domain: Domain
2386
+ editedAt: DateTimeISO
2387
+ id: ID!
2388
+ message: String
2389
+ replyTo: ChatRoomMessage
2390
+ room: ChatRoom
2391
+ sender: User
2392
+ type: ChatRoomMessageType
2393
+ }
2394
+
2395
+ """채팅 메시지 타입 (TEXT=일반, SYSTEM=초대/나가기/이름변경 안내)"""
2396
+ enum ChatRoomMessageType {
2397
+ SYSTEM
2398
+ TEXT
2399
+ }
2400
+
2401
+ """
2402
+ One AI conversation, anchored to what it is about. An anchor may have several — threads, one per person, one per context.
2403
+ """
2404
+ type ChatSession {
2405
+ aiClientId: String
2406
+
2407
+ """Id of the anchored target (board id / space id / instance id)."""
2408
+ anchorId: String
2409
+
2410
+ """
2411
+ What this conversation is anchored to: 'board' | 'figure' (authoring a Figure) | 'space' | 'instance' | 'domain' | 'none'. Absent on legacy rows — treated as 'board' when boardId is present.
2412
+ """
2413
+ anchorType: String
2414
+
2415
+ """
2416
+ Connected Board id. Multiple sessions per board allowed (future: threads / per-user / contexts). Kept for backward compatibility — board-anchored sessions dual-write this alongside anchorId.
2417
+ """
2418
+ boardId: String
2419
+ createdAt: DateTimeISO
2420
+
2421
+ """User who created this session."""
2422
+ creator: User
2423
+ domain: Domain
2424
+ id: ID
2425
+
2426
+ """
2427
+ Timestamp of the last message in this session (denormalized for list ordering and unread comparison — avoids per-session aggregation across the supported DB drivers).
2428
+ """
2429
+ lastMessageAt: DateTimeISO
2430
+
2431
+ """
2432
+ Doors of the message the preview came from — the session list passes the same gate as the conversation.
2433
+ """
2434
+ lastMessageDoors: [String!]
2435
+
2436
+ """
2437
+ Short preview of the last message, stored so the session list does not need to query messages.
2438
+ """
2439
+ lastMessagePreview: String
2440
+
2441
+ """Compressed summary of older messages (for token saving)."""
2442
+ lastSummary: String
2443
+
2444
+ """User-given name of this session (tab label / identification)."""
2445
+ name: String
2446
+
2447
+ """
2448
+ Id of the last message folded into lastSummary — enables incremental summarization instead of re-reading the whole history.
2449
+ """
2450
+ summaryUpToMessageId: String
2451
+ updatedAt: DateTimeISO
2452
+
2453
+ """User who last updated this session."""
2454
+ updater: User
2455
+
2456
+ """
2457
+ Who may read this conversation: 'open' (anyone in the domain) or 'private' (participants only).
2458
+ """
2459
+ visibility: String!
2460
+ }
2461
+
2462
+ """
2463
+ Session list entry for the inbox — a session plus this viewer's unread state. Ordered by recent activity so a user can find where to go back to.
2464
+ """
2465
+ type ChatSessionInboxEntry {
2466
+ """Id of the anchored target."""
2467
+ anchorId: String
2468
+
2469
+ """
2470
+ What the session is anchored to: 'board' | 'space' | 'instance' | 'none'.
2471
+ """
2472
+ anchorType: String
2473
+
2474
+ """Connected board id (board-anchored sessions)."""
2475
+ boardId: String
2476
+
2477
+ """Session creation timestamp."""
2478
+ createdAt: DateTimeISO
2479
+
2480
+ """
2481
+ Whether this viewer hid the session from their own list (only returned when showHidden is on).
2482
+ """
2483
+ hidden: Boolean
2484
+
2485
+ """Session id."""
2486
+ id: ID
2487
+
2488
+ """Timestamp of the last message (list ordering / unread comparison)."""
2489
+ lastMessageAt: DateTimeISO
2490
+
2491
+ """Short preview of the last message."""
2492
+ lastMessagePreview: String
2493
+
2494
+ """
2495
+ Whether this viewer created the session — only the creator may delete it.
2496
+ """
2497
+ mine: Boolean!
2498
+
2499
+ """User-given session name (tab label)."""
2500
+ name: String
2501
+
2502
+ """
2503
+ Whether this viewer is a participant of the session (non-participants get no unread state).
2504
+ """
2505
+ participant: Boolean!
2506
+
2507
+ """
2508
+ True when the preview was replaced because this reader does not pass the doors of the message it came from.
2509
+ """
2510
+ previewRedacted: Boolean
2511
+
2512
+ """Whether this viewer has unread activity in the session."""
2513
+ unread: Boolean!
2514
+ }
2515
+
2516
+ """
2517
+ Participant of a ChatSession — links a User to a session with a role. Foundation for multi-user chat / per-user filtering / member display.
2518
+ """
2519
+ type ChatSessionParticipant {
2520
+ """Joined-at timestamp."""
2521
+ createdAt: DateTimeISO
2522
+
2523
+ """
1929
2524
  User who created this participant record (typically session owner who invited).
1930
2525
  """
1931
2526
  creator: User
@@ -1936,9 +2531,19 @@ type ChatSessionParticipant {
1936
2531
  """Domain to which this participant belongs."""
1937
2532
  domain: Domain
1938
2533
 
2534
+ """
2535
+ When this user hid the session from their own list. Per-user only; the session and other participants are unaffected. Activity newer than this timestamp makes it reappear.
2536
+ """
2537
+ hiddenAt: DateTimeISO
2538
+
1939
2539
  """Unique participant id."""
1940
2540
  id: ID!
1941
2541
 
2542
+ """
2543
+ Point up to which this participant has read the session. Distinct from lastSeenAt (presence): a window can be open without being read, and the read point survives disconnection. Null means nothing read yet.
2544
+ """
2545
+ lastReadAt: DateTimeISO
2546
+
1942
2547
  """Last seen / activity timestamp (presence indicator)."""
1943
2548
  lastSeenAt: DateTimeISO
1944
2549
 
@@ -2090,6 +2695,13 @@ type ChecklistItem {
2090
2695
  updater: User
2091
2696
  }
2092
2697
 
2698
+ input ChecklistItemAiJudgment {
2699
+ id: ID!
2700
+
2701
+ """AI 판정 결과 (T: 적합, F: 부적합, null: 미판정)"""
2702
+ supervisoryConfirmStatus: ChecklistItemConfirmStatus
2703
+ }
2704
+
2093
2705
  """Entity for ChecklistItemComment"""
2094
2706
  type ChecklistItemComment {
2095
2707
  checklistItem: ChecklistItem
@@ -2106,6 +2718,12 @@ input ChecklistItemCommentPatch {
2106
2718
  id: ID
2107
2719
  }
2108
2720
 
2721
+ """적합 상태"""
2722
+ enum ChecklistItemConfirmStatus {
2723
+ F
2724
+ T
2725
+ }
2726
+
2109
2727
  """History Entity of ChecklistItem"""
2110
2728
  type ChecklistItemHistory {
2111
2729
  checklistHistory: ChecklistHistory
@@ -3689,6 +4307,11 @@ type Department {
3689
4307
  """Pagination options for the list query."""
3690
4308
  pagination: Pagination
3691
4309
 
4310
+ """
4311
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
4312
+ """
4313
+ search: String
4314
+
3692
4315
  """Sorting options for the list query."""
3693
4316
  sortings: [Sorting!]
3694
4317
  ): [Department!]!
@@ -3972,6 +4595,46 @@ input DomainUserRoleInput {
3972
4595
  users: [NewUserByDomainWizardInput!]!
3973
4596
  }
3974
4597
 
4598
+ """Entity for DrawingBundle"""
4599
+ type DrawingBundle {
4600
+ analyzedAt: DateTimeISO
4601
+ archPageCount: Float
4602
+ archPdf: Attachment
4603
+ createdAt: DateTimeISO
4604
+ creator: User
4605
+ domain: Domain
4606
+ drawings: Object
4607
+ error: String
4608
+ grid: Object
4609
+ id: ID!
4610
+ manifest: Object
4611
+ packages: Object
4612
+ pages: [Attachment!]
4613
+ project: Project
4614
+ status: DrawingBundleStatus
4615
+ structPageCount: Float
4616
+ structPdf: Attachment
4617
+ updatedAt: DateTimeISO
4618
+ updater: User
4619
+ version: String
4620
+ }
4621
+
4622
+ input DrawingBundlePatch {
4623
+ """건축 도면 PDF 업로드"""
4624
+ archPdfUpload: Upload
4625
+ projectId: String
4626
+
4627
+ """구조 도면 PDF 업로드"""
4628
+ structPdfUpload: Upload
4629
+ }
4630
+
4631
+ enum DrawingBundleStatus {
4632
+ ANALYZING
4633
+ DONE
4634
+ FAILED
4635
+ NONE
4636
+ }
4637
+
3975
4638
  """
3976
4639
  Represents a dynamic data summary with flexible key-value pairs for different summary periods.
3977
4640
  """
@@ -4367,7 +5030,7 @@ type EnvVarResolution {
4367
5030
  """외부 시스템(세움터/올바로/키스콘) 데이터 수집 시나리오 호출 결과"""
4368
5031
  type ExternalDataCollectionResult {
4369
5032
  """
4370
- 시나리오 result 객체 — projectKey: value 맵. 세움터={area, floorAreaRatio, upperFloorCount, lowerFloorCount, structureType, siteType}, 올바로={totalConstructionWasteAmount}, 키스콘={constructionPeriod, constructionCost}. siteType (건축물 용도, 예 APARTMENT_COMPLEX) / structureType (구조형태) 는 BuildingComplex 의 시설유형/구조유형 속성 후보. KISCON 의 "공사유형(신설/증축)" 은 DSSP SiteType (용도분류) 와 다른 도메인이라 매핑 대상 아님.
5033
+ 시나리오 result 객체 — projectKey: value 맵. 세움터={area, floorAreaRatio, upperFloorCount, lowerFloorCount, structureType, siteType}, 올바로={totalConstructionWasteAmount}, 키스콘={constructionPeriod, constructionCost}, 시공감리={area, floorAreaRatio, upperFloorCount, lowerFloorCount, constructionCost, workerCount, designChangeCount, constructionPeriod, actualConstructionPeriod, actualConstructionCost, accidentRate, accidentSeverityRate, inspectionCount, inspectionFailCount}. siteType (건축물 용도, 예 APARTMENT_COMPLEX) / structureType (구조형태) 는 BuildingComplex 의 시설유형/구조유형 속성 후보. KISCON 의 "공사유형(신설/증축)" 은 DSSP SiteType (용도분류) 와 다른 도메인이라 매핑 대상 아님.
4371
5034
  """
4372
5035
  data: Object
4373
5036
 
@@ -4672,8 +5335,28 @@ input InspectionPartPatch {
4672
5335
  type InstallableActivity {
4673
5336
  activity: Activity
4674
5337
  activityType: String
5338
+
5339
+ """
5340
+ How many approval steps this activity has in this domain. Steps, not people; references excluded.
5341
+ """
5342
+ approvalSteps: Int
4675
5343
  category: String
5344
+ decisionKeys: [ActivityDecisionKeyItem!]
4676
5345
  description: String
5346
+
5347
+ """
5348
+ What this work is, for the person who receives it. Plain sentences; translated through guideTKeys.
5349
+ """
5350
+ guide: [String!]
5351
+
5352
+ """One i18n key per guide line, in order, computed from name"""
5353
+ guideTKeys: [String!]!
5354
+
5355
+ """What to call this work on screen, when the key is not readable"""
5356
+ label: String
5357
+
5358
+ """i18n key the label is translated from, computed from name"""
5359
+ labelTKey: String!
4677
5360
  model: [ActivityModelItem!]
4678
5361
 
4679
5362
  """
@@ -4685,6 +5368,13 @@ type InstallableActivity {
4685
5368
 
4686
5369
  """Provider information of the Activity"""
4687
5370
  provider: String
5371
+ readiness: ActivityReadiness
5372
+
5373
+ """One i18n key per readiness.gaps line, in order, computed from name"""
5374
+ readinessGapTKeys: [String!]!
5375
+
5376
+ """i18n key readiness.notes is translated from, computed from name"""
5377
+ readinessNotesTKey: String!
4688
5378
 
4689
5379
  """Release information of the Activity"""
4690
5380
  release: String
@@ -6350,6 +7040,19 @@ type Mutation {
6350
7040
  """Add a user as owner of the current domain."""
6351
7041
  addDomainOwner(reason: String, username: String!): DomainOwner!
6352
7042
 
7043
+ """To announce a work shift arrangement that starts later"""
7044
+ announceWorkShift(effectiveFrom: DateTimeISO!, patches: [WorkShiftPatch!]!): WorkShiftRevision!
7045
+
7046
+ """
7047
+ Append a system note to a session — context that did not come from a participant typing (e.g. a conversation carried over from another surface, an external state change). The AI sees it as part of the shared history.
7048
+ """
7049
+ appendSessionNote(content: String!, sessionId: String!): Boolean!
7050
+
7051
+ """
7052
+ Carry a conversation from another surface into this session as its own turns, preserving order. A person's turns are stored as theirs, addressed to the room. An assistant turn is stored as the assistant's only when it names its original (sourceSessionId, sourceMessageId) and the server can read it; otherwise it is kept as a quotation on a system row — roles are the server's to write (ADR-0070).
7053
+ """
7054
+ appendSessionTurns(sessionId: String!, turns: JSON!): Boolean!
7055
+
6353
7056
  """To apply to all building inspection"""
6354
7057
  applyToAllBuildingInspection(buildingInspectionId: String!): Boolean!
6355
7058
 
@@ -6365,6 +7068,11 @@ type Mutation {
6365
7068
  reason: String
6366
7069
  ): ActivityInstance!
6367
7070
 
7071
+ """
7072
+ Ask the assistant a question on a surface that has no document of its own. Tools come from the registry; with a sessionId the conversation is persisted.
7073
+ """
7074
+ assistantChat(input: AssistantChatInput!): AssistantChatOutput!
7075
+
6368
7076
  """
6369
7077
  Attaches an existing contact to an employee. The contact is identified by its ID and the employee is identified by their ID.
6370
7078
  """
@@ -6401,6 +7109,12 @@ type Mutation {
6401
7109
  calculateRegionalStatistics(periodType: KpiPeriodType! = MONTH, valueDate: String!): [KpiStatistic!]!
6402
7110
  cancelInvitation(email: EmailAddress!, reference: String!, type: String!): Boolean!
6403
7111
 
7112
+ """To cancel an announced work shift arrangement"""
7113
+ cancelWorkShiftAnnouncement(id: String!): Boolean!
7114
+
7115
+ """온라인 상태 하트비트"""
7116
+ chatHeartbeat: Boolean!
7117
+
6404
7118
  """To clear translations cache"""
6405
7119
  clearTranslationsCache: Boolean!
6406
7120
 
@@ -6409,7 +7123,7 @@ type Mutation {
6409
7123
  """
6410
7124
  cloneBoard(id: String!, patch: BoardPatch!, targetGroupId: String, targetSubdomain: String!): Board!
6411
7125
 
6412
- """Run only 건축물관리대장조회 scenario for project basic info collection."""
7126
+ """Collect project basic info from 세움터 (건축물대장 주택인허가 fallback)."""
6413
7127
  collectProjectBasicInfo(address: String, projectId: String!): ExternalDataCollectionResult!
6414
7128
 
6415
7129
  """
@@ -6417,6 +7131,11 @@ type Mutation {
6417
7131
  """
6418
7132
  collectProjectExternalData(projectId: String!): [ExternalDataCollectionResult!]!
6419
7133
 
7134
+ """
7135
+ Copy project basic information from the construction supervision platform (DCSP), same database.
7136
+ """
7137
+ collectProjectSupervisionData(projectId: String!): ExternalDataCollectionResult!
7138
+
6420
7139
  """Establishes a live connection to a configured endpoint."""
6421
7140
  connectConnection(name: String!): Connection!
6422
7141
 
@@ -6431,6 +7150,19 @@ type Mutation {
6431
7150
  """
6432
7151
  copyScenarios(ids: [String!]!): [Scenario!]!
6433
7152
 
7153
+ """
7154
+ Always create a new AI chat session anchored to a target (no idempotent reuse). For multi-session UX — opening another tab.
7155
+ """
7156
+ createAISession(
7157
+ anchorId: String!
7158
+ anchorType: String!
7159
+
7160
+ """
7161
+ Optional name. Defaults to a generated one, numbered within the anchor.
7162
+ """
7163
+ name: String
7164
+ ): ChatSession!
7165
+
6434
7166
  """To create new ActionPlan"""
6435
7167
  createActionPlan(actionPlan: NewActionPlan!): ActionPlan!
6436
7168
 
@@ -6474,15 +7206,8 @@ type Mutation {
6474
7206
  """Create Daily Worklog by projectId+date"""
6475
7207
  createBuildingInspectionDailyWorklog(patch: BuildingInspectionDailyWorklogNew!): BuildingInspectionDailyWorklog!
6476
7208
 
6477
- """
6478
- Always create a new AI chat session for a board (no idempotent reuse). For multi-session UX — 새 탭 열기.
6479
- """
6480
- createChatSession(
6481
- boardId: String!
6482
-
6483
- """Optional name (defaults to auto-generated `세션 N`)."""
6484
- name: String
6485
- ): ChatSession!
7209
+ """대화방 생성 (1:1은 기존 방이 있으면 재사용)"""
7210
+ createChatRoom(name: String, userIds: [String!]!): ChatRoom!
6486
7211
 
6487
7212
  """To create new ChecklistItemComment"""
6488
7213
  createChecklistItemComment(checklistItemComment: NewChecklistItemComment!): ChecklistItemComment!
@@ -6672,7 +7397,7 @@ type Mutation {
6672
7397
  createProject(project: NewProject!): Project!
6673
7398
 
6674
7399
  """프로젝트 체크리스트 생성"""
6675
- createProjectChecklist(constructionDetailTypeId: String!, constructionTypeId: String!, items: [ProjectChecklistItemInput!]!, name: String!, projectId: String!, siteSpecPdfUrl: String): ProjectChecklist!
7400
+ createProjectChecklist(constructionDetailTypeId: String!, constructionTypeId: String!, items: [ProjectChecklistItemInput!]!, name: String!, projectId: String!): ProjectChecklist!
6676
7401
 
6677
7402
  """To create new ProjectReport"""
6678
7403
  createProjectReport(projectReport: NewProjectReport!): ProjectReport!
@@ -6680,8 +7405,11 @@ type Mutation {
6680
7405
  """To create new Resource"""
6681
7406
  createResource(resource: NewResource!): Resource!
6682
7407
 
6683
- """To create new user"""
6684
- createRole(role: NewRole!): User!
7408
+ """To create new role"""
7409
+ createRole(role: NewRole!): Role!
7410
+
7411
+ """To create a role from a role template"""
7412
+ createRoleFromTemplate(name: String, templateId: String!): Role!
6685
7413
 
6686
7414
  """Creates a new scenario."""
6687
7415
  createScenario(scenario: NewScenario!): Scenario!
@@ -6730,6 +7458,11 @@ type Mutation {
6730
7458
  """To delegate a ActivityThread"""
6731
7459
  delegateActivityThread(assignee: ObjectRef, dueAt: DateTimeISO, id: String!, reason: String): ActivityThread!
6732
7460
 
7461
+ """
7462
+ Delete a chat session — creator only, since a shared deliberation cannot be un-deleted from the UI. Participants who are not the creator can hide it from their own list instead (hideAISession). Soft delete; broadcast as meta activity so every list drops it.
7463
+ """
7464
+ deleteAISession(sessionId: String!): Boolean!
7465
+
6733
7466
  """To delete ActionPlan"""
6734
7467
  deleteActionPlan(id: String!): Boolean!
6735
7468
 
@@ -6804,6 +7537,9 @@ type Mutation {
6804
7537
  """To delete multiple Buildings"""
6805
7538
  deleteBuildings(ids: [String!]!): Boolean!
6806
7539
 
7540
+ """메시지 삭제 (본인 메시지만, 소프트 삭제)"""
7541
+ deleteChatRoomMessage(id: String!): Boolean!
7542
+
6807
7543
  """To delete ChecklistItemComment"""
6808
7544
  deleteChecklistItemComment(id: String!): Boolean!
6809
7545
 
@@ -7145,6 +7881,9 @@ type Mutation {
7145
7881
  """To delete multiple ProjectReports"""
7146
7882
  deleteProjectReports(ids: [String!]!): Boolean!
7147
7883
 
7884
+ """비밀번호 확인 후 프로젝트 삭제 (수퍼유저 전용, 테넌트 강등 상태에서만)"""
7885
+ deleteProjectWithPassword(password: String!, projectId: String!): Boolean!
7886
+
7148
7887
  """To delete Resource"""
7149
7888
  deleteResource(id: String!): Boolean!
7150
7889
 
@@ -7292,6 +8031,11 @@ type Mutation {
7292
8031
  getOauth2AuthUrl(id: String!): String!
7293
8032
  grantRoles(customerId: String!, roles: [RolePatch!]!): Boolean!
7294
8033
 
8034
+ """
8035
+ Hide (or unhide) a session from the calling user's own list. Per-user and reversible — the session and other participants are unaffected. Activity newer than the hide makes it reappear; the inbox filter (showHidden) reveals hidden ones.
8036
+ """
8037
+ hideAISession(hidden: Boolean, sessionId: String!): Boolean!
8038
+
7295
8039
  """To import multiple ActionPlans"""
7296
8040
  importActionPlans(actionPlans: [ActionPlanPatch!]!): Boolean!
7297
8041
 
@@ -7435,6 +8179,9 @@ type Mutation {
7435
8179
  """The username or email of the user to inactivate."""
7436
8180
  username: String!
7437
8181
  ): Boolean!
8182
+
8183
+ """대화방에 멤버 초대"""
8184
+ inviteChatMembers(roomId: String!, userIds: [String!]!): Boolean!
7438
8185
  inviteCustomer(customerDomainName: String!): Boolean!
7439
8186
 
7440
8187
  """
@@ -7459,9 +8206,20 @@ type Mutation {
7459
8206
  """Adds one or more boards to a play group."""
7460
8207
  joinPlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
7461
8208
 
8209
+ """대화방 나가기 (마지막 멤버가 나가면 방 삭제)"""
8210
+ leaveChatRoom(roomId: String!): Boolean!
8211
+
7462
8212
  """Removes one or more boards from a play group."""
7463
8213
  leavePlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
7464
8214
 
8215
+ """대화방 읽음 처리 (읽음 워터마크 갱신)"""
8216
+ markChatRoomRead(roomId: String!): Boolean!
8217
+
8218
+ """
8219
+ Mark a session as read up to now for the current user. Idempotent. Distinct from presence (lastSeenAt) — a window can be open without being read.
8220
+ """
8221
+ markSessionRead(sessionId: String!): Boolean!
8222
+
7465
8223
  """
7466
8224
  완료된 ImportSession 의 결과 boardModel 을 새 Board entity 로 영속화한다. 검수 단계 (사용자/AI 가 import 결과를 확인 후 명시적으로 호출) 에서 사용. Board.state="draft" 로 생성되므로 release mutation 으로 별도 발행 필요.
7467
8225
  """
@@ -7540,14 +8298,27 @@ type Mutation {
7540
8298
  rejectActivityApproval(comment: String, id: String!): ActivityApproval
7541
8299
 
7542
8300
  """Releases a board, making it public and creating a version history."""
7543
- releaseBoard(id: String!): Board!
8301
+ releaseBoard(comment: String, id: String!): Board!
7544
8302
 
7545
8303
  """Release a KPI and create a version history."""
7546
8304
  releaseKpi(id: String!): Kpi!
7547
8305
 
8306
+ """
8307
+ Releases (publishes) a scenario, creating an immutable version snapshot. Operational execution (schedule/auto-start) runs the latest released version.
8308
+ """
8309
+ releaseScenario(comment: String, id: String!): Scenario!
8310
+
7548
8311
  """Remove a user from the owners of the current domain."""
7549
8312
  removeDomainOwner(reason: String, username: String!): Boolean!
7550
8313
 
8314
+ """
8315
+ Rename a chat session. Any participant may rename it — the name is the topic label of a shared deliberation and the change is reversible. Broadcast as meta activity so every participant sees it without raising unread badges.
8316
+ """
8317
+ renameAISession(name: String!, sessionId: String!): Boolean!
8318
+
8319
+ """대화방 이름 변경"""
8320
+ renameChatRoom(name: String!, roomId: String!): ChatRoom!
8321
+
7551
8322
  """Rename a ChatSession (tab label)."""
7552
8323
  renameChatSession(name: String!, sessionId: String!): Boolean!
7553
8324
  renewApplicationAccessToken(id: String!, scope: String!): AccessToken!
@@ -7558,6 +8329,11 @@ type Mutation {
7558
8329
  """Sets the custom playback order for boards in a play group."""
7559
8330
  reorderPlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
7560
8331
 
8332
+ """
8333
+ What the host did with a proposal the assistant made. The host calls this once per card it was asked to run; the server records it as a system row, so the panel shows it, a refreshed panel still shows it, and the model reads on its next turn that its proposal was refused instead of assuming it landed (ADR-0070).
8334
+ """
8335
+ reportProposalOutcome(outcome: JSON!, proposalKey: String!, sessionId: String!): Boolean!
8336
+
7561
8337
  """
7562
8338
  Resets a user's password to the default value. Use this mutation to restore access to a user who has forgotten their password.
7563
8339
  """
@@ -7578,19 +8354,55 @@ type Mutation {
7578
8354
  """Mark a patch as reverted (does not undo, only flags)."""
7579
8355
  revertPatch(patchId: String!): Boolean!
7580
8356
 
8357
+ """
8358
+ Reverts a scenario to a released version by copying that version into the current draft. The past version remains as an archive; this does not create a new version.
8359
+ """
8360
+ revertScenarioVersion(id: String!, version: Int!): Scenario!
8361
+
8362
+ """To revoke an appliance's access credential"""
8363
+ revokeApplianceCredential(id: String!): Appliance!
8364
+
7581
8365
  """
7582
8366
  Runs a new scenario instance once and returns the result after it finishes.
7583
8367
  """
7584
- runScenario(instanceName: String, scenarioName: String!, variables: Object): ScenarioInstanceRunResult!
8368
+ runScenario(
8369
+ instanceName: String
8370
+
8371
+ """Version to run: 'released' (default) or 'draft' (debugging)."""
8372
+ mode: String
8373
+ scenarioName: String!
8374
+ variables: Object
8375
+ ): ScenarioInstanceRunResult!
7585
8376
 
7586
8377
  """To approve ActivityApproval"""
7587
8378
  saveActivityApproval(comment: String, id: String!): ActivityApproval
7588
8379
 
7589
8380
  """To save ActivityThread information"""
7590
8381
  saveActivityThread(id: String!, save: ActivityThreadSave!): ActivityThread!
8382
+
8383
+ """도면 PDF 저장 및 분석 요청"""
8384
+ saveAndAnalyzeDrawingBundle(drawingBundle: DrawingBundlePatch!): DrawingBundle!
8385
+
8386
+ """
8387
+ Say something to the people in this session. The turn is stored as the speaker's, addressed to the room, and the assistant is not called — it reads the line as context the next time someone asks it something. Returns the stored message id, or null when there was nothing to say (ADR-0070).
8388
+ """
8389
+ sayToRoom(content: String!, sessionId: String!): String
8390
+
8391
+ """메시지 전송 (텍스트/첨부/답장)"""
8392
+ sendChatRoomMessage(files: [Upload!], message: String, replyToId: String, roomId: String!): ChatRoomMessage!
7591
8393
  sendInvitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
8394
+
8395
+ """
8396
+ Open this conversation to everyone in the domain, or close it to its participants. Only the owner may change it. Opening exposes what is already written — the screen says so before asking. Door checks on assistant answers are unaffected (ADR-0073).
8397
+ """
8398
+ setSessionVisibility(sessionId: String!, visibility: String!): Boolean!
7592
8399
  singleUpload(file: Upload!): Attachment!
7593
8400
 
8401
+ """
8402
+ Start (or get existing) AI chat session anchored to a target. Idempotent — returns first existing or creates one. Use anchorType board for board authoring, space for a site (its co-located twins).
8403
+ """
8404
+ startAISession(anchorId: String!, anchorType: String!): ChatSession!
8405
+
7594
8406
  """To start posting activity based on the schedule of the given activity"""
7595
8407
  startActivitySchedule(activityId: String!): Activity!
7596
8408
 
@@ -7598,7 +8410,7 @@ type Mutation {
7598
8410
  startActivityThread(id: String!, output: Object, reason: String): ActivityThread
7599
8411
 
7600
8412
  """
7601
- Start (or get existing) AI chat session for a board. Idempotent returns first existing or creates one.
8413
+ Start (or get existing) AI chat session for a board. Thin wrapper over startAISession(board).
7602
8414
  """
7603
8415
  startBoardAISession(boardId: String!): ChatSession!
7604
8416
 
@@ -7613,7 +8425,14 @@ type Mutation {
7613
8425
  startDataSummarySchedule(dataSetId: String!): DataSet!
7614
8426
 
7615
8427
  """Starts a new scenario instance, which will run in the background."""
7616
- startScenario(instanceName: String, scenarioName: String!, variables: Object): ScenarioInstanceStartResult!
8428
+ startScenario(
8429
+ instanceName: String
8430
+
8431
+ """Version to run: 'released' (default) or 'draft' (debugging)."""
8432
+ mode: String
8433
+ scenarioName: String!
8434
+ variables: Object
8435
+ ): ScenarioInstanceStartResult!
7617
8436
 
7618
8437
  """Starts the schedule for a specific scenario, if one is defined."""
7619
8438
  startScenarioSchedule(scenarioId: String!): Scenario!
@@ -7638,6 +8457,9 @@ type Mutation {
7638
8457
  """To submit a ActivityThread"""
7639
8458
  submitActivityThread(id: String!, output: Object, reason: String): ActivityThread!
7640
8459
 
8460
+ """프로젝트 공사 시방서를 매칭 엔진에 등록"""
8461
+ syncProjectSiteSpecs(projectId: String!, specFiles: [SiteSpecFileInput!]!): Int!
8462
+
7641
8463
  """To synchronize auth-providers users"""
7642
8464
  synchronizeAuthProviderUsers(id: String!): Boolean!
7643
8465
 
@@ -7718,9 +8540,15 @@ type Mutation {
7718
8540
  """Update Daily Worklog"""
7719
8541
  updateBuildingInspectionDailyWorklog(patch: BuildingInspectionDailyWorklogPatch!): BuildingInspectionDailyWorklog!
7720
8542
 
8543
+ """메시지 수정 (본인 메시지만)"""
8544
+ updateChatRoomMessage(id: String!, message: String!): ChatRoomMessage!
8545
+
7721
8546
  """To modify ChecklistItemComment information"""
7722
8547
  updateChecklistItemComment(id: String!, patch: ChecklistItemCommentPatch!): ChecklistItemComment!
7723
8548
 
8549
+ """To update checklist items with AI inspection judgments"""
8550
+ updateChecklistItemsAiJudgment(items: [ChecklistItemAiJudgment!]!): Boolean!
8551
+
7724
8552
  """To modify CommonCode information"""
7725
8553
  updateCommonCode(name: String!, patch: CommonCodePatch!): CommonCode!
7726
8554
 
@@ -8001,6 +8829,9 @@ type Mutation {
8001
8829
  """To modify multiple Resources' information"""
8002
8830
  updateMultipleResource(patches: [ResourcePatch!]!): [Resource!]!
8003
8831
 
8832
+ """To create or update multiple roles at once"""
8833
+ updateMultipleRole(patches: [RolePatch!]!): [Role!]!
8834
+
8004
8835
  """
8005
8836
  Updates multiple scenarios at once. Can be used to create or update records.
8006
8837
  """
@@ -8085,7 +8916,7 @@ type Mutation {
8085
8916
  updateProject(project: ProjectPatch!): Project!
8086
8917
 
8087
8918
  """프로젝트 체크리스트 수정"""
8088
- updateProjectChecklist(id: String!, items: [ProjectChecklistItemInput!]!, name: String!, siteSpecPdfUrl: String): ProjectChecklist!
8919
+ updateProjectChecklist(id: String!, items: [ProjectChecklistItemInput!]!, name: String!): ProjectChecklist!
8089
8920
 
8090
8921
  """프로젝트 도면 업데이트"""
8091
8922
  updateProjectPlan(project: ProjectPatch!): Project!
@@ -8190,12 +9021,18 @@ input NewActivity {
8190
9021
  approvalLine: Object
8191
9022
  assigneeRole: ObjectRef
8192
9023
  assignees: Object
9024
+ decisionKeys: Object
8193
9025
  description: String
8194
9026
  issuerRole: ObjectRef
8195
9027
  model: Object
8196
9028
  multiple: String
8197
9029
  name: String!
8198
9030
  priority: Float
9031
+
9032
+ """
9033
+ true when a rejection closes the case for good — it cannot be restarted
9034
+ """
9035
+ rejectionIsFinal: Boolean
8199
9036
  reportSource: String
8200
9037
  reportType: String
8201
9038
  schedule: String
@@ -9900,6 +10737,11 @@ type PagePreferenceList {
9900
10737
 
9901
10738
  """Input type for specifying pagination options in a list query."""
9902
10739
  input Pagination {
10740
+ """
10741
+ Keyset cursor: return rows positioned after this one, per the current sorting. Prefer this over page for feeds that grow at the head (event journals, logs, newest-first lists) where offset paging silently duplicates or skips rows as new rows arrive. Opaque — pass back the nextCursor the previous response returned. Wins over page when both are given.
10742
+ """
10743
+ after: String
10744
+
9903
10745
  """The maximum number of items per page."""
9904
10746
  limit: Int
9905
10747
 
@@ -10010,7 +10852,7 @@ type PatchEntry {
10010
10852
  createdAt: DateTimeISO
10011
10853
  id: ID
10012
10854
 
10013
- """BoardEditOp[] (parsed JSON array)."""
10855
+ """SceneEditOp[] (parsed JSON array)."""
10014
10856
  opsJson: JSON!
10015
10857
 
10016
10858
  """Whether this patch was reverted."""
@@ -10219,6 +11061,11 @@ type Privilege {
10219
11061
  """The user who created the privilege."""
10220
11062
  creator: User
10221
11063
 
11064
+ """
11065
+ True when no module in this deployment declares this privilege anymore (@privilege directive). The bootstrap sync only adds rows, so a removed directive leaves a grantable row that does nothing. Computed per request — it answers for the asking deployment, not for all time.
11066
+ """
11067
+ deprecated: Boolean!
11068
+
10222
11069
  """A detailed description of what the privilege allows."""
10223
11070
  description: String
10224
11071
 
@@ -10286,6 +11133,11 @@ input ProfileInput {
10286
11133
 
10287
11134
  """프로젝트"""
10288
11135
  type Project {
11136
+ accidentRate: Float
11137
+ accidentSeverityRate: Float
11138
+ actualConstructionCost: Float
11139
+ actualEndDate: String
11140
+ actualStartDate: String
10289
11141
  buildingComplex: BuildingComplex
10290
11142
  buildingUsage: String
10291
11143
  code: String
@@ -10296,6 +11148,7 @@ type Project {
10296
11148
  documentNaming: String
10297
11149
  domain: Domain
10298
11150
  endDate: String
11151
+ facilityType: String
10299
11152
  geoGroup: String
10300
11153
  id: ID!
10301
11154
  inputType: String
@@ -10305,6 +11158,7 @@ type Project {
10305
11158
  mainPhoto: Attachment
10306
11159
  name: String!
10307
11160
  postalCode: String
11161
+ projectScale: String
10308
11162
  projectType: String
10309
11163
  robotCount: Float
10310
11164
  robotProgressRate: Float
@@ -10390,6 +11244,21 @@ type ProjectManagerOutput {
10390
11244
  }
10391
11245
 
10392
11246
  input ProjectPatch {
11247
+ """재해율 (%)"""
11248
+ accidentRate: Float
11249
+
11250
+ """재해강도율"""
11251
+ accidentSeverityRate: Float
11252
+
11253
+ """실제공사비 (억원)"""
11254
+ actualConstructionCost: Float
11255
+
11256
+ """실제 준공일"""
11257
+ actualEndDate: String
11258
+
11259
+ """실제 착공일"""
11260
+ actualStartDate: String
11261
+
10393
11262
  """연관된 건물 복합체 정보 (선택 사항)"""
10394
11263
  buildingComplex: BuildingComplexPatch
10395
11264
 
@@ -10402,6 +11271,9 @@ input ProjectPatch {
10402
11271
  """프로젝트 준공일정"""
10403
11272
  endDate: String
10404
11273
 
11274
+ """시설물 유형 (ISO 12006-2 관점 8분류)"""
11275
+ facilityType: String
11276
+
10405
11277
  """지역 구분 코드 (시군구 식별, 통계 그룹핑용)"""
10406
11278
  geoGroup: String
10407
11279
 
@@ -10423,6 +11295,9 @@ input ProjectPatch {
10423
11295
  """우편 코드 (5자리)"""
10424
11296
  postalCode: String
10425
11297
 
11298
+ """공사 규모 (공사예정금액 5구간, 억원)"""
11299
+ projectScale: String
11300
+
10426
11301
  """로봇 작업 대수"""
10427
11302
  robotCount: Int
10428
11303
 
@@ -10545,6 +11420,11 @@ type Query {
10545
11420
  """Pagination options for the list query."""
10546
11421
  pagination: Pagination
10547
11422
 
11423
+ """
11424
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11425
+ """
11426
+ search: String
11427
+
10548
11428
  """Sorting options for the list query."""
10549
11429
  sortings: [Sorting!]
10550
11430
  ): ActionPlanList!
@@ -10560,6 +11440,11 @@ type Query {
10560
11440
  """Pagination options for the list query."""
10561
11441
  pagination: Pagination
10562
11442
 
11443
+ """
11444
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11445
+ """
11446
+ search: String
11447
+
10563
11448
  """Sorting options for the list query."""
10564
11449
  sortings: [Sorting!]
10565
11450
  ): ActivityList!
@@ -10581,6 +11466,11 @@ type Query {
10581
11466
  """Pagination options for the list query."""
10582
11467
  pagination: Pagination
10583
11468
 
11469
+ """
11470
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11471
+ """
11472
+ search: String
11473
+
10584
11474
  """Sorting options for the list query."""
10585
11475
  sortings: [Sorting!]
10586
11476
  ): ActivityApprovalList!
@@ -10605,6 +11495,11 @@ type Query {
10605
11495
  """Pagination options for the list query."""
10606
11496
  pagination: Pagination
10607
11497
 
11498
+ """
11499
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11500
+ """
11501
+ search: String
11502
+
10608
11503
  """Sorting options for the list query."""
10609
11504
  sortings: [Sorting!]
10610
11505
  ): ActivityInstanceHistoryList!
@@ -10623,6 +11518,11 @@ type Query {
10623
11518
  """Pagination options for the list query."""
10624
11519
  pagination: Pagination
10625
11520
 
11521
+ """
11522
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11523
+ """
11524
+ search: String
11525
+
10626
11526
  """Sorting options for the list query."""
10627
11527
  sortings: [Sorting!]
10628
11528
  ): ActivityInstanceList!
@@ -10640,6 +11540,11 @@ type Query {
10640
11540
  """Pagination options for the list query."""
10641
11541
  pagination: Pagination
10642
11542
 
11543
+ """
11544
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11545
+ """
11546
+ search: String
11547
+
10643
11548
  """Sorting options for the list query."""
10644
11549
  sortings: [Sorting!]
10645
11550
  ): ActivityInstanceList!
@@ -10655,6 +11560,11 @@ type Query {
10655
11560
  """Pagination options for the list query."""
10656
11561
  pagination: Pagination
10657
11562
 
11563
+ """
11564
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11565
+ """
11566
+ search: String
11567
+
10658
11568
  """Sorting options for the list query."""
10659
11569
  sortings: [Sorting!]
10660
11570
  ): ActivityInstanceList!
@@ -10676,6 +11586,11 @@ type Query {
10676
11586
  """Pagination options for the list query."""
10677
11587
  pagination: Pagination
10678
11588
 
11589
+ """
11590
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11591
+ """
11592
+ search: String
11593
+
10679
11594
  """Sorting options for the list query."""
10680
11595
  sortings: [Sorting!]
10681
11596
  ): ActivityTemplateList!
@@ -10694,9 +11609,19 @@ type Query {
10694
11609
  """Pagination options for the list query."""
10695
11610
  pagination: Pagination
10696
11611
 
11612
+ """
11613
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11614
+ """
11615
+ search: String
11616
+
10697
11617
  """Sorting options for the list query."""
10698
11618
  sortings: [Sorting!]
10699
11619
  ): ActivityThreadList!
11620
+
11621
+ """
11622
+ Whether this deployment has an AI configured, and which registrations are incomplete. Read this before offering to ask the assistant — do not find out by failing.
11623
+ """
11624
+ aiCapability: AiCapabilityView!
10700
11625
  appBinding(id: String!): AppBinding!
10701
11626
  appBindings(
10702
11627
  """An array of filter conditions to apply to the list query."""
@@ -10708,6 +11633,11 @@ type Query {
10708
11633
  """Pagination options for the list query."""
10709
11634
  pagination: Pagination
10710
11635
 
11636
+ """
11637
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11638
+ """
11639
+ search: String
11640
+
10711
11641
  """Sorting options for the list query."""
10712
11642
  sortings: [Sorting!]
10713
11643
  ): AppBindingList!
@@ -10726,6 +11656,11 @@ type Query {
10726
11656
  """Pagination options for the list query."""
10727
11657
  pagination: Pagination
10728
11658
 
11659
+ """
11660
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11661
+ """
11662
+ search: String
11663
+
10729
11664
  """Sorting options for the list query."""
10730
11665
  sortings: [Sorting!]
10731
11666
  ): ApplianceList!
@@ -10744,10 +11679,35 @@ type Query {
10744
11679
  """Pagination options for the list query."""
10745
11680
  pagination: Pagination
10746
11681
 
11682
+ """
11683
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11684
+ """
11685
+ search: String
11686
+
10747
11687
  """Sorting options for the list query."""
10748
11688
  sortings: [Sorting!]
10749
11689
  ): ApplicationList!
10750
11690
 
11691
+ """To fetch completed approvals where I participated"""
11692
+ approvalCompletedList(
11693
+ """An array of filter conditions to apply to the list query."""
11694
+ filters: [Filter!]
11695
+
11696
+ """Inherited value type for the list query."""
11697
+ inherited: InheritedValueType
11698
+
11699
+ """Pagination options for the list query."""
11700
+ pagination: Pagination
11701
+
11702
+ """
11703
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11704
+ """
11705
+ search: String
11706
+
11707
+ """Sorting options for the list query."""
11708
+ sortings: [Sorting!]
11709
+ ): ActivityApprovalList!
11710
+
10751
11711
  """To fetch the approvals(ActivityApprovals) which has done by me"""
10752
11712
  approvalDoneList(
10753
11713
  """An array of filter conditions to apply to the list query."""
@@ -10759,6 +11719,11 @@ type Query {
10759
11719
  """Pagination options for the list query."""
10760
11720
  pagination: Pagination
10761
11721
 
11722
+ """
11723
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11724
+ """
11725
+ search: String
11726
+
10762
11727
  """Sorting options for the list query."""
10763
11728
  sortings: [Sorting!]
10764
11729
  ): ActivityApprovalList!
@@ -10777,6 +11742,11 @@ type Query {
10777
11742
  """Pagination options for the list query."""
10778
11743
  pagination: Pagination
10779
11744
 
11745
+ """
11746
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11747
+ """
11748
+ search: String
11749
+
10780
11750
  """Sorting options for the list query."""
10781
11751
  sortings: [Sorting!]
10782
11752
  ): ApprovalLineList!
@@ -10792,6 +11762,11 @@ type Query {
10792
11762
  """Pagination options for the list query."""
10793
11763
  pagination: Pagination
10794
11764
 
11765
+ """
11766
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11767
+ """
11768
+ search: String
11769
+
10795
11770
  """Sorting options for the list query."""
10796
11771
  sortings: [Sorting!]
10797
11772
  ): ApprovalLineList!
@@ -10807,9 +11782,46 @@ type Query {
10807
11782
  """Pagination options for the list query."""
10808
11783
  pagination: Pagination
10809
11784
 
11785
+ """
11786
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11787
+ """
11788
+ search: String
11789
+
11790
+ """Sorting options for the list query."""
11791
+ sortings: [Sorting!]
11792
+ ): ActivityApprovalList!
11793
+
11794
+ """
11795
+ To fetch the approvals where I am a reference — I may comment, I do not decide
11796
+ """
11797
+ approvalReferenceList(
11798
+ """An array of filter conditions to apply to the list query."""
11799
+ filters: [Filter!]
11800
+
11801
+ """Inherited value type for the list query."""
11802
+ inherited: InheritedValueType
11803
+
11804
+ """Pagination options for the list query."""
11805
+ pagination: Pagination
11806
+
11807
+ """
11808
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11809
+ """
11810
+ search: String
11811
+
10810
11812
  """Sorting options for the list query."""
10811
11813
  sortings: [Sorting!]
10812
11814
  ): ActivityApprovalList!
11815
+
11816
+ """
11817
+ What this conversation offers on screen — `/` sentences, the `@` catalog and the notices, translated.
11818
+ """
11819
+ assistantMode(kind: String!): AssistantModeView!
11820
+
11821
+ """
11822
+ Conversations that stand for this kind of subject, the default first. A screen showing one subject opens the head of this list and offers the rest; a single entry means there is nothing to choose.
11823
+ """
11824
+ assistantModes(subject: String!): [AssistantModeChoice!]!
10813
11825
  attachment(id: String!): Attachment!
10814
11826
  attachments(
10815
11827
  """An array of filter conditions to apply to the list query."""
@@ -10821,6 +11833,11 @@ type Query {
10821
11833
  """Pagination options for the list query."""
10822
11834
  pagination: Pagination
10823
11835
 
11836
+ """
11837
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11838
+ """
11839
+ search: String
11840
+
10824
11841
  """Sorting options for the list query."""
10825
11842
  sortings: [Sorting!]
10826
11843
  ): AttachmentList!
@@ -10854,6 +11871,11 @@ type Query {
10854
11871
  """Pagination options for the list query."""
10855
11872
  pagination: Pagination
10856
11873
 
11874
+ """
11875
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11876
+ """
11877
+ search: String
11878
+
10857
11879
  """Sorting options for the list query."""
10858
11880
  sortings: [Sorting!]
10859
11881
  ): AttributeSetList!
@@ -10875,6 +11897,11 @@ type Query {
10875
11897
  """Pagination options for the list query."""
10876
11898
  pagination: Pagination
10877
11899
 
11900
+ """
11901
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11902
+ """
11903
+ search: String
11904
+
10878
11905
  """Sorting options for the list query."""
10879
11906
  sortings: [Sorting!]
10880
11907
  ): AuthProviderList!
@@ -10891,8 +11918,10 @@ type Query {
10891
11918
  """Finds a single board by its name."""
10892
11919
  boardByName(name: String!): Board
10893
11920
 
10894
- """Retrieves the most recently published version of a board."""
10895
- boardPublished(id: String!): BoardHistory!
11921
+ """
11922
+ Retrieves the most recently published version of a board, or null if none was published.
11923
+ """
11924
+ boardPublished(id: String!): BoardHistory
10896
11925
 
10897
11926
  """To fetch a BoardSettings"""
10898
11927
  boardSettings(names: [String!]): [BoardSetting!]!
@@ -10911,6 +11940,11 @@ type Query {
10911
11940
  """Pagination options for the list query."""
10912
11941
  pagination: Pagination
10913
11942
 
11943
+ """
11944
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11945
+ """
11946
+ search: String
11947
+
10914
11948
  """Sorting options for the list query."""
10915
11949
  sortings: [Sorting!]
10916
11950
  ): BoardTemplateList!
@@ -10926,10 +11960,20 @@ type Query {
10926
11960
  """Pagination options for the list query."""
10927
11961
  pagination: Pagination
10928
11962
 
11963
+ """
11964
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11965
+ """
11966
+ search: String
11967
+
10929
11968
  """Sorting options for the list query."""
10930
11969
  sortings: [Sorting!]
10931
11970
  ): BoardTemplateList!
10932
11971
 
11972
+ """
11973
+ Computes the component-level difference between a board version and another version or the current draft. Omit toVersion to diff the base version against the current draft.
11974
+ """
11975
+ boardVersionDiff(id: String!, toVersion: Int, version: Int!): BoardVersionDiff!
11976
+
10933
11977
  """Retrieves up to 10 historical versions of a specific board."""
10934
11978
  boardVersions(id: String!): [BoardHistory!]!
10935
11979
 
@@ -10944,6 +11988,11 @@ type Query {
10944
11988
  """Pagination options for the list query."""
10945
11989
  pagination: Pagination
10946
11990
 
11991
+ """
11992
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11993
+ """
11994
+ search: String
11995
+
10947
11996
  """Sorting options for the list query."""
10948
11997
  sortings: [Sorting!]
10949
11998
  ): BoardList!
@@ -10959,6 +12008,11 @@ type Query {
10959
12008
  """Pagination options for the list query."""
10960
12009
  pagination: Pagination
10961
12010
 
12011
+ """
12012
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12013
+ """
12014
+ search: String
12015
+
10962
12016
  """Sorting options for the list query."""
10963
12017
  sortings: [Sorting!]
10964
12018
  ): BoardList!
@@ -10998,6 +12052,11 @@ type Query {
10998
12052
  """Pagination options for the list query."""
10999
12053
  pagination: Pagination
11000
12054
 
12055
+ """
12056
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12057
+ """
12058
+ search: String
12059
+
11001
12060
  """Sorting options for the list query."""
11002
12061
  sortings: [Sorting!]
11003
12062
  ): BuildingInspectionHistoryList!
@@ -11025,6 +12084,11 @@ type Query {
11025
12084
  """Pagination options for the list query."""
11026
12085
  pagination: Pagination
11027
12086
 
12087
+ """
12088
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12089
+ """
12090
+ search: String
12091
+
11028
12092
  """Sorting options for the list query."""
11029
12093
  sortings: [Sorting!]
11030
12094
  ): BuildingInspectionList!
@@ -11044,9 +12108,24 @@ type Query {
11044
12108
  """List chat messages of a session, oldest first."""
11045
12109
  chatMessages(limit: Int = 100, offset: Int = 0, sessionId: String!): [ChatMessage!]!
11046
12110
 
12111
+ """현재 로그인 유저 id (채팅 본인 식별용)"""
12112
+ chatMyUserId: String!
12113
+
12114
+ """현재 온라인인 유저 id 목록 (멤버 탭 온라인 표시용)"""
12115
+ chatOnlineUserIds: [String!]!
12116
+
11047
12117
  """List patch entries of a session, newest first."""
11048
12118
  chatPatches(limit: Int = 100, sessionId: String!): [PatchEntry!]!
11049
12119
 
12120
+ """대화방 단건 조회 (멤버만 가능)"""
12121
+ chatRoom(id: String!): ChatRoom!
12122
+
12123
+ """대화방 메시지 조회 (최신순, before 커서로 과거 페이징, searchText로 검색)"""
12124
+ chatRoomMessages(before: DateTimeISO, limit: Int, roomId: String!, searchText: String): [ChatRoomMessage!]!
12125
+
12126
+ """내가 멤버인 대화방 목록 (최근 메시지순)"""
12127
+ chatRooms: [ChatRoom!]!
12128
+
11050
12129
  """Get AI chat session by id."""
11051
12130
  chatSession(id: String!): ChatSession
11052
12131
 
@@ -11055,14 +12134,32 @@ type Query {
11055
12134
  """
11056
12135
  chatSessionByBoard(boardId: String!): ChatSession
11057
12136
 
12137
+ """
12138
+ List sessions anchored to a target with this viewer's unread state, most recent activity first. Supports free-text search over name and last preview, a mine-only filter, hidden inclusion, and paging. Uses the denormalized last-activity timestamp compared against the viewer's read point — no per-session aggregation.
12139
+ """
12140
+ chatSessionInbox(anchorId: String!, anchorType: String!, limit: Int, mineOnly: Boolean, offset: Int, search: String, showHidden: Boolean): [ChatSessionInboxEntry!]!
12141
+
12142
+ """
12143
+ Total number of sessions matching the same filters as chatSessionInbox (before paging). Request it alongside the list so the UI can tell "end of page" from "end of data".
12144
+ """
12145
+ chatSessionInboxTotal(anchorId: String!, anchorType: String!, mineOnly: Boolean, search: String, showHidden: Boolean): Int!
12146
+
11058
12147
  """List participants of a ChatSession (members / owner)."""
11059
12148
  chatSessionParticipants(sessionId: String!): [ChatSessionParticipant!]!
11060
12149
 
11061
12150
  """
11062
- List all AI chat sessions for a board (oldest first). Multi-session support UI 탭으로 표시.
12151
+ List AI chat sessions anchored to a target (oldest first). Anchor decides the nature and the history boundary of the conversation: board = authoring, space = the site and the twins running there. Board anchor also matches legacy rows that only have boardId.
12152
+ """
12153
+ chatSessionsByAnchor(anchorId: String!, anchorType: String!): [ChatSession!]!
12154
+
12155
+ """
12156
+ List all AI chat sessions for a board (oldest first). Thin wrapper over chatSessionsByAnchor(board).
11063
12157
  """
11064
12158
  chatSessionsByBoard(boardId: String!): [ChatSession!]!
11065
12159
 
12160
+ """전체 안읽은 메시지 수 (플로팅 아이콘 뱃지용)"""
12161
+ chatUnreadTotal: Float!
12162
+
11066
12163
  """
11067
12164
  Checks if the system is configured to provide a default password for new users.
11068
12165
  """
@@ -11073,9 +12170,6 @@ type Query {
11073
12170
  """
11074
12171
  checkResettablePasswordToDefault: Boolean!
11075
12172
 
11076
- """To fetch the preset of role for new user"""
11077
- checkRolePreset: [Role!]!
11078
-
11079
12173
  """
11080
12174
  Checks if the current authenticated user belongs to the current domain.
11081
12175
  """
@@ -11101,6 +12195,11 @@ type Query {
11101
12195
  """Pagination options for the list query."""
11102
12196
  pagination: Pagination
11103
12197
 
12198
+ """
12199
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12200
+ """
12201
+ search: String
12202
+
11104
12203
  """Sorting options for the list query."""
11105
12204
  sortings: [Sorting!]
11106
12205
  ): ChecklistHistoryList!
@@ -11125,6 +12224,11 @@ type Query {
11125
12224
  """Pagination options for the list query."""
11126
12225
  pagination: Pagination
11127
12226
 
12227
+ """
12228
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12229
+ """
12230
+ search: String
12231
+
11128
12232
  """Sorting options for the list query."""
11129
12233
  sortings: [Sorting!]
11130
12234
  ): ChecklistItemHistoryList!
@@ -11143,6 +12247,11 @@ type Query {
11143
12247
  """Pagination options for the list query."""
11144
12248
  pagination: Pagination
11145
12249
 
12250
+ """
12251
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12252
+ """
12253
+ search: String
12254
+
11146
12255
  """Sorting options for the list query."""
11147
12256
  sortings: [Sorting!]
11148
12257
  ): ChecklistItemList!
@@ -11161,6 +12270,11 @@ type Query {
11161
12270
  """Pagination options for the list query."""
11162
12271
  pagination: Pagination
11163
12272
 
12273
+ """
12274
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12275
+ """
12276
+ search: String
12277
+
11164
12278
  """Sorting options for the list query."""
11165
12279
  sortings: [Sorting!]
11166
12280
  ): ChecklistTemplateItemList!
@@ -11176,6 +12290,11 @@ type Query {
11176
12290
  """Pagination options for the list query."""
11177
12291
  pagination: Pagination
11178
12292
 
12293
+ """
12294
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12295
+ """
12296
+ search: String
12297
+
11179
12298
  """Sorting options for the list query."""
11180
12299
  sortings: [Sorting!]
11181
12300
  ): ChecklistTemplateList!
@@ -11191,6 +12310,11 @@ type Query {
11191
12310
  """Pagination options for the list query."""
11192
12311
  pagination: Pagination
11193
12312
 
12313
+ """
12314
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12315
+ """
12316
+ search: String
12317
+
11194
12318
  """Sorting options for the list query."""
11195
12319
  sortings: [Sorting!]
11196
12320
  ): ChecklistTypeList!
@@ -11206,6 +12330,11 @@ type Query {
11206
12330
  """Pagination options for the list query."""
11207
12331
  pagination: Pagination
11208
12332
 
12333
+ """
12334
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12335
+ """
12336
+ search: String
12337
+
11209
12338
  """Sorting options for the list query."""
11210
12339
  sortings: [Sorting!]
11211
12340
  ): ChecklistList!
@@ -11221,6 +12350,11 @@ type Query {
11221
12350
  """Pagination options for the list query."""
11222
12351
  pagination: Pagination
11223
12352
 
12353
+ """
12354
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12355
+ """
12356
+ search: String
12357
+
11224
12358
  """Sorting options for the list query."""
11225
12359
  sortings: [Sorting!]
11226
12360
  ): ApprovalLineList!
@@ -11242,6 +12376,11 @@ type Query {
11242
12376
  """Pagination options for the list query."""
11243
12377
  pagination: Pagination
11244
12378
 
12379
+ """
12380
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12381
+ """
12382
+ search: String
12383
+
11245
12384
  """Sorting options for the list query."""
11246
12385
  sortings: [Sorting!]
11247
12386
  ): CommonCodeDetailList!
@@ -11257,6 +12396,11 @@ type Query {
11257
12396
  """Pagination options for the list query."""
11258
12397
  pagination: Pagination
11259
12398
 
12399
+ """
12400
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12401
+ """
12402
+ search: String
12403
+
11260
12404
  """Sorting options for the list query."""
11261
12405
  sortings: [Sorting!]
11262
12406
  ): CommonCodeList!
@@ -11277,6 +12421,11 @@ type Query {
11277
12421
  """Pagination options for the list query."""
11278
12422
  pagination: Pagination
11279
12423
 
12424
+ """
12425
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12426
+ """
12427
+ search: String
12428
+
11280
12429
  """Sorting options for the list query."""
11281
12430
  sortings: [Sorting!]
11282
12431
  ): ConnectionList!
@@ -11301,6 +12450,11 @@ type Query {
11301
12450
  """Pagination options for the list query."""
11302
12451
  pagination: Pagination
11303
12452
 
12453
+ """
12454
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12455
+ """
12456
+ search: String
12457
+
11304
12458
  """Sorting options for the list query."""
11305
12459
  sortings: [Sorting!]
11306
12460
  ): ConstructionChecklistTemplateItemList!
@@ -11316,6 +12470,11 @@ type Query {
11316
12470
  """Pagination options for the list query."""
11317
12471
  pagination: Pagination
11318
12472
 
12473
+ """
12474
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12475
+ """
12476
+ search: String
12477
+
11319
12478
  """Sorting options for the list query."""
11320
12479
  sortings: [Sorting!]
11321
12480
  ): ConstructionChecklistTemplateList!
@@ -11331,6 +12490,11 @@ type Query {
11331
12490
  """Pagination options for the list query."""
11332
12491
  pagination: Pagination
11333
12492
 
12493
+ """
12494
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12495
+ """
12496
+ search: String
12497
+
11334
12498
  """Sorting options for the list query."""
11335
12499
  sortings: [Sorting!]
11336
12500
  ): ConstructionDetailTypeList!
@@ -11349,6 +12513,11 @@ type Query {
11349
12513
  """Pagination options for the list query."""
11350
12514
  pagination: Pagination
11351
12515
 
12516
+ """
12517
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12518
+ """
12519
+ search: String
12520
+
11352
12521
  """Sorting options for the list query."""
11353
12522
  sortings: [Sorting!]
11354
12523
  ): ConstructionTypeList!
@@ -11367,6 +12536,11 @@ type Query {
11367
12536
  """Pagination options for the list query."""
11368
12537
  pagination: Pagination
11369
12538
 
12539
+ """
12540
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12541
+ """
12542
+ search: String
12543
+
11370
12544
  """Sorting options for the list query."""
11371
12545
  sortings: [Sorting!]
11372
12546
  ): ContactList!
@@ -11400,6 +12574,11 @@ type Query {
11400
12574
  """Pagination options for the list query."""
11401
12575
  pagination: Pagination
11402
12576
 
12577
+ """
12578
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12579
+ """
12580
+ search: String
12581
+
11403
12582
  """Sorting options for the list query."""
11404
12583
  sortings: [Sorting!]
11405
12584
  ): DataArchiveList!
@@ -11422,6 +12601,11 @@ type Query {
11422
12601
  """Pagination options for the list query."""
11423
12602
  pagination: Pagination
11424
12603
 
12604
+ """
12605
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12606
+ """
12607
+ search: String
12608
+
11425
12609
  """Sorting options for the list query."""
11426
12610
  sortings: [Sorting!]
11427
12611
  ): DataKeySetList!
@@ -11444,6 +12628,11 @@ type Query {
11444
12628
  """Pagination options for the list query."""
11445
12629
  pagination: Pagination
11446
12630
 
12631
+ """
12632
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12633
+ """
12634
+ search: String
12635
+
11447
12636
  """Sorting options for the list query."""
11448
12637
  sortings: [Sorting!]
11449
12638
  ): DataOocList!
@@ -11466,6 +12655,11 @@ type Query {
11466
12655
  """Pagination options for the list query."""
11467
12656
  pagination: Pagination
11468
12657
 
12658
+ """
12659
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12660
+ """
12661
+ search: String
12662
+
11469
12663
  """Sorting options for the list query."""
11470
12664
  sortings: [Sorting!]
11471
12665
  ): DataSampleList!
@@ -11485,6 +12679,11 @@ type Query {
11485
12679
  """Pagination options for the list query."""
11486
12680
  pagination: Pagination
11487
12681
 
12682
+ """
12683
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12684
+ """
12685
+ search: String
12686
+
11488
12687
  """Sorting options for the list query."""
11489
12688
  sortings: [Sorting!]
11490
12689
  ): DataSampleList!
@@ -11504,6 +12703,11 @@ type Query {
11504
12703
  """Pagination options for the list query."""
11505
12704
  pagination: Pagination
11506
12705
 
12706
+ """
12707
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12708
+ """
12709
+ search: String
12710
+
11507
12711
  """Sorting options for the list query."""
11508
12712
  sortings: [Sorting!]
11509
12713
  ): DataSampleList!
@@ -11524,6 +12728,11 @@ type Query {
11524
12728
  pagination: Pagination
11525
12729
  period: String!
11526
12730
 
12731
+ """
12732
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12733
+ """
12734
+ search: String
12735
+
11527
12736
  """Sorting options for the list query."""
11528
12737
  sortings: [Sorting!]
11529
12738
  ): DataSampleList!
@@ -11546,6 +12755,11 @@ type Query {
11546
12755
  """Pagination options for the list query."""
11547
12756
  pagination: Pagination
11548
12757
 
12758
+ """
12759
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12760
+ """
12761
+ search: String
12762
+
11549
12763
  """Sorting options for the list query."""
11550
12764
  sortings: [Sorting!]
11551
12765
  ): DataSensorList!
@@ -11571,6 +12785,11 @@ type Query {
11571
12785
  """Pagination options for the list query."""
11572
12786
  pagination: Pagination
11573
12787
 
12788
+ """
12789
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12790
+ """
12791
+ search: String
12792
+
11574
12793
  """Sorting options for the list query."""
11575
12794
  sortings: [Sorting!]
11576
12795
  ): DataSetHistoryList!
@@ -11591,6 +12810,11 @@ type Query {
11591
12810
  """Pagination options for the list query."""
11592
12811
  pagination: Pagination
11593
12812
 
12813
+ """
12814
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12815
+ """
12816
+ search: String
12817
+
11594
12818
  """Sorting options for the list query."""
11595
12819
  sortings: [Sorting!]
11596
12820
  ): DataSetList!
@@ -11608,6 +12832,11 @@ type Query {
11608
12832
  """Pagination options for the list query."""
11609
12833
  pagination: Pagination
11610
12834
 
12835
+ """
12836
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12837
+ """
12838
+ search: String
12839
+
11611
12840
  """Sorting options for the list query."""
11612
12841
  sortings: [Sorting!]
11613
12842
  ): DataSetList!
@@ -11625,6 +12854,11 @@ type Query {
11625
12854
  """Pagination options for the list query."""
11626
12855
  pagination: Pagination
11627
12856
 
12857
+ """
12858
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12859
+ """
12860
+ search: String
12861
+
11628
12862
  """Sorting options for the list query."""
11629
12863
  sortings: [Sorting!]
11630
12864
  ): DataSetList!
@@ -11648,6 +12882,11 @@ type Query {
11648
12882
  """Pagination options for the list query."""
11649
12883
  pagination: Pagination
11650
12884
 
12885
+ """
12886
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12887
+ """
12888
+ search: String
12889
+
11651
12890
  """Sorting options for the list query."""
11652
12891
  sortings: [Sorting!]
11653
12892
  ): DataSummaryList!
@@ -11667,6 +12906,11 @@ type Query {
11667
12906
  """Pagination options for the list query."""
11668
12907
  pagination: Pagination
11669
12908
 
12909
+ """
12910
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12911
+ """
12912
+ search: String
12913
+
11670
12914
  """Sorting options for the list query."""
11671
12915
  sortings: [Sorting!]
11672
12916
  ): DataSummaryList!
@@ -11686,6 +12930,11 @@ type Query {
11686
12930
  """Pagination options for the list query."""
11687
12931
  pagination: Pagination
11688
12932
 
12933
+ """
12934
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12935
+ """
12936
+ search: String
12937
+
11689
12938
  """Sorting options for the list query."""
11690
12939
  sortings: [Sorting!]
11691
12940
  ): DataSummaryList!
@@ -11705,6 +12954,11 @@ type Query {
11705
12954
  """Pagination options for the list query."""
11706
12955
  pagination: Pagination
11707
12956
 
12957
+ """
12958
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12959
+ """
12960
+ search: String
12961
+
11708
12962
  """Sorting options for the list query."""
11709
12963
  sortings: [Sorting!]
11710
12964
  ): DataSummaryList!
@@ -11731,6 +12985,11 @@ type Query {
11731
12985
  pagination: Pagination
11732
12986
  period: String!
11733
12987
 
12988
+ """
12989
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
12990
+ """
12991
+ search: String
12992
+
11734
12993
  """Sorting options for the list query."""
11735
12994
  sortings: [Sorting!]
11736
12995
  ): [DynamicDataSummary!]!
@@ -11749,6 +13008,11 @@ type Query {
11749
13008
  """Pagination options for the list query."""
11750
13009
  pagination: Pagination
11751
13010
 
13011
+ """
13012
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13013
+ """
13014
+ search: String
13015
+
11752
13016
  """Sorting options for the list query."""
11753
13017
  sortings: [Sorting!]
11754
13018
  ): DepartmentList
@@ -11764,6 +13028,11 @@ type Query {
11764
13028
  """Pagination options for the list query."""
11765
13029
  pagination: Pagination
11766
13030
 
13031
+ """
13032
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13033
+ """
13034
+ search: String
13035
+
11767
13036
  """Sorting options for the list query."""
11768
13037
  sortings: [Sorting!]
11769
13038
  ): DepartmentList!
@@ -11787,6 +13056,11 @@ type Query {
11787
13056
  """Pagination options for the list query."""
11788
13057
  pagination: Pagination
11789
13058
 
13059
+ """
13060
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13061
+ """
13062
+ search: String
13063
+
11790
13064
  """Sorting options for the list query."""
11791
13065
  sortings: [Sorting!]
11792
13066
  ): DomainLinkList!
@@ -11800,7 +13074,7 @@ type Query {
11800
13074
  domainTypes: [String!]!
11801
13075
 
11802
13076
  """
11803
- List users in the current domain for `@` mention popup. board-ai 권한이면 누구나 멘션용 검색 가능 (관리자 전용 users() 와 별도).
13077
+ List users in the current domain for the `@` mention popup. Anyone with the chat privilege may search here; this is separate from the admin-only users().
11804
13078
  """
11805
13079
  domainUsersForMention(
11806
13080
  limit: Int = 50
@@ -11822,6 +13096,11 @@ type Query {
11822
13096
  """Pagination options for the list query."""
11823
13097
  pagination: Pagination
11824
13098
 
13099
+ """
13100
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13101
+ """
13102
+ search: String
13103
+
11825
13104
  """Sorting options for the list query."""
11826
13105
  sortings: [Sorting!]
11827
13106
  ): DomainList!
@@ -11840,6 +13119,11 @@ type Query {
11840
13119
  """Pagination options for the list query."""
11841
13120
  pagination: Pagination
11842
13121
 
13122
+ """
13123
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13124
+ """
13125
+ search: String
13126
+
11843
13127
  """Sorting options for the list query."""
11844
13128
  sortings: [Sorting!]
11845
13129
  ): ActivityThreadList!
@@ -11855,10 +13139,21 @@ type Query {
11855
13139
  """Pagination options for the list query."""
11856
13140
  pagination: Pagination
11857
13141
 
13142
+ """
13143
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13144
+ """
13145
+ search: String
13146
+
11858
13147
  """Sorting options for the list query."""
11859
13148
  sortings: [Sorting!]
11860
13149
  ): ActivityInstanceList!
11861
13150
 
13151
+ """프로젝트의 도면 번들 조회 (links 제외)"""
13152
+ drawingBundle(projectId: String!): DrawingBundle
13153
+
13154
+ """도면 번들의 하이퍼링크 목록"""
13155
+ drawingBundleLinks(projectId: String!): Object
13156
+
11862
13157
  """To fetch multiple appliance"""
11863
13158
  edges(
11864
13159
  """An array of filter conditions to apply to the list query."""
@@ -11870,6 +13165,11 @@ type Query {
11870
13165
  """Pagination options for the list query."""
11871
13166
  pagination: Pagination
11872
13167
 
13168
+ """
13169
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13170
+ """
13171
+ search: String
13172
+
11873
13173
  """Sorting options for the list query."""
11874
13174
  sortings: [Sorting!]
11875
13175
  ): ApplianceList!
@@ -11892,6 +13192,11 @@ type Query {
11892
13192
  """Pagination options for the list query."""
11893
13193
  pagination: Pagination
11894
13194
 
13195
+ """
13196
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13197
+ """
13198
+ search: String
13199
+
11895
13200
  """Sorting options for the list query."""
11896
13201
  sortings: [Sorting!]
11897
13202
  ): EmployeeList!
@@ -11907,6 +13212,11 @@ type Query {
11907
13212
  """Pagination options for the list query."""
11908
13213
  pagination: Pagination
11909
13214
 
13215
+ """
13216
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13217
+ """
13218
+ search: String
13219
+
11910
13220
  """Sorting options for the list query."""
11911
13221
  sortings: [Sorting!]
11912
13222
  ): EntityList!
@@ -11928,6 +13238,11 @@ type Query {
11928
13238
  """Pagination options for the list query."""
11929
13239
  pagination: Pagination
11930
13240
 
13241
+ """
13242
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13243
+ """
13244
+ search: String
13245
+
11931
13246
  """Sorting options for the list query."""
11932
13247
  sortings: [Sorting!]
11933
13248
  ): EntityColumnList!
@@ -11950,6 +13265,11 @@ type Query {
11950
13265
  """Pagination options for the list query."""
11951
13266
  pagination: Pagination
11952
13267
 
13268
+ """
13269
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13270
+ """
13271
+ search: String
13272
+
11953
13273
  """Sorting options for the list query."""
11954
13274
  sortings: [Sorting!]
11955
13275
  ): EnvVarList!
@@ -11968,6 +13288,11 @@ type Query {
11968
13288
  """Pagination options for the list query."""
11969
13289
  pagination: Pagination
11970
13290
 
13291
+ """
13292
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13293
+ """
13294
+ search: String
13295
+
11971
13296
  """Sorting options for the list query."""
11972
13297
  sortings: [Sorting!]
11973
13298
  ): BoardFavoriteList!
@@ -11983,6 +13308,11 @@ type Query {
11983
13308
  """Pagination options for the list query."""
11984
13309
  pagination: Pagination
11985
13310
 
13311
+ """
13312
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13313
+ """
13314
+ search: String
13315
+
11986
13316
  """Sorting options for the list query."""
11987
13317
  sortings: [Sorting!]
11988
13318
  ): FavoriteList!
@@ -12013,6 +13343,11 @@ type Query {
12013
13343
  """Pagination options for the list query."""
12014
13344
  pagination: Pagination
12015
13345
 
13346
+ """
13347
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13348
+ """
13349
+ search: String
13350
+
12016
13351
  """Sorting options for the list query."""
12017
13352
  sortings: [Sorting!]
12018
13353
  ): FontList!
@@ -12036,6 +13371,11 @@ type Query {
12036
13371
  """Pagination options for the list query."""
12037
13372
  pagination: Pagination
12038
13373
 
13374
+ """
13375
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13376
+ """
13377
+ search: String
13378
+
12039
13379
  """Sorting options for the list query."""
12040
13380
  sortings: [Sorting!]
12041
13381
  ): GroupList!
@@ -12043,6 +13383,11 @@ type Query {
12043
13383
  """To query whether I have the given permission"""
12044
13384
  hasPrivilege(category: String!, privilege: String!): Boolean!
12045
13385
 
13386
+ """
13387
+ Number of sessions on this anchor that the caller has hidden and that have had no activity since. Meant to be requested alongside chatSessionInbox in the same operation so the filter can say how many are folded away.
13388
+ """
13389
+ hiddenSessionCount(anchorId: String!, anchorType: String!): Int!
13390
+
12046
13391
  """Get import session progress."""
12047
13392
  importSession(id: String!): ImportSession
12048
13393
 
@@ -12066,6 +13411,11 @@ type Query {
12066
13411
  """Pagination options for the list query."""
12067
13412
  pagination: Pagination
12068
13413
 
13414
+ """
13415
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13416
+ """
13417
+ search: String
13418
+
12069
13419
  """Sorting options for the list query."""
12070
13420
  sortings: [Sorting!]
12071
13421
  ): InspectionDrawingTypeList!
@@ -12084,6 +13434,11 @@ type Query {
12084
13434
  """Pagination options for the list query."""
12085
13435
  pagination: Pagination
12086
13436
 
13437
+ """
13438
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13439
+ """
13440
+ search: String
13441
+
12087
13442
  """Sorting options for the list query."""
12088
13443
  sortings: [Sorting!]
12089
13444
  ): InspectionPartList!
@@ -12099,6 +13454,11 @@ type Query {
12099
13454
  """Pagination options for the list query."""
12100
13455
  pagination: Pagination
12101
13456
 
13457
+ """
13458
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13459
+ """
13460
+ search: String
13461
+
12102
13462
  """Sorting options for the list query."""
12103
13463
  sortings: [Sorting!]
12104
13464
  ): InstallableActivityList!
@@ -12128,6 +13488,11 @@ type Query {
12128
13488
  """Pagination options for the list query."""
12129
13489
  pagination: Pagination
12130
13490
 
13491
+ """
13492
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13493
+ """
13494
+ search: String
13495
+
12131
13496
  """Sorting options for the list query."""
12132
13497
  sortings: [Sorting!]
12133
13498
  ): IssueList!
@@ -12159,7 +13524,9 @@ type Query {
12159
13524
  id: String!
12160
13525
  ): KpiMetricValue
12161
13526
 
12162
- """To fetch multiple KpiMetricValues (cross-domain admin view)"""
13527
+ """
13528
+ To fetch multiple KpiMetricValues (project-scoped or cross-domain admin view)
13529
+ """
12163
13530
  kpiMetricValues(
12164
13531
  """An array of filter conditions to apply to the list query."""
12165
13532
  filters: [Filter!]
@@ -12169,6 +13536,12 @@ type Query {
12169
13536
 
12170
13537
  """Pagination options for the list query."""
12171
13538
  pagination: Pagination
13539
+ projectId: String
13540
+
13541
+ """
13542
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13543
+ """
13544
+ search: String
12172
13545
 
12173
13546
  """Sorting options for the list query."""
12174
13547
  sortings: [Sorting!]
@@ -12185,6 +13558,11 @@ type Query {
12185
13558
  """Pagination options for the list query."""
12186
13559
  pagination: Pagination
12187
13560
 
13561
+ """
13562
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13563
+ """
13564
+ search: String
13565
+
12188
13566
  """Sorting options for the list query."""
12189
13567
  sortings: [Sorting!]
12190
13568
  ): KpiMetricList!
@@ -12221,6 +13599,11 @@ type Query {
12221
13599
  """Pagination options for the list query."""
12222
13600
  pagination: Pagination
12223
13601
 
13602
+ """
13603
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13604
+ """
13605
+ search: String
13606
+
12224
13607
  """Sorting options for the list query."""
12225
13608
  sortings: [Sorting!]
12226
13609
  ): KpiOrgScopeList!
@@ -12234,7 +13617,7 @@ type Query {
12234
13617
  """
12235
13618
  Get KPI stats aggregated from project data with optional sectorType/buildingUsage filters
12236
13619
  """
12237
- kpiProjectStats(buildingUsage: String, endYearMonth: String, kpiNamePattern: String, sectorType: String, startYearMonth: String): [KpiProjectStat!]!
13620
+ kpiProjectStats(buildingUsage: String, endYearMonth: String, facilityType: String, kpiNamePattern: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiProjectStat!]!
12238
13621
 
12239
13622
  """Fetch a scope dimension definition by ID"""
12240
13623
  kpiScope(id: String!): KpiScope
@@ -12250,6 +13633,11 @@ type Query {
12250
13633
  """Pagination options for the list query."""
12251
13634
  pagination: Pagination
12252
13635
 
13636
+ """
13637
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13638
+ """
13639
+ search: String
13640
+
12253
13641
  """Sorting options for the list query."""
12254
13642
  sortings: [Sorting!]
12255
13643
  ): KpiScopeList!
@@ -12268,6 +13656,11 @@ type Query {
12268
13656
  """Pagination options for the list query."""
12269
13657
  pagination: Pagination
12270
13658
 
13659
+ """
13660
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13661
+ """
13662
+ search: String
13663
+
12271
13664
  """Sorting options for the list query."""
12272
13665
  sortings: [Sorting!]
12273
13666
  ): KpiStatisticList!
@@ -12292,6 +13685,11 @@ type Query {
12292
13685
  """Pagination options for the list query."""
12293
13686
  pagination: Pagination
12294
13687
 
13688
+ """
13689
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13690
+ """
13691
+ search: String
13692
+
12295
13693
  """Sorting options for the list query."""
12296
13694
  sortings: [Sorting!]
12297
13695
  ): KpiValueList!
@@ -12300,24 +13698,24 @@ type Query {
12300
13698
  kpiYValueComprehensiveStatsByGeoGroup(geoGroup: String): [KpiComprehensiveStatsByGeoGroup!]!
12301
13699
 
12302
13700
  """Get Y-level KPI statistics by geo_group code (sigungu)"""
12303
- kpiYValueStatsByGeoGroup(buildingUsage: String, endYearMonth: String, geoGroup: String!, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
13701
+ kpiYValueStatsByGeoGroup(buildingUsage: String, endYearMonth: String, facilityType: String, geoGroup: String!, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
12304
13702
 
12305
13703
  """Get KPI statistics for Y-category KPIs by specific metro area"""
12306
- kpiYValueStatsByMetroArea(buildingUsage: String, endYearMonth: String, metroArea: String!, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
13704
+ kpiYValueStatsByMetroArea(buildingUsage: String, endYearMonth: String, facilityType: String, metroArea: String!, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
12307
13705
 
12308
13706
  """Get KPI box plot statistics for Z-category KPIs by metro area"""
12309
- kpiZValueComprehensiveStatsByGeoGroup(buildingUsage: String, endYearMonth: String, geoGroup: String, kpiName: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStatsByGeoGroup!]!
13707
+ kpiZValueComprehensiveStatsByGeoGroup(buildingUsage: String, endYearMonth: String, facilityType: String, geoGroup: String, kpiName: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStatsByGeoGroup!]!
12310
13708
 
12311
13709
  """Get monthly KPI trend for Z-category KPIs by metro area"""
12312
- kpiZValueMonthlyTrendByGeoGroup(buildingUsage: String, endYearMonth: String, kpiName: String, sectorType: String, startYearMonth: String): [KpiMonthlyTrend!]!
13710
+ kpiZValueMonthlyTrendByGeoGroup(buildingUsage: String, endYearMonth: String, facilityType: String, kpiName: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiMonthlyTrend!]!
12313
13711
 
12314
13712
  """
12315
13713
  Get monthly KPI trend for Z-category KPIs for a specific sigungu (geo_group code)
12316
13714
  """
12317
- kpiZValueMonthlyTrendBySigungu(buildingUsage: String, endYearMonth: String, geoGroup: String!, kpiName: String, sectorType: String, startYearMonth: String): [KpiMonthlyTrend!]!
13715
+ kpiZValueMonthlyTrendBySigungu(buildingUsage: String, endYearMonth: String, facilityType: String, geoGroup: String!, kpiName: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiMonthlyTrend!]!
12318
13716
 
12319
13717
  """Get KPI statistics by sigungu (geo_group code) level"""
12320
- kpiZValueStatsBySigungu(buildingUsage: String, endYearMonth: String, kpiName: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStatsByGeoGroup!]!
13718
+ kpiZValueStatsBySigungu(buildingUsage: String, endYearMonth: String, facilityType: String, kpiName: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStatsByGeoGroup!]!
12321
13719
 
12322
13720
  """To fetch multiple Kpis"""
12323
13721
  kpis(
@@ -12330,6 +13728,11 @@ type Query {
12330
13728
  """Pagination options for the list query."""
12331
13729
  pagination: Pagination
12332
13730
 
13731
+ """
13732
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13733
+ """
13734
+ search: String
13735
+
12333
13736
  """Sorting options for the list query."""
12334
13737
  sortings: [Sorting!]
12335
13738
  ): KpiList!
@@ -12360,6 +13763,11 @@ type Query {
12360
13763
  """Pagination options for the list query."""
12361
13764
  pagination: Pagination
12362
13765
 
13766
+ """
13767
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13768
+ """
13769
+ search: String
13770
+
12363
13771
  """Sorting options for the list query."""
12364
13772
  sortings: [Sorting!]
12365
13773
  ): KpiValueList!
@@ -12378,6 +13786,11 @@ type Query {
12378
13786
  """Pagination options for the list query."""
12379
13787
  pagination: Pagination
12380
13788
 
13789
+ """
13790
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13791
+ """
13792
+ search: String
13793
+
12381
13794
  """Sorting options for the list query."""
12382
13795
  sortings: [Sorting!]
12383
13796
  ): LiteMenuList!
@@ -12393,6 +13806,11 @@ type Query {
12393
13806
  """Pagination options for the list query."""
12394
13807
  pagination: Pagination
12395
13808
 
13809
+ """
13810
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13811
+ """
13812
+ search: String
13813
+
12396
13814
  """Sorting options for the list query."""
12397
13815
  sortings: [Sorting!]
12398
13816
  ): LoginHistoryList!
@@ -12417,6 +13835,11 @@ type Query {
12417
13835
  """Pagination options for the list query."""
12418
13836
  pagination: Pagination
12419
13837
 
13838
+ """
13839
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13840
+ """
13841
+ search: String
13842
+
12420
13843
  """Sorting options for the list query."""
12421
13844
  sortings: [Sorting!]
12422
13845
  ): MenuButtonList!
@@ -12438,6 +13861,11 @@ type Query {
12438
13861
  """Pagination options for the list query."""
12439
13862
  pagination: Pagination
12440
13863
 
13864
+ """
13865
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13866
+ """
13867
+ search: String
13868
+
12441
13869
  """Sorting options for the list query."""
12442
13870
  sortings: [Sorting!]
12443
13871
  ): MenuColumnList!
@@ -12459,6 +13887,11 @@ type Query {
12459
13887
  """Pagination options for the list query."""
12460
13888
  pagination: Pagination
12461
13889
 
13890
+ """
13891
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13892
+ """
13893
+ search: String
13894
+
12462
13895
  """Sorting options for the list query."""
12463
13896
  sortings: [Sorting!]
12464
13897
  ): MenuDetailButtonList!
@@ -12477,6 +13910,11 @@ type Query {
12477
13910
  """Pagination options for the list query."""
12478
13911
  pagination: Pagination
12479
13912
 
13913
+ """
13914
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13915
+ """
13916
+ search: String
13917
+
12480
13918
  """Sorting options for the list query."""
12481
13919
  sortings: [Sorting!]
12482
13920
  ): MenuDetailColumnList!
@@ -12492,6 +13930,11 @@ type Query {
12492
13930
  """Pagination options for the list query."""
12493
13931
  pagination: Pagination
12494
13932
 
13933
+ """
13934
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13935
+ """
13936
+ search: String
13937
+
12495
13938
  """Sorting options for the list query."""
12496
13939
  sortings: [Sorting!]
12497
13940
  ): MenuDetailList!
@@ -12507,6 +13950,11 @@ type Query {
12507
13950
  """Pagination options for the list query."""
12508
13951
  pagination: Pagination
12509
13952
 
13953
+ """
13954
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13955
+ """
13956
+ search: String
13957
+
12510
13958
  """Sorting options for the list query."""
12511
13959
  sortings: [Sorting!]
12512
13960
  ): MenuList!
@@ -12522,10 +13970,20 @@ type Query {
12522
13970
  """Pagination options for the list query."""
12523
13971
  pagination: Pagination
12524
13972
 
13973
+ """
13974
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
13975
+ """
13976
+ search: String
13977
+
12525
13978
  """Sorting options for the list query."""
12526
13979
  sortings: [Sorting!]
12527
13980
  ): ApprovalLineList!
12528
13981
 
13982
+ """
13983
+ Fetches the caller's own employee records in this domain. Empty when the caller is not an employee.
13984
+ """
13985
+ myEmployees: [Employee!]!
13986
+
12529
13987
  """To fetch current user's Favorites"""
12530
13988
  myFavorites: [Favorite!]!
12531
13989
 
@@ -12540,6 +13998,11 @@ type Query {
12540
13998
  """Pagination options for the list query."""
12541
13999
  pagination: Pagination
12542
14000
 
14001
+ """
14002
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14003
+ """
14004
+ search: String
14005
+
12543
14006
  """Sorting options for the list query."""
12544
14007
  sortings: [Sorting!]
12545
14008
  ): LiteMenuList!
@@ -12556,6 +14019,11 @@ type Query {
12556
14019
  """Pagination options for the list query."""
12557
14020
  pagination: Pagination
12558
14021
 
14022
+ """
14023
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14024
+ """
14025
+ search: String
14026
+
12559
14027
  """Sorting options for the list query."""
12560
14028
  sortings: [Sorting!]
12561
14029
  ): MenuList!
@@ -12571,6 +14039,11 @@ type Query {
12571
14039
  """Pagination options for the list query."""
12572
14040
  pagination: Pagination
12573
14041
 
14042
+ """
14043
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14044
+ """
14045
+ search: String
14046
+
12574
14047
  """Sorting options for the list query."""
12575
14048
  sortings: [Sorting!]
12576
14049
  ): NotificationList!
@@ -12592,6 +14065,11 @@ type Query {
12592
14065
  """Pagination options for the list query."""
12593
14066
  pagination: Pagination
12594
14067
 
14068
+ """
14069
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14070
+ """
14071
+ search: String
14072
+
12595
14073
  """Sorting options for the list query."""
12596
14074
  sortings: [Sorting!]
12597
14075
  ): PagePreferenceList!
@@ -12613,6 +14091,11 @@ type Query {
12613
14091
  """Pagination options for the list query."""
12614
14092
  pagination: Pagination
12615
14093
 
14094
+ """
14095
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14096
+ """
14097
+ search: String
14098
+
12616
14099
  """Sorting options for the list query."""
12617
14100
  sortings: [Sorting!]
12618
14101
  ): UserPreferenceList!
@@ -12637,6 +14120,11 @@ type Query {
12637
14120
  """Pagination options for the list query."""
12638
14121
  pagination: Pagination
12639
14122
 
14123
+ """
14124
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14125
+ """
14126
+ search: String
14127
+
12640
14128
  """Sorting options for the list query."""
12641
14129
  sortings: [Sorting!]
12642
14130
  ): NotificationRuleList!
@@ -12652,6 +14140,11 @@ type Query {
12652
14140
  """Pagination options for the list query."""
12653
14141
  pagination: Pagination
12654
14142
 
14143
+ """
14144
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14145
+ """
14146
+ search: String
14147
+
12655
14148
  """Sorting options for the list query."""
12656
14149
  sortings: [Sorting!]
12657
14150
  ): NotificationList!
@@ -12670,6 +14163,11 @@ type Query {
12670
14163
  """Pagination options for the list query."""
12671
14164
  pagination: Pagination
12672
14165
 
14166
+ """
14167
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14168
+ """
14169
+ search: String
14170
+
12673
14171
  """Sorting options for the list query."""
12674
14172
  sortings: [Sorting!]
12675
14173
  ): Oauth2ClientList!
@@ -12695,6 +14193,11 @@ type Query {
12695
14193
  """Pagination options for the list query."""
12696
14194
  pagination: Pagination
12697
14195
 
14196
+ """
14197
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14198
+ """
14199
+ search: String
14200
+
12698
14201
  """Sorting options for the list query."""
12699
14202
  sortings: [Sorting!]
12700
14203
  ): PartnerList!
@@ -12718,6 +14221,11 @@ type Query {
12718
14221
  """Pagination options for the list query."""
12719
14222
  pagination: Pagination
12720
14223
 
14224
+ """
14225
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14226
+ """
14227
+ search: String
14228
+
12721
14229
  """Sorting options for the list query."""
12722
14230
  sortings: [Sorting!]
12723
14231
  ): PayloadLogList!
@@ -12742,6 +14250,11 @@ type Query {
12742
14250
  """Pagination options for the list query."""
12743
14251
  pagination: Pagination
12744
14252
 
14253
+ """
14254
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14255
+ """
14256
+ search: String
14257
+
12745
14258
  """Sorting options for the list query."""
12746
14259
  sortings: [Sorting!]
12747
14260
  ): ActivityInstanceList!
@@ -12763,6 +14276,11 @@ type Query {
12763
14276
  """Pagination options for the list query."""
12764
14277
  pagination: Pagination
12765
14278
 
14279
+ """
14280
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14281
+ """
14282
+ search: String
14283
+
12766
14284
  """Sorting options for the list query."""
12767
14285
  sortings: [Sorting!]
12768
14286
  ): PlayGroupList!
@@ -12784,6 +14302,11 @@ type Query {
12784
14302
  """Pagination options for the list query."""
12785
14303
  pagination: Pagination
12786
14304
 
14305
+ """
14306
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14307
+ """
14308
+ search: String
14309
+
12787
14310
  """Sorting options for the list query."""
12788
14311
  sortings: [Sorting!]
12789
14312
  ): PrinterDeviceList!
@@ -12799,6 +14322,11 @@ type Query {
12799
14322
  """Pagination options for the list query."""
12800
14323
  pagination: Pagination
12801
14324
 
14325
+ """
14326
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14327
+ """
14328
+ search: String
14329
+
12802
14330
  """Sorting options for the list query."""
12803
14331
  sortings: [Sorting!]
12804
14332
  ): PrivilegeList!
@@ -12823,6 +14351,11 @@ type Query {
12823
14351
  """Pagination options for the list query."""
12824
14352
  pagination: Pagination
12825
14353
 
14354
+ """
14355
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14356
+ """
14357
+ search: String
14358
+
12826
14359
  """Sorting options for the list query."""
12827
14360
  sortings: [Sorting!]
12828
14361
  ): ProjectChecklistItemList!
@@ -12838,6 +14371,11 @@ type Query {
12838
14371
  """Pagination options for the list query."""
12839
14372
  pagination: Pagination
12840
14373
 
14374
+ """
14375
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14376
+ """
14377
+ search: String
14378
+
12841
14379
  """Sorting options for the list query."""
12842
14380
  sortings: [Sorting!]
12843
14381
  ): ProjectChecklistList!
@@ -12856,6 +14394,11 @@ type Query {
12856
14394
  """Pagination options for the list query."""
12857
14395
  pagination: Pagination
12858
14396
 
14397
+ """
14398
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14399
+ """
14400
+ search: String
14401
+
12859
14402
  """Sorting options for the list query."""
12860
14403
  sortings: [Sorting!]
12861
14404
  ): ProjectReportList!
@@ -12876,6 +14419,11 @@ type Query {
12876
14419
  """Pagination options for the list query."""
12877
14420
  pagination: Pagination
12878
14421
 
14422
+ """
14423
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14424
+ """
14425
+ search: String
14426
+
12879
14427
  """Sorting options for the list query."""
12880
14428
  sortings: [Sorting!]
12881
14429
  ): ProjectList!
@@ -12900,6 +14448,11 @@ type Query {
12900
14448
  """Pagination options for the list query."""
12901
14449
  pagination: Pagination
12902
14450
 
14451
+ """
14452
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14453
+ """
14454
+ search: String
14455
+
12903
14456
  """Sorting options for the list query."""
12904
14457
  sortings: [Sorting!]
12905
14458
  ): ResourceList!
@@ -12913,6 +14466,12 @@ type Query {
12913
14466
  """To fetch privileges of a role"""
12914
14467
  rolePrivileges(roleId: String!): [RolePrivilege!]!
12915
14468
 
14469
+ """To fetch one role template by id"""
14470
+ roleTemplate(id: String!): RoleTemplateView
14471
+
14472
+ """To fetch the role templates this installation offers"""
14473
+ roleTemplates: [RoleTemplateView!]!
14474
+
12916
14475
  """To fetch multiple users"""
12917
14476
  roles(
12918
14477
  """An array of filter conditions to apply to the list query."""
@@ -12924,6 +14483,11 @@ type Query {
12924
14483
  """Pagination options for the list query."""
12925
14484
  pagination: Pagination
12926
14485
 
14486
+ """
14487
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14488
+ """
14489
+ search: String
14490
+
12927
14491
  """Sorting options for the list query."""
12928
14492
  sortings: [Sorting!]
12929
14493
  ): RoleList!
@@ -12945,10 +14509,33 @@ type Query {
12945
14509
  """Pagination options for the list query."""
12946
14510
  pagination: Pagination
12947
14511
 
14512
+ """
14513
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14514
+ """
14515
+ search: String
14516
+
12948
14517
  """Sorting options for the list query."""
12949
14518
  sortings: [Sorting!]
12950
14519
  ): ScenarioInstanceList!
12951
14520
 
14521
+ """Fetches the most recently released version (snapshot) of a scenario."""
14522
+ scenarioPublished(id: String!): ScenarioHistory
14523
+
14524
+ """
14525
+ Fetches a specific released version (snapshot) of a scenario by version number.
14526
+ """
14527
+ scenarioVersion(id: String!, version: Int!): ScenarioHistory
14528
+
14529
+ """
14530
+ Computes the difference between a released version and either another released version or the current draft. Omit toVersion to diff the base version against the current draft.
14531
+ """
14532
+ scenarioVersionDiff(id: String!, toVersion: Int, version: Int!): ScenarioVersionDiff!
14533
+
14534
+ """
14535
+ Fetches recent released versions (snapshots) of a scenario, newest first.
14536
+ """
14537
+ scenarioVersions(id: String!): [ScenarioHistory!]!
14538
+
12952
14539
  """Fetches a paginated list of scenarios."""
12953
14540
  scenarios(
12954
14541
  """An array of filter conditions to apply to the list query."""
@@ -12960,6 +14547,11 @@ type Query {
12960
14547
  """Pagination options for the list query."""
12961
14548
  pagination: Pagination
12962
14549
 
14550
+ """
14551
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14552
+ """
14553
+ search: String
14554
+
12963
14555
  """Sorting options for the list query."""
12964
14556
  sortings: [Sorting!]
12965
14557
  ): ScenarioList!
@@ -12973,6 +14565,11 @@ type Query {
12973
14565
  """Pagination options for the list query."""
12974
14566
  pagination: Pagination
12975
14567
 
14568
+ """
14569
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14570
+ """
14571
+ search: String
14572
+
12976
14573
  """Sorting options for the list query."""
12977
14574
  sortings: [Sorting!]
12978
14575
  ): DomainList!
@@ -12996,6 +14593,11 @@ type Query {
12996
14593
  """Pagination options for the list query."""
12997
14594
  pagination: Pagination
12998
14595
 
14596
+ """
14597
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14598
+ """
14599
+ search: String
14600
+
12999
14601
  """Sorting options for the list query."""
13000
14602
  sortings: [Sorting!]
13001
14603
  ): SettingList!
@@ -13011,6 +14613,11 @@ type Query {
13011
14613
  """Pagination options for the list query."""
13012
14614
  pagination: Pagination
13013
14615
 
14616
+ """
14617
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14618
+ """
14619
+ search: String
14620
+
13014
14621
  """Sorting options for the list query."""
13015
14622
  sortings: [Sorting!]
13016
14623
  ): ActivityList!
@@ -13032,6 +14639,11 @@ type Query {
13032
14639
  """Pagination options for the list query."""
13033
14640
  pagination: Pagination
13034
14641
 
14642
+ """
14643
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14644
+ """
14645
+ search: String
14646
+
13035
14647
  """Sorting options for the list query."""
13036
14648
  sortings: [Sorting!]
13037
14649
  ): StateRegisterList!
@@ -13050,6 +14662,11 @@ type Query {
13050
14662
  """Pagination options for the list query."""
13051
14663
  pagination: Pagination
13052
14664
 
14665
+ """
14666
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14667
+ """
14668
+ search: String
14669
+
13053
14670
  """Sorting options for the list query."""
13054
14671
  sortings: [Sorting!]
13055
14672
  ): StepList!
@@ -13073,6 +14690,11 @@ type Query {
13073
14690
  """Pagination options for the list query."""
13074
14691
  pagination: Pagination
13075
14692
 
14693
+ """
14694
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14695
+ """
14696
+ search: String
14697
+
13076
14698
  """Sorting options for the list query."""
13077
14699
  sortings: [Sorting!]
13078
14700
  ): ActivityList!
@@ -13091,6 +14713,11 @@ type Query {
13091
14713
  """Pagination options for the list query."""
13092
14714
  pagination: Pagination
13093
14715
 
14716
+ """
14717
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14718
+ """
14719
+ search: String
14720
+
13094
14721
  """Sorting options for the list query."""
13095
14722
  sortings: [Sorting!]
13096
14723
  ): SupervisorList!
@@ -13115,6 +14742,11 @@ type Query {
13115
14742
  """Pagination options for the list query."""
13116
14743
  pagination: Pagination
13117
14744
 
14745
+ """
14746
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14747
+ """
14748
+ search: String
14749
+
13118
14750
  """Sorting options for the list query."""
13119
14751
  sortings: [Sorting!]
13120
14752
  ): TaskResourceList!
@@ -13141,6 +14773,11 @@ type Query {
13141
14773
  """Pagination options for the list query."""
13142
14774
  pagination: Pagination
13143
14775
 
14776
+ """
14777
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14778
+ """
14779
+ search: String
14780
+
13144
14781
  """Sorting options for the list query."""
13145
14782
  sortings: [Sorting!]
13146
14783
  ): TaskList!
@@ -13156,6 +14793,11 @@ type Query {
13156
14793
  """Pagination options for the list query."""
13157
14794
  pagination: Pagination
13158
14795
 
14796
+ """
14797
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14798
+ """
14799
+ search: String
14800
+
13159
14801
  """Sorting options for the list query."""
13160
14802
  sortings: [Sorting!]
13161
14803
  ): TerminologyList!
@@ -13177,6 +14819,11 @@ type Query {
13177
14819
  """Pagination options for the list query."""
13178
14820
  pagination: Pagination
13179
14821
 
14822
+ """
14823
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14824
+ """
14825
+ search: String
14826
+
13180
14827
  """Sorting options for the list query."""
13181
14828
  sortings: [Sorting!]
13182
14829
  ): ThemeList!
@@ -13192,15 +14839,20 @@ type Query {
13192
14839
  """Pagination options for the list query."""
13193
14840
  pagination: Pagination
13194
14841
 
14842
+ """
14843
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14844
+ """
14845
+ search: String
14846
+
13195
14847
  """Sorting options for the list query."""
13196
14848
  sortings: [Sorting!]
13197
14849
  ): ActivityThreadList!
13198
14850
 
13199
14851
  """Get KPI box plot statistics for Y-category KPIs for all projects"""
13200
- totalKpiYValueComprehensiveStats(buildingUsage: String, endYearMonth: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
14852
+ totalKpiYValueComprehensiveStats(buildingUsage: String, endYearMonth: String, facilityType: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
13201
14853
 
13202
14854
  """Get KPI box plot statistics for Z-category KPIs for all projects"""
13203
- totalKpiZValueComprehensiveStats(buildingUsage: String, endYearMonth: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
14855
+ totalKpiZValueComprehensiveStats(buildingUsage: String, endYearMonth: String, facilityType: String, projectScale: String, sectorType: String, startYearMonth: String): [KpiComprehensiveStats!]!
13204
14856
 
13205
14857
  """Fetches a user by their email address within the current domain."""
13206
14858
  user(
@@ -13227,11 +14879,36 @@ type Query {
13227
14879
  """Pagination options for the list query."""
13228
14880
  pagination: Pagination
13229
14881
 
14882
+ """
14883
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14884
+ """
14885
+ search: String
14886
+
13230
14887
  """Sorting options for the list query."""
13231
14888
  sortings: [Sorting!]
13232
14889
  ): UserList!
13233
14890
  vendors: [Domain!]!
13234
14891
 
14892
+ """To fetch work shift arrangements that used to be in force"""
14893
+ workShiftRevisions(
14894
+ """An array of filter conditions to apply to the list query."""
14895
+ filters: [Filter!]
14896
+
14897
+ """Inherited value type for the list query."""
14898
+ inherited: InheritedValueType
14899
+
14900
+ """Pagination options for the list query."""
14901
+ pagination: Pagination
14902
+
14903
+ """
14904
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14905
+ """
14906
+ search: String
14907
+
14908
+ """Sorting options for the list query."""
14909
+ sortings: [Sorting!]
14910
+ ): WorkShiftRevisionList!
14911
+
13235
14912
  """To fetch multiple WorkShifts"""
13236
14913
  workShifts(
13237
14914
  """An array of filter conditions to apply to the list query."""
@@ -13243,6 +14920,11 @@ type Query {
13243
14920
  """Pagination options for the list query."""
13244
14921
  pagination: Pagination
13245
14922
 
14923
+ """
14924
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14925
+ """
14926
+ search: String
14927
+
13246
14928
  """Sorting options for the list query."""
13247
14929
  sortings: [Sorting!]
13248
14930
  ): WorkShiftList!
@@ -13261,6 +14943,11 @@ type Query {
13261
14943
  """Pagination options for the list query."""
13262
14944
  pagination: Pagination
13263
14945
 
14946
+ """
14947
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14948
+ """
14949
+ search: String
14950
+
13264
14951
  """Sorting options for the list query."""
13265
14952
  sortings: [Sorting!]
13266
14953
  ): WorkerTypeList!
@@ -13327,6 +15014,7 @@ type Role {
13327
15014
 
13328
15015
  """The name of the role."""
13329
15016
  name: String
15017
+ privilegeCount: Int!
13330
15018
 
13331
15019
  """Privileges granted by this role."""
13332
15020
  privileges: [Privilege!]
@@ -13390,6 +15078,11 @@ type RolePrivilege {
13390
15078
  """The category of the privilege."""
13391
15079
  category: String
13392
15080
 
15081
+ """
15082
+ True when no module in this deployment declares this privilege anymore (@privilege directive). Computed per request — it answers for the asking deployment, not for all time.
15083
+ """
15084
+ deprecated: Boolean!
15085
+
13393
15086
  """A description of the privilege."""
13394
15087
  description: String
13395
15088
 
@@ -13400,6 +15093,51 @@ type RolePrivilege {
13400
15093
  name: String
13401
15094
  }
13402
15095
 
15096
+ """One module and the axes a role template grants on it."""
15097
+ type RoleTemplateGrantView {
15098
+ """The privilege axes granted on that category."""
15099
+ axes: [String!]!
15100
+
15101
+ """The privilege category — what is guarded."""
15102
+ category: String!
15103
+
15104
+ """Axes named by the template that this installation does not declare."""
15105
+ missingAxes: [String!]!
15106
+ }
15107
+
15108
+ """A role template offered by this installation."""
15109
+ type RoleTemplateView {
15110
+ """
15111
+ Whether a role already carries this template's default name in the current domain.
15112
+ """
15113
+ defaultNameTaken: Boolean!
15114
+
15115
+ """A description of the seat this template creates."""
15116
+ description: String
15117
+
15118
+ """The modules and axes this template grants."""
15119
+ grants: [RoleTemplateGrantView!]!
15120
+
15121
+ """
15122
+ Whether this template grants nothing on purpose, rather than by omission.
15123
+ """
15124
+ grantsNothingDeliberately: Boolean!
15125
+
15126
+ """Declaration key, namespaced by the declaring application."""
15127
+ id: String!
15128
+
15129
+ """
15130
+ How many privileges the template names that this installation does not have.
15131
+ """
15132
+ missingCount: Int!
15133
+
15134
+ """The role name this template creates in a domain."""
15135
+ name: String!
15136
+
15137
+ """How many privileges this template would actually grant here."""
15138
+ privilegeCount: Int!
15139
+ }
15140
+
13403
15141
  type RoomFinishDetail {
13404
15142
  box: String
13405
15143
  dwgId: String
@@ -13442,6 +15180,11 @@ type Scenario {
13442
15180
 
13443
15181
  """Indicates if the scenario is accessible and executable system-wide."""
13444
15182
  public: Boolean
15183
+
15184
+ """
15185
+ The publish state of the scenario: 'draft' (has unreleased edits) or 'released'.
15186
+ """
15187
+ publishState: String
13445
15188
  publishTags: [Connection!]!
13446
15189
 
13447
15190
  """Role required to execute the scenario."""
@@ -13453,9 +15196,7 @@ type Scenario {
13453
15196
  """The ID of the scheduled job, if any."""
13454
15197
  scheduleId: String
13455
15198
  state: String
13456
-
13457
- """The sequence of steps that make up the scenario."""
13458
- steps: [Step!]
15199
+ steps: [Step!]!
13459
15200
 
13460
15201
  """The timezone for the schedule."""
13461
15202
  timezone: String
@@ -13471,6 +15212,88 @@ type Scenario {
13471
15212
 
13472
15213
  """The user who last updated the scenario."""
13473
15214
  updater: User
15215
+
15216
+ """
15217
+ The latest released version number of the scenario (0 if never released).
15218
+ """
15219
+ version: Int
15220
+ }
15221
+
15222
+ """A single scenario field difference between two versions."""
15223
+ type ScenarioFieldDiff {
15224
+ """The value after (in the target version/draft)."""
15225
+ after: Object
15226
+
15227
+ """The value before (in the base version)."""
15228
+ before: Object
15229
+
15230
+ """
15231
+ The name of the field that changed (e.g. description, schedule, steps).
15232
+ """
15233
+ field: String!
15234
+ }
15235
+
15236
+ """Stores released (published) version snapshots of scenarios."""
15237
+ type ScenarioHistory {
15238
+ """The action that created this history record."""
15239
+ action: String!
15240
+
15241
+ """The release note/comment left when this version was published."""
15242
+ comment: String
15243
+
15244
+ """The creation timestamp of the original scenario."""
15245
+ createdAt: DateTimeISO
15246
+
15247
+ """The user who created the original scenario."""
15248
+ creator: User
15249
+
15250
+ """The description of the scenario at this point in history."""
15251
+ description: String
15252
+
15253
+ """The domain this scenario belonged to."""
15254
+ domain: Domain
15255
+
15256
+ """Unique identifier for the scenario history record."""
15257
+ id: ID!
15258
+
15259
+ """The iteration mode of the scenario at this point in history."""
15260
+ iteration: String
15261
+
15262
+ """The name of the scenario at this point in history."""
15263
+ name: String
15264
+
15265
+ """The ID of the original scenario this history record belongs to."""
15266
+ originalId: String!
15267
+
15268
+ """Privilege required to execute the scenario."""
15269
+ privilege: PrivilegeObject
15270
+
15271
+ """Role required to execute the scenario at this point."""
15272
+ role: Role
15273
+
15274
+ """The schedule of the scenario at this point in history."""
15275
+ schedule: String
15276
+
15277
+ """The steps of the scenario captured in this version."""
15278
+ steps: [Step!]
15279
+
15280
+ """The timezone of the scenario at this point in history."""
15281
+ timezone: String
15282
+
15283
+ """The time-to-live of scenario instances at this point."""
15284
+ ttl: Int
15285
+
15286
+ """The type of the scenario at this point in history."""
15287
+ type: String
15288
+
15289
+ """The update timestamp of the scenario at this point in history."""
15290
+ updatedAt: DateTimeISO
15291
+
15292
+ """The user who published this version."""
15293
+ updater: User
15294
+
15295
+ """The released version number of this snapshot."""
15296
+ version: Int
13474
15297
  }
13475
15298
 
13476
15299
  """Represents a running or completed instance of a scenario."""
@@ -13679,6 +15502,47 @@ type ScenarioQueueState {
13679
15502
  queue: [PendingObject!]!
13680
15503
  }
13681
15504
 
15505
+ """
15506
+ A single step difference between two scenario versions, keyed by step name.
15507
+ """
15508
+ type ScenarioStepDiff {
15509
+ """The step as it is in the target version/draft."""
15510
+ after: Object
15511
+
15512
+ """The step as it was in the base version."""
15513
+ before: Object
15514
+
15515
+ """The kind of change: 'added', 'removed', or 'modified'."""
15516
+ changeType: String!
15517
+
15518
+ """
15519
+ Field-level changes within a modified step (task, connection, params, ...).
15520
+ """
15521
+ fieldDiffs: [ScenarioFieldDiff!]
15522
+
15523
+ """The step name (identity used for diffing)."""
15524
+ name: String
15525
+ }
15526
+
15527
+ """
15528
+ The difference between two scenario versions (or a version and the current draft).
15529
+ """
15530
+ type ScenarioVersionDiff {
15531
+ """Scenario-level field changes."""
15532
+ fieldDiffs: [ScenarioFieldDiff!]!
15533
+
15534
+ """The base version number being compared from."""
15535
+ fromVersion: Int!
15536
+
15537
+ """Step-level changes keyed by step name."""
15538
+ stepDiffs: [ScenarioStepDiff!]!
15539
+
15540
+ """
15541
+ The target version number being compared to. Null means the current draft.
15542
+ """
15543
+ toVersion: Int
15544
+ }
15545
+
13682
15546
  """Types of organizational scope dimensions"""
13683
15547
  enum ScopeType {
13684
15548
  BUSINESS
@@ -13689,6 +15553,36 @@ enum ScopeType {
13689
15553
  TEMPORAL
13690
15554
  }
13691
15555
 
15556
+ """
15557
+ Activity notice for a session the current user participates in — badge/list refresh only, no message body.
15558
+ """
15559
+ type SessionActivity {
15560
+ """User who caused the activity — clients skip badging their own."""
15561
+ actorId: String
15562
+
15563
+ """Id of the anchored target."""
15564
+ anchorId: String
15565
+
15566
+ """
15567
+ What the session is anchored to: 'board' | 'space' | 'instance' | 'none'.
15568
+ """
15569
+ anchorType: String
15570
+
15571
+ """Activity timestamp (ISO)."""
15572
+ at: String!
15573
+
15574
+ """
15575
+ Kind of activity: 'message' (new message — raise the unread badge) or 'meta' (session itself changed, e.g. renamed — refresh the list but do not badge).
15576
+ """
15577
+ kind: String!
15578
+
15579
+ """One-line preview (not the full body)."""
15580
+ preview: String
15581
+
15582
+ """Session that had activity."""
15583
+ sessionId: String!
15584
+ }
15585
+
13692
15586
  """Entity for Setting"""
13693
15587
  type Setting {
13694
15588
  category: String!
@@ -13717,6 +15611,11 @@ input SettingPatch {
13717
15611
  value: String
13718
15612
  }
13719
15613
 
15614
+ input SiteSpecFileInput {
15615
+ name: String!
15616
+ url: String!
15617
+ }
15618
+
13720
15619
  """현장 유형"""
13721
15620
  enum SiteType {
13722
15621
  APARTMENT_COMPLEX
@@ -13987,6 +15886,9 @@ type Subscription {
13987
15886
  """
13988
15887
  boardPatchActivity(boardId: String!): PatchEntry!
13989
15888
 
15889
+ """채팅 실시간 이벤트 구독 — 내가 멤버인 대화방의 이벤트만 수신"""
15890
+ chatEvent: ChatEvent!
15891
+
13990
15892
  """
13991
15893
  Subscribes to chat messages (user / assistant / system) of a session for real-time group chat.
13992
15894
  """
@@ -14003,6 +15905,11 @@ type Subscription {
14003
15905
  Real-time subscription for out-of-control (OOC) events. Users with supervisory roles receive immediate notifications when OOC events occur in their domain.
14004
15906
  """
14005
15907
  dataOoc: DataOoc!
15908
+
15909
+ """
15910
+ Subscribes to activity in every session the current user participates in, so a closed chat surface can still show unread badges and refresh its list.
15911
+ """
15912
+ mySessionActivity: SessionActivity!
14006
15913
  notification(subjects: [String!]): Notification!
14007
15914
 
14008
15915
  """Subscribes to real-time updates for a specific play group."""
@@ -14081,6 +15988,11 @@ type Task {
14081
15988
  """Pagination options for the list query."""
14082
15989
  pagination: Pagination
14083
15990
 
15991
+ """
15992
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
15993
+ """
15994
+ search: String
15995
+
14084
15996
  """Sorting options for the list query."""
14085
15997
  sortings: [Sorting!]
14086
15998
  ): [Task!]
@@ -14405,6 +16317,11 @@ type User {
14405
16317
  """Locale or language preference for the user."""
14406
16318
  locale: String
14407
16319
 
16320
+ """
16321
+ When the account was locked. With the configured lock duration this says when it lifts.
16322
+ """
16323
+ lockedAt: DateTimeISO
16324
+
14408
16325
  """Full name of the user."""
14409
16326
  name: String
14410
16327
 
@@ -14556,6 +16473,11 @@ type UsersAuthProviders {
14556
16473
  type WorkShift {
14557
16474
  createdAt: DateTimeISO
14558
16475
  creator: User
16476
+
16477
+ """
16478
+ Weekdays this shift runs on as a CSV of 0(Sun)..6(Sat). Empty means every day
16479
+ """
16480
+ daysOfWeek: String
14559
16481
  description: String
14560
16482
  domain: Domain!
14561
16483
  fromDate: Float
@@ -14581,6 +16503,10 @@ type WorkShiftList {
14581
16503
  }
14582
16504
 
14583
16505
  input WorkShiftPatch {
16506
+ """
16507
+ Weekdays this shift runs on as a CSV of 0(Sun)..6(Sat). Empty means every day
16508
+ """
16509
+ daysOfWeek: String
14584
16510
  description: String
14585
16511
  fromDate: Float!
14586
16512
  fromTime: String!
@@ -14589,6 +16515,24 @@ input WorkShiftPatch {
14589
16515
  toTime: String!
14590
16516
  }
14591
16517
 
16518
+ """A work shift arrangement that used to be in force"""
16519
+ type WorkShiftRevision {
16520
+ createdAt: DateTimeISO
16521
+ creator: User
16522
+ domain: Domain!
16523
+ effectiveFrom: DateTimeISO!
16524
+ effectiveTo: DateTimeISO
16525
+ id: ID!
16526
+
16527
+ """the shift set that was in force, as JSON text"""
16528
+ shifts: String!
16529
+ }
16530
+
16531
+ type WorkShiftRevisionList {
16532
+ items: [WorkShiftRevision!]!
16533
+ total: Int!
16534
+ }
16535
+
14592
16536
  """작업자 타입"""
14593
16537
  type WorkerType {
14594
16538
  createdAt: DateTimeISO