@things-factory/labeling 9.1.19

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 (55) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/ENTITY_IMPLEMENTATION.md +351 -0
  3. package/INTEGRATION_COMPLETE.md +531 -0
  4. package/MIGRATION_GUIDE.md +310 -0
  5. package/README.md +551 -0
  6. package/REFACTORING_SUMMARY.md +212 -0
  7. package/UI_DOCUMENTATION.md +552 -0
  8. package/dist-client/index.d.ts +3 -0
  9. package/dist-client/index.js +9 -0
  10. package/dist-client/index.js.map +1 -0
  11. package/dist-client/pages/labeling-workflow-builder.d.ts +26 -0
  12. package/dist-client/pages/labeling-workflow-builder.js +636 -0
  13. package/dist-client/pages/labeling-workflow-builder.js.map +1 -0
  14. package/dist-client/pages/labeling-workflow-list.d.ts +24 -0
  15. package/dist-client/pages/labeling-workflow-list.js +495 -0
  16. package/dist-client/pages/labeling-workflow-list.js.map +1 -0
  17. package/dist-client/route.d.ts +1 -0
  18. package/dist-client/route.js +47 -0
  19. package/dist-client/route.js.map +1 -0
  20. package/dist-client/tsconfig.tsbuildinfo +1 -0
  21. package/dist-server/entities/index.d.ts +5 -0
  22. package/dist-server/entities/index.js +11 -0
  23. package/dist-server/entities/index.js.map +1 -0
  24. package/dist-server/index.d.ts +3 -0
  25. package/dist-server/index.js +7 -0
  26. package/dist-server/index.js.map +1 -0
  27. package/dist-server/route.d.ts +2 -0
  28. package/dist-server/route.js +6 -0
  29. package/dist-server/route.js.map +1 -0
  30. package/dist-server/service/index.d.ts +8 -0
  31. package/dist-server/service/index.js +21 -0
  32. package/dist-server/service/index.js.map +1 -0
  33. package/dist-server/service/labeling-workflow-service.d.ts +69 -0
  34. package/dist-server/service/labeling-workflow-service.js +521 -0
  35. package/dist-server/service/labeling-workflow-service.js.map +1 -0
  36. package/dist-server/service/labeling-workflow.d.ts +30 -0
  37. package/dist-server/service/labeling-workflow.js +119 -0
  38. package/dist-server/service/labeling-workflow.js.map +1 -0
  39. package/dist-server/service/workflow-execution-step.d.ts +28 -0
  40. package/dist-server/service/workflow-execution-step.js +115 -0
  41. package/dist-server/service/workflow-execution-step.js.map +1 -0
  42. package/dist-server/service/workflow-execution.d.ts +27 -0
  43. package/dist-server/service/workflow-execution.js +110 -0
  44. package/dist-server/service/workflow-execution.js.map +1 -0
  45. package/dist-server/tsconfig.tsbuildinfo +1 -0
  46. package/dist-server/types/workflow-types.d.ts +141 -0
  47. package/dist-server/types/workflow-types.js +488 -0
  48. package/dist-server/types/workflow-types.js.map +1 -0
  49. package/package.json +51 -0
  50. package/things-factory.config.js +11 -0
  51. package/translations/en.json +6 -0
  52. package/translations/ja.json +6 -0
  53. package/translations/ko.json +6 -0
  54. package/translations/ms.json +6 -0
  55. package/translations/zh.json +6 -0
