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.
- package/README.md +37 -0
- package/dist/commands/migrate.d.ts +2 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +2 -0
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/validate.js +14 -7
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/migrate/apply-env-var-rewrites.d.ts +15 -0
- package/dist/migrate/apply-env-var-rewrites.d.ts.map +1 -0
- package/dist/migrate/apply-env-var-rewrites.js +26 -0
- package/dist/migrate/apply-env-var-rewrites.js.map +1 -0
- package/dist/migrate/config-merger/merge-single-sections.d.ts.map +1 -1
- package/dist/migrate/config-merger/merge-single-sections.js +4 -2
- package/dist/migrate/config-merger/merge-single-sections.js.map +1 -1
- package/dist/migrate/converters/command-to-codex-skill.d.ts +10 -0
- package/dist/migrate/converters/command-to-codex-skill.d.ts.map +1 -0
- package/dist/migrate/converters/command-to-codex-skill.js +88 -0
- package/dist/migrate/converters/command-to-codex-skill.js.map +1 -0
- package/dist/migrate/converters/direct-copy.d.ts +4 -1
- package/dist/migrate/converters/direct-copy.d.ts.map +1 -1
- package/dist/migrate/converters/direct-copy.js +19 -22
- package/dist/migrate/converters/direct-copy.js.map +1 -1
- package/dist/migrate/converters/fm-strip.d.ts.map +1 -1
- package/dist/migrate/converters/fm-strip.js +5 -1
- package/dist/migrate/converters/fm-strip.js.map +1 -1
- package/dist/migrate/converters/fm-to-codex-toml.d.ts +4 -1
- package/dist/migrate/converters/fm-to-codex-toml.d.ts.map +1 -1
- package/dist/migrate/converters/fm-to-codex-toml.js +8 -3
- package/dist/migrate/converters/fm-to-codex-toml.js.map +1 -1
- package/dist/migrate/converters/fm-to-fm.js +4 -4
- package/dist/migrate/converters/fm-to-fm.js.map +1 -1
- package/dist/migrate/converters/fm-to-json.d.ts.map +1 -1
- package/dist/migrate/converters/fm-to-json.js +2 -1
- package/dist/migrate/converters/fm-to-json.js.map +1 -1
- package/dist/migrate/converters/fm-to-yaml.js +1 -1
- package/dist/migrate/converters/fm-to-yaml.js.map +1 -1
- package/dist/migrate/converters/index.d.ts +7 -2
- package/dist/migrate/converters/index.d.ts.map +1 -1
- package/dist/migrate/converters/index.js +8 -8
- package/dist/migrate/converters/index.js.map +1 -1
- package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts +8 -0
- package/dist/migrate/converters/mcp-json-to-codex-toml.d.ts.map +1 -0
- package/dist/migrate/converters/mcp-json-to-codex-toml.js +65 -0
- package/dist/migrate/converters/mcp-json-to-codex-toml.js.map +1 -0
- package/dist/migrate/converters/md-strip.d.ts +10 -1
- package/dist/migrate/converters/md-strip.d.ts.map +1 -1
- package/dist/migrate/converters/md-strip.js +27 -70
- package/dist/migrate/converters/md-strip.js.map +1 -1
- package/dist/migrate/converters/md-to-kiro-steering.js +1 -1
- package/dist/migrate/converters/md-to-kiro-steering.js.map +1 -1
- package/dist/migrate/converters/md-to-mdc.js +1 -1
- package/dist/migrate/converters/md-to-mdc.js.map +1 -1
- package/dist/migrate/converters/md-to-toml.js +1 -1
- package/dist/migrate/converters/md-to-toml.js.map +1 -1
- package/dist/migrate/discovery/config-discovery.d.ts +29 -0
- package/dist/migrate/discovery/config-discovery.d.ts.map +1 -1
- package/dist/migrate/discovery/config-discovery.js +45 -0
- package/dist/migrate/discovery/config-discovery.js.map +1 -1
- package/dist/migrate/discovery/handlers-json-filter.d.ts.map +1 -1
- package/dist/migrate/discovery/handlers-json-filter.js +4 -2
- package/dist/migrate/discovery/handlers-json-filter.js.map +1 -1
- package/dist/migrate/discovery/hooks-discovery.d.ts +5 -0
- package/dist/migrate/discovery/hooks-discovery.d.ts.map +1 -1
- package/dist/migrate/discovery/hooks-discovery.js +21 -5
- package/dist/migrate/discovery/hooks-discovery.js.map +1 -1
- package/dist/migrate/hooks/codex-features-flag.d.ts.map +1 -1
- package/dist/migrate/hooks/codex-features-flag.js +21 -6
- package/dist/migrate/hooks/codex-features-flag.js.map +1 -1
- package/dist/migrate/hooks/codex-hook-wrapper.d.ts +15 -1
- package/dist/migrate/hooks/codex-hook-wrapper.d.ts.map +1 -1
- package/dist/migrate/hooks/codex-hook-wrapper.js +79 -8
- package/dist/migrate/hooks/codex-hook-wrapper.js.map +1 -1
- package/dist/migrate/hooks/codex-mcp-installer.d.ts +9 -0
- package/dist/migrate/hooks/codex-mcp-installer.d.ts.map +1 -0
- package/dist/migrate/hooks/codex-mcp-installer.js +65 -0
- package/dist/migrate/hooks/codex-mcp-installer.js.map +1 -0
- package/dist/migrate/hooks/codex-path-safety.d.ts +29 -0
- package/dist/migrate/hooks/codex-path-safety.d.ts.map +1 -1
- package/dist/migrate/hooks/codex-path-safety.js +36 -1
- package/dist/migrate/hooks/codex-path-safety.js.map +1 -1
- package/dist/migrate/hooks/codex-sh-wrapper-script.d.ts +8 -0
- package/dist/migrate/hooks/codex-sh-wrapper-script.d.ts.map +1 -0
- package/dist/migrate/hooks/codex-sh-wrapper-script.js +118 -0
- package/dist/migrate/hooks/codex-sh-wrapper-script.js.map +1 -0
- package/dist/migrate/hooks/codex-shell-env-installer.d.ts +14 -0
- package/dist/migrate/hooks/codex-shell-env-installer.d.ts.map +1 -0
- package/dist/migrate/hooks/codex-shell-env-installer.js +82 -0
- package/dist/migrate/hooks/codex-shell-env-installer.js.map +1 -0
- package/dist/migrate/hooks/codex-toml-installer.d.ts +2 -0
- package/dist/migrate/hooks/codex-toml-installer.d.ts.map +1 -1
- package/dist/migrate/hooks/codex-toml-installer.js +18 -7
- package/dist/migrate/hooks/codex-toml-installer.js.map +1 -1
- package/dist/migrate/hooks/hooks-settings-merger.d.ts +3 -0
- package/dist/migrate/hooks/hooks-settings-merger.d.ts.map +1 -1
- package/dist/migrate/hooks/hooks-settings-merger.js +157 -21
- package/dist/migrate/hooks/hooks-settings-merger.js.map +1 -1
- package/dist/migrate/migrate-orchestrator.d.ts +19 -0
- package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
- package/dist/migrate/migrate-orchestrator.js +233 -26
- package/dist/migrate/migrate-orchestrator.js.map +1 -1
- package/dist/migrate/migrate-ui-summary.d.ts +25 -0
- package/dist/migrate/migrate-ui-summary.d.ts.map +1 -1
- package/dist/migrate/migrate-ui-summary.js +50 -0
- package/dist/migrate/migrate-ui-summary.js.map +1 -1
- package/dist/migrate/model-routing-config.d.ts +3 -1
- package/dist/migrate/model-routing-config.d.ts.map +1 -1
- package/dist/migrate/model-routing-config.js +28 -0
- package/dist/migrate/model-routing-config.js.map +1 -1
- package/dist/migrate/portability-policy.d.ts +3 -1
- package/dist/migrate/portability-policy.d.ts.map +1 -1
- package/dist/migrate/portability-policy.js +5 -31
- package/dist/migrate/portability-policy.js.map +1 -1
- package/dist/migrate/portable-installer.d.ts +17 -1
- package/dist/migrate/portable-installer.d.ts.map +1 -1
- package/dist/migrate/portable-installer.js +171 -9
- package/dist/migrate/portable-installer.js.map +1 -1
- package/dist/migrate/provider-registry-utils.d.ts.map +1 -1
- package/dist/migrate/provider-registry-utils.js +5 -0
- package/dist/migrate/provider-registry-utils.js.map +1 -1
- package/dist/migrate/providers/codex/capabilities.d.ts +6 -1
- package/dist/migrate/providers/codex/capabilities.d.ts.map +1 -1
- package/dist/migrate/providers/codex/capabilities.js +87 -0
- package/dist/migrate/providers/codex/capabilities.js.map +1 -1
- package/dist/migrate/providers/codex/config.d.ts.map +1 -1
- package/dist/migrate/providers/codex/config.js +27 -8
- package/dist/migrate/providers/codex/config.js.map +1 -1
- package/dist/migrate/providers/codex/contract.d.ts.map +1 -1
- package/dist/migrate/providers/codex/contract.js +4 -3
- package/dist/migrate/providers/codex/contract.js.map +1 -1
- package/dist/migrate/providers/codex/shell-env-policy-emitter.d.ts +27 -0
- package/dist/migrate/providers/codex/shell-env-policy-emitter.d.ts.map +1 -0
- package/dist/migrate/providers/codex/shell-env-policy-emitter.js +86 -0
- package/dist/migrate/providers/codex/shell-env-policy-emitter.js.map +1 -0
- package/dist/migrate/providers/provider-config-types.d.ts +1 -1
- package/dist/migrate/providers/provider-config-types.d.ts.map +1 -1
- package/dist/migrate/reconcile/index.d.ts +1 -1
- package/dist/migrate/reconcile/index.d.ts.map +1 -1
- package/dist/migrate/reconcile/index.js +1 -1
- package/dist/migrate/reconcile/index.js.map +1 -1
- package/dist/migrate/reconcile/portable-manifest.d.ts +18 -12
- package/dist/migrate/reconcile/portable-manifest.d.ts.map +1 -1
- package/dist/migrate/reconcile/portable-manifest.js +23 -0
- package/dist/migrate/reconcile/portable-manifest.js.map +1 -1
- package/dist/migrate/reconcile/portable-registry.d.ts +30 -30
- package/dist/migrate/reconcile/process-lock.d.ts.map +1 -1
- package/dist/migrate/reconcile/process-lock.js +10 -1
- package/dist/migrate/reconcile/process-lock.js.map +1 -1
- package/dist/migrate/reconcile/reconcile-state-builders.d.ts +12 -5
- package/dist/migrate/reconcile/reconcile-state-builders.d.ts.map +1 -1
- package/dist/migrate/reconcile/reconcile-state-builders.js +2 -2
- package/dist/migrate/reconcile/reconcile-state-builders.js.map +1 -1
- package/dist/migrate/references/codex-command-skill-path.d.ts +12 -0
- package/dist/migrate/references/codex-command-skill-path.d.ts.map +1 -0
- package/dist/migrate/references/codex-command-skill-path.js +27 -0
- package/dist/migrate/references/codex-command-skill-path.js.map +1 -0
- package/dist/migrate/references/env-var-rewrite-table.d.ts +36 -0
- package/dist/migrate/references/env-var-rewrite-table.d.ts.map +1 -0
- package/dist/migrate/references/env-var-rewrite-table.js +97 -0
- package/dist/migrate/references/env-var-rewrite-table.js.map +1 -0
- package/dist/migrate/references/fence-aware-reference-rewriter.d.ts +30 -0
- package/dist/migrate/references/fence-aware-reference-rewriter.d.ts.map +1 -0
- package/dist/migrate/references/fence-aware-reference-rewriter.js +182 -0
- package/dist/migrate/references/fence-aware-reference-rewriter.js.map +1 -0
- package/dist/migrate/references/reference-classifier.d.ts +27 -0
- package/dist/migrate/references/reference-classifier.d.ts.map +1 -0
- package/dist/migrate/references/reference-classifier.js +177 -0
- package/dist/migrate/references/reference-classifier.js.map +1 -0
- package/dist/migrate/references/reference-target-registry.d.ts +42 -0
- package/dist/migrate/references/reference-target-registry.d.ts.map +1 -0
- package/dist/migrate/references/reference-target-registry.js +100 -0
- package/dist/migrate/references/reference-target-registry.js.map +1 -0
- package/dist/migrate/references/reference-types.d.ts +23 -0
- package/dist/migrate/references/reference-types.d.ts.map +1 -0
- package/dist/migrate/references/reference-types.js +5 -0
- package/dist/migrate/references/reference-types.js.map +1 -0
- package/dist/migrate/runtime-compat-audit.d.ts +3 -1
- package/dist/migrate/runtime-compat-audit.d.ts.map +1 -1
- package/dist/migrate/runtime-compat-audit.js +10 -5
- package/dist/migrate/runtime-compat-audit.js.map +1 -1
- package/dist/migrate/runtime-coupling-patterns.d.ts +32 -3
- package/dist/migrate/runtime-coupling-patterns.d.ts.map +1 -1
- package/dist/migrate/runtime-coupling-patterns.js +51 -8
- package/dist/migrate/runtime-coupling-patterns.js.map +1 -1
- package/dist/migrate/skill-directory-audit.d.ts +17 -0
- package/dist/migrate/skill-directory-audit.d.ts.map +1 -1
- package/dist/migrate/skill-directory-audit.js +70 -11
- package/dist/migrate/skill-directory-audit.js.map +1 -1
- package/dist/migrate/skill-directory-installer.d.ts +5 -0
- package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
- package/dist/migrate/skill-directory-installer.js +115 -9
- package/dist/migrate/skill-directory-installer.js.map +1 -1
- package/dist/migrate/state-changing-script-detector.d.ts +16 -0
- package/dist/migrate/state-changing-script-detector.d.ts.map +1 -0
- package/dist/migrate/state-changing-script-detector.js +144 -0
- package/dist/migrate/state-changing-script-detector.js.map +1 -0
- package/dist/migrate/types.d.ts +20 -10
- package/dist/migrate/types.d.ts.map +1 -1
- package/dist/migrate/types.js +4 -0
- package/dist/migrate/types.js.map +1 -1
- package/dist/migrate/validation/migrate-conversion-report.d.ts +48 -0
- package/dist/migrate/validation/migrate-conversion-report.d.ts.map +1 -0
- package/dist/migrate/validation/migrate-conversion-report.js +146 -0
- package/dist/migrate/validation/migrate-conversion-report.js.map +1 -0
- package/dist/migrate/validation/migration-ledger-inputs.d.ts +56 -0
- package/dist/migrate/validation/migration-ledger-inputs.d.ts.map +1 -0
- package/dist/migrate/validation/migration-ledger-inputs.js +160 -0
- package/dist/migrate/validation/migration-ledger-inputs.js.map +1 -0
- package/dist/migrate/validation/migration-record-types.d.ts +38 -0
- package/dist/migrate/validation/migration-record-types.d.ts.map +1 -0
- package/dist/migrate/validation/migration-record-types.js +12 -0
- package/dist/migrate/validation/migration-record-types.js.map +1 -0
- package/dist/migrate/validation/migration-report-writer.d.ts +98 -0
- package/dist/migrate/validation/migration-report-writer.d.ts.map +1 -0
- package/dist/migrate/validation/migration-report-writer.js +0 -0
- package/dist/migrate/validation/migration-report-writer.js.map +1 -0
- package/dist/migrate/validation/unresolved-reference-scanner.d.ts +18 -0
- package/dist/migrate/validation/unresolved-reference-scanner.d.ts.map +1 -0
- package/dist/migrate/validation/unresolved-reference-scanner.js +47 -0
- package/dist/migrate/validation/unresolved-reference-scanner.js.map +1 -0
- package/package.json +1 -1
- 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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"}
|
package/dist/migrate/types.d.ts
CHANGED
|
@@ -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
|
-
|
|
121
|
+
providers?: boolean | undefined;
|
|
122
|
+
source?: string | undefined;
|
|
116
123
|
tool?: string | undefined;
|
|
117
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
allRules?: boolean | undefined;
|
|
140
|
+
includeMcp?: boolean | undefined;
|
|
133
141
|
}, {
|
|
134
|
-
|
|
142
|
+
providers?: boolean | undefined;
|
|
143
|
+
source?: string | undefined;
|
|
135
144
|
tool?: string | undefined;
|
|
136
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAExF,kDAAkD;AAClD,eAAO,MAAM,YAAY,4LAiBvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACtC,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAKD,YAAY,EACX,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,GACd,MAAM,sCAAsC,CAAC;AAE9C,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,sBAAsB;IACtC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrate/types.ts"],"names":[],"mappings":"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"}
|
package/dist/migrate/types.js
CHANGED
|
@@ -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;
|
|
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"}
|