Skip to content

Commit e828556

Browse files
committed
refactor(recipe-harness): share entrypoint helpers
1 parent 3a30712 commit e828556

3 files changed

Lines changed: 79 additions & 76 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/usr/bin/env bash
2+
# Shared helpers for recipe-harness entrypoints.
3+
4+
valid_adapter_action() {
5+
case "${1:-}:${2:-}" in
6+
mobile:install|mobile:launch|mobile:live|mobile:verify|mobile:cleanup|extension:install|extension:launch|extension:live|extension:verify|extension:cleanup) return 0 ;;
7+
*) return 1 ;;
8+
esac
9+
}
10+
11+
has_arg() {
12+
local needle="$1"
13+
shift
14+
local arg
15+
for arg in "$@"; do
16+
[ "$arg" = "$needle" ] && return 0
17+
case "$arg" in "$needle="*) return 0 ;; esac
18+
done
19+
return 1
20+
}
21+
22+
arg_value() {
23+
local needle="$1"
24+
shift
25+
while [ "$#" -gt 0 ]; do
26+
case "$1" in
27+
"$needle") [ "$#" -ge 2 ] && printf '%s\n' "$2"; return 0 ;;
28+
"$needle"=*) printf '%s\n' "${1#*=}"; return 0 ;;
29+
esac
30+
shift
31+
done
32+
return 1
33+
}
34+
35+
is_false() {
36+
case "${1:-}" in
37+
0|false|FALSE|False|no|NO|No|off|OFF|Off) return 0 ;;
38+
*) return 1 ;;
39+
esac
40+
}
41+
42+
cdp_reachable() {
43+
local port="$1"
44+
command -v curl >/dev/null 2>&1 || return 1
45+
curl -fsS --max-time 1 "http://127.0.0.1:${port}/json/version" >/dev/null 2>&1
46+
}
47+
48+
detect_adapter() {
49+
local target="$1"
50+
local remote=""
51+
remote="$(git -C "$target" config --get remote.origin.url 2>/dev/null || true)"
52+
case "$remote" in
53+
*metamask-extension*) printf 'extension\n'; return 0 ;;
54+
*metamask-mobile*) printf 'mobile\n'; return 0 ;;
55+
esac
56+
57+
if [ -f "$target/development/skills-sync.ts" ] || { [ -d "$target/ui" ] && [ -d "$target/app/scripts" ]; }; then
58+
printf 'extension\n'
59+
return 0
60+
fi
61+
if [ -f "$target/scripts/skills-sync.mts" ] || { [ -d "$target/ios" ] && [ -d "$target/android" ] && [ -d "$target/app/core" ]; }; then
62+
printf 'mobile\n'
63+
return 0
64+
fi
65+
return 1
66+
}

domains/agentic/skills/recipe-harness/scripts/recipe-harness

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ log() { printf '[%s] %s\n' "$SCRIPT_NAME" "$*" >&2; }
4545
fail() { printf '[%s] ERROR: %s\n' "$SCRIPT_NAME" "$*" >&2; exit 1; }
4646

4747
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
48+
# shellcheck disable=SC1091
49+
. "$SCRIPT_DIR/lib/cli-common.sh"
4850
RECIPE_HARNESS="$SCRIPT_DIR/recipe-harness.sh"
4951
[ -x "$RECIPE_HARNESS" ] || fail "missing recipe-harness.sh next to $0"
5052

@@ -93,27 +95,6 @@ case "${1:-}" in
9395
done
9496
TARGET="$(cd "$TARGET" && pwd)"
9597

96-
detect_adapter() {
97-
local target="$1"
98-
local remote=""
99-
remote="$(git -C "$target" config --get remote.origin.url 2>/dev/null || true)"
100-
case "$remote" in
101-
*metamask-extension*) printf 'extension\n'; return 0 ;;
102-
*metamask-mobile*) printf 'mobile\n'; return 0 ;;
103-
esac
104-
105-
# Repo-shape fallback for worktrees/clones with unusual remote names.
106-
if [ -f "$target/development/skills-sync.ts" ] || { [ -d "$target/ui" ] && [ -d "$target/app/scripts" ]; }; then
107-
printf 'extension\n'
108-
return 0
109-
fi
110-
if [ -f "$target/scripts/skills-sync.mts" ] || { [ -d "$target/ios" ] && [ -d "$target/android" ] && [ -d "$target/app/core" ]; }; then
111-
printf 'mobile\n'
112-
return 0
113-
fi
114-
return 1
115-
}
116-
11798
if [ -z "$ADAPTER" ]; then
11899
ADAPTER="$(detect_adapter "$TARGET")" || fail "could not detect MetaMask repo type for $TARGET; pass --adapter mobile or --adapter extension"
119100
fi
@@ -126,10 +107,10 @@ case "${1:-}" in
126107
;;
127108
esac
128109

