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,9 @@
1
+ /** 采购能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用采购能力的东西,只经这两个名字。
5
+ */
6
+ export { SHOPPING_COMMANDS } from './commands.js';
7
+ export { SHOPPING_ROUTES } from './routes.js';
8
+ export { buildShopping, buildShoppingList, runShoppingQuery } from './run.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shopping/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 采购能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用采购能力的东西,只经这两个名字。
5
+ */
6
+ export { SHOPPING_COMMANDS } from './commands.js';
7
+ export { SHOPPING_ROUTES } from './routes.js';
8
+ export { buildShopping, buildShoppingList, runShoppingQuery } from './run.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shopping/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** 采购能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里采购四句唤醒词:生成清单/排除可选/查清单/清空清单
4
+ * 都进 `chef.shopping.query`。`order` 取唤醒词表 1-based 下标(28–31),只保证跨域可比;
5
+ * 全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例(空库可跑的那一行)。
7
+ */
8
+ import type { RouteDecl } from '../shared/command-spec.js';
9
+ /** 采购能力的路由声明表:恰好导出一个声明数组。 */
10
+ export declare const SHOPPING_ROUTES: readonly RouteDecl[];
11
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/shopping/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAyB/C,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** 采购能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里采购四句唤醒词:生成清单/排除可选/查清单/清空清单
4
+ * 都进 `chef.shopping.query`。`order` 取唤醒词表 1-based 下标(28–31),只保证跨域可比;
5
+ * 全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例(空库可跑的那一行)。
7
+ */
8
+ /** 采购能力的路由声明表:恰好导出一个声明数组。 */
9
+ export const SHOPPING_ROUTES = [
10
+ {
11
+ order: 28,
12
+ wakeWord: '生成清单',
13
+ key: 'chef.shopping.query',
14
+ cli: 'chef-cmd-read chef.shopping.query --params \'{"names":["宫保虾球","鱼香肉丝"]}\'',
15
+ },
16
+ {
17
+ order: 29,
18
+ wakeWord: '排除可选',
19
+ key: 'chef.shopping.query',
20
+ cli: 'chef-cmd-read chef.shopping.query --params \'{"names":["宫保虾球","鱼香肉丝"]}\'',
21
+ },
22
+ {
23
+ order: 30,
24
+ wakeWord: '查清单',
25
+ key: 'chef.shopping.query',
26
+ cli: 'chef-cmd-read chef.shopping.query --params \'{"names":["宫保虾球","鱼香肉丝"]}\'',
27
+ },
28
+ {
29
+ order: 31,
30
+ wakeWord: '清空清单',
31
+ key: 'chef.shopping.query',
32
+ cli: 'chef-cmd-read chef.shopping.query --params \'{"names":["宫保虾球","鱼香肉丝"]}\'',
33
+ },
34
+ ];
35
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/shopping/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,qBAAqB;QAC1B,GAAG,EAAE,0EAA0E;KAChF;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,qBAAqB;QAC1B,GAAG,EAAE,0EAA0E;KAChF;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,qBAAqB;QAC1B,GAAG,EAAE,0EAA0E;KAChF;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,qBAAqB;QAC1B,GAAG,EAAE,0EAA0E;KAChF;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** 采购能力的命令处理(`chef.shopping.query`)+ 本域独占的取数与视图装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `buildShoppingList`(原 `src/fetch/db.ts`)与 `buildShopping`(原 `src/render/views.ts`)
5
+ * 只被本域调用,按“写不出的留回域目录”搬入本文件;旧址改转出(搬迁债务,见对应 index)。
6
+ */
7
+ import type { ChefDb, ShoppingItem } from '../fetch/db.js';
8
+ /** 跨菜合并采购清单(按名+单位合并行,自带 optional/category 标记)。原 `src/fetch/db.ts`,本域独占。 */
9
+ export declare function buildShoppingList(h: ChefDb, names: string[]): ShoppingItem[];
10
+ export declare function buildShopping(args: {
11
+ items: ShoppingItem[];
12
+ recipes: string[];
13
+ servings?: number;
14
+ excludeOptional?: boolean;
15
+ }): {
16
+ items: ShoppingItem[];
17
+ total: number;
18
+ recipes: string[];
19
+ servings?: number;
20
+ excludeOptional: boolean;
21
+ };
22
+ /** 跑 `chef.shopping.query`:多菜合并+可选食材过滤(list 形)。空清单缺失阻断。 */
23
+ export declare function runShoppingQuery(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/shopping/run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK3D,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CA+B5E;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACxF,GAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAK3G;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAWzF"}
@@ -0,0 +1,74 @@
1
+ /** 采购能力的命令处理(`chef.shopping.query`)+ 本域独占的取数与视图装配。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * `buildShoppingList`(原 `src/fetch/db.ts`)与 `buildShopping`(原 `src/render/views.ts`)
5
+ * 只被本域调用,按“写不出的留回域目录”搬入本文件;旧址改转出(搬迁债务,见对应 index)。
6
+ */
7
+ import { ChefFetchError } from '../fetch/errors.js';
8
+ import { mustRecipe, qAll, toIngredient } from '../fetch/db.js';
9
+ import { needNames } from '../policy/index.js';
10
+ import { needServings, note } from '../shared/slots.js';
11
+ /** 跨菜合并采购清单(按名+单位合并行,自带 optional/category 标记)。原 `src/fetch/db.ts`,本域独占。 */
12
+ export function buildShoppingList(h, names) {
13
+ if (!Array.isArray(names) || names.length === 0) {
14
+ throw new ChefFetchError('CHEF_BAD_QUERY', '采购须给菜名(空查询不返空)');
15
+ }
16
+ const ids = [];
17
+ const nameById = new Map();
18
+ for (const n of names) {
19
+ if (typeof n !== 'string' || !n.trim())
20
+ throw new ChefFetchError('CHEF_BAD_QUERY', '采购菜名含空串');
21
+ const r = mustRecipe(h, n.trim());
22
+ if (!ids.includes(r.id)) {
23
+ ids.push(r.id);
24
+ nameById.set(r.id, r.name);
25
+ }
26
+ }
27
+ const placeholders = ids.map(() => '?').join(',');
28
+ const rows = qAll(h, 'SELECT i.*, r.name AS _recipe_name FROM ingredients i JOIN recipes r ON r.id = i.recipe_id WHERE i.recipe_id IN (' + placeholders + ') ORDER BY i.name ASC', ids);
29
+ const merged = new Map();
30
+ for (const r of rows) {
31
+ const ing = toIngredient(r);
32
+ const recipeName = String(r._recipe_name ?? nameById.get(ing.recipe_id) ?? '');
33
+ const key = ing.name + '|||' + ing.unit;
34
+ const qty = ing.quantity ?? 0;
35
+ const hit = merged.get(key);
36
+ const qt = ing.quantity_text || (ing.quantity !== null ? String(ing.quantity) + ing.unit : '');
37
+ if (!hit) {
38
+ merged.set(key, { name: ing.name, quantity: qty, unit: ing.unit, recipes: [recipeName], quantity_text: qt, from: recipeName, optional: ing.is_optional === 1, category: ing.category });
39
+ }
40
+ else {
41
+ hit.quantity += qty;
42
+ if (!hit.recipes.includes(recipeName))
43
+ hit.recipes.push(recipeName);
44
+ hit.from = hit.recipes.join('+');
45
+ if (ing.is_optional !== 1)
46
+ hit.optional = false;
47
+ }
48
+ }
49
+ return [...merged.values()].sort((a, b) => a.name.localeCompare(b.name, 'zh'));
50
+ }
51
+ // 跨菜合并采购 list:items(合并行 name/quantity/unit/recipes)+ total + recipes(+servings/excludeOptional 回显)。
52
+ // 原 `src/render/views.ts`,本域独占。
53
+ export function buildShopping(args) {
54
+ const out = { items: args.items, total: args.items.length, recipes: args.recipes, excludeOptional: args.excludeOptional === true };
55
+ if (args.servings !== undefined)
56
+ out.servings = args.servings;
57
+ return out;
58
+ }
59
+ /** 跑 `chef.shopping.query`:多菜合并+可选食材过滤(list 形)。空清单缺失阻断。 */
60
+ export function runShoppingQuery(handle, params) {
61
+ const names = needNames(params);
62
+ const servings = needServings(params);
63
+ const excludeOptional = params.excludeOptional === true;
64
+ let items = buildShoppingList(handle, names);
65
+ if (!items.length)
66
+ throw new ChefFetchError('CHEF_EMPTY_RESULT', '采购清单为空(缺失阻断)');
67
+ // 合并行自带 optional 标记(上 `buildShoppingList`):excludeOptional 在此过滤。
68
+ if (excludeOptional)
69
+ items = items.filter((x) => !x.optional);
70
+ // 库存核对不直调居家管家:只给清单,核对请复制 prompt 走居家管家技能。
71
+ note('库存核对请复制 prompt 走「居家管家」技能,不直调');
72
+ return buildShopping({ items, recipes: names, servings, excludeOptional });
73
+ }
74
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/shopping/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** 修改能力的命令声明(空):本域暂无自有 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「修改」。修改域的两句唤醒词(修改食谱/废弃食谱)路由到
4
+ * `chef.recipe.write`,而那条命令的事实住录入能力(`src/add/commands.ts`,
5
+ * 默认 op=add、6 卡对 4 卡)——本域不另立第二份声明(铁律二)。
6
+ * 空数组仍是「恰好一个声明数组」(生成器认它为一域,来源域名单里有 `update`),
7
+ * 录入端到端票接入自有 key 时再填。
8
+ */
9
+ import type { CommandSpec } from '../shared/command-spec.js';
10
+ /** 修改能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
11
+ export declare const UPDATE_COMMANDS: readonly CommandSpec[];
12
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/update/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,0CAA0C;AAC1C,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** 修改能力的命令声明(空):本域暂无自有 key。
2
+ *
3
+ * 本能力即 HELP 一级分组「修改」。修改域的两句唤醒词(修改食谱/废弃食谱)路由到
4
+ * `chef.recipe.write`,而那条命令的事实住录入能力(`src/add/commands.ts`,
5
+ * 默认 op=add、6 卡对 4 卡)——本域不另立第二份声明(铁律二)。
6
+ * 空数组仍是「恰好一个声明数组」(生成器认它为一域,来源域名单里有 `update`),
7
+ * 录入端到端票接入自有 key 时再填。
8
+ */
9
+ /** 修改能力的声明表:恰好导出一个声明数组(生成器只认这一个;本域暂空)。 */
10
+ export const UPDATE_COMMANDS = [];
11
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/update/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAA2B,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 修改能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空,事实住 `add`)与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用修改能力的东西,只经这两个名字。
5
+ */
6
+ export { UPDATE_COMMANDS } from './commands.js';
7
+ export { UPDATE_ROUTES } from './routes.js';
8
+ export { deprecateRecipe, runRecipeWriteUpdate, updateRecipe } from './run-write.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/update/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,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 修改能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表(暂空,事实住 `add`)与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用修改能力的东西,只经这两个名字。
5
+ */
6
+ export { UPDATE_COMMANDS } from './commands.js';
7
+ export { UPDATE_ROUTES } from './routes.js';
8
+ export { deprecateRecipe, runRecipeWriteUpdate, updateRecipe } from './run-write.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/update/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,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** 修改能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 两行对应 `src/policy/wakewords.ts` 里归修改的两句唤醒词:修改食谱/废弃食谱都进
4
+ * `chef.recipe.write`(`preset` 分别为 `op: 'update'`/`op: 'deprecate'`)。
5
+ * key 名是引用(事实住 `src/add/commands.ts`),本处不定义它。
6
+ * `order` 取唤醒词表 1-based 下标(21–22),只保证跨域可比;全表级顺序由场景表定。
7
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例(空库可跑的那一行)。
8
+ */
9
+ import type { RouteDecl } from '../shared/command-spec.js';
10
+ /** 修改能力的路由声明表:恰好导出一个声明数组。 */
11
+ export declare const UPDATE_ROUTES: readonly RouteDecl[];
12
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/update/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAa7C,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** 修改能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 两行对应 `src/policy/wakewords.ts` 里归修改的两句唤醒词:修改食谱/废弃食谱都进
4
+ * `chef.recipe.write`(`preset` 分别为 `op: 'update'`/`op: 'deprecate'`)。
5
+ * key 名是引用(事实住 `src/add/commands.ts`),本处不定义它。
6
+ * `order` 取唤醒词表 1-based 下标(21–22),只保证跨域可比;全表级顺序由场景表定。
7
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例(空库可跑的那一行)。
8
+ */
9
+ /** 修改能力的路由声明表:恰好导出一个声明数组。 */
10
+ export const UPDATE_ROUTES = [
11
+ {
12
+ order: 21,
13
+ wakeWord: '修改食谱',
14
+ key: 'chef.recipe.write',
15
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"update","name":"宫保虾球"}\'',
16
+ },
17
+ {
18
+ order: 22,
19
+ wakeWord: '废弃食谱',
20
+ key: 'chef.recipe.write',
21
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"deprecate","name":"宫保虾球"}\'',
22
+ },
23
+ ];
24
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/update/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,mBAAmB;QACxB,GAAG,EAAE,4EAA4E;KAClF;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,mBAAmB;QACxB,GAAG,EAAE,+EAA+E;KACrF;CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** 修改能力的写处理(`chef.recipe.write` 的 update 系三 op)。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.recipe.write` 分支中 `update/discard/deprecate`
4
+ * 三路逐字节下沉:只改 import 出处,判定与装配一字不动。`add` 系三路住录入域
5
+ * (`src/add/run-write.ts`);op 路由由入口注册表按 `parseWriteOpCompat` 同集合切分
6
+ * (非法 op 入口已拦,落不到这里)。
7
+ */
8
+ import type { ChefDb, RecipeRow } from '../fetch/db.js';
9
+ /** 跑 `chef.recipe.write` 的 update 系:`update`(含 patch 对象与 total_time 别名)/`discard`/`deprecate`。
10
+ *
11
+ * `op` 由入口注册表经 `parseWriteOpCompat` 算好下传(非法 op 入口已拦,落不到这里),
12
+ * 本函数只做本域三路分支(`update/discard/deprecate`),不重算路由键。
13
+ */
14
+ export declare function runRecipeWriteUpdate(handle: ChefDb, params: Record<string, unknown>, op: string): unknown;
15
+ /** 废弃菜谱(只增不删:status 置已废弃,无物理删除)。原 `src/fetch/db.ts`,本域独占。 */
16
+ export declare function deprecateRecipe(h: ChefDb, id: string): RecipeRow;
17
+ /** 更新菜谱主表(改名撞名即拦,与新增路径同一口径)。原 `src/fetch/db.ts`,本域独占。 */
18
+ export declare function updateRecipe(h: ChefDb, id: string, patch: Record<string, unknown>): RecipeRow;
19
+ //# sourceMappingURL=run-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-write.d.ts","sourceRoot":"","sources":["../../src/update/run-write.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKxD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CA+BzG;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAIhE;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA6B7F"}
@@ -0,0 +1,99 @@
1
+ /** 修改能力的写处理(`chef.recipe.write` 的 update 系三 op)。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)`chef.recipe.write` 分支中 `update/discard/deprecate`
4
+ * 三路逐字节下沉:只改 import 出处,判定与装配一字不动。`add` 系三路住录入域
5
+ * (`src/add/run-write.ts`);op 路由由入口注册表按 `parseWriteOpCompat` 同集合切分
6
+ * (非法 op 入口已拦,落不到这里)。
7
+ */
8
+ import { ChefFetchError, ChefPolicyError } from '../fetch/errors.js';
9
+ import { canonicalRecipeName, getRecipeDetail, mustRecipe, now, qGet, qRun } from '../fetch/db.js';
10
+ import { buildRecipeReceipt } from '../render/index.js';
11
+ import { fail, resolveNameOrId } from '../shared/slots.js';
12
+ /** 跑 `chef.recipe.write` 的 update 系:`update`(含 patch 对象与 total_time 别名)/`discard`/`deprecate`。
13
+ *
14
+ * `op` 由入口注册表经 `parseWriteOpCompat` 算好下传(非法 op 入口已拦,落不到这里),
15
+ * 本函数只做本域三路分支(`update/discard/deprecate`),不重算路由键。
16
+ */
17
+ export function runRecipeWriteUpdate(handle, params, op) {
18
+ if (op === 'update') {
19
+ const hasId = typeof params.id === 'string' && params.id.trim() ? true : false;
20
+ const rid = hasId
21
+ ? params.id.trim()
22
+ : getRecipeDetail(handle, resolveNameOrId(params)).recipe.id;
23
+ const patch = {};
24
+ // name 为标识符时不计入补丁(仅 id 定位时 name 视为改名);其余直给字段即补丁。
25
+ for (const k of ['description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url']) {
26
+ if (params[k] !== undefined)
27
+ patch[k] = params[k];
28
+ }
29
+ if (hasId && typeof params.name === 'string' && params.name.trim())
30
+ patch.name = params.name.trim();
31
+ if (patch.total_time_minutes === undefined && params.total_time !== undefined)
32
+ patch.total_time_minutes = params.total_time;
33
+ if (params.patch !== undefined && typeof params.patch === 'object' && params.patch !== null && !Array.isArray(params.patch)) {
34
+ for (const [k, v] of Object.entries(params.patch)) {
35
+ if (k === 'total_time' && patch.total_time_minutes === undefined)
36
+ patch.total_time_minutes = v;
37
+ else if (['name', 'description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url'].includes(k))
38
+ patch[k] = v;
39
+ }
40
+ }
41
+ if (!Object.keys(patch).length)
42
+ fail(2, 'update 至少改一个字段(name/description/difficulty/servings/total_time_minutes/status/photo_url/source/source_url/patch)');
43
+ const r = updateRecipe(handle, rid, patch);
44
+ return buildRecipeReceipt('已更新菜谱:' + r.name + '(id=' + r.id + ')');
45
+ }
46
+ if (op === 'discard' || op === 'deprecate') {
47
+ const id = params.id;
48
+ const rid = typeof id === 'string' && id.trim() ? id.trim() : getRecipeDetail(handle, resolveNameOrId(params)).recipe.id;
49
+ const r = deprecateRecipe(handle, rid);
50
+ return buildRecipeReceipt('已废弃菜谱:' + r.name + '(id=' + r.id + ',只增不删)');
51
+ }
52
+ // 不可达:入口注册表已用 `parseWriteOpCompat` 同集合拦过非法 op(原分支尾的 fail 同语义,归口径错 exit 2)。
53
+ throw new ChefPolicyError('POLICY_BAD_INPUT', 'recipe.write 只接受 op=add/update/discard/add-ingredient/add-step');
54
+ }
55
+ /** 废弃菜谱(只增不删:status 置已废弃,无物理删除)。原 `src/fetch/db.ts`,本域独占。 */
56
+ export function deprecateRecipe(h, id) {
57
+ const r = mustRecipe(h, id);
58
+ qRun(h, 'UPDATE recipes SET status = ?, updated_at = ? WHERE id = ?', ['已废弃', now(), r.id]);
59
+ return mustRecipe(h, r.id);
60
+ }
61
+ /** 更新菜谱主表(改名撞名即拦,与新增路径同一口径)。原 `src/fetch/db.ts`,本域独占。 */
62
+ export function updateRecipe(h, id, patch) {
63
+ const r = mustRecipe(h, id);
64
+ // #854(承接 #819 G1):改名撞名即拦,引用同一口径;存去空格后的名字,与新增路径一致。
65
+ if (patch.name !== undefined) {
66
+ const newName = canonicalRecipeName(patch.name);
67
+ if (!newName)
68
+ throw new ChefFetchError('CHEF_BAD_QUERY', '改名须给非空菜名 name');
69
+ if (newName !== canonicalRecipeName(r.name)) {
70
+ const hit = qGet(h, 'SELECT id FROM recipes WHERE name = ?', [newName]);
71
+ if (hit && String(hit.id) !== r.id)
72
+ throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '菜名已存在:“' + newName + '”');
73
+ }
74
+ patch.name = newName;
75
+ }
76
+ const allowed = ['name', 'description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url'];
77
+ const sets = [];
78
+ const params = [];
79
+ for (const k of allowed) {
80
+ const v = patch[k];
81
+ if (v !== undefined) {
82
+ sets.push(k + ' = ?');
83
+ params.push(k === 'servings' || k === 'total_time_minutes' ? Number(v) : String(v));
84
+ }
85
+ }
86
+ if (!sets.length)
87
+ throw new ChefFetchError('CHEF_BAD_QUERY', 'update 至少改一个字段');
88
+ sets.push('updated_at = ?');
89
+ params.push(now());
90
+ params.push(r.id);
91
+ try {
92
+ qRun(h, 'UPDATE recipes SET ' + sets.join(', ') + ' WHERE id = ?', params);
93
+ }
94
+ catch (e) {
95
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '菜谱更新失败:' + id, { cause: e });
96
+ }
97
+ return mustRecipe(h, r.id);
98
+ }
99
+ //# sourceMappingURL=run-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-write.js","sourceRoot":"","sources":["../../src/update/run-write.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAW,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,MAA+B,EAAE,EAAU;IAC9F,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAK,MAAM,CAAC,EAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3F,MAAM,GAAG,GAAG,KAAK;YACf,CAAC,CAAE,MAAM,CAAC,EAAa,CAAC,IAAI,EAAE;YAC9B,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,iDAAiD;QACjD,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAU,EAAE,CAAC;YACxI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,KAAK,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAK,MAAM,CAAC,IAAe,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,GAAI,MAAM,CAAC,IAAe,CAAC,IAAI,EAAE,CAAC;QAC5H,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,KAAK,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;QAC5H,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5H,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;gBAC7E,IAAI,CAAC,KAAK,YAAY,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;oBAAE,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;qBAC1F,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5J,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,CAAC,EAAE,kHAAkH,CAAC,CAAC;QAC5J,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,kBAAkB,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzH,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvC,OAAO,kBAAkB,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC1E,CAAC;IACD,2EAA2E;IAC3E,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,gEAAgE,CAAC,CAAC;AAClH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,EAAU;IACnD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,EAAE,4DAA4D,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,EAAU,EAAE,KAA8B;IAChF,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5B,mDAAmD;IACnD,IAAK,KAAiC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,MAAM,OAAO,GAAG,mBAAmB,CAAE,KAAiC,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,OAAO,KAAK,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAA0B,CAAC,EAAE,uCAAuC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACjG,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,cAAc,CAAC,qBAAqB,EAAE,SAAS,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;QACjH,CAAC;QACA,KAAiC,CAAC,IAAI,GAAG,OAAO,CAAC;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAC;IAChJ,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,GAAI,KAAiC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtI,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,cAAc,CAAC,oBAAoB,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** 查看能力的命令声明(权威源:一条命令的事实只住这里)。
2
+ *
3
+ * 本能力即 HELP 一级分组「查看」。一条命令管一摊:
4
+ * · `chef.recipe.view`(查询命令):查看食谱/查看食材/查看步骤/查看营养/查看背景/
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 VIEW_COMMANDS: readonly CommandSpec[];
14
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/view/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,qCAAqC;AACrC,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAS/C,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** 查看能力的命令声明(权威源:一条命令的事实只住这里)。
2
+ *
3
+ * 本能力即 HELP 一级分组「查看」。一条命令管一摊:
4
+ * · `chef.recipe.view`(查询命令):查看食谱/查看食材/查看步骤/查看营养/查看背景/
5
+ * 看菜谱/看菜七句唤醒词都进这一条。
6
+ * 处理函数仍在老分派层(`src/cli/cmd_read.ts`),本票只立声明不搬实现——行为不变,
7
+ * 实现下沉由查看域端到端票接走(本文件不动,后续只加 run)。
8
+ *
9
+ * 标题与代表唤醒词取 HELP 现成说法,示例照 `packages/skill-chef/SKILL.md` 同命令行照抄。
10
+ */
11
+ /** 查看能力的声明表:恰好导出一个声明数组(生成器只认这一个)。 */
12
+ export const VIEW_COMMANDS = [
13
+ {
14
+ kind: 'read',
15
+ key: 'chef.recipe.view',
16
+ shape: 'detail',
17
+ title: '查看食谱',
18
+ wakeWord: '查看食谱',
19
+ example: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
20
+ },
21
+ ];
22
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/view/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,qCAAqC;AACrC,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kBAAkB;QACvB,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,6DAA6D;KACvE;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 查看能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用查看能力的东西,只经这两个名字。
5
+ */
6
+ export { VIEW_COMMANDS } from './commands.js';
7
+ export { VIEW_ROUTES } from './routes.js';
8
+ export { recipeDetail, runRecipeView } from './run.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view/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,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** 查看能力门:能力对外只经这里(结构纪律铁律一、铁律五)。
2
+ *
3
+ * 对外两件:命令声明表与路由声明表。处理函数与取数实现不在这里,
4
+ * 本票只立声明;外边要用查看能力的东西,只经这两个名字。
5
+ */
6
+ export { VIEW_COMMANDS } from './commands.js';
7
+ export { VIEW_ROUTES } from './routes.js';
8
+ export { recipeDetail, runRecipeView } from './run.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/view/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,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** 查看能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 七行对应 `src/policy/wakewords.ts` 里查看七句唤醒词:查看食谱/查看食材/查看步骤/查看营养/
4
+ * 查看背景/看菜谱/看菜都进 `chef.recipe.view`。`order` 取唤醒词表 1-based 下标(5–11),
5
+ * 只保证跨域可比;全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例:需菜名的带菜名(空库可跑的那一行)。
7
+ */
8
+ import type { RouteDecl } from '../shared/command-spec.js';
9
+ /** 查看能力的路由声明表:恰好导出一个声明数组。 */
10
+ export declare const VIEW_ROUTES: readonly RouteDecl[];
11
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/view/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EA2C3C,CAAC"}
@@ -0,0 +1,53 @@
1
+ /** 查看能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 七行对应 `src/policy/wakewords.ts` 里查看七句唤醒词:查看食谱/查看食材/查看步骤/查看营养/
4
+ * 查看背景/看菜谱/看菜都进 `chef.recipe.view`。`order` 取唤醒词表 1-based 下标(5–11),
5
+ * 只保证跨域可比;全表级顺序由场景表定,本文件不另立顺序。
6
+ * 命令行写法照 `packages/skill-chef/SKILL.md` 同命令示例:需菜名的带菜名(空库可跑的那一行)。
7
+ */
8
+ /** 查看能力的路由声明表:恰好导出一个声明数组。 */
9
+ export const VIEW_ROUTES = [
10
+ {
11
+ order: 5,
12
+ wakeWord: '查看食谱',
13
+ key: 'chef.recipe.view',
14
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
15
+ },
16
+ {
17
+ order: 6,
18
+ wakeWord: '查看食材',
19
+ key: 'chef.recipe.view',
20
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
21
+ },
22
+ {
23
+ order: 7,
24
+ wakeWord: '查看步骤',
25
+ key: 'chef.recipe.view',
26
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
27
+ },
28
+ {
29
+ order: 8,
30
+ wakeWord: '查看营养',
31
+ key: 'chef.recipe.view',
32
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
33
+ },
34
+ {
35
+ order: 9,
36
+ wakeWord: '查看背景',
37
+ key: 'chef.recipe.view',
38
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
39
+ },
40
+ {
41
+ order: 10,
42
+ wakeWord: '看菜谱',
43
+ key: 'chef.recipe.view',
44
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
45
+ },
46
+ {
47
+ order: 11,
48
+ wakeWord: '看菜',
49
+ key: 'chef.recipe.view',
50
+ cli: 'chef-cmd-read chef.recipe.view --params \'{"name":"宫保虾球"}\'',
51
+ },
52
+ ];
53
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/view/routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,kBAAkB;QACvB,GAAG,EAAE,6DAA6D;KACnE;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** 查看能力的命令处理(`chef.recipe.view`)。
2
+ *
3
+ * 老分派层(`src/cli/cmd_read.ts`)分支逐字节下沉:只改 import 出处,判定与装配一字不动。
4
+ * 缺定位走取数错(`resolveNameOrId` 任务口径,入口映射为 exit 4)。
5
+ */
6
+ import type { ChefDb } from '../fetch/db.js';
7
+ import type { RecipeDetail } from '../render/views.js';
8
+ export declare function recipeDetail(detail: RecipeDetail): {
9
+ item: Record<string, unknown>;
10
+ };
11
+ /** 跑 `chef.recipe.view`:按名或 id 取单菜全貌(detail 形)。 */
12
+ export declare function runRecipeView(handle: ChefDb, params: Record<string, unknown>): unknown;
13
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/view/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAkBpF;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAEtF"}