refactor: 移除演示业务工具 demo-tools(hotword_lookup / price_check)

This commit is contained in:
Rick Ye
2026-09-09 10:20:57 +08:00
parent bb0aedd27c
commit 2622487279
2 changed files with 5 additions and 80 deletions
+5 -3
View File
@@ -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<string>([...demoTools, ...browserTools].map((tool) => tool.name))
const CUSTOM_TOOL_NAMES = new Set<string>(browserTools.map((tool) => tool.name))
/** 需要人工审批的工具名单(高危内置工具;业务演示工具已随 demo-tools.ts 移除) */
const TOOLS_REQUIRING_APPROVAL: ReadonlySet<string> = 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 }
}
-77
View File
@@ -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<string> = new Set(['price_check', 'bash', 'write', 'edit'])
export const demoTools = [hotwordLookup, priceCheck]