atxp 1.0.0 → 1.0.2

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 ADDED
@@ -0,0 +1,42 @@
1
+ # ATXP CLI
2
+
3
+ The official ATXP (Authorization Token Exchange Protocol) CLI tool for creating projects and running demos.
4
+
5
+ ## Quick Start
6
+
7
+ ### Create a new ATXP project
8
+ ```bash
9
+ npm create atxp
10
+ ```
11
+ Creates a new project with interactive prompts for:
12
+ - Project name and template
13
+ - Solana network configuration
14
+ - Environment setup
15
+ - Git initialization
16
+
17
+ ### Run the ATXP demo
18
+ ```bash
19
+ npx atxp
20
+ ```
21
+ Downloads and runs the latest ATXP agent demo from GitHub, showcasing a full web-based agent with MCP servers.
22
+
23
+ ## What is ATXP?
24
+
25
+ ATXP is a framework for building agents that can interact with the world through secure OAuth authentication and Solana payments. It provides:
26
+
27
+ - 🔐 OAuth-based authentication
28
+ - 💰 Solana payment integration
29
+ - 🤖 MCP (Model Context Protocol) support
30
+ - ⚡ Fast and secure architecture
31
+
32
+ ## Templates
33
+
34
+ - **Basic Client**: CLI client example
35
+ - **Server**: MCP server with payments
36
+ - **Full Stack**: Complete client + server setup
37
+
38
+ ## Learn More
39
+
40
+ - [Documentation](https://docs.atxp.ai)
41
+ - [GitHub Repository](https://github.com/atxp-dev/sdk)
42
+ - [Examples](https://github.com/atxp-dev/sdk/tree/main/examples)
@@ -0,0 +1,2 @@
1
+ export declare function createProject(): Promise<void>;
2
+ //# sourceMappingURL=create-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../src/create-project.ts"],"names":[],"mappings":"AAyBA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkGnD"}
@@ -0,0 +1,129 @@
1
+ import inquirer from 'inquirer';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import chalk from 'chalk';
5
+ import { spawn } from 'child_process';
6
+ // Template repositories
7
+ const TEMPLATES = {
8
+ agent: {
9
+ url: 'https://github.com/atxp-dev/agent-demo.git',
10
+ humanText: 'Agent Demo (Full-stack web agent)'
11
+ }
12
+ };
13
+ export async function createProject() {
14
+ try {
15
+ // Get project details from user
16
+ const answers = await inquirer.prompt([
17
+ {
18
+ type: 'input',
19
+ name: 'projectName',
20
+ message: 'What is your project named?',
21
+ default: 'my-atxp-app',
22
+ validate: (input) => {
23
+ if (!input.trim())
24
+ return 'Project name is required';
25
+ if (!/^[a-zA-Z0-9-_]+$/.test(input)) {
26
+ return 'Project name can only contain letters, numbers, hyphens, and underscores';
27
+ }
28
+ return true;
29
+ }
30
+ },
31
+ {
32
+ type: 'list',
33
+ name: 'template',
34
+ message: 'Choose a template:',
35
+ choices: Object.entries(TEMPLATES).map(([key, template]) => ({
36
+ name: template.humanText,
37
+ value: key
38
+ })),
39
+ default: 'agent'
40
+ },
41
+ {
42
+ type: 'confirm',
43
+ name: 'initGit',
44
+ message: 'Initialize git repository?',
45
+ default: true
46
+ }
47
+ ]);
48
+ const { projectName, template, initGit } = answers;
49
+ const projectPath = path.resolve(process.cwd(), projectName);
50
+ // Check if directory already exists
51
+ if (await fs.pathExists(projectPath)) {
52
+ console.error(chalk.red(`Directory "${projectName}" already exists`));
53
+ process.exit(1);
54
+ }
55
+ console.log(chalk.blue(`Creating project at ${projectPath}`));
56
+ // Create project directory
57
+ await fs.ensureDir(projectPath);
58
+ // Clone template from GitHub
59
+ await cloneTemplate(template, projectPath);
60
+ // Copy .env file from env.example if it exists
61
+ const envExamplePath = path.join(projectPath, 'env.example');
62
+ const envPath = path.join(projectPath, '.env');
63
+ if (await fs.pathExists(envExamplePath)) {
64
+ await fs.copy(envExamplePath, envPath);
65
+ console.log(chalk.green('Environment file created from template'));
66
+ }
67
+ else {
68
+ console.log(chalk.yellow('No env.example found in template'));
69
+ }
70
+ // Update package.json with project name
71
+ const packageJsonPath = path.join(projectPath, 'package.json');
72
+ if (await fs.pathExists(packageJsonPath)) {
73
+ const packageJson = await fs.readJson(packageJsonPath);
74
+ packageJson.name = projectName;
75
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
76
+ }
77
+ // Remove .git directory from template (if it exists)
78
+ const gitDir = path.join(projectPath, '.git');
79
+ if (await fs.pathExists(gitDir)) {
80
+ await fs.remove(gitDir);
81
+ }
82
+ // Initialize git if requested
83
+ if (initGit) {
84
+ const { execSync } = await import('child_process');
85
+ try {
86
+ execSync('git init', { cwd: projectPath, stdio: 'ignore' });
87
+ console.log(chalk.green('Git repository initialized'));
88
+ }
89
+ catch {
90
+ console.log(chalk.yellow('Could not initialize git repository'));
91
+ }
92
+ }
93
+ console.log(chalk.green('\nProject created successfully!'));
94
+ console.log(chalk.blue('\nNext steps:'));
95
+ console.log(chalk.white(` cd ${projectName}`));
96
+ console.log(chalk.white(' npm install'));
97
+ console.log(chalk.white(' npm start'));
98
+ console.log(chalk.yellow('\nRemember to configure your environment variables in the .env file!'));
99
+ }
100
+ catch (error) {
101
+ console.error(chalk.red('Error creating project:'), error.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+ async function cloneTemplate(template, projectPath) {
106
+ const templateConfig = TEMPLATES[template];
107
+ if (!templateConfig) {
108
+ throw new Error(`Template "${template}" not found`);
109
+ }
110
+ return new Promise((resolve, reject) => {
111
+ console.log(chalk.blue('Downloading template from GitHub...'));
112
+ const git = spawn('git', ['clone', templateConfig.url, projectPath], {
113
+ stdio: 'inherit'
114
+ });
115
+ git.on('close', (code) => {
116
+ if (code === 0) {
117
+ console.log(chalk.green('Template downloaded successfully'));
118
+ resolve();
119
+ }
120
+ else {
121
+ reject(new Error(`Git clone failed with code ${code}`));
122
+ }
123
+ });
124
+ git.on('error', (_error) => {
125
+ reject(new Error(`Failed to clone template`));
126
+ });
127
+ });
128
+ }
129
+ //# sourceMappingURL=create-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.js","sourceRoot":"","sources":["../src/create-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { createProject } from './create-project.js';
3
+ import { runDemo } from './run-demo.js';
4
+ // Detect if we're in create mode (npm create atxp or npx atxp create)
5
+ const isCreateMode = process.env.npm_config_argv?.includes('create') ||
6
+ process.argv.includes('--create') ||
7
+ process.argv[2] === 'create';
8
+ if (isCreateMode) {
9
+ console.log('Creating new ATXP project...');
10
+ createProject();
11
+ }
12
+ else {
13
+ console.log('Starting ATXP demo...');
14
+ runDemo();
15
+ }
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,sEAAsE;AACtE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAElD,IAAI,YAAY,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ describe('ATXP CLI', () => {
3
+ it('should be importable', () => {
4
+ expect(() => import('./index.js')).not.toThrow();
5
+ });
6
+ });
7
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;IAClD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function runDemo(): Promise<void>;
2
+ //# sourceMappingURL=run-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-demo.d.ts","sourceRoot":"","sources":["../src/run-demo.ts"],"names":[],"mappings":"AAcA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B7C"}
@@ -0,0 +1,204 @@
1
+ import chalk from 'chalk';
2
+ import { spawn } from 'child_process';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import open from 'open';
6
+ import os from 'os';
7
+ const DEMO_REPO_URL = 'https://github.com/atxp-dev/agent-demo.git';
8
+ const DEMO_DIR = path.join(os.homedir(), '.cache', 'atxp', 'demo');
9
+ const DEMO_PORT = 8016;
10
+ const isVerbose = process.argv.includes('--verbose') || process.argv.includes('-v');
11
+ const shouldRefresh = process.argv.includes('--refresh');
12
+ export async function runDemo() {
13
+ try {
14
+ // Check if demo directory exists, if not clone it
15
+ if (!await fs.pathExists(DEMO_DIR)) {
16
+ console.log(chalk.blue('Downloading demo from GitHub...'));
17
+ await cloneDemoRepo();
18
+ }
19
+ else if (shouldRefresh) {
20
+ // Force refresh if --refresh flag is used
21
+ console.log(chalk.blue('Forcing demo refresh...'));
22
+ await fs.remove(DEMO_DIR);
23
+ await cloneDemoRepo();
24
+ }
25
+ else {
26
+ console.log(chalk.blue('Using existing demo...'));
27
+ // Pull latest changes
28
+ await updateDemoRepo();
29
+ }
30
+ // Install dependencies if needed
31
+ await installDependencies();
32
+ // Start the demo and open browser
33
+ await startDemo();
34
+ }
35
+ catch (error) {
36
+ console.error(chalk.red('Error starting demo:'), error.message);
37
+ process.exit(1);
38
+ }
39
+ }
40
+ async function cloneDemoRepo() {
41
+ return new Promise((resolve, reject) => {
42
+ const git = spawn('git', ['clone', DEMO_REPO_URL, DEMO_DIR], {
43
+ stdio: isVerbose ? 'inherit' : 'pipe'
44
+ });
45
+ git.on('close', (code) => {
46
+ if (code === 0) {
47
+ console.log(chalk.green('Demo downloaded successfully'));
48
+ resolve();
49
+ }
50
+ else {
51
+ reject(new Error(`Git clone failed with code ${code}`));
52
+ }
53
+ });
54
+ git.on('error', (_error) => {
55
+ reject(new Error(`Failed to clone repository`));
56
+ });
57
+ });
58
+ }
59
+ async function updateDemoRepo() {
60
+ return new Promise((resolve, _reject) => {
61
+ const git = spawn('git', ['pull'], {
62
+ cwd: DEMO_DIR,
63
+ stdio: isVerbose ? 'inherit' : 'pipe'
64
+ });
65
+ git.on('close', (code) => {
66
+ if (code === 0) {
67
+ console.log(chalk.green('Demo updated successfully'));
68
+ resolve();
69
+ }
70
+ else {
71
+ console.log(chalk.yellow('Could not update demo, using existing version'));
72
+ resolve(); // Don't fail if update fails
73
+ }
74
+ });
75
+ git.on('error', (_error) => {
76
+ console.log(chalk.yellow('Could not update demo, using existing version'));
77
+ resolve(); // Don't fail if update fails
78
+ });
79
+ });
80
+ }
81
+ async function installDependencies() {
82
+ console.log(chalk.blue('Installing dependencies...'));
83
+ return new Promise((resolve, reject) => {
84
+ // Use --silent flag to reduce npm output
85
+ const npmArgs = isVerbose ? ['run', 'install-all'] : ['run', 'install-all', '--silent'];
86
+ const npm = spawn('npm', npmArgs, {
87
+ cwd: DEMO_DIR,
88
+ stdio: isVerbose ? 'inherit' : 'pipe'
89
+ });
90
+ npm.on('close', (code) => {
91
+ if (code === 0) {
92
+ console.log(chalk.green('Dependencies installed successfully'));
93
+ resolve();
94
+ }
95
+ else {
96
+ reject(new Error(`npm install failed with code ${code}`));
97
+ }
98
+ });
99
+ npm.on('error', (error) => {
100
+ reject(new Error(`Failed to install dependencies: ${error.message}`));
101
+ });
102
+ });
103
+ }
104
+ async function startDemo() {
105
+ console.log(chalk.blue('Starting demo application...'));
106
+ console.log(chalk.green(`Demo will be available at: http://localhost:${DEMO_PORT}`));
107
+ console.log(chalk.yellow('Press Ctrl+C to stop the demo'));
108
+ if (!isVerbose) {
109
+ console.log(chalk.gray('Run with --verbose to see detailed logs'));
110
+ }
111
+ return new Promise((resolve, reject) => {
112
+ // Set the port environment variable for the demo
113
+ const env = {
114
+ ...process.env,
115
+ PORT: DEMO_PORT.toString(),
116
+ // Suppress deprecation warnings
117
+ NODE_NO_WARNINGS: '1',
118
+ // Suppress React warnings in development
119
+ CI: 'false'
120
+ };
121
+ const demo = spawn('npm', ['run', 'dev'], {
122
+ cwd: DEMO_DIR,
123
+ stdio: 'pipe', // Always use pipe to capture output
124
+ env
125
+ });
126
+ let demoOutput = '';
127
+ // Capture and display output
128
+ demo.stdout?.on('data', (data) => {
129
+ const output = data.toString();
130
+ demoOutput += output;
131
+ if (isVerbose) {
132
+ // In verbose mode, show everything
133
+ process.stdout.write(output);
134
+ }
135
+ else {
136
+ // In non-verbose mode, filter and show only important messages
137
+ if (output.includes('Local:') || output.includes('Network:') || output.includes('ready')) {
138
+ process.stdout.write(output);
139
+ }
140
+ }
141
+ });
142
+ // Handle stderr
143
+ demo.stderr?.on('data', (data) => {
144
+ const output = data.toString();
145
+ if (isVerbose) {
146
+ // In verbose mode, show everything
147
+ process.stderr.write(output);
148
+ }
149
+ else {
150
+ // In non-verbose mode, show only errors, not warnings
151
+ if (output.includes('Error:') && !output.includes('Warning:')) {
152
+ process.stderr.write(output);
153
+ }
154
+ }
155
+ });
156
+ // Open browser after delay if demo didn't handle it
157
+ setTimeout(async () => {
158
+ const demoOpenedBrowser = demoOutput.includes('You can now view');
159
+ if (!demoOpenedBrowser) {
160
+ try {
161
+ console.log(chalk.blue('Opening browser...'));
162
+ await open(`http://localhost:${DEMO_PORT}`);
163
+ }
164
+ catch {
165
+ console.log(chalk.yellow('Could not open browser automatically'));
166
+ console.log(chalk.white(`Please open http://localhost:${DEMO_PORT} in your browser`));
167
+ }
168
+ }
169
+ }, 2000);
170
+ // Handle graceful shutdown
171
+ process.on('SIGINT', () => {
172
+ console.log(chalk.yellow('\nShutting down demo...'));
173
+ demo.kill('SIGINT');
174
+ cleanup();
175
+ process.exit(0);
176
+ });
177
+ demo.on('close', (code) => {
178
+ if (code === 0) {
179
+ console.log(chalk.green('Demo stopped successfully'));
180
+ cleanup();
181
+ resolve();
182
+ }
183
+ else {
184
+ console.log(chalk.red(`Demo stopped with code ${code}`));
185
+ cleanup();
186
+ reject(new Error(`Demo process exited with code ${code}`));
187
+ }
188
+ });
189
+ demo.on('error', (error) => {
190
+ reject(new Error(`Failed to start demo: ${error.message}`));
191
+ });
192
+ });
193
+ }
194
+ async function cleanup() {
195
+ try {
196
+ // Optionally clean up the demo directory
197
+ // Uncomment the next line if you want to remove the demo after each run
198
+ // await fs.remove(DEMO_DIR);
199
+ }
200
+ catch {
201
+ console.log(chalk.yellow('Could not clean up demo directory'));
202
+ }
203
+ }
204
+ //# sourceMappingURL=run-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-demo.js","sourceRoot":"","sources":["../src/run-demo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,55 @@
1
1
  {
2
2
  "name": "atxp",
3
- "version": "1.0.0",
4
- "main": "index.js",
3
+ "version": "1.0.2",
4
+ "description": "ATXP CLI - Command line tool for creating ATXP projects and running demos",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/atxp-dev/sdk.git",
9
+ "directory": "packages/atxp"
10
+ },
11
+ "main": "dist/index.js",
12
+ "bin": {
13
+ "atxp": "./dist/index.js"
14
+ },
15
+ "type": "module",
16
+ "files": [
17
+ "dist/**/*"
18
+ ],
5
19
  "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
20
+ "build": "tsc",
21
+ "dev": "tsx src/index.ts",
22
+ "typecheck": "tsc --noEmit",
23
+ "lint": "eslint . --ext .ts",
24
+ "lint:fix": "eslint . --ext .ts --fix",
25
+ "test": "vitest run",
26
+ "prepublishOnly": "npm run build"
27
+ },
28
+ "keywords": [
29
+ "atxp",
30
+ "oauth",
31
+ "payment",
32
+ "solana",
33
+ "cli",
34
+ "demo",
35
+ "create"
36
+ ],
37
+ "dependencies": {
38
+ "chalk": "^5.3.0",
39
+ "inquirer": "^9.2.12",
40
+ "ora": "^7.0.1",
41
+ "fs-extra": "^11.2.0",
42
+ "open": "^9.1.0"
43
+ },
44
+ "devDependencies": {
45
+ "@types/fs-extra": "^11.0.4",
46
+ "@types/inquirer": "^9.0.7",
47
+ "@types/node": "^22.13.0",
48
+ "tsx": "^4.19.2",
49
+ "typescript": "^5.7.3",
50
+ "vitest": "^1.0.0"
7
51
  },
8
- "author": "",
9
- "license": "ISC",
10
- "description": ""
52
+ "engines": {
53
+ "node": ">=18.0.0"
54
+ }
11
55
  }