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.
- package/dist/cli/app/index.js +2 -2
- package/dist/cli/launcher/index.js +1 -1
- package/dist/{nextclaw-cli-app-scOxgGRP.js → nextclaw-cli-app-Bwa2L2Jv.js} +306 -22
- package/dist/nextclaw-cli-app-Bwa2L2Jv.js.map +1 -0
- package/dist/{nextclaw-distribution.utils-BneKclXo.js → nextclaw-distribution.utils-Bba2GRvc.js} +4 -2
- package/dist/nextclaw-distribution.utils-Bba2GRvc.js.map +1 -0
- package/package.json +15 -14
- package/resources/USAGE.md +36 -4
- package/resources/apps/nextclaw-personal-organizer/README.md +1 -1
- package/resources/apps/nextclaw-portable-runtime-lab/README.md +34 -0
- package/resources/apps/nextclaw-portable-runtime-lab/assets/icon.svg +12 -0
- package/resources/apps/nextclaw-portable-runtime-lab/manifest.json +74 -0
- package/resources/apps/nextclaw-portable-runtime-lab/marketplace.json +21 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/assets/app.js +92 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/assets/style.css +43 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/index.html +43 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-contacts.panel/panel-app.json +10 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/assets/app.js +132 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/assets/style.css +39 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/index.html +40 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-focus.panel/panel-app.json +14 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/assets/app.js +117 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/assets/style.css +41 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/index.html +41 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-notes.panel/panel-app.json +12 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/assets/app.js +266 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/assets/style.css +87 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/index.html +154 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-panel.panel/panel-app.json +29 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/assets/app.js +143 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/assets/style.css +48 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/index.html +45 -0
- package/resources/apps/nextclaw-portable-runtime-lab/panels/nextclaw-portable-runtime-lab-todos.panel/panel-app.json +12 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-capabilities/service-app.json +20 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-capabilities/service.wasm +0 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-composition/service-app.json +30 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-composition/service.wasm +0 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-provider/service-app.json +30 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-provider/service.wasm +0 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-resident/service-app.json +31 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-resident/service.wasm +0 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-state/service-app.json +49 -0
- package/resources/apps/nextclaw-portable-runtime-lab/service-components/nextclaw-portable-runtime-lab-state/service.wasm +0 -0
- package/ui-dist/assets/abnfDiagram-VRR7QNED-BcFJp_1X.js.gz +0 -0
- package/ui-dist/assets/aiden0z-pptx-renderer.es-Dp2ezlQn.js.gz +0 -0
- package/ui-dist/assets/{api-iMkU_o5P.js → api-m33O1Kb0.js} +6 -6
- package/ui-dist/assets/api-m33O1Kb0.js.gz +0 -0
- package/ui-dist/assets/{appearance-settings-page-CU5k4b-M.js → appearance-settings-page-x4Vjnfmz.js} +1 -1
- package/ui-dist/assets/appearance-settings-page-x4Vjnfmz.js.gz +0 -0
- package/ui-dist/assets/arc-CkgyPMyW.js.gz +0 -0
- package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-CMd4cIjI.js.gz +0 -0
- package/ui-dist/assets/blockDiagram-677ZJIJ3-Bz3tbhet.js.gz +0 -0
- package/ui-dist/assets/{book-open-nD8gdMhA.js → book-open-BHiasMCg.js} +1 -1
- package/ui-dist/assets/c4Diagram-LMCZKHZV-D9hFNAGv.js.gz +0 -0
- package/ui-dist/assets/{channels-list-page-Drlt62kY.js → channels-list-page-DOxJZeXq.js} +2 -2
- package/ui-dist/assets/channels-list-page-DOxJZeXq.js.gz +0 -0
- package/ui-dist/assets/chunk-32BRIVSS-7NrjEITq.js.gz +0 -0
- package/ui-dist/assets/chunk-52WLFC77-viIcqj9q.js.gz +0 -0
- package/ui-dist/assets/chunk-5JV3BV7I-CuKgJQ4W.js.gz +0 -0
- package/ui-dist/assets/chunk-5TONJI2A-CYeiWZKb.js.gz +0 -0
- package/ui-dist/assets/chunk-7BUUIJ7U-BvydOcm3.js.gz +0 -0
- package/ui-dist/assets/chunk-C7G6YPKG-DAizzYwr.js.gz +0 -0
- package/ui-dist/assets/chunk-DseTPa7n.js.gz +0 -0
- package/ui-dist/assets/chunk-EX3LRPZG-BmlDFIRW.js.gz +0 -0
- package/ui-dist/assets/chunk-FWX5IMBZ-D0ksHZZ9.js.gz +0 -0
- package/ui-dist/assets/chunk-HOUHSVGY-DPkq8FCm.js.gz +0 -0
- package/ui-dist/assets/chunk-ICXQ74PX-FAatv5fC.js.gz +0 -0
- package/ui-dist/assets/chunk-JG7HCLWE-DLkIi4F7.js.gz +0 -0
- package/ui-dist/assets/chunk-KEIR6QF5-f9psyCXK.js.gz +0 -0
- package/ui-dist/assets/chunk-MOJQB5TN-Di52TorW.js.gz +0 -0
- package/ui-dist/assets/chunk-PUDLZKDR-f3IJh3sN.js.gz +0 -0
- package/ui-dist/assets/chunk-Q4XR5HBZ-DQFeUPxZ.js.gz +0 -0
- package/ui-dist/assets/chunk-R7FJI6CG-C3XpZ-2u.js.gz +0 -0
- package/ui-dist/assets/chunk-RYQCIY6F-CAqa5klQ.js.gz +0 -0
- package/ui-dist/assets/chunk-U6XO7XAA-D_WXezeD.js.gz +0 -0
- package/ui-dist/assets/chunk-V7JOEXUC-CZ70oOtp.js.gz +0 -0
- package/ui-dist/assets/chunk-WYO6CB5R-Dn9To_OI.js.gz +0 -0
- package/ui-dist/assets/chunk-ZGVPDNZ5-C6YtZDU0.js.gz +0 -0
- package/ui-dist/assets/chunk-ZIRB5QZD-DMuYtnHF.js.gz +0 -0
- package/ui-dist/assets/{config-split-page-BtJZp1E5.js → config-split-page-DBnMEP1o.js} +1 -1
- package/ui-dist/assets/config-split-page-DBnMEP1o.js.gz +0 -0
- package/ui-dist/assets/{confirm-dialog-k2-Jq_x3.js → confirm-dialog-f5NKLh5I.js} +2 -2
- package/ui-dist/assets/confirm-dialog-f5NKLh5I.js.gz +0 -0
- package/ui-dist/assets/cose-bilkent-JH36ORCC-Bc2Ex5Y3.js.gz +0 -0
- package/ui-dist/assets/{createLucideIcon-DxlwKLr-.js → createLucideIcon-CHALGA42.js} +1 -1
- package/ui-dist/assets/cynefinDiagram-TSTJHNR4-DVysQoGz.js.gz +0 -0
- package/ui-dist/assets/cytoscape.esm-0uDtdD0l.js.gz +0 -0
- package/ui-dist/assets/dagre-CMhQ1cAG.js.gz +0 -0
- package/ui-dist/assets/dagre-VKFMJZFB-RYyWpPJZ.js.gz +0 -0
- package/ui-dist/assets/defaultLocale-DSWXGgt0.js.gz +0 -0
- package/ui-dist/assets/desktop-capabilities-page-DixayAe6.js +1 -0
- package/ui-dist/assets/desktop-capabilities-page-DixayAe6.js.gz +0 -0
- package/ui-dist/assets/desktop-update-config-ChhfeOHj.js +1 -0
- package/ui-dist/assets/desktop-update-config-ChhfeOHj.js.gz +0 -0
- package/ui-dist/assets/diagram-FQU43EPY-BD6KONdF.js.gz +0 -0
- package/ui-dist/assets/diagram-G47NLZAW-CGB2ptRR.js.gz +0 -0
- package/ui-dist/assets/diagram-NH7WQ7WH-DnkOI6cU.js.gz +0 -0
- package/ui-dist/assets/diagram-OA4YK3LP-DF82RZ7P.js.gz +0 -0
- package/ui-dist/assets/diagram-WEI45ONY-Be2v7Ck9.js.gz +0 -0
- package/ui-dist/assets/dist--ta5rX12.js.gz +0 -0
- package/ui-dist/assets/{dist-Cy_e4kNb.js → dist-_UMsWSY0.js} +1 -1
- package/ui-dist/assets/dist-_UMsWSY0.js.gz +0 -0
- package/ui-dist/assets/{dist-m08DUswB.js → dist-sD6V4nHX.js} +1 -1
- package/ui-dist/assets/dist-sD6V4nHX.js.gz +0 -0
- package/ui-dist/assets/doc-browser-Bq7LJsQY.js +1 -0
- package/ui-dist/assets/doc-browser-Bq7LJsQY.js.gz +0 -0
- package/ui-dist/assets/doc-browser-BuDgpY2e.js +1 -0
- package/ui-dist/assets/{doc-browser-context-jiy-O4F8.js → doc-browser-context-Capim3og.js} +1 -1
- package/ui-dist/assets/doc-browser-context-Capim3og.js.gz +0 -0
- package/ui-dist/assets/docx-preview-BqwAjrj3.js.gz +0 -0
- package/ui-dist/assets/ebnfDiagram-CCIWWBDH-CP98OYk8.js.gz +0 -0
- package/ui-dist/assets/erDiagram-Q63AITRT-ZLlx8xfs.js.gz +0 -0
- package/ui-dist/assets/{extensions-CIb17__o.js → extensions-Bdclr3Wr.js} +1 -1
- package/ui-dist/assets/extensions-Bdclr3Wr.js.gz +0 -0
- package/ui-dist/assets/{form-actions-DGf5zUg_.js → form-actions-CH0kWhEt.js} +1 -1
- package/ui-dist/assets/ganttDiagram-NO4QXBWP-DXCDjHR2.js.gz +0 -0
- package/ui-dist/assets/gitGraphDiagram-IHSO6WYX-l2HWrTJp.js.gz +0 -0
- package/ui-dist/assets/graphlib-CQ6QV4yP.js.gz +0 -0
- package/ui-dist/assets/index-BjxnLYE3.js +109 -0
- package/ui-dist/assets/index-BjxnLYE3.js.gz +0 -0
- package/ui-dist/assets/index-CBmwJjwE.css +1 -0
- package/ui-dist/assets/index-CBmwJjwE.css.gz +0 -0
- package/ui-dist/assets/ishikawaDiagram-FXEZZL3T-y_Xy128F.js.gz +0 -0
- package/ui-dist/assets/journeyDiagram-5HDEW3XC-DJn5xYcQ.js.gz +0 -0
- package/ui-dist/assets/jszip.min-8hyJpgpx.js.gz +0 -0
- package/ui-dist/assets/kanban-definition-HUTT4EX6-DJVIOR21.js.gz +0 -0
- package/ui-dist/assets/katex-ARhY9PS1.js.gz +0 -0
- package/ui-dist/assets/linear-BtDLqtzF.js.gz +0 -0
- package/ui-dist/assets/loader-circle-CH_0iPLy.js +1 -0
- package/ui-dist/assets/map-BKnQyvd0.js.gz +0 -0
- package/ui-dist/assets/mcp-marketplace-page-BUsxLVB5.js +10 -0
- package/ui-dist/assets/mcp-marketplace-page-BUsxLVB5.js.gz +0 -0
- package/ui-dist/assets/mcp-marketplace-page-GPRV3fB0.js +1 -0
- package/ui-dist/assets/mermaid-parser.core-XUNZhr2W.js.gz +0 -0
- package/ui-dist/assets/mermaid.core-ySrvolIe.js.gz +0 -0
- package/ui-dist/assets/middleware-DXsbf9xI.js.gz +0 -0
- package/ui-dist/assets/mindmap-definition-LN4V7U3C-BypL9tei.js.gz +0 -0
- package/ui-dist/assets/model-config-page-CIevwqp4.js +1 -0
- package/ui-dist/assets/model-config-page-CIevwqp4.js.gz +0 -0
- package/ui-dist/assets/{navigation-link-DAfwFCj4.js → navigation-link-CAUiM3zS.js} +1 -1
- package/ui-dist/assets/navigation-link-CAUiM3zS.js.gz +0 -0
- package/ui-dist/assets/ordinal-CxxVWxYU.js.gz +0 -0
- package/ui-dist/assets/path-10BjdyLh.js.gz +0 -0
- package/ui-dist/assets/pegDiagram-2B236MQR-D-U2KBGv.js.gz +0 -0
- package/ui-dist/assets/pieDiagram-ENE6RG2P-CBi3GusJ.js.gz +0 -0
- package/ui-dist/assets/plus-B3obD55V.js +1 -0
- package/ui-dist/assets/preload-helper-D4M6sveU.js.gz +0 -0
- package/ui-dist/assets/privacy-settings-page-CNKfZsYH.js +1 -0
- package/ui-dist/assets/privacy-settings-page-CNKfZsYH.js.gz +0 -0
- package/ui-dist/assets/providers-config-page-DAah2NIS.js +1 -0
- package/ui-dist/assets/providers-config-page-DAah2NIS.js.gz +0 -0
- package/ui-dist/assets/quadrantDiagram-ABIIQ3AL-H0ZuvnZL.js.gz +0 -0
- package/ui-dist/assets/railroadDiagram-RFXS5EU6-D7Y2EqSd.js.gz +0 -0
- package/ui-dist/assets/react-Co6JiC1n.js +8 -0
- package/ui-dist/assets/react-Co6JiC1n.js.gz +0 -0
- package/ui-dist/assets/{refresh-cw-D_Eibznw.js → refresh-cw-BG_LX3SS.js} +1 -1
- package/ui-dist/assets/remote-DuscgfvR.js +1 -0
- package/ui-dist/assets/requirementDiagram-TGXJPOKE-BiXNX1NN.js.gz +0 -0
- package/ui-dist/assets/{rotate-cw-QQjmoWuq.js → rotate-cw-Cz7I_m7O.js} +1 -1
- package/ui-dist/assets/rough.esm-DxgC_14r.js.gz +0 -0
- package/ui-dist/assets/runtime-config-page-Cl1RpmSC.js +1 -0
- package/ui-dist/assets/runtime-config-page-Cl1RpmSC.js.gz +0 -0
- package/ui-dist/assets/sankeyDiagram-HTMAVEWB-qzDeLztW.js.gz +0 -0
- package/ui-dist/assets/{save-W2xthJJ2.js → save-BiHnb8ps.js} +1 -1
- package/ui-dist/assets/{search-Vih1R2BD.js → search-C47TyRg0.js} +1 -1
- package/ui-dist/assets/{search-config-page-CtBcL2uc.js → search-config-page-BAIzd6gN.js} +1 -1
- package/ui-dist/assets/search-config-page-BAIzd6gN.js.gz +0 -0
- package/ui-dist/assets/{secrets-config-page-Q6XfIj0h.js → secrets-config-page-Ddi-n43R.js} +2 -2
- package/ui-dist/assets/secrets-config-page-Ddi-n43R.js.gz +0 -0
- package/ui-dist/assets/security-config-C8MHnE1r.js +1 -0
- package/ui-dist/assets/{select-lNdozU4o.js → select-BzQKfW1e.js} +2 -2
- package/ui-dist/assets/select-BzQKfW1e.js.gz +0 -0
- package/ui-dist/assets/sequenceDiagram-DBY2YBRQ-BtRbPQtL.js.gz +0 -0
- package/ui-dist/assets/skeleton-BXFAE9SE.js +1 -0
- package/ui-dist/assets/src-Bw-mzbQb.js.gz +0 -0
- package/ui-dist/assets/stateDiagram-2N3HPSRC-BJ-mFeOz.js.gz +0 -0
- package/ui-dist/assets/swimlanes-5IMT3BWC-BsucVOO2.js.gz +0 -0
- package/ui-dist/assets/{tag-chip-gdaU9bE7.js → tag-chip-C3K814HZ.js} +1 -1
- package/ui-dist/assets/timeline-definition-FHXFAJF6-Bicewlzo.js.gz +0 -0
- package/ui-dist/assets/vennDiagram-L72KCM5P-BxOOnO9x.js.gz +0 -0
- package/ui-dist/assets/wardleyDiagram-EHGQE667-Cl7NltMv.js.gz +0 -0
- package/ui-dist/assets/x-C1r9IXet.js +1 -0
- package/ui-dist/assets/xlsx-DrDuDNAa.js.gz +0 -0
- package/ui-dist/assets/xychartDiagram-FW5EYKEG-DiMIxQ7N.js.gz +0 -0
- package/ui-dist/index.html +29 -21
- package/ui-dist/index.html.gz +0 -0
- package/ui-dist/logos/discord.svg.gz +0 -0
- package/ui-dist/logos/feishu.svg.gz +0 -0
- package/ui-dist/logos/gemini.svg.gz +0 -0
- package/ui-dist/logos/mimo.svg.gz +0 -0
- package/ui-dist/logos/openai.svg.gz +0 -0
- package/ui-dist/logos/slack.svg.gz +0 -0
- package/ui-dist/logos/vllm.svg.gz +0 -0
- package/ui-dist/logos/weixin.svg.gz +0 -0
- package/ui-dist/logos/whatsapp.svg.gz +0 -0
- package/ui-dist/logos/zhipu.svg.gz +0 -0
- package/ui-dist/offline.html.gz +0 -0
- package/ui-dist/runtime-icons/codex-openai.svg.gz +0 -0
- package/ui-dist/sw.js.gz +0 -0
- package/ui-dist/themes/island/island-atmosphere.webp +0 -0
- package/dist/nextclaw-cli-app-scOxgGRP.js.map +0 -1
- package/dist/nextclaw-distribution.utils-BneKclXo.js.map +0 -1
- package/ui-dist/assets/api-iMkU_o5P.js.gz +0 -0
- package/ui-dist/assets/appearance-settings-page-CU5k4b-M.js.gz +0 -0
- package/ui-dist/assets/channels-list-page-Drlt62kY.js.gz +0 -0
- package/ui-dist/assets/config-split-page-BtJZp1E5.js.gz +0 -0
- package/ui-dist/assets/confirm-dialog-k2-Jq_x3.js.gz +0 -0
- package/ui-dist/assets/desktop-update-config-BiZmy7FC.js +0 -1
- package/ui-dist/assets/desktop-update-config-BiZmy7FC.js.gz +0 -0
- package/ui-dist/assets/dist-Cy_e4kNb.js.gz +0 -0
- package/ui-dist/assets/dist-m08DUswB.js.gz +0 -0
- package/ui-dist/assets/doc-browser-CPsPHh12.js +0 -1
- package/ui-dist/assets/doc-browser-context-jiy-O4F8.js.gz +0 -0
- package/ui-dist/assets/doc-browser-npOvWtgf.js +0 -1
- package/ui-dist/assets/doc-browser-npOvWtgf.js.gz +0 -0
- package/ui-dist/assets/extensions-CIb17__o.js.gz +0 -0
- package/ui-dist/assets/index-C86hxgv5.css +0 -1
- package/ui-dist/assets/index-C86hxgv5.css.gz +0 -0
- package/ui-dist/assets/index-CYBXR7zN.js +0 -109
- package/ui-dist/assets/index-CYBXR7zN.js.gz +0 -0
- package/ui-dist/assets/loader-circle-BlLuRFVW.js +0 -1
- package/ui-dist/assets/mcp-marketplace-page-B12JNh7Q.js +0 -1
- package/ui-dist/assets/mcp-marketplace-page-kLWW6kzt.js +0 -9
- package/ui-dist/assets/mcp-marketplace-page-kLWW6kzt.js.gz +0 -0
- package/ui-dist/assets/model-config-page-DSeAjVT_.js +0 -1
- package/ui-dist/assets/model-config-page-DSeAjVT_.js.gz +0 -0
- package/ui-dist/assets/navigation-link-DAfwFCj4.js.gz +0 -0
- package/ui-dist/assets/plus-D4LtWtTk.js +0 -1
- package/ui-dist/assets/privacy-settings-page-tN0Mt15x.js +0 -1
- package/ui-dist/assets/privacy-settings-page-tN0Mt15x.js.gz +0 -0
- package/ui-dist/assets/providers-config-page-CgPrXR1u.js +0 -1
- package/ui-dist/assets/providers-config-page-CgPrXR1u.js.gz +0 -0
- package/ui-dist/assets/react-8iBFECZE.js +0 -8
- package/ui-dist/assets/react-8iBFECZE.js.gz +0 -0
- package/ui-dist/assets/remote-Derr_AQp.js +0 -1
- package/ui-dist/assets/runtime-config-page-Crq96Jjq.js +0 -1
- package/ui-dist/assets/runtime-config-page-Crq96Jjq.js.gz +0 -0
- package/ui-dist/assets/search-config-page-CtBcL2uc.js.gz +0 -0
- package/ui-dist/assets/secrets-config-page-Q6XfIj0h.js.gz +0 -0
- package/ui-dist/assets/security-config-CE9rkQvq.js +0 -1
- package/ui-dist/assets/select-lNdozU4o.js.gz +0 -0
- package/ui-dist/assets/skeleton-B__aTcly.js +0 -1
- package/ui-dist/assets/x-CWdWBu_U.js +0 -1
package/dist/cli/app/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { t as createNextclawDistribution } from "../../nextclaw-distribution.utils-
|
|
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-
|
|
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-
|
|
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 {
|
|
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 = () =>
|
|
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
|
|
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.
|
|
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 (
|
|
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
|
|
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-
|
|
5451
|
+
//# sourceMappingURL=nextclaw-cli-app-Bwa2L2Jv.js.map
|