Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ui-preview-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
test -d client || { echo "::error::artifact missing client/ assets dir"; exit 1; }
# 3) Allowlist file extensions — fail on anything that isn't a normal web/build output (blocks
# smuggled scripts/binaries). A few extensionless CF asset files are explicitly permitted.
# `zip` covers the served downloads (e.g. /downloads/gittensory-extension.zip) — a passive
# `zip` covers the served downloads (e.g. /downloads/loopover-extension.zip) — a passive
# static asset wrangler only uploads (never executes), so allowing it doesn't run fork code.
unexpected="$(find . -regextype posix-extended -type f \
-not -iregex '.*\.(mjs|js|cjs|map|json|css|html?|txt|svg|png|jpe?g|gif|webp|avif|ico|bmp|woff2?|ttf|otf|eot|wasm|xml|webmanifest|md|csv|zip|wgsl|glb|gltf)$' \
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ coverage/
*.tsbuildinfo
site/.vitepress/cache/
!migrations/*.sql
apps/gittensory-ui/public/downloads/gittensory-extension.zip
apps/gittensory-ui/public/downloads/loopover-extension.zip
.worker-configuration.gen-check.d.ts
# Ad-hoc operator backup files (e.g. `cp file.yml file.yml.bak-notes-20260707`) -- general
# catch-alls so a stray manual snapshot never dirties `git status` on a Git-backed self-host
Expand Down
10 changes: 5 additions & 5 deletions apps/gittensory-extension/auth.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export const DEFAULT_API_ORIGIN = "https://gittensory-api.aethereal.dev";
export const EXTENSION_SESSION_REQUIRED_MESSAGE = "Set an extension session token in Gittensory extension options.";
export const EXTENSION_SESSION_EXPIRED_MESSAGE = "Extension session expired or revoked. Create a fresh extension token in Gittensory.";
export const DEFAULT_API_ORIGIN = "https://api.loopover.ai";
export const EXTENSION_SESSION_REQUIRED_MESSAGE = "Set an extension session token in LoopOver extension options.";
export const EXTENSION_SESSION_EXPIRED_MESSAGE = "Extension session expired or revoked. Create a fresh extension token in LoopOver.";

export const STORAGE_KEYS = {
apiOrigin: "apiOrigin",
Expand Down Expand Up @@ -50,10 +50,10 @@ export function validateExtensionSessionToken(value) {
const token = String(value ?? "").trim();
if (!token) throw new Error(EXTENSION_SESSION_REQUIRED_MESSAGE);
if (looksLikeGitHubPersonalAccessToken(token)) {
throw new Error("GitHub personal access tokens are not accepted. Create a Gittensory extension token instead.");
throw new Error("GitHub personal access tokens are not accepted. Create a LoopOver extension token instead.");
}
if (!GITTENSORY_SESSION_PATTERN.test(token)) {
throw new Error("Extension tokens must be Gittensory session tokens that start with gts_.");
throw new Error("Extension tokens must be LoopOver session tokens that start with gts_.");
}
return token;
}
Expand Down
8 changes: 4 additions & 4 deletions apps/gittensory-extension/manifest.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"manifest_version": 3,
"name": "Gittensory Maintainer Overlay",
"description": "Private Gittensory pull request context on GitHub.",
"name": "LoopOver Maintainer Overlay",
"description": "Private LoopOver pull request context on GitHub.",
"version": "0.1.0",
"permissions": ["storage"],
"host_permissions": ["https://github.com/*", "https://gittensory-api.aethereal.dev/*"],
"host_permissions": ["https://github.com/*", "https://api.loopover.ai/*"],
"background": {
"service_worker": "background.js",
"type": "module"
Expand All @@ -19,6 +19,6 @@
],
"options_page": "options.html",
"action": {
"default_title": "Gittensory"
"default_title": "LoopOver"
}
}
4 changes: 2 additions & 2 deletions apps/gittensory-miner-extension/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"manifest_version": 3,
"name": "Gittensory Miner Opportunity",
"name": "LoopOver Miner Opportunity",
"description": "Contributor-facing GitHub issue opportunity signals from a locally configured miner plane.",
"version": "0.1.0",
"permissions": ["storage"],
Expand All @@ -19,6 +19,6 @@
],
"options_page": "options.html",
"action": {
"default_title": "Gittensory Miner"
"default_title": "LoopOver Miner"
}
}
16 changes: 8 additions & 8 deletions apps/gittensory-ui/src/routes/extension.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ import { cn } from "@/lib/utils";
export const Route = createFileRoute("/extension")({
head: () => ({
meta: [
{ title: "Browser extension — Gittensory" },
{ title: "Browser extension — LoopOver" },
{
name: "description",
content:
"Private maintainer overlays on github.com. Never shown to PR authors or the public — reviewability context where you already work.",
},
{ property: "og:title", content: "Gittensory · maintainer browser extension" },
{ property: "og:title", content: "LoopOver · maintainer browser extension" },
{
property: "og:description",
content:
Expand All @@ -44,13 +44,13 @@ function ExtensionPage() {
Maintainer overlays on the GitHub you already use.
</h1>
<p className="mt-4 max-w-xl text-token-base text-muted-foreground">
The Gittensory browser extension surfaces miner context, scoreability projections, and
The LoopOver browser extension surfaces miner context, scoreability projections, and
reviewability hints on PR pages — visible only to the maintainer running it. Nothing
is injected into the page or shown to the PR author.
</p>
<div className="mt-6 flex flex-wrap gap-2">
<a
href="/downloads/gittensory-extension.zip"
href="/downloads/loopover-extension.zip"
className="inline-flex items-center gap-2 rounded-token border border-mint/40 bg-mint px-4 py-2 text-token-sm font-medium text-primary-foreground hover:brightness-110"
>
<Download className="size-4" />
Expand Down Expand Up @@ -104,9 +104,9 @@ function ExtensionPage() {
<Section className="pb-24">
<Callout variant="safety">
<strong>Privacy posture.</strong> The extension does not read the PR diff, post comments,
or open issues. It calls the same private Gittensory API endpoints you already use, then
or open issues. It calls the same private LoopOver API endpoints you already use, then
renders the response in your local DOM. Its permission boundary is storage, GitHub PR
pages, and the configured Gittensory API origin. Extension tokens are scoped to pull
pages, and the configured LoopOver API origin. Extension tokens are scoped to pull
context, stored in browser local storage rather than sync storage, and cleared on logout,
expiry, or revoked-session responses. GitHub personal access tokens are rejected.
</Callout>
Expand Down Expand Up @@ -230,7 +230,7 @@ function OverlayDemo() {
</div>
</div>

{/* gittensory overlay panel */}
{/* loopover overlay panel */}
<motion.div
initial={{ opacity: 0, x: 8 }}
animate={{ opacity: 1, x: 0 }}
Expand All @@ -242,7 +242,7 @@ function OverlayDemo() {
<span className="inline-flex size-5 items-center justify-center rounded-token bg-mint text-token-2xs font-bold text-primary-foreground">
G
</span>
<span className="text-token-xs text-muted-foreground">gittensory overlay</span>
<span className="text-token-xs text-muted-foreground">loopover overlay</span>
</div>
<span className="font-mono text-[9px] uppercase tracking-wider text-muted-foreground">
you only
Expand Down
1 change: 1 addition & 0 deletions packages/gittensory-miner/docs/env-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Generated by `npm run miner:env-reference`. Do not edit manually.
| `GITTENSORY_MINER_EVENT_LEDGER_DB` | `lib/event-ledger.js` | (none) |
| `GITTENSORY_MINER_GOVERNOR_LEDGER_DB` | `lib/governor-ledger.js` | `""` |
| `GITTENSORY_MINER_GOVERNOR_STATE_DB` | `lib/governor-state.js` | (none) |
| `GITTENSORY_MINER_KILL_SWITCH` | `lib/config-precedence.js` | `""` |
| `GITTENSORY_MINER_NO_UPDATE_CHECK` | `lib/update-check.js` | `""` |
| `GITTENSORY_MINER_ORB_EXPORT_DB` | `lib/orb-export.js` | `""` |
| `GITTENSORY_MINER_PLAN_STORE_DB` | `lib/plan-store.js` | `""` |
Expand Down
2 changes: 1 addition & 1 deletion scripts/build-extension.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { fileURLToPath } from "node:url";
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
const source = resolve(root, "apps/gittensory-extension");
const outDir = resolve(root, "apps/gittensory-extension/dist/package");
const zipPath = resolve(root, "apps/gittensory-ui/public/downloads/gittensory-extension.zip");
const zipPath = resolve(root, "apps/gittensory-ui/public/downloads/loopover-extension.zip");
const crcTable = Array.from({ length: 256 }, (_, index) => {
let value = index;
for (let bit = 0; bit < 8; bit += 1) {
Expand Down
2 changes: 1 addition & 1 deletion scripts/smoke-production.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async function main() {
const checks = [];
for (const route of siteRoutes) checks.push(checkStatus(`${siteOrigin}${route}`, 200, `UI ${route}`));
checks.push(checkStatus(`${siteOrigin}/openapi.json`, 200, "UI OpenAPI artifact", { contentType: /application\/json/i }));
checks.push(checkStatus(`${siteOrigin}/downloads/gittensory-extension.zip`, 200, "extension zip", { contentType: /application\/zip/i }));
checks.push(checkStatus(`${siteOrigin}/downloads/loopover-extension.zip`, 200, "extension zip", { contentType: /application\/zip/i }));
checks.push(checkText(`${siteOrigin}/robots.txt`, "Sitemap: https://gittensory.aethereal.dev/sitemap.xml", "robots sitemap directive"));
checks.push(checkStatus(`${siteOrigin}/sitemap.xml`, 200, "sitemap", { contentType: /application\/xml/i }));
checks.push(checkStatus(`${siteOrigin}/CNAME`, 404, "retired GitHub Pages CNAME"));
Expand Down
Loading