nepher-cli 0.2.0__tar.gz

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.
@@ -0,0 +1,8 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .ruff_cache/
5
+ .pytest_cache/
6
+ *.egg-info/
7
+ dist/
8
+ build/
@@ -0,0 +1,193 @@
1
+ Metadata-Version: 2.4
2
+ Name: nepher-cli
3
+ Version: 0.2.0
4
+ Summary: npcli — unified Nepher command-line interface for accounts, hackathons, EnvHub, tournaments, and SimStore
5
+ Project-URL: Homepage, https://github.com/nepher-ai/nepher-cli
6
+ Author: Nepher
7
+ License: MIT
8
+ Keywords: bittensor,cli,envhub,hackathon,nepher,subnet,tournament
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.10
17
+ Requires-Dist: click>=8.1.0
18
+ Requires-Dist: httpx>=0.27.0
19
+ Requires-Dist: keyring>=25.0.0
20
+ Requires-Dist: platformdirs>=4.0.0
21
+ Requires-Dist: rich>=13.7.0
22
+ Provides-Extra: bittensor
23
+ Requires-Dist: bittensor; extra == 'bittensor'
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
26
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
27
+ Description-Content-Type: text/markdown
28
+
29
+ # nepher-cli
30
+
31
+ The unified CLI for [Nepher Robotics](https://nepher.ai) — accounts, hackathons, EnvHub, tournaments, and SimStore from a single tool.
32
+
33
+ **Requires:** Python 3.10+
34
+
35
+ ## Install
36
+
37
+ ```bash
38
+ pip install nepher-cli
39
+ ```
40
+
41
+ Both `npcli` and `nepher-cli` entry points are registered after install.
42
+
43
+ ```bash
44
+ npcli --version
45
+ npcli --help
46
+ ```
47
+
48
+ ## Commands
49
+
50
+ | Command / Group | Description |
51
+ |-----------------|-------------|
52
+ | `npcli login` | Log in with a Nepher API key |
53
+ | `npcli whoami` | Show the currently authenticated user |
54
+ | `npcli logout` | Clear locally stored credentials |
55
+ | `npcli account` | API keys and coldkey registration |
56
+ | `npcli tournament` | Browse tournaments, submit agents, leaderboards |
57
+ | `npcli envhub` | Manage Isaac Lab environment bundles |
58
+ | `npcli hackathon` | Browse and submit to hackathons |
59
+ | `npcli simstore` | SimStore marketplace *(coming soon)* |
60
+
61
+ ## Quick Start
62
+
63
+ ### Authenticate
64
+
65
+ ```bash
66
+ npcli login --api-key nepher_xxxxxxxx
67
+ npcli whoami
68
+ npcli logout
69
+ ```
70
+
71
+ Get your API key at [account.nepher.ai](https://account.nepher.ai) → Account → API Keys.
72
+ For CI/CD, set `NEPHER_API_KEY=nepher_xxxxxxxx` instead of logging in.
73
+
74
+ ### Tournaments
75
+
76
+ ```bash
77
+ npcli tournament list
78
+ npcli tournament list-active
79
+ npcli tournament status <tournament_id>
80
+ npcli tournament leaderboard <tournament_id>
81
+ ```
82
+
83
+ Check your agent directory structure (no extra dependencies needed):
84
+
85
+ ```bash
86
+ npcli tournament check --path ./my-agent
87
+ npcli tournament check --path ./my-agent --verbose # also show recommended-file warnings
88
+ ```
89
+
90
+ Submit an agent (requires `bittensor` for wallet signing):
91
+
92
+ ```bash
93
+ pip install bittensor
94
+ # or: pip install "nepher-cli[bittensor]"
95
+ ```
96
+
97
+ ```bash
98
+ npcli tournament submit --path ./my-agent --wallet-name miner --wallet-hotkey default
99
+ ```
100
+
101
+ Full options for `submit`:
102
+
103
+ ```
104
+ --path <path> Agent directory
105
+ --wallet-name <str> Bittensor wallet name (default: miner)
106
+ --wallet-hotkey <str> Bittensor wallet hotkey (default: default)
107
+ --api-key <key> Nepher API key (falls back to stored credentials)
108
+ --tournament-id <id> Target tournament ID (required when multiple are active)
109
+ --api-url <url> Override tournament API URL
110
+ -v / --verbose Verbose output
111
+ ```
112
+
113
+ ### EnvHub
114
+
115
+ ```bash
116
+ npcli envhub list
117
+ npcli envhub download <env_id>
118
+ npcli envhub upload ./my-bundle --category navigation
119
+ npcli envhub cache list
120
+ npcli envhub cache info
121
+ npcli envhub cache clear
122
+ ```
123
+
124
+ ### Hackathons
125
+
126
+ ```bash
127
+ npcli hackathon list
128
+
129
+ npcli hackathon submit \
130
+ --title "My entry" \
131
+ --submission ./my-project \
132
+ --assets ./my-assets
133
+ ```
134
+
135
+ Full options:
136
+
137
+ ```
138
+ --hackathon-id <uuid> Required when multiple hackathons are open
139
+ --title <str> Entry title
140
+ --description <markdown> Entry description
141
+ --thumbnail <file> Cover image (JPEG, PNG, WebP, GIF)
142
+ --submission <path> Project folder or submission.zip
143
+ --assets <path> Assets folder or assets.zip (images, videos, PDFs)
144
+ --public-source Mark source as public
145
+ ```
146
+
147
+ ### API Keys
148
+
149
+ ```bash
150
+ npcli account api-keys list
151
+ npcli account api-keys create --name "CI key" --platform hackertone
152
+ npcli account api-keys revoke <key_id>
153
+ ```
154
+
155
+ ### Coldkey Registration
156
+
157
+ Bind a Bittensor coldkey to your account (requires `bittensor` + `btcli` on PATH):
158
+
159
+ ```bash
160
+ pip install bittensor
161
+ npcli account register-coldkey --wallet <wallet_name>
162
+ ```
163
+
164
+ ## API Key Requirements
165
+
166
+ - Must start with `nepher_`
167
+ - Must be active and not expired
168
+ - `hackathon submit` requires **Hackathon** scope (or an unrestricted key)
169
+ - `tournament submit` requires **Tournament** scope (or an unrestricted key)
170
+
171
+ ## Troubleshooting
172
+
173
+ | Error | Fix |
174
+ |-------|-----|
175
+ | `npcli: command not found` | Ensure `pip install` succeeded and Python scripts dir is on `PATH` |
176
+ | `invalid api key format` | Key must start with `nepher_` |
177
+ | `api key does not have hackathon access` | Enable Hackathon scope or use an unrestricted key |
178
+ | `api key expired` | Run `npcli account api-keys create` |
179
+ | `Several hackathons are accepting submissions` | Re-run with `--hackathon-id` |
180
+ | `bittensor not installed` | `pip install bittensor` (only needed for `tournament submit`) |
181
+ | `Not logged in` | `npcli login --api-key nepher_...` |
182
+
183
+ Run any command with `--help` for full flag details:
184
+
185
+ ```bash
186
+ npcli --help
187
+ npcli hackathon submit --help
188
+ npcli tournament submit --help
189
+ ```
190
+
191
+ ## License
192
+
193
+ MIT
@@ -0,0 +1,165 @@
1
+ # nepher-cli
2
+
3
+ The unified CLI for [Nepher Robotics](https://nepher.ai) — accounts, hackathons, EnvHub, tournaments, and SimStore from a single tool.
4
+
5
+ **Requires:** Python 3.10+
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pip install nepher-cli
11
+ ```
12
+
13
+ Both `npcli` and `nepher-cli` entry points are registered after install.
14
+
15
+ ```bash
16
+ npcli --version
17
+ npcli --help
18
+ ```
19
+
20
+ ## Commands
21
+
22
+ | Command / Group | Description |
23
+ |-----------------|-------------|
24
+ | `npcli login` | Log in with a Nepher API key |
25
+ | `npcli whoami` | Show the currently authenticated user |
26
+ | `npcli logout` | Clear locally stored credentials |
27
+ | `npcli account` | API keys and coldkey registration |
28
+ | `npcli tournament` | Browse tournaments, submit agents, leaderboards |
29
+ | `npcli envhub` | Manage Isaac Lab environment bundles |
30
+ | `npcli hackathon` | Browse and submit to hackathons |
31
+ | `npcli simstore` | SimStore marketplace *(coming soon)* |
32
+
33
+ ## Quick Start
34
+
35
+ ### Authenticate
36
+
37
+ ```bash
38
+ npcli login --api-key nepher_xxxxxxxx
39
+ npcli whoami
40
+ npcli logout
41
+ ```
42
+
43
+ Get your API key at [account.nepher.ai](https://account.nepher.ai) → Account → API Keys.
44
+ For CI/CD, set `NEPHER_API_KEY=nepher_xxxxxxxx` instead of logging in.
45
+
46
+ ### Tournaments
47
+
48
+ ```bash
49
+ npcli tournament list
50
+ npcli tournament list-active
51
+ npcli tournament status <tournament_id>
52
+ npcli tournament leaderboard <tournament_id>
53
+ ```
54
+
55
+ Check your agent directory structure (no extra dependencies needed):
56
+
57
+ ```bash
58
+ npcli tournament check --path ./my-agent
59
+ npcli tournament check --path ./my-agent --verbose # also show recommended-file warnings
60
+ ```
61
+
62
+ Submit an agent (requires `bittensor` for wallet signing):
63
+
64
+ ```bash
65
+ pip install bittensor
66
+ # or: pip install "nepher-cli[bittensor]"
67
+ ```
68
+
69
+ ```bash
70
+ npcli tournament submit --path ./my-agent --wallet-name miner --wallet-hotkey default
71
+ ```
72
+
73
+ Full options for `submit`:
74
+
75
+ ```
76
+ --path <path> Agent directory
77
+ --wallet-name <str> Bittensor wallet name (default: miner)
78
+ --wallet-hotkey <str> Bittensor wallet hotkey (default: default)
79
+ --api-key <key> Nepher API key (falls back to stored credentials)
80
+ --tournament-id <id> Target tournament ID (required when multiple are active)
81
+ --api-url <url> Override tournament API URL
82
+ -v / --verbose Verbose output
83
+ ```
84
+
85
+ ### EnvHub
86
+
87
+ ```bash
88
+ npcli envhub list
89
+ npcli envhub download <env_id>
90
+ npcli envhub upload ./my-bundle --category navigation
91
+ npcli envhub cache list
92
+ npcli envhub cache info
93
+ npcli envhub cache clear
94
+ ```
95
+
96
+ ### Hackathons
97
+
98
+ ```bash
99
+ npcli hackathon list
100
+
101
+ npcli hackathon submit \
102
+ --title "My entry" \
103
+ --submission ./my-project \
104
+ --assets ./my-assets
105
+ ```
106
+
107
+ Full options:
108
+
109
+ ```
110
+ --hackathon-id <uuid> Required when multiple hackathons are open
111
+ --title <str> Entry title
112
+ --description <markdown> Entry description
113
+ --thumbnail <file> Cover image (JPEG, PNG, WebP, GIF)
114
+ --submission <path> Project folder or submission.zip
115
+ --assets <path> Assets folder or assets.zip (images, videos, PDFs)
116
+ --public-source Mark source as public
117
+ ```
118
+
119
+ ### API Keys
120
+
121
+ ```bash
122
+ npcli account api-keys list
123
+ npcli account api-keys create --name "CI key" --platform hackertone
124
+ npcli account api-keys revoke <key_id>
125
+ ```
126
+
127
+ ### Coldkey Registration
128
+
129
+ Bind a Bittensor coldkey to your account (requires `bittensor` + `btcli` on PATH):
130
+
131
+ ```bash
132
+ pip install bittensor
133
+ npcli account register-coldkey --wallet <wallet_name>
134
+ ```
135
+
136
+ ## API Key Requirements
137
+
138
+ - Must start with `nepher_`
139
+ - Must be active and not expired
140
+ - `hackathon submit` requires **Hackathon** scope (or an unrestricted key)
141
+ - `tournament submit` requires **Tournament** scope (or an unrestricted key)
142
+
143
+ ## Troubleshooting
144
+
145
+ | Error | Fix |
146
+ |-------|-----|
147
+ | `npcli: command not found` | Ensure `pip install` succeeded and Python scripts dir is on `PATH` |
148
+ | `invalid api key format` | Key must start with `nepher_` |
149
+ | `api key does not have hackathon access` | Enable Hackathon scope or use an unrestricted key |
150
+ | `api key expired` | Run `npcli account api-keys create` |
151
+ | `Several hackathons are accepting submissions` | Re-run with `--hackathon-id` |
152
+ | `bittensor not installed` | `pip install bittensor` (only needed for `tournament submit`) |
153
+ | `Not logged in` | `npcli login --api-key nepher_...` |
154
+
155
+ Run any command with `--help` for full flag details:
156
+
157
+ ```bash
158
+ npcli --help
159
+ npcli hackathon submit --help
160
+ npcli tournament submit --help
161
+ ```
162
+
163
+ ## License
164
+
165
+ MIT
@@ -0,0 +1,60 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "nepher-cli"
7
+ version = "0.2.0"
8
+ description = "npcli — unified Nepher command-line interface for accounts, hackathons, EnvHub, tournaments, and SimStore"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Nepher" }]
13
+ keywords = ["nepher", "bittensor", "hackathon", "envhub", "cli", "tournament", "subnet"]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Environment :: Console",
17
+ "Intended Audience :: Developers",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ ]
23
+ dependencies = [
24
+ "httpx>=0.27.0",
25
+ "rich>=13.7.0",
26
+ "click>=8.1.0",
27
+ "keyring>=25.0.0",
28
+ "platformdirs>=4.0.0",
29
+ ]
30
+
31
+ [project.optional-dependencies]
32
+ bittensor = ["bittensor"]
33
+ dev = [
34
+ "pytest>=8.0.0",
35
+ "ruff>=0.4.0",
36
+ ]
37
+
38
+ [project.scripts]
39
+ npcli = "nepher_cli.cli:main"
40
+ nepher-cli = "nepher_cli.cli:main"
41
+
42
+ [project.urls]
43
+ Homepage = "https://github.com/nepher-ai/nepher-cli"
44
+
45
+ [tool.hatch.build.targets.wheel]
46
+ packages = ["src/nepher_cli"]
47
+
48
+ [tool.hatch.build.targets.sdist]
49
+ include = ["src/nepher_cli", "README.md", "pyproject.toml"]
50
+
51
+ [tool.ruff]
52
+ line-length = 100
53
+ target-version = "py310"
54
+
55
+ [tool.ruff.lint]
56
+ select = ["E", "F", "I", "UP", "B"]
57
+
58
+ [tool.pytest.ini_options]
59
+ testpaths = ["tests"]
60
+ pythonpath = ["src"]
@@ -0,0 +1,3 @@
1
+ """npcli — unified Nepher command-line interface."""
2
+
3
+ __version__ = "0.2.0"
@@ -0,0 +1,4 @@
1
+ from nepher_cli.cli import main
2
+
3
+ if __name__ == "__main__":
4
+ raise SystemExit(main())
@@ -0,0 +1,59 @@
1
+ """npcli — unified Nepher command-line interface."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import click
6
+
7
+ from nepher_cli import __version__
8
+ from nepher_cli.commands.account import account, cmd_login, cmd_logout, cmd_whoami
9
+ from nepher_cli.commands.envhub import envhub
10
+ from nepher_cli.commands.hackathon import hackathon
11
+ from nepher_cli.commands.simstore import simstore
12
+ from nepher_cli.commands.tournament import tournament
13
+
14
+
15
+ @click.group(
16
+ context_settings={"help_option_names": ["-h", "--help"], "max_content_width": 100},
17
+ )
18
+ @click.version_option(version=__version__, prog_name="npcli")
19
+ def main() -> None:
20
+ """npcli — the unified Nepher command-line interface.
21
+
22
+ Provides centralized access to all Nepher sub-platforms:
23
+
24
+ \b
25
+ login Log in with a Nepher API key
26
+ whoami Show the currently authenticated user
27
+ logout Clear locally stored credentials
28
+ account API keys and coldkey registration
29
+ tournament Browse tournaments, submit agents, leaderboards
30
+ envhub Manage Isaac Lab environment bundles
31
+ hackathon Browse and submit to hackathons
32
+ simstore SimStore marketplace (coming soon)
33
+
34
+ \b
35
+ Quick start:
36
+ npcli login --api-key nepher_xxxxxxxx
37
+ npcli whoami
38
+ npcli hackathon list
39
+ npcli envhub list
40
+ npcli tournament list
41
+
42
+ Run any sub-command with --help for details and examples.
43
+
44
+ API keys are created at https://account.nepher.ai (Account > API Keys).
45
+ """
46
+
47
+
48
+ main.add_command(cmd_login, name="login")
49
+ main.add_command(cmd_logout, name="logout")
50
+ main.add_command(cmd_whoami, name="whoami")
51
+ main.add_command(account)
52
+ main.add_command(tournament)
53
+ main.add_command(envhub)
54
+ main.add_command(hackathon)
55
+ main.add_command(simstore)
56
+
57
+
58
+ if __name__ == "__main__":
59
+ raise SystemExit(main())
@@ -0,0 +1 @@
1
+ """npcli command groups."""