skill-chef 0.3.1 → 0.3.2

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.
Files changed (183) hide show
  1. package/dist/add/commands.d.ts +15 -0
  2. package/dist/add/commands.d.ts.map +1 -0
  3. package/dist/add/commands.js +22 -0
  4. package/dist/add/commands.js.map +1 -0
  5. package/dist/add/index.d.ts +10 -0
  6. package/dist/add/index.d.ts.map +1 -0
  7. package/dist/add/index.js +10 -0
  8. package/dist/add/index.js.map +1 -0
  9. package/dist/add/routes.d.ts +11 -0
  10. package/dist/add/routes.d.ts.map +1 -0
  11. package/dist/add/routes.js +23 -0
  12. package/dist/add/routes.js.map +1 -0
  13. package/dist/add/run-write.d.ts +37 -0
  14. package/dist/add/run-write.d.ts.map +1 -0
  15. package/dist/add/run-write.js +187 -0
  16. package/dist/add/run-write.js.map +1 -0
  17. package/dist/cli/cmd_read.js +32 -289
  18. package/dist/cli/cmd_read.js.map +1 -1
  19. package/dist/cli/keys.d.ts +2 -1
  20. package/dist/cli/keys.d.ts.map +1 -1
  21. package/dist/cli/keys.js +37 -1
  22. package/dist/cli/keys.js.map +1 -1
  23. package/dist/cook/commands.d.ts +13 -0
  24. package/dist/cook/commands.d.ts.map +1 -0
  25. package/dist/cook/commands.js +21 -0
  26. package/dist/cook/commands.js.map +1 -0
  27. package/dist/cook/index.d.ts +9 -0
  28. package/dist/cook/index.d.ts.map +1 -0
  29. package/dist/cook/index.js +9 -0
  30. package/dist/cook/index.js.map +1 -0
  31. package/dist/cook/routes.d.ts +11 -0
  32. package/dist/cook/routes.d.ts.map +1 -0
  33. package/dist/cook/routes.js +35 -0
  34. package/dist/cook/routes.js.map +1 -0
  35. package/dist/cook/run.d.ts +24 -0
  36. package/dist/cook/run.d.ts.map +1 -0
  37. package/dist/cook/run.js +46 -0
  38. package/dist/cook/run.js.map +1 -0
  39. package/dist/data/commands.d.ts +12 -0
  40. package/dist/data/commands.d.ts.map +1 -0
  41. package/dist/data/commands.js +11 -0
  42. package/dist/data/commands.js.map +1 -0
  43. package/dist/data/index.d.ts +9 -0
  44. package/dist/data/index.d.ts.map +1 -0
  45. package/dist/data/index.js +9 -0
  46. package/dist/data/index.js.map +1 -0
  47. package/dist/data/routes.d.ts +12 -0
  48. package/dist/data/routes.d.ts.map +1 -0
  49. package/dist/data/routes.js +19 -0
  50. package/dist/data/routes.js.map +1 -0
  51. package/dist/data/run-query.d.ts +15 -0
  52. package/dist/data/run-query.d.ts.map +1 -0
  53. package/dist/data/run-query.js +73 -0
  54. package/dist/data/run-query.js.map +1 -0
  55. package/dist/fetch/db.d.ts +11 -31
  56. package/dist/fetch/db.d.ts.map +1 -1
  57. package/dist/fetch/db.js +39 -328
  58. package/dist/fetch/db.js.map +1 -1
  59. package/dist/fetch/index.d.ts +7 -1
  60. package/dist/fetch/index.d.ts.map +1 -1
  61. package/dist/fetch/index.js +9 -1
  62. package/dist/fetch/index.js.map +1 -1
  63. package/dist/fetch/schema.d.ts +7 -0
  64. package/dist/fetch/schema.d.ts.map +1 -0
  65. package/dist/fetch/schema.js +53 -0
  66. package/dist/fetch/schema.js.map +1 -0
  67. package/dist/history/index.d.ts +3 -2
  68. package/dist/history/index.d.ts.map +1 -1
  69. package/dist/history/index.js +3 -2
  70. package/dist/history/index.js.map +1 -1
  71. package/dist/history/run-query.d.ts +13 -0
  72. package/dist/history/run-query.d.ts.map +1 -0
  73. package/dist/history/run-query.js +44 -0
  74. package/dist/history/run-query.js.map +1 -0
  75. package/dist/history/run-record.d.ts +21 -0
  76. package/dist/history/run-record.d.ts.map +1 -0
  77. package/dist/history/run-record.js +71 -0
  78. package/dist/history/run-record.js.map +1 -0
  79. package/dist/relation/commands.d.ts +10 -0
  80. package/dist/relation/commands.d.ts.map +1 -0
  81. package/dist/relation/commands.js +9 -0
  82. package/dist/relation/commands.js.map +1 -0
  83. package/dist/relation/index.d.ts +8 -0
  84. package/dist/relation/index.d.ts.map +1 -0
  85. package/dist/relation/index.js +8 -0
  86. package/dist/relation/index.js.map +1 -0
  87. package/dist/relation/routes.d.ts +10 -0
  88. package/dist/relation/routes.d.ts.map +1 -0
  89. package/dist/relation/routes.js +28 -0
  90. package/dist/relation/routes.js.map +1 -0
  91. package/dist/render/index.d.ts +7 -1
  92. package/dist/render/index.d.ts.map +1 -1
  93. package/dist/render/index.js +9 -1
  94. package/dist/render/index.js.map +1 -1
  95. package/dist/render/views.d.ts +1 -39
  96. package/dist/render/views.d.ts.map +1 -1
  97. package/dist/render/views.js +6 -56
  98. package/dist/render/views.js.map +1 -1
  99. package/dist/search/commands.d.ts +14 -0
  100. package/dist/search/commands.d.ts.map +1 -0
  101. package/dist/search/commands.js +22 -0
  102. package/dist/search/commands.js.map +1 -0
  103. package/dist/search/index.d.ts +9 -0
  104. package/dist/search/index.d.ts.map +1 -0
  105. package/dist/search/index.js +9 -0
  106. package/dist/search/index.js.map +1 -0
  107. package/dist/search/routes.d.ts +11 -0
  108. package/dist/search/routes.d.ts.map +1 -0
  109. package/dist/search/routes.js +59 -0
  110. package/dist/search/routes.js.map +1 -0
  111. package/dist/search/run.d.ts +22 -0
  112. package/dist/search/run.d.ts.map +1 -0
  113. package/dist/search/run.js +105 -0
  114. package/dist/search/run.js.map +1 -0
  115. package/dist/setup/commands.d.ts +10 -0
  116. package/dist/setup/commands.d.ts.map +1 -0
  117. package/dist/setup/commands.js +9 -0
  118. package/dist/setup/commands.js.map +1 -0
  119. package/dist/setup/index.d.ts +8 -0
  120. package/dist/setup/index.d.ts.map +1 -0
  121. package/dist/setup/index.js +8 -0
  122. package/dist/setup/index.js.map +1 -0
  123. package/dist/setup/routes.d.ts +10 -0
  124. package/dist/setup/routes.d.ts.map +1 -0
  125. package/dist/setup/routes.js +16 -0
  126. package/dist/setup/routes.js.map +1 -0
  127. package/dist/shared/command-spec.d.ts +42 -0
  128. package/dist/shared/command-spec.d.ts.map +1 -0
  129. package/dist/shared/command-spec.js +15 -0
  130. package/dist/shared/command-spec.js.map +1 -0
  131. package/dist/shared/slots.d.ts +24 -0
  132. package/dist/shared/slots.d.ts.map +1 -0
  133. package/dist/shared/slots.js +63 -0
  134. package/dist/shared/slots.js.map +1 -0
  135. package/dist/shopping/commands.d.ts +13 -0
  136. package/dist/shopping/commands.d.ts.map +1 -0
  137. package/dist/shopping/commands.js +21 -0
  138. package/dist/shopping/commands.js.map +1 -0
  139. package/dist/shopping/index.d.ts +9 -0
  140. package/dist/shopping/index.d.ts.map +1 -0
  141. package/dist/shopping/index.js +9 -0
  142. package/dist/shopping/index.js.map +1 -0
  143. package/dist/shopping/routes.d.ts +11 -0
  144. package/dist/shopping/routes.d.ts.map +1 -0
  145. package/dist/shopping/routes.js +35 -0
  146. package/dist/shopping/routes.js.map +1 -0
  147. package/dist/shopping/run.d.ts +24 -0
  148. package/dist/shopping/run.d.ts.map +1 -0
  149. package/dist/shopping/run.js +74 -0
  150. package/dist/shopping/run.js.map +1 -0
  151. package/dist/update/commands.d.ts +12 -0
  152. package/dist/update/commands.d.ts.map +1 -0
  153. package/dist/update/commands.js +11 -0
  154. package/dist/update/commands.js.map +1 -0
  155. package/dist/update/index.d.ts +9 -0
  156. package/dist/update/index.d.ts.map +1 -0
  157. package/dist/update/index.js +9 -0
  158. package/dist/update/index.js.map +1 -0
  159. package/dist/update/routes.d.ts +12 -0
  160. package/dist/update/routes.d.ts.map +1 -0
  161. package/dist/update/routes.js +24 -0
  162. package/dist/update/routes.js.map +1 -0
  163. package/dist/update/run-write.d.ts +19 -0
  164. package/dist/update/run-write.d.ts.map +1 -0
  165. package/dist/update/run-write.js +99 -0
  166. package/dist/update/run-write.js.map +1 -0
  167. package/dist/view/commands.d.ts +14 -0
  168. package/dist/view/commands.d.ts.map +1 -0
  169. package/dist/view/commands.js +22 -0
  170. package/dist/view/commands.js.map +1 -0
  171. package/dist/view/index.d.ts +9 -0
  172. package/dist/view/index.d.ts.map +1 -0
  173. package/dist/view/index.js +9 -0
  174. package/dist/view/index.js.map +1 -0
  175. package/dist/view/routes.d.ts +11 -0
  176. package/dist/view/routes.d.ts.map +1 -0
  177. package/dist/view/routes.js +53 -0
  178. package/dist/view/routes.js.map +1 -0
  179. package/dist/view/run.d.ts +13 -0
  180. package/dist/view/run.d.ts.map +1 -0
  181. package/dist/view/run.js +34 -0
  182. package/dist/view/run.js.map +1 -0
  183. package/package.json +3 -3
