clawcontract-cli 0.1.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.
Files changed (146) hide show
  1. package/README.md +229 -0
  2. package/dist/analyzer/fallback.d.ts +28 -0
  3. package/dist/analyzer/fallback.d.ts.map +1 -0
  4. package/dist/analyzer/fallback.js +142 -0
  5. package/dist/analyzer/fallback.js.map +1 -0
  6. package/dist/analyzer/index.d.ts +24 -0
  7. package/dist/analyzer/index.d.ts.map +1 -0
  8. package/dist/analyzer/index.js +73 -0
  9. package/dist/analyzer/index.js.map +1 -0
  10. package/dist/analyzer/slither.d.ts +36 -0
  11. package/dist/analyzer/slither.d.ts.map +1 -0
  12. package/dist/analyzer/slither.js +92 -0
  13. package/dist/analyzer/slither.js.map +1 -0
  14. package/dist/cli/commands/analyze.d.ts +7 -0
  15. package/dist/cli/commands/analyze.d.ts.map +1 -0
  16. package/dist/cli/commands/analyze.js +74 -0
  17. package/dist/cli/commands/analyze.js.map +1 -0
  18. package/dist/cli/commands/create.d.ts +8 -0
  19. package/dist/cli/commands/create.d.ts.map +1 -0
  20. package/dist/cli/commands/create.js +44 -0
  21. package/dist/cli/commands/create.js.map +1 -0
  22. package/dist/cli/commands/delete.d.ts +5 -0
  23. package/dist/cli/commands/delete.d.ts.map +1 -0
  24. package/dist/cli/commands/delete.js +48 -0
  25. package/dist/cli/commands/delete.js.map +1 -0
  26. package/dist/cli/commands/deploy.d.ts +7 -0
  27. package/dist/cli/commands/deploy.d.ts.map +1 -0
  28. package/dist/cli/commands/deploy.js +130 -0
  29. package/dist/cli/commands/deploy.js.map +1 -0
  30. package/dist/cli/commands/featured.d.ts +4 -0
  31. package/dist/cli/commands/featured.d.ts.map +1 -0
  32. package/dist/cli/commands/featured.js +47 -0
  33. package/dist/cli/commands/featured.js.map +1 -0
  34. package/dist/cli/commands/full.d.ts +14 -0
  35. package/dist/cli/commands/full.d.ts.map +1 -0
  36. package/dist/cli/commands/full.js +72 -0
  37. package/dist/cli/commands/full.js.map +1 -0
  38. package/dist/cli/commands/generate.d.ts +10 -0
  39. package/dist/cli/commands/generate.d.ts.map +1 -0
  40. package/dist/cli/commands/generate.js +71 -0
  41. package/dist/cli/commands/generate.js.map +1 -0
  42. package/dist/cli/commands/info.d.ts +4 -0
  43. package/dist/cli/commands/info.d.ts.map +1 -0
  44. package/dist/cli/commands/info.js +76 -0
  45. package/dist/cli/commands/info.js.map +1 -0
  46. package/dist/cli/commands/interact.d.ts +7 -0
  47. package/dist/cli/commands/interact.d.ts.map +1 -0
  48. package/dist/cli/commands/interact.js +173 -0
  49. package/dist/cli/commands/interact.js.map +1 -0
  50. package/dist/cli/commands/list.d.ts +6 -0
  51. package/dist/cli/commands/list.d.ts.map +1 -0
  52. package/dist/cli/commands/list.js +37 -0
  53. package/dist/cli/commands/list.js.map +1 -0
  54. package/dist/cli/commands/register.d.ts +4 -0
  55. package/dist/cli/commands/register.d.ts.map +1 -0
  56. package/dist/cli/commands/register.js +54 -0
  57. package/dist/cli/commands/register.js.map +1 -0
  58. package/dist/cli/commands/verified.d.ts +9 -0
  59. package/dist/cli/commands/verified.d.ts.map +1 -0
  60. package/dist/cli/commands/verified.js +61 -0
  61. package/dist/cli/commands/verified.js.map +1 -0
  62. package/dist/cli/commands/verify.d.ts +9 -0
  63. package/dist/cli/commands/verify.d.ts.map +1 -0
  64. package/dist/cli/commands/verify.js +87 -0
  65. package/dist/cli/commands/verify.js.map +1 -0
  66. package/dist/cli/index.d.ts +3 -0
  67. package/dist/cli/index.d.ts.map +1 -0
  68. package/dist/cli/index.js +160 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/utils.d.ts +8 -0
  71. package/dist/cli/utils.d.ts.map +1 -0
  72. package/dist/cli/utils.js +36 -0
  73. package/dist/cli/utils.js.map +1 -0
  74. package/dist/config/chains.d.ts +18 -0
  75. package/dist/config/chains.d.ts.map +1 -0
  76. package/dist/config/chains.js +52 -0
  77. package/dist/config/chains.js.map +1 -0
  78. package/dist/config/clawcontractbook.d.ts +3 -0
  79. package/dist/config/clawcontractbook.d.ts.map +1 -0
  80. package/dist/config/clawcontractbook.js +3 -0
  81. package/dist/config/clawcontractbook.js.map +1 -0
  82. package/dist/config/index.d.ts +4 -0
  83. package/dist/config/index.d.ts.map +1 -0
  84. package/dist/config/index.js +3 -0
  85. package/dist/config/index.js.map +1 -0
  86. package/dist/constants/index.d.ts +3 -0
  87. package/dist/constants/index.d.ts.map +1 -0
  88. package/dist/constants/index.js +3 -0
  89. package/dist/constants/index.js.map +1 -0
  90. package/dist/deployer/compiler.d.ts +10 -0
  91. package/dist/deployer/compiler.d.ts.map +1 -0
  92. package/dist/deployer/compiler.js +93 -0
  93. package/dist/deployer/compiler.js.map +1 -0
  94. package/dist/deployer/deploy.d.ts +28 -0
  95. package/dist/deployer/deploy.d.ts.map +1 -0
  96. package/dist/deployer/deploy.js +60 -0
  97. package/dist/deployer/deploy.js.map +1 -0
  98. package/dist/deployer/hardhat-config-template.d.ts +2 -0
  99. package/dist/deployer/hardhat-config-template.d.ts.map +1 -0
  100. package/dist/deployer/hardhat-config-template.js +21 -0
  101. package/dist/deployer/hardhat-config-template.js.map +1 -0
  102. package/dist/deployer/index.d.ts +7 -0
  103. package/dist/deployer/index.d.ts.map +1 -0
  104. package/dist/deployer/index.js +4 -0
  105. package/dist/deployer/index.js.map +1 -0
  106. package/dist/deployer/metadata.d.ts +17 -0
  107. package/dist/deployer/metadata.d.ts.map +1 -0
  108. package/dist/deployer/metadata.js +317 -0
  109. package/dist/deployer/metadata.js.map +1 -0
  110. package/dist/deployer/wallet.d.ts +6 -0
  111. package/dist/deployer/wallet.d.ts.map +1 -0
  112. package/dist/deployer/wallet.js +15 -0
  113. package/dist/deployer/wallet.js.map +1 -0
  114. package/dist/generator/index.d.ts +2 -0
  115. package/dist/generator/index.d.ts.map +1 -0
  116. package/dist/generator/index.js +2 -0
  117. package/dist/generator/index.js.map +1 -0
  118. package/dist/generator/llm.d.ts +15 -0
  119. package/dist/generator/llm.d.ts.map +1 -0
  120. package/dist/generator/llm.js +128 -0
  121. package/dist/generator/llm.js.map +1 -0
  122. package/dist/generator/utils.d.ts +5 -0
  123. package/dist/generator/utils.d.ts.map +1 -0
  124. package/dist/generator/utils.js +49 -0
  125. package/dist/generator/utils.js.map +1 -0
  126. package/dist/index.d.ts +2 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +2 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/lib/clawcontractbook.d.ts +65 -0
  131. package/dist/lib/clawcontractbook.d.ts.map +1 -0
  132. package/dist/lib/clawcontractbook.js +158 -0
  133. package/dist/lib/clawcontractbook.js.map +1 -0
  134. package/dist/lib/credentials.d.ts +28 -0
  135. package/dist/lib/credentials.d.ts.map +1 -0
  136. package/dist/lib/credentials.js +73 -0
  137. package/dist/lib/credentials.js.map +1 -0
  138. package/dist/verifier/explorer-api.d.ts +21 -0
  139. package/dist/verifier/explorer-api.d.ts.map +1 -0
  140. package/dist/verifier/explorer-api.js +92 -0
  141. package/dist/verifier/explorer-api.js.map +1 -0
  142. package/dist/verifier/index.d.ts +20 -0
  143. package/dist/verifier/index.d.ts.map +1 -0
  144. package/dist/verifier/index.js +31 -0
  145. package/dist/verifier/index.js.map +1 -0
  146. package/package.json +54 -0
