diff --git a/frontend/src/hooks.ts b/frontend/src/hooks.ts
index d473ce744b14a..15c8e2b6f3541 100644
--- a/frontend/src/hooks.ts
+++ b/frontend/src/hooks.ts
@@ -1,3 +1,5 @@
+import type { Reroute } from '@sveltejs/kit'
+
/** @type {import('@sveltejs/kit').Handle} */
export async function handle({ event, resolve }) {
const response = await resolve(event, {
@@ -6,3 +8,11 @@ export async function handle({ event, resolve }) {
return response
}
+
+export const reroute: Reroute = ({ url }) => {
+ const match = url.pathname.match(/^\/w\/([^/]+)(\/.*)?$/)
+ if (match) {
+ return match[2] || '/'
+ }
+ return url.pathname
+}
diff --git a/frontend/src/lib/components/ArgInput.svelte b/frontend/src/lib/components/ArgInput.svelte
index 197275fbc15ec..a0e0a38134621 100644
--- a/frontend/src/lib/components/ArgInput.svelte
+++ b/frontend/src/lib/components/ArgInput.svelte
@@ -40,7 +40,7 @@
import MultiSelect from './select/MultiSelect.svelte'
import { safeSelectItems } from './select/utils.svelte'
import S3ArgInput from './common/fileUpload/S3ArgInput.svelte'
- import { base } from '$lib/base'
+ import { wsBase } from '$lib/workspaceUrl'
import { workspaceStore } from '$lib/stores'
import { getJsonSchemaFromResource } from './schema/jsonSchemaResource.svelte'
import AIProviderPicker from './AIProviderPicker.svelte'
@@ -568,7 +568,7 @@
{#if value && typeof value == 'string' && value?.startsWith('$res:')}
Linked to resource {value.slice(5)}
diff --git a/frontend/src/lib/components/AutoscalingConfigEditor.svelte b/frontend/src/lib/components/AutoscalingConfigEditor.svelte
index 20fb30f3e7690..5ceea574fd78d 100644
--- a/frontend/src/lib/components/AutoscalingConfigEditor.svelte
+++ b/frontend/src/lib/components/AutoscalingConfigEditor.svelte
@@ -7,6 +7,7 @@
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte'
import { Alert, Button } from './common'
import { ExternalLink } from 'lucide-svelte'
+ import { getWsBase } from '$lib/workspaceUrl'
import TextInput from './text_input/TextInput.svelte'
import Label from './Label.svelte'
import MultiSelect from './select/MultiSelect.svelte'
@@ -189,7 +190,7 @@
variant="default"
target="_blank"
endIcon={{ icon: ExternalLink }}
- href="/scripts/add?hub=hub%2F9204%2Fhelper%2FScale%20a%20worker%20group%20deployed%20as%20a%20kubernetes%20service&workspace=admins"
+ href="{getWsBase('admins')}/scripts/add?hub=hub%2F9204%2Fhelper%2FScale%20a%20worker%20group%20deployed%20as%20a%20kubernetes%20service"
>Create from template
{disabled}
@@ -197,7 +198,7 @@
@@ -264,7 +264,7 @@
{
displayName: 'Duplicate/Fork',
icon: GitFork,
- href: `${base}/scripts/add?template=${script.path}`,
+ href: `${$wsBase}/scripts/add?template=${script.path}`,
disabled: !showEditButton,
hide: $userStore?.operator
},
@@ -299,7 +299,7 @@
{
displayName: 'View runs',
icon: List,
- href: `${base}/runs/${script.path}`
+ href: `${$wsBase}/runs/${script.path}`
},
{
displayName: 'Versions',
@@ -311,7 +311,7 @@
{
displayName: 'Audit logs',
icon: Eye,
- href: `${base}/audit_logs?resource=${script.path}`,
+ href: `${$wsBase}/audit_logs?resource=${script.path}`,
hide: $userStore?.operator
},
{
@@ -431,7 +431,7 @@
openDetails
on:openDetails={(e) => {
if (script) {
- goto(`/scripts/get/${e.detail.version}?workspace=${$workspaceStore}`)
+ goto(`/scripts/get/${e.detail.version}`)
}
versionsDrawerOpen = false
}}
diff --git a/frontend/src/lib/components/copilot/CronGen.svelte b/frontend/src/lib/components/copilot/CronGen.svelte
index 02a45aa767d8b..69c6375a32dd6 100644
--- a/frontend/src/lib/components/copilot/CronGen.svelte
+++ b/frontend/src/lib/components/copilot/CronGen.svelte
@@ -5,7 +5,7 @@
import Popover from '$lib/components/meltComponents/Popover.svelte'
import { sendUserToast } from '$lib/toast'
- import { base } from '$lib/base'
+ import { wsBase } from '$lib/workspaceUrl'
import type { ChatCompletionMessageParam } from 'openai/resources/index.mjs'
import { copilotInfo } from '$lib/aiStore'
import { untrack } from 'svelte'
@@ -131,7 +131,7 @@