mewkit 1.13.0 → 1.14.1

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 (223) 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/apply-env-var-rewrites.d.ts +15 -0
  11. package/dist/migrate/apply-env-var-rewrites.d.ts.map +1 -0
  12. package/dist/migrate/apply-env-var-rewrites.js +26 -0
  13. package/dist/migrate/apply-env-var-rewrites.js.map +1 -0
  14. package/dist/migrate/config-merger/merge-single-sections.d.ts.map +1 -1
  15. package/dist/migrate/config-merger/merge-single-sections.js +4 -2
  16. package/dist/migrate/config-merger/merge-single-sections.js.map +1 -1
  17. package/dist/migrate/converters/command-to-codex-skill.d.ts +10 -0
  18. package/dist/migrate/converters/command-to-codex-skill.d.ts.map +1 -0
  19. package/dist/migrate/converters/command-to-codex-skill.js +88 -0
  20. package/dist/migrate/converters/command-to-codex-skill.js.map +1 -0
  21. package/dist/migrate/converters/direct-copy.d.ts +4 -1
  22. package/dist/migrate/converters/direct-copy.d.ts.map +1 -1
  23. package/dist/migrate/converters/direct-copy.js +19 -22
  24. package/dist/migrate/converters/direct-copy.js.map +1 -1
  25. package/dist/migrate/converters/fm-strip.d.ts.map +1 -1
  26. package/dist/migrate/converters/fm-strip.js +5 -1
  27. package/dist/migrate/converters/fm-strip.js.map +1 -1
  28. package/dist/migrate/converters/fm-to-codex-toml.d.ts +4 -1
  29. package/dist/migrate/converters/fm-to-codex-toml.d.ts.map +1 -1
  30. package/dist/migrate/converters/fm-to-codex-toml.js +8 -3
  31. package/dist/migrate/converters/fm-to-codex-toml.js.map +1 -1
  32. package/dist/migrate/converters/fm-to-fm.js +4 -4
  33. package/dist/migrate/converters/fm-to-fm.js.map +1 -1
  34. package/dist/migrate/converters/fm-to-json.d.ts.map +1 -1
  35. package/dist/migrate/converters/fm-to-json.js +2 -1
  36. package/dist/migrate/converters/fm-to-json.js.map +1 -1
  37. package/dist/migrate/converters/fm-to-yaml.js +1 -1
  38. package/dist/migrate/converters/fm-to-yaml.js.map +1 -1
  39. package/dist/migrate/converters/index.d.ts +7 -2
  40. package/dist/migrate/converters/index.d.ts.map +1 -1
  41. package/dist/migrate/converters/index.js +8 -8
  42. package/dist/migrate/converters/index.js.map +1 -1
  43. package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts +8 -0
  44. package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts.map +1 -0
  45. package/dist/migrate/converters/mcp-json-to-codex-toml.js +65 -0
  46. package/dist/migrate/converters/mcp-json-to-codex-toml.js.map +1 -0
  47. package/dist/migrate/converters/md-strip.d.ts +10 -1
  48. package/dist/migrate/converters/md-strip.d.ts.map +1 -1
  49. package/dist/migrate/converters/md-strip.js +27 -70
  50. package/dist/migrate/converters/md-strip.js.map +1 -1
  51. package/dist/migrate/converters/md-to-kiro-steering.js +1 -1
  52. package/dist/migrate/converters/md-to-kiro-steering.js.map +1 -1
  53. package/dist/migrate/converters/md-to-mdc.js +1 -1
  54. package/dist/migrate/converters/md-to-mdc.js.map +1 -1
  55. package/dist/migrate/converters/md-to-toml.js +1 -1
  56. package/dist/migrate/converters/md-to-toml.js.map +1 -1
  57. package/dist/migrate/discovery/config-discovery.d.ts +29 -0
  58. package/dist/migrate/discovery/config-discovery.d.ts.map +1 -1
  59. package/dist/migrate/discovery/config-discovery.js +45 -0
  60. package/dist/migrate/discovery/config-discovery.js.map +1 -1
  61. package/dist/migrate/discovery/handlers-json-filter.d.ts.map +1 -1
  62. package/dist/migrate/discovery/handlers-json-filter.js +4 -2
  63. package/dist/migrate/discovery/handlers-json-filter.js.map +1 -1
  64. package/dist/migrate/discovery/hooks-discovery.d.ts +5 -0
  65. package/dist/migrate/discovery/hooks-discovery.d.ts.map +1 -1
  66. package/dist/migrate/discovery/hooks-discovery.js +21 -5
  67. package/dist/migrate/discovery/hooks-discovery.js.map +1 -1
  68. package/dist/migrate/hooks/codex-features-flag.d.ts.map +1 -1
  69. package/dist/migrate/hooks/codex-features-flag.js +21 -6
  70. package/dist/migrate/hooks/codex-features-flag.js.map +1 -1
  71. package/dist/migrate/hooks/codex-hook-wrapper.d.ts +15 -1
  72. package/dist/migrate/hooks/codex-hook-wrapper.d.ts.map +1 -1
  73. package/dist/migrate/hooks/codex-hook-wrapper.js +79 -8
  74. package/dist/migrate/hooks/codex-hook-wrapper.js.map +1 -1
  75. package/dist/migrate/hooks/codex-mcp-installer.d.ts +9 -0
  76. package/dist/migrate/hooks/codex-mcp-installer.d.ts.map +1 -0
  77. package/dist/migrate/hooks/codex-mcp-installer.js +65 -0
  78. package/dist/migrate/hooks/codex-mcp-installer.js.map +1 -0
  79. package/dist/migrate/hooks/codex-path-safety.d.ts +29 -0
  80. package/dist/migrate/hooks/codex-path-safety.d.ts.map +1 -1
  81. package/dist/migrate/hooks/codex-path-safety.js +36 -1
  82. package/dist/migrate/hooks/codex-path-safety.js.map +1 -1
  83. package/dist/migrate/hooks/codex-sh-wrapper-script.d.ts +8 -0
  84. package/dist/migrate/hooks/codex-sh-wrapper-script.d.ts.map +1 -0
  85. package/dist/migrate/hooks/codex-sh-wrapper-script.js +118 -0
  86. package/dist/migrate/hooks/codex-sh-wrapper-script.js.map +1 -0
  87. package/dist/migrate/hooks/codex-shell-env-installer.d.ts +14 -0
  88. package/dist/migrate/hooks/codex-shell-env-installer.d.ts.map +1 -0
  89. package/dist/migrate/hooks/codex-shell-env-installer.js +82 -0
  90. package/dist/migrate/hooks/codex-shell-env-installer.js.map +1 -0
  91. package/dist/migrate/hooks/codex-toml-installer.d.ts +2 -0
  92. package/dist/migrate/hooks/codex-toml-installer.d.ts.map +1 -1
  93. package/dist/migrate/hooks/codex-toml-installer.js +18 -7
  94. package/dist/migrate/hooks/codex-toml-installer.js.map +1 -1
  95. package/dist/migrate/hooks/hooks-settings-merger.d.ts +3 -0
  96. package/dist/migrate/hooks/hooks-settings-merger.d.ts.map +1 -1
  97. package/dist/migrate/hooks/hooks-settings-merger.js +157 -21
  98. package/dist/migrate/hooks/hooks-settings-merger.js.map +1 -1
  99. package/dist/migrate/migrate-orchestrator.d.ts +19 -0
  100. package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
  101. package/dist/migrate/migrate-orchestrator.js +233 -26
  102. package/dist/migrate/migrate-orchestrator.js.map +1 -1
  103. package/dist/migrate/migrate-ui-summary.d.ts +25 -0
  104. package/dist/migrate/migrate-ui-summary.d.ts.map +1 -1
  105. package/dist/migrate/migrate-ui-summary.js +50 -0
  106. package/dist/migrate/migrate-ui-summary.js.map +1 -1
  107. package/dist/migrate/model-routing-config.d.ts +3 -1
  108. package/dist/migrate/model-routing-config.d.ts.map +1 -1
  109. package/dist/migrate/model-routing-config.js +28 -0
  110. package/dist/migrate/model-routing-config.js.map +1 -1
  111. package/dist/migrate/portability-policy.d.ts +3 -1
  112. package/dist/migrate/portability-policy.d.ts.map +1 -1
  113. package/dist/migrate/portability-policy.js +5 -31
  114. package/dist/migrate/portability-policy.js.map +1 -1
  115. package/dist/migrate/portable-installer.d.ts +17 -1
  116. package/dist/migrate/portable-installer.d.ts.map +1 -1
  117. package/dist/migrate/portable-installer.js +171 -9
  118. package/dist/migrate/portable-installer.js.map +1 -1
  119. package/dist/migrate/provider-registry-utils.d.ts.map +1 -1
  120. package/dist/migrate/provider-registry-utils.js +5 -0
  121. package/dist/migrate/provider-registry-utils.js.map +1 -1
  122. package/dist/migrate/providers/codex/capabilities.d.ts +6 -1
  123. package/dist/migrate/providers/codex/capabilities.d.ts.map +1 -1
  124. package/dist/migrate/providers/codex/capabilities.js +87 -0
  125. package/dist/migrate/providers/codex/capabilities.js.map +1 -1
  126. package/dist/migrate/providers/codex/config.d.ts.map +1 -1
  127. package/dist/migrate/providers/codex/config.js +27 -8
  128. package/dist/migrate/providers/codex/config.js.map +1 -1
  129. package/dist/migrate/providers/codex/contract.d.ts.map +1 -1
  130. package/dist/migrate/providers/codex/contract.js +4 -3
  131. package/dist/migrate/providers/codex/contract.js.map +1 -1
  132. package/dist/migrate/providers/codex/shell-env-policy-emitter.d.ts +27 -0
  133. package/dist/migrate/providers/codex/shell-env-policy-emitter.d.ts.map +1 -0
  134. package/dist/migrate/providers/codex/shell-env-policy-emitter.js +86 -0
  135. package/dist/migrate/providers/codex/shell-env-policy-emitter.js.map +1 -0
  136. package/dist/migrate/providers/provider-config-types.d.ts +1 -1
  137. package/dist/migrate/providers/provider-config-types.d.ts.map +1 -1
  138. package/dist/migrate/reconcile/index.d.ts +1 -1
  139. package/dist/migrate/reconcile/index.d.ts.map +1 -1
  140. package/dist/migrate/reconcile/index.js +1 -1
  141. package/dist/migrate/reconcile/index.js.map +1 -1
  142. package/dist/migrate/reconcile/portable-manifest.d.ts +18 -12
  143. package/dist/migrate/reconcile/portable-manifest.d.ts.map +1 -1
  144. package/dist/migrate/reconcile/portable-manifest.js +23 -0
  145. package/dist/migrate/reconcile/portable-manifest.js.map +1 -1
  146. package/dist/migrate/reconcile/portable-registry.d.ts +30 -30
  147. package/dist/migrate/reconcile/process-lock.d.ts.map +1 -1
  148. package/dist/migrate/reconcile/process-lock.js +10 -1
  149. package/dist/migrate/reconcile/process-lock.js.map +1 -1
  150. package/dist/migrate/reconcile/reconcile-state-builders.d.ts +12 -5
  151. package/dist/migrate/reconcile/reconcile-state-builders.d.ts.map +1 -1
  152. package/dist/migrate/reconcile/reconcile-state-builders.js +2 -2
  153. package/dist/migrate/reconcile/reconcile-state-builders.js.map +1 -1
  154. package/dist/migrate/references/codex-command-skill-path.d.ts +12 -0
  155. package/dist/migrate/references/codex-command-skill-path.d.ts.map +1 -0
  156. package/dist/migrate/references/codex-command-skill-path.js +27 -0
  157. package/dist/migrate/references/codex-command-skill-path.js.map +1 -0
  158. package/dist/migrate/references/env-var-rewrite-table.d.ts +36 -0
  159. package/dist/migrate/references/env-var-rewrite-table.d.ts.map +1 -0
  160. package/dist/migrate/references/env-var-rewrite-table.js +97 -0
  161. package/dist/migrate/references/env-var-rewrite-table.js.map +1 -0
  162. package/dist/migrate/references/fence-aware-reference-rewriter.d.ts +30 -0
  163. package/dist/migrate/references/fence-aware-reference-rewriter.d.ts.map +1 -0
  164. package/dist/migrate/references/fence-aware-reference-rewriter.js +182 -0
  165. package/dist/migrate/references/fence-aware-reference-rewriter.js.map +1 -0
  166. package/dist/migrate/references/reference-classifier.d.ts +27 -0
  167. package/dist/migrate/references/reference-classifier.d.ts.map +1 -0
  168. package/dist/migrate/references/reference-classifier.js +177 -0
  169. package/dist/migrate/references/reference-classifier.js.map +1 -0
  170. package/dist/migrate/references/reference-target-registry.d.ts +42 -0
  171. package/dist/migrate/references/reference-target-registry.d.ts.map +1 -0
  172. package/dist/migrate/references/reference-target-registry.js +100 -0
  173. package/dist/migrate/references/reference-target-registry.js.map +1 -0
  174. package/dist/migrate/references/reference-types.d.ts +23 -0
  175. package/dist/migrate/references/reference-types.d.ts.map +1 -0
  176. package/dist/migrate/references/reference-types.js +5 -0
  177. package/dist/migrate/references/reference-types.js.map +1 -0
  178. package/dist/migrate/runtime-compat-audit.d.ts +3 -1
  179. package/dist/migrate/runtime-compat-audit.d.ts.map +1 -1
  180. package/dist/migrate/runtime-compat-audit.js +10 -5
  181. package/dist/migrate/runtime-compat-audit.js.map +1 -1
  182. package/dist/migrate/runtime-coupling-patterns.d.ts +32 -3
  183. package/dist/migrate/runtime-coupling-patterns.d.ts.map +1 -1
  184. package/dist/migrate/runtime-coupling-patterns.js +51 -8
  185. package/dist/migrate/runtime-coupling-patterns.js.map +1 -1
  186. package/dist/migrate/skill-directory-audit.d.ts +17 -0
  187. package/dist/migrate/skill-directory-audit.d.ts.map +1 -1
  188. package/dist/migrate/skill-directory-audit.js +70 -11
  189. package/dist/migrate/skill-directory-audit.js.map +1 -1
  190. package/dist/migrate/skill-directory-installer.d.ts +5 -0
  191. package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
  192. package/dist/migrate/skill-directory-installer.js +115 -9
  193. package/dist/migrate/skill-directory-installer.js.map +1 -1
  194. package/dist/migrate/state-changing-script-detector.d.ts +16 -0
  195. package/dist/migrate/state-changing-script-detector.d.ts.map +1 -0
  196. package/dist/migrate/state-changing-script-detector.js +144 -0
  197. package/dist/migrate/state-changing-script-detector.js.map +1 -0
  198. package/dist/migrate/types.d.ts +20 -10
  199. package/dist/migrate/types.d.ts.map +1 -1
  200. package/dist/migrate/types.js +4 -0
  201. package/dist/migrate/types.js.map +1 -1
  202. package/dist/migrate/validation/migrate-conversion-report.d.ts +48 -0
  203. package/dist/migrate/validation/migrate-conversion-report.d.ts.map +1 -0
  204. package/dist/migrate/validation/migrate-conversion-report.js +146 -0
  205. package/dist/migrate/validation/migrate-conversion-report.js.map +1 -0
  206. package/dist/migrate/validation/migration-ledger-inputs.d.ts +56 -0
  207. package/dist/migrate/validation/migration-ledger-inputs.d.ts.map +1 -0
  208. package/dist/migrate/validation/migration-ledger-inputs.js +160 -0
  209. package/dist/migrate/validation/migration-ledger-inputs.js.map +1 -0
  210. package/dist/migrate/validation/migration-record-types.d.ts +38 -0
  211. package/dist/migrate/validation/migration-record-types.d.ts.map +1 -0
  212. package/dist/migrate/validation/migration-record-types.js +12 -0
  213. package/dist/migrate/validation/migration-record-types.js.map +1 -0
  214. package/dist/migrate/validation/migration-report-writer.d.ts +98 -0
  215. package/dist/migrate/validation/migration-report-writer.d.ts.map +1 -0
  216. package/dist/migrate/validation/migration-report-writer.js +0 -0
  217. package/dist/migrate/validation/migration-report-writer.js.map +1 -0
  218. package/dist/migrate/validation/unresolved-reference-scanner.d.ts +18 -0
  219. package/dist/migrate/validation/unresolved-reference-scanner.d.ts.map +1 -0
  220. package/dist/migrate/validation/unresolved-reference-scanner.js +47 -0
  221. package/dist/migrate/validation/unresolved-reference-scanner.js.map +1 -0
  222. package/package.json +1 -1
  223. package/portable-manifest.json +10 -2
