{"id":51324598,"url":"https://github.com/webdevtodayjason/avl","last_synced_at":"2026-07-01T17:02:48.860Z","repository":{"id":362620389,"uuid":"1212638650","full_name":"webdevtodayjason/avl","owner":"webdevtodayjason","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-16T17:08:30.000Z","size":33,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T07:18:44.867Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webdevtodayjason.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-16T15:22:28.000Z","updated_at":"2026-04-16T17:08:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/webdevtodayjason/avl","commit_stats":null,"previous_names":["webdevtodayjason/avl"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/webdevtodayjason/avl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webdevtodayjason%2Favl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webdevtodayjason%2Favl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webdevtodayjason%2Favl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webdevtodayjason%2Favl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webdevtodayjason","download_url":"https://codeload.github.com/webdevtodayjason/avl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webdevtodayjason%2Favl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35015061,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-01T17:02:46.520Z","updated_at":"2026-07-01T17:02:48.854Z","avatar_url":"https://github.com/webdevtodayjason.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AVL — Agent View Layer\n\nProducer-side rendering for AI agents. Every page ships a parallel\nagent-native view at `/\u003croute\u003e.agent`.\n\n\u003e i18n, but the target locale is \"agent.\"\n\n## Why\n\nWeb apps are designed for humans. When AI agents arrive, they scrape HTML\nand reverse-engineer meaning from the DOM. AVL flips this: the application\nitself ships the agent-native view, with explicit intent, action affordances,\nand compressed state — alongside the human view.\n\nSee `specs/avl-agent-view-layer.md` for the full specification.\n\n## Quick start\n\n```bash\nnpm install\nnpm run dev\n```\n\nThen visit:\n\n- http://localhost:3002/                       — index with demo links\n- http://localhost:3002/dashboard              — human view\n- http://localhost:3002/dashboard.agent        — AVL view (text/agent-view)\n- http://localhost:3002/journey/J-101          — human view\n- http://localhost:3002/journey/J-101.agent    — AVL view\n\nOr via curl:\n\n```bash\ncurl -s http://localhost:3002/dashboard.agent\ncurl -s -H \"Accept: text/agent-view\" http://localhost:3002/dashboard\ncurl -s http://localhost:3002/agent.txt\n```\n\n## Layout\n\n```\navl/\n├── app/\n│   ├── page.tsx                       # index\n│   ├── dashboard/\n│   │   ├── page.tsx                   # human view\n│   │   └── agent.ts                   # AVL manifest\n│   ├── journey/[id]/\n│   │   ├── page.tsx\n│   │   └── agent.ts\n│   ├── agent/[[...path]]/route.ts     # AVL runtime catch-all (also at /agent/\u003croute\u003e)\n│   └── api/journey/[id]/advance/      # mock action endpoint\n├── lib/avl/\n│   ├── types.ts                       # AgentView, Action, etc.\n│   ├── toon.ts                        # TOON encoder\n│   ├── serialize.ts                   # AVL document serializer\n│   ├── define.ts                      # defineAgentView() helper\n│   ├── registry.ts                    # pattern → view registry\n│   ├── auth.ts                        # mock session\n│   └── index.ts                       # public surface\n├── data/mock.ts                       # in-memory demo data\n├── proxy.ts                           # discovery (.agent + Accept) — Next 16+\n├── public/agent.txt                   # site manifest\n├── specs/\n│   └── avl-agent-view-layer.md        # the spec\n└── ops/                               # operations hub\n    ├── README.md\n    ├── projects/ACTIVE.md\n    ├── slices/REGISTRY.md\n    ├── log/JOURNAL.md\n    ├── rules/never-do.md\n    └── runbooks/dev-workflow.md\n```\n\n## Authoring an agent view\n\nAdd `agent.ts` next to `page.tsx`:\n\n```ts\n// app/clients/agent.ts\nimport { defineAgentView } from \"@/lib/avl\";\nimport { getClients } from \"@/data/clients\";\n\nexport default defineAgentView({\n  intent: {\n    purpose: \"Client list\",\n    audience: [\"attorney\", \"paralegal\"],\n    capability: [\"browse\", \"drilldown\"],\n  },\n  state: async ({ user }) =\u003e ({\n    clients: await getClients({ userId: user.id }),\n  }),\n  actions: [\n    { id: \"view_client\", method: \"GET\", href: \"/clients/{id}.agent\" },\n  ],\n  nav: { parents: [\"/dashboard\"], drilldown: \"/clients/{id}\" },\n});\n```\n\nThen register the route in `lib/avl/registry.ts`:\n\n```ts\n{ pattern: \"/clients\", view: clientsAgent }\n```\n\n## Discovery\n\nThree mechanisms:\n\n| Mechanism | How |\n|---|---|\n| URL suffix | `GET /\u003croute\u003e.agent` |\n| Native runtime URL | `GET /agent/\u003croute\u003e` (same response, no proxy hop) |\n| Content negotiation | `Accept: text/agent-view` on the human URL |\n| Site manifest | `GET /agent.txt` |\n\n## Conformance levels\n\n| Level | Required sections |\n|---|---|\n| L0 | `@meta`, `@intent` |\n| L1 | + `@state` |\n| L2 | + `@actions` |\n| L3 | + `@nav` + `@context` |\n\nShip L0 across every route in a day. Upgrade routes incrementally.\n\n## Operations\n\nThis project follows the ops/ pattern. Read `ops/README.md` before\ntouching code. Three rules:\n\n1. Check before you act.\n2. Claim before you touch.\n3. Log when you're done.\n\n## License\n\nSpecification and reference implementation are proposed for open release.\nTBD.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebdevtodayjason%2Favl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebdevtodayjason%2Favl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebdevtodayjason%2Favl/lists"}