eojeon-cli 0.0.0-stage → 0.1.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.
- package/CHANGELOG.md +25 -0
- package/LICENSE +26 -0
- package/README.md +216 -2
- package/cli/eojeon.js +78 -0
- package/court.config.json +316 -0
- package/package.json +60 -4
- package/public/app.js +397 -0
- package/public/court-types.js +33 -0
- package/public/demo.js +100 -0
- package/public/fonts/D2Coding-Ver1.4.0-20261003.ttf +0 -0
- package/public/fonts/Galmuri11-Bold.woff2 +0 -0
- package/public/fonts/Galmuri11.woff2 +0 -0
- package/public/fonts/Galmuri7.woff2 +0 -0
- package/public/fonts/Galmuri9.woff2 +0 -0
- package/public/fonts/LICENSE-D2Coding.txt +97 -0
- package/public/fonts/LICENSE-Galmuri.txt +93 -0
- package/public/index.html +97 -0
- package/public/scene.js +1079 -0
- package/public/style.css +314 -0
- package/scripts/fix-pty.js +25 -0
- package/server/agents.js +78 -0
- package/server/hook.js +47 -0
- package/server/index.js +430 -0
- package/server/sanitize.js +155 -0
- package/server/sessions.js +115 -0
- package/templates/agents/studio/animation-expert.md +29 -0
- package/templates/agents/studio/apple-designer.md +28 -0
- package/templates/agents/studio/branding-expert.md +29 -0
- package/templates/agents/studio/copywriter.md +28 -0
- package/templates/agents/studio/data-analyst.md +29 -0
- package/templates/agents/studio/marketer.md +28 -0
- package/templates/agents/studio/pr-lead.md +28 -0
- package/templates/agents/studio/product-designer.md +29 -0
- package/templates/agents/studio/sns-manager.md +28 -0
- package/templates/agents/studio/uiux-expert.md +31 -0
- package/templates/agents/studio/video-producer.md +29 -0
- package/templates/agents/yukjo/byeongjo.md +29 -0
- package/templates/agents/yukjo/gongjo.md +29 -0
- package/templates/agents/yukjo/hojo.md +29 -0
- package/templates/agents/yukjo/hyeongjo.md +29 -0
- package/templates/agents/yukjo/ijo.md +29 -0
- package/templates/agents/yukjo/yejo.md +29 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Everything you see on screen that is a name, word or color lives here. Edit freely; reload the page.",
|
|
3
|
+
"name": "어전 · eojeon",
|
|
4
|
+
"tagline": "Claude Code를 어전회의로. 교지를 내리면 AI 신하들이 일하고, 윤허를 청한다.",
|
|
5
|
+
"subtitle": "명령=교지 · 권한 승인=윤허 · 결과 보고=상소 · Claude Code 비공식 도구",
|
|
6
|
+
"palette": {
|
|
7
|
+
"paper": "#15171C",
|
|
8
|
+
"card": "#22252C",
|
|
9
|
+
"ink": "#EFE8DA",
|
|
10
|
+
"ink2": "#A8A090",
|
|
11
|
+
"hong": "#E8705F",
|
|
12
|
+
"cheong": "#6FAAD6",
|
|
13
|
+
"nok": "#74B48E",
|
|
14
|
+
"hwang": "#D9AE52",
|
|
15
|
+
"heuk": "#2B2F38",
|
|
16
|
+
"inju": "#F07A6A"
|
|
17
|
+
},
|
|
18
|
+
"pixel": {
|
|
19
|
+
"_comment": "Sprite fills (the concept's light-mode hexes read richer as pixel fills); outline is ink.",
|
|
20
|
+
"outline": "#1E1B17",
|
|
21
|
+
"hong": "#A8322A",
|
|
22
|
+
"cheong": "#1F5A82",
|
|
23
|
+
"nok": "#2F6B4A",
|
|
24
|
+
"hwang": "#B8862B",
|
|
25
|
+
"heuk": "#2B2F38",
|
|
26
|
+
"inju": "#C0392B",
|
|
27
|
+
"skin": "#E9C9A6",
|
|
28
|
+
"skinShade": "#C99E7A",
|
|
29
|
+
"stone": "#BDB6A8",
|
|
30
|
+
"stoneShade": "#A39C8E",
|
|
31
|
+
"paper": "#F3EDE1"
|
|
32
|
+
},
|
|
33
|
+
"robes": {
|
|
34
|
+
"_comment": "hong = 당상관(테두리 두 줄), cheong = 당하관(한 줄), nok = 7~9품·잡직(한 줄). 품계 숫자는 쓰지 않는다.",
|
|
35
|
+
"hong": {
|
|
36
|
+
"border": 2
|
|
37
|
+
},
|
|
38
|
+
"cheong": {
|
|
39
|
+
"border": 1
|
|
40
|
+
},
|
|
41
|
+
"nok": {
|
|
42
|
+
"border": 1
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"king": {
|
|
46
|
+
"_comment": "임금(사용자) 캐릭터. 특정 역사 인물을 닮지 않은 일반 임금. robe = hong | cheong | nok | hwang | heuk 또는 '#RRGGBB'",
|
|
47
|
+
"title": "임금",
|
|
48
|
+
"robe": "hong"
|
|
49
|
+
},
|
|
50
|
+
"officials": {
|
|
51
|
+
"_comment": "key = Claude Code agent_type (subagent_type). Plugin agents arrive as \"<plugin>:<name>\" (e.g. eojeon:ijo) and are matched by the part after the last colon. main = Claude itself. side: east(왼쪽: 기획·숫자·글) / west(오른쪽: 만들기·지키기). seat 0~5 = fixed desk; no seat = first free desk on that side, else the courtyard. emblem = 흉배 자리 직무 문양. pack: yukjo(기본 육조) / studio(선택 팩).",
|
|
52
|
+
"main": {
|
|
53
|
+
"title": "영의정",
|
|
54
|
+
"short": "영",
|
|
55
|
+
"role": "신하들 일을 나누고 모아 올린다",
|
|
56
|
+
"robe": "hong",
|
|
57
|
+
"emblem": "scrolls",
|
|
58
|
+
"side": "east",
|
|
59
|
+
"seat": 0
|
|
60
|
+
},
|
|
61
|
+
"ijo": {
|
|
62
|
+
"title": "이조판서",
|
|
63
|
+
"short": "이",
|
|
64
|
+
"role": "일을 쪼개고 순서와 담당을 정한다",
|
|
65
|
+
"robe": "hong",
|
|
66
|
+
"emblem": "steps",
|
|
67
|
+
"side": "east",
|
|
68
|
+
"seat": 1,
|
|
69
|
+
"pack": "yukjo"
|
|
70
|
+
},
|
|
71
|
+
"hojo": {
|
|
72
|
+
"title": "호조판서",
|
|
73
|
+
"short": "호",
|
|
74
|
+
"role": "성능·비용·숫자를 먼저 잰다",
|
|
75
|
+
"robe": "hong",
|
|
76
|
+
"emblem": "abacus",
|
|
77
|
+
"side": "east",
|
|
78
|
+
"seat": 2,
|
|
79
|
+
"pack": "yukjo"
|
|
80
|
+
},
|
|
81
|
+
"yejo": {
|
|
82
|
+
"title": "예조판서",
|
|
83
|
+
"short": "예",
|
|
84
|
+
"role": "문서·주석·커밋 메시지를 쓴다",
|
|
85
|
+
"robe": "hong",
|
|
86
|
+
"emblem": "brush",
|
|
87
|
+
"side": "east",
|
|
88
|
+
"seat": 3,
|
|
89
|
+
"pack": "yukjo"
|
|
90
|
+
},
|
|
91
|
+
"byeongjo": {
|
|
92
|
+
"title": "병조판서",
|
|
93
|
+
"short": "병",
|
|
94
|
+
"role": "취약점과 비밀 노출을 막는다",
|
|
95
|
+
"robe": "hong",
|
|
96
|
+
"emblem": "shield",
|
|
97
|
+
"side": "west",
|
|
98
|
+
"seat": 0,
|
|
99
|
+
"pack": "yukjo"
|
|
100
|
+
},
|
|
101
|
+
"hyeongjo": {
|
|
102
|
+
"title": "형조판서",
|
|
103
|
+
"short": "형",
|
|
104
|
+
"role": "코드를 심리하고 버그를 수사한다",
|
|
105
|
+
"robe": "hong",
|
|
106
|
+
"emblem": "lens",
|
|
107
|
+
"side": "west",
|
|
108
|
+
"seat": 1,
|
|
109
|
+
"pack": "yukjo"
|
|
110
|
+
},
|
|
111
|
+
"gongjo": {
|
|
112
|
+
"title": "공조판서",
|
|
113
|
+
"short": "공",
|
|
114
|
+
"role": "코드를 짓고 테스트를 통과시킨다",
|
|
115
|
+
"robe": "hong",
|
|
116
|
+
"emblem": "hammer",
|
|
117
|
+
"side": "west",
|
|
118
|
+
"seat": 2,
|
|
119
|
+
"pack": "yukjo"
|
|
120
|
+
},
|
|
121
|
+
"product-designer": {
|
|
122
|
+
"title": "홍문관 부제학",
|
|
123
|
+
"short": "홍",
|
|
124
|
+
"role": "무엇을 만들지 설계해 아뢴다",
|
|
125
|
+
"robe": "hong",
|
|
126
|
+
"emblem": "grid",
|
|
127
|
+
"side": "east",
|
|
128
|
+
"pack": "studio"
|
|
129
|
+
},
|
|
130
|
+
"data-analyst": {
|
|
131
|
+
"title": "산학 교수",
|
|
132
|
+
"short": "산",
|
|
133
|
+
"role": "숫자를 세고, 작은 숫자를 부풀리지 않는다",
|
|
134
|
+
"robe": "cheong",
|
|
135
|
+
"emblem": "abacus",
|
|
136
|
+
"side": "east",
|
|
137
|
+
"pack": "studio"
|
|
138
|
+
},
|
|
139
|
+
"pr-lead": {
|
|
140
|
+
"title": "예조 참판",
|
|
141
|
+
"short": "참",
|
|
142
|
+
"role": "바깥에 우리를 알린다",
|
|
143
|
+
"robe": "hong",
|
|
144
|
+
"emblem": "flag",
|
|
145
|
+
"side": "east",
|
|
146
|
+
"pack": "studio"
|
|
147
|
+
},
|
|
148
|
+
"copywriter": {
|
|
149
|
+
"title": "승정원 승지",
|
|
150
|
+
"short": "승",
|
|
151
|
+
"role": "올리는 글을 다듬는다",
|
|
152
|
+
"robe": "hong",
|
|
153
|
+
"emblem": "brush",
|
|
154
|
+
"side": "east",
|
|
155
|
+
"pack": "studio"
|
|
156
|
+
},
|
|
157
|
+
"branding-expert": {
|
|
158
|
+
"title": "상서원 정",
|
|
159
|
+
"short": "상",
|
|
160
|
+
"role": "도장과 상징을 지킨다",
|
|
161
|
+
"robe": "cheong",
|
|
162
|
+
"emblem": "seal",
|
|
163
|
+
"side": "east",
|
|
164
|
+
"pack": "studio"
|
|
165
|
+
},
|
|
166
|
+
"marketer": {
|
|
167
|
+
"title": "평시서 령",
|
|
168
|
+
"short": "평",
|
|
169
|
+
"role": "시장을 살피고 누구에게 팔지 정한다",
|
|
170
|
+
"robe": "cheong",
|
|
171
|
+
"emblem": "scale",
|
|
172
|
+
"side": "west",
|
|
173
|
+
"pack": "studio"
|
|
174
|
+
},
|
|
175
|
+
"sns-manager": {
|
|
176
|
+
"title": "찰방",
|
|
177
|
+
"short": "찰",
|
|
178
|
+
"role": "소식을 파발로 곳곳에 띄운다",
|
|
179
|
+
"robe": "cheong",
|
|
180
|
+
"emblem": "hoof",
|
|
181
|
+
"side": "west",
|
|
182
|
+
"pack": "studio"
|
|
183
|
+
},
|
|
184
|
+
"apple-designer": {
|
|
185
|
+
"title": "공조정랑",
|
|
186
|
+
"short": "랑",
|
|
187
|
+
"role": "애플 규격에 맞게 다듬는다",
|
|
188
|
+
"robe": "cheong",
|
|
189
|
+
"emblem": "square",
|
|
190
|
+
"side": "west",
|
|
191
|
+
"pack": "studio"
|
|
192
|
+
},
|
|
193
|
+
"uiux-expert": {
|
|
194
|
+
"title": "선공감 주부",
|
|
195
|
+
"short": "선",
|
|
196
|
+
"role": "화면 길을 짓고 고친다",
|
|
197
|
+
"robe": "cheong",
|
|
198
|
+
"emblem": "beam",
|
|
199
|
+
"side": "west",
|
|
200
|
+
"pack": "studio"
|
|
201
|
+
},
|
|
202
|
+
"animation-expert": {
|
|
203
|
+
"title": "장악원 악사",
|
|
204
|
+
"short": "장",
|
|
205
|
+
"role": "움직임의 박자를 맞춘다",
|
|
206
|
+
"robe": "nok",
|
|
207
|
+
"emblem": "drum",
|
|
208
|
+
"side": "west",
|
|
209
|
+
"pack": "studio"
|
|
210
|
+
},
|
|
211
|
+
"video-producer": {
|
|
212
|
+
"title": "도화서 화원",
|
|
213
|
+
"short": "도",
|
|
214
|
+
"role": "그림과 영상을 만든다",
|
|
215
|
+
"robe": "nok",
|
|
216
|
+
"emblem": "album",
|
|
217
|
+
"side": "west",
|
|
218
|
+
"pack": "studio"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"guests": {
|
|
222
|
+
"_comment": "Built-in / unknown agent types. They stand in the courtyard near the gate instead of a fixed desk.",
|
|
223
|
+
"general-purpose": {
|
|
224
|
+
"title": "별감",
|
|
225
|
+
"role": "무엇이든 맡아 하는 관원",
|
|
226
|
+
"robe": "nok"
|
|
227
|
+
},
|
|
228
|
+
"Explore": {
|
|
229
|
+
"title": "암행어사",
|
|
230
|
+
"role": "코드를 두루 살핀다",
|
|
231
|
+
"robe": "nok"
|
|
232
|
+
},
|
|
233
|
+
"Plan": {
|
|
234
|
+
"title": "비서관",
|
|
235
|
+
"role": "계획을 짠다",
|
|
236
|
+
"robe": "nok"
|
|
237
|
+
},
|
|
238
|
+
"claude-code-guide": {
|
|
239
|
+
"title": "규장각 검서관",
|
|
240
|
+
"role": "사용법을 찾아 아뢴다",
|
|
241
|
+
"robe": "nok"
|
|
242
|
+
},
|
|
243
|
+
"*": {
|
|
244
|
+
"title": "관리",
|
|
245
|
+
"role": "맡은 일을 한다",
|
|
246
|
+
"robe": "nok"
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"historian": {
|
|
250
|
+
"title": "사관",
|
|
251
|
+
"robe": "nok"
|
|
252
|
+
},
|
|
253
|
+
"stamps": {
|
|
254
|
+
"ok": {
|
|
255
|
+
"label": "윤허",
|
|
256
|
+
"full": "윤허하노라",
|
|
257
|
+
"shape": "circle",
|
|
258
|
+
"mark": "○",
|
|
259
|
+
"color": "inju"
|
|
260
|
+
},
|
|
261
|
+
"no": {
|
|
262
|
+
"label": "불허",
|
|
263
|
+
"full": "불허한다",
|
|
264
|
+
"shape": "square",
|
|
265
|
+
"mark": "×",
|
|
266
|
+
"color": "inju"
|
|
267
|
+
},
|
|
268
|
+
"hold": {
|
|
269
|
+
"label": "보류",
|
|
270
|
+
"full": "보류",
|
|
271
|
+
"shape": "dotted",
|
|
272
|
+
"mark": "…",
|
|
273
|
+
"color": "ink2"
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"permissionKeys": {
|
|
277
|
+
"_comment": "Keys sent to the terminal when a stamp button is pressed on a permission prompt. Claude Code's dialog: 1 = Yes, Esc = No (tell Claude what to do). hold sends nothing and focuses the terminal.",
|
|
278
|
+
"ok": "1",
|
|
279
|
+
"no": "\u001b",
|
|
280
|
+
"hold": ""
|
|
281
|
+
},
|
|
282
|
+
"phrases": {
|
|
283
|
+
"_comment": "사극 말투는 맨 앞 한 마디나 끝맺음 하나만, 정보는 지금 말로. {x} 는 자리표시자. 용어: 명령=교지, 권한 승인=윤허, 결과 보고=상소.",
|
|
284
|
+
"sessionStart": "조회를 엽니다 · {folder}",
|
|
285
|
+
"sessionResume": "지난 조회를 이어 갑니다 · {folder}",
|
|
286
|
+
"decree": "교지를 반포하였사옵니다",
|
|
287
|
+
"decreeSlash": "명({prompt})을 내리셨사옵니다",
|
|
288
|
+
"working": "{tool}: {summary}",
|
|
289
|
+
"workingSuffix": "중이옵니다",
|
|
290
|
+
"failed": "{tool} 못 했사옵니다",
|
|
291
|
+
"denied": "{tool} 불허되었사옵니다",
|
|
292
|
+
"enter": "{title} 입궐하였사옵니다",
|
|
293
|
+
"report": "영의정께 올림: {report}",
|
|
294
|
+
"reportEmpty": "영의정께 올림: 맡은 일 마쳤사옵니다",
|
|
295
|
+
"petition": "아뢰옵니다 — {tool}: {summary}",
|
|
296
|
+
"permission": "윤허를 청하옵니다",
|
|
297
|
+
"permissionHint": "도장을 찍으면 터미널 권한 창에 그대로 전해집니다. 다른 선택지는 터미널에서 고르세요.",
|
|
298
|
+
"waiting": "분부를 기다리는 중 · {elapsed}",
|
|
299
|
+
"idle": "분부를 기다리옵니다",
|
|
300
|
+
"stop": "상소 완료",
|
|
301
|
+
"stopLine": "아뢰옵니다 — 오늘 맡기신 일 마쳤사옵니다",
|
|
302
|
+
"sessionEnd": "퇴청하옵니다",
|
|
303
|
+
"standby": "{title} · 대기"
|
|
304
|
+
},
|
|
305
|
+
"scenes": {
|
|
306
|
+
"_comment": "concept.md 3절 장면 8종 → 이 도구의 이벤트",
|
|
307
|
+
"대기": "Notification(idle_prompt) / 이벤트 없음",
|
|
308
|
+
"작업 중": "PreToolUse",
|
|
309
|
+
"보고(내부)": "SubagentStop → 영의정 자리로",
|
|
310
|
+
"상소": "PermissionRequest / Notification(permission_prompt) → 어좌 앞",
|
|
311
|
+
"판정": "윤허·불허·보류 도장 버튼",
|
|
312
|
+
"판정 대기": "권한 창이 열린 채 시간 경과",
|
|
313
|
+
"하루 끝(퇴청)": "SessionEnd",
|
|
314
|
+
"실패 보고": "PostToolUseFailure → 먹물 얼룩"
|
|
315
|
+
}
|
|
316
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eojeon-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Claude Code as a Joseon royal court: issue a decree, AI officials (subagents) work, and ask for your royal assent. Pixel-art throne hall around your real Claude Code CLI. Unofficial. · Claude Code를 어전회의로 — 교지를 내리면 AI 신하들이 일하고 윤허를 청한다. 비공식 도구.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude-code",
|
|
7
|
+
"claude",
|
|
8
|
+
"subagents",
|
|
9
|
+
"agents",
|
|
10
|
+
"hooks",
|
|
11
|
+
"terminal",
|
|
12
|
+
"pixel-art",
|
|
13
|
+
"visualization",
|
|
14
|
+
"korean",
|
|
15
|
+
"joseon"
|
|
16
|
+
],
|
|
17
|
+
"homepage": "https://github.com/hiio420pr/eojeon",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/hiio420pr/eojeon/issues"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/hiio420pr/eojeon.git"
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "server/index.js",
|
|
28
|
+
"bin": {
|
|
29
|
+
"eojeon": "cli/eojeon.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"cli/",
|
|
33
|
+
"server/",
|
|
34
|
+
"public/",
|
|
35
|
+
"templates/",
|
|
36
|
+
"scripts/fix-pty.js",
|
|
37
|
+
"court.config.json",
|
|
38
|
+
"CHANGELOG.md"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"start": "node cli/eojeon.js",
|
|
42
|
+
"demo": "node cli/eojeon.js demo",
|
|
43
|
+
"test": "node --test",
|
|
44
|
+
"check": "node --check cli/eojeon.js && node --check server/index.js && node --check server/hook.js && node --check server/sessions.js && node --check server/sanitize.js && node --check server/agents.js",
|
|
45
|
+
"check-publish": "node scripts/check-publish.js",
|
|
46
|
+
"prepublishOnly": "npm test && node scripts/check-publish.js",
|
|
47
|
+
"postinstall": "node scripts/fix-pty.js",
|
|
48
|
+
"fake-hooks": "node scripts/fake-hooks.js"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@xterm/addon-fit": "0.11.0",
|
|
55
|
+
"@xterm/xterm": "6.0.0",
|
|
56
|
+
"ws": "8.22.0"
|
|
57
|
+
},
|
|
58
|
+
"optionalDependencies": {
|
|
59
|
+
"@homebridge/node-pty-prebuilt-multiarch": "0.14.1",
|
|
60
|
+
"node-pty": "1.1.0"
|
|
61
|
+
}
|
|
62
|
+
}
|