@flextudio/scenario 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -208
- package/package.json +1 -1
- package/skill/SKILL.md +1 -0
package/README.md
CHANGED
|
@@ -1,260 +1,137 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Flextudio-CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 소개
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Flextudio Scenario CLI 는 Claude Code 같은 AI 코딩 에이전트로 flextudio meta-contract v1 시나리오를 쉽게 작성할 수 있는 도구
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
| 프로파일 | 패키지명 | otel | 용도 |
|
|
10
|
-
|---|---|---|---|
|
|
11
|
-
| **base** (기본·배포) | `@flextudio/scenario` | 없음 | 배포 — 사람들이 `npm i -g` 해서 직접 쓰는 일반 버전 |
|
|
12
|
-
| **otel** | `@flextudio/scenario-gen-otel` | 포함(@opentelemetry/* + collector) | 벤치 트레이스 span 방출 전용 (**배포 아님**) |
|
|
7
|
+
## 1. 설치
|
|
13
8
|
|
|
14
9
|
```bash
|
|
15
|
-
|
|
16
|
-
npm run pack # 배포용 = base alias (otel 없음) → flextudio-scenario-gen-0.1.0.tgz
|
|
17
|
-
npm run pack:base # 위와 동일 (명시)
|
|
18
|
-
npm run pack:otel # 벤치 전용, 배포 아님 → flextudio-scenario-gen-otel-0.1.0.tgz
|
|
10
|
+
npm i -g @flextudio/scenario
|
|
19
11
|
```
|
|
20
12
|
|
|
21
|
-
|
|
22
|
-
- `<설치폴더>/.claude/skills/scenario-gen/` 에 SKILL.md + 펼친 자산 배치 (그 폴더에서 Claude Code 가 자동 인식)
|
|
23
|
-
- `<설치폴더>/.claude/commands/flex-spec.md` 에 `/flex-spec` 슬래시 커맨드 배치
|
|
24
|
-
- `~/.flex-scenario/contract-root/` 에 schema/+rules.md/+catalog.json/+examples 진실원본 복사 (**전역 1개 공유** — 없으면 글로벌 패키지 내부 `contract-data/` 폴백)
|
|
25
|
-
- (otel 프로파일만) `~/.flex-scenario/otel-collector.yaml` 에 OTel Collector 템플릿 배치
|
|
26
|
-
- 전역 PATH 에 `flex-scenario` 실행 파일 등록
|
|
13
|
+
## 2. 빠른 시작
|
|
27
14
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
15
|
+
```bash
|
|
16
|
+
# 0) 작업할 폴더에서 환경 세팅
|
|
17
|
+
cd my-project
|
|
18
|
+
fscn init
|
|
32
19
|
|
|
33
|
-
|
|
20
|
+
# 1) 로그인 (브라우저 OIDC 인증 → 워크스페이스 선택)
|
|
21
|
+
fscn login
|
|
34
22
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
>
|
|
23
|
+
# 2) Claude Code 에서 화면 요청 → 시나리오 JSON 생성 및 시나리오 생성 (아래 "시나리오 만들기" 참고)
|
|
24
|
+
claude
|
|
25
|
+
> 휴가신청 화면 만들어줘
|
|
38
26
|
|
|
39
|
-
|
|
27
|
+
# 3) 시나리오 검증
|
|
28
|
+
fscn validate my-scenario.json
|
|
40
29
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
npm run pack:base # → cli/flextudio-scenario-gen-0.1.0.tgz
|
|
44
|
-
|
|
45
|
-
# 2) 설치 — 스킬/커맨드는 "지금 있는 폴더"의 .claude 에 깔린다. 먼저 쓸 프로젝트로 이동:
|
|
46
|
-
cd /path/to/your-project
|
|
47
|
-
npm i -g <repo>/cli/flextudio-scenario-gen-0.1.0.tgz # base 엔 protobufjs 없음 → postinstall 자동 실행
|
|
48
|
-
# ↳ 어떤 의존 postinstall 이 깨지면: --ignore-scripts 붙이고 → 그 폴더에서 flex-scenario init
|
|
49
|
-
|
|
50
|
-
# 3) 사용
|
|
51
|
-
# (a) claude 터미널에서 자연어: "휴가신청 화면 만들어줘" → scenario-gen 스킬 자동 발동
|
|
52
|
-
# (b) CLI 직접:
|
|
53
|
-
flex-scenario validate <scenario.json> # 전체 검증
|
|
54
|
-
flex-scenario catalog --section controlTypes
|
|
55
|
-
flex-scenario examples list / cat <relpath>
|
|
56
|
-
flex-scenario gen --input case.md --out out.json # 비대화형 생성 (트레이싱 없음)
|
|
57
|
-
flex-scenario doctor # otel 항목은 ○ optional 로 표시
|
|
58
|
-
|
|
59
|
-
# 다른 폴더에서도 쓰려면 — 그 폴더로 이동해 한 번 실행 (그 폴더의 .claude 에 복제)
|
|
60
|
-
cd /path/to/another-project && flex-scenario init
|
|
61
|
-
|
|
62
|
-
# 4) 삭제 — 한 번이면 끝. 삭제 범위 메뉴(현재 폴더/모든 설치 폴더/완전 삭제/취소)
|
|
63
|
-
flex-scenario uninstall # "완전 삭제" 선택 시 cleanup + npm uninstall -g 자동
|
|
30
|
+
# 4) 검증 통과한 시나리오를 서버에 생성
|
|
31
|
+
fscn create --file my-scenario.json
|
|
64
32
|
```
|
|
65
33
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
### B. otel (벤치 — repo 안에서만)
|
|
34
|
+
> `init` 은 그 폴더에 **환경을 세팅**합니다. `npm i -g` 직후엔 설치 명령을 친 폴더에 자동 세팅되며, **다른 작업 폴더**에서 쓰려면 그 폴더에서 `fscn init` 을 실행합니다.
|
|
69
35
|
|
|
70
|
-
|
|
36
|
+
## 3. 시나리오 만들기
|
|
71
37
|
|
|
72
|
-
|
|
73
|
-
# 1) 1회 세팅 (project-local — ~/.claude·글로벌 안 건드림)
|
|
74
|
-
./bench/setup-bench.sh
|
|
75
|
-
|
|
76
|
-
# 2) 실행 (병렬 OK). 기본은 트레이싱 OFF
|
|
77
|
-
./bench/run-case.sh flex-cli-skill L1-01
|
|
38
|
+
`fscn init` 으로 세팅된 폴더에서 **Claude Code 에게 만들고 싶은 화면을 자연어로 요청**하면, 함께 설치된 `scenario-gen` 스킬이 자동으로 발동해 시나리오 메타를 생성합니다.
|
|
78
39
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
40
|
+
```
|
|
41
|
+
cd my-project # fscn init 해둔 폴더
|
|
42
|
+
claude # Claude Code 실행
|
|
82
43
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
44
|
+
> 휴가신청 화면 만들어줘
|
|
45
|
+
> 거래처 리스트-상세 화면 만들어줘
|
|
46
|
+
> (엑셀 화면정의서/캡처 이미지를 첨부하며) 이대로 화면 만들어줘
|
|
86
47
|
```
|
|
87
48
|
|
|
88
|
-
|
|
49
|
+
### 스펙 기반 생성
|
|
50
|
+
|
|
51
|
+
바로 생성하는 대신 **중간 스펙을 먼저 만들어** 마스터-디테일·키·데이터연결을 확정한 뒤 그 스펙대로 생성하면 더 정확한 결과물을 생성할 수 있습니다.
|
|
89
52
|
|
|
90
|
-
|
|
53
|
+
- **Claude Code**: `/flex-spec` 커맨드에 프롬프트(화면 요청·화면정의서·데이터구조, 엑셀/캡처 이미지 첨부 가능)를 주면, 스펙을 생성해 **데이터연결이 확정된 상태로** 시나리오를 만듭니다.
|
|
91
54
|
|
|
92
|
-
|
|
55
|
+
```
|
|
56
|
+
> /flex-spec 거래처 리스트-상세 화면 만들어줘
|
|
57
|
+
> /flex-spec (화면정의서 캡처 이미지를 첨부하며) 이대로 만들어줘
|
|
58
|
+
```
|
|
93
59
|
|
|
94
|
-
|
|
95
|
-
|---|---|---|
|
|
96
|
-
| **authored (직접 수정)** | `SKILL.md`, `references/**` | `cli/skill/` 안에서 직접 편집 (빌드 비대상, git 추적) |
|
|
97
|
-
| **자동생성 (빌드 산출 · 직접수정 금지 · gitignore)** | `docs/` `schemas/` `patterns/` `examples/` `skill-guides/` `catalog.json` `rules.md` `README.md` `design-rules.md` `design-system.md` `intent-rules.md` `intent-system.md` | `scripts/build-skill-payload.mjs` 가 루트 ①영역에서 펼침 |
|
|
60
|
+
- **Codex / Antigravity**: 프롬프트에 **스펙을 생성해서 진행해달라**고 요청하면, 스펙을 어느 정도 생성한 뒤 진행해 더 나은 결과물이 나옵니다.
|
|
98
61
|
|
|
99
|
-
|
|
62
|
+
```
|
|
63
|
+
> 거래처 리스트-상세 화면, 스펙을 먼저 생성해서 진행해줘
|
|
64
|
+
```
|
|
100
65
|
|
|
101
|
-
|
|
102
|
-
|---|---|
|
|
103
|
-
| `schemas/` | `schema/v1/**/*.schema.json` |
|
|
104
|
-
| `docs/` | `schema/v1/**/*.md` |
|
|
105
|
-
| `patterns/` | `core/contract.mjs` (`listPatterns`/`getPattern`) |
|
|
106
|
-
| `examples/` | `examples/**` |
|
|
107
|
-
| `skill-guides/` | `skill-guides/**` (루트 별도 관리 폴더) |
|
|
108
|
-
| `catalog.json` `rules.md` | `spec/catalog.json` `spec/rules.md` |
|
|
109
|
-
| `design-rules.md` `design-system.md` | `schema/v1/design-system/{DESIGN,README}.md` |
|
|
110
|
-
| `intent-rules.md` `intent-system.md` | `runtime/v1/intent-system/{INTENT,README}.md` |
|
|
66
|
+
해당 메타로 시나리오 생성 방법은 아래와 같습니다.
|
|
111
67
|
|
|
112
68
|
```bash
|
|
113
|
-
|
|
114
|
-
npm run build:skill
|
|
69
|
+
fscn create --file <생성된 파일>.json
|
|
115
70
|
```
|
|
116
71
|
|
|
117
|
-
|
|
72
|
+
## 4. 명령어
|
|
118
73
|
|
|
119
|
-
|
|
74
|
+
### 환경 세팅
|
|
120
75
|
|
|
121
76
|
```bash
|
|
122
|
-
#
|
|
123
|
-
|
|
124
|
-
flex-scenario init
|
|
125
|
-
|
|
126
|
-
# 옵션 2: 로컬 tarball
|
|
127
|
-
npm run pack:base # repo 루트에서 → cli/flextudio-scenario-gen-0.1.0.tgz
|
|
128
|
-
npm i -g ./cli/flextudio-scenario-gen-0.1.0.tgz --ignore-scripts
|
|
129
|
-
flex-scenario init
|
|
130
|
-
|
|
131
|
-
# 옵션 3: npx 즉시 실행
|
|
132
|
-
npx @flextudio/scenario doctor
|
|
77
|
+
fscn init # 현재 폴더에 스킬/커맨드 배치 (환경 세팅)
|
|
78
|
+
fscn doctor # 세팅 점검 — 에이전트 / SKILL.md / contract-root / core 모듈
|
|
133
79
|
```
|
|
134
80
|
|
|
135
|
-
|
|
136
|
-
> OTel transitive 의존성인 `protobufjs@7.6.0` 의 npm registry tarball 에 `scripts/postinstall.js`
|
|
137
|
-
> 가 빠져 있어 (registry 패키징 버그) 글로벌 install 시점에 그 패키지의 postinstall
|
|
138
|
-
> hook 이 `Cannot find module` 으로 깨진다. 우리 패키지는 그 파일을 실제로 필요로
|
|
139
|
-
> 하지 않으므로 `--ignore-scripts` 로 모든 의존성 postinstall 을 차단하고, 그 직후
|
|
140
|
-
> `flex-scenario init` 으로 우리만의 postinstall (skill 배치 + contract-root 복사 등)
|
|
141
|
-
> 을 수동 실행한다. 동일 효과, 깨지지 않음.
|
|
81
|
+
- `npm i -g @flextudio/scenario` 직후엔 설치 명령을 친 폴더에 자동 세팅됩니다. **다른 작업 폴더**에서 쓰려면 그 폴더에서 `fscn init` 을 실행합니다.
|
|
142
82
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
✔ /Users/<you>/.claude/skills/scenario-gen
|
|
147
|
-
✔ /Users/<you>/.flex-scenario/contract-root
|
|
148
|
-
· otel collector 템플릿 없음 (base 프로파일) — skip
|
|
83
|
+
### 인증
|
|
149
84
|
|
|
150
|
-
|
|
85
|
+
```bash
|
|
86
|
+
fscn login # 브라우저 OIDC 로그인
|
|
87
|
+
fscn logout # 로그아웃
|
|
151
88
|
```
|
|
152
89
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
| 명령 | 역할 |
|
|
156
|
-
|---|---|
|
|
157
|
-
| `flex-scenario init` | postinstall 을 수동 재실행 |
|
|
158
|
-
| `flex-scenario gen --input <case.md> --out <scenario.json>` | claude -p 를 spawn → stream-json → (otel 프로파일이면 OTel adapter) → 결과 파일. base 프로파일은 트레이싱 없이 동작 |
|
|
159
|
-
| `flex-scenario validate <file>` | 전체 시나리오 검증 (ajv + cross-check 21종) |
|
|
160
|
-
| `flex-scenario validate --schema <name> <file>` | 단편 검증 |
|
|
161
|
-
| `flex-scenario catalog --section <name>` | catalog.json 의 한 섹션 출력 |
|
|
162
|
-
| `flex-scenario examples list / cat <relpath>` | examples 디렉토리 트리 / 본문 |
|
|
163
|
-
| `flex-scenario trace ui` | Phoenix 기동 안내 (docker run …) |
|
|
164
|
-
| `flex-scenario doctor` | claude / OTel endpoint / SKILL.md / contract-core 점검 |
|
|
165
|
-
| `flex-scenario uninstall [--scope here\|all\|full]` | 삭제 범위 메뉴 — full 은 cleanup + `npm uninstall -g` 자동 (완전 삭제) |
|
|
166
|
-
|
|
167
|
-
## 환경변수
|
|
168
|
-
|
|
169
|
-
| 변수 | 기본 | 용도 |
|
|
170
|
-
|---|---|---|
|
|
171
|
-
| `FLEX_CONTRACT_ROOT` | (auto) | schema/+rules.md 가 있는 디렉토리. 명시하면 우선. |
|
|
172
|
-
| `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318` | Collector/Phoenix URL |
|
|
173
|
-
| `OTEL_SERVICE_NAME` | (none) | 트레이스 service.name |
|
|
174
|
-
| `CLAUDE_CODE_ENABLE_TELEMETRY` | (off) | Claude Code 내장 telemetry. 끄면 API 요청·토큰 metric 안 나감 |
|
|
175
|
-
| `FLEX_METHOD / FLEX_CASE / FLEX_ITER` | `flex-cli-skill / <case basename> / 1` | adapter 가 root span 에 박는 flex.* attribute |
|
|
176
|
-
| `TRACE_PARENT` | (auto) | W3C traceparent. 비어 있으면 매 gen 호출마다 자체 생성. |
|
|
177
|
-
|
|
178
|
-
## 동작 모델 (어떻게 MCP 없이 검증까지?)
|
|
90
|
+
### 시나리오 검증
|
|
179
91
|
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
│ (SKILL.md 안에 schema 요약·catalog·패턴이 인라인되어 있어 모델이 그것만 보고 JSON 작성)
|
|
186
|
-
▼
|
|
187
|
-
stream-json (stdout)
|
|
188
|
-
│
|
|
189
|
-
▼
|
|
190
|
-
(otel 프로파일) stream-json-otel-adapter ← @flextudio/otel-common 의 bin. OTLP 로 span 전송
|
|
191
|
-
(base 프로파일) adapter 없이 claude.stdout 직결 (트레이싱 없음)
|
|
192
|
-
│
|
|
193
|
-
▼
|
|
194
|
-
flex-scenario.mjs 가 결과 텍스트에서 JSON 한 덩어리 추출 → --out
|
|
195
|
-
│
|
|
196
|
-
▼
|
|
197
|
-
flex-scenario validate <out> ← @flextudio/contract-core 의 buildAjv + runAllCrossChecks 직접 호출
|
|
198
|
-
(검증 진입점은 모두 동일 core 호출 — 단일 진실원본).
|
|
92
|
+
```bash
|
|
93
|
+
fscn validate <scenario.json> # 전체 검증
|
|
94
|
+
fscn validate --schema <name> <file> # 단편(스키마 1개) 검증
|
|
95
|
+
fscn validate <f> --no-write # 검증만, 파일 수정 안 함
|
|
96
|
+
fscn validate <f> --emit-materialized <path> # materialized 본문 별도 저장
|
|
199
97
|
```
|
|
200
98
|
|
|
201
|
-
|
|
99
|
+
### 시나리오 생성
|
|
202
100
|
|
|
203
|
-
## 제거 절차
|
|
204
|
-
|
|
205
|
-
postinstall 이 npm 책임 영역 **밖** (`<설치폴더>/.claude/`, 전역 `~/.flex-scenario/`) 에 만든 산출물은
|
|
206
|
-
`npm uninstall` 만으로는 안 지워진다. 그리고 **npm 7+ 는 uninstall lifecycle(preuninstall)을 실행하지
|
|
207
|
-
않는다** ("While npm v6 had uninstall lifecycle scripts, npm v7 does not" — npm 공식 문서). 자동 훅은
|
|
208
|
-
존재하지 않으므로 **제거의 단일 진입점은 `flex-scenario uninstall`** 이다.
|
|
209
|
-
|
|
210
|
-
### 기본 — flex-scenario uninstall (삭제 범위 메뉴)
|
|
211
101
|
```bash
|
|
212
|
-
|
|
213
|
-
```
|
|
214
|
-
```
|
|
215
|
-
삭제 범위를 선택하세요. (↑/↓ 이동 · Enter 선택)
|
|
216
|
-
❯ 현재 폴더만 — 이 폴더의 스킬/커맨드 삭제
|
|
217
|
-
모든 설치 폴더 — 설치된 모든 폴더의 스킬/커맨드 삭제
|
|
218
|
-
완전 삭제 — 모든 설치 폴더 + ~/.flex-scenario 삭제 후 전역 패키지 제거
|
|
219
|
-
취소
|
|
220
|
-
```
|
|
221
|
-
- "현재 폴더만" 은 cwd 가 전역 receipt(`installs[]`)에 기록된 설치 폴더일 때만 나타난다.
|
|
222
|
-
- 현재 폴더만 / 모든 설치 폴더 → CLI 와 `~/.flex-scenario`(contract-root)는 유지, receipt 만 갱신.
|
|
223
|
-
- 완전 삭제 → cleanup(.bak 복원 포함) 후 `npm uninstall -g @flextudio/scenario` 까지 자동 실행.
|
|
224
|
-
단, repo 워크스페이스(dev)에서 실행하면 전역 npm 패키지는 건드리지 않는다
|
|
225
|
-
(`FLEX_SCENARIO_FORCE_UNINSTALL=1` 로 강제 가능).
|
|
226
|
-
- 비대화형(CI·파이프)에선 메뉴 대신 `--scope here|all|full` 을 명시해야 한다 — 묻지 못하면 지우지 않는다.
|
|
227
|
-
|
|
228
|
-
### 수동 fallback
|
|
229
|
-
`flex-scenario uninstall` 의 npm 단계가 실패했거나 bin 이 이미 깨진 경우:
|
|
230
|
-
```bash
|
|
231
|
-
npm uninstall -g @flextudio/scenario
|
|
232
|
-
rm -rf ~/.flex-scenario "<설치폴더>/.claude/skills/scenario-gen" "<설치폴더>/.claude/commands/flex-spec.md"
|
|
102
|
+
fscn create --file <scenario.json>
|
|
233
103
|
```
|
|
234
104
|
|
|
235
|
-
###
|
|
236
|
-
벤치 드라이버가 Ctrl+C 등으로 비정상 종료해도 `~/.claude` 가 더러운 상태로 남지 않도록
|
|
237
|
-
`bench/bench.sh` 가 trap 으로 강제 cleanup 호출. (별도 도큐먼트.)
|
|
105
|
+
### 레퍼런스 조회
|
|
238
106
|
|
|
239
|
-
|
|
107
|
+
```bash
|
|
108
|
+
fscn catalog --section <name> # catalog.json 의 한 섹션
|
|
109
|
+
fscn examples list # examples 디렉토리 트리
|
|
110
|
+
fscn examples cat <relpath> # 특정 example 본문
|
|
111
|
+
fscn contract info # contract 메타 (버전·스키마 수)
|
|
112
|
+
```
|
|
240
113
|
|
|
241
|
-
|
|
242
|
-
`scenario-gen.bak` 으로 백업(커맨드는 `flex-spec.md.bak`). uninstall 시 `.bak` 이 있으면 원위치로 되돌린다.
|
|
243
|
-
같은 규칙이 전역 `~/.flex-scenario`(`otel-collector.yaml`, `contract-root`) 에도 적용된다.
|
|
114
|
+
### 빌드 세션
|
|
244
115
|
|
|
245
|
-
|
|
116
|
+
```bash
|
|
117
|
+
fscn session start # build_id 발급
|
|
118
|
+
fscn session status --id <build_id> # 현재 stage + 다음 힌트
|
|
119
|
+
fscn session finish --id <build_id> [--artifact <path>]
|
|
120
|
+
```
|
|
246
121
|
|
|
247
|
-
|
|
248
|
-
|---|---|---|
|
|
249
|
-
| `@opentelemetry/*` · otel-common | **없음** | 포함(bundle) |
|
|
250
|
-
| collector 템플릿 배치 | skip | `~/.flex-scenario/otel-collector.yaml` |
|
|
251
|
-
| `gen` 트레이싱 | 없음(claude.stdout 직결) | adapter 로 OTLP span 방출 |
|
|
252
|
-
| `validate`/`catalog`/`examples` | 동일 | 동일 |
|
|
253
|
-
| 대상 | 사람들이 직접 설치·사용 | 벤치(setup-bench) |
|
|
122
|
+
### 진단·관리
|
|
254
123
|
|
|
255
|
-
|
|
256
|
-
|
|
124
|
+
```bash
|
|
125
|
+
fscn doctor # 에이전트 모듈 점검
|
|
126
|
+
fscn version # 버전
|
|
127
|
+
fscn help # 도움말
|
|
128
|
+
```
|
|
257
129
|
|
|
258
|
-
|
|
130
|
+
### 제거
|
|
259
131
|
|
|
260
|
-
|
|
132
|
+
```bash
|
|
133
|
+
fscn uninstall # 범위 선택 메뉴 (TTY)
|
|
134
|
+
fscn uninstall --scope here # 현재 폴더 스킬/커맨드만
|
|
135
|
+
fscn uninstall --scope all # 설치된 모든 폴더
|
|
136
|
+
fscn uninstall --scope full # 전부 + ~/.flex-scenario + 전역 패키지 제거
|
|
137
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flextudio/scenario",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "flextudio meta-contract v1 시나리오 검증·카탈로그·세션 CLI + Claude Code Skill. MCP 서버 없이 SKILL.md 인라인 스키마로 시나리오를 만들고 자체 검증한다. otel 없는 클린 배포본. (벤치용 gen·otel 은 bench/cli_bench 로 분리)",
|
|
6
6
|
"bin": {
|
package/skill/SKILL.md
CHANGED
|
@@ -86,6 +86,7 @@ description: flextudio meta-contract v1 시나리오 JSON 빌드 절차. 사용
|
|
|
86
86
|
7. (**Step 수 ≥ 3 또는 예상 60KB+ 면 필수, 그 외 권장**) **fragment-first** — Step 한 개씩 작성 후 `flex-scenario validate --schema step <fragment-file>` 로 단편 검증, 다음 Step 진행. 한 번에 전체를 Write 하면 (a) 8번에서 polynomial schema fail 폭주(oneOf 회귀), (b) 단일 거대 생성 turn 으로 시간이 폭증하고 실패 시 30KB+ 전체 재작성을 부른다 — 둘 다 fragment-first 가 차단. fragment 가 ok 인 Step 부터 누적 조립 → 마지막 8번 호출은 전체 합본 검증. **이미 쓴 시나리오의 수정은 `Edit`(부분) 로 하고 전체 `Write` 재작성은 금지** (자가검증 루프 6번과 동일 원칙).
|
|
87
87
|
8. **Bash:** `flex-scenario validate <scenario-file>` — 전체 검증. 아래 **자가검증 루프**.
|
|
88
88
|
9. **Bash:** `flex-scenario session finish --id <build_id>` — 세션 종료. 반환된 `artifact` 경로를 최종 답에 명시한다. **산출 JSON 본문을 `cat`/`Read` 로 다시 읽어 응답에 출력하지 않는다** — 경로만.
|
|
89
|
+
10. **Bash:** `flex-scenario create --file <artifact>` — 9번이 반환한 `artifact` 를 서버에 시나리오로 생성. 별도 요청 없이 9번 직후 이어서 호출한다(메타 생성과 시나리오 생성을 한 흐름으로). 응답의 `HTTP <status>` 와 생성 결과(`fScenarioID`/`fScenarioName`)를 최종 답에 함께 보고한다. 미인증이면 `create` 가 로그인을 유도하므로 그 흐름을 따른다. 4xx/5xx(비정상 종료코드)면 본문 메시지를 그대로 보고하고 성공으로 처리하지 않는다.
|
|
89
90
|
|
|
90
91
|
## ★ 자가검증 루프 (8번 단계의 본체)
|
|
91
92
|
|