oh-my-codex 0.4.3 → 0.5.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 (159) hide show
  1. package/README.md +17 -10
  2. package/dist/agents/definitions.d.ts.map +1 -1
  3. package/dist/agents/definitions.js +7 -13
  4. package/dist/agents/definitions.js.map +1 -1
  5. package/dist/agents/native-config.d.ts +20 -0
  6. package/dist/agents/native-config.d.ts.map +1 -0
  7. package/dist/agents/native-config.js +84 -0
  8. package/dist/agents/native-config.js.map +1 -0
  9. package/dist/catalog/__tests__/generator.test.d.ts +2 -0
  10. package/dist/catalog/__tests__/generator.test.d.ts.map +1 -0
  11. package/dist/catalog/__tests__/generator.test.js +42 -0
  12. package/dist/catalog/__tests__/generator.test.js.map +1 -0
  13. package/dist/catalog/__tests__/schema.test.d.ts +2 -0
  14. package/dist/catalog/__tests__/schema.test.d.ts.map +1 -0
  15. package/dist/catalog/__tests__/schema.test.js +33 -0
  16. package/dist/catalog/__tests__/schema.test.js.map +1 -0
  17. package/dist/catalog/reader.d.ts +19 -0
  18. package/dist/catalog/reader.d.ts.map +1 -0
  19. package/dist/catalog/reader.js +63 -0
  20. package/dist/catalog/reader.js.map +1 -0
  21. package/dist/catalog/schema.d.ts +32 -0
  22. package/dist/catalog/schema.d.ts.map +1 -0
  23. package/dist/catalog/schema.js +101 -0
  24. package/dist/catalog/schema.js.map +1 -0
  25. package/dist/cli/__tests__/index.test.js +109 -1
  26. package/dist/cli/__tests__/index.test.js.map +1 -1
  27. package/dist/cli/__tests__/setup-scope.test.d.ts +2 -0
  28. package/dist/cli/__tests__/setup-scope.test.d.ts.map +1 -0
  29. package/dist/cli/__tests__/setup-scope.test.js +164 -0
  30. package/dist/cli/__tests__/setup-scope.test.js.map +1 -0
  31. package/dist/cli/catalog-contract.d.ts +10 -0
  32. package/dist/cli/catalog-contract.d.ts.map +1 -0
  33. package/dist/cli/catalog-contract.js +24 -0
  34. package/dist/cli/catalog-contract.js.map +1 -0
  35. package/dist/cli/doctor.d.ts.map +1 -1
  36. package/dist/cli/doctor.js +7 -4
  37. package/dist/cli/doctor.js.map +1 -1
  38. package/dist/cli/index.d.ts +10 -0
  39. package/dist/cli/index.d.ts.map +1 -1
  40. package/dist/cli/index.js +124 -99
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/cli/setup.d.ts +3 -0
  43. package/dist/cli/setup.d.ts.map +1 -1
  44. package/dist/cli/setup.js +208 -47
  45. package/dist/cli/setup.js.map +1 -1
  46. package/dist/config/__tests__/generator-notify.test.js +28 -0
  47. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  48. package/dist/config/generator.d.ts +1 -0
  49. package/dist/config/generator.d.ts.map +1 -1
  50. package/dist/config/generator.js +34 -2
  51. package/dist/config/generator.js.map +1 -1
  52. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +2 -0
  53. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +1 -0
  54. package/dist/hooks/code-simplifier/__tests__/index.test.js +135 -0
  55. package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -0
  56. package/dist/hooks/code-simplifier/index.d.ts +74 -0
  57. package/dist/hooks/code-simplifier/index.d.ts.map +1 -0
  58. package/dist/hooks/code-simplifier/index.js +145 -0
  59. package/dist/hooks/code-simplifier/index.js.map +1 -0
  60. package/dist/hooks/emulator.d.ts.map +1 -1
  61. package/dist/hooks/emulator.js +0 -1
  62. package/dist/hooks/emulator.js.map +1 -1
  63. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  64. package/dist/hooks/keyword-detector.js +0 -3
  65. package/dist/hooks/keyword-detector.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/notifications/__tests__/tmux.test.js +61 -1
  71. package/dist/notifications/__tests__/tmux.test.js.map +1 -1
  72. package/dist/notifications/__tests__/verbosity.test.d.ts +2 -0
  73. package/dist/notifications/__tests__/verbosity.test.d.ts.map +1 -0
  74. package/dist/notifications/__tests__/verbosity.test.js +202 -0
  75. package/dist/notifications/__tests__/verbosity.test.js.map +1 -0
  76. package/dist/notifications/config.d.ts +14 -1
  77. package/dist/notifications/config.d.ts.map +1 -1
  78. package/dist/notifications/config.js +52 -0
  79. package/dist/notifications/config.js.map +1 -1
  80. package/dist/notifications/formatter.d.ts.map +1 -1
  81. package/dist/notifications/formatter.js +14 -0
  82. package/dist/notifications/formatter.js.map +1 -1
  83. package/dist/notifications/index.d.ts +3 -3
  84. package/dist/notifications/index.d.ts.map +1 -1
  85. package/dist/notifications/index.js +14 -4
  86. package/dist/notifications/index.js.map +1 -1
  87. package/dist/notifications/tmux.d.ts +6 -0
  88. package/dist/notifications/tmux.d.ts.map +1 -1
  89. package/dist/notifications/tmux.js +31 -1
  90. package/dist/notifications/tmux.js.map +1 -1
  91. package/dist/notifications/types.d.ts +13 -0
  92. package/dist/notifications/types.d.ts.map +1 -1
  93. package/dist/team/__tests__/model-contract.test.d.ts +2 -0
  94. package/dist/team/__tests__/model-contract.test.d.ts.map +1 -0
  95. package/dist/team/__tests__/model-contract.test.js +47 -0
  96. package/dist/team/__tests__/model-contract.test.js.map +1 -0
  97. package/dist/team/__tests__/phase-controller.test.d.ts +2 -0
  98. package/dist/team/__tests__/phase-controller.test.d.ts.map +1 -0
  99. package/dist/team/__tests__/phase-controller.test.js +36 -0
  100. package/dist/team/__tests__/phase-controller.test.js.map +1 -0
  101. package/dist/team/__tests__/runtime.test.js +112 -8
  102. package/dist/team/__tests__/runtime.test.js.map +1 -1
  103. package/dist/team/__tests__/tmux-session.test.js +71 -1
  104. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  105. package/dist/team/model-contract.d.ts +19 -0
  106. package/dist/team/model-contract.d.ts.map +1 -0
  107. package/dist/team/model-contract.js +123 -0
  108. package/dist/team/model-contract.js.map +1 -0
  109. package/dist/team/orchestrator.d.ts.map +1 -1
  110. package/dist/team/orchestrator.js +0 -1
  111. package/dist/team/orchestrator.js.map +1 -1
  112. package/dist/team/phase-controller.d.ts +10 -0
  113. package/dist/team/phase-controller.d.ts.map +1 -0
  114. package/dist/team/phase-controller.js +128 -0
  115. package/dist/team/phase-controller.js.map +1 -0
  116. package/dist/team/runtime.d.ts +3 -3
  117. package/dist/team/runtime.d.ts.map +1 -1
  118. package/dist/team/runtime.js +40 -74
  119. package/dist/team/runtime.js.map +1 -1
  120. package/dist/team/state.d.ts +15 -0
  121. package/dist/team/state.d.ts.map +1 -1
  122. package/dist/team/state.js +35 -0
  123. package/dist/team/state.js.map +1 -1
  124. package/dist/team/team-ops.d.ts +3 -1
  125. package/dist/team/team-ops.d.ts.map +1 -1
  126. package/dist/team/team-ops.js +2 -0
  127. package/dist/team/team-ops.js.map +1 -1
  128. package/dist/team/tmux-session.d.ts +12 -0
  129. package/dist/team/tmux-session.d.ts.map +1 -1
  130. package/dist/team/tmux-session.js +33 -1
  131. package/dist/team/tmux-session.js.map +1 -1
  132. package/dist/utils/paths.d.ts +2 -0
  133. package/dist/utils/paths.d.ts.map +1 -1
  134. package/dist/utils/paths.js +4 -0
  135. package/dist/utils/paths.js.map +1 -1
  136. package/package.json +2 -2
  137. package/prompts/code-simplifier.md +91 -0
  138. package/prompts/product-analyst.md +7 -7
  139. package/scripts/generate-catalog-docs.js +111 -0
  140. package/scripts/notify-hook.js +36 -1
  141. package/skills/build-fix/SKILL.md +3 -3
  142. package/skills/code-review/SKILL.md +3 -3
  143. package/skills/help/SKILL.md +4 -4
  144. package/skills/omx-setup/SKILL.md +24 -15
  145. package/skills/research/SKILL.md +28 -28
  146. package/skills/security-review/SKILL.md +3 -3
  147. package/templates/AGENTS.md +1 -8
  148. package/templates/catalog-manifest.json +397 -0
  149. package/prompts/deep-executor.md +0 -19
  150. package/prompts/scientist.md +0 -89
  151. package/skills/deepinit/SKILL.md +0 -320
  152. package/skills/learn-about-omx/SKILL.md +0 -37
  153. package/skills/learner/SKILL.md +0 -135
  154. package/skills/pipeline/SKILL.md +0 -407
  155. package/skills/project-session-manager/SKILL.md +0 -560
  156. package/skills/psm/SKILL.md +0 -20
  157. package/skills/release/SKILL.md +0 -83
  158. package/skills/ultrapilot/SKILL.md +0 -627
  159. package/skills/writer-memory/SKILL.md +0 -443
