@chriskealley/openroad 0.1.1 → 0.1.2

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
@@ -48,7 +48,7 @@ If npm reports a permissions error during global installation, configure an npm-
48
48
 
49
49
  ## What installation changes
50
50
 
51
- If `--tools` is omitted, the CLI detects existing `.codex`, `.pi`, `.claude`, and `.cursor` directories. It then:
51
+ If `--tools` is omitted, the CLI detects existing `.agents`, `.pi`, `.claude`, and `.cursor` directories. Codex uses the shared `.agents/skills` location. It then:
52
52
 
53
53
  - Creates `openspec/roadmap.md` if it does not already exist.
54
54
  - Installs the `openroad` and `openroad-next` skills for each selected tool.
@@ -4,11 +4,15 @@ import { fileURLToPath } from "node:url";
4
4
  import { mergeConfig, removeConfig } from "./config.js";
5
5
  import { MANIFEST_NAME } from "./types.js";
6
6
  const CONSUMER_DIRS = {
7
- codex: ".codex/skills",
7
+ codex: ".agents/skills",
8
8
  pi: ".pi/skills",
9
9
  claude: ".claude/skills",
10
10
  cursor: ".cursor/skills"
11
11
  };
12
+ const LEGACY_CODEX_SKILLS = new Set([
13
+ ".codex/skills/openroad/SKILL.md",
14
+ ".codex/skills/openroad-next/SKILL.md"
15
+ ]);
12
16
  async function exists(path) { try {
13
17
  await access(path);
14
18
  return true;
@@ -22,6 +26,9 @@ const ROADMAP_FILE = "openspec/roadmap.md";
22
26
  function manifestPath(root, target) {
23
27
  return relative(root, target).split(sep).join("/");
24
28
  }
29
+ function toPosix(file) {
30
+ return file.split("\\").join("/");
31
+ }
25
32
  // Exported for tests: the guard that keeps remove() from deleting the roadmap.
26
33
  export function isRoadmapEntry(file) {
27
34
  return file.split("\\").join("/") === ROADMAP_FILE;
@@ -67,6 +74,17 @@ export async function install(root, requested) {
67
74
  await copyFile(join(assetRoot(), "skills", skill, "SKILL.md"), destination);
68
75
  files.add(manifestPath(root, destination));
69
76
  }
77
+ // Current Codex discovers project skills through .agents/skills. Remove only
78
+ // legacy files that an earlier OpenRoad manifest explicitly claimed, and do
79
+ // so only after their current replacements have been written successfully.
80
+ for (const file of prior?.files ?? []) {
81
+ const normalized = toPosix(file);
82
+ if (!LEGACY_CODEX_SKILLS.has(normalized))
83
+ continue;
84
+ await rm(join(root, ...normalized.split("/")), { force: true });
85
+ files.delete(file);
86
+ files.delete(normalized);
87
+ }
70
88
  await mergeConfig(config);
71
89
  const manifest = { schemaVersion: 1, packageVersion: await packageVersion(), installedAt: prior?.installedAt ?? new Date().toISOString(), consumers, files: [...files].sort() };
72
90
  await writeFile(join(root, MANIFEST_NAME), JSON.stringify(manifest, null, 2) + "\n");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chriskealley/openroad",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "A roadmap companion for OpenSpec projects",
5
5
  "author": "Chris Kealley",
6
6
  "type": "module",
@@ -24,6 +24,7 @@
24
24
  "engines": { "node": ">=22" },
25
25
  "dependencies": { "yaml": "^2.8.1" },
26
26
  "devDependencies": {
27
+ "@fission-ai/openspec": "1.13.1",
27
28
  "@types/node": "^24.3.0",
28
29
  "typescript": "^5.9.2"
29
30
  },