@shapeshift-labs/frontier-lang-compiler 0.2.103 → 0.2.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +14 -0
  2. package/dist/declarations/bidirectional-target-change-source-edit.d.ts +30 -0
  3. package/dist/declarations/bidirectional-target-change.d.ts +10 -0
  4. package/dist/declarations/js-ts-safe-member-merge.d.ts +86 -0
  5. package/dist/declarations/js-ts-safe-merge.d.ts +131 -0
  6. package/dist/declarations/js-ts-semantic-conflict-sidecars.d.ts +235 -0
  7. package/dist/declarations/js-ts-semantic-merge-contracts.d.ts +287 -0
  8. package/dist/declarations/js-ts-semantic-merge.d.ts +4 -0
  9. package/dist/declarations/native-import-losses.d.ts +3 -0
  10. package/dist/declarations/semantic-edit-replay-diagnostics.d.ts +12 -0
  11. package/dist/declarations/semantic-edit-script.d.ts +7 -4
  12. package/dist/declarations/semantic-patch-bundle-index.d.ts +45 -0
  13. package/dist/declarations/semantic-patch-bundle.d.ts +6 -4
  14. package/dist/declarations/semantic-sidecar-example.d.ts +18 -0
  15. package/dist/declarations/semantic-transform-identity.d.ts +3 -0
  16. package/dist/declarations/source-preservation.d.ts +72 -0
  17. package/dist/declarations/universal-capability.d.ts +4 -0
  18. package/dist/declarations/universal-conversion-artifacts.d.ts +61 -1
  19. package/dist/declarations/universal-conversion-compact-counts.d.ts +51 -0
  20. package/dist/declarations/universal-conversion-plan.d.ts +6 -1
  21. package/dist/declarations/universal-representation-coverage.d.ts +90 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.js +3 -0
  24. package/dist/internal/index-impl/bidirectionalExactSourceBackprojection.js +199 -0
  25. package/dist/internal/index-impl/bidirectionalSameLanguageSourceProjection.js +112 -0
  26. package/dist/internal/index-impl/bidirectionalSourceEditProjection.js +319 -0
  27. package/dist/internal/index-impl/bidirectionalSourceEditProjectionArtifacts.js +67 -0
  28. package/dist/internal/index-impl/bidirectionalTargetChangeRecordInternals.js +17 -5
  29. package/dist/internal/index-impl/bidirectionalTargetRoundtripEvidence.js +58 -20
  30. package/dist/internal/index-impl/createBidirectionalTargetChangeRecord.js +60 -7
  31. package/dist/internal/index-impl/createLightweightNativeImport.js +1 -0
  32. package/dist/internal/index-impl/createNativeSourcePreservation.js +28 -2
  33. package/dist/internal/index-impl/diffNativeSymbols.js +3 -3
  34. package/dist/internal/index-impl/nativeChangeProjectionSourceMapLinks.js +2 -0
  35. package/dist/internal/index-impl/projectSemanticEditScriptToSource.js +43 -8
  36. package/dist/internal/index-impl/replaySemanticEditLineEndings.js +34 -0
  37. package/dist/internal/index-impl/replaySemanticEditProjection.js +39 -19
  38. package/dist/internal/index-impl/semanticEditBundleAdmission.js +7 -3
  39. package/dist/internal/index-impl/semanticEditBundleIndex.js +47 -1
  40. package/dist/internal/index-impl/semanticEditExplicitSourceReplacement.js +40 -0
  41. package/dist/internal/index-impl/semanticEditOperationCoverage.js +33 -3
  42. package/dist/internal/index-impl/semanticEditProjectionRecord.js +29 -0
  43. package/dist/internal/index-impl/semanticEditReplayDiagnostics.js +39 -0
  44. package/dist/internal/index-impl/semanticEditReplaySourceReplacement.js +85 -0
  45. package/dist/internal/index-impl/semanticEditScripts.js +4 -0
  46. package/dist/internal/index-impl/semanticEditSourceRanges.js +27 -0
  47. package/dist/internal/index-impl/semanticIndexFromNativeDeclarations.js +1 -0
  48. package/dist/internal/index-impl/semanticPatchBundleAdmission.js +41 -7
  49. package/dist/internal/index-impl/semanticPatchBundleRecords.js +16 -0
  50. package/dist/internal/index-impl/semanticPatchBundleSourceRecords.js +2 -0
  51. package/dist/internal/index-impl/semanticSidecarQuality.js +111 -0
  52. package/dist/internal/index-impl/semanticSourceEditDedupe.js +69 -9
  53. package/dist/internal/index-impl/semanticTransformIdentityRecords.js +85 -9
  54. package/dist/js-ts-safe-member-merge-result.js +158 -0
  55. package/dist/js-ts-safe-member-merge.js +265 -0
  56. package/dist/js-ts-safe-merge-analyze.js +279 -0
  57. package/dist/js-ts-safe-merge-composed.js +170 -0
  58. package/dist/js-ts-safe-merge-constants.js +50 -0
  59. package/dist/js-ts-safe-merge-context.js +118 -0
  60. package/dist/js-ts-safe-merge-ledger-validation.js +92 -0
  61. package/dist/js-ts-safe-merge-ledger.js +85 -0
  62. package/dist/js-ts-safe-merge-parse-declarations.js +210 -0
  63. package/dist/js-ts-safe-merge-parse-statements.js +155 -0
  64. package/dist/js-ts-safe-merge-plan.js +190 -0
  65. package/dist/js-ts-safe-merge.js +175 -0
  66. package/dist/js-ts-semantic-conflict-sidecar-constants.js +77 -0
  67. package/dist/js-ts-semantic-conflict-sidecar-detectors.js +195 -0
  68. package/dist/js-ts-semantic-conflict-sidecar-normalize.js +203 -0
  69. package/dist/js-ts-semantic-conflict-sidecar-utils.js +190 -0
  70. package/dist/js-ts-semantic-conflict-sidecars.js +81 -0
  71. package/dist/js-ts-semantic-merge-contract-helpers.js +128 -0
  72. package/dist/js-ts-semantic-merge-contracts.js +217 -0
  73. package/dist/js-ts-semantic-merge-member-containers.js +100 -0
  74. package/dist/js-ts-semantic-merge-member-keys.js +142 -0
  75. package/dist/js-ts-semantic-merge-member-segments.js +185 -0
  76. package/dist/js-ts-semantic-merge-member-source.js +82 -0
  77. package/dist/js-ts-semantic-merge-member-utils.js +18 -0
  78. package/dist/js-ts-semantic-merge-parse.js +16 -0
  79. package/dist/js-ts-semantic-merge.js +24 -0
  80. package/dist/lightweight-dependency-effects.js +51 -0
  81. package/dist/lightweight-dependency-language.js +12 -1
  82. package/dist/lightweight-dependency-relations.js +14 -27
  83. package/dist/native-region-scanner-core.js +33 -1
  84. package/dist/native-region-scanner-csharp.js +151 -0
  85. package/dist/native-region-scanner-dart.js +91 -0
  86. package/dist/native-region-scanner-dynamic.js +21 -151
  87. package/dist/native-region-scanner-functional.js +40 -13
  88. package/dist/native-region-scanner-java.js +97 -0
  89. package/dist/native-region-scanner-js-class.js +100 -0
  90. package/dist/native-region-scanner-js-helpers.js +28 -86
  91. package/dist/native-region-scanner-js-imports.js +121 -1
  92. package/dist/native-region-scanner-js-nested.js +96 -8
  93. package/dist/native-region-scanner-js-structure.js +27 -0
  94. package/dist/native-region-scanner-js-types.js +99 -0
  95. package/dist/native-region-scanner-js.js +70 -118
  96. package/dist/native-region-scanner-kotlin.js +94 -0
  97. package/dist/native-region-scanner-main.js +15 -181
  98. package/dist/native-region-scanner-php.js +80 -0
  99. package/dist/native-region-scanner-python.js +62 -0
  100. package/dist/native-region-scanner-ruby.js +72 -0
  101. package/dist/native-region-scanner-scala.js +91 -0
  102. package/dist/native-region-scanner-spans.js +74 -0
  103. package/dist/native-region-scanner-swift.js +155 -0
  104. package/dist/native-region-scanner.js +14 -10
  105. package/dist/native-source-ledger-helpers.js +195 -0
  106. package/dist/native-source-ledger.js +306 -0
  107. package/dist/native-source-preservation-scanner.js +4 -0
  108. package/dist/semantic-import-callsite-regions.js +136 -0
  109. package/dist/semantic-import-effect-regions.js +283 -0
  110. package/dist/semantic-import-regions.js +11 -2
  111. package/dist/semantic-import-sidecar-entry.js +16 -2
  112. package/dist/semantic-import-sidecar-types.d.ts +2 -0
  113. package/dist/semantic-sidecar-example.js +68 -0
  114. package/dist/universal-capability-matrix.js +23 -0
  115. package/dist/universal-conversion-artifact-query.js +79 -2
  116. package/dist/universal-conversion-artifact-semantic-edit.js +103 -0
  117. package/dist/universal-conversion-artifact-summary.js +33 -1
  118. package/dist/universal-conversion-artifacts.js +13 -48
  119. package/dist/universal-conversion-plan-scoring.js +21 -1
  120. package/dist/universal-conversion-plan-summary.js +30 -0
  121. package/dist/universal-conversion-plan.js +25 -9
  122. package/dist/universal-conversion-route-metadata.js +96 -0
  123. package/dist/universal-conversion-route-operations.js +7 -0
  124. package/dist/universal-representation-coverage.js +193 -0
  125. package/package.json +1 -1
