Skip to content

feat(platform): Explore Publishing — metadata-repo sync, listings API, and frontend#57

Merged
Zena-park merged 6 commits intofeat/app-customized-frameworkfrom
feat/explore-publishing
Mar 16, 2026
Merged

feat(platform): Explore Publishing — metadata-repo sync, listings API, and frontend#57
Zena-park merged 6 commits intofeat/app-customized-frameworkfrom
feat/explore-publishing

Conversation

@Zena-park
Copy link
Copy Markdown
Member

Summary

Implements the Explore Publishing pipeline: appchain operators register metadata in tokamak-rollup-metadata-repository, and the Platform automatically syncs and displays them on the Explore page.

  • DB: explore_listings table (30 columns) for metadata-repo synced appchain data
  • Metadata Sync: GitHub Git Trees API polling every 5 minutes with SHA-based change detection and bounded concurrency
  • API: resolveAppchain() pattern — check listings first, fallback to legacy deployments; merged pagination; stack/chain filters
  • L1 Indexer: Direct index lookups (getListingByIdentityContract, getDeploymentByProposer) instead of full-table scans
  • Frontend: Stack type badges, L1 network filters, native token display, operator info, ServiceLink component extraction
  • Types: Shared Appchain/AppchainDetail interfaces in lib/types.ts with getAppchainChainId() helper
  • Tests: 34 unit tests (listings CRUD, metadata-sync parseFilePath, deployments proposer lookup)

Commits

  1. 8de38a5 — Analysis and development plan
  2. 591f460 — DB schema, metadata-sync, API transition (Steps 6-8)
  3. 740dda6 — Explore frontend updates (Step 9)
  4. a17afe6 — Simplify review Phase 1: SP1 profiling baseline and ZK optimization plan #1 fixes
  5. 80547d5 — Simplify review feat(tokamak): JIT-compiled EVM with proven execution infrastructure #2 fixes + unit tests

Test plan

  • npm test passes (34/34 unit tests)
  • next build succeeds with no type errors
  • Server modules load without import errors
  • Metadata sync correctly upserts/deletes listings from GitHub repo
  • Explore page shows both listings and legacy deployments
  • Stack type and L1 chain filters work correctly
  • Detail page displays listing-specific fields (native token, operator, L1 contracts)

Design metadata-repo-based appchain registry with CI auto-validation,
Platform DB sync, and Desktop Messenger public toggle integration.
…PI transition (Steps 6-8)

Step 6 — DB & Sync:
- Add explore_listings table to schema.sql (synced from metadata repo)
- Create db/listings.js with upsertListing, getListings, deletion detection
- Create lib/metadata-sync.js — GitHub Git Trees API polling (5-min interval)
- Wire metadata-sync into server.js startup

Step 7 — API transition:
- Remove FK constraints from social tables (support both deployment and listing IDs)
- Update store.js GET /appchains to merge listings + deployments
- Update store.js GET /appchains/:id to check listings first
- Update requireAppchain middleware to check both tables
- Update requireOwner to use signed_by as fallback

Step 8 — L1 Indexer integration:
- Update l1-indexer to enrich both listings and deployments from IPFS metadata
- Collect proposer addresses from both tables for event polling
…tep 9)

- Add STACK_LABELS constant for stack type display names
- Add stack_type and l1_chain_id filter params to storeApi.appchains()
- Explore list page: add Stack Type and L1 Network filter dropdowns
- Card: show stack badge, native token symbol, operator name
- Detail page: add listing-specific fields to AppchainDetail interface
- Detail page: show stack type badge, native token, operator info section
- Detail page: build L1 contracts list from l1_contracts JSON (listings) or legacy fields
- Detail page: MetaMask "Add to Wallet" uses listing native token symbol/decimals
- Detail page: owner check includes signed_by fallback for listings
- Detail page: add bridge_url link in services section
…ity fixes

Code reuse:
- Extract resolveAppchain() helper in store.js (removes 3x duplication)
- Fix RPC proxy to use requireAppchain (was 404ing listing-only appchains)
- Detail endpoint uses requireAppchain middleware (removes double lookup)
- Extract ServiceLink component + displayUrl/isSafeUrl helpers (removes 3x JSX duplication)