@@ -0,0 +1,212 @@
1
+ # Labeling Workflow Refactoring Summary
2
+
3
+ ## 목적
4
+
5
+ `integration-label-studio` 패키지에 있던 `labeling-scenario` 기능을 별도의 `labeling` 패키지로 분리하고, 기존 `scenario` 엔티티와의 용어 충돌을 방지하기 위해 모든 용어를 `workflow`로 변경했습니다.
6
+
7
+ ## 요구사항
8
+
9
+ 1. **용어 분리**: `scenario`는 이미 존재하는 엔티티이므로 혼용 금지
10
+ 2. **모듈 분리**: `integration-label-studio`와는 별도의 독립적인 `labeling` 모듈 생성
11
+ 3. **명명 변경**: `labeling-scenario` → `labeling-workflow`
12
+
13
+ ## 변경 사항
14
+
15
+ ### 1. 새 패키지 생성
16
+
17
+ **경로**: `/Users/super/Documents/GitHub/things-factory/packages/labeling/`
18
+
19
+ **구조**:
20
+ ```
21
+ labeling/
22
+ ├── package.json # 패키지 정의
23
+ ├── things-factory.config.js # Things-Factory 설정
24
+ ├── README.md # 사용 가이드
25
+ ├── MIGRATION_GUIDE.md # 마이그레이션 가이드
26
+ ├── CHANGELOG.md # 변경 이력
27
+ ├── REFACTORING_SUMMARY.md # 리팩토링 요약 (현재 문서)
28
+ ├── .npmignore # NPM 배포 제외 파일
29
+ ├── server/
30
+ │ ├── tsconfig.json
31
+ │ ├── index.ts # 서버 엔트리포인트
32
+ │ ├── route.ts # HTTP 라우트 (없음)
33
+ │ ├── types/
34
+ │ │ ├── workflow-types.ts # Workflow 타입 정의 (scenario-types.ts에서 변환)
35
+ │ │ └── global.d.ts # 전역 타입 선언
36
+ │ └── service/
37
+ │ ├── index.ts # 서비스 내보내기
38
+ │ └── labeling-workflow-service.ts # Workflow 서비스 (labeling-scenario-service.ts에서 변환)
39
+ ├── client/
40
+ │ ├── tsconfig.json
41
+ │ └── index.ts # 클라이언트 엔트리포인트
42
+ └── dist-server/ # 빌드 결과 (TypeScript 컴파일 출력)
43
+ └── dist-client/
44
+ ```
45
+
46
+ ### 2. 용어 변경 매핑
47
+
48
+ 모든 `Scenario` 관련 용어를 `Workflow`로 변경:
49
+
50
+ | 기존 (Scenario) | 변경 (Workflow) |
51
+ |----------------|----------------|
52
+ | `LabelingScenario` | `LabelingWorkflow` |
53
+ | `ScenarioStep` | `WorkflowStep` |
54
+ | `ScenarioStepType` | `WorkflowStepType` |
55
+ | `ScenarioStatus` | `WorkflowStatus` |
56
+ | `ScenarioExecution` | `WorkflowExecution` |
57
+ | `ScenarioExecutionStep` | `WorkflowExecutionStep` |
58
+ | `ScenarioExecutionResult` | `WorkflowExecutionResult` |
59
+ | `CreateScenarioRequest` | `CreateWorkflowRequest` |
60
+ | `ExecuteScenarioRequest` | `ExecuteWorkflowRequest` |
61
+ | `LabelingScenarioList` | `LabelingWorkflowList` |
62
+ | `ScenarioExecutionList` | `WorkflowExecutionList` |
63
+ | `ScenarioStatusRequest` | `WorkflowStatusRequest` |
64
+ | `LabelingScenarioService` | `LabelingWorkflowService` |
65
+
66
+ ### 3. GraphQL API 변경
67
+
68
+ #### Mutations
69
+
70
+ | 기존 | 변경 |
71
+ |-----|-----|
72
+ | `createLabelingScenario` | `createLabelingWorkflow` |
73
+ | `executeScenario` | `executeLabelingWorkflow` |
74
+ | `pauseScenario` | `pauseLabelingWorkflow` |
75
+ | `resumeScenario` | `resumeLabelingWorkflow` |
76
+
77
+ #### Queries
78
+
79
+ | 기존 | 변경 |
80
+ |-----|-----|
81
+ | `labelingScenario(scenarioId)` | `labelingWorkflow(workflowId)` |
82
+ | `labelingScenarios(projectId)` | `labelingWorkflows(projectId)` |
83
+ | `scenarioExecution(executionId)` | `workflowExecution(executionId)` |
84
+ | `scenarioExecutions(scenarioId)` | `workflowExecutions(workflowId)` |
85
+
86
+ #### Privilege Category
87
+
88
+ - **기존**: `@privilege(category: "label-studio", privilege: "mutation")`
89
+ - **변경**: `@privilege(category: "labeling", privilege: "mutation")`
90
+
91
+ ### 4. integration-label-studio 패키지 정리
92
+
93
+ 다음 파일들을 deprecated로 표시:
94
+
95
+ ```
96
+ integration-label-studio/server/
97
+ ├── types/scenario-types.ts.deprecated
98
+ └── service/labeling-scenario-service.ts.deprecated
99
+ ```
100
+
101
+ `server/service/index.ts`에서 `LabelingScenarioService` import 및 등록 제거.
102
+
103
+ ### 5. 의존성 관계
104
+
105
+ **labeling 패키지의 의존성**:
106
+ ```json
107
+ {
108
+ "@things-factory/integration-label-studio": "^9.1.2",
109
+ "@things-factory/dataset": "^9.1.1",
110
+ "@things-factory/ai-inference": "^9.1.1",
111
+ "@things-factory/auth-base": "^9.1.0",
112
+ "@things-factory/env": "^9.1.0"
113
+ }
114
+ ```
115
+
116
+ **labeling-workflow-service.ts가 사용하는 서비스**:
117
+ - `DatasetLabelingIntegration` (from integration-label-studio)
118
+ - `ExternalDataSourceService` (from integration-label-studio)
119
+ - `LabelStudioAIPredictionService` (from integration-label-studio)
120
+
121
+ ## 분리 이유
122
+
123
+ ### 1. 용어 충돌 방지
124
+ Things-Factory에는 이미 `scenario` 엔티티가 존재합니다. `labeling-scenario`와 혼용하면 개발자 혼란과 타입 충돌이 발생할 수 있습니다.
125
+
126
+ ### 2. 관심사 분리
127
+ - **integration-label-studio**: Label Studio 자체의 통합 (프로젝트, 태스크, 사용자 동기화 등)
128
+ - **labeling**: 레이블링 워크플로우 오케스트레이션 (고수준 자동화)
129
+
130
+ `labeling-workflow`는 Label Studio뿐만 아니라 DataSet, AI 추론 등 여러 서비스를 조율하는 고수준 개념입니다.
131
+
132
+ ### 3. 확장성
133
+ 향후 다른 레이블링 도구(Labelbox, Scale AI 등)를 지원할 때도 `labeling` 패키지를 확장할 수 있습니다.
134
+
135
+ ### 4. 명확한 책임
136
+ - `integration-label-studio`: Label Studio API와의 직접적인 통신
137
+ - `labeling`: 레이블링 프로세스의 전체적인 워크플로우 관리
138
+
139
+ ## 마이그레이션 영향
140
+
141
+ ### Breaking Changes
142
+
143
+ 1. **패키지 변경**: `@things-factory/integration-label-studio` → `@things-factory/labeling`
144
+ 2. **Import 경로 변경**: `scenario-types` → `workflow-types`
145
+ 3. **타입명 변경**: 모든 `Scenario*` → `Workflow*`
146
+ 4. **GraphQL 작업명 변경**: 모든 쿼리/뮤테이션 이름 변경
147
+ 5. **권한 카테고리 변경**: `"label-studio"` → `"labeling"`
148
+
149
+ ### 마이그레이션 필요 대상
150
+
151
+ 1. 백엔드 코드에서 scenario 타입을 import하는 모든 곳
152
+ 2. GraphQL 쿼리/뮤테이션을 사용하는 프론트엔드 코드
153
+ 3. 권한 설정 (Role/Permission)
154
+ 4. 저장된 scenario 데이터 (있는 경우)
155
+
156
+ 자세한 마이그레이션 방법은 [MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)를 참조하세요.
157
+
158
+ ## 테스트 결과
159
+
160
+ ### 빌드 성공
161
+
162
+ ```bash
163
+ cd /Users/super/Documents/GitHub/things-factory/packages/labeling
164
+ npm run build:server # ✓ 성공
165
+ npm run build:client # ✓ 성공
166
+ ```
167
+
168
+ ### 생성된 파일
169
+
170
+ - `dist-server/`: 컴파일된 서버 코드
171
+ - `dist-client/`: 컴파일된 클라이언트 코드
172
+ - TypeScript 선언 파일 (`.d.ts`)
173
+ - Source maps (`.js.map`)
174
+
175
+ ## 문서
176
+
177
+ 1. **README.md**: 사용법, API 예제, 아키텍처 설명
178
+ 2. **MIGRATION_GUIDE.md**: 상세한 마이그레이션 가이드
179
+ 3. **CHANGELOG.md**: 버전별 변경 이력
180
+ 4. **REFACTORING_SUMMARY.md**: 이 문서, 리팩토링 요약
181
+
182
+ ## 향후 작업
183
+
184
+ ### 즉시 필요한 작업
185
+
186
+ - [ ] 기존 코드에서 scenario 참조를 workflow로 변경
187
+ - [ ] 프론트엔드 GraphQL 쿼리/뮤테이션 업데이트
188
+ - [ ] 권한 설정 업데이트
189
+ - [ ] 통합 테스트 실행
190
+
191
+ ### 개선 사항 (Optional)
192
+
193
+ - [ ] 데이터베이스 영속성 추가 (현재는 in-memory)
194
+ - [ ] 스케줄 기반 트리거 구현 (cron)
195
+ - [ ] 이벤트 기반 트리거 구현 (webhook)
196
+ - [ ] 고급 조건 평가 로직 (JSON Logic)
197
+ - [ ] 워크플로우 템플릿 시스템
198
+ - [ ] 워크플로우 버전 관리
199
+ - [ ] 병렬 스텝 실행
200
+ - [ ] 사람 승인 스텝
201
+
202
+ ## 결론
203
+
204
+ `labeling-scenario` 기능을 독립적인 `@things-factory/labeling` 패키지로 성공적으로 분리하고, 모든 용어를 `workflow`로 변경하여 기존 `scenario` 엔티티와의 충돌을 방지했습니다.
205
+
206
+ 이 변경으로 인해:
207
+ - ✅ 용어 충돌 해결
208
+ - ✅ 명확한 관심사 분리
209
+ - ✅ 확장 가능한 아키텍처
210
+ - ✅ 독립적인 모듈 관리
211
+
212
+ 다만, 이는 **Breaking Change**이므로 기존 코드의 업데이트가 필요합니다.