@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.
Files changed (110) hide show
  1. package/README.md +228 -0
  2. package/dist/backup.d.ts +6 -0
  3. package/dist/backup.js +37 -0
  4. package/dist/backup.js.map +1 -0
  5. package/dist/cli.d.ts +4 -0
  6. package/dist/cli.js +63 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/aliases.d.ts +2 -0
  9. package/dist/commands/aliases.js +141 -0
  10. package/dist/commands/aliases.js.map +1 -0
  11. package/dist/commands/catalog.d.ts +3 -0
  12. package/dist/commands/catalog.js +103 -0
  13. package/dist/commands/catalog.js.map +1 -0
  14. package/dist/commands/core.d.ts +2 -0
  15. package/dist/commands/core.js +111 -0
  16. package/dist/commands/core.js.map +1 -0
  17. package/dist/commands/doctor.d.ts +3 -0
  18. package/dist/commands/doctor.js +72 -0
  19. package/dist/commands/doctor.js.map +1 -0
  20. package/dist/commands/index.d.ts +9 -0
  21. package/dist/commands/index.js +26 -0
  22. package/dist/commands/index.js.map +1 -0
  23. package/dist/commands/mcp.d.ts +2 -0
  24. package/dist/commands/mcp.js +128 -0
  25. package/dist/commands/mcp.js.map +1 -0
  26. package/dist/commands/mode.d.ts +2 -0
  27. package/dist/commands/mode.js +73 -0
  28. package/dist/commands/mode.js.map +1 -0
  29. package/dist/commands/persona.d.ts +2 -0
  30. package/dist/commands/persona.js +70 -0
  31. package/dist/commands/persona.js.map +1 -0
  32. package/dist/commands/run.d.ts +2 -0
  33. package/dist/commands/run.js +50 -0
  34. package/dist/commands/run.js.map +1 -0
  35. package/dist/commands/utils.d.ts +4 -0
  36. package/dist/commands/utils.js +28 -0
  37. package/dist/commands/utils.js.map +1 -0
  38. package/dist/commands/validate.d.ts +2 -0
  39. package/dist/commands/validate.js +56 -0
  40. package/dist/commands/validate.js.map +1 -0
  41. package/dist/config.d.ts +33 -0
  42. package/dist/config.js +433 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/constants.d.ts +3 -0
  45. package/dist/constants.js +7 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/doctor/checks.d.ts +18 -0
  48. package/dist/doctor/checks.js +100 -0
  49. package/dist/doctor/checks.js.map +1 -0
  50. package/dist/doctor/fix.d.ts +6 -0
  51. package/dist/doctor/fix.js +99 -0
  52. package/dist/doctor/fix.js.map +1 -0
  53. package/dist/doctor/index.d.ts +4 -0
  54. package/dist/doctor/index.js +21 -0
  55. package/dist/doctor/index.js.map +1 -0
  56. package/dist/doctor/report.d.ts +3 -0
  57. package/dist/doctor/report.js +21 -0
  58. package/dist/doctor/report.js.map +1 -0
  59. package/dist/doctor/types.d.ts +16 -0
  60. package/dist/doctor/types.js +3 -0
  61. package/dist/doctor/types.js.map +1 -0
  62. package/dist/fs-utils.d.ts +4 -0
  63. package/dist/fs-utils.js +31 -0
  64. package/dist/fs-utils.js.map +1 -0
  65. package/dist/mcp.d.ts +21 -0
  66. package/dist/mcp.js +222 -0
  67. package/dist/mcp.js.map +1 -0
  68. package/dist/operations.d.ts +108 -0
  69. package/dist/operations.js +388 -0
  70. package/dist/operations.js.map +1 -0
  71. package/dist/paths.d.ts +12 -0
  72. package/dist/paths.js +41 -0
  73. package/dist/paths.js.map +1 -0
  74. package/dist/project-init.d.ts +8 -0
  75. package/dist/project-init.js +92 -0
  76. package/dist/project-init.js.map +1 -0
  77. package/dist/prompts.d.ts +9 -0
  78. package/dist/prompts.js +157 -0
  79. package/dist/prompts.js.map +1 -0
  80. package/dist/registry/aliases.d.ts +16 -0
  81. package/dist/registry/aliases.js +347 -0
  82. package/dist/registry/aliases.js.map +1 -0
  83. package/dist/registry/builtins.d.ts +8 -0
  84. package/dist/registry/builtins.js +188 -0
  85. package/dist/registry/builtins.js.map +1 -0
  86. package/dist/registry/index.d.ts +4 -0
  87. package/dist/registry/index.js +21 -0
  88. package/dist/registry/index.js.map +1 -0
  89. package/dist/registry/loader.d.ts +16 -0
  90. package/dist/registry/loader.js +655 -0
  91. package/dist/registry/loader.js.map +1 -0
  92. package/dist/registry/types.d.ts +79 -0
  93. package/dist/registry/types.js +3 -0
  94. package/dist/registry/types.js.map +1 -0
  95. package/dist/runtime/alias-dispatch.d.ts +10 -0
  96. package/dist/runtime/alias-dispatch.js +119 -0
  97. package/dist/runtime/alias-dispatch.js.map +1 -0
  98. package/dist/runtime/compat.d.ts +6 -0
  99. package/dist/runtime/compat.js +23 -0
  100. package/dist/runtime/compat.js.map +1 -0
  101. package/dist/runtime/context.d.ts +23 -0
  102. package/dist/runtime/context.js +59 -0
  103. package/dist/runtime/context.js.map +1 -0
  104. package/dist/runtime/index.d.ts +4 -0
  105. package/dist/runtime/index.js +21 -0
  106. package/dist/runtime/index.js.map +1 -0
  107. package/dist/runtime/workflow.d.ts +18 -0
  108. package/dist/runtime/workflow.js +45 -0
  109. package/dist/runtime/workflow.js.map +1 -0
  110. 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`.
@@ -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
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ export declare function createProgram(): Command;
4
+ export declare function runCli(argv?: string[]): Promise<number>;
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
@@ -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,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerAliasCommands(program: Command): void;
@@ -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,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerCatalogCommands(program: Command): void;
3
+ export declare function registerMcpCatalogCommands(parent: Command): void;
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerCoreCommands(program: Command): void;