stacksagent 1.1.1 → 1.1.2

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.
@@ -1,7 +1,7 @@
1
1
  id,category,name,description,code,imports,notes
2
- 1,wallet,connect-wallet,"Connect to Leather/Xverse","const userData = await showConnect({ appDetails onFinish: (data) => setUser(data) userSession })","import { showConnect } from '@stacks/connect'","Returns user session with address and profile"
3
- 2,wallet,get-address,"Get user's STX address","const address = userSession.loadUserData().profile.stxAddress.mainnet","import { AppConfig UserSession } from '@stacks/auth'","mainnet or testnet property"
4
- 3,wallet,disconnect,"Disconnect wallet","userSession.signUserOut()","import { UserSession } from '@stacks/auth'","Clears local session data"
2
+ 1,wallet,connect-wallet,"Connect to Leather/Xverse wallet","const response = await connect(); console.log('Connected:' response.addresses.mainnet)","import { connect } from '@stacks/connect'","Returns response with addresses object containing mainnet and testnet addresses"
3
+ 2,wallet,get-address,"Get user's STX address after connecting","const response = await connect(); const mainnetAddress = response.addresses.mainnet; const testnetAddress = response.addresses.testnet","import { connect } from '@stacks/connect'","Response contains both mainnet and testnet addresses"
4
+ 3,wallet,disconnect,"Disconnect wallet","await disconnect(); localStorage.removeItem('walletAddress')","import { disconnect } from '@stacks/connect'","Disconnects wallet and clears session; also clear localStorage"
5
5
  4,transaction,stx-transfer,"Transfer STX","await makeSTXTokenTransfer({ recipient amount senderKey network anchorMode: AnchorMode.Any })","import { makeSTXTokenTransfer AnchorMode } from '@stacks/transactions'","Amount in microSTX (1 STX = 1000000 microSTX)"
6
6
  5,transaction,contract-call,"Call contract function","await makeContractCall({ contractAddress contractName functionName functionArgs senderKey network anchorMode: AnchorMode.Any })","import { makeContractCall AnchorMode } from '@stacks/transactions'","Use cv.* constructors for functionArgs"
7
7
  6,transaction,deploy-contract,"Deploy Clarity contract","await makeContractDeploy({ contractName codeBody senderKey network anchorMode: AnchorMode.Any })","import { makeContractDeploy AnchorMode } from '@stacks/transactions'","codeBody is Clarity code as string"
@@ -57,11 +57,11 @@ id,category,name,description,code,imports,notes
57
57
  57,utilities,format-balance,"Format STX balance from microSTX to STX with decimals","function formatStx(microStx decimals = 6) { const stx = Number(microStx) / 1000000; return stx.toFixed(decimals) }","None","1 STX = 1,000,000 microSTX; default to 6 decimal places"
58
58
  58,transaction,tx-error-handling,"Comprehensive error handling for transaction failures","try { const result = await broadcastTransaction(tx network); return result } catch (error) { if (error.message.includes('ConflictingNonceInMempool')) throw new Error('Nonce conflict wait and retry'); if (error.message.includes('NotEnoughFunds')) throw new Error('Insufficient balance'); throw error }","None (error handling pattern)","Handles common transaction errors with user-friendly messages"
59
59
  59,network,switch-network,"Dynamically switch between networks at runtime","function getNetwork(networkName) { const networks = { mainnet: new StacksMainnet() testnet: new StacksTestnet() devnet: new StacksDevnet() }; return networks[networkName] || networks.testnet }","import { StacksMainnet StacksTestnet StacksDevnet } from '@stacks/network'","Factory pattern for network switching; defaults to testnet if unknown"
60
- 60,wallet,connect-wallet-button,"Wallet connect button with loading states","function ConnectButton() { const [connecting setConnecting] = useState(false); const handleConnect = async () => { setConnecting(true); try { const { userSession } = await showConnect({ appDetails onFinish: (data) => { localStorage.setItem('walletAddress' data.profile.stxAddress.mainnet); setConnecting(false) } })} catch(e) { setConnecting(false) }}; return <button onClick={handleConnect} disabled={connecting}>{connecting ? 'Connecting...' : 'Connect Wallet'}</button> }","import { showConnect } from '@stacks/connect'; import { useState } from 'react'","React component; saves address to localStorage on successful connection"
60
+ 60,wallet,connect-wallet-button,"Wallet connect button with loading states","function ConnectButton({ onConnect }) { const [connecting setConnecting] = useState(false); const handleConnect = async () => { setConnecting(true); try { const response = await connect(); localStorage.setItem('walletAddress' response.addresses.mainnet); onConnect?.(response.addresses.mainnet); setConnecting(false) } catch(e) { setConnecting(false) }}; return <button onClick={handleConnect} disabled={connecting}>{connecting ? 'Connecting...' : 'Connect Wallet'}</button> }","import { connect } from '@stacks/connect'; import { useState } from 'react'","React component; uses new connect() API and saves address to localStorage"
61
61
  61,wallet,display-wallet-address,"Display connected wallet with truncated address","function WalletDisplay({ address }) { const truncated = address ? `${address.slice(0 6)}...${address.slice(-4)}` : ''; const handleCopy = () => navigator.clipboard.writeText(address); return <div onClick={handleCopy}>{truncated}</div> }","import { useState } from 'react'","Shows first 6 and last 4 characters; click to copy full address"
