Merge remote-tracking branch 'taijibaga/main'

# Conflicts:
#	cc-haha/desktop/src-tauri/Cargo.lock
This commit is contained in:
2026-05-18 21:14:23 +08:00
77 changed files with 2060 additions and 579 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
Heicode 面向**多人协作、可追溯交付**的软件团队:把需求对齐、实现、验证、发布和持续运营连成一条少断层的链路,并用**可编排的智能体角色**承接其中可标准化的环节——强调「能复盘、能审计、能按团队规模裁剪」,而不是罗列某一家的工具栈。
下面的目录表仅供工程查阅;**不代表对外产品承诺、路线图或你必须采用的集成方式。**
下面的目录表仅供工程查阅;**不代表对外产品承诺、路线图或你必须采用的集成方式。 **
## 这个仓库里有什么(工程布局)
+13 -1
View File
@@ -12,6 +12,7 @@ CANONICAL_OUTPUT_DIR="${DESKTOP_DIR}/build-artifacts/macos-arm64"
APP_BUNDLE_NAME="HeiCode.app"
APP_BUNDLE_ID="com.heicode.desktop"
DMG_VOLUME_NAME="Heicode"
CODESIGN_IDENTITY="${CODESIGN_IDENTITY:-Developer ID Application: zhiyong Gong (R49P76Q59F)}"
APP_VERSION="$(bun -e "console.log(require('${DESKTOP_DIR}/src-tauri/tauri.conf.json').version)" 2>/dev/null || echo "0.0.0")"
DEFAULT_DMG_BASENAME="Heicode_${APP_VERSION}_aarch64.dmg"
@@ -25,6 +26,9 @@ Usage:
Environment:
SKIP_INSTALL=1 Skip `bun install` in the repo root and desktop app.
SIGN_BUILD=1 Remove the default `--no-sign` flag and allow signed builds.
CODESIGN_IDENTITY
Signing identity used when SIGN_BUILD=1.
Defaults to "Developer ID Application: zhiyong Gong (R49P76Q59F)".
OPEN_OUTPUT=1 Open the canonical artifact output directory in Finder after a successful build.
Examples:
@@ -245,7 +249,15 @@ sign_canonical_app_bundle() {
# fails strict bundle validation once Resources/icon.icns exists. Sign only
# the outer bundle: do not pass --deep, because re-signing claude-sidecar
# changes its code-signature hash and breaks existing macOS Keychain ACLs.
codesign --force --sign - --timestamp=none "${app_bundle}"
if [[ "${SIGN_BUILD:-0}" == "1" ]]; then
codesign --force \
--sign "${CODESIGN_IDENTITY}" \
--options runtime \
--timestamp \
"${app_bundle}"
else
codesign --force --sign - --timestamp=none "${app_bundle}"
fi
if [[ -x "${sidecar}" ]]; then
sidecar_cdhash_after="$(codesign_cdhash "${sidecar}")"
@@ -14,5 +14,12 @@
"acceptFirstMouse": true
}
]
},
"bundle": {
"macOS": {
"signingIdentity": "Developer ID Application: zhiyong Gong (R49P76Q59F)",
"hardenedRuntime": true,
"providerShortName": "R49P76Q59F"
}
}
}
+4 -4
View File
@@ -46,9 +46,9 @@
"mac": {
"category": "public.app-category.developer-tools",
"icon": "icon.png",
"identity": null,
"hardenedRuntime": false,
"gatekeeperAssess": false,
"identity": "Developer ID Application: zhiyong Gong (R49P76Q59F)",
"hardenedRuntime": true,
"gatekeeperAssess": true,
"entitlements": "entitlements.mac.plist",
"entitlementsInherit": "entitlements.mac.plist",
"target": [
@@ -98,4 +98,4 @@
"allowToChangeInstallationDirectory": true
}
}
}
}
+42 -37
View File
@@ -4,61 +4,61 @@
@custom-variant dark (&:is(.dark *));
:root {
--background: oklch(0.97 0.012 236);
--foreground: oklch(0.23 0.03 252);
--card: oklch(1 0 0);
--card-foreground: oklch(0.22 0.03 252);
--background: oklch(0.965 0.025 77);
--foreground: oklch(0.18 0.03 238);
--card: oklch(0.99 0.012 83);
--card-foreground: oklch(0.18 0.03 238);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.22 0.03 252);
--primary: oklch(0.59 0.24 286);
--primary-foreground: oklch(0.985 0.003 247);
--secondary: oklch(0.93 0.045 222);
--secondary-foreground: oklch(0.28 0.06 254);
--muted: oklch(0.95 0.02 240);
--muted-foreground: oklch(0.5 0.035 252);
--accent: oklch(0.9 0.08 174);
--accent-foreground: oklch(0.25 0.05 197);
--popover-foreground: oklch(0.18 0.03 238);
--primary: oklch(0.34 0.09 39);
--primary-foreground: oklch(0.985 0.012 83);
--secondary: oklch(0.91 0.045 78);
--secondary-foreground: oklch(0.24 0.055 43);
--muted: oklch(0.93 0.026 81);
--muted-foreground: oklch(0.48 0.035 238);
--accent: oklch(0.67 0.14 156);
--accent-foreground: oklch(0.16 0.04 169);
--destructive: oklch(0.577 0.245 27.325);
--destructive-foreground: oklch(0.577 0.245 27.325);
--border: oklch(0.88 0.035 254);
--input: oklch(0.88 0.035 254);
--ring: oklch(0.62 0.24 286);
--border: oklch(0.84 0.034 79);
--input: oklch(0.84 0.034 79);
--ring: oklch(0.54 0.12 43);
--chart-1: oklch(0.646 0.222 41.116);
--chart-2: oklch(0.6 0.118 184.704);
--chart-3: oklch(0.398 0.07 227.392);
--chart-4: oklch(0.828 0.189 84.429);
--chart-5: oklch(0.769 0.188 70.08);
--radius: 0.95rem;
--radius: 1.1rem;
--sidebar: oklch(0.985 0.02 244);
--sidebar-foreground: var(--foreground);
--sidebar-primary: var(--primary);
--sidebar-primary-foreground: var(--primary-foreground);
--sidebar-accent: oklch(0.94 0.05 286);
--sidebar-accent-foreground: oklch(0.3 0.06 286);
--sidebar-border: oklch(0.87 0.05 254);
--sidebar-accent: oklch(0.91 0.045 78);
--sidebar-accent-foreground: oklch(0.24 0.055 43);
--sidebar-border: oklch(0.84 0.034 79);
--sidebar-ring: var(--ring);
}
.dark {
--background: oklch(0.16 0.03 282);
--background: oklch(0.15 0.025 235);
--foreground: oklch(0.93 0.02 252);
--card: oklch(0.21 0.03 281);
--card: oklch(0.2 0.03 235);
--card-foreground: oklch(0.93 0.02 252);
--popover: oklch(0.225 0.03 281);
--popover-foreground: oklch(0.93 0.02 252);
--primary: oklch(0.74 0.23 300);
--primary-foreground: oklch(0.18 0.03 282);
--secondary: oklch(0.29 0.05 238);
--primary: oklch(0.76 0.14 63);
--primary-foreground: oklch(0.16 0.025 235);
--secondary: oklch(0.28 0.04 222);
--secondary-foreground: oklch(0.93 0.02 252);
--muted: oklch(0.26 0.03 278);
--muted-foreground: oklch(0.76 0.025 252);
--accent: oklch(0.35 0.08 176);
--accent-foreground: oklch(0.93 0.03 176);
--accent: oklch(0.71 0.13 156);
--accent-foreground: oklch(0.14 0.03 160);
--destructive: oklch(0.396 0.141 25.723);
--destructive-foreground: oklch(0.637 0.237 25.331);
--border: oklch(0.35 0.06 286);
--input: oklch(0.35 0.06 286);
--ring: oklch(0.74 0.23 300);
--ring: oklch(0.76 0.14 63);
--chart-1: oklch(0.488 0.243 264.376);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
@@ -75,7 +75,7 @@
}
@theme inline {
--font-sans: 'Geist', 'Geist Fallback';
--font-sans: 'Avenir Next', 'Gill Sans', 'Geist', 'Geist Fallback';
--font-mono: 'Geist Mono', 'Geist Mono Fallback';
--color-background: var(--background);
--color-foreground: var(--foreground);
@@ -123,19 +123,24 @@
@apply bg-background text-foreground;
background-image:
radial-gradient(
circle at 15% 10%,
color-mix(in oklch, var(--primary) 22%, transparent) 0,
transparent 32%
circle at 10% 0%,
color-mix(in oklch, var(--primary) 18%, transparent) 0,
transparent 34%
),
radial-gradient(
circle at 85% 20%,
color-mix(in oklch, var(--accent) 18%, transparent) 0,
transparent 30%
circle at 92% 16%,
color-mix(in oklch, var(--accent) 16%, transparent) 0,
transparent 31%
),
radial-gradient(
circle at 50% 100%,
color-mix(in oklch, var(--primary) 12%, transparent) 0,
transparent 42%
color-mix(in oklch, var(--primary) 10%, transparent) 0,
transparent 44%
),
linear-gradient(
135deg,
color-mix(in oklch, var(--background) 92%, white),
color-mix(in oklch, var(--secondary) 45%, var(--background))
);
background-attachment: fixed;
}
+23
View File
@@ -0,0 +1,23 @@
"use client";
import { useEffect, useState } from "react";
import { Footer } from "@/components/footer";
import { Header } from "@/components/header";
import { LaunchPage } from "@/components/launch-page";
import type { Lang } from "@/app/page";
export default function LaunchRoute() {
const [lang, setLang] = useState<Lang>("zh");
useEffect(() => {
document.documentElement.lang = lang === "zh" ? "zh-CN" : "en";
}, [lang]);
return (
<main className="min-h-screen">
<Header lang={lang} setLang={setLang} />
<LaunchPage lang={lang} />
<Footer lang={lang} />
</main>
);
}
+9 -12
View File
@@ -1,30 +1,27 @@
import type { Metadata } from 'next'
import { Geist, Geist_Mono } from 'next/font/google'
import { Analytics } from '@vercel/analytics/next'
import './globals.css'
const _geist = Geist({ subsets: ["latin"] });
const _geistMono = Geist_Mono({ subsets: ["latin"] });
export const metadata: Metadata = {
title: 'Heicode - 团队软件交付智能体平台',
description: '让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。',
title: 'Heicode - From one idea to production software',
description:
'Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment.',
icons: {
icon: [
{
url: '/heicode-logo.svg',
url: '/taiji-logo.png',
media: '(prefers-color-scheme: light)',
},
{
url: '/heicode-logo.svg',
url: '/taiji-logo.png',
media: '(prefers-color-scheme: dark)',
},
{
url: '/heicode-logo.svg',
type: 'image/svg+xml',
url: '/taiji-logo.png',
type: 'image/png',
},
],
apple: '/heicode-logo.svg',
apple: '/taiji-logo.png',
},
}
@@ -34,7 +31,7 @@ export default function RootLayout({
children: React.ReactNode
}>) {
return (
<html lang="zh-CN" className="bg-background">
<html lang="en" className="bg-background">
<body className="font-sans antialiased">
{children}
{process.env.NODE_ENV === 'production' && <Analytics />}
+22 -9
View File
@@ -1,4 +1,8 @@
"use client";
import { useEffect, useState } from "react";
import { Header } from "@/components/header";
import { LaunchPopup } from "@/components/launch-popup";
import { Hero } from "@/components/hero";
import { Products } from "@/components/products";
import { Features } from "@/components/features";
@@ -8,18 +12,27 @@ import { Roadmap } from "@/components/roadmap";
import { CTA } from "@/components/cta";
import { Footer } from "@/components/footer";
export type Lang = "en" | "zh";
export default function HomePage() {
const [lang, setLang] = useState<Lang>("en");
useEffect(() => {
document.documentElement.lang = lang === "zh" ? "zh-CN" : "en";
}, [lang]);
return (
<main className="min-h-screen">
<Header />
<Hero />
<Products />
<Features />
<Paradigm />
<Principles />
<Roadmap />
<CTA />
<Footer />
<Header lang={lang} setLang={setLang} />
<LaunchPopup lang={lang} />
<Hero lang={lang} />
<Paradigm lang={lang} />
<Products lang={lang} />
<Features lang={lang} />
<Principles lang={lang} />
<Roadmap lang={lang} />
<CTA lang={lang} />
<Footer lang={lang} />
</main>
);
}
+23
View File
@@ -0,0 +1,23 @@
"use client";
import { useEffect, useState } from "react";
import { Header } from "@/components/header";
import { Footer } from "@/components/footer";
import { SwarmPage } from "@/components/swarm-page";
import type { Lang } from "@/app/page";
export default function AgnetSwarmRoute() {
const [lang, setLang] = useState<Lang>("zh");
useEffect(() => {
document.documentElement.lang = lang === "zh" ? "zh-CN" : "en";
}, [lang]);
return (
<main className="min-h-screen">
<Header lang={lang} setLang={setLang} />
<SwarmPage lang={lang} />
<Footer lang={lang} />
</main>
);
}
+37 -11
View File
@@ -1,29 +1,55 @@
import { Button } from "@/components/ui/button";
import { ArrowRight } from "lucide-react";
import type { Lang } from "@/app/page";
const MANAGER_URL = "https://code.xinghanlab.com/";
const REGISTER_URL = "https://agnet.taijiaicloud.com/login/";
const copy = {
en: {
title: "Move an idea into a real development flow",
description:
"Heicode does more than generate code. It organizes product intent, code, permissions, models, deployment, and maintenance into one auditable software lifecycle.",
primary: "Enter Heicode",
secondary: "Register account",
},
zh: {
title: "让想法进入真实开发流程",
description:
"不是只生成代码,而是把产品、代码、权限、模型、部署和维护组织成一个可审计的软件生命周期。",
primary: "进入 Heicode",
secondary: "注册账号",
},
} satisfies Record<Lang, {
title: string;
description: string;
primary: string;
secondary: string;
}>;
export function CTA({ lang }: { lang: Lang }) {
const t = copy[lang];
export function CTA() {
return (
<section className="border-t border-border bg-card/30 py-20 sm:py-32">
<section className="border-t border-border bg-foreground py-20 text-background sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<h2 className="text-3xl font-bold tracking-tight sm:text-4xl">
准备好强化团队 Code 交付能力了吗?
<h2 className="text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 text-lg text-muted-foreground">
从需求到代码到发布,让交付速度、质量门禁与回溯能力同时提升。
<p className="mt-4 text-lg text-background/70">
{t.description}
</p>
<div className="mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row">
<Button size="lg" className="gap-2" asChild>
<Button size="lg" className="h-12 rounded-full bg-primary px-7 text-primary-foreground hover:bg-primary/90" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
进入 Heicode Manager
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
立即登录
<Button variant="outline" size="lg" className="h-12 rounded-full border-background/30 bg-transparent px-7 text-background hover:bg-background hover:text-foreground" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
{t.secondary}
</a>
</Button>
</div>
+81 -37
View File
@@ -1,56 +1,100 @@
import { Shield, Users, Eye, Workflow } from "lucide-react";
import { FileText, GitBranch, ShieldCheck, Workflow } from "lucide-react";
import type { Lang } from "@/app/page";
const features = [
{
icon: Shield,
title: "身份与策略一元化",
const icons = [FileText, GitBranch, Workflow, ShieldCheck];
const copy = {
en: {
eyebrow: "Core abilities",
title: "Four loops Heicode must close",
description:
"从个人到团队,谁能访问何种资源、何种环境、何种仓库——应有清晰归属与审计预期,而不是散落在若干控制台口径不一致。",
"From idea, resources, team, and permissions to execution, launch, and maintenance, Heicode turns software delivery into an auditable lifecycle.",
features: [
{
title: "Ideas become development work",
description:
"Users do not need a complete PRD first. Heicode turns natural-language goals into requirement summaries, task drafts, prototype notes, role suggestions, and resource needs.",
},
{
title: "Resource binding and permission assignment",
description:
"Git, SK, project docs, and cloud resources are modeled as Resource Bindings, then assigned to specific sub Agnet roles through Resource Grants.",
},
{
title: "Sub Agnets execute continuously",
description:
"Work is not thrown over the wall once. Agnets keep moving through requirements, design, development, testing, fixes, and deployment.",
},
{
title: "Usage, logs, security, and audit loop",
description:
"Model balance, call logs, resource access, risky approvals, and deployment records return to Heicode. Long-lived secrets never enter Git, Markdown, or logs.",
},
],
},
{
icon: Workflow,
title: "编排与角色范式",
zh: {
eyebrow: "Core abilities",
title: "Heicode 要闭环的四件事",
description:
"既支持个人工作流也支持团队协作:个人可单人执行全流程,团队可按阶段或迭代组织分工。",
"从想法、资源、团队、权限到执行、上线、维护,形成一条可审计的软件生命周期。",
features: [
{
title: "想法转开发任务",
description:
"用户不需要先写完整 PRD。Heicode 会把自然语言目标整理成需求摘要、任务草案、原型描述、角色建议和资源需求。",
},
{
title: "资源绑定和权限分配",
description:
"Git、SK、项目文档和云资源被建模为 Resource Binding,再通过 Resource Grant 分配给具体子 Agnet 角色。",
},
{
title: "子 Agnet 持续执行",
description:
"不是一次性把任务丢出去,而是在需求、设计、开发、测试、修复、部署的子环节中持续调用 Agnet 推进。",
},
{
title: "用量、日志、安全和审计闭环",
description:
"模型余额、调用日志、资源访问、高危审批、部署记录统一回到 Heicode,长期密钥不进入 Git、Markdown 或日志。",
},
],
},
{
icon: Eye,
title: "全生命周期可信交付",
description:
"从构想到运营,关键产物应能对齐到分支、标签或发布单元:规格、实现、验证、发布、运维与复盘之间有可追溯链路。",
},
{
icon: Users,
title: "平台化协作",
description:
"无论个人还是团队,客户端与 Manager 共同服务协作叙事——跨角色、跨会话、跨环境的一体化体验。",
},
];
} satisfies Record<Lang, {
eyebrow: string;
title: string;
description: string;
features: Array<{ title: string; description: string }>;
}>;
export function Features({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Features() {
return (
<section id="features" className="border-y border-border bg-card/30 py-20 sm:py-32">
<section id="features" className="border-y border-border bg-card/30 py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-medium tracking-widest text-accent uppercase">
战略支柱
<p className="text-sm font-bold tracking-widest text-primary uppercase">
{t.eyebrow}
</p>
<h2 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">
四大核心能力
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 text-muted-foreground">
个人开发者到多人团队,都能获得清晰的责任边界与可追溯的交付过程
{t.description}
</p>
</div>
<div className="mt-16 grid gap-6 sm:grid-cols-2 lg:gap-8">
{features.map((feature, index) => (
<div className="mt-14 grid gap-5 sm:grid-cols-2 lg:gap-6">
{t.features.map((feature, index) => {
const Icon = icons[index];
return (
<div
key={feature.title}
className="relative flex gap-6 rounded-xl border border-border bg-background p-6 sm:p-8"
className="relative flex gap-6 overflow-hidden rounded-[1.7rem] border border-border bg-background/80 p-6 shadow-sm sm:p-8"
>
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-accent/10 text-accent">
<feature.icon className="h-5 w-5" />
<div className="flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-primary/10 text-primary">
<Icon className="h-5 w-5" />
</div>
<div>
<h3 className="text-lg font-semibold">{feature.title}</h3>
@@ -58,11 +102,11 @@ export function Features() {
{feature.description}
</p>
</div>
<span className="absolute top-4 right-4 text-6xl font-bold text-secondary/50">
<span className="absolute -bottom-4 right-5 text-7xl font-black text-secondary/55">
{String(index + 1).padStart(2, "0")}
</span>
</div>
))}
)})}
</div>
</div>
</section>
+95 -37
View File
@@ -1,32 +1,79 @@
import Link from "next/link";
import Image from "next/image";
import type { Lang } from "@/app/page";
const footerLinks = {
产品: [
{ label: "Heicode Manager", href: "#" },
{ label: "Heicode 客户端", href: "#" },
{ label: "Agnet 控制面", href: "#" },
],
资源: [
{ label: "文档", href: "#" },
{ label: "集成说明", href: "#" },
{ label: "更新日志", href: "#" },
{ label: "路线图", href: "#" },
],
公司: [
{ label: "关于我们", href: "#" },
{ label: "博客", href: "#" },
{ label: "加入我们", href: "#" },
{ label: "联系方式", href: "#" },
],
法律: [
{ label: "隐私政策", href: "#" },
{ label: "服务条款", href: "#" },
{ label: "安全", href: "#" },
],
};
const DOCS_URL = "https://doc.xinghanlab.com/";
const copy = {
en: {
tagline: ["From one idea to production software", "Organize an AI development team with code and cloud resources"],
copyright: "All rights reserved.",
footerLinks: {
Product: [
{ label: "Heicode Client", href: "#" },
{ label: "Heicode Manager", href: "https://code.xinghanlab.com/" },
{ label: "Agnet Platform", href: "https://agnet.taijiaicloud.com/" },
{ label: "Agnet Swarm", href: "/swarm" },
],
Resources: [
{ label: "Documentation", href: DOCS_URL },
{ label: "Resource binding", href: "#" },
{ label: "Secret vault", href: "#" },
{ label: "CodeGW boundary", href: "#" },
{ label: "Product demo", href: "#" },
],
Company: [
{ label: "About us", href: "https://www.taijiaicloud.com/" },
{ label: "Blog", href: "#" },
{ label: "Careers", href: "#" },
{ label: "Contact", href: "mailto:november@taijiaicloud.com" },
],
Legal: [
{ label: "Privacy", href: "#" },
{ label: "Terms", href: "#" },
{ label: "Security", href: "#" },
],
},
},
zh: {
tagline: ["从一个想法,到可上线的软件产品", "组织 AI 开发团队,接入代码和云资源"],
copyright: "保留所有权利。",
footerLinks: {
产品: [
{ label: "Heicode 客户端", href: "#" },
{ label: "Heicode Manager", href: "https://code.xinghanlab.com/" },
{ label: "Agnet 平台", href: "https://agnet.taijiaicloud.com/" },
{ label: "Agnet 蜂群", href: "/swarm" },
],
资源: [
{ label: "文档", href: DOCS_URL },
{ label: "资源绑定", href: "#" },
{ label: "密钥保管器", href: "#" },
{ label: "CodeGW 边界", href: "#" },
{ label: "产品演示", href: "#" },
],
公司: [
{ label: "关于我们", href: "https://www.taijiaicloud.com/" },
{ label: "博客", href: "#" },
{ label: "加入我们", href: "#" },
{ label: "联系方式", href: "mailto:november@taijiaicloud.com" },
],
法律: [
{ label: "隐私政策", href: "#" },
{ label: "服务条款", href: "#" },
{ label: "安全", href: "#" },
],
},
},
} satisfies Record<Lang, {
tagline: [string, string];
copyright: string;
footerLinks: Record<string, Array<{ label: string; href: string }>>;
}>;
export function Footer({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Footer() {
return (
<footer className="border-t border-border bg-background">
<div className="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8 lg:py-16">
@@ -34,31 +81,42 @@ export function Footer() {
<div className="lg:col-span-1">
<Link href="/" className="flex items-center gap-2">
<div className="flex h-8 w-8 items-center justify-center rounded-md border border-border/70 bg-card/60 text-foreground">
<Image src="/heicode-logo.svg" alt="Heicode" width={18} height={18} />
<Image src="/taiji-logo.png" alt="Heicode" width={18} height={18} />
</div>
<span className="bg-gradient-to-r from-blue-400 via-violet-400 to-purple-500 bg-clip-text text-lg font-semibold tracking-tight text-transparent">
<span className="text-lg font-black tracking-tight text-foreground">
Heicode
</span>
</Link>
<p className="mt-4 text-sm leading-relaxed text-muted-foreground">
团队软件交付智能体平台
{t.tagline[0]}
<br />
让交付过程可追溯、可复述
{t.tagline[1]}
</p>
</div>
{Object.entries(footerLinks).map(([category, links]) => (
{Object.entries(t.footerLinks).map(([category, links]) => (
<div key={category}>
<h3 className="text-sm font-semibold">{category}</h3>
<ul className="mt-4 space-y-3">
{links.map((link) => (
<li key={link.label}>
<Link
href={link.href}
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
>
{link.label}
</Link>
{link.href.startsWith("http") || link.href.startsWith("mailto:") ? (
<a
href={link.href}
target="_blank"
rel="noreferrer"
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
>
{link.label}
</a>
) : (
<Link
href={link.href}
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
>
{link.label}
</Link>
)}
</li>
))}
</ul>
@@ -69,7 +127,7 @@ export function Footer() {
<div className="mt-12 border-t border-border pt-8">
<div className="flex flex-col items-center justify-between gap-4 sm:flex-row">
<p className="text-sm text-muted-foreground">
&copy; {new Date().getFullYear()} Heicode. 保留所有权利。
&copy; {new Date().getFullYear()} Taiji. {t.copyright}
</p>
</div>
</div>
+98 -24
View File
@@ -5,33 +5,81 @@ import Link from "next/link";
import Image from "next/image";
import { Button } from "@/components/ui/button";
import { Menu, X } from "lucide-react";
import type { Lang } from "@/app/page";
const copy = {
en: {
navLinks: [
{ href: "/#workflow", label: "Workflow" },
{ href: "/#products", label: "Surfaces" },
{ href: "/#features", label: "Capabilities" },
{ href: "/swarm", label: "Swarm" },
{ href: "/launch", label: "Launch" },
{ href: "/#security", label: "Security" },
],
login: "Sign in",
register: "Register",
start: "Get started",
toggle: "中文",
menuOpen: "Open menu",
menuClose: "Close menu",
},
zh: {
navLinks: [
{ href: "/#workflow", label: "流程" },
{ href: "/#products", label: "产品面" },
{ href: "/#features", label: "能力" },
{ href: "/swarm", label: "蜂群" },
{ href: "/launch", label: "上线" },
{ href: "/#security", label: "安全" },
],
login: "登录",
register: "注册",
start: "开始使用",
toggle: "EN",
menuOpen: "打开菜单",
menuClose: "关闭菜单",
},
} satisfies Record<Lang, {
navLinks: Array<{ href: string; label: string }>;
login: string;
register: string;
start: string;
toggle: string;
menuOpen: string;
menuClose: string;
}>;
const navLinks = [
{ href: "#products", label: "产品" },
{ href: "#features", label: "能力" },
{ href: "#paradigm", label: "范式" },
{ href: "#principles", label: "原则" },
];
const MANAGER_URL = "https://code.xinghanlab.com/";
const REGISTER_URL = "https://agnet.taijiaicloud.com/login/";
const DOCS_URL = "https://doc.xinghanlab.com/";
export function Header() {
export function Header({
lang,
setLang,
}: {
lang: Lang;
setLang: (lang: Lang) => void;
}) {
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const t = copy[lang];
const toggleLang = () => setLang(lang === "en" ? "zh" : "en");
return (
<header className="fixed top-0 left-0 right-0 z-50 border-b border-border/50 bg-background/80 backdrop-blur-md">
<header className="fixed top-0 left-0 right-0 z-50 border-b border-border/60 bg-background/75 backdrop-blur-xl">
<div className="mx-auto flex h-16 max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8">
<Link href="/" className="flex items-center gap-2">
<div className="flex h-8 w-8 items-center justify-center rounded-md border border-border/70 bg-card/60 text-foreground">
<Image src="/heicode-logo.svg" alt="Heicode" width={18} height={18} />
<div className="flex h-9 w-9 items-center justify-center rounded-xl border border-border/70 bg-card/80 text-foreground shadow-sm">
<Image src="/taiji-logo.png" alt="Heicode" width={18} height={18} />
</div>
<span className="bg-gradient-to-r from-blue-400 via-violet-400 to-purple-500 bg-clip-text text-lg font-semibold tracking-tight text-transparent">
<span className="text-lg font-black tracking-tight text-foreground">
Heicode
</span>
</Link>
{/* Desktop Navigation */}
<nav className="hidden items-center gap-8 md:flex">
{navLinks.map((link) => (
{t.navLinks.map((link) => (
<Link
key={link.href}
href={link.href}
@@ -43,14 +91,27 @@ export function Header() {
</nav>
<div className="hidden items-center gap-4 md:flex">
<Button variant="ghost" size="sm" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
登录
<Button variant="outline" size="sm" className="rounded-full bg-card/50" onClick={toggleLang}>
{t.toggle}
</Button>
<Button variant="ghost" size="sm" className="rounded-full" asChild>
<a href={DOCS_URL} target="_blank" rel="noreferrer">
{lang === "zh" ? "文档" : "Docs"}
</a>
</Button>
<Button size="sm" asChild>
<Button variant="ghost" size="sm" className="rounded-full" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
开始使用
{t.login}
</a>
</Button>
<Button variant="outline" size="sm" className="rounded-full bg-card/50" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
{t.register}
</a>
</Button>
<Button size="sm" className="rounded-full bg-foreground text-background hover:bg-foreground/90" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.start}
</a>
</Button>
</div>
@@ -59,7 +120,7 @@ export function Header() {
<button
className="md:hidden"
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
aria-label={mobileMenuOpen ? "关闭菜单" : "打开菜单"}
aria-label={mobileMenuOpen ? t.menuClose : t.menuOpen}
>
{mobileMenuOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />}
</button>
@@ -69,7 +130,7 @@ export function Header() {
{mobileMenuOpen && (
<div className="border-t border-border bg-background md:hidden">
<nav className="flex flex-col px-4 py-4">
{navLinks.map((link) => (
{t.navLinks.map((link) => (
<Link
key={link.href}
href={link.href}
@@ -80,14 +141,27 @@ export function Header() {
</Link>
))}
<div className="mt-4 flex flex-col gap-2">
<Button variant="ghost" size="sm" className="justify-start" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
登录
<Button variant="outline" size="sm" className="justify-start rounded-full bg-card/50" onClick={toggleLang}>
{t.toggle}
</Button>
<Button variant="ghost" size="sm" className="justify-start rounded-full" asChild>
<a href={DOCS_URL} target="_blank" rel="noreferrer">
{lang === "zh" ? "文档" : "Docs"}
</a>
</Button>
<Button size="sm" asChild>
<Button variant="ghost" size="sm" className="justify-start rounded-full" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
开始使用
{t.login}
</a>
</Button>
<Button variant="outline" size="sm" className="justify-start rounded-full bg-card/50" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
{t.register}
</a>
</Button>
<Button size="sm" className="rounded-full bg-foreground text-background hover:bg-foreground/90" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.start}
</a>
</Button>
</div>
+153 -64
View File
@@ -1,80 +1,169 @@
import { Button } from "@/components/ui/button";
import { ArrowRight, Play } from "lucide-react";
import { ArrowRight, CheckCircle2, LockKeyhole, Play, Sparkles } from "lucide-react";
import type { Lang } from "@/app/page";
const MANAGER_URL = "https://code.xinghanlab.com/";
const REGISTER_URL = "https://agnet.taijiaicloud.com/login/";
const copy = {
en: {
eyebrow: "From idea to production software",
titleA: "One idea,",
titleB: "one AI development team.",
intro:
"Heicode organizes sub-Agnet teams, connects your code, documents, SK skills and cloud resources, and continuously carries work through requirements, development, testing, fixes, deployment and maintenance.",
primary: "Start with Heicode",
secondary: "Register",
bullets: ["Input ideas in the client", "Bind resources in Manager", "Ship through Agnet"],
cockpit: "Heicode Task Cockpit",
project: "Small-team task management SaaS",
running: "Running",
inputLabel: "User input",
prompt:
"I want to build a small-team task management SaaS with login, projects, tasks, comments, notifications and admin, deployed to Azure.",
agents: [
["Product Agnet", "Requirements and acceptance", "Done"],
["Backend Agnet", "APIs and data model", "Building"],
["Frontend Agnet", "Pages and interaction", "Waiting for API"],
["Ops Agnet", "Deployment and observability", "Approval pending"],
],
approvalTitle: "Production deployment requires client approval",
approvalDesc:
"The secret vault will derive a 15-minute short-lived credential. Sub Agnets never receive long-term secrets.",
},
zh: {
eyebrow: "从想法到上线的软件生命周期平台",
titleA: "一个想法,",
titleB: "一支 AI 开发团队。",
intro:
"Heicode 组织子 Agnet,接入你的代码、文档、SK 和云资源,持续完成需求、开发、测试、修复、部署和后续维护。",
primary: "开始使用 Heicode",
secondary: "注册",
bullets: ["客户端输入想法", "Manager 绑定资源", "Agnet 交付部署"],
cockpit: "Heicode Task Cockpit",
project: "小团队任务管理 SaaS",
running: "运行中",
inputLabel: "用户输入",
prompt:
"我想做一个小团队任务管理 SaaS,需要登录、项目、任务、评论、通知和后台管理,希望部署到 Azure。",
agents: [
["Product Agnet", "需求和验收标准", "完成"],
["Backend Agnet", "API 与数据模型", "开发中"],
["Frontend Agnet", "页面与交互", "等待接口"],
["Ops Agnet", "部署与观测", "待审批"],
],
approvalTitle: "生产部署需要客户端审批",
approvalDesc: "密钥保管器将派生 15 分钟短期凭证,子 Agnet 不接触长期密钥。",
},
} satisfies Record<Lang, {
eyebrow: string;
titleA: string;
titleB: string;
intro: string;
primary: string;
secondary: string;
bullets: string[];
cockpit: string;
project: string;
running: string;
inputLabel: string;
prompt: string;
agents: string[][];
approvalTitle: string;
approvalDesc: string;
}>;
export function Hero({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Hero() {
return (
<section className="relative overflow-hidden pt-32 pb-20 sm:pt-40 sm:pb-32">
{/* Background Grid */}
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,rgba(255,255,255,0.02)_1px,transparent_1px),linear-gradient(to_bottom,rgba(255,255,255,0.02)_1px,transparent_1px)] bg-[size:64px_64px]" />
{/* Gradient Glow */}
<div className="pointer-events-none absolute top-0 left-1/2 -translate-x-1/2 h-[500px] w-[800px] bg-accent/5 blur-[120px] rounded-full" />
<section className="relative overflow-hidden pt-28 pb-16 sm:pt-36 sm:pb-24">
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,color-mix(in_oklch,var(--foreground)_5%,transparent)_1px,transparent_1px),linear-gradient(to_bottom,color-mix(in_oklch,var(--foreground)_5%,transparent)_1px,transparent_1px)] bg-[size:42px_42px]" />
<div className="pointer-events-none absolute left-1/2 top-24 h-[420px] w-[70vw] -translate-x-1/2 rounded-full bg-primary/10 blur-[120px]" />
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-3xl text-center">
<p className="mb-4 text-sm font-medium tracking-widest text-accent uppercase">
个人与团队的软件交付智能体平台
</p>
<h1 className="text-4xl font-bold tracking-tight sm:text-5xl lg:text-6xl text-balance">
让代码交付
<br />
<span className="text-muted-foreground">更快、更稳、可回溯</span>
</h1>
<div className="grid gap-12 lg:grid-cols-[1.03fr_0.97fr] lg:items-center">
<div>
<div className="mb-6 inline-flex items-center gap-2 rounded-full border border-border bg-card/70 px-4 py-2 text-sm font-semibold shadow-sm backdrop-blur">
<Sparkles className="h-4 w-4 text-primary" />
{t.eyebrow}
</div>
<p className="mx-auto mt-6 max-w-2xl text-lg text-muted-foreground leading-relaxed text-pretty">
以代码为中心组织协作:从任务拆解、提交评审、自动验证到发布回滚,形成闭环交付路径。
智能体用于提效,但核心价值是工程质量、交付速度与稳定性同步提升。
</p>
<h1 className="max-w-4xl text-5xl font-black leading-[0.95] tracking-[-0.06em] sm:text-7xl lg:text-8xl">
{t.titleA}
<span className="block text-primary">{t.titleB}</span>
</h1>
<div className="mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row">
<Button size="lg" className="gap-2" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
开始使用
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" className="gap-2" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
<Play className="h-4 w-4" />
打开 Heicode Manager
</a>
</Button>
<p className="mt-7 max-w-2xl text-lg leading-8 text-muted-foreground sm:text-xl">
{t.intro}
</p>
<div className="mt-9 flex flex-col gap-4 sm:flex-row">
<Button size="lg" className="h-12 rounded-full bg-foreground px-7 text-background hover:bg-foreground/90" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" className="h-12 rounded-full border-foreground/20 bg-card/50 px-7" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
<Play className="h-4 w-4" />
{t.secondary}
</a>
</Button>
</div>
<div className="mt-8 grid max-w-2xl gap-3 text-sm text-muted-foreground sm:grid-cols-3">
{t.bullets.map((item) => (
<div key={item} className="flex items-center gap-2">
<CheckCircle2 className="h-4 w-4 text-accent" />
{item}
</div>
))}
</div>
</div>
</div>
{/* Architecture Diagram Preview */}
<div className="mx-auto mt-20 max-w-4xl">
<div className="rounded-xl border border-border bg-card/50 p-8 backdrop-blur-sm">
<div className="flex flex-col items-center gap-4">
<div className="w-full max-w-md rounded-lg border border-border bg-secondary/50 px-6 py-4 text-center">
<p className="text-sm text-muted-foreground">人机入口</p>
<p className="mt-1 font-medium">官网 · 控制台 · CLI / Desktop</p>
</div>
<div className="h-8 w-px bg-border" />
<p className="text-xs text-muted-foreground">同一身份与策略边界</p>
<div className="h-8 w-px bg-border" />
<div className="flex w-full max-w-lg items-center justify-center gap-4">
<div className="flex-1 rounded-lg border border-border bg-secondary/50 px-4 py-3 text-center">
<p className="text-sm font-medium">Heicode Manager</p>
<div className="relative">
<div className="absolute -left-6 -top-6 hidden h-24 w-24 rounded-full border border-primary/30 lg:block" />
<div className="rounded-[2rem] border border-foreground/10 bg-foreground p-3 shadow-2xl">
<div className="overflow-hidden rounded-[1.5rem] bg-[#10151d] text-white">
<div className="flex items-center justify-between border-b border-white/10 px-5 py-4">
<div>
<p className="text-xs uppercase tracking-[0.22em] text-white/45">{t.cockpit}</p>
<p className="mt-1 font-semibold">{t.project}</p>
</div>
<span className="rounded-full bg-emerald-400/15 px-3 py-1 text-xs font-semibold text-emerald-200">
{t.running}
</span>
</div>
<div className="flex h-px w-8 bg-border items-center justify-center">
<span className="bg-background px-1 text-xs text-muted-foreground">↔</span>
</div>
<div className="flex-1 rounded-lg border border-border bg-secondary/50 px-4 py-3 text-center">
<p className="text-sm font-medium">Heicode 客户端</p>
</div>
</div>
<div className="h-8 w-px bg-border" />
<div className="grid gap-3 p-5">
<div className="rounded-2xl bg-white/[0.06] p-4">
<p className="text-xs text-white/45">{t.inputLabel}</p>
<p className="mt-2 text-sm leading-6 text-white/85">{t.prompt}</p>
</div>
<div className="w-full max-w-md rounded-lg border border-border bg-secondary/50 px-6 py-4 text-center">
<p className="text-sm text-muted-foreground">资产与环境</p>
<p className="mt-1 font-medium">仓库 · 流水线 · 运行环境与观测</p>
<div className="grid gap-3 sm:grid-cols-2">
{t.agents.map(([role, work, state]) => (
<div key={role} className="rounded-2xl border border-white/10 bg-white/[0.04] p-4">
<p className="font-semibold">{role}</p>
<p className="mt-1 text-xs text-white/50">{work}</p>
<p className="mt-4 text-xs font-semibold text-primary-foreground/90">{state}</p>
</div>
))}
</div>
<div className="rounded-2xl border border-amber-300/20 bg-amber-300/10 p-4">
<div className="flex items-start gap-3">
<LockKeyhole className="mt-0.5 h-5 w-5 text-amber-200" />
<div>
<p className="text-sm font-semibold text-amber-100">{t.approvalTitle}</p>
<p className="mt-1 text-xs leading-5 text-amber-100/65">
{t.approvalDesc}
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+184
View File
@@ -0,0 +1,184 @@
import { Button } from "@/components/ui/button";
import { ArrowRight, CalendarDays, CheckCircle2, Rocket, ShieldCheck, Sparkles, Workflow } from "lucide-react";
import type { Lang } from "@/app/page";
const MANAGER_URL = "https://code.xinghanlab.com/";
const REGISTER_URL = "https://agnet.taijiaicloud.com/login/";
const copy = {
en: {
eyebrow: "Full launch",
date: "June 5, 2026",
title: "Heicode goes fully live on June 5, 2026.",
lead:
"The public launch brings together Heicode Client, Heicode Manager, Agnet Swarm, model usage, resource binding and approval audit into one delivery-ready product flow.",
primary: "Register now",
secondary: "Enter Heicode",
highlights: ["Client-first workflow", "Agnet Swarm execution", "Resource and secret governance", "Usage, billing and audit visibility"],
sections: [
{
icon: Rocket,
title: "Launch scope",
desc: "Users can register, enter Heicode, bind development resources, start an Agnet workflow and keep software delivery moving through the client.",
},
{
icon: Workflow,
title: "Delivery loop",
desc: "Idea intake, task decomposition, resource authorization, Agnet execution, review, approval and deployment records stay in one traceable loop.",
},
{
icon: ShieldCheck,
title: "Governed access",
desc: "Production actions, cloud resources, secrets and model budget are controlled by explicit approvals and auditable grants.",
},
],
timelineTitle: "Launch path",
timeline: [
["Now", "Open registration and product preview entry."],
["Before launch", "Complete onboarding, docs, Manager links and launch readiness checks."],
["June 5, 2026", "Full public launch of the Heicode product flow."],
],
note:
"The launch page is designed as the public landing point for announcements, registration, and product readiness communication.",
},
zh: {
eyebrow: "全面上线",
date: "2026年6月5日",
title: "Heicode 将于 2026年6月5日全面上线。",
lead:
"全面上线版本会把 Heicode 客户端、Heicode Manager、Agnet 蜂群、模型用量、资源绑定和审批审计整合成一条可交付的产品流程。",
primary: "立即注册",
secondary: "进入 Heicode",
highlights: ["客户端主流程", "Agnet 蜂群执行", "资源与密钥治理", "用量、计费与审计可见"],
sections: [
{
icon: Rocket,
title: "上线范围",
desc: "用户可以注册、进入 Heicode、绑定开发资源、启动 Agnet 工作流,并通过客户端持续推进软件交付。",
},
{
icon: Workflow,
title: "交付闭环",
desc: "想法输入、任务拆解、资源授权、Agnet 执行、复核、审批和部署记录会留在同一个可追踪流程中。",
},
{
icon: ShieldCheck,
title: "受控访问",
desc: "生产动作、云资源、密钥和模型预算都通过明确审批和可审计授权控制。",
},
],
timelineTitle: "上线节奏",
timeline: [
["现在", "开放注册入口和产品预览入口。"],
["上线前", "完成新手引导、文档、Manager 链接和上线检查。"],
["2026年6月5日", "Heicode 产品流程全面公开上线。"],
],
note:
"该页面作为对外上线公告、注册引导和产品准备状态说明的统一入口。",
},
} satisfies Record<Lang, {
eyebrow: string;
date: string;
title: string;
lead: string;
primary: string;
secondary: string;
highlights: string[];
sections: Array<{ icon: typeof Rocket; title: string; desc: string }>;
timelineTitle: string;
timeline: Array<[string, string]>;
note: string;
}>;
export function LaunchPage({ lang }: { lang: Lang }) {
const t = copy[lang];
return (
<section className="relative overflow-hidden pt-28 pb-20 sm:pt-36 sm:pb-28">
<div className="pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_15%_10%,color-mix(in_oklch,var(--primary)_18%,transparent),transparent_32%),radial-gradient(circle_at_85%_15%,color-mix(in_oklch,var(--accent)_16%,transparent),transparent_30%)]" />
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="grid gap-12 lg:grid-cols-[1fr_0.9fr] lg:items-center">
<div>
<div className="mb-6 inline-flex items-center gap-2 rounded-full border border-border bg-card/75 px-4 py-2 text-sm font-semibold shadow-sm backdrop-blur">
<Sparkles className="h-4 w-4 text-primary" />
{t.eyebrow}
</div>
<div className="mb-5 inline-flex items-center gap-2 rounded-2xl bg-foreground px-4 py-3 text-background shadow-xl">
<CalendarDays className="h-5 w-5 text-primary" />
<span className="text-sm font-black tracking-wide">{t.date}</span>
</div>
<h1 className="max-w-4xl text-5xl font-black leading-[0.95] tracking-[-0.06em] sm:text-7xl">
{t.title}
</h1>
<p className="mt-7 max-w-2xl text-lg leading-8 text-muted-foreground sm:text-xl">
{t.lead}
</p>
<div className="mt-9 flex flex-col gap-4 sm:flex-row">
<Button size="lg" className="h-12 rounded-full bg-primary px-7 text-primary-foreground hover:bg-primary/90" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" className="h-12 rounded-full border-foreground/20 bg-card/50 px-7" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.secondary}
</a>
</Button>
</div>
<div className="mt-8 grid gap-3 text-sm text-muted-foreground sm:grid-cols-2">
{t.highlights.map((item) => (
<div key={item} className="flex items-center gap-2 rounded-full bg-card/70 px-4 py-3">
<CheckCircle2 className="h-4 w-4 text-accent" />
{item}
</div>
))}
</div>
</div>
<div className="rounded-[2rem] border border-border bg-card/70 p-5 shadow-2xl backdrop-blur">
<div className="rounded-[1.5rem] bg-foreground p-6 text-background">
<p className="text-sm font-bold uppercase tracking-[0.22em] text-background/45">
{t.timelineTitle}
</p>
<div className="mt-6 space-y-4">
{t.timeline.map(([time, desc], index) => (
<div key={time} className="grid grid-cols-[auto_1fr] gap-4">
<div className="flex flex-col items-center">
<div className="flex h-10 w-10 items-center justify-center rounded-full bg-primary text-sm font-black text-primary-foreground">
{index + 1}
</div>
{index < t.timeline.length - 1 && <div className="h-full w-px bg-background/20" />}
</div>
<div className="pb-5">
<h3 className="font-semibold">{time}</h3>
<p className="mt-1 text-sm leading-6 text-background/65">{desc}</p>
</div>
</div>
))}
</div>
<p className="mt-2 rounded-2xl border border-background/10 bg-background/5 p-4 text-sm leading-6 text-background/70">
{t.note}
</p>
</div>
</div>
</div>
<div className="mt-16 grid gap-5 md:grid-cols-3">
{t.sections.map((section) => {
const Icon = section.icon;
return (
<div key={section.title} className="rounded-[1.6rem] border border-border bg-card/70 p-6 shadow-sm">
<div className="mb-5 flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary">
<Icon className="h-6 w-6" />
</div>
<h2 className="text-xl font-bold">{section.title}</h2>
<p className="mt-3 text-sm leading-7 text-muted-foreground">{section.desc}</p>
</div>
);
})}
</div>
</div>
</section>
);
}
+103
View File
@@ -0,0 +1,103 @@
"use client";
import { useEffect, useRef, useState } from "react";
import { Button } from "@/components/ui/button";
import { ArrowRight, CalendarDays, Rocket, X } from "lucide-react";
import type { Lang } from "@/app/page";
const REGISTER_URL = "https://agnet.taijiaicloud.com/login/";
const LAUNCH_URL = "/launch";
const copy = {
en: {
eyebrow: "Full launch",
title: "Heicode goes fully live on June 5, 2026.",
desc: "Register now and follow launch readiness for Client, Manager, Agnet Swarm, resource binding and audit.",
date: "June 5, 2026",
primary: "Register now",
secondary: "Launch details",
close: "Close launch announcement",
},
zh: {
eyebrow: "全面上线",
title: "Heicode 将于 2026年6月5日全面上线。",
desc: "现在可以注册,并查看客户端、Manager、Agnet 蜂群、资源绑定和审计能力的上线准备。",
date: "2026年6月5日",
primary: "立即注册",
secondary: "查看上线详情",
close: "关闭上线公告",
},
} satisfies Record<Lang, {
eyebrow: string;
title: string;
desc: string;
date: string;
primary: string;
secondary: string;
close: string;
}>;
export function LaunchPopup({ lang }: { lang: Lang }) {
const [open, setOpen] = useState(true);
const previousLang = useRef(lang);
const t = copy[lang];
useEffect(() => {
if (previousLang.current !== "zh" && lang === "zh") {
setOpen(true);
}
previousLang.current = lang;
}, [lang]);
if (!open) {
return null;
}
return (
<div className="fixed inset-0 z-[70] flex items-center justify-center bg-foreground/55 px-4 py-8 backdrop-blur-sm">
<div className="relative w-full max-w-2xl overflow-hidden rounded-[2rem] border border-border bg-background p-6 shadow-2xl sm:p-8">
<button
type="button"
aria-label={t.close}
onClick={() => setOpen(false)}
className="absolute right-4 top-4 rounded-full border border-border bg-card/80 p-2 text-muted-foreground transition-colors hover:text-foreground"
>
<X className="h-5 w-5" />
</button>
<div className="pointer-events-none absolute -right-24 -top-24 h-56 w-56 rounded-full bg-primary/15 blur-3xl" />
<div className="pointer-events-none absolute -bottom-24 -left-24 h-56 w-56 rounded-full bg-accent/15 blur-3xl" />
<div className="relative">
<div className="mb-5 inline-flex items-center gap-2 rounded-full border border-primary/20 bg-primary/10 px-4 py-2 text-sm font-bold text-primary">
<Rocket className="h-4 w-4" />
{t.eyebrow}
</div>
<div className="mb-6 flex w-fit items-center gap-2 rounded-2xl bg-foreground px-4 py-3 text-background">
<CalendarDays className="h-5 w-5 text-primary" />
<span className="text-sm font-black tracking-wide">{t.date}</span>
</div>
<h2 className="max-w-xl text-3xl font-black leading-tight tracking-[-0.04em] sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 max-w-xl text-base leading-7 text-muted-foreground sm:text-lg">
{t.desc}
</p>
<div className="mt-8 flex flex-col gap-3 sm:flex-row">
<Button className="h-12 rounded-full bg-primary px-7 text-primary-foreground hover:bg-primary/90" asChild>
<a href={REGISTER_URL} target="_blank" rel="noreferrer">
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" className="h-12 rounded-full bg-card/50 px-7" asChild>
<a href={LAUNCH_URL}>{t.secondary}</a>
</Button>
</div>
</div>
</div>
</div>
);
}
+104 -108
View File
@@ -1,126 +1,122 @@
import { CheckCircle2 } from "lucide-react";
import { ArrowRight } from "lucide-react";
import type { Lang } from "@/app/page";
const paradigms = [
{
name: "个人开发者",
tagline: "单人工作流,完整的交付追踪",
description: "独立开发者也需要记录「做了什么」「为什么这样做」「如何验证」",
minTeam: 1,
maxTeam: 1,
roles: ["开发者(全栈角色)"],
features: [
"构想→实现→验证→发布",
"本地与远程一体化",
"关键产物自动对齐",
"自我审计与版本追踪",
const copy = {
en: {
eyebrow: "User journey",
title: "Users see one continuous flow, not a wall of admin panels",
description:
"The homepage and primary workflow stay anchored to the active job: idea, resources, team, permissions, execution, launch, and maintenance.",
pathTitle: "Minimum MVP path",
pathDescription:
"Sign in, download the client, describe the idea, bind Git and cloud resources, confirm role permissions, preview the manifest, create an Agnet deployment placeholder, then keep development and testing moving.",
steps: [
["Sign in", "Users only sign in to Heicode, not CodeGW or the OpenBao console."],
["Describe the idea", "Capture the product, constraints, existing code, and deployment target in the client."],
["Bind resources", "Manager authorizes Git, SK, docs, and cloud accounts while storing secret_ref only."],
["Generate the team", "Recommend Product, Architect, Frontend, Backend, Reviewer, Ops, and other sub Agnets."],
["Assign permissions", "Confirm resources, actions, TTL, and approval requirements through role cards."],
["Close the loop", "Agnets keep pushing requirements, development, testing, fixes, deployment, and maintenance."],
],
cards: [
["Users do not write manifests", "The default flow shows roles, resources, actions, and approvals. Advanced users can expand the permission manifest."],
["The web app is not the IDE", "Manager handles auxiliary management and observation. Main development, continuation, and approvals return to the client."],
["Risky actions need explicit approval", "Production deploys, cloud operations, database writes, and production secret access must be confirmed in the client."],
],
},
{
name: "瀑布范式",
tagline: "阶段闸门与可审计链条",
description: "适合强合规、长评审链的组织语境",
minTeam: 5,
maxTeam: 9,
roles: ["WF-BA 业务分析师", "WF-ARC 架构师", "WF-DEV 工程师", "WF-QA 测试", "WF-REL 发布运维"],
features: [
"规格→设计→实现→验证→上线",
"阶段闸门强、评审链长",
"关键闸门不被静默跳过",
"可扩展至 9 个专岗",
zh: {
eyebrow: "User journey",
title: "用户看到的是连续流程,不是一堆后台菜单",
description:
"首页第一屏和主流程都围绕当前任务展开:想法、资源、团队、权限、执行、上线、维护。",
pathTitle: "MVP 最小路径",
pathDescription:
"登录、下载客户端、输入想法、绑定 Git 和云资源、确认角色权限、预览 manifest、创建 Agnet 部署占位任务、持续推进开发与测试。",
steps: [
["登录", "用户只登录 Heicode,不进入 CodeGW 后台或 OpenBao 控制台。"],
["输入想法", "在客户端描述产品、约束、已有代码和部署目标。"],
["绑定资源", "Manager 授权 Git、SK、文档、云账号并保存 secret_ref。"],
["生成团队", "推荐 Product、Architect、Frontend、Backend、Reviewer、Ops 等子 Agnet。"],
["分配权限", "用角色卡确认资源、动作、有效期和审批要求。"],
["执行闭环", "Agnet 持续推进需求、开发、测试、修复、部署和维护。"],
],
cards: [
["用户不手写 manifest", "普通流程只展示角色、资源、动作和审批要求,高级用户可以展开查看 permission manifest。"],
["网页不是 IDE", "Manager 完成辅助管理和观测,主开发对话、继续推进和审批仍回到客户端。"],
["高危操作单独审批", "生产部署、云操作、数据库写入、访问生产密钥都必须在客户端确认。"],
],
},
{
name: "敏捷范式",
tagline: "短迭代与跨职能闭环",
description: "适合快速试错的产品语境",
minTeam: 3,
maxTeam: 8,
roles: ["AG-PO 产品负责人", "AG-DEV 工程师", "AG-QA 测试"],
features: [
"迭代短、反馈密",
"跨职能团队闭环",
"独立质量门禁",
"可扩展双轨并行",
],
},
];
} satisfies Record<Lang, {
eyebrow: string;
title: string;
description: string;
pathTitle: string;
pathDescription: string;
steps: Array<[string, string]>;
cards: Array<[string, string]>;
}>;
export function Paradigm({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Paradigm() {
return (
<section id="paradigm" className="py-20 sm:py-32">
<section id="workflow" className="py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-medium tracking-widest text-accent uppercase">
协作范式
</p>
<h2 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">
从个人到团队,灵活的协作模式
</h2>
<p className="mt-4 text-muted-foreground">
无论规模如何,都能保持交付过程的可追溯与责任清晰
</p>
<div className="grid gap-12 lg:grid-cols-[0.8fr_1.2fr] lg:items-start">
<div>
<p className="text-sm font-bold uppercase tracking-widest text-primary">
{t.eyebrow}
</p>
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-5 text-muted-foreground">
{t.description}
</p>
<div className="mt-8 rounded-[1.7rem] border border-primary/20 bg-primary/10 p-6">
<p className="text-sm font-semibold text-primary">{t.pathTitle}</p>
<p className="mt-2 text-sm leading-6 text-muted-foreground">
{t.pathDescription}
</p>
</div>
</div>
<div className="rounded-[2rem] border border-border bg-card/60 p-4 shadow-sm">
<div className="grid gap-3">
{t.steps.map(([title, description], index) => (
<div
key={title}
className="grid gap-3 rounded-[1.4rem] border border-border bg-background/70 p-5 sm:grid-cols-[auto_1fr_auto] sm:items-center"
>
<div className="flex h-11 w-11 items-center justify-center rounded-2xl bg-foreground text-sm font-black text-background">
{String(index + 1).padStart(2, "0")}
</div>
<div>
<h3 className="font-semibold">{title}</h3>
<p className="mt-1 text-sm leading-6 text-muted-foreground">
{description}
</p>
</div>
{index < t.steps.length - 1 && (
<ArrowRight className="hidden h-5 w-5 text-muted-foreground sm:block" />
)}
</div>
))}
</div>
</div>
</div>
<div className="mt-16 grid gap-8 lg:grid-cols-3">
{paradigms.map((paradigm) => (
<div className="mt-14 grid gap-5 md:grid-cols-3">
{t.cards.map(([title, desc]) => (
<div
key={paradigm.name}
className="rounded-xl border border-border bg-card/50 p-8"
key={title}
className="rounded-[1.5rem] border border-border bg-card/60 p-6"
>
<div className="flex items-center justify-between">
<div>
<h3 className="text-2xl font-bold">{paradigm.name}</h3>
<p className="mt-1 text-sm text-accent">{paradigm.tagline}</p>
</div>
<div className="text-right">
<p className="text-3xl font-bold">{paradigm.minTeam}-{paradigm.maxTeam}</p>
<p className="text-xs text-muted-foreground">执行单元</p>
</div>
</div>
<p className="mt-4 text-sm text-muted-foreground">
{paradigm.description}
</p>
<div className="mt-6 border-t border-border pt-6">
<p className="mb-3 text-xs font-medium uppercase tracking-wider text-muted-foreground">
最小编队角色
</p>
<div className="flex flex-wrap gap-2">
{paradigm.roles.map((role) => (
<span
key={role}
className="rounded-md bg-secondary px-2 py-1 text-xs font-mono"
>
{role}
</span>
))}
</div>
</div>
<div className="mt-6 border-t border-border pt-6">
<p className="mb-3 text-xs font-medium uppercase tracking-wider text-muted-foreground">
特征
</p>
<ul className="space-y-2">
{paradigm.features.map((feature) => (
<li key={feature} className="flex items-center gap-2 text-sm">
<CheckCircle2 className="h-4 w-4 text-accent" />
{feature}
</li>
))}
</ul>
</div>
<h3 className="font-semibold">{title}</h3>
<p className="mt-2 text-sm leading-6 text-muted-foreground">{desc}</p>
</div>
))}
</div>
<div className="mt-12 rounded-xl border border-accent/30 bg-accent/5 p-6 text-center">
<p className="text-sm text-muted-foreground">
<span className="font-medium text-foreground">超出协调上限时</span>:
拆分子系统、拆分 Squad 或引入共享平台能力,而不是在同一队列上无限堆角色
</p>
</div>
</div>
</section>
);
+92 -34
View File
@@ -1,51 +1,109 @@
const principles = [
{
number: "01",
title: "可追溯优于单次极速",
description: "宁可多一道可查的记录,也不依赖口头默契替代闸门。",
import type { Lang } from "@/app/page";
const copy = {
en: {
eyebrow: "Security model",
title: "Resources are usable. Secrets do not leak.",
description:
"Users authorize resources, the platform holds credentials, and sub Agnets only receive short-lived access inside the approved scope.",
principles: [
{
number: "01",
title: "Secrets never enter the product surface",
description:
"Git tokens, cloud access keys, SSH private keys, database passwords, and CodeGW keys never enter Git, Markdown, frontend responses, or ordinary logs.",
},
{
number: "02",
title: "Only secret_ref is stored",
description:
"The Manager database stores resource metadata, permission relationships, and secret_ref. Real long-lived credentials are held by the vault.",
},
{
number: "03",
title: "Sub Agnets only receive short-lived credentials",
description:
"After approval, the platform derives short-lived, least-privilege, auditable credentials by permission and TTL. Sub Agnets do not keep long-lived secrets.",
},
{
number: "04",
title: "Risky actions are approved in the client",
description:
"Production deploys, cloud changes, database writes, production secret access, and large budget consumption require explicit client confirmation.",
},
{
number: "05",
title: "Audit answers the critical questions",
description:
"Who used which resource, for which task, through which sub Agnet, at what time, with what action, and whether approval happened.",
},
],
},
{
number: "02",
title: "范式可裁剪",
description: "瀑布与敏捷是协作隐喻,不是教条;规模与角色应由组织工作坊裁剪,而非照搬单一数字。",
zh: {
eyebrow: "Security model",
title: "资源可用,密钥不外泄",
description:
"用户授权资源,平台托管凭证,子 Agnet 只获得被批准范围内的短期访问能力。",
principles: [
{
number: "01",
title: "密钥不进入产品表面",
description: "Git token、云 access key、SSH 私钥、数据库密码和 CodeGW key 不进入 Git、Markdown、前端响应或普通日志。",
},
{
number: "02",
title: "只保存 secret_ref",
description: "Manager 数据库保存资源元数据、权限关系和 secret_ref,真实长期凭证由密钥保管器托管。",
},
{
number: "03",
title: "子 Agnet 只拿短期凭证",
description: "审批通过后,平台按权限和 TTL 派生短期、最小权限、可审计凭证;子 Agnet 不保存长期密钥。",
},
{
number: "04",
title: "高危操作只在客户端审批",
description: "生产部署、云资源变更、数据库写入、访问生产密钥和大额预算消耗,必须由用户在客户端明确确认。",
},
{
number: "05",
title: "审计能回答关键问题",
description: "谁在什么时候,为了哪个任务,让哪个子 Agnet 使用了哪个资源,执行了什么动作,是否经过审批。",
},
],
},
{
number: "03",
title: "集成可替换",
description: "Manager、客户端、编排平台、云与流水线均以「契约与边界」相接,避免叙事绑死在某一厂商。",
},
{
number: "04",
title: "人机协同",
description: "涉及权限、费用、生产变更与高敏数据的决策,默认保留人在回路;自动化扩展提案权,不默认无限代理权。",
},
{
number: "05",
title: "对内对外叙事分层",
description: "愿景文档不写实施说明书;角色代号与编队明细放入附录,以免喧宾夺主。",
},
];
} satisfies Record<Lang, {
eyebrow: string;
title: string;
description: string;
principles: Array<{ number: string; title: string; description: string }>;
}>;
export function Principles({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Principles() {
return (
<section id="principles" className="border-t border-border bg-card/30 py-20 sm:py-32">
<section id="security" className="border-t border-border bg-card/30 py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-medium tracking-widest text-accent uppercase">
指导原则
<p className="text-sm font-bold tracking-widest text-primary uppercase">
{t.eyebrow}
</p>
<h2 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">
我们坚持什么
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 text-muted-foreground">
{t.description}
</p>
</div>
<div className="mt-16 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{principles.map((principle) => (
{t.principles.map((principle) => (
<div
key={principle.number}
className="group relative overflow-hidden rounded-xl border border-border bg-background p-6 transition-colors hover:border-accent/50"
className="group relative overflow-hidden rounded-[1.6rem] border border-border bg-background/80 p-6 transition-colors hover:border-primary/40"
>
<span className="absolute -top-2 -right-2 text-7xl font-bold text-secondary/30 transition-colors group-hover:text-accent/10">
<span className="absolute -top-2 -right-2 text-7xl font-black text-secondary/40 transition-colors group-hover:text-primary/10">
{principle.number}
</span>
<div className="relative">
+113 -26
View File
@@ -1,46 +1,133 @@
import { Layers, Terminal } from "lucide-react";
import { Bot, CreditCard, KeyRound, Layers, Monitor, Terminal } from "lucide-react";
import type { Lang } from "@/app/page";
const products = [
{
icon: Layers,
name: "Heicode Manager",
const icons = [Terminal, Monitor, Bot, CreditCard, KeyRound, Layers];
const copy = {
en: {
eyebrow: "Product surfaces",
title: "Users operate Heicode. The underlying systems stay in their lanes.",
description:
"面向代码交付的团队控制台。把需求、实现、验证、发布与回溯串成一条可执行的工程链路。",
features: ["代码任务编排", "质量门禁", "交付追踪", "审计回溯"],
"The client is the primary experience and Manager is the auxiliary console. CodeGW, the vault, and the Agnet platform are not exposed as ordinary user backends.",
products: [
{
name: "Heicode Client",
description:
"The primary user experience. Describe ideas, continue development, review Agnet execution feedback, and approve risky operations before production deploys, secret access, or cloud changes.",
features: ["Idea input", "Task progress", "Execution feedback", "Risk approval"],
},
{
name: "Heicode Manager",
description:
"The browser-side control console for account safety, client downloads, resource binding, Agnet deployment, task status, balance, and audit.",
features: ["Resource binding", "Deploy Agnets", "Model balance", "Audit logs"],
},
{
name: "Agnet Platform",
description:
"The AI development-team execution layer. It runs Product, Frontend, Backend, Reviewer, Ops, and other sub Agnets on AKS, then reports state and events back.",
features: ["Role teams", "Continuous execution", "SK calls", "State callback"],
},
{
name: "CodeGW",
description:
"The internal model gateway and billing foundation. Heicode only exposes the models, balance, quota, usage, and call logs ordinary users need.",
features: ["Model gateway", "Balance quota", "Call logs", "No admin exposure"],
},
{
name: "Secret Vault",
description:
"Credential custody backed by OpenBao. Long-lived secrets only enter the vault; sub Agnets receive short-lived, least-privilege credentials.",
features: ["secret_ref", "Short-lived creds", "Rotate and revoke", "Audit trail"],
},
{
name: "Resource Context",
description:
"Git, SK, documents, cloud accounts, and cloud resources become Resource Bindings and Grants that can be authorized, revoked, and audited.",
features: ["Git", "SK", "Project docs", "Cloud resources"],
},
],
},
{
icon: Terminal,
name: "Heicode 客户端",
zh: {
eyebrow: "Product surfaces",
title: "用户只操作 Heicode,底层能力各归其位",
description:
"终端与桌面侧人机编程客户端及本地服务。与 Manager 协同,在统一策略边界下工作,适配个人与团队工作流。",
features: ["IDE 集成", "本地服务", "会话管理", "安全连接"],
"客户端是主体验,Manager 是辅助控制台;CodeGW、密钥保管器和 Agnet 平台不作为普通用户后台。",
products: [
{
name: "Heicode 客户端",
description:
"用户主体验。输入想法、继续开发、查看 Agnet 执行反馈,并在生产部署、密钥访问、云操作前完成高危审批。",
features: ["想法输入", "任务推进", "执行反馈", "高危审批"],
},
{
name: "Heicode Manager",
description:
"浏览器辅助控制台。负责账号安全、客户端下载、资源绑定、Agnet 部署、任务状态、余额和审计。",
features: ["资源绑定", "部署 Agnet", "模型余额", "审计日志"],
},
{
name: "Agnet 平台",
description:
"AI 开发团队执行层。在 AKS 上运行 Product、Frontend、Backend、Reviewer、Ops 等子 Agnet,并回传状态和事件。",
features: ["角色团队", "持续执行", "SK 调用", "状态回传"],
},
{
name: "CodeGW",
description:
"内部模型网关和计费底座。Heicode 只展示普通用户需要的模型、余额、额度、用量和调用日志。",
features: ["模型网关", "余额额度", "调用日志", "不开放后台"],
},
{
name: "密钥保管器",
description:
"OpenBao 实现的凭证托管服务。长期密钥只进入密钥保管器,子 Agnet 只拿短期、最小权限凭证。",
features: ["secret_ref", "短期凭证", "轮换撤销", "审计记录"],
},
{
name: "资源上下文",
description:
"把 Git、SK、文档、云账号和云资源变成可授权、可撤销、可审计的 Resource Binding 和 Grant。",
features: ["Git", "SK", "项目文档", "云资源"],
},
],
},
];
} satisfies Record<Lang, {
eyebrow: string;
title: string;
description: string;
products: Array<{ name: string; description: string; features: string[] }>;
}>;
export function Products({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Products() {
return (
<section id="products" className="py-20 sm:py-32">
<section id="products" className="py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-medium tracking-widest text-accent uppercase">
产品矩阵
<p className="text-sm font-bold tracking-widest text-primary uppercase">
{t.eyebrow}
</p>
<h2 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">
个人与团队通用的交付平台
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 text-muted-foreground">
无论规模如何,Manager 与客户端共同服务于统一的交付故事线
{t.description}
</p>
</div>
<div className="mt-16 grid gap-8 md:grid-cols-2">
{products.map((product) => (
<div className="mt-14 grid gap-5 md:grid-cols-2 xl:grid-cols-3">
{t.products.map((product, index) => {
const Icon = icons[index];
return (
<div
key={product.name}
className="group relative rounded-xl border border-border bg-card/50 p-8 transition-colors hover:border-accent/50 hover:bg-card"
className="group relative overflow-hidden rounded-[1.7rem] border border-border bg-card/65 p-7 shadow-sm transition-all hover:-translate-y-1 hover:border-primary/40 hover:shadow-xl"
>
<div className="mb-6 flex h-12 w-12 items-center justify-center rounded-lg bg-secondary">
<product.icon className="h-6 w-6 text-accent" />
<div className="absolute -right-10 -top-10 h-28 w-28 rounded-full bg-primary/5 transition-colors group-hover:bg-primary/10" />
<div className="mb-6 flex h-12 w-12 items-center justify-center rounded-2xl bg-secondary text-primary">
<Icon className="h-6 w-6" />
</div>
<h3 className="text-xl font-semibold">{product.name}</h3>
@@ -59,7 +146,7 @@ export function Products() {
))}
</div>
</div>
))}
)})}
</div>
</div>
</section>
+70 -27
View File
@@ -1,52 +1,95 @@
const phases = [
{
phase: "对齐",
description: "身份、策略与叙事口径一致,避免「各说各话」",
status: "进行中",
import type { Lang } from "@/app/page";
const copy = {
en: {
eyebrow: "MVP to lifecycle",
title: "Prove the loop first, then expand the full lifecycle",
description:
"The real Agnet platform deployment API can arrive later. Manager payloads, manifests, audit trails, and the client approval loop must be ready first.",
phases: [
{
phase: "Current MVP",
description:
"Heicode, CodeGW, and OpenBao deploy separately. Resource bindings, Grants, manifests, and secret custody form the first closed loop. The client signs in only to Heicode.",
status: "Converging",
},
{
phase: "Next",
description:
"Expose user-side CodeGW model and usage views, close the client login and approval download path, and integrate the real Agnet deployment API.",
status: "Priority",
},
{
phase: "Long term",
description:
"Add automated maintenance, upgrade plans, and continuous cost and quality observation so development, deployment, and maintenance live in one lifecycle.",
status: "Product direction",
},
],
},
{
phase: "贯通",
description: "人机链路在一条交付故事线下可走通,关键闸门有据可查",
status: "规划中",
zh: {
eyebrow: "MVP to lifecycle",
title: "当前先证明闭环,再做完整生命周期",
description:
"真实 Agnet 平台部署 API 可以后置,但 Manager 侧 payload、manifest、审计和客户端闭环必须先准备好。",
phases: [
{
phase: "当前 MVP",
description: "Heicode、CodeGW、OpenBao 解耦部署;资源绑定、Grant、manifest 和密钥保管闭环;客户端只登录 Heicode。",
status: "正在收敛",
},
{
phase: "下一步",
description: "CodeGW 用户侧模型与用量展示、客户端登录审批下载闭环、Agnet 平台真实部署接口联调。",
status: "优先推进",
},
{
phase: "长期形态",
description: "自动维护、升级计划、成本和质量持续观测,把开发、部署、维护纳入同一个生命周期闭环。",
status: "产品方向",
},
],
},
{
phase: "规模化",
description: "编队模板与审批策略可按组织复制,而不是单次项目手工拼装",
status: "展望",
},
];
} satisfies Record<Lang, {
eyebrow: string;
title: string;
description: string;
phases: Array<{ phase: string; description: string; status: string }>;
}>;
export function Roadmap({ lang }: { lang: Lang }) {
const t = copy[lang];
export function Roadmap() {
return (
<section className="py-20 sm:py-32">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-medium tracking-widest text-accent uppercase">
阶段性方向
<p className="text-sm font-bold tracking-widest text-primary uppercase">
{t.eyebrow}
</p>
<h2 className="mt-4 text-3xl font-bold tracking-tight sm:text-4xl">
三层递进
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.title}
</h2>
<p className="mt-4 text-sm text-muted-foreground">
仅给出时间无序的递进意象,方便对齐讨论;不绑定季度、不设里程碑编号
{t.description}
</p>
</div>
<div className="mt-16">
<div className="relative">
{/* Connection Line */}
<div className="absolute left-1/2 top-0 h-full w-px -translate-x-1/2 bg-gradient-to-b from-accent/50 via-border to-border hidden lg:block" />
<div className="absolute left-1/2 top-0 hidden h-full w-px -translate-x-1/2 bg-gradient-to-b from-primary/50 via-border to-border lg:block" />
<div className="grid gap-8 lg:grid-cols-3">
{phases.map((item, index) => (
{t.phases.map((item, index) => (
<div key={item.phase} className="relative">
{/* Circle Indicator */}
<div className="mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full border-2 border-accent/30 bg-background">
<span className="text-2xl font-bold text-accent">{index + 1}</span>
<div className="mx-auto mb-6 flex h-16 w-16 items-center justify-center rounded-full border-2 border-primary/30 bg-background">
<span className="text-2xl font-black text-primary">{index + 1}</span>
</div>
<div className="rounded-xl border border-border bg-card/50 p-6 text-center">
<span className="inline-block rounded-full bg-accent/10 px-3 py-1 text-xs font-medium text-accent">
<div className="rounded-[1.6rem] border border-border bg-card/60 p-6 text-center shadow-sm">
<span className="inline-block rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary">
{item.status}
</span>
<h3 className="mt-4 text-xl font-bold">{item.phase}</h3>
+570
View File
@@ -0,0 +1,570 @@
import { Button } from "@/components/ui/button";
import {
Activity,
ArrowRight,
BadgeCheck,
Boxes,
BrainCircuit,
CloudCog,
Cpu,
DatabaseZap,
FileCheck2,
Fingerprint,
GitBranch,
KeyRound,
Layers3,
LockKeyhole,
Network,
ShieldCheck,
Sparkles,
SquareKanban,
Target,
Workflow,
} from "lucide-react";
import type { Lang } from "@/app/page";
const MANAGER_URL = "https://code.xinghanlab.com/";
const DOCS_URL = "https://doc.xinghanlab.com/";
const CONTACT_EMAIL = "november@taijiaicloud.com";
const copy = {
en: {
eyebrow: "Agnet Swarm",
heroTitle: "A controlled autonomous AI development team.",
heroLead:
"Heicode Swarm turns one product goal into a Swarm Run, then coordinates tasks, shared context, permissions, artifacts, usage and audit across multiple Agnets.",
primary: "Start from Heicode",
secondary: "Read docs",
proof: ["Goal-driven", "Shared resource layer", "Approval and audit", "Azure-ready"],
cockpitTitle: "Swarm command map",
cockpitMeta: "One target, many controlled executors",
cockpitGoal: "Goal",
cockpitGoalText:
"Build a SaaS with login, project workspaces, billing, audit and Azure deployment.",
cockpitNodes: [
["Product", "Acceptance criteria"],
["Architect", "Task graph"],
["Frontend", "User flows"],
["Backend", "API and data"],
["Reviewer", "Risk checks"],
["Ops", "Deployment"],
],
layerTitle: "Four layers customers can understand",
layerDesc:
"The swarm is not a group chat of bots. It is a productized operating model with clear layers and boundaries.",
layers: [
{
title: "Goal layer",
desc: "The customer describes the outcome, constraints, resources and delivery target. Heicode keeps the run anchored to the target.",
},
{
title: "Task layer",
desc: "The platform creates a dynamic task graph. Tasks can split, merge, block, hand off, retry and return to review.",
},
{
title: "Shared resource layer",
desc: "Task pool, cache, context, artifacts, approvals, model usage and resource permissions become shared infrastructure.",
},
{
title: "Governance layer",
desc: "Secrets, cloud actions, production deployment, model spending and audit are controlled instead of exposed to every Agnet.",
},
],
flowTitle: "From an idea to an auditable delivery flow",
flowDesc:
"Each Swarm Run produces visible progress, reviewable artifacts and a traceable operating record.",
flowNote:
"Heicode keeps every run tied to the original target while recording task state, resource usage and approval history.",
flow: [
["Input goal", "User describes product intent and constraints."],
["Create Swarm Run", "Heicode builds the controlled execution instance."],
["Build task graph", "Tasks are decomposed, scored and assigned."],
["Execute with Agnets", "Specialized Agnets work with minimal context."],
["Review artifacts", "Outputs return as specs, code, tests and deployment records."],
["Approve risk", "Production actions and sensitive access need explicit approval."],
],
resourceTitle: "The common resource layer behind the swarm",
resourceEyebrow: "Shared layer",
resourceDesc:
"This is the key difference from ordinary multi-agent demos: Agnets do not freely share secrets or improvise infrastructure. They work through a controlled shared layer.",
resources: [
["Task pool", "Stores waiting, running, blocked, review and completed work."],
["Context cache", "Keeps project facts, decisions, summaries and dependency state."],
["Score signals", "Pheromone-style signals help prioritize useful paths and avoid repeated dead ends."],
["Artifact pool", "Stores requirement drafts, code changes, test reports, deployment manifests and review notes."],
["Approval center", "Routes risky actions back to the client for explicit confirmation."],
["Secret vault", "Keeps long-lived credentials out of Git, prompts, Markdown and ordinary logs."],
],
azureTitle: "Mapped to an Azure-style infrastructure model",
azureDesc:
"Heicode explains swarm capability through concepts enterprise customers already recognize: orchestration, identity, storage, secrets, observability and cost control.",
azure: [
["Orchestration", "Swarm Run, dynamic task graph, queue and worker scheduling"],
["Compute", "Agnet execution runtime, sandbox, review worker and deployment worker"],
["Storage", "Artifacts, task state, context pack, cache and run history"],
["Identity", "Resource Binding, Resource Grant, least-privilege scope and TTL"],
["Secrets", "Vault-backed secret_ref with short-lived derived credentials"],
["Observability", "Event stream, audit log, usage, cost and approval records"],
],
featureTitle: "What makes Heicode Swarm different",
featureEyebrow: "Product features",
featurePanelEyebrow: "Visible to customer",
features: [
{
title: "Controlled autonomy",
desc: "Agnets can continue work, but cannot cross permission, budget or production boundaries without approval.",
},
{
title: "Customer-readable progress",
desc: "Users see what is being built, why a task is blocked, what was produced and what needs approval.",
},
{
title: "Resource-aware execution",
desc: "Git, docs, SK, model balance, cloud accounts and deployment targets are explicit resources, not hidden prompt text.",
},
{
title: "Delivery-grade artifacts",
desc: "The run produces specs, task records, code changes, tests, deployment notes and audit history.",
},
],
ctaTitle: "Use a swarm when the task is larger than one prompt",
ctaDesc:
"Heicode is designed for software work that needs requirements, roles, code, cloud resources, safety checks and long-running delivery.",
contact: "Contact",
},
zh: {
eyebrow: "Agnet 蜂群",
heroTitle: "受控自治的 AI 开发团队。",
heroLead:
"Heicode 蜂群把一个产品目标转成一次 Swarm Run,并在多个 Agnet 之间协调任务、共享上下文、权限、成果物、用量和审计。",
primary: "进入 Heicode",
secondary: "查看文档",
proof: ["目标驱动", "共享资源层", "审批与审计", "面向 Azure 部署"],
cockpitTitle: "蜂群作战地图",
cockpitMeta: "一个目标,多名受控执行者",
cockpitGoal: "目标",
cockpitGoalText:
"构建一个包含登录、项目空间、计费、审计和 Azure 部署的 SaaS 产品。",
cockpitNodes: [
["Product", "验收标准"],
["Architect", "任务图"],
["Frontend", "用户流程"],
["Backend", "API 与数据"],
["Reviewer", "风险检查"],
["Ops", "部署上线"],
],
layerTitle: "客户能理解的四个层面",
layerDesc:
"蜂群不是一组机器人聊天,而是一套产品化运行模型,每一层都有清晰边界。",
layers: [
{
title: "目标层",
desc: "客户描述交付结果、约束、资源和上线目标,Heicode 让整次执行始终围绕目标推进。",
},
{
title: "任务层",
desc: "平台生成动态任务图,任务可以拆分、合并、阻塞、交接、重试并回到复核。",
},
{
title: "共享资源层",
desc: "任务池、缓存、上下文、成果物、审批、模型用量和资源权限成为蜂群共同使用的基础设施。",
},
{
title: "治理层",
desc: "密钥、云操作、生产部署、模型消耗和审计被统一控制,而不是暴露给每个 Agnet。",
},
],
flowTitle: "从一个想法到可审计的交付流程",
flowDesc:
"每一次 Swarm Run 都产生可见进展、可验收成果物和可追踪操作记录。",
flowNote:
"Heicode 会让每次运行始终绑定原始目标,同时记录任务状态、资源使用和审批历史。",
flow: [
["输入目标", "用户描述产品意图和约束。"],
["创建 Swarm Run", "Heicode 建立受控执行实例。"],
["生成任务图", "任务被拆解、评分和分配。"],
["Agnet 执行", "专业 Agnet 使用最小上下文推进工作。"],
["成果物复核", "输出需求、代码、测试和部署记录。"],
["风险审批", "生产动作和敏感访问需要明确确认。"],
],
resourceTitle: "蜂群背后的共同资源层",
resourceEyebrow: "共享资源层",
resourceDesc:
"这是区别于普通多 Agent Demo 的关键:Agnet 不自由共享密钥,也不临时乱接基础设施,而是通过受控共享层工作。",
resources: [
["任务池", "保存待执行、执行中、阻塞、待复核和已完成的任务。"],
["上下文缓存", "保存项目事实、决策、摘要和依赖状态。"],
["评分信号", "类似信息素的信号帮助优先选择有效路径,避免重复踩坑。"],
["成果物池", "保存需求草案、代码变更、测试报告、部署清单和复核记录。"],
["审批中心", "把高风险操作回传到客户端,由用户明确确认。"],
["密钥保管库", "长期凭证不进入 Git、Prompt、Markdown 或普通日志。"],
],
azureTitle: "对标 Azure 的基础设施模型",
azureDesc:
"Heicode 用企业客户熟悉的概念解释蜂群能力:编排、身份、存储、密钥、观测和成本控制。",
azure: [
["编排", "Swarm Run、动态任务图、队列和 Worker 调度"],
["计算", "Agnet 执行运行时、沙箱、复核 Worker 和部署 Worker"],
["存储", "成果物、任务状态、Context Pack、缓存和运行历史"],
["身份", "Resource Binding、Resource Grant、最小权限范围和 TTL"],
["密钥", "基于 Vault 的 secret_ref 和短期派生凭证"],
["观测", "事件流、审计日志、用量、成本和审批记录"],
],
featureTitle: "Heicode 蜂群的产品特色",
featureEyebrow: "产品特色",
featurePanelEyebrow: "客户可见",
features: [
{
title: "受控自治",
desc: "Agnet 可以持续推进工作,但不能越过权限、预算或生产边界。",
},
{
title: "客户可读的进展",
desc: "用户可以看到正在做什么、为什么阻塞、产出了什么、哪些动作需要审批。",
},
{
title: "资源感知执行",
desc: "Git、文档、SK、模型余额、云账号和部署目标都是明确资源,不是隐藏在 Prompt 里的文字。",
},
{
title: "交付级成果物",
desc: "一次执行会沉淀需求、任务记录、代码变更、测试、部署说明和审计历史。",
},
],
ctaTitle: "当任务大于一次 Prompt,就需要蜂群",
ctaDesc:
"Heicode 面向真实软件工作:需求、角色、代码、云资源、安全检查和长周期交付必须被组织起来。",
contact: "联系咨询",
},
} satisfies Record<Lang, {
eyebrow: string;
heroTitle: string;
heroLead: string;
primary: string;
secondary: string;
proof: string[];
cockpitTitle: string;
cockpitMeta: string;
cockpitGoal: string;
cockpitGoalText: string;
cockpitNodes: Array<[string, string]>;
layerTitle: string;
layerDesc: string;
layers: Array<{ title: string; desc: string }>;
flowTitle: string;
flowDesc: string;
flowNote: string;
flow: Array<[string, string]>;
resourceTitle: string;
resourceEyebrow: string;
resourceDesc: string;
resources: Array<[string, string]>;
azureTitle: string;
azureDesc: string;
azure: Array<[string, string]>;
featureTitle: string;
featureEyebrow: string;
featurePanelEyebrow: string;
features: Array<{ title: string; desc: string }>;
ctaTitle: string;
ctaDesc: string;
contact: string;
}>;
const layerIcons = [Target, GitBranch, DatabaseZap, ShieldCheck];
const resourceIcons = [SquareKanban, BrainCircuit, Activity, FileCheck2, BadgeCheck, KeyRound];
const featureIcons = [LockKeyhole, Fingerprint, Boxes, Layers3];
export function SwarmPage({ lang }: { lang: Lang }) {
const t = copy[lang];
return (
<>
<section className="relative isolate overflow-hidden bg-[#111820] pt-28 text-white sm:pt-36">
<div className="absolute inset-0 -z-10 bg-[radial-gradient(circle_at_16%_18%,rgba(245,158,11,0.24),transparent_30%),radial-gradient(circle_at_80%_0%,rgba(20,184,166,0.22),transparent_34%),linear-gradient(135deg,#111820_0%,#182330_45%,#0c1117_100%)]" />
<div className="absolute inset-0 -z-10 opacity-[0.18] [background-image:linear-gradient(to_right,white_1px,transparent_1px),linear-gradient(to_bottom,white_1px,transparent_1px)] [background-size:44px_44px]" />
<div className="absolute left-1/2 top-20 -z-10 h-80 w-80 -translate-x-1/2 rounded-full border border-amber-200/20" />
<div className="mx-auto max-w-7xl px-4 pb-20 sm:px-6 sm:pb-28 lg:px-8">
<div className="grid gap-12 lg:grid-cols-[0.95fr_1.05fr] lg:items-center">
<div>
<div className="inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/8 px-4 py-2 text-sm font-semibold text-amber-100 shadow-2xl backdrop-blur">
<Sparkles className="h-4 w-4" />
{t.eyebrow}
</div>
<h1 className="mt-7 max-w-4xl text-5xl font-black leading-[0.94] tracking-[-0.06em] sm:text-7xl lg:text-8xl">
{t.heroTitle}
</h1>
<p className="mt-7 max-w-2xl text-lg leading-8 text-white/70 sm:text-xl">
{t.heroLead}
</p>
<div className="mt-9 flex flex-col gap-4 sm:flex-row">
<Button size="lg" className="h-12 rounded-full bg-amber-300 px-7 text-[#151a20] hover:bg-amber-200" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" className="h-12 rounded-full border-white/25 bg-white/5 px-7 text-white hover:bg-white hover:text-[#151a20]" asChild>
<a href={DOCS_URL} target="_blank" rel="noreferrer">
{t.secondary}
</a>
</Button>
</div>
<div className="mt-8 grid max-w-2xl gap-3 text-sm text-white/70 sm:grid-cols-2">
{t.proof.map((item) => (
<div key={item} className="flex items-center gap-2 rounded-full border border-white/10 bg-white/[0.04] px-4 py-2">
<span className="h-2 w-2 rounded-full bg-teal-300" />
{item}
</div>
))}
</div>
</div>
<div className="relative">
<div className="absolute -inset-6 rounded-[2.5rem] bg-amber-300/10 blur-2xl" />
<div className="relative overflow-hidden rounded-[2rem] border border-white/15 bg-[#0d1218]/90 p-5 shadow-2xl">
<div className="flex items-center justify-between border-b border-white/10 pb-4">
<div>
<p className="text-xs uppercase tracking-[0.3em] text-white/45">{t.cockpitMeta}</p>
<h2 className="mt-2 text-xl font-black">{t.cockpitTitle}</h2>
</div>
<Network className="h-7 w-7 text-teal-200" />
</div>
<div className="mt-5 rounded-3xl border border-amber-200/20 bg-amber-200/10 p-5">
<p className="text-xs font-bold uppercase tracking-[0.22em] text-amber-100/70">{t.cockpitGoal}</p>
<p className="mt-2 text-sm leading-6 text-amber-50/80">{t.cockpitGoalText}</p>
</div>
<div className="relative mt-5 grid gap-3 sm:grid-cols-2">
<div className="absolute left-1/2 top-0 hidden h-full w-px bg-gradient-to-b from-transparent via-white/15 to-transparent sm:block" />
{t.cockpitNodes.map(([role, work], index) => (
<div key={role} className="group rounded-3xl border border-white/10 bg-white/[0.045] p-4 transition-colors hover:border-teal-200/40">
<div className="flex items-center justify-between">
<p className="font-semibold">{role}</p>
<span className="rounded-full bg-white/10 px-2 py-1 text-[10px] font-bold text-white/55">
{String(index + 1).padStart(2, "0")}
</span>
</div>
<p className="mt-2 text-xs text-white/50">{work}</p>
</div>
))}
</div>
</div>
</div>
</div>
</div>
</section>
<section className="py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<SectionIntro title={t.layerTitle} desc={t.layerDesc} eyebrow={t.eyebrow} />
<div className="mt-14 grid gap-5 md:grid-cols-2 xl:grid-cols-4">
{t.layers.map((layer, index) => {
const Icon = layerIcons[index];
return (
<article key={layer.title} className="relative overflow-hidden rounded-[1.7rem] border border-border bg-card/70 p-6 shadow-sm">
<span className="absolute -right-5 -top-5 text-8xl font-black text-secondary/60">
{String(index + 1).padStart(2, "0")}
</span>
<div className="relative flex h-12 w-12 items-center justify-center rounded-2xl bg-foreground text-background">
<Icon className="h-6 w-6" />
</div>
<h3 className="relative mt-6 text-xl font-semibold">{layer.title}</h3>
<p className="relative mt-3 text-sm leading-7 text-muted-foreground">{layer.desc}</p>
</article>
);
})}
</div>
</div>
</section>
<section className="border-y border-border bg-card/30 py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="grid gap-12 lg:grid-cols-[0.85fr_1.15fr] lg:items-start">
<div>
<p className="text-sm font-bold uppercase tracking-widest text-primary">Swarm Run</p>
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.flowTitle}
</h2>
<p className="mt-5 text-muted-foreground">{t.flowDesc}</p>
<div className="mt-8 rounded-[1.7rem] border border-primary/20 bg-primary/10 p-6">
<div className="flex items-center gap-3">
<Workflow className="h-5 w-5 text-primary" />
<p className="font-semibold text-primary">Target - Task - Resource - Audit</p>
</div>
<p className="mt-3 text-sm leading-6 text-muted-foreground">
{t.flowNote}
</p>
</div>
</div>
<div className="relative rounded-[2rem] border border-border bg-background/80 p-4 shadow-sm">
<div className="absolute left-9 top-12 hidden h-[calc(100%-6rem)] w-px bg-border sm:block" />
<div className="grid gap-3">
{t.flow.map(([title, desc], index) => (
<div key={title} className="relative grid gap-3 rounded-[1.4rem] border border-border bg-card/70 p-5 sm:grid-cols-[auto_1fr]">
<div className="z-10 flex h-11 w-11 items-center justify-center rounded-2xl bg-foreground text-sm font-black text-background">
{index + 1}
</div>
<div>
<h3 className="font-semibold">{title}</h3>
<p className="mt-1 text-sm leading-6 text-muted-foreground">{desc}</p>
</div>
</div>
))}
</div>
</div>
</div>
</div>
</section>
<section className="py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<SectionIntro title={t.resourceTitle} desc={t.resourceDesc} eyebrow={t.resourceEyebrow} />
<div className="mt-14 grid gap-5 sm:grid-cols-2 lg:grid-cols-3">
{t.resources.map(([title, desc], index) => {
const Icon = resourceIcons[index];
return (
<article key={title} className="group rounded-[1.7rem] border border-border bg-card/70 p-6 shadow-sm transition-all hover:-translate-y-1 hover:border-primary/40 hover:shadow-xl">
<div className="mb-5 flex h-12 w-12 items-center justify-center rounded-2xl bg-secondary text-primary transition-colors group-hover:bg-primary group-hover:text-primary-foreground">
<Icon className="h-6 w-6" />
</div>
<h3 className="text-lg font-semibold">{title}</h3>
<p className="mt-3 text-sm leading-7 text-muted-foreground">{desc}</p>
</article>
);
})}
</div>
</div>
</section>
<section className="relative overflow-hidden border-y border-border bg-[#111820] py-20 text-white sm:py-28">
<div className="absolute inset-0 opacity-20 [background-image:linear-gradient(135deg,white_1px,transparent_1px)] [background-size:30px_30px]" />
<div className="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="grid gap-12 lg:grid-cols-[0.8fr_1.2fr] lg:items-start">
<div>
<div className="inline-flex h-12 w-12 items-center justify-center rounded-2xl bg-teal-300 text-[#111820]">
<CloudCog className="h-6 w-6" />
</div>
<h2 className="mt-6 text-3xl font-black tracking-tight sm:text-5xl">{t.azureTitle}</h2>
<p className="mt-5 text-white/68">{t.azureDesc}</p>
</div>
<div className="grid gap-4 sm:grid-cols-2">
{t.azure.map(([title, desc]) => (
<article key={title} className="rounded-[1.5rem] border border-white/12 bg-white/[0.055] p-5 backdrop-blur">
<div className="mb-4 flex items-center gap-3">
<Cpu className="h-5 w-5 text-amber-200" />
<h3 className="font-semibold">{title}</h3>
</div>
<p className="text-sm leading-6 text-white/58">{desc}</p>
</article>
))}
</div>
</div>
</div>
</section>
<section className="py-20 sm:py-28">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div className="grid gap-12 lg:grid-cols-[0.95fr_1.05fr] lg:items-center">
<div className="rounded-[2rem] border border-border bg-card/60 p-5 shadow-sm">
<div className="rounded-[1.55rem] border border-border bg-background/80 p-5">
<div className="flex items-center justify-between">
<div>
<p className="text-xs font-bold uppercase tracking-[0.24em] text-primary">{t.featurePanelEyebrow}</p>
<h3 className="mt-2 text-2xl font-black">{t.featureTitle}</h3>
</div>
<Fingerprint className="h-7 w-7 text-primary" />
</div>
<div className="mt-6 space-y-3">
{t.features.map((feature, index) => {
const Icon = featureIcons[index];
return (
<div key={feature.title} className="flex gap-4 rounded-2xl border border-border bg-card/60 p-4">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-foreground text-background">
<Icon className="h-5 w-5" />
</div>
<div>
<h4 className="font-semibold">{feature.title}</h4>
<p className="mt-1 text-sm leading-6 text-muted-foreground">{feature.desc}</p>
</div>
</div>
);
})}
</div>
</div>
</div>
<div>
<p className="text-sm font-bold uppercase tracking-widest text-primary">{t.featureEyebrow}</p>
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{t.featureTitle}
</h2>
<p className="mt-5 text-muted-foreground">
{t.ctaDesc}
</p>
<div className="mt-8 grid gap-4 sm:grid-cols-2">
<Metric value="01" label={lang === "zh" ? "目标驱动执行" : "Goal-driven execution"} />
<Metric value="02" label={lang === "zh" ? "任务动态回流" : "Dynamic task backflow"} />
<Metric value="03" label={lang === "zh" ? "资源安全隔离" : "Safe resource isolation"} />
<Metric value="04" label={lang === "zh" ? "成果可验收" : "Reviewable artifacts"} />
</div>
</div>
</div>
</div>
</section>
<section className="border-t border-border bg-foreground py-20 text-background sm:py-28">
<div className="mx-auto max-w-7xl px-4 text-center sm:px-6 lg:px-8">
<h2 className="mx-auto max-w-3xl text-3xl font-black tracking-tight sm:text-5xl">
{t.ctaTitle}
</h2>
<p className="mx-auto mt-5 max-w-2xl text-lg text-background/70">
{t.ctaDesc}
</p>
<div className="mt-10 flex flex-col items-center justify-center gap-4 sm:flex-row">
<Button size="lg" className="h-12 rounded-full bg-primary px-7 text-primary-foreground hover:bg-primary/90" asChild>
<a href={MANAGER_URL} target="_blank" rel="noreferrer">
{t.primary}
<ArrowRight className="h-4 w-4" />
</a>
</Button>
<Button variant="outline" size="lg" className="h-12 rounded-full border-background/30 bg-transparent px-7 text-background hover:bg-background hover:text-foreground" asChild>
<a href={`mailto:${CONTACT_EMAIL}`}>
{t.contact}: {CONTACT_EMAIL}
</a>
</Button>
</div>
</div>
</section>
</>
);
}
function SectionIntro({
eyebrow,
title,
desc,
}: {
eyebrow: string;
title: string;
desc: string;
}) {
return (
<div className="mx-auto max-w-2xl text-center">
<p className="text-sm font-bold uppercase tracking-widest text-primary">
{eyebrow}
</p>
<h2 className="mt-4 text-3xl font-black tracking-tight sm:text-5xl">
{title}
</h2>
<p className="mt-4 leading-7 text-muted-foreground">{desc}</p>
</div>
);
}
function Metric({ value, label }: { value: string; label: string }) {
return (
<div className="rounded-[1.4rem] border border-border bg-card/70 p-5">
<p className="text-3xl font-black text-primary">{value}</p>
<p className="mt-2 text-sm font-semibold text-muted-foreground">{label}</p>
</div>
);
}
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -3,4 +3,4 @@
3:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
4:"$Sreact.suspense"
5:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - 团队软件交付智能体平台"}],["$","meta","1",{"name":"description","content":"让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。"}],["$","link","2",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/heicode-logo.svg","type":"image/svg+xml"}],["$","link","5",{"rel":"apple-touch-icon","href":"/heicode-logo.svg"}],["$","$L5","6",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"BUv3knTdB83UDDOz70cHX"}
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L5","6",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+2 -3
View File
@@ -2,6 +2,5 @@
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"zh-CN","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+2 -5
View File
@@ -1,5 +1,2 @@
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
:HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"NzUpS1JUFOTLnrxggrl90"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8a480f0b521d4e75-s.06d3mdzz5bre_.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7178b3e590c64307-s.11.cyxs5p-0z~.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/caa3a2e1cccd8315-s.p.16t1db8_9y2o~.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Fallback;src:local(Arial);ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.0%;size-adjust:104.76%}.geist_a7695b8e-module__Entzca__className{font-family:Geist,Geist Fallback;font-style:normal}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.0q3udbd2bu5yp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.0gw~uztddq1df.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_354fc78-module__zrY5Sa__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -4
View File
@@ -7,12 +7,11 @@
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
b:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
d:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"zh-CN","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],{},null,false,null]},null,false,"$@8"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L9",null,{"children":"$La"}],["$","div",null,{"hidden":true,"children":["$","$Lb",null,{"children":["$","$6",null,{"name":"Next.Metadata","children":"$Lc"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$d",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],{},null,false,null]},null,false,"$@8"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L9",null,{"children":"$La"}],["$","div",null,{"hidden":true,"children":["$","$Lb",null,{"children":["$","$6",null,{"name":"Next.Metadata","children":"$Lc"}]}]}],null]}],false]],"m":"$undefined","G":["$d",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
e:[]
8:"$We"
a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
f:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
7:null
c:[["$","title","0",{"children":"Heicode - 团队软件交付智能体平台"}],["$","meta","1",{"name":"description","content":"让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。"}],["$","link","2",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/heicode-logo.svg","type":"image/svg+xml"}],["$","link","5",{"rel":"apple-touch-icon","href":"/heicode-logo.svg"}],["$","$Lf","6",{}]]
c:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$Lf","6",{}]]
+3 -4
View File
@@ -7,12 +7,11 @@
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
b:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
d:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"zh-CN","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],{},null,false,null]},null,false,"$@8"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L9",null,{"children":"$La"}],["$","div",null,{"hidden":true,"children":["$","$Lb",null,{"children":["$","$6",null,{"name":"Next.Metadata","children":"$Lc"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$d",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","_not-found"],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:0:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L5",null,{"children":["$","$6",null,{"name":"Next.MetadataOutlet","children":"$@7"}]}]]}],{},null,false,null]},null,false,"$@8"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L9",null,{"children":"$La"}],["$","div",null,{"hidden":true,"children":["$","$Lb",null,{"children":["$","$6",null,{"name":"Next.Metadata","children":"$Lc"}]}]}],null]}],false]],"m":"$undefined","G":["$d",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
e:[]
8:"$We"
a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
f:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
7:null
c:[["$","title","0",{"children":"Heicode - 团队软件交付智能体平台"}],["$","meta","1",{"name":"description","content":"让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。"}],["$","link","2",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/heicode-logo.svg","type":"image/svg+xml"}],["$","link","5",{"rel":"apple-touch-icon","href":"/heicode-logo.svg"}],["$","$Lf","6",{}]]
c:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$Lf","6",{}]]
+1 -1
View File
@@ -3,4 +3,4 @@
3:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
4:"$Sreact.suspense"
5:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - 团队软件交付智能体平台"}],["$","meta","1",{"name":"description","content":"让团队能以可复述的方式回答「谁在何时对什么负责」「依据是什么」「如何回溯」。智能体适合承接标准化、可重复的环节,人机分工与审批边界由组织策略定义。"}],["$","link","2",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/heicode-logo.svg","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/heicode-logo.svg","type":"image/svg+xml"}],["$","link","5",{"rel":"apple-touch-icon","href":"/heicode-logo.svg"}],["$","$L5","6",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"BUv3knTdB83UDDOz70cHX"}
0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L5","6",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+2 -3
View File
@@ -2,6 +2,5 @@
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0x.pxwmy6tt~x.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/chunks/05e42yp.xktfx.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"zh-CN","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
@@ -1,5 +1,5 @@
1:"$Sreact.fragment"
2:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
3:"$Sreact.suspense"
0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"BUv3knTdB83UDDOz70cHX"}
0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
4:null
+1 -1
View File
@@ -2,4 +2,4 @@
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:[]
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"BUv3knTdB83UDDOz70cHX"}
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"NzUpS1JUFOTLnrxggrl90"}
+2 -3
View File
@@ -1,3 +1,2 @@
:HL["/_next/static/chunks/0x.pxwmy6tt~x.css","style"]
:HL["/_next/static/chunks/05e42yp.xktfx.css","style"]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"BUv3knTdB83UDDOz70cHX"}
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"NzUpS1JUFOTLnrxggrl90"}
File diff suppressed because one or more lines are too long
+15 -39
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
5:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
6:I[71226,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/0r9f3ppfgl6xt.js","/_next/static/chunks/00240s030m6we.js"],"default"]
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
a:"$Sreact.suspense"
d:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
f:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
11:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","launch"],"q":"","i":false,"f":[[["",{"children":["launch",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0r9f3ppfgl6xt.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/00240s030m6we.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
12:[]
c:"$W12"
7:{}
8:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
13:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
b:null
10:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L13","6",{}]]
+21
View File
@@ -0,0 +1,21 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
5:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
6:I[71226,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/0r9f3ppfgl6xt.js","/_next/static/chunks/00240s030m6we.js"],"default"]
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
a:"$Sreact.suspense"
d:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
f:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
11:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","launch"],"q":"","i":false,"f":[[["",{"children":["launch",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0r9f3ppfgl6xt.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/00240s030m6we.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
12:[]
c:"$W12"
7:{}
8:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
13:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
b:null
10:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L13","6",{}]]
+6
View File
@@ -0,0 +1,6 @@
1:"$Sreact.fragment"
2:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
3:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
4:"$Sreact.suspense"
5:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L5","6",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+6
View File
@@ -0,0 +1,6 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+2
View File
@@ -0,0 +1,2 @@
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"launch","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"NzUpS1JUFOTLnrxggrl90"}
@@ -0,0 +1,9 @@
1:"$Sreact.fragment"
2:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
3:I[71226,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/0r9f3ppfgl6xt.js","/_next/static/chunks/00240s030m6we.js"],"default"]
6:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
7:"$Sreact.suspense"
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/0r9f3ppfgl6xt.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/00240s030m6we.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
4:{}
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
8:null
+5
View File
@@ -0,0 +1,5 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:[]
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"NzUpS1JUFOTLnrxggrl90"}
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
5:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
6:I[98043,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/08qbitigdz5fc.js","/_next/static/chunks/0z69o1rtf_492.js"],"default"]
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
a:"$Sreact.suspense"
d:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
f:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
11:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","swarm"],"q":"","i":false,"f":[[["",{"children":["swarm",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/08qbitigdz5fc.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0z69o1rtf_492.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
12:[]
c:"$W12"
7:{}
8:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
13:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
b:null
10:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L13","6",{}]]
+21
View File
@@ -0,0 +1,21 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
5:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
6:I[98043,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/08qbitigdz5fc.js","/_next/static/chunks/0z69o1rtf_492.js"],"default"]
9:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
a:"$Sreact.suspense"
d:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
f:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
11:I[69701,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default",1]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"P":null,"c":["","swarm"],"q":"","i":false,"f":[[["",{"children":["swarm",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}],["$","$L4",null,{}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L5",null,{"Component":"$6","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@7","$@8"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/08qbitigdz5fc.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0z69o1rtf_492.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],{},null,false,null]},null,false,"$@c"]},null,false,null],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$a",null,{"name":"Next.Metadata","children":"$L10"}]}]}],null]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NzUpS1JUFOTLnrxggrl90"}
12:[]
c:"$W12"
7:{}
8:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
13:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
b:null
10:[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L13","6",{}]]
+6
View File
@@ -0,0 +1,6 @@
1:"$Sreact.fragment"
2:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ViewportBoundary"]
3:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"MetadataBoundary"]
4:"$Sreact.suspense"
5:I[39451,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"IconMark"]
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Heicode - From one idea to production software"}],["$","meta","1",{"name":"description","content":"Heicode organizes AI development teams, connects your code, documents, SK skills and cloud resources, and carries work from product design to production deployment."}],["$","link","2",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: light)"}],["$","link","3",{"rel":"icon","href":"/taiji-logo.png","media":"(prefers-color-scheme: dark)"}],["$","link","4",{"rel":"icon","href":"/taiji-logo.png","type":"image/png"}],["$","link","5",{"rel":"apple-touch-icon","href":"/taiji-logo.png"}],["$","$L5","6",{}]]}]}]}],null]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+6
View File
@@ -0,0 +1,6 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:I[52768,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"Analytics"]
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/07p8r-wmy40nr.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/16ug8_ttttewd.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0duodrajo5fcx.js","async":true}]],["$","html",null,{"lang":"en","className":"bg-background","children":["$","body",null,{"className":"font-sans antialiased","children":[["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}],["$","$L4",null,{}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
+2
View File
@@ -0,0 +1,2 @@
:HL["/_next/static/chunks/07p8r-wmy40nr.css","style"]
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"swarm","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"NzUpS1JUFOTLnrxggrl90"}
@@ -0,0 +1,9 @@
1:"$Sreact.fragment"
2:I[88844,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"ClientPageRoot"]
3:I[98043,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js","/_next/static/chunks/08qbitigdz5fc.js","/_next/static/chunks/0z69o1rtf_492.js"],"default"]
6:I[25078,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"OutletBoundary"]
7:"$Sreact.suspense"
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/08qbitigdz5fc.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0z69o1rtf_492.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"NzUpS1JUFOTLnrxggrl90"}
4:{}
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
8:null
+5
View File
@@ -0,0 +1,5 @@
1:"$Sreact.fragment"
2:I[60483,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
3:I[87929,["/_next/static/chunks/16ug8_ttttewd.js","/_next/static/chunks/0duodrajo5fcx.js"],"default"]
4:[]
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"NzUpS1JUFOTLnrxggrl90"}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

-1
View File
@@ -1 +0,0 @@
{"version":"0.2.1","notes":"Heicode 0.2.1","pub_date":"2026-05-17T10:00:00.000Z","platforms":{"windows-x86_64":{"signature":"","url":"https://heicodeblob.blob.core.windows.net/msi/desktop/0.2.1/HeiCode_0.2.1_x64_en-US.msi"},"darwin-aarch64":{"signature":"","url":"https://heicodeblob.blob.core.windows.net/msi/desktop/0.2.1/HeiCode_0.2.1_aarch64.dmg"}}}