@rubytech/create-realagent 1.0.856 → 1.0.859
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.
- package/dist/__tests__/cdp-port-no-silent-fallback.test.js +53 -0
- package/dist/index.js +58 -22
- package/dist/port-resolution.js +1 -1
- package/package.json +2 -2
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +2 -2
- package/payload/platform/plugins/admin/mcp/dist/index.js +20 -10
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +1 -1
- package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +1 -1
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +36 -9
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
- package/payload/platform/scripts/check-no-task-id-leaks.mjs +110 -0
- package/payload/platform/scripts/test-laptop-vnc-boot.sh +8 -1
- package/payload/platform/scripts/vnc.sh +40 -34
- package/payload/server/chunk-22LK7D5R.js +1612 -0
- package/payload/server/chunk-2Q2S52GB.js +10906 -0
- package/payload/server/chunk-7ADUQXTU.js +2143 -0
- package/payload/server/chunk-BY4LZDL4.js +667 -0
- package/payload/server/chunk-CNNPNADU.js +10891 -0
- package/payload/server/chunk-FL3H3AQD.js +1603 -0
- package/payload/server/client-pool-3BCJTPPA.js +34 -0
- package/payload/server/client-pool-WA5WGN7W.js +34 -0
- package/payload/server/cloudflare-task-tracker-OOQCL5ZB.js +20 -0
- package/payload/server/maxy-edge.js +34 -6
- package/payload/server/public/assets/{admin-CZpefPcA.js → admin-BumnnEDn.js} +60 -60
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +202 -134
|
@@ -29,7 +29,14 @@ pass() { echo "OK: $*"; }
|
|
|
29
29
|
[ -r "$BRAND_JSON" ] || fail "${BRAND_JSON} unreadable"
|
|
30
30
|
command -v jq >/dev/null 2>&1 || fail "jq not on PATH (apt install jq)"
|
|
31
31
|
CONFIG_DIR=$(jq -r '.configDir // ".maxy"' "$BRAND_JSON")
|
|
32
|
-
|
|
32
|
+
# Task 959 — brand.json is the single source of truth for cdpPort at
|
|
33
|
+
# runtime; a missing field is a doctrinal violation, not a fallback.
|
|
34
|
+
if ! CDP_PORT=$(jq -er '.cdpPort' "$BRAND_JSON" 2>/dev/null); then
|
|
35
|
+
_keys=$(jq -r 'keys | join(",")' "$BRAND_JSON" 2>/dev/null || echo "unparseable")
|
|
36
|
+
_brand=$(echo "$CONFIG_DIR" | sed 's/^\.//')
|
|
37
|
+
echo "[test-laptop-vnc-boot] error reason=cdp-port-unresolved brand=$_brand path=$BRAND_JSON field=cdpPort json_keys=$_keys" >&2
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
33
40
|
PERSIST_DIR="${HOME}/${CONFIG_DIR}"
|
|
34
41
|
VNC_LOG="${PERSIST_DIR}/logs/vnc-boot.log"
|
|
35
42
|
|
|
@@ -41,36 +41,42 @@ set -uo pipefail
|
|
|
41
41
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
42
42
|
PLATFORM_ROOT="${MAXY_PLATFORM_ROOT:-$(dirname "$SCRIPT_DIR")}"
|
|
43
43
|
BRAND_JSON="${PLATFORM_ROOT}/config/brand.json"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if [ -f "$BRAND_JSON" ]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
_rfb=$(jq -r '.rfbPort // empty' "$BRAND_JSON" 2>/dev/null) || true
|
|
58
|
-
if [ -n "$_rfb" ] && [ "$_rfb" -eq "$_rfb" ] 2>/dev/null; then RFB_PORT="$_rfb"; fi
|
|
59
|
-
_wsp=$(jq -r '.websockifyPort // empty' "$BRAND_JSON" 2>/dev/null) || true
|
|
60
|
-
if [ -n "$_wsp" ] && [ "$_wsp" -eq "$_wsp" ] 2>/dev/null; then WEBSOCKIFY_PORT="$_wsp"; fi
|
|
61
|
-
_cdp=$(jq -r '.cdpPort // empty' "$BRAND_JSON" 2>/dev/null) || true
|
|
62
|
-
if [ -n "$_cdp" ] && [ "$_cdp" -eq "$_cdp" ] 2>/dev/null; then CDP_PORT="$_cdp"; fi
|
|
63
|
-
_hn=$(jq -r '.hostname // empty' "$BRAND_JSON" 2>/dev/null) || true
|
|
64
|
-
[ -n "$_hn" ] && BRAND_HOSTNAME="$_hn"
|
|
44
|
+
|
|
45
|
+
# Task 959 — brand.json is the single source of truth at runtime; missing
|
|
46
|
+
# fields loud-fail rather than silently substituting a vncDisplay-derived
|
|
47
|
+
# offset (silent-fallback-masks-root-cause recurrence). The install-time
|
|
48
|
+
# offset rule in packages/create-maxy/src/index.ts stamps every brand at
|
|
49
|
+
# build time, so a correctly-installed device always has all five fields.
|
|
50
|
+
if [ ! -f "$BRAND_JSON" ]; then
|
|
51
|
+
echo "[vnc.sh] error reason=brand-config-missing path=$BRAND_JSON" >&2
|
|
52
|
+
exit 1
|
|
53
|
+
fi
|
|
54
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
55
|
+
echo "[vnc.sh] error reason=brand-config-missing path=$BRAND_JSON detail=\"jq not on PATH\"" >&2
|
|
56
|
+
exit 1
|
|
65
57
|
fi
|
|
66
58
|
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
# `exit 1` inside a `$(…)` command substitution only kills the subshell, so
|
|
60
|
+
# the loud-fail uses a parent-context `||` chain instead. Each field is read
|
|
61
|
+
# with `jq -e` (exit non-zero on null/missing) and a parent-context error
|
|
62
|
+
# helper invokes the script-level `exit 1`.
|
|
63
|
+
_fail_brand_field() {
|
|
64
|
+
local field="$1"
|
|
65
|
+
local keys
|
|
66
|
+
keys=$(jq -r 'keys | join(",")' "$BRAND_JSON" 2>/dev/null || echo "unparseable")
|
|
67
|
+
local brand_label
|
|
68
|
+
brand_label=$(jq -r '.configDir // "unknown"' "$BRAND_JSON" 2>/dev/null | sed 's/^\.//')
|
|
69
|
+
echo "[vnc.sh] error reason=cdp-port-unresolved brand=$brand_label path=$BRAND_JSON field=$field json_keys=$keys" >&2
|
|
70
|
+
exit 1
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
CONFIG_DIR=$(jq -er '.configDir' "$BRAND_JSON" 2>/dev/null) || _fail_brand_field configDir
|
|
74
|
+
VNC_DISPLAY_NUM=$(jq -er '.vncDisplay' "$BRAND_JSON" 2>/dev/null) || _fail_brand_field vncDisplay
|
|
75
|
+
RFB_PORT=$(jq -er '.rfbPort' "$BRAND_JSON" 2>/dev/null) || _fail_brand_field rfbPort
|
|
76
|
+
WEBSOCKIFY_PORT=$(jq -er '.websockifyPort' "$BRAND_JSON" 2>/dev/null) || _fail_brand_field websockifyPort
|
|
77
|
+
CDP_PORT=$(jq -er '.cdpPort' "$BRAND_JSON" 2>/dev/null) || _fail_brand_field cdpPort
|
|
78
|
+
BRAND_HOSTNAME=$(jq -r '.hostname // empty' "$BRAND_JSON" 2>/dev/null)
|
|
79
|
+
[ -z "$BRAND_HOSTNAME" ] && BRAND_HOSTNAME="${CONFIG_DIR#.}"
|
|
74
80
|
|
|
75
81
|
VNC_DISPLAY=":${VNC_DISPLAY_NUM}"
|
|
76
82
|
MAXY_DIR="${HOME}/${CONFIG_DIR}"
|
|
@@ -96,18 +102,18 @@ CHROMIUM_BIN_FILE="${PLATFORM_ROOT}/config/chromium-binary.path"
|
|
|
96
102
|
if [ ! -r "$CHROMIUM_BIN_FILE" ]; then
|
|
97
103
|
log "[vnc.sh:chromium] FATAL: ${CHROMIUM_BIN_FILE} missing or unreadable"
|
|
98
104
|
echo "ERROR: ${CHROMIUM_BIN_FILE} missing or unreadable." >&2
|
|
99
|
-
echo " Re-run the installer to provision a non-snap Chromium
|
|
105
|
+
echo " Re-run the installer to provision a non-snap Chromium." >&2
|
|
100
106
|
exit 1
|
|
101
107
|
fi
|
|
102
108
|
CHROMIUM_BIN="$(head -n1 "$CHROMIUM_BIN_FILE" | tr -d '[:space:]')"
|
|
103
109
|
if [ -z "$CHROMIUM_BIN" ]; then
|
|
104
110
|
log "[vnc.sh:chromium] FATAL: ${CHROMIUM_BIN_FILE} is empty"
|
|
105
|
-
echo "ERROR: ${CHROMIUM_BIN_FILE} is empty — re-run installer
|
|
111
|
+
echo "ERROR: ${CHROMIUM_BIN_FILE} is empty — re-run installer." >&2
|
|
106
112
|
exit 1
|
|
107
113
|
fi
|
|
108
114
|
if [ ! -x "$CHROMIUM_BIN" ]; then
|
|
109
115
|
log "[vnc.sh:chromium] FATAL: configured CHROMIUM_BIN=${CHROMIUM_BIN} is not executable"
|
|
110
|
-
echo "ERROR: configured Chromium binary ${CHROMIUM_BIN} is not executable — re-run installer
|
|
116
|
+
echo "ERROR: configured Chromium binary ${CHROMIUM_BIN} is not executable — re-run installer." >&2
|
|
111
117
|
exit 1
|
|
112
118
|
fi
|
|
113
119
|
CHROMIUM_REALPATH="$(readlink -f "$CHROMIUM_BIN" 2>/dev/null || echo "$CHROMIUM_BIN")"
|
|
@@ -115,7 +121,7 @@ case ":$(echo "$CHROMIUM_REALPATH" | tr '/' ':'):" in
|
|
|
115
121
|
*:snap:*)
|
|
116
122
|
log "[vnc.sh:chromium] FATAL: CHROMIUM_BIN=${CHROMIUM_BIN} resolves to ${CHROMIUM_REALPATH} (snap-confined)"
|
|
117
123
|
echo "ERROR: configured Chromium ${CHROMIUM_BIN} resolves to ${CHROMIUM_REALPATH} which is snap-confined." >&2
|
|
118
|
-
echo " Snap AppArmor denies writes to ~/.{brand}/chromium-profile/. Re-run installer to install Google Chrome
|
|
124
|
+
echo " Snap AppArmor denies writes to ~/.{brand}/chromium-profile/. Re-run installer to install Google Chrome." >&2
|
|
119
125
|
exit 1
|
|
120
126
|
;;
|
|
121
127
|
esac
|
|
@@ -305,7 +311,7 @@ start_chrome_on() {
|
|
|
305
311
|
if check_window_on_display "${target_display}"; then
|
|
306
312
|
log "Chromium ready (${label}) with CDP on :${CDP_PORT} windowPresent=true"
|
|
307
313
|
else
|
|
308
|
-
log "WARNING: Chromium CDP up on :${CDP_PORT} but no window visible on ${target_display} (${label}) — observability-only, not gating
|
|
314
|
+
log "WARNING: Chromium CDP up on :${CDP_PORT} but no window visible on ${target_display} (${label}) — observability-only, not gating"
|
|
309
315
|
fi
|
|
310
316
|
else
|
|
311
317
|
log "ERROR: Chromium failed to start on ${target_display} (${label}) — CDP port ${CDP_PORT} not listening (browser-specialist degraded)"
|
|
@@ -381,7 +387,7 @@ start_chrome_native() {
|
|
|
381
387
|
elif [ "$NATIVE_SESSION_TYPE" = "wayland" ]; then
|
|
382
388
|
log "Chromium ready (native) with CDP on :${CDP_PORT} windowPresent=unknown (wayland)"
|
|
383
389
|
else
|
|
384
|
-
log "WARNING: Chromium CDP up on :${CDP_PORT} but no window visible on ${NATIVE_DISPLAY} (native) — observability-only, not gating
|
|
390
|
+
log "WARNING: Chromium CDP up on :${CDP_PORT} but no window visible on ${NATIVE_DISPLAY} (native) — observability-only, not gating"
|
|
385
391
|
fi
|
|
386
392
|
else
|
|
387
393
|
log "ERROR: Chromium failed to start on ${NATIVE_DISPLAY} (native) — CDP port ${CDP_PORT} not listening (browser-specialist degraded)"
|