package/README.md CHANGED
@@ -102,8 +102,8 @@ OMX installs and wires these layers:
102
102
  User
103
103
  -> Codex CLI
104
104
  -> AGENTS.md (orchestration brain)
105
- -> ~/.codex/prompts/*.md (30 agent prompts)
106
- -> ~/.agents/skills/*/SKILL.md (40 skills)
105
+ -> ~/.codex/prompts/*.md (agent prompt catalog)
106
+ -> ~/.agents/skills/*/SKILL.md (skill catalog)
107
107
  -> ~/.codex/config.toml (features, notify, MCP)
108
108
  -> .omx/ (runtime state, memory, plans, logs)
109
109
  ```
@@ -112,7 +112,7 @@ User
112
112
 
113
113
  ```bash
114
114
  omx # Launch Codex (+ HUD in tmux when available)
115
- omx setup # Install prompts, skills, config wiring, AGENTS.md
115
+ omx setup # Install prompts/skills/config by scope + project AGENTS.md/.omx
116
116
  omx doctor # Installation/runtime diagnostics
117
117
  omx doctor --team # Team/swarm diagnostics
118
118
  omx team ... # Start/status/resume/shutdown tmux team workers
@@ -146,6 +146,7 @@ See `docs/hooks-extension.md` for the full extension workflow and event model.
146
146
  --force
