diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index daacc92..dda3829 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,4 @@ -# The participant platform pin decides which build /survey26/platform/ serves. -# Changes here are routed to the platform maintainer for a look. -/scripts/agent-observer.json @BH3GEI +# Event ownership moved to the independent repositories listed in config/event-sites.json. +/config/ @hzeng8 +/scripts/ @hzeng8 +/.github/workflows/ @hzeng8 diff --git a/.github/workflows/agent-observer-pin.yml b/.github/workflows/agent-observer-pin.yml deleted file mode 100644 index b459db9..0000000 --- a/.github/workflows/agent-observer-pin.yml +++ /dev/null @@ -1,41 +0,0 @@ -# scripts/agent-observer.json decides which build of the participant platform -# /survey26/platform/ serves. A branch cut before a pin bump can carry the old revision -# back in on merge, silently rolling the live site back. This check catches that. -name: Agent Observer pin - -on: - pull_request: - paths: - - 'scripts/agent-observer.json' - -jobs: - direction: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: The pinned revision must not move backwards - env: - GH_TOKEN: ${{ github.token }} - BASE_REF: ${{ github.base_ref }} - REPO: ${{ github.repository }} - run: | - set -euo pipefail - new=$(jq -r .revision scripts/agent-observer.json) - old=$(gh api "repos/${REPO}/contents/scripts/agent-observer.json?ref=${BASE_REF}" \ - --jq .content | base64 -d | jq -r .revision) - echo "base ${BASE_REF}: ${old}" - echo "this PR: ${new}" - if [ "$new" = "$old" ]; then - echo "Pin unchanged." - exit 0 - fi - platform=$(jq -r .repository scripts/agent-observer.json) - git clone --quiet --filter=blob:none --no-checkout "$platform" platform-repo - cd platform-repo - git fetch --quiet origin "$old" "$new" - if git merge-base --is-ancestor "$new" "$old"; then - echo "::error file=scripts/agent-observer.json::This PR moves the platform pin BACKWARDS (${old} -> ${new}). ${new} is an ancestor of ${old}, so merging would serve an older build of /survey26/platform/. If the rollback is deliberate, say so in the PR description and an admin can merge past this check; otherwise rebase on main and keep the newer revision." - exit 1 - fi - echo "Pin moves forward." diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 49ad24c..9d50fbc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,94 +2,68 @@ name: Deploy hackathon sites to GitHub Pages on: push: - branches: - - main + branches: [main] + pull_request: workflow_dispatch: schedule: - # Refresh the ARC-Bench leaderboard snapshot for the public competition (the upstream API restricts browser CORS). + # Collect independently published events and refresh the ARC-Bench snapshot. - cron: '*/5 * * * *' permissions: contents: read - pages: write - id-token: write concurrency: - group: pages - cancel-in-progress: true + group: pages-${{ github.ref }} + cancel-in-progress: false jobs: build: runs-on: ubuntu-latest steps: - - name: Check out repository - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 with: node-version: 22 cache: npm cache-dependency-path: | hub/package-lock.json - events/oaic-harness-2026/package-lock.json events/agentic-hackathon-paris-2026/package-lock.json - events/agentic-cosmos-2026/package-lock.json - events/agent2app-2026/package-lock.json - - - name: Install Hub dependencies - run: npm ci --prefix hub - - - name: Install OAIC Harness dependencies - run: npm ci --prefix events/oaic-harness-2026 - - - name: Install Paris Agentic Hackathon dependencies - run: npm ci --prefix events/agentic-hackathon-paris-2026 - - - name: Install Cosmos Agentic Hackathon dependencies - run: npm ci --prefix events/agentic-cosmos-2026 - - - name: Install Agentic App dependencies - run: npm ci --prefix events/agent2app-2026 - - - name: Prepare pinned Agent Observer platform - if: vars.COSMOS_PLATFORM_ENABLED == 'true' - run: npm run prepare:platform - - - name: Check platform routing - run: npm run test:platform - - - name: Build complete site + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install Hub and Paris dependencies + run: | + npm ci --prefix hub + npm ci --prefix events/agentic-hackathon-paris-2026 + - name: Check routing and release validation + run: | + npm run test:platform + npm run test:releases + npm test --prefix hub + - name: Build complete site from successful event releases run: npm run build env: - VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} - VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} - VITE_SITE_URL: https://create.gosim.org/factory26 + GH_TOKEN: ${{ github.token }} PARIS_VITE_SUPABASE_URL: ${{ secrets.PARIS_VITE_SUPABASE_URL }} PARIS_VITE_SUPABASE_ANON_KEY: ${{ secrets.PARIS_VITE_SUPABASE_ANON_KEY }} - PARIS_VITE_SITE_URL: https://create.gosim.org/agenticparis26 - COSMOS_VITE_SUPABASE_URL: ${{ secrets.COSMOS_VITE_SUPABASE_URL }} - COSMOS_VITE_SUPABASE_ANON_KEY: ${{ secrets.COSMOS_VITE_SUPABASE_ANON_KEY }} - COSMOS_VITE_SITE_URL: https://create.gosim.org/survey26 - COSMOS_PLATFORM_ENABLED: ${{ vars.COSMOS_PLATFORM_ENABLED }} - COSMOS_VITE_AGENT_OBSERVER_URL: ${{ vars.COSMOS_VITE_AGENT_OBSERVER_URL }} - COSMOS_VITE_AGENT_OBSERVER_LEADERBOARD_API: ${{ vars.COSMOS_VITE_AGENT_OBSERVER_LEADERBOARD_API }} - - - name: Configure GitHub Pages - uses: actions/configure-pages@v5 - - - name: Upload Pages artifact - uses: actions/upload-pages-artifact@v3 + - name: Verify assembled site + run: node scripts/verify-site.mjs + - uses: actions/upload-pages-artifact@v3 with: path: _site - deploy: + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' needs: build runs-on: ubuntu-latest + permissions: + pages: write + id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - - name: Deploy to GitHub Pages - id: deployment + - uses: actions/configure-pages@v5 + - id: deployment uses: actions/deploy-pages@v4 diff --git a/.github/workflows/retired-directories.yml b/.github/workflows/retired-directories.yml new file mode 100644 index 0000000..f395ccf --- /dev/null +++ b/.github/workflows/retired-directories.yml @@ -0,0 +1,21 @@ +name: Retired event directories +on: + pull_request: + push: + branches: [main] +permissions: + contents: read +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Active event source must stay in its own repository + run: | + set -euo pipefail + for directory in events/oaic-harness-2026 events/agentic-cosmos-2026 events/agent2app-2026; do + if test -d "$directory"; then + echo "::error::${directory} has moved. See README.md for its new repository." + exit 1 + fi + done diff --git a/.gitignore b/.gitignore index d7fdc2d..2e105fb 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ src/**/*.js supabase/.temp/ supabase/.branches/ .gstack/ +__pycache__/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..436bbf1 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,9 @@ +# Shared domain publisher + +Read README.md and docs/repository-migration.md before editing. +Active event source code lives in the independent repositories listed in +config/event-sites.json. Do not recreate the removed event source directories. +This repository owns the hub, archived Paris site, shared routing and assembly. +Keep public URLs and authentication callbacks stable. +Use Node.js 22 and Python 3.12+. Validate routing, release validation, hub tests, +and the assembled site when changing deployment. diff --git a/README.md b/README.md index bd5bebb..f0965d7 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,84 @@ -# GOSIM Hackathons +# GOSIM Hackathons — shared domain publisher -Single GitHub Pages repository for `create.gosim.org`. +This repository owns the hub at **https://create.gosim.org/**, the archived +Paris event, and the final GitHub Pages deployment. The active events are now +maintained and built independently: -## Repository layout +| Website | Source repository | Local development | +| --- | --- | --- | +| `/factory26/` | [gosimfoundation/factory26](https://github.com/gosimfoundation/factory26) | `npm ci && npm run dev` | +| `/survey26/` → `/survey26/platform/` | [gosimfoundation/agent-observer](https://github.com/gosimfoundation/agent-observer) | `npm ci --prefix web && npm run dev --prefix web` | +| `/agenticapp26/` | [gosimfoundation/agenticapp26](https://github.com/gosimfoundation/agenticapp26) | `npm ci && npm run dev` | +| `/agenticparis26/` | `events/agentic-hackathon-paris-2026/` in this repository | `npm run dev:agentic-hackathon-paris-2026` | -```text -hub/ # create.gosim.org/ -events/oaic-harness-2026/ # /factory26/ -events/agentic-hackathon-paris-2026/ - # /agenticparis26/ -events/agentic-cosmos-2026/ # /survey26/ -events/agent2app-2026/ # /agenticapp26/ -scripts/build-site.mjs # assembles the Pages artifact -``` +**请在对应的新仓库修改活动网站。旧的本地项目不会自动切换,请重新克隆并在编辑器中打开新仓库。** +See [migration and team handoff](docs/repository-migration.md). + +## Publishing + +Each active event publishes a versioned GitHub Release only after its build +succeeds. This repository downloads and verifies those artifacts, builds the +hub and Paris, then assembles one GitHub Pages site. Public URLs, DNS, databases, +and authentication callback URLs are unchanged. -Each event is an independent application with its own `package.json`, lockfile, -source code, and maintainers. Event teams should limit pull requests to their -event directory unless a shared deployment change is required. +`config/event-sites.json` selects each source repository and release (`latest` +by default). A failed event build leaves its previous successful release in use. +Download, checksum, or assembly failures abort the deployment and leave the live +site intact. `deployment.json` at the site root records exactly what is deployed. -## Local development +The existing five-minute schedule collects new releases and refreshes Factory's +ARC-Bench leaderboard snapshot. GitHub schedules can be delayed. Run **Deploy +hackathon sites to GitHub Pages** manually for an immediate collection after an +event release succeeds. No cross-repository personal access token is needed. -Install dependencies once per application: +Rollback: change an event's `release` to a known-good `site-...` tag and redeploy. +Set it back to `latest` to resume automatic collection. + +## Local development and verification + +Use Node.js 22, Python 3.12+, and GitHub CLI (`gh auth login`). ```bash npm ci --prefix hub -npm ci --prefix events/oaic-harness-2026 npm ci --prefix events/agentic-hackathon-paris-2026 -npm ci --prefix events/agentic-cosmos-2026 -npm ci --prefix events/agent2app-2026 +npm run dev:hub ``` -Run one application: +Build and preview the complete site (requires network access to GitHub releases): ```bash -npm run dev:hub -npm run dev:oaic-harness-2026 -npm run dev:agentic-hackathon-paris-2026 -npm run dev:agentic-cosmos-2026 -npm run dev:agent2app-2026 +npm run build +npm run preview ``` -Build the complete Pages artifact: +For local Paris authentication, set `PARIS_VITE_SUPABASE_URL` and +`PARIS_VITE_SUPABASE_ANON_KEY`. CI retains the existing Paris repository secrets. +The hub obtains Factory and Survey's public project URLs from release manifests. ```bash -npm run build +npm run test:platform +npm run test:releases +npm test --prefix hub +node scripts/verify-site.mjs # after building ``` -The result is written to `_site/`. GitHub Actions deploys that directory as one -Pages site. +## Authentication and routes -## Password reset redirects +Keep existing Supabase Site URLs and allowed callbacks: -Each event's Supabase project should use its event URL as the Auth Site URL and -allow its callback URL under **Authentication → URL Configuration → Redirect URLs**: +| Event | Site URL / allowed reset callback | +| --- | --- | +| Factory | `https://create.gosim.org/factory26` and trailing-slash variant | +| Paris | `https://create.gosim.org/agenticparis26` and trailing-slash variant | +| Survey platform | `https://create.gosim.org/survey26/platform` / `/survey26/platform/register` | -| Project | Site URL | Allowed reset callback | -| --- | --- | --- | -| Factory26 | `https://create.gosim.org/factory26` | `https://create.gosim.org/factory26` and `https://create.gosim.org/factory26/` | -| Paris | `https://create.gosim.org/agenticparis26` | `https://create.gosim.org/agenticparis26` and `https://create.gosim.org/agenticparis26/` | -| Survey26 | `https://create.gosim.org/survey26` | `https://create.gosim.org/survey26/register` | - -Keep the standard reset email's `{{ .ConfirmationURL }}` link so Supabase verifies -the recovery request before returning to the app. See the -[Supabase redirect URL documentation](https://supabase.com/docs/guides/auth/redirect-urls). - -The hub also forwards legacy root auth callbacks, preserving the query and hash. -Build-time public Supabase project URLs select the event; callbacks without a -matching issuer use Factory26, which previously occupied the root. Tokens are -validated by the destination app's Supabase client, not by the hub. - -Run redirect regression tests with `npm test --prefix hub`. To verify a real -reset after deployment, request a fresh email, open it in a signed-out browser, -confirm the new-password form appears, and confirm login with the new password. - -## Add another event - -1. Create `events//` with its own application and lockfile. -2. Configure the application to build with `//` as its base path. -3. Add the event to `hub/src/events.ts`. -4. Add the event build to `scripts/build-site.mjs` and the dependency install to - `.github/workflows/deploy.yml`. -5. Add the slug to `hub/public/404.html` so deep links can be restored. -6. Add the slug to `scripts/serve-site.mjs` so local preview deep links work. -7. Add directory ownership rules once the event's GitHub team is known. - -The event slug configured by the root build is the public URL segment; it does -not need to match the source directory. Renaming a public slug requires an -explicit redirect from the former URL. +The root 404 handler restores event deep links and recovery fragments. The hub +also forwards legacy root authentication callbacks. Its unmatched-issuer fallback +continues to be Factory, which previously occupied the root. + +## Add an event + +Create an independent event repository with a versioned site release workflow, +add its identity and required entry points to `config/event-sites.json`, and +update `hub/src/events.ts`, the root 404 routing, local preview routing, and +verification coverage. Preserve established public URL segments. diff --git a/config/event-sites.json b/config/event-sites.json new file mode 100644 index 0000000..0777dca --- /dev/null +++ b/config/event-sites.json @@ -0,0 +1,5 @@ +[ + { "slug": "factory26", "repository": "gosimfoundation/factory26", "release": "latest", "requiredFiles": ["index.html"] }, + { "slug": "survey26", "repository": "gosimfoundation/agent-observer", "release": "latest", "requiredFiles": ["index.html", "platform/index.html", "platform/restore-route.js", "platform/deployment.json"] }, + { "slug": "agenticapp26", "repository": "gosimfoundation/agenticapp26", "release": "latest", "requiredFiles": ["index.html"] } +] diff --git a/docs/repository-migration.md b/docs/repository-migration.md new file mode 100644 index 0000000..5bdde8c --- /dev/null +++ b/docs/repository-migration.md @@ -0,0 +1,70 @@ +# Active event repository migration — 2026-09-22 + +| Event | Former directory | Authoritative source | +| --- | --- | --- | +| Factory26 | `events/oaic-harness-2026/` | https://github.com/gosimfoundation/factory26 | +| Survey26 | `events/agentic-cosmos-2026/` plus external platform pin | https://github.com/gosimfoundation/agent-observer | +| Agentic App | `events/agent2app-2026/` | https://github.com/gosimfoundation/agenticapp26 | +| Paris (archived event) | `events/agentic-hackathon-paris-2026/` | remains here | + +The active event directories have been removed from this repository. Their +source files and relevant commit histories are preserved in the destination +repositories. Survey's old event directory is under `legacy-event/`; its live +platform is in `web/`. The GOSIM platform repository starts from the exact +upstream version that was already deployed before the migration. + +Existing direct collaborators from this repository retain their roles on the +three destinations. Organization-inherited access also remains in effect. + +## For maintainers + +1. Save any uncommitted work in the old checkout before switching. +2. Clone your event's authoritative repository and open that directory in your + editor or AI coding tool. Merely pulling the old repository does not switch it. +3. Apply any uncommitted changes under the new root (Survey's old-site changes + go under `legacy-event/`, live platform changes under `web/`). +4. Open new branches and pull requests in the destination repository. +5. After merging, check **Publish event site**. Once its release succeeds, the + shared publisher collects it on the existing five-minute schedule; GitHub may + delay scheduled runs. A shared-publisher manual run performs an immediate refresh. + +The old Agentic App PR #66 is preserved as a separate, unmerged PR in the new +Agentic App repository, retaining its author's commit. It is not bundled into +the production migration. Successor: https://github.com/gosimfoundation/agenticapp26/pull/1. + +The `Retired event directories` CI check detects accidental reintroduction of +old event folders. Keep branches up to date with this repository's `main`. +It is a CI check, not a replacement for branch-protection rules or team notice. + +## What stays the same + +- `create.gosim.org` and all event paths, including `/survey26/platform/`. +- Existing public Supabase projects, login/reset callbacks, and databases. +- Hub navigation, Paris hosting, and Factory's scheduled leaderboard snapshot. +- Evaluation workers and backend deployments: they are outside this website migration. + +Factory and Survey's public client settings were verified against the deployed +JavaScript bundles and configured as destination repository Actions variables. +No administrative database credential or personal GitHub token was copied. +The old secrets may remain in the shared repository for rollback; only Paris's +secrets are used by its new build workflow. + +## Release selection and recovery + +Each event's `Publish event site` workflow creates a draft release, uploads its +complete archive and checksum, then publishes it as latest. Compilation errors +cannot advance the latest published site. The central collector resolves one +explicit tag per event, validates the checksum, identity, paths, and required +entry points, and aborts on failure before a Pages deployment occurs. + +`config/event-sites.json` can pin a known-good `site-...` release tag for rollback. +`latest` resumes automatic updates. The published `/deployment.json` records the +source commit, release tag, and archive checksum for each event. + +For a full deployment-system rollback, revert the migration merge in this repo +and redeploy; the existing secrets and original source history are retained. +Do not resume editing both copies of an event after a rollback. + +Survey upstream contributions to `BH3GEI/agent-observer` must be reviewed and +merged into `gosimfoundation/agent-observer` to reach this domain. The old +`scripts/agent-observer.json` pin-update workflow is retired. diff --git a/events/agent2app-2026/README.md b/events/agent2app-2026/README.md deleted file mode 100644 index b376eb7..0000000 --- a/events/agent2app-2026/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Agent2App Hackathon 2026 - -Independent Vue + TypeScript + Vite event site, served at `/agenticapp26/` alongside Factory26 and Survey26. No shared event database or authentication is configured. - -## Development - -```sh -npm ci -npm run dev -npm run build -``` - -The root build assembles the output into `_site/agenticapp26/`. `VITE_BASE_PATH` can override the default base path. - -## Content and visual direction - -`src/App.vue` contains participant-facing copy, awards and optional contribution topics. `src/components/EventSchedule.vue` contains the dated competition and training calendars. The competition centers on OctoSense: entrants choose from the [12 official application scenarios](https://octosense.org/cn/#apps)—mail, messaging, calendar, weather, news, music, video, markets, navigation, shopping and logistics, writing and creation, and system and devices—and demonstrate a real task completed with Agent automation. - -`src/components/ApplicationScenarios.vue` now owns the scenario entry points and the messaging focus. The primary competition baseline is [OctoSense-org/robrix2](https://github.com/OctoSense-org/robrix2). Entrants build scenario mini apps while retaining its chat, contacts and Discover UI. Software factory mini apps for [hagency](https://github.com/hagency-org/hagency) (formerly hafleet) are one messaging and collaboration example: a task event becomes an actionable card, the user reviews or authorizes an operation, and the result returns to the source conversation. Other scenarios do not require hagency. - -The reviewed version includes HTTP(S) Web cards and a built-in native Octoscript article editor. The latter supports per-recipient consent, account-local drafts, native preview, app sharing and confirmed chat publication. Native packages are restricted to the built-in editor; new native apps require host changes and a build. Web pages do not receive Matrix credentials or a chat bridge. See the [source-based baseline and validation scope](docs/robrix2-miniapps.md). The official scene guides include concept walkthroughs and do not establish that every service is implemented in the competition environment. - -Training introduces the roles and mechanisms of eight projects—octos, octoscode, OctoLoop, robrix2, hagency, OctoSense, Octoscript and Makepad—and shows entrants how to direct Agents, inspect results and finish their own applications. It uses prepared environments and product demonstrations rather than syntax or implementation lessons. OctoLoop is a productized double-loop skill within octoscode: an inner loop executes while an outer loop plans, observes and independently reviews, with people responsible for goals and approvals. This overview does not imply that all eight projects are integrated or required for every entry. Best Agentic evaluates how effectively an application completes real tasks. Best Technical Breakthrough builds on a working Agentic application and evaluates reusable ecosystem contributions and OctoSense ROM or system advances; entrants need not win Best Agentic first. `src/components/AwardEvaluation.vue` owns the qualitative evaluation criteria. Final numeric scoring, prize-category allocation and compatibility with the existing monetary slots remain to be published. - -Copy changes must be reflected in `src/en.json`, metadata in `src/useLocale.ts` / `index.html`, and the hub event entry. The competition concludes online; the top three teams overall will showcase their projects and attend the awards ceremony at the GOSIM Shenzhen Hackathon on October 17, as confirmed by the organizer. Attendance does not affect awards or rankings. -The current design uses the approved warm city/studio illustration as a full-viewport hero. The palette is cream, terracotta, slate blue and muted sage, drawn from the artwork. Chinese typography uses Noto Serif SC. English display text uses Cormorant Garamond, with Space Grotesk body text and IBM Plex Mono for small labels. All fonts include local fallbacks. - -- `public/images/human-robot-city-v3.png`: current full-bleed hero, expanded classical city view. -- `public/images/human-robot-studio-v2.png`: matching workshop illustration in the technology section. -- `public/images/CITY-V3-PROMPT.md` and `STUDIO-V2-PROMPT.md`: generation provenance. - -These are concept illustrations, not photographs of the actual event or product screenshots. `heroImage` and `terminalImage` in `src/App.vue` control the assets. The hero uses a left-weighted contrast overlay; the right side remains open to the city and workspace. Mobile retains the full-bleed composition with a stronger local overlay. Earlier artwork and temporary video files are unused variants. - -The media layer can host a future video without changing the page layout. When restoring video, provide muted inline playback, pause controls and reduced-motion handling. - -Registration links to the organizer-provided [Tencent Questionnaire form](https://wj.qq.com/s2/27846792/da0o/). `src/components/RegistrationPanel.vue` embeds the provided Qacman animated QR code and displays the registration URL as a direct alternative. The site does not store form responses. Registration opens September 13, 2026 and closes September 23 at 23:59; solo entrants, captains and all team members register individually. Registered team membership is finalized with the October 4 submission. - -Kickoff is September 22, 19:30–21:00. Four mechanism workshops on September 26–27 introduce OctoSense × Makepad, octoscode × Octoscript, octos × OctoLoop, and robrix2 × hagency. They total 7.5 hours, or 9 hours including orientation. September 28–October 4 is a full seven-day creation window with no new required lessons; October 3–4 provide optional support. October 7 provides two award-round workshops totaling 3 hours. Teaching takes place on weekends or during the October 1–7 National Day holiday, with kickoff as the single weekday-evening orientation. October 10 is an adjusted working day and has no classes. - -The competition has two qualification/award rounds. Preliminary submissions freeze October 4 at 23:59; judges review them October 5–6 and announce 50 advancing participants at 20:00 on October 6. Holiday judging shifts must be reserved in advance. All teams can continue improving the same project from October 5 while the frozen preliminary version is reviewed. The 50 qualifiers submit award-round versions by October 9 at 23:59; they do not start over with a new project. Award-round materials are reviewed October 10–11, with connection checks on October 11, 10:00–12:00, handled by staff who are not judging. - -The online final is Monday, October 12, 13:00–17:00, with prizes announced at 20:00. It completes the award round without an additional qualifying stage. This Monday event is a competition session, not an exception that adds weekday teaching. Two parallel groups allow for up to 50 solo projects, with shared calibration before prizes are awarded. Presentations and backup videos must show the frozen October 9 version; final slides and video materials are due October 12 at 12:00. Online results are final. - -The top three teams overall will showcase projects and attend the awards ceremony at GOSIM on October 17. Invited representatives confirm asynchronously by October 13 at 18:00. October 13–16 provides four days for travel and showcase preparation, with the showcase package frozen October 15 at 18:00. Equipment checks and rehearsals take place by appointment before the October 17 showcase. No weekday-evening showcase classes are scheduled, and attendance or onsite performance does not change online awards or rankings. - -All times are UTC+8. Locked environment packages, startup instructions, available capabilities and accepted example-data scope are due September 24 at 18:00, followed by asynchronous self-checks on September 25. Runtime readiness and alternatives must be explicit; course demonstrations do not establish completed integration. See [the operational schedule](docs/competition-schedule.md) and [curriculum](docs/curriculum.md). Resource redemption details remain to be published. Spotlight promotional copy describes a separate event and is not included. - -## Day / night themes - -The header theme button switches the full page palette and hero between `human-robot-city-v3.png` and `human-robot-city-night.png`. The default is day; explicit selection persists under the event-specific `agent2app-theme` localStorage key. A small head script restores the palette before first paint, and the toggle remains usable if storage is unavailable. Night artwork is a lighting edit of the same composition. The browser theme color and native color scheme follow the selected mode. - -## Real application screenshots - -`src/components/ProjectShowcase.vue` begins with four native robrix2 captures at `#miniapp-showcase`: app details, account consent, native article preview and a received mini-app card. They come from the September 21 macOS hidden-window Palpo fixture run committed at `05daf9bd`, not a new UI run in this website update. All four are copied unchanged, with source commit, public source URL, receipt and SHA-256 in `public/screenshots/provenance.json`. - -The OctoSense desktop themes, Omarchy view, AppCard weather reference and bilingual official service walkthroughs remain. The historical Agent2App gallery is replaced; its assets remain archived for provenance. The article editor is a working native example, not proof of automatic Agent content generation or a completed hagency integration. Desktop theme selection follows the site theme and also has its own controls. - -## Awards and developer support - -The prize pool remains RMB 50,000, comprising cash prizes and MiniMax token credits. The published monetary allocation is one First Prize of RMB 20,000, two Second Prizes of RMB 9,000 each and three Third Prizes of RMB 4,000 each. Each award is per team, including solo teams. All public amounts are the combined RMB award values. - -Best Agentic and Best Technical Breakthrough are the progressive award directions. Their mapping to these six monetary slots, whether a project may receive both, and the corresponding overall ranking method for the top-three showcase invitations require final rules. This update does not create additional prize money or redefine the categories as honorary awards. All scenarios share the same award framework; ecosystem or ROM contributions are optional for application entries and require evidence of improving the submitted application when considered for technical advancement. - -MiniMax API credits and Kimi coding benefits are provided separately for participant development, testing and improvements. Redemption and validity details will accompany distribution instructions. The post-event adoption window tracks contributions and archives projects without a separate promised cash award. - -`src/components/SponsorSupport.vue` presents the official MiniMax and Kimi logos at `#sponsors` inside the awards section. MiniMax sponsors RMB 50,000 worth of token credits, allocated across competition rewards and participant development. Kimi sponsors coding benefits, with no public account quantity or duration. The existing RMB 50,000 combined prize pool remains unchanged; token credits included in prizes count toward those combined values. Local logo sources and hashes are recorded in `public/sponsors/provenance.json`, with further context in that directory's README. diff --git a/events/agent2app-2026/art-direction-platform.md b/events/agent2app-2026/art-direction-platform.md deleted file mode 100644 index 81d1984..0000000 --- a/events/agent2app-2026/art-direction-platform.md +++ /dev/null @@ -1,7 +0,0 @@ -# Platform illustration — classical atelier - -Generated with the built-in image generation tool. Reference: `public/images/human-robot-studio-v2.png` (style and atmosphere only). - -## Final prompt - -Use case: illustration-story. Create a new wide 16:9 artwork for Agent2App's technical platform section. Input image is STYLE AND WORLD REFERENCE ONLY, not a composition to reproduce. Match its soft painterly brushwork, gentle blur, muted warm terracotta, ivory, moss green and blue, humane retrofuturism and beautiful lived-in classical/modern fusion. New composition: an intimate Renaissance-inspired library atelier opening through tall stone arches into a leafy courtyard, distant warm classical rooftops glimpsed beyond. Three-quarter room view with real spatial depth: graceful aged plaster vaults, carved walnut bookshelves, tessellated floor, upholstered reading bench, warm late afternoon light slanting over the floor. Two modern casually dressed young adult makers collaborate naturally: one seated sideways sketches an app interface on a slim tablet at an antique drafting desk, another stands near a built-in ivory retro computer console in the bookcase, testing the app on a phone. A small friendly nonhumanoid ivory robot on the floor beside the desk assists them. Computer screen shows subdued map and chat UI, not glowing holograms. Foreground a book and warm lamp, middle-ground people working, background quiet courtyard. Make architecture, atmosphere, human relationship and light the subject; technology belongs within their world rather than being displayed as products. Devices modest scale, about 15 percent of the image. NO desktop product lineup, no exploded view, no floating glass panes, no magic glowing connecting wires, no polished 3D render, no advertising mockup, no text labels, no cosmic scenery, no fold marks or distressed paper. Strong composed silhouettes and softly painted detail readable at small website size. Preserve the reference's poetic feeling of an old-world home quietly inhabited by future computing while making this a distinct scene. diff --git a/events/agent2app-2026/detail-enhancement-prompts.md b/events/agent2app-2026/detail-enhancement-prompts.md deleted file mode 100644 index aea2728..0000000 --- a/events/agent2app-2026/detail-enhancement-prompts.md +++ /dev/null @@ -1,11 +0,0 @@ -# Hero crop detail enhancement - -Tool: built-in image generation. Editing the existing computing crop, not generating a new room. - -## Day - -Edit this exact crop from an existing website hero illustration. Preserve composition, camera, character identity and pose, architecture, furniture, plants, phone, CRT computer, warm retrofuturistic gouache brushwork and soft edges. Enrich LOCAL details visibly but sensitively: on the existing CRT replace simplistic three chat bubbles with a developed conversation and a small app preview card, on the existing phone make the map and task widgets more detailed and coherent; on the existing paper on the desk add careful small app wireframes and a few connector arrows; refine keyboard keys, fingers and pencil marks. Same person, same objects, same positions, same palette and daylight. Do not add new devices or new characters, do not alter the room, no floating holograms, no sharpening into a photograph. Must look like an artist has developed the detail of the same original painting, not a replacement scene. 4:3 image. Keep text abstract and unobtrusive. - -## Night - -Create the NIGHT lighting version of input image 1. Input 1 is the edit target: preserve every detail of its exact composition, person's pose and identity, keyboard, detailed chat/app screen, detailed phone map/tasks, paper wireframes, books and plants. Input 2 is lighting reference ONLY showing the original same scene at night. Match input 2's dark blue ambient shadows and warm interior light, with slightly brighter visible computer and phone screens. ONLY change lighting/color to nighttime; do not move, add, remove or redesign any object or UI. Keep same soft painted texture as input 1. Exact same aspect ratio and framing as input 1, for crossfade between day and night. diff --git a/events/agent2app-2026/docs/competition-schedule.md b/events/agent2app-2026/docs/competition-schedule.md deleted file mode 100644 index 083f86f..0000000 --- a/events/agent2app-2026/docs/competition-schedule.md +++ /dev/null @@ -1,135 +0,0 @@ -# Agentic App 2026 赛程与培训执行方案 - -版本:2026-09-21。开营确定为 9/22,机制课程 9/26–27 完成,9/28–10/4 留出完整一周制作初赛作品;线上决赛改为 10/12。全部时间为北京时间(UTC+8)。比赛保持初赛海选晋级 50 人、复赛直接评奖两阶段;10/12 的线上决赛答辩完成同一次复赛评审,不增加第三轮晋级筛选。总排名前三名于 10/17 到 GOSIM 黑客松现场展示作品并参加颁奖。 - -## 排期依据 - -课程集中介绍 octos、octoscode、OctoLoop、robrix2、hagency、OctoSense、Octoscript、Makepad 的定位与机制,让选手学会用 Agent 完成自己的作品。9/26–27 的四场机制课覆盖全部项目,课后 9/28–10/4 不增加新的必修课,仅在 10/3–4 提供可选答疑与提交检查。 - -初赛 10/4 23:59 截止,10/5–6 两天评审,10/6 20:00 公布 50 人晋级。初赛冻结后所有团队即可继续改进同一作品,为复赛保留 10/5–9 五天持续开发时间;名单公布后由晋级的 50 人在 10/9 23:59 提交复赛作品。10/10–11 两天评审,10/12 线上答辩与评奖,10/13–16 留给前三名确认代表、安排出行和展示。 - -中秋为 9 月 25–27 日,国庆为 10 月 1–7 日;10 月 10 日为调休工作日。机制课安排在周末,复赛工作坊安排在国庆假期,10/10 不排课。初赛评审 10/5–6 位于国庆假期,赛务须提前落实评委值班;复赛评审另预留 10/10–11。10/11 连线检查由非评分人员负责,不占用评委。10/12 虽是周一,但为用户指定的正式线上决赛,不安排额外课程。节假日依据:[国务院办公厅关于 2026 年部分节假日安排的通知](https://www.beijing.gov.cn/fuwu/bmfw/sy/jrts/202511/t20251104_4258838.html)。 - -## 完整赛程 - -| 日期 | 阶段 | 选手任务 / 组织动作 | -|---|---|---| -| 9/13(日)09:00–9/23(三)23:59 | 报名与组队 | 每位参赛者分别填表,队长不能代替成员报名;单人或多人均可参赛,可边报名边开发。 | -| 9/22(二)19:30–21:00 | 开营说明 | 介绍赛制、八个项目的分工和组队安排;机制入门从 9/26 周六开始。 | -| 9/26(六)–9/27(日) | 四场机制入门 | OctoSense × Makepad、octoscode × Octoscript、octos × OctoLoop、robrix2 × hagency;为自己的作品定义目标与 Agent 分工。 | -| 9/28(一)–10/4(日) | 初赛作品制作周 | 完整七天制作与改进;不增加新必修课,10/3–4 仅提供可选支持。 | -| 9/13(日)–10/4(日)23:59 | 初赛海选:场景与可运行作品 | 提交需求、可运行原型、源码、截图、演示与已报名成员名单;10/4 截止并冻结初赛版本。 | -| 10/5(一)–10/6(二)18:00 | 初赛评审 | 两天独立评阅、运行核验与交叉复核;评审只使用 10/4 冻结版本,假期评委值班提前确认。 | -| 10/6(二)20:00 | 公布复赛名单与反馈 | 公布 50 人晋级名单与主要改进建议。 | -| 10/5(一)–10/9(五)23:59 | 持续完善作品与复赛开发 | 所有队伍可在初赛提交后继续改进同一作品;名单公布后由晋级的 50 人提交复赛版本,无需从头开发。 | -| 10/7(三) | 国庆复赛工作坊 | 上午根据反馈选择改进目标,下午练习讲清 Agent 分工、任务结果与技术价值。 | -| 10/9(五)23:59 | 复赛提交与版本冻结 | 提交完整应用、任务验证及自选技术贡献证据;正式答辩与备用视频均使用该版本。 | -| 10/10(六)–10/11(日)18:00 | 复赛材料评审 | 两天交叉评审、安装复现、任务验证与评分校准,覆盖全部复赛项目。 | -| 10/11(日)10:00–12:00 | 线上决赛连线检查 | 非评分人员按项目预约检查音视频、屏幕共享与备用视频;不修改冻结作品。 | -| 10/12(一)12:00 前 | 收齐最终讲述材料 | 收齐幻灯片、演示顺序及使用 10/9 冻结版本的备用视频。 | -| 10/12(一)13:00–17:00 | 线上决赛分组答辩 | 全部复赛项目在线演示与问答,两个答辩组使用统一规则;本场完成复赛评审,不另设晋级筛选。 | -| 10/12(一)17:00–20:00 | 评奖与结果公布 | 跨组校准、事实与计分复核,20:00 公布一、二、三等奖并邀请总排名前三名现场展示。比赛在此完成。 | -| 10/13(二)18:00 前 | 受邀团队确认 | 异步确认到场代表、行程与设备需求;是否到场不影响线上排名及获奖资格。 | -| 10/13(二)–10/16(五) | 四天展示准备 | 异步提供展示指南与反馈,安排出行和展示;10/15 18:00 冻结现场展示包,不排工作日晚课。 | -| 10/17(六) | GOSIM 黑客松现场展示与颁奖 | 总排名前三名展示并参加颁奖;正式展示前按队设备联调和彩排,具体时段随会务公布。 | -| 10/18(日)–10/31(六) | 赛后采纳与归档 | 完善应用和贡献,跟进采纳并归档,不改变线上结果。 | - -报名共 11 天,初赛 9/13–10/4 共 22 天(与报名重叠;从 9/22 开营日起共 13 天)。机制课结束后单独留出 9/28–10/4 七天制作窗口。初赛提交后的 10/5–9 可连续改进五天;10/6 晚公布名单,晋级队伍仍有 10/7–9 三个完整日完成复赛收尾。两轮均保留两天材料评审,10/12 另留答辩与评奖;结果公布后保留 10/13–16 四天准备现场展示。 - -## 报名、组队与晋级 - -- 单人参赛即一人队,本人承担队长联络职责;多人参赛由队长和每位队员分别填写同一报名表。 -- 9/23 23:59 前完成个人报名;10/4 23:59 初赛提交时提交队名、队长和成员登记信息并锁定名单。在两个截止之间只整理已报名成员,不新增未报名参赛者。成员信息仅供赛务核验,不随作品公开。 -- 选手从 [OctoSense 官方 12 个应用场景](https://octosense.org/cn/#apps) 选择主场景,以 robrix2 为主要小程序宿主;即时消息沿用其主要 UI,hagency 是软件协作案例,其他场景不要求接入。无需掌握底层技术或接入全部八个项目才可参赛。 -- 初赛海选 → 50 人晋级 → 50 人参加复赛 → 10/12 线上决赛答辩并评出一、二、三等奖。晋级按人数统计,不是 50 支队伍;奖项以项目团队为单位,单人队伍同样适用。直播出勤不作为晋级条件。 -- 赛务需公布多人队伍名额核算、同分与人数边界处理、提交入口、评分细则、评委回避和事实纠错规则。腾讯问卷是否收集团队关系由赛务核对;本轮不修改外部表单。 - -## 随比赛进程安排培训 - -9/22 晚为开营说明,实操机制课程从本周六 9/26 开始。后续教学集中于周末和国庆假期,不安排每日工作日晚课;10/12 正式决赛不属于教学安排。课程讲项目分工、应用机制和人与 Agent 的协作方法,不展开语法、源码和底层实现。所有直播提供回放与练习,9/24 发布环境包,9/25 完成异步自检。 - -| 日期与北京时间 | 对象 / 课程 | 对应交付目标 | -|---|---|---| -| 9/22(二)19:30–21:00 | 开营说明 · 赛事与八个项目全景 | 介绍 OctoSense 场景、robrix2 参赛基线、八个项目的分工与评奖规则。选手定义目标和判断结果,Agent 协助完成小程序;机制入门从 9/26 周六开始。 | -| 9/26(六)10:00–12:00 | 机制入门 · OctoSense × Makepad:让意图成为应用 | 从 OctoSense 场景选择任务,在 robrix2 中体验文章编辑器的原生界面、授权与预览。理解应用宿主和 Makepad 的分工,学会向 Agent 描述目标、操作与完成标准。 | -| 9/26(六)14:00–16:00 | 机制入门 · octoscode × Octoscript:和 Agent 一起做应用 | 用文章编辑器示例理解 Octoscript 如何表达界面与状态,以及宿主如何提供能力。通过 octoscode 向 Agent 描述改动、观察结果并反馈,区分内容编辑与应用扩展,不展开语法与源码。 | -| 9/27(日)10:00–12:00 | 机制入门 · octos × OctoLoop:执行与审查如何配合 | 理解 octos 如何组织 Agent 的上下文、工具和任务执行,以及 OctoLoop 的内环执行、外环审查机制。通过派任务、看结果、退回改进和人工验收,学会管理 Agent 的工作。 | -| 9/27(日)14:00–15:30 | 机制入门 · robrix2 × hagency:从分享小程序到协作交付 | 演示小程序分享、接收者独立授权、草稿隔离与确认发送,再用 hagency 任务验收说明软件工厂协作。选手规划自己的小程序与 Agent 分工,区分内置示例和需要完成的服务接入。 | -| 9/27(日)16:00–17:00 | 可选工作坊 · 把课程变成自己的参赛计划 | 为自己的场景写出目标、Agent 分工、可用项目和完成标准。9/27 完成机制入门,9/28–10/4 留出一周制作初赛作品,不增加新的必修内容。 | -| 10/3(六)14:00–16:00 | 国庆 · 可选答疑 · Agent 作品门诊 | 围绕选手正在制作的应用,讨论如何描述需求、组织 Agent、观察结果和调整任务;复用入门课的方法,不新增必修内容,不讲底层实现。 | -| 10/4(日)10:00–11:00 | 国庆 · 可选门诊 · 初赛提交检查 | 核对已报名成员、可运行作品、来源说明、截图和演示材料;初赛当日 23:59 截止,课后留出上传时间。 | -| 10/7(三)10:00–11:30 | 国庆 · 复赛工作坊 · 从 Agentic 应用到技术突破 | 根据 10/6 的晋级反馈,用 Agent 完善同一作品,比较改进前后的任务效果;理解生态反哺和 OctoSense ROM 突破如何服务应用,选择复赛目标,不讲实现细节。 | -| 10/7(三)14:00–15:30 | 国庆 · 复赛队伍 · 讲清你的 Agentic 作品 | 练习场景、Agent 分工、任务结果与技术价值的演示,准备问答和备用视频。作品 10/9 冻结,10/12 线上决赛;正式演示与备用视频使用冻结版本。 | -| 10/11(日)10:00–12:00 | 决赛准备 · 分队预约 · 线上决赛连线检查 | 按队检查音视频、屏幕共享与备用视频,使用 10/9 冻结版本;10/12 正式答辩。该环节为赛务检查,由非评分人员组织。 | -| 10/17(六)展示前 · 按队预约 | 现场准备 · 现场设备联调与彩排 | 前三名在当天正式展示前检查启动、投屏、网络、计时与备用视频;具体时段随 GOSIM 会务公布,不再评分。 | - -四场机制入门共 7.5 小时,加开营说明 1.5 小时,共 9 小时;10/7 的两场复赛工作坊共 3 小时。9/27 计划工作坊 1 小时、10/3–4 答疑与提交检查共 3 小时均为可选。9/28–10/4 的制作周不增加新必修内容,参赛者把所学用于自己的作品。 - -教学的八个项目分工、完整工作流程、每场输出与环境准备见 [课程文档](curriculum.md)。基础课讲如何使用 Agent,技术突破课讲如何判断生态与 ROM 改进的应用价值;历史工程诊断不作为课堂主线。10/7 先训练答辩叙事,10/9 冻结后再制作同版本正式材料;10/11 连线检查由赛务组织,评委继续审阅材料。 - -## 每轮交付与评审方法 - -### 初赛:需求成立、作品能跑 - -10/4 23:59 前提交简短需求、可运行最小原型及启动说明、固定版本源码或包、2–3 分钟演示、两张关键截图、数据来源与限制、已报名成员名单。至少展示一次操作及可核对的结果,以及一个失败或空状态。静态概念稿本身不满足原型要求。即时消息与练习数据的接受范围须于 9/24 发布环境时明确。 - -两名评委分别评价需求与任务价值、核心流程可用性、数据来源与失败状态、复现与材料;较大分歧交由第三人复核。初赛不将 Rust 或 ROM 开发设为门槛,具体评分细则待正式公布。10/5–6 评审只能核验 10/4 冻结版本;选手期间的新开发保留到复赛版本,不替换初赛材料。 - -### 复赛:任务自动化与技术突破 - -10/9 23:59 前由晋级的 50 人提交可运行应用、安装步骤、冻结版本、能力说明、正常与失败场景验证、队外用户试用记录、完整演示及已知限制。区分参考卡、练习数据与真实在线结果,说明事件或意图输入、Agent 理解与计划、授权、执行、结果核验和后续状态处理;只生成界面或摘要不足以证明完成任务。 - -最佳 Agentic 奖评价任务自动化、可靠性、结果核验、人机协作和复现证据。最佳技术突破奖在工作应用基础上评价可复用生态贡献和 OctoSense ROM / 系统突破,不要求先获最佳 Agentic。申请技术突破的作品另交相关 PR、补丁、接口或测试等贡献证据及前后对照,不要求评审前已合并,也不强制每队提交贡献。技术深度、代码量、PR 数量和单纯刷机成功不自动构成加分,同一贡献避免重复计分。 - -10/10–11 通过材料和复现形成记录,10/12 结合答辩与问答完成同一轮复赛评奖,不叠加初赛分,不增加第三轮晋级。所有场景共用评价框架,具体分值、两类奖项名额对应与兼得规则另行公布,不沿用此前固定权重。 - -### 10/12 线上决赛答辩与评奖 - -应用、源码和贡献证据沿用 10/9 23:59 冻结版本,不换题、不增加获奖依据。10/12 12:00 前提交最终幻灯片、演示顺序与同版本备用视频,讲述材料不得包装冻结版本中不存在的功能。阻塞性修复须按统一规则登记原因、前后版本和证据,由评审组处理,不以此增加功能或贡献得分。 - -按 50 人全部单人参赛的上限预留 50 个项目。两个并行组各最多 25 个项目,每项目 8 分钟:3 分钟应用演示 + 2 分钟 Agent 自动化与自选技术贡献 + 2 分钟问答 + 1 分钟切换,每组最多 200 分钟。13:00–17:00 共 240 分钟,另有 40 分钟用于开场、重连与休息。每组至少 3 名评委,使用共同样例并交叉复核边界作品。网络故障时使用同版本备用视频并完成实时问答,保留故障记录。 - -17:00–19:30 复核计分与事实:17:30 向队伍提供评分明细,18:30 前收齐事实或计分错误说明;19:30 锁分,20:00 公布结果并发出前三名现场邀请。10/12 是正式赛事日,不安排当晚授课或展示辅导。 - -### 10/17 现场展示与颁奖 - -总排名前三名受邀现场展示。10/12 20:00 随结果提供展示指南和邀请,10/13 18:00 前异步确认至少一名代表、行程和设备需求;两类奖与综合排名的对应、并列处理须在正式规则中统一公布。差旅支持另行说明,不承诺未经确认的报销。不能到场仍保留线上名次和奖励,可协商远程或视频展示。 - -10/13–16 异步准备出行、展示稳定性和表达,记录相对比赛版本的变化,10/15 18:00 冻结现场展示包。10/17 正式展示前按队联调和彩排,现场不再评分。建议向会务申请 45–60 分钟供前三名展示交流及颁奖,具体时段以会务为准。10/18–31 采纳与归档面向所有符合条件作品,不受现场邀请限制。 - -## 奖项与开发资源 - -已公开获奖奖池保持 **¥50,000**,含现金奖金与 MiniMax Token 额度:一等奖 1 名 ¥20,000、二等奖 2 名各 ¥9,000、三等奖 3 名各 ¥4,000,均以团队(含单人队伍)为单位。两类新奖项与这 6 个金额名额的对应关系、能否兼得,以及现场邀请的综合排名办法待正式规则确定;不预设额外奖金或将其改成无奖金荣誉。另提供 MiniMax API 额度和 Kimi 编程权益用于开发,领取方式和使用期限随发放说明公布。 - -| 公开奖项 | 名额 | 每名综合奖励 | 合计 | -|---|---:|---:|---:| -| 一等奖 | 1 | ¥20,000 | ¥20,000 | -| 二等奖 | 2 | ¥9,000 | ¥18,000 | -| 三等奖 | 3 | ¥4,000 | ¥12,000 | -| 合计 | 6 | — | ¥50,000 | - -奖励全部在 10/12 线上确定,不受现场出席影响;开发资源和获奖奖励分别登记。 - -### Token 与编程权益赞助 - -- **MiniMax**:提供价值 **¥50,000 的 Token 额度**,用于赛事奖励与参赛开发,支持模型调用、Agent 任务验证、测试及应用迭代。 -- **Kimi(月之暗面 / Moonshot AI)**:提供 **Kimi 编程权益**,支持代码理解、功能开发、调试与测试,不公开账户份数或未经确认的使用期限。 - -MiniMax Token 赞助按奖励与开发支持分配,纳入获奖奖池的部分计入已公布的综合奖励;赞助额度不另行叠加为现金奖金。领取方式和使用期限随发放说明公布。官网赞助区使用两家官方 logo,并链接 [MiniMax](https://www.minimaxi.com/) 与 [Kimi Code](https://www.kimi.com/code/);素材来源记录在 `public/sponsors/provenance.json`。 - -## 教学、评审与会务准备 - -- **9/22 开营前**:赛务核对规则、问卷、交流入口、提交模板、名额与晋级办法;教学负责人确认四场机制演示、直播回放和八个项目的讲述分工,不以源码课替代使用演示。 -- **9/24 18:00 前**:发布锁版本环境、支持设备、启动步骤、可用能力、示例数据和替代练习范围;9/25 收集异步自检结果。课堂以 robrix2 的网页卡片和原生文章编辑器为基线,验证账号登录、分享、授权与发送;锁定提交版本和支持平台,另列选手需要实现的服务接入。 -- **10/5–6 初赛评审值班**:按 60 份有效提交、每份两人各 20 分钟,约 40 评委小时;6 名评委每天 5 小时、两天提供 60 小时。提前落实国庆值班并按报名规模扩容;10/6 18:00 锁分,20:00 公布 50 人晋级和反馈。 -- **10/6 名单公布时**:确认复赛环境及练习数据接受边界;沿用已公布的初赛接口,不强制升级未验证环境。所有队伍从 10/5 即可持续改进同一作品,晋级者 10/9 提交复赛版本。 -- **10/7 工作坊前**:公布答辩规则、同版本视频要求和评奖办法;10/9 前发布各项目分组、会议链接、答辩顺序、10/11 检查预约及故障备用规则。 -- **10/10–11 复赛评审值班**:按最多 50 个单人项目、每份两人各 40 分钟,约 66.7 评委小时;8 名评委每天 5 小时、两天提供 80 小时。10/11 预约检查安排独立非评分人员,评委保留材料评审时间;回避直接辅导过的团队。 -- **10/12 线上决赛**:两组各至少 3 名评委,13:00–17:00 答辩,17:00–20:00 跨组复核与结果公布,不另筛选下一轮。 -- **10/13–17 现场准备**:10/13 18:00 前收齐代表确认,10/15 18:00 冻结展示包,10/17 正式展示前联调和彩排;设备、时段与差旅说明提前向会务确认。 - -## 网站同步与验证 - -首页、报名区、FAQ、英文、元数据和活动总览同步为 9/22 开营、9/26–27 机制课、10/4 初赛提交、10/6 晋级、10/9 复赛提交、10/12 线上决赛和 10/17 前三名现场展示。初赛制作周与两轮评审窗口直接可见,不将线上决赛误写成额外晋级阶段。 - -保留 OctoSense 12 个场景、奖池和报名二维码,明确 robrix2 为主要宿主并展示当前原生小程序截图。核对中英日期、星期、课程展开、移动端排版和报名链接,完成赛事站与总览构建;部署按仓库既有发布流程处理,不将本地修改等同于线上发布。 diff --git a/events/agent2app-2026/docs/curriculum.md b/events/agent2app-2026/docs/curriculum.md deleted file mode 100644 index 605c566..0000000 --- a/events/agent2app-2026/docs/curriculum.md +++ /dev/null @@ -1,96 +0,0 @@ -# 用 Agent 完成参赛作品:八个项目的机制与使用课程 - -2026-09-21 更新:9/22 开营说明,9/26–27 完成八个项目的机制入门;9/28–10/4 留出完整一周制作初赛作品。课程以 OctoSense 场景为主线,帮助选手理解项目分工、组织 Agent 并完成自己的应用,不展开 Rust、语法、协议结构或源码实现。完整赛程见 [执行方案](competition-schedule.md)。 - -## 课程目标与边界 - -选手负责提出真实目标、限定操作范围和判断结果,Agent 协助完成需求梳理、应用制作、试用改进、验证与演示。课程重点是“这些项目做什么、彼此如何配合、如何让 Agent 帮我参赛”,采用准备好的环境和可观察的应用演示。 - -本届以 [OctoSense-org/robrix2 小程序宿主](https://github.com/OctoSense-org/robrix2) 为主要开发基线,沿用聊天、联系人与发现界面。该版本已支持网页小程序卡片与原生 Octoscript 文章编辑器:打开应用、独立授权、保存草稿、原生预览、分享应用和确认发送。当前原生示例仅接受内置编辑器,新增原生应用需扩展并构建宿主;网页卡片不自动获得聊天或账号能力。具体起步方式和已验证范围见 [小程序基线说明](robrix2-miniapps.md)。八个项目按选题组合,hagency 用于软件协作,不要求全部接入。 - -最佳 Agentic 奖评价应用完成真实任务的自动化能力;最佳技术突破奖在可运行 Agentic 应用的基础上评价生态反哺和 OctoSense ROM / 系统突破,不要求先获得最佳 Agentic 奖。课程讲清改进的价值和验证方法,不要求选手掌握底层实现后才参赛。 - -已公开获奖奖池保持 **¥50,000**,含现金奖金与 MiniMax Token 额度:一等奖 1 名 ¥20,000、二等奖 2 名各 ¥9,000、三等奖 3 名各 ¥4,000,均以团队(含单人队伍)为单位。两类新奖项与这 6 个金额名额的对应关系、能否兼得,以及现场邀请的综合排名办法待正式规则确定;不预设额外奖金或将其改成无奖金荣誉。另提供 MiniMax API 额度和 Kimi 编程权益用于开发,领取方式和使用期限随发放说明公布。 - -## 八个项目各自负责什么 - -| 项目 | 要理解的机制 | 选手如何借助它完成比赛 | -|---|---|---| -| OctoSense | 面向用户的 Agentic 应用入口,连接状态、操作和结果 | 从邮件、日历、天气等场景确定任务,检查应用是否真正完成事情 | -| Makepad | 原生应用界面的呈现与交互基础 | 向 Agent 说明信息、操作与反馈,观察运行界面并提出改进 | -| octoscode | 终端中的编码协作客户端 | 给 Agent 任务和上下文,查看生成、运行与修改结果,持续反馈 | -| Octoscript | 动态表达应用界面与行为 | 让 Agent 把需求变成可运行应用,并依据使用反馈调整 | -| octos | Agent 运行内核,组织上下文、工具和任务执行 | 理解 Agent 如何获得信息、采取行动、报告进展与结果 | -| OctoLoop | octoscode 中的产品化双环 skill:内环执行,外环计划、观察和独立审查 | 把“执行任务”和“判断完成”分开;人确定目标、批准范围并最终验收 | -| robrix2 | robrix2 是本届主要小程序宿主,沿用会话、联系人与发现入口 | 从原生文章编辑器学习分享、接收者授权、草稿隔离与确认发送,再扩展自己的场景 | -| hagency | 软件工厂中的任务组织与多 Agent 协作 | 分配任务、查看阻塞、核对证据并确认交付;作为即时消息下的软件协作示例 | - -OctoLoop 的课程依据为 octoscode 仓库中的 [skill 定义](https://github.com/octos-org/octoscode/blob/main/.claude/skills/octoloop/SKILL.md) 与 [使用指南](https://github.com/octos-org/octoscode/blob/main/docs/OCTOLOOP_GUIDE.md)。它是双环协作的产品化入口:外环可以退回不符合目标的结果,内环继续执行;人负责审批和最终判断。 - -## 与网站一致的随赛课程表 - -全部时间为 2026 年北京时间(UTC+8)。9/22(二)19:30–21:00 为开营说明,是工作日晚间的单次安排。正式机制入门从本周六 9/26 开始,后续课程安排在周末或 10/1–7 国庆假期;10/10 为调休工作日,不排课。10/12 周一是正式线上决赛,不是工作日晚课,也不增加新的教学任务。 - -所有直播提供回放和练习说明,出勤不作为晋级条件。9/24 18:00 前发布环境与练习包,9/25 完成 30 分钟异步自检。9/28–10/4 不增加新必修课,10/3 与 10/4 仅提供可选支持。选手可将回放用于自己的场景,不另做脱离作品的大作业。 - -| 日期与北京时间 | 对象 / 课程 | 对应交付目标 | -|---|---|---| -| 9/22(二)19:30–21:00 | 开营说明 · 赛事与八个项目全景 | 介绍 OctoSense 场景、robrix2 参赛基线、八个项目的分工与评奖规则。选手定义目标和判断结果,Agent 协助完成小程序;机制入门从 9/26 周六开始。 | -| 9/26(六)10:00–12:00 | 机制入门 · OctoSense × Makepad:让意图成为应用 | 从 OctoSense 场景选择任务,在 robrix2 中体验文章编辑器的原生界面、授权与预览。理解应用宿主和 Makepad 的分工,学会向 Agent 描述目标、操作与完成标准。 | -| 9/26(六)14:00–16:00 | 机制入门 · octoscode × Octoscript:和 Agent 一起做应用 | 用文章编辑器示例理解 Octoscript 如何表达界面与状态,以及宿主如何提供能力。通过 octoscode 向 Agent 描述改动、观察结果并反馈,区分内容编辑与应用扩展,不展开语法与源码。 | -| 9/27(日)10:00–12:00 | 机制入门 · octos × OctoLoop:执行与审查如何配合 | 理解 octos 如何组织 Agent 的上下文、工具和任务执行,以及 OctoLoop 的内环执行、外环审查机制。通过派任务、看结果、退回改进和人工验收,学会管理 Agent 的工作。 | -| 9/27(日)14:00–15:30 | 机制入门 · robrix2 × hagency:从分享小程序到协作交付 | 演示小程序分享、接收者独立授权、草稿隔离与确认发送,再用 hagency 任务验收说明软件工厂协作。选手规划自己的小程序与 Agent 分工,区分内置示例和需要完成的服务接入。 | -| 9/27(日)16:00–17:00 | 可选工作坊 · 把课程变成自己的参赛计划 | 为自己的场景写出目标、Agent 分工、可用项目和完成标准。9/27 完成机制入门,9/28–10/4 留出一周制作初赛作品,不增加新的必修内容。 | -| 10/3(六)14:00–16:00 | 国庆 · 可选答疑 · Agent 作品门诊 | 围绕选手正在制作的应用,讨论如何描述需求、组织 Agent、观察结果和调整任务;复用入门课的方法,不新增必修内容,不讲底层实现。 | -| 10/4(日)10:00–11:00 | 国庆 · 可选门诊 · 初赛提交检查 | 核对已报名成员、可运行作品、来源说明、截图和演示材料;初赛当日 23:59 截止,课后留出上传时间。 | -| 10/7(三)10:00–11:30 | 国庆 · 复赛工作坊 · 从 Agentic 应用到技术突破 | 根据 10/6 的晋级反馈,用 Agent 完善同一作品,比较改进前后的任务效果;理解生态反哺和 OctoSense ROM 突破如何服务应用,选择复赛目标,不讲实现细节。 | -| 10/7(三)14:00–15:30 | 国庆 · 复赛队伍 · 讲清你的 Agentic 作品 | 练习场景、Agent 分工、任务结果与技术价值的演示,准备问答和备用视频。作品 10/9 冻结,10/12 线上决赛;正式演示与备用视频使用冻结版本。 | -| 10/11(日)10:00–12:00 | 决赛准备 · 分队预约 · 线上决赛连线检查 | 按队检查音视频、屏幕共享与备用视频,使用 10/9 冻结版本;10/12 正式答辩。该环节为赛务检查,由非评分人员组织。 | -| 10/17(六)展示前 · 按队预约 | 现场准备 · 现场设备联调与彩排 | 前三名在当天正式展示前检查启动、投屏、网络、计时与备用视频;具体时段随 GOSIM 会务公布,不再评分。 | - -四场机制入门共 7.5 小时,加开营说明 1.5 小时,共 9 小时;10/7 两场复赛工作坊共 3 小时。9/27 可选计划工作坊 1 小时,10/3–4 可选答疑与提交检查共 3 小时;连线检查按队预约。课程按上午、下午错开,课后重点用于制作自己的作品。 - -## 一条贯穿课程的选手与 Agent 工作流程 - -1. **选定一个真实任务。** 从 [OctoSense 官方 12 个场景](https://octosense.org/cn/#apps) 选择邮件、即时消息、日历、天气、新闻、音乐、视频、财经、导航、购物与物流、写作与创作、系统与设备中的主场景。写清用户遇到什么问题、输入来自哪里、什么结果才算完成。 -2. **把目标交给 Agent。** 在准备好的 octoscode 环境中说明目标、可用项目、参考画面、可操作范围与完成标准。让 Agent 先复述任务和计划;选手检查是否理解正确。 -3. **做出第一版并亲自使用。** 观察 Agent 使用上下文和工具推进任务,让其借助 Octoscript 与 Makepad 表达应用,并在公布支持的环境中运行。选手实际操作一次,记录状态、授权、执行反馈和结果。 -4. **让执行与审查分别发生。** 用 OctoLoop 的双环思想组织工作:内环执行与修正,外环观察并独立检查是否满足目标;缺失和失败退回改进。选手决定目标和权限边界,并最终验收,不把 Agent 的“完成”声明当作完成证据。 -5. **按场景组织协作。** 即时消息沿用 robrix2 界面,把安排或待办关联到原会话。软件工厂题可用 hagency 的任务分工与协作机制,观察每个 Agent 的进展、阻塞和交接;不要求其他应用接入工厂。 -6. **比较改进前后的效果。** 让队外用户完成一次任务,记录不能完成或需要人工接管的地方。用明确反馈让 Agent 改善同一应用;有技术突破意愿的团队再说明生态反哺或 ROM 改进带来的任务价值。 -7. **整理并交付。** 保留可运行版本、源码、来源与限制、截图、演示和验证记录。让 Agent 帮助整理材料,由选手核对真实性;正式答辩与备用视频使用 10/9 冻结版本。 - -课堂以“打开文章编辑器 → 授权 → 编辑与预览 → 分享应用 → 接收者使用自己的账号 → 确认发送”为共同示例,再由选手设计新闻简报、邮件回复草稿或软件工厂验收等扩展。文章编辑器本身没有自动生成内容或自动读取聊天记录的 Agent;参赛作品需要补上自己的任务自动化并证明效果。每一步讲清输入、Agent 分工、人的判断和可观察结果。没有真实服务的练习必须说明使用示例数据,不把概念预览当作已经完成的集成。 - -## 每个阶段带走什么 - -| 阶段 | 选手完成的材料 | -|---|---| -| 9/22 开营 | 一个主场景、队伍报名安排,以及八个项目与自身目标的初步对应 | -| 9/26 上午 | 一页任务说明:状态、动作、结果、用户需要确认的事情 | -| 9/26 下午 | 一轮“需求 → Agent 制作 → 运行观察 → 修改反馈”的记录 | -| 9/27 上午 | 一张执行与审查分工图,以及一次退回改进或人工验收记录 | -| 9/27 下午 | 一次应用分享和接收者独立授权记录;明确自己的 Agent 任务、需要扩展的能力与完成标准 | -| 9/28–10/4 制作周 | 用 Agent 完成可运行初赛作品、演示、截图、来源与成员名单 | -| 10/7 复赛工作坊 | 根据反馈收敛的改进清单、任务效果对照,以及答辩叙事草稿 | -| 10/9 复赛提交 | 冻结应用与验证材料,正式演示和备用视频均与此版本一致 | - -## 课前环境与材料准备 - -教学负责人在 9/22 开营前确认四场项目机制演示、教师、直播和回放安排;介绍当前可用能力与限制。平台负责人于 9/24 18:00 前发布支持的系统、锁定版本、启动说明、可用能力、示例数据和替代练习范围,9/25 收集异步自检结果并解决运行阻塞。 - -当前代码依据为 robrix2 的 `05daf9bd`,机制与测试范围见 [小程序基线说明](robrix2-miniapps.md)。9/24 课堂包须锁定实际提交版本,准备可登录的隔离测试账号、网页卡片和内置文章编辑器;新增服务接入明确标注为选手扩展。10/6 公布晋级名单时确认复赛环境,不临时强制选手升级未验证接口。OctoLoop 按课堂环境实际支持的平台演示,不能把某个平台的能力概括为全平台可用。 - -教师准备正常、空值、拒绝、失败与过期的任务例子,以及统一的来源和验证材料模板;实际在线服务与示例数据分别标明。深层工程诊断与历史测试问题保留在本地 `review/` 审查档案中,课堂不教授诊断脚本、校验器源码或协议实现。 - -## 比赛中的验收与评奖 - -10/4 23:59 初赛截止并锁定已报名成员。提交需求、可运行最小原型及启动说明、源码或包、2–3 分钟演示、两张关键截图、数据来源与限制。至少能展示一次操作、可核对的结果,以及一个失败或空状态;静态概念图本身不满足原型要求。 - -10/5–6 使用冻结的初赛版本独立评审,10/6 20:00 公布 50 人晋级。所有队伍从 10/5 起可继续改进同一作品,晋级的 50 人于 10/9 23:59 提交复赛版本,无需重新选题或从头开发。复赛共同交付为完整任务、可运行版本、来源与能力说明、验证和用户试用记录、截图与演示、已知限制;技术突破参评团队另交可复现贡献及前后对照,不要求所有团队额外提交 PR 或认领 issue。 - -最佳 Agentic 评价任务自动化、可靠性、结果核验、人机协作和复现证据;最佳技术突破在工作应用基础上评价可复用生态贡献和 OctoSense ROM / 系统突破。技术深度、代码量、PR 数量或单纯刷机成功不代替应用改善,同一成果不重复计分。具体评分细则待正式公布,不沿用此前固定权重。 - -10/10–11 进行两天复赛材料评审,10/11 10:00–12:00 的连线检查由非评分人员负责。10/12 13:00–17:00 举行线上决赛答辩,完成同一次复赛评奖,不再增加第三轮晋级。两个并行组各预留最多 25 个项目,每项目 3 分钟应用演示 + 2 分钟 Agent 自动化与自选技术贡献 + 2 分钟问答 + 1 分钟切换;20:00 公布获奖结果。正式操作和备用视频必须来自 10/9 冻结版本。 - -总排名前三名于 10/13 18:00 前异步确认现场代表,10/13–16 安排出行与展示准备,10/15 18:00 冻结现场展示包。10/17 正式展示前按队设备联调和彩排,随后在 GOSIM 现场展示并参加颁奖。现场不再评分,到场与否不改变线上结果;展示包冻结不替代比赛版本冻结。 diff --git a/events/agent2app-2026/docs/octosense-scenario-update-plan.md b/events/agent2app-2026/docs/octosense-scenario-update-plan.md deleted file mode 100644 index 723a561..0000000 --- a/events/agent2app-2026/docs/octosense-scenario-update-plan.md +++ /dev/null @@ -1,143 +0,0 @@ -# OctoSense 场景选题与进阶评奖:官网改版稿 - -2026-09-21。场景与评奖改版已发布;本次按 robrix2 作为主要开发基线继续更新。最新小程序范围见 [基线说明](robrix2-miniapps.md)。以下保留改版依据;奖项名额、对应奖金及兼得规则待最终细则,不采用未确认的分数权重。 - -本稿承接最新方向:本届大赛以 OctoSense 为核心,选题来自 OctoSense 官方应用指南;即时消息场景绑定 robrix2。先评价应用面向 Agent 自动化的能力,再评价服务于该应用的项目反哺与 OctoSense ROM 技术突破。 - -## 1. 当前网页需要纠正的重点 - -| 当前内容 | 问题 | 改版方向 | -|---|---|---| -| 首屏强调纯 Rust、两大赛道 | 选手先看到技术栈与仓库,OctoSense 场景主线不够清楚 | 首屏明确“围绕 OctoSense,让熟悉的应用具备 Agent 自动化能力” | -| OctoSense + AppCard 与 robrix2 + hagency 并列 | 软件工厂容易被理解为另一个独立命题 | 统一为 OctoSense 场景选题;robrix2 是即时消息与协作场景的指定宿主 | -| 应用指南只在赛道 A 的一段文字中出现 | 邮件、即时消息等选题不容易发现 | 将官方 12 个场景做成主要选题入口,突出邮件与即时消息 | -| 项目反哺占 40% | 技术贡献可能先于应用自动化价值决定结果 | 拆为 Agentic 基础评审与技术突破进阶评审 | -| 每队至少认领一项悬赏或 issue | 把技术贡献变成所有应用的额外门槛 | 普通应用以完整任务参评;争取技术突破奖时提交对应贡献证据 | -| “三级深度 / 最高加分” | 容易被理解为越底层越容易获奖 | 三层是应用、可复用能力、ROM/系统的实现路径;技术深度必须改善任务 | -| 课程按 A/B 赛道组织 | 与统一场景主线不一致 | 八个项目的机制入门 + 一周作品制作 + Agent 协作与展示工作坊 | - -## 2. 建议采用的页面主线 - -保留“意图,即应用。”的主标题和现有视觉风格。首屏副标题建议替换为: - -> 围绕 OctoSense,把邮件、消息、日程等熟悉的应用,变成 Agent 能理解、能操作、能完成任务的应用。 - -首屏辅助文字: - -> 从真实场景出发,争取最佳 Agentic 奖;在此基础上,通过项目反哺与 OctoSense ROM 突破,争取最佳技术突破奖。 - -导航建议为:参赛命题 / 场景选题 / 应用预览 / 实现路径 / 奖项与评分 / 贡献选题 / 赛程与培训。 - -正文顺序建议为:命题 → 场景选题 → 即时消息专题 → 应用预览 → 三层实现路径 → 奖项 → 贡献选题 → 赛程与培训 → FAQ / 报名。 - -仅修改首屏口号会留下赛道、评分和课程之间的冲突;仅给原 A 赛道增加场景列表也会保留两个中心。推荐按上述统一主线同步调整页面内容,沿用当前组件样式,不重做整站视觉。 - -## 3. 官方 12 个场景与赛事练习 - -场景名称和指南链接来自 [OctoSense 官方应用指南](https://octosense.org/cn/#apps)。下列任务是赛事选题建议,不表示对应服务已经在参赛环境中实现;具体接入能力应以验证后的发布包为准。 - -| 场景 | 适合参赛的任务例子 | 应看到的任务结果 | -|---|---|---| -| [邮件](https://octosense.org/cn/apps/mail/) | 收到时间变更邮件,识别关联日程,提出更新和回复草稿 | 显示原邮件来源;确认后更新对应事件;后续来信更新同一任务 | -| [即时消息 · robrix2](https://octosense.org/cn/apps/messaging/) | 群聊约定聚会或项目交接,从讨论中整理时间、地点、待办和回复 | 卡片关联原消息;确认操作后回写状态;消息变化时更新原卡片 | -| [日历](https://octosense.org/cn/apps/calendar/) | 发现会议冲突,结合约束提出替代安排 | 区分建议、等待对方确认和已确认状态 | -| [天气](https://octosense.org/cn/apps/weather/) | 根据降雨、空气质量和活动计划提出出行调整 | 数据来源和更新时间可查;缺测显示未知;用户可决定是否改计划 | -| [新闻](https://octosense.org/cn/apps/news/) | 按关注主题准备有来源的晨间简报 | 内容可追溯;用户可控制主题、时间及是否播放 | -| [音乐](https://octosense.org/cn/apps/music/) | 为专注、通勤等具体情境组织播放任务 | 能执行播放、暂停、替换,并正确反馈当前状态 | -| [视频](https://octosense.org/cn/apps/video/) | 围绕一个问题和可用时间组织观看清单 | 用户能理解推荐依据、开始观看并调整计划 | -| [财经](https://octosense.org/cn/apps/markets/) | 把关注标的的公告和变化整理成研究卡 | 信息注明来源与时间,区分事实和分析;不要求交易执行 | -| [导航](https://octosense.org/cn/apps/navigation/) | 综合日历地点、出发时间和路况提出行动建议 | 确认目的地后开始导航;变化更新原任务,不擅自修改会议 | -| [购物与物流](https://octosense.org/cn/apps/shopping/) | 将订单、物流、安装与售后串成连续服务 | 后续事件更新同一订单任务,重要操作由用户确认 | -| [写作与创作](https://octosense.org/cn/apps/creation/) | 将素材和目标转为可迭代的内容任务 | 用户可修改约束、比较版本并确认最终内容 | -| [系统与设备](https://octosense.org/cn/apps/system/) | 检查存储、通知或设备状态,提出有范围的维护操作 | 先说明操作范围,获授权后执行并核验结果;可作为 ROM 进阶题 | - -一个项目选择一个主要场景即可,也可联动其他场景。12 个场景共用评审,不拆成 12 组奖池。 - -统一最小交付应能展示:事件或意图输入 → Agent 理解并形成操作计划 → 用户查看或授权 → 执行 → 核验结果 → 状态变化或失败处理。仅生成界面、摘要或静态卡片,不足以证明完成了任务自动化。 - -## 4. 即时消息必须与 robrix2 绑定 - -页面专题标题建议为: - -> 即时消息 × robrix2:以 robrix2 为起点,做能分享、能使用的小程序。 - -正文建议为: - -> 以 robrix2 为消息与协作入口,保留熟悉的会话、消息和联系人界面。让 Agent 从对话中识别意图,将安排与待办整理成可操作的卡片或小程序;在用户授权后执行,并把结果带回原会话。 - -建议提供两个例题: - -1. 日常协作:群聊聚会 → 时间与地点卡 → 冲突检查 → 确认回复或加入日历 → 后续变更更新原卡片。 -2. 软件协作:hagency 任务事件 → robrix2 中的任务卡 → 查看阻塞与证据 → 用户验收或交接 → 结果返回工厂并回到原会话。 - -hagency 是软件协作题的数据与任务编排来源,不要求邮件、天气、音乐等所有作品都接入 hagency。既有软件工厂小程序方向继续保留,归入即时消息与协作专题。 - -本届主要开发基线已改为 OctoSense-org/robrix2 的 robrix2。现有机制包括 HTTP(S) 网页卡片和受限的原生 Octoscript 文章编辑器,接收者独立授权,草稿按账号隔离。历史 Agent2App 的任意脚本导入、版本回退与通用权限代理不能据此视为已经迁入;新增原生应用需要扩展宿主。 - -消息题的验收重点:来源会话与原消息可追溯;草稿和已发送状态清楚;发送对象可检查;消息修改、撤回或后续安排不会重复创建任务;权限拒绝和过期状态有反馈。单次授权不扩大为跨会话自动发言权限。 - -## 5. 进阶式评奖建议 - -### 最佳 Agentic 奖 - -核心问题:哪个应用最能让 Agent 帮用户完成真实任务? - -页面采用定性评审维度:任务完成、可靠运行、人机协作,以复现证据说明效果。已撤下旧比例,不设置未确认的权重。 - -任务自动化应结合固定任务检查状态可读性、操作可执行性、多步骤完成和事件后续更新。重复运行要保留失败记录;人工步骤、成功次数和完成时间用于同一任务前后对照,不能直接把不同复杂度作品的点击数放在一起排名。 - -应用层作品可以获得最佳 Agentic 奖,不要求修改 ROM,也不要求提交与自身任务无关的 PR 或 issue。 - -### 最佳技术突破奖 - -在完成 Agentic 应用的基础上,评价项目反哺和 OctoSense ROM / 系统能力突破。所有达到基础要求的作品均可进入,不能限定为“先拿到最佳 Agentic 奖才能参加”。 - -进阶评审以可运行、可验证的 Agentic 应用为基础,再看生态贡献与 ROM / 系统集成效果。页面不设未经确认的分数门槛与附加分;具体评审细则另行公布。 - -生态贡献可以是可运行的应用接入、数据能力、组件、协议适配、测试与诊断;ROM 突破可以是系统事件触发、原生权限与系统桥、跨应用任务衔接等。都要展示它如何改善参赛应用,并提供版本、补丁、复现步骤和前后对照。同一成果不得在两个附加项重复计分。 - -单纯刷机成功、修改底层代码或累计 PR 数量,不自动构成技术突破。评审时尚未合并的 PR 可以按质量与复现证据评价,避免将维护者排期作为选手能否得分的条件。 - -### 奖金、名额与现场邀请需要一致定稿 - -已公开的奖池是人民币 ¥50,000,含现金与 MiniMax Token;现有名额是一等奖 1 名 ¥20,000、二等奖 2 名每名 ¥9,000、三等奖 3 名每名 ¥4,000。两类新奖项与这 6 个名额、金额的对应关系尚未决定,不能自行把两类奖改成无奖金荣誉,或把它们当成额外奖金。 - -建议一次性定稿两类奖的名额和金额、能否兼得,以及“前三名现场展示”的排序依据,再同步奖项卡、FAQ、晋级规则与宣传文案。期间不擅自改动已公开的人民币总额与分配,也不重新引入美元或换算过程。 - -线上初赛晋级 50 人、复赛完成评奖、10/17 前三名到 GOSIM 现场展示与颁奖的流程沿用;进阶评审不是增加第三轮比赛。现场不再改变线上评奖结果。 - -## 6. 跟随进度的课程调整 - -本节按主办方最新指示调整:9/22(二)19:30–21:00 开营,9/26–27 四场机制课分别介绍 OctoSense × Makepad、octoscode × Octoscript、octos × OctoLoop、robrix2 × hagency。教学以项目定位、机制演示和如何用 Agent 完成参赛作品为主,不展开源码、语法和底层实现。OctoLoop 是 octoscode 中的产品化双环 skill,内环执行、外环计划与独立审查,人工负责目标与审批;不假设八个项目已经全部集成。 - -四场机制课共 7.5 小时,加开营说明共 9 小时。课后 9/28–10/4 留出完整一周制作初赛作品,不增加新必修课,10/3–4 仅提供可选支持;10/7 国庆工作坊共 3 小时,帮助晋级队伍改进作品并准备答辩。完整时间与交付目标统一见 [赛程培训表](competition-schedule.md#随比赛进程安排培训) 和 [课程文档](curriculum.md#与网站一致的随赛课程表),不在本稿维护独立课表。 - -初赛 10/4 23:59 截止,10/5–6 两天评审,10/6 20:00 公布 50 人晋级。所有队伍可在初赛提交后继续改进同一作品,晋级者 10/9 23:59 提交复赛版本。10/10–11 两天材料评审,10/11 连线检查由非评分人员组织;10/12 周一线上决赛答辩并于 20:00 公布结果,完成同一次复赛评奖,不增加第三轮晋级。正式答辩与备用视频必须使用 10/9 冻结版本。 - -后续教学集中于周末和国庆假期,10/10 调休工作日不排课;10/12 是正式比赛,不安排额外课程。10/13 18:00 前异步确认现场代表,10/13–16 四天准备出行与展示,10/15 18:00 冻结展示包;10/17 正式展示前按队联调和彩排,不再进行现场评分。 - -9/22 开营说明环境准备,9/24 18:00 前发布锁版本环境与能力说明,9/25 完成异步自检。授课中区分练习数据、真实服务与概念预览;工程诊断保留在审查档案,不作为课堂主线。 - -## 7. 截图与预览如何配合主题 - -- 保留 `octosense-desktop-light.png`、`octosense-desktop-dark.png`、`octosense-omarchy.jpg`,用于介绍 OctoSense 宿主和桌面形态,放在 AppCard 参考天气图之前。 -- 邮件场景优先关联现有 school 体验图;即时消息关联 reunion 体验图;购物物流关联 aircon。标明它们来自官方可交互概念体验、使用示例数据。 -- `appcard-weather.png` 继续作为渲染参考,保留空气质量未验证的准确说明。 -- 用 robrix2 的应用详情、授权、原生预览和接收卡片四张原生截图替换旧 Agent2App 画廊;原图与哈希来源保留。 -- 新截图来自仓库内 macOS 隔离测试记录,已核对源码和截图哈希。它们验证文章编辑与分享,不证明 Agent 已自动读取消息或调用 hagency。 - -## 8. 页面实施范围与验收 - -| 文件 | 对应改动 | -|---|---| -| `src/App.vue` | 首屏、导航、共同命题、三层路径、评奖、悬赏、FAQ、报名摘要 | -| `src/components/ApplicationScenarios.vue`、`src/components/AwardEvaluation.vue` | 改为统一场景入口与 robrix2 即时消息专题,保持旧锚点可跳转 | -| `src/components/ProjectShowcase.vue` | 调整展示顺序、场景对应与机制参考位置;保留真实来源说明 | -| `src/components/EventSchedule.vue` | 同步 9/22 开营、9/26–27 机制课、10/4 初赛截止与 10/12 线上决赛,保留 50 人晋级规则 | -| `src/en.json`、`index.html` | 同步英文、页面摘要与分享元数据 | -| `hub/src/events.ts` | 同步赛事简介中的核心平台、场景和奖项定位 | -| README、课程、赛程、宣传文档 | 清除“两等赛道”“反哺 40%”“每队强制悬赏”等旧规则冲突 | - -内容验收应覆盖:12 个官方场景完整;即时消息明确绑定 robrix2;hagency 不成为所有场景的强制依赖;应用层可获最佳 Agentic;技术贡献服务应用且不重复计分;两类奖项与奖金、名额、现场邀请一致;中英一致;没有将计划、概念或离线测试标为真实集成。 - -前端实施后再运行现有构建检查,查看本地桌面和手机宽度下的场景入口、奖项区与课程表,确认报名二维码、链接和既有截图可用。页面已按本稿方向实施;构建和本地检查记录另附,尚不代表线上已部署。 diff --git a/events/agent2app-2026/docs/promo-article.md b/events/agent2app-2026/docs/promo-article.md deleted file mode 100644 index 0425ab9..0000000 --- a/events/agent2app-2026/docs/promo-article.md +++ /dev/null @@ -1,97 +0,0 @@ -# 用 Agent 做出真正有用的应用:OctoSense Agentic App 黑客松 - -Agentic App 黑客松 2026 于 9 月 13 日开放报名,**9 月 22 日晚开营,9 月 26–27 日完成机制入门课程**。随后留出 **9 月 28 日至 10 月 4 日整整一周**,让选手用 Agent 制作自己的初赛作品。初赛海选晋级 50 人,复赛作品于 10 月 9 日提交,**10 月 12 日线上决赛完成评奖**;总排名前三名于 10 月 17 日到 GOSIM 黑客松现场展示作品并参加颁奖。 - -单人可以参赛,多人组队时队长和每位队员都要分别报名。个人报名 9 月 23 日 23:59 截止,10 月 4 日提交初赛作品时锁定已报名成员名单。课程出勤不是晋级条件,全部直播提供回放。 - -## 从熟悉的场景开始,让 Agent 完成任务 - -赛事以 OctoSense 为核心,以 robrix2 为主要应用宿主,面向设计师、产品人、一人公司、学生和开发者。选手从 [官方应用指南](https://octosense.org/cn/#apps) 的 12 个场景中选择主场景:**邮件、即时消息、日历、天气、新闻、音乐、视频、财经、导航、购物与物流、写作与创作、系统与设备**。 - -例如,收到变更邮件后更新相关日程;从群聊里整理聚会安排;让订单、物流与售后持续更新同一任务。共同目标是让 Agent 接收事件、理解目标、提出行动、获得必要授权、执行并核验结果。生成画面和摘要只是过程,作品要能说明实际完成了什么。 - -**即时消息以 robrix2 为宿主,主要界面沿用 robrix2。** 任务应关联原会话,用户能检查对象和操作范围,结果能返回来源消息。hagency 软件工厂小程序是这一场景下的协作例子:查看 Agent 分工和任务进展,处理阻塞,核对证据并确认交付;其他场景不要求接入软件工厂。 - -本届以 [OctoSense-org/robrix2 小程序宿主](https://github.com/OctoSense-org/robrix2) 为主要开发基线,沿用聊天、联系人与发现界面。该版本已支持网页小程序卡片与原生 Octoscript 文章编辑器:打开应用、独立授权、保存草稿、原生预览、分享应用和确认发送。当前原生示例仅接受内置编辑器,新增原生应用需扩展并构建宿主;网页卡片不自动获得聊天或账号能力。具体起步方式和已验证范围见 [小程序基线说明](robrix2-miniapps.md)。八个项目按选题组合,hagency 用于软件协作,不要求全部接入。 - -## 八个项目,帮助选手理解一件作品如何完成 - -课程以项目介绍、机制演示和使用方法为主,不把比赛准备变成源码与语法训练。选手需要学会描述目标、组织 Agent、观察结果和作出判断;实现工作可以交给 Agent 协助。 - -| 项目 | 要理解的机制 | 选手如何借助它完成比赛 | -|---|---|---| -| OctoSense | 面向用户的 Agentic 应用入口,连接状态、操作和结果 | 从邮件、日历、天气等场景确定任务,检查应用是否真正完成事情 | -| Makepad | 原生应用界面的呈现与交互基础 | 向 Agent 说明信息、操作与反馈,观察运行界面并提出改进 | -| octoscode | 终端中的编码协作客户端 | 给 Agent 任务和上下文,查看生成、运行与修改结果,持续反馈 | -| Octoscript | 动态表达应用界面与行为 | 让 Agent 把需求变成可运行应用,并依据使用反馈调整 | -| octos | Agent 运行内核,组织上下文、工具和任务执行 | 理解 Agent 如何获得信息、采取行动、报告进展与结果 | -| OctoLoop | octoscode 中的产品化双环 skill:内环执行,外环计划、观察和独立审查 | 把“执行任务”和“判断完成”分开;人确定目标、批准范围并最终验收 | -| robrix2 | robrix2 是本届主要小程序宿主,沿用会话、联系人与发现入口 | 从原生文章编辑器学习分享、接收者授权、草稿隔离与确认发送,再扩展自己的场景 | -| hagency | 软件工厂中的任务组织与多 Agent 协作 | 分配任务、查看阻塞、核对证据并确认交付;作为即时消息下的软件协作示例 | - -OctoLoop 是 octoscode 内的双环协作入口。内环负责执行和改进,外环负责计划、观察与独立审查,人在目标、审批和最终验收上保持决定权。课程通过一次任务、一次检查和一次反馈展示这种分工。 - -## 课程之后,留一周把想法做出来 - -9 月 26 日上午,从 OctoSense × Makepad 理解应用如何呈现状态、动作和结果;下午通过 octoscode × Octoscript 演示如何给 Agent 写需求、查看运行结果、反馈并修改。 - -9 月 27 日上午,从 octos × OctoLoop 理解任务执行和审查如何配合;下午通过 robrix2 × hagency 理解应用分享、接收者独立授权、结果回传与软件工厂协作。四场机制课共 7.5 小时,加 9 月 22 日的开营说明共 9 小时。可选计划工作坊帮助选手把课程整理成自己的目标、分工和完成标准。 - -**9 月 28 日至 10 月 4 日不再增加新的必修内容。** 选手用这七天制作初赛作品,10 月 3 日可参加 Agent 作品门诊,10 月 4 日上午可检查提交材料。10 月 4 日 23:59 截止后,各队可以继续改进同一作品,评委仍只核验已冻结的初赛版本。 - -10 月 6 日 20:00 公布晋级名单,10 月 7 日国庆工作坊上午讨论如何用 Agent 改善任务效果、体现生态或 ROM 突破的应用价值,下午练习讲清作品,共 3 小时。晋级的 50 人于 10 月 9 日 23:59 提交复赛版本,无需换题重做。10 月 11 日按队检查连线,10 月 12 日完成线上决赛。 - -后续教学集中在周末与国庆假期,10 月 10 日是调休工作日,不排课;10 月 12 日周一为正式决赛,不安排额外课程。完整日期、时间和每场交付目标见 [课程表](curriculum.md#与网站一致的随赛课程表)。 - -## 评奖先看 Agentic,再看技术突破 - -**最佳 Agentic 奖**评价谁的应用最适合 Agent 自动化:任务是否完成、多步骤操作是否可靠、后续变化是否得到处理、用户能否检查和控制结果。需要展示真实操作与证据,也要说明失败和人工介入。 - -**最佳技术突破奖**在可运行 Agentic 应用的基础上,进一步评价生态反哺和 OctoSense ROM / 系统突破如何改善任务。达到基础要求的作品都可进入进阶评审,不必先获得最佳 Agentic 奖;技术贡献要有前后对照与复现证据。课程讲清价值和判断方法,选手可以借助 Agent 推进实现,不要求每队额外认领悬赏或 issue。 - -已公开获奖奖池保持 **¥50,000**,含现金奖金与 MiniMax Token 额度:一等奖 1 名 ¥20,000、二等奖 2 名各 ¥9,000、三等奖 3 名各 ¥4,000,均以团队(含单人队伍)为单位。两类新奖项与这 6 个金额名额的对应关系、能否兼得,以及现场邀请的综合排名办法待正式规则确定;不预设额外奖金或将其改成无奖金荣誉。另提供 MiniMax API 额度和 Kimi 编程权益用于开发,领取方式和使用期限随发放说明公布。 - -两类奖在同一次复赛中评审,10 月 12 日的线上决赛是答辩与评奖环节,不增加第三轮晋级。现场展示及到场情况不改变线上结果。10 月 18–31 日继续跟进贡献采纳和作品归档。 - -## MiniMax 与 Kimi 赞助支持 - -[MiniMax](https://www.minimaxi.com/) 为本次赛事提供 **价值 ¥50,000 的 Token 额度**,用于赛事奖励与参赛开发,支持 Agent 任务验证、测试和应用迭代。奖池包含的 Token 已计入上述综合奖励。 - -[Kimi](https://www.kimi.com/code/) 由月之暗面(Moonshot AI)研发,为参赛者提供 **Kimi 编程权益**,支持代码理解、功能开发、调试与测试,帮助选手与 Agent 协作完成应用。领取方式与使用期限随资源发放说明公布。 - -## 赛程与提交 - -全部时间为北京时间。 - -| 日期 | 安排 | -|---|---| -| 9/13–9/23 23:59 | 报名组队,队长与队员分别报名 | -| 9/22(二)19:30–21:00 | 开营说明与八个项目全景 | -| 9/26(六)–9/27(日) | 四场机制入门课程 | -| 9/28–10/4 | 完整一周制作初赛作品,无新增必修课 | -| 10/4(日)23:59 | 初赛提交截止,锁定已报名成员名单 | -| 10/5–10/6 | 两天初赛评审,10/6 20:00 公布 50 人晋级名单 | -| 10/5–10/9 | 持续改进同一作品,晋级者于 10/9 23:59 提交复赛版本 | -| 10/10–10/11 | 两天复赛材料评审,10/11 10:00–12:00 由赛务检查连线 | -| 10/12(一)13:00–17:00 | 线上决赛分组答辩,20:00 公布获奖结果 | -| 10/13–10/16 | 前三名异步准备展示;10/13 18:00 确认代表,10/15 18:00 冻结展示包 | -| 10/17(六) | 展示前设备联调与彩排,GOSIM 现场展示及颁奖 | -| 10/18–10/31 | 赛后采纳与归档 | - -初赛提交需求、可运行原型及启动说明、源码、2–3 分钟演示、两张截图、来源与限制,以及已报名成员名单;至少展示一次操作和可核对的结果,包含一个失败或空状态。复赛提交完整任务和验证,技术突破作品补充相关贡献证据。正式答辩与备用视频都使用 10 月 9 日冻结的版本。 - -9 月 22 日开营介绍环境准备安排,9 月 24 日 18:00 前发布支持的环境、能力和示例数据范围,9 月 25 日完成异步自检。说明中须区分可用产品、概念体验和未完成接入,不要求选手自行承担未发布接口。 - -## 报名 - -赛事页面:https://create.gosim.org/agenticapp26/ - -报名表:https://wj.qq.com/s2/27846792/da0o/ - -OctoSense 场景与项目:https://octosense.org/cn/ - -主要参赛项目:https://github.com/OctoSense-org/robrix2 - -软件协作示例 hagency:https://github.com/hagency-org/hagency - -9 月 22 日开营,9 月 26 日周六开始机制入门。最新课程说明、环境与回放入口以赛事页面公告为准。 diff --git a/events/agent2app-2026/docs/robrix2-miniapps.md b/events/agent2app-2026/docs/robrix2-miniapps.md deleted file mode 100644 index d1c972f..0000000 --- a/events/agent2app-2026/docs/robrix2-miniapps.md +++ /dev/null @@ -1,53 +0,0 @@ -# robrix2:本届小程序基线 - -2026-09-21。大赛以 OctoSense 为核心,主要使用 [OctoSense-org/robrix2 小程序宿主](https://github.com/OctoSense-org/robrix2)。本次核对的本地与远端提交均为 `05daf9bdb05fafc6d8f04dcb312a35f1d46a661e`。这是内容审查基线;9/24 课堂环境包应另行锁定实际使用的提交和支持平台。 - -选手从 OctoSense 的 12 个场景选题,在既有聊天、联系人、发现与小程序入口上制作应用。最佳 Agentic 评价应用的任务自动化;最佳技术突破在工作应用基础上评价宿主、生态或 ROM 改进。赛程、50 人晋级规则、奖金与赞助沿用现行说明。 - -## 当前机制 - -| 能力 | 已有实现 | 参赛时如何使用 | -|---|---|---| -| 网页小程序 | 聊天“+”分享 HTTP(S) URL 卡片,可预览、打开、刷新、再分享 | 可制作自己的网页应用并分享;macOS/iOS 使用系统 WebKit 容器,其他平台走外部浏览器,设备仍需实际验证 | -| 原生文章编辑器 | “发现”或聊天“+”进入;标题、Markdown、格式操作、本地草稿、原生预览 | 作为理解界面、状态、分享与授权的共同示例 | -| 原生应用分享 | 卡片携带内置应用 ID、版本及源码摘要;接收者打开同一内置应用 | 分享应用入口,接收者使用自己的账号与草稿 | -| 独立授权 | 每次打开须授权;授权关联账号、登录会话和应用实例,最长一小时,关闭或退出后撤销 | 展示拒绝、重新打开及不同账号的行为;不能继承发送者的权限 | -| 发布结果 | 预览后选聊天、确认账号和内容,由宿主通过 Matrix SDK 发送富文本与纯文本后备 | 证明任务结果确实到达所选聊天,发布范围是 Matrix 聊天 | - -实现依据:[网页卡片实现](https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/src/mini_app.rs)、[原生示例说明](https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/README.md)、[原生模型](https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/src/article_app/model.rs)、[原生宿主界面](https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/src/article_app/ui.rs)。 - -原生路径是受限的 Octoscript L0 描述与 Makepad 原生宿主适配。L0 定义标题、正文的输入、状态和事件;宿主管理授权、草稿、聊天选择与发送,使用原生 `Html` 呈现处理后的 Markdown。不是用一张图片模拟交互,也没有为该编辑器实例化 WebView。 - -## 选手怎样起步 - -1. 使用课堂包指定的 robrix2 提交版本,按锁定课堂包的说明启动宿主并登录测试账号。先从“发现 → 文章编辑器”走完授权、编辑、草稿、预览与确认发送。 -2. 分享应用卡片,让另一位测试用户打开并独立授权;检查对方得到自己的草稿和账号,结果发送到选定聊天。 -3. 选择一个真实任务,用 octoscode 与 OctoLoop 组织 Agent 制作和审查。可以从新闻简报、邮件回复草稿、聚会安排或 hagency 任务验收等方向扩展。 -4. 网页项目交付可运行页面与 URL 卡片。新增原生应用需在自己的宿主分支中扩展并构建,提交完整源码、宿主提交号与启动方式,不能只交任意 `.card` 文件并假设现有宿主会安装。 -5. 展示 Agent 在作品运行时如何读取获授权的状态、提出操作、执行并核验结果。Agent 帮忙写过代码或成功分享一张卡片,本身不能证明作品具有任务自动化能力。 - -## 需要明确的范围 - -- 当前原生加载只接受内置文章编辑器的准确 ID、版本与摘要;没有通用远程应用市场、任意脚本导入或发布者签名验证。扩展其他原生应用需要修改宿主。 -- 网页卡片不提供 Matrix 登录令牌、聊天记录或原生能力桥。外部服务账号和数据接入由作品实现并说明。 -- 文章编辑器没有自动生成正文、读取聊天的 Agent,也未自带 hagency 的任务接口。这些属于参赛扩展;普通编辑器演示不是完整 Agentic 成品。 -- 草稿按账号保存在本设备,未由该功能加密或跨设备同步。预览与发送移除可执行 HTML、远程媒体及活动链接。 -- 应用包版本校验不等于历史版本列表、在线修改或回退;不能把旧 Robrix Agent2App 的所有功能视为已迁入。 - -## 本次核验与截图来源 - -本次在源仓库重新运行: - -```sh -python3 lab/article-editor/verify_native.py -``` - -结果:8 个场景映射检查通过;819 条双语词条、934 处翻译调用无缺失。另外核对了 [原生测试记录](https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native-validation.json) 中 4 份源码输入与 11 张截图的 SHA-256,均与检出的文件一致。 - -该仓库记录六条原生双账号流程通过,覆盖编辑与发送、应用分享不携带发送者权限、重新授权恢复自己的草稿、接收者身份与草稿隔离、接收者自行发布和中英文界面。记录来自 macOS arm64 隐藏原生窗口与 Palpo 隔离测试账号,使用未加密私聊;未验证 iOS 设备或加密会话,视觉相似度未评分。 - -本次官网更新没有重新运行 Rust 全量编译或发送消息的双账号测试。上述运行结果明确引用仓库已有记录,映射和哈希核验是本次执行。官网选用应用详情、账号授权、原生预览、接收卡片四张原图,替换旧 Agent2App 画廊;日期、来源提交、公开原图链接与哈希存于 `public/screenshots/provenance.json`。 - -## 对课程的更新 - -课程仍讲项目机制和如何结合 Agent 完成比赛,不讲源码细节。9/26 上午从原生示例理解 OctoSense、宿主与 Makepad;下午用同一示例认识 octoscode、Octoscript 与“内容修改 / 应用扩展”的区别。9/27 上午认识 octos、OctoLoop 的执行与审查;下午演示分享、接收者授权和结果回传,再规划 hagency 协作扩展。完整时间见 [课程表](curriculum.md)。 diff --git a/events/agent2app-2026/hero-detail-crops.md b/events/agent2app-2026/hero-detail-crops.md deleted file mode 100644 index 8163d9b..0000000 --- a/events/agent2app-2026/hero-detail-crops.md +++ /dev/null @@ -1,10 +0,0 @@ -# Hero detail crops - -These images are direct, unretouched crops from frame 0 of the active day/night v2 hero videos. No image generation, sharpening, or invented details. - -- Computing: x=760, y=330, width=520, height=390. Used in the technical platform section. -- Design: x=20, y=300, width=560, height=420. Used in the challenge section. -- Source resolution: 1280 × 720. Coordinates are identical for day and night. -- Output: public/images/hero-detail-{computing,design}-{day,night}.png. - -Display at or below source width. Both theme variants stay mounted and crossfade together with the hero scene. diff --git a/events/agent2app-2026/index.html b/events/agent2app-2026/index.html deleted file mode 100644 index 4fd6169..0000000 --- a/events/agent2app-2026/index.html +++ /dev/null @@ -1,2 +0,0 @@ - -Agentic App 黑客松 2026 · 意图,即应用
diff --git a/events/agent2app-2026/package-lock.json b/events/agent2app-2026/package-lock.json deleted file mode 100644 index b965fbc..0000000 --- a/events/agent2app-2026/package-lock.json +++ /dev/null @@ -1,1150 +0,0 @@ -{ - "name": "agent2app-hackathon-2026", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "agent2app-hackathon-2026", - "version": "0.0.0", - "dependencies": { - "vue": "^3.5.40" - }, - "devDependencies": { - "@types/node": "^24.13.3", - "@vitejs/plugin-vue": "^6.0.8", - "@vue/tsconfig": "^0.9.1", - "typescript": "~6.0.2", - "vite": "^8.2.0", - "vue-tsc": "^3.3.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@oxc-project/types": { - "version": "0.143.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz", - "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz", - "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz", - "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz", - "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz", - "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz", - "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz", - "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz", - "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz", - "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz", - "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz", - "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz", - "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz", - "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", - "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", - "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "^1.0.1" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", - "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.28" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", - "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", - "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz", - "integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/shared": "3.5.41", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz", - "integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz", - "integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/compiler-core": "3.5.41", - "@vue/compiler-dom": "3.5.41", - "@vue/compiler-ssr": "3.5.41", - "@vue/shared": "3.5.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.19", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz", - "integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/language-core": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.9.tgz", - "integrity": "sha512-in/68oAa4BCtVY6n/nkuhLIkV8DHYd2UivedJ6cMZ6UYtlq9jaoaSNUBHYCVO44z3nKg7MdE5OBoHKt5SxeBKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "@vue/compiler-dom": "^3.5.0", - "@vue/shared": "^3.5.0", - "alien-signals": "^3.2.1", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "picomatch": "^4.0.4" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz", - "integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz", - "integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz", - "integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.41", - "@vue/runtime-core": "3.5.41", - "@vue/shared": "3.5.41", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz", - "integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.41", - "@vue/runtime-dom": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz", - "integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==", - "license": "MIT" - }, - "node_modules/@vue/tsconfig": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", - "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">= 5.8", - "vue": "^3.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/alien-signals": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", - "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.17", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/rolldown": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz", - "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.143.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.3", - "@rolldown/binding-darwin-arm64": "1.2.3", - "@rolldown/binding-darwin-x64": "1.2.3", - "@rolldown/binding-freebsd-x64": "1.2.3", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", - "@rolldown/binding-linux-arm64-gnu": "1.2.3", - "@rolldown/binding-linux-arm64-musl": "1.2.3", - "@rolldown/binding-linux-ppc64-gnu": "1.2.3", - "@rolldown/binding-linux-s390x-gnu": "1.2.3", - "@rolldown/binding-linux-x64-gnu": "1.2.3", - "@rolldown/binding-linux-x64-musl": "1.2.3", - "@rolldown/binding-openharmony-arm64": "1.2.3", - "@rolldown/binding-win32-arm64-msvc": "1.2.3", - "@rolldown/binding-win32-x64-msvc": "1.2.3" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/typescript": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", - "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.25", - "rolldown": "~1.2.1", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz", - "integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.41", - "@vue/compiler-sfc": "3.5.41", - "@vue/runtime-dom": "3.5.41", - "@vue/server-renderer": "3.5.41", - "@vue/shared": "3.5.41" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-tsc": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.9.tgz", - "integrity": "sha512-TS3Y1ux/IRoE8OCP2PpACAeOseuIs0UvWrcr7u+w3PmfY+SlCfEf8zjrBgnQksHUgLpthi5vHlffcQTQTdPBZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.28", - "@vue/language-core": "3.3.9" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - } - } -} diff --git a/events/agent2app-2026/package.json b/events/agent2app-2026/package.json deleted file mode 100644 index e92181f..0000000 --- a/events/agent2app-2026/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "agent2app-hackathon-2026", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vue-tsc -b && vite build", - "preview": "vite preview" - }, - "dependencies": { - "vue": "^3.5.40" - }, - "devDependencies": { - "@types/node": "^24.13.3", - "@vitejs/plugin-vue": "^6.0.8", - "@vue/tsconfig": "^0.9.1", - "typescript": "~6.0.2", - "vite": "^8.2.0", - "vue-tsc": "^3.3.8" - } -} diff --git a/events/agent2app-2026/public/favicon.svg b/events/agent2app-2026/public/favicon.svg deleted file mode 100644 index c11a370..0000000 --- a/events/agent2app-2026/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/events/agent2app-2026/public/gosim-logo.svg b/events/agent2app-2026/public/gosim-logo.svg deleted file mode 100644 index 3cec679..0000000 --- a/events/agent2app-2026/public/gosim-logo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/events/agent2app-2026/public/images/CITY-V3-PROMPT.md b/events/agent2app-2026/public/images/CITY-V3-PROMPT.md deleted file mode 100644 index bb4cd14..0000000 --- a/events/agent2app-2026/public/images/CITY-V3-PROMPT.md +++ /dev/null @@ -1,9 +0,0 @@ -# Expanded classical city view - -Edited with built-in imagegen from `human-robot-studio-v2.png`. Output: `human-robot-city-v3.png`. Warm painterly concept illustration; not yet applied to the website. - -## Exact prompt - -Edit the supplied illustration with ONE focused composition change: tilt the framing upward and pull back slightly to reveal substantially more of the beautiful classical city outside. Keep this same warm inviting retrofuture creative studio, same two adult male makers (Black man foreground left drawing on a tablet, East Asian man right at a computer), same small ivory pear-shaped non-humanoid helper robot with dark waveform visor, same crescent work desk, computers with calendar/map/mobile app and chat interfaces, and the same warm coral, ivory, muted blue and sage painted palette. Preserve their identities, clothing, interaction and overall layout as closely as possible. The user loves this image and wants an expanded view, not a redesign. -Recompose to a wide 16:9 image with the foreground table and collaborators in the lower roughly 60% of the composition, and an expanded panoramic window and outdoor city occupying the upper roughly 35–40%. Reduce the amount of foreground desk cropped into the bottom and show much more of the window above the seated sofa. The scene should feel like the camera looks slightly higher, less steeply down at the desk. Through the broad window show a beautiful sunlit OLD classical Mediterranean-style city with terracotta rooftops, stone arches and arcades, a prominent ivory dome, bell towers, lush trees, layered hills and soft warm sky. The city should have legible depth and architecture, not a thin cropped strip. Keep the refined slightly classical interior furnishings, curved upholstered seating, wooden details, plants and golden afternoon light. The contrast of timeless domestic architecture and helpful robots/computers is the core of the image. -Preserve the soft painterly gouache/airbrush illustration style and gently hazy edges, not photorealistic CGI. Slight delicate pigment grain only, no folds, scratches, creases, cracked paper, wear or fake antique damage. No extra people, no humanoid silver robot, no red-dress woman, no space/planets, no neon, no readable text/logos, no borders. The existing App and chat screen content should remain recognizable. Generate one edited image. diff --git a/events/agent2app-2026/public/images/CONSOLE-PROMPT.md b/events/agent2app-2026/public/images/CONSOLE-PROMPT.md deleted file mode 100644 index 0c24456..0000000 --- a/events/agent2app-2026/public/images/CONSOLE-PROMPT.md +++ /dev/null @@ -1,7 +0,0 @@ -# Revised retrofuture hero - -Built-in imagegen; one generated image, original retained as `retro-computing-console.png`. Concept artwork, not an actual product photograph or app screenshot. - -## Exact prompt - -Use case: stylized-concept. Asset type: original widescreen 16:9 website hero for Agent2App, where tasks become apps. A spectacular RETROFUTURIST PERSONAL COMPUTING installation: cinematic high-end 1980s vision of a 2030 personal creative computer, sculptural monolithic GRAPHITE BLACK and brushed aluminum workstation console, a large floating-looking but physically mounted curved CRT-like display with deep chunky rounded bezel, integrated keyboard, a vertical mini handheld terminal docked beside it, precision ribs and distinctive molded industrial forms. Very bold iconic silhouette in futuristic dark design laboratory/showroom, no normal office accessories, no plants/books/lamps. Main display shows crisp luminous acid lemon-yellow route-map and task interface geometry, blocks and line diagrams, coherent UI within the screen, no text needed. A few pale-yellow luminous stripes integrated in hardware and floor lead eye into device, no holograms or fantasy particles. Vintage industrial futurism with provocative sculptural 1980s computer-ad art direction, dramatic hard rim lighting, deep blacks, cold silver, highly saturated lemon chartreuse #d5f66a, sharp highlights, subtle film texture. Main device on right 55% with left 40% dark low-detail negative space for website headline. Full-bleed immersive image with cinematic depth, low camera angle three-quarter view makes hardware monumental but still personal-scale, physical craftsmanship, genuinely unusual speculative computer, NOT ordinary laptop on desk, not beige retro computer museum, not gold/brass, not outer space, not planets, no neon magenta/cyan, no people/logos/readable text. Generate ONE image. diff --git a/events/agent2app-2026/public/images/HUMAN-ROBOT-PROMPT.md b/events/agent2app-2026/public/images/HUMAN-ROBOT-PROMPT.md deleted file mode 100644 index 3fe0901..0000000 --- a/events/agent2app-2026/public/images/HUMAN-ROBOT-PROMPT.md +++ /dev/null @@ -1,11 +0,0 @@ -# Human–robot creative computing - -Generated with built-in imagegen, using the user-supplied image as a style reference. Saved as `human-robot-pulp-future.png`. This is an original concept illustration, not an archival photograph. Not yet wired into the website theme. - -## Exact prompt - -Use the attached image as a STYLE REFERENCE only. Create an ORIGINAL wide landscape 16:9 illustration suitable as a website hero for an Agent2App hackathon. Match the reference's mid-century science-fiction paperback COVER PAINTING and aged printed reproduction character, NOT modern photography or photorealistic CGI. Rich hand-painted gouache/airbrush illustration, softly resolved faces, simplified painted shading, slight blur, visible fine halftone dots, ink bleed and subtle misregistration, faded paper and gentle print wear, dreamy retro science optimism. The picture itself must feel like a scanned vintage science-fiction magazine illustration, slightly fuzzy but compositionally legible. -Scene: a human woman inventor and a friendly tall articulated silver robot collaboratively creating a useful application in a fantastic personal computing workshop. Woman in a coral/red-orange retrofuture jumpsuit points from a small paper sketch toward a computer display; robot carefully operates a physical control panel. Show THREE OR FOUR different kinds of computers: a tall reel-to-reel mainframe, a slanted analog control desk with colorful indicator lamps, a rounded CRT display, and a small portable screen. The central CRT depicts simple pictorial daily-life application panels (calendar, route map, checklist), not code, no readable text. This is an optimistic human-agent creative partnership. Invent fresh poses, composition and robot head; do not copy the reference figures or central planet. Behind them sweeping teal architectural panels and curved glass with a faint imagined future city, hints of copper-colored signal paths connecting sketch, robot and screens to suggest intent becoming an application. No prominent planet, stars or outer-space theme. Cinematic painted perspective, engaging human narrative, not a sterile product display. -Palette: deep petrol blue, turquoise/sea green, faded vermilion/coral, aged cream, muted mustard and silver-gray. A balanced varied printed color palette, not all yellow and not neon. -Composition: expansive landscape 16:9, woman and robot grouped around center-right, varied computers across lower and right foreground, leftmost quarter calmer deep blue/teal architecture with softly fading painted detail suitable for later overlay type, but no empty solid rectangular panel. Artwork fills entire frame. -No title, labels, letters, logos, signature, watermark, border, modern smartphones, modern glossy 3D render, razor-sharp vector art, excessive bloom, cyberpunk neon, or artificial gaussian blur. Preserve the reference's visibly printed, slightly hazy painterly style. Generate one image. diff --git a/events/agent2app-2026/public/images/NIGHT-PROMPT.md b/events/agent2app-2026/public/images/NIGHT-PROMPT.md deleted file mode 100644 index 5e0997e..0000000 --- a/events/agent2app-2026/public/images/NIGHT-PROMPT.md +++ /dev/null @@ -1,13 +0,0 @@ -# Matching night illustration - -Built-in imagegen edit of `human-robot-city-v3.png`. Output: `human-robot-city-night.png`. - -## Exact prompt - -Use case: lighting-weather. -Asset type: matching nighttime hero illustration for a website theme toggle. -Input image: edit target, the supplied human-robot-city illustration. -Primary request: Change ONLY the time of day, lighting, and palette to NIGHT. Preserve the exact original composition, crop, perspective, geometry, city architecture, all plants and small objects, both people's identities and poses, the ivory helper robot and its pose, furniture, screens and their existing interface content. Keep every object in precisely the same place and size. -Style/medium: preserve the original warm, soft painterly illustration style and brush texture. -Lighting/mood: outside, deep indigo twilight/night sky with softly lit classical city windows and bridge, subtle moonlight on the dome, gentle warm reflections on water. Inside, warm amber practical illumination from the existing lamp and soft blue illumination from the existing app screens. Furnishings read as dark slate at night; people and the ivory robot remain clear and readable. Peaceful inviting creative studio at night. -Constraints: exact same aspect ratio and framing. This is a faithful lighting edit, not a new composition. No extra objects, no new lamps, no added foreground, no neon cyberpunk, no damage or creases, no text additions. Preserve all architecture and subject silhouettes. diff --git a/events/agent2app-2026/public/images/PERSONAL-COMPUTING-PROMPTS.md b/events/agent2app-2026/public/images/PERSONAL-COMPUTING-PROMPTS.md deleted file mode 100644 index 0e1535b..0000000 --- a/events/agent2app-2026/public/images/PERSONAL-COMPUTING-PROMPTS.md +++ /dev/null @@ -1,29 +0,0 @@ -# Personal computing artwork - -Generated using built-in imagegen. Concept illustrations, not actual product screenshots. Calendar numerals are illustrative, not functional data. Prior orbital artwork is retained but unused. - -## personal-computing-hero.png — 1672 × 941 - -Use case: product-mockup -Asset type: full-bleed website hero, 16:9 landscape -Primary request: Retrofuturist PERSONAL COMPUTING for an Agent2App hackathon. A beautifully designed compact personal intelligent terminal, 1980s imagined future. Slim tilted display with chunky but refined light-cool-gray frame, small physical input pad and a handheld companion slate on a graphite work desk. Screen emits pale lemon and shows a coherent minimal everyday trip-planner application: recognizable route map with 3 stops, schedule list, and a small conversational input field leading to app layout, simple fine-line UI, no legible words needed. -Scene/backdrop: Quiet future design studio, naturally dark uncluttered desk and background. -Style/medium: Wide architectural product photograph, tactile practical sophisticated 1980s industrial concept photo, fine film grain. -Composition/framing: Product occupies RIGHT half, centered roughly at 65–80% x. LEFT 40% must remain naturally very dark and uncluttered, usable for website headline. 16:9 image. -Lighting/mood: Soft cool daylight, modest lemon screen light, optimistic, sophisticated, clean. -Color palette: Restrained lemon yellow #d5f66a, graphite black, cool gray. -Materials/textures: Molded cool gray polymer and brushed aluminum, refined tactile physical buttons. -Constraints: Screen interface realistically contained within physical screen. No floating holographic cards. No legible words or branding. -Avoid: Outer space, planets, orbit graphics, spaceship, tape banks, robots, gold/brass, neon cyan/purple, readable branding/text, collage, dystopian/grimy atmosphere. - -## personal-computing-detail.png — 1536 × 1024 - -Use case: photorealistic-natural -Asset type: website editorial image, landscape 3:2 -Primary request: Intimate editorial photograph of a person's hand using a small graphite and cool-gray retrofuture personal slate at a simple desk. Restrained pale lemon display clearly shows a practical calendar/checklist application being arranged. Thin paper sketch notebook nearby. Ergonomic physical buttons and tactile retro industrial design, a sophisticated 1980s imagined future personal intelligent computing product. -Composition/framing: Landscape 3:2 intimate close view of hand and device only, no face. -Lighting/mood: Soft daylight, optimistic, sophisticated, clean personal computing product world. -Color palette: Mostly graphite black, cool gray, pale lemon #d5f66a. -Materials/textures: Refined molded cool-gray polymer, brushed aluminum details, tactile physical controls, fine film grain. -Constraints: Real screen content contained within physical screen, coherent clean fine-line calendar and checklist layout, no floating graphics, no legible words needed. -Avoid: Space imagery, planets, orbit graphics, spaceships, gold metal, robots, excessive cables, unreadable text clusters, neon cyan/purple, dystopian/grimy atmosphere. diff --git a/events/agent2app-2026/public/images/PROMPTS.md b/events/agent2app-2026/public/images/PROMPTS.md deleted file mode 100644 index 5059a4d..0000000 --- a/events/agent2app-2026/public/images/PROMPTS.md +++ /dev/null @@ -1,25 +0,0 @@ -# Retrofuturist image generation - -Generated with the built-in imagegen tool. Original concept artwork for Agent2App, not documentary event imagery. Both originals are saved next to this file. - -## orbital-observatory.png (1672 × 941) - -Use case: stylized-concept -Asset type: Agent2App hackathon website hero image, widescreen 16:9, 1920x1080 or larger. -Primary request: Cinematic 1970s retrofuturist orbital computing observatory. Monumental analog mainframe consoles, CRT terminals, brushed aluminum and black panels, panoramic circular window showing a huge pale lemon-yellow ringed planet above a lunar horizon. -Composition/framing: Architecturally striking wide composition. Main computers, window and planet occupy the right two thirds; the left third is dark restrained negative space for webpage headline overlay. Create the image only; do not include headline. -Style/medium: Highly art-directed cinematic photograph of a real practical space-age set, tactile material, fine analogue film grain. -Lighting/mood: Restrained lemon phosphor illumination, dramatic shadow, no lens flare. -Color palette: Lemon yellow #d5f66a, near-black, silver. -Constraints: No text, logos, lettering, people, UI collage, neon cyan or purple, fantasy holograms. - -## orbital-terminal.png (1536 × 1024) - -Use case: stylized-concept -Asset type: Agent2App hackathon website editorial image, landscape 3:2. -Primary request: Beautifully composed close-up of a vintage-future modular computer terminal, black and silver keyboard, curved lemon phosphor CRT showing abstract orbital trajectory wireframe without text, knobs and physical switches. -Scene/backdrop: Dark orbital space-lab background with distant planetary curvature. Same visual world as a cinematic 1970s retrofuturist orbital computing observatory with monumental analog mainframes, brushed aluminum, black panels, and a pale lemon-yellow ringed planet. -Style/medium: Sophisticated 1970s space-age industrial concept photograph, practical set, tactile metal, fine analogue film grain. -Lighting/mood: Warm lemon highlights, restrained phosphor glow, deep near-black shadows. -Color palette: Lemon yellow #d5f66a, near-black, silver. -Constraints: No readable text, logos, people, neon cyan or purple, fantasy holograms. diff --git a/events/agent2app-2026/public/images/STUDIO-V2-PROMPT.md b/events/agent2app-2026/public/images/STUDIO-V2-PROMPT.md deleted file mode 100644 index a9ec053..0000000 --- a/events/agent2app-2026/public/images/STUDIO-V2-PROMPT.md +++ /dev/null @@ -1,13 +0,0 @@ -# Original creative studio — v2 - -Generated with built-in imagegen without an image reference to establish a distinct composition. Saved as `human-robot-studio-v2.png`. Not yet applied to the website. - -## Exact prompt - -Create ONE original landscape 16:9 illustration of human-agent collaboration for an Agent2App creative computing event. -STYLE: mid-century optimistic science-fiction editorial PAINTING, soft gouache and airbrush shading, gently unfocused edges, fine subtle print grain, restrained vintage color separation. A clean well-preserved illustration, NOT an aged or damaged physical print. NO scratches, folds, cracks, creases, worn edges, yellow paper overlays, dust or stains. Slightly hazy painterly rendering rather than razor-sharp CG or vector graphics. -COMPLETELY NEW COMPOSITION AND CHARACTERS: high oblique overhead view into a circular sunken creative studio, viewed diagonally from above, not a front-facing portrait or a woman pointing at consoles. Two clearly adult human makers sit on OPPOSITE sides of a broad curved crescent drafting desk. Foreground left: an adult Black man with close-cropped hair, indigo work shirt, sleeves rolled up, seated and drawing an app layout on a luminous pen tablet. Far right: an adult East Asian man with wavy black hair, a pale jade jacket, seated at a small rounded computer and typing. Central character is a SHORT, NON-HUMANOID service robot: squat ivory ceramic pear-shaped body on a single spherical wheel, one broad horizontal dark visor with a soft coral waveform, two slender articulated utility arms, no human face, no cylindrical head, no round eyes, no silver human body, no chest of multicolored buttons. It hovers its gripper over a compact translucent app tile on a physical desktop display, participating as a creative assistant. -COMPUTERS AND THEME: three distinctly different screens on the desk, one large low landscape curved display showing an elegant calendar and route-planning app; one portrait handheld device docked upright with clean recognizable mobile application panels; a small CRT displaying simple alternating rounded chat bubbles. App elements remain inside real screens, no readable words needed. The paper sketches and screen applications echo each other so the theme is a human idea becoming usable software. -ENVIRONMENT: intimate but imaginative retrofuture design workshop with curved built-in shelves, geometric wall panels and a wide horizontal window showing sunlit rooftops and trees. No starfield, planet, spacecraft, reel-to-reel tape banks, orbit loops, glowing cables or copper signal trails. Negative space in the upper-left architecture balances a lively diagonal arrangement of people, robot, and desk. Figures are modest-sized within the scene; focus on collective activity and the layout of the room. No standing woman, no red dress or red-haired character, no humanoid robot standing behind a person, no pointing pose. -PALETTE: dusty cobalt and petrol blue shadows, muted jade, warm apricot/coral accents and clean ivory highlights, balanced rich but slightly softened pigments. No mandatory lemon yellow, no neon. -Illustration fills the frame. No text, labels, signatures, watermark, borders, ripped paper or photo frame. Invent all geometry and character styling independently; feel like a different mid-century artist's newly painted vision of tomorrow, NOT a reproduction of any existing cover. diff --git a/events/agent2app-2026/public/images/agent2app-platform-atelier.png b/events/agent2app-2026/public/images/agent2app-platform-atelier.png deleted file mode 100644 index 0d6580c..0000000 Binary files a/events/agent2app-2026/public/images/agent2app-platform-atelier.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/agent2app-platform.png b/events/agent2app-2026/public/images/agent2app-platform.png deleted file mode 100644 index 3f65cb9..0000000 Binary files a/events/agent2app-2026/public/images/agent2app-platform.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-computing-day-enhanced.png b/events/agent2app-2026/public/images/hero-detail-computing-day-enhanced.png deleted file mode 100644 index b5c527d..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-computing-day-enhanced.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-computing-day.png b/events/agent2app-2026/public/images/hero-detail-computing-day.png deleted file mode 100644 index a63e849..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-computing-day.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-computing-night-enhanced.png b/events/agent2app-2026/public/images/hero-detail-computing-night-enhanced.png deleted file mode 100644 index ba13188..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-computing-night-enhanced.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-computing-night.png b/events/agent2app-2026/public/images/hero-detail-computing-night.png deleted file mode 100644 index d509cc0..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-computing-night.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-design-day.png b/events/agent2app-2026/public/images/hero-detail-design-day.png deleted file mode 100644 index 808851d..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-design-day.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/hero-detail-design-night.png b/events/agent2app-2026/public/images/hero-detail-design-night.png deleted file mode 100644 index 0ea906a..0000000 Binary files a/events/agent2app-2026/public/images/hero-detail-design-night.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/human-robot-city-night.png b/events/agent2app-2026/public/images/human-robot-city-night.png deleted file mode 100644 index 50cd50b..0000000 Binary files a/events/agent2app-2026/public/images/human-robot-city-night.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/human-robot-city-v3.png b/events/agent2app-2026/public/images/human-robot-city-v3.png deleted file mode 100644 index a70bb7f..0000000 Binary files a/events/agent2app-2026/public/images/human-robot-city-v3.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/human-robot-pulp-future.png b/events/agent2app-2026/public/images/human-robot-pulp-future.png deleted file mode 100644 index 930bef3..0000000 Binary files a/events/agent2app-2026/public/images/human-robot-pulp-future.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/human-robot-studio-v2.png b/events/agent2app-2026/public/images/human-robot-studio-v2.png deleted file mode 100644 index 757231e..0000000 Binary files a/events/agent2app-2026/public/images/human-robot-studio-v2.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/orbital-observatory.png b/events/agent2app-2026/public/images/orbital-observatory.png deleted file mode 100644 index ab0f354..0000000 Binary files a/events/agent2app-2026/public/images/orbital-observatory.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/orbital-terminal.png b/events/agent2app-2026/public/images/orbital-terminal.png deleted file mode 100644 index 9c2f748..0000000 Binary files a/events/agent2app-2026/public/images/orbital-terminal.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/personal-computing-detail.png b/events/agent2app-2026/public/images/personal-computing-detail.png deleted file mode 100644 index 5975235..0000000 Binary files a/events/agent2app-2026/public/images/personal-computing-detail.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/personal-computing-hero.png b/events/agent2app-2026/public/images/personal-computing-hero.png deleted file mode 100644 index 5f04372..0000000 Binary files a/events/agent2app-2026/public/images/personal-computing-hero.png and /dev/null differ diff --git a/events/agent2app-2026/public/images/retro-computing-console.png b/events/agent2app-2026/public/images/retro-computing-console.png deleted file mode 100644 index f98350c..0000000 Binary files a/events/agent2app-2026/public/images/retro-computing-console.png and /dev/null differ diff --git a/events/agent2app-2026/public/mascots/crab.webp b/events/agent2app-2026/public/mascots/crab.webp deleted file mode 100644 index 5f26e1d..0000000 Binary files a/events/agent2app-2026/public/mascots/crab.webp and /dev/null differ diff --git a/events/agent2app-2026/public/mascots/nautilus.webp b/events/agent2app-2026/public/mascots/nautilus.webp deleted file mode 100644 index 4ff99f6..0000000 Binary files a/events/agent2app-2026/public/mascots/nautilus.webp and /dev/null differ diff --git a/events/agent2app-2026/public/mascots/octopus.webp b/events/agent2app-2026/public/mascots/octopus.webp deleted file mode 100644 index d9e9486..0000000 Binary files a/events/agent2app-2026/public/mascots/octopus.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/appcard-weather.png b/events/agent2app-2026/public/screenshots/appcard-weather.png deleted file mode 100644 index d63eca3..0000000 Binary files a/events/agent2app-2026/public/screenshots/appcard-weather.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-aircon-en.webp b/events/agent2app-2026/public/screenshots/octosense-aircon-en.webp deleted file mode 100644 index 6a7bee9..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-aircon-en.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-aircon-zh.webp b/events/agent2app-2026/public/screenshots/octosense-aircon-zh.webp deleted file mode 100644 index bf787e2..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-aircon-zh.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-desktop-dark.png b/events/agent2app-2026/public/screenshots/octosense-desktop-dark.png deleted file mode 100644 index 57a0421..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-desktop-dark.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-desktop-light.png b/events/agent2app-2026/public/screenshots/octosense-desktop-light.png deleted file mode 100644 index e00a090..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-desktop-light.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-health-en.webp b/events/agent2app-2026/public/screenshots/octosense-health-en.webp deleted file mode 100644 index 996f65a..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-health-en.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-health-zh.webp b/events/agent2app-2026/public/screenshots/octosense-health-zh.webp deleted file mode 100644 index df6c5f3..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-health-zh.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-omarchy.jpg b/events/agent2app-2026/public/screenshots/octosense-omarchy.jpg deleted file mode 100644 index c808e28..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-omarchy.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-reunion-en.webp b/events/agent2app-2026/public/screenshots/octosense-reunion-en.webp deleted file mode 100644 index dccc7d7..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-reunion-en.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-reunion-zh.webp b/events/agent2app-2026/public/screenshots/octosense-reunion-zh.webp deleted file mode 100644 index 5785970..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-reunion-zh.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-school-en.webp b/events/agent2app-2026/public/screenshots/octosense-school-en.webp deleted file mode 100644 index 997c206..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-school-en.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/octosense-school-zh.webp b/events/agent2app-2026/public/screenshots/octosense-school-zh.webp deleted file mode 100644 index aaf06a9..0000000 Binary files a/events/agent2app-2026/public/screenshots/octosense-school-zh.webp and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/provenance.json b/events/agent2app-2026/public/screenshots/provenance.json deleted file mode 100644 index e27b629..0000000 --- a/events/agent2app-2026/public/screenshots/provenance.json +++ /dev/null @@ -1,171 +0,0 @@ -[ - { - "file": "appcard-weather.png", - "source": "../../review/2026-09-12/screenshots/appcard-07-weather-top.png", - "sha256": "013aec90657163a49d416c07e3d686fcfbafbd4c430d188f8dabc612bd451635", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "octosense-desktop-light.png", - "source": "../../review/2026-09-12/screenshots/octosense-07-multiapp-light.png", - "sha256": "37587d556c37fa0ddc1c2deac4e255fff375c56fa7360d28427d7004b1e4ad81", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "octosense-desktop-dark.png", - "source": "../../review/2026-09-12/screenshots/octosense-08-multiapp-dark.png", - "sha256": "b2fab038b19b7d25dbbdc7086fa655bf126aacc75753832782c9f8d557a549d3", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "robrix-miniapps.jpg", - "source": "../../review/2026-09-12/robrix-a2app/screenshots/01-miniapps.jpg", - "sha256": "6b593013731eeb1b04dcd3edd8a6d4ab5ea739e28c855841263648d78131ed63", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "robrix-permission.jpg", - "source": "../../review/2026-09-12/robrix-a2app/screenshots/05-permission-prompt.jpg", - "sha256": "20a8a44530ee39ce2a279731d00320411ce61a724e247352d288094fce394e12", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "robrix-versions.jpg", - "source": "../../review/2026-09-12/robrix-a2app/screenshots/09-version-history.jpg", - "sha256": "3fde6723e082f285a40056aa185a203631cfed5f78e410fb930abc1799726851", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "robrix-diff.jpg", - "source": "../../review/2026-09-12/robrix-a2app/screenshots/10-source-diff.jpg", - "sha256": "e1c528f3d98091cb4efeb562e315d8311069e853d442418336a9921f7509e4b2", - "edited": false, - "capture": "Computer Use / native macOS window", - "date": "2026-09-12" - }, - { - "file": "octosense-omarchy.jpg", - "source": "../../review/2026-09-12/screenshots/octosense-09-omarchy.jpg", - "sha256": "d50dc51e956448d22ae668a8e2476fb092ff384890f794416f3fb07a72ff537a", - "edited": false, - "capture": "Computer Use / org.agenticapp.review.octosense native macOS window", - "date": "2026-09-12", - "time": "20:39:18 Asia/Shanghai" - }, - { - "file": "octosense-aircon-zh.webp", - "source": "https://octosense.org/cn/experience/aircon/", - "sha256": "418007638eeab798fff4d585b1aafd1d3cd3bd63cf90af0c77ceb8d7cd6e5104", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-aircon-en.webp", - "source": "https://octosense.org/experience/aircon/", - "sha256": "8086752c85aaed850ac348fa15c76fe924f1d952b4cfd77d53f56f7d8121a8b6", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-school-zh.webp", - "source": "https://octosense.org/cn/experience/school/", - "sha256": "79ebc24bce45f25c63ea498c5aff8b455b02ef8d95e79bea63d59afa588c4711", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-school-en.webp", - "source": "https://octosense.org/experience/school/", - "sha256": "6dbdae3d523ba8a0120c23e80aafa45a44d4e88f0aff57b185ee3bba1468b54a", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-health-zh.webp", - "source": "https://octosense.org/cn/experience/health/", - "sha256": "5cb6cc96ae555d379b9ed8c6c80a7efcaaf07e10791a1e7a05308f16b0113730", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-health-en.webp", - "source": "https://octosense.org/experience/health/", - "sha256": "4fd786de00552b15758bec22b30e83e017f1f725b38a7b3da036e65e337ad8d6", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-reunion-zh.webp", - "source": "https://octosense.org/cn/experience/reunion/", - "sha256": "8fe4c2140ca6a05b9b3af83925d186ddcd71c5b0b05da43a51f02432fa880367", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "octosense-reunion-en.webp", - "source": "https://octosense.org/experience/reunion/", - "sha256": "595aaa3253cd6232169a08cc4c95818c895a93334ad5cbf57ea4ce842b30e208", - "edited": false, - "capture": "Playwright Chromium / .wizard-phone element, first scene, converted to WebP", - "date": "2026-09-19" - }, - { - "file": "robrix-miniapp-app-details.png", - "source": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native/app-details.png", - "sha256": "0d1840f482fe124acb4e3364c36ac5d57e72d1d9ed76e23e93e4263b8bf4ad9c", - "edited": false, - "capture": "Makepad native hidden-window harness / macOS arm64 / isolated Palpo fixture", - "date": "2026-09-21", - "source_commit": "05daf9bdb05fafc6d8f04dcb312a35f1d46a661e", - "receipt": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native-validation.json" - }, - { - "file": "robrix-miniapp-account-consent.png", - "source": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native/account-consent.png", - "sha256": "a1b501f94649b269a15e26714e67888ef4ea109255f879649ad94fe31cfbb9ae", - "edited": false, - "capture": "Makepad native hidden-window harness / macOS arm64 / isolated Palpo fixture", - "date": "2026-09-21", - "source_commit": "05daf9bdb05fafc6d8f04dcb312a35f1d46a661e", - "receipt": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native-validation.json" - }, - { - "file": "robrix-miniapp-native-preview.png", - "source": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native/native-preview.png", - "sha256": "b2f6ed9d6dabb4992425e0cdbf95e2a7369f7c0e7ec54a140bdfd7ebbeaee75c", - "edited": false, - "capture": "Makepad native hidden-window harness / macOS arm64 / isolated Palpo fixture", - "date": "2026-09-21", - "source_commit": "05daf9bdb05fafc6d8f04dcb312a35f1d46a661e", - "receipt": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native-validation.json" - }, - { - "file": "robrix-miniapp-received-card.png", - "source": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native/received-card.png", - "sha256": "ef175642183b36f720461bc81e57f1e53e43116933e6cd98238206a3e4051c25", - "edited": false, - "capture": "Makepad native hidden-window harness / macOS arm64 / isolated Palpo fixture", - "date": "2026-09-21", - "source_commit": "05daf9bdb05fafc6d8f04dcb312a35f1d46a661e", - "receipt": "https://github.com/OctoSense-org/robrix2/blob/05daf9bdb05fafc6d8f04dcb312a35f1d46a661e/lab/article-editor/validation/native-validation.json" - } -] diff --git a/events/agent2app-2026/public/screenshots/robrix-diff.jpg b/events/agent2app-2026/public/screenshots/robrix-diff.jpg deleted file mode 100644 index f4df4f0..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-diff.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-miniapp-account-consent.png b/events/agent2app-2026/public/screenshots/robrix-miniapp-account-consent.png deleted file mode 100644 index 212caed..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-miniapp-account-consent.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-miniapp-app-details.png b/events/agent2app-2026/public/screenshots/robrix-miniapp-app-details.png deleted file mode 100644 index 999f5c2..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-miniapp-app-details.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-miniapp-native-preview.png b/events/agent2app-2026/public/screenshots/robrix-miniapp-native-preview.png deleted file mode 100644 index 51a8be8..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-miniapp-native-preview.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-miniapp-received-card.png b/events/agent2app-2026/public/screenshots/robrix-miniapp-received-card.png deleted file mode 100644 index 7cef215..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-miniapp-received-card.png and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-miniapps.jpg b/events/agent2app-2026/public/screenshots/robrix-miniapps.jpg deleted file mode 100644 index b9b6a96..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-miniapps.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-permission.jpg b/events/agent2app-2026/public/screenshots/robrix-permission.jpg deleted file mode 100644 index 199984f..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-permission.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/screenshots/robrix-versions.jpg b/events/agent2app-2026/public/screenshots/robrix-versions.jpg deleted file mode 100644 index 525a5a8..0000000 Binary files a/events/agent2app-2026/public/screenshots/robrix-versions.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/sponsors/README.md b/events/agent2app-2026/public/sponsors/README.md deleted file mode 100644 index faca5cd..0000000 --- a/events/agent2app-2026/public/sponsors/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Sponsor brand assets - -Retrieved September 21, 2026 for the Agentic App event's sponsor section. Files are hosted locally and retain their original colors, proportions and bytes. Logo surfaces stay white in both page themes. - -- `minimax-logo.png`: original navigation logo from the [MiniMax official website](https://www.minimaxi.com/), downloaded from the image URL referenced by its navigation. -- `kimi-logo.svg`: `Lockup_Main_Light.svg` from the logo archive offered by the [Kimi official brand guide](https://www.kimi.com/resources/kimi-brand). This is the lockup intended for light backgrounds. -- `provenance.json`: original download URLs, archive entry and SHA-256 hashes. - -The brand marks belong to their respective owners. Kimi's brand guide links to its [logo usage terms](https://www.kimi.com/zh-cn/policies/logo-usage-terms). - -Sponsor descriptions are based on the organizer-confirmed sponsorship: MiniMax provides RMB 50,000 worth of token credits across competition rewards and participant development; Kimi provides coding benefits without a public account quantity or promised duration. Product descriptions are supported by the MiniMax website and [Kimi Code](https://www.kimi.com/code/). These credits do not create an additional cash prize pool. diff --git a/events/agent2app-2026/public/sponsors/kimi-logo.svg b/events/agent2app-2026/public/sponsors/kimi-logo.svg deleted file mode 100644 index 576d50c..0000000 --- a/events/agent2app-2026/public/sponsors/kimi-logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/events/agent2app-2026/public/sponsors/kimi.png b/events/agent2app-2026/public/sponsors/kimi.png deleted file mode 100644 index fc0ad55..0000000 Binary files a/events/agent2app-2026/public/sponsors/kimi.png and /dev/null differ diff --git a/events/agent2app-2026/public/sponsors/minimax-logo.png b/events/agent2app-2026/public/sponsors/minimax-logo.png deleted file mode 100644 index f9f275d..0000000 Binary files a/events/agent2app-2026/public/sponsors/minimax-logo.png and /dev/null differ diff --git a/events/agent2app-2026/public/sponsors/minimax.png b/events/agent2app-2026/public/sponsors/minimax.png deleted file mode 100644 index dce8484..0000000 Binary files a/events/agent2app-2026/public/sponsors/minimax.png and /dev/null differ diff --git a/events/agent2app-2026/public/sponsors/provenance.json b/events/agent2app-2026/public/sponsors/provenance.json deleted file mode 100644 index ae95589..0000000 --- a/events/agent2app-2026/public/sponsors/provenance.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "retrieved_on": "2026-09-21", - "assets": [ - { - "file": "minimax-logo.png", - "brand": "MiniMax", - "source_page": "https://www.minimaxi.com/", - "download_url": "https://filecdn.minimax.chat/public/969d635c-cab6-45cc-8d61-47c9fe40c81f.png", - "source_location": "Official website navigation logo", - "modifications": "None", - "sha256": "d2b11047b7d863180c98534294a409945653cba52a5e1ad0daa9be6a21fad04f" - }, - { - "file": "kimi-logo.svg", - "brand": "Kimi / Moonshot AI", - "source_page": "https://www.kimi.com/resources/kimi-brand", - "download_url": "https://kimi-file.kimi.ai/prod-chat-kimi/kfs/4/1/2026-08-12/1d9u74p1l51jas5cp5oq0?response-content-disposition=attachment%3Bfilename%3Dkimi-logo-assets.zip", - "archive_entry": "KIMI-logos/Lockup_Main/SVG/Lockup_Main_Light.svg", - "modifications": "None", - "sha256": "9f86c69577fb09e2eaeb6e95a93ad5d191b02ee438fac03c78ce0fe6ac5556f8" - } - ] -} diff --git a/events/agent2app-2026/public/videos/agent2app-day-v2.jpg b/events/agent2app-2026/public/videos/agent2app-day-v2.jpg deleted file mode 100644 index 2b13636..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-day-v2.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/videos/agent2app-day-v2.mp4 b/events/agent2app-2026/public/videos/agent2app-day-v2.mp4 deleted file mode 100644 index 01f4f3f..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-day-v2.mp4 and /dev/null differ diff --git a/events/agent2app-2026/public/videos/agent2app-day.mp4 b/events/agent2app-2026/public/videos/agent2app-day.mp4 deleted file mode 100644 index 60d2a95..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-day.mp4 and /dev/null differ diff --git a/events/agent2app-2026/public/videos/agent2app-night-v2.jpg b/events/agent2app-2026/public/videos/agent2app-night-v2.jpg deleted file mode 100644 index b4cf09a..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-night-v2.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/videos/agent2app-night-v2.mp4 b/events/agent2app-2026/public/videos/agent2app-night-v2.mp4 deleted file mode 100644 index de5cc66..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-night-v2.mp4 and /dev/null differ diff --git a/events/agent2app-2026/public/videos/agent2app-night.mp4 b/events/agent2app-2026/public/videos/agent2app-night.mp4 deleted file mode 100644 index 08c2098..0000000 Binary files a/events/agent2app-2026/public/videos/agent2app-night.mp4 and /dev/null differ diff --git a/events/agent2app-2026/public/videos/hero-poster.jpg b/events/agent2app-2026/public/videos/hero-poster.jpg deleted file mode 100644 index dd18566..0000000 Binary files a/events/agent2app-2026/public/videos/hero-poster.jpg and /dev/null differ diff --git a/events/agent2app-2026/public/videos/hero.mp4 b/events/agent2app-2026/public/videos/hero.mp4 deleted file mode 100644 index 2260b29..0000000 Binary files a/events/agent2app-2026/public/videos/hero.mp4 and /dev/null differ diff --git a/events/agent2app-2026/src/App.vue b/events/agent2app-2026/src/App.vue deleted file mode 100644 index f4e0888..0000000 --- a/events/agent2app-2026/src/App.vue +++ /dev/null @@ -1,169 +0,0 @@ - - - diff --git a/events/agent2app-2026/src/components/ApplicationScenarios.vue b/events/agent2app-2026/src/components/ApplicationScenarios.vue deleted file mode 100644 index f7a14bb..0000000 --- a/events/agent2app-2026/src/components/ApplicationScenarios.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/AwardEvaluation.vue b/events/agent2app-2026/src/components/AwardEvaluation.vue deleted file mode 100644 index 94c1e9f..0000000 --- a/events/agent2app-2026/src/components/AwardEvaluation.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/ConferenceText.vue b/events/agent2app-2026/src/components/ConferenceText.vue deleted file mode 100644 index a817264..0000000 --- a/events/agent2app-2026/src/components/ConferenceText.vue +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/events/agent2app-2026/src/components/EventSchedule.vue b/events/agent2app-2026/src/components/EventSchedule.vue deleted file mode 100644 index 69b7cf9..0000000 --- a/events/agent2app-2026/src/components/EventSchedule.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/EventSwitcher.vue b/events/agent2app-2026/src/components/EventSwitcher.vue deleted file mode 100644 index 9a4d0c5..0000000 --- a/events/agent2app-2026/src/components/EventSwitcher.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - diff --git a/events/agent2app-2026/src/components/HeroDetail.vue b/events/agent2app-2026/src/components/HeroDetail.vue deleted file mode 100644 index 176099e..0000000 --- a/events/agent2app-2026/src/components/HeroDetail.vue +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/events/agent2app-2026/src/components/HeroMedia.vue b/events/agent2app-2026/src/components/HeroMedia.vue deleted file mode 100644 index ae85674..0000000 --- a/events/agent2app-2026/src/components/HeroMedia.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/events/agent2app-2026/src/components/ProjectShowcase.vue b/events/agent2app-2026/src/components/ProjectShowcase.vue deleted file mode 100644 index 3d6ebe8..0000000 --- a/events/agent2app-2026/src/components/ProjectShowcase.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/RegistrationPanel.vue b/events/agent2app-2026/src/components/RegistrationPanel.vue deleted file mode 100644 index 6aeec62..0000000 --- a/events/agent2app-2026/src/components/RegistrationPanel.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/SponsorSupport.vue b/events/agent2app-2026/src/components/SponsorSupport.vue deleted file mode 100644 index 6da6697..0000000 --- a/events/agent2app-2026/src/components/SponsorSupport.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/TierMascot.vue b/events/agent2app-2026/src/components/TierMascot.vue deleted file mode 100644 index 7498662..0000000 --- a/events/agent2app-2026/src/components/TierMascot.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/components/TrainingApproach.vue b/events/agent2app-2026/src/components/TrainingApproach.vue deleted file mode 100644 index 5248fa5..0000000 --- a/events/agent2app-2026/src/components/TrainingApproach.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/events/agent2app-2026/src/en.json b/events/agent2app-2026/src/en.json deleted file mode 100644 index 9612922..0000000 --- a/events/agent2app-2026/src/en.json +++ /dev/null @@ -1,578 +0,0 @@ -{ - "参赛命题": "Challenge", - "三级阶梯": "Three Steps", - "奖项与评分": "Awards & Scoring", - "悬赏榜": "Bounties", - "赛程与培训": "Schedule & Training", - "输入脚本,实时预览卡片。头号悬赏;若赛前已有 MVP,则转为体验增强。": "Write scripts and preview cards live. A priority bounty; if an MVP exists before the event, focus on improving the experience.", - "check-ui CLI 与 LSP 接入": "check-ui CLI & LSP Integration", - "把 L0 校验带进命令行与编辑器,让创作反馈更及时。": "Bring L0 validation into the command line and editor for faster feedback.", - "更有用的错误诊断": "Better Error Diagnostics", - "错误码与修复建议,帮助模型理解失败并完成自修复。": "Provide error codes and actionable suggestions so models can understand failures and repair their output.", - "结构化 lint 引擎": "Structured Lint Engine", - "从子串匹配走向 OR、禁止与计数规则,提升卡片质量校验。": "Move beyond substring matching to OR, prohibition and counting rules for better card validation.", - "跨仓库 schema 契约测试": "Cross-repository Schema Contract Tests", - "为 Octoscript 与 OctoSense 的接口一致性提供自动检查。": "Automatically check interface consistency between Octoscript and OctoSense.", - "双仓协作": "Both repositories", - "测试解析器边界,提高面对复杂输入时的稳定性。": "Test parser boundaries and improve resilience to complex input.", - "L1 规范撰写": "L1 Specification", - "把语言行为写成清晰规范,技术写作者也可认领。": "Document language behavior in a clear specification. Technical writers are welcome to take this on.", - "UI Protocol 最小客户端": "Minimal UI Protocol Client", - "用 TypeScript 或 Python,把 Octos 接到手机之外的界面。": "Connect Octos to interfaces beyond the phone using TypeScript or Python.", - "协议 schema / typegen / conformance": "Protocol Schema / Typegen / Conformance", - "完善 schema 导出、类型生成或协议一致性测试。": "Improve schema export, type generation or protocol conformance tests.", - "new-skill 脚手架": "new-skill Scaffolding", - "简化 manifest 与注册流程,让新能力更容易起步。": "Simplify manifests and registration to make new capabilities easier to build.", - "「生产回路 Agent」演示": "Production-loop Agent Demo", - "读取自身运行指标,发现卡片失败,自动修复并重新发布。": "Read runtime metrics, detect card failures, then repair and republish automatically.", - "赛前启动": "PRE-EVENT LAUNCH", - "命题发布 · 开放报名": "Challenge announced · Registration opens", - "全员必修 / 90 MIN": "REQUIRED FOR ALL / 90 MIN", - "第 0 讲 · Agent 化的软件": "Session 0 · Software as an agent", - "理解主题,看「一句话 → 活卡片」真机演示,了解赛制,参加组队集市。": "Explore the theme, watch a sentence become a live card on a device, learn the rules and meet potential teammates.", - "全员必修 / 120 MIN": "REQUIRED FOR ALL / 120 MIN", - "第 1 讲 · Octoscript 速成": "Session 1 · Octoscript crash course", - "学习声明、no-facts 与事件,使用能力菜单,写一张卡并通过 validator;提交 app.md 草稿。": "Learn declarations, no-facts and events. Use the capability menu, write a card that passes validation and submit an app.md draft.", - "第 2 讲 · Rust 能力与组件": "Session 2 · Rust capabilities & components", - "从预打包环境跑到真机,添加最小数据源,学习组件注册与跨后端契约。": "Run the packaged environment on a device, add a minimal data source and learn component registration and cross-backend contracts.", - "第 3 讲 · 悬赏题导览": "Session 3 · Bounty walkthrough", - "理解 Octoscript 工具链与 Octos 协议,逐题了解切入点、交付物和验收标准。": "Explore the Octoscript toolchain and Octos protocol, with entry points, deliverables and acceptance criteria for each bounty.", - "Mentor、平台技术台与环境急救台值守;中途进行 checkpoint demo,最后展示完整作品。": "Mentors, platform support and environment troubleshooting are available. Share a checkpoint demo, then present your finished work.", - "赛后合并窗口": "POST-EVENT MERGE WINDOW", - "不会 Rust,也能独立参赛吗?": "Can I enter on my own without knowing Rust?", - "必须组队吗?没有技术伙伴怎么办?": "Do I need a team or a technical teammate?", - "不强制组队,也不要求每队必须有技术成员。赛前组队集市提供撮合,赛中平台技术台可提供少量能力接线支持。这属于平台服务,不算代做。": "Neither teams nor technical teammates are required. Pre-event team matching helps you find collaborators, and the platform desk can offer limited help connecting capabilities. This is event support, not outsourced project work.", - "没有 Android 手机怎么办?": "What if I do not have an Android phone?", - "什么是 no-facts?": "What does no-facts mean?", - "模型只写布局与数据绑定,不编造天气、价格等事实。真实数据在渲染时由 sys.* helper 获取;卡片应遵守能力菜单与 L0 校验规则。": "The model writes layouts and data bindings, without inventing facts such as weather or prices. Real data is fetched by sys.* helpers at render time. Cards must follow the capability menu and L0 validation rules.", - "做工具链或内核,就不用做应用了吗?": "Can I work on the toolchain or kernel instead of an app?", - "仍需回到统一命题:一句话变成能用的应用。技术突破必须服务自己的作品演示;悬赏贡献另计项目反哺分,不替代演示。": "Every entry must address the same challenge: turn a sentence into a working app. Technical advances must support your project demo. Bounty contributions earn separate contribution points and do not replace the demo.", - "跳转到主要内容": "Skip to main content", - "参赛指南 ↗": "Participation guide ↗", - "Agentic App 黑客松": "Agentic App Hackathon", - "意图所至,应用而生。": "From intent to a working app.", - "参赛信息": "Participation", - "查看命题 ↓": "Explore the challenge ↓", - "探索赛事 ↓": "Explore the event ↓", - "01 / 参赛命题": "01 / THE CHALLENGE", - "意图所至,": "Start with intent.", - "应用而生。": "Build a real app.", - "用一句话,生成一个能用的应用。": "Turn a single sentence into an app that works.", - "面向设计师、产品人、OPC(一人公司)、学生,以及懂 Rust 的开发者。围绕 OctoSense,从一个真实意图出发,完成一款能够演示的应用。": "For designers, product builders, solo founders, students and Rust developers. Start with a real intent and use OctoSense to build an app you can demonstrate.", - "可以独立参赛,也可以自由组队。赛前组队集市帮助你找到伙伴,赛中平台技术台提供能力接线支持。": "Enter solo or form a team. Find collaborators through pre-event team matching, and get help connecting capabilities at the platform support desk.", - "共同交付": "EVERY ENTRY DELIVERS", - "跑通的演示 + 进入仓库的 spec / 代码": "A working demo + a spec or code contributed to the repository", - "真机优先,桌面演示兜底。无论深入哪一层,最终都要回到「一句话 → 活的 App」。": "Prioritize a real-device demo, with desktop as a fallback. At every level, the goal remains the same: one sentence becomes a live app.", - "02 / 参赛阶梯": "02 / THREE STEPS", - "一个命题,三级深度": "One challenge. Three levels of depth.", - "阶梯是加分维度,不是资格线。把 STEP 1 做到极致,同样可以夺冠。": "The steps offer ways to earn points, not entry requirements. An outstanding STEP 1 project can win the Grand Prize.", - "意图层 / L0": "INTENT / L0", - "零编译 · 人人可做": "No compilation · Open to everyone", - "用现有能力,": "Existing capabilities.", - "造一个新 App。": "A brand-new app.", - "写一份需求式 app.md,配上 lint 规则与参考卡片。组合既有数据源和组件,设计旅行计划、买菜清单、健身打卡或播客速览。": "Write a requirements-based app.md with lint rules and reference cards. Combine existing data sources and components into a travel planner, shopping list, fitness tracker or podcast digest.", - "交付 / spec + lint + 参考卡片": "Deliver / spec + lint + reference cards", - "看重意图设计、信息设计与泛化能力": "Focus on intent, information design and generalization", - "能力层 / RUST": "CAPABILITIES / RUST", - "技术选做": "Optional technical work", - "没有的数据,": "Missing the data?", - "自己接进来。": "Connect it yourself.", - "为你的创意新增一个 sys.* helper:公共交通、汇率、日历或空气质量。完善契约、错误处理与限流,让新能力真正服务应用。": "Add a sys.* helper for your idea: transit, exchange rates, calendars or air quality. Define contracts, error handling and rate limits so the capability reliably serves your app.", - "交付 / 新数据能力 + 应用演示": "Deliver / a new data capability + app demo", - "扩展所有参赛者都能使用的能力菜单": "Expand the capability menu for everyone", - "突破层 / PLATFORM": "BREAKTHROUGHS / PLATFORM", - "深水区 · 技术选做": "Go deeper · Optional technical work", - "改语言、改渲染,": "Language, rendering,", - "也可以改内核。": "or even the kernel.", - "创建可视化组件,打通 L0 交互态,或认领悬赏榜中的工具链与协议题目。每一次平台突破,都要落在作品的体验上。": "Build visual components, enable L0 interaction states or take on toolchain and protocol bounties. Every platform advance should improve your project experience.", - "交付 / 平台贡献 + 应用演示": "Deliver / a platform contribution + app demo", - "技术突破必须服务于自己的作品": "Technical advances must support your own project", - "03 / 技术平台": "03 / THE PLATFORM", - "PERSONAL COMPUTING / 从意图到应用": "PERSONAL COMPUTING / FROM INTENT TO APP", - "04 / 奖项与评分": "04 / AWARDS & SCORING", - "意图设计与技术突破": "Intent design meets technical breakthroughs.", - "可以是纯 L0 的设计杰作,也可以是全栈突破。最终看作品的综合表现。": "A pure L0 design or a full-stack breakthrough can win. The overall quality of the work decides.", - "评选意图覆盖、信息设计与美感、no-facts 规则,以及 spec 的泛化能力。让不同问法都能得到正确的卡片。": "Recognizes intent coverage, information design, aesthetics, adherence to no-facts and a spec that generalizes across different ways of asking.", - "评选数据能力契约质量,以及组件、工具链、协议作品的深度与可合并性。": "Recognizes data capability contract quality, and the depth and merge readiness of components, toolchains and protocol work.", - "评分如何构成?": "How is the score calculated?", - "STEP 1 的极致设计同样可以拿满创意与完成度分。技术深度加分,不设技术资格门槛。": "An exceptional STEP 1 design can earn full creativity and completion points. Technical depth adds value, but is not an eligibility requirement.", - "项目反哺": "Project contributions", - "可合并 PR、入库应用与能力、合格缺口 issue、采纳规范;客观清单及分值赛前公示。": "Merge-ready PRs, accepted apps and capabilities, qualifying gap reports and adopted specifications. The checklist and point values will be published before the event.", - "创意与完成度": "Creativity & completion", - "意图到应用的想象力、实际跑通程度,以及服务作品的能力与平台突破。": "The imagination behind intent-to-app, how well it works, and the capability or platform advances that support it.", - "3 分钟真机 demo + 2 分钟讲清「我的作品让项目多了什么」。": "A 3-minute device demo, followed by 2 minutes explaining what your work adds to the project.", - "协作与文档": "Collaboration & documentation", - "让下一个人接得住的 README / spec。混合组队、使用他队能力或工具,双方加分。": "A README or spec that others can build on. Mixed teams and sharing capabilities or tools across teams earn points for both sides.", - "05 / 悬赏题目": "05 / BOUNTIES", - "工具链与平台贡献": "Build the tools. Extend the platform.", - "悬赏是 STEP 3 的选题,也可以是赛中的小贡献。以下为蓝图中的建议题目,难度、分值与认领入口将在赛前公布。": "Bounties can be STEP 3 projects or smaller contributions during the event. These are proposed topics from the blueprint; difficulty, scores and claiming details will be announced before the event.", - "缺口,也是贡献。": "Finding a gap is a contribution, too.", - "06 / 赛程与培训": "06 / SCHEDULE & TRAINING", - "赛前培训与比赛安排": "Get ready. Then build.", - "现场展示与 GOSIM Shenzhen 2026同期举办,具体赛程待公布。": "The live showcase is co-located with GOSIM Shenzhen 2026. Exact dates are to be announced.", - "必修两讲 + 选修两讲": "Two required sessions + two electives", - "非技术参赛者从使用既有 AppCard 生成应用开始;技术参赛者可继续深入 Rust、工具链与协议。讲义也将成为项目文档。": "Non-technical participants start by generating apps from existing AppCards. Technical participants can go deeper into Rust, toolchains and protocols. Training materials will also become project documentation.", - "07 / 常见问题": "07 / FAQ", - "参赛须知": "Before you join", - "08 / 参赛信息": "08 / PARTICIPATION", - "Agentic App 黑客松 2026": "Agentic App Hackathon 2026", - "先了解参赛阶梯 ↗": "Explore the three steps ↗", - "Agentic App 是独立赛事,与智能体工厂、巡天智能体并行。": "Agentic App is an independent event running alongside Agentic Factory and Agent Observer.", - "Agentic App 黑客松 · 2026": "Agentic App Hackathon · 2026", - "查看全部黑客松 ↗": "View all hackathons ↗", - "关闭": "Close", - "菜单": "Menu", - "GOSIM Create 首页": "GOSIM Create home", - "切换到白天模式": "Switch to day mode", - "切换到夜晚模式": "Switch to night mode", - "主导航": "Main navigation", - "暖色工作室中,两位创作者与机器人一起设计应用": "Two creators and a robot designing apps in a warm studio", - "深圳黑客松系列": "Shenzhen Hackathon Series", - "选择赛事 ↓": "Choose an event ↓", - "选择黑客松": "Choose a hackathon", - "智能体工厂国际黑客松与大奖赛": "Agentic Factory International Hackathon & Grand Challenge", - "巡天智能体": "Agent Observer", - "当前": "Current", - "现场展示 · GOSIM Shenzhen 2026 ↗": "Live showcase at GOSIM Shenzhen 2026 ↗", - "暂停背景动画": "Pause animation", - "播放背景动画": "Play animation", - "复古计算机、界面卡片与模块化内核,呈现从计算到应用的过程": "A retro computer, interface cards and a modular core illustrating the path from computation to an app", - "阳光穿过古典书房的石拱廊,创作者与机器人一起设计和测试应用": "Sunlight enters a classical library through stone arches as makers and a robot design and test apps", - "主视觉局部:创作者在复古电脑上输入,旁边的手机展示应用卡片": "Detail from the hero scene: a creator typing on a retro computer beside a phone displaying app cards", - "主视觉局部:创作者在绘图屏上绘制应用界面": "Detail from the hero scene: a creator sketching an app interface on a pen display", - "查看评分细则": "View scoring details", - "在 GitHub 上查看 OctoSense-org →": "View OctoSense-org on GitHub →", - "交互层 / AGENT SHELL": "Interaction layer / AGENT SHELL", - "语言层 / DSL": "Language layer / DSL", - "内核层 / HARNESS": "Kernel layer / HARNESS", - "跨平台的 Agent 交互 Shell,运行在 Windows、macOS、Linux、Android、iOS 与鸿蒙之上。既是你熟悉的应用入口与 launcher,也是意图驱动、主动感知的智能体:每个应用只是触点,背后是统一的记忆与持续进化的理解。": "A cross-platform agent shell that runs on Windows, macOS, Linux, Android, iOS and HarmonyOS. It is both the familiar launcher for your apps and a proactive, intent-driven agent: every app is a touchpoint, backed by one shared memory and an understanding that keeps evolving.", - "可嵌入的 Rust 原生 Agent harness 内核。多轮交互、上下文与记忆、模型 provider、多 agent 并发、工具与沙箱、用户审批流程,全部抽象为 OS UI protocol 提供给上层应用。": "An embeddable, Rust-native agent harness kernel. Multi-turn interaction, context and memory, model providers, concurrent agents, tools, sandboxing and user approval are all exposed to apps through the OS UI protocol.", - "OctoSense 是运行在操作系统之上的 Agent 交互 Shell。它看起来是你熟悉的 launcher 和应用,行为上却是一个理解你的意图、感知周围变化、并在你开口之前重组这些应用的智能体。": "OctoSense is an agent shell on top of your operating system. It looks like the launcher and the apps you already know, and it behaves like an agent that understands your intent, senses what is changing around you, and reshapes those apps before you ask.", - "今天的 Agent 界面都是聊天框:线性、单向、只有文本。OctoSense 走另一条路,保留人们已经熟悉的应用交互,把 Agent 植入应用,而不是把人拉进聊天框。": "Today's agent interfaces are chat windows: linear, one-way, text only. OctoSense takes the other road. It keeps the app interactions people already know and puts the agent inside the apps, instead of pulling people into a chat box.", - "熟悉的入口": "Familiar entry points", - "新闻、天气、行情、出行仍是稳定的起点,入口之下的内容围绕你的意图生成。": "News, weather, markets and travel stay stable places to start. Beneath each one, the content is generated around your intent.", - "主动,而非被动": "Proactive, not passive", - "由时间和事件驱动:降温、航班延误、日程变化,都会让应用重新组织、提前准备。": "Driven by time and events: a cold front, a delayed flight or a schedule change makes the apps reorganize and prepare ahead.", - "删繁就简": "Less, not more", - "把为十亿人打造的超级应用裁剪到你需要的部分,持续生成、持续进化。": "Super apps built for a billion people are trimmed to what you need, generated and evolved continuously.", - "人在回路": "Human in the loop", - "重要决定留给你。Agent 把一天提炼成几件需要确认的事,确认后一切随之更新。": "The important decisions stay with you. The agent distills the day into a few things to confirm, and everything updates once you do.", - "情绪价值": "Feeling as well as function", - "风格、配色、字体随人和时刻变化。像章鱼一样,它在感知,也在变色。": "Style, color and typography adapt to the person and the moment. Like an octopus, it senses and changes color.", - "你看到的每个应用都是触点。触点背后是同一个 Agent、同一份记忆,以及对你所处环境持续进化的理解。": "Every app you see is a touchpoint. Behind them all is one agent, one memory, and an understanding of your world that keeps evolving.", - "03 / 参赛阶梯": "03 / PARTICIPATION STEPS", - "04 / 意图应用平台": "04 / INTENT APP PLATFORM", - "05 / 奖项与评分": "05 / AWARDS & SCORING", - "06 / 悬赏题目": "06 / BOUNTIES", - "07 / 赛程与培训": "07 / SCHEDULE & TRAINING", - "08 / 常见问题": "08 / FAQ", - "09 / 参赛信息": "09 / PARTICIPATION", - "Agent 工作状态": "Agent activity", - "ROBRIX AGENT2APP / 软件工厂的应用入口": "ROBRIX AGENT2APP / APPS FOR THE SOFTWARE FACTORY", - "hagency 软件工厂小程序": "hagency software factory mini apps", - "hagency(原 hafleet)负责 Agent 编排与任务协作;robrix2 提供熟悉的聊天与工作空间界面。参赛作品为两者之间的具体工作环节增加小程序。": "hagency (formerly hafleet) handles agent orchestration and task collaboration. robrix2 provides a familiar chat and workspace interface. Build mini apps for specific workflows that connect the two.", - "一个明确的软件工厂使用场景,以及能在指定 robrix2 环境中运行的小程序。": "A specific software factory use case and a mini app that runs in the designated robrix2 environment.", - "一次完整的任务演示:读取状态、执行操作、核对结果,并展示一个失败或过期状态。": "A complete task demonstration: read state, take an action, verify the result, and show a failure or stale state.", - "为 hagency 软件工厂增加实用小程序,在 robrix2 中查看任务、理解 Agent 状态、检查结果并参与协作。": "Add useful mini apps to the hagency software factory: inspect tasks, understand agent activity, review results and collaborate within robrix2.", - "为工厂小程序补充一个受限数据能力、状态回放或权限测试,并接回实际参赛应用。": "Add a scoped data capability, state replay or permission test for factory mini apps, and use it in your competition app.", - "为日常意图,也为软件工厂。": "For everyday intent. For the software factory.", - "了解 hagency 项目 ↗": "Explore hagency ↗", - "交付 / 需求说明 + 应用 + 测试证据": "DELIVER / REQUIREMENTS + APP + TEST EVIDENCE", - "从一个日常需求出发,组合数据、卡片与交互,让意图变成可使用的应用。": "Start with an everyday need. Combine data, cards and interactions to turn intent into a usable app.", - "从既有能力开始": "Start with existing capabilities", - "任务与阻塞看板": "Tasks and blockers", - "任务进度 · Agent 状态 · 结果验收 · 团队协作": "TASK PROGRESS · AGENT ACTIVITY · RESULT REVIEW · TEAMWORK", - "创建可视化组件,完善生成与测试工具,或改进小程序的运行、权限与平台接口。每一次平台突破,都要落在作品的体验上。": "Create visual components, improve generation and testing tools, or extend mini app execution, permissions and platform interfaces. Every platform contribution must improve your app experience.", - "可复现的测试与截图。练习数据和真实服务接入分别标明;影响工厂运行的操作由宿主确认。": "Reproducible tests and screenshots. Label fixture data and live service integration separately; actions affecting factory operations require confirmation in the host.", - "可审查的源码或应用包、所需能力声明,以及 hagency 数据或事件的接入说明。": "Reviewable source or an app bundle, required capability declarations, and documentation for hagency data or event integration.", - "团队协作与交接": "Collaboration and handoffs", - "围绕任务进度、Agent 状态、结果验收或协作交接提交 robrix2 小程序,附 hagency 接入说明和完整任务演示。": "Submit a robrix2 mini app for task progress, agent activity, result review or handoffs, with hagency integration notes and a complete task demonstration.", - "围绕项目进展、任务交接或规则提醒设计小程序,减少在消息与工具之间反复查找。": "Build mini apps for project progress, handoffs or policy reminders, reducing repeated searches across messages and tools.", - "在 AppCard L0 路径中,模型写布局与数据绑定,事实由数据能力提供。软件工厂小程序同样不得编造任务进度或执行结果,应以 hagency 返回的数据为准。": "In AppCard L0, the model writes layouts and data bindings; data capabilities supply the facts. Factory mini apps must likewise use hagency data for task progress and execution results, without inventing them.", - "在 robrix2 界面中设计软件工厂应用,学习脚本运行、宿主能力与 hagency 数据接入,完成一个任务状态小程序。": "Design a software factory app within the robrix2 interface. Learn script execution, host capabilities and hagency data integration, then build a task-status mini app.", - "天气与出行 · 信息速览 · 个人工作流": "WEATHER & TRAVEL · AT-A-GLANCE INFORMATION · PERSONAL WORKFLOWS", - "小程序接入将复用 Robrix Agent2App 的脚本运行、宿主能力、权限和版本机制,界面遵循 robrix2 的设计体系。": "The integration will reuse Robrix Agent2App script execution, host capabilities, permissions and versioning, with an interface following the robrix2 design system.", - "小程序能力与契约测试": "Mini app capabilities and contract tests", - "应用层 / APP": "APP LAYER", - "把运行结果、测试证据和待确认事项整理成可检查的应用,帮助人完成验收。": "Bring execution results, test evidence and pending decisions into an app that helps people inspect and accept the work.", - "接入环境与参赛开发包准备中。支持的能力、运行包和接口版本将在赛前公布。": "The integration environment and starter kit are in preparation. Supported capabilities, runtime packages and interface versions will be announced before the competition.", - "查看参赛阶梯 →": "Explore the participation steps →", - "查看小程序选题 →": "Explore mini app ideas →", - "第 1 讲 A · Octoscript 速成": "Session 1A · Octoscript Essentials", - "第 1 讲 B · robrix2 + hagency 小程序": "Session 1B · robrix2 + hagency Mini Apps", - "结果与验收工作台": "Results and acceptance review", - "聚合任务、依赖和等待原因,定位需要处理的事项,并回到对应讨论。": "Bring together tasks, dependencies and reasons for waiting. Find what needs attention and return to the relevant discussion.", - "让团队用得上 Agent 的工作成果。": "Help teams put agent work to use.", - "让团队看懂谁在执行、谁在等待,以及当前任务的进展;清楚区分实时与过期状态。": "Show who is running, who is waiting and how tasks are progressing. Clearly distinguish current and stale state.", - "评选需求覆盖、信息设计、事实准确性与使用体验。无论卡片还是软件工厂小程序,都应帮助用户完成明确任务。": "Recognizes requirement coverage, information design, factual accuracy and usability. Cards and factory mini apps should help users complete a specific task.", - "软件工厂应用的任务验收": "Verifying Software Factory Apps", - "面向设计师、产品人、OPC(一人公司)、学生,以及开发者。选择 OctoSense + AppCard 或 robrix2 + hagency,从真实需求出发,完成一款能够演示的应用。": "For designers, product thinkers, solo founders, students and developers. Choose OctoSense + AppCard or robrix2 + hagency, start with a real need and deliver an app you can demonstrate.", - "验证任务变化、结果来源、权限拒绝与过期状态;区分练习数据和真实接入,留下可复现的操作证据。": "Verify task changes, result sources, permission denial and stale state. Distinguish fixture data from live integration and capture reproducible interaction evidence.", - "使用赛前公布支持的设备与运行环境。无论深入哪一层,最终都要回到「一句话 → 活的 App」。": "Use the devices and runtime environments announced before the competition. At every depth, return to the goal: one sentence becomes a working app.", - "了解 Octoscript 工具链、Octos 协议与 hagency 小程序能力扩展,逐题明确交付物和验收标准。": "Explore Octoscript tools, the Octos protocol and hagency mini app capability extensions, with clear deliverables and acceptance criteria for each bounty.", - "报名参赛 ↗": "Register ↗", - "从哪里报名?奖金是多少?": "Where can I register, and what are the prizes?", - "扫码报名,或直接打开报名表。": "Scan to register, or open the form directly.", - "Agentic App 黑客松报名动态二维码": "Animated QR code for Agentic App Hackathon registration", - "填写报名表 ↗": "Open registration form ↗", - "报名地址": "Registration URL", - "OctoSense 探索聊天之外的 Agent 交互:保留人们熟悉的应用入口,让数据、卡片与操作围绕意图组织。": "OctoSense explores agent interactions beyond chat: familiar app entry points, with data, cards and actions organized around intent.", - "OctoSense 的方向是运行在操作系统之上的 Agent 交互 Shell:从熟悉的 launcher 和应用入口出发,探索意图理解、环境感知与应用重组。": "OctoSense aims to be an agent interaction shell above the operating system, starting with familiar launcher and app entry points to explore intent understanding, context awareness and app composition.", - "探索由时间和事件触发的应用变化,例如降温、航班延误和日程调整。": "Explore app changes triggered by time and events, such as colder weather, flight delays and schedule updates.", - "围绕具体需求组合界面与数据,减少使用应用时无关的信息和步骤。": "Compose interfaces and data around a specific need, reducing irrelevant information and steps.", - "重要决定留给用户。应用应呈现需要确认的事项,并清楚反馈操作结果。": "Keep important decisions with the user. Apps should present what needs confirmation and clearly show the result of an action.", - "探索适合场景的风格、配色与字体,让动态应用保持可读、易用。": "Explore styles, colors and typography suited to the context, while keeping dynamic apps readable and usable.", - "这些是平台探索的方向。参赛时可用的能力、设备与集成范围,以赛前发布包和验证说明为准。": "These are directions the platform is exploring. Available capabilities, devices and integrations will be specified in the pre-event runtime release and verification notes.", - "以跨平台为目标的 Agent 交互 Shell,提供应用入口与 launcher,并探索意图驱动的卡片和应用交互。实际支持的系统、数据能力和集成范围以发布包为准。": "An agent interaction shell with cross-platform ambitions, providing app and launcher entry points while exploring intent-driven cards and interactions. Supported systems, data capabilities and integrations depend on the released runtime.", - "实机预览": "App previews", - "查看实机 ↓": "See the apps ↓", - "IN ACTION / 实机预览": "IN ACTION / APP PREVIEWS", - "先看见应用,再开始创造。": "See the apps. Then build yours.", - "从天气卡片、多应用桌面,到小程序的权限与版本管理。以下画面来自本轮 macOS 实机测试,点击图片可查看原图。": "From weather cards and multi-app desktops to mini app permissions and versioning. These captures come from our macOS test session. Select an image to open the original.", - "参考卡片 · 实机运行": "REFERENCE CARD · RUNNING ON DESKTOP", - "查看原图": "Open original image", - "AppCard 的 Kyoto 天气参考卡片,展示天气、预报和卫星图区域": "AppCard Kyoto weather reference card showing current weather, forecast and satellite sections", - "把天气组织成一张卡片。": "Weather, composed as a card.", - "AppCard 运行时渲染的 Kyoto 天气参考卡片,展示天气、预报和卫星图区域。": "A Kyoto weather reference card rendered by AppCard, with current weather, forecast and satellite sections.", - "从预置参考卡片启动,部分数据随后在线刷新;城市背景为生成配图。本图展示渲染效果,不代表现场生成或空气质量已通过验证。": "Loaded from a prebuilt reference card, with some data refreshed online. The city backdrop is a generated illustration. This capture demonstrates rendering; live generation and air-quality usability were not verified.", - "OctoSense 截图主题": "OctoSense screenshot theme", - "浅色截图": "Light view", - "深色截图": "Dark view", - "OctoSense 浅色桌面中并排打开 Clock 与 Weather 浮动窗口": "Clock and Weather floating side by side in the light OctoSense desktop", - "OctoSense 深色桌面中运行同一组 Clock 与 Weather 应用": "The same Clock and Weather apps running in the dark OctoSense desktop", - "一个桌面,承载多个应用。": "One desktop. Multiple apps.", - "Clock 与 Weather 在 OctoSense 中以浮动窗口运行,共用桌面的明暗主题。": "Clock and Weather run in floating windows in OctoSense and share the desktop’s light and dark themes.", - "通过应用目录启动的预编译样例,记录于 macOS;展示宿主与窗口能力,尚非 AppCard 与 OctoSense 已接通的完整演示。": "Prebuilt samples launched through the app catalog on macOS. These show host and window behavior; they are not an end-to-end AppCard and OctoSense integration demo.", - "从运行小程序,到管理它的变化。": "Run mini apps. Review how they change.", - "找到并打开小程序": "Find and open a mini app", - "从宿主中的小程序列表出发,进入创建、运行与管理流程。": "Start from the host’s mini app list to create, run and manage apps.", - "Robrix Agent2App 测试版的小程序列表与创建入口": "Mini app list and creation entry in the Robrix Agent2App test build", - "能力请求,交给用户决定": "Let users decide on access", - "Account 小程序请求设备与账户相关能力,宿主提供拒绝、单次允许与允许选项。": "The Account mini app requests device and account capabilities. The host offers denial, one-time access and ongoing access.", - "Account 小程序的权限弹窗,包含拒绝、单次允许和允许按钮": "Account mini app permission prompt with deny, allow-once and allow buttons", - "修改留下版本记录": "Keep a history of changes", - "离线 ACP 测试代理完成修改后,应用保留历史版本,提供查看与回退入口。": "After a refinement from the offline ACP test agent, the app retains its history with review and rollback controls.", - "Pomodoro 测试小程序的版本历史,显示两次版本记录": "Version history showing two revisions of the Pomodoro test mini app", - "看清每一次源码变化": "Inspect each source change", - "通过源码差异检查修改内容;这里展示的是确定性测试输出。": "Review edits through a source diff. This example uses deterministic test output.", - "Pomodoro 测试小程序的源码差异,标记新增和移除内容": "Source diff for the Pomodoro test mini app, marking added and removed content", - "OctoSense 的 Omarchy 风格桌面,Clock 与 Weather 并排平铺并显示焦点边框": "OctoSense Omarchy-style desktop with Clock and Weather tiled side by side and a focused-window border", - "平铺窗口,专注当前任务。": "Tiled windows. Focus on the task.", - "两个应用在 Omarchy 风格下并排平铺,保留顶栏、焦点边框与各自内容。": "Two apps tile side by side in the Omarchy style, retaining the top bar, focus border and each app’s content.", - "macOS 实机记录:同一个 OctoSense 测试实例从浮动桌面切换为 Omarchy,Clock 与 Weather 继续运行。": "Captured on macOS: the same OctoSense test instance switches from floating windows to Omarchy while Clock and Weather keep running.", - "9 月 13 日开放报名与组队。可以单人参赛,也可以多人组队;队长和每位队员均须分别报名。": "Registration and team formation open September 13. Enter solo or as a team; the captain and every team member must register individually.", - "单人可参赛;多人队伍的队长、队员均须分别填写。": "Solo entries welcome. Team captains and all members must each complete the form.", - "报名与组队": "Registration & team formation", - "单人或多人均可参赛。队长和每位队员分别报名,可边组队边开始初赛。": "Enter solo or as a team. Captains and every member register individually; start your preliminary project while forming a team.", - "提交明确场景、可运行原型、源码与说明、短视频和截图;随作品提交已报名成员名单。": "Submit a clear use case, working prototype, source and instructions, short video and screenshots, plus your roster of registered members.", - "初赛评审 · 2 天": "Preliminary review · 2 days", - "10 月 17 日(周六)· 具体时段另行通知": "Saturday, October 17 · Session time to be announced", - "赛后采纳与归档": "Post-event adoption & archive", - "AppCard + OctoSense 入门": "Getting started with AppCard + OctoSense", - "从意图到脚本、校验、渲染与事件;完成一张有数据来源、正常与失败状态的卡片。": "Go from intent to script, validation, rendering and events. Build a card with sourced data and both success and failure states.", - "robrix2 + hagency 小程序机制": "robrix2 + hagency mini app mechanisms", - "学习脚本容器、能力、权限与版本,按 robrix2 UI 设计任务状态原型;实操以公布的环境为准。": "Learn script containers, capabilities, permissions and versions. Design a task-state prototype using robrix2 UI conventions; practical work uses the announced environment.", - "共同实践": "Shared workshop", - "可用性与初赛提交": "Usability & preliminary submission", - "让队外用户完成一次任务,修正信息缺失和无反馈操作,整理原型、短视频与复现说明。": "Ask someone outside the team to complete a task. Fix missing information and actions without feedback, then prepare the prototype, short video and reproduction steps.", - "Rust 能力、组件与悬赏": "Rust capabilities, components & bounties", - "认领贡献题,定义输入、权限、错误与版本;将最小能力或工具改进接回自己的应用。": "Claim a contribution, define inputs, permissions, errors and versions, and connect a small capability or tooling improvement to your app.", - "可选门诊": "Optional clinic", - "初赛提交检查": "Preliminary submission clinic", - "分离生成、校验、渲染和评审,保留失败与重试;核对天气、空气质量等事实字段。": "Separate generation, validation, rendering and evaluation. Keep failure and retry records, and verify facts such as weather and air quality.", - "验证任务变化、权限拒绝、过期与结果来源;区分练习数据和真实 hagency 接入,留下可复现证据。": "Verify task changes, permission denials, stale state and result provenance. Distinguish practice data from live hagency integration and retain reproducible evidence.", - "开发答疑": "Development office hours", - "演示与答辩": "Demo & questions", - "2026 年 · 全部时间为北京时间 UTC+8": "2026 · All times are Beijing time (UTC+8)", - "比赛进程": "Competition timeline", - "跟着作品进度学": "Learn as your app develops", - "查看报名说明 →": "See registration details →", - "9/13 09:00 开放 · 9/23 23:59 截止": "Opens Sep 13, 09:00 · Closes Sep 23, 23:59", - "复赛反馈与开发计划": "Award round feedback & development plan", - "10.17 前三名现场展示与颁奖 · GOSIM Shenzhen 2026 ↗": "Oct 17 top-three showcase & awards ceremony · GOSIM Shenzhen 2026 ↗", - "GOSIM 黑客松现场展示与颁奖": "Showcase & awards ceremony at the GOSIM Hackathon", - "10/18–10/31 贡献合入窗口": "Contribution merge window: Oct 18–31", - "面向全部复赛队伍提前开放,练习线上屏幕共享、3 分钟操作与 2 分钟贡献说明,准备问答和备用视频;不修改冻结作品。": "Open to all award-round participants in advance. Practice screen sharing, a 3-minute app demo and 2 minutes on contributions; prepare answers and a backup video without changing the frozen app.", - "受邀确认与展示准备 · 5 天": "Invitation confirmation & showcase preparation · 5 days", - "按队预约检查音视频、屏幕共享与备用视频;沿用冻结版本,不增加功能开发任务。": "Check audio, video, screen sharing and backup video in booked slots. Use the frozen app; no new development is required.", - "受邀优胜团队": "Invited winners", - "必须到 GOSIM 现场才能获奖吗?": "Do I need to attend GOSIM to win?", - "03 / 三级深度": "03 / THREE DEPTHS", - "Rust 跨平台 UI 框架,一套代码运行在桌面、Android 与 Web(WebAssembly)。Agent 可以直接读取完整的 UI 树与每个节点的状态,不必靠截屏去“看”界面。": "A cross-platform Rust UI framework: one codebase for desktop, Android and the web (WebAssembly). Agents can read the full UI tree and every node’s state directly, instead of “looking” at screenshots.", - "一句话生成一个应用,今天只要模型不太差就能跑通,这不再是比拼的重点。本届命题是畅想 Agent 化的应用:应用由 Agent 生成,是 Agent 行动的手,也是它与你沟通、交互的方式。": "Turning one sentence into an app already works with any decent model, so that is no longer the contest. This year’s challenge is to imagine agent-native apps: apps generated by the agent, which become its hands and the way it communicates and works with you.", - "一条纯 Rust 的开源 Agentic 技术栈上,意图所至,应用而生。": "On an open, pure-Rust agentic stack, intent becomes a working app.", - "三级深度": "Three Depths", - "什么是 Agent 化的应用?": "What is an agent-native app?", - "体验空调服务示例 ↗": "Try the air-conditioner example ↗", - "作品必须开源吗?用什么许可证?": "Must my project be open source? Which license?", - "只提交创意、设计稿或视频可以吗?": "Can I submit just an idea, a mock-up or a video?", - "可以是鹦鹉螺的设计杰作,也可以是大章鱼的系统级突破。最终看作品的综合表现。": "It could be a Nautilus design masterpiece or a Giant Octopus system-level breakthrough. The overall result decides.", - "基于 LineageOS 的 OnePlus 6 ROM,内置 OctoSense launcher 与系统桥,让 Agent 进入系统层。": "A LineageOS-based ROM for the OnePlus 6 with the OctoSense launcher and system bridge built in, bringing the agent to the system level.", - "大章鱼 / GIANT OCTOPUS": "GIANT OCTOPUS", - "帝王蟹 / RUSTACEAN": "KING CRAB · RUSTACEAN", - "应用层 · 设计师与 vibe coder": "App layer · Designers & vibe coders", - "意图不一定来自你对 Agent 说的话。它可能藏在一封邮件、一条消息、一个时间点或一次状态变化里。比如买了一台空调:物流、预约安装、上门、付款、售后,Agent 读完邮件,把每一步整理成等你确认的卡片。": "Intent doesn’t have to come from what you tell an agent. It may be in an email, a message, a moment in time or a change of state. Say you buy an air conditioner: delivery, booking the install, the visit, payment and after-sales. The agent reads the emails and turns each step into a card waiting for your confirmation.", - "界面层 / UI": "UI / FRAMEWORK", - "系统层 / ROM": "SYSTEM / ROM", - "跑通的演示 + 以 Apache 2.0 开源的代码": "A working demo + code open-sourced under Apache 2.0", - "鹦鹉螺 / NAUTILUS": "NAUTILUS", - "不可以。创意必须通过可运行的开源代码实现。设计图可以交给 AI 生成,再转成原生界面与卡片;服务规则与交互逻辑需要你自己设计。": "No. Ideas must be delivered as working open-source code. AI can generate the design, which can then become native screens and cards; you design the service rules and interaction yourself.", - "也可以挑一个 OctoSense 系统应用把它 Agent 化:邮件、即时消息、日历、新闻、音乐、视频、财经、导航、购物、写作或系统设置。": "Or pick an OctoSense system app and make it agent-native: mail, messages, calendar, news, music, video, markets, navigation, shopping, writing or system settings.", - "从内核、语言、UI 框架到 Shell,整条 Agentic 技术栈都用 Rust 写成,并以 Apache 2.0 开源。在手机上,Android 底座之上全部是 Rust。": "From the kernel and language to the UI framework and shell, the whole agentic stack is written in Rust and open source under Apache 2.0. On the phone, everything above the Android base is Rust.", - "必须。作品代码以 Apache License 2.0 在公开仓库提交,各轮评审均以仓库为准。平台各项目同样采用 Apache 2.0。优秀创意将进入 OctoSense-org 主仓库的合并流程。": "Yes. Submit your code in a public repository under the Apache License 2.0; every round is judged from the repository. The platform projects use Apache 2.0 as well. The best ideas will go through merging into OctoSense-org’s main repositories.", - "悬赏是大章鱼层的选题,也可以是赛中的小贡献。以下为蓝图中的建议题目,难度、分值与认领入口将在赛前公布。": "Bounties can be projects at the Giant Octopus depth, or smaller contributions during the event. These are proposed topics from the blueprint; difficulty, scores and claiming details will be announced before the event.", - "意图到应用的想象力与 Agent 化程度、实际跑通程度,以及服务作品的能力与平台突破。": "The imagination and agent-nativeness of intent-to-app, how well it works, and the capability or platform advances that support it.", - "查看应用手册 ↗": "App manuals ↗", - "潜得越深,离内核越近。深度是加分维度,不是资格线:鹦鹉螺做到极致,同样可以夺冠。": "The deeper you dive, the closer to the kernel. Depth earns bonus points; it is not an entry requirement, and an outstanding Nautilus project can still win.", - "能力层 · 用 Rust 扩展": "Capability layer · Extend with Rust", - "鹦鹉螺的极致设计同样可以拿满创意与完成度分。技术深度加分,不设技术资格门槛。": "An outstanding Nautilus design can still earn full marks for creativity and completeness. Technical depth earns bonus points, with no technical entry bar.", - "意图藏在邮件和消息里,应用随之而来。": "The intent is in your mail and messages. The app follows.", - "octosense.org 上的可交互体验 · Makepad 原生卡片编译为 WebAssembly · 示例数据": "Interactive experiences on octosense.org · Native Makepad cards compiled to WebAssembly · Sample data", - "从下单,到安心享受": "From a new purchase to a comfortable home", - "学校的新安排,已在你的日历里": "A school email, already part of your day", - "为自己,留一点时间": "Make room for a little care", - "好久不见,把相聚排进日历": "Old friends, a new date in your calendar", - "购物应用里下单,物流、安装、日历与付款依次变成可以确认的卡片。": "Order in a shopping app; delivery, installation, calendar and payment each become a card you can confirm.", - "学校来信变成日程与缴费卡片,授权过的发件人可以直接更新日历。": "A school email becomes schedule and fee cards, and an authorized sender can update the calendar directly.", - "年度体检邀请变成预约、准备与提醒,一步步等你确认。": "An annual checkup invitation becomes booking, preparation and reminders, each waiting for your confirmation.", - "群聊里的聚会约定,整理成时间、地点与回复卡片。": "A reunion agreed in a group chat becomes time, place and reply cards.", - "亲手体验": "Try it", - "亲手体验 ↗": "Try it ↗", - "从天气卡片、多应用桌面、可交互的服务卡片,到小程序的权限与版本管理。桌面与小程序画面来自本轮 macOS 实机测试,服务卡片截自 octosense.org,点击即可亲手体验。": "From weather cards and a multi-app desktop to interactive service cards and mini-app permissions and versions. Desktop and mini-app images come from this round of macOS testing; the service cards are captured from octosense.org, and you can click through to try them.", - "获奖奖池 ¥50,000": "¥50,000 Prize Pool", - "以下金额均为人民币,每个获奖团队的综合奖励包含现金与 Token 额度。": "All amounts are in RMB. Each winning team receives a combined award of cash and token credits.", - "1 个获奖名额": "1 winning team", - "2 个获奖名额": "2 winning teams", - "3 个获奖名额": "3 winning teams", - "一等奖": "First Prize", - "二等奖": "Second Prize", - "三等奖": "Third Prize", - "/ 名": "/ team", - "现金奖金 + MiniMax Token 额度": "Cash prize + MiniMax token credits", - "赛事资源支持": "DEVELOPER SUPPORT", - "初赛海选 · 需求与最小原型": "Open qualifying round · Need & minimum prototype", - "独立评阅、运行核验与交叉复核,海选出 50 人晋级复赛。": "Independent reviews, runtime checks and cross-review select 50 participants to advance to the award round.", - "复赛 · 50 人完善作品": "Award round · 50 participants refine their apps", - "晋级的 50 人完善真实任务、数据与操作反馈,补齐失败状态、用户试用、测试证据及项目贡献,参与一、二、三等奖评选。": "The 50 advancing participants complete real tasks, data and action feedback, failure states, user trials, test evidence and project contributions to compete for First, Second and Third Prizes.", - "复赛材料评审 · 2 天": "Award round submission review · 2 days", - "复赛答辩与评奖": "Award round presentations & prizes", - "13:00–17:00 分组答辩 · 20:00 公布一、二、三等奖": "Grouped presentations: 13:00–17:00 · First, Second & Third Prizes announced: 20:00", - "50 名复赛选手按项目分组答辩:3 分钟应用演示 + 2 分钟项目贡献,另留问答与切换时间。统一复核后评出一、二、三等奖,邀请前三名优胜团队。": "The 50 award-round participants present by project in scheduled groups: a 3-minute app demo and 2 minutes on contributions, plus questions and handover. Joint score verification determines First, Second and Third Prizes and invitations for the top three teams.", - "总排名前三名将到 GOSIM 黑客松现场展示作品并参加颁奖。获奖结果在复赛结束时确定,现场展示及到场情况不影响排名。": "The top three teams overall will showcase their projects and attend the awards ceremony at the GOSIM Hackathon. Prizes are decided at the end of the award round; attendance and the showcase do not affect rankings.", - "完善 PR、应用和规范,跟进项目采纳并归档优秀作品;不改变复赛评奖结果。": "Polish PRs, apps and specifications, follow up on project adoption and archive selected work. Award-round results remain unchanged.", - "复赛队伍 · 分队预约": "Award-round teams · Booked team slots", - "复赛答辩连线检查": "Award round connection check", - "晋级与评奖规则": "Advancement & awards", - "1. 初赛海选:50 人晋级复赛。": "1. Open qualifying round: 50 participants advance to the award round.", - "2. 复赛评奖:50 人参与复赛,统一评选一等奖 1 名、二等奖 2 名、三等奖 3 名。": "2. Award round: the 50 participants compete for one First Prize, two Second Prizes and three Third Prizes in a shared ranking.", - "不需要。比赛在复赛结束时确定一、二、三等奖;总排名前三名将到 GOSIM 黑客松现场展示作品并参加颁奖,到场情况不影响名次与获奖资格。": "No. First, Second and Third Prizes are decided at the end of the award round. The top three teams overall will showcase their projects and attend the awards ceremony at the GOSIM Hackathon; attendance does not affect rankings or award eligibility.", - "复赛线上答辩:3 分钟应用 demo + 2 分钟项目贡献,并预留评委问答。": "Award round online presentation: a 3-minute app demo and 2 minutes on project contributions, plus judges’ questions.", - "总排名前三名将于 10 月 17 日到 GOSIM 黑客松现场展示作品并参加颁奖。": "The top three teams overall will showcase their projects and attend the awards ceremony at the GOSIM Hackathon on October 17.", - "01 / 应用自动化": "01 / APP AUTOMATION", - "02 / 在应用基础上进阶": "02 / BUILDING ON YOUR APP", - "02 / 场景选题": "02 / APPLICATION SCENARIOS", - "03 / 实现路径": "03 / IMPLEMENTATION PATHS", - "50 名复赛选手按项目分组答辩:3 分钟应用演示 + 2 分钟自动化与可选技术贡献说明,另留问答与切换时间。统一复核评奖,邀请前三名优胜团队。": "The 50 award-round participants present in project groups: a 3-minute app demo and 2 minutes on automation and optional technical contributions, plus Q&A and transitions. Results are reviewed together, and the top three teams are invited to GOSIM.", - "Agentic 可用性与初赛提交": "Agentic usability and preliminary submission", - "OctoSense 场景 · Agentic 应用 · 技术突破": "OctoSense scenarios · Agentic apps · Technical breakthroughs", - "ROM 突破:系统事件、权限、系统桥或跨应用协作推动任务自动化。": "ROM breakthroughs: use system events, permissions, system bridges, or cross-app collaboration to advance task automation.", - "hagency 服务于软件协作选题,其他场景不要求接入软件工厂。": "hagency supports software-collaboration projects; other scenarios do not require a software-factory integration.", - "中文": "Chinese", - "为能力、组件、协议或 ROM 突破准备补丁与测试,验证权限拒绝、状态过期和任务结果,说明技术对应用的改善。": "Prepare patches and tests for capabilities, components, protocols, or ROM improvements. Verify denied permissions, stale state, and task results, and show how the changes improve the app.", - "为自己的场景补充数据或操作能力,接入邮件、日历、消息或设备状态。软件协作可接入 hagency;完善来源、权限、错误处理与可复用接口。": "Add data or actions for your scenario: mail, calendars, messages, or device state. Software-collaboration projects may connect to hagency. Make sources, permissions, error handling, and reusable interfaces clear.", - "为自己的应用定义一项技术扩展,明确输入、权限、错误与结果断言,准备可复现的前后对照。": "Define one technical extension for your app. Specify inputs, permissions, errors, and result assertions, and prepare a reproducible before-and-after comparison.", - "人机协作:来源可查、授权清楚、操作有反馈,用户能够调整与接管。": "Human control: traceable sources, clear consent, and action feedback let users adjust the plan or take over.", - "仍需完成自己的 Agentic 应用。最佳技术突破奖在应用自动化的基础上评价项目反哺与 OctoSense ROM 突破;不以修改底层、刷机成功或 PR 数量直接判定。": "You still need a working Agentic app. The Best Technical Breakthrough Award evaluates ecosystem contributions and OctoSense ROM improvements on that foundation; low-level changes, successful flashing, or PR counts do not determine the result alone.", - "从来信中识别安排与变化,提出日程更新和回复草稿,确认后执行。": "Identify plans and changes in incoming mail, propose calendar updates and reply drafts, then act after confirmation.", - "从熟悉的应用,走向 Agent 自动化。": "From familiar apps to Agent automation.", - "从设备状态发现维护需求,说明操作范围,授权后执行并核验结果。": "Find maintenance needs in device state, explain the scope, then execute with permission and verify the result.", - "从邮件事件到提案卡、确认与状态更新,完成有来源、正常与失败状态的应用;实操以发布能力和练习数据为准。": "Build a flow from a mail event to a proposal card, confirmation, and updated state, with sources and success and failure states. Exercises use released capabilities and practice data.", - "任务完成:从真实输入到执行与结果核验,而不止生成界面或摘要。": "Task completion: go from real inputs to execution and verified results, beyond generating a UI or summary.", - "先完成可运行、可验证的 Agentic 应用,再看项目反哺与 OctoSense ROM 突破。技术进步必须改善自己的应用,并能被其他开发者复用或验证。": "First deliver a runnable, verifiable Agentic app, then demonstrate ecosystem contributions or OctoSense ROM breakthroughs. Technical improvements must benefit your app and be reusable or verifiable by other developers.", - "先把 Agentic 应用做好,再扩展能力和系统。应用层作品同样可以获得最佳 Agentic 奖,技术进阶必须服务于实际任务。": "Build a working Agentic app first, then extend its capabilities and system integration. App-level entries can win Best Agentic; deeper technical work must serve a real task.", - "先看 Agentic,再看技术突破。": "Agentic first. Technical breakthroughs build on it.", - "写作与创作": "Writing and creation", - "分离生成、校验、执行和结果核验,保留失败与重试;核对天气、空气质量等事实字段,验证任务是否完成。": "Separate generation, validation, execution, and result verification; retain failures and retries. Check factual fields such as weather and air quality, and verify whether the task finished.", - "切换到中文": "Switch to Chinese", - "即时消息 · robrix2": "Messaging · robrix2", - "发现可复现的语言、协议或文档缺口,可以提交 issue 与复现证据。技术贡献参评时核验质量和应用效果,不按认领数量或 PR 数量直接加分。": "Report reproducible gaps in the language, protocols, or documentation with an issue and supporting evidence. Technical contributions are judged on quality and app impact, with no automatic points for claims or PR counts.", - "发现时间冲突,提出替代安排,区分待确认与已落实的日程。": "Detect scheduling conflicts, propose alternatives, and distinguish pending plans from confirmed events.", - "可以。从一个具体场景出发,使用已发布的环境、数据能力和参考卡片,设计 Agent 能完成的任务。需要新增能力时可以组队协作;应用层作品同样可以争取最佳 Agentic 奖。": "Yes. Start with one concrete scenario and use released environments, data capabilities, and reference cards to design a task an Agent can complete. Team up when you need new capabilities. App-level entries can also compete for Best Agentic.", - "可靠运行:展示状态变化、失败恢复与重复测试,说明仍需人工处理的步骤。": "Reliability: show state changes, failure recovery, and repeated runs, and identify steps that still need a person.", - "含现金奖金与 MiniMax Token 额度。所有场景统一参评,已公布的综合奖励共 6 个名额。": "Includes cash and MiniMax Token credits. All scenarios are judged together, with six previously announced prize places.", - "围绕一个场景,逐步深入。": "Choose a scenario. Build deeper as needed.", - "围绕专注、通勤等情境组织播放任务,让选择、操作与播放状态相连。": "Organize playback around situations such as focus or commuting, connecting selections and actions to actual playback state.", - "围绕关注主题准备简报,保留来源与时间,让用户决定何时阅读或收听。": "Prepare briefings on topics the user follows, retain sources and timestamps, and let them choose when to read or listen.", - "围绕自己的应用选择生态或系统贡献,争取最佳技术突破奖。下列为建议题目;普通应用不强制认领悬赏,贡献需说明对实际任务的改善。": "Choose an ecosystem or system contribution that serves your app and competes for Best Technical Breakthrough. These are suggested topics; standard app entries do not have to claim a bounty. Show how your contribution improves a real task.", - "在 AppCard L0 路径中,模型写布局与数据绑定,事实由数据能力提供。邮件、消息、天气和工厂任务都要注明来源,不得编造状态、操作成功或执行结果。": "In the AppCard L0 path, the model writes layouts and data bindings while data capabilities supply facts. Mail, messages, weather, and factory tasks must identify their sources. Never invent state, successful actions, or execution results.", - "在 robrix2 中关联原消息、整理安排与待办,设计授权操作和结果回写;软件协作可接入 hagency,实操以公布环境为准。": "In robrix2, link to original messages, organize plans and tasks, and design authorized actions and result updates. Software-collaboration projects may connect to hagency; exercises use the announced environment.", - "场景实践": "Scenario workshop", - "场景选题": "Application scenarios", - "天气": "Weather", - "完成基础应用即可参与技术进阶评审,无需先获得最佳 Agentic 奖;单纯刷机或累计 PR 数量不直接构成突破。": "A working base app can enter the advanced technical evaluation without first winning Best Agentic. Flashing a ROM or accumulating PRs alone does not establish a breakthrough.", - "实现路径": "Implementation paths", - "导航": "Navigation", - "将素材与目标变成可迭代的创作任务,支持修改约束、比较版本与确认。": "Turn materials and goals into an iterative creative task with adjustable constraints, version comparisons, and confirmation.", - "展示 Agent 如何读取状态、提出行动并执行;重要操作让用户查看和授权。": "Show how the Agent reads state, proposes actions, and executes them; let users review and authorize important actions.", - "平台与系统层 · 技术突破": "Platform and system · Technical breakthroughs", - "应用层作品可以直接争取此奖,不要求修改 ROM 或认领悬赏。": "App-level entries can compete directly; ROM changes and bounty claims are not required.", - "意图,即应用 · The Intent Is the App": "The Intent Is the App", - "把公告与行情变化整理成研究卡,清楚区分事实、来源与分析。": "Turn announcements and market changes into research cards, clearly separating facts, sources, and analysis.", - "把订单、物流、安装与售后连成同一项任务,持续更新需要处理的事项。": "Connect orders, delivery, installation, and after-sales service into one task, keeping pending actions up to date.", - "提交可复现的测试和截图,区分练习数据、概念展示与真实服务接入。": "Submit reproducible tests and screenshots, distinguishing practice data, concept demos, and real service integrations.", - "改进组件、协议、生成与测试工具,或在 OctoSense ROM 上打通系统事件、权限和跨应用任务。提供可复现的前后对照,说明突破如何改善自己的应用。": "Improve components, protocols, generation, or testing tools, or connect system events, permissions, and cross-app tasks in OctoSense ROM. Provide a reproducible before-and-after comparison showing how the change improves your app.", - "效果证据:提供版本、补丁、复现步骤与前后对照,同一成果不重复计分。": "Evidence of impact: provide versions, patches, reproduction steps, and before-and-after comparisons. Do not count the same contribution twice.", - "新闻": "News", - "日历": "Calendar", - "晋级的 50 人完善 Agent 自动化、数据与操作反馈,补齐失败状态、用户试用和复现证据;争取技术突破的作品补充贡献与对照材料。": "The 50 advancing participants improve Agent automation, data and action feedback, failure states, user testing, and reproducibility. Entries seeking a technical breakthrough also provide contribution evidence and comparisons.", - "最佳 Agentic 奖": "Best Agentic Award", - "最佳技术突破奖": "Best Technical Breakthrough Award", - "查看 OctoSense 应用指南 ↗": "Explore the OctoSense app guide ↗", - "查看 robrix2 专题 ↓": "Explore messaging with robrix2 ↓", - "核验操作结果,展示后续状态更新,以及失败、拒绝或过期时的处理。": "Verify action results and show subsequent state changes, including how failures, denied permissions, and expired state are handled.", - "根据问题与可用时间整理观看清单,支持开始观看、调整与继续。": "Build a watchlist around a question and the available time, with controls to start, adjust, and resume viewing.", - "每个场景,都要完成一项任务。": "Every scenario should complete a task.", - "系统与设备": "System and devices", - "结合天气、空气质量与活动计划,提出有来源、可确认的出行建议。": "Combine weather, air quality, and activity plans into travel suggestions with sources and user confirmation.", - "结合日程、地点与路况提出出发计划,确认后导航,并跟进变化。": "Use schedules, locations, and traffic to propose a departure plan, navigate after confirmation, and follow changes.", - "视频": "Video", - "让 Agent 完成任务,应用为人保留控制。": "Let Agents complete tasks while users stay in control.", - "谁的应用最面向 Agent 自动化,谁就更接近最佳。看 Agent 能否理解状态、完成多步操作、跟进变化,并把可靠结果交给用户。": "The strongest app enables the most effective Agent automation. Show whether the Agent understands state, completes multiple steps, follows changes, and delivers reliable results to the user.", - "财经": "Markets", - "购物与物流": "Shopping and logistics", - "这些是选题建议。官方指南包含概念体验与示例数据;参赛可用能力和运行环境以发布包及验证说明为准。": "These are suggested project topics. The official guide includes concept experiences and sample data; competition capabilities and environments depend on released packages and verification notes.", - "邮件": "Mail", - "阅读场景指南": "Read the scenario guide", - "音乐": "Music", - "项目反哺:应用接入、数据能力、组件、协议或测试工具带来可复用的改进。": "Ecosystem contributions: reusable improvements in app integration, data capabilities, components, protocols, or testing tools.", - "开营说明": "Kickoff orientation", - "国庆 · 共同进阶": "National Day holiday · Shared advanced session", - "国庆 · 可选答疑": "National Day holiday · Optional Q&A", - "集中处理场景接入、自动化验证和技术扩展中的阻塞,按队预约,整理共享 FAQ;不增加必修内容。": "Book a team slot to resolve scenario integration, automation verification, and technical-extension blockers. Answers go into a shared FAQ; no new required material.", - "国庆 · 复赛队伍": "National Day holiday · Award-round teams", - "国庆 · 可选门诊": "National Day holiday · Optional clinic", - "展示前 · 按队预约": "Before the showcase · Team appointments", - "现场准备": "On-site preparation", - "现场设备联调与彩排": "On-site equipment checks and rehearsal", - "在当天正式展示前,按队检查启动、投屏、网络、计时与备用视频;具体时段随 GOSIM 会务公布,不再评分。": "Before the formal showcase that day, teams check launch, projection, network, timing, and backup video. GOSIM will announce appointment times. This is not scored.", - "9.22 开营,9.26 周六开课。": "Kickoff September 22. Classes start Saturday, September 26.", - "9/13 开始报名 · 9/22 开营 · 9/26 开课 · 拟定 9/23 23:59 截止(北京时间)": "Registration opens September 13 · Kickoff September 22 · Classes from September 26 · Proposed registration deadline: September 23, 23:59 (UTC+8)", - "10/10–10/11 安装复现、任务验证与评分": "October 10–11: installation, task verification, and judging", - "10/13 18:00 确认代表 · 10/15 18:00 展示包冻结": "Confirm representatives by October 13, 18:00 · Showcase package freezes October 15, 18:00", - "10/4 23:59 提交截止": "Submission deadline: October 4, 23:59", - "10/6 20:00 公布 50 人晋级名单与反馈": "October 6, 20:00: announce the 50 advancing participants and feedback", - "10/9 23:59 复赛提交截止": "Award-round submission deadline: October 9, 23:59", - "13:00–17:00 分组答辩 · 20:00 公布获奖结果": "13:00–17:00 grouped presentations · Awards announced at 20:00", - "2026 年 9 月 13 日开放报名组队,9 月 22 日开营,9 月 26 日起在周末与国庆假期集中上课。初赛海选晋级 50 人,50 人参加线上复赛并评出一、二、三等奖,10 月 12 日线上决赛并公布获奖结果。前三名将于 10 月 17 日到 GOSIM Shenzhen 2026 黑客松现场展示作品并参加颁奖。单人、多人均可参赛;队长和每位队员都须分别报名。": "Registration and team formation open September 13, 2026; kickoff is September 22, with classes from September 26 on weekends and during the National Day holiday. Qualifying advances 50 participants into the award round for First, Second and Third Prizes. The online final and results are on October 12. The top three teams will showcase their projects and attend the awards ceremony at the GOSIM Shenzhen 2026 Hackathon on October 17. Solo and team entries are welcome; captains and every member register individually.", - "50 名复赛选手按项目分组答辩:3 分钟应用演示 + 2 分钟 Agent 自动化与可选技术贡献说明,另留问答与切换时间。本场完成复赛评奖,不另设晋级筛选;总排名前三名获邀现场展示。": "The 50 award-round participants present in project groups: a 3-minute app demo and 2 minutes on Agent automation and optional technical contributions, plus Q&A and transitions. This completes award-round judging without another qualification step. The top three teams are invited to the on-site showcase.", - "9 月 13 日起,通过本页动态二维码或腾讯问卷报名。初赛海选晋级 50 人,50 人参加复赛并评出一、二、三等奖,10 月 12 日线上决赛并公布结果;总排名前三名将于 10 月 17 日到 GOSIM 黑客松现场展示作品并参加颁奖。获奖奖池 ¥50,000,含现金奖金与 MiniMax Token 额度:一等奖 1 名,每名 ¥20,000;二等奖 2 名,每名 ¥9,000;三等奖 3 名,每名 ¥4,000。": "Register from September 13 using the animated QR code or Tencent Questionnaire. Qualifying advances 50 participants into the award round for First, Second and Third Prizes; the online final and results are on October 12. The top three teams will showcase their projects and attend the awards ceremony at the GOSIM Hackathon on October 17. The RMB 50,000 prize pool includes cash and MiniMax Token credits: one First Prize of RMB 20,000, two Second Prizes of RMB 9,000 each, and three Third Prizes of RMB 4,000 each.", - "9/13 报名、9/22 开营、9/26 开课、10/12 线上决赛、10/17 现场展示与颁奖及初赛晋级 50 人已确定;中间节点与具体时段为配套排期。": "Registration from September 13, kickoff September 22, classes from September 26, the October 12 online final, the October 17 showcase and awards ceremony, and 50 qualifying participants are confirmed. Intermediate milestones and exact time slots are supporting arrangements.", - "9/22 开营说明,9/26–27 集中讲八个项目的机制与 Agent 参赛方法。国庆保留作品答疑和复赛工作坊;后续课程均在周末或假期,所有课程提供回放。": "Kickoff orientation is September 22. September 26–27 introduces how the eight projects work and how to build an entry with Agents. The National Day holiday includes project Q&A and award-round workshops. Subsequent classes run on weekends or holidays, with recordings for every session.", - "9/26–27 完成机制入门,9/28–10/4 留出一周用 Agent 制作作品。提交场景、可运行原型、源码、截图与演示,以及已报名成员名单。": "Complete the introductory workshops September 26–27, then spend September 28–October 4 building with Agents. Submit your scenario, runnable prototype, source code, screenshots and demo, and registered team members.", - "9/27 完成机制入门,9/28–10/4 留出一周制作初赛作品。初赛海选晋级 50 人,10/12 线上决赛完成复赛评奖;前三名于 10/17 到 GOSIM 现场展示作品并参加颁奖,10/13–16 预留行程与展示准备。": "Introductory workshops finish September 27, leaving September 28–October 4 as a full week to build. Qualifying advances 50 participants; the October 12 online final completes award-round judging. The top three teams showcase their projects and receive awards at GOSIM on October 17, with October 13–16 reserved for travel and preparation.", - "Agent 作品门诊": "Agent project clinic", - "Agent 的执行基础:组织上下文、工具与任务,让应用具备持续行动的能力。": "The Agent execution foundation: organizes context, tools, and tasks so apps can keep taking action.", - "OctoSense × Makepad:让意图成为应用": "OctoSense × Makepad: turn intent into an app", - "octos × OctoLoop:执行与审查如何配合": "octos × OctoLoop: execution and review working together", - "octoscode × Octoscript:和 Agent 一起做应用": "octoscode × Octoscript: build an app with an Agent", - "与编码 Agent 协作的入口:描述需求、查看修改、确认操作并反馈结果。": "Your coding-Agent workspace: describe requirements, inspect changes, approve actions, and give feedback.", - "两类奖项的名额、与上述综合奖励的对应及兼得规则,将随最终评审细则公布。10/12 线上决赛完成复赛评奖,10/17 现场展示不另行评分。": "Places for the two award categories, their allocation within the prizes above, and whether they can be combined will be published with the final judging rules. The October 12 online final completes award-round judging; the October 17 showcase is not scored again.", - "为自己的场景写出目标、Agent 分工、可用项目和完成标准。9/27 完成机制入门,9/28–10/4 留出一周制作初赛作品,不增加新的必修内容。": "Define your scenario, goals, Agent roles, project tools, and completion criteria. The introductory workshops finish September 27; September 28–October 4 is a full week to build your qualifying entry, with no new required material.", - "从 Agentic 应用到技术突破": "From an Agentic app to a technical breakthrough", - "入门课在 9/27 结束,9/28–10/4 是完整的作品制作周。10/3 答疑与 10/4 提交检查均为可选支持,不增加新的必修内容。": "Introductory classes finish September 27. September 28–October 4 is a full project-building week. The October 3 Q&A and October 4 submission check are optional support, with no new required material.", - "内环执行、外环审查:让 Agent 分工完成、检查和改进,人来确定目标与验收。": "Inner-loop execution and outer-loop review: Agents build, check, and improve while people set goals and accept results.", - "决赛准备 · 分队预约": "Final preparation · Team appointments", - "初赛 10/4 截止、10/5–6 评审;复赛 10/9 截止、10/10–11 审阅材料,10/12 线上决赛与评奖使用 10/9 冻结版本。决赛是复赛的最终答辩,不增加第三轮晋级;前三名 10/17 到 GOSIM 现场展示与颁奖,现场不再评分。": "Qualifying closes October 4, with reviews October 5–6. Award-round submissions close October 9, with material reviews October 10–11. The October 12 online final uses the October 9 frozen version. It is the final presentation of the award round, not a third qualification round. The top three teams showcase at GOSIM on October 17 without further scoring.", - "初赛提交后即可继续完善同一作品,10/6 公布晋级名单,10/7 安排复赛工作坊。10/10–11 留给评审,10/12 举行线上决赛;决赛是比赛环节,不增加工作日晚课。": "Continue improving the same app after your qualifying submission. Advancement is announced October 6, followed by workshops October 7. October 10–11 is reserved for judging, and the online final is October 12. The final is a competition event, not an additional weekday-evening class.", - "初赛提交后即可继续迭代,10/6 公布名单后由晋级的 50 人提交复赛作品。沿用同一选题,重点改善任务完成、可用性与验证证据,无需从头开发。": "Keep iterating after the qualifying deadline; the 50 participants announced on October 6 submit award-round entries. Develop the same project, focusing on task completion, usability, and verification evidence. There is no need to start again.", - "初赛海选 · 场景与可运行作品": "Open qualifying · Scenario and runnable app", - "前三名优胜团队异步确认到场代表、安排出行并准备展示;提供展示指南与反馈,10/17 正式展示前联调与彩排。": "The top three teams confirm representatives, arrange travel, and prepare asynchronously, using the showcase guide and feedback. Equipment checks and rehearsals take place before the October 17 showcase.", - "前三名在当天正式展示前检查启动、投屏、网络、计时与备用视频;具体时段随 GOSIM 会务公布,不再评分。": "The top three teams check launch, projection, network, timing, and backup video before the showcase that day. GOSIM will announce appointment times. This is not scored.", - "动态应用的表达方式:让 Agent 生成和调整界面与交互,用运行结果验证意图。": "A way to express dynamic apps: Agents generate and adjust interfaces and interactions, then check the intent against running results.", - "原生界面的基础:让生成的应用可见、可操作,支持人与 Agent 共同使用和检查。": "The native-interface foundation: makes generated apps visible and operable for people and Agents to use and inspect.", - "参赛场景与应用入口:从邮件、消息、日历等需求出发,呈现 Agent 的行动与结果。": "Competition scenarios and app entry points: start with mail, messages, calendars, and other needs to present Agent actions and results.", - "受邀确认与展示准备 · 4 天": "Invitation confirmation and showcase preparation · 4 days", - "可以单人或多人参赛。单人队伍由本人报名;多人队伍的队长和每位队员都须分别报名,队长不能代替成员报名。拟定 9/23 23:59 截止个人报名,10/4 初赛提交时锁定已报名成员名单。": "Solo and team entries are welcome. A solo entrant acts as captain; every captain and team member registers separately. Captains cannot register on behalf of members. Individual registration is proposed to close September 23 at 23:59; the registered team roster is locked with the October 4 qualifying submission.", - "可选工作坊": "Optional workshop", - "围绕八个项目,讲清它们为什么存在、如何工作,以及选手怎样与 Agent 配合。通过场景演示和作品练习建立理解,不展开源码、语法与底层实现。": "Explore why these eight projects exist, how they work, and how participants collaborate with Agents. Learn through scenario demonstrations and project exercises, without source-code, syntax, or low-level implementation lectures.", - "围绕选手正在制作的应用,讨论如何描述需求、组织 Agent、观察结果和调整任务;复用入门课的方法,不新增必修内容,不讲底层实现。": "Discuss requirements, Agent coordination, result inspection, and task adjustments using participants' apps. Reuse the introductory methods without adding required material or teaching low-level implementation.", - "国庆 · 复赛工作坊": "National Day holiday · Award-round workshop", - "完善 PR、应用和规范,跟进项目采纳并归档优秀作品;不改变线上评奖结果。": "Refine PRs, apps, and specifications; follow project adoption and archive outstanding work without changing the online awards.", - "总排名前三名将到 GOSIM 黑客松现场展示作品并参加颁奖。获奖结果在 10/12 线上决赛确定,现场展示及到场情况不影响排名。": "The top three teams will showcase their projects and attend the awards ceremony at the GOSIM Hackathon. Results are decided at the October 12 online final; attendance and showcase performance do not affect rankings.", - "把课程变成自己的参赛计划": "Turn the workshops into your competition plan", - "持续完善作品 · 复赛准备与开发": "Keep improving · Award-round preparation and development", - "按队检查音视频、屏幕共享与备用视频,使用 10/9 冻结版本;10/12 正式答辩。该环节为赛务检查,由非评分人员组织。": "Check audio, video, screen sharing, and backup video by appointment using the October 9 frozen version. Formal presentations are October 12. This logistical check is run by staff who are not judging submissions.", - "机制入门": "How it works", - "核对已报名成员、可运行作品、来源说明、截图和演示材料;初赛当日 23:59 截止,课后留出上传时间。": "Check registered members, the runnable app, source descriptions, screenshots, and demo materials. Qualifying closes at 23:59 that day, leaving time to upload after the clinic.", - "核验 10/9 冻结的应用版本与任务证据;技术进阶作品另核验贡献。评委专注材料审阅,10/11 连线检查由赛务组织。": "Verify the October 9 frozen app version and task evidence, with separate contribution checks for technical entries. Judges focus on submissions; event staff run the October 11 connection checks.", - "根据 10/6 的晋级反馈,用 Agent 完善同一作品,比较改进前后的任务效果;理解生态反哺和 OctoSense ROM 突破如何服务应用,选择复赛目标,不讲实现细节。": "Use October 6 advancement feedback to improve the same app with an Agent and compare task results before and after. Learn how ecosystem contributions and OctoSense ROM breakthroughs support an app, then choose award-round goals without implementation lectures.", - "独立评阅、运行核验与交叉复核,海选出 50 人晋级。评审使用 10/4 冻结版本;所有队伍可继续完善同一作品,为复赛做准备。": "Independent review, runtime checks, and cross-review select 50 participants. Judges use the October 4 frozen version; all teams may continue improving the same project in preparation for the award round.", - "理解 octos 如何组织 Agent 的上下文、工具和任务执行,以及 OctoLoop 的内环执行、外环审查机制。通过派任务、看结果、退回改进和人工验收,学会管理 Agent 的工作。": "Understand how octos organizes Agent context, tools, and execution, and how OctoLoop pairs inner-loop execution with outer-loop review. Learn to direct Agents through task assignment, result inspection, revision requests, and human acceptance.", - "看懂机制,让 Agent 帮你完成比赛。": "Understand how it works. Build your entry with Agents.", - "线上决赛答辩与评奖": "Online final presentations and awards", - "线上决赛连线检查": "Online final connection checks", - "练习场景、Agent 分工、任务结果与技术价值的演示,准备问答和备用视频。作品 10/9 冻结,10/12 线上决赛;正式演示与备用视频使用冻结版本。": "Practice presenting your scenario, Agent roles, task results, and technical value; prepare Q&A and a backup video. The app freezes October 9 and the online final is October 12. Formal demos and backup videos use the frozen version.", - "讲清你的 Agentic 作品": "Tell the story of your Agentic app", - "赛事与八个项目全景": "The competition and eight-project overview", - "软件工厂的协作机制:组织多个 Agent 的任务、沟通、交接和人工确认。": "Software-factory collaboration: coordinates tasks, communication, handoffs, and human confirmation across Agents.", - "选一个场景 → 描述目标 → 让 Agent 制作与协作 → 运行并检查 → 反馈改进 → 提交作品。": "Choose a scenario → Describe the goal → Let Agents build and collaborate → Run and inspect → Give feedback and improve → Submit your app.", - "9.22 开营 · 10.12 线上决赛 · 10.17 现场展示与颁奖": "September 22 kickoff · October 12 online final · October 17 showcase and awards", - "Token 与编程权益赞助": "Token and coding sponsors", - "感谢 MiniMax 与 Kimi,为参赛者提供模型调用与 AI 编程资源,支持从想法到可运行作品。": "With support from MiniMax and Kimi, participants can use model APIs and AI coding resources to turn ideas into working apps.", - "MiniMax · Token 赞助": "MiniMax · Token sponsorship", - "价值 ¥50,000 的 Token 额度": "RMB 50,000 in token credits", - "MiniMax 开放平台提供文本、语音、视频等模型 API 能力。本次赞助用于赛事奖励与参赛开发,支持 Agent 任务验证、测试和应用迭代。": "The MiniMax platform provides model APIs for text, speech, video and more. Its sponsorship supports competition rewards and participant development, including Agent task validation, testing and app iteration.", - "了解 MiniMax →": "Explore MiniMax →", - "Kimi · AI 编程支持": "Kimi · AI coding support", - "Kimi 编程权益": "Kimi coding benefits", - "Kimi 由月之暗面(Moonshot AI)研发。本次提供编程权益,支持代码理解、功能开发、调试与测试,帮助参赛者与 Agent 协作完成应用。": "Developed by Moonshot AI, Kimi provides coding benefits for this event. Participants can work with coding Agents to understand code, develop features, debug, test and complete their apps.", - "了解 Kimi Code →": "Explore Kimi Code →", - "获奖奖励与开发支持分别发放;奖池包含的 Token 计入综合奖励。领取方式与使用期限随资源发放说明公布。": "Prizes and development support are distributed separately; token credits within the prize pool count toward the combined award values. Redemption instructions and validity periods will accompany distribution details.", - "围绕 OctoSense,在 robrix2 中创造 Agent 能理解、能操作、能完成任务的小程序。": "Build mini apps in robrix2 around OctoSense, so Agents can understand, act and complete real tasks.", - "本届大赛以 OctoSense 为核心,以 robrix2 小程序宿主为主要开发基线。围绕熟悉的聊天与小程序入口,让 Agent 读懂状态、执行操作、跟进变化,并让用户看清结果。": "This competition centers on OctoSense, with the robrix2 mini-app host as its primary development baseline. Use familiar chat and mini-app entry points to let Agents read state, act, follow changes and show users the outcome.", - "面向设计师、产品人、OPC(一人公司)、学生与开发者。按 OctoSense 应用指南选择场景,在 robrix2 中制作小程序;即时消息沿用其会话界面,软件协作可以接入 hagency。": "For designers, product thinkers, one-person companies, students and developers. Choose an OctoSense scenario and build a mini app in robrix2. Messaging retains its conversation UI; software collaboration can connect hagency.", - "以 robrix2 为主要基线,提交小程序及其可复现的宿主版本与启动说明。视频或设计稿不能代替可运行作品;平台和 ROM 扩展需展示对作品的实际改善。": "Use robrix2 as the primary baseline and submit your mini app with a reproducible host version and startup instructions. Videos or mockups cannot replace a working entry; platform and ROM extensions must demonstrate improvements to that entry.", - "从 robrix2 的网页卡片或原生文章编辑器示例出发,让 Agent 帮你制作一个场景小程序。沿用 robrix2 的入口与会话界面,展示操作、授权和结果。": "Start from a Web card or the native article-editor example in robrix2, and work with an Agent to build a scenario mini app. Retain robrix2 entry points and conversation UI, and demonstrate actions, consent and results.", - "小程序从哪里开始?": "Where do I start with mini apps?", - "从 OctoSense-org/robrix2 小程序宿主开始。在“发现”或聊天“+”中打开文章编辑器,体验授权、草稿、原生预览、分享应用与确认发送。网页小程序也可通过 URL 卡片分享;软件工厂选题可扩展 hagency 协作。": "Start with the mini-app version of OctoSense-org/robrix2. Open Article editor from Discover or the chat + menu to try consent, drafts, native preview, app sharing and confirmed publishing. Web mini apps can also be shared as URL cards; software-factory entries can extend hagency collaboration.", - "可使用公布支持的桌面环境,不强制手机演示。当前原生文章编辑器的验证记录来自 macOS;移动端和加密会话需单独验证。OctoSense ROM 是可选技术进阶方向。": "Use a supported desktop environment; a phone demo is optional. Current native article-editor evidence comes from macOS; mobile execution and encrypted chats require separate validation. OctoSense ROM is an optional technical advancement.", - "用声明式描述表达界面、状态和交互。robrix2 的原生文章编辑器用 Octoscript L0 定义输入与状态,由 Makepad 呈现;账号、授权和发送由 robrix2 宿主管理。": "Describe UI, state and interaction declaratively. The native article editor in robrix2 uses Octoscript L0 for inputs and state, rendered by Makepad; robrix2 manages identity, consent and sending.", - "以 OctoSense 为核心,从官方应用指南的 12 个场景中选题,以 robrix2 为主要宿主制作 Agentic 小程序。可以联动多个场景,统一参评。": "Choose from 12 OctoSense application scenarios and build Agentic mini apps with robrix2 as the primary host. Entries may connect several scenarios and share one award framework.", - "在 robrix2 的会话中分享小程序,让接收者独立授权、完成任务,并把结果带回聊天。": "Share mini apps in robrix2 conversations. Recipients authorize their own session, complete a task and bring the result back to chat.", - "以 robrix2 为起点,做能分享、能使用的小程序。": "Start with robrix2: mini apps people can share and use.", - "当前原生示例只接受内置文章编辑器;新增原生小程序需扩展并构建宿主,不能直接导入任意应用包。网页卡片可分享 HTTP(S) 地址,页面不会因此获得聊天记录或账号权限。": "The current native example accepts only the built-in article editor. Adding a native mini app requires extending and building the host; arbitrary packages cannot be imported. Web cards share HTTP(S) addresses without granting pages access to chat history or account authority.", - "已实现示例:文章编辑与分享": "Implemented example: write and share articles", - "打开应用 → 使用自己的账号授权 → 编辑 Markdown、保存本地草稿 → 原生预览 → 选择聊天并确认发送。接收者可打开分享的应用,草稿和权限各自独立。": "Open the app → authorize with your own account → edit Markdown and save a local draft → preview natively → choose a chat and confirm sending. Recipients can open the shared app with their own drafts and permissions.", - "扩展选题:robrix2 + hagency": "Extension idea: robrix2 + hagency", - "基于小程序分享与授权机制,为 hagency(原 hafleet)软件工厂开发任务进度、Agent 状态、结果验收或交接应用。由选手接入协作数据,并展示确认操作后的实际结果。": "Build on mini-app sharing and consent to create task progress, Agent status, delivery review or handoff apps for hagency, formerly hafleet. Entrants connect collaboration data and demonstrate the outcome of confirmed actions.", - "明确用户、输入事件与目标,提供可运行的小程序、宿主分支与提交版本、开源代码和启动说明。": "Define the user, trigger and goal. Provide a working mini app, its host branch and commit, open-source code and startup instructions.", - "本届主要宿主:理解小程序入口、会话分享、独立授权与结果回传。": "The primary host: use robrix2 to understand mini-app entry points, chat sharing, independent consent and returning results.", - "以 robrix2 和原生文章编辑器为共同示例,按选题选择其他工具。课程讲机制与 Agent 协作,不要求每个作品同时接入八个项目。": "Use robrix2 and its native article editor as the shared example, choosing other tools for your scenario. Classes focus on mechanisms and working with Agents; entries need not integrate all eight projects.", - "robrix2 × hagency:从分享小程序到协作交付": "robrix2 × hagency: from sharing mini apps to collaborative delivery", - "介绍 OctoSense 场景、robrix2 参赛基线、八个项目的分工与评奖规则。选手定义目标和判断结果,Agent 协助完成小程序;机制入门从 9/26 周六开始。": "Introduce OctoSense scenarios, the robrix2 baseline, the eight projects and award rules. Entrants define goals and judge results while Agents help build mini apps. Mechanism classes start Saturday, September 26.", - "从 OctoSense 场景选择任务,在 robrix2 中体验文章编辑器的原生界面、授权与预览。理解应用宿主和 Makepad 的分工,学会向 Agent 描述目标、操作与完成标准。": "Choose a task from OctoSense scenarios and try the native editor, consent and preview in robrix2. Understand the host and Makepad roles, and learn to describe goals, actions and completion criteria to an Agent.", - "用文章编辑器示例理解 Octoscript 如何表达界面与状态,以及宿主如何提供能力。通过 octoscode 向 Agent 描述改动、观察结果并反馈,区分内容编辑与应用扩展,不展开语法与源码。": "Use the article-editor example to understand Octoscript UI and state and the capabilities supplied by its host. With octoscode, describe changes to an Agent, observe results and give feedback. Distinguish editing content from extending an app, without syntax or source-code lessons.", - "演示小程序分享、接收者独立授权、草稿隔离与确认发送,再用 hagency 任务验收说明软件工厂协作。选手规划自己的小程序与 Agent 分工,区分内置示例和需要完成的服务接入。": "Demonstrate mini-app sharing, recipient consent, separate drafts and confirmed sending, then use hagency task review to explain software-factory collaboration. Entrants plan their mini app and Agent roles, distinguishing the built-in example from service integrations they must deliver.", - "课程以 robrix2 的小程序机制与原生文章编辑器为基线;锁定版本、支持设备和练习数据于 9/24 发布,9/25 完成异步自检。": "Classes use the mini-app mechanisms and native article editor in robrix2. The pinned version, supported devices and practice data are published September 24, followed by asynchronous self-checks September 25.", - "打开原生小程序": "Open a native mini app", - "从“发现”或聊天入口打开文章编辑器,了解用途后继续。": "Open Article editor from Discover or chat, review what it does and continue.", - "robrix2 原生文章编辑器的应用详情页": "The native article-editor details screen in robrix2", - "每位使用者独立授权": "Each person grants consent", - "用自己的账号确认本地草稿与发送权限,分享应用不传递授权。": "Use your own account to authorize local drafts and sending. Sharing the app does not transfer consent.", - "文章编辑器展示当前测试账号和本次使用的权限": "Article editor showing the current fixture account and permissions for this session", - "先预览,再确认发送": "Preview before sending", - "Markdown 内容由原生界面呈现,选择聊天并确认后发送。": "Markdown is rendered natively. Choose a chat and confirm before sending.", - "文章编辑器原生预览中的标题、段落和列表": "Native article preview showing a title, paragraphs and a list", - "让应用进入会话": "Bring the app into a conversation", - "聊天中可以收到文章与小程序卡片,接收者可继续打开应用。": "Chats can receive articles and mini-app cards that recipients can open themselves.", - "robrix2 测试会话中收到的文章和文章编辑器小程序卡片": "A robrix2 fixture chat containing an article and an article-editor mini-app card", - "原生截图:robrix2 2026.09.21;桌面与参考卡片 2026.09.12。保留原始测试画面。": "Native captures: robrix2, September 21, 2026; desktop and reference cards, September 12, 2026. Original test captures are preserved.", - "打开 robrix2 项目 ↗": "Open the robrix2 project ↗", - "查看原生小程序示例 ↗": "View the native mini-app example ↗", - "原生 Octoscript 文章编辑器 · macOS 测试环境 · 2026.09.21": "Native Octoscript article editor · macOS test environment · September 21, 2026", - "分享小程序就算完成 Agentic 作品吗?": "Does sharing a mini app complete an Agentic entry?", - "分享只是入口。原生文章编辑器演示了授权、草稿和发送机制;参赛作品还要展示 Agent 如何读取获授权的状态、完成操作并核验结果。新增原生应用需提交包含宿主扩展的可运行版本。": "Sharing is the entry point. The native article editor demonstrates consent, drafts and sending. Your entry must also show how an Agent reads authorized state, performs actions and verifies results. New native apps must include a runnable version with the required host extensions.", - "先看 robrix2 中的原生小程序流程,再探索 OctoSense 桌面、Omarchy 与应用场景。小程序画面来自仓库内的原生测试记录,服务卡片使用示例数据。": "Explore the native mini-app flow in robrix2, then the OctoSense desktop, Omarchy and application scenarios. Mini-app captures come from the repository’s native test records; service cards use example data.", - "OctoSense 小程序 · 原生运行与会话分享": "OctoSense mini apps · Native interaction and chat sharing", - "本届主要使用 robrix2 小程序宿主,保留聊天、联系人与发现入口。已有网页卡片与原生 Octoscript 文章编辑器;原生编辑器可从“发现”或聊天“+”打开,并将应用分享到会话。": "This competition primarily uses the robrix2 mini-app host, retaining chat, contacts and Discover. It includes Web cards and a native Octoscript article editor. Open the editor from Discover or the chat + menu and share the app into a conversation." -} diff --git a/events/agent2app-2026/src/main.ts b/events/agent2app-2026/src/main.ts deleted file mode 100644 index d2b2414..0000000 --- a/events/agent2app-2026/src/main.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' -import './style.css' -// Restore an event URL forwarded by the shared GitHub Pages 404 handler. -try { - const target = sessionStorage.getItem('gosim-pages-redirect') - if (target?.startsWith(import.meta.env.BASE_URL)) { - sessionStorage.removeItem('gosim-pages-redirect') - history.replaceState(null, '', target) - } -} catch { - // The landing page remains usable when browser storage is unavailable. -} -createApp(App).mount('#app') diff --git a/events/agent2app-2026/src/style.css b/events/agent2app-2026/src/style.css deleted file mode 100644 index e81f26e..0000000 --- a/events/agent2app-2026/src/style.css +++ /dev/null @@ -1,327 +0,0 @@ -:root { - --paper: #f3ede2; - --ink: #303e45; - --accent: #a54e36; - --muted: #6a6960; - --border: #cfc6b8; - --serif: 'Cormorant Garamond', Georgia, 'Noto Serif SC', serif; - --mono: 'IBM Plex Mono', 'Noto Serif SC', monospace; - --gutter: clamp(24px, 4.4vw, 72px); - --sans: 'Space Grotesk', 'Noto Serif SC', system-ui, sans-serif; - font-family: var(--sans); - font-synthesis: none; - color: var(--ink); - background: var(--paper); -} -* { box-sizing: border-box; } -html { scroll-behavior: smooth; scroll-padding-top: 106px; } -body { margin: 0; min-width: 320px; -webkit-font-smoothing: antialiased; } -a { color: inherit; text-decoration: none; } -a:hover { color: var(--accent); } -button { font: inherit; cursor: pointer; } -a, button, summary { touch-action: manipulation; } -a:focus-visible, button:focus-visible, summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 5px; } -::selection { background: #b95f43; color: #fff8ec; } -p { line-height: 1.9; } -.header { min-height: 64px; padding: 10px var(--gutter); display: flex; justify-content: space-between; align-items: center; gap: 24px; position: sticky; top: 0; z-index: 10; background: rgba(243, 237, 226, .82); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid var(--border); } -.header-brand-group { display: flex; align-items: center; gap: 18px; flex: none; } -.brand { display: flex; align-items: center; gap: 9px; white-space: nowrap; border-right: 1px solid var(--border); padding-right: 18px; } -.brand-logo { display: block; flex: none; width: 76px; aspect-ratio: 85 / 24; background: currentColor; mask-size: contain; mask-position: center; mask-repeat: no-repeat; -webkit-mask-size: contain; -webkit-mask-position: center; -webkit-mask-repeat: no-repeat; } -.header nav { display: flex; align-items: center; gap: 24px; font-size: 14px; } -.nav-cta { border-bottom: 1px solid var(--accent); padding: 10px 0; color: var(--accent); } -.menu-toggle { display: none; } -.skip-link { position: fixed; top: -100px; z-index: 30; background: var(--paper); color: var(--ink); padding: 12px; } -.skip-link:focus { top: 10px; } -.hero { position: relative; isolation: isolate; display: flex; flex-direction: column; min-height: calc(100svh - 64px); background: #42443b; color: #fff7e9; } -.hero-media { position: absolute; inset: 0; z-index: -3; overflow: hidden; } -.hero-media img, .hero-media video { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 38%; } -.hero-shade { position: absolute; inset: 0; z-index: -2; background: linear-gradient(90deg, #1d302edb 0%, #233632ba 24%, #27382e30 49%, transparent 70%), linear-gradient(0deg, #24302de0 0%, transparent 25%); } -.hero-stage { display: flex; align-items: center; flex: 1; width: 100%; max-width: 1440px; margin: auto; } -.hero-copy { padding: clamp(44px, 7vh, 88px) var(--gutter); width: min(100%, 710px); } -.eyebrow { font: 400 12px/1.8 var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--accent); margin: 0 0 30px; } -.hero .eyebrow { color: #f5dfb6; letter-spacing: .16em; } -.hero h1 { font: 500 clamp(4.5rem, 8.3vw, 8.5rem)/.91 var(--serif); letter-spacing: -.045em; margin: 0 0 32px; text-shadow: 0 2px 20px #12232240; } -.hero h1 span { font-style: italic; color: #f2c89d; } -.hero h1.zh { font-family: 'Noto Serif SC', var(--serif); font-weight: 600; line-height: 1.08; letter-spacing: .02em; } -.hero h1.zh span { font-style: normal; } -.hero-details { max-width: 420px; } -.hero h2 { font-size: 20px; letter-spacing: .06em; font-weight: 500; margin: 0 0 6px; } -.hero-theme { font-size: 17px; color: #eee5d7; margin: 0 0 22px; } -.hero-sponsors { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; margin-top: 26px; color: #f2e8d9b8; font: 11px/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; } -.hero-sponsor-logos { display: flex; align-items: center; gap: 18px; } -.hero-sponsor-logos a { display: flex; align-items: center; opacity: .88; transition: opacity .2s ease, transform .2s ease; } -.hero-sponsor-logos a:hover, .hero-sponsor-logos a:focus-visible { opacity: 1; outline: none; transform: translateY(-1px); } -.hero-sponsor-logos img { display: block; width: auto; height: 2.25rem; object-fit: contain; } -.hero-sponsor-logos .minimax-logo { filter: brightness(0) invert(1); } -.hero-sponsor-logos .kimi-logo { height: 2.4rem; filter: none; } -.location { display: inline-block; font-size: 14px; color: #fff3df; border-bottom: 1px solid #eddbc184; padding-bottom: 8px; } -.location:hover, .hero .text-link:hover { color: #f5c5a0; } -.actions { display: flex; align-items: center; flex-wrap: wrap; gap: 28px; margin-top: 28px; } -.button { display: inline-flex; align-items: center; justify-content: space-between; gap: 38px; padding: 15px 25px; font-size: 14px; font-weight: 500; transition: background .2s, color .2s; } -.primary { color: #fff7ed; background: var(--accent); border: 1px solid var(--accent); } -.primary:hover { background: #843c29; border-color: #843c29; color: #fff7ed; } -.hero .primary { background: #f1e6d2; border-color: #f1e6d2; color: #33413d; } -.hero .primary:hover { background: #fff8e9; color: #33413d; } -.text-link { font-size: 14px; } -.hero-bottom { display: flex; justify-content: space-between; align-items: center; gap: 24px; width: calc(100% - var(--gutter) * 2); max-width: 1296px; margin: 0 auto; border-top: 1px solid #f2e6d050; padding: 22px 0; font: 12px/1.7 var(--mono); letter-spacing: .06em; color: #f2e8d9; } -.section { padding: clamp(80px, 9vw, 140px) max(var(--gutter), calc((100vw - 1280px) / 2)); border-top: 1px solid var(--border); } -.section-heading h2, .participate h2 { font-size: clamp(2rem, 3.3vw, 3.5rem); line-height: 1.45; letter-spacing: -.035em; font-weight: 500; margin: 0 0 26px; text-wrap: balance; } -.section-heading > p:not(.eyebrow) { color: var(--muted); font-size: 17px; max-width: 720px; } -.challenge { display: grid; grid-template-columns: .9fr 1.1fr; gap: clamp(48px, 8vw, 120px); } -.challenge .section-heading h2 { font-size: clamp(2.5rem, 4.4vw, 4.5rem); line-height: 1.35; } -.section-body { padding-top: 42px; } -.section-body p { font-size: 17px; color: var(--muted); margin: 0 0 24px; } -.section-body .lead { font-size: 24px; color: var(--ink); font-weight: 500; } -.rule { border-top: 1px solid var(--border); padding-top: 28px; margin-top: 32px; } -.rule span { display: block; color: var(--accent); font-size: 14px; margin-bottom: 12px; } -.rule strong { font-size: 18px; font-weight: 500; } -.rule p { font-size: 15px; margin: 14px 0 0; } -.steps { background: #e7ddcd; } -.wide { max-width: 1060px; } -.steps-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 42px; margin-top: 56px; } -.steps-grid article { border-top: 1px solid #9f9483; padding-top: 24px; } -.step-index { display: flex; gap: 22px; align-items: center; font: 400 62px/1.1 var(--serif); color: var(--accent); margin-bottom: 26px; } -.step-index span { font: 12px/1.7 var(--mono); color: var(--muted); } -.tag { color: #68604f; font-size: 14px; } -.steps-grid h3 { font-size: 24px; line-height: 1.6; font-weight: 500; letter-spacing: -.025em; margin: 18px 0; } -.steps-grid p { color: var(--muted); font-size: 16px; } -.step-foot { border-top: 1px solid #c2b5a1; padding-top: 20px; margin-top: 28px; font-size: 14px; line-height: 1.9; } -.step-foot span { color: var(--muted); } -.stack { display: grid; grid-template-columns: 1.15fr .85fr; gap: clamp(48px, 7vw, 100px); background: #354b55; color: #f5eedf; --muted: #d1d5ce; --border: #718088; --accent: #edb28b; } -.stack .section-heading h2 { font: 500 clamp(1.75rem, 3vw, 3.1rem)/1.12 var(--serif); letter-spacing: -.02em; white-space: nowrap; } -@media(max-width:760px) { .stack .section-heading h2 { white-space: normal; } } -.stack-lead { color: var(--muted); font-size: 17px; max-width: 720px; margin: 0 0 18px; } -.stack-principles { list-style: none; margin: 8px 0 26px; padding: 0; display: grid; gap: 14px; max-width: 720px; } -.stack-principles li { display: grid; grid-template-columns: 150px 1fr; gap: 16px; padding-top: 14px; border-top: 1px solid var(--border); font-size: 15px; line-height: 1.7; } -.stack-principles strong { font-weight: 500; color: var(--accent); } -.stack-principles span { color: var(--muted); } -@media(max-width:760px) { .stack-principles li { grid-template-columns: 1fr; gap: 4px; } } -.terminal-figure { margin: 38px 0 0; } -.terminal-figure img { display: block; width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; } -.terminal-figure figcaption { font: 12px/1.7 var(--mono); color: #d7d9d0; padding-top: 16px; letter-spacing: .08em; } -.stack-list { padding-top: 30px; } -.stack-list article { padding: 26px 0; border-bottom: 1px solid var(--border); } -.stack-list article > span { color: var(--accent); font-size: 13px; } -.stack-list h3 { font: 500 38px/1.1 var(--serif); margin: 14px 0; } -.stack-list p { font-size: 16px; color: var(--muted); margin: 0; } -.stack-github { display: inline-block; margin-top: 26px; font: 13px/1.7 var(--mono); letter-spacing: .04em; color: var(--accent); border-bottom: 1px solid currentColor; } -.stack-github:hover { color: #fff; } -.awards-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 56px; margin-top: 52px; } -.awards-grid article { border-top: 1px solid var(--border); padding: 32px 0; } -.awards-grid article > span { color: var(--muted); font: 12px/1.7 var(--mono); letter-spacing: .07em; } -.awards-grid h3 { font-size: 27px; font-weight: 500; margin: 18px 0; } -.awards-grid p { color: var(--muted); font-size: 16px; margin: 0; } -.awards-grid .champion { grid-column: 1/-1; background: #a95740; color: #fff2df; padding: 32px 40px; margin-bottom: 32px; border: 0; } -.awards-grid .champion > span, .awards-grid .champion p { color: #fff0de; } -.awards-grid .champion h3 { font-size: 38px; } -.awards .section-heading .prize-note { font-size: 14px; } -.awards-grid .prize-amount { color: var(--ink); font: 500 clamp(36px, 5vw, 56px)/1.15 var(--serif); font-variant-numeric: tabular-nums; margin: 0 0 16px; } -.awards-grid .prize-amount span { font: 14px/1.5 var(--sans); white-space: nowrap; } -.bounties { background: #ebe4d8; } -.bounty-list { border-top: 1px solid #b2a591; margin-top: 48px; } -.bounty-list article { display: grid; grid-template-columns: 60px 1fr 140px; gap: 24px; align-items: baseline; padding: 26px 0; border-bottom: 1px solid var(--border); } -.bounty-number { font: 400 27px var(--serif); color: var(--accent); } -.bounty-list h3 { font-weight: 500; font-size: 21px; margin: 0; } -.bounty-list p { font-size: 16px; color: var(--muted); margin: 10px 0 0; } -.repo { color: #6d766f; font-size: 14px; text-align: right; } -.contribution-note { display: grid; grid-template-columns: .8fr 1.2fr; gap: 40px; margin-top: 40px; } -.contribution-note strong { font-size: 22px; font-weight: 500; } -.contribution-note p { color: var(--muted); margin: 0; } -.schedule, .faq { display: grid; grid-template-columns: .85fr 1.15fr; gap: clamp(48px, 8vw, 110px); } -.schedule-note { border-left: 1px solid var(--accent); padding-left: 24px; margin-top: 40px; } -.schedule-note strong { font-weight: 500; } -.schedule-note p { color: var(--muted); } -.timeline article { display: grid; grid-template-columns: 95px 1fr; gap: 26px; border-top: 1px solid var(--border); padding: 28px 0; } -.timeline article > span { font: 13px/1.8 var(--mono); color: var(--accent); } -.timeline h3 { margin: 12px 0; font-size: 21px; font-weight: 500; } -.timeline p { color: var(--muted); font-size: 16px; margin: 0; } -.timeline .session-type { font: 12px/1.8 var(--mono); } -.faq { background: #e6e8df; } -.faq details { border-bottom: 1px solid #bfc5b9; } -.faq summary { cursor: pointer; display: flex; justify-content: space-between; align-items: baseline; gap: 24px; padding: 24px 0; font-size: 18px; line-height: 1.7; list-style: none; } -.faq summary::-webkit-details-marker { display: none; } -.faq summary span { color: var(--accent); } -.faq details[open] summary span { transform: rotate(45deg); } -.faq details p { margin: 0 0 24px; color: var(--muted); } -.participate { text-align: center; background: #354b55; color: #fff4e2; --accent: #edb28b; } -.participate h2 { margin-inline: auto; } -.participate p { color: #e0e1d8; } -.participate .eyebrow { color: #edb28b; } -.participate .button { margin: 24px 0; background: #eee2cf; border-color: #eee2cf; color: #354b55; } -.participate .button:hover { background: #fff5e4; } -.small { font-size: 14px; } -footer { padding: 32px var(--gutter); display: flex; justify-content: space-between; flex-wrap: wrap; gap: 24px; font-size: 13px; color: var(--muted); } -@media (max-width: 1200px) { - .menu-toggle { display: block; border: 1px solid var(--border); color: var(--ink); background: transparent; padding: 8px 14px; } - .header nav { display: none; position: absolute; inset: 100% 0 auto; padding: 24px var(--gutter); background: var(--paper); border-bottom: 1px solid var(--border); } - .header nav.open { display: flex; flex-wrap: wrap; gap: 24px; } - .hero h1 { font-size: clamp(4.5rem, 9vw, 7rem); } - .hero-copy { max-width: 620px; } -} -@media (max-width: 760px) { - .header { padding: 10px 24px; min-height: 64px; } - .header nav.open { flex-direction: column; align-items: stretch; gap: 20px; } - .hero { min-height: calc(100svh - 64px); } - .hero-copy { max-width: 510px; padding: 52px 24px; } - .hero h1 { font-size: clamp(4.3rem, 15vw, 6.5rem); } - .hero .eyebrow { font-size: 12px; letter-spacing: .06em; } - .hero-media img { object-position: 58% center; } - .hero-shade { background: linear-gradient(90deg, #233832db, #23383278 70%, #23383235), linear-gradient(0deg, #223732ed, transparent 55%); } - .hero-bottom { flex-wrap: wrap; padding: 20px 0; gap: 10px; } - .hero-bottom a:not(.org-link) { display: none; } - .section { padding: 72px 24px; } - .section-heading h2, .participate h2 { font-size: 32px; } - .challenge, .stack, .schedule, .faq, .contribution-note { grid-template-columns: 1fr; gap: 28px; } - .section-body, .stack-list { padding-top: 0; } - .section-body p { font-size: 16px; } - .steps-grid { grid-template-columns: 1fr; gap: 32px; margin-top: 36px; } - .step-index { margin-bottom: 18px; } - .awards-grid { grid-template-columns: 1fr; margin-top: 36px; } - .awards-grid .champion { padding: 28px 24px; margin-bottom: 24px; } - .bounty-list article { grid-template-columns: 28px 1fr; gap: 12px; } - .repo { grid-column: 2; text-align: left; font-size: 13px; } - .timeline article { grid-template-columns: 78px 1fr; gap: 16px; } - .timeline h3 { font-size: 19px; } - .faq summary { font-size: 17px; } -} -@media (max-width: 480px) { - .header { padding-inline: 16px; gap: 10px; } - .header-brand-group { gap: 10px; flex: 1; min-width: 0; } - .brand { padding-right: 10px; } - .brand-logo { width: 62px; } - .menu-toggle { padding: 8px; font-size: 12px; flex: none; } - .hero-theme { font-size: 16px; } -} -@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .button { transition: none; } } - -:root { color-scheme: light; } -:root[data-browser-theme='night'] { color-scheme: dark; } -.header-controls { display: flex; align-items: center; gap: 12px; order: 3; } -.theme-toggle { display: inline-flex; justify-content: center; align-items: center; gap: 9px; width: 36px; height: 36px; padding: 8px; border: 1px solid var(--border); background: transparent; color: var(--ink); font-size: 13px; white-space: nowrap; } -.theme-toggle:hover { background: #a54e3610; } -:root[data-theme='night'] { --paper: #18242f; --ink: #f0e9dd; --muted: #b8c1c6; --border: #41515c; --accent: #edb28b; } -[data-theme='night'] .header { background: rgba(24, 36, 47, .82); } - -[data-theme='night'] .hero { background: #111e2c; } -[data-theme='night'] .hero-shade { background: linear-gradient(90deg, #0f1b2bdf, #122238ba 24%, #12223830 49%, transparent 70%), linear-gradient(0deg, #142439eb, transparent 25%); } -[data-theme='night'] .hero .primary { background: #dfb18b; border-color: #dfb18b; color: #202b36; } -[data-theme='night'] .hero .primary:hover { background: #f5ccaa; } -[data-theme='night'] .steps { background: #202f3a; } -[data-theme='night'] .steps-grid article { border-color: #5b6b78; } -[data-theme='night'] .tag { color: #c6cece; } -[data-theme='night'] .step-foot { border-color: var(--border); } -[data-theme='night'] .stack { background: #101d29; --border: #405260; --muted: #bec8ce; } -[data-theme='night'] .awards-grid .champion { background: #774331; } -[data-theme='night'] .bounties { background: #202c36; } -[data-theme='night'] .bounty-list { border-color: #647480; } -[data-theme='night'] .repo { color: #b6c6c1; } -[data-theme='night'] .faq { background: #243234; } -[data-theme='night'] .faq details { border-color: #495a59; } -[data-theme='night'] .participate { background: #101d29; } -[data-theme='night'] .primary { color: #1d2933; } -[data-theme='night'] .primary:hover { background: #f4c7a5; border-color: #f4c7a5; color: #1d2933; } -@media (min-width: 1201px) and (max-width: 1320px) { - .menu-toggle { display: block; border: 1px solid var(--border); color: var(--ink); background: transparent; padding: 8px 14px; } - .header nav { display: none; position: absolute; inset: 100% 0 auto; padding: 24px var(--gutter); background: var(--paper); border-bottom: 1px solid var(--border); } - .header nav.open { display: flex; flex-wrap: wrap; gap: 24px; } -} -@media (max-width: 760px) { - [data-theme='night'] .hero-shade { background: linear-gradient(90deg, #102035e3, #10203588 70%, #10203545), linear-gradient(0deg, #101e30ed, transparent 55%); } -} -@media (max-width: 480px) { - .header-controls { gap: 6px; } - .theme-toggle { padding: 8px; } - .theme-toggle span { display: none; } -} - -.create-wordmark { font: 500 21px/1 "Manrope", sans-serif; letter-spacing: -.035em; } -@media (max-width: 480px) { .create-wordmark { font-size: 18px; } .brand { gap: 7px; } } -@media (max-width: 380px) { .header { padding-inline: 10px; gap: 6px; } .brand-logo { width: 54px; } .brand { padding-right: 7px; } .header-brand-group { gap: 7px; } } - -/* Shared narrow navigation: 1280px container with 24px insets. */ -.header { padding-inline: max(24px, calc((100% - 1232px) / 2)); min-height: 64px; } -@media (max-width: 760px) { .header { padding-inline: 16px; } } - -/* The header overlays the full-height scene until the reader scrolls. */ -.header { position: fixed; inset: 0 0 auto; transition: background-color .35s ease, border-color .35s ease, color .35s ease; } -.header:not(.is-scrolled):not(.menu-is-open) { background: transparent; border-bottom-color: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; color: #fff7e9; } -.header:not(.is-scrolled):not(.menu-is-open) .brand { border-color: #fff7e950; } - -.header:not(.is-scrolled):not(.menu-is-open) .series-trigger, -.header:not(.is-scrolled):not(.menu-is-open) .series-trigger svg, -.header:not(.is-scrolled):not(.menu-is-open) .nav-cta, -.header:not(.is-scrolled):not(.menu-is-open) .theme-toggle, -.header:not(.is-scrolled):not(.menu-is-open) .menu-toggle { color: #fff7e9; border-color: #fff7e960; } -.header nav.open { color: var(--ink); } -.hero { min-height: 100svh; padding-top: 64px; } -.hero-media .hero-day, .hero-media .hero-night { position: absolute; inset: 0; } -.hero-media .hero-night { opacity: 0; transition: opacity 1.6s cubic-bezier(.22,.61,.36,1); } -.hero-media .hero-night.visible { opacity: 1; } -.hero::after { content: ''; position: absolute; inset: 0 0 auto; height: 120px; background: linear-gradient(#10202865, transparent); pointer-events: none; z-index: -1; } -body, .section, .steps, .stack, .bounties, .faq, .participate, footer, .primary, .series-panel { transition: background-color 1.2s ease, color 1.2s ease, border-color 1.2s ease; } -.theme-toggle svg { transition: transform .6s ease; } -.theme-toggle:hover svg { transform: rotate(20deg); } -.theme-toggle[aria-busy='true'] svg { animation: theme-await 1.6s ease-in-out infinite; } -@keyframes theme-await { 50% { opacity: .4; transform: rotate(25deg); } } -@media (prefers-reduced-motion: reduce) { - .hero-media .hero-night, .header, body, .section, .steps, .stack, .bounties, .faq, .participate, footer, .primary, .series-panel, .theme-toggle svg { transition: none; } - .theme-toggle[aria-busy='true'] svg { animation: none; } -} -/* A steady readability scrim avoids a hard flash during the image dissolve. */ -.hero-shade, [data-theme='night'] .hero-shade { background: linear-gradient(90deg, #172927df 0%, #20332fba 24%, #23332e30 49%, transparent 70%), linear-gradient(0deg, #1c2b29e0 0%, transparent 25%); } -@media (max-width: 760px) { - .hero-shade, [data-theme='night'] .hero-shade { background: linear-gradient(90deg, #1c302ddb, #1c302d78 70%, #1c302d35), linear-gradient(0deg, #1b2d2bed, transparent 55%); } -} - -.locale-toggle { display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; padding: 0 7px; font: 500 12px 'Manrope', 'Noto Serif SC', sans-serif; background: transparent; color: var(--ink); border: 1px solid var(--border); } -.header:not(.is-scrolled):not(.menu-is-open) .locale-toggle { color: #fff7e9; border-color: #fff7e960; } -html[lang='en'] .header nav { gap: 16px; font-size: 13px; } -html[lang='en'] .section-heading h2 { line-height: 1.18; } -html[lang='en'] .steps-grid h3 { line-height: 1.3; } -html[lang='en'] .hero-bottom { letter-spacing: 0; } -@media (max-width: 480px) { - .header .series-label { display: none; } - .header .series-trigger { min-height: 36px; min-width: 22px; justify-content: center; } - .header-controls { gap: 5px; } -} - -.compact-bounties { display: grid; grid-template-columns: 1fr 1fr; column-gap: 32px; margin-top: 28px; } -.compact-bounties details { border-bottom: 1px solid var(--border); } -.compact-bounties summary { display: grid; grid-template-columns: 24px 1fr auto; align-items: center; gap: 12px; min-height: 64px; padding: 14px 0; font-size: 14px; cursor: pointer; } -.compact-bounties .bounty-number { color: var(--accent); font: 11px var(--mono); } -.compact-bounties .repo { font-size: 11px; } -.compact-bounties p { margin: 0 0 18px 36px; font-size: 14px; color: var(--muted); } -.compact-timeline details { border-bottom: 1px solid var(--border); } -.compact-timeline summary { display: grid; grid-template-columns: 76px 1fr; gap: 16px; padding: 18px 0; font-size: 15px; cursor: pointer; } -.compact-timeline .session-time { font: 12px var(--mono); color: var(--accent); padding-top: 3px; } -.compact-timeline details > div { padding: 0 0 18px 92px; } -.compact-timeline p { font-size: 14px; margin: 0 0 8px; } -.compact-bounties summary::after, .compact-timeline summary::after { content: none; } -.compact-bounties details[open] summary, .compact-timeline details[open] summary { color: var(--accent); } -.bounties, .schedule { padding-block: clamp(56px,6vw,88px); } -.contribution-note { margin-top: 28px; padding-top: 24px; } -@media(max-width:760px) { .compact-bounties { grid-template-columns: 1fr; } .compact-bounties .repo { grid-column: auto; } } -.compact-bounties summary { grid-template-columns: 24px 1fr auto 12px; } -.compact-timeline summary { grid-template-columns: 76px 1fr 12px; } -.compact-bounties summary::after, .compact-timeline summary::after { content: '+'; color: var(--accent); } -.compact-bounties details[open] summary::after, .compact-timeline details[open] summary::after { content: '−'; } - -.registration-status { display: inline-flex; align-items: center; justify-content: center; min-height: 36px; padding: 8px 12px; border: 1px solid var(--accent); color: var(--accent); font-size: 12px; line-height: 1.4; white-space: nowrap; } -.header:not(.is-scrolled):not(.menu-is-open) .registration-desktop { color: #fff7e9; border-color: #fff7e980; } -.registration-mobile { display: none; } -@media(max-width:760px) { .registration-desktop { display: none; } .registration-mobile { display: inline-flex; } } - -.brand:hover, .brand:focus-visible { color: inherit; } - -.intent-detail { margin: 28px 0 0; max-width: 400px; } -.terminal-figure .hero-detail img { aspect-ratio: auto; object-fit: contain; } - - -/* Chinese pages set in Noto Serif SC (思源宋体) throughout. */ -html[lang='zh-CN'] { --serif: 'Noto Serif SC', 'Cormorant Garamond', Georgia, serif; --sans: 'Noto Serif SC', 'Space Grotesk', serif; font-family: var(--sans); } -html[lang='zh-CN'] :is(h2, h3) { font-weight: 600; letter-spacing: .01em; } -html[lang='zh-CN'] .section-heading h2, html[lang='zh-CN'] .participate h2 { line-height: 1.3; } -.inline-link { color: var(--accent); white-space: nowrap; border-bottom: 1px solid currentColor; } -.inline-link:hover { color: var(--ink); } -.stack-list h3 a { color: inherit; } -.stack-list h3 a:hover { color: var(--accent); } diff --git a/events/agent2app-2026/src/useLocale.ts b/events/agent2app-2026/src/useLocale.ts deleted file mode 100644 index c369468..0000000 --- a/events/agent2app-2026/src/useLocale.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ref, watch } from 'vue' -import translations from './en.json' - -type Locale = 'zh' | 'en' -const requested = new URL(window.location.href).searchParams.get('lang') -let initial: Locale = 'zh' -try { if (localStorage.getItem('agent2app-locale') === 'en') initial = 'en' } catch { /* Storage is optional. */ } -if (requested === 'en' || requested === 'zh') initial = requested -const locale = ref(initial) -const english: Record = translations -const descriptions = { - zh: 'Agentic App 黑客松 2026:获奖奖池 ¥50,000(含现金奖金与 MiniMax Token 额度)。9 月 13 日报名、9 月 22 日开营,9 月 26 日起周末与国庆集中上课。初赛海选晋级 50 人,复赛评出一、二、三等奖,10 月 12 日线上决赛并公布结果。前三名将于 10 月 17 日到 GOSIM 黑客松现场展示作品并参加颁奖。单人、多人均可参赛,每位成员分别报名。以 OctoSense 为核心,以 robrix2 为主要开发基线,围绕邮件、即时消息、日历等 12 个场景构建 Agentic 小程序;软件协作可接入 hagency。评选最佳 Agentic 奖与最佳技术突破奖。', - en: 'Agentic App Hackathon 2026: RMB 50,000 in prizes, including cash and MiniMax token credits. Register September 13; kickoff September 22; classes start Saturday, September 26, on weekends and during the National Day holiday. Online qualifying selects 50 participants, who compete in the award round for First, Second and Third Prizes. The online final and award results are on October 12. The top three teams will showcase their projects and attend the awards ceremony at the GOSIM Hackathon on October 17. Solo and team entries welcome; every member registers. Build Agentic mini apps around 12 OctoSense scenarios with robrix2 as the primary baseline. Software collaboration can connect hagency. Awards recognize Agentic automation and technical breakthroughs.', -} -watch(locale, value => { - document.documentElement.lang = value === 'en' ? 'en' : 'zh-CN' - document.title = value === 'en' ? 'Agentic App Hackathon 2026 · The Intent Is the App' : 'Agentic App 黑客松 2026 · 意图,即应用' - document.querySelector('meta[name="description"]')?.setAttribute('content', descriptions[value]) - try { localStorage.setItem('agent2app-locale', value) } catch { /* Storage is optional. */ } -}, { immediate: true }) - -export function useLocale() { - const t = (text: string) => locale.value === 'en' ? (english[text] ?? text) : text - function toggleLocale() { - locale.value = locale.value === 'zh' ? 'en' : 'zh' - const url = new URL(window.location.href) - url.searchParams.set('lang', locale.value) - window.history.replaceState(window.history.state, '', url) - } - return { locale, t, toggleLocale } -} diff --git a/events/agent2app-2026/tsconfig.app.json b/events/agent2app-2026/tsconfig.app.json deleted file mode 100644 index d72aa75..0000000 --- a/events/agent2app-2026/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "@vue/tsconfig/tsconfig.dom.json", - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "types": ["vite/client"], - "allowArbitraryExtensions": true, - - /* Linting */ - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] -} diff --git a/events/agent2app-2026/tsconfig.json b/events/agent2app-2026/tsconfig.json deleted file mode 100644 index 1ffef60..0000000 --- a/events/agent2app-2026/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] -} diff --git a/events/agent2app-2026/tsconfig.node.json b/events/agent2app-2026/tsconfig.node.json deleted file mode 100644 index 8455dcb..0000000 --- a/events/agent2app-2026/tsconfig.node.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "es2023", - "lib": ["ES2023"], - "types": ["node"], - "skipLibCheck": true, - - /* Bundler mode */ - "module": "nodenext", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["vite.config.ts"] -} diff --git a/events/agent2app-2026/vite.config.ts b/events/agent2app-2026/vite.config.ts deleted file mode 100644 index e339791..0000000 --- a/events/agent2app-2026/vite.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -export default defineConfig({ plugins: [vue()], base: process.env.VITE_BASE_PATH || '/agenticapp26/' }) diff --git a/events/agentic-cosmos-2026/.env.example b/events/agentic-cosmos-2026/.env.example deleted file mode 100644 index 54b3fe6..0000000 --- a/events/agentic-cosmos-2026/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -# Public participant platform (registration, login, teams, submissions and docs). -VITE_AGENT_OBSERVER_URL=https://bh3gei.github.io/agent-observer -# Anonymous public leaderboard. Use the online phase so practice scores do not appear as final standings. -VITE_AGENT_OBSERVER_LEADERBOARD_API=https://vdiemcofukuxglqsmlyz.supabase.co/functions/v1/leaderboard?phase=online -VITE_SITE_URL=https://create.gosim.org/survey26 -VITE_BASE_PATH=/ -# This promotional site does not need Supabase credentials. Accounts stay on the platform. diff --git a/events/agentic-cosmos-2026/README.md b/events/agentic-cosmos-2026/README.md deleted file mode 100644 index dcf72b0..0000000 --- a/events/agentic-cosmos-2026/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# 巡天智能体 · Agent Observer - -官网保留赛事介绍、赛程、奖金和现有视觉设计。报名、登录、组队、提交、开发资料与赛事通知 -统一接入 https://bh3gei.github.io/agent-observer/ 。平台源码:https://github.com/BH3GEI/agent-observer 。 - -## 本地开发 - -从仓库根目录运行 `npm run dev:agentic-cosmos-2026`。 -构建检查:`npm run build --prefix events/agentic-cosmos-2026`。 -中英文文案在 `src/i18n/zh.ts` 与 `src/i18n/en.ts`,平台地址集中在 `src/registration.ts`。 - -## 平台接入 - -- 所有报名按钮和旧 `/register` 地址指向平台 `/register`。 -- 登录、队伍管理、提交、入门工具包、开发文档和赛事通知入口位于首页参赛区。 -- 用户在平台完成 Supabase Auth 登录;账号、队伍、存储与评测继续使用该平台已有的 Supabase 项目和 worker。 -- 官网仅调用匿名、允许 CORS 的公开 leaderboard Edge Function;不需要 anon key 或 service role key。 -- 首页展示 `phase=online` 的正式榜,避免把练习成绩当作正式比赛成绩;各阶段榜单可在平台查看。 -- 正式比赛提交智能体程序包(当前平台 Python 3.12);练习支持结果文件或程序包。接口、计分和通知以平台为准。 - -默认地址开箱可用。可通过 `VITE_AGENT_OBSERVER_URL` 和 `VITE_AGENT_OBSERVER_LEADERBOARD_API` 覆盖。 -根目录构建脚本对应 `COSMOS_VITE_AGENT_OBSERVER_URL`、`COSMOS_VITE_AGENT_OBSERVER_LEADERBOARD_API`; -GitHub Pages workflow 读取同名 repository variables。未配置时使用源码中的已验证默认值。 - -## 旧报名数据与数据库 - -腾讯问卷不再作为官网报名入口。既有问卷记录不会自动成为 Supabase Auth 账号; -已填问卷的参与者需要在比赛平台注册账号并创建或加入队伍。 -如果主办方需要导入既有资料,应先取得问卷导出文件并与平台维护者核对字段和处理方式; -不要自动创建密码、默认认领邮箱或把问卷答案直接写入公开资料表。 - -本目录旧 `RegisterPage.vue` 和 `supabase/migrations/` 属于之前的独立报名实现,当前路由不再使用。 -不要把这些迁移应用到 BH3GEI 平台的现有数据库;平台 schema 由其自身仓库维护。 -不需要更改平台 Supabase 的 Auth 回调域名,因为注册和登录继续发生在平台原域名。 diff --git a/events/agentic-cosmos-2026/config/event.example.yaml b/events/agentic-cosmos-2026/config/event.example.yaml deleted file mode 100644 index 711c79a..0000000 --- a/events/agentic-cosmos-2026/config/event.example.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# Reference copy of the confirmed 2026 event data. -# The website currently reads public copy from src/i18n/en.ts and src/i18n/zh.ts. - -event: - name: "Agent Observer" - tagline: "Build an agent that decides where the telescope looks next" - organizer: "GOSIM Foundation" - dates: "October 1–17, 2026" - start_time: "2026-10-01T00:00:00+08:00" - end_time: "2026-10-17T23:59:59+08:00" - format: "Online + Awards at GOSIM Shenzhen" - registration_status: "coming_soon" - team_size: null - registration_deadline: null - participation_fee: null - contact: null - -awards: - total_pool: "$5,500" - count: 6 - tiers: - - name: "First Prize" - prize: "$2,000" - count: 1 - - name: "Second Prize" - prize: "$1,000" - count: 2 - - name: "Third Prize" - prize: "$500" - count: 3 - -schedule: - - name: "Online Training" - dates: "October 1–4" - format: "Online" - - name: "Online Competition" - dates: "October 5–7" - format: "Online" - - name: "Awards Day" - dates: "October 17" - format: "GOSIM Shenzhen" diff --git a/events/agentic-cosmos-2026/docs/goaihz-benchmark-and-improvement-plan.md b/events/agentic-cosmos-2026/docs/goaihz-benchmark-and-improvement-plan.md deleted file mode 100644 index e31bac3..0000000 --- a/events/agentic-cosmos-2026/docs/goaihz-benchmark-and-improvement-plan.md +++ /dev/null @@ -1,270 +0,0 @@ -# Agent Observer 官网对标分析与改进方案 - -> 对标对象:[GOAI 世界人工智能开源大赛](https://goaihz.com) -> 分析日期:2026 年 8 月 22 日 -> 适用站点:`/survey26/`(巡天智能体 / Agent Observer) - -## 一、结论摘要 - -Agent Observer 当前的核心优势是鲜明的天文主题、强视觉识别和清楚的赛题愿景;主要不足是赛事决策信息与参赛服务信息不够完整。页面更接近一张高质量的赛事海报,而 GOAI 已形成从认知、判断、报名到交付的完整赛事服务链路。 - -本轮改进不应复制 GOAI 的政企蓝色视觉或庞大的多赛道结构,而应学习它的信息组织与转化能力。在保留现有“观测站 / 夜空 / 900 秒决策”品牌表达的基础上,优先补齐首屏关键信息、评测标准、观测结果提交说明、FAQ、可信度信息和有效报名入口。 - -建议将官网目标明确为: - -1. 让第一次访问的用户在 10 秒内判断赛事是什么、何时进行、奖金多少、是否适合自己。 -2. 让有兴趣的用户在 3 分钟内理解如何参加、提交什么、怎样获胜。 -3. 让准备参赛的用户可以在官网完成报名、组队、阅读规则、进入 CosmosBench 和查看排名。 - -## 二、对标范围与方法 - -本报告从五个维度比较 GOAI 与 Agent Observer: - -- 信息架构:页面是否覆盖完整参赛旅程。 -- 首屏表达:是否快速传达关键决策信息。 -- 参赛转化:是否持续提供明确、有效的下一步行动。 -- 赛事可信度:是否充分展示组织方、专家、合作伙伴和规则。 -- 内容可执行性:参赛者能否据此完成开发、提交和现场准备。 - -GOAI 是综合性、多赛道、大规模赛事;Agent Observer 是聚焦单一科学任务的专项赛事。因此本报告关注可迁移的方法,不以内容数量或机构规模作为直接目标。 - -## 三、现状对比 - -| 维度 | GOAI | Agent Observer 当前状态 | 判断 | -|---|---|---|---| -| 首屏关键信息 | 集中呈现赛事规模、赛程、地点和报名入口 | 赛题愿景突出,奖金、形式和报名状态不够集中 | 应强化 | -| 赛事定位 | 明确说明面向人群、赛道和价值 | “每 900 秒决定下一次观测”辨识度很高 | 保留并前置 | -| 参赛路径 | 报名、手册、赛道详情、流程、FAQ 相互连接 | 已有报名、赛程和赛事说明,但入口关系较弱 | 应串联 | -| 提交要求 | 明确列出结果格式、截止时间与入口 | 尚未明确最终观测结果格式 | 高优先级补齐 | -| 评审与获胜条件 | 明确评审重点及阶段要求 | 仅概述科学产出、均匀性、效率和合规 | 应形成评分卡 | -| 奖项说明 | 奖金与资源支持均有独立展示 | 已新增 $5,500 奖金 Section | 已完成基础版 | -| FAQ | 覆盖资格、团队、现场、API、开源和奖金发放 | 暂无集中 FAQ | 高优先级补齐 | -| 信任背书 | 主办方、专家、社区、媒体和合作伙伴充分展示 | 主办与技术支持关系不够显著 | 逐步补齐 | -| 内容资源 | 参赛手册、模板、海报和公告可下载 | 赛事说明较完整,模板和下载物不足 | 应增加资源中心 | -| 转化入口 | 导航、内容区和页尾持续出现报名 CTA | 多处仍显示“即将开始”,缺少统一状态 | 上线报名前统一 | -| 品牌辨识度 | 稳健、机构化,但视觉相对通用 | 天文控制室与海报语言鲜明 | 不应削弱 | - -## 四、值得学习的设计原则 - -### 4.1 首屏先回答参赛决策问题 - -首屏除了赛事名和一句话任务,还应立即显示: - -- 总奖金池:$5,500。 -- 线上培训:10 月 1–4 日。 -- 线上比赛:10 月 5–7 日。 -- 颁奖:10 月 17 日,GOSIM 深圳。 -- 参赛范围:全球开放;个人及团队可参加。 -- 主行动:立即报名。 -- 次行动:查看赛题或赛事说明。 - -“每 900 秒做一次观测决策”应继续作为记忆点,但不能替代日期、奖金和报名状态。 - -### 4.2 按用户旅程组织页面 - -推荐首页顺序: - -1. Hero:赛事定位、关键数字、报名。 -2. Mission:一句话解释任务与输入输出。 -3. Schedule:培训、决赛、颁奖。 -4. Prizes:奖金结构。 -5. Evaluation:如何评分、如何获胜。 -6. Submission:如何提交智能体生成的观测结果。 -7. Leaderboard:实时排名与评测入口。 -8. Credibility:主办、技术支持、专家和合作伙伴。 -9. FAQ:消除报名与参赛阻力。 -10. Final CTA:报名、组队、下载手册。 - -长篇的科学背景、观测策略和技术细节继续放在赛事说明页,首页只保留摘要和深链接。 - -### 4.3 把规则写成可执行信息 - -参赛者需要的不只是“设计一个数字观测员”,还需要明确: - -- 观测结果的文件格式、字段与大小限制。 -- 每日结果提交次数、排行榜刷新方式和最终封榜规则。 -- 平台如何校验并评分提交的观测结果。 - -未确认的规则应显示“待规则发布确认”,不可用推测性文案填补。 - -### 4.4 用可信度降低新赛事的参与顾虑 - -建议逐步展示: - -- GOSIM Foundation 主办身份。 -- CosmosBench 的技术支持与评测职责。 -- 已确认的天文、巡天或智能体领域专家。 -- GOSIM 深圳大会与会场链接。 -- 官方联系邮箱、参赛社群和行为准则。 -- 已确认合作机构;未确认机构不得提前展示。 - -### 4.5 保持单赛题网站的专注度 - -GOAI 的大量机构、赛道和资源内容服务于综合赛事规模。Agent Observer 不应照搬其信息密度。每个首页 Section 应只解决一个问题,详细内容进入赛事说明、规则、FAQ 或资源页。 - -## 五、分阶段改进方案 - -### P0:报名开放前必须完成 - -#### 1. 强化首屏信息层级 - -改动内容: - -- 将 `$5,500`、`10.1–10.17`、`Online + Shenzhen Awards` 作为首屏指标展示。 -- 将不可点击的“报名即将开始”替换为统一的状态组件。 -- 报名开放后提供“立即报名”和“查看赛事说明”两个明确入口。 -- 中英文名称固定为“巡天智能体 / Agent Observer”。 - -验收标准: - -- 桌面端和移动端首屏无需滚动即可看到名称、日期、奖金和 CTA。 -- 所有报名入口状态一致。 -- 中英文页面核心数字完全一致。 - -#### 2. 新增评测标准 Section - -建议字段: - -- 科学产出。 -- 天区覆盖均匀性。 -- 时间利用效率。 -- 天气风险管理。 -- 规则合规。 -- 决策可解释性。 - -验收标准: - -- 首页提供人类可理解的评分摘要。 -- 赛事说明页链接到正式评分公式或规则版本。 -- 明确排行榜分数是否直接决定最终名次。 - -#### 3. 新增观测结果提交 Section - -明确说明参赛者在本地构建并运行智能体,向比赛平台提交的内容只有智能体生成的观测结果,不提交智能体项目、源代码、架构说明或轨迹日志。 - -验收标准: - -- 观测结果提交说明包含格式、截止时间和提交入口。 -- 未确认项明确标为待确认。 - -#### 4. 新增 FAQ - -首批问题: - -- 不懂天文能否参加? -- 可以个人参赛吗? -- 团队人数上限是多少? -- 是否必须到深圳? -- 海外团队如何参加? -- 可以使用商业模型或 API 吗? -- CosmosBench 是否免费? -- 是否必须开源? -- 排行榜分数是否等于最终成绩? -- 奖金为税前还是税后,如何发放? - -验收标准: - -- FAQ 可以直接链接到具体问题。 -- 答案来源于正式规则或团队确认记录。 -- 待确认问题不做推测性回答。 - -### P1:赛事启动前完成 - -#### 5. 建立资源中心 - -内容包括: - -- 赛事手册。 -- Mission Card。 -- Starter Kit 与基线 Agent。 -- CosmosBench 使用说明。 -- 观测结果模板。 -- 常见错误与调试指南。 -- 宣传海报和社交媒体素材。 - -#### 6. 增加组织与专家信息 - -只展示已确认信息,按“主办 / 技术支持 / 科学顾问 / 评委 / 社区合作”分类。人物卡片至少包含姓名、机构、角色和确认状态。 - -#### 7. 统一报名、组队与评测入口 - -建议形成单一流程: - -```text -了解赛事 → 报名/登录 → 创建或加入团队 → 阅读规则 → 运行智能体 → 提交观测结果 → 查看排名 -``` - -每一步应提供状态反馈和清晰的下一步按钮,避免官网、报名页和 CosmosBench 之间互相迷路。 - -### P2:比赛期间持续完善 - -#### 8. 赛事状态与公告 - -- 在导航或首屏显示当前阶段。 -- 发布规则变更、系统维护、提交截止提醒和封榜公告。 -- 所有公告带发布时间、版本号和影响范围。 - -#### 9. 排行榜上下文 - -- 显示更新时间、评测场景版本和封榜状态。 -- 解释分数构成和同分规则。 -- 提供 CosmosBench 完整榜单入口。 -- 接口异常时显示明确状态,不应让空榜看起来像无人参赛。 - -#### 10. 结果与赛事沉淀 - -- 获奖团队、作品和现场展示。 -- 可复现方案或技术文章。 -- 赛事数据摘要。 -- 下一届或社区持续参与入口。 - -## 六、实施优先级与工作量建议 - -| 优先级 | 工作项 | 预估复杂度 | 依赖 | -|---|---|---:|---| -| P0 | 首屏关键信息与 CTA | 小 | 报名状态与入口 | -| P0 | 评测标准 Section | 中 | 正式评分规则 | -| P0 | 观测结果提交 Section | 中 | 结果格式规范 | -| P0 | FAQ | 中 | 运营、技术、财务确认 | -| P1 | 资源中心 | 中 | 手册、模板、Starter Kit | -| P1 | 组织方、专家与合作伙伴 | 小—中 | 已确认名单与素材 | -| P1 | 报名到评测的流程串联 | 中—大 | Supabase、CosmosBench | -| P2 | 公告与状态系统 | 中 | 内容维护机制 | -| P2 | 排行榜解释与异常状态 | 中 | CosmosBench API | -| P2 | 结果归档 | 中 | 比赛结果与授权素材 | - -## 七、待业务确认的数据 - -以下信息在团队版安排中尚未确定,网站不得自行补全: - -- 现场邀请队伍数与总人数。 -- 团队人数上限。 -- 报名开放时间与截止时间。 -- 是否要求获奖队伍必须到场。 -- 差旅、住宿及现场接待政策。 -- 奖金税务、币种、汇款与领取流程。 -- 商业模型、外部 API、网络访问和算力限制。 -- 开源范围及许可证要求。 -- 观测结果格式、提交次数与封榜规则。 -- 排行榜成绩和最终名次之间的关系。 -- 已确认主办、技术支持、专家、评委及合作伙伴名单。 - -建议为这些字段建立一个运营确认表;确认后先更新单一数据源,再生成中英文页面,避免日期与规则再次分叉。 - -## 八、不建议照搬的内容 - -- 不复制 GOAI 的政企蓝色视觉体系;保留 Agent Observer 的夜空、观测站和控制室语言。 -- 不复制综合赛事的超长首页和庞大 Logo 墙。 -- 不用未经确认的专家、合作方和资源承诺填充可信度模块。 -- 不把赛事规则只放在 PDF 中;关键规则必须可在网页浏览和搜索。 -- 不设置多个含义不同的报名入口。 - -## 九、建议的下一步 - -1. 由赛事运营确认第七章中的 P0 数据。 -2. 设计并实现首屏指标、评分标准、交付物和 FAQ 四个模块。 -3. 将赛事名称、赛程、奖金和报名状态收敛到单一配置源。 -4. 完成中英文内容审校、移动端检查和报名流程测试。 -5. 报名开放后,以真实链接替换所有“即将开始”占位状态。 - -完成 P0 后,官网应从“赛事概念展示页”升级为“能够支持用户做出参赛决定并开始行动的赛事官网”。 diff --git a/events/agentic-cosmos-2026/index.html b/events/agentic-cosmos-2026/index.html deleted file mode 100644 index 5df359e..0000000 --- a/events/agentic-cosmos-2026/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - 巡天智能体 · Agent Observer - - - - - - - -
- - - diff --git a/events/agentic-cosmos-2026/package-lock.json b/events/agentic-cosmos-2026/package-lock.json deleted file mode 100644 index 1401418..0000000 --- a/events/agentic-cosmos-2026/package-lock.json +++ /dev/null @@ -1,1976 +0,0 @@ -{ - "name": "agentic-cosmos-2026", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "agentic-cosmos-2026", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.57.4", - "vue": "^3.5.30", - "vue-router": "^4.6.4" - }, - "devDependencies": { - "@tailwindcss/vite": "^4.2.2", - "@types/node": "^24.12.0", - "@vitejs/plugin-vue": "^6.0.5", - "@vue/tsconfig": "^0.9.0", - "tailwindcss": "^4.2.2", - "typescript": "~5.9.3", - "vite": "^8.0.1", - "vue-tsc": "^3.2.5" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", - "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.2.tgz", - "integrity": "sha512-l7x215OGvo1s52JWmR8U/DAVzEDWBCIbTm28aeJV/WDTSHgcKXaZTuBT0hJMs5NggilfJTW3clZVvd24yfKJxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.2.tgz", - "integrity": "sha512-9u9Xv6c1AJZT0FfwH5vrMG5Jjcwhc1MlyrPu0XfTqkzsmqfks2M6W/o5XwAJgVVN/jHpqqngC1WevHKKTIUtIA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.2.tgz", - "integrity": "sha512-9W1mbGZAfW3oqd85bhBkmpyHCCzL1TeG/zFFP3vg7b0rlly8cxOcre5nXwz+LHazCwac2MNWgPdPCHndABjpWQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.2.tgz", - "integrity": "sha512-0p1lhiCSCyaerFwtrdZQUx7NqGk6LQnaRKWX7tFQqwQgvX0rjM15cIkm3pax1UpEakK14C4mOxx/jSqCBdBRqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.2.tgz", - "integrity": "sha512-e+cOJXrJ2L3zx6YzqPg+f6Wbk3V1cKB8bOhbaYdVYN3DdquzNdRAmrbETz1qnt5yp/c7JNlNjmITiA2cVneQ7w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.2.tgz", - "integrity": "sha512-JsSMsj6sNat/MuhG5fnBD7QgbtpHKVe30x5/bAVirDHdhoQRXJkF6xc0Jqk8O4fiCUQAzMOoH9wZi3m60c8wtg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.2.tgz", - "integrity": "sha512-B5G/zJdHaoJn9vD50eGHWkiWfmq8Uhi3IiLPJTzmZTrAalk1bztUikSXo0qga18ibE0IXboyeMUnhPjhAJ45wQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.2.tgz", - "integrity": "sha512-6mC/awzKka8W6EoekjegpfGkjz8jXWDX63pqu/HYVpyKtZfu65Jsh4QAH3Kej3CAv/c1oGX7psTmFEbr0mDxLA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.2.tgz", - "integrity": "sha512-412MX9fJLdA1IK28EZnc8jYv2HRTleOZgfLQumJ5zy7OeJLZlg/CETwFaXjNmGVxG51cFHpKLqb5LKvBC+HsHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.2.tgz", - "integrity": "sha512-Q/+HI/ToJafZ1iCqGgVQXUEkIjufHCTF0gBQ2a5o3cg7GJ2h0qyq3nvvSmU+bGda2/7ygXpTY4TM6gO9OhQ0ZA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.2.tgz", - "integrity": "sha512-ZKp/w41n6wCvxzxQHtQSbuphfX3Y4cCvbjkKHusrLx4lh+JWLTU7StSltO/DKARISzbj368d+qUaCjI8K2wzXw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.2.tgz", - "integrity": "sha512-pxE6xD4KS3eAROkKK5yrhB9/3+vhlhVGMvlQLbdpzrBGDbKrnzx3RLwPaHvasLo6jgaiBLn7e04Df9C4tYhjmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.2.tgz", - "integrity": "sha512-4MqEue5re+xIZzAWsB8sj0P1kqZySWqIuN4t6QaIO/YA6SFwySOLruvWQFzfmqk8LBK2P30KCSJwf6mJCZZ5/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.2.tgz", - "integrity": "sha512-NweNxxD0Nf9t8v7kodun45Ijp3EIwYY+uydPP6qBEYvfBqhIjN6dZMzlQja3tqX/aLs3F3Uz+AxDpKgRhpOZQg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", - "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@supabase/auth-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.112.3.tgz", - "integrity": "sha512-NA0rsgAlWZPvbhw8aUdmgfpHVgUAcd8zK5ov43l++o1bLIPXZhRiAlRobhwF5AatQuovpqxsMH50F4oyyV4XZw==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.112.3.tgz", - "integrity": "sha512-gfv481mTOVWtZIJgXupxZpni2V2UWPf6jeF/jOK7HdMHdH+mt6sU0sHHwf0POsPip8ltlulu9OUHgwVzl5ddRw==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/phoenix": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.5.tgz", - "integrity": "sha512-aAn9H9ovVyeApKy11OWOrrOGq8DV68yWeH4ud2lN9fzn4aO8Zb5GLL9m1pUg9nLqIcT+ZDfAcsZe0E/nqdv2lw==", - "license": "MIT" - }, - "node_modules/@supabase/postgrest-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.112.3.tgz", - "integrity": "sha512-+Mf6uCpzr00bqxwX8hTK2X2L9eAL/1vuOjdEjx6upz9ulb0RmQT16XeU/JkMUlVHw/B46ZnPa2busY4Kd9YCzw==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.112.3.tgz", - "integrity": "sha512-E6wljXWs7DUOloyIB69i3YFInWE6IyCvgTAbQ0KYxOHv26FdA1KzEXTuzxrYEdf70t406Z9BRwUlGyclGF2FXA==", - "license": "MIT", - "dependencies": { - "@supabase/phoenix": "0.4.5", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.112.3.tgz", - "integrity": "sha512-oSK61tzlUvg+BWPqpKQCu9qqonsO26btaoAR9D6Gest2aj7xUqToj9rKyaoYOJczkhg9BjqA1REbYy9tPI4bDA==", - "license": "MIT", - "dependencies": { - "iceberg-js": "^0.8.1", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.112.3", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.112.3.tgz", - "integrity": "sha512-Jv1bxVQmEJNkjvPEhFaKjPzsh+Ozyew6lWGD+SoYcsclDEP1z7yEvKvfUQfzy0DkxRIQnZNxmmWtAzw5XLTQoA==", - "license": "MIT", - "dependencies": { - "@supabase/auth-js": "2.112.3", - "@supabase/functions-js": "2.112.3", - "@supabase/postgrest-js": "2.112.3", - "@supabase/realtime-js": "2.112.3", - "@supabase/storage-js": "2.112.3" - }, - "engines": { - "node": ">=22.0.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - } - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", - "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", - "tailwindcss": "4.2.2" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7 || ^8" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/node": { - "version": "24.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", - "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", - "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "1.0.0-rc.2" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", - "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.28" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", - "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", - "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", - "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/shared": "3.5.30", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", - "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", - "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/compiler-core": "3.5.30", - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.8", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", - "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/language-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz", - "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "@vue/compiler-dom": "^3.5.0", - "@vue/shared": "^3.5.0", - "alien-signals": "^3.0.0", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "picomatch": "^4.0.2" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", - "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", - "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", - "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/runtime-core": "3.5.30", - "@vue/shared": "3.5.30", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", - "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30" - }, - "peerDependencies": { - "vue": "3.5.30" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", - "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", - "license": "MIT" - }, - "node_modules/@vue/tsconfig": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.0.tgz", - "integrity": "sha512-RP+v9Cpbsk1ZVXltCHHkYBr7+624x6gcijJXVjIcsYk7JXqvIpRtMwU2ARLvWDhmy9ffdFYxhsfJnPztADBohQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": "5.x", - "vue": "^3.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/alien-signals": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", - "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/iceberg-js": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", - "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/rolldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.2.tgz", - "integrity": "sha512-opwpo1tQBAcpSUJDt94B7hhLNGOKjCdE//XXjeLrnx9b83bjnw45tXdg1b09yEw/VLFBJGZpwRULMmOZo7ol+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.142.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.2", - "@rolldown/binding-darwin-arm64": "1.2.2", - "@rolldown/binding-darwin-x64": "1.2.2", - "@rolldown/binding-freebsd-x64": "1.2.2", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.2", - "@rolldown/binding-linux-arm64-gnu": "1.2.2", - "@rolldown/binding-linux-arm64-musl": "1.2.2", - "@rolldown/binding-linux-ppc64-gnu": "1.2.2", - "@rolldown/binding-linux-s390x-gnu": "1.2.2", - "@rolldown/binding-linux-x64-gnu": "1.2.2", - "@rolldown/binding-linux-x64-musl": "1.2.2", - "@rolldown/binding-openharmony-arm64": "1.2.2", - "@rolldown/binding-win32-arm64-msvc": "1.2.2", - "@rolldown/binding-win32-x64-msvc": "1.2.2" - } - }, - "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz", - "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.23", - "rolldown": "~1.2.0", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } - }, - "node_modules/vite/node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", - "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-sfc": "3.5.30", - "@vue/runtime-dom": "3.5.30", - "@vue/server-renderer": "3.5.30", - "@vue/shared": "3.5.30" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-tsc": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.6.tgz", - "integrity": "sha512-gYW/kWI0XrwGzd0PKc7tVB/qpdeAkIZLNZb10/InizkQjHjnT8weZ/vBarZoj4kHKbUTZT/bAVgoOr8x4NsQ/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.28", - "@vue/language-core": "3.2.6" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - } - } -} diff --git a/events/agentic-cosmos-2026/package.json b/events/agentic-cosmos-2026/package.json deleted file mode 100644 index f9f141c..0000000 --- a/events/agentic-cosmos-2026/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "agentic-cosmos-2026", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vue-tsc -b && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@supabase/supabase-js": "^2.57.4", - "vue": "^3.5.30", - "vue-router": "^4.6.4" - }, - "devDependencies": { - "@tailwindcss/vite": "^4.2.2", - "@types/node": "^24.12.0", - "@vitejs/plugin-vue": "^6.0.5", - "@vue/tsconfig": "^0.9.0", - "tailwindcss": "^4.2.2", - "typescript": "~5.9.3", - "vite": "^8.0.1", - "vue-tsc": "^3.2.5" - } -} diff --git a/events/agentic-cosmos-2026/public/favicon.svg b/events/agentic-cosmos-2026/public/favicon.svg deleted file mode 100644 index 6893eb1..0000000 --- a/events/agentic-cosmos-2026/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/agentic-cosmos-2026/public/gosim-logo.svg b/events/agentic-cosmos-2026/public/gosim-logo.svg deleted file mode 100644 index 3cec679..0000000 --- a/events/agentic-cosmos-2026/public/gosim-logo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/events/agentic-cosmos-2026/public/media/survey-milky-way.jpg b/events/agentic-cosmos-2026/public/media/survey-milky-way.jpg deleted file mode 100644 index 1eb5a6e..0000000 Binary files a/events/agentic-cosmos-2026/public/media/survey-milky-way.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/public/media/survey-night-sky.mp4 b/events/agentic-cosmos-2026/public/media/survey-night-sky.mp4 deleted file mode 100644 index 804e236..0000000 Binary files a/events/agentic-cosmos-2026/public/media/survey-night-sky.mp4 and /dev/null differ diff --git a/events/agentic-cosmos-2026/public/sponsors/kimi.png b/events/agentic-cosmos-2026/public/sponsors/kimi.png deleted file mode 100644 index fc0ad55..0000000 Binary files a/events/agentic-cosmos-2026/public/sponsors/kimi.png and /dev/null differ diff --git a/events/agentic-cosmos-2026/public/sponsors/minimax.png b/events/agentic-cosmos-2026/public/sponsors/minimax.png deleted file mode 100644 index dce8484..0000000 Binary files a/events/agentic-cosmos-2026/public/sponsors/minimax.png and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/App.vue b/events/agentic-cosmos-2026/src/App.vue deleted file mode 100644 index 3af0da8..0000000 --- a/events/agentic-cosmos-2026/src/App.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/assets/images/cosmos-control-room.jpg b/events/agentic-cosmos-2026/src/assets/images/cosmos-control-room.jpg deleted file mode 100644 index 267a4b2..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/cosmos-control-room.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/cosmos-dome.jpg b/events/agentic-cosmos-2026/src/assets/images/cosmos-dome.jpg deleted file mode 100644 index cc4f0a3..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/cosmos-dome.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/cosmos-instrument.jpg b/events/agentic-cosmos-2026/src/assets/images/cosmos-instrument.jpg deleted file mode 100644 index f6d5c4c..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/cosmos-instrument.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/cosmos-observatory-hero.jpg b/events/agentic-cosmos-2026/src/assets/images/cosmos-observatory-hero.jpg deleted file mode 100644 index 3747b3f..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/cosmos-observatory-hero.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/survey-agent-strategy.jpg b/events/agentic-cosmos-2026/src/assets/images/survey-agent-strategy.jpg deleted file mode 100644 index d0f92a4..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/survey-agent-strategy.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/survey-cosmic-web.jpg b/events/agentic-cosmos-2026/src/assets/images/survey-cosmic-web.jpg deleted file mode 100644 index 3ad25aa..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/survey-cosmic-web.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/survey-observed-universe.jpg b/events/agentic-cosmos-2026/src/assets/images/survey-observed-universe.jpg deleted file mode 100644 index d4ff0e0..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/survey-observed-universe.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/survey-redshift-map.jpg b/events/agentic-cosmos-2026/src/assets/images/survey-redshift-map.jpg deleted file mode 100644 index dd04c47..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/survey-redshift-map.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/images/survey-review-overlay.jpg b/events/agentic-cosmos-2026/src/assets/images/survey-review-overlay.jpg deleted file mode 100644 index ad951f9..0000000 Binary files a/events/agentic-cosmos-2026/src/assets/images/survey-review-overlay.jpg and /dev/null differ diff --git a/events/agentic-cosmos-2026/src/assets/styles/main.css b/events/agentic-cosmos-2026/src/assets/styles/main.css deleted file mode 100644 index 3602391..0000000 --- a/events/agentic-cosmos-2026/src/assets/styles/main.css +++ /dev/null @@ -1,460 +0,0 @@ -@import "tailwindcss"; - -@theme { - --color-bg-primary: #101d29; - --color-bg-secondary: #18242f; - --color-bg-card: #16232f; - --color-bg-elevated: #1c2a37; - --color-text-primary: #f0e9dd; - --color-text-secondary: #b8c1c6; - --color-text-tertiary: #8f9ba1; - --color-text-muted: #6b7a83; - --color-border: #41515c; - --color-border-subtle: #2a3946; - --color-border-hover: #edb28b; - --color-border-strong: #f0e9dd; - --color-accent: #edb28b; - --color-accent-hover: #f5ccaa; - --color-accent-critical: #edb28b; - --color-accent-critical-dark: #c98d66; - --color-accent-blue: #edb28b; - --color-accent-yellow: #f0e9dd; - --color-accent-cyan: #edb28b; - --color-badge-neutral-bg: #1c2a37; - --color-badge-neutral-text: #c9d0d3; - --color-badge-success-bg: #2a3946; - --color-badge-success-text: #f2c89d; - --color-badge-info-bg: #2a3946; - --color-badge-info-text: #f2c89d; - --color-badge-danger-bg: #2a3946; - --color-badge-danger-text: #f2c89d; - --color-badge-warning-bg: #2a3946; - --color-badge-warning-text: #f2c89d; - --color-btn-bg: #edb28b; - --color-btn-text: #202b36; - --color-btn-hover: #f5ccaa; - --color-input-bg: #16232f; - --color-input-border: #4c5c68; - --color-input-placeholder: #7c8a92; - --color-white: #f0e9dd; - --color-black: #18242f; - --font-sans: 'Space Grotesk', 'Noto Serif SC', system-ui, sans-serif; - --font-serif: 'Cormorant Garamond', 'Noto Serif SC', Georgia, serif; - --font-mono: 'IBM Plex Mono', 'Noto Serif SC', ui-monospace, monospace; - --text-xs: .875rem; - --text-xs--line-height: 1.5rem; -} - -/* The event is intentionally one dark poster world. The class remains for old - saved preferences, but it no longer changes the art direction. */ -.light { - --color-bg-primary: #101d29; - --color-bg-secondary: #18242f; - --color-bg-card: #16232f; - --color-bg-elevated: #1c2a37; - --color-text-primary: #f0e9dd; - --color-text-secondary: #b8c1c6; - --color-text-tertiary: #8f9ba1; - --color-text-muted: #6b7a83; - --color-border: #41515c; - --color-border-subtle: #2a3946; - --color-border-hover: #edb28b; - --color-border-strong: #f0e9dd; - --color-accent: #edb28b; - --color-accent-hover: #f5ccaa; - --color-btn-bg: #edb28b; - --color-btn-text: #202b36; - --color-btn-hover: #f5ccaa; - --color-input-bg: #16232f; - --color-input-border: #4c5c68; - --color-input-placeholder: #7c8a92; -} - -* { box-sizing: border-box; } - -html { - scroll-behavior: smooth; - color: #f0e9dd; - background: #101d29; -} - -body { - margin: 0; - min-width: 320px; - overflow-x: hidden; - color: #f0e9dd; - background: #101d29; - font-family: var(--font-sans); - line-height: 1.6; - font-feature-settings: 'ss01' 1, 'ss02' 1; - -webkit-font-smoothing: antialiased; -} - -body::before { - position: fixed; - z-index: 999; - inset: 0; - pointer-events: none; - content: ''; - opacity: .15; - background-image: - url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.86' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.76'/%3E%3C/svg%3E"); - mix-blend-mode: soft-light; -} - -::selection { color: #18242f; background: #edb28b; } -::-webkit-scrollbar { width: 7px; } -::-webkit-scrollbar-track { background: #18242f; } -::-webkit-scrollbar-thumb { background: #edb28b; } -a, button, input, textarea, select { border-radius: 0 !important; } -button, a { -webkit-tap-highlight-color: transparent; } - -.cosmos-display, -.heading-serif { - font-family: var(--font-serif) !important; - font-style: normal !important; - font-weight: 500 !important; - letter-spacing: -.02em; -} - -/* Serif display type for every heading except mono kickers. */ -:is(h1, h2, h3, h4):not(.font-mono) { font-family: var(--font-serif); font-weight: 500; letter-spacing: -.015em; } -:is(h1, h2, h3, h4):not(.font-mono).font-semibold { font-weight: 500; letter-spacing: -.015em; } -html[lang='zh-CN'] body { font-family: 'Noto Serif SC', 'Space Grotesk', serif; } -html[lang='zh-CN'] :is(h1, h2, h3, h4):not(.font-mono), -html[lang='zh-CN'] .cosmos-display, -html[lang='zh-CN'] .heading-serif, -html[lang='zh-CN'] .section-title, -html[lang='zh-CN'] .poster-heading { font-weight: 600 !important; letter-spacing: .01em !important; line-height: 1.2; } -html[lang='zh-CN'] .section-title, -html[lang='zh-CN'] .poster-heading { max-width: 12em; text-wrap: balance; } - -.accent-text { color: var(--color-text-primary); } -.shimmer-text, -.gradient-number { - color: inherit; - background: none; - -webkit-background-clip: initial; - background-clip: initial; - -webkit-text-fill-color: currentColor; -} - -.glass-card, -.gradient-border, -.team-card { - border: 1px solid var(--color-border); - border-radius: 0; - background: rgba(24,36,47,.9); - box-shadow: none; - backdrop-filter: none; - -webkit-backdrop-filter: none; - transition: border-color .2s ease, background-color .2s ease; -} - -.glass-card:hover, -.gradient-border:hover, -.team-card:hover { - transform: none; - border-color: var(--color-accent); - background: #1c2a37; - box-shadow: none; -} - -.glow-border::after, -.gradient-border::before, -.glass-card-glow::before, -.countdown-card::after { display: none !important; } -.progress-bar-glow { background: var(--color-accent); box-shadow: none; animation: none; } -.prize-pulse, -.register-note-bounce, -.countdown-flip, -.countdown-pulse, -.bounce-letter, -.animate-bounce-slow { animation: none !important; } - -input:focus, -textarea:focus, -select:focus { - outline: 1px solid var(--color-accent); - outline-offset: -1px; - border-color: var(--color-accent); - box-shadow: none; -} - -.reveal, -.reveal-left, -.reveal-right, -.reveal-blur, -.reveal-scale { - opacity: 0; - transform: translateY(18px); - filter: none; - transition: opacity .62s ease, transform .62s cubic-bezier(.2,.75,.25,1); -} - -.reveal.visible, -.reveal-left.visible, -.reveal-right.visible, -.reveal-blur.visible, -.reveal-scale.visible { opacity: 1; transform: translateY(0); } -.reveal-delay-1 { transition-delay: .06s; } -.reveal-delay-2 { transition-delay: .12s; } -.reveal-delay-3 { transition-delay: .18s; } -.reveal-delay-4 { transition-delay: .24s; } -.reveal-delay-5 { transition-delay: .3s; } - -.cosmos-header { - color: #f0e9dd; - background: rgba(24,36,47,.76); - border-bottom-color: rgba(240,233,221,.18) !important; - backdrop-filter: blur(16px) saturate(.7); - -webkit-backdrop-filter: blur(16px) saturate(.7); -} - -.cosmos-header::before { - position: absolute; - top: 0; - left: 0; - width: clamp(5rem, 12vw, 12rem); - height: 3px; - content: ''; - background: #edb28b; -} - -.cosmos-wordmark { - font-family: var(--font-serif); - font-weight: 500; - letter-spacing: -.02em; -} - -.cosmos-register-link { - color: #101d29 !important; - background: #f0e9dd; - border-color: #f0e9dd !important; -} - -.cosmos-register-link:hover { - color: #18242f !important; - background: #edb28b; - border-color: #edb28b !important; -} - -.poster-canvas { - position: relative; - overflow: hidden; - isolation: isolate; - color: #f0e9dd; - background: #101d29; -} - -.poster-canvas::before { - position: absolute; - z-index: -1; - inset: 0; - pointer-events: none; - content: ''; - opacity: .38; - background-image: - radial-gradient(1px 1px at 12% 22%, #fff 45%, transparent 52%), - radial-gradient(1px 1px at 46% 68%, rgba(240,233,221,.6) 45%, transparent 52%), - radial-gradient(1.5px 1.5px at 78% 18%, rgba(240,233,221,.75) 45%, transparent 52%), - radial-gradient(1px 1px at 91% 72%, rgba(240,233,221,.42) 45%, transparent 52%); - background-size: 430px 430px, 560px 560px, 710px 710px, 330px 330px; -} - -.poster-section { - position: relative; - overflow: hidden; - border-top: 1px solid rgba(240,233,221,.18); - background: transparent; -} - -.poster-section::after { - position: absolute; - top: 0; - bottom: 0; - left: clamp(1.5rem, 7vw, 7rem); - width: 1px; - pointer-events: none; - content: ''; - background: rgba(240,233,221,.08); -} - -.poster-kicker, -.section-kicker, -.mono-label { - display: inline-flex; - align-items: center; - gap: .8rem; - color: #b8c1c6; - font-family: var(--font-mono); - font-size: .875rem; - font-weight: 500; - line-height: 1.6; - letter-spacing: .17em; - text-transform: uppercase; -} - -.poster-kicker::before, -.section-kicker::before { - width: 2.5rem; - height: 1px; - content: ''; - background: #edb28b; -} - -.section-title, -.poster-heading { - max-width: 16ch; - color: #f0e9dd; - font-family: var(--font-serif); - font-size: clamp(2.5rem, 5vw, 5.25rem); - font-weight: 500; - letter-spacing: -.02em; - line-height: 1.04; -} - -.poster-rule { border-color: rgba(240,233,221,.2); } - -.paper-sheet { - position: relative; - color: #101d29; - background: linear-gradient(102deg, transparent 0 61%, rgba(24,36,47,.045) 61% 61.2%, transparent 61.2%), #f3ede2; - box-shadow: 10px 12px 0 #edb28b; -} - -.paper-sheet::after { - position: absolute; - inset: 0; - pointer-events: none; - content: ''; - opacity: .2; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.5' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.4'/%3E%3C/svg%3E"); - mix-blend-mode: multiply; -} - -/* Content figures. Unlike .photo-wash these keep their colour: the DESI colormap - and the observed-sample hues are the information, not decoration. */ -.survey-figure { margin: 0; } -.survey-figure img { display: block; width: 100%; height: auto; } - -.survey-figure--sky img { - border: 1px solid rgba(240,233,221,.22); - box-shadow: 8px 8px 0 #edb28b; -} - -/* Light-ground plots ride on a paper plate so they read as a science readout - instead of punching a white hole in the dark canvas. */ -.survey-figure--plate .survey-plate { padding: .85rem; } -.survey-figure--plate .survey-plate img { position: relative; z-index: 1; } - -.survey-figure figcaption { - margin-top: 1.1rem; - color: rgba(240,233,221,.56); - font-family: var(--font-mono); - font-size: .75rem; - line-height: 1.75; - letter-spacing: .03em; -} - -.survey-figure figcaption .figure-credit { - display: block; - margin-top: .45rem; - opacity: .62; -} - -@media (max-width: 768px) { - .survey-figure--sky img { box-shadow: 6px 6px 0 #edb28b; } -} - -.plasma-field { - display: none; -} - -.photo-wash { position: relative; overflow: hidden; background: #101d29; } -.photo-wash img { - width: 100%; - height: 100%; - object-fit: cover; - filter: grayscale(1) contrast(1.24) brightness(.76); -} - -.photo-wash::after { - position: absolute; - inset: 0; - pointer-events: none; - content: ''; - background: linear-gradient(90deg, rgba(24,36,47,.9), transparent 42%, rgba(24,36,47,.12)), linear-gradient(0deg, rgba(24,36,47,.74), transparent 45%); -} - -.distressed-type { - text-shadow: none; - filter: none; -} - -.poster-card { - position: relative; - overflow: hidden; - border: 0; - border-top: 1px solid rgba(240,233,221,.3); - background: transparent; - box-shadow: none; -} - -.poster-card::after { - position: absolute; - top: -1px; - left: 0; - width: 3.5rem; - height: 2px; - content: ''; - background: #edb28b; -} - -.code-block { - overflow-x: auto; - border: 1px solid #41515c; - background: #16232f; - padding: 1.2rem 1.3rem; - color: #d1d5ce; - font-family: var(--font-mono); - font-size: .78rem; - line-height: 1.75; - white-space: pre; -} - -.cosmos-footer { - position: relative; - overflow: hidden; - color: #f0e9dd; - background: #101d29; - border-top: 1px solid rgba(240,233,221,.22) !important; -} - -.cosmos-footer::before { display: none; } - -@keyframes plasma-drift { - from { transform: translate3d(-2%,2%,0) rotate(-8deg) scale(.96); } - to { transform: translate3d(5%,-4%,0) rotate(-2deg) scale(1.08); } -} - -@keyframes slow-pan { - from { transform: scale(1.04) translateX(0); } - to { transform: scale(1.1) translateX(-2%); } -} - -@media (max-width: 720px) { - .poster-section::after { display: none; } - .section-title, - .poster-heading { font-size: clamp(2.5rem, 5vw, 5.25rem); } - .paper-sheet { box-shadow: 7px 8px 0 #edb28b; } -} - -@media (prefers-reduced-motion: reduce) { - html { scroll-behavior: auto; } - *, *::before, *::after { - animation-duration: .01ms !important; - animation-iteration-count: 1 !important; - transition-duration: .01ms !important; - } -} diff --git a/events/agentic-cosmos-2026/src/components/MissionPanel.vue b/events/agentic-cosmos-2026/src/components/MissionPanel.vue deleted file mode 100644 index cac907c..0000000 --- a/events/agentic-cosmos-2026/src/components/MissionPanel.vue +++ /dev/null @@ -1,170 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/VisionCarousel.vue b/events/agentic-cosmos-2026/src/components/VisionCarousel.vue deleted file mode 100644 index 3486dea..0000000 --- a/events/agentic-cosmos-2026/src/components/VisionCarousel.vue +++ /dev/null @@ -1,250 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/effects/UnderConstructionModal.vue b/events/agentic-cosmos-2026/src/components/effects/UnderConstructionModal.vue deleted file mode 100644 index 3f14ad5..0000000 --- a/events/agentic-cosmos-2026/src/components/effects/UnderConstructionModal.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/layout/AppFooter.vue b/events/agentic-cosmos-2026/src/components/layout/AppFooter.vue deleted file mode 100644 index 0ebc6a3..0000000 --- a/events/agentic-cosmos-2026/src/components/layout/AppFooter.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/layout/AppHeader.vue b/events/agentic-cosmos-2026/src/components/layout/AppHeader.vue deleted file mode 100644 index a7b3073..0000000 --- a/events/agentic-cosmos-2026/src/components/layout/AppHeader.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - diff --git a/events/agentic-cosmos-2026/src/components/layout/EventSwitcher.vue b/events/agentic-cosmos-2026/src/components/layout/EventSwitcher.vue deleted file mode 100644 index f705c27..0000000 --- a/events/agentic-cosmos-2026/src/components/layout/EventSwitcher.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/AboutSection.vue b/events/agentic-cosmos-2026/src/components/sections/AboutSection.vue deleted file mode 100644 index c340a49..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/AboutSection.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/BuildSection.vue b/events/agentic-cosmos-2026/src/components/sections/BuildSection.vue deleted file mode 100644 index 80c952d..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/BuildSection.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/ChallengeSection.vue b/events/agentic-cosmos-2026/src/components/sections/ChallengeSection.vue deleted file mode 100644 index 7497d59..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/ChallengeSection.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/CtaSection.vue b/events/agentic-cosmos-2026/src/components/sections/CtaSection.vue deleted file mode 100644 index e86a39b..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/CtaSection.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/GlossarySection.vue b/events/agentic-cosmos-2026/src/components/sections/GlossarySection.vue deleted file mode 100644 index 3ef3eff..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/GlossarySection.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/HeroSection.vue b/events/agentic-cosmos-2026/src/components/sections/HeroSection.vue deleted file mode 100644 index 6868395..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/HeroSection.vue +++ /dev/null @@ -1,215 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/LeaderboardSection.vue b/events/agentic-cosmos-2026/src/components/sections/LeaderboardSection.vue deleted file mode 100644 index 87d6075..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/LeaderboardSection.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/ObserverSection.vue b/events/agentic-cosmos-2026/src/components/sections/ObserverSection.vue deleted file mode 100644 index 8c9bd75..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/ObserverSection.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/PrizeSection.vue b/events/agentic-cosmos-2026/src/components/sections/PrizeSection.vue deleted file mode 100644 index 2c8b78e..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/PrizeSection.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/ScheduleSection.vue b/events/agentic-cosmos-2026/src/components/sections/ScheduleSection.vue deleted file mode 100644 index 8cc064e..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/ScheduleSection.vue +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/events/agentic-cosmos-2026/src/components/sections/ScoringSection.vue b/events/agentic-cosmos-2026/src/components/sections/ScoringSection.vue deleted file mode 100644 index 99aac89..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/ScoringSection.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/SimpleMissionSection.vue b/events/agentic-cosmos-2026/src/components/sections/SimpleMissionSection.vue deleted file mode 100644 index 22d2b6d..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/SimpleMissionSection.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/SimpleParticipateSection.vue b/events/agentic-cosmos-2026/src/components/sections/SimpleParticipateSection.vue deleted file mode 100644 index 2d87ced..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/SimpleParticipateSection.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/components/sections/SimpleVisionSection.vue b/events/agentic-cosmos-2026/src/components/sections/SimpleVisionSection.vue deleted file mode 100644 index 624681f..0000000 --- a/events/agentic-cosmos-2026/src/components/sections/SimpleVisionSection.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/composables/api.ts b/events/agentic-cosmos-2026/src/composables/api.ts deleted file mode 100644 index ea9b203..0000000 --- a/events/agentic-cosmos-2026/src/composables/api.ts +++ /dev/null @@ -1,30 +0,0 @@ -// API_BASE: set to your backend URL if you have one, or empty string for same-origin -export const API_BASE = '' -export const BASE_URL = import.meta.env.BASE_URL - -// Resolve an in-app path against the Vite base path. -export function appUrl(path: string = ''): string { - if (!path) return BASE_URL - if (/^(?:[a-z]+:)?\/\//i.test(path) || path.startsWith('data:') || path.startsWith('blob:')) return path - if (path.startsWith('#')) return `${BASE_URL}${path}` - return `${BASE_URL}${path.replace(/^\/+/, '')}` -} - -// Resolve a public absolute URL for auth redirects, email links, and QR codes. -export function publicSiteUrl(path: string = ''): string { - const configuredSiteUrl = import.meta.env.VITE_SITE_URL?.replace(/\/+$/, '') - const basePath = BASE_URL === '/' ? '' : BASE_URL.replace(/\/+$/, '') - const root = configuredSiteUrl || `${window.location.origin}${basePath}` - if (!path) return root - if (path.startsWith('#')) return `${root}/${path}` - return `${root}/${path.replace(/^\/+/, '')}` -} - -// Resolve image paths: uploads go to backend, static assets use base path -export function assetUrl(path: string): string { - if (!path) return '' - if (/^(?:[a-z]+:)?\/\//i.test(path) || path.startsWith('data:') || path.startsWith('blob:')) return path - // Static assets (sponsors, icons, default-avatar) — use vite base path - if (path.startsWith('/')) return appUrl(path) - return path -} diff --git a/events/agentic-cosmos-2026/src/composables/useI18n.ts b/events/agentic-cosmos-2026/src/composables/useI18n.ts deleted file mode 100644 index 986c1de..0000000 --- a/events/agentic-cosmos-2026/src/composables/useI18n.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { ref, provide, inject, watch, type InjectionKey, type Ref } from 'vue' -import en from '../i18n/en' -import zh from '../i18n/zh' - -type Messages = Record -type Locale = 'en' | 'zh' - -const I18N_KEY: InjectionKey<{ - locale: Ref - t: (key: string) => any - pick: (english: T, chinese: T) => T - toggleLocale: () => void -}> = Symbol('i18n') - -const messages: Record = { en, zh } - -function getNestedValue(obj: any, path: string): any { - return path.split('.').reduce((o, k) => o?.[k], obj) ?? path -} - -export function provideI18n() { - const savedLocale = typeof window !== 'undefined' ? window.localStorage.getItem('cosmos-locale') : null - const locale = ref(savedLocale === 'en' || savedLocale === 'zh' ? savedLocale : 'zh') - - if (typeof document !== 'undefined') { - watch(locale, (value) => { - document.documentElement.lang = value === 'zh' ? 'zh-CN' : 'en' - document.title = value === 'zh' - ? '巡天智能体' - : 'Agent Observer' - const description = document.querySelector('meta[name="description"]') - if (description) { - description.content = value === 'zh' - ? '面向智能巡天的 GOSIM 黑客松:构建观测智能体,读取天空状态,并在每 900 秒选择下一次观测。' - : 'A GOSIM hackathon for intelligent survey operations: build an agent observer that reads the sky state and chooses the next observation every 900 seconds.' - } - window.localStorage.setItem('cosmos-locale', value) - }, { immediate: true }) - } - - function t(key: string): any { - return getNestedValue(messages[locale.value], key) - } - - function pick(english: T, chinese: T): T { - return locale.value === 'zh' ? chinese : english - } - - - - function toggleLocale() { - locale.value = locale.value === 'en' ? 'zh' : 'en' - } - - provide(I18N_KEY, { locale, t, pick, toggleLocale }) - return { locale, t, pick, toggleLocale } -} - -export function useI18n() { - const i18n = inject(I18N_KEY) - if (!i18n) throw new Error('useI18n() called without provideI18n()') - return i18n -} diff --git a/events/agentic-cosmos-2026/src/composables/useLeaderboard.ts b/events/agentic-cosmos-2026/src/composables/useLeaderboard.ts deleted file mode 100644 index 146a387..0000000 --- a/events/agentic-cosmos-2026/src/composables/useLeaderboard.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { onMounted, onUnmounted, ref } from 'vue' - -import { leaderboardApi, platformLinks } from '../registration' - -const API = leaderboardApi -const STATIC_API = `${import.meta.env.BASE_URL}cosmosbench-leaderboard.json` -export const COSMOSBENCH_URL = platformLinks.leaderboard - -export interface LeaderboardEntry { - rank: number; name: string; score: number | null; science: number | null - bonus: number | null; requests: number | null; penalties: number | null; submissions: number -} -const numberOrNull = (value: unknown) => value == null || value === '' || !Number.isFinite(Number(value)) ? null : Number(value) -function normalize(raw: Record, index: number): LeaderboardEntry { - return { - rank: Number(raw.rank ?? index + 1), - name: String(raw.team_name ?? raw.agent_name ?? raw.username ?? raw.name ?? '—'), - score: numberOrNull(raw.total_score ?? raw.score), - science: numberOrNull(raw.base_science ?? raw.science_score ?? raw.science), - bonus: numberOrNull(raw.program_bonus), - requests: numberOrNull(raw.request_reward), - penalties: numberOrNull(raw.penalty_total), - submissions: Number(raw.submission_count ?? raw.submissions ?? 0), - } -} -export function useLeaderboard(limit = 20) { - const entries = ref([]), loading = ref(true), refreshing = ref(false), error = ref('') - const updatedAt = ref(null) - let timer: number | undefined - async function load() { - refreshing.value = true; error.value = '' - try { - let loaded = false - for (const endpoint of [API, STATIC_API].filter(Boolean)) { - try { - const url = new URL(endpoint, window.location.origin); url.searchParams.set('limit', String(limit)) - const response = await fetch(url, { headers: { Accept: 'application/json' } }) - if (!response.ok) throw new Error(String(response.status)) - const body = await response.json(); const rows = Array.isArray(body) ? body : (body?.entries ?? body?.data) - if (!Array.isArray(rows)) throw new Error('Invalid leaderboard response') - entries.value = rows.slice(0, limit).map(normalize); updatedAt.value = new Date(); loaded = true; break - } catch { /* Try the same-origin snapshot next. */ } - } - if (!loaded) throw new Error('unavailable') - } catch { error.value = 'unavailable' } - finally { loading.value = false; refreshing.value = false } - } - onMounted(() => { load(); timer = window.setInterval(load, 60_000) }) - onUnmounted(() => { if (timer) window.clearInterval(timer) }) - return { entries, loading, refreshing, error, updatedAt, reload: load, leaderboardUrl: COSMOSBENCH_URL } -} diff --git a/events/agentic-cosmos-2026/src/composables/useScrollReveal.ts b/events/agentic-cosmos-2026/src/composables/useScrollReveal.ts deleted file mode 100644 index 28b6a6b..0000000 --- a/events/agentic-cosmos-2026/src/composables/useScrollReveal.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { onMounted, onUnmounted } from 'vue' - -export function useScrollReveal() { - let observer: IntersectionObserver - let rafId: number - - function updateParallax() { - document.querySelectorAll('.parallax-bg').forEach((el) => { - const rect = (el as HTMLElement).getBoundingClientRect() - const offset = (rect.top + rect.height / 2) / window.innerHeight - ;(el as HTMLElement).style.setProperty('--parallax-y', `${(offset - 0.5) * -40}px`) - }) - rafId = requestAnimationFrame(updateParallax) - } - - onMounted(() => { - observer = new IntersectionObserver( - (entries) => { - entries.forEach((entry) => { - if (entry.isIntersecting) { - entry.target.classList.add('visible') - } - }) - }, - { threshold: 0.1, rootMargin: '0px 0px -50px 0px' } - ) - - document.querySelectorAll('.reveal, .reveal-left, .reveal-right, .reveal-blur, .reveal-scale').forEach((el) => { - observer.observe(el) - }) - - // Start parallax - rafId = requestAnimationFrame(updateParallax) - }) - - onUnmounted(() => { - observer?.disconnect() - cancelAnimationFrame(rafId) - }) -} diff --git a/events/agentic-cosmos-2026/src/composables/useTheme.ts b/events/agentic-cosmos-2026/src/composables/useTheme.ts deleted file mode 100644 index d788e7d..0000000 --- a/events/agentic-cosmos-2026/src/composables/useTheme.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { ref, computed, provide, inject, onMounted, type InjectionKey, type Ref } from 'vue' - -type Theme = 'dark' | 'light' - -const THEME_KEY: InjectionKey<{ - theme: Ref - isDark: Ref - toggleTheme: () => void -}> = Symbol('theme') - -export function provideTheme() { - const theme = ref('dark') - const isDark = computed(() => theme.value === 'dark') - - function applyTheme(t: Theme) { - const el = document.documentElement - if (t === 'light') { - el.classList.add('light') - } else { - el.classList.remove('light') - } - } - - function toggleTheme() { - theme.value = theme.value === 'dark' ? 'light' : 'dark' - localStorage.setItem('cosmos26-theme-v1', theme.value) - applyTheme(theme.value) - } - - onMounted(() => { - const saved = localStorage.getItem('cosmos26-theme-v1') as Theme | null - if (saved === 'light' || saved === 'dark') { - theme.value = saved - } - applyTheme(theme.value) - }) - - provide(THEME_KEY, { theme, isDark, toggleTheme }) - return { theme, isDark, toggleTheme } -} - -export function useTheme() { - const t = inject(THEME_KEY) - if (!t) throw new Error('useTheme() called without provideTheme()') - return t -} diff --git a/events/agentic-cosmos-2026/src/i18n/en.ts b/events/agentic-cosmos-2026/src/i18n/en.ts deleted file mode 100644 index 42fde28..0000000 --- a/events/agentic-cosmos-2026/src/i18n/en.ts +++ /dev/null @@ -1,430 +0,0 @@ -export default { - nav: { - vision: 'Event Brief', - about: 'Why', - mission: 'Mission', - participate: 'Participate', - leaderboard: 'Leaderboard', - applyNow: 'Register now', - }, - vision: { - pageTitle: 'Agent Observer', - pageSubtitle: 'A GOSIM Hackathon for Intelligent Survey Operations', - intro: - 'This participant briefing explains why survey operations need agent observers, what a human leading observer does, how the challenge works across three planning horizons, what you submit, how scoring works, the astronomy you need, and the event schedule.', - backToHome: 'Back to home', - sections: [ - { - kicker: '01 / Why', - title: 'The observing plan shapes the science sample', - paragraphs: [ - 'A survey telescope maps large areas of sky systematically. It does not spend a whole night on a single object; it visits thousands of tiles across many nights, building up statistically powerful samples of galaxies, quasars, and stars.', - 'Cosmology runs on samples like these: large, uniform, well calibrated. Wide surveys reveal the large-scale structure of the universe, constrain its expansion history, underpin dark energy measurements, and tie galaxy evolution to cosmic time. Spectroscopic surveys add a third dimension — redshift. Position on the sky plus redshift gives you a three-dimensional map of cosmic structure. DESI is one concrete, public example: spectra for large samples of galaxies and quasars, used to map the expanding universe and study dark energy.', - 'But survey operations are hard. Weather changes what a 900-second exposure is worth through seeing, transparency, and sky brightness. Target visibility shifts with airmass and position on the sky. Observing programs prefer different conditions: DARK, BRIGHT, and BACKUP. The footprint has to be covered broadly and evenly for the science to hold up. High-priority tiles, nearly finished tiles, and under-covered regions all compete for the same block of time. One bad tactical choice spends real observing time and changes every plan that follows.', - 'Modern AI systems open a path: an assistant that reads state, calls computational tools, reasons under physical constraints, proposes a plan, monitors quality, and explains every choice. The long-term goal is an observing agent that can genuinely take part in real survey operations. This hackathon narrows that long-term vision into one focused benchmark.', - ], - highlight: - 'You build the observer’s logic. We provide the mission definition, tile table, observing constraints, weather scenarios, simulator, and evaluation protocol.', - figure: { - key: 'redshiftMap', - alt: 'A survey map built from sky coordinates and redshift', - caption: 'Sky position plus redshift becomes a map — which is what a survey ultimately delivers.', - credit: 'David Kirkby / DESI collaboration · CC BY 4.0', - }, - }, - { - kicker: '02 / The Observer', - title: 'What a human lead observer actually does', - paragraphs: [ - 'A seasoned lead observer makes a full set of decisions every 900-second slot: understand the science goal and decide tonight’s tactical priority; read seeing, transparency, sky brightness, and the short-term forecast; judge whether tonight suits DARK, BRIGHT, or BACKUP observing; keep the tiles that are visible now, legal, and worth the time; trade off science yield, priority, airmass, footprint balance, and wasted time; finish a tile when completing it beats over-exposure; replan around weather systems, forest-fire smoke, scheduled rocket launches, and changing efficiency; use fast validation signals to calibrate later decisions; and explain why this action was chosen in this slot.', - 'These duties are what the observing agent is taking over. We do not expect an agent to outperform a human immediately. We expect it to be evaluated objectively against a fixed interface, fixed data, and fixed scoring — so it can become a viable component of real survey operations.', - ], - duties: [ - { n: '01', title: 'Night strategy', desc: 'Understand the science goal and decide tonight’s tactical priority.' }, - { n: '02', title: 'Reading the weather', desc: 'Seeing, transparency, sky brightness, and the short-term forecast.' }, - { n: '03', title: 'Program selection', desc: 'Judge whether tonight suits DARK, BRIGHT, or BACKUP observing.' }, - { n: '04', title: 'Candidate filtering', desc: 'Keep the tiles that are visible now, legal, and worth the time.' }, - { n: '05', title: 'Tile ranking', desc: 'Trade off science yield, priority, airmass, footprint balance, and wasted time.' }, - { n: '06', title: 'Completion management', desc: 'Finish a tile when the value of completing it beats the cost of over-exposure.' }, - { n: '07', title: 'Replanning', desc: 'React to forecast disruptions, inserted requests, and changing observing efficiency.' }, - { n: '08', title: 'Quality monitoring', desc: 'Use fast validation signals to calibrate later decisions.' }, - { n: '09', title: 'Logging the reason', desc: 'Explain why the observer chose this action in this slot.' }, - ], - }, - { - kicker: '03 / Challenge Format', - title: 'The Survey Mission Card and the challenge loop', - paragraphs: [ - 'Every challenge instance starts from a Survey Mission Card. It states the science goal, footprint area, time budget, telescope site, available observing programs, target classes, observing constraints, and scoring rules. The mission card and public development data — tile catalogue, example weather scenarios, initial state, and visual reports — will be released before the hackathon begins.', - 'Every participant faces the same evaluation scenario: the overall survey plan, per-night seeing and weather replay, ad-hoc observing requests, predictable mid-term disruptions, simulator, and scoring rule are fixed. The agent receives the current state and returns the next observing action every 900 seconds.', - ], - loopTitle: 'The challenge loop', - loop: [ - { stage: 'Fixed inputs', items: ['Science goal', 'Footprint tiles', 'Weather replay'] }, - { stage: 'Agent state', items: ['Weather + forecast', 'Survey progress', 'Available tiles'] }, - { stage: 'Reasoning', items: ['Rank', 'Explain', 'Decide'] }, - { stage: 'Action', items: ['Observe', 'or wait'] }, - { stage: 'Metrics', items: ['Science yield', 'Uniformity + waste', 'Violations'] }, - ], - }, - { - kicker: '04 / Planning Horizons', - title: 'Plan across the survey, the week, and the next 900 seconds', - paragraphs: [ - 'Long term — the organizers provide the overall survey plan in the mission card, while the agent manages that plan in flight. Final scoring includes survey completeness and completion quality.', - 'Middle term — the agent builds a flexible month, week, and day plan from progress and forecast conditions, absorbing weather systems, forest-fire smoke, scheduled launches, and newly inserted observing requests. This layer may be enabled as mission cards evolve.', - 'Short term — every 900-second slot, the agent makes an immediate tactical choice using the middle-term plan and real-time seeing and transparency. This is the focus of the scored benchmark.', - ], - }, - { - kicker: '05 / Participant Job', - title: 'Build a reproducibly runnable observer project', - paragraphs: [ - 'Implement the current platform agent interface. Online competition packages run in Python 3.12; download the platform starter kit. Examples here explain observing strategies; follow the platform documentation for the official interface.', - 'Practice accepts results files or agent packages. The online competition accepts only agent packages, run by the platform against hidden scenarios.', - 'Read the platform rules and docs, download the starter kit, develop on public scenarios, then submit through the platform. Scoring reports, agent logs and decision replays are available there.', - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - { - kicker: '06 / Scoring', - title: 'Scientific, reproducible, inspectable evaluation', - paragraphs: [ - 'Base science, program bonus and request reward, minus penalties. Multi-scenario phases use the mean score; standings use each team’s best scored submission. The platform’s current scoring version, challenge-score-v3, is authoritative.', - 'Evaluation follows open-science principles: fixed data and fixed scoring let every submitted observation result be evaluated consistently; readable result artifacts make outcomes inspectable; separate development and final-evaluation weather compare generalization instead of tuning to a known scenario.', - 'Visualization turns completed tile fractions into an observed-target map — a 3D spatial sample and a 2D butterfly plot of sky position plus simulated redshift, in the style DESI uses — so different strategies produce visibly different maps.', - 'The same observer interface can support future mission cards for real survey-log replay, z > 5 quasar planning, LBG planning, and target-of-opportunity inserts; the community can propose new fixed datasets for follow-up tracks.', - ], - formula: `score = base_science + program_bonus + request_reward - - penalty_total`, - figure: { - key: 'reviewOverlay', - alt: 'Review overlay of the fixed target catalog and an observed sample', - caption: - 'The review overlay: grey is the full target catalog, colour is what one agent actually observed. The policy difference is visible at a glance.', - plate: true, - }, - }, - { - kicker: '07 / Glossary', - title: 'A little astronomy is enough', - paragraphs: [ - 'You do not need an astronomy background to read the state dictionary and reason about it. A Tile is a patch of sky observed in one pointing; the Footprint is the full survey area; Targets are the object counts inside each tile. High-priority tiles carry extra scientific weight, nearly complete tiles are one exposure from completion, and under-covered regions are lagging behind the rest of the footprint.', - 'Seeing describes atmospheric blur — lower is better. Transparency describes how clear the atmosphere is — higher is better. Sky brightness is background glow; darker is better for faint targets. Airmass measures how much atmosphere the light crosses and changes with sky position — lower is better. DARK, BRIGHT, and BACKUP are programs matched to dark, bright, and poor conditions. donefrac is tile completion: 0 means just started, 1 means finished.', - 'The state dictionary contains weather (current seeing, transparency, sky brightness, program, observability, and speed), forecast (this slot plus the next four), progress (tiles completed, mean completion, footprint balance, wasted time, and violations), and available_tiles (the legal options right now, with expected gain, expected waste, target counts, priority, and airmass).', - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - { - kicker: '08 / Timeline', - title: 'Three stages from training to awards', - paragraphs: [ - 'The event has three stages: online training from October 1–4, online competition from October 5–7, and Awards Day at GOSIM Shenzhen on October 17.', - 'Training introduces CosmosBench, the shared simulator, mission cards, and the observer interface. During the online competition, registered teams submit agent packages; the Agent Observer platform runs and scores them and publishes standings.', - ], - rounds: [ - { number: '01', name: 'Online Training', dates: 'Oct 1–4', format: 'Online', challenge: 'Learn CosmosBench, the shared simulator, mission cards, and the observer interface, then prepare with public development scenarios.', participants: 'Open worldwide to individuals and teams.' }, - { number: '02', name: 'Online Competition', dates: 'Oct 5–7', format: 'Online', challenge: 'Submit an agent package for the Agent Observer platform to run, evaluate and rank.', participants: 'All registered teams.' }, - { number: '03', name: 'Awards Day', dates: 'Oct 17', format: 'GOSIM Shenzhen', challenge: 'Final results are announced and prizes are presented.', participants: 'Winning teams and invited participants.' }, - ], - }, - ], - }, - hero: { - eyebrow: 'GOSIM Hackathon · Intelligent Survey Operations', - system: 'Agent Observer', - subtitle: '巡天智能体', - lede: - 'Build a future agent observer for survey nights: read the sky state, reason like a leading observer, and choose the next observation every 900 seconds.', - pipeline: [ - { label: 'Online Training', date: 'Oct 1–4' }, - { label: 'Online Competition', date: 'Oct 5–7' }, - { label: 'Awards Day', date: 'Oct 17' }, - ], - location: ['Online training Oct 1–4 · Online competition Oct 5–7', 'October 17 · Awards at GOSIM Shenzhen'], - cta: 'Mission card coming soon', - }, - home: { - vision: { - kicker: '01 / Vision', - title: 'Build an open benchmark for intelligent survey operations', - paragraphs: [ - 'Every night a survey telescope faces thousands of observable tiles. Weather changes, target visibility changes, and science priorities change. Every decision a human observer makes shapes the quality of the final cosmic sample.', - 'We are building an open benchmark: an agent reads the state of the night sky, reasons like a seasoned observer, and decides the next observation every 900 seconds. Every participant receives the same survey plan, weather replay, inserted requests, simulator, and scoring rule — the only variable is strategy.', - ], - }, - mission: { - kicker: '02 / Mission', - title: 'Where should the telescope look next', - lede: 'Your agent takes over the core decisions of a human lead observer.', - cards: [ - { title: 'Read the state', desc: 'Weather, forecast, survey progress, and the tiles that are legal right now, packed into one compact state dictionary.' }, - { title: 'Weigh the trade-offs', desc: 'Spend the good dark time on faint targets, or finish the tile that is one exposure from done? The forecast improves later — is another slot worth the wait?' }, - { title: 'Make the call', desc: 'Observe a tile, or wait. One action every 900 seconds, and the reason for it.' }, - ], - cardKicker: 'How the challenge arrives', - cardTitle: 'One Survey Mission Card', - cardLede: 'Every round of the challenge starts from a mission card. Everything that round holds you to is written on it:', - cardItems: [ - { term: 'Science goal', desc: 'What this survey is actually trying to answer.' }, - { term: 'Footprint', desc: 'How much sky to cover, and how it divides into tiles.' }, - { term: 'Time budget', desc: 'How many 900-second slots there are to spend.' }, - { term: 'Telescope site', desc: 'Latitude, visibility limits, slot length, and the airmass constraint.' }, - { term: 'Available programs', desc: 'Which of DARK, BRIGHT and BACKUP this round opens up.' }, - { term: 'Target classes', desc: 'Which objects count toward yield, and what each is worth.' }, - { term: 'Observing constraints', desc: 'What you may not do, and what crossing the line costs.' }, - { term: 'Scoring rule', desc: 'How the score is computed and which penalties apply.' }, - ], - cardNote: 'The authoritative input and output formats and the interface contract are defined by the mission card. The card and the public development data — tile catalogue, example weather scenarios, initial state and visual reports — are released before the hackathon begins.', - }, - participate: { - kicker: '04 / How to participate', - title: 'Three steps to compete', - lede: 'From training to awards, the path is clear.', - steps: [ - { n: '01', title: 'Register & team up', desc: 'Sign up online and create or join a team. Solo developers are welcome too.' }, - { n: '02', title: 'Build your agent', desc: 'Download the platform starter kit, implement the current agent interface, and test on public practice scenarios.' }, - { n: '03', title: 'Submit for evaluation', desc: 'Practice accepts results files or agent packages. The online competition requires an agent package, which the platform runs and evaluates.' }, - ], - timeline: [ - { label: 'Oct 1–4', desc: 'Online training' }, - { label: 'Oct 5–7', desc: 'Online competition' }, - { label: 'Oct 17', desc: 'Awards at GOSIM Shenzhen' }, - ], - cta: 'Register now', - }, - prizes: { - kicker: '05 / Awards', - title: '$5,500 in prizes', - lede: 'Three award tiers recognize the strongest observing agents.', - tiers: [ - { place: 'First Prize', amount: '$2,000', count: '1 winner' }, - { place: 'Second Prize', amount: '$1,000', count: '2 winners' }, - { place: 'Third Prize', amount: '$500', count: '3 winners' }, - ], - }, - leaderboard: { - kicker: '06 / Leaderboard', - title: 'Live standings', - lede: 'The Agent Observer platform provides the online competition standings. Visit the full board for practice standings and phase status.', - }, - }, - about: { - kicker: '01 / Why', - title: 'The observing plan is what shapes the final science sample', - p1: 'A survey telescope maps large areas of sky systematically. It does not spend a whole night on a single object; it visits thousands of tiles across many nights, building up statistically powerful samples of galaxies, quasars, and stars.', - p2: 'Cosmology runs on samples like these: large, uniform, well calibrated. Wide surveys reveal the large-scale structure of the universe, constrain its expansion history, underpin dark energy measurements, and tie galaxy evolution to cosmic time. Spectroscopic surveys add a third dimension — redshift. Position on the sky plus redshift gives you a three-dimensional map of cosmic structure.', - p3: 'DESI is one concrete, public example of exactly this: spectra for large samples of galaxies and quasars, used to map the expanding universe and study dark energy.', - hardTitle: 'Why survey operations are hard', - hardItems: [ - { term: 'Weather', desc: 'Changes what a 900-second exposure is worth, through seeing, transparency, and sky brightness.' }, - { term: 'Target visibility', desc: 'Shifts through the night with airmass and position on the sky.' }, - { term: 'Observing programs', desc: 'Each prefers different conditions: DARK, BRIGHT, and BACKUP.' }, - { term: 'The footprint', desc: 'Has to be covered broadly and evenly for the science analysis to hold up.' }, - ], - hardClosing: - 'High-priority tiles, nearly finished tiles, and under-covered regions all compete for the same block of time. One bad tactical choice spends real observing time and changes every plan that follows. Night operations demand decisions that are both effective and explainable.', - whyNowTitle: 'Why an observing agent, and why now', - whyNow: - 'The long-term goal is an observing agent that can genuinely take part in real survey operations. A human lead observer translates science goals, weather, instrument state, tile completion, and candidate fields into a tactical decision, right now. Modern AI systems open a path: an assistant that reads state, calls computational tools, reasons under physical constraints, proposes a plan, monitors quality, and explains every choice.', - whyNowClosing: 'This hackathon narrows that long-term vision into one focused benchmark.', - split: [ - { side: 'You build', desc: 'The observer’s logic — the system that decides.' }, - { side: 'We provide', desc: 'The mission definition, tile table, observing constraints, weather scenarios, simulator, and evaluation protocol.' }, - ], - }, - observer: { - kicker: '02 / The Observer', - title: 'What a human lead observer actually does', - intro: 'These nine jobs are what the observing agent is taking over.', - duties: [ - { n: '01', title: 'Night strategy', desc: 'Understand the science goal and decide tonight’s tactical priority.' }, - { n: '02', title: 'Reading the weather', desc: 'Seeing, transparency, sky brightness, and the short-term forecast.' }, - { n: '03', title: 'Program selection', desc: 'Judge whether tonight suits DARK, BRIGHT, or BACKUP observing.' }, - { n: '04', title: 'Candidate filtering', desc: 'Keep the tiles that are visible now, legal, and worth the time.' }, - { n: '05', title: 'Tile ranking', desc: 'Trade off science yield, priority, airmass, footprint balance, and wasted time.' }, - { n: '06', title: 'Completion management', desc: 'Finish a tile when the value of completing it beats the cost of over-exposure.' }, - { n: '07', title: 'Replanning', desc: 'React to forecast disruptions, inserted requests, and changing observing efficiency.' }, - { n: '08', title: 'Quality monitoring', desc: 'Use fast validation signals to calibrate later decisions.' }, - { n: '09', title: 'Logging the reason', desc: 'Explain why the observer chose this action in this slot.' }, - ], - }, - challenge: { - kicker: '03 / Format', - title: 'The Survey Mission Card', - intro: - 'Every challenge instance starts from a Survey Mission Card. It defines the science goal, footprint area, time budget, telescope site, observing programs, target classes, constraints, scoring rules, and authoritative interface contract. The mission card and public development data will be released before the hackathon begins.', - cards: [ - { title: 'Mission definition', desc: 'Which sky to cover, which targets matter, how much time you have.' }, - { title: 'Telescope / site', desc: 'Latitude, visibility limits, slot length, airmass constraints.' }, - { title: 'Public dev data', desc: 'Tile catalogue, example weather scenarios, initial state, and visual reports.' }, - { title: 'Final eval data', desc: 'Organizer-supplied weather replay, run in the same simulator.' }, - { title: 'Your deliverable', desc: 'Practice results files or agent packages; online competition accepts only agent packages.' }, - { title: 'One evaluation', desc: 'Every agent faces the same survey plan, weather replay, inserted requests, disruptions, simulator, and scoring rule.' }, - ], - loopTitle: 'The challenge loop', - loop: [ - { stage: 'Fixed inputs', items: ['Science goal', 'Footprint tiles', 'Weather replay'] }, - { stage: 'Agent state', items: ['Weather + forecast', 'Survey progress', 'Available tiles'] }, - { stage: 'Reasoning', items: ['Rank', 'Explain', 'Decide'] }, - { stage: 'Action', items: ['Observe', 'or wait'] }, - { stage: 'Metrics', items: ['Science yield', 'Uniformity + waste', 'Violations'] }, - ], - loopNote: 'The only variable is agent strategy. The overall survey plan, weather replay, ad-hoc requests, predictable disruptions, simulator, and scoring rule are fixed for every participant.', - }, - build: { - kicker: '04 / Participant Job', - title: 'What participants do', - intro: - 'Follow the platform docs to build your agent. Practice accepts results files or agent packages; online competition requires packages, run by the platform in Python 3.12.', - io: [ - { term: 'Input', desc: 'A small state dictionary: weather, forecast, survey progress, and the legal candidate tiles.' }, - { term: 'Output', desc: 'One observing plan for the next 900-second slot, such as observe a tile_id under DARK or wait. The reason text is free form.' }, - { term: 'Scoring', desc: 'Effective targets, tiles completed, evenness of footprint coverage, time efficiency, and action legality.' }, - { term: 'Deliverable', desc: 'Practice accepts results files or agent packages; online competition accepts only packages. Follow the platform format requirements.' }, - ], - starterTitle: 'Illustrative example only', - starterIntro: - 'This minimal utility rule illustrates a strategy. Follow the platform docs for the official package runtime and interface.', - starterCode: `tiles = state["available_tiles"] -if len(tiles) == 0: - return {"action": "wait"} - -best = max(tiles, key=lambda t: t["expected_weighted_gain"]) -return {"action": "observe", "tile_id": best["tile_id"], "plan": "DARK", - "reason": "highest useful gain"}`, - starterClosing: - 'Weather, completion, airmass, footprint balance, and waste are useful strategy factors. How to weigh them and how to structure the agent are left to each participant.', - archTitle: 'Illustrative architectures', - architectures: [ - { name: 'Utility agent', desc: 'Score every candidate tile, take the highest.' }, - { name: 'Weather-aware planner', desc: 'Use the forecast to decide whether to spend or save a high-value tile.' }, - { name: 'Completion manager', desc: 'Spot tiles near donefrac = 1 and manage over-exposure waste.' }, - { name: 'Footprint balancer', desc: 'Up-weight regions that are behind on coverage.' }, - { name: 'Risk-controlled agent', desc: 'Filter out high-waste, high-airmass, or low-value options before ranking.' }, - { name: 'Lead / support pair', desc: 'One module proposes the plan, another checks constraints and explains the risk.' }, - { name: 'LLM planner + rule checker', desc: 'Language reasoning for strategy, deterministic code for legality.' }, - ], - archCode: `AgentObserver - -> WeatherInterpreter - -> ProgramSelector - -> CandidateFilter - -> TileRanker - -> FootprintBalancer - -> CompletionManager - -> SupportObserver / RiskChecker - -> ReasonLogger`, - scenariosTitle: 'Situations you will meet', - scenariosIntro: 'A strong agent handles a handful of recurring situations.', - scenarios: [ - { when: 'Excellent dark night', then: 'Spend the slot on high expected gain, high priority, faint-target programs.' }, - { when: 'Marginal but usable weather', then: 'Prefer robust tiles, completion opportunities, and low-waste options.' }, - { when: 'Forecast improving', then: 'Compare current speed against future speed before spending a high-value tile.' }, - { when: 'Footprint unbalanced', then: 'Give under-covered regions a bonus.' }, - { when: 'Tile near completion', then: 'Finish it when the completion bonus beats the waste cost.' }, - { when: 'High airmass', then: 'Discount the utility of tiles that are harder to observe well.' }, - ], - }, - scoring: { - kicker: '03 / Evaluation', - title: 'Where the score comes from, and why it holds up', - intro: - 'Base science, program bonus and request reward, minus penalties. Multi-scenario phases use the mean score; standings use each team’s best scored submission.', - formula: `score = base_science + program_bonus + request_reward - - penalty_total`, - formulaVersion: 'platform scoring version challenge-score-v3', - note: - 'Any internal decision logic is fair game. But a good agent always ends up trading immediate yield against completion, uniformity, weather risk and operational discipline — which is exactly what these terms are there to force.', - - stressTitle: 'Where the field separates: after the weather turns', - stress: - 'The weather replay carries deterministic disruption blocks — rain, forest-fire smoke, a scheduled rocket launch. Everyone meets the same ones. The difference is what you do about them.', - stressWeak: 'The naive way', - stressWeakDesc: 'Sit and wait the time away, or spend your best dark-time targets on sky that cannot carry them.', - stressStrong: 'The strong way', - stressStrongDesc: 'Move on the forecast early, switch programs when the night calls for it, finish tiles that are nearly done, and hold the valuable dark-time targets until conditions come back.', - - principlesTitle: 'Why the result can be trusted', - principles: [ - { term: 'Reproducible', desc: 'Fixed seeds, fixed data, fixed scoring. Any submission can be re-run by a third party and land on the same number.' }, - { term: 'Auditable turn by turn', desc: 'The state dictionary, the run history and the full per-turn trace logs are all readable, so every decision can be checked after the fact.' }, - { term: 'Hard to overfit', desc: 'Development weather and final evaluation weather are kept apart, so the score compares generalization, not tuning to a known scenario.' }, - { term: 'One variable only', desc: 'You control the agent policy and its reasoning. The simulator, data, weather replay, constraints and scoring are ours, and identical for everyone.' }, - { term: 'Clearly bounded', desc: 'Short-term observation planning is the primary evaluation; middle-term planning is enabled at organizer discretion as mission cards evolve.' }, - ], - - vizTitle: 'What a finished run looks like', - vizNote: 'The map is the benchmark’s visualization layer. What actually gets scored is still the planning.', - }, - glossary: { - kicker: '06 / Glossary', - title: 'A little astronomy is enough', - intro: 'You do not need an astronomy background to read the state dictionary and reason about it. This much will do.', - terms: [ - { term: 'Tile', desc: 'A small patch of sky the telescope can observe in one pointing.' }, - { term: 'Footprint', desc: 'The whole sky area the survey intends to cover.' }, - { term: 'Targets', desc: 'In this planning benchmark, the object counts inside each tile.' }, - { term: 'Seeing', desc: 'How blurred the image is. Lower is better.' }, - { term: 'Transparency', desc: 'How clear the atmosphere is. Higher is better.' }, - { term: 'Sky brightness', desc: 'Background noise. For faint targets, darker is usually better.' }, - { term: 'Airmass', desc: 'How much atmosphere the light passes through. Lower is better.' }, - { term: 'DARK / BRIGHT / BACKUP', desc: 'Observing programs matched to dark, bright, and poor sky conditions.' }, - { term: 'Priority and coverage', desc: 'High-priority, nearly complete, and under-covered tiles compete for each observing slot.' }, - { term: 'donefrac', desc: 'Tile completion: 0 means just started, 1 means finished.' }, - ], - stateTitle: 'What is in the state', - state: [ - { field: 'weather', desc: 'Current seeing, transparency, sky brightness, program, observability, and speed.' }, - { field: 'forecast', desc: 'This slot plus the next four, which is what makes replanning possible.' }, - { field: 'progress', desc: 'Tiles completed, mean completion, footprint balance, wasted time, and violations.' }, - { field: 'available_tiles', desc: 'The legal options right now, with expected gain, expected waste, target counts, priority, and airmass.' }, - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - schedule: { - kicker: '07 / Timeline', title: 'Schedule', - intro: 'Online training runs October 1–4, the CosmosBench-powered online competition runs October 5–7, and Awards Day is October 17.', - challengeLabel: 'Survey task', participantsLabel: 'Who participates', - rounds: [ - { number: '01', name: 'Online Training', dates: 'Oct 1–4', format: 'Online', challenge: 'Learn CosmosBench, the shared simulator, mission cards, and the observer interface, then prepare with public development scenarios.', participants: 'Open worldwide to individuals and teams.' }, - { number: '02', name: 'Online Competition', dates: 'Oct 5–7', format: 'Online', challenge: 'Submit an agent package for the Agent Observer platform to run, evaluate and rank.', participants: 'All registered teams.' }, - { number: '03', name: 'Awards Day', dates: 'Oct 17', format: 'GOSIM Shenzhen', challenge: 'Final results are announced and prizes are presented.', participants: 'Winning teams and invited participants.' }, - ], - }, - leaderboard: { - kicker: '08 / CosmosBench', title: 'Live Leaderboard · Top 20', - intro: 'One mission card, weather replay, simulator, and scoring function. Evaluation and live standings are powered by CosmosBench.', - refresh: 'Refresh', full: 'Full board', updated: 'Updated', loading: 'Loading competition platform…', empty: 'No public online competition scores yet. Visit the platform for phase status and practice standings.', unavailable: 'The leaderboard could not be loaded. Open the full board on the competition platform.', - team: 'Team / Agent', score: 'Score', science: 'Science', completion: 'Completion', uniformity: 'Uniformity', submissions: 'Scored submissions', - }, - cta: { - title: 'Hand the next move of the night sky to the agent you wrote', - tagline: 'Same survey plan, weather replay, inserted requests, simulator, and scoring rule. The only variable is strategy.', - location: 'Online development and CosmosBench evaluation · October 17 at GOSIM Shenzhen', - }, - footer: { - copyright: '2026 GOSIM · Agent Observer', - mainSite: 'GOSIM', - register: 'Mission card coming soon', - }, - construction: { - title: 'Site Under Construction', - desc: 'Registration, teams, development documentation and submissions are available on the Agent Observer platform. Check platform announcements for updates.', - ok: 'Got it', - }, -} diff --git a/events/agentic-cosmos-2026/src/i18n/zh.ts b/events/agentic-cosmos-2026/src/i18n/zh.ts deleted file mode 100644 index 01318c5..0000000 --- a/events/agentic-cosmos-2026/src/i18n/zh.ts +++ /dev/null @@ -1,430 +0,0 @@ -export default { - nav: { - vision: "赛事说明", - about: "为什么", - mission: "赛题", - participate: "参赛", - leaderboard: "排行榜", - applyNow: "立即报名", - }, - vision: { - pageTitle: "巡天智能体", - pageSubtitle: "面向智能巡天的 GOSIM 黑客松", - intro: - "这份参赛说明介绍巡天运行为什么需要观测智能体、人类主值观测员的职责、挑战赛的三层规划范围、参赛者要提交什么、如何计分、所需的天文概念,以及完整赛程。", - backToHome: "返回首页", - sections: [ - { - kicker: "01 / 为什么", - title: "观测计划塑造了科学样本", - paragraphs: [ - "巡天望远镜以系统化的方式测绘大片天区。它不会把整夜时间耗在单个天体上,而是在许多个夜晚里观测成千上万个天区,从而积累起统计意义强大的星系、类星体、恒星等源的样本。", - "宇宙学正依赖这类大规模、均匀、定标良好的样本。广域巡天揭示宇宙的大尺度结构,约束膨胀历史,支撑暗能量测量,并把星系演化与宇宙时间联系起来。光谱巡天再加上第三个维度——红移。有了天球位置加红移,巡天就能构建宇宙结构的三维地图。DESI 是这一目标的一个具体公开范例:它为大样本的星系与类星体测量光谱,以绘制膨胀中的宇宙并研究暗能量。", - "但巡天运行极其困难。天气通过视宁度、透过率与天光亮度改变一次 900 秒曝光的价值;目标可见性随时间变化,取决于大气质量与天球位置;不同观测项目偏好不同天况:DARK(暗夜)、BRIGHT(亮夜)与 BACKUP(备用);巡天天区必须被广泛且均匀地覆盖完成,才能支撑可靠的科学分析。高优先级天区、接近完成的天区、覆盖不足的区域,都在争夺同一段时间。一次糟糕的战术选择,就会花掉真实的观测时间,并改变后续的整个计划。", - "现代 AI 系统开辟了一条路径:助手可以读取状态、调用计算工具、在物理约束下推理、提出计划、监控质量,并解释每一次选择。长期目标,是让一个观测智能体能够真正参与真实的巡天运行。这场黑客松,把上述长期愿景收敛成一个聚焦的基准测试。", - ], - highlight: - "参赛者设计观测员的逻辑系统;主办方提供任务定义、天区表、观测约束、天气场景、模拟器与评测协议。", - figure: { - key: "redshiftMap", - alt: "天球坐标与红移构成的巡天地图", - caption: "天球位置加上红移,就成了一张地图——这正是巡天最终要交付的东西。", - credit: "David Kirkby / DESI collaboration · CC BY 4.0", - }, - }, - { - kicker: "02 / 观测员", - title: "人类主值观测员的职责", - paragraphs: [ - "一个资深的主值观测员,在每个 900 秒的时隙里都要完成一整套决策:理解科学目标并决定今夜战术重点;读取视宁度、透过率、天光亮度与短期预报;判断今夜更适合 DARK、BRIGHT 还是 BACKUP 观测;保留当前可见、合规且有价值的天区;在科学产出、优先级、大气质量、天区均衡与时间浪费之间权衡排序;当补完的价值高于超曝代价时把天区做完;围绕天气系统、森林火灾烟羽、计划中的火箭发射与效率变化进行重规划;用快速验证信号校准后续决策;并解释为何在这个时段选择了这个动作。", - "这些职责,就是观测智能体要接手的工作。我们并不指望一个智能体一次性做得比人类更好,而是希望它能在固定接口、固定数据与固定计分下被客观评测,从而成为真实巡天运行的可行组件。", - ], - duties: [ - { n: "01", title: "夜间策略", desc: "理解科学目标,决定今夜的战术重点。" }, - { n: "02", title: "天气研判", desc: "读取视宁度、透过率、天光亮度与短期预报。" }, - { n: "03", title: "项目选择", desc: "判断今夜更适合 DARK、BRIGHT 还是 BACKUP 观测。" }, - { n: "04", title: "候选筛选", desc: "保留当前可见、合规且有价值的天区。" }, - { n: "05", title: "天区排序", desc: "在科学产出、优先级、大气质量、天区均衡与时间浪费之间权衡。" }, - { n: "06", title: "完成度管理", desc: "当补完的价值高于超曝代价时,把天区做完。" }, - { n: "07", title: "重规划", desc: "应对预报中的中断、新增观测请求与变化的观测效率。" }, - { n: "08", title: "质量监控", desc: "用快速验证信号来校准后续决策。" }, - { n: "09", title: "理由记录", desc: "解释观测员为何在这个时段选择了这个动作。" }, - ], - }, - { - kicker: "03 / 挑战赛制", - title: "巡天任务卡与挑战闭环", - paragraphs: [ - "每一个挑战实例都始于一张巡天任务卡(Survey Mission Card)。任务卡描述科学目标、天区面积、时间预算、望远镜台址、可用观测项目、目标类别、观测约束与计分规则。任务卡与公开开发数据——天区目录、示例天气场景、初始状态与可视化报告——将在黑客松开始前发布。", - "所有参赛者面对同一套评测场景:总体巡天计划、逐夜视宁度与天气回放、临时观测请求、可预见的中期中断、模拟器和计分规则全部固定。智能体读取当前状态,每 900 秒返回下一步观测动作。", - ], - loopTitle: "挑战赛闭环", - loop: [ - { stage: "固定输入", items: ["科学目标", "巡天天区", "天气回放"] }, - { stage: "智能体状态", items: ["天气与预报", "巡天进度", "可用天区"] }, - { stage: "推理", items: ["排序", "解释", "决策"] }, - { stage: "动作", items: ["观测", "或等待"] }, - { stage: "指标", items: ["科学产出", "均匀性与浪费", "违规"] }, - ], - }, - { - kicker: "04 / 规划尺度", - title: "统筹整个巡天、未来一周与下一个 900 秒", - paragraphs: [ - "长期——主办方通过任务卡提供总体巡天计划,智能体在运行中管理该计划;最终评分包含巡天完整度与完成质量。", - "中期——智能体依据完成进度和预报制定灵活的月、周、日计划,吸收天气系统、森林火灾烟羽、计划中的发射和新增观测请求。随着任务卡演进,这一层可由主办方决定是否启用。", - "短期——每个 900 秒时隙,智能体根据中期计划以及实时视宁度、透过率作出战术选择。这是计分基准的重点。", - ], - }, - { - kicker: "05 / 参赛任务", - title: "构建可复现运行的观测智能体项目", - paragraphs: [ - "项目须实现比赛平台当前版本的智能体接口。正式比赛的程序包使用 Python 3.12 运行环境;请从平台下载入门工具包。本站示例仅用于说明观测决策思路,正式接口以平台开发文档为准。", - "练习阶段可以上传观测结果文件或智能体程序包;正式线上比赛只接受智能体程序包,由平台在隐藏场景中运行。", - "阅读平台规则与开发文档,下载入门工具包,在公开场景中开发测试,再通过平台提交。平台提供评分报告、运行日志与决策回放。", - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - { - kicker: "06 / 计分", - title: "科学、可复现、可检视的评测", - paragraphs: [ - "总分由基础科学产出、项目加成和请求奖励构成,再扣除惩罚项。正式阶段有多个场景时取场景得分均值,排行榜采用每队最佳已评分提交。具体规则以比赛平台当前的计分版本 challenge-score-v3 为准。", - "评测遵循开放科学原则:固定数据与固定计分,让每份观测结果都按同一标准评估;可读的结果文件便于检查最终产出;开发天气与最终评测天气分离,比较的是泛化能力,而不是针对已知场景调参。", - "结果可视化把已完成的天区比例转换成「已观测目标图」——三维空间采样与二维蝴蝶图(天球位置加模拟红移,风格与 DESI 一致),让不同策略肉眼可辨。", - "同一观测员接口未来可以承载真实巡天日志回放、z > 5 类星体规划、LBG 规划和临时目标插入等任务卡;社区也可以为后续赛道提议新的固定数据集。", - ], - formula: `score = base_science + program_bonus + request_reward - - penalty_total`, - figure: { - key: "reviewOverlay", - alt: "评审叠加图:固定目标星表与参赛者观测样本", - caption: - "评审叠加图:灰色是完整的目标星表,彩色是某个智能体真正观测到的部分。策略的差别,一眼可见。", - plate: true, - }, - }, - { - kicker: "07 / 名词", - title: "一点点天文学就够用了", - paragraphs: [ - "不是天文专业也能读懂状态字典并据此推理。天区(Tile)是望远镜一次指向的一小片天空;巡天天区(Footprint)是整个巡天区域;目标(Targets)是每个天区内的天体计数。高优先级天区具有额外科学权重,接近完成的天区只差一次曝光,覆盖不足区域的进度落后于巡天整体。", - "视宁度(Seeing)描述大气扰动造成的模糊,数值越低越好;透过率(Transparency)越高表示大气越通透;天光亮度(Sky brightness)是背景光,对暗弱目标而言越暗越好;大气质量(Airmass)随天球位置变化,数值越低越好;DARK、BRIGHT、BACKUP 分别对应暗夜、亮夜和较差天况;donefrac 表示天区完成度,0 表示刚开始,1 表示已完成。", - "状态字典包含 weather(当前视宁度、透过率、天光亮度、观测项目、可观测性与速度)、forecast(当前时隙加上未来四个时隙)、progress(已完成天区数、平均完成度、天区均衡度、浪费时间与违规次数)以及 available_tiles(当下的合法选项,包含期望增益、期望浪费、目标计数、优先级与大气质量)。", - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - { - kicker: "08 / 时间线", - title: "从培训到颁奖的三阶段", - paragraphs: [ - "赛事分为三个阶段:10 月 1–4 日线上培训、10 月 5–7 日线上比赛,以及 10 月 17 日 GOSIM 深圳大会颁奖。", - "培训将介绍 CosmosBench、统一模拟器、任务卡和观测员接口。线上比赛期间,已报名队伍提交智能体程序包;运行、测评与排名由 Agent Observer 比赛平台提供。", - ], - rounds: [ - { number: "01", name: "线上培训", dates: "10 月 1–4 日", format: "线上", challenge: "熟悉 CosmosBench、统一模拟器、任务卡和观测员接口,并使用公开开发场景完成准备。", participants: "面向全球开放,个人与团队均可参加。" }, - { number: "02", name: "线上比赛", dates: "10 月 5–7 日", format: "线上", challenge: "提交智能体程序包,由 Agent Observer 比赛平台运行、评测并公布排名。", participants: "所有完成报名的参赛队伍。" }, - { number: "03", name: "颁奖日", dates: "10 月 17 日", format: "GOSIM 深圳", challenge: "公布最终成绩并举行颁奖典礼。", participants: "获奖队伍及受邀参赛者。" }, - ], - }, - ], - }, - hero: { - eyebrow: "GOSIM 黑客松 · 智能巡天", - system: "巡天智能体", - subtitle: "Agent Observer", - lede: - "为巡天之夜构建未来的观测智能体:读取天空状态,像主值观测员一样推理,每 900 秒选择下一次观测。", - pipeline: [ - { label: "线上培训", date: "10 月 1–4 日" }, - { label: "线上比赛", date: "10 月 5–7 日" }, - { label: "颁奖日", date: "10 月 17 日" }, - ], - location: ["10 月 1–4 日线上培训 · 10 月 5–7 日线上比赛", "10 月 17 日 · GOSIM 深圳大会颁奖"], - cta: "赛题即将发布", - }, - home: { - vision: { - kicker: "01 / 愿景", - title: "构建智能巡天的开放基准", - paragraphs: [ - "巡天望远镜每晚会面对成千上万个可观测的天区。天气在变、目标可见性在变、科学优先级也在变。人类观测员要做出的每一个决定,都影响着最终宇宙样本的质量。", - "我们正在构建一个开放基准:让智能体读取夜空状态,像资深观测员一样推理,并在每个 900 秒的时隙里决定下一次观测。所有参赛者面对相同的巡天计划、天气回放、新增请求、模拟器与计分规则——唯一的变量就是策略。", - ], - }, - mission: { - kicker: "02 / 赛题", - title: "望远镜下一步该看向哪里", - lede: "你的智能体接管人类主值观测员的核心决策。", - cards: [ - { title: "读状态", desc: "天气、预报、巡天进度,以及此刻合法的候选天区,全部装进一个紧凑的状态字典。" }, - { title: "作权衡", desc: "好天该用在暗弱目标上,还是补完那块只差一次曝光的天区?预报说稍后转好,值不值得再等一个时隙?" }, - { title: "下决策", desc: "观测某个天区,或者等待。每 900 秒给出一个动作,并说明为什么。" }, - ], - cardKicker: "赛题怎么给", - cardTitle: "一张巡天任务卡", - cardLede: "每一局挑战都始于一张任务卡。这一局的全部约定都写在上面:", - cardItems: [ - { term: "科学目标", desc: "这次巡天究竟要回答什么问题。" }, - { term: "巡天天区", desc: "要覆盖多大一片天,划成多少个天区。" }, - { term: "时间预算", desc: "一共有多少个 900 秒可以花。" }, - { term: "望远镜台址", desc: "纬度、可见性限制、时隙长度与大气质量约束。" }, - { term: "可用观测项目", desc: "这一局开放 DARK、BRIGHT、BACKUP 中的哪几种。" }, - { term: "目标类别", desc: "哪些天体计入产出,各自权重多少。" }, - { term: "观测约束", desc: "什么不能做,越界如何判罚。" }, - { term: "计分规则", desc: "分数怎么算,惩罚项有哪些。" }, - ], - cardNote: "权威的输入输出格式与接口约定,一律以任务卡为准。任务卡与公开开发数据——天区目录、示例天气场景、初始状态与可视化报告——将在黑客松开始前发布。", - }, - participate: { - kicker: "04 / 如何参赛", - title: "三步加入挑战", - lede: "从培训到颁奖,整个赛程清晰透明。", - steps: [ - { n: "01", title: "报名组队", desc: "在比赛平台注册账号,再创建或加入一支队伍。个人开发者也欢迎。" }, - { n: "02", title: "开发智能体", desc: "下载比赛平台的入门工具包,按当前接口开发智能体,并在公开练习场景中测试。" }, - { n: "03", title: "提交评测", desc: "练习阶段支持观测结果文件或智能体程序包;正式线上比赛提交智能体程序包,由平台运行并评测。" }, - ], - timeline: [ - { label: "10.1–10.4", desc: "线上培训" }, - { label: "10.5–10.7", desc: "线上比赛" }, - { label: "10.17", desc: "GOSIM 深圳颁奖" }, - ], - cta: "立即报名", - }, - prizes: { - kicker: "05 / 奖项", - title: "$5,500 奖金池", - lede: "三档奖项奖励表现出色的观测智能体。", - tiers: [ - { place: "一等奖", amount: "$2,000", count: "1 个" }, - { place: "二等奖", amount: "$1,000", count: "2 个" }, - { place: "三等奖", amount: "$500", count: "3 个" }, - ], - }, - leaderboard: { - kicker: "06 / 排行榜", - title: "实时排名", - lede: "正式线上比赛排行榜由 Agent Observer 比赛平台提供;练习榜及各阶段状态请查看完整榜单。", - }, - }, - about: { - kicker: "01 / 为什么", - title: "观测计划本身,塑造了最终的科学样本", - p1: "巡天望远镜以系统化的方式测绘大片天区。它不会把整夜时间耗在单个天体上,而是在许多个夜晚里观测成千上万个天区,从而积累起统计意义强大的星系、类星体、恒星等源的样本。", - p2: "宇宙学正依赖这类大规模、均匀、定标良好的样本。广域巡天揭示宇宙的大尺度结构,约束膨胀历史,支撑暗能量测量,并把星系演化与宇宙时间联系起来。光谱巡天再加上第三个维度——红移。有了天球位置加红移,巡天就能构建宇宙结构的三维地图。", - p3: "DESI 是这一目标的一个具体公开范例:它为大样本的星系与类星体测量光谱,以绘制膨胀中的宇宙并研究暗能量。", - hardTitle: "为什么巡天运行很难", - hardItems: [ - { term: "天气", desc: "通过视宁度、透过率与天光亮度,改变一次 900 秒曝光的价值。" }, - { term: "目标可见性", desc: "随时间变化,取决于大气质量与天球位置。" }, - { term: "观测项目", desc: "不同项目偏好不同天况:DARK(暗夜)、BRIGHT(亮夜)与 BACKUP(备用)。" }, - { term: "巡天天区", desc: "必须被广泛且均匀地覆盖完成,才能支撑可靠的科学分析。" }, - ], - hardClosing: - "高优先级天区、接近完成的天区、覆盖不足的区域,都在争夺同一段时间。一次糟糕的战术选择,就会花掉真实的观测时间,并改变后续的整个计划。夜间运行要求的决策,既要有效,又要可解释。", - whyNowTitle: "为什么「观测智能体」正当其时", - whyNow: - "长期目标,是让一个观测智能体能够真正参与真实的巡天运行。人类的主值观测员,会把科学目标、天气、仪器状态、天区完成进度与候选天域,翻译成当下的战术观测决策。现代 AI 系统开辟了一条路径:助手可以读取状态、调用计算工具、在物理约束下推理、提出计划、监控质量,并解释每一次选择。", - whyNowClosing: "这场黑客松,把上述长期愿景收敛成一个聚焦的基准测试。", - split: [ - { side: "参赛者", desc: "设计观测员的逻辑系统。" }, - { side: "主办方", desc: "提供任务定义、天区表、观测约束、天气场景、模拟器与评测协议。" }, - ], - }, - observer: { - kicker: "02 / 观测员", - title: "人类主值观测员的职责", - intro: "这九件事,就是观测智能体要接手的工作。", - duties: [ - { n: "01", title: "夜间策略", desc: "理解科学目标,决定今夜的战术重点。" }, - { n: "02", title: "天气研判", desc: "读取视宁度、透过率、天光亮度与短期预报。" }, - { n: "03", title: "项目选择", desc: "判断今夜更适合 DARK、BRIGHT 还是 BACKUP 观测。" }, - { n: "04", title: "候选筛选", desc: "保留当前可见、合规且有价值的天区。" }, - { n: "05", title: "天区排序", desc: "在科学产出、优先级、大气质量、天区均衡与时间浪费之间权衡。" }, - { n: "06", title: "完成度管理", desc: "当「补完的价值」高于「超曝的代价」时,把天区做完。" }, - { n: "07", title: "重规划", desc: "应对预报中的中断、新增观测请求与变化的观测效率。" }, - { n: "08", title: "质量监控", desc: "用快速验证信号来校准后续决策。" }, - { n: "09", title: "理由记录", desc: "解释观测员为何在这个时段选择了这个动作。" }, - ], - }, - challenge: { - kicker: "03 / 赛制", - title: "巡天任务卡", - intro: - "每一个挑战实例都始于一张巡天任务卡(Survey Mission Card)。任务卡定义科学目标、天区面积、时间预算、望远镜台址、观测项目、目标类别、约束、计分规则和权威接口约定。任务卡与公开开发数据将在黑客松开始前发布。", - cards: [ - { title: "任务定义", desc: "要覆盖哪片天区、哪些目标重要、有多少时间。" }, - { title: "望远镜 / 台址", desc: "纬度、可见性限制、时隙长度、大气质量约束。" }, - { title: "公开开发数据", desc: "天区目录、示例天气场景、初始状态与可视化报告。" }, - { title: "最终评测数据", desc: "由主办方提供的天气回放,在同一套模拟器中运行。" }, - { title: "提交物", desc: "练习结果文件或智能体程序包;正式线上比赛只接受程序包。" }, - { title: "统一评测", desc: "所有智能体面对相同的巡天计划、天气回放、新增请求、中断、模拟器与计分规则。" }, - ], - loopTitle: "挑战赛闭环", - loop: [ - { stage: "固定输入", items: ["科学目标", "巡天天区", "天气回放"] }, - { stage: "智能体状态", items: ["天气与预报", "巡天进度", "可用天区"] }, - { stage: "推理", items: ["排序", "解释", "决策"] }, - { stage: "动作", items: ["观测", "或等待"] }, - { stage: "指标", items: ["科学产出", "均匀性与浪费", "违规"] }, - ], - loopNote: "唯一的变量是智能体策略;总体巡天计划、天气回放、临时请求、可预见中断、模拟器和计分规则对所有参赛者固定一致。", - }, - build: { - kicker: "04 / 参赛任务", - title: "参赛者要做什么", - intro: - "按比赛平台文档开发智能体。练习阶段支持结果文件与程序包;正式线上比赛提交程序包,由平台在 Python 3.12 环境中运行。", - io: [ - { term: "输入", desc: "一个小的状态字典,包含天气、预报、巡天进度与合法候选天区。" }, - { term: "输出", desc: "下一个 900 秒时隙的观测计划,例如在 DARK 项目下观测某个 tile_id,或者等待;理由文本不受格式限制。" }, - { term: "计分", desc: "有效目标数、完成的天区、天区覆盖的均衡性、时间使用效率,以及动作的合规性。" }, - { term: "提交物", desc: "练习阶段支持结果文件与智能体程序包;正式比赛只接受程序包,格式以平台文档为准。" }, - ], - starterTitle: "仅供说明的示例", - starterIntro: - "这条最小效用规则仅展示策略思路;正式程序包的运行环境与接口以比赛平台开发文档为准。", - starterCode: `tiles = state["available_tiles"] -if len(tiles) == 0: - return {"action": "wait"} - -best = max(tiles, key=lambda t: t["expected_weighted_gain"]) -return {"action": "observe", "tile_id": best["tile_id"], "plan": "DARK", - "reason": "highest useful gain"}`, - starterClosing: - "天气、完成度、大气质量、天区均衡与浪费是有用的策略因素;如何权衡它们、如何组织智能体,由参赛者自行决定。", - archTitle: "仅供启发的架构", - architectures: [ - { name: "效用型智能体", desc: "为每个候选天区计算一个分数,选择分数最高者。" }, - { name: "天气感知规划器", desc: "用预报来决定是「花掉」还是「存下」高价值天区。" }, - { name: "完成度管理器", desc: "识别接近 donefrac = 1 的天区,管理超曝浪费。" }, - { name: "天区均衡器", desc: "为完成进度较低的区域加权。" }, - { name: "风控型智能体", desc: "在排序之前,先过滤掉高浪费、高大气质量或低价值的选项。" }, - { name: "主值 / 辅值双智能体", desc: "一个模块提出计划,另一个模块检查约束并解释风险。" }, - { name: "LLM 规划器 + 规则检查器", desc: "用语言推理做策略,用确定性代码保证合法性。" }, - ], - archCode: `AgentObserver - -> WeatherInterpreter 天气解读 - -> ProgramSelector 项目选择 - -> CandidateFilter 候选过滤 - -> TileRanker 天区排序 - -> FootprintBalancer 天区均衡 - -> CompletionManager 完成度管理 - -> SupportObserver / RiskChecker 辅值观测 / 风险检查 - -> ReasonLogger 理由记录`, - scenariosTitle: "会遇到的观测情境", - scenariosIntro: "一个强大的智能体,需要处理若干反复出现的情境。", - scenarios: [ - { when: "良好暗夜", then: "优先考虑高期望增益、高优先级与暗弱目标项目。" }, - { when: "临界但可用的天气", then: "偏好稳健的天区、补完机会与低浪费选项。" }, - { when: "预报转好", then: "在花掉高价值天区之前,先比较当前速度与未来速度。" }, - { when: "天区不均衡", then: "给覆盖不足的区域一个加成。" }, - { when: "接近完成的天区", then: "当补完奖励高于浪费代价时,把它做完。" }, - { when: "高大气质量", then: "降低那些更难观测的天区的效用。" }, - ], - }, - scoring: { - kicker: "03 / 测评", - title: "分数怎么来,凭什么可信", - intro: - "总分由基础科学产出、项目加成和请求奖励构成,再扣除惩罚项。正式阶段有多个场景时取场景得分均值,排行榜采用每队最佳已评分提交。", - formula: `score = base_science + program_bonus + request_reward - - penalty_total`, - formulaVersion: "平台计分版本 challenge-score-v3", - note: - "内部用什么决策逻辑不限。但跑到最后你会发现,好的智能体总是在即时产出与完成度、均匀性、天气风险和运行纪律之间反复权衡——那正是这些计分项想逼出来的东西。", - - stressTitle: "真正拉开差距的地方:天气变坏之后", - stress: - "天气回放里埋着确定性的中断时段——降雨、森林火灾烟羽、已排期的火箭发射。所有人遇到的中断完全相同,区别只在怎么应对。", - stressWeak: "笨办法", - stressWeakDesc: "干等着浪费时间,或者把最好的暗夜目标耗在根本看不清的天里。", - stressStrong: "好办法", - stressStrongDesc: "提前读预报动手,该切观测项目就切,顺手补完接近收尾的天区,把宝贵的暗夜目标留到条件转好。", - - principlesTitle: "为什么这个结果可信", - principles: [ - { term: "可复现", desc: "固定种子、固定数据、固定计分。任何一份提交都能被第三方重新跑一遍,复核出同一个分数。" }, - { term: "可审计到每一回合", desc: "状态字典、运行历史与逐回合的完整轨迹日志全部可读,每一个决策事后都查得到。" }, - { term: "难以过拟合", desc: "开发用天气与最终评测天气相互分离,比的是泛化能力,不是对已知场景的调参。" }, - { term: "唯一的变量", desc: "参赛者掌控的只有智能体策略与推理逻辑;模拟器、数据、天气回放、约束与计分都在主办方手里,对所有人一致。" }, - { term: "计分范围明确", desc: "短期观测规划是主要评测;中期规划随任务卡演进,由主办方决定是否启用。" }, - ], - - vizTitle: "跑完之后,你能看见什么", - vizNote: "这张图是基准测试的可视化层;真正被计分的,仍然是规划本身。", - }, - glossary: { - kicker: "06 / 名词", - title: "一点点天文学就够用了", - intro: "不是天文专业也能读懂状态字典并据此推理。下面这些就够了。", - terms: [ - { term: "天区(Tile)", desc: "望远镜一次可以观测的一小片天空。" }, - { term: "巡天天区(Footprint)", desc: "整个巡天希望覆盖的全部天空面积。" }, - { term: "目标(Targets)", desc: "在这个规划基准里,指每个天区内部的天体计数。" }, - { term: "视宁度(Seeing)", desc: "描述图像的模糊程度;数值越低越好。" }, - { term: "透过率(Transparency)", desc: "描述大气的通透程度;数值越高越好。" }, - { term: "天光亮度(Sky brightness)", desc: "带来背景噪声;对暗弱目标而言,天越暗通常越好。" }, - { term: "大气质量(Airmass)", desc: "衡量光线穿过多少大气;数值越低越好。" }, - { term: "DARK / BRIGHT / BACKUP", desc: "分别匹配暗夜、亮夜和较差天况的观测项目。" }, - { term: "优先级与覆盖", desc: "高优先级、接近完成和覆盖不足的天区会竞争每个观测时隙。" }, - { term: "donefrac", desc: "天区完成度:0 表示刚开始,1 表示已完成。" }, - ], - stateTitle: "状态里都有什么", - state: [ - { field: "weather", desc: "当前视宁度、透过率、天光亮度、观测项目、可观测性与速度。" }, - { field: "forecast", desc: "当前时隙加上未来四个时隙,给智能体重规划的机会。" }, - { field: "progress", desc: "已完成天区数、平均完成度、天区均衡度、浪费时间与违规次数。" }, - { field: "available_tiles", desc: "当下的合法选项,包含期望增益、期望浪费、目标计数、优先级与大气质量。" }, - ], - actionCode: `return { - "action": "observe", - "tile_id": 100123, - "plan": "DARK", - "reason": "good weather and highest useful gain", -}`, - }, - schedule: { - kicker: "07 / 时间线", title: "赛程", - intro: "10 月 1–4 日线上培训,10 月 5–7 日参加 CosmosBench 支撑的线上比赛,10 月 17 日大会颁奖。", - challengeLabel: "巡天任务", participantsLabel: "参与范围", - rounds: [ - { number: "01", name: "线上培训", dates: "10 月 1–4 日", format: "线上", challenge: "熟悉 CosmosBench、统一模拟器、任务卡和观测员接口,并使用公开开发场景完成准备。", participants: "面向全球开放,个人与团队均可参加。" }, - { number: "02", name: "线上比赛", dates: "10 月 5–7 日", format: "线上", challenge: "提交智能体程序包,由 Agent Observer 比赛平台运行、评测并公布排名。", participants: "所有完成报名的参赛队伍。" }, - { number: "03", name: "颁奖日", dates: "10 月 17 日", format: "GOSIM 深圳", challenge: "公布最终成绩并举行颁奖典礼。", participants: "获奖队伍及受邀参赛者。" }, - ], - }, - leaderboard: { - kicker: "08 / CosmosBench", title: "实时排行榜 · Top 20", - intro: "同一任务卡、天气回放、模拟器与计分函数;测评和实时成绩均由 CosmosBench 支撑。", - refresh: "刷新", full: "完整榜单", updated: "更新时间", loading: "正在读取比赛平台…", empty: "正式线上比赛暂无公开成绩,请前往比赛平台查看阶段状态和练习榜。", unavailable: "排行榜暂时无法加载,请点击“完整榜单”前往比赛平台查看。", - team: "队伍 / 智能体", score: "总分", science: "科学产出", completion: "完成度", uniformity: "均匀性", submissions: "已评分提交", - }, - cta: { - title: "把夜空的下一步,交给你写的智能体", - tagline: "同一巡天计划、天气回放、新增请求、模拟器与计分规则;唯一的变量是策略。", - location: "线上开发与 CosmosBench 统一评测 · 10 月 17 日 GOSIM 深圳", - }, - footer: { - copyright: "2026 GOSIM · 巡天智能体", - mainSite: "GOSIM", - register: "赛题即将发布", - }, - construction: { - title: "网站建设中", - desc: "报名、组队、开发文档和提交已统一接入 Agent Observer 比赛平台;最新安排请查看平台赛事通知。", - ok: "知道了", - }, -} diff --git a/events/agentic-cosmos-2026/src/lib/supabase.ts b/events/agentic-cosmos-2026/src/lib/supabase.ts deleted file mode 100644 index 31768c2..0000000 --- a/events/agentic-cosmos-2026/src/lib/supabase.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createClient } from '@supabase/supabase-js' -const url = String(import.meta.env.VITE_SUPABASE_URL || '') -const key = String(import.meta.env.VITE_SUPABASE_ANON_KEY || '') -export const isSupabaseConfigured = Boolean(url && key && !url.includes('your-project')) -export const supabase = createClient(url || 'https://placeholder.supabase.co', key || 'placeholder', { - auth: { persistSession: true, autoRefreshToken: true, detectSessionInUrl: true }, -}) diff --git a/events/agentic-cosmos-2026/src/main.ts b/events/agentic-cosmos-2026/src/main.ts deleted file mode 100644 index 6e96238..0000000 --- a/events/agentic-cosmos-2026/src/main.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' -import router from './router' -import './assets/styles/main.css' - -createApp(App).use(router).mount('#app') diff --git a/events/agentic-cosmos-2026/src/pages/HomePage.vue b/events/agentic-cosmos-2026/src/pages/HomePage.vue deleted file mode 100644 index 744a03f..0000000 --- a/events/agentic-cosmos-2026/src/pages/HomePage.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/events/agentic-cosmos-2026/src/pages/RegisterPage.vue b/events/agentic-cosmos-2026/src/pages/RegisterPage.vue deleted file mode 100644 index 3c7c795..0000000 --- a/events/agentic-cosmos-2026/src/pages/RegisterPage.vue +++ /dev/null @@ -1,812 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/pages/VisionPage.vue b/events/agentic-cosmos-2026/src/pages/VisionPage.vue deleted file mode 100644 index bca161e..0000000 --- a/events/agentic-cosmos-2026/src/pages/VisionPage.vue +++ /dev/null @@ -1,184 +0,0 @@ - - - - - diff --git a/events/agentic-cosmos-2026/src/registration.ts b/events/agentic-cosmos-2026/src/registration.ts deleted file mode 100644 index 150fcf4..0000000 --- a/events/agentic-cosmos-2026/src/registration.ts +++ /dev/null @@ -1,15 +0,0 @@ -// Public participant platform. Auth, teams and submissions stay on its Supabase project. -export const platformUrl = String(import.meta.env.VITE_AGENT_OBSERVER_URL || 'https://bh3gei.github.io/agent-observer').replace(/\/+$/, '') -export const registrationUrl = `${platformUrl}/register` -export const platformLinks = { - login: `${platformUrl}/register?mode=login`, - team: `${platformUrl}/team`, - submit: `${platformUrl}/submit`, - rules: `${platformUrl}/rules`, - docs: `${platformUrl}/docs`, - resources: `${platformUrl}/resources`, - announcements: `${platformUrl}/announcements`, - leaderboard: `${platformUrl}/leaderboard/online`, -} -// Anonymous, CORS-enabled Edge Function; no database credentials are needed here. -export const leaderboardApi = String(import.meta.env.VITE_AGENT_OBSERVER_LEADERBOARD_API || 'https://vdiemcofukuxglqsmlyz.supabase.co/functions/v1/leaderboard?phase=online') diff --git a/events/agentic-cosmos-2026/src/router.ts b/events/agentic-cosmos-2026/src/router.ts deleted file mode 100644 index 9a08ec2..0000000 --- a/events/agentic-cosmos-2026/src/router.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import { registrationUrl } from './registration' -import HomePage from './pages/HomePage.vue' - -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { path: '/', component: HomePage }, - { path: '/brief', component: () => import('./pages/VisionPage.vue') }, - { path: '/vision', redirect: '/brief' }, - { path: '/register', component: HomePage, beforeEnter: () => { window.location.replace(registrationUrl); return false } }, - ], - scrollBehavior(to, _from, savedPosition) { - if (savedPosition) return savedPosition - if (to.hash) { - return new Promise(resolve => { - window.setTimeout(() => resolve({ el: to.hash, top: 64, behavior: 'smooth' }), 50) - }) - } - return { top: 0 } - }, -}) - -export default router diff --git a/events/agentic-cosmos-2026/supabase/migrations/20260820_00_cosmos26_registration.sql b/events/agentic-cosmos-2026/supabase/migrations/20260820_00_cosmos26_registration.sql deleted file mode 100644 index 4657dc2..0000000 --- a/events/agentic-cosmos-2026/supabase/migrations/20260820_00_cosmos26_registration.sql +++ /dev/null @@ -1,36 +0,0 @@ --- Run this only in the dedicated Cosmos26 Supabase project, never Factory26. -create extension if not exists pgcrypto; - -create table if not exists public.profiles ( - id uuid primary key references auth.users(id) on delete cascade, - name text not null default '', email text, github_id text, role text, discord text, - looking_for_team boolean not null default true, - team_id uuid, created_at timestamptz not null default now() -); -create table if not exists public.teams ( - id uuid primary key default gen_random_uuid(), name text not null, - leader_id uuid not null references public.profiles(id), project_idea text, - github_repo text, max_size integer check (max_size is null or max_size > 0), - created_at timestamptz not null default now() -); -alter table public.profiles drop constraint if exists profiles_team_id_fkey; -alter table public.profiles add constraint profiles_team_id_fkey foreign key (team_id) references public.teams(id) on delete set null; - -create or replace function public.handle_cosmos26_user() returns trigger language plpgsql security definer set search_path = public as $$ -begin - insert into public.profiles (id, email, name, github_id, role, discord, looking_for_team) - values (new.id, new.email, coalesce(new.raw_user_meta_data->>'name',''), new.raw_user_meta_data->>'github_id', new.raw_user_meta_data->>'role', new.raw_user_meta_data->>'discord', coalesce((new.raw_user_meta_data->>'looking_for_team')::boolean,true)) - on conflict (id) do nothing; - return new; -end $$; -drop trigger if exists on_cosmos26_auth_user_created on auth.users; -create trigger on_cosmos26_auth_user_created after insert on auth.users for each row execute function public.handle_cosmos26_user(); - -alter table public.profiles enable row level security; -alter table public.teams enable row level security; -create policy "profiles readable by participants" on public.profiles for select to authenticated using (true); -create policy "participants update own profile" on public.profiles for update to authenticated using (id = auth.uid()) with check (id = auth.uid()); -create policy "participants insert own profile" on public.profiles for insert to authenticated with check (id = auth.uid()); -create policy "teams readable by participants" on public.teams for select to authenticated using (true); -create policy "participants create own team" on public.teams for insert to authenticated with check (leader_id = auth.uid()); -create policy "leaders update own team" on public.teams for update to authenticated using (leader_id = auth.uid()) with check (leader_id = auth.uid()); diff --git a/events/agentic-cosmos-2026/supabase/migrations/20260820_01_cosmos26_team_workflow.sql b/events/agentic-cosmos-2026/supabase/migrations/20260820_01_cosmos26_team_workflow.sql deleted file mode 100644 index bf424f0..0000000 --- a/events/agentic-cosmos-2026/supabase/migrations/20260820_01_cosmos26_team_workflow.sql +++ /dev/null @@ -1,187 +0,0 @@ --- Transactional team workflow for the dedicated Cosmos26 Supabase project. --- Apply after 20260820_00_cosmos26_registration.sql. - -create or replace function public.create_cosmos26_team( - p_name text, - p_project_idea text default null, - p_github_repo text default null, - p_max_size integer default 4 -) returns uuid -language plpgsql -security definer -set search_path = public -as $$ -declare - v_user_id uuid := auth.uid(); - v_current_team uuid; - v_team_id uuid; -begin - if v_user_id is null then - raise exception 'You must be logged in.'; - end if; - if nullif(trim(p_name), '') is null then - raise exception 'Team name is required.'; - end if; - if p_max_size is null or p_max_size < 1 or p_max_size > 8 then - raise exception 'Team size must be between 1 and 8.'; - end if; - - select team_id into v_current_team - from public.profiles - where id = v_user_id - for update; - - if not found then - raise exception 'Complete your participant profile first.'; - end if; - if v_current_team is not null then - raise exception 'You already belong to a team.'; - end if; - - insert into public.teams (name, leader_id, project_idea, github_repo, max_size) - values (trim(p_name), v_user_id, nullif(trim(p_project_idea), ''), nullif(trim(p_github_repo), ''), p_max_size) - returning id into v_team_id; - - update public.profiles - set team_id = v_team_id, looking_for_team = false - where id = v_user_id; - - return v_team_id; -end; -$$; - -create or replace function public.join_cosmos26_team(p_team_id uuid) -returns void -language plpgsql -security definer -set search_path = public -as $$ -declare - v_user_id uuid := auth.uid(); - v_current_team uuid; - v_max_size integer; - v_member_count integer; -begin - if v_user_id is null then - raise exception 'You must be logged in.'; - end if; - - select team_id into v_current_team - from public.profiles - where id = v_user_id - for update; - - if not found then - raise exception 'Complete your participant profile first.'; - end if; - if v_current_team is not null then - raise exception 'Leave your current team before joining another.'; - end if; - - select max_size into v_max_size - from public.teams - where id = p_team_id - for update; - - if not found then - raise exception 'Team not found.'; - end if; - - select count(*) into v_member_count - from public.profiles - where team_id = p_team_id; - - if v_max_size is not null and v_member_count >= v_max_size then - raise exception 'This team is full.'; - end if; - - update public.profiles - set team_id = p_team_id, looking_for_team = false - where id = v_user_id; -end; -$$; - -create or replace function public.leave_cosmos26_team() -returns void -language plpgsql -security definer -set search_path = public -as $$ -declare - v_user_id uuid := auth.uid(); - v_team_id uuid; - v_leader_id uuid; -begin - if v_user_id is null then - raise exception 'You must be logged in.'; - end if; - - select team_id into v_team_id - from public.profiles - where id = v_user_id - for update; - - if v_team_id is null then - raise exception 'You are not on a team.'; - end if; - - select leader_id into v_leader_id - from public.teams - where id = v_team_id - for update; - - if v_leader_id = v_user_id then - raise exception 'Team leaders must disband the team instead.'; - end if; - - update public.profiles - set team_id = null, looking_for_team = true - where id = v_user_id; -end; -$$; - -create or replace function public.disband_cosmos26_team(p_team_id uuid) -returns void -language plpgsql -security definer -set search_path = public -as $$ -declare - v_user_id uuid := auth.uid(); -begin - if v_user_id is null then - raise exception 'You must be logged in.'; - end if; - - perform 1 - from public.teams - where id = p_team_id and leader_id = v_user_id - for update; - - if not found then - raise exception 'Only the team leader can disband this team.'; - end if; - - update public.profiles - set team_id = null, looking_for_team = true - where team_id = p_team_id; - - delete from public.teams where id = p_team_id; -end; -$$; - -revoke all on function public.create_cosmos26_team(text, text, text, integer) from public; -revoke all on function public.join_cosmos26_team(uuid) from public; -revoke all on function public.leave_cosmos26_team() from public; -revoke all on function public.disband_cosmos26_team(uuid) from public; - -grant execute on function public.create_cosmos26_team(text, text, text, integer) to authenticated; -grant execute on function public.join_cosmos26_team(uuid) to authenticated; -grant execute on function public.leave_cosmos26_team() to authenticated; -grant execute on function public.disband_cosmos26_team(uuid) to authenticated; - --- Membership changes go through the functions above, so clients cannot bypass --- team capacity checks by directly changing profiles.team_id. -revoke update on public.profiles from authenticated; -grant update (name, github_id, role, discord, looking_for_team) on public.profiles to authenticated; -revoke insert on public.teams from authenticated; diff --git a/events/agentic-cosmos-2026/tsconfig.app.json b/events/agentic-cosmos-2026/tsconfig.app.json deleted file mode 100644 index ade3812..0000000 --- a/events/agentic-cosmos-2026/tsconfig.app.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "@vue/tsconfig/tsconfig.dom.json", - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "types": ["vite/client"], - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] -} diff --git a/events/agentic-cosmos-2026/tsconfig.json b/events/agentic-cosmos-2026/tsconfig.json deleted file mode 100644 index 1ffef60..0000000 --- a/events/agentic-cosmos-2026/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ] -} diff --git a/events/agentic-cosmos-2026/tsconfig.node.json b/events/agentic-cosmos-2026/tsconfig.node.json deleted file mode 100644 index 8a67f62..0000000 --- a/events/agentic-cosmos-2026/tsconfig.node.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", - "target": "ES2023", - "lib": ["ES2023"], - "module": "ESNext", - "types": ["node"], - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "verbatimModuleSyntax": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true - }, - "include": ["vite.config.ts"] -} diff --git a/events/agentic-cosmos-2026/vite.config.ts b/events/agentic-cosmos-2026/vite.config.ts deleted file mode 100644 index 3ac90d4..0000000 --- a/events/agentic-cosmos-2026/vite.config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { defineConfig, loadEnv } from 'vite' -import vue from '@vitejs/plugin-vue' -import tailwindcss from '@tailwindcss/vite' -import { resolve } from 'path' -import { copyFileSync } from 'fs' - -function normalizeBasePath(value: string): string { - const trimmed = value.trim() - if (!trimmed || trimmed === '/') return '/' - return `/${trimmed.replace(/^\/+|\/+$/g, '')}/` -} - -export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd(), '') - - return { - base: normalizeBasePath(env.VITE_BASE_PATH || '/'), - plugins: [ - vue(), - tailwindcss(), - { - name: 'copy-404', - closeBundle() { - try { copyFileSync(resolve('dist/index.html'), resolve('dist/404.html')) } catch {} - }, - }, - ], - } -}) diff --git a/events/oaic-harness-2026/.env.example b/events/oaic-harness-2026/.env.example deleted file mode 100644 index 2cbea22..0000000 --- a/events/oaic-harness-2026/.env.example +++ /dev/null @@ -1,17 +0,0 @@ -# Supabase -VITE_SUPABASE_URL=https://your-project.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key - -# Site URL (used for auth redirects, QR codes, etc.) -VITE_SITE_URL=https://your-hackathon.example.com - -# ARC-Bench account and team sync (server-side only; do not use a VITE_ prefix) -ARCBENCH_SYNC_URL=https://your-arcbench.example.com/api/integrations/hackathon/events -ARCBENCH_SYNC_SECRET=replace-with-the-shared-secret -ARCBENCH_SYNC_INBOUND_SECRET=replace-with-a-random-private-secret - -# URL path where the app is mounted. Must start and end with a slash. -VITE_BASE_PATH=/ - -# 可选:覆盖默认的 Supabase Edge Function 排行榜代理地址 -# VITE_ARCBENCH_LEADERBOARD_PROXY=https://your-project.supabase.co/functions/v1/arcbench-leaderboard diff --git a/events/oaic-harness-2026/README.md b/events/oaic-harness-2026/README.md deleted file mode 100644 index 09fbf32..0000000 --- a/events/oaic-harness-2026/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# 2026 OAIC International Hackathon for Agentic Factory and Grand Challenge Series - -Official website for the **2026 OAIC International Hackathon for Agentic Factory and Grand Challenge Series**, running September 1–October 17, 2026 online and concluding at GOSIM Shenzhen. - -The application is a Vue 3 + TypeScript + Vite site with bilingual public content, Supabase authentication, team registration, project submissions, invitations, announcements, and administrative tools. It was migrated from the earlier Paris hackathon sites and the reusable hackathon kit, then rewritten for the 2026 event. - -## Local development - -Requirements: Node.js 20+ and a Supabase project. - -```bash -npm ci -cp .env.example .env -npm run dev -``` - -Set these values in `.env`: - -```dotenv -VITE_SUPABASE_URL=https://your-project.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key -VITE_SITE_URL=http://localhost:5173 -VITE_BASE_PATH=/ -``` - -## Supabase - -Apply the SQL in [`docs/supabase-setup.md`](docs/supabase-setup.md), including all migrations under `supabase/migrations/`. The 2026 migration adds team harness selection and one submission per team per competition round. - -Registration is complete only after a participant creates or joins a team. Team-size limits are intentionally not enforced until organizers confirm the policy. - -## Content source - -Public event copy lives in: - -- `src/i18n/en.ts` -- `src/i18n/zh.ts` - -Confirmed event data is also summarized in `config/event.example.yaml`. Unknown items—team size, registration deadline, participation fee, judging weights, public contact details, and unconfirmed sponsors—are intentionally not published. - -## Build - -```bash -npm run build -``` - -The deployable static output is written to `dist/`. See [`docs/deployment.md`](docs/deployment.md) for hosting options. - -## Stack - -- Vue 3 and TypeScript -- Vite 8 and Tailwind CSS 4 -- Supabase Auth, Database, Realtime, Storage, and Edge Functions -- Playwright browser-testing dependency - -## License - -MIT diff --git a/events/oaic-harness-2026/config/event.example.yaml b/events/oaic-harness-2026/config/event.example.yaml deleted file mode 100644 index bddd0e6..0000000 --- a/events/oaic-harness-2026/config/event.example.yaml +++ /dev/null @@ -1,98 +0,0 @@ -# Reference copy of the confirmed 2026 event data. -# The website currently reads public copy from src/i18n/en.ts and src/i18n/zh.ts. - -event: - name: "2026 OAIC International Hackathon for Agentic Factory and Grand Challenge Series" - tagline: "Requirements as Source Code" - organizer: "OAIC" - dates: "September 1–October 17, 2026" - start_time: "2026-09-01T00:00:00+08:00" - end_time: "2026-10-17T23:59:59+08:00" - format: "Online + GOSIM Shenzhen" - registration_status: "open" - team_size: null - registration_deadline: null - participation_fee: null - contact: null - -confirmed_contributors: - - name: "FWAI Institute" - role: "Lead · Funding" - - name: "Shanghai Jiao Tong University CoPhi" - role: "ARC · ARC-Bench" - -models: - - "Kimi" - - "GLM" - - "MiniMax" - - "DeepSeek" - -capability_domains: - - id: "auth-session" - title: "Auth & Session" - stage: "Qualifier" - - id: "repository-lifecycle" - title: "Repository Lifecycle" - stage: "Qualifier" - - id: "issues-forms" - title: "Issues & Issue Forms" - stage: "Qualifier" - - id: "pull-request-review" - title: "Pull Request Review" - stage: "Qualifier" - - id: "actions-workflow" - title: "Actions: Workflow & Scheduling" - stage: "Qualifier · Foundation" - - id: "org-permissions-audit" - title: "Org, Permissions & Audit" - stage: "Qualifier · Foundation" - - id: "compute-engine" - title: "The Compute Engine" - stage: "Grand Challenge" - -awards: - total_pool: "$51,500" - count: 11 - tiers: - - name: "OAIC Grand Prize" - prize: "$20,000" - count: 1 - - name: "First Prize" - prize: "$10,000" - count: 2 - - name: "Second Prize" - prize: "$3,000" - count: 3 - - name: "Third Prize" - prize: "$500" - count: 5 - -judging: - weights: null - criteria: - - name: "GUI Test Pass Rate" - method: "automatic" - - name: "Token Efficiency" - method: "automatic" - - name: "Completion Time" - method: "automatic" - - name: "Harness Engineering" - method: "AI prescore + judges" - - name: "Software Maintainability" - method: "AI prescore + judges" - -schedule: - - name: "Bootcamp & Qualifier" - dates: "Bootcamp September 1–15; submissions close September 29" - format: "Online" - - name: "Grand Challenge" - dates: "October 1–10" - format: "Online" - - name: "Demo Day" - dates: "October 16–17" - format: "GOSIM Shenzhen" - -submission: - - "Runnable rebuild with code and startup instructions" - - "Complete production trace" - - "3–5 minute demo" diff --git a/events/oaic-harness-2026/docs/configuration.md b/events/oaic-harness-2026/docs/configuration.md deleted file mode 100644 index 74fa448..0000000 --- a/events/oaic-harness-2026/docs/configuration.md +++ /dev/null @@ -1,54 +0,0 @@ -# Configuration Guide - -## Environment variables - -Copy `.env.example` to `.env` and set: - -```dotenv -VITE_SUPABASE_URL=https://your-project.supabase.co -VITE_SUPABASE_ANON_KEY=your-anon-key -VITE_SITE_URL=https://your-public-site.example -VITE_BASE_PATH=/ -``` - -`VITE_SITE_URL` is used for authentication redirects, invitation links, and QR codes. `VITE_BASE_PATH` controls the URL prefix where the app is mounted and must start and end with `/`. For the shared GOSIM hackathon domain, use: - -```dotenv -VITE_SITE_URL=https://create.gosim.org/factory26 -VITE_BASE_PATH=/factory26/ -``` - -## Public event content - -The English and Chinese public copy is in `src/i18n/en.ts` and `src/i18n/zh.ts`. `config/event.example.yaml` is a reference snapshot of the same confirmed 2026 event data; it is not read at runtime. - -The countdown in `src/components/sections/HeroSection.vue` starts at `2026-09-01T00:00:00+08:00`. Update it only if the organizer confirms a new start time. - -Do not publish values for the following fields until they are confirmed: - -- team size -- registration deadline -- participation fee -- judging weights -- contact details -- additional sponsors or sponsor logos - -## Supabase - -Follow `docs/supabase-setup.md` and apply every migration under `supabase/migrations/` in filename order. The current public registration flow requires Supabase Auth plus the `profiles`, `teams`, private `team_members`, `team_invitations`, and supporting tables documented there. - -## Email notifications - -The `send_team_email` Edge Function uses: - -- `SMTP_HOST` -- `SMTP_PORT` -- `SMTP_USER` -- `SMTP_PASS` -- `SITE_URL` - -Deploy it with the Supabase CLI after those secrets are configured. - -## Media - -Static assets are served from `public/`. Sponsor marks should be added only after authorization is confirmed and the public sponsor section is updated accordingly. diff --git a/events/oaic-harness-2026/docs/deployment.md b/events/oaic-harness-2026/docs/deployment.md deleted file mode 100644 index 6382932..0000000 --- a/events/oaic-harness-2026/docs/deployment.md +++ /dev/null @@ -1,84 +0,0 @@ -# Deployment Guide - -## Prerequisites - -- Node.js 20+ -- npm -- A Supabase project (see [supabase-setup.md](supabase-setup.md)) - -## Build - -```bash -npm install -npm run build -``` - -This produces a `dist/` directory with static files. - -## GitHub Pages - -1. Build the project -2. Push `dist/` contents to a `gh-pages` branch, or use GitHub Actions: - -```yaml -# .github/workflows/deploy.yml -name: Deploy -on: - push: - branches: [main] -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - run: npm ci - - run: npm run build - env: - VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} - VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} - VITE_SITE_URL: ${{ secrets.VITE_SITE_URL }} - VITE_BASE_PATH: ${{ secrets.VITE_BASE_PATH }} - - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./dist -``` - -Set secrets in your GitHub repo settings. - -## Vercel - -1. Connect your GitHub repo to Vercel -2. Vercel auto-detects Vite — no config needed -3. Add environment variables in Vercel dashboard: - - `VITE_SUPABASE_URL` - - `VITE_SUPABASE_ANON_KEY` - - `VITE_SITE_URL` - - `VITE_BASE_PATH` (`/` at the domain root, or `/factory26/` behind the shared GOSIM Create gateway) - -## Netlify - -1. Connect your GitHub repo -2. Build command: `npm run build` -3. Publish directory: `dist` -4. Add environment variables in Netlify dashboard - -## Custom Domain - -After deploying, configure your custom domain with your hosting provider. Update `VITE_SITE_URL` to match. - -## Supabase Edge Functions (Optional) - -If using the email notification system: - -```bash -supabase functions deploy send_team_email -supabase secrets set SMTP_HOST=smtp.example.com -supabase secrets set SMTP_PORT=465 -supabase secrets set SMTP_USER=hackathon@example.com -supabase secrets set SMTP_PASS=your-smtp-password -supabase secrets set SITE_URL=https://your-hackathon.example.com -``` diff --git a/events/oaic-harness-2026/docs/supabase-setup.md b/events/oaic-harness-2026/docs/supabase-setup.md deleted file mode 100644 index 62223e5..0000000 --- a/events/oaic-harness-2026/docs/supabase-setup.md +++ /dev/null @@ -1,190 +0,0 @@ -# Supabase Setup - -## 1. Create a Supabase Project - -Go to [supabase.com](https://supabase.com) and create a new project. Note your project URL and anon key. - -## 2. Create Tables - -Run the following SQL in the Supabase SQL Editor: - -```sql --- Profiles table -CREATE TABLE public.profiles ( - id uuid PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE, - name text, - email text, - wechat text, - github_id text, - role text, - country text, - city text, - organization text, - age_range text CHECK (age_range IS NULL OR age_range IN ('18-22', '23-28', '29-35', '36+')), - avatar text, - themes text[], - preferred_model text, - bio text, - discord text, - twitter text, - telegram text, - linkedin text, - website text, - team_id uuid, - looking_for_team boolean DEFAULT false, - password_changed boolean DEFAULT false, - confirmed_attendance text, - checked_in boolean DEFAULT false, - approved boolean DEFAULT false, - admin_notes text, - created_at timestamptz DEFAULT now() -); - -ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY; - -CREATE POLICY "profiles_select" ON public.profiles FOR SELECT TO authenticated USING (true); -CREATE POLICY "profiles_update_own" ON public.profiles FOR UPDATE TO authenticated USING (id = auth.uid()); -CREATE POLICY "profiles_insert_own" ON public.profiles FOR INSERT TO authenticated WITH CHECK (id = auth.uid()); - --- Teams table -CREATE TABLE public.teams ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - name text NOT NULL, - avatar text, - leader_id uuid REFERENCES public.profiles(id), - max_size int, - locked boolean DEFAULT false, - model text, - harness text, - themes text[], - project_idea text, - github_repo text, - contact_email text, - created_at timestamptz DEFAULT now() -); - -ALTER TABLE public.teams ENABLE ROW LEVEL SECURITY; - -CREATE POLICY "teams_select" ON public.teams FOR SELECT TO authenticated USING (true); -CREATE POLICY "teams_insert" ON public.teams FOR INSERT TO authenticated WITH CHECK (true); -CREATE POLICY "teams_update_leader" ON public.teams FOR UPDATE TO authenticated USING (leader_id = auth.uid()); - --- Add foreign key from profiles to teams -ALTER TABLE public.profiles ADD CONSTRAINT fk_profiles_team FOREIGN KEY (team_id) REFERENCES public.teams(id) ON DELETE SET NULL; - --- Submissions table -CREATE TABLE public.submissions ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - team_id uuid REFERENCES public.teams(id) ON DELETE CASCADE, - round text NOT NULL DEFAULT 'qualifier' CHECK (round IN ('qualifier', 'grand-challenge')), - github_url text NOT NULL, - trace_url text NOT NULL, - demo_url text NOT NULL, - submitted_by uuid REFERENCES public.profiles(id), - submitted_at timestamptz DEFAULT now(), - UNIQUE (team_id, round) -); - -ALTER TABLE public.submissions ENABLE ROW LEVEL SECURITY; - -CREATE POLICY "submissions_select" ON public.submissions FOR SELECT TO authenticated USING (true); -CREATE POLICY "submissions_upsert" ON public.submissions FOR INSERT TO authenticated WITH CHECK (true); -CREATE POLICY "submissions_update" ON public.submissions FOR UPDATE TO authenticated USING (true); - --- Announcements table -CREATE TABLE public.announcements ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - content text NOT NULL, - active boolean DEFAULT false, - created_at timestamptz DEFAULT now() -); - -ALTER TABLE public.announcements ENABLE ROW LEVEL SECURITY; -CREATE POLICY "announcements_select" ON public.announcements FOR SELECT USING (true); -CREATE POLICY "announcements_manage" ON public.announcements FOR ALL TO authenticated USING (true); - --- Redeem codes table -CREATE TABLE public.redeem_codes ( - id uuid PRIMARY KEY DEFAULT gen_random_uuid(), - code text NOT NULL, - model text NOT NULL, - status text DEFAULT 'available' CHECK (status IN ('available', 'assigned', 'used')), - assigned_to uuid REFERENCES public.profiles(id), - assigned_at timestamptz, - created_at timestamptz DEFAULT now() -); - -ALTER TABLE public.redeem_codes ENABLE ROW LEVEL SECURITY; -CREATE POLICY "codes_select_own" ON public.redeem_codes FOR SELECT TO authenticated USING (assigned_to = auth.uid()); -CREATE POLICY "codes_manage" ON public.redeem_codes FOR ALL TO authenticated USING (true); - --- Admin config table -CREATE TABLE public.admin_config ( - key text PRIMARY KEY, - value text NOT NULL -); - -ALTER TABLE public.admin_config ENABLE ROW LEVEL SECURITY; -CREATE POLICY "admin_config_select" ON public.admin_config FOR SELECT TO authenticated USING (true); - --- Set your admin password (replace 'your-password' with your actual password) --- INSERT INTO admin_config (key, value) --- VALUES ('admin_pass_hash', encode(sha256('your-password'), 'hex')); -``` - -## 3. Team Invitations - -Run the migration SQL from `supabase/migrations/20260421_02_team_invitations.sql` for the invitation system (invite, accept, decline, cancel RPCs). - -## 4. Leave Team RPC - -Run the migration SQL from `supabase/migrations/20260421_01_leave_team_rpc.sql`. - -## 5. Enable Realtime - -In Supabase Dashboard > Database > Replication, enable realtime for: -- `profiles` -- `teams` -- `announcements` -- `team_invitations` - -## 6. Auth Settings - -In Supabase Dashboard > Authentication > Settings: -- Disable **Confirm Email** so registrations become active immediately -- Set your site URL for redirect - -### Confirmation email limits - -Supabase's built-in email provider is intended for testing and is limited to two -authentication emails per hour across the project. For a public registration -site, configure a custom SMTP provider in Authentication > Email Templates / -SMTP Settings, then review Authentication > Rate Limits. - -This project intentionally disables **Confirm Email**. Registration email -addresses are therefore not verified. Password-reset emails still require an -email provider and remain subject to the configured rate limits. - -## 7. Registration Demographics - -Run `supabase/migrations/20260828_00_registration_demographics.sql` to add the -country, city, organization/school, and age-range fields used by the registration -form, admin roster, and exports. - -Run `supabase/migrations/20260829_00_registration_wechat.sql` to add the optional -WeChat contact field and Auth metadata synchronization. - -## 8. Team Rosters - -Run `supabase/migrations/20260902_00_team_members.sql` before deploying the -member-roster form. It adds a private `team_members` table, backfills the primary -contact for existing teams, and installs the atomic roster-update RPC. - -Then run `supabase/migrations/20260905_00_team_member_questionnaire.sql` to add -the optional school/major, AI-agent experience, and proud-project answers to -each member record and update the roster RPC. - -The existing `teams` table remains the source of team-level information. Each -team still has one shared login account; additional roster members do not receive -Supabase accounts. Member emails and demographics are available only to that -team's authenticated lead and Supabase administrators. diff --git a/events/oaic-harness-2026/index.html b/events/oaic-harness-2026/index.html deleted file mode 100644 index 921ec84..0000000 --- a/events/oaic-harness-2026/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - 2026 OAIC 智能体软件工厂国际黑客松和大奖赛系列 - - - - - - - -
- - - diff --git a/events/oaic-harness-2026/package-lock.json b/events/oaic-harness-2026/package-lock.json deleted file mode 100644 index fbfaeb8..0000000 --- a/events/oaic-harness-2026/package-lock.json +++ /dev/null @@ -1,2317 +0,0 @@ -{ - "name": "oaic-harness-engineering-2026", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "oaic-harness-engineering-2026", - "version": "0.0.0", - "dependencies": { - "@supabase/supabase-js": "^2.102.0", - "canvas-confetti": "^1.9.4", - "jspdf": "^4.2.1", - "jspdf-autotable": "^5.0.7", - "vue": "^3.5.30", - "vue-router": "^4.6.4" - }, - "devDependencies": { - "@playwright/test": "^1.58.2", - "@tailwindcss/vite": "^4.2.2", - "@types/canvas-confetti": "^1.9.0", - "@types/node": "^24.12.0", - "@vitejs/plugin-vue": "^6.0.5", - "@vue/tsconfig": "^0.9.0", - "tailwindcss": "^4.2.2", - "typescript": "~5.9.3", - "vite": "^8.0.1", - "vue-tsc": "^3.2.5" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", - "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", - "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", - "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", - "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", - "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", - "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.58.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.2.tgz", - "integrity": "sha512-l7x215OGvo1s52JWmR8U/DAVzEDWBCIbTm28aeJV/WDTSHgcKXaZTuBT0hJMs5NggilfJTW3clZVvd24yfKJxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.2.tgz", - "integrity": "sha512-9u9Xv6c1AJZT0FfwH5vrMG5Jjcwhc1MlyrPu0XfTqkzsmqfks2M6W/o5XwAJgVVN/jHpqqngC1WevHKKTIUtIA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.2.tgz", - "integrity": "sha512-9W1mbGZAfW3oqd85bhBkmpyHCCzL1TeG/zFFP3vg7b0rlly8cxOcre5nXwz+LHazCwac2MNWgPdPCHndABjpWQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.2.tgz", - "integrity": "sha512-0p1lhiCSCyaerFwtrdZQUx7NqGk6LQnaRKWX7tFQqwQgvX0rjM15cIkm3pax1UpEakK14C4mOxx/jSqCBdBRqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.2.tgz", - "integrity": "sha512-e+cOJXrJ2L3zx6YzqPg+f6Wbk3V1cKB8bOhbaYdVYN3DdquzNdRAmrbETz1qnt5yp/c7JNlNjmITiA2cVneQ7w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.2.tgz", - "integrity": "sha512-JsSMsj6sNat/MuhG5fnBD7QgbtpHKVe30x5/bAVirDHdhoQRXJkF6xc0Jqk8O4fiCUQAzMOoH9wZi3m60c8wtg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.2.tgz", - "integrity": "sha512-B5G/zJdHaoJn9vD50eGHWkiWfmq8Uhi3IiLPJTzmZTrAalk1bztUikSXo0qga18ibE0IXboyeMUnhPjhAJ45wQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.2.tgz", - "integrity": "sha512-6mC/awzKka8W6EoekjegpfGkjz8jXWDX63pqu/HYVpyKtZfu65Jsh4QAH3Kej3CAv/c1oGX7psTmFEbr0mDxLA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.2.tgz", - "integrity": "sha512-412MX9fJLdA1IK28EZnc8jYv2HRTleOZgfLQumJ5zy7OeJLZlg/CETwFaXjNmGVxG51cFHpKLqb5LKvBC+HsHA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.2.tgz", - "integrity": "sha512-Q/+HI/ToJafZ1iCqGgVQXUEkIjufHCTF0gBQ2a5o3cg7GJ2h0qyq3nvvSmU+bGda2/7ygXpTY4TM6gO9OhQ0ZA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.2.tgz", - "integrity": "sha512-ZKp/w41n6wCvxzxQHtQSbuphfX3Y4cCvbjkKHusrLx4lh+JWLTU7StSltO/DKARISzbj368d+qUaCjI8K2wzXw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.2.tgz", - "integrity": "sha512-pxE6xD4KS3eAROkKK5yrhB9/3+vhlhVGMvlQLbdpzrBGDbKrnzx3RLwPaHvasLo6jgaiBLn7e04Df9C4tYhjmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.2.tgz", - "integrity": "sha512-4MqEue5re+xIZzAWsB8sj0P1kqZySWqIuN4t6QaIO/YA6SFwySOLruvWQFzfmqk8LBK2P30KCSJwf6mJCZZ5/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.2.tgz", - "integrity": "sha512-NweNxxD0Nf9t8v7kodun45Ijp3EIwYY+uydPP6qBEYvfBqhIjN6dZMzlQja3tqX/aLs3F3Uz+AxDpKgRhpOZQg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", - "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@supabase/auth-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.102.0.tgz", - "integrity": "sha512-Iq9tdBTTPUelC/j7u9I/hs8gCiy44LYSw22N4TNSYEzb1oS98iytXDutWWyJATgYDRxParjeNm+Qmh9NSNFcVw==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@supabase/functions-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.102.0.tgz", - "integrity": "sha512-aPFSO9VTrC4hLo+jPErrhw+vMi/d8h3DrWSov2pO2AdD6r6oKmSPogI4f7oeHxvxnGl7B57IjtkZQDz/D151kQ==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@supabase/phoenix": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.0.tgz", - "integrity": "sha512-RHSx8bHS02xwfHdAbX5Lpbo6PXbgyf7lTaXTlwtFDPwOIw64NnVRwFAXGojHhjtVYI+PEPNSWwkL90f4agN3bw==", - "license": "MIT" - }, - "node_modules/@supabase/postgrest-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.102.0.tgz", - "integrity": "sha512-XJNGEmdySm9bBMi7bz9lgx33tQCmgZIK8at9J1NG3/ri1XiGLAgSX0Mzfst1FkrovQCdh16NtD/Rg3di3P7UCw==", - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@supabase/realtime-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.102.0.tgz", - "integrity": "sha512-cTCJTDu4xVj90A2vNTNUpeinwdqnVXSLUkWnG9FEbAwq4Djh4vpSy9HBwb33UK/4cUM0p7F8IkieiwZejj9bRg==", - "license": "MIT", - "dependencies": { - "@supabase/phoenix": "^0.4.0", - "@types/ws": "^8.18.1", - "tslib": "2.8.1", - "ws": "^8.18.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@supabase/storage-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.102.0.tgz", - "integrity": "sha512-wfEv7RJvIKN/ALsmi8Bq7w/HsiqS8GFg7TlKlkYzqyUoiEbwZiiZaXWWnPdq+6ktga/Mh3xQ3KyXpeIQNh7azA==", - "license": "MIT", - "dependencies": { - "iceberg-js": "^0.8.1", - "tslib": "2.8.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@supabase/supabase-js": { - "version": "2.102.0", - "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.102.0.tgz", - "integrity": "sha512-k2Ney4KrhZvbeGXDA6yXx8LsI/zaBroJFXTUb4t1j/GPK7YoDp6v5AuldJfjb9cFq4agRihzC27lDO8LKFzBpA==", - "license": "MIT", - "dependencies": { - "@supabase/auth-js": "2.102.0", - "@supabase/functions-js": "2.102.0", - "@supabase/postgrest-js": "2.102.0", - "@supabase/realtime-js": "2.102.0", - "@supabase/storage-js": "2.102.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", - "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", - "tailwindcss": "4.2.2" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7 || ^8" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/canvas-confetti": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz", - "integrity": "sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", - "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", - "license": "MIT" - }, - "node_modules/@types/raf": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", - "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", - "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "1.0.0-rc.2" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", - "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.28" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", - "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", - "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", - "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/shared": "3.5.30", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", - "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", - "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/compiler-core": "3.5.30", - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.8", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", - "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/language-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz", - "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "@vue/compiler-dom": "^3.5.0", - "@vue/shared": "^3.5.0", - "alien-signals": "^3.0.0", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "picomatch": "^4.0.2" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", - "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", - "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/shared": "3.5.30" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", - "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/runtime-core": "3.5.30", - "@vue/shared": "3.5.30", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", - "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30" - }, - "peerDependencies": { - "vue": "3.5.30" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", - "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", - "license": "MIT" - }, - "node_modules/@vue/tsconfig": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.0.tgz", - "integrity": "sha512-RP+v9Cpbsk1ZVXltCHHkYBr7+624x6gcijJXVjIcsYk7JXqvIpRtMwU2ARLvWDhmy9ffdFYxhsfJnPztADBohQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": "5.x", - "vue": "^3.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/alien-signals": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", - "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/canvas-confetti": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.4.tgz", - "integrity": "sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==", - "license": "ISC", - "funding": { - "type": "donate", - "url": "https://www.paypal.me/kirilvatev" - } - }, - "node_modules/canvg": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", - "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "@types/raf": "^3.4.0", - "core-js": "^3.8.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.7", - "rgbcolor": "^1.0.1", - "stackblur-canvas": "^2.0.0", - "svg-pathdata": "^6.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/core-js": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", - "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/css-line-break": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", - "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", - "license": "MIT", - "optional": true, - "dependencies": { - "utrie": "^1.0.2" - } - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/dompurify": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz", - "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optional": true, - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/fast-png": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", - "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", - "license": "MIT", - "dependencies": { - "@types/pako": "^2.0.3", - "iobuffer": "^5.3.2", - "pako": "^2.1.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "license": "MIT" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/html2canvas": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", - "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", - "license": "MIT", - "optional": true, - "dependencies": { - "css-line-break": "^2.1.0", - "text-segmentation": "^1.0.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/iceberg-js": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", - "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/iobuffer": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", - "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", - "license": "MIT" - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jspdf": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.2.1.tgz", - "integrity": "sha512-YyAXyvnmjTbR4bHQRLzex3CuINCDlQnBqoSYyjJwTP2x9jDLuKDzy7aKUl0hgx3uhcl7xzg32agn5vlie6HIlQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.28.6", - "fast-png": "^6.2.0", - "fflate": "^0.8.1" - }, - "optionalDependencies": { - "canvg": "^3.0.11", - "core-js": "^3.6.0", - "dompurify": "^3.3.1", - "html2canvas": "^1.0.0-rc.5" - } - }, - "node_modules/jspdf-autotable": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-5.0.7.tgz", - "integrity": "sha512-2wr7H6liNDBYNwt25hMQwXkEWFOEopgKIvR1Eukuw6Zmprm/ZcnmLTQEjW7Xx3FCbD3v7pflLcnMAv/h1jFDQw==", - "license": "MIT", - "peerDependencies": { - "jspdf": "^2 || ^3 || ^4" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT", - "optional": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.58.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/postcss": { - "version": "8.5.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", - "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.16", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "license": "MIT", - "optional": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT", - "optional": true - }, - "node_modules/rgbcolor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", - "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", - "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", - "optional": true, - "engines": { - "node": ">= 0.8.15" - } - }, - "node_modules/rolldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.2.tgz", - "integrity": "sha512-opwpo1tQBAcpSUJDt94B7hhLNGOKjCdE//XXjeLrnx9b83bjnw45tXdg1b09yEw/VLFBJGZpwRULMmOZo7ol+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.142.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.2", - "@rolldown/binding-darwin-arm64": "1.2.2", - "@rolldown/binding-darwin-x64": "1.2.2", - "@rolldown/binding-freebsd-x64": "1.2.2", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.2", - "@rolldown/binding-linux-arm64-gnu": "1.2.2", - "@rolldown/binding-linux-arm64-musl": "1.2.2", - "@rolldown/binding-linux-ppc64-gnu": "1.2.2", - "@rolldown/binding-linux-s390x-gnu": "1.2.2", - "@rolldown/binding-linux-x64-gnu": "1.2.2", - "@rolldown/binding-linux-x64-musl": "1.2.2", - "@rolldown/binding-openharmony-arm64": "1.2.2", - "@rolldown/binding-win32-arm64-msvc": "1.2.2", - "@rolldown/binding-win32-x64-msvc": "1.2.2" - } - }, - "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackblur-canvas": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", - "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/svg-pathdata": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", - "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/text-segmentation": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", - "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", - "license": "MIT", - "optional": true, - "dependencies": { - "utrie": "^1.0.2" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/utrie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", - "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "base64-arraybuffer": "^1.0.2" - } - }, - "node_modules/vite": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.0.tgz", - "integrity": "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.23", - "rolldown": "~1.2.0", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } - }, - "node_modules/vite/node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", - "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-sfc": "3.5.30", - "@vue/runtime-dom": "3.5.30", - "@vue/server-renderer": "3.5.30", - "@vue/shared": "3.5.30" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-tsc": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.6.tgz", - "integrity": "sha512-gYW/kWI0XrwGzd0PKc7tVB/qpdeAkIZLNZb10/InizkQjHjnT8weZ/vBarZoj4kHKbUTZT/bAVgoOr8x4NsQ/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.28", - "@vue/language-core": "3.2.6" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, - "node_modules/ws": { - "version": "8.21.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.2.tgz", - "integrity": "sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - } -} diff --git a/events/oaic-harness-2026/package.json b/events/oaic-harness-2026/package.json deleted file mode 100644 index ef45dc6..0000000 --- a/events/oaic-harness-2026/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "oaic-harness-engineering-2026", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vue-tsc -b && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@supabase/supabase-js": "^2.102.0", - "canvas-confetti": "^1.9.4", - "jspdf": "^4.2.1", - "jspdf-autotable": "^5.0.7", - "vue": "^3.5.30", - "vue-router": "^4.6.4" - }, - "devDependencies": { - "@playwright/test": "^1.58.2", - "@tailwindcss/vite": "^4.2.2", - "@types/canvas-confetti": "^1.9.0", - "@types/node": "^24.12.0", - "@vitejs/plugin-vue": "^6.0.5", - "@vue/tsconfig": "^0.9.0", - "tailwindcss": "^4.2.2", - "typescript": "~5.9.3", - "vite": "^8.0.1", - "vue-tsc": "^3.2.5" - } -} diff --git a/events/oaic-harness-2026/public/arcbench-leaderboard.json b/events/oaic-harness-2026/public/arcbench-leaderboard.json deleted file mode 100644 index b3939f6..0000000 --- a/events/oaic-harness-2026/public/arcbench-leaderboard.json +++ /dev/null @@ -1 +0,0 @@ -{"competition":{"id":"smoke","title":"Smoke Competition"},"updatedAt":"2026-09-11T04:25:10.785Z","entries":[{"username":"睿欣达工场","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":100,"total_token_millions":0.057,"total_token_cost":0.328128,"token_cost_currency":"CNY","cost_efficiency":304.7591,"efficiency_threshold":80,"efficiency_eligible":true,"seniority_label":"senior","avg_runtime_seconds":123,"submission_count":2},{"username":"niceeeeee","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":100,"total_token_millions":4.246,"total_token_cost":1.379966,"token_cost_currency":"CNY","cost_efficiency":72.4656,"efficiency_threshold":80,"efficiency_eligible":true,"seniority_label":"senior","avg_runtime_seconds":539,"submission_count":3},{"username":"ARC","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":100,"total_token_millions":9.086,"total_token_cost":3.375454,"token_cost_currency":"CNY","cost_efficiency":29.6256,"efficiency_threshold":80,"efficiency_eligible":true,"seniority_label":"senior","avg_runtime_seconds":640,"submission_count":1},{"username":"VOLO AI","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":100,"total_token_millions":0,"total_token_cost":0,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":true,"seniority_label":"senior","avg_runtime_seconds":0,"submission_count":2},{"username":"wjzhang","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":100,"total_token_millions":0,"total_token_cost":0,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":true,"seniority_label":"senior","avg_runtime_seconds":565,"submission_count":4},{"username":"testddasdfasdf","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":0,"total_token_cost":0,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":393,"submission_count":2},{"username":"包子头队","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":5.902,"total_token_cost":1.78154,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":1020,"submission_count":2},{"username":"非常队","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":0.013,"total_token_cost":0.099402,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":73,"submission_count":1},{"username":"gyataro2","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":0.006,"total_token_cost":0.244635,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":514,"submission_count":1},{"username":"kwy","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":2.644,"total_token_cost":0.121681,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":621,"submission_count":1},{"username":"李尧","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":50,"total_token_millions":3.801,"total_token_cost":0.631523,"token_cost_currency":"CNY","cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":1001,"submission_count":1},{"username":"gyataro","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":0,"total_token_millions":null,"total_token_cost":null,"token_cost_currency":null,"cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":null,"submission_count":4},{"username":"尻名山车神","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":0,"total_token_millions":null,"total_token_cost":null,"token_cost_currency":null,"cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":13,"submission_count":3},{"username":"asdfasdf","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":0,"total_token_millions":null,"total_token_cost":null,"token_cost_currency":null,"cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":0,"submission_count":1},{"username":"不想上早八","model_name":"deepseek-v4-flash","track":"smoke","avg_pass_rate":0,"total_token_millions":null,"total_token_cost":null,"token_cost_currency":null,"cost_efficiency":null,"efficiency_threshold":80,"efficiency_eligible":false,"seniority_label":"junior","avg_runtime_seconds":3,"submission_count":1}]} diff --git a/events/oaic-harness-2026/public/default-avatar.svg b/events/oaic-harness-2026/public/default-avatar.svg deleted file mode 100644 index 5753d31..0000000 --- a/events/oaic-harness-2026/public/default-avatar.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/events/oaic-harness-2026/public/default-team-avatar.svg b/events/oaic-harness-2026/public/default-team-avatar.svg deleted file mode 100644 index 19b2583..0000000 --- a/events/oaic-harness-2026/public/default-team-avatar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/events/oaic-harness-2026/public/factory26-qr.png b/events/oaic-harness-2026/public/factory26-qr.png deleted file mode 100644 index 9c46ea3..0000000 Binary files a/events/oaic-harness-2026/public/factory26-qr.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/favicon.png b/events/oaic-harness-2026/public/favicon.png deleted file mode 100644 index 2aeca78..0000000 Binary files a/events/oaic-harness-2026/public/favicon.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/favicon.svg b/events/oaic-harness-2026/public/favicon.svg deleted file mode 100644 index 6893eb1..0000000 --- a/events/oaic-harness-2026/public/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/gosim-logo.svg b/events/oaic-harness-2026/public/gosim-logo.svg deleted file mode 100644 index 3cec679..0000000 --- a/events/oaic-harness-2026/public/gosim-logo.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/events/oaic-harness-2026/public/icons.svg b/events/oaic-harness-2026/public/icons.svg deleted file mode 100644 index 80fcfdb..0000000 --- a/events/oaic-harness-2026/public/icons.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/events/oaic-harness-2026/public/icons/theme-01.svg b/events/oaic-harness-2026/public/icons/theme-01.svg deleted file mode 100644 index 81c4e99..0000000 --- a/events/oaic-harness-2026/public/icons/theme-01.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-02-v2.svg b/events/oaic-harness-2026/public/icons/theme-02-v2.svg deleted file mode 100644 index 8df2a74..0000000 --- a/events/oaic-harness-2026/public/icons/theme-02-v2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-02.svg b/events/oaic-harness-2026/public/icons/theme-02.svg deleted file mode 100644 index 8df2a74..0000000 --- a/events/oaic-harness-2026/public/icons/theme-02.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-03.svg b/events/oaic-harness-2026/public/icons/theme-03.svg deleted file mode 100644 index 46bc359..0000000 --- a/events/oaic-harness-2026/public/icons/theme-03.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-04.svg b/events/oaic-harness-2026/public/icons/theme-04.svg deleted file mode 100644 index dcf3893..0000000 --- a/events/oaic-harness-2026/public/icons/theme-04.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-05.svg b/events/oaic-harness-2026/public/icons/theme-05.svg deleted file mode 100644 index 3a32676..0000000 --- a/events/oaic-harness-2026/public/icons/theme-05.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-06.svg b/events/oaic-harness-2026/public/icons/theme-06.svg deleted file mode 100644 index 8658d43..0000000 --- a/events/oaic-harness-2026/public/icons/theme-06.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/icons/theme-07.svg b/events/oaic-harness-2026/public/icons/theme-07.svg deleted file mode 100644 index 07881e4..0000000 --- a/events/oaic-harness-2026/public/icons/theme-07.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/events/oaic-harness-2026/public/photos/event-2.jpg b/events/oaic-harness-2026/public/photos/event-2.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/event-3.jpg b/events/oaic-harness-2026/public/photos/event-3.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/event-4.jpg b/events/oaic-harness-2026/public/photos/event-4.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/event-5.jpg b/events/oaic-harness-2026/public/photos/event-5.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/event-6.jpg b/events/oaic-harness-2026/public/photos/event-6.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/event-9.jpg b/events/oaic-harness-2026/public/photos/event-9.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/photos/hero-bg-poster.jpg b/events/oaic-harness-2026/public/photos/hero-bg-poster.jpg deleted file mode 100644 index 4e6164d..0000000 Binary files a/events/oaic-harness-2026/public/photos/hero-bg-poster.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/photos/hero-bg.mp4 b/events/oaic-harness-2026/public/photos/hero-bg.mp4 deleted file mode 100644 index f4ee95d..0000000 Binary files a/events/oaic-harness-2026/public/photos/hero-bg.mp4 and /dev/null differ diff --git a/events/oaic-harness-2026/public/photos/hero-video-poster.jpg b/events/oaic-harness-2026/public/photos/hero-video-poster.jpg deleted file mode 100644 index abfba3d..0000000 Binary files a/events/oaic-harness-2026/public/photos/hero-video-poster.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/photos/hero-video.mp4 b/events/oaic-harness-2026/public/photos/hero-video.mp4 deleted file mode 100644 index a1049e4..0000000 Binary files a/events/oaic-harness-2026/public/photos/hero-video.mp4 and /dev/null differ diff --git a/events/oaic-harness-2026/public/photos/venue.jpg b/events/oaic-harness-2026/public/photos/venue.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/events/oaic-harness-2026/public/resources/octos-logo.png b/events/oaic-harness-2026/public/resources/octos-logo.png deleted file mode 100644 index 2cf4ebd..0000000 Binary files a/events/oaic-harness-2026/public/resources/octos-logo.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/resources/trae-student-tokens.jpg b/events/oaic-harness-2026/public/resources/trae-student-tokens.jpg deleted file mode 100644 index 71ac848..0000000 Binary files a/events/oaic-harness-2026/public/resources/trae-student-tokens.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/README.md b/events/oaic-harness-2026/public/sponsors/README.md deleted file mode 100644 index 619e471..0000000 --- a/events/oaic-harness-2026/public/sponsors/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Sponsor Logos - -Place your sponsor logo files here. Recommended formats: SVG, PNG, or WebP. - -Suggested naming convention: -- `sponsor-name.svg` — square/icon logo -- `sponsor-name-wide.svg` — wide/horizontal logo (for hero section) - -Reference these paths in your Vue components, e.g. `/sponsors/acme.svg`. diff --git a/events/oaic-harness-2026/public/sponsors/ajcif-clean.png b/events/oaic-harness-2026/public/sponsors/ajcif-clean.png deleted file mode 100644 index be48dd6..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/ajcif-clean.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/asiainfo-clean.png b/events/oaic-harness-2026/public/sponsors/asiainfo-clean.png deleted file mode 100644 index 5207660..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/asiainfo-clean.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/china-telecom.png b/events/oaic-harness-2026/public/sponsors/china-telecom.png deleted file mode 100644 index e1ba5f1..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/china-telecom.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/cophi.jpg b/events/oaic-harness-2026/public/sponsors/cophi.jpg deleted file mode 100644 index 196a5f8..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/cophi.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/huawei-cloud-en-clean.png b/events/oaic-harness-2026/public/sponsors/huawei-cloud-en-clean.png deleted file mode 100644 index 62b164b..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/huawei-cloud-en-clean.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/huawei-cloud-zh-clean.png b/events/oaic-harness-2026/public/sponsors/huawei-cloud-zh-clean.png deleted file mode 100644 index f1b3cce..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/huawei-cloud-zh-clean.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/kimi.png b/events/oaic-harness-2026/public/sponsors/kimi.png deleted file mode 100644 index fc0ad55..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/kimi.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/minimax.png b/events/oaic-harness-2026/public/sponsors/minimax.png deleted file mode 100644 index dce8484..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/minimax.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/oaic.png b/events/oaic-harness-2026/public/sponsors/oaic.png deleted file mode 100644 index 66edbf9..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/oaic.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/sponsors/ofox.svg b/events/oaic-harness-2026/public/sponsors/ofox.svg deleted file mode 100644 index 34ba173..0000000 --- a/events/oaic-harness-2026/public/sponsors/ofox.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/events/oaic-harness-2026/public/sponsors/qiwoo.svg b/events/oaic-harness-2026/public/sponsors/qiwoo.svg deleted file mode 100644 index 32fbc62..0000000 --- a/events/oaic-harness-2026/public/sponsors/qiwoo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/events/oaic-harness-2026/public/sponsors/taotoken.svg b/events/oaic-harness-2026/public/sponsors/taotoken.svg deleted file mode 100644 index 04340a1..0000000 --- a/events/oaic-harness-2026/public/sponsors/taotoken.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/events/oaic-harness-2026/public/sponsors/trae-clean.png b/events/oaic-harness-2026/public/sponsors/trae-clean.png deleted file mode 100644 index 8104287..0000000 Binary files a/events/oaic-harness-2026/public/sponsors/trae-clean.png and /dev/null differ diff --git a/events/oaic-harness-2026/public/videos/shenzhen-hero-compressed.mp4 b/events/oaic-harness-2026/public/videos/shenzhen-hero-compressed.mp4 deleted file mode 100644 index 5de8d95..0000000 Binary files a/events/oaic-harness-2026/public/videos/shenzhen-hero-compressed.mp4 and /dev/null differ diff --git a/events/oaic-harness-2026/public/videos/shenzhen-hero-poster.jpg b/events/oaic-harness-2026/public/videos/shenzhen-hero-poster.jpg deleted file mode 100644 index a673b05..0000000 Binary files a/events/oaic-harness-2026/public/videos/shenzhen-hero-poster.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1-poster.jpg b/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1-poster.jpg deleted file mode 100644 index dd18566..0000000 Binary files a/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1-poster.jpg and /dev/null differ diff --git a/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1.mp4 b/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1.mp4 deleted file mode 100644 index 2260b29..0000000 Binary files a/events/oaic-harness-2026/public/videos/shenzhen-hero-sz1.mp4 and /dev/null differ diff --git a/events/oaic-harness-2026/src/App.vue b/events/oaic-harness-2026/src/App.vue deleted file mode 100644 index 4fbaf3a..0000000 --- a/events/oaic-harness-2026/src/App.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/events/oaic-harness-2026/src/assets/hero.png b/events/oaic-harness-2026/src/assets/hero.png deleted file mode 100644 index cc51a3d..0000000 Binary files a/events/oaic-harness-2026/src/assets/hero.png and /dev/null differ diff --git a/events/oaic-harness-2026/src/assets/styles/main.css b/events/oaic-harness-2026/src/assets/styles/main.css deleted file mode 100644 index 193d10a..0000000 --- a/events/oaic-harness-2026/src/assets/styles/main.css +++ /dev/null @@ -1,329 +0,0 @@ -@import "tailwindcss"; - -@theme { - --color-bg-primary: #111310; - --color-bg-secondary: #181a17; - --color-bg-card: #1d201c; - --color-bg-elevated: #242721; - - --color-text-primary: #f1f0e9; - --color-text-secondary: #b4b5ab; - --color-text-tertiary: #85887e; - --color-text-muted: #62665d; - - --color-border: #363a33; - --color-border-subtle: #292c27; - --color-border-hover: #50544b; - --color-border-strong: #70746a; - - --color-accent: #c788a1; - --color-accent-hover: #dca6b9; - --color-accent-red: #c75f72; - --color-accent-red-dark: #a94a5b; - --color-accent-blue: #7b877f; - --color-accent-yellow: #9b9271; - --color-accent-cyan: #89968e; - - --color-badge-neutral-bg: #292c27; - --color-badge-neutral-text: #b4b5ab; - --color-badge-success-bg: #26372e; - --color-badge-success-text: #a6d5b8; - --color-badge-info-bg: #2a3331; - --color-badge-info-text: #a9c6c0; - --color-badge-danger-bg: #3b2822; - --color-badge-danger-text: #e29aaf; - --color-badge-warning-bg: #303029; - --color-badge-warning-text: #c5bea0; - - --color-btn-bg: #c788a1; - --color-btn-text: #111310; - --color-btn-hover: #dca6b9; - - --color-input-bg: #181a17; - --color-input-border: #40443c; - --color-input-placeholder: #73776e; - - --font-sans: 'Space Grotesk', 'Noto Sans SC', system-ui, sans-serif; - --font-serif: 'Space Grotesk', 'Noto Sans SC', system-ui, sans-serif; - - --text-xs: .875rem; - --text-xs--line-height: 1.5rem; - - --animate-marquee: marquee 45s linear infinite; - --animate-marquee-reverse: marquee-reverse 45s linear infinite; -} - -.light { - --color-bg-primary: #f3f2ec; - --color-bg-secondary: #e9e8e1; - --color-bg-card: #f8f7f1; - --color-bg-elevated: #deddd5; - - --color-text-primary: #12130f; - --color-text-secondary: #55584f; - --color-text-tertiary: #73766c; - --color-text-muted: #95988e; - - --color-border: #cecdc4; - --color-border-subtle: #dddbd3; - --color-border-hover: #a4a69c; - --color-border-strong: #75786e; - - --color-accent: #82485f; - --color-accent-hover: #68384b; - --color-accent-red: #a34658; - --color-accent-red-dark: #873647; - --color-accent-blue: #606d65; - --color-accent-yellow: #777157; - --color-accent-cyan: #66736b; - - --color-badge-neutral-bg: #e1e0d8; - --color-badge-neutral-text: #55584f; - --color-badge-success-bg: #dbe9df; - --color-badge-success-text: #285c39; - --color-badge-info-bg: #dce6e4; - --color-badge-info-text: #315b54; - --color-badge-danger-bg: #f4ddd6; - --color-badge-danger-text: #b62f12; - --color-badge-warning-bg: #e5e2d5; - --color-badge-warning-text: #625d42; - - --color-btn-bg: #82485f; - --color-btn-text: #ffffff; - --color-btn-hover: #68384b; - - --color-input-bg: #f8f7f1; - --color-input-border: #c6c5bc; - --color-input-placeholder: #85887e; -} - -@keyframes marquee { - from { transform: translateX(0); } - to { transform: translateX(-50%); } -} - -@keyframes marquee-reverse { - from { transform: translateX(-50%); } - to { transform: translateX(0); } -} - -* { box-sizing: border-box; } - -html { - scroll-behavior: smooth; - background: var(--color-bg-primary); - color: var(--color-text-primary); -} - -body { - margin: 0; - min-width: 320px; - background: var(--color-bg-primary); - color: var(--color-text-primary); - font-family: 'Space Grotesk', 'Noto Sans SC', system-ui, sans-serif; - font-feature-settings: 'ss01' 1, 'ss02' 1; - -webkit-font-smoothing: antialiased; -} - -::selection { - color: #ffffff; - background: #82485f; -} - -::-webkit-scrollbar { width: 8px; } -::-webkit-scrollbar-track { background: var(--color-bg-primary); } -::-webkit-scrollbar-thumb { background: var(--color-border-strong); } - -a, button, input, textarea, select { border-radius: 0 !important; } -button, a { -webkit-tap-highlight-color: transparent; } - -section:not(.hero-section) { - border-top: 1px solid var(--color-border-subtle); -} - -.site-header:not(.is-scrolled) .text-text-primary, -.site-header:not(.is-scrolled) .text-text-secondary, -.site-header:not(.is-scrolled) .text-text-tertiary { - color: rgba(255, 255, 255, .82) !important; -} - -.site-header:not(.is-scrolled) .border-border, -.site-header:not(.is-scrolled) .bg-border { - border-color: rgba(255, 255, 255, .35) !important; - background-color: rgba(255, 255, 255, .35) !important; -} - -.site-header:not(.is-scrolled) .bg-btn-bg { - color: #111310; - background: #c788a1; -} - -.heading-serif { - font-family: 'Space Grotesk', 'Noto Sans SC', system-ui, sans-serif !important; - font-style: normal !important; - font-weight: 600 !important; - letter-spacing: -0.035em; -} - -.accent-text { color: var(--color-text-primary); } - -.shimmer-text, -.gradient-number { - color: inherit; - background: none; - -webkit-background-clip: initial; - background-clip: initial; - -webkit-text-fill-color: currentColor; -} - -.glass-card, -.gradient-border, -.team-card { - background: var(--color-bg-card); - border: 1px solid var(--color-border); - border-radius: 0; - box-shadow: none; - backdrop-filter: none; - -webkit-backdrop-filter: none; - transition: background-color .2s ease, border-color .2s ease; -} - -.glass-card:hover, -.gradient-border:hover, -.team-card:hover { - transform: none; - background: var(--color-bg-elevated); - border-color: var(--color-border-strong); - box-shadow: none; -} - -.glow-border::after, -.gradient-border::before, -.glass-card-glow::before, -.countdown-card::after { display: none !important; } - -.sponsor-logo-card.glass-card, -.light .sponsor-logo-card.glass-card { - background: #fff; -} - -.theme-icon { - filter: grayscale(1); - opacity: .72; - transition: opacity .2s ease; -} - -.group:hover .theme-icon { - filter: grayscale(1); - transform: none; - opacity: 1; -} - -.progress-bar-glow { - background: var(--color-accent); - box-shadow: none; - animation: none; -} - -.prize-pulse, -.register-note-bounce, -.countdown-flip, -.countdown-pulse, -.bounce-letter, -.animate-bounce-slow { - animation: none !important; -} - -.medal-ribbon::before, -.medal-ribbon::after { background: var(--medal-color); } - -.medal-circle, -.light .medal-circle { - background: transparent; - box-shadow: none; -} - -input:focus, -textarea:focus, -select:focus, -.light input:focus, -.light textarea:focus, -.light select:focus { - outline: 1px solid var(--color-accent); - outline-offset: -1px; - border-color: var(--color-accent); - box-shadow: none; -} - -.reveal, -.reveal-left, -.reveal-right, -.reveal-blur, -.reveal-scale { - opacity: 0; - transform: translateY(14px); - filter: none; - transition: opacity .55s ease, transform .55s ease; -} - -.reveal.visible, -.reveal-left.visible, -.reveal-right.visible, -.reveal-blur.visible, -.reveal-scale.visible { - opacity: 1; - transform: translateY(0); - filter: none; -} - -.reveal-delay-1 { transition-delay: .05s; } -.reveal-delay-2 { transition-delay: .1s; } -.reveal-delay-3 { transition-delay: .15s; } -.reveal-delay-4 { transition-delay: .2s; } -.reveal-delay-5 { transition-delay: .25s; } - -.section-kicker { - display: inline-flex; - align-items: center; - gap: .75rem; - color: var(--color-text-tertiary); - font-family: 'IBM Plex Mono', ui-monospace, monospace; - font-size: .875rem; - font-weight: 500; - line-height: 1.6; - letter-spacing: .16em; - text-transform: uppercase; -} - -.section-kicker::before { - width: 1.5rem; - height: 1px; - content: ''; - background: var(--color-accent); -} - -.section-title { - max-width: 16ch; - color: var(--color-text-primary); - font-size: clamp(2.25rem, 4.6vw, 4.75rem); - font-weight: 600; - letter-spacing: -.05em; - line-height: 1.04; -} - -.mono-label { - font-family: 'IBM Plex Mono', ui-monospace, monospace; - font-size: .875rem; - line-height: 1.6; - letter-spacing: .12em; - text-transform: uppercase; -} - -@media (prefers-reduced-motion: reduce) { - html { scroll-behavior: auto; } - *, *::before, *::after { - animation-duration: .01ms !important; - animation-iteration-count: 1 !important; - transition-duration: .01ms !important; - } -} diff --git a/events/oaic-harness-2026/src/assets/vite.svg b/events/oaic-harness-2026/src/assets/vite.svg deleted file mode 100644 index 5101b67..0000000 --- a/events/oaic-harness-2026/src/assets/vite.svg +++ /dev/null @@ -1 +0,0 @@ -Vite diff --git a/events/oaic-harness-2026/src/components/effects/AnnouncementBanner.vue b/events/oaic-harness-2026/src/components/effects/AnnouncementBanner.vue deleted file mode 100644 index 2b3340c..0000000 --- a/events/oaic-harness-2026/src/components/effects/AnnouncementBanner.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/events/oaic-harness-2026/src/components/effects/ApiCreditsCard.vue b/events/oaic-harness-2026/src/components/effects/ApiCreditsCard.vue deleted file mode 100644 index cf5ebfb..0000000 --- a/events/oaic-harness-2026/src/components/effects/ApiCreditsCard.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/events/oaic-harness-2026/src/components/effects/BuildersModal.vue b/events/oaic-harness-2026/src/components/effects/BuildersModal.vue deleted file mode 100644 index 2eb390e..0000000 --- a/events/oaic-harness-2026/src/components/effects/BuildersModal.vue +++ /dev/null @@ -1,357 +0,0 @@ - - -