Efficiency:
- SHA-based skip in metadata-sync: compare blob SHA, skip unchanged files
- Concurrent blob fetching with bounded concurrency (5 at a time)
- Add getListingByIdentityContract() for O(1) index lookup (replaces loading 1000 rows)
- Add getListingAddressesForChain() for L1 indexer (returns only addresses, not full rows)
- Remove wasted getListingById() call after upsert (caller never uses return value)

Quality:
- Fix pagination: offset applied after merge, not per-source
- Fix case-insensitive hex in parseFilePath regex
- upsertListingWithSha stores blob SHA for change detection
- Remove dead upsertListingWithSha, merge SHA into upsertListing atomically
- Replace O(N) getActiveDeployments scan with getDeploymentByProposer index lookup
- Extract shared Appchain/AppchainDetail types to lib/types.ts
- Add getAppchainChainId helper to eliminate duplicate derivation
- Fix syncOnce comment numbering (duplicate step 4 → 5)
- Add unit tests: listings (24), metadata-sync parseFilePath (9), deployments (3)
@Zena-park Zena-park added the skip-ci Skip CI checks on this PR label Mar 13, 2026
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
tokamak-appchain Ready Ready Preview, Comment Mar 16, 2026 0:08am

@Zena-park Zena-park requested a review from Copilot March 13, 2026 10:58
@Zena-park Zena-park closed this Mar 13, 2026
@Zena-park Zena-park reopened this Mar 13, 2026
@Zena-park Zena-park changed the base branch from tokamak-dev to feat/app-customized-framework March 13, 2026 11:00
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces substantial Desktop App (Tauri + React) and local-server (Node/Express + SQLite) infrastructure, alongside core Rust/L2 configuration changes (native token config, mempool tx filtering) and multiple CI workflow adjustments (skip-ci gating, disabling perf workflows, adding caches).

Changes:

  • Add Desktop App UI scaffolding, docs, build/dev scripts, and a build workflow.
  • Implement/extend local-server APIs (deployments/hosts/fs/keychain/open-url), DB schema/helpers, and remote docker tooling.
  • Extend core Rust types/config (native token fields + scaling, batch helper, fee token tx rejection), plus Docker build improvements.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
