oh-my-codex-cli 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.
Files changed (292) hide show
  1. package/.agent/skills/agent-kb/HOW_TO_USE.md +428 -0
  2. package/.agent/skills/agent-kb/README.md +46 -0
  3. package/.agent/skills/agent-kb/SKILL.md +128 -0
  4. package/.agent/skills/agent-kb/references/intelligent-analysis-explained.md +333 -0
  5. package/.agent/skills/agent-kb/references/query-optimization.md +225 -0
  6. package/.agent/skills/aireview/SKILL.md +704 -0
  7. package/.agent/skills/analyze/SKILL.md +81 -0
  8. package/.agent/skills/architect-planner/HOW_TO_USE.md +238 -0
  9. package/.agent/skills/architect-planner/README.md +41 -0
  10. package/.agent/skills/architect-planner/SKILL.md +539 -0
  11. package/.agent/skills/auto-mbti/SKILL.md +291 -0
  12. package/.agent/skills/autopilot/SKILL.md +222 -0
  13. package/.agent/skills/backend-patterns/SKILL.md +602 -0
  14. package/.agent/skills/bdd-generator/README.md +78 -0
  15. package/.agent/skills/bdd-generator/SKILL.md +436 -0
  16. package/.agent/skills/brainstorming/HOW_TO_USE.md +289 -0
  17. package/.agent/skills/brainstorming/README.md +41 -0
  18. package/.agent/skills/brainstorming/SKILL.md +165 -0
  19. package/.agent/skills/build-fix/SKILL.md +190 -0
  20. package/.agent/skills/cancel/SKILL.md +658 -0
  21. package/.agent/skills/checkpoint/SKILL.md +94 -0
  22. package/.agent/skills/code-review/SKILL.md +273 -0
  23. package/.agent/skills/coding-standards/SKILL.md +535 -0
  24. package/.agent/skills/conductor/SKILL.md +128 -0
  25. package/.agent/skills/conductor/commands/conductor/implement.toml +358 -0
  26. package/.agent/skills/conductor/commands/conductor/newTrack.toml +142 -0
  27. package/.agent/skills/conductor/commands/conductor/revert.toml +123 -0
  28. package/.agent/skills/conductor/commands/conductor/setup.toml +429 -0
  29. package/.agent/skills/conductor/commands/conductor/status.toml +57 -0
  30. package/.agent/skills/conductor/scripts/install.sh +89 -0
  31. package/.agent/skills/conductor/templates/code_styleguides/csharp.md +115 -0
  32. package/.agent/skills/conductor/templates/code_styleguides/dart.md +238 -0
  33. package/.agent/skills/conductor/templates/code_styleguides/general.md +23 -0
  34. package/.agent/skills/conductor/templates/code_styleguides/go.md +48 -0
  35. package/.agent/skills/conductor/templates/code_styleguides/html-css.md +49 -0
  36. package/.agent/skills/conductor/templates/code_styleguides/javascript.md +51 -0
  37. package/.agent/skills/conductor/templates/code_styleguides/python.md +37 -0
  38. package/.agent/skills/conductor/templates/code_styleguides/typescript.md +43 -0
  39. package/.agent/skills/conductor/templates/rules/README.md +23 -0
  40. package/.agent/skills/conductor/templates/rules/agents.md +49 -0
  41. package/.agent/skills/conductor/templates/rules/coding-style.md +70 -0
  42. package/.agent/skills/conductor/templates/rules/dev.md +20 -0
  43. package/.agent/skills/conductor/templates/rules/git-workflow.md +45 -0
  44. package/.agent/skills/conductor/templates/rules/hooks.md +6 -0
  45. package/.agent/skills/conductor/templates/rules/patterns.md +55 -0
  46. package/.agent/skills/conductor/templates/rules/performance.md +47 -0
  47. package/.agent/skills/conductor/templates/rules/research.md +26 -0
  48. package/.agent/skills/conductor/templates/rules/review.md +22 -0
  49. package/.agent/skills/conductor/templates/rules/security.md +36 -0
  50. package/.agent/skills/conductor/templates/rules/testing.md +30 -0
  51. package/.agent/skills/conductor/templates/workflow.md +333 -0
  52. package/.agent/skills/consensus/HOW_TO_USE.md +191 -0
  53. package/.agent/skills/consensus/README.md +41 -0
  54. package/.agent/skills/consensus/SKILL.md +317 -0
  55. package/.agent/skills/content-research-writer/SKILL.md +537 -0
  56. package/.agent/skills/debug-analysis/SKILL.md +331 -0
  57. package/.agent/skills/deepinit/SKILL.md +347 -0
  58. package/.agent/skills/deepsearch/SKILL.md +56 -0
  59. package/.agent/skills/doctor/SKILL.md +158 -0
  60. package/.agent/skills/drawio/EXAMPLES.md +382 -0
  61. package/.agent/skills/drawio/QUICK_START.md +237 -0
  62. package/.agent/skills/drawio/README.md +315 -0
  63. package/.agent/skills/drawio/SETUP_GUIDE.md +254 -0
  64. package/.agent/skills/drawio/SKILL.md +1176 -0
  65. package/.agent/skills/e2e/SKILL.md +396 -0
  66. package/.agent/skills/ecomode/SKILL.md +160 -0
  67. package/.agent/skills/electron-driver/SKILL.md +144 -0
  68. package/.agent/skills/electron-driver/scripts/driver-template.js +71 -0
  69. package/.agent/skills/eval/SKILL.md +140 -0
  70. package/.agent/skills/eval-harness/SKILL.md +242 -0
  71. package/.agent/skills/evolve/SKILL.md +213 -0
  72. package/.agent/skills/frontend-design/SKILL.md +42 -0
  73. package/.agent/skills/frontend-patterns/SKILL.md +646 -0
  74. package/.agent/skills/frontend-ui-ux/SKILL.md +70 -0
  75. package/.agent/skills/git-master/SKILL.md +75 -0
  76. package/.agent/skills/help/SKILL.md +89 -0
  77. package/.agent/skills/iterative-retrieval/SKILL.md +217 -0
  78. package/.agent/skills/local-skills-setup/SKILL.md +483 -0
  79. package/.agent/skills/log-analyzer/SKILL.md +187 -0
  80. package/.agent/skills/mcp-setup/SKILL.md +226 -0
  81. package/.agent/skills/multi-model-research/HOW_TO_USE.md +614 -0
  82. package/.agent/skills/multi-model-research/README.md +233 -0
  83. package/.agent/skills/multi-model-research/SKILL.md +541 -0
  84. package/.agent/skills/multi-model-research/references/troubleshooting.md +415 -0
  85. package/.agent/skills/note/SKILL.md +80 -0
  86. package/.agent/skills/omc-setup/SKILL.md +219 -0
  87. package/.agent/skills/orchestrate/SKILL.md +620 -0
  88. package/.agent/skills/patent-workflow/IMPLEMENTATION_SUMMARY.md +500 -0
  89. package/.agent/skills/patent-workflow/README.md +455 -0
  90. package/.agent/skills/patent-workflow/SKILL.md +1036 -0
  91. package/.agent/skills/patent-workflow/tools/irr_checker.py +260 -0
  92. package/.agent/skills/patent-workflow/tools/sample_terminology.json +49 -0
  93. package/.agent/skills/patent-workflow/tools/term_checker.py +355 -0
  94. package/.agent/skills/pattern-recognition/SKILL.md +792 -0
  95. package/.agent/skills/pipeline/SKILL.md +448 -0
  96. package/.agent/skills/plan/SKILL.md +309 -0
  97. package/.agent/skills/planning-methodology/SKILL.md +370 -0
  98. package/.agent/skills/planning-with-files/SKILL.md +210 -0
  99. package/.agent/skills/planning-with-files/examples.md +202 -0
  100. package/.agent/skills/planning-with-files/reference.md +218 -0
  101. package/.agent/skills/planning-with-files/scripts/check-complete.ps1 +42 -0
  102. package/.agent/skills/planning-with-files/scripts/check-complete.sh +44 -0
  103. package/.agent/skills/planning-with-files/scripts/init-session.ps1 +120 -0
  104. package/.agent/skills/planning-with-files/scripts/init-session.sh +120 -0
  105. package/.agent/skills/planning-with-files/scripts/session-catchup.py +208 -0
  106. package/.agent/skills/planning-with-files/templates/findings.md +95 -0
  107. package/.agent/skills/planning-with-files/templates/progress.md +114 -0
  108. package/.agent/skills/planning-with-files/templates/task_plan.md +132 -0
  109. package/.agent/skills/project-analyze/CLAUDE.md +18 -0
  110. package/.agent/skills/project-analyze/HOW_TO_USE.md +145 -0
  111. package/.agent/skills/project-analyze/README.md +42 -0
  112. package/.agent/skills/project-analyze/SKILL.md +289 -0
  113. package/.agent/skills/project-analyze/SKILL.md.backup +287 -0
  114. package/.agent/skills/project-analyze/SKILL.md.backup_20260105_093646 +287 -0
  115. package/.agent/skills/project-analyze/assets/analysis-report-template.md +433 -0
  116. package/.agent/skills/project-analyze/references/analysis-patterns.md +422 -0
  117. package/.agent/skills/project-analyze/references/projectmind-explained.md +535 -0
  118. package/.agent/skills/project-session-manager/SKILL.md +428 -0
  119. package/.agent/skills/project-session-manager/lib/config.sh +86 -0
  120. package/.agent/skills/project-session-manager/lib/parse.sh +121 -0
  121. package/.agent/skills/project-session-manager/lib/session.sh +132 -0
  122. package/.agent/skills/project-session-manager/lib/tmux.sh +103 -0
  123. package/.agent/skills/project-session-manager/lib/worktree.sh +171 -0
  124. package/.agent/skills/project-session-manager/psm.sh +629 -0
  125. package/.agent/skills/project-session-manager/templates/feature.md +56 -0
  126. package/.agent/skills/project-session-manager/templates/issue-fix.md +57 -0
  127. package/.agent/skills/project-session-manager/templates/pr-review.md +65 -0
  128. package/.agent/skills/project-session-manager/templates/projects.json +19 -0
  129. package/.agent/skills/quality-check/HOW_TO_USE.md +171 -0
  130. package/.agent/skills/quality-check/README.md +50 -0
  131. package/.agent/skills/quality-check/SKILL.md +240 -0
  132. package/.agent/skills/quality-check/SKILL.md.backup +238 -0
  133. package/.agent/skills/quality-check/SKILL.md.backup_20260105_093646 +238 -0
  134. package/.agent/skills/quality-check/assets/quality-report-template.md +437 -0
  135. package/.agent/skills/quality-check/references/refactoring-patterns.md +550 -0
  136. package/.agent/skills/quality-check/references/scoring-criteria.md +454 -0
  137. package/.agent/skills/quality-validation/SKILL.md +519 -0
  138. package/.agent/skills/quality-validation/SKILL.md.backup +573 -0
  139. package/.agent/skills/quality-validation/SKILL.md.backup_20260105_093646 +573 -0
  140. package/.agent/skills/ralph/SKILL.md +236 -0
  141. package/.agent/skills/ralph-init/SKILL.md +78 -0
  142. package/.agent/skills/ralplan/SKILL.md +58 -0
  143. package/.agent/skills/refactor-clean/SKILL.md +49 -0
  144. package/.agent/skills/release/SKILL.md +84 -0
  145. package/.agent/skills/research/SKILL.md +526 -0
  146. package/.agent/skills/research-methodology/SKILL.md +268 -0
  147. package/.agent/skills/review/SKILL.md +53 -0
  148. package/.agent/skills/security-review/SKILL.md +509 -0
  149. package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -0
  150. package/.agent/skills/setup-pm/SKILL.md +102 -0
  151. package/.agent/skills/skill/SKILL.md +424 -0
  152. package/.agent/skills/skill-create/SKILL.md +209 -0
  153. package/.agent/skills/skill-debugger/HOW_TO_USE.md +244 -0
  154. package/.agent/skills/skill-debugger/README.md +44 -0
  155. package/.agent/skills/skill-debugger/SKILL.md +326 -0
  156. package/.agent/skills/skill-debugger/diagnostic_checklist.md +115 -0
  157. package/.agent/skills/skill-development/SKILL.md +661 -0
  158. package/.agent/skills/skill-development/references/skill-creator-original.md +209 -0
  159. package/.agent/skills/skill-doc-generator/README.md +37 -0
  160. package/.agent/skills/skill-doc-generator/SKILL.md +331 -0
  161. package/.agent/skills/skill-quality-analyzer/HOW_TO_USE.md +243 -0
  162. package/.agent/skills/skill-quality-analyzer/README.md +61 -0
  163. package/.agent/skills/skill-quality-analyzer/SKILL.md +247 -0
  164. package/.agent/skills/skill-quality-analyzer/analyzer.py +209 -0
  165. package/.agent/skills/skill-quality-analyzer/expected_output.json +81 -0
  166. package/.agent/skills/skill-quality-analyzer/sample_input.json +9 -0
  167. package/.agent/skills/skill-tester/README.md +46 -0
  168. package/.agent/skills/skill-tester/SKILL.md +345 -0
  169. package/.agent/skills/start-dev/SKILL.md +701 -0
  170. package/.agent/skills/swarm/SKILL.md +691 -0
  171. package/.agent/skills/task-kb-lookup/SKILL.md +211 -0
  172. package/.agent/skills/task-kb-record/SKILL.md +417 -0
  173. package/.agent/skills/tdd/SKILL.md +446 -0
  174. package/.agent/skills/tdd-generator/DEMO.md +516 -0
  175. package/.agent/skills/tdd-generator/README.md +89 -0
  176. package/.agent/skills/tdd-generator/SKILL.md +278 -0
  177. package/.agent/skills/tdd-workflow/SKILL.md +424 -0
  178. package/.agent/skills/test-coverage/SKILL.md +48 -0
  179. package/.agent/skills/thinkdeep/HOW_TO_USE.md +183 -0
  180. package/.agent/skills/thinkdeep/README.md +41 -0
  181. package/.agent/skills/thinkdeep/SKILL.md +343 -0
  182. package/.agent/skills/ui-ux-pro-max/SKILL.md +228 -0
  183. package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
  184. package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
  185. package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
  186. package/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
  187. package/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  188. package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  189. package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  190. package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  191. package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  192. package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  193. package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  194. package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  195. package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  196. package/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
  197. package/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
  198. package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  199. package/.agent/skills/ui-ux-pro-max/scripts/core.py +236 -0
  200. package/.agent/skills/ui-ux-pro-max/scripts/search.py +61 -0
  201. package/.agent/skills/ultrapilot/SKILL.md +647 -0
  202. package/.agent/skills/ultraqa/SKILL.md +152 -0
  203. package/.agent/skills/ultrawork/SKILL.md +123 -0
  204. package/.agent/skills/update-codemaps/SKILL.md +38 -0
  205. package/.agent/skills/update-docs/SKILL.md +52 -0
  206. package/.agent/skills/verification-loop/SKILL.md +140 -0
  207. package/.agent/skills/verify/SKILL.md +80 -0
  208. package/.agent/skills/writer-memory/SKILL.md +459 -0
  209. package/.agent/skills/writer-memory/lib/character-tracker.ts +338 -0
  210. package/.agent/skills/writer-memory/lib/memory-manager.ts +804 -0
  211. package/.agent/skills/writer-memory/lib/relationship-graph.ts +400 -0
  212. package/.agent/skills/writer-memory/lib/scene-organizer.ts +544 -0
  213. package/.agent/skills/writer-memory/lib/synopsis-builder.ts +339 -0
  214. package/.agent/skills/writer-memory/templates/synopsis-template.md +46 -0
  215. package/.governance/skill-lint.allowlist +4 -0
  216. package/.governance/skill-llm.allowlist +4 -0
  217. package/AGENTS.md +59 -0
  218. package/LICENSE +21 -0
  219. package/README.md +169 -0
  220. package/README.zh.md +145 -0
  221. package/bin/omcodex.js +8 -0
  222. package/commands/conductor/implement.toml +358 -0
  223. package/commands/conductor/newTrack.toml +142 -0
  224. package/commands/conductor/revert.toml +123 -0
  225. package/commands/conductor/setup.toml +429 -0
  226. package/commands/conductor/status.toml +57 -0
  227. package/docs/ALIGNMENT.md +40 -0
  228. package/docs/CODEX.md +133 -0
  229. package/docs/NOTIFY.md +81 -0
  230. package/docs/SKILL_GOVERNANCE.md +72 -0
  231. package/docs/SKILL_GOVERNANCE_FRAMEWORK.md +182 -0
  232. package/docs/SKILL_GOVERNANCE_FRAMEWORK.zh.md +170 -0
  233. package/package.json +50 -0
  234. package/prompts/architect.md +105 -0
  235. package/prompts/executor.md +134 -0
  236. package/prompts/planner.md +113 -0
  237. package/scripts/check-skill-governance.sh +84 -0
  238. package/scripts/check-skill-llm-governance.js +302 -0
  239. package/scripts/eval-skills.js +217 -0
  240. package/scripts/generate-catalog-docs.js +95 -0
  241. package/scripts/generate-codex-mcp-config.sh +22 -0
  242. package/scripts/install-codex-force.sh +5 -0
  243. package/scripts/install-codex-incremental.sh +5 -0
  244. package/scripts/install-codex.sh +79 -0
  245. package/scripts/notify-dispatch.js +15 -0
  246. package/scripts/setup-package-manager.js +137 -0
  247. package/src/catalog/generated/public-catalog.json +547 -0
  248. package/src/catalog/manifest.json +542 -0
  249. package/src/catalog/reader.js +43 -0
  250. package/src/catalog/schema.js +79 -0
  251. package/src/cli/doctor.js +62 -0
  252. package/src/cli/index.js +85 -0
  253. package/src/cli/notify.js +127 -0
  254. package/src/cli/route.js +43 -0
  255. package/src/cli/setup.js +155 -0
  256. package/src/cli/team.js +125 -0
  257. package/src/config/generator.js +119 -0
  258. package/src/mcp/memory-server.js +241 -0
  259. package/src/mcp/state-server.js +112 -0
  260. package/src/mcp/trace-server.js +168 -0
  261. package/src/notify/dispatch.js +74 -0
  262. package/src/notify/extensibility/dispatcher.js +113 -0
  263. package/src/notify/extensibility/events.js +15 -0
  264. package/src/notify/extensibility/loader.js +54 -0
  265. package/src/router/skill-router.js +90 -0
  266. package/src/team/auto-advance.js +72 -0
  267. package/src/team/orchestrator.js +82 -0
  268. package/src/team/state-store.js +33 -0
  269. package/src/utils/paths.js +33 -0
  270. package/templates/AGENTS.md +15 -0
  271. package/templates/catalog-manifest.json +542 -0
  272. package/templates/code_styleguides/csharp.md +115 -0
  273. package/templates/code_styleguides/dart.md +238 -0
  274. package/templates/code_styleguides/general.md +23 -0
  275. package/templates/code_styleguides/go.md +48 -0
  276. package/templates/code_styleguides/html-css.md +49 -0
  277. package/templates/code_styleguides/javascript.md +51 -0
  278. package/templates/code_styleguides/python.md +37 -0
  279. package/templates/code_styleguides/typescript.md +43 -0
  280. package/templates/rules/README.md +23 -0
  281. package/templates/rules/agents.md +49 -0
  282. package/templates/rules/coding-style.md +70 -0
  283. package/templates/rules/dev.md +20 -0
  284. package/templates/rules/git-workflow.md +45 -0
  285. package/templates/rules/notify.md +6 -0
  286. package/templates/rules/patterns.md +55 -0
  287. package/templates/rules/performance.md +47 -0
  288. package/templates/rules/research.md +26 -0
  289. package/templates/rules/review.md +22 -0
  290. package/templates/rules/security.md +36 -0
  291. package/templates/rules/testing.md +30 -0
  292. package/templates/workflow.md +333 -0
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Synopsis Builder - 정서 중심 시놉시스 생성기
3
+ *
4
+ * Korean writers think: emotion → relationship → event → plot
5
+ * NOT plot-first!
6
+ */
7
+
8
+ import { loadMemory, saveMemory, now } from './memory-manager';
9
+ import type { WriterMemory, Character, Relationship, Scene, SynopsisState } from './memory-manager';
10
+
11
+ // === Synopsis Generation ===
12
+
13
+ export function generateSynopsis(options?: {
14
+ protagonist?: string;
15
+ format?: 'full' | 'brief' | 'pitch';
16
+ }): string | null {
17
+ const memory = loadMemory();
18
+ if (!memory) return null;
19
+
20
+ const format = options?.format || 'full';
21
+ const protagonist = options?.protagonist;
22
+
23
+ const attitude = extractProtagonistAttitude(memory, protagonist);
24
+ const relationships = extractCoreRelationships(memory, protagonist);
25
+ const theme = extractEmotionalTheme(memory);
26
+ const genreContrast = extractGenreVsEmotion(memory);
27
+ const aftertaste = extractEndingAftertaste(memory);
28
+
29
+ switch (format) {
30
+ case 'brief':
31
+ return formatBriefSynopsis(attitude, relationships, theme, memory);
32
+ case 'pitch':
33
+ return formatPitchSynopsis(attitude, relationships, theme, genreContrast, memory);
34
+ default:
35
+ return formatFullSynopsis(attitude, relationships, theme, genreContrast, aftertaste, memory);
36
+ }
37
+ }
38
+
39
+ // === 5 Essential Element Extractors ===
40
+
41
+ function findProtagonist(memory: WriterMemory, name?: string): Character | null {
42
+ const chars = Object.values(memory.characters);
43
+ if (name) {
44
+ return chars.find(c => c.name === name || c.aliases?.includes(name)) || null;
45
+ }
46
+ return chars[0] || null;
47
+ }
48
+
49
+ export function extractProtagonistAttitude(memory: WriterMemory, protagonistName?: string): string {
50
+ const protagonist = findProtagonist(memory, protagonistName);
51
+
52
+ if (!protagonist) {
53
+ return '⚠️ 주인공 정보 없음. 캐릭터를 먼저 등록하세요.';
54
+ }
55
+
56
+ const parts: string[] = [];
57
+ if (protagonist.arc) parts.push(protagonist.arc);
58
+ if (protagonist.attitude) parts.push(protagonist.attitude);
59
+
60
+ if (parts.length === 0) {
61
+ return `⚠️ ${protagonist.name}의 태도 정보 미입력. arc와 attitude 필드를 채우세요.`;
62
+ }
63
+
64
+ return parts.join('. ');
65
+ }
66
+
67
+ export function extractCoreRelationships(memory: WriterMemory, protagonistName?: string): string {
68
+ const protagonist = findProtagonist(memory, protagonistName);
69
+
70
+ if (!protagonist) {
71
+ return '⚠️ 주인공 정보 없음.';
72
+ }
73
+
74
+ const rels = memory.relationships.filter(
75
+ r => r.from === protagonist.name || r.to === protagonist.name
76
+ );
77
+
78
+ if (rels.length === 0) {
79
+ return `⚠️ ${protagonist.name} 중심의 관계 정보 없음. 관계를 등록하세요.`;
80
+ }
81
+
82
+ return rels.map(r => {
83
+ const other = r.from === protagonist.name ? r.to : r.from;
84
+ return `${protagonist.name}-${other}: ${r.dynamic || r.type}`;
85
+ }).join('\n');
86
+ }
87
+
88
+ export function extractEmotionalTheme(memory: WriterMemory): string {
89
+ if (memory.themes.length === 0) {
90
+ return '⚠️ 테마 정보 없음. 작품의 정서적 주제를 입력하세요.';
91
+ }
92
+
93
+ return memory.themes.map(t => t.description || t.name).join('. ');
94
+ }
95
+
96
+ export function extractGenreVsEmotion(memory: WriterMemory): string {
97
+ const synopsis = memory.synopsis;
98
+ if (synopsis?.genreVsRealEmotion) {
99
+ return synopsis.genreVsRealEmotion;
100
+ }
101
+
102
+ const genre = memory.project.genre || '미지정';
103
+ return `장르: ${genre}. 실제 정서: 미정의. genreVsRealEmotion 필드를 입력하세요.`;
104
+ }
105
+
106
+ export function extractEndingAftertaste(memory: WriterMemory): string {
107
+ const synopsis = memory.synopsis;
108
+ if (synopsis?.endingAftertaste) {
109
+ return synopsis.endingAftertaste;
110
+ }
111
+
112
+ return '❌ 엔딩 정서 잔상 미입력. synopsis update endingAftertaste "..." 로 추가하세요.';
113
+ }
114
+
115
+ // === Synopsis State Management ===
116
+
117
+ export function saveSynopsisState(state: SynopsisState): boolean {
118
+ const memory = loadMemory();
119
+ if (!memory) return false;
120
+
121
+ memory.synopsis = { ...state, lastGenerated: now() };
122
+ return saveMemory(memory);
123
+ }
124
+
125
+ export function loadSynopsisState(): SynopsisState | null {
126
+ const memory = loadMemory();
127
+ return memory?.synopsis || null;
128
+ }
129
+
130
+ export function updateSynopsisElement(element: keyof SynopsisState, value: string): boolean {
131
+ const memory = loadMemory();
132
+ if (!memory) return false;
133
+
134
+ memory.synopsis = memory.synopsis || {
135
+ protagonistAttitude: '',
136
+ coreRelationships: '',
137
+ emotionalTheme: '',
138
+ genreVsRealEmotion: '',
139
+ endingAftertaste: ''
140
+ };
141
+
142
+ (memory.synopsis as any)[element] = value;
143
+ memory.synopsis.lastGenerated = now();
144
+ return saveMemory(memory);
145
+ }
146
+
147
+ // === Format Functions ===
148
+
149
+ export function formatFullSynopsis(
150
+ attitude: string,
151
+ relationships: string,
152
+ theme: string,
153
+ genreContrast: string,
154
+ aftertaste: string,
155
+ memory: WriterMemory
156
+ ): string {
157
+ const projectName = memory.project.name || '제목 미정';
158
+ const chars = Object.values(memory.characters);
159
+ const charList = chars.map(c => `- **${c.name}**: ${c.attitude || c.arc || '설명 없음'}`).join('\n');
160
+ const emotionFlow = memory.scenes
161
+ .filter(s => s.emotionTags?.length > 0)
162
+ .map(s => s.emotionTags[0])
163
+ .join(' → ') || '아직 정의되지 않음';
164
+
165
+ return `═══════════════════════════════
166
+ 시놉시스: ${projectName}
167
+ ═══════════════════════════════
168
+
169
+ ## 1. 주인공의 태도
170
+ ${attitude}
171
+
172
+ ## 2. 관계의 핵심 구도
173
+ ${relationships}
174
+
175
+ ## 3. 정서적 테마
176
+ ${theme}
177
+
178
+ ## 4. 장르와 실제 감정의 거리
179
+ ${genreContrast}
180
+
181
+ ## 5. 엔딩이 남기는 잔상
182
+ ${aftertaste}
183
+
184
+ ---
185
+ **등장인물**:
186
+ ${charList || '(등장인물 없음)'}
187
+
188
+ **장면 수**: ${memory.scenes.length}개
189
+
190
+ **감정 흐름**: ${emotionFlow}
191
+ `;
192
+ }
193
+
194
+ export function formatBriefSynopsis(
195
+ attitude: string,
196
+ relationships: string,
197
+ theme: string,
198
+ memory: WriterMemory
199
+ ): string {
200
+ const chars = Object.values(memory.characters);
201
+ const protagonist = chars[0];
202
+ const name = protagonist?.name || '주인공';
203
+
204
+ return `${name}은 ${attitude.split('.')[0]}. ${theme.split('.')[0]}을 통해 ${relationships.split('\n')[0] || '관계를 형성하며'} 변화한다.`;
205
+ }
206
+
207
+ export function formatPitchSynopsis(
208
+ attitude: string,
209
+ relationships: string,
210
+ theme: string,
211
+ genreContrast: string,
212
+ memory: WriterMemory
213
+ ): string {
214
+ const projectName = memory.project.name || '이 이야기';
215
+ const chars = Object.values(memory.characters);
216
+ const protagonist = chars[0];
217
+ const name = protagonist?.name || '주인공';
218
+
219
+ return `${projectName}는 ${attitude.split('.')[0]} ${name}이 ${theme.split('.')[0]}을 깨닫는 이야기. ${genreContrast.split('.')[0]}.`;
220
+ }
221
+
222
+ // === Checklist ===
223
+
224
+ export interface ChecklistItem {
225
+ element: string;
226
+ elementKr: string;
227
+ status: 'complete' | 'partial' | 'missing';
228
+ source: string;
229
+ suggestion: string;
230
+ }
231
+
232
+ export function getSynopsisChecklist(memory: WriterMemory): ChecklistItem[] {
233
+ const chars = Object.values(memory.characters);
234
+ const protagonist = chars[0];
235
+
236
+ const checklist: ChecklistItem[] = [];
237
+
238
+ // 1. Protagonist Attitude
239
+ const hasArc = protagonist?.arc ? true : false;
240
+ const hasAttitude = protagonist?.attitude ? true : false;
241
+ checklist.push({
242
+ element: 'protagonistAttitude',
243
+ elementKr: '주인공 태도 요약',
244
+ status: hasArc && hasAttitude ? 'complete' : hasArc || hasAttitude ? 'partial' : 'missing',
245
+ source: protagonist ? `캐릭터 '${protagonist.name}'에서 추출` : '주인공 없음',
246
+ suggestion: hasArc && hasAttitude ? '' : 'char update <name> arc "..." attitude "..."'
247
+ });
248
+
249
+ // 2. Core Relationships
250
+ const relCount = protagonist ? memory.relationships.filter(
251
+ r => r.from === protagonist.name || r.to === protagonist.name
252
+ ).length : 0;
253
+ checklist.push({
254
+ element: 'coreRelationships',
255
+ elementKr: '관계 핵심 구도',
256
+ status: relCount >= 2 ? 'complete' : relCount === 1 ? 'partial' : 'missing',
257
+ source: `관계 ${relCount}개 등록됨`,
258
+ suggestion: relCount >= 2 ? '' : 'rel add <from> <to> <type>'
259
+ });
260
+
261
+ // 3. Emotional Theme
262
+ checklist.push({
263
+ element: 'emotionalTheme',
264
+ elementKr: '정서적 테마',
265
+ status: memory.themes.length > 0 ? 'complete' : 'missing',
266
+ source: `테마 ${memory.themes.length}개 등록됨`,
267
+ suggestion: memory.themes.length > 0 ? '' : 'theme add <name>'
268
+ });
269
+
270
+ // 4. Genre vs Emotion
271
+ const hasGenreContrast = memory.synopsis?.genreVsRealEmotion ? true : false;
272
+ checklist.push({
273
+ element: 'genreVsEmotion',
274
+ elementKr: '장르와 실제 감정의 거리',
275
+ status: hasGenreContrast ? 'complete' : 'missing',
276
+ source: hasGenreContrast ? '명시적으로 입력됨' : '미입력',
277
+ suggestion: hasGenreContrast ? '' : 'synopsis update genreVsRealEmotion "..."'
278
+ });
279
+
280
+ // 5. Ending Aftertaste
281
+ const hasAftertaste = memory.synopsis?.endingAftertaste ? true : false;
282
+ checklist.push({
283
+ element: 'endingAftertaste',
284
+ elementKr: '엔딩 정서 잔상',
285
+ status: hasAftertaste ? 'complete' : 'missing',
286
+ source: hasAftertaste ? '명시적으로 입력됨' : '미입력',
287
+ suggestion: hasAftertaste ? '' : 'synopsis update endingAftertaste "..."'
288
+ });
289
+
290
+ return checklist;
291
+ }
292
+
293
+ // === Export ===
294
+
295
+ export function exportSynopsisAsMarkdown(): string {
296
+ const memory = loadMemory();
297
+ if (!memory) return '# Error: No memory found';
298
+
299
+ const synopsis = generateSynopsis({ format: 'full' });
300
+ if (!synopsis) return '# Error: Could not generate synopsis';
301
+
302
+ const meta = `---
303
+ project: ${memory.project.name || 'Untitled'}
304
+ genre: ${memory.project.genre || 'Unspecified'}
305
+ generated: ${new Date().toISOString()}
306
+ ---
307
+
308
+ `;
309
+
310
+ return meta + synopsis;
311
+ }
312
+
313
+ export function exportSynopsisAsJSON(): object {
314
+ const memory = loadMemory();
315
+ if (!memory) return { error: 'No memory found' };
316
+
317
+ const checklist = getSynopsisChecklist(memory);
318
+
319
+ return {
320
+ metadata: {
321
+ project: memory.project.name,
322
+ genre: memory.project.genre,
323
+ generated: new Date().toISOString()
324
+ },
325
+ elements: {
326
+ protagonistAttitude: extractProtagonistAttitude(memory),
327
+ coreRelationships: extractCoreRelationships(memory),
328
+ emotionalTheme: extractEmotionalTheme(memory),
329
+ genreVsEmotion: extractGenreVsEmotion(memory),
330
+ endingAftertaste: extractEndingAftertaste(memory)
331
+ },
332
+ checklist,
333
+ formats: {
334
+ full: generateSynopsis({ format: 'full' }),
335
+ brief: generateSynopsis({ format: 'brief' }),
336
+ pitch: generateSynopsis({ format: 'pitch' })
337
+ }
338
+ };
339
+ }
@@ -0,0 +1,46 @@
1
+ # 시놉시스: {{PROJECT_NAME}}
2
+
3
+ > 장르: {{GENRE}} | 최종 업데이트: {{DATE}}
4
+
5
+ ---
6
+
7
+ ## 1. 주인공의 태도 (Protagonist Attitude)
8
+
9
+ {{PROTAGONIST_ATTITUDE}}
10
+
11
+ ## 2. 관계의 핵심 구도 (Core Relationships)
12
+
13
+ {{CORE_RELATIONSHIPS}}
14
+
15
+ ## 3. 정서적 테마 (Emotional Theme)
16
+
17
+ {{EMOTIONAL_THEME}}
18
+
19
+ ## 4. 장르와 실제 감정의 거리 (Genre vs Real Emotion)
20
+
21
+ {{GENRE_VS_EMOTION}}
22
+
23
+ ## 5. 엔딩이 남기는 잔상 (Ending Aftertaste)
24
+
25
+ {{ENDING_AFTERTASTE}}
26
+
27
+ ---
28
+
29
+ ## 부록
30
+
31
+ ### 등장인물
32
+
33
+ {{CHARACTER_LIST}}
34
+
35
+ ### 장면 흐름
36
+
37
+ {{SCENE_FLOW}}
38
+
39
+ ### 감정 궤도
40
+
41
+ {{EMOTION_ARC}}
42
+
43
+ ---
44
+
45
+ *이 시놉시스는 writer-memory 시스템에 의해 자동 생성되었습니다.*
46
+ *플롯이 아닌 감정 설계도 기반의 시놉시스입니다.*
@@ -0,0 +1,4 @@
1
+ # Governance debt allowlist.
2
+ # Format: <rule_id>:<repo-relative-path>
3
+ legacy_slash_command:.agent/skills/help/SKILL.md
4
+ legacy_slash_command:.agent/skills/mcp-setup/SKILL.md
@@ -0,0 +1,4 @@
1
+ # LLM governance debt allowlist
2
+ # Format: <rule_id>:<skill_name>
3
+ non_codex_runtime:doctor
4
+ legacy_task_api:start-dev
package/AGENTS.md ADDED
@@ -0,0 +1,59 @@
1
+ <!-- Generated: 2026-01-31 | Updated: 2026-01-31 -->
2
+
3
+ # oh-my-codex
4
+
5
+ Skill pack and workflow orchestration for **OpenAI Codex CLI**.
6
+
7
+ **Version:** 0.1.0
8
+ **Purpose:** Make Codex behave like a multi-agent conductor using structured skills
9
+
10
+ ## Purpose
11
+
12
+ oh-my-codex enhances Codex with:
13
+ - **Execution modes** (autopilot, ultrawork, ralph, ultrapilot, swarm, pipeline, ecomode)
14
+ - **Quality workflows** (plan, review, ultraqa, security-review, tdd)
15
+ - **Reusable skills** for research, diagnosis, and development flows
16
+
17
+ ## Key Files
18
+
19
+ | File | Description |
20
+ |------|-------------|
21
+ | `README.md` | Entry point documentation |
22
+ | `docs/CODEX.md` | Codex-specific install and usage guide |
23
+ | `.agent/skills/` | All Codex skill definitions |
24
+ | `scripts/install-codex.sh` | Global skill installer |
25
+
26
+ ## For AI Agents
27
+
28
+ ### Skill Invocation
29
+
30
+ Codex auto-loads skills from:
31
+ - `~/.codex/skills/<skill>/SKILL.md`
32
+ - `<repo>/.codex/skills/<skill>/SKILL.md`
33
+
34
+ When the user mentions a skill name or uses `$skill`, you should follow that skill.
35
+
36
+ ### Source-of-Truth Workflow (Mandatory)
37
+
38
+ For this repository, **`oh-my-codex` is the single source of truth** for skills and docs.
39
+
40
+ Required order:
41
+ 1. Edit and validate files in this repo first (for example `.agent/skills/**/SKILL.md`).
42
+ 2. Commit/push repository changes.
43
+ 3. Install/sync to runtime using installer scripts (for example `scripts/install-codex.sh` / `scripts/install-codex-force.sh`).
44
+
45
+ Do **not** use `~/.codex/skills` as the primary editing location.
46
+ Direct edits under `~/.codex/skills` are temporary at most, and must be immediately backported to repo before considering work complete.
47
+
48
+ ### Compatibility Notes
49
+
50
+ Codex does **not** support Claude Code plugins, interception lifecycle APIs, or HUD. Any mention of:
51
+ - Claude Code plugin commands
52
+ - `.claude/` plugin cache paths
53
+ - Claude Code-specific CLI commands
54
+
55
+ …should be treated as **legacy** references from the original oh-my-claudecode.
56
+
57
+ ### Testing
58
+
59
+ No mandatory tests. If you change scripts, run a quick shell check.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Yeachan Heo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,169 @@
1
+ English | [简体中文](README.zh.md)
2
+
3
+ # oh-my-codex
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ **Codex skill pack with runtime setup tooling.**
8
+
9
+ *Less prompt‑tuning, more shipping.*
10
+
11
+ Inspired by **oh‑my‑claudecode**, rebuilt for **Codex architecture**, and informed by:
12
+ **oh‑my‑opencode**, **everything‑claude‑code**.
13
+
14
+ ---
15
+
16
+ ## Install
17
+
18
+ **From npm (global)**
19
+ ```bash
20
+ npm install -g oh-my-codex-cli
21
+ omcodex setup
22
+ ```
23
+
24
+ **From npm (one-off)**
25
+ ```bash
26
+ npx oh-my-codex-cli setup
27
+ ```
28
+
29
+ **Recommended (runtime setup)**
30
+ ```bash
31
+ npm run setup:omcodex
32
+ ```
33
+
34
+ **Compatibility scripts**
35
+ ```bash
36
+ ./scripts/install-codex.sh --all
37
+ ```
38
+
39
+ Force overwrite:
40
+ ```bash
41
+ ./scripts/install-codex-force.sh --all
42
+ ```
43
+
44
+ Incremental (skip existing files):
45
+ ```bash
46
+ ./scripts/install-codex-incremental.sh --all
47
+ ```
48
+
49
+ Installs:
50
+ - **Skills** → `~/.codex/skills/`
51
+ - **Role prompts** → `~/.codex/prompts/`
52
+ - **Rules** → `~/.codex/rules/`
53
+ - **MCP config + Plan mode** → `~/.codex/config.toml`
54
+
55
+ **Project‑local**
56
+ ```bash
57
+ ./scripts/install-codex.sh --all --project
58
+ ```
59
+
60
+ ---
61
+
62
+ ## What You Get
63
+
64
+ - **Execution modes**: `autopilot`, `ralph`, `ultrawork`, `ultraqa`, `ultrapilot`, `swarm`, `pipeline`, `ecomode`
65
+ - **Planning & QA**: `plan`, `review`, `analyze`, `tdd`, `code-review`, `security-review`, `build-fix`, `verify`, `eval`
66
+ - **Role prompt catalog**: `architect`, `planner`, `executor` (installed under `.codex/prompts/`)
67
+ - **Learning & context**: `continuous-learning`, `strategic-compact`, `iterative-retrieval`, `verification-loop`
68
+ - **Native subagent orchestration**: `spawn_agent` + `send_input` + `wait` + `close_agent` patterns across core skills
69
+ - **Setup runtime**: `omcodex setup` scope-aware installer and `omcodex doctor` health checks
70
+ - **Team state runtime**: `omcodex team start/status/advance/cancel` for staged execution state
71
+ - **Auto skill routing**: `omcodex route "<task>"` recommends the best-fit skills with confidence
72
+ - **Event-driven team auto-advance**: `omcodex team start "<task>" --auto` advances phases from notify events
73
+ - **Local MCP runtime surfaces**: `omcodex_state`, `omcodex_memory`, `omcodex_trace` servers wired by setup
74
+ - **Rules & guardrails**: coding, security, testing, performance, git workflow
75
+ - **Plan mode enabled** (Codex 0.9+)
76
+
77
+ ---
78
+
79
+ ## Notify Positioning
80
+
81
+ Codex does not provide Claude Code style interception lifecycle support (for example pre/post tool interception).
82
+
83
+ In this project, extensions are event-driven and built on top of Codex notifications (`notify`), not execution interception.
84
+
85
+ Use the notify extension workflow:
86
+
87
+ ```bash
88
+ omcodex notify init
89
+ omcodex notify status
90
+ omcodex notify validate
91
+ OMX_NOTIFY_PLUGINS=1 omcodex notify test
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Codex vs Claude Code (High‑Level)
97
+
98
+ | Capability | Claude Code (oh‑my‑claudecode) | Codex (oh‑my‑codex) |
99
+ |---|---|---|
100
+ | Skills‑based workflows | ✅ | ✅ (primary) |
101
+ | Native subagent execution | ✅ | ✅ |
102
+ | Plan Mode | ⚠️ plugin‑driven | ✅ native (0.9+ with config) |
103
+ | MCP support | ✅ | ✅ (config.toml / CLI) |
104
+
105
+ ---
106
+
107
+ ## Typical Use Cases
108
+
109
+ - **Ship a feature fast** → `autopilot: add OAuth login + tests`
110
+ - **Relentless completion** → `ralph: refactor auth until tests pass`
111
+ - **High‑throughput thinking** → `ultrawork: fix all lint + type errors`
112
+ - **Quality loop** → `ultraqa: run tests and fix until green`
113
+ - **Planning only** → `plan: design a scalable API for X`
114
+
115
+ ---
116
+
117
+ ## Rules (Templates)
118
+
119
+ Rules are optional guardrails you can copy to `.codex/rules/`:
120
+ - `agents.md`, `coding-style.md`, `git-workflow.md`, `notify.md`
121
+ - `patterns.md`, `performance.md`, `security.md`, `testing.md`
122
+ - `dev.md`, `research.md`, `review.md`
123
+
124
+ Install rules automatically:
125
+ ```bash
126
+ ./scripts/install-codex.sh --rules
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Skill Governance
132
+
133
+ Run the governance gate before shipping skill changes:
134
+
135
+ ```bash
136
+ npm run governance:skills
137
+ npm run governance:skills:llm
138
+ npm run eval:skills
139
+ ```
140
+
141
+ This command enforces the skill documentation baseline by blocking:
142
+ - Legacy slash command patterns (for example `Run: /verify`)
143
+ - Plugin-only runtime instructions (for example `cc --plugin-dir`)
144
+ - Legacy task API syntax (`Task(...)`-style examples)
145
+
146
+ See `docs/SKILL_GOVERNANCE.md` for policy, blockers, and debt tracking.
147
+
148
+ ---
149
+
150
+
151
+ ## Quick Start
152
+
153
+ ```
154
+ autopilot: build a REST API for managing tasks
155
+ ```
156
+
157
+ ---
158
+
159
+ ## Docs
160
+
161
+ - `docs/CODEX.md`
162
+ - `docs/ALIGNMENT.md`
163
+ - `docs/NOTIFY.md`
164
+
165
+ ---
166
+
167
+ ## License
168
+
169
+ MIT