fix routes

This commit is contained in:
Frederik Spirgi
2026-09-23 10:37:05 +02:00
parent c56b2c4058
commit e7e2ef7543
6 changed files with 32 additions and 26 deletions
+4 -4
View File
@@ -1,7 +1,7 @@
import { get, post, put } from "./js/api.js?v=20260909-account-controls";
import { initializeAppearance } from "./js/themeController.js?v=20260909-account-controls";
import { clearStatus, setStatus } from "./js/statusNotice.js?v=20260909-account-controls";
import { populatePersonaForm, readPersonaForm } from "./js/personaForm.js?v=20260909-account-controls";
import { get, post, put } from "./api.js?v=20260909-account-controls";
import { initializeAppearance } from "./themeController.js?v=20260909-account-controls";
import { clearStatus, setStatus } from "./statusNotice.js?v=20260909-account-controls";
import { populatePersonaForm, readPersonaForm } from "./personaForm.js?v=20260909-account-controls";
const $ = (id) => document.getElementById(id);
const marketPersonaList = $("marketPersonaList");
+10 -10
View File
@@ -1,12 +1,12 @@
import { del, get, post, put, stream } from "./js/api.js?v=20260909-account-controls";
import { regenerateInline } from "./js/regeneration.js";
import { appendSources, createWebSearchToggle } from "./js/webSearch.js";
import { appendAttachments, createAttachmentComposer } from "./js/attachments.js";
import { createReasoningToggle, finishReasoning, updateReasoning } from "./js/reasoning.js?v=20260921-reasoning-capability";
import { closeChatDrawer, openChatDrawer } from "./js/chatDrawer.js?v=20260909-account-controls";
import { onboardingPrompts, requestedChatId } from "./js/constants.js?v=20260909-account-controls";
import { getModelProfile } from "./js/modelProfiles.js?v=20260909-account-controls";
import { applyTheme as applySharedTheme, applyThemeMode as applySharedThemeMode, readStoredAppearance } from "./js/themeController.js?v=20260909-account-controls";
import { del, get, post, put, stream } from "./api.js?v=20260909-account-controls";
import { regenerateInline } from "./regeneration.js";
import { appendSources, createWebSearchToggle } from "./webSearch.js";
import { appendAttachments, createAttachmentComposer } from "./attachments.js";
import { createReasoningToggle, finishReasoning, updateReasoning } from "./reasoning.js?v=20260921-reasoning-capability";
import { closeChatDrawer, openChatDrawer } from "./chatDrawer.js?v=20260909-account-controls";
import { onboardingPrompts, requestedChatId } from "./constants.js?v=20260909-account-controls";
import { getModelProfile } from "./modelProfiles.js?v=20260909-account-controls";
import { applyTheme as applySharedTheme, applyThemeMode as applySharedThemeMode, readStoredAppearance } from "./themeController.js?v=20260909-account-controls";
import {
activeChatTitle,
activeUserPersonaStatus,
@@ -103,7 +103,7 @@ import {
brandLogoTargets,
brandNameTargets,
userPersonaList
} from "./js/dom.js?v=20260909-account-controls";
} from "./dom.js?v=20260909-account-controls";
const headerModelButton = document.getElementById("headerModelButton");
const webSearchButton = document.getElementById("webSearch");
+4 -4
View File
@@ -1,11 +1,11 @@
import { del, get, post, put } from "./js/api.js?v=20260909-account-controls";
import { del, get, post, put } from "./api.js?v=20260909-account-controls";
import {
applyTheme as applySharedTheme,
applyThemeMode as applySharedThemeMode,
initializeAppearance
} from "./js/themeController.js?v=20260909-account-controls";
import { clearStatus, setStatus } from "./js/statusNotice.js?v=20260909-account-controls";
import { populatePersonaForm, readPersonaForm } from "./js/personaForm.js?v=20260909-account-controls";
} from "./themeController.js?v=20260909-account-controls";
import { clearStatus, setStatus } from "./statusNotice.js?v=20260909-account-controls";
import { populatePersonaForm, readPersonaForm } from "./personaForm.js?v=20260909-account-controls";
const $ = (id) => document.getElementById(id);
const settingsNotice = $("settingsNotice");
+4 -4
View File
@@ -30,11 +30,11 @@ const files = [
"src/services/workspaceImportService.js",
"src/services/modelService.js",
"src/services/personaService.js",
"public/script.js",
"public/pages.js",
"public/js/script.js",
"public/js/pages.js",
"public/js/workspaceNavigation.js",
"public/settings.js",
"public/market.js",
"public/js/settings.js",
"public/js/market.js",
"public/js/api.js",
"public/js/regeneration.js",
"public/js/webSearch.js",
+8 -2
View File
@@ -1017,7 +1017,7 @@ test("public pages, workspace guards, and legacy chat links have distinct destin
assert.match(await home.text(), /What would you like to do/);
const chat = await fetch(server.baseUrl + "/app/chats/new", {headers: jar.headers()});
const html = await chat.text();
assert.ok(html.includes('src="/script.js'));
assert.ok(html.includes('src="/js/script.js'));
assert.ok(!html.includes('id="loginForm"'));
assert.deepEqual((await request(server.baseUrl, "/chats", {jar})).json.chats, [], "home and chat pages do not create chats on GET");
await request(server.baseUrl, "/logout", {method: "POST", body: {}, jar});
@@ -1071,7 +1071,7 @@ test("page headers share navigation and keep session markup private", async () =
test("frontend scripts and styles revalidate across deployments", async () => {
const server = await startTestServer({config: {staticMaxAge: "1h"}});
try {
for (const asset of ["/script.js?v=20260909-account-controls", "/app/dom.js?v=20260909-account-controls", "/pages.css?v=20260909-account-controls"]) {
for (const asset of ["/js/script.js?v=20260909-account-controls", "/js/dom.js?v=20260909-account-controls", "/css/pages.css?v=20260909-account-controls"]) {
const response = await fetch(server.baseUrl + asset);
assert.equal(response.status, 200);
assert.equal(response.headers.get("cache-control"), "no-cache");
@@ -1079,5 +1079,11 @@ test("frontend scripts and styles revalidate across deployments", async () => {
assert.ok(etag);
await response.text();
}
for (const entrypoint of ["/js/script.js", "/js/settings.js", "/js/market.js"]) {
const response = await fetch(server.baseUrl + entrypoint);
assert.equal(response.status, 200);
assert.doesNotMatch(await response.text(), /from\s+["']\.\/js\//, `${entrypoint} must not resolve dependencies below /js/js`);
}
} finally { await server.close(); }
});
+2 -2
View File
@@ -1,7 +1,7 @@
import test from "node:test";
import assert from "node:assert/strict";
import {readFile} from "node:fs/promises";
import {regenerateInline} from "../public/app/regeneration.js";
import {regenerateInline} from "../public/js/regeneration.js";
class Element {
constructor(tag = "div") {
@@ -86,7 +86,7 @@ test("inline renderer streams in place, follows only nearby output, commits or r
});
test("Regenerate uses inline activity and never reloads or appends a chat message", async () => {
const source = await readFile(new URL("../public/script.js", import.meta.url), "utf8");
const source = await readFile(new URL("../public/js/script.js", import.meta.url), "utf8");
const regenerate = source.slice(source.indexOf("async function retryLatestAssistantMessage"), source.indexOf("async function switchResponseVersion"));
assert.match(regenerate, /setLoadingState\(true, false\)/);
assert.match(regenerate, /regenerateInline/);