@a5c-ai/babysitter-codex 0.1.11-staging.f022ecec → 0.1.11-staging.f3bdcf16

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.
@@ -41,7 +41,7 @@
41
41
  ],
42
42
  "brandColor": "#0F766E",
43
43
  "composerIcon": "./assets/icon.svg",
44
- "logo": "./assets/logo.svg",
44
+ "logo": "./assets/logo.png",
45
45
  "screenshots": []
46
46
  }
47
47
  }
package/README.md CHANGED
@@ -10,9 +10,10 @@ This package ships a real Codex plugin bundle:
10
10
  - `hooks/`
11
11
 
12
12
  It still uses the Babysitter SDK CLI and the shared `~/.a5c` process-library
13
- state. The installer registers the plugin bundle and also materializes the
14
- active Codex `skills/`, `hooks/`, and `hooks.json` surface at the selected
15
- scope so Codex can execute the Babysitter commands and hook scripts directly.
13
+ state. Global install writes the plugin bundle to `~/.agents/plugins/babysitter`
14
+ and updates `~/.agents/plugins/marketplace.json` so Codex can load the plugin
15
+ through its marketplace surface. Workspace install continues to materialize a
16
+ workspace-local Codex surface for team setup.
16
17
 
17
18
  ## Installation
18
19
 
@@ -25,8 +26,8 @@ npm install -g @a5c-ai/babysitter-sdk
25
26
  clone the repo and install the plugin globally:
26
27
 
27
28
  ```bash
28
- git clone https://github.com/a5c-ai/babysitter.git
29
- cd babysitter
29
+ npx -y @a5c-ai/babysitter-codex install --global
30
+
30
31
  codex
31
32
 
32
33
  > /plugins
@@ -50,9 +51,9 @@ The process library is fetched and bound through the SDK CLI in
50
51
 
51
52
  After `install --workspace`, the important files are:
52
53
 
53
- - `plugins/babysitter/.codex-plugin/plugin.json`
54
- - `plugins/babysitter/skills/babysit/SKILL.md`
55
- - `plugins/babysitter/hooks.json`
54
+ - `.agents/plugins/babysitter/.codex-plugin/plugin.json`
55
+ - `.agents/plugins/babysitter/skills/babysit/SKILL.md`
56
+ - `.agents/plugins/babysitter/hooks.json`
56
57
  - `.codex/skills/`
57
58
  - `.codex/hooks/`
58
59
  - `.codex/hooks.json`
@@ -67,13 +68,10 @@ Verify the installed plugin bundle:
67
68
 
68
69
  ```bash
69
70
  npm ls -g @a5c-ai/babysitter-codex --depth=0
70
- test -f ~/.codex/plugins/babysitter/.codex-plugin/plugin.json
71
- test -f ~/.codex/plugins/babysitter/hooks.json
72
- test -f ~/.codex/plugins/babysitter/hooks/babysitter-stop-hook.sh
73
- test -f ~/.codex/plugins/babysitter/skills/babysit/SKILL.md
74
- test -f ~/.codex/hooks.json
75
- test -f ~/.codex/hooks/babysitter-stop-hook.sh
76
- test -f ~/.codex/skills/babysit/SKILL.md
71
+ test -f ~/.agents/plugins/babysitter/.codex-plugin/plugin.json
72
+ test -f ~/.agents/plugins/babysitter/hooks.json
73
+ test -f ~/.agents/plugins/babysitter/hooks/babysitter-stop-hook.sh
74
+ test -f ~/.agents/plugins/babysitter/skills/babysit/SKILL.md
77
75
  test -f ~/.agents/plugins/marketplace.json
78
76
  ```
79
77
 
@@ -83,9 +81,10 @@ Verify the active shared process-library binding:
83
81
  babysitter process-library:active --json
84
82
  ```
85
83
 