package/README.md CHANGED
@@ -162,6 +162,20 @@ const overlaps = querySemanticMergeCandidateAdmissionOverlaps(queue);
162
162
 
163
163
  These candidate records are compact merge-admission evidence. They preserve changed semantic regions, source/base/target hashes, conflict keys, evidence IDs, projection risk, readiness, and overlap pairs so swarm coordinators can sort likely-ready candidates first and detect conflicting regions before patch review.
164
164
 
165
+ The JS/TS semantic merge smoke corpus lives at
166
+ `test/fixtures/js-ts-semantic-merge/corpus.json` and is exercised by
167
+ `test/smoke/js-ts-fixture-corpus.mjs` plus
168
+ `test/smoke/js-ts-semantic-merge-oracles.mjs`. The fixtures are deliberately
169
+ small and dependency-free. They cover accepted projection/replay cases, exact
170
+ source preservation, generated/source-map boundaries, safe import/declaration
171
+ merges, safe unordered member merges, composed top-level/member safe merges,
172
+ and rejected unsafe cases such as stale
173
+ ledger spans, import specifier reordering, computed keys, duplicate exported
174
+ names, duplicate object members, decorators, overload anchors, and same-anchor
175
+ edit conflicts. Fixture failures include the fixture id and the actual
176
+ reason-code or gate values so distributed swarm evidence can point at a stable
177
+ case instead of an agent transcript.
178
+
165
179
  High-risk native features also have explicit evidence policies. These policies are advisory in this package: they tell a swarm or admission queue what evidence is missing without silently changing the existing readiness classification.
