@a5c-ai/babysitter-codex 0.1.11-staging.bd012192 → 0.1.11-staging.bf1f4be2

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
@@ -34,6 +35,10 @@ codex
34
35
 
35
36
  then navigate to the 'babysitter' entry and select 'Install'.
36
37
 
38
+ If Codex was already open when you ran `install --global`, start a new thread
39
+ after installing from `/plugins` before expecting `babysitter:*` skills such as
40
+ `$babysitter:babysit` or `$babysitter:call` to appear in the mention picker.
41
+
37
42
  ## Integration Model
38
43
 
39
44
  The plugin provides:
@@ -50,9 +55,9 @@ The process library is fetched and bound through the SDK CLI in
50
55
 
51
56
  After `install --workspace`, the important files are:
52
57
 
53
- - `plugins/babysitter/.codex-plugin/plugin.json`
54
- - `plugins/babysitter/skills/babysit/SKILL.md`
55
- - `plugins/babysitter/hooks.json`
58
+ - `.agents/plugins/babysitter/.codex-plugin/plugin.json`
59
+ - `.agents/plugins/babysitter/skills/babysit/SKILL.md`
60
+ - `.agents/plugins/babysitter/hooks.json`
56
61
  - `.codex/skills/`
57
62
  - `.codex/hooks/`
58
63
  - `.codex/hooks.json`
@@ -67,13 +72,10 @@ Verify the installed plugin bundle:
67
72
 
68
73
  ```bash
69
74
  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
75
+ test -f ~/.agents/plugins/babysitter/.codex-plugin/plugin.json
76
+ test -f ~/.agents/plugins/babysitter/hooks.json
77
+ test -f ~/.agents/plugins/babysitter/hooks/babysitter-stop-hook.sh
78
+ test -f ~/.agents/plugins/babysitter/skills/babysit/SKILL.md
77
79
  test -f ~/.agents/plugins/marketplace.json
78
80
  ```
79
81
 
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() {
@@ -315,13 +317,21 @@ function ensureExecutable(filePath) {
315
317
  }
316
318
  }
317
319
 