147
147
  --dry-run
148
148
  --verbose
149
+ --scope <user|project-local|project> # setup only
149
150
  ```
150
151
 
151
152
  `--madmax` maps to Codex `--dangerously-bypass-approvals-and-sandbox`.
@@ -192,9 +193,14 @@ Important rule: do not shutdown while tasks are still `in_progress` unless abort
192
193
 
193
194
  ## What `omx setup` writes
194
195
 
195
- - `~/.codex/prompts/` (30 prompt files)
196
- - `~/.agents/skills/` (40 skills)
197
- - `~/.codex/config.toml` updates:
196
+ - `.omx/setup-scope.json` (persisted setup scope)
197
+ - Scope-dependent installs:
198
+ - `user`: `~/.codex/prompts/`, `~/.agents/skills/`, `~/.codex/config.toml`, `~/.omx/agents/`
199
+ - `project-local`: `./.codex/prompts/`, `./.agents/skills/`, `./.codex/config.toml`, `./.omx/agents/`
200
+ - `project`: skips prompt/skill/config/native-agent installs
201
+ - Launch behavior: if persisted scope is `project-local`, `omx` launch auto-uses `CODEX_HOME=./.codex` (unless `CODEX_HOME` is already set).
202
+ - Existing `AGENTS.md` is preserved unless `--force` is used (and active-session safety checks still apply).
203
+ - `config.toml` updates (for `user`/`project-local` scopes):
198
204
  - `notify = ["node", "..."]`
199
205
  - `model_reasoning_effort = "high"`
200
206
  - `developer_instructions = "..."`
@@ -206,13 +212,12 @@ Important rule: do not shutdown while tasks are still `in_progress` unless abort
206
212
 
207
213
  ## Agents and Skills
208
214
 
209
- - Prompts: `prompts/*.md` (installed to `~/.codex/prompts/`)
210
- - Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/`)
215
+ - Prompts: `prompts/*.md` (installed to `~/.codex/prompts/` for `user`, `./.codex/prompts/` for `project-local`)
216
+ - Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/` for `user`, `./.agents/skills/` for `project-local`)
211
217
 
212
218
  Examples:
213
219
  - Agents: `architect`, `planner`, `executor`, `debugger`, `verifier`, `security-reviewer`
214
- - `deep-executor` is deprecated; use `executor` for complex implementation tasks.
215
- - Skills: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `ultrapilot`, `research`, `cancel`
220
+ - Skills: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `research`, `cancel`
216
221
 
217
222
  ## Project Layout
218
223
 
@@ -247,6 +252,8 @@ npm test
247
252
 
248
253
  ## Notes
249
254
 
255
+ - Release notes: `CHANGELOG.md`
256
+ - Migration guide (post-v0.4.4 mainline): `docs/migration-mainline-post-v0.4.4.md`
250
257
  - Coverage and parity notes: `COVERAGE.md`
251
258
  - Hook extension workflow: `docs/hooks-extension.md`
252
259
  - Setup and contribution details: `CONTRIBUTING.md`
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;AAgBD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAgN7D,CAAC;AAEF,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CAE5F;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;AAUD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+M7D,CAAC;AAEF,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CAE5F;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
@@ -10,11 +10,6 @@ const EXECUTOR_AGENT = {
10
10
  tools: 'execution',
11
11
  category: 'build',
12
12
  };
13
- const DEEP_EXECUTOR_ALIAS_AGENT = {
14
- ...EXECUTOR_AGENT,
15
- name: 'deep-executor',
16
- description: '[Deprecated] Backward-compatible alias of executor',
17
- };
18
13
  export const AGENT_DEFINITIONS = {
19
14
  // Build/Analysis Lane
20
15
  'explore': {
@@ -53,7 +48,6 @@ export const AGENT_DEFINITIONS = {
53
48
  category: 'build',
54
49
  },
55
50
  'executor': EXECUTOR_AGENT,
56
- 'deep-executor': DEEP_EXECUTOR_ALIAS_AGENT,
57
51
  'verifier': {
58
52
  name: 'verifier',
59
53
  description: 'Completion evidence, claim validation, test adequacy',
@@ -154,13 +148,6 @@ export const AGENT_DEFINITIONS = {
154
148
  tools: 'execution',
155
149
  category: 'domain',
156
150
  },
157
- 'scientist': {
158
- name: 'scientist',
159
- description: 'Data/statistical analysis and hypothesis testing',
160
- model: 'sonnet',
161
- tools: 'data',
162
- category: 'domain',
163
- },
164
151
  'git-master': {
165
152
  name: 'git-master',
166
153
  description: 'Commit strategy, history hygiene, rebasing',
@@ -168,6 +155,13 @@ export const AGENT_DEFINITIONS = {
168
155
  tools: 'execution',
169
156
  category: 'domain',
170
157
  },
158
+ 'code-simplifier': {
159
+ name: 'code-simplifier',
160
+ description: 'Simplifies recently modified code for clarity and consistency without changing behavior',
161
+ model: 'opus',
162
+ tools: 'execution',
163
+ category: 'domain',
164
+ },
171
165
  'researcher': {
172
166
  name: 'researcher',
173
167
  description: 'External documentation and reference research',
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,cAAc,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,gDAAgD;IAC7D,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,MAAM,yBAAyB,GAAoB;IACjD,GAAG,cAAc;IACjB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oDAAoD;CAClE,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,sBAAsB;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,OAAO;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,OAAO;KAClB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,8DAA8D;QAC3E,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,UAAU,EAAE,cAAc;IAC1B,eAAe,EAAE,yBAAyB;IAC1C,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IAED,cAAc;IACd,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,mDAAmD;QAChE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,mDAAmD;QAChE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IAED,qBAAqB;IACrB,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,wCAAwC;QACrD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,QAAQ;KACnB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IAED,eAAe;IACf,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IAED,eAAe;IACf,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,cAAc;KACzB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,cAAc;KACzB;CACF,CAAC;AAEF,mCAAmC;AACnC,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,mBAAmB,CAAC,QAAqC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Native agent config generator for Codex CLI multi-agent roles
3
+ * Generates per-agent .toml files at ~/.omx/agents/<name>.toml
4
+ */
5
+ import { AgentDefinition } from './definitions.js';
6
+ /**
7
+ * Generate TOML content for a single agent config file
8
+ */
9
+ export declare function generateAgentToml(agent: AgentDefinition, promptContent: string): string;
10
+ /**
11
+ * Install native agent config .toml files to ~/.omx/agents/
12
+ * Returns the number of agents installed
13
+ */
14
+ export declare function installNativeAgentConfigs(pkgRoot: string, options?: {
15
+ force?: boolean;
16
+ dryRun?: boolean;
17
+ verbose?: boolean;
18
+ agentsDir?: string;
19
+ }): Promise<number>;
20
+ //# sourceMappingURL=native-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-config.d.ts","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA8BtE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAavF;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Native agent config generator for Codex CLI multi-agent roles
3
+ * Generates per-agent .toml files at ~/.omx/agents/<name>.toml
4
+ */
5
+ import { readFile, writeFile, mkdir } from 'fs/promises';
6
+ import { join } from 'path';
7
+ import { existsSync } from 'fs';
8
+ import { AGENT_DEFINITIONS } from './definitions.js';
9
+ import { omxAgentsConfigDir } from '../utils/paths.js';
10
+ // Map OMX model tiers to Codex reasoning effort levels
11
+ const REASONING_EFFORT_MAP = {
12
+ haiku: 'low',
13
+ sonnet: 'medium',
14
+ opus: 'high',
15
+ };
16
+ /**
17
+ * Strip YAML frontmatter (between --- markers) from markdown content
18
+ */
19
+ function stripFrontmatter(content) {
20
+ const match = content.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);
21
+ if (match) {
22
+ return content.slice(match[0].length).trim();
23
+ }
24
+ return content.trim();
25
+ }
26
+ /**
27
+ * Escape content for TOML triple-quoted strings.
28
+ * TOML """ strings only need to escape sequences of 3+ consecutive quotes.
29
+ */
30
+ function escapeTomlMultiline(s) {
31
+ // Replace sequences of 3+ double quotes with escaped versions
32
+ return s.replace(/"{3,}/g, (match) => match.split('').join('\\'));
33
+ }
34
+ /**
35
+ * Generate TOML content for a single agent config file
36
+ */
37
+ export function generateAgentToml(agent, promptContent) {
38
+ const instructions = stripFrontmatter(promptContent);
39
+ const effort = REASONING_EFFORT_MAP[agent.model];
40
+ const escaped = escapeTomlMultiline(instructions);
41
+ return [
42
+ `# oh-my-codex agent: ${agent.name}`,
43
+ `model_reasoning_effort = "${effort}"`,
44
+ `developer_instructions = """`,
45
+ escaped,
46
+ `"""`,
47
+ '',
48
+ ].join('\n');
49
+ }
50
+ /**
51
+ * Install native agent config .toml files to ~/.omx/agents/
52
+ * Returns the number of agents installed
53
+ */
54
+ export async function installNativeAgentConfigs(pkgRoot, options = {}) {
55
+ const { force = false, dryRun = false, verbose = false, agentsDir = omxAgentsConfigDir(), } = options;
56
+ if (!dryRun) {
57
+ await mkdir(agentsDir, { recursive: true });
58
+ }
59
+ let count = 0;
60
+ for (const [name, agent] of Object.entries(AGENT_DEFINITIONS)) {
61
+ const promptPath = join(pkgRoot, 'prompts', `${name}.md`);
62
+ if (!existsSync(promptPath)) {
63
+ if (verbose)
64
+ console.log(` skip ${name} (no prompt file)`);
65
+ continue;
66
+ }
67
+ const dst = join(agentsDir, `${name}.toml`);
68
+ if (!force && existsSync(dst)) {
69
+ if (verbose)
70
+ console.log(` skip ${name} (already exists)`);
71
+ continue;
72
+ }
73
+ const promptContent = await readFile(promptPath, 'utf-8');
74
+ const toml = generateAgentToml(agent, promptContent);
75
+ if (!dryRun) {
76
+ await writeFile(dst, toml);
77
+ }
78
+ if (verbose)
79
+ console.log(` ${name}.toml`);
80
+ count++;
81
+ }
82
+ return count;
83
+ }
84
+ //# sourceMappingURL=native-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-config.js","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdir, mkdtemp, readFile, writeFile } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { tmpdir } from 'os';
6
+ import { readCatalogManifest, toPublicCatalogContract } from '../reader.js';
7
+ async function readSourceManifestRaw() {
8
+ return readFile(join(process.cwd(), 'src', 'catalog', 'manifest.json'), 'utf8');
9
+ }
10
+ async function readSourceManifestCounts() {
11
+ const raw = await readSourceManifestRaw();
12
+ const parsed = JSON.parse(raw);
13
+ return {
14
+ skills: parsed.skills.length,
15
+ agents: parsed.agents.length,
16
+ };
17
+ }
18
+ describe('catalog reader/contract', () => {
19
+ it('prefers template manifest path when present', async () => {
20
+ const root = await mkdtemp(join(tmpdir(), 'omx-catalog-'));
21
+ await mkdir(join(root, 'templates'), { recursive: true });
22
+ await writeFile(join(root, 'templates', 'catalog-manifest.json'), await readSourceManifestRaw());
23
+ const parsed = readCatalogManifest(root);
24
+ assert.equal(parsed.schemaVersion, 1);
25
+ assert.ok(parsed.skills.length > 0);
26
+ });
27
+ it('builds public contract with aliases and internalHidden', async () => {
28
+ const contract = toPublicCatalogContract(readCatalogManifest());
29
+ const expected = await readSourceManifestCounts();
30
+ assert.equal(contract.counts.skillCount, expected.skills);
31
+ assert.equal(contract.counts.promptCount, expected.agents);
32
+ assert.ok(contract.aliases.some((a) => a.name === 'swarm' && a.canonical === 'team'));
33
+ assert.ok(contract.internalHidden.includes('worker'));
34
+ assert.ok(contract.coreSkills.includes('autopilot'));
35
+ });
36
+ it('template manifest can be synced from source manifest', async () => {
37
+ const sourceRaw = await readFile(join(process.cwd(), 'src', 'catalog', 'manifest.json'), 'utf8');
38
+ const targetRaw = await readFile(join(process.cwd(), 'templates', 'catalog-manifest.json'), 'utf8');
39
+ assert.equal(JSON.parse(targetRaw).catalogVersion, JSON.parse(sourceRaw).catalogVersion);
40
+ });
41
+ });
42
+ //# sourceMappingURL=generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5E,KAAK,UAAU,qBAAqB;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,MAAM,GAAG,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6C,CAAC;IAC3E,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,uBAAuB,CAAC,EAChD,MAAM,qBAAqB,EAAE,CAC9B,CAAC;QAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC;QACjG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,uBAAuB,CAAC,EAAE,MAAM,CAAC,CAAC;QACpG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { readFileSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { summarizeCatalogCounts, validateCatalogManifest } from '../schema.js';
6
+ function readSourceManifest() {
7
+ const path = join(process.cwd(), 'src', 'catalog', 'manifest.json');
8
+ return JSON.parse(readFileSync(path, 'utf8'));
9
+ }
10
+ describe('catalog schema', () => {
11
+ it('validates repository manifest', () => {
12
+ const parsed = validateCatalogManifest(readSourceManifest());
13
+ assert.equal(parsed.schemaVersion, 1);
14
+ assert.ok(parsed.catalogVersion.length > 0);
15
+ assert.ok(parsed.skills.length > 0);
16
+ assert.ok(parsed.agents.length > 0);
17
+ });
18
+ it('enforces required core skills as active', () => {
19
+ const broken = JSON.parse(JSON.stringify(readSourceManifest()));
20
+ const idx = broken.skills.findIndex((s) => s.name === 'team');
21
+ broken.skills[idx].status = 'deprecated';
22
+ assert.throws(() => validateCatalogManifest(broken), /missing_core_skill:team/);
23
+ });
24
+ it('summarizes counts', () => {
25
+ const parsed = validateCatalogManifest(readSourceManifest());
26
+ const counts = summarizeCatalogCounts(parsed);
27
+ assert.equal(counts.skillCount, parsed.skills.length);
28
+ assert.equal(counts.promptCount, parsed.agents.length);
29
+ assert.ok(counts.activeSkillCount > 0);
30
+ assert.ok(counts.activeAgentCount > 0);
31
+ });
32
+ });
33
+ //# sourceMappingURL=schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE/E,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type CatalogManifest, type CatalogCounts } from './schema.js';
2
+ export declare function readCatalogManifest(packageRoot?: string): CatalogManifest;
3
+ export declare function tryReadCatalogManifest(packageRoot?: string): CatalogManifest | null;
4
+ export declare function getCatalogCounts(packageRoot?: string): CatalogCounts;
5
+ export interface PublicCatalogContract {
6
+ generatedAt: string;
7
+ version: string;
8
+ counts: CatalogCounts;
9
+ coreSkills: string[];
10
+ skills: CatalogManifest['skills'];
11
+ agents: CatalogManifest['agents'];
12
+ aliases: Array<{
13
+ name: string;
14
+ canonical: string;
15
+ }>;
16
+ internalHidden: string[];
17
+ }
18
+ export declare function toPublicCatalogContract(manifest: CatalogManifest): PublicCatalogContract;
19
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/catalog/reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,eAAe,EAA0B,KAAK,aAAa,EAA2B,MAAM,aAAa,CAAC;AAmBxH,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAyB,GAAG,eAAe,CAa3F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,GAAE,MAAyB,GAAG,eAAe,GAAG,IAAI,CAMrG;AAED,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,MAAyB,GAAG,aAAa,CAGtF;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,qBAAqB,CAkBxF"}
@@ -0,0 +1,63 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { getPackageRoot } from '../utils/package.js';
4
+ import { summarizeCatalogCounts, validateCatalogManifest } from './schema.js';
5
+ const MANIFEST_CANDIDATE_PATHS = [
6
+ ['templates', 'catalog-manifest.json'],
7
+ ['src', 'catalog', 'manifest.json'],
8
+ ['dist', 'catalog', 'manifest.json'],
9
+ ];
10
+ let cachedManifest = null;
11
+ let cachedPath = null;
12
+ function resolveManifestPath(packageRoot) {
13
+ for (const segments of MANIFEST_CANDIDATE_PATHS) {
14
+ const fullPath = join(packageRoot, ...segments);
15
+ if (existsSync(fullPath))
16
+ return fullPath;
17
+ }
18
+ return null;
19
+ }
20
+ export function readCatalogManifest(packageRoot = getPackageRoot()) {
21
+ const path = resolveManifestPath(packageRoot);
22
+ if (!path) {
23
+ throw new Error('catalog_manifest_missing');
24
+ }
25
+ if (cachedManifest && cachedPath === path)
26
+ return cachedManifest;
27
+ const raw = JSON.parse(readFileSync(path, 'utf8'));
28
+ const manifest = validateCatalogManifest(raw);
29
+ cachedManifest = manifest;
30
+ cachedPath = path;
31
+ return manifest;
32
+ }
33
+ export function tryReadCatalogManifest(packageRoot = getPackageRoot()) {
34
+ try {
35
+ return readCatalogManifest(packageRoot);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ export function getCatalogCounts(packageRoot = getPackageRoot()) {
42
+ const manifest = readCatalogManifest(packageRoot);
43
+ return summarizeCatalogCounts(manifest);
44
+ }
45
+ export function toPublicCatalogContract(manifest) {
46
+ const aliases = manifest.skills
47
+ .filter((s) => (s.status === 'alias' || s.status === 'merged') && typeof s.canonical === 'string')
48
+ .map((s) => ({ name: s.name, canonical: s.canonical }));
49
+ const internalHidden = manifest.skills
50
+ .filter((s) => s.status === 'internal')
51
+ .map((s) => s.name);
52
+ return {
53
+ generatedAt: new Date().toISOString(),
54
+ version: manifest.catalogVersion,
55
+ counts: summarizeCatalogCounts(manifest),
56
+ coreSkills: manifest.skills.filter((s) => s.core).map((s) => s.name),
57
+ skills: manifest.skills,
58
+ agents: manifest.agents,
59
+ aliases,
60
+ internalHidden,
61
+ };
62
+ }
63
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/catalog/reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type CatalogSkillCategory = 'execution' | 'planning' | 'shortcut' | 'utility';
2
+ export type CatalogAgentCategory = 'build' | 'review' | 'domain' | 'product' | 'coordination';
3
+ export type CatalogEntryStatus = 'active' | 'alias' | 'merged' | 'deprecated' | 'internal';
4
+ export interface CatalogSkillEntry {
5
+ name: string;
6
+ category: CatalogSkillCategory;
7
+ status: CatalogEntryStatus;
8
+ canonical?: string;
9
+ core?: boolean;
10
+ internalRequired?: boolean;
11
+ }
12
+ export interface CatalogAgentEntry {
13
+ name: string;
14
+ category: CatalogAgentCategory;
15
+ status: CatalogEntryStatus;
16
+ canonical?: string;
17
+ }
18
+ export interface CatalogManifest {
19
+ schemaVersion: number;
20
+ catalogVersion: string;
21
+ skills: CatalogSkillEntry[];
22
+ agents: CatalogAgentEntry[];
23
+ }
24
+ export declare function validateCatalogManifest(input: unknown): CatalogManifest;
25
+ export interface CatalogCounts {
26
+ skillCount: number;
27
+ promptCount: number;
28
+ activeSkillCount: number;
29
+ activeAgentCount: number;
30
+ }
31
+ export declare function summarizeCatalogCounts(manifest: CatalogManifest): CatalogCounts;
32
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;AAC9F,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAiBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAuFvE;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAO/E"}
@@ -0,0 +1,101 @@
1
+ const SKILL_CATEGORIES = new Set(['execution', 'planning', 'shortcut', 'utility']);
2
+ const AGENT_CATEGORIES = new Set(['build', 'review', 'domain', 'product', 'coordination']);
3
+ const ENTRY_STATUSES = new Set(['active', 'alias', 'merged', 'deprecated', 'internal']);
4
+ const REQUIRED_CORE_SKILLS = new Set(['ralplan', 'team', 'ralph', 'ultrawork', 'autopilot']);
5
+ function isObject(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ function assertNonEmptyString(value, field) {
9
+ if (typeof value !== 'string' || value.trim() === '') {
10
+ throw new Error(`catalog_manifest_invalid:${field}`);
11
+ }
12
+ }
13
+ export function validateCatalogManifest(input) {
14
+ if (!isObject(input))
15
+ throw new Error('catalog_manifest_invalid:root');
16
+ if (typeof input.schemaVersion !== 'number' || !Number.isInteger(input.schemaVersion)) {
17
+ throw new Error('catalog_manifest_invalid:schemaVersion');
18
+ }
19
+ assertNonEmptyString(input.catalogVersion, 'catalogVersion');
20
+ if (!Array.isArray(input.skills))
21
+ throw new Error('catalog_manifest_invalid:skills');
22
+ if (!Array.isArray(input.agents))
23
+ throw new Error('catalog_manifest_invalid:agents');
24
+ const seenSkills = new Set();
25
+ const skills = input.skills.map((entry, index) => {
26
+ if (!isObject(entry))
27
+ throw new Error(`catalog_manifest_invalid:skills[${index}]`);
28
+ assertNonEmptyString(entry.name, `skills[${index}].name`);
29
+ assertNonEmptyString(entry.category, `skills[${index}].category`);
30
+ assertNonEmptyString(entry.status, `skills[${index}].status`);
31
+ if (!SKILL_CATEGORIES.has(entry.category)) {
32
+ throw new Error(`catalog_manifest_invalid:skills[${index}].category`);
33
+ }
34
+ if (!ENTRY_STATUSES.has(entry.status)) {
35
+ throw new Error(`catalog_manifest_invalid:skills[${index}].status`);
36
+ }
37
+ const name = entry.name.trim();
38
+ if (seenSkills.has(name))
39
+ throw new Error(`catalog_manifest_invalid:duplicate_skill:${name}`);
40
+ seenSkills.add(name);
41
+ const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
42
+ ? entry.canonical.trim()
43
+ : undefined;
44
+ return {
45
+ name,
46
+ category: entry.category,
47
+ status: entry.status,
48
+ canonical,
49
+ core: entry.core === true,
50
+ internalRequired: entry.internalRequired === true,
51
+ };
52
+ });
53
+ const seenAgents = new Set();
54
+ const agents = input.agents.map((entry, index) => {
55
+ if (!isObject(entry))
56
+ throw new Error(`catalog_manifest_invalid:agents[${index}]`);
57
+ assertNonEmptyString(entry.name, `agents[${index}].name`);
58
+ assertNonEmptyString(entry.category, `agents[${index}].category`);
59
+ assertNonEmptyString(entry.status, `agents[${index}].status`);
60
+ if (!AGENT_CATEGORIES.has(entry.category)) {
61
+ throw new Error(`catalog_manifest_invalid:agents[${index}].category`);
62
+ }
63
+ if (!ENTRY_STATUSES.has(entry.status)) {
64
+ throw new Error(`catalog_manifest_invalid:agents[${index}].status`);
65
+ }
66
+ const name = entry.name.trim();
67
+ if (seenAgents.has(name))
68
+ throw new Error(`catalog_manifest_invalid:duplicate_agent:${name}`);
69
+ seenAgents.add(name);
70
+ const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
71
+ ? entry.canonical.trim()
72
+ : undefined;
73
+ return {
74
+ name,
75
+ category: entry.category,
76
+ status: entry.status,
77
+ canonical,
78
+ };
79
+ });
80
+ for (const coreSkill of REQUIRED_CORE_SKILLS) {
81
+ const skill = skills.find((s) => s.name === coreSkill);
82
+ if (!skill || skill.status !== 'active') {
83
+ throw new Error(`catalog_manifest_invalid:missing_core_skill:${coreSkill}`);
84
+ }
85
+ }
86
+ return {
87
+ schemaVersion: input.schemaVersion,
88
+ catalogVersion: input.catalogVersion,
89
+ skills,
90
+ agents,
91
+ };
92
+ }
93
+ export function summarizeCatalogCounts(manifest) {
94
+ return {
95
+ skillCount: manifest.skills.length,
96
+ promptCount: manifest.agents.length,
97
+ activeSkillCount: manifest.skills.filter((s) => s.status === 'active').length,
98
+ activeAgentCount: manifest.agents.filter((a) => a.status === 'active').length,
99
+ };
100
+ }
101
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"AA2BA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACzG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;AACjH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5G,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAE7F,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEvE,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,oBAAoB,CAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAE7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAErF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,MAAM,GAAwB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,GAAG,CAAC,CAAC;QACnF,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC;QAC1D,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,YAAY,CAAC,CAAC;QAClE,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAgC,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,YAAY,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,UAAU,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,EAAE,CAAC,CAAC;QAC9F,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YACpF,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YACxB,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,KAAK,CAAC,QAAgC;YAChD,MAAM,EAAE,KAAK,CAAC,MAA4B;YAC1C,SAAS;YACT,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI;YACzB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,KAAK,IAAI;SAClD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,MAAM,GAAwB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,GAAG,CAAC,CAAC;QACnF,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC;QAC1D,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,KAAK,YAAY,CAAC,CAAC;QAClE,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAgC,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,YAAY,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,MAA4B,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,UAAU,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,EAAE,CAAC,CAAC;QAC9F,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAErB,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YACpF,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;YACxB,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,KAAK,CAAC,QAAgC;YAChD,MAAM,EAAE,KAAK,CAAC,MAA4B;YAC1C,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,SAAS,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,+CAA+C,SAAS,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,sBAAsB,CAAC,QAAyB;IAC9D,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;QACnC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;QAC7E,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;KAC9E,CAAC;AACJ,CAAC"}