@dssp/supervision 1.0.0-alpha.97 → 1.0.0

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 (498) hide show
  1. package/package.json +13 -12
  2. package/dist-client/bootstrap.d.ts +0 -1
  3. package/dist-client/bootstrap.js +0 -2
  4. package/dist-client/bootstrap.js.map +0 -1
  5. package/dist-client/graphql/building-inspection.d.ts +0 -1
  6. package/dist-client/graphql/building-inspection.js +0 -102
  7. package/dist-client/graphql/building-inspection.js.map +0 -1
  8. package/dist-client/index.d.ts +0 -0
  9. package/dist-client/index.js +0 -2
  10. package/dist-client/index.js.map +0 -1
  11. package/dist-client/pages/action-plan/action-plan-importer.d.ts +0 -10
  12. package/dist-client/pages/action-plan/action-plan-importer.js +0 -101
  13. package/dist-client/pages/action-plan/action-plan-importer.js.map +0 -1
  14. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +0 -62
  15. package/dist-client/pages/action-plan/action-plan-list-page.js +0 -322
  16. package/dist-client/pages/action-plan/action-plan-list-page.js.map +0 -1
  17. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.d.ts +0 -22
  18. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js +0 -171
  19. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js.map +0 -1
  20. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.d.ts +0 -59
  21. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +0 -868
  22. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +0 -1
  23. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +0 -27
  24. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +0 -342
  25. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +0 -1
  26. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +0 -31
  27. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +0 -332
  28. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +0 -1
  29. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +0 -36
  30. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +0 -369
  31. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +0 -1
  32. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +0 -98
  33. package/dist-client/pages/building-inspection/building-inspection-list.js +0 -914
  34. package/dist-client/pages/building-inspection/building-inspection-list.js.map +0 -1
  35. package/dist-client/pages/building-inspection/building-inspection-management.d.ts +0 -82
  36. package/dist-client/pages/building-inspection/building-inspection-management.js +0 -1527
  37. package/dist-client/pages/building-inspection/building-inspection-management.js.map +0 -1
  38. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.d.ts +0 -4
  39. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +0 -238
  40. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +0 -1
  41. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +0 -27
  42. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +0 -542
  43. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +0 -1
  44. package/dist-client/pages/building-inspection/component/field-document/field-document-constants.d.ts +0 -18
  45. package/dist-client/pages/building-inspection/component/field-document/field-document-constants.js +0 -630
  46. package/dist-client/pages/building-inspection/component/field-document/field-document-constants.js.map +0 -1
  47. package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.d.ts +0 -10
  48. package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.js +0 -219
  49. package/dist-client/pages/building-inspection/component/field-document/field-document-detail-popup.js.map +0 -1
  50. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.d.ts +0 -25
  51. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js +0 -546
  52. package/dist-client/pages/building-inspection/component/field-document/field-document-list-panel.js.map +0 -1
  53. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.d.ts +0 -42
  54. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js +0 -738
  55. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js.map +0 -1
  56. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +0 -15
  57. package/dist-client/pages/building-inspection/component/image-preview-popup.js +0 -348
  58. package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +0 -1
  59. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +0 -25
  60. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +0 -491
  61. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +0 -1
  62. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +0 -31
  63. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +0 -485
  64. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +0 -1
  65. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +0 -27
  66. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +0 -416
  67. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +0 -1
  68. package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +0 -9
  69. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +0 -190
  70. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +0 -1
  71. package/dist-client/pages/building-inspection/inspection-create-popup.d.ts +0 -3
  72. package/dist-client/pages/building-inspection/inspection-create-popup.js +0 -841
  73. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +0 -1
  74. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.d.ts +0 -3
  75. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js +0 -817
  76. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js.map +0 -1
  77. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +0 -60
  78. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +0 -1135
  79. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +0 -1
  80. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.d.ts +0 -2
  81. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +0 -740
  82. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +0 -1
  83. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.d.ts +0 -19
  84. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js +0 -205
  85. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js.map +0 -1
  86. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.d.ts +0 -1
  87. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js +0 -304
  88. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js.map +0 -1
  89. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +0 -15
  90. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js +0 -430
  91. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js.map +0 -1
  92. package/dist-client/pages/checklist/attachment-list-popup.d.ts +0 -3
  93. package/dist-client/pages/checklist/attachment-list-popup.js +0 -492
  94. package/dist-client/pages/checklist/attachment-list-popup.js.map +0 -1
  95. package/dist-client/pages/checklist/checklist-view.d.ts +0 -16
  96. package/dist-client/pages/checklist/checklist-view.js +0 -926
  97. package/dist-client/pages/checklist/checklist-view.js.map +0 -1
  98. package/dist-client/pages/checklist/comment-list-popup.d.ts +0 -1
  99. package/dist-client/pages/checklist/comment-list-popup.js +0 -367
  100. package/dist-client/pages/checklist/comment-list-popup.js.map +0 -1
  101. package/dist-client/pages/checklist/file-preview-popup.d.ts +0 -1
  102. package/dist-client/pages/checklist/file-preview-popup.js +0 -77
  103. package/dist-client/pages/checklist/file-preview-popup.js.map +0 -1
  104. package/dist-client/pages/checklist/inspection-info-popup.d.ts +0 -49
  105. package/dist-client/pages/checklist/inspection-info-popup.js +0 -683
  106. package/dist-client/pages/checklist/inspection-info-popup.js.map +0 -1
  107. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +0 -18
  108. package/dist-client/pages/checklist/inspection-tab-popup.js +0 -196
  109. package/dist-client/pages/checklist/inspection-tab-popup.js.map +0 -1
  110. package/dist-client/pages/checklist/kcs-criteria-popup.d.ts +0 -16
  111. package/dist-client/pages/checklist/kcs-criteria-popup.js +0 -179
  112. package/dist-client/pages/checklist/kcs-criteria-popup.js.map +0 -1
  113. package/dist-client/pages/checklist-database/checklist-database.d.ts +0 -35
  114. package/dist-client/pages/checklist-database/checklist-database.js +0 -540
  115. package/dist-client/pages/checklist-database/checklist-database.js.map +0 -1
  116. package/dist-client/pages/checklist-template/checklist-template-item.d.ts +0 -2
  117. package/dist-client/pages/checklist-template/checklist-template-item.js +0 -278
  118. package/dist-client/pages/checklist-template/checklist-template-item.js.map +0 -1
  119. package/dist-client/pages/checklist-template/checklist-template-list.d.ts +0 -53
  120. package/dist-client/pages/checklist-template/checklist-template-list.js +0 -350
  121. package/dist-client/pages/checklist-template/checklist-template-list.js.map +0 -1
  122. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +0 -55
  123. package/dist-client/pages/checklist-template/checklist-type-management.js +0 -250
  124. package/dist-client/pages/checklist-template/checklist-type-management.js.map +0 -1
  125. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.d.ts +0 -2
  126. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js +0 -223
  127. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js.map +0 -1
  128. package/dist-client/pages/checklist-template/construction-checklist-template-list.d.ts +0 -55
  129. package/dist-client/pages/checklist-template/construction-checklist-template-list.js +0 -404
  130. package/dist-client/pages/checklist-template/construction-checklist-template-list.js.map +0 -1
  131. package/dist-client/pages/issue/issue-importer.d.ts +0 -10
  132. package/dist-client/pages/issue/issue-importer.js +0 -101
  133. package/dist-client/pages/issue/issue-importer.js.map +0 -1
  134. package/dist-client/pages/issue/issue-list-page.d.ts +0 -62
  135. package/dist-client/pages/issue/issue-list-page.js +0 -322
  136. package/dist-client/pages/issue/issue-list-page.js.map +0 -1
  137. package/dist-client/pages/project-checklist/project-checklist-management.d.ts +0 -62
  138. package/dist-client/pages/project-checklist/project-checklist-management.js +0 -1145
  139. package/dist-client/pages/project-checklist/project-checklist-management.js.map +0 -1
  140. package/dist-client/pages/project-report/project-report-importer.d.ts +0 -10
  141. package/dist-client/pages/project-report/project-report-importer.js +0 -101
  142. package/dist-client/pages/project-report/project-report-importer.js.map +0 -1
  143. package/dist-client/pages/project-report/project-report-list-page.d.ts +0 -62
  144. package/dist-client/pages/project-report/project-report-list-page.js +0 -322
  145. package/dist-client/pages/project-report/project-report-list-page.js.map +0 -1
  146. package/dist-client/pages/supervisor/supervisor-importer.d.ts +0 -10
  147. package/dist-client/pages/supervisor/supervisor-importer.js +0 -101
  148. package/dist-client/pages/supervisor/supervisor-importer.js.map +0 -1
  149. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +0 -62
  150. package/dist-client/pages/supervisor/supervisor-list-page.js +0 -322
  151. package/dist-client/pages/supervisor/supervisor-list-page.js.map +0 -1
  152. package/dist-client/route.d.ts +0 -1
  153. package/dist-client/route.js +0 -44
  154. package/dist-client/route.js.map +0 -1
  155. package/dist-client/stt/speech-to-text.d.ts +0 -41
  156. package/dist-client/stt/speech-to-text.js +0 -331
  157. package/dist-client/stt/speech-to-text.js.map +0 -1
  158. package/dist-client/stt/stt-utils.d.ts +0 -28
  159. package/dist-client/stt/stt-utils.js +0 -146
  160. package/dist-client/stt/stt-utils.js.map +0 -1
  161. package/dist-client/tsconfig.tsbuildinfo +0 -1
  162. package/dist-server/controllers/index.d.ts +0 -0
  163. package/dist-server/controllers/index.js +0 -1
  164. package/dist-server/controllers/index.js.map +0 -1
  165. package/dist-server/index.d.ts +0 -3
  166. package/dist-server/index.js +0 -7
  167. package/dist-server/index.js.map +0 -1
  168. package/dist-server/middlewares/index.d.ts +0 -1
  169. package/dist-server/middlewares/index.js +0 -7
  170. package/dist-server/middlewares/index.js.map +0 -1
  171. package/dist-server/migrations/index.d.ts +0 -1
  172. package/dist-server/migrations/index.js +0 -12
  173. package/dist-server/migrations/index.js.map +0 -1
  174. package/dist-server/routes.d.ts +0 -0
  175. package/dist-server/routes.js +0 -25
  176. package/dist-server/routes.js.map +0 -1
  177. package/dist-server/service/action-plan/action-plan-mutation.d.ts +0 -10
  178. package/dist-server/service/action-plan/action-plan-mutation.js +0 -167
  179. package/dist-server/service/action-plan/action-plan-mutation.js.map +0 -1
  180. package/dist-server/service/action-plan/action-plan-query.d.ts +0 -12
  181. package/dist-server/service/action-plan/action-plan-query.js +0 -91
  182. package/dist-server/service/action-plan/action-plan-query.js.map +0 -1
  183. package/dist-server/service/action-plan/action-plan-type.d.ts +0 -23
  184. package/dist-server/service/action-plan/action-plan-type.js +0 -86
  185. package/dist-server/service/action-plan/action-plan-type.js.map +0 -1
  186. package/dist-server/service/action-plan/action-plan.d.ts +0 -27
  187. package/dist-server/service/action-plan/action-plan.js +0 -116
  188. package/dist-server/service/action-plan/action-plan.js.map +0 -1
  189. package/dist-server/service/action-plan/index.d.ts +0 -5
  190. package/dist-server/service/action-plan/index.js +0 -9
  191. package/dist-server/service/action-plan/index.js.map +0 -1
  192. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +0 -9
  193. package/dist-server/service/building-inspection/building-inspection-mutation.js +0 -404
  194. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +0 -1
  195. package/dist-server/service/building-inspection/building-inspection-query.d.ts +0 -24
  196. package/dist-server/service/building-inspection/building-inspection-query.js +0 -406
  197. package/dist-server/service/building-inspection/building-inspection-query.js.map +0 -1
  198. package/dist-server/service/building-inspection/building-inspection-type.d.ts +0 -89
  199. package/dist-server/service/building-inspection/building-inspection-type.js +0 -330
  200. package/dist-server/service/building-inspection/building-inspection-type.js.map +0 -1
  201. package/dist-server/service/building-inspection/building-inspection.d.ts +0 -42
  202. package/dist-server/service/building-inspection/building-inspection.js +0 -186
  203. package/dist-server/service/building-inspection/building-inspection.js.map +0 -1
  204. package/dist-server/service/building-inspection/index.d.ts +0 -7
  205. package/dist-server/service/building-inspection/index.js +0 -19
  206. package/dist-server/service/building-inspection/index.js.map +0 -1
  207. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +0 -6
  208. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +0 -66
  209. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +0 -1
  210. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +0 -16
  211. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +0 -171
  212. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +0 -1
  213. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +0 -23
  214. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +0 -90
  215. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +0 -1
  216. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +0 -33
  217. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +0 -132
  218. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +0 -1
  219. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +0 -5
  220. package/dist-server/service/building-inspection-daily-worklog/index.js +0 -9
  221. package/dist-server/service/building-inspection-daily-worklog/index.js.map +0 -1
  222. package/dist-server/service/building-inspection-history/building-inspection-history-query.d.ts +0 -16
  223. package/dist-server/service/building-inspection-history/building-inspection-history-query.js +0 -120
  224. package/dist-server/service/building-inspection-history/building-inspection-history-query.js.map +0 -1
  225. package/dist-server/service/building-inspection-history/building-inspection-history-type.d.ts +0 -5
  226. package/dist-server/service/building-inspection-history/building-inspection-history-type.js +0 -21
  227. package/dist-server/service/building-inspection-history/building-inspection-history-type.js.map +0 -1
  228. package/dist-server/service/building-inspection-history/building-inspection-history.d.ts +0 -35
  229. package/dist-server/service/building-inspection-history/building-inspection-history.js +0 -162
  230. package/dist-server/service/building-inspection-history/building-inspection-history.js.map +0 -1
  231. package/dist-server/service/building-inspection-history/event-subscriber.d.ts +0 -7
  232. package/dist-server/service/building-inspection-history/event-subscriber.js +0 -21
  233. package/dist-server/service/building-inspection-history/event-subscriber.js.map +0 -1
  234. package/dist-server/service/building-inspection-history/index.d.ts +0 -6
  235. package/dist-server/service/building-inspection-history/index.js +0 -10
  236. package/dist-server/service/building-inspection-history/index.js.map +0 -1
  237. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -3
  238. package/dist-server/service/checklist/checklist-mutation.js +0 -30
  239. package/dist-server/service/checklist/checklist-mutation.js.map +0 -1
  240. package/dist-server/service/checklist/checklist-query.d.ts +0 -21
  241. package/dist-server/service/checklist/checklist-query.js +0 -177
  242. package/dist-server/service/checklist/checklist-query.js.map +0 -1
  243. package/dist-server/service/checklist/checklist-type.d.ts +0 -5
  244. package/dist-server/service/checklist/checklist-type.js +0 -21
  245. package/dist-server/service/checklist/checklist-type.js.map +0 -1
  246. package/dist-server/service/checklist/checklist.d.ts +0 -66
  247. package/dist-server/service/checklist/checklist.js +0 -259
  248. package/dist-server/service/checklist/checklist.js.map +0 -1
  249. package/dist-server/service/checklist/event-subscriber.d.ts +0 -7
  250. package/dist-server/service/checklist/event-subscriber.js +0 -21
  251. package/dist-server/service/checklist/event-subscriber.js.map +0 -1
  252. package/dist-server/service/checklist/index.d.ts +0 -5
  253. package/dist-server/service/checklist/index.js +0 -9
  254. package/dist-server/service/checklist/index.js.map +0 -1
  255. package/dist-server/service/checklist-history/checklist-history-query.d.ts +0 -11
  256. package/dist-server/service/checklist-history/checklist-history-query.js +0 -77
  257. package/dist-server/service/checklist-history/checklist-history-query.js.map +0 -1
  258. package/dist-server/service/checklist-history/checklist-history-type.d.ts +0 -5
  259. package/dist-server/service/checklist-history/checklist-history-type.js +0 -21
  260. package/dist-server/service/checklist-history/checklist-history-type.js.map +0 -1
  261. package/dist-server/service/checklist-history/checklist-history.d.ts +0 -50
  262. package/dist-server/service/checklist-history/checklist-history.js +0 -239
  263. package/dist-server/service/checklist-history/checklist-history.js.map +0 -1
  264. package/dist-server/service/checklist-history/event-subscriber.d.ts +0 -7
  265. package/dist-server/service/checklist-history/event-subscriber.js +0 -21
  266. package/dist-server/service/checklist-history/event-subscriber.js.map +0 -1
  267. package/dist-server/service/checklist-history/index.d.ts +0 -6
  268. package/dist-server/service/checklist-history/index.js +0 -10
  269. package/dist-server/service/checklist-history/index.js.map +0 -1
  270. package/dist-server/service/checklist-item/checklist-item-mutation.d.ts +0 -2
  271. package/dist-server/service/checklist-item/checklist-item-mutation.js +0 -13
  272. package/dist-server/service/checklist-item/checklist-item-mutation.js.map +0 -1
  273. package/dist-server/service/checklist-item/checklist-item-query.d.ts +0 -18
  274. package/dist-server/service/checklist-item/checklist-item-query.js +0 -138
  275. package/dist-server/service/checklist-item/checklist-item-query.js.map +0 -1
  276. package/dist-server/service/checklist-item/checklist-item-type.d.ts +0 -5
  277. package/dist-server/service/checklist-item/checklist-item-type.js +0 -21
  278. package/dist-server/service/checklist-item/checklist-item-type.js.map +0 -1
  279. package/dist-server/service/checklist-item/checklist-item.d.ts +0 -29
  280. package/dist-server/service/checklist-item/checklist-item.js +0 -124
  281. package/dist-server/service/checklist-item/checklist-item.js.map +0 -1
  282. package/dist-server/service/checklist-item/index.d.ts +0 -4
  283. package/dist-server/service/checklist-item/index.js +0 -9
  284. package/dist-server/service/checklist-item/index.js.map +0 -1
  285. package/dist-server/service/checklist-item-comment/checklist-item-comment-history.d.ts +0 -16
  286. package/dist-server/service/checklist-item-comment/checklist-item-comment-history.js +0 -83
  287. package/dist-server/service/checklist-item-comment/checklist-item-comment-history.js.map +0 -1
  288. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.d.ts +0 -8
  289. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js +0 -114
  290. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js.map +0 -1
  291. package/dist-server/service/checklist-item-comment/checklist-item-comment-query.d.ts +0 -7
  292. package/dist-server/service/checklist-item-comment/checklist-item-comment-query.js +0 -49
  293. package/dist-server/service/checklist-item-comment/checklist-item-comment-query.js.map +0 -1
  294. package/dist-server/service/checklist-item-comment/checklist-item-comment-type.d.ts +0 -14
  295. package/dist-server/service/checklist-item-comment/checklist-item-comment-type.js +0 -53
  296. package/dist-server/service/checklist-item-comment/checklist-item-comment-type.js.map +0 -1
  297. package/dist-server/service/checklist-item-comment/checklist-item-comment.d.ts +0 -12
  298. package/dist-server/service/checklist-item-comment/checklist-item-comment.js +0 -57
  299. package/dist-server/service/checklist-item-comment/checklist-item-comment.js.map +0 -1
  300. package/dist-server/service/checklist-item-comment/index.d.ts +0 -5
  301. package/dist-server/service/checklist-item-comment/index.js +0 -10
  302. package/dist-server/service/checklist-item-comment/index.js.map +0 -1
  303. package/dist-server/service/checklist-item-history/checklist-item-history-query.d.ts +0 -16
  304. package/dist-server/service/checklist-item-history/checklist-item-history-query.js +0 -123
  305. package/dist-server/service/checklist-item-history/checklist-item-history-query.js.map +0 -1
  306. package/dist-server/service/checklist-item-history/checklist-item-history-type.d.ts +0 -5
  307. package/dist-server/service/checklist-item-history/checklist-item-history-type.js +0 -21
  308. package/dist-server/service/checklist-item-history/checklist-item-history-type.js.map +0 -1
  309. package/dist-server/service/checklist-item-history/checklist-item-history.d.ts +0 -27
  310. package/dist-server/service/checklist-item-history/checklist-item-history.js +0 -133
  311. package/dist-server/service/checklist-item-history/checklist-item-history.js.map +0 -1
  312. package/dist-server/service/checklist-item-history/event-subscriber.d.ts +0 -7
  313. package/dist-server/service/checklist-item-history/event-subscriber.js +0 -21
  314. package/dist-server/service/checklist-item-history/event-subscriber.js.map +0 -1
  315. package/dist-server/service/checklist-item-history/index.d.ts +0 -6
  316. package/dist-server/service/checklist-item-history/index.js +0 -10
  317. package/dist-server/service/checklist-item-history/index.js.map +0 -1
  318. package/dist-server/service/checklist-template/checklist-template-mutation.d.ts +0 -6
  319. package/dist-server/service/checklist-template/checklist-template-mutation.js +0 -64
  320. package/dist-server/service/checklist-template/checklist-template-mutation.js.map +0 -1
  321. package/dist-server/service/checklist-template/checklist-template-query.d.ts +0 -10
  322. package/dist-server/service/checklist-template/checklist-template-query.js +0 -62
  323. package/dist-server/service/checklist-template/checklist-template-query.js.map +0 -1
  324. package/dist-server/service/checklist-template/checklist-template-type.d.ts +0 -10
  325. package/dist-server/service/checklist-template/checklist-template-type.js +0 -39
  326. package/dist-server/service/checklist-template/checklist-template-type.js.map +0 -1
  327. package/dist-server/service/checklist-template/checklist-template.d.ts +0 -17
  328. package/dist-server/service/checklist-template/checklist-template.js +0 -78
  329. package/dist-server/service/checklist-template/checklist-template.js.map +0 -1
  330. package/dist-server/service/checklist-template/index.d.ts +0 -5
  331. package/dist-server/service/checklist-template/index.js +0 -9
  332. package/dist-server/service/checklist-template/index.js.map +0 -1
  333. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.d.ts +0 -7
  334. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js +0 -80
  335. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js.map +0 -1
  336. package/dist-server/service/checklist-template-item/checklist-template-item-query.d.ts +0 -11
  337. package/dist-server/service/checklist-template-item/checklist-template-item-query.js +0 -78
  338. package/dist-server/service/checklist-template-item/checklist-template-item-query.js.map +0 -1
  339. package/dist-server/service/checklist-template-item/checklist-template-item-type.d.ts +0 -19
  340. package/dist-server/service/checklist-template-item/checklist-template-item-type.js +0 -69
  341. package/dist-server/service/checklist-template-item/checklist-template-item-type.js.map +0 -1
  342. package/dist-server/service/checklist-template-item/checklist-template-item.d.ts +0 -26
  343. package/dist-server/service/checklist-template-item/checklist-template-item.js +0 -106
  344. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +0 -1
  345. package/dist-server/service/checklist-template-item/index.d.ts +0 -5
  346. package/dist-server/service/checklist-template-item/index.js +0 -9
  347. package/dist-server/service/checklist-template-item/index.js.map +0 -1
  348. package/dist-server/service/checklist-template-item/spec-matching-service.d.ts +0 -2
  349. package/dist-server/service/checklist-template-item/spec-matching-service.js +0 -51
  350. package/dist-server/service/checklist-template-item/spec-matching-service.js.map +0 -1
  351. package/dist-server/service/checklist-type/checklist-type-mutation.d.ts +0 -6
  352. package/dist-server/service/checklist-type/checklist-type-mutation.js +0 -64
  353. package/dist-server/service/checklist-type/checklist-type-mutation.js.map +0 -1
  354. package/dist-server/service/checklist-type/checklist-type-query.d.ts +0 -10
  355. package/dist-server/service/checklist-type/checklist-type-query.js +0 -62
  356. package/dist-server/service/checklist-type/checklist-type-query.js.map +0 -1
  357. package/dist-server/service/checklist-type/checklist-type-type.d.ts +0 -11
  358. package/dist-server/service/checklist-type/checklist-type-type.js +0 -43
  359. package/dist-server/service/checklist-type/checklist-type-type.js.map +0 -1
  360. package/dist-server/service/checklist-type/checklist-type.d.ts +0 -19
  361. package/dist-server/service/checklist-type/checklist-type.js +0 -78
  362. package/dist-server/service/checklist-type/checklist-type.js.map +0 -1
  363. package/dist-server/service/checklist-type/index.d.ts +0 -5
  364. package/dist-server/service/checklist-type/index.js +0 -9
  365. package/dist-server/service/checklist-type/index.js.map +0 -1
  366. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.d.ts +0 -7
  367. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js +0 -107
  368. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js.map +0 -1
  369. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.d.ts +0 -10
  370. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js +0 -62
  371. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js.map +0 -1
  372. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.d.ts +0 -11
  373. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js +0 -43
  374. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js.map +0 -1
  375. package/dist-server/service/construction-checklist-template/construction-checklist-template.d.ts +0 -18
  376. package/dist-server/service/construction-checklist-template/construction-checklist-template.js +0 -80
  377. package/dist-server/service/construction-checklist-template/construction-checklist-template.js.map +0 -1
  378. package/dist-server/service/construction-checklist-template/index.d.ts +0 -5
  379. package/dist-server/service/construction-checklist-template/index.js +0 -9
  380. package/dist-server/service/construction-checklist-template/index.js.map +0 -1
  381. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.d.ts +0 -6
  382. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js +0 -56
  383. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js.map +0 -1
  384. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.d.ts +0 -9
  385. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js +0 -53
  386. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js.map +0 -1
  387. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.d.ts +0 -17
  388. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js +0 -67
  389. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js.map +0 -1
  390. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.d.ts +0 -24
  391. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js +0 -113
  392. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js.map +0 -1
  393. package/dist-server/service/construction-checklist-template-item/index.d.ts +0 -5
  394. package/dist-server/service/construction-checklist-template-item/index.js +0 -9
  395. package/dist-server/service/construction-checklist-template-item/index.js.map +0 -1
  396. package/dist-server/service/field-document/field-document-auto-file.d.ts +0 -21
  397. package/dist-server/service/field-document/field-document-auto-file.js +0 -47
  398. package/dist-server/service/field-document/field-document-auto-file.js.map +0 -1
  399. package/dist-server/service/field-document/field-document-mutation.d.ts +0 -9
  400. package/dist-server/service/field-document/field-document-mutation.js +0 -139
  401. package/dist-server/service/field-document/field-document-mutation.js.map +0 -1
  402. package/dist-server/service/field-document/field-document-query.d.ts +0 -14
  403. package/dist-server/service/field-document/field-document-query.js +0 -120
  404. package/dist-server/service/field-document/field-document-query.js.map +0 -1
  405. package/dist-server/service/field-document/field-document-summary-service.d.ts +0 -10
  406. package/dist-server/service/field-document/field-document-summary-service.js +0 -79
  407. package/dist-server/service/field-document/field-document-summary-service.js.map +0 -1
  408. package/dist-server/service/field-document/field-document-type.d.ts +0 -24
  409. package/dist-server/service/field-document/field-document-type.js +0 -88
  410. package/dist-server/service/field-document/field-document-type.js.map +0 -1
  411. package/dist-server/service/field-document/field-document.d.ts +0 -29
  412. package/dist-server/service/field-document/field-document.js +0 -127
  413. package/dist-server/service/field-document/field-document.js.map +0 -1
  414. package/dist-server/service/field-document/index.d.ts +0 -5
  415. package/dist-server/service/field-document/index.js +0 -9
  416. package/dist-server/service/field-document/index.js.map +0 -1
  417. package/dist-server/service/index.d.ts +0 -23
  418. package/dist-server/service/index.js +0 -98
  419. package/dist-server/service/index.js.map +0 -1
  420. package/dist-server/service/issue/index.d.ts +0 -5
  421. package/dist-server/service/issue/index.js +0 -9
  422. package/dist-server/service/issue/index.js.map +0 -1
  423. package/dist-server/service/issue/issue-mutation.d.ts +0 -10
  424. package/dist-server/service/issue/issue-mutation.js +0 -167
  425. package/dist-server/service/issue/issue-mutation.js.map +0 -1
  426. package/dist-server/service/issue/issue-query.d.ts +0 -12
  427. package/dist-server/service/issue/issue-query.js +0 -91
  428. package/dist-server/service/issue/issue-query.js.map +0 -1
  429. package/dist-server/service/issue/issue-type.d.ts +0 -23
  430. package/dist-server/service/issue/issue-type.js +0 -86
  431. package/dist-server/service/issue/issue-type.js.map +0 -1
  432. package/dist-server/service/issue/issue.d.ts +0 -26
  433. package/dist-server/service/issue/issue.js +0 -111
  434. package/dist-server/service/issue/issue.js.map +0 -1
  435. package/dist-server/service/project-checklist/index.d.ts +0 -5
  436. package/dist-server/service/project-checklist/index.js +0 -9
  437. package/dist-server/service/project-checklist/index.js.map +0 -1
  438. package/dist-server/service/project-checklist/project-checklist-mutation.d.ts +0 -7
  439. package/dist-server/service/project-checklist/project-checklist-mutation.js +0 -118
  440. package/dist-server/service/project-checklist/project-checklist-mutation.js.map +0 -1
  441. package/dist-server/service/project-checklist/project-checklist-query.d.ts +0 -12
  442. package/dist-server/service/project-checklist/project-checklist-query.js +0 -76
  443. package/dist-server/service/project-checklist/project-checklist-query.js.map +0 -1
  444. package/dist-server/service/project-checklist/project-checklist-type.d.ts +0 -18
  445. package/dist-server/service/project-checklist/project-checklist-type.js +0 -69
  446. package/dist-server/service/project-checklist/project-checklist-type.js.map +0 -1
  447. package/dist-server/service/project-checklist/project-checklist.d.ts +0 -20
  448. package/dist-server/service/project-checklist/project-checklist.js +0 -90
  449. package/dist-server/service/project-checklist/project-checklist.js.map +0 -1
  450. package/dist-server/service/project-checklist/spec-matching-service.d.ts +0 -17
  451. package/dist-server/service/project-checklist/spec-matching-service.js +0 -140
  452. package/dist-server/service/project-checklist/spec-matching-service.js.map +0 -1
  453. package/dist-server/service/project-checklist-item/index.d.ts +0 -4
  454. package/dist-server/service/project-checklist-item/index.js +0 -9
  455. package/dist-server/service/project-checklist-item/index.js.map +0 -1
  456. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.d.ts +0 -2
  457. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js +0 -13
  458. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js.map +0 -1
  459. package/dist-server/service/project-checklist-item/project-checklist-item-query.d.ts +0 -5
  460. package/dist-server/service/project-checklist-item/project-checklist-item-query.js +0 -34
  461. package/dist-server/service/project-checklist-item/project-checklist-item-query.js.map +0 -1
  462. package/dist-server/service/project-checklist-item/project-checklist-item-type.d.ts +0 -5
  463. package/dist-server/service/project-checklist-item/project-checklist-item-type.js +0 -21
  464. package/dist-server/service/project-checklist-item/project-checklist-item-type.js.map +0 -1
  465. package/dist-server/service/project-checklist-item/project-checklist-item.d.ts +0 -19
  466. package/dist-server/service/project-checklist-item/project-checklist-item.js +0 -92
  467. package/dist-server/service/project-checklist-item/project-checklist-item.js.map +0 -1
  468. package/dist-server/service/project-report/index.d.ts +0 -5
  469. package/dist-server/service/project-report/index.js +0 -9
  470. package/dist-server/service/project-report/index.js.map +0 -1
  471. package/dist-server/service/project-report/project-report-mutation.d.ts +0 -10
  472. package/dist-server/service/project-report/project-report-mutation.js +0 -167
  473. package/dist-server/service/project-report/project-report-mutation.js.map +0 -1
  474. package/dist-server/service/project-report/project-report-query.d.ts +0 -12
  475. package/dist-server/service/project-report/project-report-query.js +0 -91
  476. package/dist-server/service/project-report/project-report-query.js.map +0 -1
  477. package/dist-server/service/project-report/project-report-type.d.ts +0 -23
  478. package/dist-server/service/project-report/project-report-type.js +0 -86
  479. package/dist-server/service/project-report/project-report-type.js.map +0 -1
  480. package/dist-server/service/project-report/project-report.d.ts +0 -28
  481. package/dist-server/service/project-report/project-report.js +0 -121
  482. package/dist-server/service/project-report/project-report.js.map +0 -1
  483. package/dist-server/service/supervisor/index.d.ts +0 -5
  484. package/dist-server/service/supervisor/index.js +0 -9
  485. package/dist-server/service/supervisor/index.js.map +0 -1
  486. package/dist-server/service/supervisor/supervisor-mutation.d.ts +0 -10
  487. package/dist-server/service/supervisor/supervisor-mutation.js +0 -167
  488. package/dist-server/service/supervisor/supervisor-mutation.js.map +0 -1
  489. package/dist-server/service/supervisor/supervisor-query.d.ts +0 -12
  490. package/dist-server/service/supervisor/supervisor-query.js +0 -91
  491. package/dist-server/service/supervisor/supervisor-query.js.map +0 -1
  492. package/dist-server/service/supervisor/supervisor-type.d.ts +0 -23
  493. package/dist-server/service/supervisor/supervisor-type.js +0 -86
  494. package/dist-server/service/supervisor/supervisor-type.js.map +0 -1
  495. package/dist-server/service/supervisor/supervisor.d.ts +0 -28
  496. package/dist-server/service/supervisor/supervisor.js +0 -121
  497. package/dist-server/service/supervisor/supervisor.js.map +0 -1
  498. package/dist-server/tsconfig.tsbuildinfo +0 -1
