···77import he from "he";
88const { encode } = he;
99import * as num from "../../public/aesthetic.computer/lib/num.mjs";
1010-import {
1111- parse,
1212- metadata,
1313- inferTitleDesc,
1414- updateCode,
1515-} from "../../public/aesthetic.computer/lib/parse.mjs";
1616-import { respond } from "../../backend/http.mjs";
1717-import { handleFromPermahandle } from "../../backend/authorization.mjs";
1818-import { defaultTemplateStringProcessor as html } from "../../public/aesthetic.computer/lib/helpers.mjs";
1919-import { networkInterfaces } from "os";
2020-const dev = process.env.CONTEXT === "dev" || process.env.NETLIFY_DEV === "true";
1010+import {
1111+ parse,
1212+ metadata,
1313+ inferTitleDesc,
1414+ updateCode,
1515+} from "../../public/aesthetic.computer/lib/parse.mjs";
1616+import { respond } from "../../backend/http.mjs";
1717+import { handleFromPermahandle } from "../../backend/authorization.mjs";
1818+import { connect } from "../../backend/database.mjs";
1919+import { defaultTemplateStringProcessor as html } from "../../public/aesthetic.computer/lib/helpers.mjs";
2020+import { networkInterfaces } from "os";
2121+const dev = process.env.CONTEXT === "dev" || process.env.NETLIFY_DEV === "true";
2222+const BARE_KIDLISP_CODE = /^[0-9A-Za-z]{3,64}$/;
21232224// Fire-and-forget piece hit tracking (don't await, don't block page load)
2323-async function trackPieceHit(piece, type) {
2525+async function trackPieceHit(piece, type) {
2426 try {
2527 const baseUrl = dev ? "https://localhost:8888" : "https://aesthetic.computer";
2628 const { got } = await import("got");
···3537 // Silent fail - don't let tracking break page loads
3638 if (dev) console.log("📊 Hit tracking failed:", e.message);
3739 }
3838-}
4040+}
4141+4242+async function findBareKidlispCode(slug) {
4343+ if (!BARE_KIDLISP_CODE.test(slug)) return false;
4444+4545+ try {
4646+ const database = await connect();
4747+ const record = await database.db.collection("kidlisp").findOne(
4848+ { code: slug },
4949+ { projection: { _id: 1 } },
5050+ );
5151+ await database.disconnect();
5252+ return !!record;
5353+ } catch (err) {
5454+ console.log(`[kidlisp] Bare /${slug} lookup failed:`, err?.message || err);
5555+ return false;
5656+ }
5757+}
5858+5959+function redirectToKidlispCode(event, code) {
6060+ const query = new URLSearchParams(event.queryStringParameters || {});
6161+ const suffix = query.toString() ? `?${query.toString()}` : "";
6262+ const location = `/$${code}${suffix}`;
6363+6464+ return respond(
6565+ 302,
6666+ `<a href="${location}">Redirecting to ${location}</a>`,
6767+ {
6868+ "Content-Type": "text/html",
6969+ Location: location,
7070+ },
7171+ );
7272+}
39734074async function fun(event, context) {
4175 const _startTime = Date.now();
···728762 }
729763 }
730764 }
731731- } else if (parsed.source) {
765765+ } else if (parsed.source) {
732766 // Handle inline kidlisp code that doesn't need file loading
733767 console.log("[kidlisp] Using inline kidlisp source for metadata");
734768···745779 if (title) {
746780 meta = { ...meta, title, standaloneTitle: true };
747781 }
748748- }
749749- }
750750- } catch (err) {
782782+ }
783783+ }
784784+785785+ if (statusCode === 404 && !sourceCode && !fromHandle && await findBareKidlispCode(slug)) {
786786+ console.log(`[kidlisp] Converting bare /${slug} to /$${slug} and redirecting`);
787787+ return redirectToKidlispCode(event, slug);
788788+ }
789789+ } catch (err) {
751790 // If either module doesn't load, then we can fallback to the main route.
752791 console.log("🔴 Error loading module:", err, sourceCode);
753792 return redirect;
+6
system/public/aesthetic.computer/disks/prompt.mjs
···79798080const TYPO_REPLY = `
8181Use Aesthetic Computer by entering a correct word.\n\nEnter "list" for some available words.\n\nEnter "chat" for help.\n\nText 1-508-728-4043 for tips.\n\n - @jeffrey`.trim();
8282+const BARE_KIDLISP_CODE = /^[0-9A-Za-z]{3,64}$/;
82838384import { Android, MetaBrowser, iOS } from "../lib/platform.mjs";
8485import { validateHandle } from "../lib/text.mjs";
···41404141 } else {
41414142 body = parse(trimmed);
41424143 loaded = await load(body); // Execute the current command.
41444144+41454145+ // Bare code fallback: let `duv` resolve to `$duv` when no disk named `duv` exists.
41464146+ if (!loaded && BARE_KIDLISP_CODE.test(trimmed) && !trimmed.startsWith("$")) {
41474147+ loaded = await load(parse(`$${trimmed}`));
41484148+ }
41434149 }
4144415041454151 // console.log("Loaded:", loaded);