crates/desktop-app/ui/index.html Adds Vite/React HTML entrypoint for desktop UI
crates/desktop-app/ui/eslint.config.js Adds ESLint flat config for TS/React
crates/desktop-app/ui/docs/control-interface-analysis.md Adds design/analysis doc for control interface
crates/desktop-app/ui/docs/chat-feature-test-plan.md Adds chat feature test plan doc
crates/desktop-app/ui/README.md Adds desktop UI architecture + dev docs
crates/desktop-app/ui/.gitignore Adds UI gitignore defaults
crates/desktop-app/local-server/tests/e2e-chain-id.js Adds E2E script for chain ID flows
crates/desktop-app/local-server/test-e2e-fork.js Adds E2E Sepolia fork deployment script
crates/desktop-app/local-server/server.js Adds Express server: routes, store proxy, open-url, recovery, static UI
crates/desktop-app/local-server/routes/keychain.js Adds API route to list keys + derive address
crates/desktop-app/local-server/routes/hosts.js Adds CRUD + connection-test endpoints for remote hosts
crates/desktop-app/local-server/routes/fs.js Adds filesystem browse endpoint
crates/desktop-app/local-server/package.json Adds local-server package manifest + deps
crates/desktop-app/local-server/lib/tools-config.js Adds helpers to compute tools ports/URLs from deployment row
crates/desktop-app/local-server/lib/rpc-client.js Adds JSON-RPC helper for monitoring/health checks
crates/desktop-app/local-server/lib/keychain.js Adds macOS Keychain integration wrapper via security CLI
crates/desktop-app/local-server/lib/etherscan-verify.js Adds Etherscan v2 verification helper module
crates/desktop-app/local-server/lib/docker-remote.js Adds SSH-based remote docker deploy + tools start
crates/desktop-app/local-server/docs/tools-isolation-analysis.md Adds analysis doc for multi-deployment tools isolation
crates/desktop-app/local-server/docs/remote-and-ai-deploy-plan.md Adds remote + AI deploy plan doc
crates/desktop-app/local-server/docs/key-management-dev-plan.md Adds key-management implementation plan doc
crates/desktop-app/local-server/docs/external-access-plan.md Adds external-access design doc
crates/desktop-app/local-server/db/schema.sql Adds SQLite schema for deployments/hosts/events
crates/desktop-app/local-server/db/hosts.js Adds DB helpers for hosts table
crates/desktop-app/local-server/db/deployments.js Adds deployments CRUD + port/chain-id allocators + event log helpers
crates/desktop-app/local-server/db/db.js Adds SQLite initialization + migrations
crates/desktop-app/docs/unified-l2-state-design.md Adds unified L2 state design doc
crates/desktop-app/docs/tokamak-ai-credit-design.md Adds AI credit system design doc
crates/desktop-app/docs/deployment-optimization-plan.md Adds deployment optimization plan doc
crates/desktop-app/dev.sh Adds dev script to run local-server + tauri dev
crates/desktop-app/BUILD.md Adds desktop app build guide (+ CI example)
crates/common/types/l2/batch.rs Adds Batch::is_empty_batch() + unit tests
crates/common/types/genesis.rs Adds native token config fields + helpers + unit tests
crates/common/rkyv_utils.rs Adds Option<U256> rkyv wrapper
crates/blockchain/error.rs Adds mempool error for FeeToken tx not supported
crates/blockchain/blockchain.rs Rejects FeeToken tx type (0x7d) in mempool path
cmd/ethrex/l2/options.rs Adds guest program id option + prover programs-config option wiring
cmd/ethrex/l2/command.rs Passes native token scale factor into rollup processing call
cmd/ethrex/initializers.rs Refactors store engine selection + adds env-based dev block time
cmd/ethrex/build_l2.rs Adds GuestProgramRegistry contract compilation/bytecode generation
cmd/ethrex/build.rs Avoids requiring .git in Docker by using env fallback for vergen
Dockerfile.sp1 Adds SP1-enabled build image + guest program artifacts
Dockerfile Removes .git copy and adds vergen env fallback
Cargo.toml Excludes desktop-app Tauri crate from workspace and adds toml dep
.github/workflows/pr_upgradeability.yaml Adds skip-ci gating
.github/workflows/pr_perf_levm.yaml Disables PR trigger, adds skip-ci gating
.github/workflows/pr_perf_changelog.yml Disables PR trigger, adds skip-ci gating
.github/workflows/pr_perf_build_block_bench.yml Adds skip-ci gating
.github/workflows/pr_perf_blocks_exec.yaml Disables PR trigger, adds skip-ci gating
.github/workflows/pr_loc.yaml Disables PR trigger, adds fork + skip-ci gating
.github/workflows/pr_lint_readme.yaml Adds skip-ci gating
.github/workflows/pr_lint_license.yaml Adds skip-ci gating
.github/workflows/pr_lint_gha.yaml Adds skip-ci gating
.github/workflows/pr_github_status_l1.yaml Disables PR triggers, adds skip-ci gating
.github/workflows/pr_github_metadata.yaml Adds skip-ci gating
.github/workflows/pr_fixture_tests.yml Adds new fixture offline tests workflow + skip-ci gating
.github/workflows/pr_check_l2_genesis.yml Adds skip-ci gating
.github/workflows/pr-main_mdbook.yml Removes PR trigger; extends lychee excludes/timeouts
.github/workflows/pr-main_levm.yaml Adds skip-ci gating
.github/workflows/pr-main_l2_tdx_build.yaml Disables PR trigger; adds skip-ci gating
.github/workflows/pr-main_l2_prover.yaml Adds skip-ci gating
.github/workflows/pr-main_l2.yaml Adds caches; disables some matrices; renames services; loosens end-check logic
.github/workflows/pr-main_l1_l2_dev.yaml Adds skip-ci gating
.github/workflows/pr-main_l1.yaml Adds skip-ci gating
.github/workflows/main_prover.yaml Adds skip-ci gating for PR events
.github/workflows/build-desktop.yml Adds desktop build workflow for tagged releases
.github/scripts/check-hive-results.sh Expands known flaky hive tests
.dockerignore Excludes .git/ to reduce build context

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces the 'Explore Publishing' feature, enabling seamless integration and display of appchain metadata from a dedicated repository onto the platform's Explore page. It encompasses significant backend and frontend development, including new database structures, a robust metadata synchronization service, and optimized API endpoints, all designed to enhance the discoverability and presentation of appchain information.