86
- On native Windows, Codex currently does not execute hooks. The plugin still
87
- installs correctly, but the lifecycle hooks will not fire until Codex enables
88
- Windows hook execution.
84
+ On native Windows, Codex hooks require **Codex CLI >= 0.119.0** (released
85
+ 2026-04-10, [openai/codex#17268](https://github.com/openai/codex/pull/17268)).
86
+ Older Codex versions silently skipped hook execution on Windows. If hooks do
87
+ not fire after install, run `codex --version` and upgrade if needed.
89
88
 
90
89
  ## License
91
90
 
Binary file
@@ -7,6 +7,7 @@ const { spawnSync } = require('child_process');
7
7
 
8
8
  const PLUGIN_NAME = 'babysitter';
9
9
  const PLUGIN_CATEGORY = 'Coding';
10
+ const LEGACY_MARKETPLACE_PLUGIN_NAMES = ['babysitter-codex'];
10
11
  const LEGACY_SKILL_NAMES = [
11
12
  'babysit',
12
13
  'babysitter-codex',
@@ -58,12 +59,13 @@ const DEFAULT_MARKETPLACE = {
58
59
  };
59
60
  const PLUGIN_BUNDLE_ENTRIES = [
60
61
  '.codex-plugin',
61
- '.app.json',
62
62
  'assets',
63
63
  'hooks',
64
64
  'hooks.json',
65
65
  'skills',
66
- 'babysitter.lock.json',
66
+ '.app.json',
67
+ 'plugin.lock.json',
68
+ 'README.md',
67
69
  ];
68
70
 
69
71
  function getCodexHome() {
@@ -88,7 +90,7 @@ function getHomePluginRoot() {
88
90
  if (process.env.BABYSITTER_CODEX_PLUGIN_DIR) {
89
91
  return path.resolve(process.env.BABYSITTER_CODEX_PLUGIN_DIR, PLUGIN_NAME);
90
92
  }
91
- return path.join(getCodexHome(), 'plugins', PLUGIN_NAME);
93
+ return path.join(getUserHome(), '.agents', 'plugins', PLUGIN_NAME);
92
94
  }
93
95
 
94
96
  function getHomeMarketplacePath() {
@@ -316,12 +318,14 @@ function ensureExecutable(filePath) {
316
318
  }
317
319
 
318
320
  function normalizeMarketplaceSourcePath(marketplacePath, pluginSourcePath) {
319
- let next = pluginSourcePath;
320
- if (path.isAbsolute(next)) {
321
- next = path.relative(path.dirname(marketplacePath), next);
322
- }
321
+ let next = path.relative(path.dirname(marketplacePath), pluginSourcePath);
323
322
  next = String(next || '').replace(/\\/g, '/');
324
- if (!next.startsWith('./') && !next.startsWith('../')) {
323
+ if (!next || next === '.' || next.startsWith('../')) {
324
+ throw new Error(
325
+ `Plugin source path must live under ${path.dirname(marketplacePath)} so Codex can load it via a ./-prefixed marketplace entry.`,
326
+ );
327
+ }
328
+ if (!next.startsWith('./')) {
325
329
  next = `./${next}`;
326
330
  }
327
331
  return next;
@@ -347,15 +351,15 @@ function ensureMarketplaceEntry(marketplacePath, pluginSourcePath) {
347
351
  },
348
352
  category: PLUGIN_CATEGORY,
349
353
  };
350
- const existingIndex = Array.isArray(marketplace.plugins)
351
- ? marketplace.plugins.findIndex((entry) => entry && entry.name === PLUGIN_NAME)
352
- : -1;
353
354
  if (!Array.isArray(marketplace.plugins)) {
354
355
  marketplace.plugins = [nextEntry];
355
- } else if (existingIndex >= 0) {
356
- marketplace.plugins[existingIndex] = nextEntry;
357
356
  } else {
358
- marketplace.plugins.push(nextEntry);
357
+ const sanitized = marketplace.plugins.filter((entry) => (
358
+ entry &&
359
+ entry.name !== PLUGIN_NAME &&
360
+ !LEGACY_MARKETPLACE_PLUGIN_NAMES.includes(entry.name)
361
+ ));
362
+ marketplace.plugins = [...sanitized, nextEntry];
359
363
  }
360
364
  writeJson(marketplacePath, marketplace);
361
365
  return nextEntry;
@@ -369,7 +373,11 @@ function removeMarketplaceEntry(marketplacePath) {
369
373
  if (!Array.isArray(marketplace.plugins)) {
370
374
  return;
371
375
  }
372
- marketplace.plugins = marketplace.plugins.filter((entry) => entry && entry.name !== PLUGIN_NAME);
376
+ marketplace.plugins = marketplace.plugins.filter((entry) => (
377
+ entry &&
378
+ entry.name !== PLUGIN_NAME &&
379
+ !LEGACY_MARKETPLACE_PLUGIN_NAMES.includes(entry.name)
380
+ ));
373
381
  writeJson(marketplacePath, marketplace);
374
382
  }
375
383
 
@@ -489,8 +497,11 @@ function warnWindowsHooks() {
489
497
  if (process.platform !== 'win32') {
490
498
  return;
491
499
  }
492
- console.warn('[babysitter] Warning: Codex hooks are currently disabled on native Windows.');
493
- console.warn('[babysitter] The plugin will install correctly, but SessionStart/UserPromptSubmit/Stop hooks will not fire until Codex enables Windows hook execution.');
500
+ // Codex enabled Windows hooks in v0.119.0 (2026-04-10, openai/codex#17268).
501
+ // Older Codex CLIs still skip hook execution on Windows; warn so users on
502
+ // pinned/older versions know to upgrade.
503
+ console.warn('[babysitter] Note: Codex hooks on Windows require Codex CLI >= 0.119.0.');
504
+ console.warn('[babysitter] If hooks do not fire, run `codex --version` and upgrade if you are below 0.119.0.');
494
505
  }
495
506
 
496
507
  module.exports = {
package/bin/install.js CHANGED
@@ -9,7 +9,6 @@ const {
9
9
  getCodexHome,
10
10
  getHomeMarketplacePath,
11
11
  getHomePluginRoot,
12
- installCodexSurface,
13
12
  mergeCodexConfigFile,
14
13
  warnWindowsHooks,
15
14
  } = require('./install-shared');
@@ -27,7 +26,6 @@ function main() {
27
26
  copyPluginBundle(PACKAGE_ROOT, pluginRoot);
28
27
  ensureMarketplaceEntry(marketplacePath, pluginRoot);
29
28
  mergeCodexConfigFile(path.join(codexHome, 'config.toml'));
30
- installCodexSurface(PACKAGE_ROOT, codexHome);
31
29
 
32
30
  const active = ensureGlobalProcessLibrary(PACKAGE_ROOT);
33
31
  console.log(`[babysitter] marketplace: ${marketplacePath}`);
@@ -38,7 +36,7 @@ function main() {
38
36
  console.log(`[babysitter] process library state: ${active.stateFile}`);
39
37
  warnWindowsHooks();
40
38
  console.log('[babysitter] Installation complete!');
41
- console.log('[babysitter] Restart Codex to pick up the installed plugin and config changes.');
39
+ console.log('[babysitter] Restart Codex to pick up the installed plugin and config changes, then run Codex and install Babysitter from `/plugins`.');
42
40
  } catch (err) {
43
41
  console.error(`[babysitter] Failed to install plugin: ${err.message}`);
44
42
  process.exitCode = 1;
package/hooks.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "hooks": {
3
3
  "SessionStart": [
4
4
  {
5
- "matcher": "*",
5
+ "matcher": ".*",
6
6
  "hooks": [
7
7
  {
8
8
  "type": "command",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "UserPromptSubmit": [
15
15
  {
16
- "matcher": "*",
16
+ "matcher": ".*",
17
17
  "hooks": [
18
18
  {
19
19
  "type": "command",
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "Stop": [
26
26
  {
27
- "matcher": "*",
27
+ "matcher": ".*",
28
28
  "hooks": [
29
29
  {
30
30
  "type": "command",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a5c-ai/babysitter-codex",
3
- "version": "0.1.11-staging.f022ecec",
3
+ "version": "0.1.11-staging.f3bdcf16",
4
4
  "description": "Babysitter Codex skill bundle and integration package for OpenAI Codex CLI with SDK-managed process-library bootstrapping, 15 orchestration modes, and BOM-safe SKILL installation",
5
5
  "scripts": {
6
6
  "test": "node test/integration.test.js && node test/packaged-install.test.js",
@@ -17,14 +17,15 @@
17
17
  },
18
18
  "files": [
19
19
  ".codex-plugin/",
20
- ".app.json",
21
20
  "assets/",
22
21
  "hooks/",
23
22
  "hooks.json",
24
23
  "skills/",
24
+ ".app.json",
25
25
  "bin/",
26
26
  "scripts/",
27
- "babysitter.lock.json"
27
+ "plugin.lock.json",
28
+ "README.md"
28
29
  ],
29
30
  "keywords": [
30
31
  "babysitter",
@@ -45,6 +46,6 @@
45
46
  },
46
47
  "homepage": "https://github.com/a5c-ai/babysitter/tree/main/plugins/babysitter-codex#readme",
47
48
  "dependencies": {
48
- "@a5c-ai/babysitter-sdk": "0.0.188-staging.f022ecec"
49
+ "@a5c-ai/babysitter-sdk": "0.0.188-staging.f3bdcf16"
49
50
  }
50
51
  }
@@ -0,0 +1,153 @@
1
+ {
2
+ "lockVersion": 1,
3
+ "pluginId": "ai.a5c.babysitter",
4
+ "pluginVersion": "0.1.5",
5
+ "generatedBy": "@a5c-ai/babysitter-codex",
6
+ "generatedAt": "2026-03-11T00:00:00.000Z",
7
+ "skills": [
8
+ {
9
+ "id": "assimilate",
10
+ "vendoredPath": "skills/assimilate",
11
+ "source": {
12
+ "type": "local",
13
+ "path": "skills/assimilate"
14
+ }
15
+ },
16
+ {
17
+ "id": "babysit",
18
+ "vendoredPath": "skills/babysit",
19
+ "source": {
20
+ "type": "local",
21
+ "path": "skills/babysit"
22
+ }
23
+ },
24
+ {
25
+ "id": "call",
26
+ "vendoredPath": "skills/call",
27
+ "source": {
28
+ "type": "local",
29
+ "path": "skills/call"
30
+ }
31
+ },
32
+ {
33
+ "id": "doctor",
34
+ "vendoredPath": "skills/doctor",
35
+ "source": {
36
+ "type": "local",
37
+ "path": "skills/doctor"
38
+ }
39
+ },
40
+ {
41
+ "id": "forever",
42
+ "vendoredPath": "skills/forever",
43
+ "source": {
44
+ "type": "local",
45
+ "path": "skills/forever"
46
+ }
47
+ },
48
+ {
49
+ "id": "help",
50
+ "vendoredPath": "skills/help",
51
+ "source": {
52
+ "type": "local",
53
+ "path": "skills/help"
54
+ }
55
+ },
56
+ {
57
+ "id": "issue",
58
+ "vendoredPath": "skills/issue",
59
+ "source": {
60
+ "type": "local",
61
+ "path": "skills/issue"
62
+ }
63
+ },
64
+ {
65
+ "id": "model",
66
+ "vendoredPath": "skills/model",
67
+ "source": {
68
+ "type": "local",
69
+ "path": "skills/model"
70
+ }
71
+ },
72
+ {
73
+ "id": "observe",
74
+ "vendoredPath": "skills/observe",
75
+ "source": {
76
+ "type": "local",
77
+ "path": "skills/observe"
78
+ }
79
+ },
80
+ {
81
+ "id": "plan",
82
+ "vendoredPath": "skills/plan",
83
+ "source": {
84
+ "type": "local",
85
+ "path": "skills/plan"
86
+ }
87
+ },
88
+ {
89
+ "id": "project-install",
90
+ "vendoredPath": "skills/project-install",
91
+ "source": {
92
+ "type": "local",
93
+ "path": "skills/project-install"
94
+ }
95
+ },
96
+ {
97
+ "id": "resume",
98
+ "vendoredPath": "skills/resume",
99
+ "source": {
100
+ "type": "local",
101
+ "path": "skills/resume"
102
+ }
103
+ },
104
+ {
105
+ "id": "retrospect",
106
+ "vendoredPath": "skills/retrospect",
107
+ "source": {
108
+ "type": "local",
109
+ "path": "skills/retrospect"
110
+ }
111
+ },
112
+ {
113
+ "id": "team-install",
114
+ "vendoredPath": "skills/team-install",
115
+ "source": {
116
+ "type": "local",
117
+ "path": "skills/team-install"
118
+ }
119
+ },
120
+ {
121
+ "id": "user-install",
122
+ "vendoredPath": "skills/user-install",
123
+ "source": {
124
+ "type": "local",
125
+ "path": "skills/user-install"
126
+ }
127
+ },
128
+ {
129
+ "id": "yolo",
130
+ "vendoredPath": "skills/yolo",
131
+ "source": {
132
+ "type": "local",
133
+ "path": "skills/yolo"
134
+ }
135
+ }
136
+ ],
137
+ "metadata": {
138
+ "runtime": {
139
+ "name": "@a5c/babysitter-codex-runtime",
140
+ "version": "0.1.4"
141
+ },
142
+ "content": {
143
+ "name": "@a5c/babysitter-codex-content",
144
+ "version": "0.1.4",
145
+ "processLibrary": {
146
+ "repo": "https://github.com/a5c-ai/babysitter.git",
147
+ "processSubpath": "library",
148
+ "referenceSubpath": "library/reference",
149
+ "snapshotCommit": "unknown"
150
+ }
151
+ }
152
+ }
153
+ }
@@ -32,7 +32,7 @@ function main() {
32
32
  const args = parseArgs(process.argv);
33
33
  const packageRoot = path.resolve(process.env.BABYSITTER_PACKAGE_ROOT || path.join(__dirname, '..'));
34
34
  const workspaceRoot = args.workspace;
35
- const workspacePluginRoot = path.join(workspaceRoot, 'plugins', 'babysitter');
35
+ const workspacePluginRoot = path.join(workspaceRoot, '.agents', 'plugins', 'babysitter');
36
36
  const workspaceMarketplacePath = path.join(workspaceRoot, '.agents', 'plugins', 'marketplace.json');
37
37
  const workspaceConfigPath = path.join(workspaceRoot, '.codex', 'config.toml');
38
38
 
@@ -1,18 +0,0 @@
1
- {
2
- "version": 1,
3
- "generatedAt": "2026-03-11T00:00:00.000Z",
4
- "runtime": {
5
- "name": "@a5c/babysitter-codex-runtime",
6
- "version": "0.1.4"
7
- },
8
- "content": {
9
- "name": "@a5c/babysitter-codex-content",
10
- "version": "0.1.4",
11
- "processLibrary": {
12
- "repo": "https://github.com/a5c-ai/babysitter.git",
13
- "processSubpath": "library",
14
- "referenceSubpath": "library/reference",
15
- "snapshotCommit": "unknown"
16
- }
17
- }
18
- }