portworld 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.
- portworld-0.2.0/LICENSE +21 -0
- portworld-0.2.0/MANIFEST.in +4 -0
- portworld-0.2.0/PKG-INFO +242 -0
- portworld-0.2.0/README.md +208 -0
- portworld-0.2.0/portworld.egg-info/PKG-INFO +242 -0
- portworld-0.2.0/portworld.egg-info/SOURCES.txt +161 -0
- portworld-0.2.0/portworld.egg-info/dependency_links.txt +1 -0
- portworld-0.2.0/portworld.egg-info/entry_points.txt +2 -0
- portworld-0.2.0/portworld.egg-info/requires.txt +35 -0
- portworld-0.2.0/portworld.egg-info/top_level.txt +2 -0
- portworld-0.2.0/portworld_cli/README.md +180 -0
- portworld-0.2.0/portworld_cli/__init__.py +5 -0
- portworld-0.2.0/portworld_cli/aws/__init__.py +9 -0
- portworld-0.2.0/portworld_cli/aws/client.py +90 -0
- portworld-0.2.0/portworld_cli/aws/common.py +82 -0
- portworld-0.2.0/portworld_cli/aws/constants.py +17 -0
- portworld-0.2.0/portworld_cli/aws/deploy.py +452 -0
- portworld-0.2.0/portworld_cli/aws/doctor.py +926 -0
- portworld-0.2.0/portworld_cli/aws/executor.py +44 -0
- portworld-0.2.0/portworld_cli/aws/stages/__init__.py +54 -0
- portworld-0.2.0/portworld_cli/aws/stages/artifacts.py +153 -0
- portworld-0.2.0/portworld_cli/aws/stages/config.py +207 -0
- portworld-0.2.0/portworld_cli/aws/stages/database.py +535 -0
- portworld-0.2.0/portworld_cli/aws/stages/ecs_runtime.py +627 -0
- portworld-0.2.0/portworld_cli/aws/stages/network_edge.py +508 -0
- portworld-0.2.0/portworld_cli/aws/stages/shared.py +40 -0
- portworld-0.2.0/portworld_cli/aws/stages/validation.py +102 -0
- portworld-0.2.0/portworld_cli/aws/types.py +10 -0
- portworld-0.2.0/portworld_cli/azure/__init__.py +9 -0
- portworld-0.2.0/portworld_cli/azure/client.py +90 -0
- portworld-0.2.0/portworld_cli/azure/common.py +53 -0
- portworld-0.2.0/portworld_cli/azure/deploy.py +280 -0
- portworld-0.2.0/portworld_cli/azure/doctor.py +1089 -0
- portworld-0.2.0/portworld_cli/azure/executor.py +44 -0
- portworld-0.2.0/portworld_cli/azure/stages/__init__.py +45 -0
- portworld-0.2.0/portworld_cli/azure/stages/artifacts.py +340 -0
- portworld-0.2.0/portworld_cli/azure/stages/config.py +262 -0
- portworld-0.2.0/portworld_cli/azure/stages/container_app_runtime.py +458 -0
- portworld-0.2.0/portworld_cli/azure/stages/database.py +195 -0
- portworld-0.2.0/portworld_cli/azure/stages/shared.py +53 -0
- portworld-0.2.0/portworld_cli/azure/stages/validation.py +87 -0
- portworld-0.2.0/portworld_cli/azure/types.py +10 -0
- portworld-0.2.0/portworld_cli/commands/__init__.py +1 -0
- portworld-0.2.0/portworld_cli/commands/compat.py +23 -0
- portworld-0.2.0/portworld_cli/commands/config.py +264 -0
- portworld-0.2.0/portworld_cli/commands/deploy.py +194 -0
- portworld-0.2.0/portworld_cli/commands/doctor.py +97 -0
- portworld-0.2.0/portworld_cli/commands/extensions.py +78 -0
- portworld-0.2.0/portworld_cli/commands/init.py +240 -0
- portworld-0.2.0/portworld_cli/commands/logs.py +130 -0
- portworld-0.2.0/portworld_cli/commands/ops.py +65 -0
- portworld-0.2.0/portworld_cli/commands/providers.py +27 -0
- portworld-0.2.0/portworld_cli/commands/status.py +14 -0
- portworld-0.2.0/portworld_cli/commands/update.py +141 -0
- portworld-0.2.0/portworld_cli/context.py +12 -0
- portworld-0.2.0/portworld_cli/deploy/__init__.py +2 -0
- portworld-0.2.0/portworld_cli/deploy/config.py +370 -0
- portworld-0.2.0/portworld_cli/deploy/gcp_errors.py +15 -0
- portworld-0.2.0/portworld_cli/deploy/published.py +53 -0
- portworld-0.2.0/portworld_cli/deploy/reporting.py +185 -0
- portworld-0.2.0/portworld_cli/deploy/service.py +608 -0
- portworld-0.2.0/portworld_cli/deploy/source.py +66 -0
- portworld-0.2.0/portworld_cli/deploy/stages/__init__.py +31 -0
- portworld-0.2.0/portworld_cli/deploy/stages/gcp_resources.py +180 -0
- portworld-0.2.0/portworld_cli/deploy/stages/runtime.py +339 -0
- portworld-0.2.0/portworld_cli/deploy/stages/secrets.py +209 -0
- portworld-0.2.0/portworld_cli/deploy_artifacts.py +35 -0
- portworld-0.2.0/portworld_cli/deploy_state.py +94 -0
- portworld-0.2.0/portworld_cli/envfile.py +286 -0
- portworld-0.2.0/portworld_cli/extensions/__init__.py +82 -0
- portworld-0.2.0/portworld_cli/extensions/catalog.py +92 -0
- portworld-0.2.0/portworld_cli/extensions/doctor.py +458 -0
- portworld-0.2.0/portworld_cli/extensions/install.py +85 -0
- portworld-0.2.0/portworld_cli/extensions/manifest.py +377 -0
- portworld-0.2.0/portworld_cli/extensions/node_launchers.py +134 -0
- portworld-0.2.0/portworld_cli/extensions/runtime_env.py +44 -0
- portworld-0.2.0/portworld_cli/extensions/summary.py +56 -0
- portworld-0.2.0/portworld_cli/extensions/types.py +139 -0
- portworld-0.2.0/portworld_cli/gcp/__init__.py +55 -0
- portworld-0.2.0/portworld_cli/gcp/artifact_registry.py +187 -0
- portworld-0.2.0/portworld_cli/gcp/auth.py +120 -0
- portworld-0.2.0/portworld_cli/gcp/client.py +47 -0
- portworld-0.2.0/portworld_cli/gcp/cloud_build.py +102 -0
- portworld-0.2.0/portworld_cli/gcp/cloud_run.py +209 -0
- portworld-0.2.0/portworld_cli/gcp/cloud_sql.py +333 -0
- portworld-0.2.0/portworld_cli/gcp/constants.py +11 -0
- portworld-0.2.0/portworld_cli/gcp/doctor.py +857 -0
- portworld-0.2.0/portworld_cli/gcp/executor.py +164 -0
- portworld-0.2.0/portworld_cli/gcp/gcs.py +73 -0
- portworld-0.2.0/portworld_cli/gcp/iam.py +148 -0
- portworld-0.2.0/portworld_cli/gcp/logging.py +133 -0
- portworld-0.2.0/portworld_cli/gcp/secret_manager.py +116 -0
- portworld-0.2.0/portworld_cli/gcp/service_usage.py +71 -0
- portworld-0.2.0/portworld_cli/gcp/types.py +69 -0
- portworld-0.2.0/portworld_cli/lazy_group.py +53 -0
- portworld-0.2.0/portworld_cli/main.py +74 -0
- portworld-0.2.0/portworld_cli/output.py +98 -0
- portworld-0.2.0/portworld_cli/providers/__init__.py +1 -0
- portworld-0.2.0/portworld_cli/providers/catalog.py +427 -0
- portworld-0.2.0/portworld_cli/providers/service.py +97 -0
- portworld-0.2.0/portworld_cli/providers/types.py +27 -0
- portworld-0.2.0/portworld_cli/release/__init__.py +37 -0
- portworld-0.2.0/portworld_cli/release/identity.py +31 -0
- portworld-0.2.0/portworld_cli/release/lookup.py +91 -0
- portworld-0.2.0/portworld_cli/runtime/__init__.py +1 -0
- portworld-0.2.0/portworld_cli/runtime/published.py +485 -0
- portworld-0.2.0/portworld_cli/runtime/reporting.py +474 -0
- portworld-0.2.0/portworld_cli/runtime/source.py +423 -0
- portworld-0.2.0/portworld_cli/runtime/source_backend.py +65 -0
- portworld-0.2.0/portworld_cli/services/__init__.py +1 -0
- portworld-0.2.0/portworld_cli/services/cloud_contract.py +354 -0
- portworld-0.2.0/portworld_cli/services/common/__init__.py +11 -0
- portworld-0.2.0/portworld_cli/services/common/error_mapping.py +104 -0
- portworld-0.2.0/portworld_cli/services/config/__init__.py +9 -0
- portworld-0.2.0/portworld_cli/services/config/edit_service.py +251 -0
- portworld-0.2.0/portworld_cli/services/config/errors.py +13 -0
- portworld-0.2.0/portworld_cli/services/config/messages.py +290 -0
- portworld-0.2.0/portworld_cli/services/config/persistence.py +137 -0
- portworld-0.2.0/portworld_cli/services/config/prompts.py +314 -0
- portworld-0.2.0/portworld_cli/services/config/sections.py +463 -0
- portworld-0.2.0/portworld_cli/services/config/show_service.py +157 -0
- portworld-0.2.0/portworld_cli/services/config/types.py +72 -0
- portworld-0.2.0/portworld_cli/services/doctor/__init__.py +3 -0
- portworld-0.2.0/portworld_cli/services/doctor/service.py +551 -0
- portworld-0.2.0/portworld_cli/services/extensions/__init__.py +22 -0
- portworld-0.2.0/portworld_cli/services/extensions/service.py +516 -0
- portworld-0.2.0/portworld_cli/services/init/__init__.py +3 -0
- portworld-0.2.0/portworld_cli/services/init/service.py +1564 -0
- portworld-0.2.0/portworld_cli/services/logs/__init__.py +17 -0
- portworld-0.2.0/portworld_cli/services/logs/service.py +522 -0
- portworld-0.2.0/portworld_cli/services/ops/__init__.py +13 -0
- portworld-0.2.0/portworld_cli/services/ops/service.py +118 -0
- portworld-0.2.0/portworld_cli/services/status/__init__.py +3 -0
- portworld-0.2.0/portworld_cli/services/status/service.py +172 -0
- portworld-0.2.0/portworld_cli/services/update/__init__.py +3 -0
- portworld-0.2.0/portworld_cli/services/update/service.py +411 -0
- portworld-0.2.0/portworld_cli/targets.py +67 -0
- portworld-0.2.0/portworld_cli/templates/__init__.py +1 -0
- portworld-0.2.0/portworld_cli/templates/published.docker-compose.yml.template +24 -0
- portworld-0.2.0/portworld_cli/templates/published.env.template +192 -0
- portworld-0.2.0/portworld_cli/ux/__init__.py +11 -0
- portworld-0.2.0/portworld_cli/ux/progress.py +126 -0
- portworld-0.2.0/portworld_cli/ux/prompts.py +106 -0
- portworld-0.2.0/portworld_cli/ux/rendering.py +131 -0
- portworld-0.2.0/portworld_cli/version.py +3 -0
- portworld-0.2.0/portworld_cli/workspace/__init__.py +6 -0
- portworld-0.2.0/portworld_cli/workspace/config/__init__.py +5 -0
- portworld-0.2.0/portworld_cli/workspace/config/providers.py +305 -0
- portworld-0.2.0/portworld_cli/workspace/discovery/__init__.py +29 -0
- portworld-0.2.0/portworld_cli/workspace/discovery/locator.py +71 -0
- portworld-0.2.0/portworld_cli/workspace/discovery/paths.py +206 -0
- portworld-0.2.0/portworld_cli/workspace/project_config.py +785 -0
- portworld-0.2.0/portworld_cli/workspace/published.py +207 -0
- portworld-0.2.0/portworld_cli/workspace/session.py +507 -0
- portworld-0.2.0/portworld_cli/workspace/state/__init__.py +31 -0
- portworld-0.2.0/portworld_cli/workspace/state/machine_state.py +61 -0
- portworld-0.2.0/portworld_cli/workspace/state/state_store.py +46 -0
- portworld-0.2.0/portworld_cli/workspace/store.py +120 -0
- portworld-0.2.0/portworld_shared/__init__.py +2 -0
- portworld-0.2.0/portworld_shared/backend_env.py +126 -0
- portworld-0.2.0/portworld_shared/providers.py +669 -0
- portworld-0.2.0/pyproject.toml +95 -0
- portworld-0.2.0/setup.cfg +4 -0
portworld-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 PortWorld Maintainers
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
portworld-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: portworld
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: PortWorld CLI for setup, self-hosting, and managed deploy workflows
|
|
5
|
+
Author: PortWorld Maintainers
|
|
6
|
+
Maintainer: PortWorld Maintainers
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/portworld/PortWorld
|
|
9
|
+
Project-URL: Repository, https://github.com/portworld/PortWorld
|
|
10
|
+
Project-URL: Issues, https://github.com/portworld/PortWorld/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/portworld/PortWorld/blob/main/portworld_cli/README.md
|
|
12
|
+
Keywords: ai,backend,cli,cloud-run,meta,rayban-meta,glasses,portworld,realtime,self-hosting
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Internet
|
|
22
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
23
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: annotated-types==0.7.0
|
|
28
|
+
Requires-Dist: anyio==4.11.0
|
|
29
|
+
Requires-Dist: certifi==2025.11.12
|
|
30
|
+
Requires-Dist: click==8.3.1
|
|
31
|
+
Requires-Dist: boto3==1.40.74
|
|
32
|
+
Requires-Dist: botocore==1.40.74
|
|
33
|
+
Requires-Dist: fastapi==0.109.2
|
|
34
|
+
Requires-Dist: h11==0.16.0
|
|
35
|
+
Requires-Dist: httpcore==1.0.9
|
|
36
|
+
Requires-Dist: httptools==0.7.1
|
|
37
|
+
Requires-Dist: httpx==0.28.1
|
|
38
|
+
Requires-Dist: idna==3.11
|
|
39
|
+
Requires-Dist: InquirerPy==0.3.4
|
|
40
|
+
Requires-Dist: mcp==1.12.4
|
|
41
|
+
Requires-Dist: azure-identity==1.25.1
|
|
42
|
+
Requires-Dist: azure-storage-blob==12.27.1
|
|
43
|
+
Requires-Dist: google-cloud-storage==2.19.0
|
|
44
|
+
Requires-Dist: Pillow==12.0.0
|
|
45
|
+
Requires-Dist: psycopg[binary]==3.2.10
|
|
46
|
+
Requires-Dist: pydantic==2.12.5
|
|
47
|
+
Requires-Dist: pydantic-core==2.41.5
|
|
48
|
+
Requires-Dist: python-dotenv==1.0.1
|
|
49
|
+
Requires-Dist: PyYAML==6.0.3
|
|
50
|
+
Requires-Dist: rich==13.9.4
|
|
51
|
+
Requires-Dist: sniffio==1.3.1
|
|
52
|
+
Requires-Dist: starlette==0.36.3
|
|
53
|
+
Requires-Dist: typing-extensions==4.15.0
|
|
54
|
+
Requires-Dist: typing-inspection==0.4.2
|
|
55
|
+
Requires-Dist: uvicorn[standard]==0.27.1
|
|
56
|
+
Requires-Dist: websockets==15.0.1
|
|
57
|
+
Provides-Extra: dev
|
|
58
|
+
Requires-Dist: build>=1.2.2; extra == "dev"
|
|
59
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
60
|
+
Requires-Dist: twine>=5.1.1; extra == "dev"
|
|
61
|
+
Dynamic: license-file
|
|
62
|
+
|
|
63
|
+
# PortWorld CLI
|
|
64
|
+
|
|
65
|
+
Command-line interface for bootstrapping, validating, and deploying [PortWorld](https://github.com/portworld/PortWorld) — the open-source runtime for voice-and-vision AI assistants.
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
**Recommended** (with [uv](https://docs.astral.sh/uv/)):
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
uv tool install portworld
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
With pipx:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pipx install portworld
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Bootstrap installer (installs `uv`, Python 3.11+, and Node.js tooling if missing):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
curl -fsSL --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/portworld/PortWorld/main/install.sh | bash
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Agent skill (Cursor, Codex, others)
|
|
88
|
+
|
|
89
|
+
Install the **portworld-cli-autopilot** skill so agents get consistent bootstrap and operator commands ([Agent Skills](https://agentskills.io) format):
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npx skills add portworld/PortWorld --skill portworld-cli-autopilot -a cursor -a codex -y
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Direct install of the skill folder only:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npx skills add https://github.com/portworld/PortWorld/tree/main/skills/portworld-cli-autopilot -y
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
See [skills/README.md](https://github.com/portworld/PortWorld/blob/main/skills/README.md) for `--list`, `-g` (global), and telemetry options.
|
|
102
|
+
|
|
103
|
+
## Requirements
|
|
104
|
+
|
|
105
|
+
- macOS or Linux
|
|
106
|
+
- Python 3.11+
|
|
107
|
+
- Docker for local published-workspace runs
|
|
108
|
+
|
|
109
|
+
## Quickstart
|
|
110
|
+
|
|
111
|
+
Initialize a local workspace, configure providers, and start the backend:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
portworld init
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Validate and inspect:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
portworld doctor --target local
|
|
121
|
+
portworld status
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`portworld init` supports two setup modes:
|
|
125
|
+
|
|
126
|
+
- `quickstart` — guided onboarding with beginner-friendly defaults
|
|
127
|
+
- `manual` — guided onboarding with advanced choices like local source runtime
|
|
128
|
+
|
|
129
|
+
Force either mode with `--setup-mode quickstart` or `--setup-mode manual`.
|
|
130
|
+
|
|
131
|
+
## Commands
|
|
132
|
+
|
|
133
|
+
| Command | Description |
|
|
134
|
+
|---------|-------------|
|
|
135
|
+
| `portworld init` | Run the onboarding wizard, write config, and execute the selected local or managed path |
|
|
136
|
+
| `portworld doctor` | Validate local or managed deployment readiness |
|
|
137
|
+
| `portworld deploy` | Deploy to a managed cloud target |
|
|
138
|
+
| `portworld status` | Inspect workspace and deploy state |
|
|
139
|
+
| `portworld logs` | Read managed deployment logs |
|
|
140
|
+
| `portworld config` | Inspect or edit project configuration |
|
|
141
|
+
| `portworld providers` | Browse supported realtime, vision, search, and cloud providers |
|
|
142
|
+
| `portworld extensions` | Manage extension manifests and install state |
|
|
143
|
+
| `portworld update cli` | Show the recommended CLI upgrade command |
|
|
144
|
+
| `portworld update deploy` | Redeploy the active managed target |
|
|
145
|
+
| `portworld ops` | Lower-level operator tasks (see below) |
|
|
146
|
+
|
|
147
|
+
### Operator Tasks
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
portworld ops check-config # validate local config
|
|
151
|
+
portworld ops check-config --full-readiness # full preflight with provider validation
|
|
152
|
+
portworld ops bootstrap-storage # initialize storage
|
|
153
|
+
portworld ops export-memory --output /tmp/portworld-memory-export.zip
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Deploy Workflows
|
|
157
|
+
|
|
158
|
+
Supported managed targets: **GCP Cloud Run**, **AWS ECS/Fargate**, **Azure Container Apps**.
|
|
159
|
+
|
|
160
|
+
### Readiness Check
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
portworld doctor --target gcp-cloud-run --gcp-project <project> --gcp-region <region>
|
|
164
|
+
portworld doctor --target aws-ecs-fargate --aws-region <region>
|
|
165
|
+
portworld doctor --target azure-container-apps --azure-subscription <sub> --azure-resource-group <rg> --azure-region <region>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Deploy
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
portworld deploy gcp-cloud-run --project <project> --region <region>
|
|
172
|
+
portworld deploy aws-ecs-fargate --region <region>
|
|
173
|
+
portworld deploy azure-container-apps --subscription <sub> --resource-group <rg> --region <region>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Logs
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
portworld logs gcp-cloud-run --since 24h --limit 50
|
|
180
|
+
portworld logs aws-ecs-fargate --since 24h --limit 50
|
|
181
|
+
portworld logs azure-container-apps --since 24h --limit 50
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Redeploy
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
portworld update deploy
|
|
188
|
+
portworld update deploy --tag <image-tag>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Source Checkout
|
|
192
|
+
|
|
193
|
+
Use a repo checkout when developing PortWorld itself:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
git clone https://github.com/portworld/PortWorld.git
|
|
197
|
+
cd PortWorld
|
|
198
|
+
pipx install . --force
|
|
199
|
+
portworld init
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Updating
|
|
203
|
+
|
|
204
|
+
Upgrade the CLI:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
uv tool upgrade portworld
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Install a pinned version:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
uv tool install "portworld==<version>"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Upgrade via the bootstrap installer:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
curl -fsSL --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/portworld/PortWorld/main/install.sh | bash -s -- --version v<version>
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Production Caution
|
|
223
|
+
|
|
224
|
+
Managed cloud workflows are supported, but some infrastructure defaults favor quick bring-up over locked-down security:
|
|
225
|
+
|
|
226
|
+
- **AWS**: one-click deploy provisions RDS with public accessibility and broad ingress
|
|
227
|
+
- **Azure**: one-click deploy provisions PostgreSQL with public access
|
|
228
|
+
|
|
229
|
+
Review and harden these defaults before exposing a deployment to the public internet.
|
|
230
|
+
|
|
231
|
+
## Links
|
|
232
|
+
|
|
233
|
+
- [Repository](https://github.com/portworld/PortWorld)
|
|
234
|
+
- [Backend README](https://github.com/portworld/PortWorld/blob/main/backend/README.md) — runtime, API reference, configuration
|
|
235
|
+
- [iOS README](https://github.com/portworld/PortWorld/blob/main/IOS/README.md) — iOS app setup, Meta DAT, permissions
|
|
236
|
+
- [Getting Started](https://github.com/portworld/PortWorld/blob/main/GETTING_STARTED.md) — extended onboarding guide
|
|
237
|
+
- [Changelog](https://github.com/portworld/PortWorld/blob/main/CHANGELOG.md)
|
|
238
|
+
- [CLI Release Process](https://github.com/portworld/PortWorld/blob/main/docs/operations/CLI_RELEASE_PROCESS.md)
|
|
239
|
+
|
|
240
|
+
## License
|
|
241
|
+
|
|
242
|
+
MIT — see [LICENSE](https://github.com/portworld/PortWorld/blob/main/LICENSE).
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="Port World logo.png" width="100%" alt="Port:World Logo">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>Open-source runtime for voice-and-vision AI assistants connected to the real world.</strong>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License" /></a>
|
|
11
|
+
<a href="#quickstart"><img src="https://img.shields.io/badge/CLI-installer-3775A9" alt="PortWorld CLI installer" /></a>
|
|
12
|
+
<img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11+" />
|
|
13
|
+
<img src="https://img.shields.io/badge/iOS-17%2B-black" alt="iOS 17+" />
|
|
14
|
+
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey" alt="Platform" />
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## What if AI could see the world the way we do?
|
|
20
|
+
|
|
21
|
+
**Port:World** is an open source framework that lets anyone connect their Meta glasses to any AI.
|
|
22
|
+
The AI sees exactly what the wearer sees and can respond with voice, reasoning, or actions.
|
|
23
|
+
|
|
24
|
+
The use cases are infinite: connect your AI agents, customize them, prompt them, link your MCP, connect your OpenClaw…
|
|
25
|
+
|
|
26
|
+
It connects an iOS app running on Meta glasses to a FastAPI backend that handles video streaming, AI inference, voice responses, and tool execution. You define the prompts and domain logic. Port:World handles the streaming, model routing, and real-time communication.
|
|
27
|
+
|
|
28
|
+
Built during the Mistral Worldwide Hackathon 2026 by **Pierre Haas, Vassili de Rosen, Arman Artola.**
|
|
29
|
+
|
|
30
|
+
<p align="center">
|
|
31
|
+
🏆 <strong>We finished top 10 out of 600 teams worldwide + won the Giant Venture prize "futur unicorn prize".</strong> 🏆
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
graph LR
|
|
40
|
+
iOS["iOS App"] -->|"WebSocket audio"| Backend["FastAPI Backend"]
|
|
41
|
+
iOS -->|"Vision frames"| Backend
|
|
42
|
+
CLI["portworld CLI"] -->|"init / deploy / doctor"| Backend
|
|
43
|
+
Backend -->|"Realtime relay"| Providers["AI Providers"]
|
|
44
|
+
Backend -->|"Persistent memory"| Storage["Local / Cloud Storage"]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
| Surface | Description |
|
|
48
|
+
|---------|-------------|
|
|
49
|
+
| **[backend/](backend/)** | FastAPI server — realtime voice relay, memory, vision processing, tooling |
|
|
50
|
+
| **[portworld_cli/](portworld_cli/)** | CLI — bootstrap, validate, deploy, and operate PortWorld |
|
|
51
|
+
| **[portworld_shared/](portworld_shared/)** | Shared Python contracts between CLI and backend |
|
|
52
|
+
| **[IOS/](IOS/)** | SwiftUI iOS app — connects Meta smart glasses to your backend |
|
|
53
|
+
|
|
54
|
+
## Features
|
|
55
|
+
|
|
56
|
+
- **Realtime voice relay** — bridges WebSocket audio sessions to OpenAI Realtime or Gemini Live
|
|
57
|
+
- **Persistent memory** — per-session and cross-session markdown memory with configurable retention
|
|
58
|
+
- **Visual memory** — ingests camera frames from Meta glasses, runs adaptive scene-change gating, and builds semantic memory via pluggable vision providers
|
|
59
|
+
- **Durable-memory consolidation** — rewrites long-term user memory at session close
|
|
60
|
+
- **Realtime tooling** — memory recall and web search tools injected into the active AI session
|
|
61
|
+
- **Multi-provider support** — 8 vision providers, 2 realtime providers, web search via Tavily
|
|
62
|
+
- **Cloud deployment** — one-command deploy to GCP Cloud Run, AWS ECS/Fargate, or Azure Container Apps
|
|
63
|
+
- **Meta smart glasses** — full DAT integration for audio I/O and vision capture through Ray-Ban Meta glasses
|
|
64
|
+
- **Bearer token auth and rate limiting** — production-ready security defaults
|
|
65
|
+
|
|
66
|
+
## Quickstart
|
|
67
|
+
|
|
68
|
+
### Run PortWorld (without cloning)
|
|
69
|
+
|
|
70
|
+
Install the CLI and bootstrap a local workspace:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -fsSL --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/portworld/PortWorld/main/install.sh | bash
|
|
74
|
+
portworld init
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Verify:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
portworld doctor --target local
|
|
81
|
+
portworld status
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Backend contributor
|
|
85
|
+
|
|
86
|
+
Clone the repo and start the backend with Docker:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git clone https://github.com/portworld/PortWorld.git
|
|
90
|
+
cd PortWorld
|
|
91
|
+
cp backend/.env.example backend/.env
|
|
92
|
+
# Edit backend/.env — set OPENAI_API_KEY or GEMINI_LIVE_API_KEY
|
|
93
|
+
docker compose up --build
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Verify:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl http://127.0.0.1:8080/livez
|
|
100
|
+
# → {"status":"ok","service":"portworld-backend"}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### iOS contributor
|
|
104
|
+
|
|
105
|
+
Start the backend (see above), then open the iOS project:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
open IOS/PortWorld.xcodeproj
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
1. Let Xcode resolve Swift Package dependencies.
|
|
112
|
+
2. Build the **PortWorld** scheme.
|
|
113
|
+
3. Configure the backend URL in the app and validate the connection.
|
|
114
|
+
|
|
115
|
+
## Minimum Viable Environment
|
|
116
|
+
|
|
117
|
+
You only need **one API key** to get started. Pick a realtime provider:
|
|
118
|
+
|
|
119
|
+
| Provider | Set in `backend/.env` |
|
|
120
|
+
|----------|----------------------|
|
|
121
|
+
| OpenAI Realtime | `REALTIME_PROVIDER=openai` and `OPENAI_API_KEY=sk-...` |
|
|
122
|
+
| Gemini Live | `REALTIME_PROVIDER=gemini_live` and `GEMINI_LIVE_API_KEY=...` |
|
|
123
|
+
|
|
124
|
+
Everything else (vision, tooling, consolidation) is off by default and can be enabled incrementally. See [backend/README.md](backend/README.md) for the full configuration reference.
|
|
125
|
+
|
|
126
|
+
## Supported Providers
|
|
127
|
+
|
|
128
|
+
### Realtime
|
|
129
|
+
|
|
130
|
+
| Provider | ID | Required Key |
|
|
131
|
+
|----------|----|--------------|
|
|
132
|
+
| OpenAI Realtime | `openai` | `OPENAI_API_KEY` |
|
|
133
|
+
| Gemini Live | `gemini_live` | `GEMINI_LIVE_API_KEY` |
|
|
134
|
+
|
|
135
|
+
### Vision (opt-in)
|
|
136
|
+
|
|
137
|
+
| Provider | ID | Required Key(s) |
|
|
138
|
+
|----------|----|-----------------|
|
|
139
|
+
| Mistral | `mistral` | `VISION_MISTRAL_API_KEY` |
|
|
140
|
+
| NVIDIA Integrate | `nvidia_integrate` | `VISION_NVIDIA_API_KEY` |
|
|
141
|
+
| OpenAI | `openai` | `VISION_OPENAI_API_KEY` |
|
|
142
|
+
| Azure OpenAI | `azure_openai` | `VISION_AZURE_OPENAI_API_KEY` + `VISION_AZURE_OPENAI_ENDPOINT` |
|
|
143
|
+
| Gemini | `gemini` | `VISION_GEMINI_API_KEY` |
|
|
144
|
+
| Claude | `claude` | `VISION_CLAUDE_API_KEY` |
|
|
145
|
+
| AWS Bedrock | `bedrock` | `VISION_BEDROCK_REGION` (+ optional IAM credentials) |
|
|
146
|
+
| Groq | `groq` | `VISION_GROQ_API_KEY` |
|
|
147
|
+
|
|
148
|
+
### Search (opt-in)
|
|
149
|
+
|
|
150
|
+
| Provider | ID | Required Key |
|
|
151
|
+
|----------|----|--------------|
|
|
152
|
+
| Tavily | `tavily` | `TAVILY_API_KEY` |
|
|
153
|
+
|
|
154
|
+
Use `portworld providers list` and `portworld providers show <id>` to inspect providers from the CLI.
|
|
155
|
+
|
|
156
|
+
## Cloud Deployment
|
|
157
|
+
|
|
158
|
+
Deploy to managed cloud targets with the CLI:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
portworld deploy gcp-cloud-run --project <project> --region <region>
|
|
162
|
+
portworld deploy aws-ecs-fargate --region <region>
|
|
163
|
+
portworld deploy azure-container-apps --subscription <sub> --resource-group <rg> --region <region>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
See the [CLI README](portworld_cli/README.md) for readiness checks, log streaming, and redeployment.
|
|
167
|
+
|
|
168
|
+
## Documentation
|
|
169
|
+
|
|
170
|
+
| Document | Description |
|
|
171
|
+
|----------|-------------|
|
|
172
|
+
| [backend/README.md](backend/README.md) | Backend runtime, API reference, configuration, storage |
|
|
173
|
+
| [portworld_cli/README.md](portworld_cli/README.md) | CLI installation, commands, deploy workflows |
|
|
174
|
+
| [IOS/README.md](IOS/README.md) | iOS app setup, Meta DAT, permissions, architecture |
|
|
175
|
+
| [GETTING_STARTED.md](GETTING_STARTED.md) | Extended onboarding guide with all setup paths |
|
|
176
|
+
| [CHANGELOG.md](CHANGELOG.md) | Release history |
|
|
177
|
+
| [docs/operations/CLI_RELEASE_PROCESS.md](docs/operations/CLI_RELEASE_PROCESS.md) | CLI release and versioning process |
|
|
178
|
+
|
|
179
|
+
## Status
|
|
180
|
+
|
|
181
|
+
PortWorld is in its first stable release cutover. The core product surfaces are release-ready, while managed deploy hardening and operator-facing documentation continue to improve.
|
|
182
|
+
|
|
183
|
+
**Stable-targeted:** backend self-hosting, CLI bootstrap and deploy workflows, and the iOS app with Meta glasses integration.
|
|
184
|
+
|
|
185
|
+
**Release rollout:** the first public PyPI publication and GitHub release packaging land with the `v0.2.0` release cut.
|
|
186
|
+
|
|
187
|
+
**Hardening:** managed cloud deploy defaults, public-facing operator documentation, production security posture for one-click deploys.
|
|
188
|
+
|
|
189
|
+
### Known Limitations
|
|
190
|
+
|
|
191
|
+
- Provider API keys are required for runtime use — there is no keyless demo mode.
|
|
192
|
+
- AWS and Azure one-click deploys provision databases with public access by default. Review and tighten before production use.
|
|
193
|
+
- Full iOS runtime validation requires a reachable backend and, for glasses features, supported Meta hardware with the Meta AI app.
|
|
194
|
+
- The shared Xcode schemes do not currently include a maintained test action.
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request.
|
|
199
|
+
|
|
200
|
+
- Bug reports and feature requests: [open an issue](https://github.com/portworld/PortWorld/issues)
|
|
201
|
+
- Security vulnerabilities: see [SECURITY.md](SECURITY.md)
|
|
202
|
+
- Community expectations: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
203
|
+
|
|
204
|
+
Do not post secrets, tokens, private URLs, or unredacted production logs in public issues.
|
|
205
|
+
|
|
206
|
+
## License
|
|
207
|
+
|
|
208
|
+
MIT — see [LICENSE](LICENSE).
|