diff --git a/apps/web/src/app/styles/console.css b/apps/web/src/app/styles/console.css index 5a6e513..32a4dc6 100644 --- a/apps/web/src/app/styles/console.css +++ b/apps/web/src/app/styles/console.css @@ -469,6 +469,11 @@ */ .g-page > * { flex-shrink: 0; } +/* 正文里的行内跳转:看着是链接、按钮语义(可聚焦、可键盘触发) */ +.g-link { border: 0; padding: 0; background: none; font: inherit; color: var(--brand); cursor: pointer; text-decoration: underline; text-underline-offset: 2px; } +.g-link:hover { color: var(--brand-deep); } +.g-link:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; border-radius: 3px; } + /* 蓝图因果链:四库节点卡以真箭头相连 —— 箭头编码真实依赖(流程包→活动→工具→数据),节点即入口 */ .g-chain { display: flex; align-items: stretch; gap: 0; margin-bottom: 14px; } .g-chain-node { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; padding: 14px 16px; background: var(--card); border: 1px solid var(--cline); border-radius: 13px; box-shadow: var(--cshadow); text-align: left; font: inherit; color: var(--ink); cursor: pointer; transition: border-color var(--t-fast), transform var(--t-fast), box-shadow var(--t-fast); } diff --git a/apps/web/src/features/gov-tool/internal/panel.tsx b/apps/web/src/features/gov-tool/internal/panel.tsx index de3724e..22c850d 100644 --- a/apps/web/src/features/gov-tool/internal/panel.tsx +++ b/apps/web/src/features/gov-tool/internal/panel.tsx @@ -2,12 +2,12 @@ * feature `gov-tool` —— 工具箱:**系统能对世界做什么**,一屏四段。 * * 功能工具 · 已注册的调用契约(读类自由调,写类登记意向) - * LLM 工具 · 模型实例(活动只见逻辑名,不触厂商与密钥) + * LLM 工具 · 大模型驱动的系统内通用工具(**不是模型**;模型在系统区绑) * 人类工具 · 工单两模式 + 对话卡三族(调人也是调工具,只是被调的是人) * 接入 · 导入自定义工具(与第一方同门两审)/ 连接 MCP * * 三类工具并列不是编排:它是「一件事能交给谁办」的全集 —— - * 交给系统(功能工具)、交给模型(LLM)、交给人(人类工具)。少列一类,活动就以为自己没得选。 + * 交给系统(功能工具)、交给模型(LLM 工具)、交给人(人类工具)。少列一类,活动就以为自己没得选。 * * 自 `~/coding/JCAI_PRD/governance/_components/Governance.tsx` 平移: * 类名(`g-*` + 色调 `t-*`)与文案沿用;设计台以**卡片**为基调(运营台才以列表为主)。 @@ -74,6 +74,51 @@ const HUMAN_TOOLS = [ }, ] as const; +/** + * LLM 工具目录 —— 系统内**由大模型驱动**的通用工具(不是模型本身)。 + * + * 模型是发动机,这些是装在发动机上的件:每一件都有明确的入、出与算账口径。 + * 它们不在工具目录里注册 —— 与人类工具一样,是基座给的能力,不是谁装上来的。 + * 跑在哪个模型上由系统区的四元绑定决定(活动只见逻辑名,不触厂商与密钥)。 + */ +const LLM_TOOLS = [ + { + name: '案例决断', + mode: 'loop-turn', + ico: 'rotate-ccw', + desc: '案例活动每一拍:读「当下可为 ∩ 目标所需」,从 调工具 / 调人 / 立监听 里选一个行动', + cost: '活动预算', + }, + { + name: '步内生成', + mode: 'flow-step', + ico: 'list-checks', + desc: '标准活动的 llm 步:模板 + 出参 schema → 结构化产出;出参必过 schema 校验,不合即不算数', + cost: '活动预算', + }, + { + name: '叙述性小结', + mode: 'system-use', + ico: 'file-text', + desc: '任务日志 → 200 字阶段小结,只陈述日志里有的事实、不推测', + cost: '系统账', + }, + { + name: '蒸馏归纳', + mode: 'system-use', + ico: 'layers', + desc: '终态封卷时从任务记忆归纳活动记忆条目:四层归位 + 证据链必挂', + cost: '系统账', + }, + { + name: '连通探针', + mode: 'probe', + ico: 'plug', + desc: '试一次端点与鉴权,回延迟 —— 绑完模型先探一下,别等活动跑起来才发现调不通', + cost: '系统账', + }, +] as const; + export function ToolsHome({ nav }: HomeProps) { const tools = useGovTools(); const llm = useGovLlm(); @@ -131,39 +176,40 @@ export function ToolsHome({ nav }: HomeProps) { )} - +
- {(llm.data?.instances ?? []).map((m) => ( - +
))} - {(llm.data?.instances ?? []).length === 0 && ( - 还没有绑定模型 —— 去系统区加一个实例,活动才有模型可用。 - )} + + 这些是工具,不是模型 —— 模型是它们跑在上面的发动机。 + 当前绑了 {(llm.data?.instances ?? []).length} 个模型实例( + {(llm.data?.instances ?? []).map((m) => m.name).join(' · ') || '尚未绑定'}); + 换厂商、换型号只改, + 这些工具与活动一行都不动。 +