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.
Files changed (163) hide show
  1. portworld-0.2.0/LICENSE +21 -0
  2. portworld-0.2.0/MANIFEST.in +4 -0
  3. portworld-0.2.0/PKG-INFO +242 -0
  4. portworld-0.2.0/README.md +208 -0
  5. portworld-0.2.0/portworld.egg-info/PKG-INFO +242 -0
  6. portworld-0.2.0/portworld.egg-info/SOURCES.txt +161 -0
  7. portworld-0.2.0/portworld.egg-info/dependency_links.txt +1 -0
  8. portworld-0.2.0/portworld.egg-info/entry_points.txt +2 -0
  9. portworld-0.2.0/portworld.egg-info/requires.txt +35 -0
  10. portworld-0.2.0/portworld.egg-info/top_level.txt +2 -0
  11. portworld-0.2.0/portworld_cli/README.md +180 -0
  12. portworld-0.2.0/portworld_cli/__init__.py +5 -0
  13. portworld-0.2.0/portworld_cli/aws/__init__.py +9 -0
  14. portworld-0.2.0/portworld_cli/aws/client.py +90 -0
  15. portworld-0.2.0/portworld_cli/aws/common.py +82 -0
  16. portworld-0.2.0/portworld_cli/aws/constants.py +17 -0
  17. portworld-0.2.0/portworld_cli/aws/deploy.py +452 -0
  18. portworld-0.2.0/portworld_cli/aws/doctor.py +926 -0
  19. portworld-0.2.0/portworld_cli/aws/executor.py +44 -0
  20. portworld-0.2.0/portworld_cli/aws/stages/__init__.py +54 -0
  21. portworld-0.2.0/portworld_cli/aws/stages/artifacts.py +153 -0
  22. portworld-0.2.0/portworld_cli/aws/stages/config.py +207 -0
  23. portworld-0.2.0/portworld_cli/aws/stages/database.py +535 -0
  24. portworld-0.2.0/portworld_cli/aws/stages/ecs_runtime.py +627 -0
  25. portworld-0.2.0/portworld_cli/aws/stages/network_edge.py +508 -0
  26. portworld-0.2.0/portworld_cli/aws/stages/shared.py +40 -0
  27. portworld-0.2.0/portworld_cli/aws/stages/validation.py +102 -0
  28. portworld-0.2.0/portworld_cli/aws/types.py +10 -0
  29. portworld-0.2.0/portworld_cli/azure/__init__.py +9 -0
  30. portworld-0.2.0/portworld_cli/azure/client.py +90 -0
  31. portworld-0.2.0/portworld_cli/azure/common.py +53 -0
  32. portworld-0.2.0/portworld_cli/azure/deploy.py +280 -0
  33. portworld-0.2.0/portworld_cli/azure/doctor.py +1089 -0
  34. portworld-0.2.0/portworld_cli/azure/executor.py +44 -0
  35. portworld-0.2.0/portworld_cli/azure/stages/__init__.py +45 -0
  36. portworld-0.2.0/portworld_cli/azure/stages/artifacts.py +340 -0
  37. portworld-0.2.0/portworld_cli/azure/stages/config.py +262 -0
  38. portworld-0.2.0/portworld_cli/azure/stages/container_app_runtime.py +458 -0
  39. portworld-0.2.0/portworld_cli/azure/stages/database.py +195 -0
  40. portworld-0.2.0/portworld_cli/azure/stages/shared.py +53 -0
  41. portworld-0.2.0/portworld_cli/azure/stages/validation.py +87 -0
  42. portworld-0.2.0/portworld_cli/azure/types.py +10 -0
  43. portworld-0.2.0/portworld_cli/commands/__init__.py +1 -0
  44. portworld-0.2.0/portworld_cli/commands/compat.py +23 -0
  45. portworld-0.2.0/portworld_cli/commands/config.py +264 -0
  46. portworld-0.2.0/portworld_cli/commands/deploy.py +194 -0
  47. portworld-0.2.0/portworld_cli/commands/doctor.py +97 -0
  48. portworld-0.2.0/portworld_cli/commands/extensions.py +78 -0
  49. portworld-0.2.0/portworld_cli/commands/init.py +240 -0
  50. portworld-0.2.0/portworld_cli/commands/logs.py +130 -0
  51. portworld-0.2.0/portworld_cli/commands/ops.py +65 -0
  52. portworld-0.2.0/portworld_cli/commands/providers.py +27 -0
  53. portworld-0.2.0/portworld_cli/commands/status.py +14 -0
  54. portworld-0.2.0/portworld_cli/commands/update.py +141 -0
  55. portworld-0.2.0/portworld_cli/context.py +12 -0
  56. portworld-0.2.0/portworld_cli/deploy/__init__.py +2 -0
  57. portworld-0.2.0/portworld_cli/deploy/config.py +370 -0
  58. portworld-0.2.0/portworld_cli/deploy/gcp_errors.py +15 -0
  59. portworld-0.2.0/portworld_cli/deploy/published.py +53 -0
  60. portworld-0.2.0/portworld_cli/deploy/reporting.py +185 -0
  61. portworld-0.2.0/portworld_cli/deploy/service.py +608 -0
  62. portworld-0.2.0/portworld_cli/deploy/source.py +66 -0
  63. portworld-0.2.0/portworld_cli/deploy/stages/__init__.py +31 -0
  64. portworld-0.2.0/portworld_cli/deploy/stages/gcp_resources.py +180 -0
  65. portworld-0.2.0/portworld_cli/deploy/stages/runtime.py +339 -0
  66. portworld-0.2.0/portworld_cli/deploy/stages/secrets.py +209 -0
  67. portworld-0.2.0/portworld_cli/deploy_artifacts.py +35 -0
  68. portworld-0.2.0/portworld_cli/deploy_state.py +94 -0
  69. portworld-0.2.0/portworld_cli/envfile.py +286 -0
  70. portworld-0.2.0/portworld_cli/extensions/__init__.py +82 -0
  71. portworld-0.2.0/portworld_cli/extensions/catalog.py +92 -0
  72. portworld-0.2.0/portworld_cli/extensions/doctor.py +458 -0
  73. portworld-0.2.0/portworld_cli/extensions/install.py +85 -0
  74. portworld-0.2.0/portworld_cli/extensions/manifest.py +377 -0
  75. portworld-0.2.0/portworld_cli/extensions/node_launchers.py +134 -0
  76. portworld-0.2.0/portworld_cli/extensions/runtime_env.py +44 -0
  77. portworld-0.2.0/portworld_cli/extensions/summary.py +56 -0
  78. portworld-0.2.0/portworld_cli/extensions/types.py +139 -0
  79. portworld-0.2.0/portworld_cli/gcp/__init__.py +55 -0
  80. portworld-0.2.0/portworld_cli/gcp/artifact_registry.py +187 -0
  81. portworld-0.2.0/portworld_cli/gcp/auth.py +120 -0
  82. portworld-0.2.0/portworld_cli/gcp/client.py +47 -0
  83. portworld-0.2.0/portworld_cli/gcp/cloud_build.py +102 -0
  84. portworld-0.2.0/portworld_cli/gcp/cloud_run.py +209 -0
  85. portworld-0.2.0/portworld_cli/gcp/cloud_sql.py +333 -0
  86. portworld-0.2.0/portworld_cli/gcp/constants.py +11 -0
  87. portworld-0.2.0/portworld_cli/gcp/doctor.py +857 -0
  88. portworld-0.2.0/portworld_cli/gcp/executor.py +164 -0
  89. portworld-0.2.0/portworld_cli/gcp/gcs.py +73 -0
  90. portworld-0.2.0/portworld_cli/gcp/iam.py +148 -0
  91. portworld-0.2.0/portworld_cli/gcp/logging.py +133 -0
  92. portworld-0.2.0/portworld_cli/gcp/secret_manager.py +116 -0
  93. portworld-0.2.0/portworld_cli/gcp/service_usage.py +71 -0
  94. portworld-0.2.0/portworld_cli/gcp/types.py +69 -0
  95. portworld-0.2.0/portworld_cli/lazy_group.py +53 -0
  96. portworld-0.2.0/portworld_cli/main.py +74 -0
  97. portworld-0.2.0/portworld_cli/output.py +98 -0
  98. portworld-0.2.0/portworld_cli/providers/__init__.py +1 -0
  99. portworld-0.2.0/portworld_cli/providers/catalog.py +427 -0
  100. portworld-0.2.0/portworld_cli/providers/service.py +97 -0
  101. portworld-0.2.0/portworld_cli/providers/types.py +27 -0
  102. portworld-0.2.0/portworld_cli/release/__init__.py +37 -0
  103. portworld-0.2.0/portworld_cli/release/identity.py +31 -0
  104. portworld-0.2.0/portworld_cli/release/lookup.py +91 -0
  105. portworld-0.2.0/portworld_cli/runtime/__init__.py +1 -0
  106. portworld-0.2.0/portworld_cli/runtime/published.py +485 -0
  107. portworld-0.2.0/portworld_cli/runtime/reporting.py +474 -0
  108. portworld-0.2.0/portworld_cli/runtime/source.py +423 -0
  109. portworld-0.2.0/portworld_cli/runtime/source_backend.py +65 -0
  110. portworld-0.2.0/portworld_cli/services/__init__.py +1 -0
  111. portworld-0.2.0/portworld_cli/services/cloud_contract.py +354 -0
  112. portworld-0.2.0/portworld_cli/services/common/__init__.py +11 -0
  113. portworld-0.2.0/portworld_cli/services/common/error_mapping.py +104 -0
  114. portworld-0.2.0/portworld_cli/services/config/__init__.py +9 -0
  115. portworld-0.2.0/portworld_cli/services/config/edit_service.py +251 -0
  116. portworld-0.2.0/portworld_cli/services/config/errors.py +13 -0
  117. portworld-0.2.0/portworld_cli/services/config/messages.py +290 -0
  118. portworld-0.2.0/portworld_cli/services/config/persistence.py +137 -0
  119. portworld-0.2.0/portworld_cli/services/config/prompts.py +314 -0
  120. portworld-0.2.0/portworld_cli/services/config/sections.py +463 -0
  121. portworld-0.2.0/portworld_cli/services/config/show_service.py +157 -0
  122. portworld-0.2.0/portworld_cli/services/config/types.py +72 -0
  123. portworld-0.2.0/portworld_cli/services/doctor/__init__.py +3 -0
  124. portworld-0.2.0/portworld_cli/services/doctor/service.py +551 -0
  125. portworld-0.2.0/portworld_cli/services/extensions/__init__.py +22 -0
  126. portworld-0.2.0/portworld_cli/services/extensions/service.py +516 -0
  127. portworld-0.2.0/portworld_cli/services/init/__init__.py +3 -0
  128. portworld-0.2.0/portworld_cli/services/init/service.py +1564 -0
  129. portworld-0.2.0/portworld_cli/services/logs/__init__.py +17 -0
  130. portworld-0.2.0/portworld_cli/services/logs/service.py +522 -0
  131. portworld-0.2.0/portworld_cli/services/ops/__init__.py +13 -0
  132. portworld-0.2.0/portworld_cli/services/ops/service.py +118 -0
  133. portworld-0.2.0/portworld_cli/services/status/__init__.py +3 -0
  134. portworld-0.2.0/portworld_cli/services/status/service.py +172 -0
  135. portworld-0.2.0/portworld_cli/services/update/__init__.py +3 -0
  136. portworld-0.2.0/portworld_cli/services/update/service.py +411 -0
  137. portworld-0.2.0/portworld_cli/targets.py +67 -0
  138. portworld-0.2.0/portworld_cli/templates/__init__.py +1 -0
  139. portworld-0.2.0/portworld_cli/templates/published.docker-compose.yml.template +24 -0
  140. portworld-0.2.0/portworld_cli/templates/published.env.template +192 -0
  141. portworld-0.2.0/portworld_cli/ux/__init__.py +11 -0
  142. portworld-0.2.0/portworld_cli/ux/progress.py +126 -0
  143. portworld-0.2.0/portworld_cli/ux/prompts.py +106 -0
  144. portworld-0.2.0/portworld_cli/ux/rendering.py +131 -0
  145. portworld-0.2.0/portworld_cli/version.py +3 -0
  146. portworld-0.2.0/portworld_cli/workspace/__init__.py +6 -0
  147. portworld-0.2.0/portworld_cli/workspace/config/__init__.py +5 -0
  148. portworld-0.2.0/portworld_cli/workspace/config/providers.py +305 -0
  149. portworld-0.2.0/portworld_cli/workspace/discovery/__init__.py +29 -0
  150. portworld-0.2.0/portworld_cli/workspace/discovery/locator.py +71 -0
  151. portworld-0.2.0/portworld_cli/workspace/discovery/paths.py +206 -0
  152. portworld-0.2.0/portworld_cli/workspace/project_config.py +785 -0
  153. portworld-0.2.0/portworld_cli/workspace/published.py +207 -0
  154. portworld-0.2.0/portworld_cli/workspace/session.py +507 -0
  155. portworld-0.2.0/portworld_cli/workspace/state/__init__.py +31 -0
  156. portworld-0.2.0/portworld_cli/workspace/state/machine_state.py +61 -0
  157. portworld-0.2.0/portworld_cli/workspace/state/state_store.py +46 -0
  158. portworld-0.2.0/portworld_cli/workspace/store.py +120 -0
  159. portworld-0.2.0/portworld_shared/__init__.py +2 -0
  160. portworld-0.2.0/portworld_shared/backend_env.py +126 -0
  161. portworld-0.2.0/portworld_shared/providers.py +669 -0
  162. portworld-0.2.0/pyproject.toml +95 -0
  163. portworld-0.2.0/setup.cfg +4 -0
@@ -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.
@@ -0,0 +1,4 @@
1
+ global-exclude *.py[cod]
2
+ global-exclude .DS_Store
3
+ prune */__pycache__
4
+ prune backend
@@ -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).