320
+ function getMarketplaceRootDir(marketplacePath) {
321
+ const pluginsDir = path.dirname(marketplacePath);
322
+ const dotAgentsDir = path.dirname(pluginsDir);
323
+ return path.dirname(dotAgentsDir);
324
+ }
325
+
318
326
  function normalizeMarketplaceSourcePath(marketplacePath, pluginSourcePath) {
319
- let next = pluginSourcePath;
320
- if (path.isAbsolute(next)) {
321
- next = path.relative(path.dirname(marketplacePath), next);
322
- }
327
+ let next = path.relative(getMarketplaceRootDir(marketplacePath), pluginSourcePath);
323
328
  next = String(next || '').replace(/\\/g, '/');
324
- if (!next.startsWith('./') && !next.startsWith('../')) {
329
+ if (!next || next === '.' || next.startsWith('../')) {
330
+ throw new Error(
331
+ `Plugin source path must live under ${getMarketplaceRootDir(marketplacePath)} so Codex can load it via a ./-prefixed marketplace entry.`,
332
+ );
333
+ }
334
+ if (!next.startsWith('./')) {
325
335
  next = `./${next}`;
326
336
  }
327
337
  return next;
@@ -347,15 +357,15 @@ function ensureMarketplaceEntry(marketplacePath, pluginSourcePath) {
347
357
  },
348
358
  category: PLUGIN_CATEGORY,
349
359
  };
350
- const existingIndex = Array.isArray(marketplace.plugins)
351
- ? marketplace.plugins.findIndex((entry) => entry && entry.name === PLUGIN_NAME)
352
- : -1;
353
360
  if (!Array.isArray(marketplace.plugins)) {
354
361
  marketplace.plugins = [nextEntry];
355
- } else if (existingIndex >= 0) {
356
- marketplace.plugins[existingIndex] = nextEntry;
357
362
  } else {
358
- marketplace.plugins.push(nextEntry);
363
+ const sanitized = marketplace.plugins.filter((entry) => (
364
+ entry &&
365
+ entry.name !== PLUGIN_NAME &&
366
+ !LEGACY_MARKETPLACE_PLUGIN_NAMES.includes(entry.name)
367
+ ));
368
+ marketplace.plugins = [...sanitized, nextEntry];
359
369
  }
360
370
  writeJson(marketplacePath, marketplace);
361
371
  return nextEntry;
@@ -369,7 +379,11 @@ function removeMarketplaceEntry(marketplacePath) {
369
379
  if (!Array.isArray(marketplace.plugins)) {
370
380
  return;
371
381
  }
372
- marketplace.plugins = marketplace.plugins.filter((entry) => entry && entry.name !== PLUGIN_NAME);
382
+ marketplace.plugins = marketplace.plugins.filter((entry) => (
383
+ entry &&
384
+ entry.name !== PLUGIN_NAME &&
385
+ !LEGACY_MARKETPLACE_PLUGIN_NAMES.includes(entry.name)
386
+ ));
373
387
  writeJson(marketplacePath, marketplace);
374
388
  }
375
389
 
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,8 @@ 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`.');
40
+ console.log('[babysitter] If Codex was already open, start a new thread after install before expecting `babysitter:*` skills such as `$babysitter:babysit` or `$babysitter:call` to appear.');
42
41
  } catch (err) {
43
42
  console.error(`[babysitter] Failed to install plugin: ${err.message}`);
44
43
  process.exitCode = 1;
@@ -3,8 +3,9 @@ set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
6
- STATE_DIR="${BABYSITTER_STATE_DIR:-${PWD}/.a5c}"
7
- LOG_DIR="${BABYSITTER_LOG_DIR:-$HOME/.a5c/logs}"
6
+ GLOBAL_ROOT="${BABYSITTER_GLOBAL_STATE_DIR:-$HOME/.a5c}"
7
+ STATE_DIR="${BABYSITTER_STATE_DIR:-${GLOBAL_ROOT}/state}"
8
+ LOG_DIR="${BABYSITTER_LOG_DIR:-${GLOBAL_ROOT}/logs}"
8
9
  LOG_FILE="$LOG_DIR/babysitter-session-start-hook.log"
9
10
 
10
11
  export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
@@ -3,8 +3,9 @@ set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
6
- STATE_DIR="${BABYSITTER_STATE_DIR:-${PWD}/.a5c}"
7
- LOG_DIR="${BABYSITTER_LOG_DIR:-$HOME/.a5c/logs}"
6
+ GLOBAL_ROOT="${BABYSITTER_GLOBAL_STATE_DIR:-$HOME/.a5c}"
7
+ STATE_DIR="${BABYSITTER_STATE_DIR:-${GLOBAL_ROOT}/state}"
8
+ LOG_DIR="${BABYSITTER_LOG_DIR:-${GLOBAL_ROOT}/logs}"
8
9
  LOG_FILE="$LOG_DIR/babysitter-stop-hook.log"
9
10
 
10
11
  export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
@@ -3,8 +3,9 @@ set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
5
  PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
6
- STATE_DIR="${BABYSITTER_STATE_DIR:-${PWD}/.a5c}"
7
- LOG_DIR="${BABYSITTER_LOG_DIR:-$HOME/.a5c/logs}"
6
+ GLOBAL_ROOT="${BABYSITTER_GLOBAL_STATE_DIR:-$HOME/.a5c}"
7
+ STATE_DIR="${BABYSITTER_STATE_DIR:-${GLOBAL_ROOT}/state}"
8
+ LOG_DIR="${BABYSITTER_LOG_DIR:-${GLOBAL_ROOT}/logs}"
8
9
 
9
10
  export CODEX_PLUGIN_ROOT="${CODEX_PLUGIN_ROOT:-${PLUGIN_ROOT}}"
10
11
  export BABYSITTER_STATE_DIR="${STATE_DIR}"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a5c-ai/babysitter-codex",
3
- "version": "0.1.11-staging.bd012192",
3
+ "version": "0.1.11-staging.bf1f4be2",
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.bd012192"
49
+ "@a5c-ai/babysitter-sdk": "0.0.188-staging.bf1f4be2"
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
 
@@ -81,6 +81,7 @@ function main() {
81
81
 
82
82
  warnWindowsHooks();
83
83
  console.log('[team-install] complete');
84
+ console.log('[team-install] If Codex was already open, start a new thread before expecting `babysitter:*` skills such as `$babysitter:babysit` or `$babysitter:call` to appear.');
84
85
  }
85
86
 
86
87
  main();
@@ -18,6 +18,8 @@ Read the SDK version from `versions.json` to ensure version compatibility:
18
18
 
19
19
  ```bash
20
20
  SDK_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('${CODEX_PLUGIN_ROOT}/versions.json','utf8')).sdkVersion||'latest')}catch{console.log('latest')}")
21
+ npm i -g @a5c-ai/babysitter-sdk@$SDK_VERSION
22
+
21
23
  CLI="npx -y @a5c-ai/babysitter-sdk@$SDK_VERSION"
22
24
  ```
23
25
 
@@ -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
- }