newo
Version:
NEWO CLI: Professional command-line tool with modular architecture for NEWO AI Agent development. Features IDN-based file management, real-time progress tracking, intelligent sync operations, and comprehensive multi-customer support.
974 lines (758 loc) • 32.2 kB
Markdown
# NEWO CLI
[](https://badge.fury.io/js/newo)
[](https://opensource.org/licenses/MIT)
[](https://www.typescriptlang.org/)
[](https://nodejs.org/)
**NEWO CLI** - Professional command-line tool for NEWO AI Agent development. Features **modular architecture**, **IDN-based file management**, and **comprehensive multi-customer support**.
Sync NEWO "Project → Agent → Flow → Skills" structure to local files with:
- 🔄 **Intelligent synchronization** - Pull projects, attributes, and conversations automatically
- 🎯 **IDN-based naming** - Skills named as `{skillIdn}.jinja/.guidance` for better organization
- 📊 **Real-time progress** - Live progress tracking during large operations (966+ skills)
- 🏢 **Multi-customer workspaces** - Work with multiple NEWO accounts simultaneously
- 📁 **Hierarchical structure** - Complete project metadata and organized file structure
- 🔐 **Secure authentication** - API key-based auth with automatic token refresh
- ⚡ **Smart change detection** - SHA256-based efficient sync with hash consistency
- 🛡️ **File validation** - Multiple file detection with clear warnings and safe handling
- 🧠 **AI skill formats** - Support for `.guidance` (AI prompts) and `.jinja` (NSL templates)
- 📊 **Knowledge base import** - Bulk import AKB articles from structured text files
- 💬 **Conversation history** - Extract and sync user conversations and personas
- 🔧 **CI/CD ready** - GitHub Actions integration for automated deployments
## Quick Start
### Installation
**Option 1: Global Installation (Recommended)**
```bash
npm install -g newo@latest
```
**Option 2: Local Project Installation**
```bash
npm install newo
```
**Option 3: Development from Source**
```bash
git clone https://github.com/sabbah13/newo-cli.git
cd newo-cli
npm install && npm run build
```
### Basic Setup
1. **Get your NEWO API key** from [app.newo.ai](https://app.newo.ai) → Integrations → API Integration → Create Connector
2. **Configure environment**:
```bash
cp .env.example .env
# Edit .env with your API key
```
3. **Start syncing**:
```bash
newo pull # Download all projects
newo push # Upload changes back
newo status # See what's modified
```
## Configuration
### Single Customer Setup
For working with one NEWO account:
```bash
# .env file
NEWO_API_KEY=your_api_key_here
NEWO_PROJECT_ID=project_uuid_here # Optional: specific project only
```
### Multi-Customer Setup
Work with multiple NEWO accounts simultaneously using three flexible approaches:
#### Method 1: JSON Array (Recommended)
```bash
# .env file
NEWO_API_KEYS=["api_key_customer_1", "api_key_customer_2", "api_key_customer_3"]
NEWO_DEFAULT_CUSTOMER=NEWO_ABC123 # Optional: set after first pull
```
#### Method 2: JSON Array with Project IDs
```bash
# .env file
NEWO_API_KEYS=[
{"key":"api_key_1","project_id":"project_uuid_1"},
{"key":"api_key_2","project_id":"project_uuid_2"},
{"key":"api_key_3"}
]
```
#### Method 3: Individual Environment Variables
```bash
# .env file
NEWO_CUSTOMER_ACME_API_KEY=acme_api_key_here
NEWO_CUSTOMER_BETA_API_KEY=beta_api_key_here
NEWO_CUSTOMER_GAMMA_API_KEY=gamma_api_key_here
```
### Getting Your NEWO API Keys
1. **Login** to [app.newo.ai](https://app.newo.ai)
2. **Navigate** to **Integrations** page
3. **Find** **API Integration** in the list
4. **Create** a new **Connector**
5. **Copy** the API key (format: `458663bd41f2d1...`)

### Advanced Configuration
```bash
# .env file
NEWO_BASE_URL=https://app.newo.ai # NEWO platform URL
NEWO_DEFAULT_CUSTOMER=NEWO_ABC123 # Default customer for operations
NEWO_ACCESS_TOKEN=direct_access_token # Alternative to API key
NEWO_REFRESH_TOKEN=refresh_token_here # For token refresh
NEWO_REFRESH_URL=custom_refresh_endpoint # Custom refresh endpoint
```
## Commands
### Core Commands
| Command | Description | Features |
|---------|-------------|----------|
| `newo pull` | Download projects + attributes + metadata | • Real-time progress tracking (966+ skills)<br>• IDN-based file naming<br>• Automatic attributes.yaml generation<br>• `--force` for silent overwrite |
| `newo push` | Upload local changes to NEWO | • Smart file validation<br>• Multiple file detection<br>• Hash-based change detection<br>• Safe error handling |
| `newo status` | Show modified files with details | • Multiple file warnings<br>• Detailed change analysis<br>• Clean state validation<br>• Per-customer status |
| `newo conversations` | Pull conversation history | • User personas and chat history<br>• YAML format output<br>• Pagination support |
| `newo list-customers` | List configured customers | • Shows default customer<br>• Multi-customer discovery |
| `newo import-akb` | Import knowledge base articles | • Structured text parsing<br>• Bulk article import<br>• Validation and error reporting |
| `newo meta` | Get project metadata (debug) | • Project structure analysis<br>• Metadata validation |
### Multi-Customer Commands
```bash
# List all configured customers
newo list-customers
# Pull projects from specific customer
newo pull --customer=NEWO_ABC123
# Push changes to specific customer
newo push --customer=NEWO_XYZ789
# Work with default customer (or auto multi-customer)
newo pull # Uses default customer OR pulls from all customers if no default set
newo push # Pushes to appropriate customers based on file origin
```
### Command Options
- `--customer=<customer_idn>` - Target specific customer
- `--project=<project_uuid>` - Target specific project
- `--verbose` / `-v` - Detailed output with debugging info
- `--help` / `-h` - Show command help
## Project Structure
### File Organization
**Multi-Customer Workspace**
```
newo_customers/ # Root folder for all customers
├── NEWO_ABC123/ # Customer folder (auto-detected IDN)
│ ├── attributes.yaml # Customer attributes (auto-generated)
│ ├── conversations.yaml # Conversation history (optional)
│ └── projects/ # Customer's projects
│ ├── flows.yaml # Clean metadata export (no prompt_script)
│ └── ProjectAlpha/ # Individual project folder
│ ├── metadata.yaml # Project metadata
│ ├── agent_support/ # Agent folder
│ │ ├── metadata.yaml # Agent metadata
│ │ ├── flow_onboarding/ # Flow folder
│ │ │ ├── metadata.yaml # Flow metadata
│ │ │ ├── skill_welcome/ # Skill folder (IDN-based)
│ │ │ │ ├── skill_welcome.guidance # IDN-named script
│ │ │ │ └── metadata.yaml # Skill metadata
│ │ │ └── skill_setup/ # Another skill folder
│ │ │ ├── skill_setup.jinja # IDN-named script
│ │ │ └── metadata.yaml # Skill metadata
│ │ └── flow_help/
│ │ └── skill_faq/
│ │ ├── skill_faq.guidance
│ │ └── metadata.yaml
│ └── agent_sales/
│ └── flow_demo/
│ └── skill_pitch/
│ ├── skill_pitch.jinja
│ └── metadata.yaml
├── NEWO_XYZ789/ # Another customer
│ ├── attributes.yaml
│ └── projects/
│ ├── flows.yaml
│ └── ProjectBeta/
│ └── ...
└── .newo/ # CLI state directory (hidden)
├── NEWO_ABC123/ # Customer-specific state
│ ├── map.json # NEWO ID mappings
│ └── hashes.json # Change detection hashes
├── NEWO_XYZ789/
│ ├── map.json
│ └── hashes.json
└── tokens.json # Authentication tokens
```
### File Types
- **`.guidance`** - AI prompt skills (natural language instructions)
- **`.jinja`** - NSL template skills (Jinja2 templating with NEWO extensions)
- **`metadata.json`** - Project info (title, description, version, team)
- **`flows.yaml`** - Complete project structure export for external tools
### Customer & Project Identification
- **Customer IDN**: Auto-detected from API response (e.g., `NEWO_ABC123`)
- **Project folders**: Named as `{CustomerIDN}_{ProjectIDN}` for clarity
- **Change tracking**: SHA256 hashes prevent unnecessary uploads
- **Automatic mapping**: `.newo/map.json` maintains NEWO platform relationships
## Key Features
### 🏢 Multi-Customer Support
- **Multiple NEWO accounts** - Work with different customers/organizations
- **Flexible configuration** - JSON arrays, individual env vars, or mixed approaches
- **Customer isolation** - Separate authentication and project spaces
- **Auto-detection** - Customer IDNs automatically resolved from API responses
- **Default customer** - Set preferred customer for streamlined workflows
### 📁 Multi-Project Management
- **Workspace organization** - All accessible projects in structured folders
- **Project metadata** - Complete project info with `metadata.json`
- **Selective sync** - Target specific projects or sync everything
- **Project structure export** - `flows.yaml` for external tooling integration
- **Cross-project operations** - Commands work across entire workspace
### 🔄 Intelligent Synchronization
- **Two-way sync** - Pull from NEWO platform, push local changes back
- **Change detection** - SHA256 hashing prevents unnecessary uploads
- **Incremental sync** - Only modified files are transferred
- **Conflict resolution** - Safe handling of concurrent changes
- **Batch operations** - Efficient bulk file processing
### 🔐 Enterprise Security
- **API key authentication** - Secure token-based authentication
- **Automatic token refresh** - Seamless session management
- **Multi-customer isolation** - Separate auth contexts per customer
- **Environment protection** - Secure credential management
- **Audit logging** - Comprehensive operation tracking
### 🛠️ Developer Experience
- **TypeScript implementation** - Full type safety and IDE support
- **Comprehensive testing** - 500+ test cases with 90%+ coverage
- **Error handling** - User-friendly messages with troubleshooting
- **Verbose debugging** - Detailed logging with `--verbose` flag
- **CI/CD integration** - GitHub Actions workflows included
- **Cross-platform** - Windows, macOS, Linux support
## Robustness & Error Handling
NEWO CLI v1.5.1+ includes comprehensive error handling and validation:
### User-Friendly Error Messages
- **Authentication Errors**: Clear guidance when API keys are invalid or missing
- **Network Issues**: Helpful tips for connection problems and timeouts
- **Configuration Errors**: Step-by-step setup instructions for common issues
- **File System Errors**: Actionable guidance for permission and path problems
### Verbose Debugging
Use the `--verbose` or `-v` flag with any command for detailed technical information:
```bash
npx newo pull --verbose # Detailed pull operation logs
npx newo push -v # Verbose push with full error context
```
### Enhanced Validation
- **API Key Validation**: Format and length validation with specific error messages
- **Token Security**: Automatic sanitization of sensitive data in logs
- **Network Timeouts**: 30-second request timeouts with proper error handling
- **Input Validation**: Comprehensive validation for all user inputs and configuration
### Troubleshooting Tips
When errors occur, NEWO CLI provides:
- 🔍 **Problem diagnosis** with specific error categories
- 💡 **Solution suggestions** for common configuration issues
- 📋 **Step-by-step guidance** for resolving authentication and network problems
- 🔧 **Configuration validation** to ensure proper setup
## 🏗️ Modular Architecture (v2.0+)
**Professional modular design** for maintainability and extensibility:
### CLI Modules (`src/cli/`)
- **`cli.ts`** - Main entry point with command routing (124 lines)
- **`errors.ts`** - Centralized error handling with user-friendly messages
- **`customer-selection.ts`** - Customer management and selection logic
- **`commands/`** - Individual command handlers:
- `pull.ts`, `push.ts`, `status.ts`, `conversations.ts`
- `meta.ts`, `import-akb.ts`, `help.ts`, `list-customers.ts`
### Sync Modules (`src/sync/`)
- **`sync.ts`** - Unified exports and entry point (13 lines)
- **`projects.ts`** - Project sync operations with progress tracking
- **`push.ts`** - Push operations with file validation
- **`status.ts`** - Status checking with multiple file warnings
- **`attributes.ts`** - Customer attributes synchronization
- **`conversations.ts`** - Conversation history management
- **`metadata.ts`** - flows.yaml generation (clean, no prompt_script)
- **`skill-files.ts`** - File validation and IDN-based naming utilities
### Architecture Benefits
- **Single Responsibility** - Each module handles one specific domain
- **Enhanced Testability** - Independent modules with clear interfaces
- **Better Maintainability** - Easy to locate and modify functionality
- **Future-Proof** - Simple to add new commands and sync operations
## CI/CD Integration
### Single Customer CI/CD
```yaml
# .github/workflows/deploy.yml
name: Deploy NEWO Skills
on:
push:
branches: [ main ]
paths:
- 'projects/**/*.guidance'
- 'projects/**/*.jinja'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build && node ./dist/cli.js push
env:
NEWO_BASE_URL: https://app.newo.ai
NEWO_API_KEY: ${{ secrets.NEWO_API_KEY }}
NEWO_PROJECT_ID: ${{ secrets.NEWO_PROJECT_ID }} # Optional
```
### Multi-Customer CI/CD
```yaml
# .github/workflows/deploy-multi.yml
name: Deploy Multi-Customer NEWO Skills
on:
push:
branches: [ main ]
paths:
- 'projects/**/*.guidance'
- 'projects/**/*.jinja'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build && node ./dist/cli.js push
env:
NEWO_BASE_URL: https://app.newo.ai
# Multi-customer API keys as JSON array
NEWO_API_KEYS: ${{ secrets.NEWO_API_KEYS }}
# Example: '["customer1_api_key", "customer2_api_key"]'
# Or individual customer keys
NEWO_CUSTOMER_ACME_API_KEY: ${{ secrets.NEWO_CUSTOMER_ACME_API_KEY }}
NEWO_CUSTOMER_BETA_API_KEY: ${{ secrets.NEWO_CUSTOMER_BETA_API_KEY }}
# Optional default customer
NEWO_DEFAULT_CUSTOMER: ${{ secrets.NEWO_DEFAULT_CUSTOMER }}
```
### GitHub Secrets Setup
Add these secrets to your repository:
**Single Customer:**
- `NEWO_API_KEY` - Your NEWO API key
- `NEWO_PROJECT_ID` - (Optional) Specific project UUID
**Multi-Customer:**
- `NEWO_API_KEYS` - JSON array: `["key1", "key2", "key3"]`
- `NEWO_CUSTOMER_<IDN>_API_KEY` - Individual customer keys
- `NEWO_DEFAULT_CUSTOMER` - (Optional) Default customer IDN
### Advanced CI/CD Workflows
```yaml
# Customer-specific deployment
- name: Deploy to specific customer
run: node ./dist/cli.js push --customer=NEWO_ABC123
# Verbose deployment with logging
- name: Deploy with detailed logs
run: node ./dist/cli.js push --verbose
# Pull before push (sync workflow)
- name: Sync and deploy
run: |
node ./dist/cli.js pull
node ./dist/cli.js push
```
## AKB Import
Import knowledge base articles from structured text files into NEWO personas:
```bash
npx newo import-akb akb.txt da4550db-2b95-4500-91ff-fb4b60fe7be9
```
### AKB File Format
```
# r001
## Category / Subcategory / Description
## Summary description of the category
## Keywords; separated; by; semicolons
<Category type="Category Name">
Item Name: $Price [Modifiers: modifier1, modifier2]
Another Item: $Price [Modifiers: modifier3]
</Category>
```
Each article will be imported with:
- **topic_name**: The descriptive category title
- **source**: The article ID (e.g., "r001")
- **topic_summary**: The full category content with pricing
- **topic_facts**: Array containing category, summary, and keywords
- **confidence**: 100
- **labels**: ["rag_context"]
Use `--verbose` flag to see detailed import progress.
## Examples
### Basic Usage
```bash
# Single customer workflow
newo pull # Download all accessible projects
newo status # See what files are modified
newo push # Upload changes back to NEWO
# Multi-customer workflow
newo list-customers # See configured customers
newo pull --customer=ACME # Pull from specific customer
newo push --customer=BETA # Push to specific customer
```
### Working with Projects
```bash
# Pull specific project
newo pull --project=b78188ba-0df0-46a8-8713-f0d7cff0a06e
# Get project metadata
newo meta --project=b78188ba-0df0-46a8-8713-f0d7cff0a06e
# Verbose operations for debugging
newo pull --verbose
newo push --verbose --customer=ACME
```
### Knowledge Base Import
```bash
# Import AKB articles from structured text file
newo import-akb articles.txt da4550db-2b95-4500-91ff-fb4b60fe7be9
# With verbose output
newo import-akb articles.txt persona_id --verbose
```
## Development
### Prerequisites
- **Node.js 18+** - For runtime environment
- **TypeScript 5.6+** - For type safety and compilation
- **Git** - For version control and CI/CD integration
### Development Setup
```bash
# Clone repository
git clone https://github.com/sabbah13/newo-cli.git
cd newo-cli
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run development commands
npm run dev pull # Build and run pull
npm run dev push # Build and run push
```
### Development Commands
| Command | Description |
|---------|-------------|
| `npm run build` | Compile TypeScript to JavaScript |
| `npm run build:watch` | Watch mode compilation |
| `npm run typecheck` | Type checking without emission |
| `npm run dev <cmd>` | Build and run CLI command |
| `npm test` | Run full test suite |
| `npm run test:unit` | Run unit tests only |
| `npm run test:coverage` | Generate coverage report |
### Makefile Commands
The project includes a comprehensive Makefile for streamlined development:
#### Quick Commands
```bash
make help # Show all available commands
make setup # Initial project setup
make build # Build TypeScript
make test # Run tests
make dev # Development mode
make publish # Publish to GitHub and NPM
```
#### Development Workflow
```bash
make fresh-start # Clean + install + build + test
make dev-pull # Test pull command in development
make dev-push # Test push command in development
make test-local # Comprehensive local testing
```
#### Publishing Workflow
```bash
make pre-publish # Complete validation before publishing
make publish-github # Publish to GitHub with release
make publish-npm # Publish to NPM
make publish # Publish to both platforms
```
#### Quality Assurance
```bash
make typecheck # TypeScript type checking
make lint # Code linting
make check-all # All quality checks
make deps-audit # Security audit
```
### Local Testing
After making changes to the CLI code, proper testing is essential to ensure functionality works correctly.
#### Quick Testing Commands
```bash
# Build and test core functionality
npm run build # Compile TypeScript
node ./dist/cli.js --help # Test CLI loads correctly
node ./dist/cli.js list-customers # Test customer configuration
# Test single customer operations
node ./dist/cli.js pull --customer=CUSTOMER_IDN # Test specific customer pull
node ./dist/cli.js status --customer=CUSTOMER_IDN # Test specific customer status
# Test multi-customer operations (if multiple API keys configured)
node ./dist/cli.js pull # Test auto multi-customer pull
node ./dist/cli.js pull --verbose # Test with detailed logging
```
#### Complete Testing Workflow
1. **Environment Setup**
```bash
# Ensure clean environment
cp .env.example .env
# Edit .env with your API key(s)
```
2. **Build & Syntax Check**
```bash
npm run build # Must complete without TypeScript errors
npm run typecheck # Verify type safety
```
3. **Basic CLI Tests**
```bash
node ./dist/cli.js --help # Should show updated help text
node ./dist/cli.js list-customers # Should show configured customers
```
4. **Authentication Tests**
```bash
# Test API key exchange and token generation
node ./dist/cli.js meta --verbose # Forces authentication
```
5. **Pull Operation Tests**
```bash
# Single customer (if specific customer configured)
node ./dist/cli.js pull --customer=YOUR_CUSTOMER_IDN --verbose
# Multi-customer (if multiple API keys configured)
node ./dist/cli.js pull --verbose # Should pull from all customers
# Check file structure was created correctly
ls -la newo_customers/ # Should show customer folders
```
6. **Status & Push Tests**
```bash
node ./dist/cli.js status --verbose # Should show no changes initially
# Make a test change to a .guidance or .jinja file
echo "# Test comment" >> newo_customers/*/projects/*/*/*/*.guidance
node ./dist/cli.js status # Should detect the change
node ./dist/cli.js push --verbose # Should upload the change
```
#### Testing Multi-Customer Functionality
If you have multiple API keys configured, test the new auto-pull behavior:
```bash
# Test that pull works without specifying customer
node ./dist/cli.js pull # Should pull from ALL customers
# Test individual customer selection still works
node ./dist/cli.js pull --customer=CUSTOMER_A # Should pull from specific customer
node ./dist/cli.js push --customer=CUSTOMER_B # Should push to specific customer
```
#### Common Testing Issues & Solutions
**Issue: "Multiple customers configured but no default specified" error**
- **Cause**: You're using `npx newo` instead of the local build
- **Solution**: Use `node ./dist/cli.js` instead of `npx newo`
**Issue: Changes not reflected in CLI behavior**
- **Cause**: TypeScript not compiled or using cached version
- **Solution**: Run `npm run build` first, then test with `node ./dist/cli.js`
**Issue: Authentication errors during testing**
- **Cause**: Invalid API keys or network issues
- **Solution**: Verify API keys in `.env`, test with `--verbose` flag for details
**Issue: File permission errors**
- **Cause**: Insufficient permissions in project directory
- **Solution**: Ensure write permissions: `chmod 755 .` and check disk space
#### Performance Testing
For testing with large projects or multiple customers:
```bash
# Test with timeout to avoid hanging
timeout 30s node ./dist/cli.js pull --verbose # Should complete or show progress
# Test memory usage
node --max-old-space-size=512 ./dist/cli.js pull # Test with limited memory
```
#### Integration Testing
Test complete workflows that users would actually perform:
```bash
# Complete development workflow
node ./dist/cli.js pull # Download latest
# Edit some .guidance/.jinja files
node ./dist/cli.js status # Check changes
node ./dist/cli.js push # Upload changes
# Multi-customer workflow
node ./dist/cli.js list-customers # See available customers
node ./dist/cli.js pull --customer=CUSTOMER_A # Work with specific customer
# Make changes
node ./dist/cli.js push --customer=CUSTOMER_A # Push to specific customer
```
### Project Architecture
```
src/
├── cli.ts # Main CLI entry point
├── api.ts # NEWO API client
├── auth.ts # Authentication management
├── customer.ts # Multi-customer configuration
├── customerAsync.ts # Async customer operations
├── sync.ts # Project synchronization
├── akb.ts # Knowledge base import
├── types.ts # TypeScript definitions
└── fsutil.ts # File system utilities
test/
├── auth.test.js # Authentication tests
├── customer.test.js # Multi-customer tests
├── sync.test.js # Sync operation tests
├── api.test.js # API client tests
└── integration.test.js # End-to-end tests
```
### Testing
NEWO CLI includes comprehensive test coverage:
- **500+ test cases** covering all major functionality
- **90%+ code coverage** with detailed reporting
- **Multi-customer scenarios** including auth and sync
- **Error handling** validation for edge cases
- **Integration tests** for end-to-end workflows
### TypeScript Features
- **Strict type checking** with comprehensive interfaces
- **Modern ES2022** target with ESNext modules
- **Complete API typing** for all NEWO endpoints
- **Enhanced IntelliSense** support in IDEs
- **Automatic compilation** with source maps
## Publishing & Release Management
The project includes automated scripts for publishing to GitHub and NPM with proper validation and release management.
### Prerequisites for Publishing
1. **GitHub Setup**
```bash
# Ensure GitHub remote is configured
git remote -v # Should show origin pointing to sabbah13/newo-cli
# Install GitHub CLI (optional, for automatic releases)
brew install gh # macOS
# or
sudo apt install gh # Ubuntu
```
2. **NPM Setup**
```bash
# Login to NPM
npm login
npm whoami # Verify you're logged in
```
### Publishing Workflow
#### Option 1: Full Automated Publishing (Recommended)
```bash
# Complete validation and publish to both platforms
make publish
```
This command will:
- Run all tests and quality checks
- Build the project
- Prompt for version bump (patch/minor/major)
- Publish to GitHub with release notes
- Publish to NPM with proper tags
- Verify publication success
#### Option 2: Step-by-Step Publishing
```bash
# 1. Validate everything is ready
make pre-publish
# 2. Publish to GitHub first
make publish-github
# 3. Publish to NPM
make publish-npm
```
#### Option 3: Manual Publishing
```bash
# Run individual scripts
./scripts/publish-github.sh
./scripts/publish-npm.sh
```
### Version Management
Use semantic versioning with the Makefile helpers:
```bash
make version-patch # 1.5.2 → 1.5.3 (bug fixes)
make version-minor # 1.5.2 → 1.6.0 (new features)
make version-major # 1.5.2 → 2.0.0 (breaking changes)
```
### Pre-Release Publishing
For beta/alpha releases:
```bash
# Set pre-release version manually
npm version 1.6.0-beta.1 --no-git-tag-version
# Publish with beta tag
make publish-npm # Automatically detects pre-release and uses beta tag
```
### Publishing Checklist
Before publishing, ensure:
- ✅ All tests pass (`make test`)
- ✅ TypeScript compiles without errors (`make build`)
- ✅ Local testing completed (`make test-local`)
- ✅ Documentation is up to date
- ✅ CHANGELOG.md is updated (if exists)
- ✅ Version number is appropriate
- ✅ No uncommitted changes (or committed)
### Automated Validation
The publish scripts include comprehensive validation:
- **TypeScript compilation** and type checking
- **Test suite execution** with coverage requirements
- **Package size analysis** and content verification
- **Authentication verification** for GitHub and NPM
- **Version conflict detection** to prevent duplicate publishes
- **Security audit** of dependencies
### GitHub Release Features
The GitHub publish script automatically:
- Creates semantic version tags (`v1.5.3`)
- Generates comprehensive release notes
- Marks releases as "latest" on GitHub
- Links to NPM package and documentation
- Includes installation instructions
### NPM Package Features
The NPM publish script ensures:
- Proper package.json validation
- Binary CLI availability verification
- File inclusion/exclusion validation
- Pre-release tag detection (`beta`, `alpha`, `rc`)
- Post-publish verification
### Rollback Procedures
If issues are discovered after publishing:
**NPM Rollback:**
```bash
# Deprecate problematic version
npm deprecate newo@1.5.3 "Version has known issues, use 1.5.2 instead"
# Publish fixed version immediately
make version-patch
make publish-npm
```
**GitHub Rollback:**
```bash
# Delete tag and release (if needed)
git tag -d v1.5.3
git push origin :refs/tags/v1.5.3
gh release delete v1.5.3
```
### Monitoring Post-Publication
After publishing, monitor:
- **NPM downloads**: https://npmjs.com/package/newo
- **GitHub releases**: https://github.com/sabbah13/newo-cli/releases
- **Issue reports**: https://github.com/sabbah13/newo-cli/issues
- **Badge updates**: README badges should reflect new version
## Contributing
We welcome contributions to NEWO CLI! Here's how to get involved:
### Reporting Issues
- **Bug reports**: Use [GitHub Issues](https://github.com/sabbah13/newo-cli/issues)
- **Feature requests**: Describe your use case and proposed solution
- **Security issues**: Email security@newo.ai for private disclosure
### Development Workflow
1. **Fork** the repository
2. **Create** a feature branch: `git checkout -b feature/amazing-feature`
3. **Write tests** for new functionality
4. **Ensure** all tests pass: `npm test`
5. **Commit** with clear messages: `git commit -m 'feat: add amazing feature'`
6. **Push** to branch: `git push origin feature/amazing-feature`
7. **Create** a Pull Request
### Code Standards
- **TypeScript** for all source code
- **Comprehensive tests** for new features
- **JSDoc comments** for public APIs
- **Semantic versioning** for releases
- **Conventional commits** for clear history
## API Reference
NEWO CLI integrates with these NEWO platform endpoints:
### Authentication
- `POST /api/v1/auth/api-key/token` - Exchange API key for access tokens
### Project Management
- `GET /api/v1/designer/projects` - List all accessible projects
- `GET /api/v1/designer/projects/by-id/{projectId}` - Get project metadata
- `GET /api/v1/bff/agents/list?project_id=...` - List project agents
### Skills & Flows
- `GET /api/v1/designer/flows/{flowId}/skills` - List skills in flow
- `GET /api/v1/designer/skills/{skillId}` - Get skill content
- `PUT /api/v1/designer/flows/skills/{skillId}` - Update skill content
- `GET /api/v1/designer/flows/{flowId}/events` - List flow events
- `GET /api/v1/designer/flows/{flowId}/states` - List flow states
### Knowledge Base
- `POST /api/v1/akb/append-manual` - Import AKB articles to persona
## License
**MIT License** - see [LICENSE](LICENSE) file for details.
## Support
- 📖 **Documentation**: [GitHub Repository](https://github.com/sabbah13/newo-cli)
- 🐛 **Bug Reports**: [GitHub Issues](https://github.com/sabbah13/newo-cli/issues)
- 💬 **Discussions**: [GitHub Discussions](https://github.com/sabbah13/newo-cli/discussions)
- 📧 **Email**: support@newo.ai
**Built with ❤️ by the NEWO team**