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
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { findRuntimeCouplingMatches } from "./runtime-coupling-patterns.js";
|
|
2
2
|
const AUDITED_TYPES = new Set(["agent", "command", "config", "rules", "hooks"]);
|
|
3
|
-
export function auditRuntimeCompatibility(content, item, targetProvider) {
|
|
3
|
+
export function auditRuntimeCompatibility(content, item, targetProvider, occurrences = []) {
|
|
4
4
|
if (targetProvider === "claude-code")
|
|
5
|
-
return { errors: [] };
|
|
5
|
+
return { errors: [], warnings: [] };
|
|
6
6
|
if (!AUDITED_TYPES.has(item.type))
|
|
7
|
-
return { errors: [] };
|
|
7
|
+
return { errors: [], warnings: [] };
|
|
8
8
|
const errors = [];
|
|
9
|
-
|
|
9
|
+
const warnings = [];
|
|
10
|
+
for (const match of findRuntimeCouplingMatches(content, occurrences)) {
|
|
11
|
+
if ((item.type === "rules" || item.type === "config") && match.cls === "claude-env-var" && match.rewrite) {
|
|
12
|
+
warnings.push(`${item.type}/${item.name} ${match.message} (${match.rewrite.annotation})`);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
10
15
|
errors.push(`${item.type}/${item.name} ${match.message}`);
|
|
11
16
|
}
|
|
12
|
-
return { errors };
|
|
17
|
+
return { errors, warnings };
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=runtime-compat-audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-compat-audit.js","sourceRoot":"","sources":["../../src/migrate/runtime-compat-audit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-compat-audit.js","sourceRoot":"","sources":["../../src/migrate/runtime-compat-audit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAO5E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAe,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9F,MAAM,UAAU,yBAAyB,CACxC,OAAe,EACf,IAAyC,EACzC,cAA4B,EAC5B,cAAqC,EAAE;IAEvC,IAAI,cAAc,KAAK,aAAa;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1E,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAEvE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,0BAA0B,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,gBAAgB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1G,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YAC1F,SAAS;QACV,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1,9 +1,38 @@
|
|
|
1
|
+
import type { ReferenceOccurrence } from "./references/reference-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Coarse pattern class of a runtime-coupling match. Downstream verdict logic keys
|
|
4
|
+
* off this to decide rewrite vs downgrade vs fail — the class is metadata, it does
|
|
5
|
+
* NOT itself relax the fail-closed default.
|
|
6
|
+
*/
|
|
7
|
+
export type RuntimeCouplingClass = "claude-env-var" | "claude-cli" | "claude-path" | "claude-config-token";
|
|
1
8
|
export interface RuntimeCouplingMatch {
|
|
2
9
|
message: string;
|
|
10
|
+
/** Pattern class, used by the audit to select severity/rewrite handling. */
|
|
11
|
+
cls: RuntimeCouplingClass;
|
|
12
|
+
/**
|
|
13
|
+
* When the match is a table-known env var, this is the disposition + static
|
|
14
|
+
* rewrite/annotation from env-var-rewrite-table.ts. Absent for other classes.
|
|
15
|
+
* The value is ALWAYS a literal-table lookup — never derived from `content`.
|
|
16
|
+
*/
|
|
17
|
+
rewrite?: {
|
|
18
|
+
token: string;
|
|
19
|
+
disposition: "rewrite" | "neutralize";
|
|
20
|
+
rewriteTo?: string;
|
|
21
|
+
annotation: string;
|
|
22
|
+
};
|
|
3
23
|
}
|
|
4
|
-
|
|
24
|
+
interface CouplingRule {
|
|
5
25
|
pattern: RegExp;
|
|
6
26
|
message: string;
|
|
7
|
-
|
|
8
|
-
|
|
27
|
+
cls: RuntimeCouplingClass;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Literal command/env patterns. `$CLAUDE_*` / `$ANTHROPIC_*` are handled via the
|
|
31
|
+
* env-var table below (so each occurrence carries a rewrite disposition); the two
|
|
32
|
+
* CLI patterns stay detect-only (no safe portable rewrite exists for a command
|
|
33
|
+
* assumption — it is neutralized or fails per file class).
|
|
34
|
+
*/
|
|
35
|
+
export declare const RUNTIME_COUPLING_PATTERNS: ReadonlyArray<CouplingRule>;
|
|
36
|
+
export declare function findRuntimeCouplingMatches(content: string, occurrences?: ReferenceOccurrence[]): RuntimeCouplingMatch[];
|
|
37
|
+
export {};
|
|
9
38
|
//# sourceMappingURL=runtime-coupling-patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-coupling-patterns.d.ts","sourceRoot":"","sources":["../../src/migrate/runtime-coupling-patterns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-coupling-patterns.d.ts","sourceRoot":"","sources":["../../src/migrate/runtime-coupling-patterns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC7B,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,qBAAqB,CAAC;AAEzB,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,GAAG,EAAE,oBAAoB,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3G;AAED,UAAU,YAAY;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,oBAAoB,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,YAAY,CAOjE,CAAC;AAUF,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,mBAAmB,EAAO,GACrC,oBAAoB,EAAE,CAiCxB"}
|
|
@@ -1,16 +1,59 @@
|
|
|
1
|
+
import { isExplainedReference } from "./validation/unresolved-reference-scanner.js";
|
|
2
|
+
import { sourceConfigTokenPattern, sourceReferencePattern } from "./references/reference-target-registry.js";
|
|
3
|
+
import { envVarTokenPattern, resolveEnvVar } from "./references/env-var-rewrite-table.js";
|
|
4
|
+
/**
|
|
5
|
+
* Literal command/env patterns. `$CLAUDE_*` / `$ANTHROPIC_*` are handled via the
|
|
6
|
+
* env-var table below (so each occurrence carries a rewrite disposition); the two
|
|
7
|
+
* CLI patterns stay detect-only (no safe portable rewrite exists for a command
|
|
8
|
+
* assumption — it is neutralized or fails per file class).
|
|
9
|
+
*/
|
|
1
10
|
export const RUNTIME_COUPLING_PATTERNS = [
|
|
2
|
-
{ pattern:
|
|
3
|
-
{
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
11
|
+
{ pattern: /\bnpx\s+claude\b/i, message: "contains a Claude Code command assumption", cls: "claude-cli" },
|
|
12
|
+
{
|
|
13
|
+
pattern: /\bclaude\s+(?:--|mcp|doctor|update)\b/i,
|
|
14
|
+
message: "contains a Claude Code command assumption",
|
|
15
|
+
cls: "claude-cli",
|
|
16
|
+
},
|
|
8
17
|
];
|
|
9
|
-
|
|
18
|
+
// Source references are only coupling errors when the fence-aware classifier
|
|
19
|
+
// did NOT deliberately decide to keep them (citation, fenced runtime command,
|
|
20
|
+
// merged/non-directory target). Unexplained ones still hard-fail.
|
|
21
|
+
const SOURCE_REFERENCE_CHECKS = [
|
|
22
|
+
{ makePattern: sourceReferencePattern, message: "contains a .claude/ path reference", cls: "claude-path" },
|
|
23
|
+
{ makePattern: sourceConfigTokenPattern, message: "contains a CLAUDE.md reference", cls: "claude-config-token" },
|
|
24
|
+
];
|
|
25
|
+
export function findRuntimeCouplingMatches(content, occurrences = []) {
|
|
10
26
|
const matches = [];
|
|
27
|
+
// Env vars: one match per DISTINCT token so per-pattern verdicts stay granular.
|
|
28
|
+
const seenTokens = new Set();
|
|
29
|
+
for (const found of content.matchAll(envVarTokenPattern())) {
|
|
30
|
+
const token = found[0];
|
|
31
|
+
if (seenTokens.has(token))
|
|
32
|
+
continue;
|
|
33
|
+
seenTokens.add(token);
|
|
34
|
+
const resolution = resolveEnvVar(token);
|
|
35
|
+
if (!resolution)
|
|
36
|
+
continue;
|
|
37
|
+
const isAnthropic = /^\$\{?ANTHROPIC_/.test(token);
|
|
38
|
+
matches.push({
|
|
39
|
+
message: isAnthropic
|
|
40
|
+
? "contains an Anthropic-specific environment variable"
|
|
41
|
+
: "contains a Claude-specific environment variable",
|
|
42
|
+
cls: "claude-env-var",
|
|
43
|
+
rewrite: { token, ...resolution },
|
|
44
|
+
});
|
|
45
|
+
}
|
|
11
46
|
for (const rule of RUNTIME_COUPLING_PATTERNS) {
|
|
12
47
|
if (rule.pattern.test(content))
|
|
13
|
-
matches.push({ message: rule.message });
|
|
48
|
+
matches.push({ message: rule.message, cls: rule.cls });
|
|
49
|
+
}
|
|
50
|
+
for (const check of SOURCE_REFERENCE_CHECKS) {
|
|
51
|
+
for (const match of content.matchAll(check.makePattern())) {
|
|
52
|
+
if (!isExplainedReference(match[0], occurrences)) {
|
|
53
|
+
matches.push({ message: check.message, cls: check.cls });
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
14
57
|
}
|
|
15
58
|
return matches;
|
|
16
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-coupling-patterns.js","sourceRoot":"","sources":["../../src/migrate/runtime-coupling-patterns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-coupling-patterns.js","sourceRoot":"","sources":["../../src/migrate/runtime-coupling-patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAC7G,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAgC1F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAgC;IACrE,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,2CAA2C,EAAE,GAAG,EAAE,YAAY,EAAE;IACzG;QACC,OAAO,EAAE,wCAAwC;QACjD,OAAO,EAAE,2CAA2C;QACpD,GAAG,EAAE,YAAY;KACjB;CACD,CAAC;AAEF,6EAA6E;AAC7E,8EAA8E;AAC9E,kEAAkE;AAClE,MAAM,uBAAuB,GAAqF;IACjH,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,oCAAoC,EAAE,GAAG,EAAE,aAAa,EAAE;IAC1G,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,gCAAgC,EAAE,GAAG,EAAE,qBAAqB,EAAE;CAChH,CAAC;AAEF,MAAM,UAAU,0BAA0B,CACzC,OAAe,EACf,cAAqC,EAAE;IAEvC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,gFAAgF;IAChF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU;YAAE,SAAS;QAC1B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,WAAW;gBACnB,CAAC,CAAC,qDAAqD;gBACvD,CAAC,CAAC,iDAAiD;YACpD,GAAG,EAAE,gBAAgB;YACrB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;SACjC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,yBAAyB,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzD,MAAM;YACP,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
|
|
@@ -1,13 +1,30 @@
|
|
|
1
|
+
import type { ReferenceOccurrence } from "./references/reference-types.js";
|
|
1
2
|
import type { ProviderType } from "./types.js";
|
|
2
3
|
export interface SkillDirectoryAuditIssue {
|
|
3
4
|
filePath: string;
|
|
4
5
|
message: string;
|
|
5
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* A runtime-coupling match that was downgraded from fail-closed to warn+annotate
|
|
9
|
+
* (reference-grade markdown, or a table-rewriteable pattern in a non-state-changing
|
|
10
|
+
* script). Every waiver is a structured record — never a silent absence.
|
|
11
|
+
*/
|
|
12
|
+
export interface SkillDirectoryAuditWaiver {
|
|
13
|
+
filePath: string;
|
|
14
|
+
/** Pattern class message, e.g. "contains a Claude-specific environment variable". */
|
|
15
|
+
message: string;
|
|
16
|
+
/** Provider-neutral annotation describing what was rewritten/neutralized. */
|
|
17
|
+
annotation: string;
|
|
18
|
+
}
|
|
6
19
|
export interface SkillDirectoryAuditResult {
|
|
7
20
|
errors: SkillDirectoryAuditIssue[];
|
|
21
|
+
/** Downgraded matches (warn, not fail). Empty when nothing was downgraded. */
|
|
22
|
+
waivers: SkillDirectoryAuditWaiver[];
|
|
8
23
|
}
|
|
9
24
|
export interface SkillDirectoryAuditOptions {
|
|
10
25
|
ignoreRewriteableMarkdown?: boolean;
|
|
26
|
+
/** Classifier decisions per rewritten markdown file (relative path) */
|
|
27
|
+
occurrencesByFile?: Map<string, ReferenceOccurrence[]>;
|
|
11
28
|
}
|
|
12
29
|
export declare function auditSkillDirectory(rootDir: string, provider: ProviderType, skillName: string, options?: SkillDirectoryAuditOptions): Promise<SkillDirectoryAuditResult>;
|
|
13
30
|
//# sourceMappingURL=skill-directory-audit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-directory-audit.d.ts","sourceRoot":"","sources":["../../src/migrate/skill-directory-audit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-directory-audit.d.ts","sourceRoot":"","sources":["../../src/migrate/skill-directory-audit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,wBAAwB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,8EAA8E;IAC9E,OAAO,EAAE,yBAAyB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,0BAA0B;IAC1C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACvD;AAkHD,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,yBAAyB,CAAC,CAoCpC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
2
|
import { extname, join, relative } from "node:path";
|
|
3
3
|
import { findRuntimeCouplingMatches } from "./runtime-coupling-patterns.js";
|
|
4
|
+
import { detectStateChanging, languageFor } from "./state-changing-script-detector.js";
|
|
4
5
|
import { isBinaryContent } from "./reconcile/checksum-utils.js";
|
|
5
6
|
const MAX_TEXT_FILE_BYTES = 512 * 1024;
|
|
6
7
|
const EXECUTABLE_EXTENSIONS = new Set([".sh", ".py", ".js", ".cjs", ".mjs", ".ts"]);
|
|
@@ -30,9 +31,16 @@ function shouldScanFile(filePath, size) {
|
|
|
30
31
|
return false;
|
|
31
32
|
return TEXT_EXTENSIONS.has(extname(filePath).toLowerCase());
|
|
32
33
|
}
|
|
33
|
-
function
|
|
34
|
-
const base =
|
|
35
|
-
|
|
34
|
+
function classifyFile(relativePath) {
|
|
35
|
+
const base = relativePath.split("/").pop()?.toLowerCase() ?? "";
|
|
36
|
+
const ext = extname(relativePath).toLowerCase();
|
|
37
|
+
if (EXECUTABLE_EXTENSIONS.has(ext))
|
|
38
|
+
return "script";
|
|
39
|
+
if (base === "skill.md")
|
|
40
|
+
return "entry";
|
|
41
|
+
if (ext === ".md" || ext === ".mdx")
|
|
42
|
+
return "reference";
|
|
43
|
+
return "other";
|
|
36
44
|
}
|
|
37
45
|
function isMarkdownFile(filePath) {
|
|
38
46
|
const extension = extname(filePath).toLowerCase();
|
|
@@ -52,10 +60,52 @@ async function collectFiles(rootDir) {
|
|
|
52
60
|
}
|
|
53
61
|
return files;
|
|
54
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Severity-aware, per-pattern verdict. This is where the LOCKED script policy and
|
|
65
|
+
* the reference-grade downgrade live:
|
|
66
|
+
*
|
|
67
|
+
* - Reference-grade markdown (references/*.md, non-entry docs): every runtime
|
|
68
|
+
* coupling downgrades to warn+annotate. Markdown never executes.
|
|
69
|
+
* - Entry markdown (SKILL.md): env-var patterns are table-rewriteable (a safe
|
|
70
|
+
* static lookup) → warn+annotate; CLI/path/config patterns downgrade to warn
|
|
71
|
+
* too, because a markdown doc line is not runnable. (High-risk == a runnable
|
|
72
|
+
* *script*, not the fact of being SKILL.md.)
|
|
73
|
+
* - Scripts: if the whole script is state-changing AND carries ANY coupling
|
|
74
|
+
* match → FAIL-CLOSED for every match (a rewrite never downgrades it). A
|
|
75
|
+
* non-state-changing script rewrites known env-var patterns (warn+annotate),
|
|
76
|
+
* else warn+preserve — per the locked policy.
|
|
77
|
+
*/
|
|
78
|
+
function verdictFor(match, fileClass, scriptIsStateChanging, stateChangingReason) {
|
|
79
|
+
if (fileClass === "script" && scriptIsStateChanging) {
|
|
80
|
+
return {
|
|
81
|
+
kind: "fail",
|
|
82
|
+
message: `${match.message} (state-changing script ${stateChangingReason ?? ""}; fail-closed — no rewrite path downgrades it)`.trimEnd(),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (match.cls === "claude-env-var" && match.rewrite) {
|
|
86
|
+
const detail = match.rewrite.disposition === "rewrite" ? "rewritten" : "neutralized";
|
|
87
|
+
return { kind: "warn", message: `${match.message} (${detail})`, annotation: match.rewrite.annotation };
|
|
88
|
+
}
|
|
89
|
+
// Non-env patterns (CLI, .claude/ path, CLAUDE.md token).
|
|
90
|
+
if (fileClass === "reference" || fileClass === "entry") {
|
|
91
|
+
return {
|
|
92
|
+
kind: "warn",
|
|
93
|
+
message: `${match.message} (documentation reference)`,
|
|
94
|
+
annotation: `${match.message}; preserved in migrated docs — adapt manually for the target runtime`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// Non-state-changing script, non-rewriteable pattern → warn + preserve.
|
|
98
|
+
return {
|
|
99
|
+
kind: "warn",
|
|
100
|
+
message: `${match.message} (preserved)`,
|
|
101
|
+
annotation: `${match.message}; left unchanged (no safe portable rewrite) — adapt manually for the target runtime`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
55
104
|
export async function auditSkillDirectory(rootDir, provider, skillName, options = {}) {
|
|
56
105
|
if (provider === "claude-code")
|
|
57
|
-
return { errors: [] };
|
|
106
|
+
return { errors: [], waivers: [] };
|
|
58
107
|
const errors = [];
|
|
108
|
+
const waivers = [];
|
|
59
109
|
for (const filePath of await collectFiles(rootDir)) {
|
|
60
110
|
const info = await stat(filePath);
|
|
61
111
|
if (!shouldScanFile(filePath, info.size))
|
|
@@ -67,14 +117,23 @@ export async function auditSkillDirectory(rootDir, provider, skillName, options
|
|
|
67
117
|
const relativePath = relative(rootDir, filePath).replace(/\\/g, "/");
|
|
68
118
|
if (options.ignoreRewriteableMarkdown && isMarkdownFile(relativePath))
|
|
69
119
|
continue;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
120
|
+
const fileClass = classifyFile(relativePath);
|
|
121
|
+
const stateChange = fileClass === "script" ? detectStateChanging(content, languageFor(relativePath)) : { stateChanging: false };
|
|
122
|
+
const occurrences = options.occurrencesByFile?.get(relativePath) ?? [];
|
|
123
|
+
for (const match of findRuntimeCouplingMatches(content, occurrences)) {
|
|
124
|
+
const verdict = verdictFor(match, fileClass, stateChange.stateChanging, stateChange.reason);
|
|
125
|
+
const severity = fileClass === "script" || fileClass === "entry" ? "high-risk" : "runtime-coupled";
|
|
126
|
+
if (verdict.kind === "fail") {
|
|
127
|
+
errors.push({
|
|
128
|
+
filePath: relativePath,
|
|
129
|
+
message: `${provider} skill/${skillName} ${severity} file ${relativePath} ${verdict.message}`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
waivers.push({ filePath: relativePath, message: verdict.message, annotation: verdict.annotation });
|
|
134
|
+
}
|
|
76
135
|
}
|
|
77
136
|
}
|
|
78
|
-
return { errors };
|
|
137
|
+
return { errors, waivers };
|
|
79
138
|
}
|
|
80
139
|
//# sourceMappingURL=skill-directory-audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-directory-audit.js","sourceRoot":"","sources":["../../src/migrate/skill-directory-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"skill-directory-audit.js","sourceRoot":"","sources":["../../src/migrate/skill-directory-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { type ReferenceIntegrityIndex } from "./references/fence-aware-reference-rewriter.js";
|
|
1
2
|
import { type InstalledBackRef } from "../core/install-metadata-backref.js";
|
|
3
|
+
import type { MigrationDecisionRecord } from "./validation/migration-record-types.js";
|
|
2
4
|
import type { ProviderType, SkillInfo } from "./types.js";
|
|
3
5
|
export interface SkillInstallResult {
|
|
4
6
|
skill: string;
|
|
@@ -6,6 +8,8 @@ export interface SkillInstallResult {
|
|
|
6
8
|
success: boolean;
|
|
7
9
|
path?: string;
|
|
8
10
|
error?: string;
|
|
11
|
+
/** Structured decision records (migrated / failed / partial-with-waivers) for the run report. */
|
|
12
|
+
records?: MigrationDecisionRecord[];
|
|
9
13
|
}
|
|
10
14
|
/**
|
|
11
15
|
* Install a single skill directory to the target provider.
|
|
@@ -15,6 +19,7 @@ export interface SkillInstallResult {
|
|
|
15
19
|
export declare function installSkillDirectory(skill: SkillInfo, provider: ProviderType, options: {
|
|
16
20
|
global: boolean;
|
|
17
21
|
installedBackRef?: InstalledBackRef | null;
|
|
22
|
+
migratedRefs?: ReferenceIntegrityIndex | null;
|
|
18
23
|
}): Promise<SkillInstallResult>;
|
|
19
24
|
/**
|
|
20
25
|
* Compute the install path for a skill on a target provider (used by reconciler/dry-run).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-directory-installer.d.ts","sourceRoot":"","sources":["../../src/migrate/skill-directory-installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-directory-installer.d.ts","sourceRoot":"","sources":["../../src/migrate/skill-directory-installer.ts"],"names":[],"mappings":"AAOA,OAAO,EAGN,KAAK,uBAAuB,EAC5B,MAAM,gDAAgD,CAAC;AAMxD,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAIrG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAe1D,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACpC;AAqGD;;;;GAIG;AACH,wBAAsB,qBAAqB,CAC1C,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE;IACR,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC9C,GACC,OAAO,CAAC,kBAAkB,CAAC,CA2I7B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1B,MAAM,GAAG,IAAI,CAGf"}
|
|
@@ -4,6 +4,7 @@ import { existsSync } from "node:fs";
|
|
|
4
4
|
import { cp, mkdir, readdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
|
|
5
5
|
import { dirname, join, resolve } from "node:path";
|
|
6
6
|
import { stripClaudeRefs } from "./converters/index.js";
|
|
7
|
+
import { combineIntegrityIndexes, createReferenceIntegrityIndex, } from "./references/fence-aware-reference-rewriter.js";
|
|
7
8
|
import { providers } from "./provider-registry.js";
|
|
8
9
|
import { getPortableInstallPath } from "./provider-registry-utils.js";
|
|
9
10
|
import { sanitizeSkillName } from "./discovery/skills-discovery.js";
|
|
@@ -11,6 +12,20 @@ import { computeContentChecksum } from "./reconcile/checksum-utils.js";
|
|
|
11
12
|
import { addPortableInstallation } from "./reconcile/portable-registry.js";
|
|
12
13
|
import { resolveInstalledBackRef } from "../core/install-metadata-backref.js";
|
|
13
14
|
import { auditSkillDirectory } from "./skill-directory-audit.js";
|
|
15
|
+
import { applyEnvVarRewrites } from "./apply-env-var-rewrites.js";
|
|
16
|
+
import { detectStateChanging, languageFor } from "./state-changing-script-detector.js";
|
|
17
|
+
const NON_STATE_CHANGING_REWRITE_EXTENSIONS = new Set([".sh", ".py", ".js", ".cjs", ".mjs", ".ts", ".tsx"]);
|
|
18
|
+
const REWRITE_SCANNABLE_EXTENSIONS = new Set([
|
|
19
|
+
...NON_STATE_CHANGING_REWRITE_EXTENSIONS,
|
|
20
|
+
".md",
|
|
21
|
+
".mdx",
|
|
22
|
+
".txt",
|
|
23
|
+
".json",
|
|
24
|
+
".jsonc",
|
|
25
|
+
".yaml",
|
|
26
|
+
".yml",
|
|
27
|
+
".toml",
|
|
28
|
+
]);
|
|
14
29
|
async function canonicalize(path) {
|
|
15
30
|
try {
|
|
16
31
|
return await realpath(path);
|
|
@@ -31,26 +46,74 @@ async function canonicalize(path) {
|
|
|
31
46
|
}
|
|
32
47
|
}
|
|
33
48
|
}
|
|
34
|
-
async function rewriteMarkdownFilesForProvider(rootDir, provider) {
|
|
49
|
+
async function rewriteMarkdownFilesForProvider(rootDir, provider, migratedRefs, occurrencesByFile, baseDir = rootDir) {
|
|
35
50
|
const entries = await readdir(rootDir, { withFileTypes: true });
|
|
36
51
|
for (const entry of entries) {
|
|
37
52
|
const fullPath = join(rootDir, entry.name);
|
|
38
53
|
if (entry.isDirectory()) {
|
|
39
|
-
await rewriteMarkdownFilesForProvider(fullPath, provider);
|
|
54
|
+
await rewriteMarkdownFilesForProvider(fullPath, provider, migratedRefs, occurrencesByFile, baseDir);
|
|
40
55
|
continue;
|
|
41
56
|
}
|
|
42
57
|
if (!entry.isFile() || !entry.name.toLowerCase().endsWith(".md"))
|
|
43
58
|
continue;
|
|
44
59
|
const original = await readFile(fullPath, "utf-8");
|
|
45
|
-
const
|
|
60
|
+
const stripped = stripClaudeRefs(original, {
|
|
46
61
|
provider,
|
|
47
62
|
targetName: providers[provider].displayName,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
file: entry.name,
|
|
64
|
+
migratedRefs,
|
|
65
|
+
});
|
|
66
|
+
const relPath = fullPath.slice(baseDir.length + 1).replace(/\\/g, "/");
|
|
67
|
+
occurrencesByFile.set(relPath, stripped.occurrences);
|
|
68
|
+
if (stripped.content !== original) {
|
|
69
|
+
await writeFile(fullPath, stripped.content, "utf-8");
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Apply the static env-var rewrite table across the copied tree BEFORE the audit.
|
|
75
|
+
* State-changing scripts are NOT rewritten — a rewrite path must never downgrade a
|
|
76
|
+
* state-changing script (LOCKED policy 4a); it fail-closes in the audit regardless.
|
|
77
|
+
* Only "rewrite"-disposition tokens are substituted; "neutralize" tokens remain for
|
|
78
|
+
* the audit to warn+annotate. Returns one migration record per file that changed.
|
|
79
|
+
*/
|
|
80
|
+
async function applyEnvVarRewritesForProvider(rootDir, provider, skill, baseDir = rootDir) {
|
|
81
|
+
const records = [];
|
|
82
|
+
const entries = await readdir(rootDir, { withFileTypes: true });
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
const fullPath = join(rootDir, entry.name);
|
|
85
|
+
if (entry.isDirectory()) {
|
|
86
|
+
records.push(...(await applyEnvVarRewritesForProvider(fullPath, provider, skill, baseDir)));
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (!entry.isFile())
|
|
90
|
+
continue;
|
|
91
|
+
const ext = fullPath.slice(fullPath.lastIndexOf(".")).toLowerCase();
|
|
92
|
+
if (!REWRITE_SCANNABLE_EXTENSIONS.has(ext))
|
|
93
|
+
continue;
|
|
94
|
+
const original = await readFile(fullPath, "utf-8");
|
|
95
|
+
// Never rewrite a state-changing script — it stays fail-closed by policy.
|
|
96
|
+
if (NON_STATE_CHANGING_REWRITE_EXTENSIONS.has(ext) && detectStateChanging(original, languageFor(fullPath)).stateChanging)
|
|
97
|
+
continue;
|
|
98
|
+
const { content, applied } = applyEnvVarRewrites(original);
|
|
99
|
+
if (applied.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
await writeFile(fullPath, content, "utf-8");
|
|
102
|
+
const relPath = fullPath.slice(baseDir.length + 1).replace(/\\/g, "/");
|
|
103
|
+
for (const a of applied) {
|
|
104
|
+
records.push({
|
|
105
|
+
source: `.claude/skills/${skill.dirName}/${relPath}`,
|
|
106
|
+
type: "skill",
|
|
107
|
+
provider,
|
|
108
|
+
outcome: "partial",
|
|
109
|
+
reason: "runtime-neutralized",
|
|
110
|
+
detail: a.annotation,
|
|
111
|
+
target: relPath,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return records;
|
|
116
|
+
}
|
|
54
117
|
/**
|
|
55
118
|
* Install a single skill directory to the target provider.
|
|
56
119
|
* Source dir → target dir using node fs.cp recursive.
|
|
@@ -72,6 +135,10 @@ export async function installSkillDirectory(skill, provider, options) {
|
|
|
72
135
|
};
|
|
73
136
|
}
|
|
74
137
|
const targetDir = join(targetBase, sanitizedName);
|
|
138
|
+
// Structured decision records — populated during install (waivers/rewrites) and
|
|
139
|
+
// on audit failure (fail-closed). Surfaced on the result so no outcome is silent.
|
|
140
|
+
const installRecords = [];
|
|
141
|
+
let failureRecords = [];
|
|
75
142
|
try {
|
|
76
143
|
const parent = dirname(targetDir);
|
|
77
144
|
if (!existsSync(parent))
|
|
@@ -90,11 +157,43 @@ export async function installSkillDirectory(skill, provider, options) {
|
|
|
90
157
|
try {
|
|
91
158
|
await cp(skill.sourcePath, targetDir, { recursive: true, force: true, errorOnExist: false });
|
|
92
159
|
copied = true;
|
|
93
|
-
|
|
94
|
-
|
|
160
|
+
// The skill being installed is definitionally part of the migration set,
|
|
161
|
+
// so its own fenced self-references always pass the integrity check.
|
|
162
|
+
const selfIndex = createReferenceIntegrityIndex([`.claude/skills/${skill.dirName}/`]);
|
|
163
|
+
const occurrencesByFile = new Map();
|
|
164
|
+
await rewriteMarkdownFilesForProvider(targetDir, provider, combineIntegrityIndexes(selfIndex, options.migratedRefs), occurrencesByFile);
|
|
165
|
+
// Apply the static env-var rewrite table across the tree (scripts + markdown)
|
|
166
|
+
// BEFORE the audit, so table-known tokens (e.g. $CLAUDE_PROJECT_DIR) are already
|
|
167
|
+
// neutralized to a provider-neutral literal when the audit runs. State-changing
|
|
168
|
+
// scripts are skipped inside the helper and stay fail-closed.
|
|
169
|
+
const rewriteRecords = provider === "claude-code" ? [] : await applyEnvVarRewritesForProvider(targetDir, provider, skill);
|
|
170
|
+
installRecords.push(...rewriteRecords);
|
|
171
|
+
const audit = await auditSkillDirectory(targetDir, provider, skill.name, { occurrencesByFile });
|
|
95
172
|
if (audit.errors.length > 0) {
|
|
173
|
+
// Fail-closed: emit a structured failure record (never a silent absence),
|
|
174
|
+
// then throw so the catch block rolls the whole skill dir back.
|
|
175
|
+
failureRecords = audit.errors.map((e) => ({
|
|
176
|
+
source: `.claude/skills/${skill.dirName}/${e.filePath}`,
|
|
177
|
+
type: "skill",
|
|
178
|
+
provider,
|
|
179
|
+
outcome: "failed",
|
|
180
|
+
reason: "audit-rejected",
|
|
181
|
+
detail: e.message,
|
|
182
|
+
}));
|
|
96
183
|
throw new Error(`Skill runtime compatibility audit failed: ${audit.errors.map((e) => e.message).join("; ")}`);
|
|
97
184
|
}
|
|
185
|
+
// Downgraded matches (warn+annotate) become partial-migration records.
|
|
186
|
+
for (const w of audit.waivers) {
|
|
187
|
+
installRecords.push({
|
|
188
|
+
source: `.claude/skills/${skill.dirName}/${w.filePath}`,
|
|
189
|
+
type: "skill",
|
|
190
|
+
provider,
|
|
191
|
+
outcome: "partial",
|
|
192
|
+
reason: "runtime-neutralized",
|
|
193
|
+
detail: `${w.message}: ${w.annotation}`,
|
|
194
|
+
target: w.filePath,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
98
197
|
const skillMdPath = join(skill.sourcePath, "SKILL.md");
|
|
99
198
|
const skillMdTarget = join(targetDir, "SKILL.md");
|
|
100
199
|
const sourceChecksum = computeContentChecksum(await readFile(skillMdPath, "utf-8"));
|
|
@@ -125,7 +224,13 @@ export async function installSkillDirectory(skill, provider, options) {
|
|
|
125
224
|
if (backupDir && existsSync(backupDir)) {
|
|
126
225
|
await rm(backupDir, { recursive: true, force: true });
|
|
127
226
|
}
|
|
128
|
-
return {
|
|
227
|
+
return {
|
|
228
|
+
skill: skill.name,
|
|
229
|
+
provider,
|
|
230
|
+
success: true,
|
|
231
|
+
path: targetDir,
|
|
232
|
+
records: installRecords.length > 0 ? installRecords : undefined,
|
|
233
|
+
};
|
|
129
234
|
}
|
|
130
235
|
catch (err) {
|
|
131
236
|
return {
|
|
@@ -133,6 +238,7 @@ export async function installSkillDirectory(skill, provider, options) {
|
|
|
133
238
|
provider,
|
|
134
239
|
success: false,
|
|
135
240
|
error: err instanceof Error ? err.message : String(err),
|
|
241
|
+
records: failureRecords.length > 0 ? failureRecords : undefined,
|
|
136
242
|
};
|
|
137
243
|
}
|
|
138
244
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-directory-installer.js","sourceRoot":"","sources":["../../src/migrate/skill-directory-installer.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,kGAAkG;AAElG,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAyB,MAAM,qCAAqC,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-directory-installer.js","sourceRoot":"","sources":["../../src/migrate/skill-directory-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type ScriptLanguage = "shell" | "python" | "node" | "unknown";
|
|
2
|
+
export declare function languageFor(filePath: string): ScriptLanguage;
|
|
3
|
+
export interface StateChangingResult {
|
|
4
|
+
stateChanging: boolean;
|
|
5
|
+
/** Reason for the first matched state-changing command (for records/escalation). */
|
|
6
|
+
reason?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Report whether `content` contains a state-changing command. `language` scopes the
|
|
10
|
+
* language-specific rules; omit it (or pass "unknown") to apply ALL rules — the
|
|
11
|
+
* most conservative choice. Comment lines and (for shell command patterns) quoted
|
|
12
|
+
* strings are excluded so a mention in a comment/string is not a false positive.
|
|
13
|
+
* `content` is DATA: matched, never executed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectStateChanging(content: string, language?: ScriptLanguage): StateChangingResult;
|
|
16
|
+
//# sourceMappingURL=state-changing-script-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-changing-script-detector.d.ts","sourceRoot":"","sources":["../../src/migrate/state-changing-script-detector.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAmErE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAe5D;AAED,MAAM,WAAW,mBAAmB;IACnC,aAAa,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,cAA0B,GAAG,mBAAmB,CAsB9G"}
|