@@ -0,0 +1,11 @@
1
+ /** 做菜能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里做菜四句唤醒词:做菜模式/开始做菜/继续做菜/完成做菜
4
+ * 都进 `chef.cooking.run`。`order` 取唤醒词表 1-based 下标(24–27),只保证跨域可比;
5
+ * 全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例:需菜名的带菜名(空库可跑的那一行)。
7
+ */
8
+ import type { RouteDecl } from '../shared/command-spec.js';
9
+ /** 做菜能力的路由声明表:恰好导出一个声明数组。 */
10
+ export declare const COOK_ROUTES: readonly RouteDecl[];
11
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/cook/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAyB3C,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** 做菜能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里做菜四句唤醒词:做菜模式/开始做菜/继续做菜/完成做菜
4
+ * 都进 `chef.cooking.run`。`order` 取唤醒词表 1-based 下标(24–27),只保证跨域可比;
5
+ * 全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例:需菜名的带菜名(空库可跑的那一行)。
7
+ */
8
+ /** 做菜能力的路由声明表:恰好导出一个声明数组。 */
9
+ export const COOK_ROUTES = [
10
+ {
11
+ order: 24,
12
+ wakeWord: '做菜模式',
13
+ key: 'chef.cooking.run',
14
+ cli: 'chef-cmd-read chef.cooking.run --params \'{"name":"宫保虾球"}\'',
15
+ },
16
+ {
17
+ order: 25,
18
+ wakeWord: '开始做菜',
19
+ key: 'chef.cooking.run',
20
+ cli: 'chef-cmd-read chef.cooking.run --params \'{"name":"宫保虾球"}\'',
21
+ },
22
+ {
23
+ order: 26,
24
+ wakeWord: '继续做菜',
25
+ key: 'chef.cooking.run',
26
+ cli: 'chef-cmd-read chef.cooking.run --params \'{"name":"宫保虾球"}\'',
27
+ },
28
+ {
29
+ order: 27,
30
+ wakeWord: '完成做菜',
31
+ key: 'chef.cooking.run',
32
+ cli: 'chef-cmd-read chef.cooking.run --params \'{"name":"宫保虾球"}\'',
33
+ },
34
+ ];
35
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cook/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** 做菜能力的命令处理(`chef.cooking.run`)+ 本域独占的视图装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `buildCookingRun`(原 `src/render/views.ts`)只被本域调用,按“写不出的留回域目录”搬入本文件;
5
+ * 旧址改转出(搬迁债务,见 `src/render/index.ts`)。
6
+ */
7
+ import type { ChefDb } from '../fetch/db.js';
8
+ import type { CookingStep, RecipeHistoryStats, RecipeItem } from '../render/views.js';
9
+ export declare function buildCookingRun(args: {
10
+ recipe: RecipeItem;
11
+ steps: CookingStep[];
12
+ servings?: number;
13
+ history?: RecipeHistoryStats | null;
14
+ }): {
15
+ items: CookingStep[];
16
+ total: number;
17
+ recipe: RecipeItem;
18
+ servingsNote: string;
19
+ historyHint: string;
20
+ steps: CookingStep[];
21
+ };
22
+ /** 跑 `chef.cooking.run`:取单菜全貌+份数放大+历史提示(list 形)。 */
23
+ export declare function runCookingRun(handle: ChefDb, params: Record<string, unknown>): unknown;
24
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cook/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAMtF,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC,GAAG;IAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAY/H;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAmBtF"}
@@ -0,0 +1,46 @@
1
+ /** 做菜能力的命令处理(`chef.cooking.run`)+ 本域独占的视图装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `buildCookingRun`(原 `src/render/views.ts`)只被本域调用,按“写不出的留回域目录”搬入本文件;
5
+ * 旧址改转出(搬迁债务,见 `src/render/index.ts`)。
6
+ */
7
+ import { getRecipeDetail, historyStats } from '../fetch/db.js';
8
+ import { toRecipeItem } from '../render/views.js';
9
+ import { needServings, resolveNameOrId } from '../shared/slots.js';
10
+ // 开做 list:items 为步骤(内联食材)+ total;recipe/份数放大说明/历史提示作扩展字段(list 形只校验 items/total)。
11
+ // 原 `src/render/views.ts`,本域独占。
12
+ export function buildCookingRun(args) {
13
+ const base = args.recipe.servings > 0 ? args.recipe.servings : 2;
14
+ const servings = args.servings ?? base;
15
+ const factor = Math.round((servings / base) * 100) / 100;
16
+ const servingsNote = servings === base
17
+ ? '按原份量 ' + base + ' 人份备料'
18
+ : '已按 ' + servings + ' 人份放大(原 ' + base + ' 人份,倍率 ' + factor + ',食材用量同倍)';
19
+ const h = args.history;
20
+ const historyHint = h && h.count > 0
21
+ ? '做过 ' + h.count + ' 次' + (h.avgRating !== null && h.avgRating !== undefined ? ',平均评分 ' + h.avgRating : '') + ';本次做完请走 chef.history.record 记录'
22
+ : '还没做过;本次做完请走 chef.history.record 记录';
23
+ return { items: args.steps, total: args.steps.length, recipe: args.recipe, servingsNote, historyHint, steps: args.steps };
24
+ }
25
+ /** 跑 `chef.cooking.run`:取单菜全貌+份数放大+历史提示(list 形)。 */
26
+ export function runCookingRun(handle, params) {
27
+ const servings = needServings(params);
28
+ const detail = getRecipeDetail(handle, resolveNameOrId(params));
29
+ const base = detail.recipe.servings > 0 ? detail.recipe.servings : 2;
30
+ const factor = servings === undefined ? 1 : servings / base;
31
+ const scaled = detail.ingredients.map((g) => ({
32
+ name: g.name,
33
+ quantity: g.quantity === null ? null : Math.round(g.quantity * factor * 100) / 100,
34
+ unit: g.unit, quantity_text: g.quantity_text, optional: g.is_optional === 1,
35
+ }));
36
+ const steps = [...detail.steps]
37
+ .sort((a, b) => a.sequence - b.sequence)
38
+ .map((s) => ({
39
+ sequence: s.sequence, action: s.action, duration_minutes: s.duration_minutes,
40
+ heat_level: s.heat_level, temperature: s.temperature, expected_result: s.expected_result,
41
+ ingredients: scaled,
42
+ }));
43
+ const history = historyStats(handle, detail.recipe.id);
44
+ return buildCookingRun({ recipe: toRecipeItem(detail.recipe), steps, servings, history });
45
+ }
46
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cook/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** 数据管理能力的命令声明(空):本域暂无自有 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「数据管理」。数据管理域的三张卡(体检/批量改/备份)中,
4
+ * 可路由的两句(`体检`→`kind: 'quality'`、`备份`→`kind: 'backup'`)走 `chef.history.query`,
5
+ * 那条命令的事实住历史能力(`src/history/commands.ts`)——本域不另立第二份声明(铁律二)。
6
+ * 空数组仍是「恰好一个声明数组」(生成器认它为一域,来源域名单里有 `data`),
7
+ * 数据管理端到端票接入自有 key 时再填。
8
+ */
9
+ import type { CommandSpec } from '../shared/command-spec.js';
10
+ /** 数据管理能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
11
+ export declare const DATA_COMMANDS: readonly CommandSpec[];
12
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/data/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,4CAA4C;AAC5C,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** 数据管理能力的命令声明(空):本域暂无自有 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「数据管理」。数据管理域的三张卡(体检/批量改/备份)中,
4
+ * 可路由的两句(`体检`→`kind: 'quality'`、`备份`→`kind: 'backup'`)走 `chef.history.query`,
5
+ * 那条命令的事实住历史能力(`src/history/commands.ts`)——本域不另立第二份声明(铁律二)。
6
+ * 空数组仍是「恰好一个声明数组」(生成器认它为一域,来源域名单里有 `data`),
7
+ * 数据管理端到端票接入自有 key 时再填。
8
+ */
9
+ /** 数据管理能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
10
+ export const DATA_COMMANDS = [];
11
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/data/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAA2B,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 数据管理能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空,事实住 `history`)与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用数据管理能力的东西,只经这两个名字。
5
+ */
6
+ export { DATA_COMMANDS } from './commands.js';
7
+ export { DATA_ROUTES } from './routes.js';
8
+ export { healthCheck, runDataQuery } from './run-query.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 数据管理能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空,事实住 `history`)与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用数据管理能力的东西,只经这两个名字。
5
+ */
6
+ export { DATA_COMMANDS } from './commands.js';
7
+ export { DATA_ROUTES } from './routes.js';
8
+ export { healthCheck, runDataQuery } from './run-query.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** 数据管理能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 一行:`备份`(#767 资产已定去向 `chef.history.query`/`kind: 'backup'`,但尚未入 `WAKE_TABLE`,
4
+ * 故 `order: 0` 标记待接入)。key 名是引用(事实住 `src/history/commands.ts`),本处不定义它。
5
+ * `体检`不行于此:它的短语→key 映射票 1 已声明在 `src/history/routes.ts`(一事一处,不重复声明),
6
+ * kind 级切分(quality 归本域实现)由入口注册表做,见 `src/data/run-query.ts`。
7
+ * 命令行写法照同 key 同 kind 的既有行类比(`kind` 透传,空库可跑的那一行)。
8
+ */
9
+ import type { RouteDecl } from '../shared/command-spec.js';
10
+ /** 数据管理能力的路由声明表:恰好导出一个声明数组。 */
11
+ export declare const DATA_ROUTES: readonly RouteDecl[];
12
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,+BAA+B;AAC/B,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAQ3C,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** 数据管理能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 一行:`备份`(#767 资产已定去向 `chef.history.query`/`kind: 'backup'`,但尚未入 `WAKE_TABLE`,
4
+ * 故 `order: 0` 标记待接入)。key 名是引用(事实住 `src/history/commands.ts`),本处不定义它。
5
+ * `体检`不行于此:它的短语→key 映射票 1 已声明在 `src/history/routes.ts`(一事一处,不重复声明),
6
+ * kind 级切分(quality 归本域实现)由入口注册表做,见 `src/data/run-query.ts`。
7
+ * 命令行写法照同 key 同 kind 的既有行类比(`kind` 透传,空库可跑的那一行)。
8
+ */
9
+ /** 数据管理能力的路由声明表:恰好导出一个声明数组。 */
10
+ export const DATA_ROUTES = [
11
+ {
12
+ // 待接入:`备份`未入 WAKE_TABLE(运行时唤醒词未命中),先占路由行,域票接入时把 order 填实。
13
+ order: 0,
14
+ wakeWord: '备份',
15
+ key: 'chef.history.query',
16
+ cli: 'chef-cmd-read chef.history.query --params \'{"kind":"backup"}\'',
17
+ },
18
+ ];
19
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/data/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,0DAA0D;QAC1D,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,oBAAoB;QACzB,GAAG,EAAE,iEAAiE;KACvE;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** 数据管理能力的查处理(`chef.history.query` 的 quality/backup 两 kind)+ 本域独占的体检取数。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.history.query` 分支中 quality/backup 两路逐字节下沉:
4
+ * 只改 import 出处,判定与装配一字不动。timeline/stats 两路住历史域
5
+ * (`src/history/run-query.ts`);kind 路由由入口注册表做(非法 kind 入口已拦,落不到这里)。
6
+ * `healthCheck`(原 `src/fetch/db.ts`)只被本域调用(backup kind),按“写不出的留回域目录”
7
+ * 搬入本文件;旧址改转出(搬迁债务,见 `src/fetch/index.ts`)。
8
+ */
9
+ import type { ChefDb, HealthIssue } from '../fetch/db.js';
10
+ /** 库体检:无食材/无步骤/缺火候/从未做过四档问题(无异常即空数组,由调用方拼 ok 条)。
11
+ * 原 `src/fetch/db.ts`,本域独占。 */
12
+ export declare function healthCheck(h: ChefDb): HealthIssue[];
13
+ /** 跑 `chef.history.query` 的 quality/backup:`kind` 由入口注册表算好下传,本函数只做本域两路分支。 */
14
+ export declare function runDataQuery(handle: ChefDb, params: Record<string, unknown>, kind: string): unknown;
15
+ //# sourceMappingURL=run-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-query.d.ts","sourceRoot":"","sources":["../../src/data/run-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK1D;+BAC+B;AAC/B,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAiBpD;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA6BnG"}
@@ -0,0 +1,73 @@
1
+ /** 数据管理能力的查处理(`chef.history.query` 的 quality/backup 两 kind)+ 本域独占的体检取数。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.history.query` 分支中 quality/backup 两路逐字节下沉:
4
+ * 只改 import 出处,判定与装配一字不动。timeline/stats 两路住历史域
5
+ * (`src/history/run-query.ts`);kind 路由由入口注册表做(非法 kind 入口已拦,落不到这里)。
6
+ * `healthCheck`(原 `src/fetch/db.ts`)只被本域调用(backup kind),按“写不出的留回域目录”
7
+ * 搬入本文件;旧址改转出(搬迁债务,见 `src/fetch/index.ts`)。
8
+ */
9
+ import { listRecipes, qAll, queryHistory } from '../fetch/db.js';
10
+ import { ChefFetchError, ChefPolicyError } from '../fetch/errors.js';
11
+ import { buildHistoryQuery } from '../render/index.js';
12
+ /** 库体检:无食材/无步骤/缺火候/从未做过四档问题(无异常即空数组,由调用方拼 ok 条)。
13
+ * 原 `src/fetch/db.ts`,本域独占。 */
14
+ export function healthCheck(h) {
15
+ const issues = [];
16
+ try {
17
+ const noIng = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN ingredients i ON i.recipe_id = r.id WHERE i.id IS NULL AND r.status != '已废弃'");
18
+ for (const r of noIng)
19
+ issues.push({ level: 'warn', message: '无食材:' + String(r.name ?? '') });
20
+ const noStep = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN cooking_steps s ON s.recipe_id = r.id WHERE s.id IS NULL AND r.status != '已废弃'");
21
+ for (const r of noStep)
22
+ issues.push({ level: 'warn', message: '无步骤:' + String(r.name ?? '') });
23
+ const noHeat = qAll(h, "SELECT r.name AS name, s.sequence AS seq FROM cooking_steps s JOIN recipes r ON r.id = s.recipe_id WHERE (s.heat_level IS NULL OR s.heat_level = '') AND r.status != '已废弃'");
24
+ for (const r of noHeat)
25
+ issues.push({ level: 'warn', message: '步骤缺火候:' + String(r.name ?? '') + '第' + String(r.seq ?? '') + '步' });
26
+ const never = qAll(h, "SELECT r.name AS name FROM recipes r LEFT JOIN recipe_history hh ON hh.recipe_id = r.id WHERE hh.id IS NULL AND r.status != '已废弃'");
27
+ for (const r of never)
28
+ issues.push({ level: 'info', message: '从未做过:' + String(r.name ?? '') });
29
+ }
30
+ catch (e) {
31
+ if (e instanceof ChefFetchError)
32
+ throw e;
33
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '体检查询失败', { cause: e });
34
+ }
35
+ issues.sort((a, b) => (a.level < b.level ? -1 : a.level > b.level ? 1 : String(a.message ?? '').localeCompare(String(b.message ?? ''), 'zh')));
36
+ return issues;
37
+ }
38
+ /** 跑 `chef.history.query` 的 quality/backup:`kind` 由入口注册表算好下传,本函数只做本域两路分支。 */
39
+ export function runDataQuery(handle, params, kind) {
40
+ void params;
41
+ if (kind === 'quality') {
42
+ const recipes = listRecipes(handle);
43
+ const items = recipes.map((r) => {
44
+ const rows = queryHistory(handle, r.id);
45
+ let total = 0;
46
+ let rated = 0;
47
+ let low = 0;
48
+ for (const h of rows) {
49
+ if (h.rating !== null && h.rating !== undefined) {
50
+ total += h.rating;
51
+ rated += 1;
52
+ if (h.rating < 3)
53
+ low += 1;
54
+ }
55
+ }
56
+ const avg = rated ? Math.round((total / rated) * 10) / 10 : null;
57
+ return {
58
+ recipe_id: r.id, name: r.name, count: rows.length, avgRating: avg, lowCount: low,
59
+ note: rated === 0 ? '暂无评分' : avg < 3 ? '口碑偏低,建议改良' : '口碑稳定',
60
+ };
61
+ });
62
+ return buildHistoryQuery('quality', items);
63
+ }
64
+ if (kind === 'backup') {
65
+ // 取数层无 exportAll:healthCheck 体检问题作条目统一 list;无异常则单条 ok。
66
+ const issues = healthCheck(handle);
67
+ const items = issues.length ? issues.map((i) => ({ level: i.level, message: i.message ?? '' })) : [{ level: 'ok', message: '库自检无异常' }];
68
+ return buildHistoryQuery('backup', items);
69
+ }
70
+ // 不可达:入口注册表已拦过非法 kind(原文分支尾 fail(2) 同报文,归用法错 exit 2)。
71
+ throw new ChefPolicyError('POLICY_BAD_INPUT', 'history.query 只接受 kind=timeline/stats/quality/backup');
72
+ }
73
+ //# sourceMappingURL=run-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-query.js","sourceRoot":"","sources":["../../src/data/run-query.ts"],"names":[],"mappings":"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"}
@@ -62,51 +62,31 @@ export interface ChefDb {
62
62
  path: string;
63
63
  initialized: boolean;
64
64
  }