@@ -0,0 +1,7 @@
1
+ import type { Finding } from '../../analyzer/index.js';
2
+ export interface AnalyzeCommandResult {
3
+ passed: boolean;
4
+ findings: Finding[];
5
+ }
6
+ export declare function analyzeCommand(file: string): Promise<AnalyzeCommandResult>;
7
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAUvD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgEhF"}
@@ -0,0 +1,74 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { displayBanner, displayError, displayResult } from '../utils.js';
6
+ import { analyzeContract, isSlitherAvailable } from '../../analyzer/index.js';
7
+ const SEVERITY_COLORS = {
8
+ High: chalk.red,
9
+ Medium: chalk.yellow,
10
+ Low: chalk.cyan,
11
+ Informational: chalk.gray,
12
+ Optimization: chalk.blue,
13
+ };
14
+ export async function analyzeCommand(file) {
15
+ displayBanner();
16
+ console.log(chalk.bold('Security Analysis\n'));
17
+ const filePath = path.resolve(process.cwd(), file);
18
+ if (!fs.existsSync(filePath)) {
19
+ displayError(`File not found: ${filePath}`);
20
+ process.exitCode = 1;
21
+ return { passed: true, findings: [] };
22
+ }
23
+ displayResult('File', filePath);
24
+ const slitherReady = isSlitherAvailable();
25
+ displayResult('Engine', slitherReady ? 'Slither' : 'Fallback (regex-based)');
26
+ console.log('');
27
+ const spinner = ora('Running security analysis...').start();
28
+ try {
29
+ const result = await analyzeContract(filePath);
30
+ spinner.succeed('Analysis complete');
31
+ console.log('');
32
+ if (result.findings.length === 0) {
33
+ console.log(chalk.green(' ✔ No issues found'));
34
+ return { passed: result.passed, findings: result.findings };
35
+ }
36
+ for (const finding of result.findings) {
37
+ const colorFn = SEVERITY_COLORS[finding.severity] ?? chalk.white;
38
+ const locationInfo = finding.location ? chalk.gray(` (${finding.location})`) : '';
39
+ console.log(` ${colorFn(`[${finding.severity}]`)} ${finding.title}${locationInfo}`);
40
+ console.log(chalk.gray(` ${finding.description}`));
41
+ if (finding.recommendation) {
42
+ console.log(chalk.gray(` → ${finding.recommendation}`));
43
+ }
44
+ console.log('');
45
+ }
46
+ console.log(chalk.bold('\n Summary:'));
47
+ const s = result.summary;
48
+ if (s.high > 0)
49
+ console.log(chalk.red(` High: ${s.high}`));
50
+ if (s.medium > 0)
51
+ console.log(chalk.yellow(` Medium: ${s.medium}`));
52
+ if (s.low > 0)
53
+ console.log(chalk.cyan(` Low: ${s.low}`));
54
+ if (s.informational > 0)
55
+ console.log(chalk.gray(` Informational: ${s.informational}`));
56
+ if (s.optimization > 0)
57
+ console.log(chalk.blue(` Optimization: ${s.optimization}`));
58
+ console.log('');
59
+ if (result.passed) {
60
+ console.log(chalk.green(' ✔ Analysis passed (no high-severity issues)'));
61
+ }
62
+ else {
63
+ console.log(chalk.red(' ✘ Analysis failed (high-severity issues found)'));
64
+ }
65
+ return { passed: result.passed, findings: result.findings };
66
+ }
67
+ catch (error) {
68
+ spinner.fail('Analysis failed');
69
+ const message = error instanceof Error ? error.message : String(error);
70
+ displayError(message);
71
+ throw error;
72
+ }
73
+ }
74
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface CreateCommandOptions {
2
+ chain: string;
3
+ output: string;
4
+ source?: string;
5
+ stdin?: boolean;
6
+ }
7
+ export declare function createCommand(options: CreateCommandOptions): Promise<string>;
8
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAqCjB"}
@@ -0,0 +1,44 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { displayBanner, displayError, displayResult } from '../utils.js';
5
+ import { extractContractName, sanitizeFileName, writeFileUnique, ensureOutputDir } from '../../generator/utils.js';
6
+ export async function createCommand(options) {
7
+ displayBanner();
8
+ console.log(chalk.bold('Create Smart Contract\n'));
9
+ let source;
10
+ if (options.stdin) {
11
+ source = fs.readFileSync(0, 'utf-8');
12
+ displayResult('Input', 'stdin');
13
+ }
14
+ else if (options.source) {
15
+ source = options.source;
16
+ displayResult('Input', '--source');
17
+ }
18
+ else {
19
+ displayError('Provide Solidity source via --source <code> or --stdin.');
20
+ process.exitCode = 1;
21
+ throw new Error('Missing input');
22
+ }
23
+ displayResult('Target Chain', options.chain);
24
+ console.log('');
25
+ const spinner = ora('Writing contract to file...').start();
26
+ try {
27
+ await ensureOutputDir(options.output);
28
+ const contractName = extractContractName(source);
29
+ const fileName = sanitizeFileName(contractName);
30
+ const filePath = await writeFileUnique(options.output, fileName, source);
31
+ spinner.succeed('Contract written successfully');
32
+ console.log('');
33
+ displayResult('Output File', filePath);
34
+ displayResult('Contract Name', contractName);
35
+ return filePath;
36
+ }
37
+ catch (error) {
38
+ spinner.fail('Failed to write contract');
39
+ const message = error instanceof Error ? error.message : String(error);
40
+ displayError(message);
41
+ throw error;
42
+ }
43
+ }
44
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AASnH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6B;IAE7B,aAAa,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,IAAI,MAAc,CAAC;IACnB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACxB,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,yDAAyD,CAAC,CAAC;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG,GAAG,CAAC,6BAA6B,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACvC,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function deleteCommand(address: string, options: {
2
+ force?: boolean;
3
+ output: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAeA,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAqCf"}
@@ -0,0 +1,48 @@
1
+ import chalk from 'chalk';
2
+ import readline from 'node:readline';
3
+ import { loadDeployment, deleteDeployment } from '../../deployer/metadata.js';
4
+ import { displayError, displayResult } from '../utils.js';
5
+ function confirm(question) {
6
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
7
+ return new Promise((resolve) => {
8
+ rl.question(question, (answer) => {
9
+ rl.close();
10
+ resolve(answer.toLowerCase() === 'y');
11
+ });
12
+ });
13
+ }
14
+ export async function deleteCommand(address, options) {
15
+ if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
16
+ displayError('Invalid address format. Expected 0x followed by 40 hex characters.');
17
+ process.exitCode = 1;
18
+ return;
19
+ }
20
+ const deployment = loadDeployment(address, options.output);
21
+ if (!deployment) {
22
+ displayError('No deployment found for address: ' + address);
23
+ process.exitCode = 1;
24
+ return;
25
+ }
26
+ displayResult('Address', deployment.contractAddress);
27
+ displayResult('Contract', deployment.contractName);
28
+ displayResult('Chain', deployment.chainKey);
29
+ displayResult('Deployer', deployment.deployer);
30
+ displayResult('Deployed At', deployment.deployedAt);
31
+ console.log();
32
+ if (!options.force) {
33
+ const confirmed = await confirm(chalk.yellow('Remove this deployment? (y/N) '));
34
+ if (!confirmed) {
35
+ console.log('Cancelled.');
36
+ return;
37
+ }
38
+ }
39
+ const removed = deleteDeployment(address, options.output);
40
+ if (removed) {
41
+ console.log(chalk.green('✓ Deployment removed.'));
42
+ }
43
+ else {
44
+ displayError('Failed to remove deployment.');
45
+ process.exitCode = 1;
46
+ }
47
+ }
48
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/cli/commands/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE1D,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,OAA4C;IAE5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,YAAY,CAAC,oEAAoE,CAAC,CAAC;QACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,YAAY,CAAC,mCAAmC,GAAG,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACrD,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACnD,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/C,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DeployResult } from '../../deployer/index.js';
2
+ export declare function deployCommand(file: string, options: {
3
+ chain: string;
4
+ publish?: boolean;
5
+ description?: string;
6
+ }): Promise<DeployResult | undefined>;
7
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAM5D,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAmInC"}
@@ -0,0 +1,130 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { getChain } from '../../config/chains.js';
6
+ import { estimateGas, deployContract, compileContract, saveDeployment } from '../../deployer/index.js';
7
+ import { resolvePrivateKey, getWalletInfo } from '../../deployer/wallet.js';
8
+ import { displayBanner, displayError, displayResult } from '../utils.js';
9
+ import { publishDeployment } from '../../lib/clawcontractbook.js';
10
+ import { resolveCredentials } from '../../lib/credentials.js';
11
+ export async function deployCommand(file, options) {
12
+ displayBanner();
13
+ console.log(chalk.bold('Deploy Contract\n'));
14
+ const filePath = path.resolve(process.cwd(), file);
15
+ if (!fs.existsSync(filePath)) {
16
+ displayError(`File not found: ${filePath}`);
17
+ process.exitCode = 1;
18
+ return undefined;
19
+ }
20
+ displayResult('Contract', filePath);
21
+ const chainKey = options.chain;
22
+ const chainConfig = getChain(chainKey);
23
+ displayResult('Chain', `${chainConfig.name} (Chain ID: ${chainConfig.chainId})`);
24
+ console.log('');
25
+ const privateKey = resolvePrivateKey();
26
+ const { address: deployerAddress } = getWalletInfo(privateKey);
27
+ displayResult('Deployer', deployerAddress);
28
+ console.log('');
29
+ const gasSpinner = ora('Estimating gas...').start();
30
+ try {
31
+ const gas = await estimateGas(filePath, chainKey, privateKey);
32
+ gasSpinner.succeed('Gas estimation complete');
33
+ console.log('');
34
+ console.log(chalk.bold(' Gas Estimation:'));
35
+ displayResult(' Gas Limit', gas.gasLimit.toString());
36
+ displayResult(' Gas Price', `${gas.gasPrice.toString()} wei`);
37
+ displayResult(' Estimated Cost', `${gas.totalCostBNB} BNB`);
38
+ displayResult(' With 20% Buffer', `${gas.totalCostWithBuffer} BNB`);
39
+ console.log('');
40
+ }
41
+ catch (error) {
42
+ gasSpinner.fail('Gas estimation failed');
43
+ const message = error instanceof Error ? error.message : String(error);
44
+ displayError(message);
45
+ throw error;
46
+ }
47
+ if (!chainConfig.isTestnet) {
48
+ console.log(chalk.red.bold(' ⚠ WARNING: You are deploying to MAINNET!'));
49
+ console.log(chalk.red(' This will cost real BNB. Make sure you have reviewed the contract.\n'));
50
+ }
51
+ const spinner = ora('Deploying contract...').start();
52
+ try {
53
+ const result = await deployContract({
54
+ sourceFile: filePath,
55
+ chainKey,
56
+ privateKey,
57
+ });
58
+ spinner.succeed('Contract deployed successfully');
59
+ console.log('');
60
+ displayResult('Contract Address', result.contractAddress);
61
+ displayResult('Transaction Hash', result.transactionHash);
62
+ displayResult('Gas Used', result.gasUsed);
63
+ displayResult('Block Number', result.blockNumber.toString());
64
+ displayResult('Deployer', result.deployer);
65
+ displayResult('Explorer URL', result.explorerUrl);
66
+ const compiled = await compileContract(filePath);
67
+ let deploymentId;
68
+ if (options.publish) {
69
+ const creds = resolveCredentials({});
70
+ if (!creds) {
71
+ console.log(chalk.yellow('\n ClawContractBook publish requires credentials. Run `clawcontract-cli register --name MyAgent` first.'));
72
+ }
73
+ else {
74
+ const publishSpinner = ora('Publishing to ClawContractBook...').start();
75
+ try {
76
+ const sourceCode = fs.readFileSync(filePath, 'utf-8');
77
+ const publishResult = await publishDeployment({
78
+ contractAddress: result.contractAddress,
79
+ chainKey,
80
+ chainId: chainConfig.chainId,
81
+ contractName: compiled.contractName,
82
+ description: options.description,
83
+ abi: [...compiled.abi],
84
+ sourceCode,
85
+ deployerAddress: result.deployer,
86
+ transactionHash: result.transactionHash,
87
+ blockNumber: result.blockNumber,
88
+ gasUsed: result.gasUsed,
89
+ apiKeyId: creds.apiKeyId,
90
+ apiSecret: creds.apiSecret,
91
+ endpoint: creds.endpoint,
92
+ });
93
+ if (publishResult.success) {
94
+ publishSpinner.succeed('Published to ClawContractBook');
95
+ deploymentId = publishResult.deploymentId;
96
+ if (publishResult.url) {
97
+ displayResult('View at', publishResult.url);
98
+ }
99
+ }
100
+ else {
101
+ publishSpinner.fail(`Failed to publish: ${publishResult.error}`);
102
+ }
103
+ }
104
+ catch {
105
+ publishSpinner.fail('Failed to publish to ClawContractBook');
106
+ }
107
+ }
108
+ }
109
+ saveDeployment({
110
+ contractAddress: result.contractAddress,
111
+ abi: compiled.abi,
112
+ chainKey,
113
+ contractName: compiled.contractName,
114
+ sourceFile: filePath,
115
+ deployer: result.deployer,
116
+ transactionHash: result.transactionHash,
117
+ blockNumber: result.blockNumber,
118
+ deployedAt: new Date().toISOString(),
119
+ deploymentId,
120
+ }, path.dirname(filePath));
121
+ return result;
122
+ }
123
+ catch (error) {
124
+ spinner.fail('Deployment failed');
125
+ const message = error instanceof Error ? error.message : String(error);
126
+ displayError(message);
127
+ throw error;
128
+ }
129
+ }
130
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function featuredCommand(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=featured.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featured.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/featured.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEhB"}
@@ -0,0 +1,47 @@
1
+ import chalk from 'chalk';
2
+ import { CLAWCONTRACT_BOOK_DEFAULT_ENDPOINT } from '../../config/clawcontractbook.js';
3
+ import { displayResult } from '../utils.js';
4
+ export async function featuredCommand(options) {
5
+ const baseUrl = CLAWCONTRACT_BOOK_DEFAULT_ENDPOINT;
6
+ const url = `${baseUrl}/api/v1/deployments/featured`;
7
+ const res = await fetch(url);
8
+ if (!res.ok) {
9
+ throw new Error(`Failed to fetch featured deployments: ${res.status} ${res.statusText}`);
10
+ }
11
+ const body = await res.json();
12
+ if (!body.success) {
13
+ throw new Error('API returned unsuccessful response');
14
+ }
15
+ const deployments = body.data.deployments;
16
+ if (options.json) {
17
+ console.log(JSON.stringify(deployments, null, 2));
18
+ return;
19
+ }
20
+ console.log(chalk.bold('Featured Verified Deployments\n'));
21
+ if (deployments.length === 0) {
22
+ console.log('No featured deployments found.');
23
+ return;
24
+ }
25
+ displayResult('Total', deployments.length.toString());
26
+ console.log();
27
+ deployments.forEach((d, i) => {
28
+ displayResult('Contract', d.contractName);
29
+ displayResult('Address', d.contractAddress);
30
+ displayResult('Chain', d.chainKey);
31
+ displayResult('Agent', d.agent.name);
32
+ displayResult('Interactions', d.interactionCount.toString());
33
+ if (d.abiUrl) {
34
+ displayResult('ABI URL', d.abiUrl);
35
+ }
36
+ if (d.sourceUrl) {
37
+ displayResult('Source URL', d.sourceUrl);
38
+ }
39
+ if (d.description) {
40
+ displayResult('Description', d.description);
41
+ }
42
+ if (i < deployments.length - 1) {
43
+ console.log(chalk.gray(' ─'.repeat(20)));
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=featured.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featured.js","sourceRoot":"","sources":["../../../src/cli/commands/featured.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAErC;IACC,MAAM,OAAO,GAAG,kCAAkC,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,OAAO,8BAA8B,CAAC;IAErD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAiB1B,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAE1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAE3D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1C,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QAC5C,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAChB,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAClB,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface FullCommandInput {
2
+ source?: string;
3
+ stdin?: boolean;
4
+ file?: string;
5
+ }
6
+ export declare function fullCommand(input: FullCommandInput, options: {
7
+ chain: string;
8
+ output: string;
9
+ skipDeploy?: boolean;
10
+ skipAnalyze?: boolean;
11
+ publish?: boolean;
12
+ description?: string;
13
+ }): Promise<void>;
14
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/H,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -0,0 +1,72 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { displayBanner, displayError } from '../utils.js';
5
+ import { createCommand } from './create.js';
6
+ import { analyzeCommand } from './analyze.js';
7
+ import { deployCommand } from './deploy.js';
8
+ export async function fullCommand(input, options) {
9
+ displayBanner();
10
+ console.log(chalk.bold('Full Pipeline: Create → Analyze → Deploy\n'));
11
+ let filePath;
12
+ if (input.file) {
13
+ filePath = path.resolve(process.cwd(), input.file);
14
+ if (!fs.existsSync(filePath)) {
15
+ displayError(`File not found: ${filePath}`);
16
+ process.exit(1);
17
+ }
18
+ console.log(chalk.bold.blue('\n━━━ Step 1/3: Create Contract ━━━\n'));
19
+ console.log(chalk.yellow.bold(' ⏭ Using existing file (--file). Skipping create.\n'));
20
+ }
21
+ else {
22
+ console.log(chalk.bold.blue('\n━━━ Step 1/3: Create Contract ━━━\n'));
23
+ filePath = await createCommand({
24
+ chain: options.chain,
25
+ output: options.output,
26
+ source: input.source,
27
+ stdin: input.stdin,
28
+ });
29
+ }
30
+ // Step 2: Analyze
31
+ if (options.skipAnalyze) {
32
+ console.log(chalk.bold.blue('\n━━━ Step 2/3: Security Analysis ━━━\n'));
33
+ console.log(chalk.yellow.bold(' ⏭ Skipped security analysis (--skip-analyze).\n'));
34
+ }
35
+ else {
36
+ console.log(chalk.bold.blue('\n━━━ Step 2/3: Security Analysis ━━━\n'));
37
+ const analysisResult = await analyzeCommand(filePath);
38
+ if (!analysisResult.passed) {
39
+ console.log(chalk.yellow.bold('\n Pipeline stopped: high-severity issues found.'));
40
+ console.log(chalk.cyan(`\n [LLM NOTICE] Fix the high-severity issues in the contract, then run the command again.`));
41
+ console.log(chalk.gray(` Contract file: ${filePath}\n`));
42
+ process.exitCode = 1;
43
+ return;
44
+ }
45
+ if (options.skipDeploy) {
46
+ console.log(chalk.cyan(`\n Contract file: ${filePath}`));
47
+ console.log(chalk.cyan(` Analysis passed: ${analysisResult.passed}`));
48
+ console.log(chalk.yellow.bold('\n Pipeline stopped after analysis (--skip-deploy).\n'));
49
+ return;
50
+ }
51
+ }
52
+ if (options.skipDeploy) {
53
+ console.log(chalk.cyan(`\n Contract file: ${filePath}`));
54
+ console.log(chalk.yellow.bold('\n Pipeline stopped before deployment (--skip-deploy).\n'));
55
+ return;
56
+ }
57
+ // Step 3: Deploy
58
+ console.log(chalk.bold.blue('\n━━━ Step 3/3: Deploy Contract ━━━\n'));
59
+ const deployResult = await deployCommand(filePath, {
60
+ chain: options.chain,
61
+ publish: options.publish,
62
+ description: options.description,
63
+ });
64
+ if (!deployResult) {
65
+ console.log(chalk.yellow('\nPipeline stopped: deployment did not complete.'));
66
+ return;
67
+ }
68
+ console.log(chalk.gray(`\n Tip: interact with your contract using:`));
69
+ console.log(chalk.gray(` clawcontract-cli interact ${deployResult.contractAddress} <function> --chain ${options.chain}\n`));
70
+ console.log(chalk.bold.green('\n✔ Full pipeline complete!\n'));
71
+ }
72
+ //# sourceMappingURL=full.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.js","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface GenerateCommandOptions {
2
+ chain: string;
3
+ output: string;
4
+ /** Inline Solidity source instead of AI generation */
5
+ source?: string;
6
+ /** Read Solidity source from stdin */
7
+ stdin?: boolean;
8
+ }
9
+ export declare function generateCommand(description: string | undefined, options: GenerateCommandOptions): Promise<string>;
10
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAqEjB"}
@@ -0,0 +1,71 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { displayBanner, displayError, displayResult } from '../utils.js';
5
+ import { generateContract } from '../../generator/index.js';
6
+ export async function generateCommand(description, options) {
7
+ displayBanner();
8
+ console.log(chalk.bold('Generating Smart Contract\n'));
9
+ let source;
10
+ if (options.stdin) {
11
+ source = fs.readFileSync(0, 'utf-8');
12
+ displayResult('Input', 'stdin');
13
+ }
14
+ else if (options.source) {
15
+ source = options.source;
16
+ displayResult('Input', '--source');
17
+ }
18
+ if (source) {
19
+ displayResult('Target Chain', options.chain);
20
+ console.log('');
21
+ const spinner = ora('Writing contract to file...').start();
22
+ try {
23
+ const result = await generateContract({
24
+ source,
25
+ outputDir: options.output,
26
+ useAI: false,
27
+ });
28
+ spinner.succeed('Contract written successfully');
29
+ console.log('');
30
+ displayResult('Output File', result.filePath);
31
+ displayResult('Contract Name', result.contractName);
32
+ displayResult('AI Generated', 'No');
33
+ return result.filePath;
34
+ }
35
+ catch (error) {
36
+ spinner.fail('Failed to write contract');
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ displayError(message);
39
+ throw error;
40
+ }
41
+ }
42
+ if (!description) {
43
+ displayError('Provide either a description (for AI) or --source / --stdin (for your own contract).');
44
+ process.exitCode = 1;
45
+ throw new Error('Missing input');
46
+ }
47
+ displayResult('Description', description);
48
+ displayResult('Target Chain', options.chain);
49
+ console.log('');
50
+ const spinner = ora('Generating contract with AI...').start();
51
+ try {
52
+ const result = await generateContract({
53
+ description,
54
+ outputDir: options.output,
55
+ useAI: true,
56
+ });
57
+ spinner.succeed('Contract generated successfully');
58
+ console.log('');
59
+ displayResult('Output File', result.filePath);
60
+ displayResult('Contract Name', result.contractName);
61
+ displayResult('AI Generated', result.aiGenerated ? 'Yes' : 'No');
62
+ return result.filePath;
63
+ }
64
+ catch (error) {
65
+ spinner.fail('Contract generation failed');
66
+ const message = error instanceof Error ? error.message : String(error);
67
+ displayError(message);
68
+ throw error;
69
+ }
70
+ }
71
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}