@erenari/supercodex 0.2.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/README.md +228 -0
- package/dist/backup.d.ts +6 -0
- package/dist/backup.js +37 -0
- package/dist/backup.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +63 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/aliases.d.ts +2 -0
- package/dist/commands/aliases.js +141 -0
- package/dist/commands/aliases.js.map +1 -0
- package/dist/commands/catalog.d.ts +3 -0
- package/dist/commands/catalog.js +103 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/core.d.ts +2 -0
- package/dist/commands/core.js +111 -0
- package/dist/commands/core.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.js +72 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.js +26 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +128 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/mode.d.ts +2 -0
- package/dist/commands/mode.js +73 -0
- package/dist/commands/mode.js.map +1 -0
- package/dist/commands/persona.d.ts +2 -0
- package/dist/commands/persona.js +70 -0
- package/dist/commands/persona.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.js +50 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/utils.d.ts +4 -0
- package/dist/commands/utils.js +28 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.js +56 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.js +433 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/doctor/checks.d.ts +18 -0
- package/dist/doctor/checks.js +100 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/fix.d.ts +6 -0
- package/dist/doctor/fix.js +99 -0
- package/dist/doctor/fix.js.map +1 -0
- package/dist/doctor/index.d.ts +4 -0
- package/dist/doctor/index.js +21 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/report.d.ts +3 -0
- package/dist/doctor/report.js +21 -0
- package/dist/doctor/report.js.map +1 -0
- package/dist/doctor/types.d.ts +16 -0
- package/dist/doctor/types.js +3 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/fs-utils.d.ts +4 -0
- package/dist/fs-utils.js +31 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/mcp.d.ts +21 -0
- package/dist/mcp.js +222 -0
- package/dist/mcp.js.map +1 -0
- package/dist/operations.d.ts +108 -0
- package/dist/operations.js +388 -0
- package/dist/operations.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.js +41 -0
- package/dist/paths.js.map +1 -0
- package/dist/project-init.d.ts +8 -0
- package/dist/project-init.js +92 -0
- package/dist/project-init.js.map +1 -0
- package/dist/prompts.d.ts +9 -0
- package/dist/prompts.js +157 -0
- package/dist/prompts.js.map +1 -0
- package/dist/registry/aliases.d.ts +16 -0
- package/dist/registry/aliases.js +347 -0
- package/dist/registry/aliases.js.map +1 -0
- package/dist/registry/builtins.d.ts +8 -0
- package/dist/registry/builtins.js +188 -0
- package/dist/registry/builtins.js.map +1 -0
- package/dist/registry/index.d.ts +4 -0
- package/dist/registry/index.js +21 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/loader.d.ts +16 -0
- package/dist/registry/loader.js +655 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/types.d.ts +79 -0
- package/dist/registry/types.js +3 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/runtime/alias-dispatch.d.ts +10 -0
- package/dist/runtime/alias-dispatch.js +119 -0
- package/dist/runtime/alias-dispatch.js.map +1 -0
- package/dist/runtime/compat.d.ts +6 -0
- package/dist/runtime/compat.js +23 -0
- package/dist/runtime/compat.js.map +1 -0
- package/dist/runtime/context.d.ts +23 -0
- package/dist/runtime/context.js +59 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/index.d.ts +4 -0
- package/dist/runtime/index.js +21 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/workflow.d.ts +18 -0
- package/dist/runtime/workflow.js +45 -0
- package/dist/runtime/workflow.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# @erenari/supercodex
|
|
2
|
+
|
|
3
|
+
SuperClaude-style configuration framework for Codex CLI with:
|
|
4
|
+
|
|
5
|
+
- safe backup-first config merges
|
|
6
|
+
- command/mode/persona registry system
|
|
7
|
+
- bundled MCP catalog + doctor workflows
|
|
8
|
+
|
|
9
|
+
## Quickstart
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @erenari/supercodex
|
|
13
|
+
supercodex install
|
|
14
|
+
supercodex status
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Safety Model
|
|
18
|
+
|
|
19
|
+
- Never overwrites `~/.codex/config.toml` blindly.
|
|
20
|
+
- Always creates timestamped backups in:
|
|
21
|
+
- `~/.codex/backups/YYYY-MM-DD-HHMMSS/`
|
|
22
|
+
- Managed merge scope:
|
|
23
|
+
- `[supercodex]`
|
|
24
|
+
- optional `[agents.*]`
|
|
25
|
+
- optional `[mcp_servers.*]`
|
|
26
|
+
- Idempotent installs.
|
|
27
|
+
- Conflict policy:
|
|
28
|
+
- preserve existing differing values
|
|
29
|
+
- record desired values in `[supercodex.overrides]`
|
|
30
|
+
- use `--force` to apply in standard locations
|
|
31
|
+
|
|
32
|
+
## Prompt Pack
|
|
33
|
+
|
|
34
|
+
Installed in `~/.codex/prompts/supercodex/`:
|
|
35
|
+
|
|
36
|
+
- `plan.md`
|
|
37
|
+
- `review.md`
|
|
38
|
+
- `refactor.md`
|
|
39
|
+
- `debug.md`
|
|
40
|
+
|
|
41
|
+
Additional overlays:
|
|
42
|
+
|
|
43
|
+
- `modes/deep.md`
|
|
44
|
+
- `modes/fast.md`
|
|
45
|
+
- `personas/architect.md`
|
|
46
|
+
- `personas/reviewer.md`
|
|
47
|
+
|
|
48
|
+
## Command Surface
|
|
49
|
+
|
|
50
|
+
Core:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
supercodex install [--force] [--codex-home <path>]
|
|
54
|
+
supercodex uninstall [--codex-home <path>]
|
|
55
|
+
supercodex list [--codex-home <path>]
|
|
56
|
+
supercodex status [--json] [--codex-home <path>]
|
|
57
|
+
supercodex init [--dir <path>]
|
|
58
|
+
supercodex validate [--strict] [--json] [--codex-home <path>]
|
|
59
|
+
supercodex doctor [--fix] [--strict] [--json] [--mcp-connectivity]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Catalog:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
supercodex catalog list|search|show|sync
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
SuperClaude compatibility aliases:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
supercodex aliases list|show|packs|search
|
|
72
|
+
supercodex /sc:research [args...]
|
|
73
|
+
supercodex sc:brainstorming [args...]
|
|
74
|
+
supercodex research [args...]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Modes and personas:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
supercodex mode list|show|set|unset
|
|
81
|
+
supercodex persona list|show|set|unset
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
MCP:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
supercodex mcp add <name> <command...> [--env KEY=VALUE] [--force]
|
|
88
|
+
supercodex mcp add <name> --http <url> [--env KEY=VALUE] [--force]
|
|
89
|
+
supercodex mcp list
|
|
90
|
+
supercodex mcp install <catalog-id>
|
|
91
|
+
supercodex mcp remove <name>
|
|
92
|
+
supercodex mcp test <name>
|
|
93
|
+
supercodex mcp doctor [--connectivity]
|
|
94
|
+
supercodex mcp catalog list|search|show
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Workflow context:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
supercodex run plan|review|refactor|debug [--mode <name>] [--persona <name>] [--json]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## SuperClaude Alias Mapping
|
|
104
|
+
|
|
105
|
+
Built-in aliases (focused v2, grouped by pack):
|
|
106
|
+
|
|
107
|
+
- `core-planning`: `research`, `brainstorming`, `plan`, `spec`, `investigate`, `synthesize`
|
|
108
|
+
- `quality-review`: `review`, `audit`, `security`, `perf`, `test`, `checklist`
|
|
109
|
+
- `debug-investigation`: `debug`, `trace`, `repro`, `rootcause`, `triage`, `fixplan`
|
|
110
|
+
- `refactor-delivery`: `refactor`, `simplify`, `migrate`, `architect`, `doc`, `ship`
|
|
111
|
+
|
|
112
|
+
Key mappings:
|
|
113
|
+
|
|
114
|
+
- `/sc:research` -> `run plan --mode deep --persona architect`
|
|
115
|
+
- `/sc:brainstorming` -> `run plan --mode balanced --persona educator`
|
|
116
|
+
- `/sc:security` -> `run review --mode safe --persona reviewer`
|
|
117
|
+
- `/sc:rootcause` -> `run debug --mode deep --persona debugger`
|
|
118
|
+
- `/sc:migrate` -> `run refactor --mode safe --persona architect`
|
|
119
|
+
- `/sc:ship` -> `run refactor --mode fast --persona shipper`
|
|
120
|
+
|
|
121
|
+
Supported invocation forms:
|
|
122
|
+
|
|
123
|
+
- `/sc:<name>`
|
|
124
|
+
- `sc:<name>`
|
|
125
|
+
- `<name>` (plain alias form; command names still take precedence)
|
|
126
|
+
|
|
127
|
+
Inspect alias packs:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
supercodex aliases packs
|
|
131
|
+
supercodex aliases list --pack quality-review
|
|
132
|
+
supercodex aliases search security
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Project Template (`supercodex init`)
|
|
136
|
+
|
|
137
|
+
Creates:
|
|
138
|
+
|
|
139
|
+
- `.codex/config.toml`
|
|
140
|
+
- `.codex/README.md`
|
|
141
|
+
|
|
142
|
+
`init` is additive and preserves existing keys.
|
|
143
|
+
|
|
144
|
+
## MCP Examples
|
|
145
|
+
|
|
146
|
+
Install from catalog:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
supercodex mcp install filesystem
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Manual STDIO server:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
supercodex mcp add filesystem npx -y @modelcontextprotocol/server-filesystem . --env NODE_ENV=production
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Manual HTTP server:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
supercodex mcp add internal-api --http http://localhost:3333/mcp --env API_TOKEN=secret
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Config Snippet
|
|
165
|
+
|
|
166
|
+
```toml
|
|
167
|
+
[supercodex]
|
|
168
|
+
enabled = true
|
|
169
|
+
version = "0.2.0"
|
|
170
|
+
prompt_pack = "supercodex"
|
|
171
|
+
prompts_dir = "/home/user/.codex/prompts/supercodex"
|
|
172
|
+
|
|
173
|
+
[supercodex.runtime]
|
|
174
|
+
default_mode = "balanced"
|
|
175
|
+
default_persona = "architect"
|
|
176
|
+
catalog_version = "2026.02.28"
|
|
177
|
+
|
|
178
|
+
[supercodex.catalog]
|
|
179
|
+
source = "local"
|
|
180
|
+
installed_ids = ["filesystem"]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Conflict capture:
|
|
184
|
+
|
|
185
|
+
```toml
|
|
186
|
+
[supercodex.overrides]
|
|
187
|
+
"agents.supercodex_planner" = { description = "SuperCodex structured planning profile", prompt = "supercodex/plan.md" }
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Prompt Invocation Examples
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
codex --prompt-file ~/.codex/prompts/supercodex/plan.md "Plan a safe migration from v1 to v2"
|
|
194
|
+
codex --prompt-file ~/.codex/prompts/supercodex/review.md "Review this branch for regressions"
|
|
195
|
+
codex --prompt-file ~/.codex/prompts/supercodex/debug.md "Debug intermittent timeout in API tests"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Benchmarking
|
|
199
|
+
|
|
200
|
+
M0 benchmarking compares `codex_native` vs `supercodex` using the task corpus in `benchmarks/tasks/`.
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
npm run bench
|
|
204
|
+
npm run bench:score
|
|
205
|
+
npm run bench:check
|
|
206
|
+
npm run bench:tune-thresholds
|
|
207
|
+
npm run bench:tune-thresholds:last5
|
|
208
|
+
npm run bench:tune-thresholds:last5:write
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Artifacts:
|
|
212
|
+
|
|
213
|
+
- `benchmarks/results/<run_id>/results.json`
|
|
214
|
+
- `benchmarks/results/<run_id>/scorecard.json`
|
|
215
|
+
- `benchmarks/results/latest.md`
|
|
216
|
+
|
|
217
|
+
Threshold policy is locked in:
|
|
218
|
+
|
|
219
|
+
- `benchmarks/thresholds.json`
|
|
220
|
+
|
|
221
|
+
Tune policy from historical runs:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
npx tsx benchmarks/tune-thresholds.ts --last=5
|
|
225
|
+
npx tsx benchmarks/tune-thresholds.ts --last=5 --write
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
If `codex` is not available on PATH, harness preflight records it and baseline entries are marked as `infra_error`.
|
package/dist/backup.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface BackupResult {
|
|
2
|
+
backupDir: string;
|
|
3
|
+
backupFile: string | null;
|
|
4
|
+
}
|
|
5
|
+
export declare function formatBackupTimestamp(date: Date): string;
|
|
6
|
+
export declare function createTimestampedBackup(configPath: string, codexHome: string, now?: Date): Promise<BackupResult>;
|
package/dist/backup.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formatBackupTimestamp = formatBackupTimestamp;
|
|
7
|
+
exports.createTimestampedBackup = createTimestampedBackup;
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const fs_utils_1 = require("./fs-utils");
|
|
11
|
+
function formatBackupTimestamp(date) {
|
|
12
|
+
const year = date.getFullYear();
|
|
13
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
14
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
15
|
+
const hour = String(date.getHours()).padStart(2, "0");
|
|
16
|
+
const minute = String(date.getMinutes()).padStart(2, "0");
|
|
17
|
+
const second = String(date.getSeconds()).padStart(2, "0");
|
|
18
|
+
return `${year}-${month}-${day}-${hour}${minute}${second}`;
|
|
19
|
+
}
|
|
20
|
+
async function createTimestampedBackup(configPath, codexHome, now = new Date()) {
|
|
21
|
+
const baseDir = node_path_1.default.join(codexHome, "backups", formatBackupTimestamp(now));
|
|
22
|
+
let backupDir = baseDir;
|
|
23
|
+
let suffix = 1;
|
|
24
|
+
while (await (0, fs_utils_1.pathExists)(backupDir)) {
|
|
25
|
+
backupDir = `${baseDir}-${suffix}`;
|
|
26
|
+
suffix += 1;
|
|
27
|
+
}
|
|
28
|
+
await (0, promises_1.mkdir)(backupDir, { recursive: true });
|
|
29
|
+
if (await (0, fs_utils_1.pathExists)(configPath)) {
|
|
30
|
+
const backupFile = node_path_1.default.join(backupDir, "config.toml");
|
|
31
|
+
await (0, promises_1.copyFile)(configPath, backupFile);
|
|
32
|
+
return { backupDir, backupFile };
|
|
33
|
+
}
|
|
34
|
+
await (0, promises_1.writeFile)(node_path_1.default.join(backupDir, "README.txt"), "No config.toml existed when this backup was created.\n", "utf8");
|
|
35
|
+
return { backupDir, backupFile: null };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":";;;;;AAUA,sDASC;AAED,0DA4BC;AAjDD,0DAA6B;AAC7B,+CAA8D;AAE9D,yCAAwC;AAOxC,SAAgB,qBAAqB,CAAC,IAAU;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE1D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAC7D,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,SAAiB,EACjB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,IAAA,qBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QACnC,SAAS,GAAG,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,MAAM,IAAA,gBAAK,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,IAAI,MAAM,IAAA,qBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,IAAA,oBAAS,EACb,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAClC,wDAAwD,EACxD,MAAM,CACP,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC"}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createProgram = createProgram;
|
|
5
|
+
exports.runCli = runCli;
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const commands_1 = require("./commands");
|
|
9
|
+
const runtime_1 = require("./runtime");
|
|
10
|
+
function createProgram() {
|
|
11
|
+
const program = new commander_1.Command();
|
|
12
|
+
program
|
|
13
|
+
.name("supercodex")
|
|
14
|
+
.description("SuperCodex configuration framework for Codex CLI")
|
|
15
|
+
.version(constants_1.SUPERCODEX_VERSION);
|
|
16
|
+
(0, commands_1.registerCoreCommands)(program);
|
|
17
|
+
(0, commands_1.registerValidateCommand)(program);
|
|
18
|
+
(0, commands_1.registerDoctorCommands)(program);
|
|
19
|
+
(0, commands_1.registerCatalogCommands)(program);
|
|
20
|
+
(0, commands_1.registerAliasCommands)(program);
|
|
21
|
+
(0, commands_1.registerModeCommands)(program);
|
|
22
|
+
(0, commands_1.registerPersonaCommands)(program);
|
|
23
|
+
(0, commands_1.registerMcpCommands)(program);
|
|
24
|
+
(0, commands_1.registerRunCommands)(program);
|
|
25
|
+
return program;
|
|
26
|
+
}
|
|
27
|
+
async function runCli(argv = process.argv.slice(2)) {
|
|
28
|
+
const program = createProgram();
|
|
29
|
+
program.exitOverride();
|
|
30
|
+
process.exitCode = 0;
|
|
31
|
+
let effectiveArgv = argv;
|
|
32
|
+
try {
|
|
33
|
+
const dispatchResult = await (0, runtime_1.dispatchAliasArgv)(argv, {
|
|
34
|
+
projectRoot: process.cwd()
|
|
35
|
+
});
|
|
36
|
+
effectiveArgv = dispatchResult.argv;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
40
|
+
console.error(`Error: ${message}`);
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
await program.parseAsync(effectiveArgv, { from: "user" });
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error instanceof commander_1.CommanderError) {
|
|
49
|
+
if (error.code !== "commander.helpDisplayed") {
|
|
50
|
+
console.error(error.message);
|
|
51
|
+
}
|
|
52
|
+
process.exitCode = error.exitCode;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return process.exitCode ?? 0;
|
|
59
|
+
}
|
|
60
|
+
if (require.main === module) {
|
|
61
|
+
void runCli();
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAiBA,sCAkBC;AAED,wBAgCC;AApED,yCAAoD;AAEpD,2CAAiD;AACjD,yCAUoB;AACpB,uCAA8C;AAE9C,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,kDAAkD,CAAC;SAC/D,OAAO,CAAC,8BAAkB,CAAC,CAAC;IAE/B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,iCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,gCAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,8BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,8BAAmB,EAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,YAAY,EAAE,CAAC;IACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAErB,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,IAAA,2BAAiB,EAAC,IAAI,EAAE;YACnD,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;SAC3B,CAAC,CAAC;QACH,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,0BAAc,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAliasCommands = registerAliasCommands;
|
|
4
|
+
const registry_1 = require("../registry");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
function registerAliasCommands(program) {
|
|
7
|
+
const aliases = program.command("aliases").description("SuperClaude-style slash alias mappings");
|
|
8
|
+
aliases
|
|
9
|
+
.command("list")
|
|
10
|
+
.description("List alias mappings")
|
|
11
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
12
|
+
.option("--pack <name>", "Filter aliases by pack")
|
|
13
|
+
.option("--json", "Output JSON")
|
|
14
|
+
.action((options) => (0, utils_1.runCommand)(async () => {
|
|
15
|
+
const registryResult = await (0, registry_1.loadRegistry)({
|
|
16
|
+
codexHome: options.codexHome,
|
|
17
|
+
projectRoot: process.cwd()
|
|
18
|
+
});
|
|
19
|
+
const packName = normalizePackOption(options.pack);
|
|
20
|
+
ensurePackExists(registryResult.registry.alias_packs, packName);
|
|
21
|
+
const entries = (0, registry_1.listAliases)(registryResult.registry, { pack: packName });
|
|
22
|
+
if (Boolean(options.json)) {
|
|
23
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const packLabel = entry.pack ? ` [${entry.pack}]` : "";
|
|
28
|
+
console.log(`/sc:${entry.name} -> ${entry.target}${packLabel}`);
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
aliases
|
|
32
|
+
.command("show")
|
|
33
|
+
.description("Show a specific alias mapping")
|
|
34
|
+
.argument("<name>", "Alias name (supports /sc:name or sc:name)")
|
|
35
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
36
|
+
.option("--json", "Output JSON")
|
|
37
|
+
.action((name, options) => (0, utils_1.runCommand)(async () => {
|
|
38
|
+
const normalized = (0, registry_1.normalizeAliasToken)(name);
|
|
39
|
+
if (!normalized) {
|
|
40
|
+
throw new Error(`Invalid alias name "${String(name)}".`);
|
|
41
|
+
}
|
|
42
|
+
const registryResult = await (0, registry_1.loadRegistry)({
|
|
43
|
+
codexHome: options.codexHome,
|
|
44
|
+
projectRoot: process.cwd()
|
|
45
|
+
});
|
|
46
|
+
const entry = registryResult.registry.aliases[normalized.name];
|
|
47
|
+
if (!entry) {
|
|
48
|
+
throw new Error(`Alias "${name}" not found.`);
|
|
49
|
+
}
|
|
50
|
+
if (Boolean(options.json)) {
|
|
51
|
+
console.log(JSON.stringify(entry, null, 2));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log(`/sc:${entry.name}`);
|
|
55
|
+
console.log(`Target: ${entry.target}`);
|
|
56
|
+
console.log(`Description: ${entry.description}`);
|
|
57
|
+
if (entry.pack) {
|
|
58
|
+
console.log(`Pack: ${entry.pack}`);
|
|
59
|
+
}
|
|
60
|
+
if (entry.risk_level) {
|
|
61
|
+
console.log(`Risk: ${entry.risk_level}`);
|
|
62
|
+
}
|
|
63
|
+
if (entry.stability) {
|
|
64
|
+
console.log(`Stability: ${entry.stability}`);
|
|
65
|
+
}
|
|
66
|
+
if (entry.tags && entry.tags.length > 0) {
|
|
67
|
+
console.log(`Tags: ${entry.tags.join(", ")}`);
|
|
68
|
+
}
|
|
69
|
+
if (entry.default_mode) {
|
|
70
|
+
console.log(`Default mode: ${entry.default_mode}`);
|
|
71
|
+
}
|
|
72
|
+
if (entry.default_persona) {
|
|
73
|
+
console.log(`Default persona: ${entry.default_persona}`);
|
|
74
|
+
}
|
|
75
|
+
console.log(`Forward args: ${entry.forward_args !== false ? "yes" : "no"}`);
|
|
76
|
+
}));
|
|
77
|
+
aliases
|
|
78
|
+
.command("packs")
|
|
79
|
+
.description("List alias packs")
|
|
80
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
81
|
+
.option("--json", "Output JSON")
|
|
82
|
+
.action((options) => (0, utils_1.runCommand)(async () => {
|
|
83
|
+
const registryResult = await (0, registry_1.loadRegistry)({
|
|
84
|
+
codexHome: options.codexHome,
|
|
85
|
+
projectRoot: process.cwd()
|
|
86
|
+
});
|
|
87
|
+
const entries = (0, registry_1.listAliasPacks)(registryResult.registry);
|
|
88
|
+
if (Boolean(options.json)) {
|
|
89
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
for (const entry of entries) {
|
|
93
|
+
console.log(`${entry.name} (${entry.aliases.length})`);
|
|
94
|
+
console.log(` ${entry.description}`);
|
|
95
|
+
}
|
|
96
|
+
}));
|
|
97
|
+
aliases
|
|
98
|
+
.command("search")
|
|
99
|
+
.description("Search alias mappings")
|
|
100
|
+
.argument("<query>", "Text query")
|
|
101
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
102
|
+
.option("--pack <name>", "Filter aliases by pack")
|
|
103
|
+
.option("--json", "Output JSON")
|
|
104
|
+
.action((query, options) => (0, utils_1.runCommand)(async () => {
|
|
105
|
+
const registryResult = await (0, registry_1.loadRegistry)({
|
|
106
|
+
codexHome: options.codexHome,
|
|
107
|
+
projectRoot: process.cwd()
|
|
108
|
+
});
|
|
109
|
+
const packName = normalizePackOption(options.pack);
|
|
110
|
+
ensurePackExists(registryResult.registry.alias_packs, packName);
|
|
111
|
+
const entries = (0, registry_1.searchAliases)(registryResult.registry, query, { pack: packName });
|
|
112
|
+
if (Boolean(options.json)) {
|
|
113
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (entries.length === 0) {
|
|
117
|
+
console.log("No aliases matched.");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
for (const entry of entries) {
|
|
121
|
+
const packLabel = entry.pack ? ` [${entry.pack}]` : "";
|
|
122
|
+
console.log(`/sc:${entry.name} -> ${entry.target}${packLabel}`);
|
|
123
|
+
}
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
function ensurePackExists(packs, pack) {
|
|
127
|
+
if (!pack) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (!Object.hasOwn(packs, pack)) {
|
|
131
|
+
throw new Error(`Alias pack "${pack}" not found.`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function normalizePackOption(value) {
|
|
135
|
+
if (!value) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const normalized = value.trim();
|
|
139
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=aliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../src/commands/aliases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCatalogCommands = registerCatalogCommands;
|
|
4
|
+
exports.registerMcpCatalogCommands = registerMcpCatalogCommands;
|
|
5
|
+
const operations_1 = require("../operations");
|
|
6
|
+
const registry_1 = require("../registry");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
function registerCatalogCommands(program) {
|
|
9
|
+
const catalog = program.command("catalog").description("Browse and sync bundled MCP catalog");
|
|
10
|
+
attachCatalogSubcommands(catalog, {
|
|
11
|
+
showPrettyByDefault: true,
|
|
12
|
+
includeSync: true
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function registerMcpCatalogCommands(parent) {
|
|
16
|
+
const catalog = parent.command("catalog").description("Browse MCP catalog");
|
|
17
|
+
attachCatalogSubcommands(catalog, {
|
|
18
|
+
showPrettyByDefault: false,
|
|
19
|
+
includeSync: false
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function attachCatalogSubcommands(catalog, options) {
|
|
23
|
+
catalog
|
|
24
|
+
.command("list")
|
|
25
|
+
.description("List catalog entries")
|
|
26
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
27
|
+
.option("--json", "Output JSON")
|
|
28
|
+
.action((cmdOptions) => (0, utils_1.runCommand)(async () => {
|
|
29
|
+
const registry = await (0, registry_1.loadRegistry)({ codexHome: cmdOptions.codexHome });
|
|
30
|
+
const entries = (0, registry_1.listCatalogEntries)(registry.registry);
|
|
31
|
+
if (Boolean(cmdOptions.json)) {
|
|
32
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
console.log(`${entry.id} (${entry.transport}) - ${entry.description}`);
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
catalog
|
|
40
|
+
.command("search")
|
|
41
|
+
.description("Search catalog entries")
|
|
42
|
+
.argument("<query>", "Search query")
|
|
43
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
44
|
+
.option("--json", "Output JSON")
|
|
45
|
+
.action((query, cmdOptions) => (0, utils_1.runCommand)(async () => {
|
|
46
|
+
const registry = await (0, registry_1.loadRegistry)({ codexHome: cmdOptions.codexHome });
|
|
47
|
+
const entries = (0, registry_1.searchCatalogEntries)(registry.registry, query);
|
|
48
|
+
if (Boolean(cmdOptions.json)) {
|
|
49
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (entries.length === 0) {
|
|
53
|
+
console.log("No matching catalog entries.");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
console.log(`${entry.id} (${entry.transport}) - ${entry.description}`);
|
|
58
|
+
}
|
|
59
|
+
}));
|
|
60
|
+
catalog
|
|
61
|
+
.command("show")
|
|
62
|
+
.description("Show catalog entry")
|
|
63
|
+
.argument("<id>", "Catalog entry id")
|
|
64
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
65
|
+
.option("--json", "Output JSON")
|
|
66
|
+
.action((id, cmdOptions) => (0, utils_1.runCommand)(async () => {
|
|
67
|
+
const registry = await (0, registry_1.loadRegistry)({ codexHome: cmdOptions.codexHome });
|
|
68
|
+
const entry = (0, registry_1.getCatalogEntry)(registry.registry, id);
|
|
69
|
+
if (!entry) {
|
|
70
|
+
throw new Error(`Catalog entry "${id}" not found.`);
|
|
71
|
+
}
|
|
72
|
+
if (Boolean(cmdOptions.json)) {
|
|
73
|
+
console.log(JSON.stringify(entry, null, 2));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!options.showPrettyByDefault) {
|
|
77
|
+
console.log(JSON.stringify(entry, null, 2));
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
console.log(`${entry.id} (${entry.transport})`);
|
|
81
|
+
console.log(entry.description);
|
|
82
|
+
if (entry.transport === "stdio") {
|
|
83
|
+
console.log(`Command: ${entry.command} ${(entry.args ?? []).join(" ")}`.trim());
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(`URL: ${entry.url}`);
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
if (options.includeSync) {
|
|
90
|
+
catalog
|
|
91
|
+
.command("sync")
|
|
92
|
+
.description("Sync catalog metadata into config")
|
|
93
|
+
.option("--codex-home <path>", "Override Codex home directory")
|
|
94
|
+
.action((cmdOptions) => (0, utils_1.runCommand)(async () => {
|
|
95
|
+
const result = await (0, operations_1.syncCatalogMetadata)({
|
|
96
|
+
codexHome: cmdOptions.codexHome
|
|
97
|
+
});
|
|
98
|
+
console.log(`Backup: ${result.backup.backupDir}`);
|
|
99
|
+
console.log(result.changed ? "Catalog metadata updated." : "Catalog metadata already current.");
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":";;AAMA,0DAOC;AAED,gEAMC;AAnBD,8CAAoD;AACpD,0CAAsG;AACtG,mCAAqC;AAErC,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IAE9F,wBAAwB,CAAC,OAAO,EAAE;QAChC,mBAAmB,EAAE,IAAI;QACzB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAAe;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC5E,wBAAwB,CAAC,OAAO,EAAE;QAChC,mBAAmB,EAAE,KAAK;QAC1B,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;AACL,CAAC;AAOD,SAAS,wBAAwB,CAAC,OAAgB,EAAE,OAA6B;IAC/E,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CACrB,IAAA,kBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAA+B,EAAE,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAA,6BAAkB,EAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wBAAwB,CAAC;SACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAC5B,IAAA,kBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAA+B,EAAE,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAA,+BAAoB,EAAC,QAAQ,CAAC,QAAQ,EAAE,KAAe,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;SACpC,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CACzB,IAAA,kBAAU,EAAC,KAAK,IAAI,EAAE;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAY,EAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAA+B,EAAE,CAAC,CAAC;QAC/F,MAAM,KAAK,GAAG,IAAA,0BAAe,EAAC,QAAQ,CAAC,QAAQ,EAAE,EAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;aACJ,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,mCAAmC,CAAC;aAChD,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;aAC9D,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CACrB,IAAA,kBAAU,EAAC,KAAK,IAAI,EAAE;YACpB,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAmB,EAAC;gBACvC,SAAS,EAAE,UAAU,CAAC,SAA+B;aACtD,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAClG,CAAC,CAAC,CACH,CAAC;IACN,CAAC;AACH,CAAC"}
|