Metadata-Version: 2.4
Name: hap-cli
Version: 0.5.0
Summary: CLI harness for MingDAO HAP - Enterprise no-code platform
Author: hap-cli
License: Apache-2.0
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: click>=8.0
Requires-Dist: requests>=2.28
Provides-Extra: crypto
Requires-Dist: pycryptodome>=3.15; extra == "crypto"
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: license
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# hap-cli

CLI harness for **MingDAO HAP** (明道云) - an enterprise no-code platform (hap).

## Installation

```bash
pip install -e .
```

## Quick Start

### 1. Login

**Option A: Browser login (recommended)**

```bash
# MingDAO SaaS (default)
hap config login

# Specify server
hap config login mingdao    # MingDAO
hap config login nocoly     # Nocoly
hap config login https://hap.example.com   # Self-hosted
```

Opens your browser to the MingDAO login page. Token is saved automatically after login.

**Option B: Manual token**

```bash
hap config set \
  --server https://your-mingdao-server.com \
  --token YOUR_MD_PSS_ID_TOKEN \
  --app-id YOUR_DEFAULT_APP_ID \
  --project-id YOUR_PROJECT_ID
```

**Other auth commands**

```bash
hap config whoami    # Show current user info
hap config logout    # Clear saved token
```

### 2. List worksheets

```bash
hap app worksheets
```

### 3. Query records

```bash
hap record list WORKSHEET_ID --page-size 10
```

### 4. JSON output (for automation)

```bash
hap --json record list WORKSHEET_ID
```

## Command Groups

| Group | Description |
|-------|-------------|
| `config` | Server connection and auth |
| `app` | Application management |
| `worksheet` | Worksheet info, fields, views |
| `record` | Record CRUD (list, get, create, update, delete) |
| `workflow` | Process lifecycle (create, update, publish, trigger, rollback, config) |
| `node` | Node management (add, delete, save config, test code/webhook/AI) |
| `instance` | Approval & todo (approve, reject, forward, sign, batch, history) |
| `role` | Role management and members |
| `repl` | Interactive REPL mode |

## Workflow Management

```bash
# Create a workflow
hap workflow create --company-id CID --name "My Flow" --app-id APP_ID

# Add an approval node
hap node add PROCESS_ID --type 4 --name "Manager Approval"

# Configure the node
hap node save PROCESS_ID NODE_ID --type 4 --config '{"accounts":[...]}'

# Test a code node
hap node test-code PROCESS_ID NODE_ID --code "return 1+1"

# Test a webhook node
hap node test-webhook PROCESS_ID NODE_ID --url https://api.example.com

# Publish the workflow
hap workflow publish PROCESS_ID

# Trigger it
hap workflow trigger PROCESS_ID --source-id ROW_ID

# Check version history
hap workflow history PROCESS_ID

# Rollback to previous version
hap workflow rollback PROCESS_ID

# Get/set global config
hap workflow config-get PROCESS_ID
hap workflow config-set PROCESS_ID --config '{"allowRevoke":true}'
```

## Approval & Todo

```bash
# Check pending task count
hap instance todo-count

# List pending approval tasks
hap instance todo --type 4

# View instance detail
hap instance get INSTANCE_ID

# Approve
hap instance approve INSTANCE_ID --opinion "Looks good"

# Reject with reason
hap instance reject INSTANCE_ID --opinion "Need revision"

# Forward to another user
hap instance forward INSTANCE_ID --to USER_ID

# Add co-signer
hap instance sign INSTANCE_ID --to USER_ID --before

# Batch approve
hap instance batch --action 4 -s ID1 -s ID2

# View execution history
hap instance history --process-id PROCESS_ID --status 2
```

## REPL Mode

```bash
hap repl
hap> record list WORKSHEET_ID
hap> --json workflow list APP_ID
hap> instance todo-count
hap> quit
```

## API Authentication

The CLI uses MingDAO's `md_pss_id` session token. Use `hap config login` for
browser-based login, or `hap config set --token TOKEN` to set the token manually.

For private deployments with encrypted API responses, install crypto support:

```bash
pip install hap-cli[crypto]
```

## More Examples

```bash
# List apps
hap app list --project-id PROJECT_ID

# Get worksheet fields
hap worksheet fields WORKSHEET_ID

# Create a record
hap record create WORKSHEET_ID -f "c001=value1" -f "c002=value2"

# Copy a workflow
hap workflow copy PROCESS_ID --name "Copy of Flow"

# Move workflow to another app
hap workflow move PROCESS_ID TARGET_APP_ID

# List code templates
hap node code-templates --keyword "email"

# Test AI node
hap node test-ai PROCESS_ID NODE_ID --prompt "Summarize this" --model gpt-4

# Terminate a stuck instance
hap instance terminate INSTANCE_ID --yes

# Retry a failed instance
hap instance retry INSTANCE_ID
```