@@ -0,0 +1,144 @@
1
+ // Conservative detector for state-changing commands inside a migrated executable
2
+ // script. Used by the fail-closed script policy: a script that both (a) contains a
3
+ // state-changing command AND (b) carries a Claude-runtime coupling match stays
4
+ // FAIL-CLOSED — a rewrite path never downgrades it.
5
+ //
6
+ // SECURITY: this detector is deliberately over-inclusive within each language. A
7
+ // false positive keeps a harmless script fail-closed (safe, escalated with
8
+ // evidence); a false negative would let a destructive script downgrade to a
9
+ // warning (unsafe). It is scoped by language so a numeric comparison (`x > 100`) in
10
+ // a Python/JS file is not mistaken for a shell redirect — that scoping removes a
11
+ // large false-positive class WITHOUT weakening detection of real writes, which in
12
+ // those languages use explicit APIs (open('w'), writeFileSync, os.remove, ...).
13
+ // Content is DATA — pattern-matched here, never executed and never used to build
14
+ // any output.
15
+ import { extname } from "node:path";
16
+ /** Cross-language state-changing commands (invoked via a shell in any script). */
17
+ const COMMON_PATTERNS = [
18
+ // Destructive filesystem removal (word-boundary rm, with a flag or path arg).
19
+ { pattern: /(^|[;&|(]|\bsudo\s+|&&\s*|\|\|\s*)\brm\s+-|\brm\s+["'$]/m, reason: "runs rm (filesystem delete)" },
20
+ { pattern: /\brmdir\b/, reason: "runs rmdir" },
21
+ // Remote-mutating git.
22
+ { pattern: /\bgit\s+push\b/, reason: "runs git push" },
23
+ // Mutating HTTP verbs.
24
+ { pattern: /\bcurl\b[^\n]*\s-X\s*(POST|PUT|DELETE|PATCH)\b/i, reason: "issues a mutating HTTP request (curl -X)" },
25
+ { pattern: /\bcurl\b[^\n]*--request\s*(POST|PUT|DELETE|PATCH)\b/i, reason: "issues a mutating HTTP request (curl --request)" },
26
+ { pattern: /\bwget\b[^\n]*--method=(POST|PUT|DELETE|PATCH)\b/i, reason: "issues a mutating HTTP request (wget --method)" },
27
+ // Security-sensitive env mutation: export/unset of a credential/secret var.
28
+ {
29
+ pattern: /\b(export|unset)\s+[A-Z0-9_]*(TOKEN|SECRET|KEY|PASSWORD|CREDENTIAL|API)[A-Z0-9_]*/,
30
+ reason: "exports/unsets a security-sensitive environment variable",
31
+ },
32
+ ];
33
+ // Shell file-write via redirection. This is line-based instead of a single regex
34
+ // so it can (a) skip comment lines and (b) ignore `>` that lives inside a quoted
35
+ // string (e.g. an embedded awk body `'if (x > 0)'`). A real redirect is `>`/`>>`
36
+ // followed by a filename target, excluding fd redirects (`2>&1`, `>&2`) and the
37
+ // comparison/arrow operators (`>=`, `->`, `=>`). Reduces the large false-positive
38
+ // class of usage-comment arrows and quoted comparisons WITHOUT missing real writes.
39
+ function shellWritesViaRedirection(content) {
40
+ for (const rawLine of content.split("\n")) {
41
+ // Strip a leading-comment line entirely.
42
+ const trimmed = rawLine.replace(/^\s+/, "");
43
+ if (trimmed.startsWith("#"))
44
+ continue;
45
+ // Collapse quoted regions to a single placeholder token `Q` so a `>` INSIDE a
46
+ // string (awk body `'if (x > 0)'`) disappears, but a quoted redirect TARGET
47
+ // (`> "$file"` → `> Q`) is still recognized as a write target.
48
+ const unquoted = rawLine.replace(/'[^']*'/g, "Q").replace(/"[^"]*"/g, "Q");
49
+ // Drop an inline comment tail (best-effort — after quote collapse).
50
+ const code = unquoted.replace(/#.*$/, "");
51
+ // Remove `<placeholder>` angle-bracket tokens (usage text like `<rubric.md>`),
52
+ // which are never real redirects; then discard non-file redirect targets
53
+ // (`>/dev/null`, `>&2`, `> /dev/stderr`).
54
+ const withoutDiscards = code
55
+ .replace(/<[^<>\s][^<>]*>/g, "")
56
+ .replace(/>>?\s*&?\s*\/?dev\/\w+/g, "")
57
+ .replace(/>>?\s*&\s*\d/g, "");
58
+ // A real file-writing redirect: `>`/`>>` not part of an fd/compare/arrow
59
+ // operator, followed by a filename target (quote, $var, path, or word) — but
60
+ // NOT a bare number (`> 0` is an awk/test comparison, not a redirect).
61
+ if (/(^|[^0-9&<>=!$-])>>?(?![>=&])\s*(?![0-9]+\b)[$A-Za-z0-9_./~-]/.test(withoutDiscards))
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ const PYTHON_PATTERNS = [
67
+ { pattern: /\bopen\s*\([^)]*,\s*["'][wax]\+?b?["']/, reason: "opens a file for writing (Python)" },
68
+ { pattern: /\.write_text\s*\(|\.write_bytes\s*\(/, reason: "writes a file (Python pathlib)" },
69
+ { pattern: /\bos\.remove\b|\bos\.unlink\b|\bshutil\.rmtree\b|\bos\.rmdir\b/, reason: "removes files (Python)" },
70
+ { pattern: /\bos\.makedirs\b|\bos\.mkdir\b|\.mkdir\s*\(/, reason: "creates directories (Python)" },
71
+ ];
72
+ const NODE_PATTERNS = [
73
+ {
74
+ pattern: /\b(writeFile|writeFileSync|appendFile|appendFileSync|rmSync|unlink|unlinkSync|mkdirSync)\s*\(/,
75
+ reason: "writes/removes files (Node fs)",
76
+ },
77
+ { pattern: /\bfs\.rm\s*\(/, reason: "removes files (Node fs)" },
78
+ ];
79
+ export function languageFor(filePath) {
80
+ switch (extname(filePath).toLowerCase()) {
81
+ case ".sh":
82
+ return "shell";
83
+ case ".py":
84
+ return "python";
85
+ case ".js":
86
+ case ".cjs":
87
+ case ".mjs":
88
+ case ".ts":
89
+ case ".tsx":
90
+ return "node";
91
+ default:
92
+ return "unknown";
93
+ }
94
+ }
95
+ /** Strip comment lines + inline comments so a mention in a comment is not a match. */
96
+ function stripComments(content, language) {
97
+ const lineComment = language === "node" ? "//" : "#";
98
+ return content
99
+ .split("\n")
100
+ .map((raw) => {
101
+ const trimmed = raw.replace(/^\s+/, "");
102
+ if (trimmed.startsWith(lineComment))
103
+ return "";
104
+ // Best-effort inline-comment strip after removing quoted regions so a `#`/`//`
105
+ // inside a string is not treated as a comment start.
106
+ const unquoted = raw.replace(/'[^']*'/g, "''").replace(/"[^"]*"/g, '""');
107
+ const idx = unquoted.indexOf(lineComment);
108
+ return idx >= 0 ? raw.slice(0, idx) : raw;
109
+ })
110
+ .join("\n");
111
+ }
112
+ /**
113
+ * Report whether `content` contains a state-changing command. `language` scopes the
114
+ * language-specific rules; omit it (or pass "unknown") to apply ALL rules — the
115
+ * most conservative choice. Comment lines and (for shell command patterns) quoted
116
+ * strings are excluded so a mention in a comment/string is not a false positive.
117
+ * `content` is DATA: matched, never executed.
118
+ */
119
+ export function detectStateChanging(content, language = "unknown") {
120
+ const code = stripComments(content, language);
121
+ // Shell command patterns (rm/git/curl/export) — also strip quoted strings so a
122
+ // command name mentioned inside a string literal is not a match.
123
+ const shellCode = code.replace(/'[^']*'/g, "''").replace(/"[^"]*"/g, '""');
124
+ for (const { pattern, reason } of COMMON_PATTERNS) {
125
+ if (pattern.test(shellCode))
126
+ return { stateChanging: true, reason };
127
+ }
128
+ // Language file-write APIs — need argument quotes preserved (e.g. open(..,'w')).
129
+ if (language === "python" || language === "unknown") {
130
+ for (const { pattern, reason } of PYTHON_PATTERNS)
131
+ if (pattern.test(code))
132
+ return { stateChanging: true, reason };
133
+ }
134
+ if (language === "node" || language === "unknown") {
135
+ for (const { pattern, reason } of NODE_PATTERNS)
136
+ if (pattern.test(code))
137
+ return { stateChanging: true, reason };
138
+ }
139
+ if ((language === "shell" || language === "unknown") && shellWritesViaRedirection(code)) {
140
+ return { stateChanging: true, reason: "writes files via redirection" };
141
+ }
142
+ return { stateChanging: false };
143
+ }
144
+ //# sourceMappingURL=state-changing-script-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-changing-script-detector.js","sourceRoot":"","sources":["../../src/migrate/state-changing-script-detector.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,8 @@ export interface ConversionResult {
54
54
  filename: string;
55
55
  warnings: string[];
56
56
  error?: string;
57
+ /** Classified source-reference decisions made while converting (report layer input) */
58
+ occurrences?: import("./references/reference-types.js").ReferenceOccurrence[];
57
59
  }
58
60
  /** Result of installing a portable item to a provider */
59
61
  export interface PortableInstallResult {
@@ -111,44 +113,52 @@ export declare const MigrateOptionsSchema: z.ZodObject<{
111
113
  respectDeletions: z.ZodOptional<z.ZodBoolean>;
112
114
  sourceVersion: z.ZodOptional<z.ZodString>;
113
115
  providers: z.ZodOptional<z.ZodBoolean>;
116
+ /** Merge ALL rules into the provider instruction file, bypassing the portability filter */
117
+ allRules: z.ZodOptional<z.ZodBoolean>;
118
+ /** Opt-in: convert .mcp.json server definitions into the provider MCP config */
119
+ includeMcp: z.ZodOptional<z.ZodBoolean>;
114
120
  }, "strip", z.ZodTypeAny, {
115
- force?: boolean | undefined;
121
+ providers?: boolean | undefined;
122
+ source?: string | undefined;
116
123
  tool?: string | undefined;
117
- install?: boolean | undefined;
124
+ global?: boolean | undefined;
118
125
  tools?: string[] | undefined;
119
126
  all?: boolean | undefined;
120
- global?: boolean | undefined;
121
127
  yes?: boolean | undefined;
122
128
  dryRun?: boolean | undefined;
123
- source?: string | undefined;
129
+ force?: boolean | undefined;
124
130
  only?: string | undefined;
125
131
  skipConfig?: boolean | undefined;
126
132
  skipRules?: boolean | undefined;
127
133
  skipHooks?: boolean | undefined;
134
+ install?: boolean | undefined;
128
135
  reconcile?: boolean | undefined;
129
136
  reinstallEmptyDirs?: boolean | undefined;
130
137
  respectDeletions?: boolean | undefined;
131
138
  sourceVersion?: string | undefined;
132
- providers?: boolean | undefined;
139
+ allRules?: boolean | undefined;
140
+ includeMcp?: boolean | undefined;
133
141
  }, {
134
- force?: boolean | undefined;
142
+ providers?: boolean | undefined;
143
+ source?: string | undefined;
135
144
  tool?: string | undefined;
136
- install?: boolean | undefined;
145
+ global?: boolean | undefined;
137
146
  tools?: string[] | undefined;
138
147
  all?: boolean | undefined;
139
- global?: boolean | undefined;
140
148
  yes?: boolean | undefined;
141
149
  dryRun?: boolean | undefined;
142
- source?: string | undefined;
150
+ force?: boolean | undefined;
143
151
  only?: string | undefined;
144
152
  skipConfig?: boolean | undefined;
145
153
  skipRules?: boolean | undefined;
146
154
  skipHooks?: boolean | undefined;
155
+ install?: boolean | undefined;
147
156
  reconcile?: boolean | undefined;
148
157
  reinstallEmptyDirs?: boolean | undefined;
149
158
  respectDeletions?: boolean | undefined;
150
159
  sourceVersion?: string | undefined;
151
- providers?: boolean | undefined;
160
+ allRules?: boolean | undefined;
161
+ includeMcp?: boolean | undefined;
152
162
  }>;
153
163
  export type MigrateOptions = z.infer<typeof MigrateOptionsSchema>;
154
164
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"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"}
@@ -41,5 +41,9 @@ export const MigrateOptionsSchema = z.object({
41
41
  respectDeletions: z.boolean().optional(),
42
42
  sourceVersion: z.string().optional(),
43
43
  providers: z.boolean().optional(),
44
+ /** Merge ALL rules into the provider instruction file, bypassing the portability filter */
45
+ allRules: z.boolean().optional(),
46
+ /** Opt-in: convert .mcp.json server definitions into the provider MCP config */
47
+ includeMcp: z.boolean().optional(),
44
48
  });
45
49
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,oFAAoF;AACpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,aAAa;IACb,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,OAAO;IACP,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,UAAU;IACV,OAAO;IACP,WAAW;CACX,CAAC,CAAC;AA4GH,yCAAyC;AACzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,+FAA+F;IAC/F,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,oFAAoF;AACpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,aAAa;IACb,QAAQ;IACR,OAAO;IACP,OAAO;IACP,UAAU;IACV,OAAO;IACP,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,UAAU;IACV,OAAO;IACP,WAAW;CACX,CAAC,CAAC;AA8GH,yCAAyC;AACzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,+FAA+F;IAC/F,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjC,2FAA2F;IAC3F,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,gFAAgF;IAChF,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { type ReferenceIntegrityIndex } from "../references/fence-aware-reference-rewriter.js";
2
+ import type { ReferenceOccurrence } from "../references/reference-types.js";
3
+ import type { ReconcileAction } from "../reconcile/reconcile-types.js";
4
+ import type { PortableItem, PortableType, ProviderType, SkillInfo } from "../types.js";
5
+ import type { MigrationDecisionRecord } from "./migration-record-types.js";
6
+ /**
7
+ * Run-ledger: an append-only accumulator of per-artifact decision records emitted
8
+ * across the migration run (Phase 1 reference occurrences, Phase 2 hook decisions,
9
+ * Phase 3 skill audit/waiver decisions, plus the orchestrator's install outcomes).
10
+ * The Phase 6 report writer serializes this ledger into `migration-report.{json,md}`.
11
+ *
12
+ * This is purely additive to the existing preflight `ConversionReport` — the
13
+ * preflight builder is unchanged; the ledger is the new run-time collection point.
14
+ */
15
+ export declare class MigrationLedger {
16
+ private readonly records;
17
+ /** Append one decision record (no-op for null/undefined). */
18
+ add(record: MigrationDecisionRecord | null | undefined): void;
19
+ /** Append many decision records; null/undefined entries are ignored. */
20
+ addAll(records: readonly (MigrationDecisionRecord | null | undefined)[] | undefined): void;
21
+ /** Snapshot of every decision recorded so far (defensive copy). */
22
+ all(): MigrationDecisionRecord[];
23
+ get size(): number;
24
+ }
25
+ export interface ConversionReport {
26
+ /** Preserved-with-warning references: "file:line — ref (reason)" */
27
+ warnedReferences: string[];
28
+ /** Unique converter warnings (unsupported concepts, manual adaptations, ...) */
29
+ conversionWarnings: string[];
30
+ /** Projected merged-instruction-file budget status lines */
31
+ budgetLines: string[];
32
+ /** Internal invariant violations from the unresolved-reference scanner */
33
+ validationErrors: string[];
34
+ /**
35
+ * Raw preserved-with-warning occurrences (file/line/original/reason), for the
36
+ * run-report ledger. Additive: the preflight printer reads `warnedReferences`;
37
+ * this field lets the ledger attach concrete file:line:pattern detail per
38
+ * artifact. The `.env` reason is reclassified downstream via classifyEnvReference.
39
+ */
40
+ preservedOccurrences: ReferenceOccurrence[];
41
+ }
42
+ export declare function buildConversionReport(input: {
43
+ actions: ReconcileAction[];
44
+ itemsByType: Record<PortableType, PortableItem[]>;
45
+ skillsByProvider: Map<ProviderType, SkillInfo[]>;
46
+ migratedRefs: ReferenceIntegrityIndex;
47
+ }): ConversionReport;
48
+ //# sourceMappingURL=migrate-conversion-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-conversion-report.d.ts","sourceRoot":"","sources":["../../../src/migrate/validation/migrate-conversion-report.ts"],"names":[],"mappings":"AAUA,OAAO,EAIN,KAAK,uBAAuB,EAC5B,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAG3E;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,6DAA6D;IAC7D,GAAG,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAI7D,wEAAwE;IACxE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI;IAK1F,mEAAmE;IACnE,GAAG,IAAI,uBAAuB,EAAE;IAIhC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACD;AAED,MAAM,WAAW,gBAAgB;IAChC,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC5C;AAqBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC5C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAClD,gBAAgB,EAAE,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,YAAY,EAAE,uBAAuB,CAAC;CACtC,GAAG,gBAAgB,CAqFnB"}
@@ -0,0 +1,146 @@
1
+ // Builds the pre-install conversion report: converts every planned item
2
+ // in-memory (plus portable skill markdown), aggregates classifier decisions,
3
+ // and runs the unresolved-reference scanner. Console/in-memory only — nothing
4
+ // here writes into the target project.
5
+ import { readFileSync, readdirSync, statSync } from "node:fs";
6
+ import { join, relative } from "node:path";
7
+ import { convertItem } from "../converters/index.js";
8
+ import { providers } from "../provider-registry.js";
9
+ import { codexBudgetRaiseGuidance } from "../portable-installer.js";
10
+ import { combineIntegrityIndexes, createReferenceIntegrityIndex, rewriteSourceReferences, } from "../references/fence-aware-reference-rewriter.js";
11
+ import { scanUnresolvedReferences } from "./unresolved-reference-scanner.js";
12
+ /**
13
+ * Run-ledger: an append-only accumulator of per-artifact decision records emitted
14
+ * across the migration run (Phase 1 reference occurrences, Phase 2 hook decisions,
15
+ * Phase 3 skill audit/waiver decisions, plus the orchestrator's install outcomes).
16
+ * The Phase 6 report writer serializes this ledger into `migration-report.{json,md}`.
17
+ *
18
+ * This is purely additive to the existing preflight `ConversionReport` — the
19
+ * preflight builder is unchanged; the ledger is the new run-time collection point.
20
+ */
21
+ export class MigrationLedger {
22
+ records = [];
23
+ /** Append one decision record (no-op for null/undefined). */
24
+ add(record) {
25
+ if (record)
26
+ this.records.push(record);
27
+ }
28
+ /** Append many decision records; null/undefined entries are ignored. */
29
+ addAll(records) {
30
+ if (!records)
31
+ return;
32
+ for (const record of records)
33
+ this.add(record);
34
+ }
35
+ /** Snapshot of every decision recorded so far (defensive copy). */
36
+ all() {
37
+ return [...this.records];
38
+ }
39
+ get size() {
40
+ return this.records.length;
41
+ }
42
+ }
43
+ const TYPE_KEY = {
44
+ agent: "agents",
45
+ command: "commands",
46
+ skill: "skills",
47
+ config: "config",
48
+ rules: "rules",
49
+ hooks: "hooks",
50
+ };
51
+ function collectMarkdownFiles(dir) {
52
+ const files = [];
53
+ for (const entry of readdirSync(dir)) {
54
+ const full = join(dir, entry);
55
+ if (statSync(full).isDirectory())
56
+ files.push(...collectMarkdownFiles(full));
57
+ else if (entry.toLowerCase().endsWith(".md"))
58
+ files.push(full);
59
+ }
60
+ return files;
61
+ }
62
+ export function buildConversionReport(input) {
63
+ const outputs = [];
64
+ const occurrences = [];
65
+ const conversionWarnings = new Set();
66
+ const budgetByTarget = new Map();
67
+ for (const action of input.actions) {
68
+ if (action.action !== "install" && action.action !== "update" && action.action !== "conflict")
69
+ continue;
70
+ const provider = action.provider;
71
+ const pathConfig = providers[provider]?.[TYPE_KEY[action.type]];
72
+ if (!pathConfig)
73
+ continue;
74
+ const item = input.itemsByType[action.type]?.find((i) => i.name === action.item);
75
+ if (!item)
76
+ continue;
77
+ const conversion = convertItem(item, pathConfig.format, provider, { migratedRefs: input.migratedRefs });
78
+ if (conversion.error)
79
+ continue;
80
+ const file = `${provider}/${action.type}/${action.item}`;
81
+ outputs.push({ file, content: conversion.content, occurrences: conversion.occurrences ?? [] });
82
+ occurrences.push(...(conversion.occurrences ?? []).map((o) => ({ ...o, file: o.file || file })));
83
+ for (const warning of conversion.warnings)
84
+ conversionWarnings.add(warning);
85
+ if (pathConfig.writeStrategy === "merge-single" && pathConfig.totalCharLimit) {
86
+ const key = `${provider}:${pathConfig.projectPath ?? pathConfig.globalPath ?? ""}`;
87
+ const entry = budgetByTarget.get(key) ?? { bytes: 0, budget: pathConfig.totalCharLimit, provider };
88
+ entry.bytes += Buffer.byteLength(conversion.content, "utf-8");
89
+ budgetByTarget.set(key, entry);
90
+ }
91
+ }
92
+ for (const [provider, skills] of input.skillsByProvider) {
93
+ if (!providers[provider]?.skills)
94
+ continue;
95
+ for (const skill of skills) {
96
+ const selfIndex = createReferenceIntegrityIndex([`.claude/skills/${skill.dirName}/`]);
97
+ const index = combineIntegrityIndexes(selfIndex, input.migratedRefs);
98
+ let files;
99
+ try {
100
+ files = collectMarkdownFiles(skill.sourcePath);
101
+ }
102
+ catch {
103
+ continue;
104
+ }
105
+ for (const filePath of files) {
106
+ const relName = relative(skill.sourcePath, filePath);
107
+ const file = `${provider}/skill/${skill.name}/${relName}`;
108
+ let content;
109
+ try {
110
+ content = readFileSync(filePath, "utf-8");
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ const rewritten = rewriteSourceReferences(content, { provider, file, migratedRefs: index });
116
+ outputs.push({ file, content: rewritten.content, occurrences: rewritten.occurrences });
117
+ occurrences.push(...rewritten.occurrences);
118
+ }
119
+ }
120
+ }
121
+ const preservedOccurrences = occurrences.filter((o) => o.decision === "preserve-warn");
122
+ const warnedReferences = preservedOccurrences.map((o) => `${o.file}:${o.line} — ${o.original}${o.reason ? ` (${o.reason})` : ""}`);
123
+ // Projection reflects the real single-file layout plus, for Codex over-budget targets, the
124
+ // doc-grounded config-raise recommendation (project_doc_max_bytes) — NOT a phantom nested
125
+ // split. Codex applies the cap to the combined instruction chain, so splitting does not raise
126
+ // the effective budget (https://developers.openai.com/codex/guides/agents-md).
127
+ const budgetLines = Array.from(budgetByTarget.entries()).flatMap(([key, { bytes, budget, provider }]) => {
128
+ const over = bytes > budget;
129
+ const status = over ? "OVER budget — the runtime truncates at the cap" : "within budget";
130
+ const line = `${key}: projected ~${bytes} B of ${budget} B, single file (${status})`;
131
+ if (!over)
132
+ return [line];
133
+ const guidance = codexBudgetRaiseGuidance(provider, bytes, budget);
134
+ return guidance ? [line, `${key}: ${guidance}`] : [line];
135
+ });
136
+ const findings = scanUnresolvedReferences(outputs);
137
+ const validationErrors = findings.map((f) => `${f.file}:${f.line} — ${f.message}`);
138
+ return {
139
+ warnedReferences,
140
+ conversionWarnings: Array.from(conversionWarnings),
141
+ budgetLines,
142
+ validationErrors,
143
+ preservedOccurrences,
144
+ };
145
+ }
146
+ //# sourceMappingURL=migrate-conversion-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-conversion-report.js","sourceRoot":"","sources":["../../../src/migrate/validation/migrate-conversion-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { ReferenceOccurrence } from "../references/reference-types.js";
2
+ import type { DiscoveredItems } from "../migrate-discover.js";
3
+ import type { PortableType, ProviderType } from "../types.js";
4
+ import type { MigrationDecisionRecord } from "./migration-record-types.js";
5
+ /** One discovered source artifact, normalized for record building. */
6
+ interface DiscoveredArtifact {
7
+ source: string;
8
+ type: PortableType;
9
+ }
10
+ /**
11
+ * Enumerate every discovered source artifact as `{source, type}`. This is the
12
+ * identity-check denominator: every entry here becomes exactly one primary record.
13
+ * Shell hooks filtered out at discovery are included as skipped artifacts so the
14
+ * dropped-safety-hook loss (gate-enforcement, privacy-block, …) is never silent.
15
+ */
16
+ export declare function enumerateDiscoveredArtifacts(discovered: DiscoveredItems): DiscoveredArtifact[];
17
+ /**
18
+ * Index install results by the artifact they installed. Bulk shims (codex agents /
19
+ * hooks) carry aggregate item labels, so per-artifact outcomes come from the
20
+ * explicit `installedArtifacts` map the orchestrator threads alongside, not from
21
+ * the shim label.
22
+ */
23
+ export interface RunOutcome {
24
+ outcome: "migrated" | "failed";
25
+ target?: string;
26
+ /** Present when outcome === "failed" — the raw installer error message. */
27
+ error?: string;
28
+ /** True when the failure came from an internal (non-audit) installer exception. */
29
+ internalError?: boolean;
30
+ }
31
+ export interface BuildRunRecordsInput {
32
+ discovered: DiscoveredItems;
33
+ provider: ProviderType;
34
+ /** Per-artifact outcome keyed by `${type}:${source}` (from the orchestrator). */
35
+ outcomes: Map<string, RunOutcome>;
36
+ /** Structured records emitted by Phase 1-3 producers (skills, hooks, references). */
37
+ phaseRecords: readonly MigrationDecisionRecord[];
38
+ /** Preserved-with-warning reference occurrences (from the conversion report). */
39
+ preservedOccurrences: readonly ReferenceOccurrence[];
40
+ }
41
+ /**
42
+ * Reclassify a preserved occurrence's report reason: a `.claude/.env` reference now
43
+ * points at the emitted [shell_environment_policy] scaffold instead of the stale
44
+ * "no provider equivalent" phrase. Item D — routed ONLY here (report-reason layer),
45
+ * never in the rewriter's decision rules.
46
+ */
47
+ export declare function reportReasonForOccurrence(occurrence: ReferenceOccurrence): string;
48
+ /**
49
+ * Build the complete per-discovered-artifact record list. Exactly one primary
50
+ * record per discovered artifact (identity invariant). Phase records that carry a
51
+ * more severe outcome for the same artifact escalate the primary record's status;
52
+ * preserved occurrences attach as enrichment on the owning primary record.
53
+ */
54
+ export declare function buildRunRecords(input: BuildRunRecordsInput): MigrationDecisionRecord[];
55
+ export {};
56
+ //# sourceMappingURL=migration-ledger-inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-ledger-inputs.d.ts","sourceRoot":"","sources":["../../../src/migrate/validation/migration-ledger-inputs.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAoB,MAAM,6BAA6B,CAAC;AAE7F,sEAAsE;AACtE,UAAU,kBAAkB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,eAAe,GAAG,kBAAkB,EAAE,CAU9F;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,iFAAiF;IACjF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,qFAAqF;IACrF,YAAY,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACjD,iFAAiF;IACjF,oBAAoB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACrD;AAaD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAIjF;AAiBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,uBAAuB,EAAE,CA6DtF"}