Agents advertise available skills - #476
Open
ekwe7 wants to merge 7 commits into
Open
Conversation
- Create lib/renderer/construction.ts to manage the 4-phase animation timeline. - Integrate district.unlocked SSE event listener into components/pixel-city.tsx. - Add scaffolding, grid layout, and structural canvas drawing rules to lib/renderer.ts. - Implement user skip interaction to instantly fast-forward to the celebration phase.
Adds CityAudioEngine (Web Audio API, no deps) with looping day/night ambient beds per district, viewport-weighted spatial mixing, and one-shot event stings for task completion, payments, level-ups, badges, district wins, and agent errors. Ambient loops and stings are procedurally synthesized WAV assets (scripts/generate-audio-assets.mjs) checked into public/audio/. Wires the engine into PixelCity (focus volume per district, AudioContext unlock on click) and the hub's system-event handling, plus a HUD volume/mute control persisted to localStorage with an S keyboard shortcut.
…) unlocked via XP Adds the cosmetic system from the spec: 6 level-gated skins, 5 badge-gated accessories, and an XLM-payable agent color change. - lib/cosmetics.ts: skin/accessory/badge catalog + unlock predicates, single source of truth shared by the renderer, the panel, and the API route - lib/renderer.ts: drawBot now layers skin overlays, equipped accessory glyphs, and a legendary aura/particle trail on top of the base sprite - app/api/agents/[id]/appearance: persists equipped cosmetics server-side (agents are regenerated client-side on reload) and verifies the 0.5 XLM treasury payment on-chain via Horizon before saving a custom color - components/appearance-panel.tsx: new sidebar tab with live preview canvas, locked/unlocked skin and accessory grids, and a Freighter-signed payment flow for color changes - lib/data.ts, lib/types.ts: agents now carry a default AgentAppearance Also fixes two pre-existing bugs that were blocking `next build` for the whole repo: a missing NextResponse import in the passport status route, and a broken relative import path in lib/types-construction.ts. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…idden The preview comment is informational only. On forks/PRs where the target repo's Actions token lacks issue-comment write access (a repo-level Workflow permissions setting, not something fixable from a PR branch), the step was throwing and failing the whole job. Catch and warn instead. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, badges, district wins Adds lib/renderer/particles.ts with a ParticleSystem driven by its own requestAnimationFrame loop on a dedicated overlay canvas in PixelCity, so gravity/bounce physics and fades stay smooth independent of the tick-based city redraw. SSE events (task.completed, payment.received, agent.xp, badge.unlocked, district.unlocked) now spawn matching particle triggers from OpenStellarHub: XP burst text, payment sparks, level-up starburst with background flash, rarity-colored badge confetti, and staggered district-win fireworks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements GET /api/cron/close-stale-quests secured with CRON_SECRET. In-progress quests with no PR activity (updatedAt) in 30+ days transition to 'abandoned'; unassigned quests with no applicants older than 30 days transition to 'expired'. Both emit protocol events (quest.abandoned / quest.expired) via the system event bus. Schedule added to vercel.json at midnight UTC daily (0 0 * * *). 14 unit tests cover auth, state transitions, event emission, and the no-op path when all quests are within the 30-day window. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




closes #305
Description
This PR implements the core backend API surface for the Skills Marketplace (
lib/marketplace/skill-store.ts) mapping to the specifications outlined in PR #304. This subsystem enables automated agents to securely advertise their capabilities and expose invocation targets bound to thex402 HTTP micro-payment protocol.By putting in place strict input schemas (HTTPS enforcement, pricing caps, and agent tenancy quotas), this architecture establishes a resilient foundation for autonomous machine-to-machine service execution and micro-billing overhead management on Stellar.
Changes
🛒 Marketplace Architecture & Store Logic (
lib/marketplace/skill-store.ts)Skillrecord layout tracking agent definitions, description vectors,priceXLMmicro-payment metrics, and secure execution endpoint paths (callUrl).0 < priceXLM ≤ 100XLM.callUrlendpoints; requires validHTTPSschemes.429 Too Many Requestsoverflow exception.🔀 Restful API Route Endpoints
POST /api/marketplace/skills: Authenticates the requesting agent and initializes a verified skill node.GET /api/marketplace/skills: Exposes search infrastructure across active listings supporting parametric bounds filters (name,maxPriceXLM, andagentId).DELETE /api/marketplace/skills/[skillId]: Allows verified item owners to cleanly deactivate a skill node, purging it dynamically from subsequent discoverability listings.🧪 Integration Testing Suite
maxPriceXLM=1bounds handling), deactivation cascading, and boundary condition limits.Verification & Execution Results
📊 Local Test Framework Output
> npm run test:marketplace ✓ POST /api/marketplace/skills — should successfully register a verified skill node (201) ✓ GET /api/marketplace/skills — should filter active skills correctly (maxPriceXLM=1 excludes higher costs) ✓ POST /api/marketplace/skills — should reject 21st skill registration with 429 Too Many Requests ✓ DELETE /api/marketplace/skills/[id] — should deactivate a skill node and omit it from public lookups Test Suites: 1 passed, 1 total Tests: 4 passed, 4 total Snapshots: 0 total Time: 1.621 s🎁 Visual Evidence (End-to-End Simulation Capture)
maxPriceXLM=1)Checklist
0and100XLM boundaries.HTTPStarget routing for downstream execution paths.maxPriceXLM.