mewkit 1.13.0 → 1.14.0

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.
Files changed (148) hide show
  1. package/README.md +37 -0
  2. package/dist/commands/migrate.d.ts +2 -0
  3. package/dist/commands/migrate.d.ts.map +1 -1
  4. package/dist/commands/migrate.js +2 -0
  5. package/dist/commands/migrate.js.map +1 -1
  6. package/dist/commands/validate.js +14 -7
  7. package/dist/commands/validate.js.map +1 -1
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/migrate/config-merger/merge-single-sections.d.ts.map +1 -1
  11. package/dist/migrate/config-merger/merge-single-sections.js +4 -2
  12. package/dist/migrate/config-merger/merge-single-sections.js.map +1 -1
  13. package/dist/migrate/converters/command-to-codex-skill.d.ts +10 -0
  14. package/dist/migrate/converters/command-to-codex-skill.d.ts.map +1 -0
  15. package/dist/migrate/converters/command-to-codex-skill.js +78 -0
  16. package/dist/migrate/converters/command-to-codex-skill.js.map +1 -0
  17. package/dist/migrate/converters/direct-copy.d.ts +4 -1
  18. package/dist/migrate/converters/direct-copy.d.ts.map +1 -1
  19. package/dist/migrate/converters/direct-copy.js +19 -22
  20. package/dist/migrate/converters/direct-copy.js.map +1 -1
  21. package/dist/migrate/converters/fm-strip.d.ts.map +1 -1
  22. package/dist/migrate/converters/fm-strip.js +5 -1
  23. package/dist/migrate/converters/fm-strip.js.map +1 -1
  24. package/dist/migrate/converters/fm-to-codex-toml.js +1 -1
  25. package/dist/migrate/converters/fm-to-codex-toml.js.map +1 -1
  26. package/dist/migrate/converters/fm-to-fm.js +4 -4
  27. package/dist/migrate/converters/fm-to-fm.js.map +1 -1
  28. package/dist/migrate/converters/fm-to-json.d.ts.map +1 -1
  29. package/dist/migrate/converters/fm-to-json.js +2 -1
  30. package/dist/migrate/converters/fm-to-json.js.map +1 -1
  31. package/dist/migrate/converters/fm-to-yaml.js +1 -1
  32. package/dist/migrate/converters/fm-to-yaml.js.map +1 -1
  33. package/dist/migrate/converters/index.d.ts +7 -2
  34. package/dist/migrate/converters/index.d.ts.map +1 -1
  35. package/dist/migrate/converters/index.js +7 -7
  36. package/dist/migrate/converters/index.js.map +1 -1
  37. package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts +8 -0
  38. package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts.map +1 -0
  39. package/dist/migrate/converters/mcp-json-to-codex-toml.js +65 -0
  40. package/dist/migrate/converters/mcp-json-to-codex-toml.js.map +1 -0
  41. package/dist/migrate/converters/md-strip.d.ts +10 -1
  42. package/dist/migrate/converters/md-strip.d.ts.map +1 -1
  43. package/dist/migrate/converters/md-strip.js +27 -70
  44. package/dist/migrate/converters/md-strip.js.map +1 -1
  45. package/dist/migrate/converters/md-to-kiro-steering.js +1 -1
  46. package/dist/migrate/converters/md-to-kiro-steering.js.map +1 -1
  47. package/dist/migrate/converters/md-to-mdc.js +1 -1
  48. package/dist/migrate/converters/md-to-mdc.js.map +1 -1
  49. package/dist/migrate/converters/md-to-toml.js +1 -1
  50. package/dist/migrate/converters/md-to-toml.js.map +1 -1
  51. package/dist/migrate/hooks/codex-features-flag.d.ts.map +1 -1
  52. package/dist/migrate/hooks/codex-features-flag.js +21 -6
  53. package/dist/migrate/hooks/codex-features-flag.js.map +1 -1
  54. package/dist/migrate/hooks/codex-hook-wrapper.js +1 -1
  55. package/dist/migrate/hooks/codex-mcp-installer.d.ts +9 -0
  56. package/dist/migrate/hooks/codex-mcp-installer.d.ts.map +1 -0
  57. package/dist/migrate/hooks/codex-mcp-installer.js +65 -0
  58. package/dist/migrate/hooks/codex-mcp-installer.js.map +1 -0
  59. package/dist/migrate/hooks/codex-toml-installer.d.ts.map +1 -1
  60. package/dist/migrate/hooks/codex-toml-installer.js +15 -6
  61. package/dist/migrate/hooks/codex-toml-installer.js.map +1 -1
  62. package/dist/migrate/hooks/hooks-settings-merger.d.ts.map +1 -1
  63. package/dist/migrate/hooks/hooks-settings-merger.js +5 -1
  64. package/dist/migrate/hooks/hooks-settings-merger.js.map +1 -1
  65. package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
  66. package/dist/migrate/migrate-orchestrator.js +86 -9
  67. package/dist/migrate/migrate-orchestrator.js.map +1 -1
  68. package/dist/migrate/migrate-ui-summary.d.ts +2 -0
  69. package/dist/migrate/migrate-ui-summary.d.ts.map +1 -1
  70. package/dist/migrate/migrate-ui-summary.js +26 -0
  71. package/dist/migrate/migrate-ui-summary.js.map +1 -1
  72. package/dist/migrate/portability-policy.d.ts +3 -1
  73. package/dist/migrate/portability-policy.d.ts.map +1 -1
  74. package/dist/migrate/portability-policy.js +5 -31
  75. package/dist/migrate/portability-policy.js.map +1 -1
  76. package/dist/migrate/portable-installer.d.ts +3 -0
  77. package/dist/migrate/portable-installer.d.ts.map +1 -1
  78. package/dist/migrate/portable-installer.js +67 -6
  79. package/dist/migrate/portable-installer.js.map +1 -1
  80. package/dist/migrate/provider-registry-utils.d.ts.map +1 -1
  81. package/dist/migrate/provider-registry-utils.js +5 -0
  82. package/dist/migrate/provider-registry-utils.js.map +1 -1
  83. package/dist/migrate/providers/codex/capabilities.d.ts +1 -1
  84. package/dist/migrate/providers/codex/capabilities.d.ts.map +1 -1
  85. package/dist/migrate/providers/codex/capabilities.js +56 -0
  86. package/dist/migrate/providers/codex/capabilities.js.map +1 -1
  87. package/dist/migrate/providers/codex/config.d.ts.map +1 -1
  88. package/dist/migrate/providers/codex/config.js +21 -8
  89. package/dist/migrate/providers/codex/config.js.map +1 -1
  90. package/dist/migrate/providers/codex/contract.d.ts.map +1 -1
  91. package/dist/migrate/providers/codex/contract.js +4 -3
  92. package/dist/migrate/providers/codex/contract.js.map +1 -1
  93. package/dist/migrate/providers/provider-config-types.d.ts +1 -1
  94. package/dist/migrate/providers/provider-config-types.d.ts.map +1 -1
  95. package/dist/migrate/reconcile/portable-manifest.d.ts +12 -12
  96. package/dist/migrate/reconcile/portable-registry.d.ts +24 -24
  97. package/dist/migrate/reconcile/process-lock.d.ts.map +1 -1
  98. package/dist/migrate/reconcile/process-lock.js +10 -1
  99. package/dist/migrate/reconcile/process-lock.js.map +1 -1
  100. package/dist/migrate/references/codex-command-skill-path.d.ts +12 -0
  101. package/dist/migrate/references/codex-command-skill-path.d.ts.map +1 -0
  102. package/dist/migrate/references/codex-command-skill-path.js +27 -0
  103. package/dist/migrate/references/codex-command-skill-path.js.map +1 -0
  104. package/dist/migrate/references/fence-aware-reference-rewriter.d.ts +30 -0
  105. package/dist/migrate/references/fence-aware-reference-rewriter.d.ts.map +1 -0
  106. package/dist/migrate/references/fence-aware-reference-rewriter.js +182 -0
  107. package/dist/migrate/references/fence-aware-reference-rewriter.js.map +1 -0
  108. package/dist/migrate/references/reference-classifier.d.ts +12 -0
  109. package/dist/migrate/references/reference-classifier.d.ts.map +1 -0
  110. package/dist/migrate/references/reference-classifier.js +144 -0
  111. package/dist/migrate/references/reference-classifier.js.map +1 -0
  112. package/dist/migrate/references/reference-target-registry.d.ts +42 -0
  113. package/dist/migrate/references/reference-target-registry.d.ts.map +1 -0
  114. package/dist/migrate/references/reference-target-registry.js +100 -0
  115. package/dist/migrate/references/reference-target-registry.js.map +1 -0
  116. package/dist/migrate/references/reference-types.d.ts +23 -0
  117. package/dist/migrate/references/reference-types.d.ts.map +1 -0
  118. package/dist/migrate/references/reference-types.js +5 -0
  119. package/dist/migrate/references/reference-types.js.map +1 -0
  120. package/dist/migrate/runtime-compat-audit.d.ts +2 -1
  121. package/dist/migrate/runtime-compat-audit.d.ts.map +1 -1
  122. package/dist/migrate/runtime-compat-audit.js +2 -2
  123. package/dist/migrate/runtime-compat-audit.js.map +1 -1
  124. package/dist/migrate/runtime-coupling-patterns.d.ts +2 -1
  125. package/dist/migrate/runtime-coupling-patterns.d.ts.map +1 -1
  126. package/dist/migrate/runtime-coupling-patterns.js +18 -3
  127. package/dist/migrate/runtime-coupling-patterns.js.map +1 -1
  128. package/dist/migrate/skill-directory-audit.d.ts +3 -0
  129. package/dist/migrate/skill-directory-audit.d.ts.map +1 -1
  130. package/dist/migrate/skill-directory-audit.js +2 -1
  131. package/dist/migrate/skill-directory-audit.js.map +1 -1
  132. package/dist/migrate/skill-directory-installer.d.ts +2 -0
  133. package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
  134. package/dist/migrate/skill-directory-installer.js +17 -8
  135. package/dist/migrate/skill-directory-installer.js.map +1 -1
  136. package/dist/migrate/types.d.ts +20 -10
  137. package/dist/migrate/types.d.ts.map +1 -1
  138. package/dist/migrate/types.js +4 -0
  139. package/dist/migrate/types.js.map +1 -1
  140. package/dist/migrate/validation/migrate-conversion-report.d.ts +20 -0
  141. package/dist/migrate/validation/migrate-conversion-report.d.ts.map +1 -0
  142. package/dist/migrate/validation/migrate-conversion-report.js +105 -0
  143. package/dist/migrate/validation/migrate-conversion-report.js.map +1 -0
  144. package/dist/migrate/validation/unresolved-reference-scanner.d.ts +18 -0
  145. package/dist/migrate/validation/unresolved-reference-scanner.d.ts.map +1 -0
  146. package/dist/migrate/validation/unresolved-reference-scanner.js +47 -0
  147. package/dist/migrate/validation/unresolved-reference-scanner.js.map +1 -0
  148. package/package.json +1 -1