@@ -1,41 +0,0 @@
1
- import { LitElement } from 'lit';
2
- /**
3
- * SpeechToText (음성 인식) 웹 컴포넌트
4
- *
5
- * - 음성 인식 시작/중지 메서드 제공
6
- * - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달
7
- * - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)
8
- * - Google Cloud Speech API 사용
9
- *
10
- * 사용 예시:
11
- * <speech-to-text id="stt" api-key="YOUR_API_KEY"></speech-to-text>
12
- *
13
- * // JS에서
14
- * const stt = document.getElementById('stt') as SpeechToText;
15
- * stt.startListening();
16
- * stt.stopListening();
17
- * stt.addEventListener('stt-result', e => { ... });
18
- * stt.addEventListener('stt-error', e => { ... });
19
- * stt.addEventListener('stt-status', e => { ... });
20
- */
21
- export declare class SpeechToText extends LitElement {
22
- apiKey: string;
23
- private mediaRecorder;
24
- private audioChunks;
25
- private isRecording;
26
- private stream;
27
- private isProcessing;
28
- /**
29
- * 음성 인식 시작
30
- */
31
- startListening(): Promise<void>;
32
- /**
33
- * 음성 인식 중지
34
- */
35
- stopListening(): void;
36
- private processAudio;
37
- private sendToGoogleSpeech;
38
- private finishRecording;
39
- private cleanup;
40
- protected render(): null;
41
- }
@@ -1,331 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { LitElement } from 'lit';
3
- import { customElement, property } from 'lit/decorators.js';
4
- /**
5
- * SpeechToText (음성 인식) 웹 컴포넌트
6
- *
7
- * - 음성 인식 시작/중지 메서드 제공
8
- * - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달
9
- * - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)
10
- * - Google Cloud Speech API 사용
11
- *
12
- * 사용 예시:
13
- * <speech-to-text id="stt" api-key="YOUR_API_KEY"></speech-to-text>
14
- *
15
- * // JS에서
16
- * const stt = document.getElementById('stt') as SpeechToText;
17
- * stt.startListening();
18
- * stt.stopListening();
19
- * stt.addEventListener('stt-result', e => { ... });
20
- * stt.addEventListener('stt-error', e => { ... });
21
- * stt.addEventListener('stt-status', e => { ... });
22
- */
23
- let SpeechToText = class SpeechToText extends LitElement {
24
- constructor() {
25
- super(...arguments);
26
- this.apiKey = 'AIzaSyCH3FPpY5ZCpcfUMjePH2Nhtueu6chgBDk';
27
- this.mediaRecorder = null;
28
- this.audioChunks = [];
29
- this.isRecording = false;
30
- this.stream = null;
31
- this.isProcessing = false;
32
- }
33
- /**
34
- * 음성 인식 시작
35
- */
36
- async startListening() {
37
- if (!this.apiKey) {
38
- this.dispatchEvent(new CustomEvent('stt-error', {
39
- detail: { error: 'Google Cloud API key가 설정되지 않았습니다.' }
40
- }));
41
- return;
42
- }
43
- if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
44
- this.dispatchEvent(new CustomEvent('stt-error', {
45
- detail: { error: '지원되지 않는 브라우저입니다.' }
46
- }));
47
- return;
48
- }
49
- if (this.isRecording || this.isProcessing) {
50
- return;
51
- }
52
- // 이전 상태 완전 정리
53
- this.cleanup();
54
- try {
55
- this.stream = await navigator.mediaDevices.getUserMedia({
56
- audio: {
57
- echoCancellation: true,
58
- noiseSuppression: true,
59
- autoGainControl: true,
60
- sampleRate: 48000
61
- }
62
- });
63
- let mimeType = 'audio/webm;codecs=opus';
64
- if (!MediaRecorder.isTypeSupported(mimeType)) {
65
- mimeType = 'audio/webm';
66
- if (!MediaRecorder.isTypeSupported(mimeType)) {
67
- if (MediaRecorder.isTypeSupported('audio/mp4')) {
68
- mimeType = 'audio/mp4';
69
- }
70
- else if (MediaRecorder.isTypeSupported('audio/wav')) {
71
- mimeType = 'audio/wav';
72
- }
73
- else {
74
- mimeType = '';
75
- }
76
- }
77
- }
78
- const recorderOptions = mimeType ? { mimeType } : {};
79
- this.mediaRecorder = new MediaRecorder(this.stream, recorderOptions);
80
- this.audioChunks = [];
81
- this.isRecording = true;
82
- this.mediaRecorder.ondataavailable = event => {
83
- if (event.data.size > 0) {
84
- this.audioChunks.push(event.data);
85
- }
86
- };
87
- this.mediaRecorder.onstop = async () => {
88
- const audioBlob = new Blob(this.audioChunks, { type: mimeType || 'audio/webm' });
89
- if (audioBlob.size > 5000) {
90
- await this.processAudio(audioBlob);
91
- }
92
- else {
93
- this.dispatchEvent(new CustomEvent('stt-error', {
94
- detail: { error: '녹음이 너무 짧습니다.' }
95
- }));
96
- // 녹음이 짧을 때도 완료 처리
97
- this.finishRecording();
98
- }
99
- this.cleanup();
100
- };
101
- this.mediaRecorder.onerror = () => {
102
- this.dispatchEvent(new CustomEvent('stt-error', {
103
- detail: { error: '녹음 오류 발생' }
104
- }));
105
- this.isRecording = false;
106
- };
107
- this.mediaRecorder.start();
108
- this.dispatchEvent(new CustomEvent('stt-status', {
109
- detail: { status: '🎙️ Listening...' }
110
- }));
111
- }
112
- catch (error) {
113
- this.dispatchEvent(new CustomEvent('stt-error', {
114
- detail: { error: `마이크 접근 실패: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }
115
- }));
116
- this.isRecording = false;
117
- }
118
- }
119
- /**
120
- * 음성 인식 중지
121
- */
122
- stopListening() {
123
- if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {
124
- this.mediaRecorder.stop();
125
- }
126
- else {
127
- // MediaRecorder가 없거나 이미 중지된 경우 즉시 정리
128
- this.cleanup();
129
- this.dispatchEvent(new CustomEvent('stt-status', {
130
- detail: { status: '음성 인식 종료' }
131
- }));
132
- }
133
- }
134
- async processAudio(audioBlob) {
135
- this.isProcessing = true;
136
- this.dispatchEvent(new CustomEvent('stt-status', {
137
- detail: { status: '🔄 음성을 텍스트로 변환 중...' }
138
- }));
139
- try {
140
- const reader = new FileReader();
141
- reader.readAsDataURL(audioBlob);
142
- reader.onloadend = async () => {
143
- const base64Audio = reader.result.split(',')[1];
144
- await this.sendToGoogleSpeech(base64Audio);
145
- };
146
- reader.onerror = () => {
147
- this.dispatchEvent(new CustomEvent('stt-error', {
148
- detail: { error: '오디오 처리 실패' }
149
- }));
150
- this.finishRecording();
151
- };
152
- }
153
- catch (error) {
154
- this.dispatchEvent(new CustomEvent('stt-error', {
155
- detail: { error: '처리 중 오류 발생' }
156
- }));
157
- this.finishRecording();
158
- }
159
- }
160
- async sendToGoogleSpeech(base64Audio) {
161
- let encoding = 'WEBM_OPUS';
162
- let sampleRate = 48000;
163
- if (this.mediaRecorder && this.mediaRecorder.mimeType) {
164
- const mimeType = this.mediaRecorder.mimeType.toLowerCase();
165
- if (mimeType.includes('opus')) {
166
- encoding = 'WEBM_OPUS';
167
- }
168
- else if (mimeType.includes('webm')) {
169
- encoding = 'WEBM_OPUS';
170
- }
171
- else if (mimeType.includes('mp4')) {
172
- encoding = 'MP3';
173
- }
174
- else if (mimeType.includes('wav')) {
175
- encoding = 'LINEAR16';
176
- }
177
- }
178
- const requestBody = {
179
- config: {
180
- encoding: encoding,
181
- sampleRateHertz: sampleRate,
182
- languageCode: 'ko-KR',
183
- enableAutomaticPunctuation: true,
184
- model: 'latest_long',
185
- useEnhanced: true,
186
- enableWordTimeOffsets: false,
187
- enableWordConfidence: false,
188
- maxAlternatives: 1,
189
- speechContexts: [
190
- {
191
- phrases: [
192
- '1번',
193
- '2번',
194
- '3번',
195
- '4번',
196
- '5번',
197
- '6번',
198
- '7번',
199
- '합격',
200
- '불합격',
201
- '적합',
202
- '부적합',
203
- '기본업무',
204
- '시공',
205
- '자재',
206
- '도서',
207
- '모두',
208
- '전체',
209
- '초기화',
210
- '조치사항',
211
- '확인 필요',
212
- '기본 외 업무',
213
- '부터',
214
- '까지'
215
- ],
216
- boost: 20
217
- }
218
- ]
219
- },
220
- audio: {
221
- content: base64Audio
222
- }
223
- };
224
- try {
225
- const response = await fetch(`https://speech.googleapis.com/v1/speech:recognize?key=${this.apiKey}`, {
226
- method: 'POST',
227
- headers: {
228
- 'Content-Type': 'application/json'
229
- },
230
- body: JSON.stringify(requestBody)
231
- });
232
- if (response.ok) {
233
- const data = await response.json();
234
- if (data.results && data.results.length > 0) {
235
- const finalTranscript = data.results.map((result) => result.alternatives[0].transcript).join(' ');
236
- this.dispatchEvent(new CustomEvent('stt-result', {
237
- detail: {
238
- finalTranscript: finalTranscript.trim(),
239
- interimTranscript: ''
240
- }
241
- }));
242
- this.dispatchEvent(new CustomEvent('stt-status', {
243
- detail: { status: `📝 Recognized: ${finalTranscript}` }
244
- }));
245
- // 음성 인식 완료 후 즉시 완료 처리
246
- this.finishRecording();
247
- }
248
- else {
249
- this.dispatchEvent(new CustomEvent('stt-result', {
250
- detail: {
251
- finalTranscript: '',
252
- interimTranscript: ''
253
- }
254
- }));
255
- this.dispatchEvent(new CustomEvent('stt-status', {
256
- detail: { status: '음성을 인식하지 못했습니다.' }
257
- }));
258
- // 인식 실패 시에도 즉시 완료 처리
259
- this.finishRecording();
260
- }
261
- }
262
- else {
263
- const error = await response.text();
264
- let errorMessage = 'API 오류 발생';
265
- try {
266
- const errorObj = JSON.parse(error);
267
- if (errorObj.error && errorObj.error.message) {
268
- errorMessage = errorObj.error.message;
269
- }
270
- }
271
- catch (e) {
272
- errorMessage = `HTTP ${response.status}`;
273
- }
274
- this.dispatchEvent(new CustomEvent('stt-error', {
275
- detail: { error: errorMessage }
276
- }));
277
- // API 오류 시에도 즉시 완료 처리
278
- this.finishRecording();
279
- }
280
- }
281
- catch (error) {
282
- this.dispatchEvent(new CustomEvent('stt-error', {
283
- detail: { error: `네트워크 오류: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }
284
- }));
285
- // 네트워크 오류 시에도 즉시 완료 처리
286
- this.finishRecording();
287
- }
288
- }
289
- finishRecording() {
290
- this.cleanup();
291
- this.dispatchEvent(new CustomEvent('stt-status', {
292
- detail: { status: '음성 인식 종료' }
293
- }));
294
- }
295
- cleanup() {
296
- // 모든 상태 완전 초기화
297
- if (this.stream) {
298
- this.stream.getTracks().forEach(track => {
299
- track.stop();
300
- track.enabled = false;
301
- });
302
- this.stream = null;
303
- }
304
- if (this.mediaRecorder) {
305
- try {
306
- if (this.mediaRecorder.state !== 'inactive') {
307
- this.mediaRecorder.stop();
308
- }
309
- }
310
- catch (e) {
311
- // MediaRecorder stop 에러 무시
312
- }
313
- this.mediaRecorder = null;
314
- }
315
- this.audioChunks = [];
316
- this.isRecording = false;
317
- this.isProcessing = false;
318
- }
319
- render() {
320
- return null;
321
- }
322
- };
323
- __decorate([
324
- property({ type: String, attribute: 'api-key' }),
325
- __metadata("design:type", String)
326
- ], SpeechToText.prototype, "apiKey", void 0);
327
- SpeechToText = __decorate([
328
- customElement('speech-to-text')
329
- ], SpeechToText);
330
- export { SpeechToText };
331
- //# sourceMappingURL=speech-to-text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speech-to-text.js","sourceRoot":"","sources":["../../client/stt/speech-to-text.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * SpeechToText (음성 인식) 웹 컴포넌트\n *\n * - 음성 인식 시작/중지 메서드 제공\n * - 인식 결과/에러/상태를 커스텀 이벤트(stt-result, stt-error, stt-status)로 외부에 전달\n * - 버튼 등 UI는 포함하지 않음 (컨트롤은 외부에서)\n * - Google Cloud Speech API 사용\n *\n * 사용 예시:\n * <speech-to-text id=\"stt\" api-key=\"YOUR_API_KEY\"></speech-to-text>\n *\n * // JS에서\n * const stt = document.getElementById('stt') as SpeechToText;\n * stt.startListening();\n * stt.stopListening();\n * stt.addEventListener('stt-result', e => { ... });\n * stt.addEventListener('stt-error', e => { ... });\n * stt.addEventListener('stt-status', e => { ... });\n */\n@customElement('speech-to-text')\nexport class SpeechToText extends LitElement {\n @property({ type: String, attribute: 'api-key' })\n apiKey: string = 'AIzaSyCH3FPpY5ZCpcfUMjePH2Nhtueu6chgBDk'\n\n private mediaRecorder: MediaRecorder | null = null\n private audioChunks: Blob[] = []\n private isRecording: boolean = false\n private stream: MediaStream | null = null\n private isProcessing: boolean = false\n\n /**\n * 음성 인식 시작\n */\n public async startListening() {\n if (!this.apiKey) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: 'Google Cloud API key가 설정되지 않았습니다.' }\n })\n )\n return\n }\n\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '지원되지 않는 브라우저입니다.' }\n })\n )\n return\n }\n\n if (this.isRecording || this.isProcessing) {\n return\n }\n\n // 이전 상태 완전 정리\n this.cleanup()\n\n try {\n this.stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n sampleRate: 48000\n }\n })\n\n let mimeType = 'audio/webm;codecs=opus'\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n mimeType = 'audio/webm'\n if (!MediaRecorder.isTypeSupported(mimeType)) {\n if (MediaRecorder.isTypeSupported('audio/mp4')) {\n mimeType = 'audio/mp4'\n } else if (MediaRecorder.isTypeSupported('audio/wav')) {\n mimeType = 'audio/wav'\n } else {\n mimeType = ''\n }\n }\n }\n\n const recorderOptions = mimeType ? { mimeType } : {}\n this.mediaRecorder = new MediaRecorder(this.stream, recorderOptions)\n\n this.audioChunks = []\n this.isRecording = true\n\n this.mediaRecorder.ondataavailable = event => {\n if (event.data.size > 0) {\n this.audioChunks.push(event.data)\n }\n }\n\n this.mediaRecorder.onstop = async () => {\n const audioBlob = new Blob(this.audioChunks, { type: mimeType || 'audio/webm' })\n\n if (audioBlob.size > 5000) {\n await this.processAudio(audioBlob)\n } else {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '녹음이 너무 짧습니다.' }\n })\n )\n // 녹음이 짧을 때도 완료 처리\n this.finishRecording()\n }\n\n this.cleanup()\n }\n\n this.mediaRecorder.onerror = () => {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '녹음 오류 발생' }\n })\n )\n this.isRecording = false\n }\n\n this.mediaRecorder.start()\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '🎙️ Listening...' }\n })\n )\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: `마이크 접근 실패: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }\n })\n )\n this.isRecording = false\n }\n }\n\n /**\n * 음성 인식 중지\n */\n public stopListening() {\n if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {\n this.mediaRecorder.stop()\n } else {\n // MediaRecorder가 없거나 이미 중지된 경우 즉시 정리\n this.cleanup()\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성 인식 종료' }\n })\n )\n }\n }\n\n private async processAudio(audioBlob: Blob): Promise<void> {\n this.isProcessing = true\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '🔄 음성을 텍스트로 변환 중...' }\n })\n )\n\n try {\n const reader = new FileReader()\n reader.readAsDataURL(audioBlob)\n\n reader.onloadend = async () => {\n const base64Audio = (reader.result as string).split(',')[1]\n await this.sendToGoogleSpeech(base64Audio)\n }\n\n reader.onerror = () => {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '오디오 처리 실패' }\n })\n )\n this.finishRecording()\n }\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: '처리 중 오류 발생' }\n })\n )\n this.finishRecording()\n }\n }\n\n private async sendToGoogleSpeech(base64Audio: string): Promise<void> {\n let encoding = 'WEBM_OPUS'\n let sampleRate = 48000\n\n if (this.mediaRecorder && this.mediaRecorder.mimeType) {\n const mimeType = this.mediaRecorder.mimeType.toLowerCase()\n\n if (mimeType.includes('opus')) {\n encoding = 'WEBM_OPUS'\n } else if (mimeType.includes('webm')) {\n encoding = 'WEBM_OPUS'\n } else if (mimeType.includes('mp4')) {\n encoding = 'MP3'\n } else if (mimeType.includes('wav')) {\n encoding = 'LINEAR16'\n }\n }\n\n const requestBody = {\n config: {\n encoding: encoding,\n sampleRateHertz: sampleRate,\n languageCode: 'ko-KR',\n enableAutomaticPunctuation: true,\n model: 'latest_long',\n useEnhanced: true,\n enableWordTimeOffsets: false,\n enableWordConfidence: false,\n maxAlternatives: 1,\n speechContexts: [\n {\n phrases: [\n '1번',\n '2번',\n '3번',\n '4번',\n '5번',\n '6번',\n '7번',\n '합격',\n '불합격',\n '적합',\n '부적합',\n '기본업무',\n '시공',\n '자재',\n '도서',\n '모두',\n '전체',\n '초기화',\n '조치사항',\n '확인 필요',\n '기본 외 업무',\n '부터',\n '까지'\n ],\n boost: 20\n }\n ]\n },\n audio: {\n content: base64Audio\n }\n }\n\n try {\n const response = await fetch(`https://speech.googleapis.com/v1/speech:recognize?key=${this.apiKey}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(requestBody)\n })\n\n if (response.ok) {\n const data = await response.json()\n\n if (data.results && data.results.length > 0) {\n const finalTranscript = data.results.map((result: any) => result.alternatives[0].transcript).join(' ')\n\n this.dispatchEvent(\n new CustomEvent('stt-result', {\n detail: {\n finalTranscript: finalTranscript.trim(),\n interimTranscript: ''\n }\n })\n )\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: `📝 Recognized: ${finalTranscript}` }\n })\n )\n\n // 음성 인식 완료 후 즉시 완료 처리\n this.finishRecording()\n } else {\n this.dispatchEvent(\n new CustomEvent('stt-result', {\n detail: {\n finalTranscript: '',\n interimTranscript: ''\n }\n })\n )\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성을 인식하지 못했습니다.' }\n })\n )\n\n // 인식 실패 시에도 즉시 완료 처리\n this.finishRecording()\n }\n } else {\n const error = await response.text()\n let errorMessage = 'API 오류 발생'\n\n try {\n const errorObj = JSON.parse(error)\n if (errorObj.error && errorObj.error.message) {\n errorMessage = errorObj.error.message\n }\n } catch (e) {\n errorMessage = `HTTP ${response.status}`\n }\n\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: errorMessage }\n })\n )\n\n // API 오류 시에도 즉시 완료 처리\n this.finishRecording()\n }\n } catch (error) {\n this.dispatchEvent(\n new CustomEvent('stt-error', {\n detail: { error: `네트워크 오류: ${error instanceof Error ? error.message : '알 수 없는 오류'}` }\n })\n )\n\n // 네트워크 오류 시에도 즉시 완료 처리\n this.finishRecording()\n }\n }\n\n private finishRecording() {\n this.cleanup()\n\n this.dispatchEvent(\n new CustomEvent('stt-status', {\n detail: { status: '음성 인식 종료' }\n })\n )\n }\n\n private cleanup() {\n // 모든 상태 완전 초기화\n if (this.stream) {\n this.stream.getTracks().forEach(track => {\n track.stop()\n track.enabled = false\n })\n this.stream = null\n }\n\n if (this.mediaRecorder) {\n try {\n if (this.mediaRecorder.state !== 'inactive') {\n this.mediaRecorder.stop()\n }\n } catch (e) {\n // MediaRecorder stop 에러 무시\n }\n this.mediaRecorder = null\n }\n\n this.audioChunks = []\n this.isRecording = false\n this.isProcessing = false\n }\n\n protected render() {\n return null\n }\n}\n"]}
@@ -1,28 +0,0 @@
1
- /**
2
- * 한글 숫자 → 아라비아 숫자 변환 맵
3
- */
4
- export declare const hangulDigits: Record<string, string>;
5
- /**
6
- * 음성 인식 오인식 보정 맵
7
- */
8
- export declare const misheardMap: Record<string, string>;
9
- /**
10
- * 합격/불합격 동의어
11
- */
12
- export declare const passSynonyms: string[];
13
- export declare const failSynonyms: string[];
14
- /**
15
- * 체크리스트 명령 해석 결과 타입
16
- */
17
- export interface ParsedSpeechCommand {
18
- rowIds: number[];
19
- isPass: boolean | null;
20
- actionText?: string;
21
- raw: string;
22
- }
23
- /**
24
- * 음성 인식 텍스트를 체크리스트 명령으로 해석
25
- * @param command 음성 인식 결과 텍스트
26
- * @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)
27
- */
28
- export declare function parseSpeechCommand(command: string, checklistLength?: number): ParsedSpeechCommand;
@@ -1,146 +0,0 @@
1
- // stt-utils.ts
2
- // 음성 인식 텍스트를 체크리스트 명령으로 해석하는 유틸리티
3
- /**
4
- * 한글 숫자 → 아라비아 숫자 변환 맵
5
- */
6
- export const hangulDigits = {
7
- 일: '1',
8
- 이: '2',
9
- 삼: '3',
10
- 사: '4',
11
- 오: '5',
12
- 육: '6',
13
- 륙: '6',
14
- 칠: '7',
15
- 팔: '8',
16
- 구: '9',
17
- 십: '10',
18
- 십일: '11',
19
- 열하나: '11',
20
- 십이: '12',
21
- 열둘: '12',
22
- 십삼: '13',
23
- 열셋: '13',
24
- 십사: '14',
25
- 열넷: '14',
26
- 십오: '15',
27
- 열다섯: '15',
28
- 십육: '16',
29
- 열여섯: '16',
30
- 십칠: '17',
31
- 열일곱: '17',
32
- 십팔: '18',
33
- 열여덟: '18',
34
- 십구: '19',
35
- 열아홉: '19',
36
- 이십: '20',
37
- 스물: '20'
38
- };
39
- /**
40
- * 음성 인식 오인식 보정 맵
41
- */
42
- export const misheardMap = {
43
- 일번: '1번',
44
- 일본: '1번',
45
- 이번: '2번',
46
- 삼번: '3번',
47
- 사번: '4번',
48
- 오번: '5번',
49
- 육번: '6번',
50
- 륙번: '6번',
51
- 칠번: '7번',
52
- 팔번: '8번',
53
- 구번: '9번',
54
- 십번: '10번',
55
- 십일번: '11번',
56
- 열하나번: '11번',
57
- 십이번: '12번',
58
- 열둘번: '12번',
59
- 십삼번: '13번',
60
- 열셋번: '13번',
61
- 십사번: '14번',
62
- 열넷번: '14번',
63
- 십오번: '15번',
64
- 열다섯번: '15번',
65
- 십육번: '16번',
66
- 열여섯번: '16번',
67
- 십칠번: '17번',
68
- 열일곱번: '17번',
69
- 십팔번: '18번',
70
- 열여덟번: '18번',
71
- 십구번: '19번',
72
- 열아홉번: '19번',
73
- 이십번: '20번',
74
- 스물번: '20번',
75
- // 추가 보정
76
- '조치 사항': '조치사항',
77
- 조치상: '조치사항',
78
- 조치: '조치사항',
79
- 자제: '자재'
80
- };
81
- /**
82
- * 합격/불합격 동의어
83
- */
84
- export const passSynonyms = ['합격', 'pass', 'approved', 'okay'];
85
- export const failSynonyms = ['불합격', 'fail', 'failed'];
86
- /**
87
- * 음성 인식 텍스트를 체크리스트 명령으로 해석
88
- * @param command 음성 인식 결과 텍스트
89
- * @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)
90
- */
91
- export function parseSpeechCommand(command, checklistLength = 20) {
92
- let original = command;
93
- // (A) 하이픈 제거, 오인식 보정
94
- command = command.replace(/-/g, '');
95
- for (const [wrong, correct] of Object.entries(misheardMap)) {
96
- command = command.replace(new RegExp(wrong, 'g'), correct);
97
- }
98
- // (B) 한글 숫자 변환
99
- let tokens = command.split(/\s+/).map(token => {
100
- if (hangulDigits[token])
101
- return hangulDigits[token] + '번';
102
- const m = token.match(/^([일이삼사오육륙칠팔구십])번$/);
103
- if (m)
104
- return hangulDigits[m[1]] + '번';
105
- return token;
106
- });
107
- command = tokens.join(' ');
108
- // (C) 번호 추출
109
- const rowRegexGlobal = /(\d+)번/g;
110
- let rowMatches = [...command.matchAll(rowRegexGlobal)];
111
- let rowIds = [];
112
- rowMatches.forEach(match => {
113
- let numStr = match[1];
114
- let numeric = parseInt(numStr, 10);
115
- if (numeric >= 1 && numeric <= checklistLength) {
116
- rowIds.push(numeric);
117
- }
118
- });
119
- // (D) 합격/불합격 여부
120
- let isPass = null;
121
- for (let word of passSynonyms) {
122
- if (command.includes(word)) {
123
- isPass = true;
124
- break;
125
- }
126
- }
127
- for (let word of failSynonyms) {
128
- if (command.includes(word)) {
129
- isPass = false;
130
- break;
131
- }
132
- }
133
- // (E) 조치사항 텍스트 추출
134
- let actionText;
135
- let actionMatch = command.match(/조치사항\s*(.*)/);
136
- if (actionMatch && actionMatch[1]) {
137
- actionText = actionMatch[1].trim();
138
- }
139
- return {
140
- rowIds,
141
- isPass,
142
- actionText,
143
- raw: original
144
- };
145
- }
146
- //# sourceMappingURL=stt-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stt-utils.js","sourceRoot":"","sources":["../../client/stt/stt-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// stt-utils.ts\n// 음성 인식 텍스트를 체크리스트 명령으로 해석하는 유틸리티\n\n/**\n * 한글 숫자 → 아라비아 숫자 변환 맵\n */\nexport const hangulDigits: Record<string, string> = {\n 일: '1',\n 이: '2',\n 삼: '3',\n 사: '4',\n 오: '5',\n 육: '6',\n 륙: '6',\n 칠: '7',\n 팔: '8',\n 구: '9',\n 십: '10',\n 십일: '11',\n 열하나: '11',\n 십이: '12',\n 열둘: '12',\n 십삼: '13',\n 열셋: '13',\n 십사: '14',\n 열넷: '14',\n 십오: '15',\n 열다섯: '15',\n 십육: '16',\n 열여섯: '16',\n 십칠: '17',\n 열일곱: '17',\n 십팔: '18',\n 열여덟: '18',\n 십구: '19',\n 열아홉: '19',\n 이십: '20',\n 스물: '20'\n}\n\n/**\n * 음성 인식 오인식 보정 맵\n */\nexport const misheardMap: Record<string, string> = {\n 일번: '1번',\n 일본: '1번',\n 이번: '2번',\n 삼번: '3번',\n 사번: '4번',\n 오번: '5번',\n 육번: '6번',\n 륙번: '6번',\n 칠번: '7번',\n 팔번: '8번',\n 구번: '9번',\n 십번: '10번',\n 십일번: '11번',\n 열하나번: '11번',\n 십이번: '12번',\n 열둘번: '12번',\n 십삼번: '13번',\n 열셋번: '13번',\n 십사번: '14번',\n 열넷번: '14번',\n 십오번: '15번',\n 열다섯번: '15번',\n 십육번: '16번',\n 열여섯번: '16번',\n 십칠번: '17번',\n 열일곱번: '17번',\n 십팔번: '18번',\n 열여덟번: '18번',\n 십구번: '19번',\n 열아홉번: '19번',\n 이십번: '20번',\n 스물번: '20번',\n // 추가 보정\n '조치 사항': '조치사항',\n 조치상: '조치사항',\n 조치: '조치사항',\n 자제: '자재'\n}\n\n/**\n * 합격/불합격 동의어\n */\nexport const passSynonyms = ['합격', 'pass', 'approved', 'okay']\nexport const failSynonyms = ['불합격', 'fail', 'failed']\n\n/**\n * 체크리스트 명령 해석 결과 타입\n */\nexport interface ParsedSpeechCommand {\n rowIds: number[] // 체크리스트 항목 번호(1,2,3 등)\n isPass: boolean | null // 합격/불합격 여부 (없으면 null)\n actionText?: string // 조치사항 텍스트 (있을 때만)\n raw: string // 원본 텍스트\n}\n\n/**\n * 음성 인식 텍스트를 체크리스트 명령으로 해석\n * @param command 음성 인식 결과 텍스트\n * @param checklistLength 체크리스트 항목 개수(번호 범위 제한용)\n */\nexport function parseSpeechCommand(command: string, checklistLength = 20): ParsedSpeechCommand {\n let original = command\n\n // (A) 하이픈 제거, 오인식 보정\n command = command.replace(/-/g, '')\n for (const [wrong, correct] of Object.entries(misheardMap)) {\n command = command.replace(new RegExp(wrong, 'g'), correct)\n }\n\n // (B) 한글 숫자 변환\n let tokens = command.split(/\\s+/).map(token => {\n if (hangulDigits[token]) return hangulDigits[token] + '번'\n const m = token.match(/^([일이삼사오육륙칠팔구십])번$/)\n if (m) return hangulDigits[m[1]] + '번'\n return token\n })\n command = tokens.join(' ')\n\n // (C) 번호 추출\n const rowRegexGlobal = /(\\d+)번/g\n let rowMatches = [...command.matchAll(rowRegexGlobal)]\n let rowIds: number[] = []\n rowMatches.forEach(match => {\n let numStr = match[1]\n let numeric = parseInt(numStr, 10)\n if (numeric >= 1 && numeric <= checklistLength) {\n rowIds.push(numeric)\n }\n })\n\n // (D) 합격/불합격 여부\n let isPass: boolean | null = null\n for (let word of passSynonyms) {\n if (command.includes(word)) {\n isPass = true\n break\n }\n }\n for (let word of failSynonyms) {\n if (command.includes(word)) {\n isPass = false\n break\n }\n }\n\n // (E) 조치사항 텍스트 추출\n let actionText: string | undefined\n let actionMatch = command.match(/조치사항\\s*(.*)/)\n if (actionMatch && actionMatch[1]) {\n actionText = actionMatch[1].trim()\n }\n\n return {\n rowIds,\n isPass,\n actionText,\n raw: original\n }\n}\n"]}