@fenglimg/fabric-server 1.8.0-rc.2 → 1.8.0-rc.3

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.
@@ -1912,6 +1912,7 @@ async function runDoctorReport(target) {
1912
1912
  const stableIdCollision = await inspectStableIdCollisions(projectRoot);
1913
1913
  const claudeSkillLegacyPath = inspectClaudeSkillLegacyPath(projectRoot);
1914
1914
  const claudeHookLegacyPath = inspectClaudeHookLegacyPath(projectRoot);
1915
+ const codexSkillLegacyPath = inspectCodexSkillLegacyPath(projectRoot);
1915
1916
  const preexistingRootFiles = inspectPreexistingRootFiles(projectRoot);
1916
1917
  const legacyClientPaths = inspectLegacyClientPaths(projectRoot);
1917
1918
  const taxonomyExists = existsSync4(join8(projectRoot, ".fabric", "INITIAL_TAXONOMY.md"));
@@ -1933,6 +1934,7 @@ async function runDoctorReport(target) {
1933
1934
  createStableIdCollisionCheck(stableIdCollision),
1934
1935
  createClaudeSkillLegacyPathCheck(claudeSkillLegacyPath),
1935
1936
  createClaudeHookLegacyPathCheck(claudeHookLegacyPath),
1937
+ createCodexSkillLegacyPathCheck(codexSkillLegacyPath),
1936
1938
  createPreexistingRootFilesCheck(preexistingRootFiles),
1937
1939
  createLegacyClientPathCheck(legacyClientPaths)
1938
1940
  ];
@@ -2029,6 +2031,10 @@ async function runDoctorFix(target) {
2029
2031
  await fixClaudeHookLegacyPath(projectRoot);
2030
2032
  fixed.push(findIssue(before.fixable_errors, "claude_hook_legacy_path"));
2031
2033
  }
2034
+ if (before.fixable_errors.some((issue) => issue.code === "codex_skill_legacy_path")) {
2035
+ await fixCodexSkillLegacyPath(projectRoot);
2036
+ fixed.push(findIssue(before.fixable_errors, "codex_skill_legacy_path"));
2037
+ }
2032
2038
  if (before.warnings.some((issue) => issue.code === "legacy_client_path_present")) {
2033
2039
  await fixLegacyClientPaths(projectRoot);
2034
2040
  fixed.push(findIssue(before.warnings, "legacy_client_path_present"));
@@ -2706,6 +2712,51 @@ async function fixClaudeHookLegacyPath(projectRoot) {
2706
2712
  });
2707
2713
  }
2708
2714
  }
2715
+ function inspectCodexSkillLegacyPath(projectRoot) {
2716
+ const legacyPath = join8(projectRoot, ".agents", "skills", "fabric-init", "SKILL.md");
2717
+ const newPath = join8(projectRoot, ".codex", "skills", "fabric-init", "SKILL.md");
2718
+ const hasLegacy = existsSync4(legacyPath) && !existsSync4(newPath);
2719
+ return { hasLegacy, legacyPath, newPath };
2720
+ }
2721
+ function createCodexSkillLegacyPathCheck(inspection) {
2722
+ if (inspection.hasLegacy) {
2723
+ return issueCheck(
2724
+ "Codex skill path",
2725
+ "error",
2726
+ "fixable_error",
2727
+ "codex_skill_legacy_path",
2728
+ `.agents/skills/fabric-init/SKILL.md exists at the legacy path. Codex CLI reads repo skills from .codex/skills/, not .agents/skills/. Run --fix to migrate it to .codex/skills/fabric-init/SKILL.md (user edits preserved).`,
2729
+ "Run `fab doctor --fix` to move .agents/skills/fabric-init/ to .codex/skills/fabric-init/, preserving any user edits to SKILL.md."
2730
+ );
2731
+ }
2732
+ return okCheck("Codex skill path", ".codex/skills/fabric-init/SKILL.md is at the canonical path (or not present).");
2733
+ }
2734
+ async function fixCodexSkillLegacyPath(projectRoot) {
2735
+ const { hasLegacy, legacyPath, newPath } = inspectCodexSkillLegacyPath(projectRoot);
2736
+ if (!hasLegacy) {
2737
+ return;
2738
+ }
2739
+ mkdirSync(join8(newPath, ".."), { recursive: true });
2740
+ renameSync(legacyPath, newPath);
2741
+ const legacyDir = join8(legacyPath, "..");
2742
+ try {
2743
+ rmdirSync(legacyDir);
2744
+ } catch {
2745
+ }
2746
+ try {
2747
+ rmdirSync(join8(legacyDir, ".."));
2748
+ } catch {
2749
+ }
2750
+ try {
2751
+ rmdirSync(join8(legacyDir, "..", ".."));
2752
+ } catch {
2753
+ }
2754
+ await appendEventLedgerEvent(projectRoot, {
2755
+ event_type: "codex_skill_path_migrated",
2756
+ from: legacyPath,
2757
+ to: newPath
2758
+ });
2759
+ }
2709
2760
  function inspectLegacyClientPaths(projectRoot) {
2710
2761
  const configPath = join8(projectRoot, "fabric.config.json");
2711
2762
  if (!existsSync4(configPath)) {
@@ -15,7 +15,7 @@ import {
15
15
  readEventLedger,
16
16
  runDoctorReport,
17
17
  sha256
18
- } from "./chunk-EGGZFXMO.js";
18
+ } from "./chunk-ZZGARZL5.js";
19
19
 
20
20
  // src/http.ts
21
21
  import { randomUUID as randomUUID2 } from "crypto";
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  runDoctorReport,
23
23
  stableStringify,
24
24
  writeRuleMeta
25
- } from "./chunk-EGGZFXMO.js";
25
+ } from "./chunk-ZZGARZL5.js";
26
26
 
27
27
  // src/index.ts
28
28
  import { existsSync as existsSync2 } from "fs";
@@ -312,7 +312,7 @@ function formatPreexistingRootMessage(projectRoot) {
312
312
  function createFabricServer(tracker) {
313
313
  const server = new McpServer({
314
314
  name: "fabric-context-server",
315
- version: "1.8.0-rc.2"
315
+ version: "1.8.0-rc.3"
316
316
  });
317
317
  registerPlanContext(server, tracker);
318
318
  registerRuleSections(server, tracker);
@@ -406,7 +406,7 @@ function createShutdownHandler(deps) {
406
406
  };
407
407
  }
408
408
  async function startHttpServer(options) {
409
- const { createFabricHttpApp } = await import("./http-Q7GIL23Y.js");
409
+ const { createFabricHttpApp } = await import("./http-PXFWUKCA.js");
410
410
  const { port, projectRoot, host = "127.0.0.1", authToken, dashboardDistPath, dev } = options;
411
411
  const app = createFabricHttpApp({ projectRoot, host, authToken, dashboardDistPath, dev });
412
412
  return await new Promise((resolveServer, rejectServer) => {