Skip to content

CLI: add remote API commands for Data API and Metadata API #1058

@hotlong

Description

@hotlong

Background

The current CLI (@objectstack/cli) has 16 top-level commands + 8 subcommands, but nearly all are local-only operations (compile, validate, generate, serve, etc.). The platform defines 80+ API endpoints across 13+ domains, yet the CLI only makes 1 remote API call (plugin publishPOST /packages/upload).

This issue tracks adding CLI commands that call the remote Data API and Metadata API, enabling developers to interact with a running ObjectStack server from the terminal.

Current Coverage

API Domain Endpoints CLI Coverage
Data CRUD (/data) 5 None (only generated SDK)
Data Batch (/data/:object/batch) 4 None
Data Export (/data/:object/export) 2 None
Metadata CRUD (/meta) 10 None
Metadata Query (/meta/query) 1 None
Metadata Bulk (/meta/bulk) 2 None
Metadata Overlay (/meta/:type/:name/overlay) 2 None
Metadata Import/Export (/meta/export, /meta/import) 2 None
Metadata Validate (/meta/validate) 1 Local only (validate command)
Metadata Dependencies (/meta/:type/:name/dependencies) 2 None
Auth (/auth) 14 None
Permission (/auth/check) 3 None
UI Views (/ui/views) 5 None
Workflow (/workflow) 5 None
Realtime (/realtime) 6 None
Notifications (/notifications) 7 None
AI (/ai) 3 None
i18n (/i18n) 3 None
Analytics (/analytics) 2 None
Automation (/automation) 9 None
Storage (/storage) 6 None
Packages (/packages) 8 1 (plugin publish)
Feed / Chatter (/data/:obj/:id/feed) 14 None
Discovery (/discovery) 1 None

Proposed Commands (Priority Order)

P0 — Core

  • os data query <object> — Query records (GET /api/v1/data/:object)
  • os data get <object> <id> — Get single record (GET /api/v1/data/:object/:id)
  • os data create <object> — Create record (POST /api/v1/data/:object)
  • os data update <object> <id> — Update record (PATCH /api/v1/data/:object/:id)
  • os data delete <object> <id> — Delete record (DELETE /api/v1/data/:object/:id)
  • os meta list [type] — List metadata types or items (GET /api/v1/meta, GET /api/v1/meta/:type)
  • os meta get <type> <name> — Get metadata item (GET /api/v1/meta/:type/:name)
  • os meta register <type> — Register metadata (POST /api/v1/meta/:type)
  • os meta delete <type> <name> — Delete metadata (DELETE /api/v1/meta/:type/:name)
  • os auth login — Authenticate and store session/token
  • os auth logout — Clear stored credentials
  • os auth whoami — Show current session info (GET /auth/get-session)

P1 — Deployment & Metadata Lifecycle

  • os meta export — Export metadata bundle (POST /api/v1/meta/export)
  • os meta import — Import metadata bundle (POST /api/v1/meta/import)
  • os meta validate — Remote validation (POST /api/v1/meta/validate)
  • os meta deps <type> <name> — Show dependencies (GET /api/v1/meta/:type/:name/dependencies)
  • os deploy — Deploy metadata to target environment (combine export + import)
  • os package install — Install package (POST /api/v1/packages/install)
  • os package upgrade — Upgrade package (POST /api/v1/packages/upgrade)
  • os package list — List installed packages (GET /api/v1/packages)
  • os package rollback — Rollback package (POST /api/v1/packages/:id/rollback)

P2 — Extended Operations

  • os data export <object> — Export data (POST /api/v1/data/:object/export)
  • os data import <object> — Bulk create from file (POST /api/v1/data/:object/createMany)
  • os automation list — List automation flows (GET /api/automation)
  • os automation trigger <name> — Trigger a flow (POST /api/automation/:name/trigger)
  • os automation toggle <name> — Enable/disable flow (POST /api/automation/:name/toggle)
  • os discover — Service discovery & health check (GET /api/v1/discovery)

P3 — Nice to Have

  • os ai query — Natural language query (POST /api/v1/ai/nlq)
  • os storage upload — Upload file (POST /api/v1/storage/upload)
  • os analytics query — Run analytics query (POST /api/v1/analytics/query)
  • os i18n — Get translations (GET /api/v1/i18n/translations/:locale)

Common Infrastructure Needed

All remote commands will need:

  1. Server URL resolution--url flag or OBJECTSTACK_URL env var (default: http://localhost:3000)
  2. Authentication — Bearer token from os auth login, stored in ~/.objectstack/credentials.json or OS keychain
  3. Output formatting--format json|table|yaml flag for all data commands
  4. Error handling — Consistent HTTP error → CLI error mapping

Reference

  • API spec definitions: packages/spec/src/api/plugin-rest-api.zod.ts
  • Metadata API schemas: packages/spec/src/api/metadata.zod.ts
  • OpenAPI spec: packages/spec/json-schema/openapi.json
  • Current CLI commands: packages/cli/src/commands/

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions