@kbediako/codex-orchestrator 0.1.20 → 0.1.21

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 CHANGED
@@ -137,14 +137,17 @@ codex-orchestrator skills install
137
137
 
138
138
  Options:
139
139
  - `--force` overwrites existing files.
140
+ - `--only <skills>` installs only selected skills (comma-separated). Combine with `--force` to overwrite only those.
140
141
  - `--codex-home <path>` targets a different Codex home directory.
141
142
 
142
143
  Bundled skills (may vary by release):
144
+ - `collab-subagents-first`
143
145
  - `delegation-usage`
144
146
  - `standalone-review`
145
147
  - `docs-first`
146
148
  - `collab-evals`
147
149
  - `collab-deliberation`
150
+ - `release`
148
151
  - `delegate-early` (compatibility alias; use `delegation-usage`)
149
152
 
150
153
  ## DevTools readiness
@@ -605,7 +605,15 @@ async function handleSkills(rawArgs) {
605
605
  const format = flags['format'] === 'json' ? 'json' : 'text';
606
606
  const force = flags['force'] === true;
607
607
  const codexHome = readStringFlag(flags, 'codex-home');
608
- const result = await installSkills({ force, codexHome });
608
+ const onlyRaw = flags['only'];
609
+ let only;
610
+ if (onlyRaw !== undefined) {
611
+ if (typeof onlyRaw !== 'string') {
612
+ throw new Error('--only requires a comma-separated list of skill names.');
613
+ }
614
+ only = onlyRaw.split(',').map((entry) => entry.trim()).filter(Boolean);
615
+ }
616
+ const result = await installSkills({ force, codexHome, only });
609
617
  if (format === 'json') {
610
618
  console.log(JSON.stringify(result, null, 2));
611
619
  }
@@ -946,6 +954,7 @@ Commands:
946
954
  --format json Emit machine-readable output (dry-run only).
947
955
  skills install Install bundled skills into $CODEX_HOME/skills.
948
956
  --force Overwrite existing skill files.
957
+ --only <skills> Install only selected skills (comma-separated).
949
958
  --codex-home <path> Override the target Codex home directory.
950
959
  --format json Emit machine-readable output.
951
960
  mcp serve [--repo <path>] [--dry-run] [-- <extra args>]
@@ -972,6 +981,7 @@ function printSkillsHelp() {
972
981
  Commands:
973
982
  install Install bundled skills into $CODEX_HOME/skills.
974
983
  --force Overwrite existing skill files.
984
+ --only <skills> Install only selected skills (comma-separated).
975
985
  --codex-home <path> Override the target Codex home directory.
976
986
  --format json Emit machine-readable output.
977
987
  `);
@@ -12,18 +12,28 @@ export async function installSkills(options = {}) {
12
12
  const targetRoot = join(codexHome, 'skills');
13
13
  const written = [];
14
14
  const skipped = [];
15
- const skillNames = await listSkillNames(sourceRoot);
16
- await copyDir(sourceRoot, targetRoot, {
15
+ const availableSkills = await listSkillNames(sourceRoot);
16
+ const selectedSkills = resolveSelectedSkills(availableSkills, options.only);
17
+ const copyOptions = {
17
18
  force: options.force ?? false,
18
19
  written,
19
20
  skipped
20
- });
21
+ };
22
+ if (selectedSkills.length === availableSkills.length) {
23
+ await copyDir(sourceRoot, targetRoot, copyOptions);
24
+ }
25
+ else {
26
+ await mkdir(targetRoot, { recursive: true });
27
+ for (const skill of selectedSkills) {
28
+ await copyDir(join(sourceRoot, skill), join(targetRoot, skill), copyOptions);
29
+ }
30
+ }
21
31
  return {
22
32
  written,
23
33
  skipped,
24
34
  sourceRoot,
25
35
  targetRoot,
26
- skills: skillNames
36
+ skills: selectedSkills
27
37
  };
28
38
  }
29
39
  export function formatSkillsInstallSummary(result, cwd = process.cwd()) {
@@ -61,6 +71,22 @@ async function listSkillNames(sourceRoot) {
61
71
  const entries = await readdir(sourceRoot, { withFileTypes: true });
62
72
  return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
63
73
  }
74
+ function resolveSelectedSkills(availableSkills, only) {
75
+ if (!only) {
76
+ return availableSkills;
77
+ }
78
+ const trimmed = only.map((entry) => entry.trim()).filter(Boolean);
79
+ if (trimmed.length === 0) {
80
+ throw new Error('No skills specified for --only.');
81
+ }
82
+ const requested = Array.from(new Set(trimmed));
83
+ const available = new Set(availableSkills);
84
+ const unknown = requested.filter((skill) => !available.has(skill));
85
+ if (unknown.length > 0) {
86
+ throw new Error(`Unknown skill(s): ${unknown.join(', ')}. Available skills: ${availableSkills.join(', ')}`);
87
+ }
88
+ return requested;
89
+ }
64
90
  async function assertDirectory(path) {
65
91
  const info = await stat(path).catch(() => null);
66
92
  if (!info || !info.isDirectory()) {
package/docs/README.md CHANGED
@@ -103,7 +103,7 @@ Use `npx @kbediako/codex-orchestrator resume --run <run-id>` to continue interru
103
103
  - `codex-orchestrator init codex [--cwd <path>] [--force]`: copy starter templates into a repo (includes `mcp-client.json` and `AGENTS.md`; no overwrite unless `--force`).
104
104
  - `codex-orchestrator doctor [--format json]`: check optional tooling dependencies and print install commands.
105
105
  - `codex-orchestrator devtools setup [--yes]`: print DevTools MCP setup instructions (`--yes` applies `codex mcp add ...`).
106
- - `codex-orchestrator skills install [--force] [--codex-home <path>]`: install bundled skills into `$CODEX_HOME/skills` (global skills remain the primary reference when installed).
106
+ - `codex-orchestrator skills install [--force] [--only <skills>] [--codex-home <path>]`: install bundled skills into `$CODEX_HOME/skills` (global skills remain the primary reference when installed).
107
107
  - `codex-orchestrator self-check --format json`: emit a safe JSON health payload for smoke tests.
108
108
  - `codex-orchestrator --version`: print the package version.
109
109
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kbediako/codex-orchestrator",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",