- bootstrap no longer creates user/USER.md (owner direction) - scripts/onboard.sh: name REQUIRED (interactive loop or --name), optional fields prompted (profession, marital, age, gender, education, location, timezone, skillset, interests, hobbies, pets); flag-driven non-interactive mode for automation - templates/USER.md: canon skeleton, placeholder rendering, unfilled optional = (not provided) - agent.sh: auto-runs onboarding when profile missing (TTY gate); headless run-task warns and continues without user context - user profile dispatched to all launches (M14 layer) Closes #37 (onboarding requirements from owner layout review)
58 lines
2.4 KiB
Bash
Executable File
58 lines
2.4 KiB
Bash
Executable File
# Shared helpers for the Mosaic host scripts. Not a documented entry point.
|
|
|
|
POC_ROOT_MARKER=".mosaic-poc-root"
|
|
|
|
# Load and validate the Mosaic configuration (config.json), exporting
|
|
# MOSAIC_DATA_ROOT, MOSAIC_PROVIDER, and MOSAIC_MODEL.
|
|
#
|
|
# Fails closed: a missing or invalid configuration aborts the calling
|
|
# script before any container or filesystem mutation. Run paths never
|
|
# auto-bootstrap; use scripts/bootstrap.sh explicitly.
|
|
load_config() {
|
|
local config_env
|
|
if ! config_env="$(node scripts/mosaic-config.mjs env)"; then
|
|
echo "common: configuration load failed" >&2
|
|
exit 1
|
|
fi
|
|
eval "$config_env"
|
|
export MOSAIC_DATA_ROOT MOSAIC_PROVIDER MOSAIC_MODEL MOSAIC_ADAPTER
|
|
MOSAIC_DEV_DIR="$MOSAIC_DATA_ROOT"
|
|
}
|
|
|
|
# Resolve the release identity: RELEASE is the single source of the
|
|
# release version (stays 0.0.X until declared stable); the image tag
|
|
# derives from it plus the pinned pi dependency version.
|
|
load_release() {
|
|
local release pi_version
|
|
release="$(tr -d '[:space:]' < RELEASE)"
|
|
if ! printf '%s' "$release" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'; then
|
|
echo "common: RELEASE must be a semver-ish version, got: '$release'" >&2
|
|
exit 1
|
|
fi
|
|
pi_version="$(node -p "require('./package.json').dependencies['@earendil-works/pi-coding-agent']")"
|
|
export MOSAIC_RELEASE="$release"
|
|
export MOSAIC_IMAGE_TAG="mosaic-poc-agent:${pi_version}-r${release}"
|
|
}
|
|
|
|
# Ensure the configured runtime data directory exists and carries this
|
|
# project's ownership marker. The marker is what scripts/reset.sh requires
|
|
# before it will delete anything.
|
|
bootstrap_runtime_dir() {
|
|
if [ -d "$MOSAIC_DEV_DIR" ]; then
|
|
if [ ! -w "$MOSAIC_DEV_DIR" ] || [ ! -x "$MOSAIC_DEV_DIR" ]; then
|
|
echo "bootstrap: $MOSAIC_DEV_DIR exists but is not writable by $(id -un)" >&2
|
|
echo "bootstrap: a root-owned directory here is usually leftover from a" >&2
|
|
echo "bootstrap: Docker-created mount source; remove it and rerun." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
mkdir -p "$MOSAIC_DEV_DIR"
|
|
echo "bootstrap: created $MOSAIC_DEV_DIR"
|
|
fi
|
|
touch "$MOSAIC_DEV_DIR/$POC_ROOT_MARKER"
|
|
# Live user context layer (M14/M16): the directory is system-managed,
|
|
# but USER.md is NEVER auto-created. Onboarding (scripts/onboard.sh,
|
|
# auto-invoked by agent.sh) creates it from the template.
|
|
mkdir -p "$MOSAIC_DEV_DIR/user"
|
|
}
|