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,160 @@
|
|
|
1
|
+
// Aggregation: fold the migration run's already-scattered signals into a single
|
|
2
|
+
// list of per-artifact `MigrationDecisionRecord`s for the run-report ledger. This
|
|
3
|
+
// is pure aggregation — no new detection. The identity invariant the report relies
|
|
4
|
+
// on (migrated + skipped + failed == discovered artifacts) is guaranteed here by
|
|
5
|
+
// emitting exactly one PRIMARY record per discovered artifact, with Phase 1-3
|
|
6
|
+
// sub-signals (preserved references, waivers, audit failures) enriching — never
|
|
7
|
+
// inflating — those primary records.
|
|
8
|
+
import { classifyEnvReference } from "../references/reference-classifier.js";
|
|
9
|
+
/**
|
|
10
|
+
* Enumerate every discovered source artifact as `{source, type}`. This is the
|
|
11
|
+
* identity-check denominator: every entry here becomes exactly one primary record.
|
|
12
|
+
* Shell hooks filtered out at discovery are included as skipped artifacts so the
|
|
13
|
+
* dropped-safety-hook loss (gate-enforcement, privacy-block, …) is never silent.
|
|
14
|
+
*/
|
|
15
|
+
export function enumerateDiscoveredArtifacts(discovered) {
|
|
16
|
+
const artifacts = [];
|
|
17
|
+
for (const a of discovered.agents)
|
|
18
|
+
artifacts.push({ source: a.name, type: "agent" });
|
|
19
|
+
for (const c of discovered.commands)
|
|
20
|
+
artifacts.push({ source: c.name, type: "command" });
|
|
21
|
+
for (const r of discovered.rules)
|
|
22
|
+
artifacts.push({ source: r.name, type: "rules" });
|
|
23
|
+
if (discovered.config)
|
|
24
|
+
artifacts.push({ source: discovered.config.name, type: "config" });
|
|
25
|
+
for (const s of discovered.skills)
|
|
26
|
+
artifacts.push({ source: s.name, type: "skill" });
|
|
27
|
+
for (const h of discovered.hooks)
|
|
28
|
+
artifacts.push({ source: h.name, type: "hooks" });
|
|
29
|
+
for (const shellHook of discovered.skippedShellHooks)
|
|
30
|
+
artifacts.push({ source: shellHook, type: "hooks" });
|
|
31
|
+
return artifacts;
|
|
32
|
+
}
|
|
33
|
+
function outcomeKey(type, source) {
|
|
34
|
+
return `${type}:${source}`;
|
|
35
|
+
}
|
|
36
|
+
/** Human reason for a run outcome, routing `.env` references through the new classifier. */
|
|
37
|
+
function reasonForOutcome(outcome) {
|
|
38
|
+
if (outcome.outcome === "migrated")
|
|
39
|
+
return { reason: "converted" };
|
|
40
|
+
const detail = outcome.internalError ? `internal-error: ${outcome.error ?? "unknown"}` : outcome.error;
|
|
41
|
+
return { reason: "conversion-error", detail };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Reclassify a preserved occurrence's report reason: a `.claude/.env` reference now
|
|
45
|
+
* points at the emitted [shell_environment_policy] scaffold instead of the stale
|
|
46
|
+
* "no provider equivalent" phrase. Item D — routed ONLY here (report-reason layer),
|
|
47
|
+
* never in the rewriter's decision rules.
|
|
48
|
+
*/
|
|
49
|
+
export function reportReasonForOccurrence(occurrence) {
|
|
50
|
+
const envReason = classifyEnvReference(occurrence.original);
|
|
51
|
+
if (envReason)
|
|
52
|
+
return envReason.reason;
|
|
53
|
+
return occurrence.reason ?? "reference preserved";
|
|
54
|
+
}
|
|
55
|
+
/** Owning artifact key for an occurrence whose `file` is a `provider/type/item…` path. */
|
|
56
|
+
function occurrenceArtifact(occurrence) {
|
|
57
|
+
// Occurrence file forms produced by the conversion pass:
|
|
58
|
+
// `<provider>/<type>/<item>` (agents, commands, rules, config)
|
|
59
|
+
// `<provider>/skill/<skillName>/<relPath>` (skill files)
|
|
60
|
+
const parts = occurrence.file.split("/");
|
|
61
|
+
if (parts.length < 3)
|
|
62
|
+
return null;
|
|
63
|
+
const type = parts[1];
|
|
64
|
+
if (type === "skill")
|
|
65
|
+
return { type: "skill", source: parts[2] };
|
|
66
|
+
if (type === "agent" || type === "command" || type === "rules" || type === "config" || type === "hooks") {
|
|
67
|
+
return { type, source: parts[2] };
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Build the complete per-discovered-artifact record list. Exactly one primary
|
|
73
|
+
* record per discovered artifact (identity invariant). Phase records that carry a
|
|
74
|
+
* more severe outcome for the same artifact escalate the primary record's status;
|
|
75
|
+
* preserved occurrences attach as enrichment on the owning primary record.
|
|
76
|
+
*/
|
|
77
|
+
export function buildRunRecords(input) {
|
|
78
|
+
const OUTCOME_SEVERITY = { migrated: 0, skipped: 1, partial: 2, failed: 3 };
|
|
79
|
+
const primary = new Map();
|
|
80
|
+
// 1. One primary record per discovered artifact.
|
|
81
|
+
for (const artifact of enumerateDiscoveredArtifacts(input.discovered)) {
|
|
82
|
+
const key = outcomeKey(artifact.type, artifact.source);
|
|
83
|
+
const outcome = input.outcomes.get(key);
|
|
84
|
+
let record;
|
|
85
|
+
if (!outcome) {
|
|
86
|
+
// No install attempt reached this artifact (filtered by portability policy,
|
|
87
|
+
// no provider surface, or a skipped shell hook): a deliberate skip.
|
|
88
|
+
record = {
|
|
89
|
+
source: artifact.source,
|
|
90
|
+
type: artifact.type,
|
|
91
|
+
provider: input.provider,
|
|
92
|
+
outcome: "skipped",
|
|
93
|
+
reason: artifact.type === "hooks" ? "event-unsupported" : "no-provider-surface",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const { reason, detail } = reasonForOutcome(outcome);
|
|
98
|
+
record = {
|
|
99
|
+
source: artifact.source,
|
|
100
|
+
type: artifact.type,
|
|
101
|
+
provider: input.provider,
|
|
102
|
+
outcome: outcome.outcome,
|
|
103
|
+
reason,
|
|
104
|
+
};
|
|
105
|
+
if (detail)
|
|
106
|
+
record.detail = detail;
|
|
107
|
+
if (outcome.target)
|
|
108
|
+
record.target = outcome.target;
|
|
109
|
+
}
|
|
110
|
+
primary.set(key, record);
|
|
111
|
+
}
|
|
112
|
+
// 2. Escalate primary outcomes from Phase 1-3 records. Skill/hook sub-records use
|
|
113
|
+
// per-file `source` paths; map them back to their owning discovered artifact.
|
|
114
|
+
const dirNameToSkillName = new Map(input.discovered.skills.map((s) => [s.dirName, s.name]));
|
|
115
|
+
for (const rec of input.phaseRecords) {
|
|
116
|
+
const owner = phaseRecordOwner(rec, dirNameToSkillName);
|
|
117
|
+
if (!owner)
|
|
118
|
+
continue;
|
|
119
|
+
const key = outcomeKey(owner.type, owner.source);
|
|
120
|
+
const existing = primary.get(key);
|
|
121
|
+
if (!existing)
|
|
122
|
+
continue;
|
|
123
|
+
if (OUTCOME_SEVERITY[rec.outcome] > OUTCOME_SEVERITY[existing.outcome]) {
|
|
124
|
+
existing.outcome = rec.outcome;
|
|
125
|
+
existing.reason = rec.reason;
|
|
126
|
+
if (rec.detail)
|
|
127
|
+
existing.detail = rec.detail;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// 3. Attach preserved occurrences to their owning primary record for file:line detail.
|
|
131
|
+
for (const occ of input.preservedOccurrences) {
|
|
132
|
+
const owner = occurrenceArtifact(occ);
|
|
133
|
+
if (!owner)
|
|
134
|
+
continue;
|
|
135
|
+
const existing = primary.get(outcomeKey(owner.type, owner.source));
|
|
136
|
+
if (!existing)
|
|
137
|
+
continue;
|
|
138
|
+
const enriched = { ...occ, reason: reportReasonForOccurrence(occ) };
|
|
139
|
+
existing.occurrences = [...(existing.occurrences ?? []), enriched];
|
|
140
|
+
}
|
|
141
|
+
return Array.from(primary.values());
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Resolve which discovered artifact a Phase 1-3 sub-record belongs to. Skill
|
|
145
|
+
* sub-records carry `source: .claude/skills/<dirName>/<file>`; hook records carry
|
|
146
|
+
* the hook file name directly. The dirName is matched against discovered skill
|
|
147
|
+
* dirNames so the owner key aligns with the primary record's `source` (skill.name).
|
|
148
|
+
*/
|
|
149
|
+
function phaseRecordOwner(rec, dirNameToSkillName) {
|
|
150
|
+
if (rec.type === "skill") {
|
|
151
|
+
const m = rec.source.match(/^\.claude\/skills\/([^/]+)\//);
|
|
152
|
+
if (m)
|
|
153
|
+
return { type: "skill", source: dirNameToSkillName.get(m[1]) ?? m[1] };
|
|
154
|
+
return { type: "skill", source: rec.source };
|
|
155
|
+
}
|
|
156
|
+
if (rec.type === "hooks")
|
|
157
|
+
return { type: "hooks", source: rec.source };
|
|
158
|
+
return { type: rec.type, source: rec.source };
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=migration-ledger-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-ledger-inputs.js","sourceRoot":"","sources":["../../../src/migrate/validation/migration-ledger-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ReferenceOccurrence } from "../references/reference-types.js";
|
|
2
|
+
import type { PortableType, ProviderType } from "../types.js";
|
|
3
|
+
/** The outcome the pipeline reached for a single source artifact. */
|
|
4
|
+
export type MigrationOutcome = "migrated" | "skipped" | "failed" | "partial";
|
|
5
|
+
/** Why the pipeline reached a given outcome, coarse enough to group records. */
|
|
6
|
+
export type MigrationReasonCode = "converted" | "no-provider-surface" | "policy-excluded" | "audit-rejected" | "conversion-error" | "reference-preserved" | "runtime-neutralized" | "event-unsupported" | "matcher-narrowed";
|
|
7
|
+
/** One decision about one source artifact, emitted by any migration phase. */
|
|
8
|
+
export interface MigrationDecisionRecord {
|
|
9
|
+
/** Source-relative identifier of the artifact (e.g. ".claude/agents/planner.md"). */
|
|
10
|
+
source: string;
|
|
11
|
+
/** Portable classification of the artifact. */
|
|
12
|
+
type: PortableType;
|
|
13
|
+
/** Provider the decision applies to. */
|
|
14
|
+
provider: ProviderType;
|
|
15
|
+
/** The outcome the pipeline reached. */
|
|
16
|
+
outcome: MigrationOutcome;
|
|
17
|
+
/** Coarse reason grouping for the outcome. */
|
|
18
|
+
reason: MigrationReasonCode;
|
|
19
|
+
/** Human-readable detail for the run report (optional). */
|
|
20
|
+
detail?: string;
|
|
21
|
+
/** Target-relative path written, when outcome === "migrated" | "partial". */
|
|
22
|
+
target?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Reference occurrences observed while processing this artifact. The fenced-
|
|
25
|
+
* reference integrity pass is the first producer of these records.
|
|
26
|
+
*/
|
|
27
|
+
occurrences?: ReferenceOccurrence[];
|
|
28
|
+
}
|
|
29
|
+
/** The serialized decision-record set for one migration run. */
|
|
30
|
+
export interface MigrationRecordSet {
|
|
31
|
+
/** Provider this run targeted. */
|
|
32
|
+
provider: ProviderType;
|
|
33
|
+
/** ISO-8601 timestamp the run completed. */
|
|
34
|
+
completedAt: string;
|
|
35
|
+
/** Every per-artifact decision the run made. */
|
|
36
|
+
decisions: MigrationDecisionRecord[];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=migration-record-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-record-types.d.ts","sourceRoot":"","sources":["../../../src/migrate/validation/migration-record-types.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9D,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GACzB,UAAU,GACV,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEb,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAC5B,WAAW,GACX,qBAAqB,GACrB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,CAAC;AAEtB,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACvC,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,IAAI,EAAE,YAAY,CAAC;IACnB,wCAAwC;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,wCAAwC;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,8CAA8C;IAC9C,MAAM,EAAE,mBAAmB,CAAC;IAC5B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IAClC,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,uBAAuB,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Shared decision-record data contract for the migration pipeline.
|
|
2
|
+
//
|
|
3
|
+
// Every phase that decides the fate of a source artifact (migrated / skipped /
|
|
4
|
+
// failed / neutralized) emits records that conform to these types; the final
|
|
5
|
+
// run-report layer serializes them into a single "what migrated and why" view.
|
|
6
|
+
// The reference-occurrence stream (below) is the first producer: the fenced-
|
|
7
|
+
// reference integrity pass records one occurrence per classified source ref.
|
|
8
|
+
//
|
|
9
|
+
// These are pure type declarations — no runtime logic. Keep them minimal:
|
|
10
|
+
// producers add the fields they can populate, consumers read what is present.
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=migration-record-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-record-types.js","sourceRoot":"","sources":["../../../src/migrate/validation/migration-record-types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,0EAA0E;AAC1E,8EAA8E"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { ProviderType } from "../types.js";
|
|
2
|
+
import type { MigrationDecisionRecord } from "./migration-record-types.js";
|
|
3
|
+
/** Bump when the JSON shape changes in a backward-incompatible way. */
|
|
4
|
+
export declare const MIGRATION_REPORT_SCHEMA_VERSION: 1;
|
|
5
|
+
/** Fixed artifact file names (siblings under the provider output dir). */
|
|
6
|
+
export declare const MIGRATION_REPORT_JSON_NAME = "migration-report.json";
|
|
7
|
+
export declare const MIGRATION_REPORT_MD_NAME = "migration-report.md";
|
|
8
|
+
/** One reference occurrence surfaced in the report (file:line:pattern). */
|
|
9
|
+
export interface ReportOccurrenceDetail {
|
|
10
|
+
file: string;
|
|
11
|
+
line: number;
|
|
12
|
+
pattern: string;
|
|
13
|
+
}
|
|
14
|
+
/** Per-artifact serialized entry. `narrowed` is the report's word for `partial`. */
|
|
15
|
+
export interface ReportArtifact {
|
|
16
|
+
/** Portable type of the artifact (agent | command | skill | config | rules | hooks). */
|
|
17
|
+
type: string;
|
|
18
|
+
/** Source-relative identifier of the artifact. */
|
|
19
|
+
sourcePath: string;
|
|
20
|
+
/** Target-relative path written, when it was migrated. */
|
|
21
|
+
targetPath?: string;
|
|
22
|
+
/** Outcome, in report vocabulary. */
|
|
23
|
+
status: "migrated" | "skipped" | "failed" | "narrowed";
|
|
24
|
+
/** Coarse machine reason grouping (from the decision record). */
|
|
25
|
+
reason?: string;
|
|
26
|
+
/** File/line/pattern detail for the first preserved/failed occurrence. */
|
|
27
|
+
detail?: ReportOccurrenceDetail;
|
|
28
|
+
}
|
|
29
|
+
/** Aggregate outcome counts for the run header. */
|
|
30
|
+
export interface ReportCounts {
|
|
31
|
+
migrated: number;
|
|
32
|
+
skipped: number;
|
|
33
|
+
failed: number;
|
|
34
|
+
narrowed: number;
|
|
35
|
+
/** Total distinct artifacts recorded — the identity-check denominator. */
|
|
36
|
+
total: number;
|
|
37
|
+
}
|
|
38
|
+
/** Budget projection carried into the report (mirrors the preflight budget lines). */
|
|
39
|
+
export interface ReportBudget {
|
|
40
|
+
lines: string[];
|
|
41
|
+
}
|
|
42
|
+
/** Serialized run header. `timestamp` is a real ISO run time, not any plan id. */
|
|
43
|
+
export interface MigrationReportHeader {
|
|
44
|
+
provider: ProviderType;
|
|
45
|
+
/** Toolkit version that produced the run (opaque string; may be "unknown"). */
|
|
46
|
+
version: string;
|
|
47
|
+
/** Minimum Codex CLI version whose hook surface this migration targets. */
|
|
48
|
+
codexMinSupportedVersion?: string;
|
|
49
|
+
timestamp: string;
|
|
50
|
+
counts: ReportCounts;
|
|
51
|
+
budget: ReportBudget;
|
|
52
|
+
/** Aggregate count of secret-like env key names omitted from the run (never names). */
|
|
53
|
+
secretKeysOmitted?: number;
|
|
54
|
+
}
|
|
55
|
+
/** The full serialized report (JSON shape). */
|
|
56
|
+
export interface MigrationReport {
|
|
57
|
+
schemaVersion: typeof MIGRATION_REPORT_SCHEMA_VERSION;
|
|
58
|
+
header: MigrationReportHeader;
|
|
59
|
+
artifacts: ReportArtifact[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Deterministic stable key for a decision record. Artifact ordering in both the
|
|
63
|
+
* JSON and md is derived from this key so two runs over unchanged input produce
|
|
64
|
+
* byte-identical artifact sections (the header timestamp is the only varying part).
|
|
65
|
+
*/
|
|
66
|
+
export declare function artifactKey(record: Pick<MigrationDecisionRecord, "type" | "source" | "provider">): string;
|
|
67
|
+
export declare function foldArtifacts(records: MigrationDecisionRecord[]): ReportArtifact[];
|
|
68
|
+
export interface BuildReportInput {
|
|
69
|
+
provider: ProviderType;
|
|
70
|
+
version: string;
|
|
71
|
+
records: MigrationDecisionRecord[];
|
|
72
|
+
budgetLines?: string[];
|
|
73
|
+
secretKeysOmitted?: number;
|
|
74
|
+
codexMinSupportedVersion?: string;
|
|
75
|
+
/** Injectable clock for deterministic tests; defaults to the real run time. */
|
|
76
|
+
now?: () => Date;
|
|
77
|
+
}
|
|
78
|
+
/** Build the serialized report object from a decision-record ledger. */
|
|
79
|
+
export declare function buildMigrationReport(input: BuildReportInput): MigrationReport;
|
|
80
|
+
/** Render the human-readable md report from the same serialized object. */
|
|
81
|
+
export declare function renderMigrationReportMarkdown(report: MigrationReport): string;
|
|
82
|
+
/** The single verdict line printed at the end of a run. */
|
|
83
|
+
export declare function migrationVerdictLine(report: MigrationReport, reportPath: string): string;
|
|
84
|
+
export interface WriteMigrationReportResult {
|
|
85
|
+
report: MigrationReport;
|
|
86
|
+
jsonPath: string;
|
|
87
|
+
mdPath: string;
|
|
88
|
+
verdictLine: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Serialize the report to `<outputDir>/migration-report.json` and render the md
|
|
92
|
+
* sibling. Creates the output dir first (never depends on another phase making
|
|
93
|
+
* it). The caller is responsible for wrapping this in the run's finally-path and
|
|
94
|
+
* re-throwing any original exception; this function only throws its OWN write
|
|
95
|
+
* errors, which the caller logs without masking the real failure.
|
|
96
|
+
*/
|
|
97
|
+
export declare function writeMigrationReport(report: MigrationReport, outputDir: string): Promise<WriteMigrationReportResult>;
|
|
98
|
+
//# sourceMappingURL=migration-report-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-report-writer.d.ts","sourceRoot":"","sources":["../../../src/migrate/validation/migration-report-writer.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-report-writer.js","sourceRoot":"","sources":["../../../src/migrate/validation/migration-report-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReferenceOccurrence } from "../references/reference-types.js";
|
|
2
|
+
export interface ScannedOutput {
|
|
3
|
+
/** Display name for the output (e.g. "codex/config/CLAUDE" or a file path) */
|
|
4
|
+
file: string;
|
|
5
|
+
content: string;
|
|
6
|
+
occurrences: ReferenceOccurrence[];
|
|
7
|
+
}
|
|
8
|
+
export interface ValidationFinding {
|
|
9
|
+
severity: "error" | "warning";
|
|
10
|
+
file: string;
|
|
11
|
+
line: number;
|
|
12
|
+
reference: string;
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
/** True when a surviving source reference is covered by a classifier decision. */
|
|
16
|
+
export declare function isExplainedReference(reference: string, occurrences: ReferenceOccurrence[]): boolean;
|
|
17
|
+
export declare function scanUnresolvedReferences(outputs: ScannedOutput[]): ValidationFinding[];
|
|
18
|
+
//# sourceMappingURL=unresolved-reference-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unresolved-reference-scanner.d.ts","sourceRoot":"","sources":["../../../src/migrate/validation/unresolved-reference-scanner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,WAAW,aAAa;IAC7B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CAChB;AAUD,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,OAAO,CASnG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,iBAAiB,EAAE,CAoBtF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Post-conversion invariant check: every source reference surviving in
|
|
2
|
+
// generated output must be explained by a classifier decision (preserve,
|
|
3
|
+
// preserve-warn, or a rewrite whose target legitimately still matches the
|
|
4
|
+
// source pattern). An unexplained survivor means the rewriter missed a case —
|
|
5
|
+
// that is an internal error, not a user-content warning.
|
|
6
|
+
import { sourceReferencePattern } from "../references/reference-target-registry.js";
|
|
7
|
+
function lineNumberAt(content, offset) {
|
|
8
|
+
let line = 1;
|
|
9
|
+
for (let i = 0; i < offset && i < content.length; i++) {
|
|
10
|
+
if (content[i] === "\n")
|
|
11
|
+
line++;
|
|
12
|
+
}
|
|
13
|
+
return line;
|
|
14
|
+
}
|
|
15
|
+
/** True when a surviving source reference is covered by a classifier decision. */
|
|
16
|
+
export function isExplainedReference(reference, occurrences) {
|
|
17
|
+
return occurrences.some((occurrence) => {
|
|
18
|
+
if (occurrence.decision === "preserve" || occurrence.decision === "preserve-warn") {
|
|
19
|
+
return occurrence.original.toLowerCase() === reference.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
// A rewrite target can itself match the source pattern (e.g. a provider
|
|
22
|
+
// that reads skills from the source tree) — that survivor is legitimate.
|
|
23
|
+
return occurrence.rewrittenTo?.toLowerCase().includes(reference.toLowerCase()) ?? false;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function scanUnresolvedReferences(outputs) {
|
|
27
|
+
const findings = [];
|
|
28
|
+
for (const output of outputs) {
|
|
29
|
+
const pattern = sourceReferencePattern();
|
|
30
|
+
for (const match of output.content.matchAll(pattern)) {
|
|
31
|
+
if (match.index === undefined)
|
|
32
|
+
continue;
|
|
33
|
+
const reference = match[0];
|
|
34
|
+
if (isExplainedReference(reference, output.occurrences))
|
|
35
|
+
continue;
|
|
36
|
+
findings.push({
|
|
37
|
+
severity: "error",
|
|
38
|
+
file: output.file,
|
|
39
|
+
line: lineNumberAt(output.content, match.index),
|
|
40
|
+
reference,
|
|
41
|
+
message: `unexplained source reference "${reference}" survived conversion — the reference rewriter missed this case`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return findings;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=unresolved-reference-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unresolved-reference-scanner.js","sourceRoot":"","sources":["../../../src/migrate/validation/unresolved-reference-scanner.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yEAAyE;AACzE,0EAA0E;AAC1E,8EAA8E;AAC9E,yDAAyD;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAkBpF,SAAS,YAAY,CAAC,OAAe,EAAE,MAAc;IACpD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,WAAkC;IACzF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACtC,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,IAAI,UAAU,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;YACnF,OAAO,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;QACtE,CAAC;QACD,wEAAwE;QACxE,yEAAyE;QACzE,OAAO,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC;IACzF,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAwB;IAChE,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAAE,SAAS;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;gBAAE,SAAS;YAClE,QAAQ,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;gBAC/C,SAAS;gBACT,OAAO,EAAE,iCAAiC,SAAS,iEAAiE;aACpH,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
package/package.json
CHANGED
package/portable-manifest.json
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0",
|
|
3
|
-
"mewkitVersion": "1.
|
|
3
|
+
"mewkitVersion": "1.14.0",
|
|
4
4
|
"renames": [],
|
|
5
|
-
"providerPathMigrations": [
|
|
5
|
+
"providerPathMigrations": [
|
|
6
|
+
{
|
|
7
|
+
"provider": "codex",
|
|
8
|
+
"type": "rules",
|
|
9
|
+
"from": ".codex/rules",
|
|
10
|
+
"to": "AGENTS.md",
|
|
11
|
+
"since": "1.14.0"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
6
14
|
"sectionRenames": []
|
|
7
15
|
}
|