129-
case "$ADAPTER:$ACTION" in
130-
mobile:install|mobile:launch|mobile:live|mobile:verify|mobile:cleanup|extension:install|extension:launch|extension:live|extension:verify|extension:cleanup) ;;
131-
*) usage >&2; fail "unsupported adapter/action: ${ADAPTER:-?}/${ACTION:-?}" ;;
132-
esac
110+
if ! valid_adapter_action "$ADAPTER" "$ACTION"; then
111+
usage >&2
112+
fail "unsupported adapter/action: ${ADAPTER:-?}/${ACTION:-?}"
113+
fi
133114

134115
# In explicit form, TARGET may not be set. Try to discover it from args for display only.
135116
if [ -z "${TARGET:-}" ]; then
@@ -157,28 +138,6 @@ esac
157138

158139
log "$VERB $ADAPTER recipe harness"
159140
log "Target: $TARGET"
160-
has_arg() {
161-
local needle="$1"
162-
shift
163-
for arg in "$@"; do
164-
[ "$arg" = "$needle" ] && return 0
165-
case "$arg" in "$needle="*) return 0 ;; esac
166-
done
167-
return 1
168-
}
169-
170-
cdp_reachable() {
171-
local port="$1"
172-
command -v curl >/dev/null 2>&1 || return 1
173-
curl -fsS --max-time 1 "http://127.0.0.1:${port}/json/version" >/dev/null 2>&1
174-
}
175-
176-
is_false() {
177-
case "${1:-}" in
178-
0|false|FALSE|False|no|NO|No|off|OFF|Off) return 0 ;;
179-
*) return 1 ;;
180-
esac
181-
}
182141

183142
# shellcheck disable=SC1091
184143
. "$SCRIPT_DIR/lib/json-field.sh"

domains/agentic/skills/recipe-harness/scripts/recipe-harness.sh

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env bash
2+
# Backward-compatible low-level dispatcher. Prefer scripts/recipe-harness for human use.
23
set -euo pipefail
34

45
usage() {
@@ -18,28 +19,6 @@ Examples:
1819
EOF
1920
}
2021

21-
has_arg() {
22-
local needle="$1"
23-
shift
24-
local arg
25-
for arg in "$@"; do
26-
[ "$arg" = "$needle" ] && return 0
27-
done
28-
return 1
29-
}
30-
31-
arg_value() {
32-
local needle="$1"
33-
shift
34-
while [ "$#" -gt 0 ]; do
35-
if [ "$1" = "$needle" ]; then
36-
[ "$#" -ge 2 ] && printf '%s\n' "$2"
37-
return 0
38-
fi
39-
shift
40-
done
41-
return 1
42-
}
4322

4423
if [ "$#" -lt 2 ]; then
4524
usage >&2
@@ -51,18 +30,17 @@ ACTION="$2"
5130
shift 2
5231

5332
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33+
# shellcheck disable=SC1091
34+
. "$SCRIPT_DIR/lib/cli-common.sh"
5435
SKILL_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
5536
ADAPTER_SCRIPT="${SKILL_DIR}/adapters/${ADAPTER}/scripts/${ACTION}.sh"
5637
# shellcheck disable=SC1091
5738
. "$SCRIPT_DIR/lib/json-field.sh"
5839

59-
case "${ADAPTER}:${ACTION}" in
60-
mobile:install|mobile:launch|mobile:live|mobile:verify|mobile:cleanup|extension:install|extension:launch|extension:live|extension:verify|extension:cleanup) ;;
61-
*)
62-
usage >&2
63-
exit 2
64-
;;
65-
esac
40+
if ! valid_adapter_action "$ADAPTER" "$ACTION"; then
41+
usage >&2
42+
exit 2
43+
fi
6644

6745
if [ ! -x "$ADAPTER_SCRIPT" ]; then
6846
echo "Missing adapter script: $ADAPTER_SCRIPT" >&2

0 commit comments

Comments
 (0)