Highlights

  • Explore Publishing Pipeline: Implemented a comprehensive pipeline for 'Explore Publishing', allowing appchain operators to register metadata in tokamak-rollup-metadata-repository for automatic syncing and display on the platform's Explore page.
  • Database & Metadata Sync: Introduced a new explore_listings table with 30 columns for synced appchain data and developed a metadata synchronization mechanism using GitHub Git Trees API polling every 5 minutes with SHA-based change detection.
  • API Enhancements: Updated the API with a resolveAppchain() pattern that prioritizes listings before falling back to legacy deployments, and added merged pagination, stack, and chain filters.
  • L1 Indexer Optimization: Improved L1 Indexer performance by implementing direct index lookups (getListingByIdentityContract, getDeploymentByProposer) to replace inefficient full-table scans.
  • Frontend Features: Enhanced the Explore page frontend with stack type badges, L1 network filters, native token display, operator information, and extracted the ServiceLink component for reusability.
  • Shared Types & Utilities: Defined shared Appchain/AppchainDetail interfaces in lib/types.ts and included a getAppchainChainId() helper function for consistent data handling.
  • Extensive Unit Testing: Added 34 new unit tests covering listings CRUD operations, metadata-sync file path parsing, and deployments proposer lookup to ensure reliability.
Changelog
  • .dockerignore
    • Added .git/ and Claude-Sessions/ to the ignore list.
    • Included crates/guest-program/bin/*/out/, Cargo.lock files, SQLite WAL/SHM files, *.tsbuildinfo, platform/server/db/platform.sqlite, .zk-dex-deployed.env, and .vercel to the ignore list.
  • .github/scripts/check-hive-results.sh
    • Expanded the KNOWN_FLAKY_TESTS array with two new test cases related to transaction value and nonce in reorg scenarios.
  • .gitignore
    • Added .keys.env, Claude-Sessions/, .zk-dex-localnet/ to the ignore list.
    • Included crates/guest-program/bin/*/out/, Cargo.lock files, SQLite WAL/SHM files, *.tsbuildinfo, platform/server/db/platform.sqlite, .zk-dex-deployed.env, and .vercel to the ignore list.
    • Modified crates/guest-program/tests/fixtures/**/*.bin to allow fixture binary files.
  • Cargo.lock
    • Updated dependencies to include ethrex-trie, serde_json, sha2, tempfile, secp256k1, and toml.
  • Cargo.toml
    • Excluded crates/desktop-app/ui/src-tauri from workspace members.
    • Added toml as a new dependency.
  • Dockerfile
    • Removed the direct copying of the .git directory.
    • Introduced VERGEN_GIT_SHA and VERGEN_GIT_BRANCH environment variables to provide fallback git information for Docker builds.
  • Dockerfile.sp1
    • Added a new multi-stage Dockerfile for building the SP1 ZK-DEX prover image with GPU support.
    • Included steps for SP1 toolchain installation, solc installation, and copying VK files.
  • cmd/ethrex/build.rs
    • Modified the vergen configuration to prioritize environment variables for git branch and SHA in Docker builds, falling back to git if not set.
  • cmd/ethrex/build_l2.rs
    • Added GuestProgramRegistry.sol to the list of L1 contracts to be compiled and written.
  • cmd/ethrex/initializers.rs
    • Refactored the open_store function to enforce that a database feature (e.g., rocksdb) must be enabled.
    • Made the dev_network_block_time_ms configurable via the ETHREX_DEV_BLOCK_TIME_MS environment variable.
  • cmd/ethrex/l2/command.rs
    • Modified the Command::run function to retrieve and pass the native_token_scale_factor to the start_rollup_node function.
  • cmd/ethrex/l2/deployer.rs
    • Imported wait_for_transaction_receipt_with_interval and ProxyDeployment for enhanced transaction handling.
    • Added new CLI options: --l2-chain-id, --register-guest-programs, and --zk-dex-sp1-vk.
    • Included guest_program_registry_address in the ContractAddresses struct.
    • Modified deploy_l1_contracts to support overriding the L2 chain ID, confirm proxy deployments inline, and output structured JSON results.
    • Introduced receipt_interval_secs and confirm_proxy_deployment helper functions for robust transaction confirmation.
    • Added deployment and initialization logic for the GuestProgramRegistry contract.
    • Implemented logic to register guest programs and their verification keys via the Timelock contract.
    • Updated BRIDGE_INITIALIZER_SIGNATURE and INITIALIZE_ON_CHAIN_PROPOSER_SIGNATURE to accommodate guest_program_registry_address and native_token_scale_factor.
    • Adjusted the wait_for_transaction_receipt timeout duration.
  • cmd/ethrex/l2/options.rs
    • Added guest_program_id to ProofCoordinatorOptions for specifying the guest program for batches.
    • Included programs_config in ProverClientOptions to allow configuring guest programs via a TOML file.
  • crates/blockchain/blockchain.rs
    • Added a check to explicitly reject FeeTokenTransaction types in add_transaction_to_mempool, indicating they are no longer supported.
  • crates/blockchain/error.rs
    • Introduced a new error variant FeeTokenTxNotSupported to indicate that FeeToken transactions are no longer supported.
  • crates/common/rkyv_utils.rs
    • Added OptionU256Wrapper to provide rkyv serialization support for Option<U256>.
  • crates/common/types/genesis.rs
    • Added native_token_l1_address and native_token_l1_decimals fields to ChainConfig for custom native gas token configuration.
    • Implemented helper methods uses_custom_native_token, native_token_l1_decimals, and native_token_scale_factor for native token management.
  • crates/common/types/l2/batch.rs
    • Added an is_empty_batch method to the Batch struct to determine if a batch contains no state-changing transactions.
  • crates/desktop-app/BUILD.md
    • Added a new build guide for the Tokamak Appchain Desktop App, covering local and CI/CD builds for macOS and Windows.
  • crates/desktop-app/dev.sh
    • Added a new development script (dev.sh) for local execution of the Desktop App, including local server and Tauri dev.
  • crates/desktop-app/docs/deployment-optimization-plan.md
    • Added a new design document outlining a comprehensive plan for deployment optimization, addressing gas cost, build times, and UX.
  • crates/desktop-app/docs/tokamak-ai-credit-design.md
    • Added a new design document for the Tokamak AI Credit System, detailing on-chain purchases and off-chain usage.
  • crates/desktop-app/docs/unified-l2-state-design.md
    • Added a new design document for a Unified L2 State Layer, aiming to provide a single source of truth for L2 state across different components.
  • crates/desktop-app/local-server/db/db.js
    • Added new database migrations to include columns like hashtags, timelock_address, sp1_verifier_address, ever_running, guest_program_registry_address, verification_status, is_public, public_domain, public_l2_rpc_url, public_l2_explorer_url, public_l1_explorer_url, public_dashboard_url, l1_chain_id, and platform_deployment_id to the deployments table.
  • crates/desktop-app/local-server/db/deployments.js
    • Added new functions for managing deploy_events (insert, get, clear).
    • Implemented getNextAvailableL2ChainId and getNextAvailableL1ChainId to generate unique chain IDs.
    • Added isL1ChainIdTaken to check for L1 chain ID conflicts.
  • crates/desktop-app/local-server/db/hosts.js
    • Added a new file (hosts.js) to manage remote host database operations, including creation, retrieval, updating, and deletion of host records.
  • crates/desktop-app/local-server/db/schema.sql
    • Added a new SQL schema for deployments, hosts, and deploy_events tables, defining their structure and relationships.
  • crates/desktop-app/local-server/docs/external-access-plan.md
    • Added a new design document detailing the plan for external access functionality, including exposing tools ports and potential ngrok integration.
  • crates/desktop-app/local-server/docs/key-management-design.md
    • Added a new design document for key management in L2 deployments, focusing on secure storage and container delivery.
  • crates/desktop-app/local-server/docs/key-management-dev-plan.md
    • Added a new development plan for Phase 1 of key management, focusing on separating private keys from Docker Compose YAML files.
  • crates/desktop-app/local-server/docs/remote-and-ai-deploy-plan.md
    • Added a new design document for remote and AI-assisted deployment, outlining goals and implementation steps.
  • crates/desktop-app/local-server/docs/tools-isolation-analysis.md
    • Added a new analysis document addressing tools container isolation for multi-deployment scenarios.
  • crates/desktop-app/local-server/lib/ai-prompt-generator.js
    • Added a new module (ai-prompt-generator.js) responsible for generating comprehensive AI-executable deployment prompts for various cloud environments.
  • crates/desktop-app/local-server/lib/compose-generator.js
    • Added generateRemoteTestnetComposeFile to create Docker Compose configurations for remote testnet deployments.
    • Updated generateTestnetComposeFile to use derived addresses instead of raw private keys directly in the YAML.
  • crates/desktop-app/local-server/lib/docker-local.js
    • Modified runCompose to support --env-file for Docker Compose commands.
    • Added buildToolsEnv, buildToolsUpArgs, startTools, buildTools, restartTools, getToolsLogs, streamToolsLogs, resolveToolsEnvFile, getToolsStatus, and stopTools for managing Docker tools services.
  • crates/desktop-app/local-server/lib/docker-remote.js
    • Added startToolsRemote and stopToolsRemote functions to manage tools (Blockscout, Bridge UI, Dashboard) on remote servers via SSH.
  • crates/desktop-app/local-server/lib/etherscan-verify.js
    • Added a new Etherscan Contract Verification Module (etherscan-verify.js) for submitting and checking contract verification statuses.
  • crates/desktop-app/local-server/lib/keychain.js
    • Added a new macOS Keychain helper (keychain.js) for securely accessing and managing secrets.
  • crates/desktop-app/local-server/lib/rpc-client.js
    • Added a new JSON-RPC client (rpc-client.js) for performing L1/L2 health checks and monitoring.
  • crates/desktop-app/local-server/lib/tools-config.js
    • Added a new module (tools-config.js) to centralize configuration for external L1 and public access settings for tools.
  • crates/desktop-app/local-server/package-lock.json
    • Updated the package-lock.json file to reflect changes in dependencies.
  • crates/desktop-app/local-server/package.json
    • Added new dependencies required for the local server functionality.
  • crates/desktop-app/local-server/public/index.html
    • Added a new index.html file for the local server's web UI, including sidebar navigation, deployment lists, launch wizard, and detail views.
  • crates/desktop-app/local-server/public/style.css
    • Added a new style.css file to define the visual styling for the local server's web UI, including layout, components, and responsive design.
  • crates/desktop-app/local-server/routes/deployments.js
    • Added new API routes for AI deploy presets, checking and reporting AI status, and handling Vultr API keys.
    • Included new API routes for checking unique L1 and L2 chain IDs.
    • Introduced new API routes for checking account balances and RPC connectivity on testnets.
    • Added API routes for listing and resolving keychain accounts.
    • Implemented new API routes for managing deployment lifecycle (provision, start, stop, destroy) and individual service control.
    • Added API routes for enabling and disabling public access to deployments.
    • Included API routes for monitoring deployment status, events (SSE stream), logs, and RPC health.
  • crates/desktop-app/local-server/routes/fs.js
    • Added a new API route (/api/fs/browse) for browsing file system directories.
  • crates/desktop-app/local-server/routes/hosts.js
    • Added new API routes for managing remote hosts (create, list, get, test connection, update, delete).
  • crates/desktop-app/local-server/routes/keychain.js
    • Added new API routes for listing keychain keys and checking their existence/deriving addresses.
  • crates/desktop-app/local-server/server.js
    • Configured the Express app with new routes for deployments, hosts, file system, and keychain.
    • Added a new endpoint /api/store/programs to fetch programs from the Platform API or fallback to defaults.
    • Implemented recovery logic for stuck deployments on server startup.
    • Added an endpoint /api/open-url to open URLs in the system browser, including a special case for Keychain registration via macOS dialogs.
    • Included a health check endpoint /api/health.
  • crates/desktop-app/local-server/test-e2e-fork.js
    • Added a new E2E test script (test-e2e-fork.js) for Sepolia Fork Deployment, covering fresh deployment, contract reuse, image reuse, and cancel scenarios.
  • crates/desktop-app/local-server/test.js
    • Added a new test suite (test.js) for the local server, covering DB operations, RPC client, Express app, control logic, and external access features.
  • crates/desktop-app/ui/.gitignore
    • Added a new .gitignore file for the UI directory, excluding logs, node modules, build artifacts, and editor-specific files.
  • crates/desktop-app/ui/README.md
    • Added a new README.md for the Tokamak Appchain Desktop App UI, detailing its architecture, views, key features, and local development setup.
  • crates/desktop-app/ui/docs/chat-feature-test-plan.md
    • Added a new test plan document for the chat feature, covering platform login/logout, token usage, chat history, AI mode switching, and message handling.
  • crates/desktop-app/ui/docs/control-interface-analysis.md
    • Added a new analysis document for the appchain control interface, comparing state sources, mapping status values, and outlining reconciliation flows.
  • crates/desktop-app/ui/docs/telegram-pilot-design.md
    • Added a new design document for the Telegram AI Pilot, detailing its architecture, memory management, and action execution engine.
  • crates/desktop-app/ui/eslint.config.js
    • Added a new eslint.config.js file for ESLint configuration in the UI project, including recommended rules for JavaScript, TypeScript, React Hooks, and React Refresh.
  • crates/desktop-app/ui/index.html
    • Added a new index.html file as the entry point for the Tokamak Appchain Messenger UI.