65
+ /** #839 搬迁后包内共享的取数原语:域目录的 run 可直接引用(`src/<域>/run*.ts`),包门不管。 */
66
+ export declare function now(): string;
67
+ export declare function qAll<T>(h: ChefDb, sql: string, params?: unknown[]): T[];
68
+ export declare function qGet<T>(h: ChefDb, sql: string, params?: unknown[]): T | undefined;
69
+ export declare function qRun(h: ChefDb, sql: string, params?: unknown[]): void;
70
+ export declare function toRecipe(r: Record<string, unknown>): RecipeRow;
71
+ export declare function toIngredient(r: Record<string, unknown>): IngredientRow;
72
+ export declare function toStep(r: Record<string, unknown>): StepRow;
73
+ export declare function toHistory(r: Record<string, unknown>): HistoryRow;
65
74
  export declare function openChefDb(dbPath: string): ChefDb;
66
75
  export declare function closeChefDb(handle: ChefDb): void;
67
- export declare function addRecipe(h: ChefDb, input: Record<string, unknown>): RecipeRow;
68
- export declare function addIngredient(h: ChefDb, recipeId: string, input: {
69
- name: string;
70
- category?: string;
71
- quantity?: number | null;
72
- unit?: string;
73
- quantity_text?: string;
74
- is_optional?: number | boolean;
75
- substitute?: string;
76
- }): IngredientRow;
77
- export declare function addIngredient(h: ChefDb, params: Record<string, unknown>): IngredientRow;
78
- export declare function addStep(h: ChefDb, recipeId: string, input: {
79
- action: string;
80
- heat_level?: string;
81
- duration_minutes?: number | null;
82
- temperature?: string;
83
- expected_result?: string;
84
- }): StepRow;
85
- export declare function addStep(h: ChefDb, params: Record<string, unknown>): StepRow;
76
+ export declare function canonicalRecipeName(name: unknown): string;
77
+ export declare function mustRecipe(h: ChefDb, idOrName: string): RecipeRow;
86
78
  export declare function listRecipes(h: ChefDb, opts?: {
87
79
  difficulty?: string;
88
80
  includeDeprecated?: boolean;
89
81
  }): RecipeRow[];
