bot-forge 1.0.1

Rust CLI for installing agent skills and developer tools from configurable forms.
Documentation
<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#f6f9fd" />
    <meta name="description" content="bot-forge:把首次环境安装的复杂度交给系统" />
    <title>BotForge 1.0.1 · 标准化开发环境交付</title>
    <link rel="stylesheet" href="./styles.css" />
    <link rel="stylesheet" href="./layer-story.css" />
    <link rel="stylesheet" href="./forge.css" />
  </head>
  <body>
    <header class="site-header">
      <a class="brand" href="#top" aria-label="bot-forge 首页"><span class="brand-dot"></span><strong>BOT-FORGE</strong><span>1.0.1</span></a>
      <nav aria-label="三幕叙事"><a href="#start">简单开始</a><a href="#behind">工程化执行</a><a href="#team-value">价值回归</a></nav>
      <a class="header-cta" href="#start">开始了解 <span>↘</span></a>
    </header>
    <div class="scroll-progress" aria-hidden="true"><span id="scrollProgress"></span></div>

    <aside class="layer-rail" id="layerRail" aria-label="系统后台工作导航">
      <div class="layer-rail-head"><span>ONE INSTALL / 04—11</span><strong>工程化执行</strong></div>
      <nav>
        <a href="#behind" data-layer="overview"><i>04</i><span>工程链入口<small>从简单路径展开后台</small></span></a>
        <a href="#stage-select" data-layer="select"><i>05</i><span>目标展开<small>形成唯一执行计划</small></span></a>
        <a href="#stage-acquire" data-layer="acquire"><i>06</i><span>获取阶段<small>缓存优先,来源适配</small></span></a>
        <a href="#stage-dag" data-layer="dag"><i>07</i><span>依赖图<small>固化顺序,持续补位</small></span></a>
        <a href="#stage-resource" data-layer="resource"><i>08</i><span>资源准入<small>按阶段安全重叠</small></span></a>
        <a href="#stage-optimize" data-layer="optimize"><i>09</i><span>动态分配<small>兼顾吞吐与尾速</small></span></a>
        <a href="#stage-feedback" data-layer="feedback"><i>10</i><span>运行反馈<small>进度与等待可解释</small></span></a>
        <a href="#stage-complete" data-layer="complete"><i>11</i><span>验证提交<small>定义完成与恢复</small></span></a>
      </nav>
      <div class="layer-rail-status"><span></span><b id="railStatus">等待安装开始</b></div>
    </aside>

    <main id="top">
      <section class="hero" id="start">
        <div class="grid-lines" aria-hidden="true"></div><div class="hero-index">01 / 13</div>
        <div class="hero-copy reveal visible"><p class="eyebrow">RUST ENVIRONMENT DELIVERY</p><h1>让开发环境<br><em>标准化交付</em></h1><p class="hero-lead">bot-forge 把分散的工具、平台规则与安装方式组织成统一的环境交付流程,让初学者与团队共享同一套工程事实。</p><a class="hero-link" href="#customers"><span>进入系统设计</span><b>↓</b></a></div>
        <div class="hero-command"><span>终端</span><code>bot-forge</code><p>选择环境级别 · 确认 · 等待完成</p></div>
      </section>

      <section class="section customers" id="customers">
        <header class="section-heading reveal"><div><span class="section-no">02</span><p class="act-label">第一幕 · 简单开始</p><p class="eyebrow">USERS &amp; FIRST INSTALL</p></div><h2>两类用户,<br>一套环境标准</h2><p>使用深度不同,但都需要明确、稳定、可以重复交付的开发环境。</p></header>
        <div class="persona-grid">
          <article class="persona-card reveal">
            <div class="persona-visual learner-visual" aria-hidden="true"><div class="desk-screen"><span></span><span></span><span></span><b>&gt; bot-forge</b></div><div class="desk-person"><i></i><b></b></div><div class="question-marks"><span>?</span><span>?</span></div></div>
            <div class="persona-copy"><span class="row-no">01 · PERSONAL FIRST INSTALL</span><h3>初学者</h3><p>第一次准备 Rust 环境,不熟悉工具组合、平台差异和隐含前置,也难以从长日志判断失败位置。</p><div class="persona-facts"><span><small>入口</small><b>选择环境级别</b></span><span><small>过程</small><b>缺口与进度清楚</b></span><span><small>结果</small><b>失败有下一步</b></span></div></div>
          </article>
          <article class="persona-card manager-card reveal">
            <div class="persona-visual manager-visual" aria-hidden="true"><div class="standard-node">环境标准</div><div class="team-lines"><i></i><i></i><i></i></div><div class="machine-row"><span><b>macOS</b><small>Member A</small></span><span><b>Linux</b><small>Member B</small></span><span><b>Windows</b><small>Member C</small></span></div></div>
            <div class="persona-copy"><span class="row-no">02 · TEAM ENVIRONMENT DELIVERY</span><h3>团队管理者</h3><p>需要统一工具、版本与平台规则,避免成员遗漏组件、脚本分叉,以及“我的机器可以运行”的环境漂移。</p><div class="persona-facts"><span><small>定义</small><b>一套环境标准</b></span><span><small>执行</small><b>按平台自动适配</b></span><span><small>结果</small><b>每台机器可检查</b></span></div></div>
          </article>
        </div>
        <div class="audience-contract reveal" aria-label="个人与团队共享同一环境事实">
          <div class="contract-inputs"><small>两种使用方式</small><div class="contract-entry"><span>个人交互</span><b>选择环境级别</b></div><div class="contract-entry"><span>团队自动化</span><b>显式配置与授权</b></div></div>
          <div class="contract-merge" aria-hidden="true"><i></i><b>→</b></div>
          <div class="contract-core"><small>AUTHORITATIVE ENVIRONMENT MODEL</small><strong>统一环境模型</strong><p>工具 · 版本 · 平台规则 · 依赖关系</p></div>
          <i>→</i>
          <div class="contract-result"><span>一致交付</span><b>同一计划 · 同一执行语义 · 可检查状态</b></div>
        </div>
      </section>

      <section class="section experience-page" id="experience">
        <header class="section-heading reveal"><div><span class="section-no">03</span><p class="act-label">第一幕 · 简单开始</p><p class="eyebrow">INTERACTION / FIRST INSTALL</p></div><h2>一条命令,<br>收敛首次安装</h2><p>入口保持简单,工具缺口、安装范围与执行进度逐步披露。</p></header>
        <div class="command-stage reveal"><span>第一次使用</span><code>bot-forge</code></div>
        <div class="simple-steps compact-journey"><article><span>01</span><b>选择环境级别</b></article><i>→</i><article><span>02</span><b>查看工具缺口</b></article><i>→</i><article><span>03</span><b>确认安装</b></article><i>→</i><article><span>04</span><b>等待完成</b></article></div>
        <div class="first-run-visual reveal">
          <article class="launcher-mock"><header><span>01 · 选择目标</span><b>Install environment</b></header><div class="profile-menu"><span><i>1</i><b>Minimal</b><small>能编译</small></span><span class="selected"><i>2</i><b>Standard</b><small>能开发、能把关</small></span><span><i>3</i><b>Advanced</b><small>能深挖</small></span></div></article>
          <i class="visual-arrow">→</i>
          <article class="check-mock"><header><span>02 · 检测缺口</span><b>Standard environment</b></header><div class="check-groups"><p><strong>CORE TOOLCHAIN</strong><span><i>✓</i> rust-toolchain<small>installed</small></span></p><p><strong>DAILY DEVELOPMENT</strong><span><i>✓</i> rust-analyzer<small>installed</small></span></p><p><strong>QUALITY CHECKS</strong><span class="missing"><i>◉</i> cargo-nextest<small>to install</small></span><span class="missing"><i>◉</i> cargo-audit<small>to install</small></span></p></div></article>
          <i class="visual-arrow">→</i>
          <article class="confirm-mock"><header><span>03 · 明确授权</span><b>Ready to install</b></header><div class="confirm-count"><strong>2</strong><span>个缺失工具</span></div><div class="confirm-list"><span>平台规则已应用</span><span>必要前置已补齐</span><span>安装范围已确认</span></div><b class="confirm-button">确认并开始</b></article>
        </div>
        <div class="frontstage-note"><b>交互设计保证</b><span>用户只表达环境目标;平台差异、前置工具与执行顺序由系统展开。</span></div>
      </section>

      <section class="section iceberg-page section-dark" id="behind" data-layer-section="overview">
        <header class="section-heading reveal"><div><span class="section-no">04</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">FROM SIMPLE ENTRY TO ENGINEERED EXECUTION</p></div><h2>简洁入口,<br>连接完整工程链</h2><p>一次安装沿同一条执行链推进;用户只表达目标,系统逐步完成计划、获取、调度与提交。</p></header>
        <div class="execution-bridge">
          <div class="bridge-user"><span>用户路径</span><b>选择 Standard</b><i>→</i><b>确认安装</b><i>→</i><strong>得到可用环境</strong></div>
          <div class="bridge-transfer"><span>同一次安装向后台展开</span><i>↓</i></div>
          <div class="bridge-system"><article><span>01 · 计划</span><b>确定安装什么</b><p>平台识别 · 工具选择<br>依赖补齐 · 稳定顺序</p></article><article><span>02 · 获取</span><b>确定从哪里获得</b><p>缓存复用 · 八类来源<br>下载、构建与系统安装</p></article><article><span>03 · 执行</span><b>确定何时运行</b><p>依赖图 · 资源准入<br>动态分配 · 任务补位</p></article><article><span>04 · 提交</span><b>确定何时完成</b><p>结果验证 · 状态记录<br>入口切换 · 中断恢复</p></article></div>
          <div class="bridge-conclusion"><b>前台保持一条路径</b><span>后台复杂度按执行阶段被组织、约束并持续解释</span></div>
        </div>
      </section>

      <section class="section layer-chapter layer-interaction" id="stage-select" data-layer-section="select">
        <header class="layer-heading"><div class="layer-number">05</div><div><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">PLANNING / TARGET EXPANSION</p><h2>目标展开:形成唯一执行计划</h2><p>环境级别结合当前平台、工具关系与组织规则,展开为可直接执行的安装事实。</p></div></header>
        <div class="stage-context"><span>用户仍然只做</span><b>选择环境级别</b><i>系统正在处理</i><strong>平台、工具、依赖与顺序</strong></div>
        <div class="plan-compiler" aria-label="Standard 环境计划编译过程">
          <div class="compiler-input"><span>REQUEST</span><strong>Standard</strong><b>macOS · aarch64</b><p>用户只描述目标级别,不提交工具顺序。</p></div>
          <div class="compiler-core"><header><span>PLAN RESOLVER</span><b>将配置、平台和工具关系收敛为事实</b></header><ol><li><i>01</i><div><b>展开环境级别</b><p>合并 Core、Daily 与 Standard 的工具集合</p></div><strong>profile refs</strong></li><li><i>02</i><div><b>选择平台变体</b><p>应用 macOS/aarch64 规则,排除 Linux-only 项</p></div><strong>platform filter</strong></li><li><i>03</i><div><b>递归闭包依赖</b><p>覆盖率补入 LLVM;Miri 补入 Rust 源码</p></div><strong>dependency closure</strong></li><li><i>04</i><div><b>校验能力与冲突</b><p>解析 provides / conflicts,拒绝缺失安装后端</p></div><strong>validation</strong></li><li><i>05</i><div><b>编译依赖图</b><p>生成节点、依赖边、资源声明和稳定计划摘要</p></div><strong>plan hash</strong></li></ol></div>
          <div class="compiler-output"><span>EXECUTION PLAN</span><strong>唯一计划</strong><p><b>目标</b><i>macos-aarch64</i></p><p><b>组件</b><i>工具 + 传递依赖</i></p><p><b>节点</b><i>依赖边 + 资源声明</i></p><p><b>策略</b><i>网络 / 并发 / 内存</i></p><p><b>身份</b><i>config hash + plan hash</i></p></div>
        </div>
        <div class="plan-decision-trace"><header><span>计划编译结果</span><b>同一个 Standard 目标,在当前机器上形成四类确定事实</b></header><div><article><span>平台裁剪</span><b>Valgrind</b><p>macOS 自动排除,避免生成不可执行任务。</p></article><article><span>依赖补齐</span><b>cargo-llvm-cov</b><p>自动加入 llvm-tools-preview,形成完整覆盖率工具链。</p></article><article><span>组件归并</span><b>fmt / Clippy</b><p>随 Rust 工具链统一处理,避免重复安装与版本漂移。</p></article><article><span>执行约束</span><b>依赖边 + 资源声明</b><p>配置定义目标,依赖与资源共同约束实际执行。</p></article></div></div>
      </section>

      <section class="section layer-chapter section-dark" id="stage-acquire" data-layer-section="acquire">
        <header class="layer-heading"><div class="layer-number">06</div><div><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">ACQUISITION / CACHE &amp; SOURCES</p><h2>获取阶段:缓存优先,来源适配</h2><p>先验证可复用结果,再为剩余工具选择匹配的下载、构建与系统安装方式。</p></div></header>
        <div class="stage-context dark-context"><span>用户正在做</span><b>确认安装</b><i>系统正在处理</i><strong>缓存身份、来源差异与验证规则</strong></div>
        <div class="acquisition-pipeline" aria-label="工具获取策略与来源路由">
          <div class="artifact-gate"><header><span>CACHE DECISION</span><b>先验证完整工件,再决定获取范围</b></header><div class="fingerprint"><strong>完整构建身份</strong><p>工具 / 版本 / 来源 / revision · lock / toolchain / target<br>profile / features / 输出命令 / 构建环境</p></div><div class="gate-result"><article class="artifact-hit"><span>完整工件可用</span><b>跳过下载与编译</b><p>身份、命令集合与文件校验和全部通过,直接激活并检测。</p></article><article class="artifact-partial"><span>完整工件未命中</span><b>继续复用源码与编译结果</b><p>共享 Cargo 源码缓存并复用同身份 target,只获取或编译缺失部分。</p></article><article class="artifact-corrupt"><span>已有工件损坏</span><b>隔离后重新获取</b><p>损坏结果不计为命中;隔离后进入对应来源重新获取或构建。</p></article></div></div>
          <div class="backend-router"><header><span>BACKEND ROUTER</span><b>八类来源,统一完成判定</b></header><div class="source-family"><section><small>受管构建</small><b>Rust 源码</b><b>Git 源码 · 锁定提交</b><b>压缩包</b></section><section><small>工具链</small><b>Rust 工具链</b></section><section><small>生态包</small><b>npm</b></section><section><small>系统包</small><b>APT</b><b>Homebrew</b><b>winget</b></section></div><div class="backend-contract"><span>执行对应后端</span><i>→</i><span>采集执行结果</span><i>→</i><span>安装后检测 / 验证</span><i>→</i><strong>归一化完成状态</strong></div></div>
        </div>
        <div class="cargo-cache-note"><header><span>CARGO CACHE REUSE</span><b>未命中工件,不等于没有缓存</b></header><div class="cargo-reuse-layers"><article><span>第一层 · 跨工具共享</span><strong>索引 · crate · Git objects</strong><p>多个工具共享源码数据,只下载本机真正缺少的部分。</p></article><article><span>第二层 · 按构建身份隔离</span><strong>复用同身份 target</strong><p>继续使用已有编译中间结果,只重编发生变化的部分。</p></article></div></div>
        <div class="acquisition-examples"><header><span>不同获取方式,如何形成同一完成状态</span><b>命令成功不等于完成;安装后必须重新检测</b></header><div><p><strong>Cargo 构建</strong><span>示例 · cargo-nextest</span><i>工件 → 源码与 target → 缺失部分</i></p><p><strong>压缩包</strong><span>SHA-256 决定复用或下载</span><i>正确则复用;不符则隔离并重下</i></p><p><strong>Rustup 组件</strong><span>示例 · rust-analyzer</span><i>安装组件 → 查询状态 → 版本检测</i></p><p><strong>系统包</strong><span>示例 · ninja</span><i>平台包管理器 → 命令与版本检测</i></p></div></div>
      </section>

      <section class="section dag-page" id="stage-dag" data-layer-section="dag">
        <header class="section-heading reveal"><div><span class="section-no">07</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">PLANNING / DEPENDENCY DAG</p></div><h2>依赖图:固化顺序,持续补位</h2><p>前置关系决定何时就绪;关键路径决定就绪任务的出队顺序。</p></header>
        <div class="stage-context"><span>用户正在做</span><b>等待安装推进</b><i>系统正在处理</i><strong>依赖图、关键路径与任务补位</strong></div>
        <div class="scheduling-sequence" aria-label="就绪与调度三步"><span class="active"><i>01</i><b>谁已就绪?</b><small>依赖完成 · 进入候选队列</small></span><em>→</em><span><i>02</i><b>现在能否启动?</b><small>容量足够 · 目标不冲突</small></span><em>→</em><span><i>03</i><b>启动时分多少?</b><small>实时余量 · 历史负载</small></span></div>
        <div class="dag-graph" aria-label="Standard 环境依赖图示例">
          <div class="dag-column roots"><small>基础节点</small><span>rust-toolchain</span><span>llvm-toolchain</span><span>git</span><span>nodejs</span></div>
          <div class="dag-links"><i>→</i><i>→</i><i>→</i></div>
          <div class="dag-column tools"><small>就绪后展开</small><span>rust-analyzer<em>← rust-toolchain</em></span><span>cargo-nextest<em>← rust-toolchain</em></span><span>cargo-llvm-cov<em>← Rust + LLVM</em></span><span>bot-gate<em>← git</em></span><span>tsx<em>← nodejs</em></span></div>
          <div class="dag-links"><i>→</i><i>→</i><i>→</i></div>
          <div class="ready-queue"><header><small>READY QUEUE</small><b>就绪队列</b></header><section><span>进入条件</span><strong>所有前置节点已完成</strong><p>未满足依赖的任务继续等待,不进入候选队列。</p></section><section><span>出队顺序</span><strong>关键路径优先,独立分支补位</strong><p>不等待固定批次;有空位就选择下一项候选任务。</p></section><footer>节点完成 → 释放下游 → 新任务进入队列</footer></div>
        </div>
        <div class="dag-architecture" aria-label="依赖图算法与调度架构"><header><span>DAG SCHEDULER</span><b>从静态图到持续调度</b><p>同一份不可变执行计划,贯穿校验、排序与状态推进。</p></header><div><article><header><span>01 · 图编译</span><small>O(V + E)</small></header><strong>拓扑排序与环检测</strong><div class="algorithm-flow"><b>邻接表 + 入度</b><i>→</i><b>Kahn 算法</b><i>→</i><em>DAG / 环错误</em></div></article><article><header><span>02 · 优先级</span><small>反向动态规划</small></header><strong>关键路径估算</strong><div class="algorithm-flow"><b>历史耗时</b><i>+</i><b>最长下游路径</b><i>→</i><em>就绪优先级</em></div></article><article><header><span>03 · 状态推进</span><small>事件驱动</small></header><strong>完成即释放并补位</strong><div class="algorithm-flow"><b>完成事件</b><i>→</i><b>更新 / 传播</b><i>→</i><em>重新选择</em></div></article></div></div>
      </section>

      <section class="section resource-page section-dark" id="stage-resource" data-layer-section="resource">
        <header class="section-heading reveal"><div><span class="section-no">08</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">EXECUTION / RESOURCE ADMISSION</p></div><h2>资源准入:按阶段安全重叠</h2><p>容量预算与互斥目标同时满足才允许启动;阶段结束立即归还资源。</p></header>
        <div class="stage-context dark-context"><span>用户感受到</span><b>能同时做的工作不排队</b><i>系统正在处理</i><strong>整机预算、命名锁与阶段租约</strong></div>
        <div class="scheduling-sequence dark-sequence" aria-label="就绪与调度三步"><span class="passed"><i>01</i><b>谁已就绪?</b><small>依赖完成 · 进入候选队列</small></span><em>→</em><span class="active"><i>02</i><b>现在能否启动?</b><small>容量足够 · 目标不冲突</small></span><em>→</em><span><i>03</i><b>启动时分多少?</b><small>实时余量 · 历史负载</small></span></div>
        <div class="resource-dual"><article><span>容量资源</span><b>机器还承受得住吗?</b><p>CPU · 内存 · 网络 · 磁盘 · Cargo 外层与内层 jobs</p></article><article><span>修改冲突</span><b>任务会碰同一个目标吗?</b><p>包管理器 · 同名命令 · 工件 · 环境配置 · 状态清单</p></article></div>
        <div class="admission-board"><div class="admission-head"><span>候选任务</span><span>容量检查</span><span>命名冲突</span><span>准入结果</span></div><div><b>cargo-nextest · build</b><span class="ok">CPU 4 · MEM 2.1G</span><span class="ok">无冲突</span><strong class="go">运行</strong></div><div><b>bot-compass · download</b><span class="ok">NET 1</span><span class="ok">无冲突</span><strong class="go">运行</strong></div><div><b>cargo-deny · activate</b><span class="ok">DISK 可用</span><span class="wait">同名入口:cargo-deny 正在更新</span><strong class="hold">等待</strong></div></div>
        <div class="lease-flow"><span>缓存检查<small>工件锁</small></span><i>→</i><span>下载 / 构建<small>网络 · CPU · 内存 · 磁盘</small></span><i>→</i><span>保存<small>磁盘 · 工件锁</small></span><i>→</i><span>激活 / 验证<small>同名命令入口锁</small></span><i>→</i><span>记录<small>短状态锁</small></span></div>
        <div class="host-budget">多个 bot-forge 进程共享宿主预算;离开阶段立即释放不再需要的资源。</div>
      </section>

      <section class="section rebalance" id="stage-optimize" data-layer-section="optimize">
        <header class="section-heading reveal"><div><span class="section-no">09</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">EXECUTION / DYNAMIC ALLOCATION</p></div><h2>动态分配:兼顾吞吐与尾速</h2><p>实时余量与历史负载共同决定新任务的资源配额,运行中的构建保持稳定。</p></header>
        <div class="stage-context"><span>用户感受到</span><b>越到尾部也不拖沓</b><i>系统正在处理</i><strong>实时余量、内存历史与下一任务配额</strong></div>
        <div class="scheduling-sequence" aria-label="就绪与调度三步"><span class="passed"><i>01</i><b>谁已就绪?</b><small>依赖完成 · 进入候选队列</small></span><em>→</em><span class="passed"><i>02</i><b>现在能否启动?</b><small>容量足够 · 目标不冲突</small></span><em>→</em><span class="active"><i>03</i><b>启动时分多少?</b><small>实时余量 · 历史负载</small></span></div>
        <div class="allocation-ledger"><div class="allocation-scale"><span>宿主 CPU 预算</span><b>18 tokens</b><small>外层决定同时构建多少个工具;内层决定每个新构建获得多少编译 jobs</small><div class="allocation-legend"><i></i><b>每块代表一个 Cargo 构建,宽度代表内部编译 jobs</b><em></em><b>斜纹代表未分配余量</b></div></div><article><header><span>T0 · 队列充足</span><p><i>外层</i><b>4 个构建同时运行</b></p><p><i>内层</i><strong>每个构建 4 jobs</strong></p></header><div class="token-track"><i class="a" style="--n:4"><b>A</b><small>4 jobs</small></i><i class="b" style="--n:4"><b>B</b><small>4 jobs</small></i><i class="c" style="--n:4"><b>C</b><small>4 jobs</small></i><i class="d" style="--n:4"><b>D</b><small>4 jobs</small></i><i class="free" style="--n:2"><b>余量</b><small>2</small></i></div><p>队列充足时优先提高外层吞吐,同时保留少量机动资源。</p></article><article><header><span>T1 · B 完成,E 补位</span><p><i>外层</i><b>仍有 4 个构建运行</b></p><p><i>内层</i><strong>E 启动时获得 6 jobs</strong></p></header><div class="token-track"><i class="a" style="--n:4"><b>A</b><small>4 jobs</small></i><i class="c" style="--n:4"><b>C</b><small>4 jobs</small></i><i class="d" style="--n:4"><b>D</b><small>4 jobs</small></i><i class="e" style="--n:6"><b>E</b><small>6 jobs</small></i></div><p>A / C / D 保持原值;释放的 4 tokens 与原有余量 2 交给新任务 E。</p></article><article><header><span>T2 · 进入尾部</span><p><i>外层</i><b>只启动 F 一个构建</b></p><p><i>内层</i><strong>F 启动时获得 18 jobs</strong></p></header><div class="token-track"><i class="f" style="--n:18"><b>F</b><small>18 jobs</small></i></div><p>新任务按当时余量分配;运行中的构建不调整、不杀掉、不重启。</p></article></div>
        <div class="adaptive-memory"><header><span>资源估算链</span><b>为下一任务计算可用配额</b></header><div><span>检测可用内存</span><i>→</i><span>查询同类构建峰值</span><i>→</i><span>计算下一任务配额</span><i>→</i><strong>历史不可用时采用保守默认值</strong></div></div>
        <div class="allocation-boundary"><header><span>配额生效边界</span><b>重新计算只作用于新启动任务</b></header><div><article><span>NEW TASK</span><b>新启动任务</b><p>使用最新余量重新计算;尾部任务可以获得更多 jobs。</p></article><article><span>RUNNING TASK</span><b>运行中任务</b><p>保持启动时配额,不调整、不杀掉、不重启。</p></article></div></div>
      </section>

      <section class="section feedback-page" id="stage-feedback" data-layer-section="feedback">
        <header class="section-heading reveal"><div><span class="section-no">10</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">FEEDBACK / HUMAN &amp; MACHINE</p></div><h2>运行反馈:进度与等待可解释</h2><p>同一执行事实投影为终端进度和机器事件,不因呈现方式改变运行状态。</p></header>
        <div class="stage-context"><span>用户正在做</span><b>等待安装完成</b><i>系统持续提供</i><strong>总进度、逐项进度与资源等待原因</strong></div>
        <div class="feedback-grid"><div class="progress-sample"><header><span>TERMINAL PROGRESS</span><b>用户看到的实时进度</b></header><div class="progress-summary"><strong>4 运行中</strong><span>7 已完成</span><em>3 等待中</em></div><p class="running"><b>cargo-deny</b><i>10s</i><em>编译中 · 4 jobs</em></p><p class="waiting"><b>bot-compass</b><i>10s</i><em>等待内存 · 1.2s</em></p><p class="verifying"><b>rust-analyzer</b><i>8s</i><em>检测已安装命令</em></p><p class="waiting"><b>tsx</b><i>6s</i><em>等待 npm 包管理器锁</em></p></div><div class="event-sample"><header><span>MACHINE EVENTS</span><b>自动化获得同一组事实</b></header><p><b>task.started</b><span>任务启动</span><code>tool · stage · jobs</code></p><p><b>task.waiting</b><span>资源等待</span><code>resource · waited_ms</code></p><p><b>task.progress</b><span>进度更新</span><code>message · elapsed_ms</code></p><p><b>task.finished</b><span>验证完成</span><code>verified · artifact</code></p></div></div>
        <div class="wait-explainer"><article><span>看到 Waiting</span><b>不是“卡住”</b><p>明确显示正在等待内存、包管理器锁或依赖完成。</p></article><article><span>暂无命令输出</span><b>不等于没有进展</b><p>系统仍持续更新阶段、耗时和资源占用。</p></article><article><span>同一事实源</span><b>终端与 JSON 一致</b><p>团队自动化无需解析为人类设计的动画文本。</p></article></div>
        <div class="feedback-contract" aria-label="同一运行事实分别表达为终端反馈与机器事件"><header><span>反馈语义</span><b>同一事实,两种表达</b></header><div class="feedback-facts"><span>当前阶段</span><span>已用时间</span><span>等待原因</span><span>资源配额</span><span>最终结果</span></div><i>→</i><div class="feedback-consumers"><article><span>TERMINAL</span><b>用户判断任务是否仍在推进</b></article><article><span>EVENT STREAM</span><b>自动化消费有序的结构化状态</b></article></div></div>
      </section>

      <section class="section complete-page layer-blue-page section-dark" id="stage-complete" data-layer-section="complete">
        <header class="section-heading reveal"><div><span class="section-no">11</span><p class="act-label">第二幕 · 工程化执行</p><p class="eyebrow">VERIFY / COMMIT / RESUME</p></div><h2>安装完成:可用结果与中断恢复</h2><p>命令执行结束不等于交付完成;系统验证最终结果,也保留再次运行时能够继续使用的工作。</p></header>
        <div class="completion-definition" aria-label="安装完成的四个条件"><header><span>完成判定</span><b>四个条件全部成立,才向用户报告安装完成</b></header><div><article><i>01</i><strong>工具通过检测</strong><p>版本、文件和健康检查符合要求</p></article><article><i>02</i><strong>结果妥善保存</strong><p>合格文件进入受管位置</p></article><article><i>03</i><strong>命令已经可用</strong><p>用户入口安全指向新工具</p></article><article><i>04</i><strong>完成状态已记录</strong><p>下次运行能够识别当前结果</p></article></div></div>
        <div class="interruption-question" aria-label="安装中断场景"><div><span>如果此时中断</span><b>再次运行 bot-forge,会不会从头安装?</b></div><strong>不会</strong><p>系统以机器上仍然存在且验证有效的结果为起点,只继续尚未完成的部分。</p></div>
        <div class="resume-cases" aria-label="四种中断恢复情况"><header><span>中断后机器上已有</span><span>因此不必重做</span><span>下一步只需要</span></header><article><strong>已下载源码与部分编译结果</strong><p>重复下载和已经完成的编译</p><b>下载缺失内容,继续构建</b></article><article><strong>已经验证通过的完整工具</strong><p>下载与构建</p><b>启用命令并完成检测</b></article><article><strong>损坏工件,但源码与编译缓存合格</strong><p>仍然有效的获取和编译工作</p><b>隔离损坏内容,补建必要部分</b></article><article><strong>正确命令已经可以运行</strong><p>再次切换命令入口</p><b>确认结果,只补完成记录</b></article></div>
        <div class="resume-conclusion"><span>恢复原则</span><b>已经完成且仍然有效的工作不重做;系统只补齐从当前状态到“真正完成”之间的缺口。</b></div>
      </section>

      <section class="section team-page benchmark-result-page" id="team-value">
        <header class="section-heading reveal"><div><span class="section-no">12</span><p class="act-label">第三幕 · 价值回归</p><p class="eyebrow">LOCAL INSTALLATION BENCHMARK</p></div><h2>工程化调度,<br>转化为更短等待</h2><p>在同一台机器、同一工具集合与相互隔离的空 Cargo 缓存下,对比 bot-forge 与严格串行安装。</p></header>
        <div class="benchmark-result" aria-label="bot-forge 与严格串行安装耗时对比">
          <article class="benchmark-verdict">
            <span>本机首轮实测</span>
            <strong>1.386<small>×</small></strong>
            <h3>整体安装更快</h3>
            <p>节省 <b>110.76 秒</b>,总等待时间降低 <b>27.8%</b>。</p>
          </article>
          <div class="benchmark-bars">
            <header><span>端到端墙钟时间</span><b>越短越好</b></header>
            <article class="benchmark-bar forge-bar"><div><span>bot-forge</span><small>并发与动态调度</small></div><i><b></b></i><strong>287.31<small>s</small></strong></article>
            <article class="benchmark-bar serial-bar"><div><span>严格串行</span><small>单次一个 Cargo 构建</small></div><i><b></b></i><strong>398.07<small>s</small></strong></article>
            <footer><span>0</span><i></i><span>100s</span><i></i><span>200s</span><i></i><span>300s</span><i></i><span>400s</span></footer>
          </div>
        </div>
        <div class="benchmark-contract" aria-label="公平对比条件">
          <header><span>对比边界</span><b>除执行策略外,其余条件保持一致</b></header>
          <div><article><span>机器</span><strong>18 个逻辑 CPU</strong></article><article><span>工具链</span><strong>Rust / Cargo 1.89.0</strong></article><article><span>软件源</span><strong>rsproxy</strong></article><article><span>缓存</span><strong>每组全新、相互隔离</strong></article><article><span>结果</span><strong>11 项全部验证通过</strong></article></div>
        </div>
        <div class="benchmark-memory" aria-label="峰值内存对比">
          <header><span>资源代价</span><b>进程树峰值 RSS</b></header>
          <article class="memory-forge"><span>bot-forge</span><i><b></b></i><strong>4.30 <small>GiB</small></strong></article>
          <article class="memory-serial"><span>严格串行</span><i><b></b></i><strong>3.89 <small>GiB</small></strong></article>
          <p><b>+0.41 GiB / +10.5%</b><span>以更高的并发峰值,换取 110.76 秒等待时间缩短。</span></p>
        </div>
        <div class="benchmark-workload"><span>相同交付目标</span><div><b>rustfmt</b><b>Clippy</b><b>llvm-tools-preview</b><b>cargo-expand</b><b>cargo-nextest</b><b>cargo-audit</b><b>cargo-deny</b><b>cargo-geiger</b><b>cargo-llvm-cov</b><b>bot-gate</b><b>bot-compass</b></div></div>
        <div class="benchmark-conclusion"><span>同样的交付结果</span><i>→</i><b>依赖就绪即补位,多个构建并行推进,释放的资源继续交给后续任务。</b></div>
        <p class="benchmark-source">3 项当前工具链检测 + 8 项空缓存安装 · 2026-08-05 单轮本机实测,正式结论建议采用多轮中位数</p>
      </section>

      <section class="closing section-dark">
        <div class="closing-copy"><div><p class="act-label">第三幕 · 价值回归</p><p class="eyebrow">13 · DEVELOPMENT ENVIRONMENT DELIVERY</p></div><div><h2>一次选择,<br>形成可交付的开发环境</h2><p>用户表达目标,bot-forge 负责规划、获取、调度、验证与恢复。</p></div></div>
        <div class="closing-command"><span>第一次安装开发环境</span><code>bot-forge</code></div>
        <div class="closing-values"><article><span>01</span><h3>简单</h3><p>不用研究工具清单,也不用先记忆子命令。</p></article><article><span>02</span><h3>高效</h3><p>独立任务并行,空闲资源动态交给后续构建。</p></article><article><span>03</span><h3>可靠</h3><p>验证后才完成,中断以后可以继续。</p></article></div>
        <div class="closing-statement">复杂度由系统内化,环境标准由个人与团队共同复用。</div>
        <footer><span>BOT-FORGE · SIMPLE IN FRONT · POWERFUL BEHIND</span><a href="#top">回到顶部 ↑</a></footer>
      </section>
    </main>
    <script src="./app.js"></script>
  </body>
</html>