Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- **CLI: Remote API Commands** - Added 12 new CLI commands for interacting with remote ObjectStack servers:
- **Authentication**: `os auth login`, `os auth logout`, `os auth whoami`
- **Data API**: `os data query`, `os data get`, `os data create`, `os data update`, `os data delete`
- **Metadata API**: `os meta list`, `os meta get`, `os meta register`, `os meta delete`
- All commands support `--url` and `--token` flags, or use stored credentials from `~/.objectstack/credentials.json`
- Multiple output formats: `--format json|table|yaml` (yaml available on all commands)
- Environment variable support: `OBJECTSTACK_URL`, `OBJECTSTACK_TOKEN`
Comment on lines +16 to +18
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CHANGELOG claims multiple output formats --format json|table|yaml, but several new commands only allow json|table (e.g., data delete, meta register, meta delete). Either expand those commands to support yaml or adjust this entry to reflect the actual supported formats to avoid misleading users.

Copilot uses AI. Check for mistakes.
- See [REMOTE_API_COMMANDS.md](./REMOTE_API_COMMANDS.md) for full documentation

### Changed
- **i18n: `I18nLabelSchema` now accepts `string` only** — `label`, `description`, `title`,
and other display-text fields across all UI schemas (`AppSchema`, `NavigationArea`,
Expand Down
197 changes: 197 additions & 0 deletions REMOTE_API_COMMANDS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# Remote API Commands

The ObjectStack CLI now includes commands to interact with a running ObjectStack server via its REST APIs.

## Authentication

Before using remote API commands, you need to authenticate:

```bash
# Login and store credentials
os auth login --url https://api.example.com

# Show current session
os auth whoami

# Logout (clear stored credentials)
os auth logout
```

Credentials are stored in `~/.objectstack/credentials.json` and automatically used for subsequent commands.

Alternatively, you can provide credentials via environment variables or flags:

```bash
# Using environment variables
export OBJECTSTACK_URL=https://api.example.com
export OBJECTSTACK_TOKEN=your-token-here

# Using flags
os data query project_task --url https://api.example.com --token your-token-here
```

## Data API Commands

### Query Records

```bash
# Query all records
os data query project_task

# Filter records
os data query project_task --filter '{"status":"open"}'

# Limit and pagination
os data query project_task --limit 10 --offset 0

# Select specific fields
os data query project_task --fields name,status,created_at

# Sort results
os data query project_task --sort -created_at # descending
os data query project_task --sort created_at # ascending

# Output formats
os data query project_task --format json
os data query project_task --format yaml
os data query project_task --format table # default
```

### Get a Single Record

```bash
os data get project_task abc123
os data get project_task abc123 --format json
```

### Create a Record

```bash
# From JSON string
os data create project_task '{"name":"New Task","status":"open"}'

# From JSON file
os data create project_task --data task.json
```

### Update a Record

```bash
# From JSON string
os data update project_task abc123 '{"status":"completed"}'

# From JSON file
os data update project_task abc123 --data update.json
```

### Delete a Record

```bash
os data delete project_task abc123
```

## Metadata API Commands

### List Metadata Types

```bash
# List all available metadata types
os meta list

# List items of a specific type
os meta list object
os meta list plugin
os meta list view
```

### Get Metadata Item

```bash
os meta get object project_task
os meta get plugin my-plugin --format json
```

### Register Metadata

```bash
# Register from JSON file
os meta register object --data object-definition.json
os meta register plugin --data plugin-manifest.json
```

The metadata file must include a `name` field:

```json
{
"name": "my_custom_object",
"label": "My Custom Object",
"fields": {
"name": {
"type": "text",
"label": "Name"
}
}
}
```

### Delete Metadata

```bash
os meta delete object my_custom_object
os meta delete plugin my-plugin
```

## Output Formats

Most commands support multiple output formats via the `--format` flag:

- `json` - Machine-readable JSON output
- `yaml` - Human-readable YAML output
- `table` - Formatted table output (default for most commands)

## Environment Variables

The following environment variables are supported:

- `OBJECTSTACK_URL` - Default server URL (default: `http://localhost:3000`)
- `OBJECTSTACK_TOKEN` - Authentication token (alternative to `os auth login`)

## Examples

### Complete Workflow

```bash
# 1. Login
os auth login --url https://api.example.com
Email: user@example.com
Password: ********

# 2. Query data
os data query project_task --filter '{"status":"open"}' --limit 5

# 3. Create a new record
os data create project_task '{"name":"Implement feature","status":"open","priority":"high"}'

# 4. Update the record
os data update project_task abc123 '{"status":"in_progress"}'

# 5. List metadata
os meta list object

# 6. Get object definition
os meta get object project_task --format yaml
```

### CI/CD Integration

```bash
# Use token authentication in CI/CD pipelines
export OBJECTSTACK_URL=https://api.production.com
export OBJECTSTACK_TOKEN=${{ secrets.OBJECTSTACK_TOKEN }}

# Deploy metadata
os meta register object --data objects/project_task.json

# Verify deployment
os meta get object project_task --format json
```
2 changes: 2 additions & 0 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
},
"dependencies": {
"@ai-sdk/gateway": "^3.0.84",
"@objectstack/client": "workspace:*",
"@objectstack/core": "workspace:*",
"@objectstack/driver-memory": "workspace:^",
"@objectstack/objectql": "workspace:^",
Expand All @@ -54,6 +55,7 @@
"chalk": "^5.6.2",
"dotenv-flow": "^4.1.0",
"tsx": "^4.21.0",
"yaml": "^2.4.1",
"zod": "^4.3.6"
},
"peerDependencies": {
Expand Down
Loading