unoverse 0.1.128 → 0.1.130
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.
|
@@ -111,7 +111,17 @@ services:
|
|
|
111
111
|
# SAME :4105 backend as api.<domain>, so default to the api host (one public entry,
|
|
112
112
|
# one cert, no extra DNS). UNOVERSE_URL can still override for a dedicated MCP host.
|
|
113
113
|
- VITE_UNOVERSE_SERVICE_URL=${UNOVERSE_URL:-${DOMAIN:+https://api.${DOMAIN:-}}}
|
|
114
|
-
|
|
114
|
+
# THE BROWSER'S MEMORY UPSTREAM, AND IT IS THE PUBLIC JWT LANE (:4104). Its own
|
|
115
|
+
# variable, because `MEMORY_SERVICE_URL` means the opposite thing to a server-to-
|
|
116
|
+
# server caller: the engine uses that name for the TOKENLESS platform lane (:4114),
|
|
117
|
+
# and the canvas entrypoint was reading the same name for its nginx upstream. The
|
|
118
|
+
# dashboard therefore proxied the browser at :4114, whose /api/* routes do not
|
|
119
|
+
# exist — every memory page call 404'd on every deployed universe.
|
|
120
|
+
#
|
|
121
|
+
# The 404 was the lucky part. The platform lane asserts identity instead of proving
|
|
122
|
+
# it, so a browser reaching it would read and write ANY user's memory with no token.
|
|
123
|
+
# A browser must only ever reach :4104, which authenticates every request.
|
|
124
|
+
- MEMORY_PUBLIC_URL=http://memory:4104
|
|
115
125
|
depends_on:
|
|
116
126
|
- unoverse
|
|
117
127
|
logging: *default-logging
|
|
@@ -88,7 +88,7 @@ cmd_db_verify() {
|
|
|
88
88
|
],
|
|
89
89
|
dictionary_need_states: [
|
|
90
90
|
"universal_id", "content_hash", "title", "description", "object_type",
|
|
91
|
-
"needs", "source_url", "umap_x", "umap_y", "umap_z",
|
|
91
|
+
"needs", "source_url", "source_id", "umap_x", "umap_y", "umap_z",
|
|
92
92
|
"umap_cluster_id", "color_hex", "needs_umap_update", "created_at",
|
|
93
93
|
"updated_at", "workflow_id", "key_need", "metadata", "embedding_original"
|
|
94
94
|
],
|
package/operator/lib/deploy.sh
CHANGED
|
@@ -117,8 +117,13 @@ cmd_db_allow() {
|
|
|
117
117
|
# this could not help. A cluster host is `<name>-do-user-...`, so the name is right there
|
|
118
118
|
# in DATABASE_URL.
|
|
119
119
|
if [ -z "$cluster" ]; then
|
|
120
|
+
# `-n` + `p`: print ONLY when the substitution matched. The portable way to say "extract
|
|
121
|
+
# or nothing". This was `s|…|\1|; t; d`, which is GNU: BSD sed reads everything after `t`
|
|
122
|
+
# as a LABEL, so on macOS it died with `undefined label '; d'`, printed nothing, and the
|
|
123
|
+
# command then reported "this database has no trusted-source list" — a real cluster
|
|
124
|
+
# reported as an open one, on the platform's own machine.
|
|
120
125
|
cluster=$(grep -E '^DATABASE_URL=' "$ROOT/.env" 2>/dev/null | head -1 \
|
|
121
|
-
| sed -
|
|
126
|
+
| sed -nE 's|.*@([a-z0-9-]+)-do-user-[^.]*\..*|\1|p')
|
|
122
127
|
fi
|
|
123
128
|
|
|
124
129
|
if [ -z "$cluster" ]; then
|
package/operator/operator.sh
CHANGED
|
@@ -30,6 +30,22 @@ else
|
|
|
30
30
|
exit 1
|
|
31
31
|
fi
|
|
32
32
|
|
|
33
|
+
# True when the CURRENT DIRECTORY sits inside the platform monorepo. Deliberately keyed to
|
|
34
|
+
# $PWD and not to this script's location: the case it exists for is the INSTALLED CLI being
|
|
35
|
+
# run from inside this repo, where the script lives in node_modules and only the cwd says
|
|
36
|
+
# where the user actually is. The root package name is the marker, and no starter kit
|
|
37
|
+
# carries it.
|
|
38
|
+
_in_platform_monorepo() {
|
|
39
|
+
local d="$PWD"
|
|
40
|
+
while [ "$d" != "/" ] && [ -n "$d" ]; do
|
|
41
|
+
if [ -f "$d/package.json" ] && grep -q '"name"[[:space:]]*:[[:space:]]*"unoverse-platform"' "$d/package.json" 2>/dev/null; then
|
|
42
|
+
return 0
|
|
43
|
+
fi
|
|
44
|
+
d="$(dirname "$d")"
|
|
45
|
+
done
|
|
46
|
+
return 1
|
|
47
|
+
}
|
|
48
|
+
|
|
33
49
|
# ── Source all modules ──────────────────────────────────────────────
|
|
34
50
|
source "$GRAVITY_LIB/find-root.sh"
|
|
35
51
|
source "$GRAVITY_LIB/common.sh"
|
|
@@ -154,6 +170,25 @@ case "${1:-}" in
|
|
|
154
170
|
shift 2; node --import tsx "$GRAVITY_LIB/publish-assets.mjs" "$@"
|
|
155
171
|
elif type cmd_publish >/dev/null 2>&1; then
|
|
156
172
|
shift; cmd_publish "$@"
|
|
173
|
+
elif _in_platform_monorepo; then
|
|
174
|
+
# THE INSTALLED CLI CANNOT RELEASE THE PLATFORM, and inside this repo the fallthrough
|
|
175
|
+
# below is never what anyone meant: it would start publishing rx assets to a universe
|
|
176
|
+
# while the operator believes they are shipping the platform. It used to do exactly
|
|
177
|
+
# that, silently, which is the whole reason this branch exists. Refuse and say where
|
|
178
|
+
# to go. A starter kit never reaches here (no `unoverse-platform` package above it),
|
|
179
|
+
# so the developer publish keeps working untouched.
|
|
180
|
+
echo "" >&2
|
|
181
|
+
echo " The unoverse CLI does not release the platform." >&2
|
|
182
|
+
echo "" >&2
|
|
183
|
+
echo " You are inside the platform monorepo, where \`publish\` would publish rx" >&2
|
|
184
|
+
echo " ASSETS to a universe — not ship the platform. The release lives in this" >&2
|
|
185
|
+
echo " repo's own script, which the published CLI does not carry:" >&2
|
|
186
|
+
echo "" >&2
|
|
187
|
+
echo " scripts/operator.sh publish" >&2
|
|
188
|
+
echo "" >&2
|
|
189
|
+
echo " See docs/architecture/DEVELOPER_GUIDE.md § Releasing." >&2
|
|
190
|
+
echo "" >&2
|
|
191
|
+
exit 1
|
|
157
192
|
else
|
|
158
193
|
shift; node --import tsx "$GRAVITY_LIB/publish-assets.mjs" "$@"
|
|
159
194
|
fi
|
package/package.json
CHANGED