chore: upgrade frontend dependencies to SvelteKit 3

This commit is contained in:
2026-10-02 07:36:25 +09:00
parent d10783c0d6
commit a0460f107d
142 changed files with 785 additions and 1033 deletions
@@ -97,6 +97,16 @@ Deno.serve({ hostname: "127.0.0.1", port }, async (request) => {
diagnostics: [],
});
}
// Keyboard focus can preload the Tickets route before navigation.
if (path === "/orchestrator") {
return json({
workspace_id: workspaceId,
online: false,
disposition: "offline",
worker: null,
diagnostics: [],
});
}
if (path === "/working-directories") {
return json({ workspace_id: workspaceId, items: [], diagnostics: [] });
}
@@ -66,6 +66,9 @@ Deno.test("production Home dashboard isolates failures, shows authoritative reco
});
page.on("requestfailed", (request) => errors.push(request.url()));
page.on("request", (request) => requests.push(request.url()));
page.on("response", (response) => {
if (response.status() >= 400) errors.push(`${response.status()} ${response.url()}`);
});
for (const workspace of ["home-owner", "home-member", "home-long"]) {
await page.goto(`${url}/w/${workspace}`);
await ready(page);
+12 -11
View File
@@ -2,8 +2,13 @@
SvelteKit static SPA for the Yoi workspace control plane.
The frontend is intentionally static. Workspace authority, validation, and API
behavior live in the Rust `yoi-server` backend.
The frontend is intentionally static. Workspace authority, validation, and API behavior live in the Rust `yoi-server` backend.
## Toolchain
Dependencies are pinned in `deno.json` and `package.json`, with resolutions in `deno.lock`. Run `deno install --frozen` to reproduce the installed versions. The current toolchain is SvelteKit 3, Svelte 5, Vite 8, and Vitest 5. TypeScript is kept on 6.0.3 because SvelteKit 3.0.0 and svelte-check 4.7.6 do not yet declare support for TypeScript 7.
SvelteKit and adapter settings live in `vite.config.ts`. Internal library imports use the `#lib/*` package subpath mapping with explicit file extensions, shared by Vite, TypeScript, and Deno. `tsconfig.json` extends `$app/tsconfig`; generated WASM JavaScript is consumed through its generated `.d.ts`, not checked as handwritten JavaScript. Deno-only tests under `test/` are type-checked by `deno task test`.
## Development
@@ -23,9 +28,7 @@ cd web/workspace
deno task dev
```
The Vite dev server proxies `/api/*` to `http://127.0.0.1:8787`, so frontend hot
reload works while the Rust backend serves the workspace API. Open the Vite URL
printed by `deno task dev`.
The Vite dev server proxies `/api/*` to `http://127.0.0.1:8787`, so frontend hot reload works while the Rust backend serves the workspace API. Open the Vite URL printed by `deno task dev`.
If you want to run the backend from the repository root instead:
@@ -33,10 +36,7 @@ If you want to run the backend from the repository root instead:
cargo run -p yoi-workspace-server --bin yoi-server -- serve --listen 127.0.0.1:8787
```
The backend reads Workspace records from the Yoi server DB at
`<data_dir>/server/server.db`. Run
`cargo run -p yoi-workspace-server --bin yoi-server -- init --workspace .` first when the server
DB has not been initialized.
The backend reads Workspace records from the Yoi server DB at `<data_dir>/server/server.db`. Run `cargo run -p yoi-workspace-server --bin yoi-server -- init --workspace .` first when the server DB has not been initialized.
## Static build
@@ -46,13 +46,14 @@ Build the SPA:
deno task build
```
Static asset packaging is a deployment concern. Local development normally uses
the Vite dev server proxy plus the Rust backend command above.
Static asset packaging is a deployment concern. Local development normally uses the Vite dev server proxy plus the Rust backend command above.
## Checks
```bash
deno task check
deno task test
deno task test:component
deno task build
```
+23 -24
View File
@@ -3,40 +3,39 @@
"nodeModulesDir": "auto",
"tasks": {
"install": "deno install",
"dev": "deno run -A npm:vite@7.2.7 dev",
"dev": "deno run -A npm:vite@8.3.2 dev",
"dev:backend": "cd ../.. && cargo run -p yoi-workspace-server --bin yoi-server -- serve --listen 127.0.0.1:8787",
"check": "deno run -A npm:@sveltejs/kit@2.49.4 sync && deno run -A npm:svelte-check@4.3.4 --tsconfig ./tsconfig.json",
"check": "deno run -A npm:@sveltejs/kit@3.0.0 sync && deno run -A npm:svelte-check@4.7.6 --tsconfig ./tsconfig.json",
"test": "deno test --allow-read=src,test,tests,../../docs --allow-env=LOG,VSCODE_TEXTMATE_DEBUG,NODE_ENV tests/workspace-model.test.ts tests/repository-api.test.ts tests/workspace-catalog.test.ts tests/profile-api.test.ts tests/skill-api.test.ts tests/tooltip-contract.test.ts tests/bevel-contract.test.ts tests/bevel-line-contract.test.ts tests/typography-contract.test.ts src/lib/workspace/auth/model.test.ts src/lib/workspace/protocol-validator.test.ts tests/auth-api.test.ts src/lib/workspace/api/http.test.ts src/lib/workspace/api/workers.test.ts src/lib/workspace/api/ticket-browser.test.ts src/lib/workspace/header/breadcrumb-model.test.ts src/lib/workspace/console/chat-submit.test.ts src/lib/workspace/console/composer-delivery.test.ts test/composer-history.test.ts tests/composer-paste.test.ts src/lib/workspace/console/composer-command.test.ts src/lib/workspace/console/composer-draft.test.ts src/lib/workspace/console/composer-completion.test.ts src/lib/workspace/console/file-completions.test.ts test/console/ansi.test.ts src/lib/workspace/console/history.test.ts src/lib/workspace/console/model.test.ts src/lib/workspace/console/turn-navigation.test.ts src/lib/workspace/console/run-status.test.ts src/lib/workspace/companion/api.test.ts tests/workdir-api.test.ts tests/workdir-permissions.test.ts src/lib/workspace/console/tasks.test.ts test/ticket-detail-route-reuse.test.ts test/spa-shell.test.ts test/objective-pages.test.ts test/repositories/ui.test.ts src/lib/workspace/console/worker-console.ui.test.ts src/lib/workspace/settings/model.test.ts tests/runtime-connection.test.ts tests/runtime-management.test.ts tests/runtime-management-source.test.ts src/lib/workspace/sidebar/override-stack.test.ts src/lib/workspace/sidebar/route-ownership.test.ts src/lib/workspace/sidebar/workers.test.ts src/lib/workspace/sidebar/workspace-switcher.test.ts src/lib/workspace/sidebar/worker-subscription.test.ts src/lib/workspace/sidebar/worker-workdir-meta.test.ts src/lib/workspace/sidebar/worker-launch.test.ts test/sidebar/worker-actions.test.ts src/lib/workspace/tickets/merge-request-resources.test.ts src/lib/workspace/tickets/ticket-panel.test.ts test/merge-request-status.test.ts test/config-source/decodal-grammar.test.ts test/config-source/editor-state.test.ts test/config-source/fixed-schema-wrapper.test.ts test/config-source/toolchain.test.ts test/config-source/wasm-parity.test.ts test/config-source/api.test.ts tests/memory-api.test.ts test/repository-access/api.test.ts test/repository-access/loader.test.ts test/repository-access/model.test.ts test/repository-access/structure.test.ts test/repository-ssh-connection-ui.test.ts",
"test:component": "deno run -A npm:vitest@3.2.4 run --config vitest.config.ts",
"build": "deno run -A npm:vite@7.2.7 build",
"preview": "deno run -A npm:vite@7.2.7 preview",
"test:component": "deno run -A npm:vitest@5.0.3 run --config vitest.config.ts",
"build": "deno run -A npm:vite@8.3.2 build",
"preview": "deno run -A npm:vite@8.3.2 preview",
"generate:repository-api": "cd ../.. && cargo run -q -p server-api --example generate_repository_openapi_types",
"check:repository-api": "cd ../.. && cargo run -q -p server-api --example generate_repository_openapi_types -- --check",
"generate:ticket-api": "cd ../.. && cargo run -q -p server-api --example generate_ticket_api_types",
"check:ticket-api": "cd ../.. && cargo run -q -p server-api --example generate_ticket_api_types -- --check"
},
"imports": {
"$lib/": "./src/lib/",
"@sveltejs/adapter-static": "npm:@sveltejs/adapter-static@3.0.9",
"@sveltejs/kit": "npm:@sveltejs/kit@2.49.4",
"@sveltejs/vite-plugin-svelte": "npm:@sveltejs/vite-plugin-svelte@6.2.1",
"@codemirror/autocomplete": "npm:@codemirror/autocomplete@6.20.0",
"@codemirror/commands": "npm:@codemirror/commands@6.9.0",
"@sveltejs/adapter-static": "npm:@sveltejs/adapter-static@4.0.0",
"@sveltejs/kit": "npm:@sveltejs/kit@3.0.0",
"@sveltejs/vite-plugin-svelte": "npm:@sveltejs/vite-plugin-svelte@7.3.1",
"@codemirror/autocomplete": "npm:@codemirror/autocomplete@6.20.3",
"@codemirror/commands": "npm:@codemirror/commands@6.11.1",
"@codemirror/language": "npm:@codemirror/language@6.12.4",
"@codemirror/state": "npm:@codemirror/state@6.7.1",
"@codemirror/view": "npm:@codemirror/view@6.43.8",
"@lezer/common": "npm:@lezer/common@1.5.2",
"@lezer/highlight": "npm:@lezer/highlight@1.2.3",
"decodal-codemirror": "npm:decodal-codemirror@0.3.0",
"@codemirror/state": "npm:@codemirror/state@6.7.6",
"@codemirror/view": "npm:@codemirror/view@6.43.13",
"@lezer/common": "npm:@lezer/common@1.5.3",
"@lezer/highlight": "npm:@lezer/highlight@1.2.5",
"decodal-codemirror": "npm:decodal-codemirror@0.3.1",
"clsx": "npm:clsx@2.1.1",
"cookie": "npm:cookie@0.6.0",
"devalue": "npm:devalue@5.6.4",
"set-cookie-parser": "npm:set-cookie-parser@2.7.2",
"shiki": "npm:shiki@4.4.2",
"svelte": "npm:svelte@5.45.6",
"svelte-check": "npm:svelte-check@4.3.4",
"typescript": "npm:typescript@5.9.3",
"vite": "npm:vite@7.2.7"
"cookie": "npm:cookie@2.0.1",
"devalue": "npm:devalue@6.0.2",
"set-cookie-parser": "npm:set-cookie-parser@3.1.2",
"shiki": "npm:shiki@4.5.0",
"svelte": "npm:svelte@5.57.1",
"svelte-check": "npm:svelte-check@4.7.6",
"typescript": "npm:typescript@6.0.3",
"vite": "npm:vite@8.3.2"
},
"fmt": {
"proseWrap": "never"
+336 -603
View File
File diff suppressed because it is too large Load Diff
+9 -6
View File
@@ -5,14 +5,17 @@
"type": "module",
"dependencies": {
"@fontsource/ibm-plex-mono": "5.3.0",
"@humanspeak/svelte-markdown": "1.9.1",
"@humanspeak/svelte-markdown": "2.0.0",
"gen-interface-jp": "0.8.0",
"shiki": "4.4.2",
"yaml": "2.9.0"
"shiki": "4.5.0",
"yaml": "2.9.1"
},
"devDependencies": {
"@testing-library/svelte": "5.2.8",
"happy-dom": "20.12.0",
"vitest": "3.2.4"
"@testing-library/svelte": "5.4.2",
"happy-dom": "20.14.5",
"vitest": "5.0.3"
},
"imports": {
"#lib/*": "./src/lib/*"
}
}
@@ -7,7 +7,7 @@ import {
workspaceSkillCatalogPath,
workspaceSkillDetailPath,
} from "./http.ts";
import { SKILL_API_LIMITS } from "$lib/generated/skill-api.ts";
import { SKILL_API_LIMITS } from "#lib/generated/skill-api.ts";
declare const Deno: {
test(name: string, fn: () => Promise<void> | void): void;
+3 -3
View File
@@ -1,13 +1,13 @@
import { SKILL_API_LIMITS } from "$lib/generated/skill-api.ts";
import { SKILL_API_LIMITS } from "#lib/generated/skill-api.ts";
import type {
SkillCatalogResponse,
SkillDetailResponse,
} from "$lib/generated/skill-api.ts";
} from "#lib/generated/skill-api.ts";
import {
parseSkillCatalogResponse,
parseSkillDetailResponse,
SkillApiContractError,
} from "$lib/workspace/skills/api.ts";
} from "#lib/workspace/skills/api.ts";
export type ApiResult<T> = {
data: T | null;
@@ -2,7 +2,7 @@ import type {
MergeRequestDetailResponse,
MergeRequestListResponse,
MergeRequestThreadEvent,
} from "$lib/generated/ticket-api";
} from "#lib/generated/ticket-api.ts";
import { workspaceApiPath } from "./http";
export type MergeRequestDetail = MergeRequestDetailResponse;
@@ -3,19 +3,19 @@ import type {
CreateWorkspaceRepositoryResponse,
RepositoryDetailResponse,
RepositoryListResponse,
} from "$lib/generated/repository-api.ts";
} from "#lib/generated/repository-api.ts";
import {
type ApiResult,
loadJson,
readBoundedJson,
workspaceApiPath,
} from "$lib/workspace/api/http.ts";
} from "#lib/workspace/api/http.ts";
import {
parseCreateWorkspaceRepositoryResponse,
parseRepositoryApiError,
parseRepositoryDetailResponse,
parseRepositoryListResponse,
} from "$lib/workspace/api/workspace-model.ts";
} from "#lib/workspace/api/workspace-model.ts";
export const REPOSITORY_API_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
@@ -3,7 +3,7 @@ import type {
RuntimeConnectionTestFailureKind,
RuntimeConnectionTestResponse,
RuntimeVerificationEvidenceSummary,
} from "$lib/generated/runtime-api";
} from "#lib/generated/runtime-api.ts";
const RESPONSE_KEYS = [
"workspace_id",
@@ -24,7 +24,7 @@ import type {
WorkspaceRuntimeDetail,
WorkspaceRuntimeListResponse,
WorkspaceRuntimeResource,
} from "$lib/generated/runtime-api.ts";
} from "#lib/generated/runtime-api.ts";
import { workspaceApiPath } from "./http.ts";
export type WorkspaceRuntimeList = Omit<WorkspaceRuntimeListResponse, "diagnostics"> & {
@@ -11,7 +11,7 @@ import type {
RuntimeWorkerLifecycleResult,
WorkerOperationState,
WorkerRetentionResponse,
} from "$lib/generated/runtime-api";
} from "#lib/generated/runtime-api.ts";
const MAX_STRING_BYTES = 4_096;
const MAX_CANDIDATES = 1_000;
@@ -38,7 +38,7 @@ import type {
TicketRoleAssignmentRecord,
TicketRoleAssignmentSummary,
TicketTarget,
} from "$lib/generated/ticket-api.ts";
} from "#lib/generated/ticket-api.ts";
export const TICKET_BROWSER_API_MAX_RESPONSE_BYTES = 4 * 1024 * 1024;
export const TICKET_BROWSER_API_LOAD_POLICY = {
@@ -21,12 +21,12 @@ import type {
WorkerWorkdirAttachmentSummary,
WorkerWorkspaceSummary,
WorkingDirectoryRepositoryOption,
} from "$lib/generated/worker-launch-api";
import type { Segment } from "$lib/generated/protocol";
} from "#lib/generated/worker-launch-api.ts";
import type { Segment } from "#lib/generated/protocol.ts";
import {
parseExternalWorkdirPermissions,
parseWorkingDirectorySummary,
} from "$lib/workspace/api/workdirs";
} from "#lib/workspace/api/workdirs.ts";
const DIAGNOSTIC_SEVERITIES = new Set<DiagnosticSeverity>([
"info",
@@ -4,8 +4,8 @@ import {
type RepositorySummary,
type WorkspaceCreateResponse,
type WorkspaceSummary,
} from "$lib/workspace/api/workspace-model";
import { loadWorkspaceRepositoryList } from "$lib/workspace/api/repositories.ts";
} from "#lib/workspace/api/workspace-model.ts";
import { loadWorkspaceRepositoryList } from "#lib/workspace/api/repositories.ts";
export type WorkspaceCatalogRecord = WorkspaceSummary;
export type WorkspaceCatalogItem = WorkspaceCatalogRecord & {
@@ -1,4 +1,4 @@
import type { ApiResult } from "$lib/workspace/api/http";
import type { ApiResult } from "#lib/workspace/api/http.ts";
import type {
WorkspaceAuthConfig,
WorkspaceCatalogListResponse,
@@ -15,7 +15,7 @@ import type {
WorkspaceRepositoryRecord,
WorkspaceResponse,
WorkspaceSummary,
} from "$lib/generated/legacy-server-api.ts";
} from "#lib/generated/legacy-server-api.ts";
import type {
CreateWorkspaceRepositoryResponse,
Diagnostic,
@@ -35,7 +35,7 @@ import type {
RepositorySshConnectionTrustState,
RepositorySshHostKeyCandidate,
RepositorySummary,
} from "$lib/generated/repository-api.ts";
} from "#lib/generated/repository-api.ts";
export type {
WorkspaceCatalogListResponse,
@@ -45,7 +45,7 @@ export type {
WorkspacePermissionSummary,
WorkspaceResponse,
WorkspaceSummary,
} from "$lib/generated/legacy-server-api.ts";
} from "#lib/generated/legacy-server-api.ts";
export type {
CreateWorkspaceRepositoryRequest,
CreateWorkspaceRepositoryResponse,
@@ -63,7 +63,7 @@ export type {
RepositorySshConnectionProbeResponse,
RepositorySshHostKeyCandidate,
RepositorySummary,
} from "$lib/generated/repository-api.ts";
} from "#lib/generated/repository-api.ts";
type JsonObject = Record<string, unknown>;
+2 -2
View File
@@ -4,7 +4,7 @@ import type {
PasskeyLoginOptionsRequest,
PasskeyRegistrationCompleteRequest,
PasskeyRegistrationOptionsRequest,
} from "$lib/generated/auth-api.ts";
} from "#lib/generated/auth-api.ts";
import {
authenticationCredentialToJson,
type AuthUser,
@@ -17,7 +17,7 @@ import {
prepareRegistrationOptions,
registrationCredentialToJson,
type WhoamiResponse,
} from "$lib/workspace/auth/model";
} from "#lib/workspace/auth/model.ts";
const MAX_AUTH_RESPONSE_BYTES = 256 * 1024;
@@ -12,7 +12,7 @@ import type {
PasskeyRegistrationOptionsResponse,
RequestActor,
WhoamiResponse,
} from "$lib/generated/auth-api.ts";
} from "#lib/generated/auth-api.ts";
export type AuthUser = AuthenticatedUser;
export type PasskeyUserResponse = AuthUserResponse;
@@ -9,7 +9,7 @@ import type {
DiagnosticSeverity,
WorkspaceWorkerDiscoveryItem,
WorkspaceWorkerSubject,
} from "$lib/generated/companion-api";
} from "#lib/generated/companion-api.ts";
const MAX_TRANSCRIPT_ITEMS = 200;
const MAX_DIAGNOSTICS = 100;
@@ -1,6 +1,6 @@
<script lang="ts">
import { onMount } from "svelte";
import DecodalSourceEditor from "$lib/workspace/settings/DecodalSourceEditor.svelte";
import DecodalSourceEditor from "#lib/workspace/settings/DecodalSourceEditor.svelte";
import {
commitConfigTree,
fetchConfigTree,
@@ -10,7 +10,7 @@ export type {
ToolchainContract,
WorkspaceConfigSchemaBundle,
WorkspaceConfigTreeResponse,
} from "$lib/generated/legacy-server-api.ts";
} from "#lib/generated/legacy-server-api.ts";
// Browser-local Decodal/WASM projections remain owned by config-source.
export type { ConfigDiagnostic } from "./generated/types/ConfigDiagnostic.ts";
@@ -22,12 +22,12 @@
isolateHistory,
} from "@codemirror/commands";
import { onMount } from "svelte";
import type { Segment } from "$lib/generated/protocol.ts";
import type { Segment } from "#lib/generated/protocol.ts";
import {
handleComposerImagePaste,
measureComposerPaste,
type ComposerPasteMeasurement,
} from "$lib/workspace/console/composer-paste.ts";
} from "#lib/workspace/console/composer-paste.ts";
import {
composerDeletionRange,
composerPasteAtoms,
@@ -37,7 +37,7 @@
type ComposerDraftSnapshot,
type ComposerPaste,
type ComposerTextPaste,
} from "$lib/workspace/console/composer-draft.ts";
} from "#lib/workspace/console/composer-draft.ts";
import {
ComposerHistory,
loadComposerHistory,
@@ -45,9 +45,9 @@
shouldBrowseComposerHistory,
type ComposerHistoryDirection,
type ComposerHistoryEntry,
} from "$lib/workspace/console/composer-history.ts";
} from "#lib/workspace/console/composer-history.ts";
import { applyCompletion, completionSelection, completionTokenAt, localCommandCompletions, type ComposerCompletionEntry, type ComposerCompletionToken } from "./composer-completion";
import { shouldSubmitChatKey } from "$lib/workspace/console/chat-submit.ts";
import { shouldSubmitChatKey } from "#lib/workspace/console/chat-submit.ts";
interface Props {
disabled?: boolean;
@@ -1,7 +1,7 @@
<script lang="ts">
import AnsiText from '$lib/workspace/console/AnsiText.svelte';
import RichMarkdown from '$lib/workspace/console/RichMarkdown.svelte';
import type { ConsoleLine } from '$lib/workspace/console/model';
import AnsiText from '#lib/workspace/console/AnsiText.svelte';
import RichMarkdown from '#lib/workspace/console/RichMarkdown.svelte';
import type { ConsoleLine } from '#lib/workspace/console/model.ts';
type Props = {
item: ConsoleLine;
@@ -22,7 +22,7 @@
<script lang="ts">
import type { Renderers } from "@humanspeak/svelte-markdown";
import { ShikiCode } from "@humanspeak/svelte-markdown/extensions/shiki";
import SafeMarkdown from "$lib/workspace/markdown/SafeMarkdown.svelte";
import SafeMarkdown from "#lib/workspace/markdown/SafeMarkdown.svelte";
type Props = {
text: string;
@@ -2,7 +2,7 @@
import type {
InFlightCompaction,
WorkerStateSnapshot,
} from "$lib/generated/protocol.ts";
} from "#lib/generated/protocol.ts";
import Spinner from "./Spinner.svelte";
import {
formatRunElapsed,
@@ -1,8 +1,8 @@
import type {
AttachmentUploadGrantResponse,
WorkerFileUploadResponse,
} from "$lib/generated/runtime-api.ts";
import type { UploadedFileRef } from "$lib/generated/protocol.ts";
} from "#lib/generated/runtime-api.ts";
import type { UploadedFileRef } from "#lib/generated/protocol.ts";
export const MAX_UPLOADED_FILE_BYTES = 10 * 1024 * 1024;
export const MAX_FILES_PER_SUBMISSION = 8;
@@ -1,4 +1,4 @@
import type { Segment } from "$lib/generated/protocol";
import type { Segment } from "#lib/generated/protocol.ts";
export type WorkerConsoleInputKind =
| "user"
@@ -1,13 +1,13 @@
import type { Segment } from "$lib/generated/protocol.ts";
import type { Segment } from "#lib/generated/protocol.ts";
import {
composerDeletionRange,
type ComposerPaste,
composerPasteToken,
pasteChipLabel,
snapshotComposerDraft,
} from "$lib/workspace/console/composer-draft.ts";
import { buildComposerSegmentsRequest } from "$lib/workspace/console/composer-command.ts";
import { measureComposerPaste } from "$lib/workspace/console/composer-paste.ts";
} from "#lib/workspace/console/composer-draft.ts";
import { buildComposerSegmentsRequest } from "#lib/workspace/console/composer-command.ts";
import { measureComposerPaste } from "#lib/workspace/console/composer-paste.ts";
declare const Deno: {
test(name: string, fn: () => void): void;
@@ -1,4 +1,4 @@
import type { Segment } from "$lib/generated/protocol.ts";
import type { Segment } from "#lib/generated/protocol.ts";
const PASTE_TOKEN_PREFIX = "\uFFF9";
const PASTE_TOKEN_SUFFIX = "\uFFFB";
@@ -1,4 +1,4 @@
import type { Segment } from "$lib/generated/protocol";
import type { Segment } from "#lib/generated/protocol.ts";
export const COMPOSER_HISTORY_LIMIT = 30;
const COMPOSER_HISTORY_VERSION = 1;
@@ -2,7 +2,7 @@ import type {
SessionConversationTurn,
SessionHistoryPage,
SessionSnapshotEntry,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
import {
applyConsoleHistoryPage,
beginConsoleHistoryRequest,
@@ -3,7 +3,7 @@ import type {
SessionConversationTurn,
SessionHistoryPage,
SessionSnapshotEntry,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
export const CONSOLE_HISTORY_PAGE_TURNS = 5;
@@ -3,7 +3,7 @@ import type {
SessionSnapshotEntry,
WorkerStateSnapshot,
WorkerStatus,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
import {
type ConsoleEventInput,
type ConsoleLine,
@@ -14,7 +14,7 @@ import type {
WorkerState,
WorkerStateSnapshot,
WorkerStatus,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
import { stringify as stringifyYaml } from "yaml";
import {
applyRunActivityEvent,
@@ -2,7 +2,7 @@ import type {
Event as ProtocolEvent,
InFlightCompaction,
WorkerStateSnapshot,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
export type RunActivityStats = {
startedAtMs: number | null;
@@ -35,7 +35,7 @@ export function consoleTurns(lines: readonly ConsoleLine[]): ConsoleTurn[] {
return turns;
}
import type { SessionConversationTurn } from "$lib/generated/protocol";
import type { SessionConversationTurn } from "#lib/generated/protocol.ts";
import { type ConsoleTurnPreview, conversationTurnPreviews } from "./history";
export type TurnNavigationItem = ConsoleTurnPreview;
@@ -69,11 +69,11 @@ Deno.test("workspace feature css is owned outside app css", async () => {
"app.css should not own workspace, worker, or settings page implementation classes",
);
assert(
workspaceLayout.includes("$lib/workspace/styles/workspace-pages.css") &&
workspaceLayout.includes("$lib/workspace/styles/workers.css") &&
settingsLayout.includes("$lib/workspace/styles/settings.css") &&
accountPage.includes("$lib/workspace/styles/settings.css") &&
deviceLoginPage.includes("$lib/workspace/styles/settings.css"),
workspaceLayout.includes("#lib/workspace/styles/workspace-pages.css") &&
workspaceLayout.includes("#lib/workspace/styles/workers.css") &&
settingsLayout.includes("#lib/workspace/styles/settings.css") &&
accountPage.includes("#lib/workspace/styles/settings.css") &&
deviceLoginPage.includes("#lib/workspace/styles/settings.css"),
"feature-owned CSS should be imported by the layouts/pages that need it",
);
});
@@ -1,7 +1,7 @@
<script lang="ts">
import { page } from "$app/state";
import WorkspaceSwitcher from "$lib/workspace/sidebar/WorkspaceSwitcher.svelte";
import type { WorkspaceResponse } from "$lib/workspace/sidebar/types";
import WorkspaceSwitcher from "#lib/workspace/sidebar/WorkspaceSwitcher.svelte";
import type { WorkspaceResponse } from "#lib/workspace/sidebar/types.ts";
import { buildWorkspaceBreadcrumbs } from "./breadcrumb-model";
type Props = {
@@ -1,5 +1,5 @@
<script lang="ts">
import BevelLine from '$lib/workspace/ui/BevelLine.svelte';
import BevelLine from '#lib/workspace/ui/BevelLine.svelte';
import type { DashboardFeed } from './dashboard';
let { id, title, empty, result }: { id: string; title: string; empty: string; result: Promise<DashboardFeed> } = $props();
@@ -1,14 +1,14 @@
import type { TicketListItemSummary } from "$lib/generated/ticket-api";
import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
import type { TicketListItemSummary } from "#lib/generated/ticket-api.ts";
import { loadJson, workspaceApiPath } from "#lib/workspace/api/http.ts";
import {
parseMergeRequestListResponse,
parseObjectiveListResponse,
parseTicketDetail,
parseTicketListResponse,
TICKET_BROWSER_API_LOAD_POLICY,
} from "$lib/workspace/api/ticket-browser";
import { mergeRequestPagePath } from "$lib/workspace/api/merge-requests";
import { objectiveHref, ticketHref } from "$lib/workspace/resource-links";
} from "#lib/workspace/api/ticket-browser.ts";
import { mergeRequestPagePath } from "#lib/workspace/api/merge-requests.ts";
import { objectiveHref, ticketHref } from "#lib/workspace/resource-links.ts";
export const HOME_LIMIT = 5;
export type DashboardRow = {
@@ -4,7 +4,7 @@
type Renderers,
type SvelteMarkdownProps,
} from "@humanspeak/svelte-markdown";
import MarkdownLink from "$lib/workspace/markdown/MarkdownLink.svelte";
import MarkdownLink from "#lib/workspace/markdown/MarkdownLink.svelte";
type Props = {
text: string;
@@ -1,4 +1,4 @@
import { MEMORY_API_LIMITS } from "$lib/generated/memory-api";
import { MEMORY_API_LIMITS } from "#lib/generated/memory-api.ts";
import type {
Diagnostic,
DiagnosticSeverity,
@@ -12,7 +12,7 @@ import type {
MemoryStagingEvidence,
MemoryStagingListResponse,
MemoryStagingRecord,
} from "$lib/generated/memory-api";
} from "#lib/generated/memory-api.ts";
const MAX_STAGING_ITEMS = MEMORY_API_LIMITS.maxCollectionItems;
const MAX_EVIDENCE_PER_RECORD = MEMORY_API_LIMITS.maxCollectionItems;
@@ -1,15 +1,15 @@
import { browser } from '$app/environment';
import { browser } from '$app/env';
import type {
EventSubscriptionSelector,
Method,
SubscriptionFrame,
SubscriptionId,
} from '$lib/generated/protocol';
} from '#lib/generated/protocol.ts';
import {
decodeSubscriptionFrame,
subscriptionFrameMatchesSelector,
} from '$lib/generated/protocol-validator';
import { workspaceApiPath } from '$lib/workspace/api/http';
} from '#lib/generated/protocol-validator.ts';
import { workspaceApiPath } from '#lib/workspace/api/http.ts';
type Listener = {
onFrame(frame: SubscriptionFrame): void;
@@ -1,10 +1,10 @@
import type { EventSubscriptionSelector, SubscriptionFrame } from '$lib/generated/protocol';
import type { EventSubscriptionSelector, SubscriptionFrame } from '#lib/generated/protocol.ts';
import {
decodeSubscriptionFrame,
MAX_SUBSCRIPTION_STRING_BYTES,
RUST_SERIALIZED_SUBSCRIPTION_FRAME_FIXTURES,
subscriptionFrameMatchesSelector,
} from '$lib/generated/protocol-validator';
} from '#lib/generated/protocol-validator.ts';
declare const Deno: {
test(name: string, fn: () => void | Promise<void>): void;
@@ -1,4 +1,4 @@
import type { WorkspaceRuntimeResource } from "$lib/generated/runtime-api";
import type { WorkspaceRuntimeResource } from "#lib/generated/runtime-api.ts";
export type RepositorySshProbeSelection<T> = Readonly<{
changed: boolean;
@@ -5,7 +5,7 @@ import {
type WorkerSessionRequestIdentity,
workerSessionRequestInit,
} from "./session-observation";
import type { SessionSnapshot } from "$lib/generated/protocol";
import type { SessionSnapshot } from "#lib/generated/protocol.ts";
declare const Deno: {
test(name: string, fn: () => Promise<void> | void): void;
@@ -1,4 +1,4 @@
import type { SessionSnapshot } from "$lib/generated/protocol";
import type { SessionSnapshot } from "#lib/generated/protocol.ts";
export type WorkerSessionObservation =
| { availability: "live_protocol" }
@@ -14,11 +14,11 @@
import { EditorView, keymap, lineNumbers, highlightActiveLine, drawSelection, type ViewUpdate } from '@codemirror/view';
import { tags } from '@lezer/highlight';
import { decodal } from 'decodal-codemirror';
import { shouldStartCompletionAfterTyping } from '$lib/workspace/config-source/completion.ts';
import { shouldStartCompletionAfterTyping } from '#lib/workspace/config-source/completion.ts';
import {
fixedSchemaWrapperExtension,
moveSelectionIntoFixedWrapper,
} from '$lib/workspace/config-source/fixed-schema-wrapper.ts';
} from '#lib/workspace/config-source/fixed-schema-wrapper.ts';
let {
value = '',
@@ -4,13 +4,13 @@
import type {
Diagnostic, WorkspaceMetadataSettingsResponse, WorkspaceSigningIdentityResponse,
WorkspaceDeletionPreflightResponse, WorkspaceDeletionOperationResponse, WorkspaceDeletionRequest,
} from '$lib/generated/legacy-server-api';
import { workspaceApiPath } from '$lib/workspace/api/http';
import { disposeWorkspaceMultiplexer } from '$lib/workspace/multiplexer';
import { disposeWorkspaceWorkersStore } from '$lib/workspace/sidebar/worker-subscription';
} from '#lib/generated/legacy-server-api.ts';
import { workspaceApiPath } from '#lib/workspace/api/http.ts';
import { disposeWorkspaceMultiplexer } from '#lib/workspace/multiplexer.ts';
import { disposeWorkspaceWorkersStore } from '#lib/workspace/sidebar/worker-subscription.ts';
import { fetchWorkspaceMetadata, updateWorkspaceMetadata, fetchWorkspaceSigningIdentity, provisionWorkspaceSigningIdentity } from './profile-api';
import { preflightWorkspaceDeletion, startWorkspaceDeletion, getWorkspaceDeletion } from './workspace-deletion-api';
import BevelLine from '$lib/workspace/ui/BevelLine.svelte';
import BevelLine from '#lib/workspace/ui/BevelLine.svelte';
// The route keys this component by Workspace and owner permission. Requests from
// a disposed scope must not publish state, focus, or navigation into a new one.
@@ -1,4 +1,4 @@
import type { Diagnostic as ServerApiDiagnostic } from "$lib/generated/legacy-server-api";
import type { Diagnostic as ServerApiDiagnostic } from "#lib/generated/legacy-server-api.ts";
export type Diagnostic = ServerApiDiagnostic;
@@ -12,8 +12,8 @@ import type {
WorkspaceSigningIdentityPublic,
WorkspaceSigningIdentityResponse,
WorkspaceSigningIdentityState,
} from "$lib/generated/legacy-server-api";
import { readBoundedJson } from "$lib/workspace/api/http.ts";
} from "#lib/generated/legacy-server-api.ts";
import { readBoundedJson } from "#lib/workspace/api/http.ts";
const MAX_PROFILE_RESPONSE_BYTES = 4 * 1024 * 1024;
const MAX_PROFILE_ERROR_BYTES = 4 * 1024;
@@ -1,4 +1,4 @@
import type { ExternalWorkdirPermissions } from "$lib/generated/workdir-api";
import type { ExternalWorkdirPermissions } from "#lib/generated/workdir-api.ts";
/** Render an effective attachment/session capability intersection without widening it. */
export function formatWorkdirPermissions(
@@ -2,12 +2,12 @@ import type {
WorkspaceDeletionOperationResponse,
WorkspaceDeletionPreflightResponse,
WorkspaceDeletionRequest,
} from "$lib/generated/legacy-server-api";
import { loadJson } from "$lib/workspace/api/http";
} from "#lib/generated/legacy-server-api.ts";
import { loadJson } from "#lib/workspace/api/http.ts";
import {
parseWorkspaceDeletionOperationResponse,
parseWorkspaceDeletionPreflightResponse,
} from "$lib/workspace/api/workspace-model";
} from "#lib/workspace/api/workspace-model.ts";
const deletionResponsePolicy = {
maxResponseBytes: 2 * 1024 * 1024,
@@ -1,5 +1,5 @@
<script lang="ts">
import type { WorkspaceCatalogRecord } from "$lib/workspace/api/workspace-catalog";
import type { WorkspaceCatalogRecord } from "#lib/workspace/api/workspace-catalog.ts";
type Props = {
currentPath: string;
@@ -1,5 +1,5 @@
<script lang="ts">
import { workspaceRoute } from "$lib/workspace/api/http";
import { workspaceRoute } from "#lib/workspace/api/http.ts";
type Props = {
currentPath?: string;
@@ -1,5 +1,5 @@
<script lang="ts">
import { mergeRequestPagePath } from "$lib/workspace/api/merge-requests";
import { mergeRequestPagePath } from "#lib/workspace/api/merge-requests.ts";
type Props = {
currentPath?: string;
@@ -1,5 +1,5 @@
<script lang="ts">
import { workspaceRoute } from '$lib/workspace/api/http';
import { workspaceRoute } from '#lib/workspace/api/http.ts';
type Props = {
currentPath?: string;
@@ -1,7 +1,7 @@
<script lang="ts">
import { workspaceRoute } from '$lib/workspace/api/http';
import { SETTINGS_SECTIONS, settingsSectionHref } from '$lib/workspace/settings/model';
import type { SettingsSectionId } from '$lib/workspace/settings/model';
import { workspaceRoute } from '#lib/workspace/api/http.ts';
import { SETTINGS_SECTIONS, settingsSectionHref } from '#lib/workspace/settings/model.ts';
import type { SettingsSectionId } from '#lib/workspace/settings/model.ts';
import type { SidebarSnippet } from './context';
let {
@@ -1,6 +1,6 @@
<script lang="ts">
import { onDestroy, type Snippet } from 'svelte';
import Bevel from '$lib/workspace/ui/Bevel.svelte';
import Bevel from '#lib/workspace/ui/Bevel.svelte';
import SidebarToggleIcon from './SidebarToggleIcon.svelte';
import './sidebar.css';
@@ -93,6 +93,7 @@
<div class="sidebar-frame__surface">
<div
class="sidebar-hover-region"
role="presentation"
onpointerenter={enter}
onpointerleave={leave}
onpointercancel={leave}
@@ -1,5 +1,5 @@
<script lang="ts">
import { workspaceRoute } from '$lib/workspace/api/http';
import { workspaceRoute } from '#lib/workspace/api/http.ts';
type Props = {
currentPath?: string;
@@ -1,7 +1,7 @@
<script lang="ts">
import Spinner from '$lib/workspace/console/Spinner.svelte';
import { workerConsoleHref } from '$lib/workspace/resource-links';
import { pushWorkspaceAlert } from '$lib/workspace/alerts/store';
import Spinner from '#lib/workspace/console/Spinner.svelte';
import { workerConsoleHref } from '#lib/workspace/resource-links.ts';
import { pushWorkspaceAlert } from '#lib/workspace/alerts/store.ts';
import {
canStopSidebarWorker,
canDeleteSidebarWorker,
@@ -1,7 +1,7 @@
<script lang="ts">
import type { Snippet } from 'svelte';
import './sidebar.css';
import { workspaceRoute } from '$lib/workspace/api/http';
import { workspaceRoute } from '#lib/workspace/api/http.ts';
import { ownsRoutePath } from './route-ownership';
import ObjectivesNavSection from './ObjectivesNavSection.svelte';
import MemoryNavSection from './MemoryNavSection.svelte';
@@ -3,7 +3,7 @@
import {
listWorkspaces,
type WorkspaceCatalogRecord,
} from "$lib/workspace/api/workspace-catalog";
} from "#lib/workspace/api/workspace-catalog.ts";
let {
currentWorkspaceId,
@@ -4,7 +4,7 @@ import type {
CleanupWorkerCandidate,
RuntimeCleanupExecutionResponse,
RuntimeCleanupPlanResponse,
} from "$lib/generated/runtime-api";
} from "#lib/generated/runtime-api.ts";
import type {
BrowserCreateWorkerResponse as SharedBrowserCreateWorkerResponse,
BrowserWorkerWorkingDirectorySelection
@@ -17,7 +17,7 @@ import type {
WorkerSummary as SharedWorkerSummary,
WorkerWorkdirAttachmentSummary as SharedWorkerWorkdirAttachmentSummary,
WorkingDirectoryRepositoryOption as SharedWorkingDirectoryRepositoryOption,
} from "$lib/generated/worker-launch-api";
} from "#lib/generated/worker-launch-api.ts";
import type {
WorkingDirectoryCreateRequest,
WorkingDirectoryCreateResponse,
@@ -25,14 +25,14 @@ import type {
WorkingDirectoryListResponse,
WorkingDirectoryOccupancy,
WorkingDirectorySummary,
} from "$lib/generated/workdir-api";
} from "#lib/generated/workdir-api.ts";
import type {
Event as PodProtocolEvent,
Method as PodProtocolMethod,
Segment as PodProtocolSegment,
SubscriptionWorkerJob,
WorkerStateSnapshot,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
import type {
GitCommitSummary as SharedGitCommitSummary,
GitRemoteSummary as SharedGitRemoteSummary,
@@ -42,7 +42,7 @@ import type {
RepositoryLogResponse as SharedRepositoryLogResponse,
RepositorySummary as SharedRepositorySummary,
WorkspaceResponse as SharedWorkspaceResponse,
} from "$lib/workspace/api/workspace-model";
} from "#lib/workspace/api/workspace-model.ts";
export type {
PodProtocolEvent,
@@ -157,7 +157,7 @@ export type {
TicketDetail,
TicketEventDetail,
TicketListResponse,
} from "$lib/generated/ticket-api";
} from "#lib/generated/ticket-api.ts";
export type {
TicketDetailDerivedRelation as DerivedTicketRelation,
TicketDetailRelation as TicketRelation,
@@ -165,7 +165,7 @@ export type {
TicketDetailRelationNotice as TicketRelationNotice,
TicketDetailRelationView as TicketRelationView,
TicketListItemSummary as TicketSummary,
} from "$lib/generated/ticket-api";
} from "#lib/generated/ticket-api.ts";
export type {
CompanionCancelRequest,
@@ -178,4 +178,4 @@ export type {
CompanionTranscriptProjection,
CompanionTranscriptRole,
CompanionTransportSummary,
} from "$lib/generated/companion-api";
} from "#lib/generated/companion-api.ts";
@@ -1,9 +1,9 @@
import { workspaceApiPath } from "$lib/workspace/api/http";
import { workspaceApiPath } from "#lib/workspace/api/http.ts";
import {
parseRuntimeCleanupExecution,
parseRuntimeCleanupPlan,
parseRuntimeWorkerLifecycleResult,
} from "$lib/workspace/api/runtime-workers";
} from "#lib/workspace/api/runtime-workers.ts";
import type { Diagnostic, Worker } from "./types";
type FetchFn = typeof fetch;
@@ -1,8 +1,8 @@
import type {
BrowserWorkerWorkingDirectorySelection,
CreateWorkspaceWorkerRequest,
} from "$lib/generated/worker-launch-api";
import { parseCreateWorkspaceWorkerRequest } from "$lib/workspace/api/workers";
} from "#lib/generated/worker-launch-api.ts";
import { parseCreateWorkspaceWorkerRequest } from "#lib/workspace/api/workers.ts";
import type { WorkerLaunchOptionsResponse } from "./types";
@@ -1,4 +1,4 @@
import type { WorkerStateSnapshot } from "$lib/generated/protocol";
import type { WorkerStateSnapshot } from "#lib/generated/protocol.ts";
export function liveWorkerState(worker: {
state: string;
@@ -11,7 +11,7 @@ import { afterEach, expect, test, vi } from "vitest";
import type {
SubscriptionFrame,
SubscriptionWorker,
} from "$lib/generated/protocol";
} from "#lib/generated/protocol.ts";
import WorkersNavSection from "./WorkersNavSection.svelte";
import { disposeWorkspaceWorkersStore } from "./worker-subscription";
@@ -19,7 +19,7 @@ const transport = vi.hoisted(() => ({
listener: null as { onFrame(frame: SubscriptionFrame): void } | null,
close: vi.fn(),
}));
vi.mock("$lib/workspace/multiplexer", () => ({
vi.mock("#lib/workspace/multiplexer.ts", () => ({
workspaceMultiplexer: () => ({
subscribe: (
_selector: unknown,
@@ -2,7 +2,7 @@ import type {
SubscriptionEventPayload,
SubscriptionFrame,
SubscriptionWorker,
} from '$lib/generated/protocol';
} from '#lib/generated/protocol.ts';
export type WorkspaceWorkersProjection = {
workers: Map<string, SubscriptionWorker>;
@@ -1,4 +1,4 @@
import type { SubscriptionFrame, SubscriptionWorker } from '$lib/generated/protocol';
import type { SubscriptionFrame, SubscriptionWorker } from '#lib/generated/protocol.ts';
function assertEquals(actual: unknown, expected: unknown): void {
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
@@ -1,9 +1,9 @@
import { type Readable, readable } from "svelte/store";
import type { WorkingDirectorySummary } from "$lib/generated/workdir-api";
import type { SubscriptionWorker } from "$lib/generated/protocol";
import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
import { parseWorkingDirectoryListResponse } from "$lib/workspace/api/workdirs";
import { workspaceMultiplexer } from "$lib/workspace/multiplexer";
import type { WorkingDirectorySummary } from "#lib/generated/workdir-api.ts";
import type { SubscriptionWorker } from "#lib/generated/protocol.ts";
import { loadJson, workspaceApiPath } from "#lib/workspace/api/http.ts";
import { parseWorkingDirectoryListResponse } from "#lib/workspace/api/workdirs.ts";
import { workspaceMultiplexer } from "#lib/workspace/multiplexer.ts";
import {
applyWorkspaceWorkersFrame,
createWorkspaceWorkersProjection,
@@ -1,4 +1,4 @@
import type { WorkingDirectorySummary } from "$lib/generated/workdir-api";
import type { WorkingDirectorySummary } from "#lib/generated/workdir-api.ts";
import {
type SidebarWorkdirAttachment,
sidebarWorkdirMeta,
@@ -1,5 +1,5 @@
import type { WorkingDirectorySummary } from "$lib/generated/workdir-api";
import type { SubscriptionWorkerWorkdirAttachment } from "$lib/generated/protocol";
import type { WorkingDirectorySummary } from "#lib/generated/workdir-api.ts";
import type { SubscriptionWorkerWorkdirAttachment } from "#lib/generated/protocol.ts";
const SHORT_REFERENCE_LENGTH = 12;
@@ -12,7 +12,7 @@ import {
type SkillProvenance,
type SkillResourceRef,
type SkillSourceKind,
} from "$lib/generated/skill-api.ts";
} from "#lib/generated/skill-api.ts";
export class SkillApiContractError extends Error {
constructor(message: string) {
@@ -1,8 +1,8 @@
import type { BrowserWorkspaceOrchestratorResponse } from "$lib/generated/worker-launch-api";
import type { BrowserWorkspaceOrchestratorResponse } from "#lib/generated/worker-launch-api.ts";
import type {
TicketDetail,
TicketListItemSummary,
} from "$lib/generated/ticket-api";
} from "#lib/generated/ticket-api.ts";
export const TICKET_STATES = [
"planning",
@@ -118,6 +118,7 @@
<span
class="tooltip-root"
role="presentation"
bind:this={rootElement}
onpointerenter={showAfterDelay}
onpointerleave={handlePointerLeave}
+8 -8
View File
@@ -2,18 +2,18 @@
import { page } from '$app/state';
import { setContext } from 'svelte';
import { MediaQuery } from 'svelte/reactivity';
import WorkspaceAlerts from '$lib/workspace/alerts/WorkspaceAlerts.svelte';
import Bevel from '$lib/workspace/ui/Bevel.svelte';
import WorkspaceAlerts from '#lib/workspace/alerts/WorkspaceAlerts.svelte';
import Bevel from '#lib/workspace/ui/Bevel.svelte';
import {
provideHeaderController,
type HeaderController,
type HeaderSnippet,
} from '$lib/workspace/header/context';
import GlobalSidebar from '$lib/workspace/sidebar/GlobalSidebar.svelte';
import SidebarFrame from '$lib/workspace/sidebar/SidebarFrame.svelte';
import SidebarToggleIcon from '$lib/workspace/sidebar/SidebarToggleIcon.svelte';
import { SIDEBAR_CONTEXT, type SidebarController, type SidebarSnippet } from '$lib/workspace/sidebar/context';
import { createOverrideStack } from '$lib/workspace/sidebar/override-stack';
} from '#lib/workspace/header/context.ts';
import GlobalSidebar from '#lib/workspace/sidebar/GlobalSidebar.svelte';
import SidebarFrame from '#lib/workspace/sidebar/SidebarFrame.svelte';
import SidebarToggleIcon from '#lib/workspace/sidebar/SidebarToggleIcon.svelte';
import { SIDEBAR_CONTEXT, type SidebarController, type SidebarSnippet } from '#lib/workspace/sidebar/context.ts';
import { createOverrideStack } from '#lib/workspace/sidebar/override-stack.ts';
import '../app.css';
import type { LayoutProps } from './$types';
+4 -4
View File
@@ -1,9 +1,9 @@
import { listWorkspaces } from "$lib/workspace/api/workspace-catalog";
import type { LayoutLoad } from "./$types";
import { listWorkspaces } from "#lib/workspace/api/workspace-catalog.ts";
import type { Load } from "@sveltejs/kit";
export const ssr = false;
export const load: LayoutLoad = async ({ fetch }) => {
export const load = (async ({ fetch }) => {
try {
return {
accessibleWorkspaces: await listWorkspaces(fetch),
@@ -17,4 +17,4 @@ export const load: LayoutLoad = async ({ fetch }) => {
: "Unable to load Workspaces",
};
}
};
}) satisfies Load;
+2 -2
View File
@@ -7,8 +7,8 @@
loadWorkspaceCatalog,
type CreateWorkspaceRequest,
type WorkspaceCatalogItem,
} from "$lib/workspace/api/workspace-catalog";
import "$lib/workspace/styles/workspace-catalog.css";
} from "#lib/workspace/api/workspace-catalog.ts";
import "#lib/workspace/styles/workspace-catalog.css";
let { data } = $props();
let workspaces = $state<WorkspaceCatalogItem[]>([]);
+1 -1
View File
@@ -1,5 +1,5 @@
import type { PageLoad } from "./$types";
import { loadWorkspaceCatalog } from "$lib/workspace/api/workspace-catalog";
import { loadWorkspaceCatalog } from "#lib/workspace/api/workspace-catalog.ts";
export const load: PageLoad = async ({ fetch }) => {
try {
@@ -5,9 +5,9 @@
loginWithPasskey,
logout,
registerPasskey,
} from '$lib/workspace/auth/api';
import '$lib/workspace/styles/settings.css';
import type { RequestActor } from '$lib/workspace/auth/model';
} from '#lib/workspace/auth/api.ts';
import '#lib/workspace/styles/settings.css';
import type { RequestActor } from '#lib/workspace/auth/model.ts';
let actor = $state<RequestActor | null>(null);
let handle = $state('local');
@@ -1,16 +1,16 @@
<script lang="ts">
import { page } from '$app/state';
import { setContext } from 'svelte';
import HeaderOverride from '$lib/workspace/header/HeaderOverride.svelte';
import SidebarOverride from '$lib/workspace/sidebar/SidebarOverride.svelte';
import HeaderOverride from '#lib/workspace/header/HeaderOverride.svelte';
import SidebarOverride from '#lib/workspace/sidebar/SidebarOverride.svelte';
import {
getSidebarController,
SIDEBAR_CONTEXT,
type SidebarController,
type SidebarSnippet,
} from '$lib/workspace/sidebar/context';
import { createOverrideStack } from '$lib/workspace/sidebar/override-stack';
import { ownsRoutePath } from '$lib/workspace/sidebar/route-ownership';
} from '#lib/workspace/sidebar/context.ts';
import { createOverrideStack } from '#lib/workspace/sidebar/override-stack.ts';
import { ownsRoutePath } from '#lib/workspace/sidebar/route-ownership.ts';
import WorkspaceSidebarFixture from './WorkspaceSidebarFixture.svelte';
import { designLabBasePath } from './workspace-navigation';
import './showroom.css';
@@ -1,7 +1,7 @@
<script lang="ts">
import Bevel from '$lib/workspace/ui/Bevel.svelte';
import BevelLine from '$lib/workspace/ui/BevelLine.svelte';
import Tooltip from '$lib/workspace/ui/Tooltip.svelte';
import Bevel from '#lib/workspace/ui/Bevel.svelte';
import BevelLine from '#lib/workspace/ui/BevelLine.svelte';
import Tooltip from '#lib/workspace/ui/Tooltip.svelte';
</script>
<div class="showroom">
@@ -1,6 +1,6 @@
<script lang="ts">
import type { Snippet } from 'svelte';
import { ownsRoutePath } from '$lib/workspace/sidebar/route-ownership';
import { ownsRoutePath } from '#lib/workspace/sidebar/route-ownership.ts';
import { designLabBasePath, workspaceNavigation, workspaceWorkers } from './workspace-navigation';
let {
@@ -1,15 +1,15 @@
<script lang="ts">
import { page } from '$app/state';
import { setContext } from 'svelte';
import SidebarOverride from '$lib/workspace/sidebar/SidebarOverride.svelte';
import SidebarOverride from '#lib/workspace/sidebar/SidebarOverride.svelte';
import {
getSidebarController,
SIDEBAR_CONTEXT,
type SidebarController,
type SidebarSnippet,
} from '$lib/workspace/sidebar/context';
import { createOverrideStack } from '$lib/workspace/sidebar/override-stack';
import { ownsRoutePath } from '$lib/workspace/sidebar/route-ownership';
} from '#lib/workspace/sidebar/context.ts';
import { createOverrideStack } from '#lib/workspace/sidebar/override-stack.ts';
import { ownsRoutePath } from '#lib/workspace/sidebar/route-ownership.ts';
import SettingsSidebarFixture from './SettingsSidebarFixture.svelte';
import { designLabBasePath } from '../workspace-navigation';
import type { LayoutProps } from './$types';
@@ -1,7 +1,7 @@
<script lang="ts">
import Bevel from '$lib/workspace/ui/Bevel.svelte';
import BevelLine from '$lib/workspace/ui/BevelLine.svelte';
import Tooltip from '$lib/workspace/ui/Tooltip.svelte';
import Bevel from '#lib/workspace/ui/Bevel.svelte';
import BevelLine from '#lib/workspace/ui/BevelLine.svelte';
import Tooltip from '#lib/workspace/ui/Tooltip.svelte';
function keepSampleFormLocal(event: SubmitEvent) {
event.preventDefault();
@@ -5,9 +5,9 @@
approveDeviceLogin,
loadWhoami,
loginWithPasskey,
} from '$lib/workspace/auth/api';
import '$lib/workspace/styles/settings.css';
import type { RequestActor } from '$lib/workspace/auth/model';
} from '#lib/workspace/auth/api.ts';
import '#lib/workspace/styles/settings.css';
import type { RequestActor } from '#lib/workspace/auth/model.ts';
let actor = $state<RequestActor | null>(null);
let handle = $state('local');
@@ -3,7 +3,7 @@
import { cleanup, fireEvent, render, screen } from "@testing-library/svelte";
import { afterEach, beforeEach, expect, test, vi } from "vitest";
import { createRawSnippet, tick } from "svelte";
import { logout } from "$lib/workspace/auth/api";
import { logout } from "#lib/workspace/auth/api.ts";
import Layout from "./+layout.svelte";
vi.mock("$app/state", () => ({ page: { url: new URL("https://example.test/") } }));
@@ -1,6 +1,6 @@
<script lang="ts">
import { page } from "$app/state";
import "$lib/workspace/styles/workspace-catalog.css";
import "#lib/workspace/styles/workspace-catalog.css";
const workspaceId = $derived(page.params.workspaceId ?? "unknown");
</script>
@@ -1,24 +1,24 @@
<script lang="ts">
import { setContext } from 'svelte';
import { page } from '$app/state';
import HeaderOverride from '$lib/workspace/header/HeaderOverride.svelte';
import WorkspaceBreadcrumbs from '$lib/workspace/header/WorkspaceBreadcrumbs.svelte';
import SidebarOverride from '$lib/workspace/sidebar/SidebarOverride.svelte';
import HeaderOverride from '#lib/workspace/header/HeaderOverride.svelte';
import WorkspaceBreadcrumbs from '#lib/workspace/header/WorkspaceBreadcrumbs.svelte';
import SidebarOverride from '#lib/workspace/sidebar/SidebarOverride.svelte';
import {
getSidebarController,
SIDEBAR_CONTEXT,
type SidebarController,
type SidebarSnippet,
} from '$lib/workspace/sidebar/context';
import { createOverrideStack } from '$lib/workspace/sidebar/override-stack';
import { ownsRoutePath } from '$lib/workspace/sidebar/route-ownership';
import { workspaceRoute } from '$lib/workspace/api/http';
import { disposeWorkspaceMultiplexer } from '$lib/workspace/multiplexer';
import { disposeWorkspaceWorkersStore } from '$lib/workspace/sidebar/worker-subscription';
import WorkspaceSidebar from '$lib/workspace/sidebar/WorkspaceSidebar.svelte';
import '$lib/workspace/styles/workspace-pages.css';
import '$lib/workspace/styles/tickets.css';
import '$lib/workspace/styles/workers.css';
} from '#lib/workspace/sidebar/context.ts';
import { createOverrideStack } from '#lib/workspace/sidebar/override-stack.ts';
import { ownsRoutePath } from '#lib/workspace/sidebar/route-ownership.ts';
import { workspaceRoute } from '#lib/workspace/api/http.ts';
import { disposeWorkspaceMultiplexer } from '#lib/workspace/multiplexer.ts';
import { disposeWorkspaceWorkersStore } from '#lib/workspace/sidebar/worker-subscription.ts';
import WorkspaceSidebar from '#lib/workspace/sidebar/WorkspaceSidebar.svelte';
import '#lib/workspace/styles/workspace-pages.css';
import '#lib/workspace/styles/tickets.css';
import '#lib/workspace/styles/workers.css';
import type { LayoutProps } from './$types';
let { data, children }: LayoutProps = $props();
@@ -1,7 +1,7 @@
import { error } from "@sveltejs/kit";
import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
import { loadWorkspaceRepositoryList } from "$lib/workspace/api/repositories";
import { parseWorkspaceResponse } from "$lib/workspace/api/workspace-model";
import { loadJson, workspaceApiPath } from "#lib/workspace/api/http.ts";
import { loadWorkspaceRepositoryList } from "#lib/workspace/api/repositories.ts";
import { parseWorkspaceResponse } from "#lib/workspace/api/workspace-model.ts";
import type { LayoutLoad } from "./$types";
export const load: LayoutLoad = async ({ fetch, params }) => {
@@ -1,6 +1,6 @@
<script lang="ts">
import { invalidate } from '$app/navigation';
import DashboardSection from '$lib/workspace/home/DashboardSection.svelte';
import DashboardSection from '#lib/workspace/home/DashboardSection.svelte';
import type { PageProps } from './$types';
let { data }: PageProps = $props();
@@ -1,4 +1,4 @@
import { loadDashboard } from "$lib/workspace/home/dashboard";
import { loadDashboard } from "#lib/workspace/home/dashboard.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = ({ fetch, params, depends }) => {
@@ -16,11 +16,11 @@ import {
type DashboardFeed,
loadDashboard,
recentRows,
} from "$lib/workspace/home/dashboard";
} from "#lib/workspace/home/dashboard.ts";
import {
dashboardFixture,
fixtureDetail,
} from "$lib/workspace/home/dashboard.test-fixtures";
} from "#lib/workspace/home/dashboard.test-fixtures.ts";
vi.mock("$app/navigation", () => ({ invalidate: vi.fn(async () => {}) }));
type Data = ComponentProps<typeof Home>["data"];
@@ -1,6 +1,6 @@
<script lang="ts">
import DocumentMarkdown from '$lib/workspace/markdown/DocumentMarkdown.svelte';
import { formatDate } from '$lib/workspace/api/http';
import DocumentMarkdown from '#lib/workspace/markdown/DocumentMarkdown.svelte';
import { formatDate } from '#lib/workspace/api/http.ts';
import type { PageProps } from './$types';
let { data }: PageProps = $props();
@@ -1,6 +1,6 @@
import { MEMORY_API_LIMITS } from "$lib/generated/memory-api";
import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
import { parseMemoryDocumentResponse } from "$lib/workspace/memory/api";
import { MEMORY_API_LIMITS } from "#lib/generated/memory-api.ts";
import { loadJson, workspaceApiPath } from "#lib/workspace/api/http.ts";
import { parseMemoryDocumentResponse } from "#lib/workspace/memory/api.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async ({ fetch, params }) => {
@@ -1,5 +1,5 @@
<script lang="ts">
import type { MemoryStagingEntry, MemoryStagingRecord } from '$lib/generated/memory-api';
import type { MemoryStagingEntry, MemoryStagingRecord } from '#lib/generated/memory-api.ts';
import type { PageProps } from './$types';
let { data }: PageProps = $props();
@@ -1,6 +1,6 @@
import { MEMORY_API_LIMITS } from "$lib/generated/memory-api";
import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
import { parseMemoryStagingListResponse } from "$lib/workspace/memory/api";
import { MEMORY_API_LIMITS } from "#lib/generated/memory-api.ts";
import { loadJson, workspaceApiPath } from "#lib/workspace/api/http.ts";
import { parseMemoryStagingListResponse } from "#lib/workspace/memory/api.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async ({ fetch, params }) => {
@@ -1,5 +1,5 @@
<script lang="ts">
import { mergeRequestPagePath } from "$lib/workspace/api/merge-requests";
import { mergeRequestPagePath } from "#lib/workspace/api/merge-requests.ts";
import type { PageData } from "./$types";
let { data }: { data: PageData } = $props();

Some files were not shown because too many files have changed in this diff Show More