nextclaw 0.44.1 → 0.45.0

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 (243) hide show
  1. package/dist/cli/app/index.js +2 -2
  2. package/dist/cli/launcher/index.js +1 -1
  3. package/dist/{nextclaw-cli-app-scOxgGRP.js → nextclaw-cli-app-Bwa2L2Jv.js} +306 -22
  4. package/dist/nextclaw-cli-app-Bwa2L2Jv.js.map +1 -0
  5. package/dist/{nextclaw-distribution.utils-BneKclXo.js → nextclaw-distribution.utils-Bba2GRvc.js} +4 -2
  6. package/dist/nextclaw-distribution.utils-Bba2GRvc.js.map +1 -0
  7. package/package.json +15 -14
  8. package/resources/USAGE.md +36 -4
  9. package/resources/apps/nextclaw-personal-organizer/README.md +1 -1
  10. package/resources/apps/nextclaw-portable-runtime-lab/README.md +34 -0
  11. package/resources/apps/nextclaw-portable-runtime-lab/assets/icon.svg +12 -0
  12. package/resources/apps/nextclaw-portable-runtime-lab/manifest.json +74 -0
  13. package/resources/apps/nextclaw-portable-runtime-lab/marketplace.json +21 -0
  14. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/assets/app.js +92 -0
  15. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/assets/style.css +43 -0
  16. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/index.html +43 -0
  17. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/panel-app.json +10 -0
  18. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/assets/app.js +132 -0
  19. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/assets/style.css +39 -0
  20. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/index.html +40 -0
  21. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/panel-app.json +14 -0
  22. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/assets/app.js +117 -0
  23. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/assets/style.css +41 -0
  24. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/index.html +41 -0
  25. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/panel-app.json +12 -0
  26. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/assets/app.js +266 -0
  27. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/assets/style.css +87 -0
  28. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/index.html +154 -0
  29. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/panel-app.json +29 -0
  30. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/assets/app.js +143 -0
  31. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/assets/style.css +48 -0
  32. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/index.html +45 -0
  33. package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/panel-app.json +12 -0
  34. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-capabilities/service-app.json +20 -0
  35. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-capabilities/service.wasm +0 -0
  36. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-composition/service-app.json +30 -0
  37. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-composition/service.wasm +0 -0
  38. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-provider/service-app.json +30 -0
  39. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-provider/service.wasm +0 -0
  40. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-resident/service-app.json +31 -0
  41. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-resident/service.wasm +0 -0
  42. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-state/service-app.json +49 -0
  43. package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-state/service.wasm +0 -0
  44. package/ui-dist/assets/abnfDiagram-VRR7QNED-BcFJp_1X.js.gz +0 -0
  45. package/ui-dist/assets/aiden0z-pptx-renderer.es-Dp2ezlQn.js.gz +0 -0
  46. package/ui-dist/assets/{api-iMkU_o5P.js → api-m33O1Kb0.js} +6 -6
  47. package/ui-dist/assets/api-m33O1Kb0.js.gz +0 -0
  48. package/ui-dist/assets/{appearance-settings-page-CU5k4b-M.js → appearance-settings-page-x4Vjnfmz.js} +1 -1
  49. package/ui-dist/assets/appearance-settings-page-x4Vjnfmz.js.gz +0 -0
  50. package/ui-dist/assets/arc-CkgyPMyW.js.gz +0 -0
  51. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-CMd4cIjI.js.gz +0 -0
  52. package/ui-dist/assets/blockDiagram-677ZJIJ3-Bz3tbhet.js.gz +0 -0
  53. package/ui-dist/assets/{book-open-nD8gdMhA.js → book-open-BHiasMCg.js} +1 -1
  54. package/ui-dist/assets/c4Diagram-LMCZKHZV-D9hFNAGv.js.gz +0 -0
  55. package/ui-dist/assets/{channels-list-page-Drlt62kY.js → channels-list-page-DOxJZeXq.js} +2 -2
  56. package/ui-dist/assets/channels-list-page-DOxJZeXq.js.gz +0 -0
  57. package/ui-dist/assets/chunk-32BRIVSS-7NrjEITq.js.gz +0 -0
  58. package/ui-dist/assets/chunk-52WLFC77-viIcqj9q.js.gz +0 -0
  59. package/ui-dist/assets/chunk-5JV3BV7I-CuKgJQ4W.js.gz +0 -0
  60. package/ui-dist/assets/chunk-5TONJI2A-CYeiWZKb.js.gz +0 -0
  61. package/ui-dist/assets/chunk-7BUUIJ7U-BvydOcm3.js.gz +0 -0
  62. package/ui-dist/assets/chunk-C7G6YPKG-DAizzYwr.js.gz +0 -0
  63. package/ui-dist/assets/chunk-DseTPa7n.js.gz +0 -0
  64. package/ui-dist/assets/chunk-EX3LRPZG-BmlDFIRW.js.gz +0 -0
  65. package/ui-dist/assets/chunk-FWX5IMBZ-D0ksHZZ9.js.gz +0 -0
  66. package/ui-dist/assets/chunk-HOUHSVGY-DPkq8FCm.js.gz +0 -0
  67. package/ui-dist/assets/chunk-ICXQ74PX-FAatv5fC.js.gz +0 -0
  68. package/ui-dist/assets/chunk-JG7HCLWE-DLkIi4F7.js.gz +0 -0
  69. package/ui-dist/assets/chunk-KEIR6QF5-f9psyCXK.js.gz +0 -0
  70. package/ui-dist/assets/chunk-MOJQB5TN-Di52TorW.js.gz +0 -0
  71. package/ui-dist/assets/chunk-PUDLZKDR-f3IJh3sN.js.gz +0 -0
  72. package/ui-dist/assets/chunk-Q4XR5HBZ-DQFeUPxZ.js.gz +0 -0
  73. package/ui-dist/assets/chunk-R7FJI6CG-C3XpZ-2u.js.gz +0 -0
  74. package/ui-dist/assets/chunk-RYQCIY6F-CAqa5klQ.js.gz +0 -0
  75. package/ui-dist/assets/chunk-U6XO7XAA-D_WXezeD.js.gz +0 -0
  76. package/ui-dist/assets/chunk-V7JOEXUC-CZ70oOtp.js.gz +0 -0
  77. package/ui-dist/assets/chunk-WYO6CB5R-Dn9To_OI.js.gz +0 -0
  78. package/ui-dist/assets/chunk-ZGVPDNZ5-C6YtZDU0.js.gz +0 -0
  79. package/ui-dist/assets/chunk-ZIRB5QZD-DMuYtnHF.js.gz +0 -0
  80. package/ui-dist/assets/{config-split-page-BtJZp1E5.js → config-split-page-DBnMEP1o.js} +1 -1
  81. package/ui-dist/assets/config-split-page-DBnMEP1o.js.gz +0 -0
  82. package/ui-dist/assets/{confirm-dialog-k2-Jq_x3.js → confirm-dialog-f5NKLh5I.js} +2 -2
  83. package/ui-dist/assets/confirm-dialog-f5NKLh5I.js.gz +0 -0
  84. package/ui-dist/assets/cose-bilkent-JH36ORCC-Bc2Ex5Y3.js.gz +0 -0
  85. package/ui-dist/assets/{createLucideIcon-DxlwKLr-.js → createLucideIcon-CHALGA42.js} +1 -1
  86. package/ui-dist/assets/cynefinDiagram-TSTJHNR4-DVysQoGz.js.gz +0 -0
  87. package/ui-dist/assets/cytoscape.esm-0uDtdD0l.js.gz +0 -0
  88. package/ui-dist/assets/dagre-CMhQ1cAG.js.gz +0 -0
  89. package/ui-dist/assets/dagre-VKFMJZFB-RYyWpPJZ.js.gz +0 -0
  90. package/ui-dist/assets/defaultLocale-DSWXGgt0.js.gz +0 -0
  91. package/ui-dist/assets/desktop-capabilities-page-DixayAe6.js +1 -0
  92. package/ui-dist/assets/desktop-capabilities-page-DixayAe6.js.gz +0 -0
  93. package/ui-dist/assets/desktop-update-config-ChhfeOHj.js +1 -0
  94. package/ui-dist/assets/desktop-update-config-ChhfeOHj.js.gz +0 -0
  95. package/ui-dist/assets/diagram-FQU43EPY-BD6KONdF.js.gz +0 -0
  96. package/ui-dist/assets/diagram-G47NLZAW-CGB2ptRR.js.gz +0 -0
  97. package/ui-dist/assets/diagram-NH7WQ7WH-DnkOI6cU.js.gz +0 -0
  98. package/ui-dist/assets/diagram-OA4YK3LP-DF82RZ7P.js.gz +0 -0
  99. package/ui-dist/assets/diagram-WEI45ONY-Be2v7Ck9.js.gz +0 -0
  100. package/ui-dist/assets/dist--ta5rX12.js.gz +0 -0
  101. package/ui-dist/assets/{dist-Cy_e4kNb.js → dist-_UMsWSY0.js} +1 -1
  102. package/ui-dist/assets/dist-_UMsWSY0.js.gz +0 -0
  103. package/ui-dist/assets/{dist-m08DUswB.js → dist-sD6V4nHX.js} +1 -1
  104. package/ui-dist/assets/dist-sD6V4nHX.js.gz +0 -0
  105. package/ui-dist/assets/doc-browser-Bq7LJsQY.js +1 -0
  106. package/ui-dist/assets/doc-browser-Bq7LJsQY.js.gz +0 -0
  107. package/ui-dist/assets/doc-browser-BuDgpY2e.js +1 -0
  108. package/ui-dist/assets/{doc-browser-context-jiy-O4F8.js → doc-browser-context-Capim3og.js} +1 -1
  109. package/ui-dist/assets/doc-browser-context-Capim3og.js.gz +0 -0
  110. package/ui-dist/assets/docx-preview-BqwAjrj3.js.gz +0 -0
  111. package/ui-dist/assets/ebnfDiagram-CCIWWBDH-CP98OYk8.js.gz +0 -0
  112. package/ui-dist/assets/erDiagram-Q63AITRT-ZLlx8xfs.js.gz +0 -0
  113. package/ui-dist/assets/{extensions-CIb17__o.js → extensions-Bdclr3Wr.js} +1 -1
  114. package/ui-dist/assets/extensions-Bdclr3Wr.js.gz +0 -0
  115. package/ui-dist/assets/{form-actions-DGf5zUg_.js → form-actions-CH0kWhEt.js} +1 -1
  116. package/ui-dist/assets/ganttDiagram-NO4QXBWP-DXCDjHR2.js.gz +0 -0
  117. package/ui-dist/assets/gitGraphDiagram-IHSO6WYX-l2HWrTJp.js.gz +0 -0
  118. package/ui-dist/assets/graphlib-CQ6QV4yP.js.gz +0 -0
  119. package/ui-dist/assets/index-BjxnLYE3.js +109 -0
  120. package/ui-dist/assets/index-BjxnLYE3.js.gz +0 -0
  121. package/ui-dist/assets/index-CBmwJjwE.css +1 -0
  122. package/ui-dist/assets/index-CBmwJjwE.css.gz +0 -0
  123. package/ui-dist/assets/ishikawaDiagram-FXEZZL3T-y_Xy128F.js.gz +0 -0
  124. package/ui-dist/assets/journeyDiagram-5HDEW3XC-DJn5xYcQ.js.gz +0 -0
  125. package/ui-dist/assets/jszip.min-8hyJpgpx.js.gz +0 -0
  126. package/ui-dist/assets/kanban-definition-HUTT4EX6-DJVIOR21.js.gz +0 -0
  127. package/ui-dist/assets/katex-ARhY9PS1.js.gz +0 -0
  128. package/ui-dist/assets/linear-BtDLqtzF.js.gz +0 -0
  129. package/ui-dist/assets/loader-circle-CH_0iPLy.js +1 -0
  130. package/ui-dist/assets/map-BKnQyvd0.js.gz +0 -0
  131. package/ui-dist/assets/mcp-marketplace-page-BUsxLVB5.js +10 -0
  132. package/ui-dist/assets/mcp-marketplace-page-BUsxLVB5.js.gz +0 -0
  133. package/ui-dist/assets/mcp-marketplace-page-GPRV3fB0.js +1 -0
  134. package/ui-dist/assets/mermaid-parser.core-XUNZhr2W.js.gz +0 -0
  135. package/ui-dist/assets/mermaid.core-ySrvolIe.js.gz +0 -0
  136. package/ui-dist/assets/middleware-DXsbf9xI.js.gz +0 -0
  137. package/ui-dist/assets/mindmap-definition-LN4V7U3C-BypL9tei.js.gz +0 -0
  138. package/ui-dist/assets/model-config-page-CIevwqp4.js +1 -0
  139. package/ui-dist/assets/model-config-page-CIevwqp4.js.gz +0 -0
  140. package/ui-dist/assets/{navigation-link-DAfwFCj4.js → navigation-link-CAUiM3zS.js} +1 -1
  141. package/ui-dist/assets/navigation-link-CAUiM3zS.js.gz +0 -0
  142. package/ui-dist/assets/ordinal-CxxVWxYU.js.gz +0 -0
  143. package/ui-dist/assets/path-10BjdyLh.js.gz +0 -0
  144. package/ui-dist/assets/pegDiagram-2B236MQR-D-U2KBGv.js.gz +0 -0
  145. package/ui-dist/assets/pieDiagram-ENE6RG2P-CBi3GusJ.js.gz +0 -0
  146. package/ui-dist/assets/plus-B3obD55V.js +1 -0
  147. package/ui-dist/assets/preload-helper-D4M6sveU.js.gz +0 -0
  148. package/ui-dist/assets/privacy-settings-page-CNKfZsYH.js +1 -0
  149. package/ui-dist/assets/privacy-settings-page-CNKfZsYH.js.gz +0 -0
  150. package/ui-dist/assets/providers-config-page-DAah2NIS.js +1 -0
  151. package/ui-dist/assets/providers-config-page-DAah2NIS.js.gz +0 -0
  152. package/ui-dist/assets/quadrantDiagram-ABIIQ3AL-H0ZuvnZL.js.gz +0 -0
  153. package/ui-dist/assets/railroadDiagram-RFXS5EU6-D7Y2EqSd.js.gz +0 -0
  154. package/ui-dist/assets/react-Co6JiC1n.js +8 -0
  155. package/ui-dist/assets/react-Co6JiC1n.js.gz +0 -0
  156. package/ui-dist/assets/{refresh-cw-D_Eibznw.js → refresh-cw-BG_LX3SS.js} +1 -1
  157. package/ui-dist/assets/remote-DuscgfvR.js +1 -0
  158. package/ui-dist/assets/requirementDiagram-TGXJPOKE-BiXNX1NN.js.gz +0 -0
  159. package/ui-dist/assets/{rotate-cw-QQjmoWuq.js → rotate-cw-Cz7I_m7O.js} +1 -1
  160. package/ui-dist/assets/rough.esm-DxgC_14r.js.gz +0 -0
  161. package/ui-dist/assets/runtime-config-page-Cl1RpmSC.js +1 -0
  162. package/ui-dist/assets/runtime-config-page-Cl1RpmSC.js.gz +0 -0
  163. package/ui-dist/assets/sankeyDiagram-HTMAVEWB-qzDeLztW.js.gz +0 -0
  164. package/ui-dist/assets/{save-W2xthJJ2.js → save-BiHnb8ps.js} +1 -1
  165. package/ui-dist/assets/{search-Vih1R2BD.js → search-C47TyRg0.js} +1 -1
  166. package/ui-dist/assets/{search-config-page-CtBcL2uc.js → search-config-page-BAIzd6gN.js} +1 -1
  167. package/ui-dist/assets/search-config-page-BAIzd6gN.js.gz +0 -0
  168. package/ui-dist/assets/{secrets-config-page-Q6XfIj0h.js → secrets-config-page-Ddi-n43R.js} +2 -2
  169. package/ui-dist/assets/secrets-config-page-Ddi-n43R.js.gz +0 -0
  170. package/ui-dist/assets/security-config-C8MHnE1r.js +1 -0
  171. package/ui-dist/assets/{select-lNdozU4o.js → select-BzQKfW1e.js} +2 -2
  172. package/ui-dist/assets/select-BzQKfW1e.js.gz +0 -0
  173. package/ui-dist/assets/sequenceDiagram-DBY2YBRQ-BtRbPQtL.js.gz +0 -0
  174. package/ui-dist/assets/skeleton-BXFAE9SE.js +1 -0
  175. package/ui-dist/assets/src-Bw-mzbQb.js.gz +0 -0
  176. package/ui-dist/assets/stateDiagram-2N3HPSRC-BJ-mFeOz.js.gz +0 -0
  177. package/ui-dist/assets/swimlanes-5IMT3BWC-BsucVOO2.js.gz +0 -0
  178. package/ui-dist/assets/{tag-chip-gdaU9bE7.js → tag-chip-C3K814HZ.js} +1 -1
  179. package/ui-dist/assets/timeline-definition-FHXFAJF6-Bicewlzo.js.gz +0 -0
  180. package/ui-dist/assets/vennDiagram-L72KCM5P-BxOOnO9x.js.gz +0 -0
  181. package/ui-dist/assets/wardleyDiagram-EHGQE667-Cl7NltMv.js.gz +0 -0
  182. package/ui-dist/assets/x-C1r9IXet.js +1 -0
  183. package/ui-dist/assets/xlsx-DrDuDNAa.js.gz +0 -0
  184. package/ui-dist/assets/xychartDiagram-FW5EYKEG-DiMIxQ7N.js.gz +0 -0
  185. package/ui-dist/index.html +29 -21
  186. package/ui-dist/index.html.gz +0 -0
  187. package/ui-dist/logos/discord.svg.gz +0 -0
  188. package/ui-dist/logos/feishu.svg.gz +0 -0
  189. package/ui-dist/logos/gemini.svg.gz +0 -0
  190. package/ui-dist/logos/mimo.svg.gz +0 -0
  191. package/ui-dist/logos/openai.svg.gz +0 -0
  192. package/ui-dist/logos/slack.svg.gz +0 -0
  193. package/ui-dist/logos/vllm.svg.gz +0 -0
  194. package/ui-dist/logos/weixin.svg.gz +0 -0
  195. package/ui-dist/logos/whatsapp.svg.gz +0 -0
  196. package/ui-dist/logos/zhipu.svg.gz +0 -0
  197. package/ui-dist/offline.html.gz +0 -0
  198. package/ui-dist/runtime-icons/codex-openai.svg.gz +0 -0
  199. package/ui-dist/sw.js.gz +0 -0
  200. package/ui-dist/themes/island/island-atmosphere.webp +0 -0
  201. package/dist/nextclaw-cli-app-scOxgGRP.js.map +0 -1
  202. package/dist/nextclaw-distribution.utils-BneKclXo.js.map +0 -1
  203. package/ui-dist/assets/api-iMkU_o5P.js.gz +0 -0
  204. package/ui-dist/assets/appearance-settings-page-CU5k4b-M.js.gz +0 -0
  205. package/ui-dist/assets/channels-list-page-Drlt62kY.js.gz +0 -0
  206. package/ui-dist/assets/config-split-page-BtJZp1E5.js.gz +0 -0
  207. package/ui-dist/assets/confirm-dialog-k2-Jq_x3.js.gz +0 -0
  208. package/ui-dist/assets/desktop-update-config-BiZmy7FC.js +0 -1
  209. package/ui-dist/assets/desktop-update-config-BiZmy7FC.js.gz +0 -0
  210. package/ui-dist/assets/dist-Cy_e4kNb.js.gz +0 -0
  211. package/ui-dist/assets/dist-m08DUswB.js.gz +0 -0
  212. package/ui-dist/assets/doc-browser-CPsPHh12.js +0 -1
  213. package/ui-dist/assets/doc-browser-context-jiy-O4F8.js.gz +0 -0
  214. package/ui-dist/assets/doc-browser-npOvWtgf.js +0 -1
  215. package/ui-dist/assets/doc-browser-npOvWtgf.js.gz +0 -0
  216. package/ui-dist/assets/extensions-CIb17__o.js.gz +0 -0
  217. package/ui-dist/assets/index-C86hxgv5.css +0 -1
  218. package/ui-dist/assets/index-C86hxgv5.css.gz +0 -0
  219. package/ui-dist/assets/index-CYBXR7zN.js +0 -109
  220. package/ui-dist/assets/index-CYBXR7zN.js.gz +0 -0
  221. package/ui-dist/assets/loader-circle-BlLuRFVW.js +0 -1
  222. package/ui-dist/assets/mcp-marketplace-page-B12JNh7Q.js +0 -1
  223. package/ui-dist/assets/mcp-marketplace-page-kLWW6kzt.js +0 -9
  224. package/ui-dist/assets/mcp-marketplace-page-kLWW6kzt.js.gz +0 -0
  225. package/ui-dist/assets/model-config-page-DSeAjVT_.js +0 -1
  226. package/ui-dist/assets/model-config-page-DSeAjVT_.js.gz +0 -0
  227. package/ui-dist/assets/navigation-link-DAfwFCj4.js.gz +0 -0
  228. package/ui-dist/assets/plus-D4LtWtTk.js +0 -1
  229. package/ui-dist/assets/privacy-settings-page-tN0Mt15x.js +0 -1
  230. package/ui-dist/assets/privacy-settings-page-tN0Mt15x.js.gz +0 -0
  231. package/ui-dist/assets/providers-config-page-CgPrXR1u.js +0 -1
  232. package/ui-dist/assets/providers-config-page-CgPrXR1u.js.gz +0 -0
  233. package/ui-dist/assets/react-8iBFECZE.js +0 -8
  234. package/ui-dist/assets/react-8iBFECZE.js.gz +0 -0
  235. package/ui-dist/assets/remote-Derr_AQp.js +0 -1
  236. package/ui-dist/assets/runtime-config-page-Crq96Jjq.js +0 -1
  237. package/ui-dist/assets/runtime-config-page-Crq96Jjq.js.gz +0 -0
  238. package/ui-dist/assets/search-config-page-CtBcL2uc.js.gz +0 -0
  239. package/ui-dist/assets/secrets-config-page-Q6XfIj0h.js.gz +0 -0
  240. package/ui-dist/assets/security-config-CE9rkQvq.js +0 -1
  241. package/ui-dist/assets/select-lNdozU4o.js.gz +0 -0
  242. package/ui-dist/assets/skeleton-B__aTcly.js +0 -1
  243. package/ui-dist/assets/x-CWdWBu_U.js +0 -1
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { t as createNextclawDistribution } from "../../nextclaw-distribution.utils-BneKclXo.js";
2
+ import { t as createNextclawDistribution } from "../../nextclaw-distribution.utils-Bba2GRvc.js";
3
3
  import { NextclawDistributionService } from "@nextclaw/service";
4
4
  //#region src/cli/app/index.ts
5
5
  NextclawDistributionService.configureRuntime(createNextclawDistribution(import.meta.url));
6
- const { nextclawCliProgram } = await import("../../nextclaw-cli-app-scOxgGRP.js");
6
+ const { nextclawCliProgram } = await import("../../nextclaw-cli-app-Bwa2L2Jv.js");
7
7
  await nextclawCliProgram.parseAsync(process.argv);
8
8
  //#endregion
9
9
  export {};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { t as createNextclawDistribution } from "../../nextclaw-distribution.utils-BneKclXo.js";
2
+ import { t as createNextclawDistribution } from "../../nextclaw-distribution.utils-Bba2GRvc.js";
3
3
  import { NextclawDistributionService, runNextclawNpmRuntimeLauncher } from "@nextclaw/service";
4
4
  //#region src/cli/launcher/index.ts
5
5
  NextclawDistributionService.configure(createNextclawDistribution(import.meta.url));
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { APP_NAME, APP_TAGLINE, getConfigPath, getDataDir, getRunPath, loadConfig, resolveConfigSecrets } from "@nextclaw/core";
3
- import { NextclawServiceRuntime, readLearningLoopRuntimeConfig } from "@nextclaw/service";
3
+ import { NextclawDistributionService, NextclawServiceRuntime, readLearningLoopRuntimeConfig } from "@nextclaw/service";
4
4
  import { constants, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
5
  import path, { join, resolve } from "node:path";
6
6
  import { Command, InvalidArgumentError } from "commander";
@@ -9,9 +9,10 @@ import { execFile } from "node:child_process";
9
9
  import { tmpdir } from "node:os";
10
10
  import "@nextclaw/server";
11
11
  import { access, mkdtemp, readFile, rm, stat } from "node:fs/promises";
12
- import { AppBundleService, AppHomeService, AppInstanceInventoryService, AppInstanceStorageService, AppPlatformTargetService, AppPublishService, AppPublishValidationService } from "@nextclaw/app-runtime";
13
- import { McpServiceAppRuntimeService, NextclawHarnessError, buildServiceActionId, getServiceAppManifestPath, mergeServiceAppRuntimeActions, readServiceAppManifest } from "@nextclaw/kernel";
12
+ import { AppBundleService, AppHomeService, AppInstanceInventoryService, AppInstanceStorageService, AppManifestService, AppPlatformTargetService, AppPublishService, AppPublishValidationService, isAppComponentManifestBundle } from "@nextclaw/app-runtime";
13
+ import { NextclawHarnessError, ServiceAppRuntimeService, buildServiceActionId, getServiceAppManifestPath, mergeServiceAppRuntimeActions, readServiceAppManifest } from "@nextclaw/kernel";
14
14
  import { format, promisify } from "node:util";
15
+ import { formatNextClawAppInstallCommand } from "@nextclaw/shared";
15
16
  var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
16
17
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
17
18
  //#endregion
@@ -3647,15 +3648,17 @@ var ServiceAppDevService = class {
3647
3648
  message: `--reset-data requires --confirm ${loaded.manifest.id}.`
3648
3649
  });
3649
3650
  if (this.hasErrors(issues)) return this.buildDevReport(appPath, this.toServiceAppRecord(appPath, loaded.manifest, this.idleRuntimeStatus), [], issues);
3651
+ const portable = await this.loadPortableDevContext(appPath, loaded.manifest, issues);
3652
+ if (this.hasErrors(issues)) return this.buildDevReport(appPath, this.toServiceAppRecord(appPath, loaded.manifest, this.idleRuntimeStatus), [], issues);
3650
3653
  const runtime = this.createRuntimeService();
3651
3654
  const storage = await this.createDevStorage(appPath, loaded.manifest.id, options.resetData === true);
3652
3655
  try {
3653
- const startRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
3656
+ const startRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage, portable);
3654
3657
  const runtimeActions = await runtime.listActions({
3655
3658
  app: startRecord,
3656
3659
  manifest: loaded.manifest
3657
3660
  });
3658
- const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
3661
+ const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage, portable);
3659
3662
  const actions = mergeServiceAppRuntimeActions({
3660
3663
  record,
3661
3664
  manifest: loaded.manifest,
@@ -3683,20 +3686,22 @@ var ServiceAppDevService = class {
3683
3686
  const record = this.toServiceAppRecord(appPath, loaded.manifest, this.idleRuntimeStatus);
3684
3687
  return this.buildCallReport(appPath, record, void 0, void 0, issues);
3685
3688
  }
3689
+ const portable = await this.loadPortableDevContext(appPath, loaded.manifest, issues);
3690
+ if (this.hasErrors(issues)) return this.buildCallReport(appPath, this.toServiceAppRecord(appPath, loaded.manifest, this.idleRuntimeStatus), void 0, void 0, issues);
3686
3691
  const runtime = this.createRuntimeService();
3687
3692
  const storage = await this.createDevStorage(appPath, loaded.manifest.id);
3688
3693
  try {
3689
- const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
3694
+ const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage, portable);
3690
3695
  const result = await runtime.invokeAction({
3691
3696
  app: record,
3692
3697
  manifest: loaded.manifest,
3693
3698
  actionName: action,
3694
3699
  input
3695
3700
  });
3696
- const nextRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
3701
+ const nextRecord = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage, portable);
3697
3702
  return this.buildCallReport(appPath, nextRecord, buildServiceActionId(loaded.manifest.id, action), result, issues);
3698
3703
  } catch (error) {
3699
- const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage);
3704
+ const record = this.toServiceAppRecord(appPath, loaded.manifest, runtime, storage, portable);
3700
3705
  issues.push({
3701
3706
  severity: "error",
3702
3707
  code: "service.runtime.callFailed",
@@ -3730,7 +3735,60 @@ var ServiceAppDevService = class {
3730
3735
  return null;
3731
3736
  }
3732
3737
  };
3733
- createRuntimeService = () => this.params.runtimeService ?? new McpServiceAppRuntimeService({ getConfig: this.params.getConfig ?? this.loadRuntimeConfig });
3738
+ createRuntimeService = () => {
3739
+ if (this.params.runtimeService) return this.params.runtimeService;
3740
+ return new ServiceAppRuntimeService({
3741
+ getConfig: this.params.getConfig ?? this.loadRuntimeConfig,
3742
+ portableServiceRunnerPath: this.params.portableServiceRunnerPath
3743
+ });
3744
+ };
3745
+ loadPortableDevContext = async (appPath, manifest, issues) => {
3746
+ if (manifest.protocol !== "wasi-component") return void 0;
3747
+ const componentPath = path.resolve(appPath, manifest.componentEntry ?? "");
3748
+ if (!await this.pathExists(componentPath)) {
3749
+ issues.push({
3750
+ severity: "error",
3751
+ code: "service.component.notFound",
3752
+ message: `Portable Component does not exist: ${manifest.componentEntry ?? "(missing)"}.`
3753
+ });
3754
+ return;
3755
+ }
3756
+ const packageContext = await this.findOwningPackage(appPath);
3757
+ if (!packageContext) {
3758
+ issues.push({
3759
+ severity: "error",
3760
+ code: "service.package.required",
3761
+ message: "Portable Service App development requires an owning schema v2 Mini App so permissions have one product owner.",
3762
+ fixHint: "Place the service under a manifest.json components entry and run app dev on that service directory."
3763
+ });
3764
+ return;
3765
+ }
3766
+ return {
3767
+ componentPath,
3768
+ permissions: packageContext.permissions
3769
+ };
3770
+ };
3771
+ findOwningPackage = async (appPath) => {
3772
+ let candidate = path.dirname(appPath);
3773
+ while (true) {
3774
+ const permissions = await this.readOwningPackagePermissions(candidate, appPath);
3775
+ if (permissions) return { permissions };
3776
+ const parent = path.dirname(candidate);
3777
+ if (parent === candidate) return void 0;
3778
+ candidate = parent;
3779
+ }
3780
+ };
3781
+ readOwningPackagePermissions = async (candidate, appPath) => {
3782
+ if (!await this.pathExists(path.join(candidate, "manifest.json"))) return void 0;
3783
+ const manifestService = new AppManifestService();
3784
+ try {
3785
+ const bundle = await manifestService.load(candidate);
3786
+ if (!isAppComponentManifestBundle(bundle)) return void 0;
3787
+ return bundle.components.some((component) => path.resolve(component.componentDirectory) === path.resolve(appPath)) ? manifestService.resolvePlatformSecurity(bundle.manifest).permissions : void 0;
3788
+ } catch {
3789
+ return;
3790
+ }
3791
+ };
3734
3792
  loadRuntimeConfig = () => {
3735
3793
  const configPath = getConfigPath();
3736
3794
  return resolveConfigSecrets(loadConfig(configPath), { configPath });
@@ -3766,7 +3824,7 @@ var ServiceAppDevService = class {
3766
3824
  return false;
3767
3825
  }
3768
3826
  };
3769
- toServiceAppRecord = (dirPath, manifest, runtime, storage) => {
3827
+ toServiceAppRecord = (dirPath, manifest, runtime, storage, portable) => {
3770
3828
  const runtimeStatus = runtime.getStatus(manifest.id);
3771
3829
  const record = {
3772
3830
  id: manifest.id,
@@ -3782,7 +3840,12 @@ var ServiceAppDevService = class {
3782
3840
  dataDirectory: storage?.dataDirectory,
3783
3841
  instanceId: storage?.instanceId,
3784
3842
  storage,
3785
- isolation: "full-user"
3843
+ isolation: manifest.protocol === "wasi-component" ? "host-mediated" : "full-user",
3844
+ runtimeProfile: manifest.protocol === "wasi-component" ? "wasi" : "native-process",
3845
+ componentPath: portable?.componentPath,
3846
+ permissions: portable?.permissions,
3847
+ providerIds: manifest.providerIds,
3848
+ lifecycle: manifest.lifecycle
3786
3849
  };
3787
3850
  if (manifest.description) record.description = manifest.description;
3788
3851
  if (runtimeStatus.lastError) record.lastError = runtimeStatus.lastError;
@@ -4239,15 +4302,17 @@ var ServiceAppCheckService = class {
4239
4302
  const manifestResult = await readJsonObject(path.join(appPath, SERVICE_MANIFEST_FILE));
4240
4303
  this.pushIssue(issues, manifestResult.issue);
4241
4304
  if (!manifestResult.value) return issues;
4242
- const serviceId = this.checkManifestFields(appPath, manifestResult.value, issues);
4305
+ const protocol = readOptionalString(manifestResult.value, "protocol") ?? "mcp";
4306
+ const serviceId = this.checkManifestFields(appPath, manifestResult.value, protocol, issues);
4243
4307
  const command = readOptionalString(manifestResult.value, "command");
4244
4308
  const args = readStringArray(manifestResult.value.args, "service.args");
4245
4309
  this.pushIssue(issues, args.issue);
4246
4310
  this.checkActions(serviceId, manifestResult.value.actions, issues);
4247
- await this.checkCommand(appPath, command, args.values, issues);
4311
+ if (protocol === "wasi-component") await this.checkPortableComponent(appPath, manifestResult.value, issues);
4312
+ else await this.checkCommand(appPath, command, args.values, issues);
4248
4313
  return issues;
4249
4314
  };
4250
- checkManifestFields = (appPath, manifest, issues) => {
4315
+ checkManifestFields = (appPath, manifest, protocol, issues) => {
4251
4316
  const id = readRequiredString(manifest, "id", "service");
4252
4317
  this.pushIssue(issues, id.issue);
4253
4318
  if (id.value && (!KEBAB_ID_PATTERN.test(id.value) || id.value !== path.basename(appPath))) issues.push({
@@ -4256,14 +4321,42 @@ var ServiceAppCheckService = class {
4256
4321
  message: `service-app.json id must be kebab-case and equal directory name: ${path.basename(appPath)}.`
4257
4322
  });
4258
4323
  this.pushIssue(issues, readRequiredString(manifest, "title", "service").issue);
4259
- this.pushIssue(issues, readRequiredString(manifest, "command", "service").issue);
4260
- if ((readOptionalString(manifest, "protocol") ?? "mcp") !== "mcp") issues.push({
4324
+ if (protocol === "mcp") this.pushIssue(issues, readRequiredString(manifest, "command", "service").issue);
4325
+ else if (protocol !== "wasi-component") issues.push({
4261
4326
  severity: "error",
4262
4327
  code: "service.protocol.invalid",
4263
- message: "Service App protocol must be mcp."
4328
+ message: "Service App protocol must be mcp or wasi-component."
4264
4329
  });
4265
4330
  return id.value;
4266
4331
  };
4332
+ checkPortableComponent = async (appPath, manifest, issues) => {
4333
+ if (!isRecord(manifest.component)) {
4334
+ issues.push({
4335
+ severity: "error",
4336
+ code: "service.component.missing",
4337
+ message: "wasi-component Service App must declare component.entry."
4338
+ });
4339
+ return;
4340
+ }
4341
+ const entry = readRequiredString(manifest.component, "entry", "service.component");
4342
+ this.pushIssue(issues, entry.issue);
4343
+ if (!entry.value) return;
4344
+ const normalized = entry.value.replace(/\\/g, "/");
4345
+ if (path.isAbsolute(normalized) || normalized.split("/").includes("..") || !normalized.endsWith(".wasm")) {
4346
+ issues.push({
4347
+ severity: "error",
4348
+ code: "service.component.entryInvalid",
4349
+ message: "service.component.entry must be a package-relative .wasm path."
4350
+ });
4351
+ return;
4352
+ }
4353
+ const componentPath = resolveRelativeFile(appPath, normalized);
4354
+ if (!componentPath || !await fileExists(componentPath)) issues.push({
4355
+ severity: "error",
4356
+ code: "service.component.notFound",
4357
+ message: `Portable Component does not exist: ${entry.value}.`
4358
+ });
4359
+ };
4267
4360
  checkActions = (serviceId, value, issues) => {
4268
4361
  if (!isRecord(value) || Object.keys(value).length === 0) {
4269
4362
  issues.push({
@@ -4874,17 +4967,192 @@ var AppValidatePublishCommandController = class {
4874
4967
  };
4875
4968
  };
4876
4969
  //#endregion
4970
+ //#region src/cli/app/services/app-packages/app-marketplace-query.service.ts
4971
+ const DEFAULT_APPS_MARKETPLACE_API_BASE = "https://apps-registry.nextclaw.io";
4972
+ var AppMarketplaceQueryService = class {
4973
+ constructor(params = {}) {
4974
+ this.params = params;
4975
+ }
4976
+ search = async (options = {}) => {
4977
+ const search = new URLSearchParams();
4978
+ if (options.query?.trim()) search.set("q", options.query.trim());
4979
+ if (options.tag?.trim()) search.set("tag", options.tag.trim());
4980
+ if (options.cursor?.trim()) search.set("cursor", options.cursor.trim());
4981
+ search.set("limit", String(this.normalizeLimit(options.limit)));
4982
+ return this.normalizeSearchResult(await this.request(`/api/v2/apps/items?${search.toString()}`));
4983
+ };
4984
+ info = async (selector) => {
4985
+ const normalized = selector.trim();
4986
+ if (!normalized) throw new Error("Marketplace app selector is required.");
4987
+ return this.normalizeItem(await this.request(`/api/v1/apps/items/${encodeURIComponent(normalized)}`));
4988
+ };
4989
+ request = async (pathname) => {
4990
+ const response = await (this.params.fetchImpl ?? fetch)(`${this.apiBaseUrl}${pathname}`, { headers: { accept: "application/json" } });
4991
+ const payload = await response.json().catch(() => null);
4992
+ if (!response.ok || !payload?.ok) throw new Error(`Apps marketplace request failed: ${response.status} ${response.statusText}`);
4993
+ return payload.data;
4994
+ };
4995
+ normalizeSearchResult = (result) => ({
4996
+ ...result,
4997
+ items: result.items.map((item) => this.normalizeItem(item))
4998
+ });
4999
+ normalizeItem = (item) => ({
5000
+ ...item,
5001
+ install: {
5002
+ spec: item.install.spec,
5003
+ registry: item.install.registry
5004
+ }
5005
+ });
5006
+ get apiBaseUrl() {
5007
+ return (this.params.apiBaseUrl ?? DEFAULT_APPS_MARKETPLACE_API_BASE).replace(/\/+$/, "");
5008
+ }
5009
+ normalizeLimit = (limit) => {
5010
+ if (limit === void 0) return 24;
5011
+ if (!Number.isInteger(limit) || limit < 1 || limit > 100) throw new Error("--limit must be an integer between 1 and 100.");
5012
+ return limit;
5013
+ };
5014
+ };
5015
+ //#endregion
5016
+ //#region src/cli/app/services/local-api/app-package-live.service.ts
5017
+ var AppPackageLiveService = class {
5018
+ constructor(params = {}) {
5019
+ this.params = params;
5020
+ }
5021
+ list = async () => await this.requireApiClient().request({ path: "/api/app-packages" });
5022
+ info = async (appId) => await this.requireApiClient().request({ path: `/api/app-packages/${encodeURIComponent(this.requireId(appId))}` });
5023
+ listOperations = async () => await this.requireApiClient().request({ path: "/api/app-package-operations" });
5024
+ install = async (source, registryUrl) => await this.requireApiClient().request({
5025
+ path: "/api/app-package-operations/install",
5026
+ method: "POST",
5027
+ body: {
5028
+ source: this.requireSource(source),
5029
+ registryUrl
5030
+ }
5031
+ });
5032
+ enable = async (appId) => await this.changeEnabled(appId, "enable");
5033
+ disable = async (appId) => await this.changeEnabled(appId, "disable");
5034
+ update = async (appId, options) => await this.requireApiClient().request({
5035
+ path: `/api/app-package-operations/${encodeURIComponent(this.requireId(appId))}/update`,
5036
+ method: "POST",
5037
+ body: options
5038
+ });
5039
+ rollback = async (appId, version) => await this.requireApiClient().request({
5040
+ path: `/api/app-package-operations/${encodeURIComponent(this.requireId(appId))}/rollback`,
5041
+ method: "POST",
5042
+ body: { version: this.requireVersion(version) }
5043
+ });
5044
+ uninstall = async (appId, purgeData) => await this.requireApiClient().request({
5045
+ path: `/api/app-package-operations/${encodeURIComponent(this.requireId(appId))}/uninstall`,
5046
+ method: "POST",
5047
+ body: { purgeData }
5048
+ });
5049
+ changeEnabled = async (appId, action) => await this.requireApiClient().request({
5050
+ path: `/api/app-packages/${encodeURIComponent(this.requireId(appId))}/${action}`,
5051
+ method: "POST"
5052
+ });
5053
+ requireApiClient = () => {
5054
+ const client = this.params.createApiClient ? this.params.createApiClient() : createLocalUiApiClient();
5055
+ if (!client) throw new Error("NextClaw UI runtime is not running; start NextClaw before managing Apps.");
5056
+ return client;
5057
+ };
5058
+ requireId = (value) => this.requireValue(value, "App id");
5059
+ requireSource = (value) => this.requireValue(value, "App install source");
5060
+ requireVersion = (value) => this.requireValue(value, "App version");
5061
+ requireValue = (value, name) => {
5062
+ const normalized = value.trim();
5063
+ if (!normalized) throw new Error(`${name} is required.`);
5064
+ return normalized;
5065
+ };
5066
+ };
5067
+ //#endregion
5068
+ //#region src/cli/app/controllers/app-packages/app-package-command.controller.ts
5069
+ var AppPackageCommandController = class {
5070
+ constructor(liveService = new AppPackageLiveService(), marketplaceService = new AppMarketplaceQueryService()) {
5071
+ this.liveService = liveService;
5072
+ this.marketplaceService = marketplaceService;
5073
+ }
5074
+ searchMarketplace = async (options) => {
5075
+ const { query, tag, cursor, limit } = options;
5076
+ const result = await this.marketplaceService.search({
5077
+ query,
5078
+ tag,
5079
+ cursor,
5080
+ limit: limit === void 0 ? void 0 : Number(limit)
5081
+ });
5082
+ this.write(result, options, this.formatMarketplaceSearch);
5083
+ };
5084
+ marketplaceInfo = async (selector, options) => this.write(await this.marketplaceService.info(selector), options, this.formatMarketplaceInfo);
5085
+ list = async (options) => this.write(await this.liveService.list(), options, this.formatList);
5086
+ info = async (appId, options) => this.write(await this.liveService.info(appId), options, this.formatApp);
5087
+ operations = async (options) => this.write(await this.liveService.listOperations(), options, this.formatOperations);
5088
+ install = async (source, options) => this.write(await this.liveService.install(source, options.registry), options, this.formatOperation);
5089
+ enable = async (appId, options) => this.write(await this.liveService.enable(appId), options, this.formatApp);
5090
+ disable = async (appId, options) => this.write(await this.liveService.disable(appId), options, this.formatApp);
5091
+ update = async (appId, options) => this.write(await this.liveService.update(appId, {
5092
+ version: options.version,
5093
+ registryUrl: options.registry
5094
+ }), options, this.formatOperation);
5095
+ rollback = async (appId, options) => this.write(await this.liveService.rollback(appId, options.version), options, this.formatOperation);
5096
+ uninstall = async (appId, options) => {
5097
+ const { purgeData, confirm } = options;
5098
+ if (purgeData) this.requirePurgeConfirmation(appId, confirm);
5099
+ this.write(await this.liveService.uninstall(appId, purgeData === true), options, this.formatOperation);
5100
+ };
5101
+ write = (result, options, format) => {
5102
+ process.stdout.write(options.json ? `${JSON.stringify(result, null, 2)}\n` : format(result));
5103
+ };
5104
+ formatMarketplaceSearch = (result) => {
5105
+ if (result.items.length === 0) return "No Marketplace Apps found.\n";
5106
+ return `${result.items.map((item) => this.formatMarketplaceInfo(item).trim()).join("\n\n")}\n`;
5107
+ };
5108
+ formatMarketplaceInfo = (item) => [
5109
+ `${item.name} (${item.appId})`,
5110
+ ` summary: ${item.summary}`,
5111
+ ` version: ${item.latestVersion}`,
5112
+ ` author: ${item.author}`,
5113
+ ` tags: ${item.tags.join(", ") || "-"}`,
5114
+ ` install: ${formatNextClawAppInstallCommand(item.install.spec)}`
5115
+ ].join("\n") + "\n";
5116
+ formatList = (result) => {
5117
+ if (result.entries.length === 0) return "Apps: none\n";
5118
+ return `${result.entries.map((app) => this.formatApp(app).trim()).join("\n\n")}\n`;
5119
+ };
5120
+ formatApp = (app) => [
5121
+ `${app.name} (${app.id})`,
5122
+ ` version: ${app.activeVersion}`,
5123
+ ` enabled: ${app.enabled ? "yes" : "no"}`,
5124
+ ` built-in: ${app.builtIn ? "yes" : "no"}`,
5125
+ ` versions: ${app.installedVersions.join(", ")}`
5126
+ ].join("\n") + "\n";
5127
+ formatOperations = (result) => {
5128
+ if (result.entries.length === 0) return "App operations: none\n";
5129
+ return `${result.entries.map((operation) => this.formatOperation(operation).trim()).join("\n\n")}\n`;
5130
+ };
5131
+ formatOperation = (operation) => [
5132
+ `App operation ${operation.id}`,
5133
+ ` action: ${operation.action}`,
5134
+ ` status: ${operation.status}`,
5135
+ ` app: ${operation.appId ?? operation.source ?? "-"}`,
5136
+ operation.error ? ` error: ${operation.error}` : ""
5137
+ ].filter(Boolean).join("\n") + "\n";
5138
+ requirePurgeConfirmation = (appId, confirmation) => {
5139
+ if (confirmation?.trim() !== appId.trim()) throw new Error("--purge-data requires --confirm <app-id> matching the exact App id.");
5140
+ };
5141
+ };
5142
+ //#endregion
4877
5143
  //#region src/cli/app/register-app-commands.ts
4878
- function registerAppCommands(program) {
5144
+ function registerAppCommands(program, options = {}) {
4879
5145
  const app = program.command("app").description("Develop, validate, and publish NextClaw apps");
4880
5146
  const appCheck = new AppCheckCommandController();
4881
- const appDev = new AppDevCommandController();
5147
+ const serviceAppDev = new ServiceAppDevService({ portableServiceRunnerPath: options.portableServiceRunnerPath });
5148
+ const appDev = new AppDevCommandController(serviceAppDev);
4882
5149
  const appData = new AppDataCommandController();
4883
- const appCall = new AppCallCommandController();
5150
+ const appCall = new AppCallCommandController(serviceAppDev);
4884
5151
  const appRestart = new AppRestartCommandController();
4885
5152
  const appPack = new AppPackCommandController();
4886
5153
  const appValidatePublish = new AppValidatePublishCommandController();
4887
5154
  const appPublish = new AppPublishCommandController();
5155
+ const appPackages = new AppPackageCommandController();
4888
5156
  app.command("pack <app-dir>").description("Pack one declared platform target as a NextClaw App artifact").requiredOption("--target <target-key>", "Pack a declared platform target").requiredOption("--out <path>", "Write the .napp artifact to a specific path").option("--json", "Output JSON", false).action(async (target, opts) => appPack.pack(target, opts));
4889
5157
  app.command("validate-publish <app-dir>").description("Validate a NextClaw Mini App before Marketplace submission").option("--meta <path>", "Use a custom marketplace metadata file").option("--artifacts <dir>", "Use target-keyed .napp artifacts from a directory").option("--json", "Output JSON", false).action(async (target, opts) => appValidatePublish.validate(target, opts));
4890
5158
  app.command("publish <app-dir>").description("Submit a NextClaw Mini App to the App Marketplace").option("--meta <path>", "Use a custom marketplace metadata file").option("--artifacts <dir>", "Publish target-keyed .napp artifacts from a directory").option("--allow-warnings", "Submit after reviewing validation warnings", false).option("--json", "Output JSON", false).action(async (target, opts) => appPublish.publish(target, opts));
@@ -4895,6 +5163,21 @@ function registerAppCommands(program) {
4895
5163
  data.command("delete <data-id>").description("Permanently delete a retained App data instance").requiredOption("--confirm <app-id>", "Confirm the exact App id").option("--json", "Output JSON", false).action(async (dataId, opts) => appData.deleteRetained(dataId, opts));
4896
5164
  app.command("call <service-app-dir> <action-name>").description("Call a Service App action through the real runtime").option("--input <json>", "JSON object input for the action").option("--json", "Output JSON", false).action(async (target, actionName, opts) => appCall.call(target, actionName, opts));
4897
5165
  app.command("restart <app-id>").description("Restart a live Service App runtime in the running NextClaw UI").option("--json", "Output JSON", false).action(async (appId, opts) => appRestart.restart(appId, opts));
5166
+ registerAppPackageCommands(app, appPackages);
5167
+ }
5168
+ function registerAppPackageCommands(app, appPackages) {
5169
+ const marketplace = app.command("marketplace").description("Browse NextClaw App Marketplace");
5170
+ marketplace.command("search").description("Search Apps in NextClaw App Marketplace").option("-q, --query <text>", "Search text").option("--tag <tag>", "Filter by tag").option("--cursor <cursor>", "Continue from a marketplace cursor").option("--limit <n>", "Maximum number of items").option("--json", "Output JSON", false).action(async (opts) => appPackages.searchMarketplace(opts));
5171
+ marketplace.command("info <selector>").description("Show an App Marketplace item").option("--json", "Output JSON", false).action(async (selector, opts) => appPackages.marketplaceInfo(selector, opts));
5172
+ app.command("list").description("List Apps installed in the running NextClaw host").option("--json", "Output JSON", false).action(async (opts) => appPackages.list(opts));
5173
+ app.command("info <app-id>").description("Show an App installed in the running NextClaw host").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.info(appId, opts));
5174
+ app.command("operations").description("List App install, update, rollback, and uninstall operations").option("--json", "Output JSON", false).action(async (opts) => appPackages.operations(opts));
5175
+ app.command("install <source>").description("Install an App through the running NextClaw host").option("--registry <url>", "Registry URL for an App id").option("--json", "Output JSON", false).action(async (source, opts) => appPackages.install(source, opts));
5176
+ app.command("enable <app-id>").description("Enable an installed App").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.enable(appId, opts));
5177
+ app.command("disable <app-id>").description("Disable an installed App").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.disable(appId, opts));
5178
+ app.command("update <app-id>").description("Update an App through the running NextClaw host").option("--version <version>", "Target version").option("--registry <url>", "Registry URL").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.update(appId, opts));
5179
+ app.command("rollback <app-id>").description("Roll back an App to an installed version").requiredOption("--version <version>", "Installed version to activate").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.rollback(appId, opts));
5180
+ app.command("uninstall <app-id>").description("Uninstall an App through the running NextClaw host").option("--purge-data", "Permanently delete App data", false).option("--confirm <app-id>", "Confirm the exact App id when purging data").option("--json", "Output JSON", false).action(async (appId, opts) => appPackages.uninstall(appId, opts));
4898
5181
  }
4899
5182
  //#endregion
4900
5183
  //#region src/cli/app/register-project-commands.ts
@@ -4913,6 +5196,7 @@ function registerSessionCommands(program, nextclaw) {
4913
5196
  sessions.command("rename <session-id> <label>").description("Rename a session").option("--json", "Output JSON", false).action((sessionId, label, options) => commands.rename(sessionId, label, options));
4914
5197
  sessions.command("set-project <session-id> <directory>").description("Bind a session to an existing project directory").option("--json", "Output JSON", false).action((sessionId, directory, options) => commands.setProject(sessionId, directory, options));
4915
5198
  sessions.command("clear-project <session-id>").description("Clear a session project binding").option("--json", "Output JSON", false).action((sessionId, options) => commands.clearProject(sessionId, options));
5199
+ sessions.command("delete <session-id>").description("Permanently delete a session").requiredOption("--confirm <session-id>", "Confirm the exact session id").option("--json", "Output JSON", false).action((sessionId, options) => commands.delete(sessionId, options));
4916
5200
  }
4917
5201
  //#endregion
4918
5202
  //#region src/cli/app/controllers/exec-command.controller.ts
@@ -5124,7 +5408,7 @@ registerAgentsCommands(program, runtime);
5124
5408
  registerProjectCommands(program, runtime);
5125
5409
  registerSessionCommands(program, runtime);
5126
5410
  registerExecCommand(program, runtime);
5127
- registerAppCommands(program);
5411
+ registerAppCommands(program, { portableServiceRunnerPath: NextclawDistributionService.get().portableServiceRunnerPath });
5128
5412
  const config = program.command("config").description("Manage config values");
5129
5413
  config.command("get <path>").description("Get a config value by dot path").option("--json", "Output JSON", false).action((path, opts) => runtime.commands.config.get(path, opts));
5130
5414
  config.command("set <path> <value>").description("Set a config value by dot path").option("--json", "Parse value as JSON", false).action((path, value, opts) => runtime.commands.config.set(path, value, opts));
@@ -5164,4 +5448,4 @@ program.command("usage").description("Show observed LLM usage snapshots, history
5164
5448
  //#endregion
5165
5449
  export { program as nextclawCliProgram };
5166
5450
 
5167
- //# sourceMappingURL=nextclaw-cli-app-scOxgGRP.js.map
5451
+ //# sourceMappingURL=nextclaw-cli-app-Bwa2L2Jv.js.map