@arthai/agents 1.0.9 → 1.0.10
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/VERSION +1 -1
- package/dist/plugins/canvas/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/canvas/VERSION +1 -1
- package/dist/plugins/canvas/hooks/project-setup.sh +66 -0
- package/dist/plugins/compass/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/compass/VERSION +1 -1
- package/dist/plugins/compass/hooks/project-setup.sh +66 -0
- package/dist/plugins/counsel/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/counsel/VERSION +1 -1
- package/dist/plugins/counsel/hooks/project-setup.sh +66 -0
- package/dist/plugins/cruise/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/cruise/VERSION +1 -1
- package/dist/plugins/cruise/hooks/project-setup.sh +66 -0
- package/dist/plugins/forge/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/forge/VERSION +1 -1
- package/dist/plugins/forge/hooks/project-setup.sh +66 -0
- package/dist/plugins/prime/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/prime/VERSION +1 -1
- package/dist/plugins/prime/hooks/project-setup.sh +66 -0
- package/dist/plugins/prism/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/prism/VERSION +1 -1
- package/dist/plugins/prism/hooks/project-setup.sh +66 -0
- package/dist/plugins/scalpel/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/scalpel/VERSION +1 -1
- package/dist/plugins/scalpel/hooks/project-setup.sh +66 -0
- package/dist/plugins/sentinel/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/sentinel/VERSION +1 -1
- package/dist/plugins/sentinel/hooks/project-setup.sh +66 -0
- package/dist/plugins/shield/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/shield/VERSION +1 -1
- package/dist/plugins/shield/hooks/project-setup.sh +66 -0
- package/dist/plugins/spark/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/spark/VERSION +1 -1
- package/dist/plugins/spark/hooks/project-setup.sh +66 -0
- package/hooks/project-setup.sh +66 -0
- package/package.json +1 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.10
|
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|
package/hooks/project-setup.sh
CHANGED
|
@@ -45,6 +45,72 @@ if [ -f "$MARKER_FILE" ]; then
|
|
|
45
45
|
fi
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
# License validation (marketplace gate)
|
|
50
|
+
# ---------------------------------------------------------------------------
|
|
51
|
+
# Check key: ARTHAI_LICENSE_KEY env → ~/.claude-agents/.license → ~/.arthai/license
|
|
52
|
+
WORKER_URL="https://license-worker.muddassar-shaikh.workers.dev"
|
|
53
|
+
KEY_FORMAT='^ARTH-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$'
|
|
54
|
+
LICENSE_CACHE="$PROJECT_DIR/.claude/.license-validated"
|
|
55
|
+
CACHE_TTL=86400
|
|
56
|
+
|
|
57
|
+
REAL_HOME=$(eval echo ~"$(id -un)")
|
|
58
|
+
LICENSE_KEY="${ARTHAI_LICENSE_KEY:-}"
|
|
59
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.claude-agents/.license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.claude-agents/.license" 2>/dev/null | tr -d '[:space:]')
|
|
60
|
+
[ -z "$LICENSE_KEY" ] && [ -f "$REAL_HOME/.arthai/license" ] && LICENSE_KEY=$(cat "$REAL_HOME/.arthai/license" 2>/dev/null | tr -d '[:space:]')
|
|
61
|
+
|
|
62
|
+
if [ -z "$LICENSE_KEY" ]; then
|
|
63
|
+
echo "LICENSE REQUIRED — No license key found for marketplace plugin."
|
|
64
|
+
echo "Run: npx @arthai/agents activate ARTH-XXXX-XXXX-XXXX-XXXX"
|
|
65
|
+
echo "Get a key: productive@getarth.ai"
|
|
66
|
+
exit 0
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Validate format
|
|
70
|
+
if ! echo "$LICENSE_KEY" | grep -qE "$KEY_FORMAT"; then
|
|
71
|
+
echo "LICENSE INVALID — Key format incorrect."
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Check cache (24h TTL)
|
|
76
|
+
LICENSE_VALID=false
|
|
77
|
+
NOW=$(date +%s)
|
|
78
|
+
if [ -f "$LICENSE_CACHE" ]; then
|
|
79
|
+
CACHED_TIME=$(cat "$LICENSE_CACHE" 2>/dev/null | tr -d '[:space:]' || echo "0")
|
|
80
|
+
ELAPSED=$((NOW - CACHED_TIME))
|
|
81
|
+
if [ "$ELAPSED" -ge 0 ] && [ "$ELAPSED" -lt "$CACHE_TTL" ]; then
|
|
82
|
+
LICENSE_VALID=true
|
|
83
|
+
fi
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ! $LICENSE_VALID; then
|
|
87
|
+
# Call Worker — same logic as sync-agents.sh
|
|
88
|
+
PAYLOAD=$(printf '{"key":"%s"}' "$LICENSE_KEY")
|
|
89
|
+
RESPONSE=$(printf '%s' "$PAYLOAD" | curl -sf -m 5 -X POST "$WORKER_URL/validate" \
|
|
90
|
+
-H "Content-Type: application/json" --data "@-" 2>/dev/null) || RESPONSE=""
|
|
91
|
+
|
|
92
|
+
if [ -n "$RESPONSE" ]; then
|
|
93
|
+
VALID=$(echo "$RESPONSE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('valid',False))" 2>/dev/null) || VALID="False"
|
|
94
|
+
if [ "$VALID" = "True" ]; then
|
|
95
|
+
LICENSE_VALID=true
|
|
96
|
+
mkdir -p "$PROJECT_DIR/.claude"
|
|
97
|
+
echo "$NOW" > "$LICENSE_CACHE"
|
|
98
|
+
else
|
|
99
|
+
# Definitive invalid — no fallback
|
|
100
|
+
echo "LICENSE INVALID — Key not recognized."
|
|
101
|
+
echo "Check your key or get one at productive@getarth.ai"
|
|
102
|
+
exit 0
|
|
103
|
+
fi
|
|
104
|
+
else
|
|
105
|
+
# Network error — allow gracefully (don't block on Worker outage)
|
|
106
|
+
LICENSE_VALID=true
|
|
107
|
+
fi
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# ---------------------------------------------------------------------------
|
|
111
|
+
# Project setup (only runs if license is valid)
|
|
112
|
+
# ---------------------------------------------------------------------------
|
|
113
|
+
|
|
48
114
|
CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
|
|
49
115
|
GITIGNORE="$PROJECT_DIR/.gitignore"
|
|
50
116
|
|