diff --git a/apps/desktop/src/main/pi/agent-service.ts b/apps/desktop/src/main/pi/agent-service.ts index 3b206fe..a0b6b5a 100644 --- a/apps/desktop/src/main/pi/agent-service.ts +++ b/apps/desktop/src/main/pi/agent-service.ts @@ -17,7 +17,6 @@ import { type SessionInfo } from '@earendil-works/pi-coding-agent' import { ApprovalService, createApprovalExtension } from './approval' -import { demoTools, TOOLS_REQUIRING_APPROVAL } from '../tools/demo-tools' import { browserTools } from '../tools/browser-tools' import type { AgentUiEvent, @@ -49,7 +48,10 @@ import type { const DELTA_FLUSH_MS = 40 /** SDK 注册的自定义工具名(用量卡片中与内置「系统工具」分开统计) */ -const CUSTOM_TOOL_NAMES = new Set([...demoTools, ...browserTools].map((tool) => tool.name)) +const CUSTOM_TOOL_NAMES = new Set(browserTools.map((tool) => tool.name)) + +/** 需要人工审批的工具名单(高危内置工具;业务演示工具已随 demo-tools.ts 移除) */ +const TOOLS_REQUIRING_APPROVAL: ReadonlySet = new Set(['bash', 'write', 'edit']) /** * pi 会话运行时的主进程封装: @@ -289,7 +291,7 @@ export class AgentService { services, sessionManager, sessionStartEvent, - customTools: [...demoTools, ...browserTools] + customTools: browserTools }) return { ...result, services, diagnostics: services.diagnostics } } diff --git a/apps/desktop/src/main/tools/demo-tools.ts b/apps/desktop/src/main/tools/demo-tools.ts deleted file mode 100644 index b0913ec..0000000 --- a/apps/desktop/src/main/tools/demo-tools.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { defineTool } from '@earendil-works/pi-coding-agent' -import { Type } from '@earendil-works/pi-ai' - -/** - * 业务工具骨架(v0.4 演示版)。 - * - * 架构约定(docs/architecture.md D2):每个业务功能 = 独立模块, - * 同时供 Agent(defineTool)与手动模式(IPC 直调)使用。 - * 当前后端未设计,演示工具只返回本地构造数据; - * 真实实现将替换为「服务器 API 薄封装」,接口形态保持不变。 - */ - -/** 演示热点词库(后端就绪后替换为真实数据源) */ -const DEMO_HOTWORDS: Array<{ word: string; heat: number; trend: 'up' | 'down' | 'flat'; category: string }> = [ - { word: '保温杯车载', heat: 9200, trend: 'up', category: '家居日用' }, - { word: '宠物自动喂食器', heat: 8500, trend: 'up', category: '宠物用品' }, - { word: '桌面升降支架', heat: 7100, trend: 'flat', category: '数码配件' }, - { word: '硅胶折叠饭盒', heat: 6600, trend: 'down', category: '家居日用' }, - { word: 'LED 化妆镜带灯', heat: 6100, trend: 'up', category: '美妆个护' } -] - -export const hotwordLookup = defineTool({ - name: 'hotword_lookup', - label: '热点词查询(演示)', - description: - '查询店铺运营热点词。输入品类或关键词,返回相关热点词、热度与趋势。当前为演示数据源(后端未接入),返回结果仅用于验证链路。', - promptSnippet: 'hotword_lookup: 查询热点词(热度/趋势/品类)', - parameters: Type.Object({ - query: Type.String({ description: '品类或关键词,如"家居"、"宠物"' }), - limit: Type.Optional(Type.Number({ description: '返回条数,默认 5', default: 5 })) - }), - async execute(_toolCallId, params) { - const q = params.query.trim() - const limit = Math.max(1, Math.min(params.limit ?? 5, 20)) - const matched = DEMO_HOTWORDS.filter( - (h) => !q || h.word.includes(q) || h.category.includes(q) || q.includes(h.category.slice(0, 2)) - ).slice(0, limit) - const lines = - matched.length === 0 - ? ['(演示数据源中无匹配项;后端接入后将返回真实采集结果)'] - : matched.map((h) => `${h.word}|热度 ${h.heat}|趋势 ${h.trend === 'up' ? '↑上升' : h.trend === 'down' ? '↓回落' : '→持平'}|品类 ${h.category}`) - return { - content: [{ type: 'text', text: `热点词查询结果(演示数据源,query=${q ? `"${q}"` : '全部'}):\n${lines.join('\n')}` }], - details: { source: 'demo', matched: matched.length } - } - } -}) - -export const priceCheck = defineTool({ - name: 'price_check', - label: '核价(演示·需审批)', - description: - '对指定商品执行核价操作。核价属于涉及资金与平台规则的敏感操作,调用前必须获得用户审批。当前为演示实现,仅回显参数。', - promptSnippet: 'price_check: 商品核价(敏感操作,需用户审批)', - promptGuidelines: ['调用 price_check 前先用一句话向用户说明将要核价的商品与价格区间。'], - parameters: Type.Object({ - product_id: Type.String({ description: '商品 ID(如 Temu 商品编码)' }), - target_price: Type.Number({ description: '目标价格' }), - currency: Type.Optional(Type.String({ description: '币种,默认 CNY', default: 'CNY' })) - }), - async execute(_toolCallId, params) { - return { - content: [ - { - type: 'text', - text: `核价完成(演示):商品 ${params.product_id} 目标价 ${params.target_price} ${params.currency ?? 'CNY'}。真实实现将调用 CDP 操作店铺后台核价页并回读结果。` - } - ], - details: { demo: true, params } - } - } -}) - -/** 需要人工审批的工具名单(含高危内置工具) */ -export const TOOLS_REQUIRING_APPROVAL: ReadonlySet = new Set(['price_check', 'bash', 'write', 'edit']) - -export const demoTools = [hotwordLookup, priceCheck]