Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes the GitHub Pages demo at https://alloevil.github.io/AgentXRay/ crawlable by search engines and retrievable/citable by LLM answer engines. No behaviour change to the app.
Publish-root category: GENERATED (vite build) — artifacts added to the SOURCE, not the output
frontend/distis a build output and is gitignored (.gitignorelinefrontend/dist/), so nothing may be hand-committed there. Evidence used to decide where the files belong:.github/workflows/pages.ymlrunscd frontend && npm ci && VITE_DEMO=1 npm run build, thenactions/upload-pages-artifactwithpath: frontend/dist.frontend/vite.config.tssetsbuild.outDir: 'dist'and does not setpublicDir, so vite's defaultpublicDiroffrontend/publicapplies and its contents are copied verbatim intodist. It also setsbase: '/AgentXRay/'whenVITE_DEMO === '1', which the workflow does set.frontend/public/did not exist before this PR; it is created here..nojekyllfile exists anywhere in the repo, and it is moot here: Jekyll never runs on a workflow-built Pages site, and this sitemap lists no converted-markdown URL to begin with.I did not guess — I ran the real build (
VITE_DEMO=1 npm run build) and listed the output. See Verification.Files
frontend/public/robots.txt(new) — the site had no robots.txt at all. Byte-format copied verbatim fromagent-harness-evals/docs/robots.txt, with no deviation, because nothing published here needs excluding. Scope caveat, stated plainly: this file is advisory, not authoritative. The Robots Exclusion Protocol is origin-scoped at the root path, and this site is a subpath of the single originalloevil.github.io, so compliant crawlers readhttps://alloevil.github.io/robots.txtand never this copy — itsSitemap:directive included. Effective sitemap discovery for this origin lives in the rootrobots.txt, handled separately. The file is still worth shipping: it is the fleet convention, some tools and AI crawlers do probe subpaths, and it becomes authoritative if this site ever moves to its own domain.frontend/public/sitemap.xml(new) — one<loc>, the trailing-slash home URL. AgentXRay is a single-page app:frontend/index.htmlis the only HTML entry point in the whole frontend andvite.config.tsdeclares norollupOptions.input, sodistcontains exactly one HTML file. Listing anything else would be a 404.frontend/public/llms.txt(new) — llms.txt convention: definition, prose, then Docs / Evidence / Source link sections. Every link points at a file that exists onmasteror at a URL I fetched.frontend/public/llms-full.txt(new) — self-contained answer-engine context: what it is, install, quickstart, verifiable claims, when to use / when NOT to use, comparison, FAQ. Written so an LLM can answer "what is AgentXRay / how do I install it / does it send my data anywhere" without fetching anything else.frontend/public/claims.json(new) — machine-readable claims. See "Notes for review" for exactly what is and is not claimed.frontend/index.html— added oneSoftwareApplicationJSON-LD block before</head>. The site had no structured data. The head already had title/description/canonical/og/twitter, so no meta tag was added, changed or duplicated; in particular the existingog:imagewas left exactly as it was (it points atscreenshots/tool-calls.png, which I confirmed exists on disk, 352 KB PNG — so it is a valid raster and there was no reason to touch it).README.md,README.zh-CN.md— GEO restructure: added an H1 plus a front-loaded one-sentence definition as the first body text, relocated (never deleted) the hero/badge/nav blocks below it, added## What it is,## When to use it,## When NOT to use it,## FAQ, and a comparison table against LangSmith / Langfuse — the only alternatives the repo itself discusses.## Quick Startwas renamed to## Installand the nav anchor updated to match so the link still resolves. Untouched sections were not reflowed.Two factual corrections in the READMEs while restructuring:
npm i -g agent-xray->npm i -g @alloevil/agent-xray(that is the published name), and the stale "(once the package is published to npm)" caveat was dropped, because@alloevil/agent-xrayis live on the registry at 1.17.1.Notes for review
licensefrom the MITLICENSEfile,programmingLanguage: "JavaScript, TypeScript"from the Express/Node backend plus the React + TypeScript frontend,codeRepositoryandurlfrom the actual origins. No version number is embedded, so it cannot go stale.PLATFORMSregistry inlib/platforms/index.js, and the file ships the exact one-line command that prints it. No performance, accuracy or benchmark numbers are claimed, because this repository measures none —claims.jsonsays so explicitly in anotClaimedfield, andllms-full.txtrepeats it, so an answer engine cannot infer a benchmark that does not exist..mdvs.htmlquestion does not arise. The sitemap holds exactly one entry, the trailing-slash origin, served by the builtdist/index.html. Nothing was inferred from the Pages build type.frontend/index.htmlis the hand-maintained vite entry template, not a file rendered from data; vite only copiesfrontend/publicverbatim. There is therefore no generator to move sitemap/robots generation into, and no--check-style artifact test to extend. The sitemap is drift-proof by construction: it has one URL because the app has one HTML entry point, and gaining a second would require an explicitrollupOptions.inputchange tovite.config.ts.test/forfrontend/index.html,canonical,ld+json,<headandog:— no matches, so nothing in the suite asserts against the head I edited.Published-content audit
Nothing was withheld from the sitemap for content reasons — I checked rather than skipped. The published surface here is narrow by construction, because only
frontend/distis uploaded, and I listed it after the real build: 8 files total —index.html,assets/index-*.js,assets/index-*.css, and the five artifacts this PR adds. No markdown is published at all, so there is no.mdversus.htmlquestion and no repository doc, draft, planning note or internal file reaches the site. Nothing needed aDisallow.One thing here does deserve a second look, since it ships inside the published JS bundle rather than as a file: the demo session logs under
frontend/demo/sample-logs, which the live site renders. I verified they are genuinely synthetic rather than trusting the README's word for it — across all five log files the onlycwdvalues are/demo/acme-cache,/demo/api-service,/demo/orders-serviceand/demo/webapp, and a scan found zero/Users/…or/home/…home paths, zero API-key-shaped strings, zero GitHub tokens and zero email addresses. No real session data or personal path is published.The sitemap lists pages only. Assets resolve 200 but are not pages and are deliberately excluded, so it is not padded with the JS, CSS or screenshots.
Verification
Everything below was actually run, not assumed.
cd frontend && npm ci && VITE_DEMO=1 npm run build. It succeeded, anddist/then containedrobots.txt,sitemap.xml,llms.txt,llms-full.txtandclaims.jsonalongsideindex.htmlandassets/.cmpreported all five copies byte-identical to theirfrontend/public/sources, which is the proof that publicDir reaches the published artifact.dist/index.htmlreferences/AgentXRay/assets/index-*.jsand/AgentXRay/assets/index-*.css.python3 -c "import xml.dom.minidom;xml.dom.minidom.parse('frontend/public/sitemap.xml')"— OK.python3 -m json.tool frontend/public/claims.json— OK.application/ld+jsonpayload from bothfrontend/index.htmland the builtdist/index.htmland loaded it withjson.loads— OK in both, so the block survives the vite HTML transform.node -e 'console.log(Object.keys(require("./lib/platforms/index.js").PLATFORMS).join(", "))'printsopenclaw, codex, claude-code, omp, dsh, gemini, hermes— 7, matching claims.json exactly.screenshots/tool-calls.png(352 KB PNG). The other screenshots referenced by the READMEs (main-view.png,spawn-tracking.png,codex-view.png,settings-panel.png) also all exist.llms.txtverified to exist onmaster:README.md,README.zh-CN.md,SPEC.md,SPAWN_TREE_SPEC.md,GRAPH_SPEC.md,docs/ROADMAP.md,lib/platforms/index.js,test/,.github/workflows/test.yml. The npm link was verified live: the registry returns 200 withdist-tags.latest = 1.17.1.frontend/index.htmlis the only HTML file underfrontend/(excludingnode_modules), hence a single-URL sitemap.frontend/distandfrontend/node_modulesare gitignored and are not part of this PR.