Compare commits

...

2 Commits
v0.1.8 ... main

Author SHA1 Message Date
ywkj c5e1d0c88c fix: rerank top-N 10→5, 匹配 Feishu 列表展示
register-skill-release / register (push) Successful in 17s Details
2026-04-26 20:34:57 +08:00
ywkj eb8e7a7daf fix: 同步 auth-cli.ts 补充 clientConfig() 方法
register-skill-release / register (push) Successful in 19s Details
2026-04-26 20:15:08 +08:00
3 changed files with 27 additions and 6 deletions

View File

@ -67,7 +67,7 @@ bun dist/run.js <command> [args] [--dry-run]
## 结果展示格式
`rerank.results`(优先)或 `searchBody.data.items.item` 格式化为 markdown 表格,**每页 5 行**
`rerank.results`(优先)或 `searchBody.data.items.item` 格式化为 markdown 表格,**最多 5 条**
| # | 商品名称 | 价格 | 销量 | 链接 |
|---|----------|------|------|------|

View File

@ -55,6 +55,20 @@ export interface SessionResponse {
hookToken?: string;
}
export interface ClientConfig {
clientId: string;
name: string;
status: string;
metadata: {
provider?: {
api_key?: string;
base_url?: string;
model?: string;
};
[key: string]: unknown;
};
}
export interface SkillClientOptions {
apiBase?: string;
dryRun?: boolean;
@ -91,6 +105,13 @@ export class SkillClient {
return JSON.parse(runCli('session'));
}
async clientConfig(): Promise<ClientConfig> {
if (this.dryRun) {
return { clientId: '<dry-run>', name: '<dry-run>', status: 'active', metadata: {} };
}
return JSON.parse(runCli('client-config'));
}
async get(urlPath: string): Promise<ApiResponse> {
return this.request('GET', urlPath);
}

View File

@ -212,7 +212,7 @@ async function runDetectBestAndSearch(args: string[], dryRun: boolean): Promise<
// Otherwise fall back to the keyword-intersection rerank.
if (!dryRun && postFilter && !postFilter.error && postFilter.keptCount > 0) {
const items: SearchItem[] = (searchResult.searchBody as any)?.data?.items?.item ?? [];
const sorted = [...items].sort((a, b) => (b.sales ?? 0) - (a.sales ?? 0)).slice(0, 10);
const sorted = [...items].sort((a, b) => (b.sales ?? 0) - (a.sales ?? 0)).slice(0, 5);
rerankResult = {
source: 'post-filter',
results: sorted,
@ -225,7 +225,7 @@ async function runDetectBestAndSearch(args: string[], dryRun: boolean): Promise<
rerankResult = await runRerank([
`--image-results=${tmpFile}`,
`--description=${best.description}`,
'--top=10',
'--top=5',
], dryRun);
} catch (e: any) {
rerankResult = { error: e.message };
@ -360,7 +360,7 @@ async function runDetectAndSearch(args: string[], dryRun: boolean): Promise<Outp
// Otherwise fall back to the keyword-intersection rerank.
if (!dryRun && postFilter && !postFilter.error && postFilter.keptCount > 0) {
const items: SearchItem[] = (searchResult.searchBody as any)?.data?.items?.item ?? [];
const sorted = [...items].sort((a, b) => (b.sales ?? 0) - (a.sales ?? 0)).slice(0, 10);
const sorted = [...items].sort((a, b) => (b.sales ?? 0) - (a.sales ?? 0)).slice(0, 5);
rerankResult = {
source: 'post-filter',
results: sorted,
@ -373,7 +373,7 @@ async function runDetectAndSearch(args: string[], dryRun: boolean): Promise<Outp
rerankResult = await runRerank([
`--image-results=${tmpFile}`,
`--description=${best.description}`,
'--top=10',
'--top=5',
], dryRun);
} catch (e: any) {
rerankResult = { error: e.message };
@ -493,7 +493,7 @@ async function runRerank(args: string[], dryRun: boolean): Promise<OutputResult>
const positionals = args.filter((a) => !a.startsWith('--'));
const imageResultsArg = getFlag(args, '--image-results') || positionals[0];
const keywordArg = getFlag(args, '--keyword') || positionals[1];
const topN = parseInt(getFlag(args, '--top') || '10', 10);
const topN = parseInt(getFlag(args, '--top') || '5', 10);
const description = getFlag(args, '--description') || '';