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
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
const actionIds = {
|
|
2
|
+
list: "nextclaw-portable-runtime-lab-state.records_list",
|
|
3
|
+
upsert: "nextclaw-portable-runtime-lab-state.record_upsert",
|
|
4
|
+
remove: "nextclaw-portable-runtime-lab-state.record_delete",
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const elements = {
|
|
8
|
+
form: document.querySelector("[data-todo-form]"),
|
|
9
|
+
input: document.querySelector("[data-todo-input]"),
|
|
10
|
+
list: document.querySelector("[data-todo-list]"),
|
|
11
|
+
openCount: document.querySelector("[data-open-count]"),
|
|
12
|
+
doneCount: document.querySelector("[data-done-count]"),
|
|
13
|
+
notice: document.querySelector("[data-notice]"),
|
|
14
|
+
revision: document.querySelector("[data-proof-revision]"),
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
let todos = [];
|
|
18
|
+
|
|
19
|
+
function serviceActions() {
|
|
20
|
+
const bridge = window.nextclaw?.serviceActions;
|
|
21
|
+
if (!bridge) throw new Error("应用还没有连接到 NextClaw,请刷新后重试。");
|
|
22
|
+
return bridge;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function invoke(actionId, input = {}) {
|
|
26
|
+
return await serviceActions().invoke(actionId, input);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function setNotice(message, tone = "") {
|
|
30
|
+
elements.notice.textContent = message;
|
|
31
|
+
elements.notice.dataset.tone = tone;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function setBusy(busy) {
|
|
35
|
+
for (const control of document.querySelectorAll("button, input")) control.disabled = busy;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function createTodoRow(todo) {
|
|
39
|
+
const row = document.createElement("article");
|
|
40
|
+
row.className = `todo-item${todo.status === "done" ? " is-done" : ""}`;
|
|
41
|
+
|
|
42
|
+
const toggle = document.createElement("button");
|
|
43
|
+
toggle.type = "button";
|
|
44
|
+
toggle.className = "check-button";
|
|
45
|
+
toggle.dataset.todoToggle = todo.id;
|
|
46
|
+
toggle.setAttribute("aria-label", todo.status === "done" ? "恢复任务" : "完成任务");
|
|
47
|
+
toggle.textContent = todo.status === "done" ? "✓" : "";
|
|
48
|
+
|
|
49
|
+
const title = document.createElement("p");
|
|
50
|
+
title.textContent = todo.title;
|
|
51
|
+
|
|
52
|
+
const remove = document.createElement("button");
|
|
53
|
+
remove.type = "button";
|
|
54
|
+
remove.className = "remove-button";
|
|
55
|
+
remove.dataset.todoRemove = todo.id;
|
|
56
|
+
remove.setAttribute("aria-label", `删除 ${todo.title}`);
|
|
57
|
+
remove.textContent = "删除";
|
|
58
|
+
|
|
59
|
+
row.append(toggle, title, remove);
|
|
60
|
+
return row;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function render() {
|
|
64
|
+
const ordered = [...todos].sort((left, right) =>
|
|
65
|
+
Number(left.status === "done") - Number(right.status === "done") ||
|
|
66
|
+
right.version - left.version
|
|
67
|
+
);
|
|
68
|
+
elements.list.replaceChildren();
|
|
69
|
+
if (ordered.length === 0) {
|
|
70
|
+
const empty = document.createElement("div");
|
|
71
|
+
empty.className = "empty";
|
|
72
|
+
empty.innerHTML = "<strong>今天还没有任务</strong><span>从上面添加第一件要做的事吧。</span>";
|
|
73
|
+
elements.list.append(empty);
|
|
74
|
+
} else {
|
|
75
|
+
for (const todo of ordered) elements.list.append(createTodoRow(todo));
|
|
76
|
+
}
|
|
77
|
+
elements.openCount.textContent = String(todos.filter((todo) => todo.status !== "done").length);
|
|
78
|
+
elements.doneCount.textContent = String(todos.filter((todo) => todo.status === "done").length);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function refresh() {
|
|
82
|
+
const data = await invoke(actionIds.list);
|
|
83
|
+
todos = (Array.isArray(data.records) ? data.records : [])
|
|
84
|
+
.filter((record) => Array.isArray(record.tags) && record.tags.includes("todo"));
|
|
85
|
+
elements.revision.textContent = `revision ${data.revision} · ${data.contentHash}`;
|
|
86
|
+
render();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async function run(operation, successMessage) {
|
|
90
|
+
setBusy(true);
|
|
91
|
+
setNotice("正在保存…");
|
|
92
|
+
try {
|
|
93
|
+
await operation();
|
|
94
|
+
await refresh();
|
|
95
|
+
setNotice(successMessage, "success");
|
|
96
|
+
} catch (error) {
|
|
97
|
+
setNotice(error instanceof Error ? error.message : String(error), "error");
|
|
98
|
+
} finally {
|
|
99
|
+
setBusy(false);
|
|
100
|
+
elements.input.focus();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
elements.form.addEventListener("submit", (event) => {
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
const title = elements.input.value.trim();
|
|
107
|
+
if (!title) return;
|
|
108
|
+
void run(async () => {
|
|
109
|
+
await invoke(actionIds.upsert, {
|
|
110
|
+
id: `todo-${Date.now().toString(36)}`,
|
|
111
|
+
title,
|
|
112
|
+
status: "open",
|
|
113
|
+
tags: ["todo", "daily"],
|
|
114
|
+
});
|
|
115
|
+
elements.input.value = "";
|
|
116
|
+
}, "已加入今天的清单");
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
elements.list.addEventListener("click", (event) => {
|
|
120
|
+
const target = event.target instanceof Element ? event.target : null;
|
|
121
|
+
const toggleId = target?.closest("[data-todo-toggle]")?.dataset.todoToggle;
|
|
122
|
+
const removeId = target?.closest("[data-todo-remove]")?.dataset.todoRemove;
|
|
123
|
+
if (toggleId) {
|
|
124
|
+
const todo = todos.find((entry) => entry.id === toggleId);
|
|
125
|
+
if (!todo) return;
|
|
126
|
+
void run(() => invoke(actionIds.upsert, {
|
|
127
|
+
id: todo.id,
|
|
128
|
+
title: todo.title,
|
|
129
|
+
status: todo.status === "done" ? "open" : "done",
|
|
130
|
+
tags: todo.tags,
|
|
131
|
+
}), todo.status === "done" ? "任务已恢复" : "做得好,完成一件");
|
|
132
|
+
}
|
|
133
|
+
if (removeId) void run(() => invoke(actionIds.remove, { id: removeId }), "任务已删除");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
document.querySelector("[data-refresh]").addEventListener("click", () => {
|
|
137
|
+
void run(async () => undefined, "清单已刷新");
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const now = new Date();
|
|
141
|
+
document.querySelector("[data-date-day]").textContent = String(now.getDate()).padStart(2, "0");
|
|
142
|
+
document.querySelector("[data-date-label]").textContent = now.toLocaleDateString("zh-CN", { month: "long", weekday: "short" });
|
|
143
|
+
void refresh().catch((error) => setNotice(error instanceof Error ? error.message : String(error), "error"));
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: light;
|
|
3
|
+
font-family: Inter, "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
4
|
+
color: #24352d;
|
|
5
|
+
background: #edf3ed;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
* { box-sizing: border-box; }
|
|
9
|
+
body { margin: 0; min-width: 320px; background: radial-gradient(circle at top left, #fff 0, #f6f8f3 36%, #e7efe8 100%); }
|
|
10
|
+
button, input { font: inherit; }
|
|
11
|
+
button { cursor: pointer; }
|
|
12
|
+
button:disabled, input:disabled { cursor: wait; opacity: .6; }
|
|
13
|
+
.app-shell { width: min(760px, calc(100% - 32px)); margin: 0 auto; padding: 36px 0 48px; }
|
|
14
|
+
.hero { display: flex; align-items: center; justify-content: space-between; gap: 24px; margin-bottom: 24px; }
|
|
15
|
+
.eyebrow { margin: 0 0 8px; color: #538164; font-size: 12px; font-weight: 800; letter-spacing: .18em; }
|
|
16
|
+
h1 { margin: 0; font-family: Georgia, "Noto Serif SC", serif; font-size: clamp(36px, 7vw, 56px); letter-spacing: -.04em; }
|
|
17
|
+
.hero p:last-child { margin: 8px 0 0; color: #6b7a70; }
|
|
18
|
+
.date-card { flex: 0 0 auto; width: 90px; padding: 16px 10px; border: 1px solid #d4dfd6; border-radius: 22px; background: rgba(255,255,255,.75); text-align: center; box-shadow: 0 12px 28px rgba(56,83,66,.08); }
|
|
19
|
+
.date-card strong { display: block; font-size: 32px; line-height: 1; }
|
|
20
|
+
.date-card span { display: block; margin-top: 7px; color: #738078; font-size: 12px; }
|
|
21
|
+
.composer { display: flex; gap: 10px; padding: 9px; border: 1px solid #dbe4dc; border-radius: 18px; background: #fff; box-shadow: 0 18px 50px rgba(64,90,72,.1); }
|
|
22
|
+
.composer input { min-width: 0; flex: 1; border: 0; outline: 0; padding: 12px 14px; color: #263a2e; background: transparent; }
|
|
23
|
+
.composer button, .actions button { border: 0; border-radius: 12px; padding: 12px 22px; color: #fff; background: #347052; font-weight: 700; }
|
|
24
|
+
.summary { display: flex; align-items: center; gap: 18px; padding: 18px 4px 10px; color: #68776d; font-size: 14px; }
|
|
25
|
+
.summary strong { color: #2d5d44; }
|
|
26
|
+
.text-button { margin-left: auto; border: 0; color: #4d725b; background: transparent; }
|
|
27
|
+
.todo-list { display: grid; gap: 10px; margin-top: 8px; }
|
|
28
|
+
.todo-item { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 14px; padding: 16px 18px; border: 1px solid #dae4db; border-radius: 16px; background: rgba(255,255,255,.88); transition: transform .16s ease, opacity .16s ease; }
|
|
29
|
+
.todo-item:hover { transform: translateY(-1px); }
|
|
30
|
+
.todo-item p { margin: 0; line-height: 1.55; }
|
|
31
|
+
.todo-item.is-done { opacity: .62; }
|
|
32
|
+
.todo-item.is-done p { text-decoration: line-through; }
|
|
33
|
+
.check-button { width: 24px; height: 24px; padding: 0; border: 2px solid #76a083; border-radius: 50%; color: #fff; background: transparent; font-size: 13px; }
|
|
34
|
+
.is-done .check-button { background: #4d8663; }
|
|
35
|
+
.remove-button { border: 0; color: #9a695f; background: transparent; font-size: 13px; opacity: .7; }
|
|
36
|
+
.empty { display: flex; min-height: 180px; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border: 1px dashed #cbd8cd; border-radius: 18px; color: #7d8b81; text-align: center; }
|
|
37
|
+
.empty strong { color: #4e6254; font-size: 18px; }
|
|
38
|
+
.notice { min-height: 22px; margin: 14px 4px; color: #6e7d72; font-size: 14px; }
|
|
39
|
+
.notice[data-tone="success"] { color: #347052; }
|
|
40
|
+
.notice[data-tone="error"] { color: #b14e43; }
|
|
41
|
+
.behind-scenes { margin-top: 28px; padding: 16px 18px; border: 1px solid #dce4dc; border-radius: 16px; color: #66746a; background: rgba(255,255,255,.55); font-size: 13px; }
|
|
42
|
+
.behind-scenes summary { color: #46594b; cursor: pointer; font-weight: 700; }
|
|
43
|
+
.behind-scenes p { line-height: 1.65; }
|
|
44
|
+
.behind-scenes dl { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin: 12px 0 0; }
|
|
45
|
+
.behind-scenes dl div { padding: 10px; border-radius: 10px; background: #fff; }
|
|
46
|
+
.behind-scenes dt { color: #879188; font-size: 11px; }
|
|
47
|
+
.behind-scenes dd { margin: 3px 0 0; color: #3e5143; overflow-wrap: anywhere; }
|
|
48
|
+
@media (max-width: 560px) { .app-shell { width: min(100% - 22px, 760px); padding-top: 24px; } .hero { align-items: flex-end; } .date-card { width: 76px; } .composer button { padding-inline: 16px; } .summary { gap: 10px; } .behind-scenes dl { grid-template-columns: 1fr; } }
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>今日清单</title>
|
|
7
|
+
<link rel="stylesheet" href="assets/style.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<main class="app-shell">
|
|
11
|
+
<header class="hero">
|
|
12
|
+
<div>
|
|
13
|
+
<p class="eyebrow">TODAY</p>
|
|
14
|
+
<h1>今日清单</h1>
|
|
15
|
+
<p>把脑子里的事情放下来,一件一件完成。</p>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="date-card"><strong data-date-day>—</strong><span data-date-label>—</span></div>
|
|
18
|
+
</header>
|
|
19
|
+
|
|
20
|
+
<form class="composer" data-todo-form>
|
|
21
|
+
<input data-todo-input maxlength="160" placeholder="今天还要做什么?" autocomplete="off" />
|
|
22
|
+
<button type="submit">添加</button>
|
|
23
|
+
</form>
|
|
24
|
+
|
|
25
|
+
<section class="summary" aria-label="任务概况">
|
|
26
|
+
<span><strong data-open-count>0</strong> 件待完成</span>
|
|
27
|
+
<span><strong data-done-count>0</strong> 件已完成</span>
|
|
28
|
+
<button type="button" class="text-button" data-refresh>刷新</button>
|
|
29
|
+
</section>
|
|
30
|
+
|
|
31
|
+
<section class="todo-list" data-todo-list aria-live="polite">
|
|
32
|
+
<div class="empty">正在读取你的清单…</div>
|
|
33
|
+
</section>
|
|
34
|
+
|
|
35
|
+
<p class="notice" data-notice></p>
|
|
36
|
+
|
|
37
|
+
<details class="behind-scenes">
|
|
38
|
+
<summary>这个小应用背后发生了什么?</summary>
|
|
39
|
+
<p>每次添加、完成和删除都会调用同一组 Rust/WASM Service Action,并写入 NextClaw 管理的持久数据。关掉再打开,清单仍然存在;授权后的 Agent 也可以操作同一份数据。</p>
|
|
40
|
+
<dl><div><dt>数据</dt><dd data-proof-revision>等待读取</dd></div><div><dt>存储</dt><dd>NextClaw Host KV</dd></div></dl>
|
|
41
|
+
</details>
|
|
42
|
+
</main>
|
|
43
|
+
<script src="assets/app.js"></script>
|
|
44
|
+
</body>
|
|
45
|
+
</html>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-todos",
|
|
3
|
+
"title": "今日清单",
|
|
4
|
+
"description": "记下今天要做的事,完成后轻轻划掉。",
|
|
5
|
+
"entry": "index.html",
|
|
6
|
+
"actions": [
|
|
7
|
+
"nextclaw-portable-runtime-lab-state.records_list",
|
|
8
|
+
"nextclaw-portable-runtime-lab-state.record_upsert",
|
|
9
|
+
"nextclaw-portable-runtime-lab-state.record_delete",
|
|
10
|
+
"nextclaw-portable-runtime-lab-state.data_snapshot"
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-capabilities",
|
|
3
|
+
"title": "Portable Capability Component",
|
|
4
|
+
"description": "Rust/WASM 网络、拒绝、错误与超时演示模块。",
|
|
5
|
+
"protocol": "wasi-component",
|
|
6
|
+
"component": {
|
|
7
|
+
"entry": "service.wasm"
|
|
8
|
+
},
|
|
9
|
+
"actions": {
|
|
10
|
+
"network_allowed": { "risk": "external", "title": "访问允许的网络" },
|
|
11
|
+
"network_denied": { "risk": "read", "title": "验证网络拒绝" },
|
|
12
|
+
"structured_failure": { "risk": "dangerous", "title": "触发结构化失败" },
|
|
13
|
+
"simulate_timeout": {
|
|
14
|
+
"risk": "dangerous",
|
|
15
|
+
"title": "触发执行超时",
|
|
16
|
+
"timeoutMs": 1200
|
|
17
|
+
},
|
|
18
|
+
"runtime_info": { "risk": "read", "title": "查看共享宿主" }
|
|
19
|
+
}
|
|
20
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-composition",
|
|
3
|
+
"title": "Portable Composition Consumer",
|
|
4
|
+
"description": "通过宿主受控 component-call 调用 manifest 声明的 Provider。",
|
|
5
|
+
"protocol": "wasi-component",
|
|
6
|
+
"component": {
|
|
7
|
+
"entry": "service.wasm"
|
|
8
|
+
},
|
|
9
|
+
"providers": [
|
|
10
|
+
"nextclaw-portable-runtime-lab-provider"
|
|
11
|
+
],
|
|
12
|
+
"actions": {
|
|
13
|
+
"compose_contact": {
|
|
14
|
+
"risk": "write",
|
|
15
|
+
"title": "组合联系人工作流",
|
|
16
|
+
"inputSchema": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"properties": {
|
|
19
|
+
"name": { "type": "string", "minLength": 1 },
|
|
20
|
+
"email": { "type": "string", "minLength": 3 },
|
|
21
|
+
"tags": { "type": "array", "items": { "type": "string" } }
|
|
22
|
+
},
|
|
23
|
+
"required": ["name", "email"],
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"provider_denied": { "risk": "read", "title": "验证 Provider 拒绝" },
|
|
28
|
+
"runtime_info": { "risk": "read", "title": "查看 Consumer 宿主" }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-provider",
|
|
3
|
+
"title": "Portable Contact Provider",
|
|
4
|
+
"description": "以独立 Rust/WASM 实例提供可复用联系人规范化合同。",
|
|
5
|
+
"protocol": "wasi-component",
|
|
6
|
+
"component": {
|
|
7
|
+
"entry": "service.wasm"
|
|
8
|
+
},
|
|
9
|
+
"lifecycle": {
|
|
10
|
+
"mode": "provider"
|
|
11
|
+
},
|
|
12
|
+
"actions": {
|
|
13
|
+
"contact_normalize": {
|
|
14
|
+
"risk": "write",
|
|
15
|
+
"title": "规范化联系人",
|
|
16
|
+
"inputSchema": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"properties": {
|
|
19
|
+
"name": { "type": "string", "minLength": 1 },
|
|
20
|
+
"email": { "type": "string", "minLength": 3 },
|
|
21
|
+
"tags": { "type": "array", "items": { "type": "string" } }
|
|
22
|
+
},
|
|
23
|
+
"required": ["name", "email"],
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"provider_status": { "risk": "read", "title": "读取 Provider 状态" },
|
|
28
|
+
"runtime_info": { "risk": "read", "title": "查看 Provider 宿主" }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-resident",
|
|
3
|
+
"title": "Portable Resident Component",
|
|
4
|
+
"description": "宿主持有同一个 Rust/WASM 实例,并在 Panel 关闭后继续投递定时事件。",
|
|
5
|
+
"protocol": "wasi-component",
|
|
6
|
+
"component": {
|
|
7
|
+
"entry": "service.wasm"
|
|
8
|
+
},
|
|
9
|
+
"lifecycle": {
|
|
10
|
+
"mode": "resident",
|
|
11
|
+
"eventIntervalMs": 1000
|
|
12
|
+
},
|
|
13
|
+
"actions": {
|
|
14
|
+
"resident_status": { "risk": "read", "title": "读取 Resident 状态" },
|
|
15
|
+
"resident_emit_event": {
|
|
16
|
+
"risk": "write",
|
|
17
|
+
"title": "向 Resident 投递事件",
|
|
18
|
+
"inputSchema": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"eventId": { "type": "string" },
|
|
22
|
+
"kind": { "type": "string" },
|
|
23
|
+
"triggeredAt": { "type": "string" }
|
|
24
|
+
},
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"resident_reset": { "risk": "write", "title": "重置 Resident 证据" },
|
|
29
|
+
"runtime_info": { "risk": "read", "title": "查看 Resident 宿主" }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nextclaw-portable-runtime-lab-state",
|
|
3
|
+
"title": "Portable State Component",
|
|
4
|
+
"description": "Rust/WASM 状态与共享宿主演示模块。",
|
|
5
|
+
"protocol": "wasi-component",
|
|
6
|
+
"component": {
|
|
7
|
+
"entry": "service.wasm"
|
|
8
|
+
},
|
|
9
|
+
"actions": {
|
|
10
|
+
"counter_read": { "risk": "read", "title": "读取持久计数" },
|
|
11
|
+
"counter_increment": {
|
|
12
|
+
"risk": "write",
|
|
13
|
+
"title": "增加持久计数",
|
|
14
|
+
"inputSchema": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": { "step": { "type": "integer" } }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"records_seed": { "risk": "write", "title": "生成验证数据" },
|
|
20
|
+
"records_list": { "risk": "read", "title": "列出验证数据" },
|
|
21
|
+
"record_upsert": {
|
|
22
|
+
"risk": "write",
|
|
23
|
+
"title": "创建或修改记录",
|
|
24
|
+
"inputSchema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"id": { "type": "string", "minLength": 1, "maxLength": 48 },
|
|
28
|
+
"title": { "type": "string", "minLength": 1 },
|
|
29
|
+
"status": { "type": "string" },
|
|
30
|
+
"tags": { "type": "array", "items": { "type": "string" } }
|
|
31
|
+
},
|
|
32
|
+
"required": ["id", "title"],
|
|
33
|
+
"additionalProperties": false
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"record_delete": {
|
|
37
|
+
"risk": "write",
|
|
38
|
+
"title": "删除记录",
|
|
39
|
+
"inputSchema": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": { "id": { "type": "string", "minLength": 1, "maxLength": 48 } },
|
|
42
|
+
"required": ["id"],
|
|
43
|
+
"additionalProperties": false
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"data_snapshot": { "risk": "read", "title": "读取数据快照" },
|
|
47
|
+
"runtime_info": { "risk": "read", "title": "查看共享宿主" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|