Ignored Files
  • Ignored by pattern: .github/workflows/** (22)
    • .github/workflows/build-desktop.yml
    • .github/workflows/main_prover.yaml
    • .github/workflows/pr-main_l1.yaml
    • .github/workflows/pr-main_l1_l2_dev.yaml
    • .github/workflows/pr-main_l2.yaml
    • .github/workflows/pr-main_l2_prover.yaml
    • .github/workflows/pr-main_l2_tdx_build.yaml
    • .github/workflows/pr-main_levm.yaml
    • .github/workflows/pr-main_mdbook.yml
    • .github/workflows/pr_check_l2_genesis.yml
    • .github/workflows/pr_fixture_tests.yml
    • .github/workflows/pr_github_metadata.yaml
    • .github/workflows/pr_github_status_l1.yaml
    • .github/workflows/pr_lint_gha.yaml
    • .github/workflows/pr_lint_license.yaml
    • .github/workflows/pr_lint_readme.yaml
    • .github/workflows/pr_loc.yaml
    • .github/workflows/pr_perf_blocks_exec.yaml
    • .github/workflows/pr_perf_build_block_bench.yml
    • .github/workflows/pr_perf_changelog.yml
    • .github/workflows/pr_perf_levm.yaml
    • .github/workflows/pr_upgradeability.yaml
Activity
  • The pull request includes 5 commits, detailing the analysis, development plan, DB schema, metadata-sync, API transition, frontend updates, and various review fixes with unit tests.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a major new feature for publishing appchains to the Explore page by syncing with a central metadata repository. The implementation is comprehensive, covering database schema changes, a new backend sync service, API updates to merge new and legacy data sources, and corresponding frontend enhancements. The code quality is high, with good practices like bounded concurrency in the sync process, performance optimizations in the L1 indexer, and the addition of unit tests. I've identified a couple of areas for potential improvement related to maintainability and performance scaling, but overall this is an excellent and well-executed feature.

…ntainability

- CORS: restrict origin to Tauri dev/prod allowlist (Copilot #1)
- open-url: use execFile with arg arrays instead of shell exec (Copilot #2)
- fs browse: restrict path traversal to home directory (Copilot #3)
- test-e2e-fork: move RPC URL to SEPOLIA_RPC_URL env var (Copilot #4)
- docker-remote: clear timeout on stream close, close stream on timeout (Copilot #5)
- docker-remote: add shell quoting (q()) and assertSafeName for all
  interpolated shell args to prevent injection (Copilot #6-8)
- genesis.rs: add ChainConfig::validate() for pre-startup checks (Copilot #9)
- listings.js: use named params (@id, @name, ...) instead of 30
  positional ? args for upsertListing (Gemini #1)
@Zena-park Zena-park merged commit da3f0c8 into feat/app-customized-framework Mar 16, 2026
31 of 32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-ci Skip CI checks on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants