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.
Files changed (307) hide show
  1. package/SKILL.md +42 -29
  2. package/dist/add/commands.d.ts +15 -0
  3. package/dist/add/commands.d.ts.map +1 -0
  4. package/dist/add/commands.js +22 -0
  5. package/dist/add/commands.js.map +1 -0
  6. package/dist/add/index.d.ts +11 -0
  7. package/dist/add/index.d.ts.map +1 -0
  8. package/dist/add/index.js +11 -0
  9. package/dist/add/index.js.map +1 -0
  10. package/dist/add/pages.d.ts +62 -0
  11. package/dist/add/pages.d.ts.map +1 -0
  12. package/dist/add/pages.js +362 -0
  13. package/dist/add/pages.js.map +1 -0
  14. package/dist/add/routes.d.ts +11 -0
  15. package/dist/add/routes.d.ts.map +1 -0
  16. package/dist/add/routes.js +29 -0
  17. package/dist/add/routes.js.map +1 -0
  18. package/dist/add/run-write.d.ts +37 -0
  19. package/dist/add/run-write.d.ts.map +1 -0
  20. package/dist/add/run-write.js +226 -0
  21. package/dist/add/run-write.js.map +1 -0
  22. package/dist/cli/cmd_read.js +48 -289
  23. package/dist/cli/cmd_read.js.map +1 -1
  24. package/dist/cli/keys.d.ts +2 -1
  25. package/dist/cli/keys.d.ts.map +1 -1
  26. package/dist/cli/keys.js +49 -1
  27. package/dist/cli/keys.js.map +1 -1
  28. package/dist/cook/commands.d.ts +13 -0
  29. package/dist/cook/commands.d.ts.map +1 -0
  30. package/dist/cook/commands.js +21 -0
  31. package/dist/cook/commands.js.map +1 -0
  32. package/dist/cook/index.d.ts +10 -0
  33. package/dist/cook/index.d.ts.map +1 -0
  34. package/dist/cook/index.js +9 -0
  35. package/dist/cook/index.js.map +1 -0
  36. package/dist/cook/page-art.d.ts +18 -0
  37. package/dist/cook/page-art.d.ts.map +1 -0
  38. package/dist/cook/page-art.js +30 -0
  39. package/dist/cook/page-art.js.map +1 -0
  40. package/dist/cook/page-css.d.ts +9 -0
  41. package/dist/cook/page-css.d.ts.map +1 -0
  42. package/dist/cook/page-css.js +206 -0
  43. package/dist/cook/page-css.js.map +1 -0
  44. package/dist/cook/page-text.d.ts +28 -0
  45. package/dist/cook/page-text.d.ts.map +1 -0
  46. package/dist/cook/page-text.js +65 -0
  47. package/dist/cook/page-text.js.map +1 -0
  48. package/dist/cook/routes.d.ts +11 -0
  49. package/dist/cook/routes.d.ts.map +1 -0
  50. package/dist/cook/routes.js +35 -0
  51. package/dist/cook/routes.js.map +1 -0
  52. package/dist/cook/run.d.ts +79 -0
  53. package/dist/cook/run.d.ts.map +1 -0
  54. package/dist/cook/run.js +276 -0
  55. package/dist/cook/run.js.map +1 -0
  56. package/dist/data/commands.d.ts +11 -0
  57. package/dist/data/commands.d.ts.map +1 -0
  58. package/dist/data/commands.js +18 -0
  59. package/dist/data/commands.js.map +1 -0
  60. package/dist/data/index.d.ts +11 -0
  61. package/dist/data/index.d.ts.map +1 -0
  62. package/dist/data/index.js +11 -0
  63. package/dist/data/index.js.map +1 -0
  64. package/dist/data/pages.d.ts +50 -0
  65. package/dist/data/pages.d.ts.map +1 -0
  66. package/dist/data/pages.js +226 -0
  67. package/dist/data/pages.js.map +1 -0
  68. package/dist/data/routes.d.ts +11 -0
  69. package/dist/data/routes.d.ts.map +1 -0
  70. package/dist/data/routes.js +17 -0
  71. package/dist/data/routes.js.map +1 -0
  72. package/dist/data/run-batch.d.ts +21 -0
  73. package/dist/data/run-batch.d.ts.map +1 -0
  74. package/dist/data/run-batch.js +123 -0
  75. package/dist/data/run-batch.js.map +1 -0
  76. package/dist/data/run-query.d.ts +14 -0
  77. package/dist/data/run-query.d.ts.map +1 -0
  78. package/dist/data/run-query.js +158 -0
  79. package/dist/data/run-query.js.map +1 -0
  80. package/dist/fetch/db.d.ts +11 -31
  81. package/dist/fetch/db.d.ts.map +1 -1
  82. package/dist/fetch/db.js +39 -328
  83. package/dist/fetch/db.js.map +1 -1
  84. package/dist/fetch/index.d.ts +7 -1
  85. package/dist/fetch/index.d.ts.map +1 -1
  86. package/dist/fetch/index.js +9 -1
  87. package/dist/fetch/index.js.map +1 -1
  88. package/dist/fetch/schema.d.ts +7 -0
  89. package/dist/fetch/schema.d.ts.map +1 -0
  90. package/dist/fetch/schema.js +53 -0
  91. package/dist/fetch/schema.js.map +1 -0
  92. package/dist/help/lookup.d.ts.map +1 -1
  93. package/dist/help/lookup.js +20 -4
  94. package/dist/help/lookup.js.map +1 -1
  95. package/dist/help/sceneData.d.ts +8 -7
  96. package/dist/help/sceneData.d.ts.map +1 -1
  97. package/dist/help/sceneData.js +22 -21
  98. package/dist/help/sceneData.js.map +1 -1
  99. package/dist/history/commands.js +1 -1
  100. package/dist/history/index.d.ts +3 -2
  101. package/dist/history/index.d.ts.map +1 -1
  102. package/dist/history/index.js +3 -2
  103. package/dist/history/index.js.map +1 -1
  104. package/dist/history/page-css.d.ts +12 -0
  105. package/dist/history/page-css.d.ts.map +1 -0
  106. package/dist/history/page-css.js +208 -0
  107. package/dist/history/page-css.js.map +1 -0
  108. package/dist/history/pages.d.ts +77 -0
  109. package/dist/history/pages.d.ts.map +1 -0
  110. package/dist/history/pages.js +282 -0
  111. package/dist/history/pages.js.map +1 -0
  112. package/dist/history/routes.d.ts +4 -6
  113. package/dist/history/routes.d.ts.map +1 -1
  114. package/dist/history/routes.js +22 -16
  115. package/dist/history/routes.js.map +1 -1
  116. package/dist/history/run-query.d.ts +61 -0
  117. package/dist/history/run-query.d.ts.map +1 -0
  118. package/dist/history/run-query.js +130 -0
  119. package/dist/history/run-query.js.map +1 -0
  120. package/dist/history/run-record.d.ts +31 -0
  121. package/dist/history/run-record.d.ts.map +1 -0
  122. package/dist/history/run-record.js +85 -0
  123. package/dist/history/run-record.js.map +1 -0
  124. package/dist/history/validate.d.ts +22 -0
  125. package/dist/history/validate.d.ts.map +1 -0
  126. package/dist/history/validate.js +69 -0
  127. package/dist/history/validate.js.map +1 -0
  128. package/dist/policy/wakewords.d.ts +1 -1
  129. package/dist/policy/wakewords.d.ts.map +1 -1
  130. package/dist/policy/wakewords.js +23 -2
  131. package/dist/policy/wakewords.js.map +1 -1
  132. package/dist/relation/commands.d.ts +11 -0
  133. package/dist/relation/commands.d.ts.map +1 -0
  134. package/dist/relation/commands.js +26 -0
  135. package/dist/relation/commands.js.map +1 -0
  136. package/dist/relation/index.d.ts +11 -0
  137. package/dist/relation/index.d.ts.map +1 -0
  138. package/dist/relation/index.js +11 -0
  139. package/dist/relation/index.js.map +1 -0
  140. package/dist/relation/pages.d.ts +37 -0
  141. package/dist/relation/pages.d.ts.map +1 -0
  142. package/dist/relation/pages.js +224 -0
  143. package/dist/relation/pages.js.map +1 -0
  144. package/dist/relation/routes.d.ts +11 -0
  145. package/dist/relation/routes.d.ts.map +1 -0
  146. package/dist/relation/routes.js +29 -0
  147. package/dist/relation/routes.js.map +1 -0
  148. package/dist/relation/run-query.d.ts +10 -0
  149. package/dist/relation/run-query.d.ts.map +1 -0
  150. package/dist/relation/run-query.js +104 -0
  151. package/dist/relation/run-query.js.map +1 -0
  152. package/dist/relation/run-write.d.ts +13 -0
  153. package/dist/relation/run-write.d.ts.map +1 -0
  154. package/dist/relation/run-write.js +114 -0
  155. package/dist/relation/run-write.js.map +1 -0
  156. package/dist/relation/shapes.d.ts +8 -0
  157. package/dist/relation/shapes.d.ts.map +1 -0
  158. package/dist/relation/shapes.js +153 -0
  159. package/dist/relation/shapes.js.map +1 -0
  160. package/dist/relation/treeShapes.d.ts +23 -0
  161. package/dist/relation/treeShapes.d.ts.map +1 -0
  162. package/dist/relation/treeShapes.js +289 -0
  163. package/dist/relation/treeShapes.js.map +1 -0
  164. package/dist/render/copyArea.d.ts +67 -0
  165. package/dist/render/copyArea.d.ts.map +1 -0
  166. package/dist/render/copyArea.js +146 -0
  167. package/dist/render/copyArea.js.map +1 -0
  168. package/dist/render/envelope.d.ts.map +1 -1
  169. package/dist/render/envelope.js +4 -0
  170. package/dist/render/envelope.js.map +1 -1
  171. package/dist/render/index.d.ts +14 -1
  172. package/dist/render/index.d.ts.map +1 -1
  173. package/dist/render/index.js +16 -1
  174. package/dist/render/index.js.map +1 -1
  175. package/dist/render/sceneBand.d.ts +36 -0
  176. package/dist/render/sceneBand.d.ts.map +1 -0
  177. package/dist/render/sceneBand.js +166 -0
  178. package/dist/render/sceneBand.js.map +1 -0
  179. package/dist/render/sceneRhythm.d.ts +6 -0
  180. package/dist/render/sceneRhythm.d.ts.map +1 -0
  181. package/dist/render/sceneRhythm.js +149 -0
  182. package/dist/render/sceneRhythm.js.map +1 -0
  183. package/dist/render/sceneShell.d.ts +17 -0
  184. package/dist/render/sceneShell.d.ts.map +1 -0
  185. package/dist/render/sceneShell.js +46 -0
  186. package/dist/render/sceneShell.js.map +1 -0
  187. package/dist/render/skin.d.ts +13 -0
  188. package/dist/render/skin.d.ts.map +1 -0
  189. package/dist/render/skin.js +282 -0
  190. package/dist/render/skin.js.map +1 -0
  191. package/dist/render/views.d.ts +1 -39
  192. package/dist/render/views.d.ts.map +1 -1
  193. package/dist/render/views.js +6 -56
  194. package/dist/render/views.js.map +1 -1
  195. package/dist/search/commands.d.ts +14 -0
  196. package/dist/search/commands.d.ts.map +1 -0
  197. package/dist/search/commands.js +22 -0
  198. package/dist/search/commands.js.map +1 -0
  199. package/dist/search/index.d.ts +9 -0
  200. package/dist/search/index.d.ts.map +1 -0
  201. package/dist/search/index.js +9 -0
  202. package/dist/search/index.js.map +1 -0
  203. package/dist/search/routes.d.ts +19 -0
  204. package/dist/search/routes.d.ts.map +1 -0
  205. package/dist/search/routes.js +91 -0
  206. package/dist/search/routes.js.map +1 -0
  207. package/dist/search/run.d.ts +30 -0
  208. package/dist/search/run.d.ts.map +1 -0
  209. package/dist/search/run.js +157 -0
  210. package/dist/search/run.js.map +1 -0
  211. package/dist/setup/commands.d.ts +10 -0
  212. package/dist/setup/commands.d.ts.map +1 -0
  213. package/dist/setup/commands.js +17 -0
  214. package/dist/setup/commands.js.map +1 -0
  215. package/dist/setup/index.d.ts +6 -0
  216. package/dist/setup/index.d.ts.map +1 -0
  217. package/dist/setup/index.js +6 -0
  218. package/dist/setup/index.js.map +1 -0
  219. package/dist/setup/pages.d.ts +19 -0
  220. package/dist/setup/pages.d.ts.map +1 -0
  221. package/dist/setup/pages.js +163 -0
  222. package/dist/setup/pages.js.map +1 -0
  223. package/dist/setup/routes.d.ts +9 -0
  224. package/dist/setup/routes.d.ts.map +1 -0
  225. package/dist/setup/routes.js +15 -0
  226. package/dist/setup/routes.js.map +1 -0
  227. package/dist/setup/run-init.d.ts +11 -0
  228. package/dist/setup/run-init.d.ts.map +1 -0
  229. package/dist/setup/run-init.js +19 -0
  230. package/dist/setup/run-init.js.map +1 -0
  231. package/dist/shared/command-spec.d.ts +44 -0
  232. package/dist/shared/command-spec.d.ts.map +1 -0
  233. package/dist/shared/command-spec.js +15 -0
  234. package/dist/shared/command-spec.js.map +1 -0
  235. package/dist/shared/slots.d.ts +24 -0
  236. package/dist/shared/slots.d.ts.map +1 -0
  237. package/dist/shared/slots.js +63 -0
  238. package/dist/shared/slots.js.map +1 -0
  239. package/dist/shopping/commands.d.ts +13 -0
  240. package/dist/shopping/commands.d.ts.map +1 -0
  241. package/dist/shopping/commands.js +21 -0
  242. package/dist/shopping/commands.js.map +1 -0
  243. package/dist/shopping/index.d.ts +10 -0
  244. package/dist/shopping/index.d.ts.map +1 -0
  245. package/dist/shopping/index.js +10 -0
  246. package/dist/shopping/index.js.map +1 -0
  247. package/dist/shopping/pages.d.ts +22 -0
  248. package/dist/shopping/pages.d.ts.map +1 -0
  249. package/dist/shopping/pages.js +170 -0
  250. package/dist/shopping/pages.js.map +1 -0
  251. package/dist/shopping/routes.d.ts +11 -0
  252. package/dist/shopping/routes.d.ts.map +1 -0
  253. package/dist/shopping/routes.js +35 -0
  254. package/dist/shopping/routes.js.map +1 -0
  255. package/dist/shopping/run.d.ts +28 -0
  256. package/dist/shopping/run.d.ts.map +1 -0
  257. package/dist/shopping/run.js +122 -0
  258. package/dist/shopping/run.js.map +1 -0
  259. package/dist/triggers/chef-scenes.d.ts +3 -2
  260. package/dist/triggers/chef-scenes.d.ts.map +1 -1
  261. package/dist/triggers/chef-scenes.js +16 -15
  262. package/dist/triggers/chef-scenes.js.map +1 -1
  263. package/dist/update/commands.d.ts +12 -0
  264. package/dist/update/commands.d.ts.map +1 -0
  265. package/dist/update/commands.js +11 -0
  266. package/dist/update/commands.js.map +1 -0
  267. package/dist/update/index.d.ts +9 -0
  268. package/dist/update/index.d.ts.map +1 -0
  269. package/dist/update/index.js +9 -0
  270. package/dist/update/index.js.map +1 -0
  271. package/dist/update/routes.d.ts +14 -0
  272. package/dist/update/routes.d.ts.map +1 -0
  273. package/dist/update/routes.js +38 -0
  274. package/dist/update/routes.js.map +1 -0
  275. package/dist/update/run-write.d.ts +19 -0
  276. package/dist/update/run-write.d.ts.map +1 -0
  277. package/dist/update/run-write.js +309 -0
  278. package/dist/update/run-write.js.map +1 -0
  279. package/dist/view/commands.d.ts +14 -0
  280. package/dist/view/commands.d.ts.map +1 -0
  281. package/dist/view/commands.js +22 -0
  282. package/dist/view/commands.js.map +1 -0
  283. package/dist/view/index.d.ts +9 -0
  284. package/dist/view/index.d.ts.map +1 -0
  285. package/dist/view/index.js +9 -0
  286. package/dist/view/index.js.map +1 -0
  287. package/dist/view/page.d.ts +25 -0
  288. package/dist/view/page.d.ts.map +1 -0
  289. package/dist/view/page.js +306 -0
  290. package/dist/view/page.js.map +1 -0
  291. package/dist/view/pageCss.d.ts +8 -0
  292. package/dist/view/pageCss.d.ts.map +1 -0
  293. package/dist/view/pageCss.js +327 -0
  294. package/dist/view/pageCss.js.map +1 -0
  295. package/dist/view/pageSection.d.ts +21 -0
  296. package/dist/view/pageSection.d.ts.map +1 -0
  297. package/dist/view/pageSection.js +59 -0
  298. package/dist/view/pageSection.js.map +1 -0
  299. package/dist/view/routes.d.ts +11 -0
  300. package/dist/view/routes.d.ts.map +1 -0
  301. package/dist/view/routes.js +53 -0
  302. package/dist/view/routes.js.map +1 -0
  303. package/dist/view/run.d.ts +17 -0
  304. package/dist/view/run.d.ts.map +1 -0
  305. package/dist/view/run.js +93 -0
  306. package/dist/view/run.js.map +1 -0
  307. package/package.json +3 -3