166
180
 
167
181
  ```js
@@ -0,0 +1,30 @@
1
+ import type { SemanticMergeReadiness } from '@shapeshift-labs/frontier-lang-kernel';
2
+ import type { BidirectionalTargetPortabilityAction } from './bidirectional-target-change-evidence.js';
3
+
4
+ export interface BidirectionalTargetChangeSourceEditProjectionHint {
5
+ readonly schema: 'frontier.lang.bidirectionalTargetChangeSourceEditProjectionHint.v1';
6
+ readonly version: 1;
7
+ readonly id: string;
8
+ readonly scriptId: string;
9
+ readonly hash: string;
10
+ readonly status: 'portable' | string;
11
+ readonly action: BidirectionalTargetPortabilityAction;
12
+ readonly readiness: SemanticMergeReadiness | string;
13
+ readonly sourcePath?: string;
14
+ readonly sourceHash?: string;
15
+ readonly targetPath?: string;
16
+ readonly targetHash?: string;
17
+ readonly targetChangeSetId: string;
18
+ readonly targetPatchId?: string;
19
+ readonly targetMergeCandidateId?: string;
20
+ readonly sourceAnchorMatchIds: readonly string[];
21
+ readonly sourceAnchorKeys: readonly string[];
22
+ readonly sourceMapLinkIds: readonly string[];
23
+ readonly sourceMapIds: readonly string[];
24
+ readonly sourceMapMappingIds: readonly string[];
25
+ readonly operationIds: readonly string[];
26
+ readonly reviewRequired: true;
27
+ readonly autoMergeClaim: false;
28
+ readonly semanticEquivalenceClaim: false;
29
+ readonly reasonCodes: readonly string[];
30
+ }
@@ -8,7 +8,9 @@ import type { ImportNativeSourceOptions, NativeSourceImportResult } from './impo
8
8
  import type { NativeSourceChangeSet } from './native-diff.js';
9
9
  import type { SemanticHistoryRecord } from './semantic-history.js';
10
10
  import type { SemanticLineageEvent } from './semantic-lineage.js';
11
+ import type { SemanticEditScript } from './semantic-edit-script.js';
11
12
  import type { SemanticPatchBundleRecord } from './semantic-patch-bundle.js';
13
+ import type { BidirectionalTargetChangeSourceEditProjectionHint } from './bidirectional-target-change-source-edit.js';
12
14
  import type {
13
15
  BidirectionalTargetChangeRoundtripEvidence,
14
16
  BidirectionalTargetChangeSemanticMergeAdmissionEvidence,
@@ -19,6 +21,7 @@ import type {
19
21
  } from './bidirectional-target-change-evidence.js';
20
22
 
21
23
  export type * from './bidirectional-target-change-evidence.js';
24
+ export type * from './bidirectional-target-change-source-edit.js';
22
25
 
23
26
  export interface CreateBidirectionalTargetChangeRecordOptions {
24
27
  readonly id?: string;
@@ -73,6 +76,8 @@ export interface BidirectionalTargetChangeRecord {
73
76
  readonly sourceAnchorMatches: readonly BidirectionalTargetChangeSourceAnchorMatch[];
74
77
  readonly targetPortability: BidirectionalTargetPortabilityRecord;
75
78
  readonly roundtripEvidence: BidirectionalTargetChangeRoundtripEvidence;
79
+ readonly sourceEditScript?: SemanticEditScript;
80
+ readonly sourceProjectionHint?: BidirectionalTargetChangeSourceEditProjectionHint;
76
81
  readonly sourcePatchBundle: SemanticPatchBundleRecord;
77
82
  readonly historyRecord: SemanticHistoryRecord;
78
83
  readonly evidence: readonly EvidenceRecord[];
@@ -88,6 +93,8 @@ export interface BidirectionalTargetChangeRecord {
88
93
  readonly sourceMapBackedMatches: number;
89
94
  readonly sourceMapLinks: number;
90
95
  readonly sourceMapMappingIds: number;
96
+ readonly sourceEditScripts: number;
97
+ readonly sourceProjectionHints: number;
91
98
  readonly lineageResolutions: number;
92
99
  readonly targetPortabilityStatus: BidirectionalTargetPortabilityStatus;
93
100
  readonly portableTargetRegions: number;
@@ -101,6 +108,9 @@ export interface BidirectionalTargetChangeRecord {
101
108
  readonly targetPortability?: BidirectionalTargetPortabilityRecord;
102
109
  readonly roundtripEvidenceId?: string;
103
110
  readonly semanticMergeAdmission?: BidirectionalTargetChangeSemanticMergeAdmissionEvidence;
111
+ readonly sourceEditScriptId?: string;
112
+ readonly sourceProjectionHintId?: string;
113
+ readonly sourceProjectionHint?: BidirectionalTargetChangeSourceEditProjectionHint;
104
114
  readonly [key: string]: unknown;
105
115
  };
106
116
  }
@@ -0,0 +1,86 @@
1
+ export type JsTsSafeMemberMergeRegionKind = 'interface' | 'type' | 'class' | 'object';
2
+ export type JsTsSafeMemberMergeOrder = 'non-semantic' | string;
3
+ export type JsTsSafeMemberMergeStatus = 'merged' | 'rejected';
4
+
5
+ export interface JsTsSafeMemberMergePolicyRegion {
6
+ readonly kind: JsTsSafeMemberMergeRegionKind | string;
7
+ readonly name: string;
8
+ readonly regionKind?: string;
9
+ readonly order?: JsTsSafeMemberMergeOrder;
10
+ readonly ordering?: JsTsSafeMemberMergeOrder;
11
+ readonly nonSemanticOrder?: boolean;
12
+ readonly orderSensitive?: boolean;
13
+ }
14
+
15
+ export interface JsTsSafeMemberMergePolicy {
16
+ readonly unorderedRegions?: readonly JsTsSafeMemberMergePolicyRegion[];
17
+ readonly unorderedMemberRegions?: readonly JsTsSafeMemberMergePolicyRegion[];
18
+ readonly safeList?: readonly JsTsSafeMemberMergePolicyRegion[];
19
+ readonly safeMembers?: readonly JsTsSafeMemberMergePolicyRegion[];
20
+ }
21
+
22
+ export interface JsTsSafeMemberMergeInput {
23
+ readonly baseSourceText: string;
24
+ readonly workerSourceText: string;
25
+ readonly headSourceText: string;
26
+ readonly policy?: JsTsSafeMemberMergePolicy | readonly JsTsSafeMemberMergePolicyRegion[];
27
+ readonly mergePolicy?: JsTsSafeMemberMergePolicy | readonly JsTsSafeMemberMergePolicyRegion[];
28
+ readonly unorderedRegions?: readonly JsTsSafeMemberMergePolicyRegion[];
29
+ readonly allowNonPolicySourceChanges?: boolean;
30
+ }
31
+
32
+ export interface JsTsSafeMemberMergeConflict {
33
+ readonly code: string;
34
+ readonly gateId: string;
35
+ readonly message: string;
36
+ readonly side?: 'base' | 'worker' | 'head' | string;
37
+ readonly sourcePath?: string;
38
+ readonly details?: Record<string, unknown>;
39
+ }
40
+
41
+ export interface JsTsSafeMemberMergeGate {
42
+ readonly id: string;
43
+ readonly status: 'passed' | 'blocked' | 'skipped' | string;
44
+ readonly reasonCodes: readonly string[];
45
+ }
46
+
47
+ export interface JsTsSafeMemberMergeAdmission {
48
+ readonly status: 'auto-merge-candidate' | 'blocked' | string;
49
+ readonly action: 'apply' | 'human-review' | string;
50
+ readonly reviewRequired: boolean;
51
+ readonly autoApplyCandidate: boolean;
52
+ readonly reasonCodes: readonly string[];
53
+ }
54
+
55
+ export interface JsTsSafeMemberMergedRegion {
56
+ readonly kind: JsTsSafeMemberMergeRegionKind;
57
+ readonly name: string;
58
+ readonly regionKind?: string;
59
+ readonly workerAddedKeys: readonly string[];
60
+ readonly headAddedKeys: readonly string[];
61
+ }
62
+
63
+ export interface JsTsSafeMemberMergeResult {
64
+ readonly kind: 'frontier.lang.jsTsSafeMemberMerge';
65
+ readonly version: 1;
66
+ readonly status: JsTsSafeMemberMergeStatus;
67
+ readonly sourceText?: string;
68
+ readonly reasonCodes: readonly string[];
69
+ readonly conflicts: readonly JsTsSafeMemberMergeConflict[];
70
+ readonly gates: readonly JsTsSafeMemberMergeGate[];
71
+ readonly admission: JsTsSafeMemberMergeAdmission;
72
+ readonly mergedRegions: readonly JsTsSafeMemberMergedRegion[];
73
+ readonly summary: {
74
+ readonly regions: number;
75
+ readonly workerAdditions: number;
76
+ readonly headAdditions: number;
77
+ readonly appliedAdditions: number;
78
+ readonly conflicts: number;
79
+ };
80
+ readonly metadata: {
81
+ readonly explicitPolicy: boolean;
82
+ };
83
+ }
84
+
85
+ export declare function mergeJsTsSafeMemberAdditions(input?: JsTsSafeMemberMergeInput): JsTsSafeMemberMergeResult;
86
+ export declare function safeMergeJsTsMembers(input?: JsTsSafeMemberMergeInput): JsTsSafeMemberMergeResult;
@@ -0,0 +1,131 @@
1
+ import type { FrontierSourceLanguage } from '@shapeshift-labs/frontier-lang-kernel';
2
+ import type {
3
+ JsTsSafeMemberMergePolicy,
4
+ JsTsSafeMemberMergePolicyRegion
5
+ } from './js-ts-safe-member-merge.js';
6
+
7
+ export type JsTsSafeMergeStatus = 'merged' | 'blocked';
8
+ export type JsTsSafeMergeGateStatus = 'passed' | 'blocked' | 'skipped';
9
+
10
+ export declare const JsTsSafeMergeStatuses: Readonly<{
11
+ readonly merged: 'merged';
12
+ readonly blocked: 'blocked';
13
+ }>;
14
+
15
+ export declare const JsTsSafeMergeGateIds: Readonly<{
16
+ readonly parseLedger: 'parse-ledger';
17
+ readonly preserveBaseOrder: 'preserve-base-order';
18
+ readonly stableExistingDeclarations: 'stable-existing-declarations';
19
+ readonly independentImportSpecifiers: 'independent-import-specifiers';
20
+ readonly independentTopLevelDeclarations: 'independent-top-level-declarations';
21
+ readonly uniqueNames: 'unique-names';
22
+ readonly resolvedInsertionAnchors: 'resolved-insertion-anchors';
23
+ }>;
24
+
25
+ export declare const JsTsSafeMergeConflictCodes: Readonly<{
26
+ readonly invalidInput: 'invalid-input';
27
+ readonly parserLedgerLoss: 'parser-ledger-loss';
28
+ readonly malformedSyntax: 'malformed-syntax';
29
+ readonly sideEffectImportReorder: 'side-effect-import-reorder';
30
+ readonly topLevelOrderChanged: 'top-level-order-changed';
31
+ readonly changedExistingDeclaration: 'changed-existing-declaration';
32
+ readonly typeAliasConflict: 'type-alias-conflict';
33
+ readonly importShapeChanged: 'import-shape-changed';
34
+ readonly importSpecifierRemoved: 'import-specifier-removed';
35
+ readonly importSpecifierReordered: 'import-specifier-reordered';
36
+ readonly importFormattingChanged: 'import-formatting-changed';
37
+ readonly newImportDeclaration: 'new-import-declaration';
38
+ readonly duplicateName: 'duplicate-name';
39
+ readonly computedKey: 'computed-key';
40
+ readonly unsupportedDecorator: 'unsupported-decorator-merge-anchor';
41
+ readonly unsupportedOverload: 'unsupported-overload-merge-anchor';
42
+ readonly staleSourceHash: 'stale-source-hash';
43
+ readonly missingSourceLedgerSpan: 'missing-source-ledger-span';
44
+ readonly ambiguousInsertionPoint: 'ambiguous-insertion-point';
45
+ readonly insertionAnchorMissing: 'insertion-anchor-missing';
46
+ }>;
47
+
48
+ export interface JsTsSafeMergeInput {
49
+ readonly id?: string;
50
+ readonly language?: FrontierSourceLanguage | string;
51
+ readonly sourcePath?: string;
52
+ readonly baseSourceText: string;
53
+ readonly workerSourceText: string;
54
+ readonly headSourceText: string;
55
+ readonly workerChangeSetId?: string;
56
+ readonly headChangeSetId?: string;
57
+ readonly baseHash?: string;
58
+ readonly workerHash?: string;
59
+ readonly headHash?: string;
60
+ readonly expectedSourceHash?: string;
61
+ readonly currentSourceHash?: string;
62
+ readonly expectedBaseHash?: string;
63
+ readonly expectedWorkerHash?: string;
64
+ readonly expectedHeadHash?: string;
65
+ readonly requireSourceLedgerSpans?: boolean;
66
+ readonly sourceLedgerSide?: 'base' | 'worker' | 'head' | string;
67
+ readonly sourceLedger?: unknown;
68
+ readonly sourceLedgers?: Record<string, unknown>;
69
+ readonly baseSourceLedger?: unknown;
70
+ readonly workerSourceLedger?: unknown;
71
+ readonly headSourceLedger?: unknown;
72
+ readonly policy?: JsTsSafeMemberMergePolicy | readonly JsTsSafeMemberMergePolicyRegion[];
73
+ readonly mergePolicy?: JsTsSafeMemberMergePolicy | readonly JsTsSafeMemberMergePolicyRegion[];
74
+ readonly unorderedRegions?: readonly JsTsSafeMemberMergePolicyRegion[];
75
+ }
76
+
77
+ export interface JsTsSafeMergeConflict {
78
+ readonly code: string;
79
+ readonly gateId: string;
80
+ readonly message: string;
81
+ readonly side?: 'base' | 'worker' | 'head' | 'merged' | string;
82
+ readonly sourcePath?: string;
83
+ readonly details?: Record<string, unknown>;
84
+ }
85
+
86
+ export interface JsTsSafeMergeGate {
87
+ readonly id: string;
88
+ readonly status: JsTsSafeMergeGateStatus;
89
+ readonly reasonCodes: readonly string[];
90
+ }
91
+
92
+ export interface JsTsSafeMergeAdmission {
93
+ readonly status: 'auto-merge-candidate' | 'blocked' | string;
94
+ readonly action: 'apply' | 'human-review' | string;
95
+ readonly reviewRequired: boolean;
96
+ readonly autoApplyCandidate: boolean;
97
+ readonly autoMergeClaim: false;
98
+ readonly semanticEquivalenceClaim: false;
99
+ readonly reasonCodes: readonly string[];
100
+ }
101
+
102
+ export interface JsTsSafeMergeSummary {
103
+ readonly importSpecifierAdditions: number;
104
+ readonly topLevelDeclarationAdditions: number;
105
+ readonly changedExistingDeclarations: number;
106
+ readonly conflicts: number;
107
+ readonly gatesPassed: number;
108
+ readonly memberRegions?: number;
109
+ readonly memberAdditions?: number;
110
+ readonly composedPhases?: number;
111
+ }
112
+
113
+ export interface JsTsSafeMergeResult {
114
+ readonly kind: 'frontier.lang.jsTsSafeMerge';
115
+ readonly version: 1;
116
+ readonly schema: 'frontier.lang.jsTsSafeMerge.v1';
117
+ readonly id: string;
118
+ readonly status: JsTsSafeMergeStatus;
119
+ readonly sourcePath?: string;
120
+ readonly language?: FrontierSourceLanguage | string;
121
+ readonly mergedSourceText?: string;
122
+ readonly outputSourceText?: string;
123
+ readonly conflicts: readonly JsTsSafeMergeConflict[];
124
+ readonly gates: readonly JsTsSafeMergeGate[];
125
+ readonly admission: JsTsSafeMergeAdmission;
126
+ readonly summary: JsTsSafeMergeSummary;
127
+ readonly metadata?: Record<string, unknown>;
128
+ }
129
+
130
+ export declare function safeMergeJsTsImportsAndDeclarations(input: JsTsSafeMergeInput): JsTsSafeMergeResult;
131
+ export declare function safeMergeJsTsSource(input: JsTsSafeMergeInput): JsTsSafeMergeResult;
@@ -0,0 +1,235 @@
1
+ import type {
2
+ FrontierSourceLanguage,
3
+ SemanticMergeReadiness,
4
+ SourceSpan
5
+ } from '@shapeshift-labs/frontier-lang-kernel';
6
+
7
+ export type JsTsSemanticConflictSidecarClass =
8
+ | 'same-region'
9
+ | 'delete-modify'
10
+ | 'duplicate-export'
11
+ | 'duplicate-member'
12
+ | 'ordered-list-conflict'
13
+ | 'parser-ledger-loss'
14
+ | 'stale-source-hash'
15
+ | 'unsupported-syntax';
16
+
17
+ export type JsTsSemanticConflictSidecarSeverity = 'info' | 'warning' | 'error';
18
+ export type JsTsSemanticConflictSidecarRisk = 'low' | 'medium' | 'high';
19
+
20
+ export interface JsTsSemanticConflictAffected {
21
+ readonly sourcePaths: readonly string[];
22
+ readonly spans: readonly SourceSpan[];
23
+ readonly keys: readonly string[];
24
+ readonly regionKeys: readonly string[];
25
+ readonly symbolIds: readonly string[];
26
+ readonly symbolNames: readonly string[];
27
+ readonly memberKeys: readonly string[];
28
+ readonly exportNames: readonly string[];
29
+ readonly orderedListKeys: readonly string[];
30
+ readonly sourceHashes: readonly string[];
31
+ }
32
+
33
+ export interface JsTsSemanticConflictExplanation {
34
+ readonly class: JsTsSemanticConflictSidecarClass;
35
+ readonly severity: JsTsSemanticConflictSidecarSeverity;
36
+ readonly risk: JsTsSemanticConflictSidecarRisk;
37
+ readonly affected: JsTsSemanticConflictAffected;
38
+ readonly reasonCodes: readonly string[];
39
+ readonly suggestedOutcome: string;
40
+ }
41
+
42
+ export interface JsTsSemanticConflictSidecarRecord {
43
+ readonly kind: 'frontier.lang.jsTsSemanticMergeConflictSidecar';
44
+ readonly version: 1;
45
+ readonly schema: 'frontier.lang.jsTsSemanticMergeConflictSidecar.v1';
46
+ readonly id: string;
47
+ readonly class: JsTsSemanticConflictSidecarClass;
48
+ readonly severity: JsTsSemanticConflictSidecarSeverity;
49
+ readonly risk: JsTsSemanticConflictSidecarRisk;
50
+ readonly readiness: SemanticMergeReadiness;
51
+ readonly affected: JsTsSemanticConflictAffected;
52
+ readonly reasonCodes: readonly string[];
53
+ readonly suggestedOutcome: string;
54
+ readonly explanation: JsTsSemanticConflictExplanation;
55
+ readonly metadata?: Record<string, unknown>;
56
+ }
57
+
58
+ export interface JsTsSemanticConflictSidecarSummary {
59
+ readonly schema: 'frontier.lang.jsTsSemanticConflictSidecarSummary.v1';
60
+ readonly total: number;
61
+ readonly classes: readonly JsTsSemanticConflictSidecarClass[];
62
+ readonly byClass: Readonly<Record<string, number>>;
63
+ readonly bySeverity: Readonly<Record<string, number>>;
64
+ readonly byRisk: Readonly<Record<string, number>>;
65
+ readonly highestSeverity: JsTsSemanticConflictSidecarSeverity;
66
+ readonly highestRisk: JsTsSemanticConflictSidecarRisk;
67
+ readonly readiness: SemanticMergeReadiness;
68
+ readonly affectedSourcePaths: readonly string[];
69
+ readonly affectedKeys: readonly string[];
70
+ readonly reasonCodes: readonly string[];
71
+ readonly suggestedOutcome: string;
72
+ }
73
+
74
+ export interface JsTsSemanticConflictSidecarBundle {
75
+ readonly kind: 'frontier.lang.jsTsSemanticMergeConflictSidecars';
76
+ readonly version: 1;
77
+ readonly schema: 'frontier.lang.jsTsSemanticMergeConflictSidecars.v1';
78
+ readonly id: string;
79
+ readonly language?: FrontierSourceLanguage | string;
80
+ readonly sourcePath?: string;
81
+ readonly expectedSourceHash?: string;
82
+ readonly currentSourceHash?: string;
83
+ readonly conflicts: readonly JsTsSemanticConflictSidecarRecord[];
84
+ readonly sidecars: readonly JsTsSemanticConflictSidecarRecord[];
85
+ readonly summary: JsTsSemanticConflictSidecarSummary;
86
+ readonly admission: {
87
+ readonly status: SemanticMergeReadiness;
88
+ readonly reviewRequired: boolean;
89
+ readonly autoMergeSafe: boolean;
90
+ readonly suggestedOutcome: string;
91
+ readonly reasonCodes: readonly string[];
92
+ };
93
+ readonly metadata?: Record<string, unknown>;
94
+ }
95
+
96
+ export interface JsTsSemanticConflictChangeInput {
97
+ readonly id?: string;
98
+ readonly operationId?: string;
99
+ readonly side?: string;
100
+ readonly author?: string;
101
+ readonly branch?: string;
102
+ readonly source?: string;
103
+ readonly kind?: string;
104
+ readonly changeKind?: string;
105
+ readonly editKind?: string;
106
+ readonly op?: string;
107
+ readonly sourcePath?: string;
108
+ readonly sourceSpan?: SourceSpan;
109
+ readonly span?: SourceSpan;
110
+ readonly range?: SourceSpan;
111
+ readonly key?: string;
112
+ readonly conflictKey?: string;
113
+ readonly regionKey?: string;
114
+ readonly semanticKey?: string;
115
+ readonly anchorKey?: string;
116
+ readonly symbolId?: string;
117
+ readonly symbolName?: string;
118
+ readonly symbolKind?: string;
119
+ readonly memberName?: string;
120
+ readonly exportName?: string;
121
+ readonly containerKey?: string;
122
+ readonly parentKey?: string;
123
+ readonly listKey?: string;
124
+ readonly orderedListKey?: string;
125
+ readonly index?: number | string;
126
+ readonly position?: number | string;
127
+ readonly orderKey?: string;
128
+ readonly beforeKey?: string;
129
+ readonly afterKey?: string;
130
+ readonly sourceHash?: string;
131
+ readonly reasonCode?: string;
132
+ readonly reasonCodes?: readonly string[];
133
+ readonly metadata?: Record<string, unknown>;
134
+ }
135
+
136
+ export interface JsTsSemanticConflictDeclarationInput extends JsTsSemanticConflictChangeInput {
137
+ readonly name?: string;
138
+ readonly exported?: boolean;
139
+ readonly isExport?: boolean;
140
+ readonly member?: boolean;
141
+ readonly isMember?: boolean;
142
+ }
143
+
144
+ export interface JsTsSemanticConflictLossInput {
145
+ readonly id?: string;
146
+ readonly kind?: string;
147
+ readonly code?: string;
148
+ readonly category?: string;
149
+ readonly severity?: JsTsSemanticConflictSidecarSeverity | string;
150
+ readonly status?: string;
151
+ readonly sourcePath?: string;
152
+ readonly sourceSpan?: SourceSpan;
153
+ readonly key?: string;
154
+ readonly message?: string;
155
+ readonly summary?: string;
156
+ readonly reasonCode?: string;
157
+ readonly reasonCodes?: readonly string[];
158
+ readonly metadata?: Record<string, unknown>;
159
+ }
160
+
161
+ export interface JsTsSemanticConflictOrderedListInput {
162
+ readonly id?: string;
163
+ readonly key?: string;
164
+ readonly sourcePath?: string;
165
+ readonly sourceSpan?: SourceSpan;
166
+ readonly changes?: readonly JsTsSemanticConflictChangeInput[];
167
+ readonly operations?: readonly JsTsSemanticConflictChangeInput[];
168
+ readonly edits?: readonly JsTsSemanticConflictChangeInput[];
169
+ }
170
+
171
+ export interface CreateJsTsSemanticConflictSidecarsInput {
172
+ readonly id?: string;
173
+ readonly language?: FrontierSourceLanguage | string;
174
+ readonly sourceLanguage?: FrontierSourceLanguage | string;
175
+ readonly sourcePath?: string;
176
+ readonly path?: string;
177
+ readonly readiness?: SemanticMergeReadiness | string;
178
+ readonly expectedSourceHash?: string;
179
+ readonly currentSourceHash?: string;
180
+ readonly expectedHash?: string;
181
+ readonly actualSourceHash?: string;
182
+ readonly staleSourceHash?: boolean;
183
+ readonly sourceHashAssertions?: {
184
+ readonly expectedSourceHash?: string;
185
+ readonly currentSourceHash?: string;
186
+ };
187
+ readonly sourceHashes?: {
188
+ readonly expectedSourceHash?: string;
189
+ readonly currentSourceHash?: string;
190
+ };
191
+ readonly changes?: readonly JsTsSemanticConflictChangeInput[];
192
+ readonly operations?: readonly JsTsSemanticConflictChangeInput[];
193
+ readonly edits?: readonly JsTsSemanticConflictChangeInput[];
194
+ readonly left?: {
195
+ readonly changes?: readonly JsTsSemanticConflictChangeInput[];
196
+ readonly operations?: readonly JsTsSemanticConflictChangeInput[];
197
+ };
198
+ readonly right?: {
199
+ readonly changes?: readonly JsTsSemanticConflictChangeInput[];
200
+ readonly operations?: readonly JsTsSemanticConflictChangeInput[];
201
+ };
202
+ readonly declarations?: readonly JsTsSemanticConflictDeclarationInput[];
203
+ readonly exports?: readonly JsTsSemanticConflictDeclarationInput[];
204
+ readonly members?: readonly JsTsSemanticConflictDeclarationInput[];
205
+ readonly symbols?: readonly JsTsSemanticConflictDeclarationInput[];
206
+ readonly orderedLists?: readonly JsTsSemanticConflictOrderedListInput[];
207
+ readonly parserLosses?: readonly JsTsSemanticConflictLossInput[];
208
+ readonly ledgerLosses?: readonly JsTsSemanticConflictLossInput[];
209
+ readonly losses?: readonly JsTsSemanticConflictLossInput[];
210
+ readonly diagnostics?: readonly JsTsSemanticConflictLossInput[];
211
+ readonly unsupportedSyntax?: readonly JsTsSemanticConflictLossInput[];
212
+ readonly syntaxUnsupported?: readonly JsTsSemanticConflictLossInput[];
213
+ readonly syntaxLosses?: readonly JsTsSemanticConflictLossInput[];
214
+ readonly conflicts?: readonly Partial<JsTsSemanticConflictSidecarRecord>[];
215
+ readonly sidecars?: readonly Partial<JsTsSemanticConflictSidecarRecord>[];
216
+ readonly conflictSidecars?: readonly Partial<JsTsSemanticConflictSidecarRecord>[];
217
+ readonly metadata?: Record<string, unknown>;
218
+ }
219
+
220
+ export interface CreateJsTsSemanticConflictSidecarsOptions {
221
+ readonly id?: string;
222
+ readonly language?: FrontierSourceLanguage | string;
223
+ readonly sourcePath?: string;
224
+ readonly readiness?: SemanticMergeReadiness | string;
225
+ readonly expectedSourceHash?: string;
226
+ readonly currentSourceHash?: string;
227
+ readonly metadata?: Record<string, unknown>;
228
+ }
229
+
230
+ export declare const JsTsSemanticConflictSidecarClasses: readonly JsTsSemanticConflictSidecarClass[];
231
+ export declare function createJsTsSemanticConflictSidecars(input?: CreateJsTsSemanticConflictSidecarsInput, options?: CreateJsTsSemanticConflictSidecarsOptions): JsTsSemanticConflictSidecarBundle;
232
+ export declare function summarizeJsTsSemanticConflictSidecars(records?: readonly JsTsSemanticConflictSidecarRecord[], context?: {
233
+ readonly sourcePath?: string;
234
+ readonly readiness?: SemanticMergeReadiness | string;
235
+ }): JsTsSemanticConflictSidecarSummary;