62
- 62,wallet,use-wallet-hook,"Complete React hook for wallet connection management","function useWallet() { const [address setAddress] = useState(null); const [connected setConnected] = useState(false); useEffect(() => { const saved = localStorage.getItem('walletAddress'); if (saved) { setAddress(saved); setConnected(true) }}, []); const connect = async () => { const userData = await showConnect({ appDetails onFinish: (data) => { const addr = data.profile.stxAddress.mainnet; setAddress(addr); setConnected(true); localStorage.setItem('walletAddress' addr) }}); return userData }; const disconnect = () => { setAddress(null); setConnected(false); localStorage.removeItem('walletAddress') }; return { address connected connect disconnect }}","import { showConnect } from '@stacks/connect'; import { useState useEffect } from 'react'","Complete wallet management with persistence; auto-reconnect from localStorage"
62
+ 62,wallet,use-wallet-hook,"Complete React hook for wallet connection management","function useWallet() { const [address setAddress] = useState(null); const [connected setConnected] = useState(false); useEffect(() => { const saved = localStorage.getItem('walletAddress'); if (saved) { setAddress(saved); setConnected(true) }}, []); const connectWallet = async () => { const response = await connect(); const addr = response.addresses.mainnet; setAddress(addr); setConnected(true); localStorage.setItem('walletAddress' addr); return response }; const disconnectWallet = async () => { await disconnect(); setAddress(null); setConnected(false); localStorage.removeItem('walletAddress') }; return { address connected connect: connectWallet disconnect: disconnectWallet }}","import { connect disconnect } from '@stacks/connect'; import { useState useEffect } from 'react'","Complete wallet management with new connect() API and localStorage persistence"
63
63
  63,state-management,persist-wallet-connection,"Save wallet connection state to localStorage","function saveWalletState(address network connected) { const state = { address network connected timestamp: Date.now() }; localStorage.setItem('stacks_wallet' JSON.stringify(state)) }; function loadWalletState() { const raw = localStorage.getItem('stacks_wallet'); if (!raw) return null; const state = JSON.parse(raw); const hourAgo = Date.now() - 3600000; if (state.timestamp < hourAgo) return null; return state }","None (native browser API)","Includes timestamp expiry (1 hour); prevents stale connections"
64
- 64,wallet,auto-reconnect,"Auto-reconnect wallet on page load from localStorage","function AutoReconnect() { const { setAddress setConnected } = useWalletStore(); useEffect(() => { const reconnect = async () => { const saved = localStorage.getItem('walletAddress'); if (!saved) return; const { isConnected getLocalStorage } = await import('@stacks/connect'); if (isConnected()) { const data = getLocalStorage(); setAddress(data?.addresses?.stx?.[0]?.address); setConnected(true) }}}; reconnect() }, []); return null }","import { useEffect } from 'react'","Component to mount at app root; checks @stacks/connect isConnected() state"
64
+ 64,wallet,check-connection,"Check if wallet is already connected","if (isConnected()) { console.log('Already authenticated'); return }","import { isConnected } from '@stacks/connect'","Check connection status before calling connect(); prevents duplicate connection prompts"
65
65
  65,wallet,disconnect-button,"Disconnect wallet with UI feedback and cleanup","function DisconnectButton({ onDisconnect }) { const handleDisconnect = async () => { const { disconnect } = await import('@stacks/connect'); await disconnect(); localStorage.removeItem('walletAddress'); localStorage.removeItem('stacks_wallet'); onDisconnect(); }; return <button onClick={handleDisconnect}>Disconnect</button> }","import { disconnect } from '@stacks/connect'","Cleans up both localStorage and @stacks/connect session"
66
66
  66,utilities,format-wallet-address,"Format wallet address for display (truncated)","function formatAddress(address maxLength = 12) { if (!address) return ''; if (address.length <= maxLength) return address; const start = Math.floor((maxLength - 3) / 2); const end = address.length - (maxLength - 3 - start); return `${address.slice(0 start)}...${address.slice(end)}` }","None","Configurable truncation; default shows ~6 chars + ... + ~3 chars"
67
67
  67,wallet,connection-status-badge,"Visual connection status indicator","function ConnectionStatus({ connected }) { return <div style={{ display: 'flex' alignItems: 'center' gap: '8px' }}><div style={{ width: 8 height: 8 borderRadius: '50%' background: connected ? '#10b981' : '#ef4444' }} /><span>{connected ? 'Connected' : 'Disconnected'}</span></div> }","import { React } from 'react'","Green dot for connected, red for disconnected; customizable styling"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stacksagent",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "AI Skill for building Stacks blockchain applications - CLI installer",
5
5
  "bin": {
6
6
  "stacksagent": "./dist/index.js"