huskies: rename project from storkit to huskies

Rename all references from storkit to huskies across the codebase:
- .storkit/ directory → .huskies/
- Binary name, Cargo package name, Docker image references
- Server code, frontend code, config files, scripts
- Fix script/test to build frontend before cargo clippy/test
  so merge worktrees have frontend/dist available for RustEmbed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Timmy
2026-04-03 16:12:52 +01:00
parent a7035b6ba7
commit 2d8ccb3eb6
572 changed files with 1340 additions and 1220 deletions
+2 -2
View File
@@ -212,7 +212,7 @@ export interface OAuthStatus {
has_refresh_token: boolean;
}
declare const __STORKIT_PORT__: string;
declare const __HUSKIES_PORT__: string;
const DEFAULT_API_BASE = "/api";
const DEFAULT_WS_PATH = "/ws";
@@ -513,7 +513,7 @@ export class ChatWebSocket {
const protocol = window.location.protocol === "https:" ? "wss" : "ws";
const wsHost = resolveWsHost(
import.meta.env.DEV,
typeof __STORKIT_PORT__ !== "undefined" ? __STORKIT_PORT__ : undefined,
typeof __HUSKIES_PORT__ !== "undefined" ? __HUSKIES_PORT__ : undefined,
window.location.host,
);
return `${protocol}://${wsHost}${this.wsPath}`;
+1 -1
View File
@@ -1035,7 +1035,7 @@ export function Chat({
fontSize: "1.1rem",
}}
>
Welcome to Storkit
Welcome to Huskies
</h3>
<p
style={{
+2 -2
View File
@@ -144,9 +144,9 @@ describe("ChatHeader", () => {
expect(screen.getByText("Built: 2026-01-01 00:00")).toBeInTheDocument();
});
it("displays Storkit branding in the header", () => {
it("displays Huskies branding in the header", () => {
render(<ChatHeader {...makeProps()} />);
expect(screen.getByText("Storkit")).toBeInTheDocument();
expect(screen.getByText("Huskies")).toBeInTheDocument();
});
it("labels the claude-pty optgroup as 'Claude Code'", () => {
+1 -1
View File
@@ -295,7 +295,7 @@ export function ChatHeader({
letterSpacing: "0.02em",
}}
>
Storkit
Huskies
</span>
<div
title={projectPath}
+2 -2
View File
@@ -50,9 +50,9 @@ function stepBorder(status: string, isActive: boolean): string {
/** Messages sent to the chat to trigger agent generation for each step. */
const STEP_PROMPTS: Record<string, string> = {
context:
"Read the codebase and generate .storkit/specs/00_CONTEXT.md with a project context spec. Include High-Level Goal, Core Features, Domain Definition, and Glossary sections. Then call the wizard API to store the content: PUT /api/wizard/step/context/content",
"Read the codebase and generate .huskies/specs/00_CONTEXT.md with a project context spec. Include High-Level Goal, Core Features, Domain Definition, and Glossary sections. Then call the wizard API to store the content: PUT /api/wizard/step/context/content",
stack:
"Read the tech stack and generate .storkit/specs/tech/STACK.md with a tech stack spec. Include Core Stack, Coding Standards, Quality Gates, and Libraries sections. Then call the wizard API to store the content: PUT /api/wizard/step/stack/content",
"Read the tech stack and generate .huskies/specs/tech/STACK.md with a tech stack spec. Include Core Stack, Coding Standards, Quality Gates, and Libraries sections. Then call the wizard API to store the content: PUT /api/wizard/step/stack/content",
test_script:
"Read the project structure and create script/test — a bash script that runs the project's actual test suite. Then call the wizard API: PUT /api/wizard/step/test_script/content",
release_script:
@@ -33,7 +33,7 @@ function makeProps(
describe("SelectionScreen", () => {
it("renders the title and description", () => {
render(<SelectionScreen {...makeProps()} />);
expect(screen.getByText("Storkit")).toBeInTheDocument();
expect(screen.getByText("Huskies")).toBeInTheDocument();
expect(
screen.getByText("Paste or complete a project path to start."),
).toBeInTheDocument();
@@ -57,7 +57,7 @@ export function SelectionScreen({
className="selection-screen"
style={{ padding: "2rem", maxWidth: "800px", margin: "0 auto" }}
>
<h1>Storkit</h1>
<h1>Huskies</h1>
<p>Paste or complete a project path to start.</p>
{oauthStatus !== null && (