@shapeshift-labs/frontier-lang-compiler 0.2.48 → 0.2.50
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 +25 -0
- package/bench/native-transform-suite.mjs +19 -0
- package/bench/smoke.mjs +7 -0
- package/dist/declarations/runtime.d.ts +12 -0
- package/dist/declarations/universal-conversion-artifacts.d.ts +148 -0
- package/dist/declarations/universal-conversion-plan.d.ts +203 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/internal/index-impl/createUniversalConversionPlan.js +5 -0
- package/dist/internal/index-impl/queryUniversalConversionPlan.js +5 -0
- package/dist/universal-conversion-artifact-query.js +60 -0
- package/dist/universal-conversion-artifacts.js +287 -0
- package/dist/universal-conversion-plan-merge-refs.js +125 -0
- package/dist/universal-conversion-plan-scoring.js +134 -0
- package/dist/universal-conversion-plan.js +279 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -129,6 +129,9 @@ import {
|
|
|
129
129
|
createNativeParserAstFormatMatrix,
|
|
130
130
|
createProjectionTargetLossMatrix,
|
|
131
131
|
createUniversalCapabilityMatrix,
|
|
132
|
+
createUniversalConversionArtifacts,
|
|
133
|
+
createUniversalConversionPlan,
|
|
134
|
+
queryUniversalConversionPlan,
|
|
132
135
|
importNativeSource
|
|
133
136
|
} from '@shapeshift-labs/frontier-lang-compiler';
|
|
134
137
|
|
|
@@ -162,6 +165,24 @@ const pythonUniversal = universalMatrix.languages.find((entry) => entry.language
|
|
|
162
165
|
|
|
163
166
|
console.log(pythonUniversal.readiness); // combined import/parser/projection readiness
|
|
164
167
|
console.log(pythonUniversal.blockers); // missing evidence/adapters that prevent merge admission
|
|
168
|
+
|
|
169
|
+
const conversionPlan = createUniversalConversionPlan({
|
|
170
|
+
imports: [imported],
|
|
171
|
+
targets: ['python', 'rust'],
|
|
172
|
+
requiredFeatures: ['syntax', 'semantic', 'sourcePreservation']
|
|
173
|
+
});
|
|
174
|
+
const pythonToRust = queryUniversalConversionPlan(conversionPlan, {
|
|
175
|
+
sourceLanguage: 'python',
|
|
176
|
+
target: 'rust'
|
|
177
|
+
}).bestRoute;
|
|
178
|
+
|
|
179
|
+
console.log(pythonToRust.mode); // "semantic-index-only", "target-adapter", "stub-only", etc.
|
|
180
|
+
console.log(pythonToRust.missingEvidence); // adapter/proof/source-map gaps for swarm workers
|
|
181
|
+
console.log(pythonToRust.mergeScore.value); // sortable merge-review score, not a proof
|
|
182
|
+
|
|
183
|
+
const conversionArtifacts = createUniversalConversionArtifacts(conversionPlan);
|
|
184
|
+
console.log(conversionArtifacts.historyRecords[0].kind); // "frontier.lang.semanticHistoryRecord"
|
|
185
|
+
console.log(conversionArtifacts.patchBundleRecords[0].admission.autoMergeClaim); // false
|
|
165
186
|
```
|
|
166
187
|
|
|
167
188
|
The projection target matrix separates five runtime/API classes:
|
|
@@ -174,6 +195,10 @@ The projection target matrix separates five runtime/API classes:
|
|
|
174
195
|
|
|
175
196
|
`createUniversalCapabilityMatrix` composes the import coverage, parser AST format, parser feature, and projection target matrices into a single language row per source language. It is the coordinator-facing view for universal-language work: it shows imports, symbols, source-map mappings, parser feature readiness, projection targets, missing adapters, unsupported target features, blockers, and review reasons without claiming lossless conversion where evidence is absent.
|
|
176
197
|
|
|
198
|
+
`createUniversalConversionPlan` turns that capability evidence into coordinator tasks: preserve exact source, run a target adapter, emit stubs, attach semantic-index evidence, or block the route until missing parser/adapter/proof evidence exists. Every route carries `autoMergeClaim: false`, `semanticEquivalenceClaim: false`, missing evidence, task hints, and a `frontier.lang.semanticMergeScore.v1` score for swarm merge admission.
|
|
199
|
+
|
|
200
|
+
`createUniversalConversionArtifacts` materializes those route refs into compact `SemanticHistoryRecord` and `SemanticPatchBundleRecord` artifacts that swarm collectors can index by route, history ID, patch-bundle ID, source path, ownership key, conflict key, evidence, proof, readiness, and admission status. It is still review evidence, not target-code proof: blocked and semantic-index-only routes stay blocked/needs-review, and every artifact keeps `autoMergeClaim: false` plus `semanticEquivalenceClaim: false`.
|
|
201
|
+
|
|
177
202
|
Preserve exact native source text, token/trivia hashes, comments, whitespace, and source directives as evidence. This does not claim full semantic understanding; it keeps round-trip material available while exact parser adapters catch up:
|
|
178
203
|
|
|
179
204
|
```js
|
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
createSemanticImportSidecar,
|
|
6
6
|
createSemanticSlice,
|
|
7
7
|
createSemanticSliceAdmissionRecord,
|
|
8
|
+
createUniversalConversionArtifacts,
|
|
9
|
+
createUniversalConversionPlan,
|
|
8
10
|
projectNativeImportToSource,
|
|
9
11
|
summarizeNativeImportFeatureEvidence,
|
|
10
12
|
testSemanticSlice
|
|
@@ -47,6 +49,16 @@ export function measureNativeTransformations(nativeImportResults) {
|
|
|
47
49
|
}));
|
|
48
50
|
const sliceAdmissionDurationMs = performance.now() - sliceAdmissionStart;
|
|
49
51
|
|
|
52
|
+
const conversionPlanStart = performance.now();
|
|
53
|
+
const conversionPlan = createUniversalConversionPlan({
|
|
54
|
+
imports: nativeImportResults.slice(0, 100),
|
|
55
|
+
targets: ['javascript', 'rust', 'python']
|
|
56
|
+
});
|
|
57
|
+
const conversionPlanDurationMs = performance.now() - conversionPlanStart;
|
|
58
|
+
const conversionArtifactsStart = performance.now();
|
|
59
|
+
const conversionArtifacts = createUniversalConversionArtifacts(conversionPlan);
|
|
60
|
+
const conversionArtifactsDurationMs = performance.now() - conversionArtifactsStart;
|
|
61
|
+
|
|
50
62
|
const featureEvidenceStart = performance.now();
|
|
51
63
|
const featureEvidenceSummaries = nativeImportResults.map((imported) => summarizeNativeImportFeatureEvidence(imported.losses, {
|
|
52
64
|
evidence: imported.evidence
|
|
@@ -77,6 +89,13 @@ export function measureNativeTransformations(nativeImportResults) {
|
|
|
77
89
|
sliceGateFailures,
|
|
78
90
|
sliceAdmissions: semanticSliceAdmissions.length,
|
|
79
91
|
sliceAdmissionRejected: semanticSliceAdmissions.filter((admission) => admission.action === 'reject').length,
|
|
92
|
+
conversionPlanRoutes: conversionPlan.routes.length,
|
|
93
|
+
conversionPlanBlocked: conversionPlan.summary.blockedRoutes,
|
|
94
|
+
conversionPlanDurationMs,
|
|
95
|
+
conversionArtifacts: conversionArtifacts.summary.routes,
|
|
96
|
+
conversionArtifactHistories: conversionArtifacts.summary.histories,
|
|
97
|
+
conversionArtifactPatchBundles: conversionArtifacts.summary.patchBundles,
|
|
98
|
+
conversionArtifactsDurationMs,
|
|
80
99
|
featureEvidencePolicyMatches,
|
|
81
100
|
featureEvidenceDurationMs,
|
|
82
101
|
nativeProjections: nativeProjections.length,
|
package/bench/smoke.mjs
CHANGED
|
@@ -57,6 +57,13 @@ console.log(JSON.stringify({
|
|
|
57
57
|
sliceGateFailures: transformMetrics.sliceGateFailures,
|
|
58
58
|
sliceAdmissions: transformMetrics.sliceAdmissions,
|
|
59
59
|
sliceAdmissionRejected: transformMetrics.sliceAdmissionRejected,
|
|
60
|
+
conversionPlanRoutes: transformMetrics.conversionPlanRoutes,
|
|
61
|
+
conversionPlanBlocked: transformMetrics.conversionPlanBlocked,
|
|
62
|
+
conversionPlanDurationMs: Number(transformMetrics.conversionPlanDurationMs.toFixed(2)),
|
|
63
|
+
conversionArtifacts: transformMetrics.conversionArtifacts,
|
|
64
|
+
conversionArtifactHistories: transformMetrics.conversionArtifactHistories,
|
|
65
|
+
conversionArtifactPatchBundles: transformMetrics.conversionArtifactPatchBundles,
|
|
66
|
+
conversionArtifactsDurationMs: Number(transformMetrics.conversionArtifactsDurationMs.toFixed(2)),
|
|
60
67
|
featureEvidencePolicyMatches: transformMetrics.featureEvidencePolicyMatches,
|
|
61
68
|
featureEvidenceDurationMs: Number(transformMetrics.featureEvidenceDurationMs.toFixed(2)),
|
|
62
69
|
nativeProjections: transformMetrics.nativeProjections,
|
|
@@ -37,6 +37,8 @@ import type { NativeParserFeatureCategory, NativeParserFeatureCoverageStatus, Na
|
|
|
37
37
|
import type { NativeImportCoverageLanguage, NativeImportCoverageMatrix, NativeImportCoverageMatrixOptions } from './native-import-coverage.js';
|
|
38
38
|
import type { ProjectionTargetLossClass, ProjectionSourceProjectionCoverage, ProjectionTargetCoverageEntry, ProjectionTargetLanguageCoverage, ProjectionTargetLossMatrix, ProjectionTargetLossMatrixOptions } from './projection-coverage.js';
|
|
39
39
|
import type { UniversalCapabilityLanguageRow, UniversalCapabilityMatrix, UniversalCapabilityMatrixOptions } from './universal-capability.js';
|
|
40
|
+
import type { CreateUniversalConversionArtifactsInput, CreateUniversalConversionArtifactsOptions, UniversalConversionArtifactQuery, UniversalConversionArtifacts, UniversalConversionRouteArtifact } from './universal-conversion-artifacts.js';
|
|
41
|
+
import type { UniversalConversionPlan, UniversalConversionPlanOptions, UniversalConversionPlanQuery, UniversalConversionPlanQueryResult } from './universal-conversion-plan.js';
|
|
40
42
|
import type { UniversalDialectRegistry, UniversalDialectRegistryInput, UniversalDialectRecordInput, UniversalExternRecordInput } from './universal-dialects.js';
|
|
41
43
|
import type { NativeImportContractSource, NativeImportSourcePreservationRecordSummary, NativeImportSourcePreservationContract, NativeImportAdapterCoverageRecordSummary, NativeImportAdapterCoverageContract, NativeImportRegionSummary, NativeImportSourceMapSummary, NativeImportReadinessContract, NativeImportResultContract, NativeImportResultContractOptions } from './native-import-contracts.js';
|
|
42
44
|
import type { NativeSourceTokenKind, NativeSourcePreservedToken, NativeSourcePreservedDirective, NativeSourcePreservation, CreateNativeSourcePreservationOptions } from './source-preservation.js';
|
|
@@ -87,6 +89,16 @@ export declare function createNativeParserFeatureMatrix(options?: NativeParserFe
|
|
|
87
89
|
export declare function queryNativeParserFeatureMatrix(matrixOrOptions?: NativeParserFeatureMatrix | NativeParserFeatureMatrixOptions, query?: NativeParserFeatureMatrixQuery): NativeParserFeatureMatrixQueryResult;
|
|
88
90
|
export declare function createProjectionTargetLossMatrix(options?: ProjectionTargetLossMatrixOptions): ProjectionTargetLossMatrix;
|
|
89
91
|
export declare function createUniversalCapabilityMatrix(options?: UniversalCapabilityMatrixOptions): UniversalCapabilityMatrix;
|
|
92
|
+
export declare function createUniversalConversionArtifacts(input?: CreateUniversalConversionArtifactsInput, options?: CreateUniversalConversionArtifactsOptions): UniversalConversionArtifacts;
|
|
93
|
+
export declare function createUniversalConversionPlan(options?: UniversalConversionPlanOptions): UniversalConversionPlan;
|
|
94
|
+
export declare function queryUniversalConversionArtifacts(
|
|
95
|
+
records: UniversalConversionArtifacts | UniversalConversionRouteArtifact | readonly (UniversalConversionArtifacts | UniversalConversionRouteArtifact)[],
|
|
96
|
+
query?: UniversalConversionArtifactQuery
|
|
97
|
+
): readonly UniversalConversionRouteArtifact[];
|
|
98
|
+
export declare function queryUniversalConversionPlan(
|
|
99
|
+
planOrOptions?: UniversalConversionPlan | UniversalConversionPlanOptions,
|
|
100
|
+
query?: UniversalConversionPlanQuery
|
|
101
|
+
): UniversalConversionPlanQueryResult;
|
|
90
102
|
export declare function createNativeSourcePreservation(options: CreateNativeSourcePreservationOptions): NativeSourcePreservation;
|
|
91
103
|
export declare function createSemanticImportSidecar(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: SemanticImportSidecarOptions): SemanticImportSidecar;
|
|
92
104
|
export declare function createNativeImportResultContract(importResult: NativeSourceImportResult | NativeProjectImportResult, options?: NativeImportResultContractOptions): NativeImportResultContract;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
FrontierSourceLanguage,
|
|
3
|
+
SemanticMergeReadiness
|
|
4
|
+
} from '@shapeshift-labs/frontier-lang-kernel';
|
|
5
|
+
import type { FrontierCompileTarget } from './compile.js';
|
|
6
|
+
import type { SemanticHistoryRecord } from './semantic-history.js';
|
|
7
|
+
import type { SemanticPatchBundleRecord } from './semantic-patch-bundle.js';
|
|
8
|
+
import type {
|
|
9
|
+
UniversalConversionAdmissionAction,
|
|
10
|
+
UniversalConversionPlan,
|
|
11
|
+
UniversalConversionPlanOptions,
|
|
12
|
+
UniversalConversionPriority,
|
|
13
|
+
UniversalConversionRoute,
|
|
14
|
+
UniversalConversionRouteAction,
|
|
15
|
+
UniversalConversionRouteMode,
|
|
16
|
+
UniversalConversionMergeScore
|
|
17
|
+
} from './universal-conversion-plan.js';
|
|
18
|
+
|
|
19
|
+
export type UniversalConversionArtifactAdmissionStatus = 'queued' | 'needs-review' | 'blocked' | string;
|
|
20
|
+
export type UniversalConversionArtifactMaterializationStatus = 'materialized' | 'planned-only' | 'missing' | 'failed' | string;
|
|
21
|
+
|
|
22
|
+
export interface UniversalConversionArtifactMaterialization {
|
|
23
|
+
readonly status: UniversalConversionArtifactMaterializationStatus;
|
|
24
|
+
readonly plannedHistoryIds: readonly string[];
|
|
25
|
+
readonly materializedHistoryIds: readonly string[];
|
|
26
|
+
readonly patchBundleIds: readonly string[];
|
|
27
|
+
readonly sourceMapLinkIds: readonly string[];
|
|
28
|
+
readonly evidenceIds: readonly string[];
|
|
29
|
+
readonly proofIds: readonly string[];
|
|
30
|
+
readonly autoMergeClaim: false;
|
|
31
|
+
readonly semanticEquivalenceClaim: false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface UniversalConversionRouteArtifact {
|
|
35
|
+
readonly kind: 'frontier.lang.universalConversionRouteArtifact';
|
|
36
|
+
readonly version: 1;
|
|
37
|
+
readonly schema: 'frontier.lang.universalConversionRouteArtifact.v1';
|
|
38
|
+
readonly routeId: string;
|
|
39
|
+
readonly planId?: string;
|
|
40
|
+
readonly sourceLanguage?: FrontierSourceLanguage | string;
|
|
41
|
+
readonly target?: FrontierCompileTarget | string;
|
|
42
|
+
readonly mode: UniversalConversionRouteMode;
|
|
43
|
+
readonly routeAction: UniversalConversionRouteAction;
|
|
44
|
+
readonly priority: UniversalConversionPriority;
|
|
45
|
+
readonly readiness: SemanticMergeReadiness | string;
|
|
46
|
+
readonly admissionAction: UniversalConversionAdmissionAction;
|
|
47
|
+
readonly admissionStatus: UniversalConversionArtifactAdmissionStatus;
|
|
48
|
+
readonly reviewRequired: true;
|
|
49
|
+
readonly history: SemanticHistoryRecord;
|
|
50
|
+
readonly patchBundle: SemanticPatchBundleRecord;
|
|
51
|
+
readonly materialization: UniversalConversionArtifactMaterialization;
|
|
52
|
+
readonly mergeScore?: UniversalConversionMergeScore;
|
|
53
|
+
readonly autoMergeClaim: false;
|
|
54
|
+
readonly semanticEquivalenceClaim: false;
|
|
55
|
+
readonly metadata: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface UniversalConversionArtifactIndex {
|
|
59
|
+
readonly routeIds: readonly string[];
|
|
60
|
+
readonly historyIds: readonly string[];
|
|
61
|
+
readonly patchBundleIds: readonly string[];
|
|
62
|
+
readonly languages: readonly string[];
|
|
63
|
+
readonly targets: readonly string[];
|
|
64
|
+
readonly modes: readonly string[];
|
|
65
|
+
readonly readinesses: readonly string[];
|
|
66
|
+
readonly admissionStatuses: readonly string[];
|
|
67
|
+
readonly sourcePaths: readonly string[];
|
|
68
|
+
readonly sourceHashes: readonly string[];
|
|
69
|
+
readonly ownershipKeys: readonly string[];
|
|
70
|
+
readonly conflictKeys: readonly string[];
|
|
71
|
+
readonly evidenceIds: readonly string[];
|
|
72
|
+
readonly proofIds: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface UniversalConversionArtifacts {
|
|
76
|
+
readonly kind: 'frontier.lang.universalConversionArtifacts';
|
|
77
|
+
readonly version: 1;
|
|
78
|
+
readonly schema: 'frontier.lang.universalConversionArtifacts.v1';
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly planId?: string;
|
|
81
|
+
readonly generatedAt: number | string;
|
|
82
|
+
readonly routeArtifacts: readonly UniversalConversionRouteArtifact[];
|
|
83
|
+
readonly historyRecords: readonly SemanticHistoryRecord[];
|
|
84
|
+
readonly patchBundleRecords: readonly SemanticPatchBundleRecord[];
|
|
85
|
+
readonly index: UniversalConversionArtifactIndex;
|
|
86
|
+
readonly summary: {
|
|
87
|
+
readonly routes: number;
|
|
88
|
+
readonly histories: number;
|
|
89
|
+
readonly patchBundles: number;
|
|
90
|
+
readonly reviewRequired: number;
|
|
91
|
+
readonly blocked: number;
|
|
92
|
+
readonly autoMergeClaims: 0;
|
|
93
|
+
readonly semanticEquivalenceClaims: 0;
|
|
94
|
+
};
|
|
95
|
+
readonly metadata: {
|
|
96
|
+
readonly autoMergeClaim: false;
|
|
97
|
+
readonly semanticEquivalenceClaim: false;
|
|
98
|
+
readonly note: string;
|
|
99
|
+
} & Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface CreateUniversalConversionArtifactsOptions {
|
|
103
|
+
readonly id?: string;
|
|
104
|
+
readonly planId?: string;
|
|
105
|
+
readonly generatedAt?: number | string;
|
|
106
|
+
readonly routeId?: string;
|
|
107
|
+
readonly sourceLanguage?: FrontierSourceLanguage | string;
|
|
108
|
+
readonly target?: FrontierCompileTarget | string;
|
|
109
|
+
readonly mode?: UniversalConversionRouteMode;
|
|
110
|
+
readonly readiness?: SemanticMergeReadiness | string;
|
|
111
|
+
readonly admissionAction?: UniversalConversionAdmissionAction;
|
|
112
|
+
readonly maxRoutes?: number;
|
|
113
|
+
readonly metadata?: Record<string, unknown>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export type CreateUniversalConversionArtifactsInput =
|
|
117
|
+
| UniversalConversionPlan
|
|
118
|
+
| UniversalConversionRoute
|
|
119
|
+
| UniversalConversionPlanOptions;
|
|
120
|
+
|
|
121
|
+
export interface UniversalConversionArtifactQuery {
|
|
122
|
+
readonly routeId?: string | readonly string[];
|
|
123
|
+
readonly historyId?: string | readonly string[];
|
|
124
|
+
readonly patchBundleId?: string | readonly string[];
|
|
125
|
+
readonly sourceLanguage?: FrontierSourceLanguage | string | readonly string[];
|
|
126
|
+
readonly target?: FrontierCompileTarget | string | readonly string[];
|
|
127
|
+
readonly mode?: UniversalConversionRouteMode | readonly string[];
|
|
128
|
+
readonly readiness?: SemanticMergeReadiness | string | readonly string[];
|
|
129
|
+
readonly admissionAction?: UniversalConversionAdmissionAction | readonly string[];
|
|
130
|
+
readonly admissionStatus?: UniversalConversionArtifactAdmissionStatus | readonly string[];
|
|
131
|
+
readonly priority?: UniversalConversionPriority | readonly string[];
|
|
132
|
+
readonly routeAction?: UniversalConversionRouteAction | readonly string[];
|
|
133
|
+
readonly sourcePath?: string | readonly string[];
|
|
134
|
+
readonly sourceHash?: string | readonly string[];
|
|
135
|
+
readonly ownershipKey?: string | readonly string[];
|
|
136
|
+
readonly conflictKey?: string | readonly string[];
|
|
137
|
+
readonly evidenceId?: string | readonly string[];
|
|
138
|
+
readonly proofId?: string | readonly string[];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export declare function createUniversalConversionArtifacts(
|
|
142
|
+
input?: CreateUniversalConversionArtifactsInput,
|
|
143
|
+
options?: CreateUniversalConversionArtifactsOptions
|
|
144
|
+
): UniversalConversionArtifacts;
|
|
145
|
+
export declare function queryUniversalConversionArtifacts(
|
|
146
|
+
records: UniversalConversionArtifacts | UniversalConversionRouteArtifact | readonly (UniversalConversionArtifacts | UniversalConversionRouteArtifact)[],
|
|
147
|
+
query?: UniversalConversionArtifactQuery
|
|
148
|
+
): readonly UniversalConversionRouteArtifact[];
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EvidenceRecord,
|
|
3
|
+
FrontierSourceLanguage,
|
|
4
|
+
SemanticMergeReadiness
|
|
5
|
+
} from '@shapeshift-labs/frontier-lang-kernel';
|
|
6
|
+
import type { FrontierCompileTarget } from './compile.js';
|
|
7
|
+
import type { NativeImportKnownLossKind } from './native-import-losses.js';
|
|
8
|
+
import type { NativeParserFeatureCategory } from './native-parser-features.js';
|
|
9
|
+
import type { ProjectionSourceProjectionCoverage, ProjectionTargetCoverageEntry } from './projection-coverage.js';
|
|
10
|
+
import type { ProjectionReadinessTargetCell } from './projection-readiness.js';
|
|
11
|
+
import type { UniversalCapabilityMatrix, UniversalCapabilityMatrixOptions } from './universal-capability.js';
|
|
12
|
+
|
|
13
|
+
export type UniversalConversionRouteMode =
|
|
14
|
+
| 'preserve-source'
|
|
15
|
+
| 'target-adapter'
|
|
16
|
+
| 'stub-only'
|
|
17
|
+
| 'semantic-index-only'
|
|
18
|
+
| 'blocked';
|
|
19
|
+
|
|
20
|
+
export type UniversalConversionRouteAction =
|
|
21
|
+
| 'preserve-source'
|
|
22
|
+
| 'run-target-adapter'
|
|
23
|
+
| 'attach-adapter-evidence'
|
|
24
|
+
| 'emit-stub'
|
|
25
|
+
| 'add-target-adapter'
|
|
26
|
+
| 'blocked';
|
|
27
|
+
|
|
28
|
+
export type UniversalConversionAdmissionAction = 'admit' | 'prioritize' | 'reject';
|
|
29
|
+
export type UniversalConversionPriority = 'low' | 'normal' | 'high' | 'blocker';
|
|
30
|
+
export type UniversalConversionRisk = 'low' | 'medium' | 'high';
|
|
31
|
+
|
|
32
|
+
export type UniversalConversionScoreComponentKey =
|
|
33
|
+
| 'importEvidence'
|
|
34
|
+
| 'parserEvidence'
|
|
35
|
+
| 'semanticIndex'
|
|
36
|
+
| 'projectionPath'
|
|
37
|
+
| 'proofEvidence';
|
|
38
|
+
|
|
39
|
+
export interface UniversalConversionScoreComponent {
|
|
40
|
+
readonly key: UniversalConversionScoreComponentKey;
|
|
41
|
+
readonly score: number;
|
|
42
|
+
readonly weight: number;
|
|
43
|
+
readonly weightedScore: number;
|
|
44
|
+
readonly status: 'strong' | 'partial' | 'weak' | 'blocked';
|
|
45
|
+
readonly reasons: readonly string[];
|
|
46
|
+
readonly signals: Record<string, unknown>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface UniversalConversionMergeScore {
|
|
50
|
+
readonly schema: 'frontier.lang.semanticMergeScore.v1';
|
|
51
|
+
readonly version: 1;
|
|
52
|
+
readonly value: number;
|
|
53
|
+
readonly uncappedValue: number;
|
|
54
|
+
readonly sortKey: number;
|
|
55
|
+
readonly higherIsBetter: true;
|
|
56
|
+
readonly readiness: SemanticMergeReadiness;
|
|
57
|
+
readonly risk: UniversalConversionRisk;
|
|
58
|
+
readonly action: UniversalConversionAdmissionAction;
|
|
59
|
+
readonly components: Readonly<Record<UniversalConversionScoreComponentKey, UniversalConversionScoreComponent>>;
|
|
60
|
+
readonly penalties: readonly string[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface UniversalConversionRouteEvidence {
|
|
64
|
+
readonly imports: number;
|
|
65
|
+
readonly importReadiness: SemanticMergeReadiness;
|
|
66
|
+
readonly symbols: number;
|
|
67
|
+
readonly sourceMaps: number;
|
|
68
|
+
readonly sourceMapMappings: number;
|
|
69
|
+
readonly losses: number;
|
|
70
|
+
readonly parserRows: number;
|
|
71
|
+
readonly mergeReadyParsers: number;
|
|
72
|
+
readonly exactSourceImports: number;
|
|
73
|
+
readonly declarationImports: number;
|
|
74
|
+
readonly targetSupported: boolean;
|
|
75
|
+
readonly targetAdapter?: string;
|
|
76
|
+
readonly targetLossKinds: readonly NativeImportKnownLossKind[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface UniversalConversionRouteMergeRefs {
|
|
80
|
+
readonly planId: string;
|
|
81
|
+
readonly routeId: string;
|
|
82
|
+
readonly historyIds: readonly string[];
|
|
83
|
+
readonly patchBundleIds: readonly string[];
|
|
84
|
+
readonly patchIds: readonly string[];
|
|
85
|
+
readonly mergeCandidateIds: readonly string[];
|
|
86
|
+
readonly replayLinks: readonly unknown[];
|
|
87
|
+
readonly evidenceIds: readonly string[];
|
|
88
|
+
readonly proofIds: readonly string[];
|
|
89
|
+
readonly sources: readonly {
|
|
90
|
+
readonly sourceId?: string;
|
|
91
|
+
readonly importId?: string;
|
|
92
|
+
readonly sourcePath?: string;
|
|
93
|
+
readonly sourceHash?: string;
|
|
94
|
+
readonly baseHash?: string;
|
|
95
|
+
readonly targetHash?: string;
|
|
96
|
+
}[];
|
|
97
|
+
readonly semanticOwnershipKeys: readonly string[];
|
|
98
|
+
readonly conflictKeys: readonly string[];
|
|
99
|
+
readonly sourceMapIds: readonly string[];
|
|
100
|
+
readonly sourceMapMappingIds: readonly string[];
|
|
101
|
+
readonly sourceMapLinkIds: readonly string[];
|
|
102
|
+
readonly readiness: SemanticMergeReadiness;
|
|
103
|
+
readonly admissionStatus: UniversalConversionAdmissionAction;
|
|
104
|
+
readonly metadata: Record<string, unknown>;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface UniversalConversionRoute {
|
|
108
|
+
readonly id: string;
|
|
109
|
+
readonly sourceLanguage: FrontierSourceLanguage | string;
|
|
110
|
+
readonly languageIds: readonly string[];
|
|
111
|
+
readonly target: FrontierCompileTarget | string;
|
|
112
|
+
readonly mode: UniversalConversionRouteMode;
|
|
113
|
+
readonly routeAction: UniversalConversionRouteAction;
|
|
114
|
+
readonly admissionAction: UniversalConversionAdmissionAction;
|
|
115
|
+
readonly priority: UniversalConversionPriority;
|
|
116
|
+
readonly readiness: SemanticMergeReadiness;
|
|
117
|
+
readonly lossClass: string;
|
|
118
|
+
readonly adapter?: string;
|
|
119
|
+
readonly adapterKind?: string;
|
|
120
|
+
readonly sourceProjection?: {
|
|
121
|
+
readonly exactSource: ProjectionSourceProjectionCoverage;
|
|
122
|
+
readonly stubs: ProjectionSourceProjectionCoverage;
|
|
123
|
+
};
|
|
124
|
+
readonly projectionReadiness?: ProjectionReadinessTargetCell;
|
|
125
|
+
readonly evidence: UniversalConversionRouteEvidence;
|
|
126
|
+
readonly missingEvidence: readonly string[];
|
|
127
|
+
readonly blockers: readonly string[];
|
|
128
|
+
readonly review: readonly string[];
|
|
129
|
+
readonly tasks: readonly string[];
|
|
130
|
+
readonly mergeScore: UniversalConversionMergeScore;
|
|
131
|
+
readonly mergeRefs: UniversalConversionRouteMergeRefs;
|
|
132
|
+
readonly autoMergeClaim: false;
|
|
133
|
+
readonly semanticEquivalenceClaim: false;
|
|
134
|
+
readonly metadata: Record<string, unknown>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface UniversalConversionPlan {
|
|
138
|
+
readonly kind: 'frontier.lang.universalConversionPlan';
|
|
139
|
+
readonly version: 1;
|
|
140
|
+
readonly id: string;
|
|
141
|
+
readonly generatedAt: number;
|
|
142
|
+
readonly routes: readonly UniversalConversionRoute[];
|
|
143
|
+
readonly summary: {
|
|
144
|
+
readonly routes: number;
|
|
145
|
+
readonly byMode: Readonly<Record<UniversalConversionRouteMode, number>>;
|
|
146
|
+
readonly byReadiness: Readonly<Record<SemanticMergeReadiness, number>>;
|
|
147
|
+
readonly byAdmissionAction: Readonly<Record<UniversalConversionAdmissionAction, number>>;
|
|
148
|
+
readonly readyRoutes: number;
|
|
149
|
+
readonly reviewRoutes: number;
|
|
150
|
+
readonly blockedRoutes: number;
|
|
151
|
+
readonly preserveSourceRoutes: number;
|
|
152
|
+
readonly targetAdapterRoutes: number;
|
|
153
|
+
readonly stubOnlyRoutes: number;
|
|
154
|
+
readonly semanticIndexOnlyRoutes: number;
|
|
155
|
+
readonly missingEvidence: number;
|
|
156
|
+
readonly blockers: number;
|
|
157
|
+
readonly reviewReasons: number;
|
|
158
|
+
readonly autoMergeClaims: 0;
|
|
159
|
+
readonly semanticEquivalenceClaims: 0;
|
|
160
|
+
};
|
|
161
|
+
readonly matrices: {
|
|
162
|
+
readonly universalCapability: UniversalCapabilityMatrix;
|
|
163
|
+
readonly projectionReadiness?: UniversalCapabilityMatrix['matrices']['projectionReadiness'];
|
|
164
|
+
readonly projectionTargets?: UniversalCapabilityMatrix['matrices']['projectionTargets'];
|
|
165
|
+
};
|
|
166
|
+
readonly metadata: {
|
|
167
|
+
readonly compileTargets: readonly (FrontierCompileTarget | string)[];
|
|
168
|
+
readonly requiredFeatures: readonly NativeParserFeatureCategory[];
|
|
169
|
+
readonly autoMergeClaim: false;
|
|
170
|
+
readonly semanticEquivalenceClaim: false;
|
|
171
|
+
readonly note: string;
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface UniversalConversionPlanOptions extends UniversalCapabilityMatrixOptions {
|
|
176
|
+
readonly id?: string;
|
|
177
|
+
readonly universalCapabilityMatrix?: UniversalCapabilityMatrix;
|
|
178
|
+
readonly evidence?: readonly EvidenceRecord[];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface UniversalConversionPlanQuery {
|
|
182
|
+
readonly sourceLanguage?: FrontierSourceLanguage | string;
|
|
183
|
+
readonly language?: FrontierSourceLanguage | string;
|
|
184
|
+
readonly target?: FrontierCompileTarget | string;
|
|
185
|
+
readonly mode?: UniversalConversionRouteMode;
|
|
186
|
+
readonly readiness?: SemanticMergeReadiness;
|
|
187
|
+
readonly admissionAction?: UniversalConversionAdmissionAction;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface UniversalConversionPlanQueryResult {
|
|
191
|
+
readonly kind: 'frontier.lang.universalConversionPlanQuery';
|
|
192
|
+
readonly version: 1;
|
|
193
|
+
readonly found: boolean;
|
|
194
|
+
readonly routes: readonly UniversalConversionRoute[];
|
|
195
|
+
readonly bestRoute?: UniversalConversionRoute;
|
|
196
|
+
readonly reasons: readonly string[];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export declare function createUniversalConversionPlan(options?: UniversalConversionPlanOptions): UniversalConversionPlan;
|
|
200
|
+
export declare function queryUniversalConversionPlan(
|
|
201
|
+
planOrOptions?: UniversalConversionPlan | UniversalConversionPlanOptions,
|
|
202
|
+
query?: UniversalConversionPlanQuery
|
|
203
|
+
): UniversalConversionPlanQueryResult;
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export * from './declarations/native-import-coverage.js';
|
|
|
6
6
|
export * from './declarations/projection-coverage.js';
|
|
7
7
|
export * from './declarations/projection-readiness.js';
|
|
8
8
|
export * from './declarations/universal-capability.js';
|
|
9
|
+
export * from './declarations/universal-conversion-artifacts.js';
|
|
10
|
+
export * from './declarations/universal-conversion-plan.js';
|
|
9
11
|
export * from './declarations/universal-dialects.js';
|
|
10
12
|
export * from './declarations/language-adapter-package-contracts.js';
|
|
11
13
|
export * from './declarations/native-import-contracts.js';
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,8 @@ export { createTreeSitterNativeImporterAdapter } from './internal/index-impl/cre
|
|
|
29
29
|
export { createTypeScriptCompilerNativeImporterAdapter } from './internal/index-impl/createTypeScriptCompilerNativeImporterAdapter.js';
|
|
30
30
|
export { createUniversalAstFromDocument } from './internal/index-impl/createUniversalAstFromDocument.js';
|
|
31
31
|
export { createUniversalCapabilityMatrix } from './internal/index-impl/createUniversalCapabilityMatrix.js';
|
|
32
|
+
export { createUniversalConversionArtifacts, queryUniversalConversionArtifacts } from './universal-conversion-artifacts.js';
|
|
33
|
+
export { createUniversalConversionPlan } from './internal/index-impl/createUniversalConversionPlan.js';
|
|
32
34
|
export { attachUniversalDialectRegistry, createUniversalDialectRecord, createUniversalDialectRegistry, createUniversalExternRecord, summarizeUniversalDialectRegistry, UniversalDialectConstructKinds, UniversalDialectProjectionDispositions } from './universal-dialect-registry.js';
|
|
33
35
|
export { diffNativeSourceImports } from './internal/index-impl/diffNativeSourceImports.js';
|
|
34
36
|
export { diffNativeSources } from './internal/index-impl/diffNativeSources.js';
|
|
@@ -62,6 +64,7 @@ export { queryNativeParserFeatureMatrix } from './internal/index-impl/queryNativ
|
|
|
62
64
|
export { queryProjectionReadinessMatrix } from './internal/index-impl/queryProjectionReadinessMatrix.js';
|
|
63
65
|
export { createSemanticPatchBundleRecord, querySemanticPatchBundleRecords, SemanticPatchBundleAdmissionStatuses } from './internal/index-impl/semanticPatchBundleRecords.js';
|
|
64
66
|
export { querySemanticMergeConflictClasses, SemanticMergeConflictClasses, semanticMergeConflictRiskScore, sortSemanticMergeCandidatesByConflictRisk, summarizeSemanticMergeConflicts } from './internal/index-impl/semanticMergeConflicts.js';
|
|
67
|
+
export { queryUniversalConversionPlan } from './internal/index-impl/queryUniversalConversionPlan.js';
|
|
65
68
|
export { createSemanticHistoryRecord, querySemanticHistoryRecordOverlaps, SemanticHistoryAdmissionStatuses, SemanticHistoryConflictReasons, SemanticHistoryOverlapKinds, SemanticHistoryReviewerStatuses, semanticHistoryRecordsConflict, semanticHistoryRecordsOverlap } from './internal/index-impl/semanticHistoryRecords.js';
|
|
66
69
|
export { readSemanticSliceJson } from './internal/index-impl/readSemanticSliceJson.js';
|
|
67
70
|
export { readUniversalAstJson } from './internal/index-impl/readUniversalAstJson.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{createUniversalConversionPlan as createUniversalConversionPlanImpl}from'../../universal-conversion-plan.js';
|
|
2
|
+
import{coverageMatrixContext}from'./coverageMatrixContext.js';
|
|
3
|
+
export function createUniversalConversionPlan(input = {}) {
|
|
4
|
+
return createUniversalConversionPlanImpl(input, coverageMatrixContext());
|
|
5
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{queryUniversalConversionPlan as queryUniversalConversionPlanImpl}from'../../universal-conversion-plan.js';
|
|
2
|
+
import{coverageMatrixContext}from'./coverageMatrixContext.js';
|
|
3
|
+
export function queryUniversalConversionPlan(planOrInput = {}, query = {}) {
|
|
4
|
+
return queryUniversalConversionPlanImpl(planOrInput, query, coverageMatrixContext());
|
|
5
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { uniqueStrings } from './native-import-utils.js';
|
|
2
|
+
|
|
3
|
+
export function queryUniversalConversionArtifacts(records, query = {}) {
|
|
4
|
+
return artifactRecords(records)
|
|
5
|
+
.filter((record) => matchesArtifact(record, query))
|
|
6
|
+
.sort((left, right) => Number(right.mergeScore?.sortKey ?? 0) - Number(left.mergeScore?.sortKey ?? 0)
|
|
7
|
+
|| String(left.routeId).localeCompare(String(right.routeId)));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function artifactIndex(routeArtifacts) {
|
|
11
|
+
return {
|
|
12
|
+
routeIds: uniqueStrings(routeArtifacts.map((artifact) => artifact.routeId)),
|
|
13
|
+
historyIds: uniqueStrings(routeArtifacts.map((artifact) => artifact.history.id)),
|
|
14
|
+
patchBundleIds: uniqueStrings(routeArtifacts.map((artifact) => artifact.patchBundle.id)),
|
|
15
|
+
languages: uniqueStrings(routeArtifacts.map((artifact) => artifact.sourceLanguage)),
|
|
16
|
+
targets: uniqueStrings(routeArtifacts.map((artifact) => artifact.target)),
|
|
17
|
+
modes: uniqueStrings(routeArtifacts.map((artifact) => artifact.mode)),
|
|
18
|
+
readinesses: uniqueStrings(routeArtifacts.map((artifact) => artifact.readiness)),
|
|
19
|
+
admissionStatuses: uniqueStrings(routeArtifacts.map((artifact) => artifact.admissionStatus)),
|
|
20
|
+
sourcePaths: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.index.sourcePaths)),
|
|
21
|
+
sourceHashes: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.index.sourceHashes)),
|
|
22
|
+
ownershipKeys: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.index.ownershipKeys)),
|
|
23
|
+
conflictKeys: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.index.conflictKeys)),
|
|
24
|
+
evidenceIds: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.evidenceIds)),
|
|
25
|
+
proofIds: uniqueStrings(routeArtifacts.flatMap((artifact) => artifact.history.proofIds))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function artifactRecords(records) {
|
|
30
|
+
if (Array.isArray(records)) return records.flatMap(artifactRecords);
|
|
31
|
+
if (records?.kind === 'frontier.lang.universalConversionArtifacts') return records.routeArtifacts ?? [];
|
|
32
|
+
if (records?.kind === 'frontier.lang.universalConversionRouteArtifact') return [records];
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function matchesArtifact(record, query) {
|
|
37
|
+
return match(query.routeId, [record.routeId])
|
|
38
|
+
&& match(query.historyId, [record.history.id])
|
|
39
|
+
&& match(query.patchBundleId, [record.patchBundle.id])
|
|
40
|
+
&& match(query.sourceLanguage, [record.sourceLanguage])
|
|
41
|
+
&& match(query.target, [record.target])
|
|
42
|
+
&& match(query.mode, [record.mode])
|
|
43
|
+
&& match(query.routeAction, [record.routeAction])
|
|
44
|
+
&& match(query.priority, [record.priority])
|
|
45
|
+
&& match(query.readiness, [record.readiness])
|
|
46
|
+
&& match(query.admissionStatus, [record.admissionStatus])
|
|
47
|
+
&& match(query.sourcePath, record.history.index.sourcePaths)
|
|
48
|
+
&& match(query.sourceHash, record.history.index.sourceHashes)
|
|
49
|
+
&& match(query.ownershipKey, record.history.index.ownershipKeys)
|
|
50
|
+
&& match(query.conflictKey, record.history.index.conflictKeys)
|
|
51
|
+
&& match(query.evidenceId, record.history.evidenceIds)
|
|
52
|
+
&& match(query.proofId, record.history.proofIds);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function match(filter, values) {
|
|
56
|
+
const filters = Array.isArray(filter) ? filter : filter === undefined ? [] : [filter];
|
|
57
|
+
if (filters.length === 0) return true;
|
|
58
|
+
const valueSet = new Set((values ?? []).map(String));
|
|
59
|
+
return filters.some((item) => valueSet.has(String(item)));
|
|
60
|
+
}
|