@@ -18,30 +18,30 @@ declare const PortableInstallationSchemaV3: z.ZodObject<{
18
18
  installedChecksum: z.ZodOptional<z.ZodString>;
19
19
  }, "strip", z.ZodTypeAny, {
20
20
  path: string;
21
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
21
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
22
22
  installedAt: string;
23
- global: boolean;
23
+ item: string;
24
24
  provider: string;
25
+ global: boolean;
25
26
  sourcePath: string;
26
- item: string;
27
27
  sourceChecksum: string;
28
28
  targetChecksum: string;
29
- installSource: "manual" | "kit";
29
+ installSource: "kit" | "manual";
30
30
  installedVersion?: string | undefined;
31
31
  cliVersion?: string | undefined;
32
32
  ownedSections?: string[] | undefined;
33
33
  installedChecksum?: string | undefined;
34
34
  }, {
35
35
  path: string;
36
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
36
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
37
37
  installedAt: string;
38
- global: boolean;
38
+ item: string;
39
39
  provider: string;
40
+ global: boolean;
40
41
  sourcePath: string;
41
- item: string;
42
42
  sourceChecksum: string;
43
43
  targetChecksum: string;
44
- installSource: "manual" | "kit";
44
+ installSource: "kit" | "manual";
45
45
  installedVersion?: string | undefined;
46
46
  cliVersion?: string | undefined;
47
47
  ownedSections?: string[] | undefined;
@@ -67,30 +67,30 @@ declare const PortableRegistrySchemaV3: z.ZodObject<{
67
67
  installedChecksum: z.ZodOptional<z.ZodString>;
68
68
  }, "strip", z.ZodTypeAny, {
69
69
  path: string;
70
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
70
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
71
71
  installedAt: string;
72
- global: boolean;
72
+ item: string;
73
73
  provider: string;
74
+ global: boolean;
74
75
  sourcePath: string;
75
- item: string;
76
76
  sourceChecksum: string;
77
77
  targetChecksum: string;
78
- installSource: "manual" | "kit";
78
+ installSource: "kit" | "manual";
79
79
  installedVersion?: string | undefined;
80
80
  cliVersion?: string | undefined;
81
81
  ownedSections?: string[] | undefined;
82
82
  installedChecksum?: string | undefined;
83
83
  }, {
84
84
  path: string;
85
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
85
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
86
86
  installedAt: string;
87
- global: boolean;
87
+ item: string;
88
88
  provider: string;
89
+ global: boolean;
89
90
  sourcePath: string;
90
- item: string;
91
91
  sourceChecksum: string;
92
92
  targetChecksum: string;
93
- installSource: "manual" | "kit";
93
+ installSource: "kit" | "manual";
94
94
  installedVersion?: string | undefined;
95
95
  cliVersion?: string | undefined;
96
96
  ownedSections?: string[] | undefined;
@@ -102,15 +102,15 @@ declare const PortableRegistrySchemaV3: z.ZodObject<{
102
102
  version: "3.0";
103
103
  installations: {
104
104
  path: string;
105
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
105
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
106
106
  installedAt: string;
107
- global: boolean;
107
+ item: string;
108
108
  provider: string;
109
+ global: boolean;
109
110
  sourcePath: string;
110
- item: string;
111
111
  sourceChecksum: string;
112
112
  targetChecksum: string;
113
- installSource: "manual" | "kit";
113
+ installSource: "kit" | "manual";
114
114
  installedVersion?: string | undefined;
115
115
  cliVersion?: string | undefined;
116
116
  ownedSections?: string[] | undefined;
@@ -122,15 +122,15 @@ declare const PortableRegistrySchemaV3: z.ZodObject<{
122
122
  version: "3.0";
123
123
  installations: {
124
124
  path: string;
125
- type: "skill" | "hooks" | "rules" | "agent" | "command" | "config";
125
+ type: "agent" | "command" | "skill" | "config" | "rules" | "hooks";
126
126
  installedAt: string;
127
- global: boolean;
127
+ item: string;
128
128
  provider: string;
129
+ global: boolean;
129
130
  sourcePath: string;
130
- item: string;
131
131
  sourceChecksum: string;
132
132
  targetChecksum: string;
133
- installSource: "manual" | "kit";
133
+ installSource: "kit" | "manual";
134
134
  installedVersion?: string | undefined;
135
135
  cliVersion?: string | undefined;
136
136
  ownedSections?: string[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"process-lock.d.ts","sourceRoot":"","sources":["../../../src/migrate/reconcile/process-lock.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC5B;AAmBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsClG;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E"}
1
+ {"version":3,"file":"process-lock.d.ts","sourceRoot":"","sources":["../../../src/migrate/reconcile/process-lock.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC5B;AAmBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsClG;AAED,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1E"}
@@ -1,7 +1,7 @@
1
1
  // Process-wide migration lock (Red Team Finding 13). Prevents two `mewkit migrate` runs
2
2
  // from racing on the same registry. Uses a PID file with stale-detection via process.kill(0).
3
3
  import { existsSync } from "node:fs";
4
- import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
4
+ import { mkdir, readFile, rmdir, unlink, writeFile } from "node:fs/promises";
5
5
  import { homedir } from "node:os";
6
6
  import { dirname, join } from "node:path";
7
7
  /** Resolve lock path at call time so `process.cwd()` reflects the actual invocation
@@ -74,5 +74,14 @@ export async function releaseMigrationLock(lockPath) {
74
74
  catch {
75
75
  // Best-effort
76
76
  }
77
+ // Leave no empty lock directory behind in the target project. rmdir only
78
+ // succeeds on an empty directory, so a home-scope dir that also holds the
79
+ // portable registry is untouched.
80
+ try {
81
+ await rmdir(dirname(lockPath));
82
+ }
83
+ catch {
84
+ // Non-empty or already gone — fine.
85
+ }
77
86
  }
78
87
  //# sourceMappingURL=process-lock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-lock.js","sourceRoot":"","sources":["../../../src/migrate/reconcile/process-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-lock.js","sourceRoot":"","sources":["../../../src/migrate/reconcile/process-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Skill directory name for a migrated command (e.g. "mk/fix" → "source-command-mk-fix").
3
+ *
4
+ * The encoding is injective over the realistic name alphabet [a-z0-9-/_.]:
5
+ * literal hyphens are doubled BEFORE path separators become single hyphens, so
6
+ * a nested "mk/fix" and a flat "mk-fix" cannot collide (which would otherwise
7
+ * make one command's install silently overwrite the other's).
8
+ */
9
+ export declare function codexCommandSkillDirName(commandName: string): string;
10
+ /** Path of the generated skill file relative to the provider skills root */
11
+ export declare function codexCommandSkillRelativePath(commandName: string): string;
12
+ //# sourceMappingURL=codex-command-skill-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-command-skill-path.d.ts","sourceRoot":"","sources":["../../../src/migrate/references/codex-command-skill-path.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUpE;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,27 @@
1
+ // Pure path helpers for the Codex command→skill mapping. Dependency-free so
2
+ // both the converter and the reference/path registries can import them without
3
+ // creating an import cycle.
4
+ /**
5
+ * Skill directory name for a migrated command (e.g. "mk/fix" → "source-command-mk-fix").
6
+ *
7
+ * The encoding is injective over the realistic name alphabet [a-z0-9-/_.]:
8
+ * literal hyphens are doubled BEFORE path separators become single hyphens, so
9
+ * a nested "mk/fix" and a flat "mk-fix" cannot collide (which would otherwise
10
+ * make one command's install silently overwrite the other's).
11
+ */
12
+ export function codexCommandSkillDirName(commandName) {
13
+ const slug = commandName
14
+ .replace(/\\/g, "/")
15
+ .toLowerCase()
16
+ .replace(/\.md$/, "")
17
+ .replace(/-/g, "--")
18
+ .replace(/\//g, "-")
19
+ .replace(/[^a-z0-9-]/g, "-")
20
+ .replace(/^-+|-+$/g, "");
21
+ return `source-command-${slug || "unnamed"}`;
22
+ }
23
+ /** Path of the generated skill file relative to the provider skills root */
24
+ export function codexCommandSkillRelativePath(commandName) {
25
+ return `${codexCommandSkillDirName(commandName)}/SKILL.md`;
26
+ }
27
+ //# sourceMappingURL=codex-command-skill-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-command-skill-path.js","sourceRoot":"","sources":["../../../src/migrate/references/codex-command-skill-path.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+EAA+E;AAC/E,4BAA4B;AAE5B;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC3D,MAAM,IAAI,GAAG,WAAW;SACtB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,WAAW,EAAE;SACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1B,OAAO,kBAAkB,IAAI,IAAI,SAAS,EAAE,CAAC;AAC9C,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,6BAA6B,CAAC,WAAmB;IAChE,OAAO,GAAG,wBAAwB,CAAC,WAAW,CAAC,WAAW,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type ReferenceScope } from "./reference-target-registry.js";
2
+ import type { ReferenceOccurrence } from "./reference-types.js";
3
+ import type { ProviderType } from "../types.js";
4
+ /** Membership test over the set of source assets included in the current migration */
5
+ export interface ReferenceIntegrityIndex {
6
+ has(sourceRelativePath: string): boolean;
7
+ }
8
+ /**
9
+ * Build an integrity index from source-relative entries. Entries ending with
10
+ * "/" match as directory prefixes (e.g. ".claude/skills/demo-skill/").
11
+ */
12
+ export declare function createReferenceIntegrityIndex(entries: Iterable<string>): ReferenceIntegrityIndex;
13
+ export declare function combineIntegrityIndexes(...indexes: Array<ReferenceIntegrityIndex | null | undefined>): ReferenceIntegrityIndex;
14
+ export interface SourceReferenceRewriteOptions {
15
+ provider?: ProviderType;
16
+ scope?: ReferenceScope;
17
+ /** Filename recorded on occurrences (for report output) */
18
+ file?: string;
19
+ /** Migration-set membership; absent = unknown → fenced refs are preserved + warned */
20
+ migratedRefs?: ReferenceIntegrityIndex | null;
21
+ /** "code" treats the whole content as runnable (fenced semantics, no prose spans) */
22
+ contentKind?: "markdown" | "code";
23
+ }
24
+ export interface SourceReferenceRewriteResult {
25
+ content: string;
26
+ occurrences: ReferenceOccurrence[];
27
+ warnings: string[];
28
+ }
29
+ export declare function rewriteSourceReferences(content: string, options: SourceReferenceRewriteOptions): SourceReferenceRewriteResult;
30
+ //# sourceMappingURL=fence-aware-reference-rewriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fence-aware-reference-rewriter.d.ts","sourceRoot":"","sources":["../../../src/migrate/references/fence-aware-reference-rewriter.ts"],"names":[],"mappings":"AAeA,OAAO,EAON,KAAK,cAAc,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,sFAAsF;AACtF,MAAM,WAAW,uBAAuB;IACvC,GAAG,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,uBAAuB,CAehG;AAED,wBAAgB,uBAAuB,CACtC,GAAG,OAAO,EAAE,KAAK,CAAC,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAC,GAC3D,uBAAuB,CAGzB;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,YAAY,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC9C,qFAAqF;IACrF,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAwDD,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,6BAA6B,GACpC,4BAA4B,CA0G9B"}
@@ -0,0 +1,182 @@
1
+ // Fence-aware source-reference rewriter. Replaces the old binary rule
2
+ // ("fence = preserve everything" / "direct-copy = replace everything") with a
3
+ // span-based decision matrix:
4
+ //
5
+ // span mapped asset unmapped runtime citation
6
+ // prose/inline rewrite to target neutralize + record preserve
7
+ // frontmatter rewrite to target neutralize + record preserve
8
+ // fenced/code rewrite ONLY when the asset preserve + warn preserve
9
+ // is in the migration set,
10
+ // else preserve + warn
11
+ //
12
+ // Runnable content is never given a fabricated path: a fenced reference is only
13
+ // rewritten when the referenced asset is provably part of the migration set.
14
+ import { buildMarkdownSpanMap } from "./reference-classifier.js";
15
+ import { SOURCE_ROOT, buildReferenceRewriteTable, resolveReferenceTarget, sourceConfigTokenPattern, sourceReferencePattern, } from "./reference-target-registry.js";
16
+ /**
17
+ * Build an integrity index from source-relative entries. Entries ending with
18
+ * "/" match as directory prefixes (e.g. ".claude/skills/demo-skill/").
19
+ */
20
+ export function createReferenceIntegrityIndex(entries) {
21
+ const files = new Set();
22
+ const prefixes = [];
23
+ for (const entry of entries) {
24
+ const normalized = entry.replace(/\\/g, "/");
25
+ if (normalized.endsWith("/"))
26
+ prefixes.push(normalized.toLowerCase());
27
+ else
28
+ files.add(normalized.toLowerCase());
29
+ }
30
+ return {
31
+ has(sourceRelativePath) {
32
+ const normalized = sourceRelativePath.replace(/\\/g, "/").toLowerCase();
33
+ if (files.has(normalized))
34
+ return true;
35
+ return prefixes.some((prefix) => normalized.startsWith(prefix));
36
+ },
37
+ };
38
+ }
39
+ export function combineIntegrityIndexes(...indexes) {
40
+ const present = indexes.filter((index) => Boolean(index));
41
+ return { has: (path) => present.some((index) => index.has(path)) };
42
+ }
43
+ const TYPE_DIRS = ["agents", "commands", "skills", "rules", "hooks"];
44
+ // Provider-neutral phrases used when a reference has no provider target.
45
+ const NEUTRAL_TYPE_PHRASE = {
46
+ rules: "project rules directory/",
47
+ agents: "project subagents directory/",
48
+ commands: "project commands directory/",
49
+ skills: "project skills directory/",
50
+ hooks: "project hooks directory/",
51
+ };
52
+ const NEUTRAL_ROOT_PHRASE = "project runtime data/";
53
+ const NEUTRAL_CONFIG_PHRASE = "project configuration file";
54
+ function classifySourcePath(path, table) {
55
+ const suffix = path.slice(SOURCE_ROOT.length);
56
+ const typeDir = TYPE_DIRS.find((dir) => suffix.toLowerCase().startsWith(`${dir}/`));
57
+ const target = resolveReferenceTarget(table, path);
58
+ if (target !== null) {
59
+ const rule = table.find((r) => path.toLowerCase().startsWith(r.sourcePrefix.toLowerCase()));
60
+ return {
61
+ kind: "mapped-asset",
62
+ target,
63
+ preservesSuffix: rule?.target?.isDirectory ?? false,
64
+ neutral: "",
65
+ reason: "",
66
+ };
67
+ }
68
+ if (typeDir) {
69
+ return {
70
+ kind: "unmapped-runtime",
71
+ target: null,
72
+ preservesSuffix: false,
73
+ neutral: `${NEUTRAL_TYPE_PHRASE[typeDir]}${suffix.slice(typeDir.length + 1)}`,
74
+ reason: `provider has no ${typeDir} surface`,
75
+ };
76
+ }
77
+ return {
78
+ kind: "unmapped-runtime",
79
+ target: null,
80
+ preservesSuffix: false,
81
+ neutral: `${NEUTRAL_ROOT_PHRASE}${suffix}`,
82
+ reason: "no provider equivalent for this source runtime path",
83
+ };
84
+ }
85
+ export function rewriteSourceReferences(content, options) {
86
+ const table = buildReferenceRewriteTable(options.provider, options.scope ?? "project");
87
+ const occurrences = [];
88
+ const warnings = [];
89
+ const file = options.file ?? "";
90
+ const record = (occurrence) => {
91
+ occurrences.push(occurrence);
92
+ if (occurrence.decision === "preserve-warn") {
93
+ warnings.push(`Unresolved reference preserved (line ${occurrence.line}): "${occurrence.original}" — ${occurrence.reason}`);
94
+ }
95
+ };
96
+ // Each replace pass shifts byte offsets, so the span map is rebuilt per pass.
97
+ const buildSpanHelpers = (input) => {
98
+ const spanMap = options.contentKind === "code" ? null : buildMarkdownSpanMap(input);
99
+ return {
100
+ spanAt: (offset) => spanMap?.spanAt(offset) ?? "fenced",
101
+ lineAt: (offset) => {
102
+ if (spanMap)
103
+ return spanMap.lineNumberAt(offset);
104
+ let line = 1;
105
+ for (let i = 0; i < offset && i < input.length; i++)
106
+ if (input[i] === "\n")
107
+ line++;
108
+ return line;
109
+ },
110
+ isCitationAt: (offset) => spanMap?.isCitationAt(offset) ?? false,
111
+ };
112
+ };
113
+ let { spanAt, lineAt, isCitationAt } = buildSpanHelpers(content);
114
+ let result = content.replace(sourceReferencePattern(), (matched, ...args) => {
115
+ const offset = args[args.length - 2];
116
+ const span = spanAt(offset);
117
+ const line = lineAt(offset);
118
+ const base = { file, line, span, original: matched };
119
+ if (isCitationAt(offset)) {
120
+ record({ ...base, kind: "citation", decision: "preserve" });
121
+ return matched;
122
+ }
123
+ const classified = classifySourcePath(matched, table);
124
+ const runnable = span === "fenced";
125
+ if (!runnable) {
126
+ if (classified.kind === "mapped-asset" && classified.target !== null) {
127
+ record({ ...base, kind: "mapped-asset", decision: "rewrite", rewrittenTo: classified.target });
128
+ return classified.target;
129
+ }
130
+ record({
131
+ ...base,
132
+ kind: "unmapped-runtime",
133
+ decision: "rewrite",
134
+ rewrittenTo: classified.neutral,
135
+ reason: `${classified.reason}; neutralized`,
136
+ });
137
+ return classified.neutral;
138
+ }
139
+ // Runnable content: rewrite only with proof the referenced asset migrates
140
+ // too AND the target keeps the file suffix — a merged/non-directory target
141
+ // cannot express the file's real location, so rewriting would fabricate.
142
+ if (classified.kind === "mapped-asset" && classified.target !== null) {
143
+ if (classified.preservesSuffix && options.migratedRefs?.has(matched)) {
144
+ record({ ...base, kind: "mapped-asset", decision: "rewrite", rewrittenTo: classified.target });
145
+ return classified.target;
146
+ }
147
+ record({
148
+ ...base,
149
+ kind: "mapped-asset",
150
+ decision: "preserve-warn",
151
+ reason: classified.preservesSuffix
152
+ ? "referenced asset is not part of this migration; left unchanged instead of guessing a target path"
153
+ : "target surface is merged/non-directory; original path preserved to avoid a fabricated location",
154
+ });
155
+ return matched;
156
+ }
157
+ record({ ...base, kind: "unmapped-runtime", decision: "preserve-warn", reason: classified.reason });
158
+ return matched;
159
+ });
160
+ ({ spanAt, lineAt, isCitationAt } = buildSpanHelpers(result));
161
+ const configTarget = resolveReferenceTarget(table, "CLAUDE.md");
162
+ const configReplacement = configTarget ?? NEUTRAL_CONFIG_PHRASE;
163
+ result = result.replace(sourceConfigTokenPattern(), (matched, ...args) => {
164
+ const offset = args[args.length - 2];
165
+ const span = spanAt(offset);
166
+ const line = lineAt(offset);
167
+ const base = { file, line, span, original: matched };
168
+ if (isCitationAt(offset)) {
169
+ record({ ...base, kind: "citation", decision: "preserve" });
170
+ return matched;
171
+ }
172
+ if (span === "fenced") {
173
+ // Command examples keep the literal token — a rename would break the example.
174
+ record({ ...base, kind: "mapped-asset", decision: "preserve" });
175
+ return matched;
176
+ }
177
+ record({ ...base, kind: "mapped-asset", decision: "rewrite", rewrittenTo: configReplacement });
178
+ return configReplacement;
179
+ });
180
+ return { content: result, occurrences, warnings };
181
+ }
182
+ //# sourceMappingURL=fence-aware-reference-rewriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fence-aware-reference-rewriter.js","sourceRoot":"","sources":["../../../src/migrate/references/fence-aware-reference-rewriter.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,8EAA8E;AAC9E,8BAA8B;AAC9B,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,6CAA6C;AAC7C,yCAAyC;AACzC,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAE7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACN,WAAW,EACX,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAGtB,MAAM,gCAAgC,CAAC;AASxC;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAyB;IACtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;;YACjE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO;QACN,GAAG,CAAC,kBAA0B;YAC7B,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YACxE,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YACvC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,GAAG,OAA0D;IAE7D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAoC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC;AAmBD,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE9E,yEAAyE;AACzE,MAAM,mBAAmB,GAA+C;IACvE,KAAK,EAAE,0BAA0B;IACjC,MAAM,EAAE,8BAA8B;IACtC,QAAQ,EAAE,6BAA6B;IACvC,MAAM,EAAE,2BAA2B;IACnC,KAAK,EAAE,0BAA0B;CACjC,CAAC;AACF,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAW3D,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAA6B;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO;YACN,IAAI,EAAE,cAAc;YACpB,MAAM;YACN,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,IAAI,KAAK;YACnD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;SACV,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACb,OAAO;YACN,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC7E,MAAM,EAAE,mBAAmB,OAAO,UAAU;SAC5C,CAAC;IACH,CAAC;IACD,OAAO;QACN,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,KAAK;QACtB,OAAO,EAAE,GAAG,mBAAmB,GAAG,MAAM,EAAE;QAC1C,MAAM,EAAE,qDAAqD;KAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,OAAe,EACf,OAAsC;IAEtC,MAAM,KAAK,GAAG,0BAA0B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IACvF,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAEhC,MAAM,MAAM,GAAG,CAAC,UAA+B,EAAQ,EAAE;QACxD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,UAAU,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;YAC7C,QAAQ,CAAC,IAAI,CACZ,wCAAwC,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,QAAQ,OAAO,UAAU,CAAC,MAAM,EAAE,CAC3G,CAAC;QACH,CAAC;IACF,CAAC,CAAC;IAEF,8EAA8E;IAC9E,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACpF,OAAO;YACN,MAAM,EAAE,CAAC,MAAc,EAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ;YAC9E,MAAM,EAAE,CAAC,MAAc,EAAU,EAAE;gBAClC,IAAI,OAAO;oBAAE,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;wBAAE,IAAI,EAAE,CAAC;gBACnF,OAAO,IAAI,CAAC;YACb,CAAC;YACD,YAAY,EAAE,CAAC,MAAc,EAAW,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK;SACjF,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEjE,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAW,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAErD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5D,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,KAAK,QAAQ,CAAC;QAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACtE,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;YAC1B,CAAC;YACD,MAAM,CAAC;gBACN,GAAG,IAAI;gBACP,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,UAAU,CAAC,OAAO;gBAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,eAAe;aAC3C,CAAC,CAAC;YACH,OAAO,UAAU,CAAC,OAAO,CAAC;QAC3B,CAAC;QAED,0EAA0E;QAC1E,2EAA2E;QAC3E,yEAAyE;QACzE,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACtE,IAAI,UAAU,CAAC,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtE,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;YAC1B,CAAC;YACD,MAAM,CAAC;gBACN,GAAG,IAAI;gBACP,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,UAAU,CAAC,eAAe;oBACjC,CAAC,CAAC,kGAAkG;oBACpG,CAAC,CAAC,gGAAgG;aACnG,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,YAAY,IAAI,qBAAqB,CAAC;IAChE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAW,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAErD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5D,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvB,8EAA8E;YAC9E,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC/F,OAAO,iBAAiB,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ReferenceSpan } from "./reference-types.js";
2
+ export declare function isCitationLine(line: string): boolean;
3
+ export interface MarkdownSpanMap {
4
+ /** Span type at a byte offset in the original content */
5
+ spanAt(offset: number): ReferenceSpan;
6
+ /** 1-based line number at a byte offset */
7
+ lineNumberAt(offset: number): number;
8
+ /** Whether the line containing the offset is a citation/attribution line */
9
+ isCitationAt(offset: number): boolean;
10
+ }
11
+ export declare function buildMarkdownSpanMap(content: string): MarkdownSpanMap;
12
+ //# sourceMappingURL=reference-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-classifier.d.ts","sourceRoot":"","sources":["../../../src/migrate/references/reference-classifier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAc1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKpD;AAID,MAAM,WAAW,eAAe;IAC/B,yDAAyD;IACzD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IACtC,2CAA2C;IAC3C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,4EAA4E;IAC5E,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAuFD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAkCrE"}
@@ -0,0 +1,144 @@
1
+ // Markdown span tokenizer + citation detection for source-reference rewriting.
2
+ // Span resolution is line-based (frontmatter / fenced) with per-line inline-code
3
+ // detection. Ambiguous structures (unclosed fences) resolve to "fenced" so the
4
+ // rewriter stays conservative — never rewrite on uncertainty.
5
+ const FENCE_OPEN = /^ {0,3}(`{3,}|~{3,})/;
6
+ const FRONTMATTER_DELIMITER = /^---\s*$/;
7
+ // A line is a citation when it leads with an attribution verb, or is a
8
+ // blockquote carrying an external URL or a repo slug next to an attribution dash.
9
+ const CITATION_LEAD = /^(?:>\s*)*(?:source|from|ported\s+from)\b/i;
10
+ const BLOCKQUOTE = /^\s*>/;
11
+ const EXTERNAL_URL = /https?:\/\//i;
12
+ // Repo slug like "org/repo"; the lookbehind rejects path segments (".claude/rules", "a/b/c").
13
+ const REPO_SLUG = /(?<![\w./])[a-z0-9][\w.-]*\/[a-z0-9][\w.-]*(?![\w/])/i;
14
+ const ATTRIBUTION_DASH = /[—–]/;
15
+ export function isCitationLine(line) {
16
+ const trimmed = line.trim();
17
+ if (CITATION_LEAD.test(trimmed))
18
+ return true;
19
+ if (!BLOCKQUOTE.test(trimmed))
20
+ return false;
21
+ return EXTERNAL_URL.test(trimmed) || (REPO_SLUG.test(trimmed) && ATTRIBUTION_DASH.test(trimmed));
22
+ }
23
+ function buildLineStarts(content) {
24
+ const starts = [0];
25
+ for (let i = 0; i < content.length; i++) {
26
+ if (content[i] === "\n")
27
+ starts.push(i + 1);
28
+ }
29
+ return starts;
30
+ }
31
+ function lineIndexAt(lineStarts, offset) {
32
+ let lo = 0;
33
+ let hi = lineStarts.length - 1;
34
+ while (lo < hi) {
35
+ const mid = (lo + hi + 1) >> 1;
36
+ if (lineStarts[mid] <= offset)
37
+ lo = mid;
38
+ else
39
+ hi = mid - 1;
40
+ }
41
+ return lo;
42
+ }
43
+ function classifyLines(lines) {
44
+ const kinds = new Array(lines.length).fill("other");
45
+ let i = 0;
46
+ if (lines.length > 0 && FRONTMATTER_DELIMITER.test(lines[0])) {
47
+ const close = lines.findIndex((line, idx) => idx > 0 && FRONTMATTER_DELIMITER.test(line));
48
+ if (close > 0) {
49
+ for (let j = 0; j <= close; j++)
50
+ kinds[j] = "frontmatter";
51
+ i = close + 1;
52
+ }
53
+ }
54
+ let fenceMarker = null;
55
+ for (; i < lines.length; i++) {
56
+ const line = lines[i];
57
+ if (fenceMarker) {
58
+ kinds[i] = "fenced";
59
+ const close = line.match(FENCE_OPEN);
60
+ if (close && close[1][0] === fenceMarker.char && close[1].length >= fenceMarker.length && !line.trim().slice(close[1].length)) {
61
+ fenceMarker = null;
62
+ }
63
+ continue;
64
+ }
65
+ const open = line.match(FENCE_OPEN);
66
+ if (open) {
67
+ kinds[i] = "fenced";
68
+ fenceMarker = { char: open[1][0], length: open[1].length };
69
+ }
70
+ }
71
+ // An unclosed fence leaves fenceMarker set — remaining lines were already
72
+ // marked fenced inside the loop, which is the conservative resolution.
73
+ return kinds;
74
+ }
75
+ /** Inline code span ranges (column offsets, delimiters included) for one line. */
76
+ function inlineCodeRanges(line) {
77
+ const ranges = [];
78
+ let i = 0;
79
+ while (i < line.length) {
80
+ if (line[i] !== "`") {
81
+ i++;
82
+ continue;
83
+ }
84
+ let openLen = 0;
85
+ while (line[i + openLen] === "`")
86
+ openLen++;
87
+ const openEnd = i + openLen;
88
+ // Find a closing run of the same length.
89
+ let j = openEnd;
90
+ while (j < line.length) {
91
+ if (line[j] !== "`") {
92
+ j++;
93
+ continue;
94
+ }
95
+ let runLen = 0;
96
+ while (line[j + runLen] === "`")
97
+ runLen++;
98
+ if (runLen === openLen) {
99
+ ranges.push([i, j + runLen]);
100
+ break;
101
+ }
102
+ j += runLen;
103
+ }
104
+ i = j < line.length ? j + openLen : openEnd;
105
+ }
106
+ return ranges;
107
+ }
108
+ export function buildMarkdownSpanMap(content) {
109
+ const lines = content.split("\n");
110
+ const lineStarts = buildLineStarts(content);
111
+ const lineKinds = classifyLines(lines);
112
+ const citationCache = new Map();
113
+ const inlineCache = new Map();
114
+ return {
115
+ spanAt(offset) {
116
+ const lineIdx = lineIndexAt(lineStarts, offset);
117
+ const kind = lineKinds[lineIdx];
118
+ if (kind === "frontmatter")
119
+ return "frontmatter";
120
+ if (kind === "fenced")
121
+ return "fenced";
122
+ let ranges = inlineCache.get(lineIdx);
123
+ if (!ranges) {
124
+ ranges = inlineCodeRanges(lines[lineIdx]);
125
+ inlineCache.set(lineIdx, ranges);
126
+ }
127
+ const column = offset - lineStarts[lineIdx];
128
+ return ranges.some(([start, end]) => column >= start && column < end) ? "inline-code" : "prose";
129
+ },
130
+ lineNumberAt(offset) {
131
+ return lineIndexAt(lineStarts, offset) + 1;
132
+ },
133
+ isCitationAt(offset) {
134
+ const lineIdx = lineIndexAt(lineStarts, offset);
135
+ let cached = citationCache.get(lineIdx);
136
+ if (cached === undefined) {
137
+ cached = isCitationLine(lines[lineIdx]);
138
+ citationCache.set(lineIdx, cached);
139
+ }
140
+ return cached;
141
+ },
142
+ };
143
+ }
144
+ //# sourceMappingURL=reference-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-classifier.js","sourceRoot":"","sources":["../../../src/migrate/references/reference-classifier.ts"],"names":[],"mappings":"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"}