skill-chef 0.3.1 → 0.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +42 -29
- package/dist/add/commands.d.ts +15 -0
- package/dist/add/commands.d.ts.map +1 -0
- package/dist/add/commands.js +22 -0
- package/dist/add/commands.js.map +1 -0
- package/dist/add/index.d.ts +11 -0
- package/dist/add/index.d.ts.map +1 -0
- package/dist/add/index.js +11 -0
- package/dist/add/index.js.map +1 -0
- package/dist/add/pages.d.ts +62 -0
- package/dist/add/pages.d.ts.map +1 -0
- package/dist/add/pages.js +362 -0
- package/dist/add/pages.js.map +1 -0
- package/dist/add/routes.d.ts +11 -0
- package/dist/add/routes.d.ts.map +1 -0
- package/dist/add/routes.js +29 -0
- package/dist/add/routes.js.map +1 -0
- package/dist/add/run-write.d.ts +37 -0
- package/dist/add/run-write.d.ts.map +1 -0
- package/dist/add/run-write.js +226 -0
- package/dist/add/run-write.js.map +1 -0
- package/dist/cli/cmd_read.js +48 -289
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/keys.d.ts +2 -1
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +49 -1
- package/dist/cli/keys.js.map +1 -1
- package/dist/cook/commands.d.ts +13 -0
- package/dist/cook/commands.d.ts.map +1 -0
- package/dist/cook/commands.js +21 -0
- package/dist/cook/commands.js.map +1 -0
- package/dist/cook/index.d.ts +10 -0
- package/dist/cook/index.d.ts.map +1 -0
- package/dist/cook/index.js +9 -0
- package/dist/cook/index.js.map +1 -0
- package/dist/cook/page-art.d.ts +18 -0
- package/dist/cook/page-art.d.ts.map +1 -0
- package/dist/cook/page-art.js +30 -0
- package/dist/cook/page-art.js.map +1 -0
- package/dist/cook/page-css.d.ts +9 -0
- package/dist/cook/page-css.d.ts.map +1 -0
- package/dist/cook/page-css.js +206 -0
- package/dist/cook/page-css.js.map +1 -0
- package/dist/cook/page-text.d.ts +28 -0
- package/dist/cook/page-text.d.ts.map +1 -0
- package/dist/cook/page-text.js +65 -0
- package/dist/cook/page-text.js.map +1 -0
- package/dist/cook/routes.d.ts +11 -0
- package/dist/cook/routes.d.ts.map +1 -0
- package/dist/cook/routes.js +35 -0
- package/dist/cook/routes.js.map +1 -0
- package/dist/cook/run.d.ts +79 -0
- package/dist/cook/run.d.ts.map +1 -0
- package/dist/cook/run.js +276 -0
- package/dist/cook/run.js.map +1 -0
- package/dist/data/commands.d.ts +11 -0
- package/dist/data/commands.d.ts.map +1 -0
- package/dist/data/commands.js +18 -0
- package/dist/data/commands.js.map +1 -0
- package/dist/data/index.d.ts +11 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +11 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/pages.d.ts +50 -0
- package/dist/data/pages.d.ts.map +1 -0
- package/dist/data/pages.js +226 -0
- package/dist/data/pages.js.map +1 -0
- package/dist/data/routes.d.ts +11 -0
- package/dist/data/routes.d.ts.map +1 -0
- package/dist/data/routes.js +17 -0
- package/dist/data/routes.js.map +1 -0
- package/dist/data/run-batch.d.ts +21 -0
- package/dist/data/run-batch.d.ts.map +1 -0
- package/dist/data/run-batch.js +123 -0
- package/dist/data/run-batch.js.map +1 -0
- package/dist/data/run-query.d.ts +14 -0
- package/dist/data/run-query.d.ts.map +1 -0
- package/dist/data/run-query.js +158 -0
- package/dist/data/run-query.js.map +1 -0
- package/dist/fetch/db.d.ts +11 -31
- package/dist/fetch/db.d.ts.map +1 -1
- package/dist/fetch/db.js +39 -328
- package/dist/fetch/db.js.map +1 -1
- package/dist/fetch/index.d.ts +7 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +9 -1
- package/dist/fetch/index.js.map +1 -1
- package/dist/fetch/schema.d.ts +7 -0
- package/dist/fetch/schema.d.ts.map +1 -0
- package/dist/fetch/schema.js +53 -0
- package/dist/fetch/schema.js.map +1 -0
- package/dist/help/lookup.d.ts.map +1 -1
- package/dist/help/lookup.js +20 -4
- package/dist/help/lookup.js.map +1 -1
- package/dist/help/sceneData.d.ts +8 -7
- package/dist/help/sceneData.d.ts.map +1 -1
- package/dist/help/sceneData.js +22 -21
- package/dist/help/sceneData.js.map +1 -1
- package/dist/history/commands.js +1 -1
- package/dist/history/index.d.ts +3 -2
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +3 -2
- package/dist/history/index.js.map +1 -1
- package/dist/history/page-css.d.ts +12 -0
- package/dist/history/page-css.d.ts.map +1 -0
- package/dist/history/page-css.js +208 -0
- package/dist/history/page-css.js.map +1 -0
- package/dist/history/pages.d.ts +77 -0
- package/dist/history/pages.d.ts.map +1 -0
- package/dist/history/pages.js +282 -0
- package/dist/history/pages.js.map +1 -0
- package/dist/history/routes.d.ts +4 -6
- package/dist/history/routes.d.ts.map +1 -1
- package/dist/history/routes.js +22 -16
- package/dist/history/routes.js.map +1 -1
- package/dist/history/run-query.d.ts +61 -0
- package/dist/history/run-query.d.ts.map +1 -0
- package/dist/history/run-query.js +130 -0
- package/dist/history/run-query.js.map +1 -0
- package/dist/history/run-record.d.ts +31 -0
- package/dist/history/run-record.d.ts.map +1 -0
- package/dist/history/run-record.js +85 -0
- package/dist/history/run-record.js.map +1 -0
- package/dist/history/validate.d.ts +22 -0
- package/dist/history/validate.d.ts.map +1 -0
- package/dist/history/validate.js +69 -0
- package/dist/history/validate.js.map +1 -0
- package/dist/policy/wakewords.d.ts +1 -1
- package/dist/policy/wakewords.d.ts.map +1 -1
- package/dist/policy/wakewords.js +23 -2
- package/dist/policy/wakewords.js.map +1 -1
- package/dist/relation/commands.d.ts +11 -0
- package/dist/relation/commands.d.ts.map +1 -0
- package/dist/relation/commands.js +26 -0
- package/dist/relation/commands.js.map +1 -0
- package/dist/relation/index.d.ts +11 -0
- package/dist/relation/index.d.ts.map +1 -0
- package/dist/relation/index.js +11 -0
- package/dist/relation/index.js.map +1 -0
- package/dist/relation/pages.d.ts +37 -0
- package/dist/relation/pages.d.ts.map +1 -0
- package/dist/relation/pages.js +224 -0
- package/dist/relation/pages.js.map +1 -0
- package/dist/relation/routes.d.ts +11 -0
- package/dist/relation/routes.d.ts.map +1 -0
- package/dist/relation/routes.js +29 -0
- package/dist/relation/routes.js.map +1 -0
- package/dist/relation/run-query.d.ts +10 -0
- package/dist/relation/run-query.d.ts.map +1 -0
- package/dist/relation/run-query.js +104 -0
- package/dist/relation/run-query.js.map +1 -0
- package/dist/relation/run-write.d.ts +13 -0
- package/dist/relation/run-write.d.ts.map +1 -0
- package/dist/relation/run-write.js +114 -0
- package/dist/relation/run-write.js.map +1 -0
- package/dist/relation/shapes.d.ts +8 -0
- package/dist/relation/shapes.d.ts.map +1 -0
- package/dist/relation/shapes.js +153 -0
- package/dist/relation/shapes.js.map +1 -0
- package/dist/relation/treeShapes.d.ts +23 -0
- package/dist/relation/treeShapes.d.ts.map +1 -0
- package/dist/relation/treeShapes.js +289 -0
- package/dist/relation/treeShapes.js.map +1 -0
- package/dist/render/copyArea.d.ts +67 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +146 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/envelope.d.ts.map +1 -1
- package/dist/render/envelope.js +4 -0
- package/dist/render/envelope.js.map +1 -1
- package/dist/render/index.d.ts +14 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +16 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/sceneBand.d.ts +36 -0
- package/dist/render/sceneBand.d.ts.map +1 -0
- package/dist/render/sceneBand.js +166 -0
- package/dist/render/sceneBand.js.map +1 -0
- package/dist/render/sceneRhythm.d.ts +6 -0
- package/dist/render/sceneRhythm.d.ts.map +1 -0
- package/dist/render/sceneRhythm.js +149 -0
- package/dist/render/sceneRhythm.js.map +1 -0
- package/dist/render/sceneShell.d.ts +17 -0
- package/dist/render/sceneShell.d.ts.map +1 -0
- package/dist/render/sceneShell.js +46 -0
- package/dist/render/sceneShell.js.map +1 -0
- package/dist/render/skin.d.ts +13 -0
- package/dist/render/skin.d.ts.map +1 -0
- package/dist/render/skin.js +282 -0
- package/dist/render/skin.js.map +1 -0
- package/dist/render/views.d.ts +1 -39
- package/dist/render/views.d.ts.map +1 -1
- package/dist/render/views.js +6 -56
- package/dist/render/views.js.map +1 -1
- package/dist/search/commands.d.ts +14 -0
- package/dist/search/commands.d.ts.map +1 -0
- package/dist/search/commands.js +22 -0
- package/dist/search/commands.js.map +1 -0
- package/dist/search/index.d.ts +9 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +9 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/routes.d.ts +19 -0
- package/dist/search/routes.d.ts.map +1 -0
- package/dist/search/routes.js +91 -0
- package/dist/search/routes.js.map +1 -0
- package/dist/search/run.d.ts +30 -0
- package/dist/search/run.d.ts.map +1 -0
- package/dist/search/run.js +157 -0
- package/dist/search/run.js.map +1 -0
- package/dist/setup/commands.d.ts +10 -0
- package/dist/setup/commands.d.ts.map +1 -0
- package/dist/setup/commands.js +17 -0
- package/dist/setup/commands.js.map +1 -0
- package/dist/setup/index.d.ts +6 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +6 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/pages.d.ts +19 -0
- package/dist/setup/pages.d.ts.map +1 -0
- package/dist/setup/pages.js +163 -0
- package/dist/setup/pages.js.map +1 -0
- package/dist/setup/routes.d.ts +9 -0
- package/dist/setup/routes.d.ts.map +1 -0
- package/dist/setup/routes.js +15 -0
- package/dist/setup/routes.js.map +1 -0
- package/dist/setup/run-init.d.ts +11 -0
- package/dist/setup/run-init.d.ts.map +1 -0
- package/dist/setup/run-init.js +19 -0
- package/dist/setup/run-init.js.map +1 -0
- package/dist/shared/command-spec.d.ts +44 -0
- package/dist/shared/command-spec.d.ts.map +1 -0
- package/dist/shared/command-spec.js +15 -0
- package/dist/shared/command-spec.js.map +1 -0
- package/dist/shared/slots.d.ts +24 -0
- package/dist/shared/slots.d.ts.map +1 -0
- package/dist/shared/slots.js +63 -0
- package/dist/shared/slots.js.map +1 -0
- package/dist/shopping/commands.d.ts +13 -0
- package/dist/shopping/commands.d.ts.map +1 -0
- package/dist/shopping/commands.js +21 -0
- package/dist/shopping/commands.js.map +1 -0
- package/dist/shopping/index.d.ts +10 -0
- package/dist/shopping/index.d.ts.map +1 -0
- package/dist/shopping/index.js +10 -0
- package/dist/shopping/index.js.map +1 -0
- package/dist/shopping/pages.d.ts +22 -0
- package/dist/shopping/pages.d.ts.map +1 -0
- package/dist/shopping/pages.js +170 -0
- package/dist/shopping/pages.js.map +1 -0
- package/dist/shopping/routes.d.ts +11 -0
- package/dist/shopping/routes.d.ts.map +1 -0
- package/dist/shopping/routes.js +35 -0
- package/dist/shopping/routes.js.map +1 -0
- package/dist/shopping/run.d.ts +28 -0
- package/dist/shopping/run.d.ts.map +1 -0
- package/dist/shopping/run.js +122 -0
- package/dist/shopping/run.js.map +1 -0
- package/dist/triggers/chef-scenes.d.ts +3 -2
- package/dist/triggers/chef-scenes.d.ts.map +1 -1
- package/dist/triggers/chef-scenes.js +16 -15
- package/dist/triggers/chef-scenes.js.map +1 -1
- package/dist/update/commands.d.ts +12 -0
- package/dist/update/commands.d.ts.map +1 -0
- package/dist/update/commands.js +11 -0
- package/dist/update/commands.js.map +1 -0
- package/dist/update/index.d.ts +9 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/update/index.js.map +1 -0
- package/dist/update/routes.d.ts +14 -0
- package/dist/update/routes.d.ts.map +1 -0
- package/dist/update/routes.js +38 -0
- package/dist/update/routes.js.map +1 -0
- package/dist/update/run-write.d.ts +19 -0
- package/dist/update/run-write.d.ts.map +1 -0
- package/dist/update/run-write.js +309 -0
- package/dist/update/run-write.js.map +1 -0
- package/dist/view/commands.d.ts +14 -0
- package/dist/view/commands.d.ts.map +1 -0
- package/dist/view/commands.js +22 -0
- package/dist/view/commands.js.map +1 -0
- package/dist/view/index.d.ts +9 -0
- package/dist/view/index.d.ts.map +1 -0
- package/dist/view/index.js +9 -0
- package/dist/view/index.js.map +1 -0
- package/dist/view/page.d.ts +25 -0
- package/dist/view/page.d.ts.map +1 -0
- package/dist/view/page.js +306 -0
- package/dist/view/page.js.map +1 -0
- package/dist/view/pageCss.d.ts +8 -0
- package/dist/view/pageCss.d.ts.map +1 -0
- package/dist/view/pageCss.js +327 -0
- package/dist/view/pageCss.js.map +1 -0
- package/dist/view/pageSection.d.ts +21 -0
- package/dist/view/pageSection.d.ts.map +1 -0
- package/dist/view/pageSection.js +59 -0
- package/dist/view/pageSection.js.map +1 -0
- package/dist/view/routes.d.ts +11 -0
- package/dist/view/routes.d.ts.map +1 -0
- package/dist/view/routes.js +53 -0
- package/dist/view/routes.js.map +1 -0
- package/dist/view/run.d.ts +17 -0
- package/dist/view/run.d.ts.map +1 -0
- package/dist/view/run.js +93 -0
- package/dist/view/run.js.map +1 -0
- package/package.json +3 -3
package/dist/render/views.js
CHANGED
|
@@ -4,70 +4,20 @@ export function toRecipeItem(r) {
|
|
|
4
4
|
servings: r.servings, total_time_minutes: r.total_time_minutes, status: r.status,
|
|
5
5
|
};
|
|
6
6
|
}
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const steps = [...detail.steps].sort((a, b) => a.sequence - b.sequence).map((s) => ({ ...s }));
|
|
11
|
-
return {
|
|
12
|
-
item: {
|
|
13
|
-
...toRecipeItem(detail.recipe),
|
|
14
|
-
photo_url: detail.recipe.photo_url,
|
|
15
|
-
source: detail.recipe.source,
|
|
16
|
-
source_url: detail.recipe.source_url,
|
|
17
|
-
created_at: detail.recipe.created_at,
|
|
18
|
-
updated_at: detail.recipe.updated_at,
|
|
19
|
-
ingredients,
|
|
20
|
-
steps,
|
|
21
|
-
history: detail.history ?? { count: 0, avgRating: null },
|
|
22
|
-
// 营养占位:一期不估算,显式标记未估算,不编数字冒充。
|
|
23
|
-
nutrition: { estimated: false, note: '营养估算一期占位(以实际食材称量为准)' },
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// 搜菜/筛菜/全部:items + total + kind。
|
|
28
|
-
export function buildRecipeSearch(kind, items) {
|
|
29
|
-
return { items, total: items.length, kind };
|
|
30
|
-
}
|
|
31
|
-
// 写菜回执 receipt。
|
|
7
|
+
// 单菜全貌装配 `recipeDetail` 已搬入 `src/view/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
|
|
8
|
+
// 搜菜/筛菜/全部装配 `buildRecipeSearch` 已搬入 `src/search/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
|
|
9
|
+
// 写菜回执 receipt(update/add 两域共用,留守)。
|
|
32
10
|
export function buildRecipeReceipt(message) {
|
|
33
11
|
return { ok: true, message };
|
|
34
12
|
}
|
|
35
|
-
//
|
|
36
|
-
export function buildCookingRun(args) {
|
|
37
|
-
const base = args.recipe.servings > 0 ? args.recipe.servings : 2;
|
|
38
|
-
const servings = args.servings ?? base;
|
|
39
|
-
const factor = Math.round((servings / base) * 100) / 100;
|
|
40
|
-
const servingsNote = servings === base
|
|
41
|
-
? '按原份量 ' + base + ' 人份备料'
|
|
42
|
-
: '已按 ' + servings + ' 人份放大(原 ' + base + ' 人份,倍率 ' + factor + ',食材用量同倍)';
|
|
43
|
-
const h = args.history;
|
|
44
|
-
const historyHint = h && h.count > 0
|
|
45
|
-
? '做过 ' + h.count + ' 次' + (h.avgRating !== null && h.avgRating !== undefined ? ',平均评分 ' + h.avgRating : '') + ';本次做完请走 chef.history.record 记录'
|
|
46
|
-
: '还没做过;本次做完请走 chef.history.record 记录';
|
|
47
|
-
return { items: args.steps, total: args.steps.length, recipe: args.recipe, servingsNote, historyHint, steps: args.steps };
|
|
48
|
-
}
|
|
13
|
+
// 开做装配 `buildCookingRun` 已搬入 `src/cook/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
|
|
49
14
|
// 采购行复用 fetch ShoppingItem(跨菜合并行:name/quantity/unit/recipes),不另建影子类型。
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
const out = { items: args.items, total: args.items.length, recipes: args.recipes, excludeOptional: args.excludeOptional === true };
|
|
53
|
-
if (args.servings !== undefined)
|
|
54
|
-
out.servings = args.servings;
|
|
55
|
-
return out;
|
|
56
|
-
}
|
|
57
|
-
// 记做菜回执 receipt。
|
|
58
|
-
export function buildHistoryRecord(message) {
|
|
59
|
-
return { ok: true, message };
|
|
60
|
-
}
|
|
15
|
+
// 跨菜合并采购装配 `buildShopping` 已搬入 `src/shopping/run.ts`(本域独占;旧址由 `src/render/index.ts` 转出).
|
|
16
|
+
// 记做菜回执 `buildHistoryRecord` 已搬入 `src/history/run-record.ts`(本域独占;旧址由 `src/render/index.ts` 转出)。
|
|
61
17
|
// 查历史统一 list:timeline/stats/quality/backup 全作条目(单 key 单 shape=list)。
|
|
62
18
|
export function buildHistoryQuery(kind, items) {
|
|
63
19
|
return { items, total: items.length, kind };
|
|
64
20
|
}
|
|
65
|
-
export function toHistoryItem(h, recipeName) {
|
|
66
|
-
const out = { ...h };
|
|
67
|
-
if (recipeName !== undefined)
|
|
68
|
-
out.recipe_name = recipeName;
|
|
69
|
-
return out;
|
|
70
|
-
}
|
|
71
21
|
export function buildHelpItems(all, q) {
|
|
72
22
|
if (!q || !q.trim())
|
|
73
23
|
return { items: all, total: all.length };
|
package/dist/render/views.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,YAAY,CAAC,CAAY;IACvC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;QAC5E,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;KACjF,CAAC;AACJ,CAAC;AAYD,
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/render/views.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** 搜索筛选能力的命令声明(权威源:一条命令的事实只住这里)。
|
|
2
|
+
*
|
|
3
|
+
* 本能力即 HELP 一级分组「搜索筛选」。一条命令管一摊:
|
|
4
|
+
* · `chef.recipe.search`(查询命令):查看全部/搜索食谱/搜菜/查食材/筛选菜系/筛选食材/
|
|
5
|
+
* 筛选口味/筛选季节八句唤醒词都进这一条。
|
|
6
|
+
* 处理函数仍在老分派层(`src/cli/cmd_read.ts`),本票只立声明不搬实现——行为不变,
|
|
7
|
+
* 实现下沉由搜索筛选域端到端票接走(本文件不动,后续只加 run)。
|
|
8
|
+
*
|
|
9
|
+
* 标题与代表唤醒词取 HELP 现成说法,示例照 `packages/skill-chef/SKILL.md` 同命令行照抄。
|
|
10
|
+
*/
|
|
11
|
+
import type { CommandSpec } from '../shared/command-spec.js';
|
|
12
|
+
/** 搜索筛选能力的声明表:恰好导出一个声明数组(生成器只认这一个)。 */
|
|
13
|
+
export declare const SEARCH_COMMANDS: readonly CommandSpec[];
|
|
14
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/search/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,uCAAuC;AACvC,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EASjD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** 搜索筛选能力的命令声明(权威源:一条命令的事实只住这里)。
|
|
2
|
+
*
|
|
3
|
+
* 本能力即 HELP 一级分组「搜索筛选」。一条命令管一摊:
|
|
4
|
+
* · `chef.recipe.search`(查询命令):查看全部/搜索食谱/搜菜/查食材/筛选菜系/筛选食材/
|
|
5
|
+
* 筛选口味/筛选季节八句唤醒词都进这一条。
|
|
6
|
+
* 处理函数仍在老分派层(`src/cli/cmd_read.ts`),本票只立声明不搬实现——行为不变,
|
|
7
|
+
* 实现下沉由搜索筛选域端到端票接走(本文件不动,后续只加 run)。
|
|
8
|
+
*
|
|
9
|
+
* 标题与代表唤醒词取 HELP 现成说法,示例照 `packages/skill-chef/SKILL.md` 同命令行照抄。
|
|
10
|
+
*/
|
|
11
|
+
/** 搜索筛选能力的声明表:恰好导出一个声明数组(生成器只认这一个)。 */
|
|
12
|
+
export const SEARCH_COMMANDS = [
|
|
13
|
+
{
|
|
14
|
+
kind: 'read',
|
|
15
|
+
key: 'chef.recipe.search',
|
|
16
|
+
shape: 'list',
|
|
17
|
+
title: '搜索食谱',
|
|
18
|
+
wakeWord: '搜索食谱',
|
|
19
|
+
example: 'chef-cmd-read chef.recipe.search --params \'{"q":"排骨"}\'',
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/search/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,uCAAuC;AACvC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,oBAAoB;QACzB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,0DAA0D;KACpE;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** 搜索筛选能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
|
|
2
|
+
*
|
|
3
|
+
* 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
|
|
4
|
+
* 本票只立声明;外边要用搜索筛选能力的东西,只经这两个名字。
|
|
5
|
+
*/
|
|
6
|
+
export { SEARCH_COMMANDS } from './commands.js';
|
|
7
|
+
export { SEARCH_ROUTES } from './routes.js';
|
|
8
|
+
export { FILTER_KEYS, buildRecipeSearch, filterRecipes, runRecipeSearch, searchRecipes } from './run.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** 搜索筛选能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
|
|
2
|
+
*
|
|
3
|
+
* 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
|
|
4
|
+
* 本票只立声明;外边要用搜索筛选能力的东西,只经这两个名字。
|
|
5
|
+
*/
|
|
6
|
+
export { SEARCH_COMMANDS } from './commands.js';
|
|
7
|
+
export { SEARCH_ROUTES } from './routes.js';
|
|
8
|
+
export { FILTER_KEYS, buildRecipeSearch, filterRecipes, runRecipeSearch, searchRecipes } from './run.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** 搜索筛选能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
|
|
2
|
+
*
|
|
3
|
+
* 十二行对应 `src/policy/wakewords.ts` 里搜索筛选十二句唤醒词:查看全部/搜索食谱/搜菜/查食材/
|
|
4
|
+
* 筛选菜系/筛选食材/筛选口味/筛选季节(#771 落位)+ 筛选难度/筛选时间/筛选炊具/筛选状态
|
|
5
|
+
* (#841 补齐的四条老组名)。`order` 取唤醒词表 1-based 下标,本域不在表内连续:
|
|
6
|
+
* 12–19 是原表里那八句,38–41 是 #841 追加的四句(表尾按域归组,见 `wakewords.ts` 的段注)。
|
|
7
|
+
* 全表级顺序由唤醒词表定,本文件不另立顺序;`order` 是「我在表里第几行」,与表序互为判据
|
|
8
|
+
* (判据住 `t841-登记面对账.mjs`)。
|
|
9
|
+
* 命令行写法照本表各条的槽位示例(空库可跑的那一行)。
|
|
10
|
+
*
|
|
11
|
+
* #771:筛选食材→`ingredient`、筛选口味→`flavor`、筛选季节→`season`(各用显式键,不再经
|
|
12
|
+
* `filter` 绕 `cuisine`);筛选菜系仍走 `filter`(别名落 `cuisine`,与既有测试与 HELP 示例对齐)。
|
|
13
|
+
* #841:追加的四条同理各用显式键(`difficulty`/`time_max`/`cookware`/`status`),经 `filter` 绕道会让
|
|
14
|
+
* 「按炊具筛」打到菜系维度上。
|
|
15
|
+
*/
|
|
16
|
+
import type { RouteDecl } from '../shared/command-spec.js';
|
|
17
|
+
/** 搜索筛选能力的路由声明表:恰好导出一个声明数组。 */
|
|
18
|
+
export declare const SEARCH_ROUTES: readonly RouteDecl[];
|
|
19
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAyE7C,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** 搜索筛选能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
|
|
2
|
+
*
|
|
3
|
+
* 十二行对应 `src/policy/wakewords.ts` 里搜索筛选十二句唤醒词:查看全部/搜索食谱/搜菜/查食材/
|
|
4
|
+
* 筛选菜系/筛选食材/筛选口味/筛选季节(#771 落位)+ 筛选难度/筛选时间/筛选炊具/筛选状态
|
|
5
|
+
* (#841 补齐的四条老组名)。`order` 取唤醒词表 1-based 下标,本域不在表内连续:
|
|
6
|
+
* 12–19 是原表里那八句,38–41 是 #841 追加的四句(表尾按域归组,见 `wakewords.ts` 的段注)。
|
|
7
|
+
* 全表级顺序由唤醒词表定,本文件不另立顺序;`order` 是「我在表里第几行」,与表序互为判据
|
|
8
|
+
* (判据住 `t841-登记面对账.mjs`)。
|
|
9
|
+
* 命令行写法照本表各条的槽位示例(空库可跑的那一行)。
|
|
10
|
+
*
|
|
11
|
+
* #771:筛选食材→`ingredient`、筛选口味→`flavor`、筛选季节→`season`(各用显式键,不再经
|
|
12
|
+
* `filter` 绕 `cuisine`);筛选菜系仍走 `filter`(别名落 `cuisine`,与既有测试与 HELP 示例对齐)。
|
|
13
|
+
* #841:追加的四条同理各用显式键(`difficulty`/`time_max`/`cookware`/`status`),经 `filter` 绕道会让
|
|
14
|
+
* 「按炊具筛」打到菜系维度上。
|
|
15
|
+
*/
|
|
16
|
+
/** 搜索筛选能力的路由声明表:恰好导出一个声明数组。 */
|
|
17
|
+
export const SEARCH_ROUTES = [
|
|
18
|
+
{
|
|
19
|
+
order: 12,
|
|
20
|
+
wakeWord: '查看全部',
|
|
21
|
+
key: 'chef.recipe.search',
|
|
22
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"kind":"all"}\'',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
order: 13,
|
|
26
|
+
wakeWord: '搜索食谱',
|
|
27
|
+
key: 'chef.recipe.search',
|
|
28
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"q":"排骨"}\'',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
order: 14,
|
|
32
|
+
wakeWord: '搜菜',
|
|
33
|
+
key: 'chef.recipe.search',
|
|
34
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"q":"排骨"}\'',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
order: 15,
|
|
38
|
+
wakeWord: '查食材',
|
|
39
|
+
key: 'chef.recipe.search',
|
|
40
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"q":"排骨"}\'',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
order: 16,
|
|
44
|
+
wakeWord: '筛选菜系',
|
|
45
|
+
key: 'chef.recipe.search',
|
|
46
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"filter":"川菜"}\'',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
order: 17,
|
|
50
|
+
wakeWord: '筛选食材',
|
|
51
|
+
key: 'chef.recipe.search',
|
|
52
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"ingredient":"五花肉"}\'',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
order: 18,
|
|
56
|
+
wakeWord: '筛选口味',
|
|
57
|
+
key: 'chef.recipe.search',
|
|
58
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"flavor":"辣"}\'',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
order: 19,
|
|
62
|
+
wakeWord: '筛选季节',
|
|
63
|
+
key: 'chef.recipe.search',
|
|
64
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"season":"夏"}\'',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
order: 38,
|
|
68
|
+
wakeWord: '筛选难度',
|
|
69
|
+
key: 'chef.recipe.search',
|
|
70
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"difficulty":"简单"}\'',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
order: 39,
|
|
74
|
+
wakeWord: '筛选时间',
|
|
75
|
+
key: 'chef.recipe.search',
|
|
76
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"time_max":30}\'',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
order: 40,
|
|
80
|
+
wakeWord: '筛选炊具',
|
|
81
|
+
key: 'chef.recipe.search',
|
|
82
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"cookware":"炒锅"}\'',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
order: 41,
|
|
86
|
+
wakeWord: '筛选状态',
|
|
87
|
+
key: 'chef.recipe.search',
|
|
88
|
+
cli: 'chef-cmd-read chef.recipe.search --params \'{"status":"已做"}\'',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/search/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,8DAA8D;KACpE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,0DAA0D;KAChE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,0DAA0D;KAChE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,0DAA0D;KAChE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,+DAA+D;KACrE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,oEAAoE;KAC1E;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,8DAA8D;KACpE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,8DAA8D;KACpE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,mEAAmE;KACzE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,+DAA+D;KACrE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,iEAAiE;KACvE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,+DAA+D;KACrE;CACF,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** 搜索筛选能力的命令处理(`chef.recipe.search`)+ 本域独占的取数与视图装配。
|
|
2
|
+
*
|
|
3
|
+
* 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
|
|
4
|
+
* `searchRecipes`/`filterRecipes`(原 `src/fetch/db.ts`)与 `buildRecipeSearch`
|
|
5
|
+
* (原 `src/render/views.ts`)只被本域调用,按“写不出的留回域目录”搬入本文件;
|
|
6
|
+
* 旧址改转出(搬迁债务,见 `src/fetch/index.ts`/`src/render/index.ts`)。
|
|
7
|
+
*/
|
|
8
|
+
import type { ChefDb, RecipeRow } from '../fetch/db.js';
|
|
9
|
+
import type { RecipeItem } from '../render/views.js';
|
|
10
|
+
export declare const FILTER_KEYS: readonly ["cuisine", "season", "method", "flavor", "tag", "meal", "cookware", "difficulty", "status", "maxTime", "filter", "ingredient", "ingredient_exclude"];
|
|
11
|
+
/** 按关键词搜菜名/简介/食材名(空查询不返全量,直接拦)。原 `src/fetch/db.ts`,本域独占。 */
|
|
12
|
+
export declare function searchRecipes(h: ChefDb, kw: string): RecipeRow[];
|
|
13
|
+
/** 按维度过滤(维度表只读透传)。原 `src/fetch/db.ts`,本域独占。 */
|
|
14
|
+
export declare function filterRecipes(h: ChefDb, filters?: Record<string, unknown>): RecipeRow[];
|
|
15
|
+
export declare function buildRecipeSearch(kind: string, items: RecipeItem[]): {
|
|
16
|
+
items: RecipeItem[];
|
|
17
|
+
total: number;
|
|
18
|
+
kind: string;
|
|
19
|
+
};
|
|
20
|
+
/** 跑 `chef.recipe.search`:关键词搜/查全部/维度过滤三路(list 形)。空结果缺失阻断,不返空冒充。
|
|
21
|
+
*
|
|
22
|
+
* #771 口径(三条,老件 `scenes/搜索筛选.yaml` 为准):
|
|
23
|
+
* - 错字模糊匹配(search-2):精确命中直接返;精确无结果时去尾一字再查,命中则 `kind` 记
|
|
24
|
+
* `search-fuzzy:<原词>`(页面据此印纠错提示并直接展示结果),仍无结果则如实抛 `CHEF_EMPTY_RESULT`
|
|
25
|
+
* 走无结果口径。不建字典/拼音表(需建另立票,见本票遗留出口)。
|
|
26
|
+
* - 多维组合筛选(search-4):至多 3 维,超限直接拦(exit 2 并点名维数),不再静默取交集。
|
|
27
|
+
* - 排除食材(search-6):`ingredient_exclude`(别名 `exclude_ingredient`/`exclude`)走 NOT 条件。
|
|
28
|
+
*/
|
|
29
|
+
export declare function runRecipeSearch(handle: ChefDb, params: Record<string, unknown>): unknown;
|
|
30
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQrD,eAAO,MAAM,WAAW,gKAAiK,CAAC;AAU1L,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,CAOhE;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,SAAS,EAAE,CA0B3F;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEzH;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAiDxF"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/** 搜索筛选能力的命令处理(`chef.recipe.search`)+ 本域独占的取数与视图装配。
|
|
2
|
+
*
|
|
3
|
+
* 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
|
|
4
|
+
* `searchRecipes`/`filterRecipes`(原 `src/fetch/db.ts`)与 `buildRecipeSearch`
|
|
5
|
+
* (原 `src/render/views.ts`)只被本域调用,按“写不出的留回域目录”搬入本文件;
|
|
6
|
+
* 旧址改转出(搬迁债务,见 `src/fetch/index.ts`/`src/render/index.ts`)。
|
|
7
|
+
*/
|
|
8
|
+
import { ChefFetchError } from '../fetch/errors.js';
|
|
9
|
+
import { listRecipes, qAll, toRecipe } from '../fetch/db.js';
|
|
10
|
+
import { toRecipeItem } from '../render/views.js';
|
|
11
|
+
import { fail } from '../shared/slots.js';
|
|
12
|
+
// #43 F2 一期限制:FILTER 维度只读(recipe.search 透传过滤),本域独占(旧址 `cmd_read.ts`)。
|
|
13
|
+
// #771:补 `ingredient`(按食材含)与 `ingredient_exclude`(排除食材 NOT 条件,老件 search-6),
|
|
14
|
+
// 3 条路由错位至此收敛:筛选菜系走 `cuisine`(`filter` 别名保留兼容),筛选食材走 `ingredient`,
|
|
15
|
+
// 筛选口味走 `flavor`,筛选季节走 `season`(后三者经显式键,不再经 `filter` 绕 `cuisine`)。
|
|
16
|
+
export const FILTER_KEYS = ['cuisine', 'season', 'method', 'flavor', 'tag', 'meal', 'cookware', 'difficulty', 'status', 'maxTime', 'filter', 'ingredient', 'ingredient_exclude'];
|
|
17
|
+
/** 过滤维度的**别名**键(老件 `scenes/搜索筛选.yaml` 的词面):`time_max`/`time` → `maxTime`。
|
|
18
|
+
*
|
|
19
|
+
* #841 修:这两个别名原先在「一个维度都没给」那道预检**之后**才被认(下面 113–114 行的归一),
|
|
20
|
+
* 而那道预检只点名 `FILTER_KEYS` ⇒ 只给 `time_max` 会被判成「没给过滤条件」exit 2,
|
|
21
|
+
* 归一那两行成了走不到的死代码(`filter_time_quick` 那张卡一直因此打不通)。别名属**同一维度**,
|
|
22
|
+
* 故与 `FILTER_KEYS` 一起参与预检,归一换算仍在下面一处。 */
|
|
23
|
+
const FILTER_ALIAS_KEYS = ['time_max', 'time'];
|
|
24
|
+
/** 按关键词搜菜名/简介/食材名(空查询不返全量,直接拦)。原 `src/fetch/db.ts`,本域独占。 */
|
|
25
|
+
export function searchRecipes(h, kw) {
|
|
26
|
+
if (typeof kw !== 'string' || kw.trim().length === 0) {
|
|
27
|
+
throw new ChefFetchError('CHEF_BAD_QUERY', '搜索须给关键词(空查询不返全量)');
|
|
28
|
+
}
|
|
29
|
+
const k = '%' + kw.trim() + '%';
|
|
30
|
+
const rows = qAll(h, "SELECT DISTINCT r.* FROM recipes r LEFT JOIN ingredients i ON i.recipe_id = r.id WHERE (r.name LIKE ? OR r.description LIKE ? OR i.name LIKE ?) AND r.status != '已废弃' ORDER BY r.name ASC", [k, k, k]);
|
|
31
|
+
return rows.map(toRecipe);
|
|
32
|
+
}
|
|
33
|
+
/** 按维度过滤(维度表只读透传)。原 `src/fetch/db.ts`,本域独占。 */
|
|
34
|
+
export function filterRecipes(h, filters = {}) {
|
|
35
|
+
const conds = ['1=1'];
|
|
36
|
+
const params = [];
|
|
37
|
+
if (filters.status !== undefined && filters.status !== '') {
|
|
38
|
+
conds.push('r.status = ?');
|
|
39
|
+
params.push(String(filters.status));
|
|
40
|
+
}
|
|
41
|
+
else
|
|
42
|
+
conds.push("r.status != '已废弃'");
|
|
43
|
+
if (filters.difficulty !== undefined && filters.difficulty !== '') {
|
|
44
|
+
conds.push('r.difficulty = ?');
|
|
45
|
+
params.push(String(filters.difficulty));
|
|
46
|
+
}
|
|
47
|
+
if (filters.maxTime !== undefined && filters.maxTime !== '') {
|
|
48
|
+
conds.push('r.total_time_minutes <= ?');
|
|
49
|
+
params.push(Number(filters.maxTime));
|
|
50
|
+
}
|
|
51
|
+
const exists = (table, col, val) => {
|
|
52
|
+
conds.push('EXISTS (SELECT 1 FROM ' + table + ' t WHERE t.recipe_id = r.id AND t.' + col + ' = ?)');
|
|
53
|
+
params.push(String(val));
|
|
54
|
+
};
|
|
55
|
+
if (filters.cuisine !== undefined && filters.cuisine !== '')
|
|
56
|
+
exists('recipe_categories', 'cuisine_type', filters.cuisine);
|
|
57
|
+
if (filters.season !== undefined && filters.season !== '')
|
|
58
|
+
exists('recipe_seasons', 'season', filters.season);
|
|
59
|
+
if (filters.method !== undefined && filters.method !== '')
|
|
60
|
+
exists('recipe_cooking_methods', 'method', filters.method);
|
|
61
|
+
if (filters.flavor !== undefined && filters.flavor !== '')
|
|
62
|
+
exists('recipe_flavors', 'flavor', filters.flavor);
|
|
63
|
+
if (filters.tag !== undefined && filters.tag !== '')
|
|
64
|
+
exists('recipe_diet_tags', 'tag', filters.tag);
|
|
65
|
+
if (filters.meal !== undefined && filters.meal !== '')
|
|
66
|
+
exists('recipe_meal_types', 'meal_type', filters.meal);
|
|
67
|
+
if (filters.cookware !== undefined && filters.cookware !== '')
|
|
68
|
+
exists('cookware', 'name', filters.cookware);
|
|
69
|
+
// #771:按食材含(老件 search-5:列出含该食材的菜)与排除食材(老件 search-6:NOT 条件查询)。
|
|
70
|
+
if (filters.ingredient !== undefined && filters.ingredient !== '')
|
|
71
|
+
exists('ingredients', 'name', filters.ingredient);
|
|
72
|
+
if (filters.ingredient_exclude !== undefined && filters.ingredient_exclude !== '') {
|
|
73
|
+
conds.push('NOT EXISTS (SELECT 1 FROM ingredients t WHERE t.recipe_id = r.id AND t.name = ?)');
|
|
74
|
+
params.push(String(filters.ingredient_exclude));
|
|
75
|
+
}
|
|
76
|
+
const rows = qAll(h, 'SELECT DISTINCT r.* FROM recipes r WHERE ' + conds.join(' AND ') + ' ORDER BY r.name ASC', params);
|
|
77
|
+
return rows.map(toRecipe);
|
|
78
|
+
}
|
|
79
|
+
// 搜菜/筛菜/全部:items + total + kind。原 `src/render/views.ts`,本域独占。
|
|
80
|
+
export function buildRecipeSearch(kind, items) {
|
|
81
|
+
return { items, total: items.length, kind };
|
|
82
|
+
}
|
|
83
|
+
/** 跑 `chef.recipe.search`:关键词搜/查全部/维度过滤三路(list 形)。空结果缺失阻断,不返空冒充。
|
|
84
|
+
*
|
|
85
|
+
* #771 口径(三条,老件 `scenes/搜索筛选.yaml` 为准):
|
|
86
|
+
* - 错字模糊匹配(search-2):精确命中直接返;精确无结果时去尾一字再查,命中则 `kind` 记
|
|
87
|
+
* `search-fuzzy:<原词>`(页面据此印纠错提示并直接展示结果),仍无结果则如实抛 `CHEF_EMPTY_RESULT`
|
|
88
|
+
* 走无结果口径。不建字典/拼音表(需建另立票,见本票遗留出口)。
|
|
89
|
+
* - 多维组合筛选(search-4):至多 3 维,超限直接拦(exit 2 并点名维数),不再静默取交集。
|
|
90
|
+
* - 排除食材(search-6):`ingredient_exclude`(别名 `exclude_ingredient`/`exclude`)走 NOT 条件。
|
|
91
|
+
*/
|
|
92
|
+
export function runRecipeSearch(handle, params) {
|
|
93
|
+
const q = params.q;
|
|
94
|
+
let rows;
|
|
95
|
+
let kind;
|
|
96
|
+
if (typeof q === 'string' && q.trim()) {
|
|
97
|
+
const kw = q.trim();
|
|
98
|
+
const exact = searchRecipes(handle, kw);
|
|
99
|
+
if (exact.length) {
|
|
100
|
+
rows = exact;
|
|
101
|
+
kind = 'search:' + kw;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const short = kw.slice(0, -1);
|
|
105
|
+
if (short.length >= 2) {
|
|
106
|
+
const fb = searchRecipes(handle, short);
|
|
107
|
+
if (fb.length) {
|
|
108
|
+
rows = fb;
|
|
109
|
+
kind = 'search-fuzzy:' + kw;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
throw new ChefFetchError('CHEF_EMPTY_RESULT', '搜菜无结果(缺失阻断,不返空冒充)');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new ChefFetchError('CHEF_EMPTY_RESULT', '搜菜无结果(缺失阻断,不返空冒充)');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (params.kind === 'all') {
|
|
121
|
+
rows = listRecipes(handle);
|
|
122
|
+
kind = 'all';
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const present = [...FILTER_KEYS, ...FILTER_ALIAS_KEYS].filter((k) => params[k] !== undefined && params[k] !== '');
|
|
126
|
+
if (!present.length)
|
|
127
|
+
fail(2, 'search 须给 q、kind=all,或过滤条件(cuisine/season/method/flavor/tag/meal/cookware/difficulty/status/maxTime/filter/ingredient/ingredient_exclude,别名 time_max/time)');
|
|
128
|
+
const f = {};
|
|
129
|
+
for (const k of ['cuisine', 'season', 'method', 'flavor', 'tag', 'meal', 'cookware', 'difficulty', 'status', 'maxTime', 'ingredient', 'ingredient_exclude']) {
|
|
130
|
+
const v = params[k];
|
|
131
|
+
if (v !== undefined && v !== '')
|
|
132
|
+
f[k] = typeof v === 'string' ? v.trim() : v;
|
|
133
|
+
}
|
|
134
|
+
// 别名:filter=通用筛选(川菜类示例按菜系走,与 HELP 示例对齐,筛选菜系仍走 cuisine);
|
|
135
|
+
// time_max/time=最大用时别名;exclude_ingredient/exclude=排除食材别名(老件 search-6「不吃/不要/忌」)。
|
|
136
|
+
if (f.cuisine === undefined && typeof params.filter === 'string' && params.filter.trim())
|
|
137
|
+
f.cuisine = params.filter.trim();
|
|
138
|
+
if (f.maxTime === undefined && params.time_max !== undefined && params.time_max !== '')
|
|
139
|
+
f.maxTime = params.time_max;
|
|
140
|
+
if (f.maxTime === undefined && params.time !== undefined && params.time !== '')
|
|
141
|
+
f.maxTime = params.time;
|
|
142
|
+
if (f.ingredient_exclude === undefined && params.exclude_ingredient !== undefined && params.exclude_ingredient !== '')
|
|
143
|
+
f.ingredient_exclude = params.exclude_ingredient;
|
|
144
|
+
if (f.ingredient_exclude === undefined && params.exclude !== undefined && params.exclude !== '')
|
|
145
|
+
f.ingredient_exclude = params.exclude;
|
|
146
|
+
if (!Object.keys(f).length)
|
|
147
|
+
fail(2, 'search 过滤条件为空(须给 cuisine/season/method/flavor/tag/meal/cookware/difficulty/status/maxTime/filter/ingredient/ingredient_exclude 之一)');
|
|
148
|
+
if (Object.keys(f).length > 3)
|
|
149
|
+
fail(2, '组合筛选至多 3 维(老件 search-4):本次 ' + Object.keys(f).length + ' 维(' + Object.keys(f).sort().join('、') + ')');
|
|
150
|
+
rows = filterRecipes(handle, f);
|
|
151
|
+
kind = 'filter:' + Object.keys(f).sort().join(',');
|
|
152
|
+
}
|
|
153
|
+
if (!rows.length)
|
|
154
|
+
throw new ChefFetchError('CHEF_EMPTY_RESULT', '搜菜无结果(缺失阻断,不返空冒充)');
|
|
155
|
+
return buildRecipeSearch(kind, rows.map(toRecipeItem));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/search/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** 开始使用能力的命令声明(权威源:一条命令的事实只住这里)。
|
|
2
|
+
*
|
|
3
|
+
* 本能力即 HELP 一级分组「开始使用」。一条写命令管一摊:
|
|
4
|
+
* · `chef.setup.init`(会改数据库的命令,幂等):首次使用进这一条(环境检测+按需建库建目录)。
|
|
5
|
+
* 唤醒词路由:#841 起 `首次使用` 已在 `WAKE_TABLE`(下标 48),`src/setup/routes.ts` 同步填实 `order`。
|
|
6
|
+
*/
|
|
7
|
+
import type { CommandSpec } from '../shared/command-spec.js';
|
|
8
|
+
/** 开始使用能力的声明表:恰好导出一个声明数组(生成器只认这一个)。 */
|
|
9
|
+
export declare const SETUP_COMMANDS: readonly CommandSpec[];
|
|
10
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/setup/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAQhD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** 开始使用能力的命令声明(权威源:一条命令的事实只住这里)。
|
|
2
|
+
*
|
|
3
|
+
* 本能力即 HELP 一级分组「开始使用」。一条写命令管一摊:
|
|
4
|
+
* · `chef.setup.init`(会改数据库的命令,幂等):首次使用进这一条(环境检测+按需建库建目录)。
|
|
5
|
+
* 唤醒词路由:#841 起 `首次使用` 已在 `WAKE_TABLE`(下标 48),`src/setup/routes.ts` 同步填实 `order`。
|
|
6
|
+
*/
|
|
7
|
+
/** 开始使用能力的声明表:恰好导出一个声明数组(生成器只认这一个)。 */
|
|
8
|
+
export const SETUP_COMMANDS = [
|
|
9
|
+
{
|
|
10
|
+
kind: 'write',
|
|
11
|
+
key: 'chef.setup.init',
|
|
12
|
+
title: '首次使用',
|
|
13
|
+
wakeWord: '首次使用',
|
|
14
|
+
example: 'chef-cmd-read chef.setup.init --params \'{}\'',
|
|
15
|
+
},
|
|
16
|
+
];
|
|
17
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/setup/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,uCAAuC;AACvC,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,iBAAiB;QACtB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,+CAA+C;KACzD;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/setup/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** 开始使用能力的页面装配(首次使用一页,全走公共层区块+页内一段收口样式)。
|
|
2
|
+
*
|
|
3
|
+
* 老件骨架来源:`templates/开始使用/first_use_wizard.html`(环境检测→环境变量→建库→完成回执四步)。
|
|
4
|
+
* 新页按同一四步组织,行为归宿主(页面只摆形状与状态,静态呈现)。
|
|
5
|
+
*
|
|
6
|
+
* #873 页内收口(公共层只给到形状那一层,层级的最后一档落在页内):
|
|
7
|
+
* ① 读数三张**瓦片**(不是一条通栏面板):标签与数值差 5px —— 「业务表/状态/建库时机」是列头,
|
|
8
|
+
* 值才是正文;三张各自成卡,宽档不会读成一条呆板的通栏;
|
|
9
|
+
* ② 页头图标位(锅)+ 品牌装饰带(都是内联 SVG,纯装饰,不载任何数据);
|
|
10
|
+
* ③ 分区题头带一条暖色渐隐、开合标记换成暖色圆点(公共层那枚蓝 ▸ 落在圆底上读起来像播放键);
|
|
11
|
+
* ④ 上屏文字去实现语与复述(「装前命令」「老库仅提示迁移」「只读不写」全部换人话;
|
|
12
|
+
* 口径行与读数瓦片、结论条互为复述的那一句删掉,内容并进「建库」那一步的正文)。
|
|
13
|
+
*/
|
|
14
|
+
/** 首次使用向导页(过程型:分节折叠+动作行)。 */
|
|
15
|
+
export declare function setupInitPage(input: {
|
|
16
|
+
tables: number;
|
|
17
|
+
initialized: boolean;
|
|
18
|
+
}): string;
|
|
19
|
+
//# sourceMappingURL=pages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/setup/pages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwGH,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAsDrF"}
|