@@ -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,14 @@
1
+ /** 修改能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里归修改的四句唤醒词:修改食谱/废弃食谱都进
4
+ * `chef.recipe.write`(`preset` 分别为 `op: 'update'`/`op: 'deprecate'`);
5
+ * #841 追加的修改步骤/修改食材同样进这一条,`preset` 带 `target` 分流(`step`/`ingredient`,
6
+ * 这两条 #774 已实现,此前无词指过来)。
7
+ * key 名是引用(事实住 `src/add/commands.ts`),本处不定义它。
8
+ * `order` 取唤醒词表 1-based 下标:21–22 是原表两句,42–43 是 #841 追加的两句(表尾按域归组)。
9
+ * 命令行写法照本表各条的槽位示例(空库可跑的那一行)。
10
+ */
11
+ import type { RouteDecl } from '../shared/command-spec.js';
12
+ /** 修改能力的路由声明表:恰好导出一个声明数组。 */
13
+ export declare const UPDATE_ROUTES: readonly RouteDecl[];
14
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/update/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,6BAA6B;AAC7B,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAyB7C,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** 修改能力的路由声明(唤醒词命中哪条命令,声明面唯一一处)。
2
+ *
3
+ * 四行对应 `src/policy/wakewords.ts` 里归修改的四句唤醒词:修改食谱/废弃食谱都进
4
+ * `chef.recipe.write`(`preset` 分别为 `op: 'update'`/`op: 'deprecate'`);
5
+ * #841 追加的修改步骤/修改食材同样进这一条,`preset` 带 `target` 分流(`step`/`ingredient`,
6
+ * 这两条 #774 已实现,此前无词指过来)。
7
+ * key 名是引用(事实住 `src/add/commands.ts`),本处不定义它。
8
+ * `order` 取唤醒词表 1-based 下标:21–22 是原表两句,42–43 是 #841 追加的两句(表尾按域归组)。
9
+ * 命令行写法照本表各条的槽位示例(空库可跑的那一行)。
10
+ */
11
+ /** 修改能力的路由声明表:恰好导出一个声明数组。 */
12
+ export const UPDATE_ROUTES = [
13
+ {
14
+ order: 21,
15
+ wakeWord: '修改食谱',
16
+ key: 'chef.recipe.write',
17
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"update","name":"辣椒炒肉"}\'',
18
+ },
19
+ {
20
+ order: 22,
21
+ wakeWord: '废弃食谱',
22
+ key: 'chef.recipe.write',
23
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"deprecate","name":"辣椒炒肉"}\'',
24
+ },
25
+ {
26
+ order: 42,
27
+ wakeWord: '修改步骤',
28
+ key: 'chef.recipe.write',
29
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"update","target":"step","name":"辣椒炒肉","step":2,"action":"大火翻炒"}\'',
30
+ },
31
+ {
32
+ order: 43,
33
+ wakeWord: '修改食材',
34
+ key: 'chef.recipe.write',
35
+ cli: 'chef-cmd-read chef.recipe.write --params \'{"op":"update","target":"ingredient","name":"辣椒炒肉","ingredient":"盐","quantity":8}\'',
36
+ },
37
+ ];
38
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/update/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,mBAAmB;QACxB,GAAG,EAAE,qHAAqH;KAC3H;IACD;QACE,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,mBAAmB;QACxB,GAAG,EAAE,gIAAgI;KACtI;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,EAAiB,SAAS,EAAW,MAAM,gBAAgB,CAAC;AAKhF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAuCzG;AA2KD,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,309 @@
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, pickStr, 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
+ // #774 · 修改域 4 卡之二/之三:步骤与食材走同一 op 下的 target 分流(入口注册表不动,
20
+ // `parseWriteOpCompat` 仍只认 op 名;target 是本域内的子动作键,不进 CLI 兼容集)。
21
+ if (params.target === 'step')
22
+ return runUpdateStepContent(handle, params);
23
+ if (params.target === 'step-order')
24
+ return runReorderSteps(handle, params);
25
+ if (params.target === 'ingredient')
26
+ return runUpdateIngredient(handle, params);
27
+ if (params.target !== undefined) {
28
+ throw new ChefPolicyError('POLICY_BAD_INPUT', 'update 只接受 target=step/step-order/ingredient(改主信息不给 target):' + JSON.stringify(params.target));
29
+ }
30
+ const hasId = typeof params.id === 'string' && params.id.trim() ? true : false;
31
+ const rid = hasId
32
+ ? params.id.trim()
33
+ : getRecipeDetail(handle, resolveNameOrId(params)).recipe.id;
34
+ const patch = {};
35
+ // name 为标识符时不计入补丁(仅 id 定位时 name 视为改名);其余直给字段即补丁。
36
+ for (const k of ['description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url']) {
37
+ if (params[k] !== undefined)
38
+ patch[k] = params[k];
39
+ }
40
+ if (hasId && typeof params.name === 'string' && params.name.trim())
41
+ patch.name = params.name.trim();
42
+ if (patch.total_time_minutes === undefined && params.total_time !== undefined)
43
+ patch.total_time_minutes = params.total_time;
44
+ if (params.patch !== undefined && typeof params.patch === 'object' && params.patch !== null && !Array.isArray(params.patch)) {
45
+ for (const [k, v] of Object.entries(params.patch)) {
46
+ if (k === 'total_time' && patch.total_time_minutes === undefined)
47
+ patch.total_time_minutes = v;
48
+ else if (['name', 'description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url'].includes(k))
49
+ patch[k] = v;
50
+ }
51
+ }
52
+ if (!Object.keys(patch).length)
53
+ fail(2, 'update 至少改一个字段(name/description/difficulty/servings/total_time_minutes/status/photo_url/source/source_url/patch)');
54
+ const r = updateRecipe(handle, rid, patch);
55
+ return buildRecipeReceipt('已更新菜谱:' + r.name + '(id=' + r.id + ')');
56
+ }
57
+ if (op === 'discard' || op === 'deprecate') {
58
+ const id = params.id;
59
+ const rid = typeof id === 'string' && id.trim() ? id.trim() : getRecipeDetail(handle, resolveNameOrId(params)).recipe.id;
60
+ const r = deprecateRecipe(handle, rid);
61
+ return buildRecipeReceipt('已废弃菜谱:' + r.name + '(id=' + r.id + ',只增不删)');
62
+ }
63
+ // 不可达:入口注册表已用 `parseWriteOpCompat` 同集合拦过非法 op(原分支尾的 fail 同语义,归口径错 exit 2)。
64
+ throw new ChefPolicyError('POLICY_BAD_INPUT', 'recipe.write 只接受 op=add/update/discard/add-ingredient/add-step');
65
+ }
66
+ /** #774 · 修改步骤之改内容(`update_step_content` 的一半)。
67
+ *
68
+ * 老件语义(`step_manager.py:update`):按步骤 id 动态拼 `UPDATE cooking_steps SET ...`。
69
+ * 本域口径:按第 N 步或步骤 id 定位到**同一道菜**的行,只改内容列
70
+ * (`action/duration_minutes/heat_level/temperature/expected_result`),不碰 `sequence`
71
+ * (顺序只由重排一路改,见 `runReorderSteps`)。
72
+ * 818 定案:`duration_minutes` 在**追加**一路必填;改内容一路缺省沿用旧值,
73
+ * 给了就必须是有限数字,否则取数层抛 `CHEF_BAD_QUERY`(CLI exit 4),不写半条。
74
+ */
75
+ function runUpdateStepContent(handle, params) {
76
+ const detail = getRecipeDetail(handle, resolveNameOrId(params));
77
+ const rid = detail.recipe.id;
78
+ const step = pickStep(detail.steps, params.step ?? params.sequence ?? params.step_id);
79
+ if (!step)
80
+ fail(2, '改步骤须给 step(第 N 步数字,或步骤 id)');
81
+ const patch = {};
82
+ const action = pickStr(params, 'action');
83
+ if (action !== undefined && action.trim())
84
+ patch.action = action.trim();
85
+ for (const k of ['heat_level', 'temperature', 'expected_result']) {
86
+ const s = pickStr(params, k);
87
+ if (s !== undefined)
88
+ patch[k] = s;
89
+ }
90
+ if (params.duration_minutes !== undefined) {
91
+ const n = toFiniteNumber(params.duration_minutes);
92
+ if (n === undefined)
93
+ throw new ChefFetchError('CHEF_BAD_QUERY', '步骤须给数字时长 duration_minutes(老库 NOT NULL;缺时长请问用户补齐)');
94
+ patch.duration_minutes = n;
95
+ }
96
+ if (!Object.keys(patch).length)
97
+ fail(2, '改步骤至少改一个字段(action/duration_minutes/heat_level/temperature/expected_result)');
98
+ const sets = [];
99
+ const args = [];
100
+ for (const k of ['action', 'duration_minutes', 'heat_level', 'temperature', 'expected_result']) {
101
+ const v = patch[k];
102
+ if (v !== undefined) {
103
+ sets.push(k + ' = ?');
104
+ args.push(k === 'duration_minutes' ? Number(v) : String(v));
105
+ }
106
+ }
107
+ args.push(step.id);
108
+ try {
109
+ qRun(handle, 'UPDATE cooking_steps SET ' + sets.join(', ') + ' WHERE id = ?', args);
110
+ }
111
+ catch (e) {
112
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '步骤更新失败:第' + step.sequence + '步', { cause: e });
113
+ }
114
+ const row = qGet(handle, 'SELECT * FROM cooking_steps WHERE id = ?', [step.id]);
115
+ if (!row)
116
+ throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '步骤写后读回失败:第' + step.sequence + '步');
117
+ return buildRecipeReceipt('已更新步骤:第' + step.sequence + '步(' + String(row.action ?? '') + ')');
118
+ }
119
+ /** #774 · 修改步骤之重排(`update_step_content` 的另一半)。
120
+ *
121
+ * 老件语义(`step_manager.py:reorder`):两步 `sequence` 三语句互换(经 `-1` 中转,事务包裹)。
122
+ * 本域口径:`from`/`to` 都是**第 N 步**(1-based 序号,不是 id),必须同属一道菜、
123
+ * 两行都存在、且不相等;三语句同样经 `-1` 中转,并用 `BEGIN/COMMIT` 包裹
124
+ * (中途失败即 `ROLLBACK`,不留 `-1` 半条)。
125
+ */
126
+ function runReorderSteps(handle, params) {
127
+ const detail = getRecipeDetail(handle, resolveNameOrId(params));
128
+ const rid = detail.recipe.id;
129
+ const from = toFiniteNumber(params.from);
130
+ const to = toFiniteNumber(params.to);
131
+ if (from === undefined || !Number.isInteger(from) || from <= 0)
132
+ fail(2, '重排须给 from(第 N 步,正整数)');
133
+ if (to === undefined || !Number.isInteger(to) || to <= 0)
134
+ fail(2, '重排须给 to(第 N 步,正整数)');
135
+ if (from === to)
136
+ fail(2, '重排 from 与 to 不能相同(第' + from + '步)');
137
+ const a = detail.steps.find((s) => s.sequence === from);
138
+ const b = detail.steps.find((s) => s.sequence === to);
139
+ if (!a)
140
+ throw new ChefFetchError('CHEF_BAD_QUERY', '无第' + from + '步(本菜共' + detail.steps.length + '步)');
141
+ if (!b)
142
+ throw new ChefFetchError('CHEF_BAD_QUERY', '无第' + to + '步(本菜共' + detail.steps.length + '步)');
143
+ try {
144
+ handle.db.exec('BEGIN');
145
+ try {
146
+ qRun(handle, 'UPDATE cooking_steps SET sequence = ? WHERE id = ?', [-1, a.id]);
147
+ qRun(handle, 'UPDATE cooking_steps SET sequence = ? WHERE id = ?', [from, b.id]);
148
+ qRun(handle, 'UPDATE cooking_steps SET sequence = ? WHERE id = ?', [to, a.id]);
149
+ handle.db.exec('COMMIT');
150
+ }
151
+ catch (e) {
152
+ try {
153
+ handle.db.exec('ROLLBACK');
154
+ }
155
+ catch { /* ignore */ }
156
+ throw e;
157
+ }
158
+ }
159
+ catch (e) {
160
+ if (e instanceof ChefFetchError)
161
+ throw e;
162
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '步骤重排失败:第' + from + '步↔第' + to + '步', { cause: e });
163
+ }
164
+ return buildRecipeReceipt('已重排步骤:第' + from + '步↔第' + to + '步');
165
+ }
166
+ /** #774 · 修改食材之改用量(`update_ingredient` 的写半)。
167
+ *
168
+ * 老件语义(`ingredient_manager.py:update`):按食材 id 动态拼 `UPDATE ingredients SET ...`。
169
+ * 本域口径:按食材名或食材 id 定位到**同一道菜**的行;改用量须给有限数字
170
+ * `quantity`(818 定案甲,老库 `NOT NULL`,缺值取数层抛 `CHEF_BAD_QUERY`,CLI exit 4,
171
+ * 不写半条;文字的「适量」只走 `quantity_text`,数字另给估计数),纯文字修正
172
+ * (`unit/quantity_text/category/substitute`)可不带动数字(旧值沿用,约束安全)。
173
+ * 关联步骤(`step_ingredients`)**本期不开**(818 定案:关联本期不开;769 对账:
174
+ * 四列在但无写路径,且 `quantity_used/introduced_at/unit` 另有必填——本函数遇到
175
+ * `step_id/link` 类参数即口径失败 exit 2,不静默丢掉)。
176
+ */
177
+ function runUpdateIngredient(handle, params) {
178
+ const detail = getRecipeDetail(handle, resolveNameOrId(params));
179
+ const rid = detail.recipe.id;
180
+ for (const k of ['step_id', 'link_step', 'step', 'quantity_used', 'introduced_at']) {
181
+ if (params[k] !== undefined) {
182
+ throw new ChefPolicyError('POLICY_BAD_INPUT', '食材与步骤的关联暂不支持,改不了 ' + k + ';请只改用量/文字,或改用添加食材');
183
+ }
184
+ }
185
+ const key = params.ingredient ?? params.name ?? params.ingredient_id ?? params.id;
186
+ const row = pickIngredient(detail.ingredients, key);
187
+ if (!row)
188
+ fail(2, '改食材须给 ingredient(食材名,或食材 id)');
189
+ const patch = {};
190
+ if (params.quantity !== undefined) {
191
+ const n = toFiniteNumber(params.quantity);
192
+ if (n === undefined)
193
+ throw new ChefFetchError('CHEF_BAD_QUERY', '食材须给数字用量 quantity(老库 NOT NULL;适量请同时给估计数+quantity_text)');
194
+ patch.quantity = n;
195
+ }
196
+ const cat = pickStr(params, 'category');
197
+ if (cat !== undefined)
198
+ patch.category = cat;
199
+ for (const k of ['unit', 'quantity_text', 'substitute']) {
200
+ const s = pickStr(params, k);
201
+ if (s !== undefined)
202
+ patch[k] = s;
203
+ }
204
+ // 改名走专用键 `new_name`:`name` 是菜定位键(见 `resolveNameOrId`),不可复用为新名。
205
+ if (params.new_name !== undefined && typeof params.new_name === 'string' && params.new_name.trim() && params.new_name.trim() !== row.name) {
206
+ patch.name = params.new_name.trim();
207
+ }
208
+ if (params.is_optional !== undefined)
209
+ patch.is_optional = params.is_optional === true || params.is_optional === 1 ? 1 : 0;
210
+ if (!Object.keys(patch).length)
211
+ fail(2, '改食材至少改一个字段(quantity/unit/quantity_text/category/is_optional/substitute/new_name;改用量须给数字 quantity)');
212
+ const sets = [];
213
+ const args = [];
214
+ for (const k of ['name', 'category', 'quantity', 'unit', 'quantity_text', 'is_optional', 'substitute']) {
215
+ const v = patch[k];
216
+ if (v !== undefined) {
217
+ sets.push(k + ' = ?');
218
+ args.push(k === 'quantity' || k === 'is_optional' ? Number(v) : String(v));
219
+ }
220
+ }
221
+ args.push(row.id);
222
+ try {
223
+ qRun(handle, 'UPDATE ingredients SET ' + sets.join(', ') + ' WHERE id = ?', args);
224
+ }
225
+ catch (e) {
226
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '食材更新失败:' + row.name, { cause: e });
227
+ }
228
+ const back = qGet(handle, 'SELECT * FROM ingredients WHERE id = ?', [row.id]);
229
+ if (!back)
230
+ throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '食材写后读回失败:' + row.name);
231
+ return buildRecipeReceipt('已更新食材:' + String(back.name ?? row.name) + '(用量' + String(back.quantity ?? '') + String(back.unit ?? '') + ')');
232
+ }
233
+ /** 在一道菜的步骤行里按「第 N 步数字/步骤 id」挑一行(跨菜 id 不认,只认本菜)。 */
234
+ function pickStep(steps, key) {
235
+ if (typeof key === 'number' && Number.isFinite(key))
236
+ return steps.find((s) => s.sequence === key);
237
+ if (typeof key === 'string' && key.trim()) {
238
+ const t = key.trim();
239
+ const asNum = Number(t);
240
+ if (t !== '' && Number.isInteger(asNum) && asNum > 0) {
241
+ const bySeq = steps.find((s) => s.sequence === asNum);
242
+ if (bySeq)
243
+ return bySeq;
244
+ }
245
+ return steps.find((s) => s.id === t);
246
+ }
247
+ return undefined;
248
+ }
249
+ /** 在一道菜的食材行里按「食材名/食材 id」挑一行(只认本菜)。 */
250
+ function pickIngredient(rows, key) {
251
+ if (typeof key === 'string' && key.trim()) {
252
+ const t = key.trim();
253
+ return rows.find((r) => r.id === t) ?? rows.find((r) => r.name === t);
254
+ }
255
+ return undefined;
256
+ }
257
+ /** 数字或数字串→有限数字;非数即 undefined(调用方按 818 定案决定拦还是沿用旧值)。 */
258
+ function toFiniteNumber(v) {
259
+ if (typeof v === 'number' && Number.isFinite(v))
260
+ return v;
261
+ if (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v.trim())))
262
+ return Number(v.trim());
263
+ return undefined;
264
+ }
265
+ /** 废弃菜谱(只增不删:status 置已废弃,无物理删除)。原 `src/fetch/db.ts`,本域独占。 */
266
+ export function deprecateRecipe(h, id) {
267
+ const r = mustRecipe(h, id);
268
+ qRun(h, 'UPDATE recipes SET status = ?, updated_at = ? WHERE id = ?', ['已废弃', now(), r.id]);
269
+ return mustRecipe(h, r.id);
270
+ }
271
+ /** 更新菜谱主表(改名撞名即拦,与新增路径同一口径)。原 `src/fetch/db.ts`,本域独占。 */
272
+ export function updateRecipe(h, id, patch) {
273
+ const r = mustRecipe(h, id);
274
+ // #854(承接 #819 G1):改名撞名即拦,引用同一口径;存去空格后的名字,与新增路径一致。
275
+ if (patch.name !== undefined) {
276
+ const newName = canonicalRecipeName(patch.name);
277
+ if (!newName)
278
+ throw new ChefFetchError('CHEF_BAD_QUERY', '改名须给非空菜名 name');
279
+ if (newName !== canonicalRecipeName(r.name)) {
280
+ const hit = qGet(h, 'SELECT id FROM recipes WHERE name = ?', [newName]);
281
+ if (hit && String(hit.id) !== r.id)
282
+ throw new ChefFetchError('CHEF_RECIPE_CORRUPT', '菜名已存在:“' + newName + '”');
283
+ }
284
+ patch.name = newName;
285
+ }
286
+ const allowed = ['name', 'description', 'difficulty', 'servings', 'total_time_minutes', 'status', 'photo_url', 'source', 'source_url'];
287
+ const sets = [];
288
+ const params = [];
289
+ for (const k of allowed) {
290
+ const v = patch[k];
291
+ if (v !== undefined) {
292
+ sets.push(k + ' = ?');
293
+ params.push(k === 'servings' || k === 'total_time_minutes' ? Number(v) : String(v));
294
+ }
295
+ }
296
+ if (!sets.length)
297
+ throw new ChefFetchError('CHEF_BAD_QUERY', 'update 至少改一个字段');
298
+ sets.push('updated_at = ?');
299
+ params.push(now());
300
+ params.push(r.id);
301
+ try {
302
+ qRun(h, 'UPDATE recipes SET ' + sets.join(', ') + ' WHERE id = ?', params);
303
+ }
304
+ catch (e) {
305
+ throw new ChefFetchError('CHEF_DB_UNREADABLE', '菜谱更新失败:' + id, { cause: e });
306
+ }
307
+ return mustRecipe(h, r.id);
308
+ }
309
+ //# sourceMappingURL=run-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-write.js","sourceRoot":"","sources":["../../src/update/run-write.ts"],"names":[],"mappings":"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"}
@@ -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,25 @@
1
+ /** 查看域 8 卡结果型页面装配(#770;#873 查看席做页内收口)。
2
+ *
3
+ * 卡清单唯一出处=HELP 场景资产(`src/help/sceneData.ts:52-67`,5 组 8 卡),本件只组装不另立清单。
4
+ * 形状唯一依据=配方件(`docs/skills/skill-chef/t768-页面族配方.md` §2 结果型 14 格):每一格都是一次
5
+ * 公共层区块调用;页面级样式走单一入口 `chefSceneCss()`,本域页内版式在它后面**追加一段**
6
+ * `viewPageCss()`(不把公共层那两层拆回去)。只看 X 卡=同一页只留对应节、锚点 id 与全量页逐字相同。
7
+ *
8
+ * #873 页内收口(七处,逐条都在证据件 `t873-席查看.md` 里有改后读数):① 分区标题行(图标位+标题+
9
+ * 右端读数)替掉「一段接一段的无题正文」——营养/背景/步骤原先只有表注或干脆没有标题;② 页头那行
10
+ * 13 枚无名色块改成「维度名+值」的分组标签块并**移到正文之后**(此前它占掉首屏三分之一,把真正要看
11
+ * 的内容挤到次屏);③ 「已做」从徽章行搬进事实条的状态位,不再与口味/季节徽章同形同行同重;
12
+ * ④ 营养成分表改读数瓦片(配方件第 9 格写明「`renderDataTable` 或读数卡网格」两条都收);⑤ 背景三段
13
+ * 各配一枚小标题(来历/历史脉络/文化意味);⑥ 新手要点由「一行行等重的字」改成序号牌列表;
14
+ * ⑦ 替换食材「全是同一句时不逐行重复」(配方件第 12 格原话「全是同一句时不印」)——11 行
15
+ * 「螺丝椒 → 无替代品」收成一句读数。
16
+ */
17
+ /** 8 卡清单(id/标题/唤醒词;出处见文件头注释,细节在 HELP 场景资产里)。 */
18
+ export declare const VIEW_CARDS: readonly {
19
+ id: string;
20
+ title: string;
21
+ wake: string;
22
+ }[];
23
+ /** 按卡 id 装配整页 HTML(未知卡 id 即抛,不返空页)。 */
24
+ export declare function buildViewHtml(cardId: string, item: Record<string, unknown>): string;
25
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/view/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoBH,gDAAgD;AAChD,eAAO,MAAM,UAAU,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAS5E,CAAC;AAmQF,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAsCnF"}