@solana-epic/cli 0.1.0-beta.2 → 0.2.0-beta.0

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/dist/api.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { CompatibilityReport, DiffReport } from "@solana-epic/diff-engine";
2
+ import { config } from "@solana-epic/parser";
3
+ export interface UpgradeReport {
4
+ programName: string;
5
+ compatibility: CompatibilityReport;
6
+ report: DiffReport;
7
+ intelligence: any;
8
+ epicConfig: config.ResolvedEpicConfig;
9
+ }
10
+ export declare function runCheck(oldPath: string, newPath: string, epicConfig: config.ResolvedEpicConfig): Promise<UpgradeReport>;
11
+ export { formatMarkdown, formatSarif } from "./formatters.js";
12
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,mBAAmB,EACnB,UAAU,EACX,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,kBAAkB,CAAC;CACvC;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiB9H;AAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/api.js ADDED
@@ -0,0 +1,20 @@
1
+ import * as path from "path";
2
+ import { analyzePrograms, compareAccountLayouts, simulateCompatibility, createUpgradeIntelligence } from "@solana-epic/diff-engine";
3
+ export async function runCheck(oldPath, newPath, epicConfig) {
4
+ const resolvedOldPath = path.resolve(oldPath);
5
+ const resolvedNewPath = path.resolve(newPath);
6
+ const { oldProgram, newProgram } = await analyzePrograms(resolvedOldPath, resolvedNewPath, epicConfig);
7
+ const compatibility = simulateCompatibility(oldProgram, newProgram, epicConfig);
8
+ const report = compareAccountLayouts(oldProgram, newProgram, epicConfig);
9
+ const intelligence = createUpgradeIntelligence(report);
10
+ const programName = compatibility.accounts[0]?.account || report.findings[0]?.account || path.basename(resolvedNewPath);
11
+ return {
12
+ programName,
13
+ compatibility,
14
+ report,
15
+ intelligence,
16
+ epicConfig
17
+ };
18
+ }
19
+ export { formatMarkdown, formatSarif } from "./formatters.js";
20
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAWlC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAe,EAAE,UAAqC;IACpG,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IACvG,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAExH,OAAO;QACL,WAAW;QACX,aAAa;QACb,MAAM;QACN,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { UpgradeReport } from "./api.js";
2
+ export declare function formatMarkdown(result: UpgradeReport, configChanged?: boolean): string;
3
+ export declare function formatSarif(result: UpgradeReport): any;
4
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,GAAE,OAAe,GAAG,MAAM,CAoF5F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAyDtD"}
@@ -0,0 +1,134 @@
1
+ export function formatMarkdown(result, configChanged = false) {
2
+ const { compatibility, report, programName, epicConfig } = result;
3
+ const lines = [];
4
+ const blocked = compatibility.overall === "Blocked";
5
+ const migration = compatibility.overall === "Migration-Required";
6
+ const safe = compatibility.overall === "Compatible";
7
+ if (blocked) {
8
+ lines.push("## 🔴 EPIC Guard: UPGRADE BLOCKED");
9
+ }
10
+ else if (migration) {
11
+ lines.push("## 🟡 EPIC Guard: MIGRATION REQUIRED");
12
+ }
13
+ else {
14
+ lines.push("## 🟢 EPIC Guard: APPROVED");
15
+ }
16
+ lines.push("");
17
+ if (configChanged) {
18
+ lines.push("> [!WARNING]");
19
+ lines.push("> **UPGRADE CONFIGURATION GATE MODIFIED**");
20
+ lines.push("> This Pull Request contains changes to `epic.toml` configuration rules.");
21
+ lines.push("> Signers must audit the modifications below to ensure safety limits are not bypassed.");
22
+ lines.push("");
23
+ }
24
+ lines.push(`### Upgrade Compatibility: \`${programName}\``);
25
+ lines.push("");
26
+ if (compatibility.accounts.length === 0) {
27
+ lines.push("No state accounts found. Upgrade is safe.");
28
+ return lines.join("\n");
29
+ }
30
+ for (const acc of compatibility.accounts) {
31
+ const isBlocked = acc.status === "Blocked";
32
+ const isMigration = acc.status === "Migration-Required";
33
+ const icon = isBlocked ? "🔴" : isMigration ? "🟡" : "🟢";
34
+ lines.push(`#### ${icon} Struct \`${acc.account}\` (${acc.status})`);
35
+ if (acc.reasons && acc.reasons.length > 0) {
36
+ lines.push("");
37
+ lines.push("**Reasoning:**");
38
+ for (const r of acc.reasons) {
39
+ lines.push(`* ${r}`);
40
+ }
41
+ }
42
+ if (acc.upgradePlan && acc.upgradePlan.length > 0) {
43
+ lines.push("");
44
+ lines.push("**Migration Plan:**");
45
+ if (acc.rentDeltaLamports !== null) {
46
+ lines.push(`* Rent Delta: \`${acc.rentDeltaLamports} lamports\` (\`${acc.sizeDelta} bytes\`)`);
47
+ }
48
+ for (const step of acc.upgradePlan) {
49
+ lines.push(`* ${step}`);
50
+ }
51
+ }
52
+ lines.push("");
53
+ }
54
+ // Overrides section
55
+ const appliedOverrides = report.findings.filter(f => f.severity !== (f.kind === "FIELD_ADDED" ? "MAJOR" : "CRITICAL"));
56
+ if (appliedOverrides.length > 0) {
57
+ lines.push("### 🔑 Applied Layout Overrides");
58
+ lines.push("");
59
+ lines.push("| Struct | Finding | Field | Severity Shift | Note |");
60
+ lines.push("| :--- | :--- | :--- | :--- | :--- |");
61
+ for (const o of appliedOverrides) {
62
+ const original = o.kind === "FIELD_ADDED" ? "MAJOR" : "CRITICAL";
63
+ // Find note
64
+ let note = "No note provided.";
65
+ for (const [name, program] of epicConfig.programs.entries()) {
66
+ const match = program.overrides.find(override => override.account.toLowerCase() === o.account.toLowerCase() &&
67
+ override.finding.toUpperCase() === o.kind.toUpperCase());
68
+ if (match) {
69
+ note = match.note;
70
+ break;
71
+ }
72
+ }
73
+ lines.push(`| \`${o.account}\` | \`${o.kind}\` | \`${o.field?.name || "global"}\` | \`${original}\` ──► \`${o.severity}\` | ${note} |`);
74
+ }
75
+ lines.push("");
76
+ }
77
+ return lines.join("\n");
78
+ }
79
+ export function formatSarif(result) {
80
+ // Return a valid SARIF structure based on the findings
81
+ const sarif = {
82
+ version: "2.1.0",
83
+ $schema: "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
84
+ runs: [
85
+ {
86
+ tool: {
87
+ driver: {
88
+ name: "EPIC Upgrade Intelligence",
89
+ version: "0.2.0-beta.0",
90
+ informationUri: "https://github.com/solana-epic/epic",
91
+ rules: []
92
+ }
93
+ },
94
+ results: []
95
+ }
96
+ ]
97
+ };
98
+ const run = sarif.runs[0];
99
+ const rules = new Map();
100
+ for (const finding of result.report.findings) {
101
+ const ruleId = `EPIC-LAYOUT-${finding.kind}`;
102
+ if (!rules.has(ruleId)) {
103
+ rules.set(ruleId, {
104
+ id: ruleId,
105
+ shortDescription: { text: `State Layout Drift: ${finding.kind}` },
106
+ helpUri: "https://github.com/solana-epic/epic"
107
+ });
108
+ }
109
+ // Map severity
110
+ let level = "warning";
111
+ if (finding.severity === "CRITICAL")
112
+ level = "error";
113
+ if (finding.severity === "SAFE")
114
+ level = "note";
115
+ run.results.push({
116
+ ruleId,
117
+ level,
118
+ message: {
119
+ text: `Account \`${finding.account}\` changed: ${finding.kind}. Field: ${finding.field?.name || 'N/A'}`
120
+ },
121
+ locations: [
122
+ {
123
+ physicalLocation: {
124
+ artifactLocation: { uri: "epic.toml" },
125
+ region: { startLine: 1 }
126
+ }
127
+ }
128
+ ]
129
+ });
130
+ }
131
+ run.tool.driver.rules = Array.from(rules.values());
132
+ return sarif;
133
+ }
134
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"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"}