90
- export declare function searchRecipes(h: ChefDb, kw: string): RecipeRow[];
91
82
  export declare function getRecipeDetail(h: ChefDb, idOrName: string): {
92
83
  recipe: RecipeRow;
93
84
  ingredients: IngredientRow[];
94
85
  steps: StepRow[];
95
86
  };
96
- export declare function deprecateRecipe(h: ChefDb, id: string): RecipeRow;
97
- export declare function updateRecipe(h: ChefDb, id: string, patch: Record<string, unknown>): RecipeRow;
98
- export declare function filterRecipes(h: ChefDb, filters?: Record<string, unknown>): RecipeRow[];
99
- export declare function recordHistory(h: ChefDb, input: {
100
- recipe_id: string;
101
- rating?: number | null;
102
- feedback?: string;
103
- cook_date?: string;
104
- }): HistoryRow;
105
87
  export declare function queryHistory(h: ChefDb, recipeId?: string): HistoryRow[];
106
88
  export declare function historyStats(h: ChefDb, recipeId: string): {
107
89
  count: number;
108
90
  avgRating: number | null;
109
91
  };
110
- export declare function buildShoppingList(h: ChefDb, names: string[]): ShoppingItem[];
111
- export declare function healthCheck(h: ChefDb): HealthIssue[];
112
92
  //# sourceMappingURL=db.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/fetch/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/fetch/db.ts"],"names":[],"mappings":"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"}