scrum-skills 0.3.2 → 0.3.4
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/.agents/skills/diagram-design/LICENSE +4 -0
- package/.agents/skills/diagram-design/SKILL.md +423 -0
- package/.agents/skills/diagram-design/UPSTREAM.json +88 -0
- package/.agents/skills/diagram-design/UPSTREAM.md +23 -0
- package/.agents/skills/diagram-design/assets/example-architecture-containment.html +205 -0
- package/.agents/skills/diagram-design/assets/example-architecture-delta.html +193 -0
- package/.agents/skills/diagram-design/assets/example-architecture.html +183 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-campus.html +108 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-coffee-shop.html +121 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-warehouse.html +127 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan.html +114 -0
- package/.agents/skills/diagram-design/assets/example-bar.html +129 -0
- package/.agents/skills/diagram-design/assets/example-beeswarm.html +384 -0
- package/.agents/skills/diagram-design/assets/example-box-plot.html +127 -0
- package/.agents/skills/diagram-design/assets/example-bubble.html +147 -0
- package/.agents/skills/diagram-design/assets/example-bump.html +142 -0
- package/.agents/skills/diagram-design/assets/example-data-flow.html +143 -0
- package/.agents/skills/diagram-design/assets/example-datalake.html +269 -0
- package/.agents/skills/diagram-design/assets/example-db-schema.html +302 -0
- package/.agents/skills/diagram-design/assets/example-dependency.html +224 -0
- package/.agents/skills/diagram-design/assets/example-deployment.html +190 -0
- package/.agents/skills/diagram-design/assets/example-dp-integration.html +81 -0
- package/.agents/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
- package/.agents/skills/diagram-design/assets/example-er.html +202 -0
- package/.agents/skills/diagram-design/assets/example-exploded-ai-stack.html +85 -0
- package/.agents/skills/diagram-design/assets/example-exploded-keyboard.html +84 -0
- package/.agents/skills/diagram-design/assets/example-exploded-phone.html +83 -0
- package/.agents/skills/diagram-design/assets/example-exploded-unboxing.html +84 -0
- package/.agents/skills/diagram-design/assets/example-exploded.html +83 -0
- package/.agents/skills/diagram-design/assets/example-fishbone.html +152 -0
- package/.agents/skills/diagram-design/assets/example-flowchart.html +163 -0
- package/.agents/skills/diagram-design/assets/example-gantt.html +137 -0
- package/.agents/skills/diagram-design/assets/example-heatmap.html +224 -0
- package/.agents/skills/diagram-design/assets/example-high-level-vertical.html +325 -0
- package/.agents/skills/diagram-design/assets/example-high-level.html +301 -0
- package/.agents/skills/diagram-design/assets/example-import-drawio.html +185 -0
- package/.agents/skills/diagram-design/assets/example-import-excalidraw.html +70 -0
- package/.agents/skills/diagram-design/assets/example-import-mermaid.html +70 -0
- package/.agents/skills/diagram-design/assets/example-it-state.html +128 -0
- package/.agents/skills/diagram-design/assets/example-journey.html +148 -0
- package/.agents/skills/diagram-design/assets/example-kanban.html +174 -0
- package/.agents/skills/diagram-design/assets/example-layers.html +123 -0
- package/.agents/skills/diagram-design/assets/example-line.html +111 -0
- package/.agents/skills/diagram-design/assets/example-loop.html +100 -0
- package/.agents/skills/diagram-design/assets/example-marimekko.html +148 -0
- package/.agents/skills/diagram-design/assets/example-medallion.html +159 -0
- package/.agents/skills/diagram-design/assets/example-nested.html +136 -0
- package/.agents/skills/diagram-design/assets/example-org-chart.html +45 -0
- package/.agents/skills/diagram-design/assets/example-polar.html +116 -0
- package/.agents/skills/diagram-design/assets/example-process.html +64 -0
- package/.agents/skills/diagram-design/assets/example-pyramid.html +119 -0
- package/.agents/skills/diagram-design/assets/example-quadrant-consultant.html +166 -0
- package/.agents/skills/diagram-design/assets/example-quadrant.html +135 -0
- package/.agents/skills/diagram-design/assets/example-radar.html +139 -0
- package/.agents/skills/diagram-design/assets/example-ridgeline.html +104 -0
- package/.agents/skills/diagram-design/assets/example-sankey.html +150 -0
- package/.agents/skills/diagram-design/assets/example-scatter.html +141 -0
- package/.agents/skills/diagram-design/assets/example-sequence-oauth.html +227 -0
- package/.agents/skills/diagram-design/assets/example-sequence.html +222 -0
- package/.agents/skills/diagram-design/assets/example-service-blueprint.html +185 -0
- package/.agents/skills/diagram-design/assets/example-slopegraph.html +119 -0
- package/.agents/skills/diagram-design/assets/example-state-lifecycle.html +92 -0
- package/.agents/skills/diagram-design/assets/example-state.html +147 -0
- package/.agents/skills/diagram-design/assets/example-story-map.html +184 -0
- package/.agents/skills/diagram-design/assets/example-streamgraph.html +99 -0
- package/.agents/skills/diagram-design/assets/example-swimlane.html +172 -0
- package/.agents/skills/diagram-design/assets/example-timeline.html +135 -0
- package/.agents/skills/diagram-design/assets/example-tree-block-decomposition.html +151 -0
- package/.agents/skills/diagram-design/assets/example-tree.html +173 -0
- package/.agents/skills/diagram-design/assets/example-treemap.html +107 -0
- package/.agents/skills/diagram-design/assets/example-uml-class.html +188 -0
- package/.agents/skills/diagram-design/assets/example-venn.html +110 -0
- package/.agents/skills/diagram-design/assets/example-wardley.html +153 -0
- package/.agents/skills/diagram-design/assets/example-waterfall.html +129 -0
- package/.agents/skills/diagram-design/assets/template-dark.html +99 -0
- package/.agents/skills/diagram-design/assets/template-full.html +421 -0
- package/.agents/skills/diagram-design/assets/template-motion.html +448 -0
- package/.agents/skills/diagram-design/assets/template-terminal.html +188 -0
- package/.agents/skills/diagram-design/assets/template.html +100 -0
- package/.agents/skills/diagram-design/references/animation.md +143 -0
- package/.agents/skills/diagram-design/references/export-registry.md +78 -0
- package/.agents/skills/diagram-design/references/export.md +376 -0
- package/.agents/skills/diagram-design/references/import-drawio.md +181 -0
- package/.agents/skills/diagram-design/references/import-excalidraw.md +130 -0
- package/.agents/skills/diagram-design/references/import-mermaid.md +137 -0
- package/.agents/skills/diagram-design/references/layout-budget.md +97 -0
- package/.agents/skills/diagram-design/references/onboarding.md +368 -0
- package/.agents/skills/diagram-design/references/output-spec.md +277 -0
- package/.agents/skills/diagram-design/references/primitive-annotation.md +36 -0
- package/.agents/skills/diagram-design/references/primitive-icons.md +827 -0
- package/.agents/skills/diagram-design/references/primitive-sketchy.md +43 -0
- package/.agents/skills/diagram-design/references/primitive-terminal.md +76 -0
- package/.agents/skills/diagram-design/references/primitives-core.md +150 -0
- package/.agents/skills/diagram-design/references/profiles.md +183 -0
- package/.agents/skills/diagram-design/references/semantic-patterns.md +154 -0
- package/.agents/skills/diagram-design/references/style-guide.md +236 -0
- package/.agents/skills/diagram-design/references/style-vivid.md +148 -0
- package/.agents/skills/diagram-design/references/type-architecture-delta.md +143 -0
- package/.agents/skills/diagram-design/references/type-architecture.md +117 -0
- package/.agents/skills/diagram-design/references/type-axonometric-plan.md +83 -0
- package/.agents/skills/diagram-design/references/type-bar.md +108 -0
- package/.agents/skills/diagram-design/references/type-data-flow.md +371 -0
- package/.agents/skills/diagram-design/references/type-db-schema.md +48 -0
- package/.agents/skills/diagram-design/references/type-dependency.md +44 -0
- package/.agents/skills/diagram-design/references/type-deployment.md +45 -0
- package/.agents/skills/diagram-design/references/type-dp-integration.md +407 -0
- package/.agents/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
- package/.agents/skills/diagram-design/references/type-er.md +25 -0
- package/.agents/skills/diagram-design/references/type-exploded.md +115 -0
- package/.agents/skills/diagram-design/references/type-fishbone.md +75 -0
- package/.agents/skills/diagram-design/references/type-flowchart.md +23 -0
- package/.agents/skills/diagram-design/references/type-gantt.md +45 -0
- package/.agents/skills/diagram-design/references/type-heatmap.md +80 -0
- package/.agents/skills/diagram-design/references/type-high-level.md +470 -0
- package/.agents/skills/diagram-design/references/type-it-state.md +468 -0
- package/.agents/skills/diagram-design/references/type-journey.md +55 -0
- package/.agents/skills/diagram-design/references/type-kanban.md +49 -0
- package/.agents/skills/diagram-design/references/type-layers.md +26 -0
- package/.agents/skills/diagram-design/references/type-line.md +337 -0
- package/.agents/skills/diagram-design/references/type-loop.md +223 -0
- package/.agents/skills/diagram-design/references/type-medallion.md +356 -0
- package/.agents/skills/diagram-design/references/type-nested.md +22 -0
- package/.agents/skills/diagram-design/references/type-org-chart.md +44 -0
- package/.agents/skills/diagram-design/references/type-polar.md +136 -0
- package/.agents/skills/diagram-design/references/type-process.md +490 -0
- package/.agents/skills/diagram-design/references/type-pyramid.md +33 -0
- package/.agents/skills/diagram-design/references/type-quadrant.md +81 -0
- package/.agents/skills/diagram-design/references/type-radar.md +82 -0
- package/.agents/skills/diagram-design/references/type-sankey.md +75 -0
- package/.agents/skills/diagram-design/references/type-scatter.md +276 -0
- package/.agents/skills/diagram-design/references/type-sequence.md +130 -0
- package/.agents/skills/diagram-design/references/type-service-blueprint.md +103 -0
- package/.agents/skills/diagram-design/references/type-state.md +30 -0
- package/.agents/skills/diagram-design/references/type-story-map.md +46 -0
- package/.agents/skills/diagram-design/references/type-swimlane.md +22 -0
- package/.agents/skills/diagram-design/references/type-timeline.md +20 -0
- package/.agents/skills/diagram-design/references/type-tree.md +24 -0
- package/.agents/skills/diagram-design/references/type-treemap.md +137 -0
- package/.agents/skills/diagram-design/references/type-uml-class.md +65 -0
- package/.agents/skills/diagram-design/references/type-venn.md +26 -0
- package/.agents/skills/diagram-design/references/type-wardley.md +39 -0
- package/.agents/skills/diagram-design/references/type-waterfall.md +75 -0
- package/.agents/skills/scrum-meta/SKILL.md +36 -36
- package/.agents/skills/scrum-planning/SKILL.md +61 -61
- package/.agents/skills/scrum-planning/references/schema.md +384 -336
- package/.agents/skills/scrum-report/SKILL.md +42 -42
- package/.agents/skills/scrum-sprint/SKILL.md +49 -49
- package/.agents/skills/scrum-tdd/SKILL.md +140 -127
- package/README.md +24 -1
- package/assets/board/200.html +1 -1
- package/assets/board/404.html +1 -1
- package/assets/board/_nuxt/4gQF_HS3.js +1 -0
- package/assets/board/_nuxt/5okfNy5D.js +1 -0
- package/assets/board/_nuxt/{Bb3Limos.js → B0C2jsdk.js} +1 -1
- package/assets/board/_nuxt/B1j6UC4U.js +1 -0
- package/assets/board/_nuxt/B3LKy6o2.js +1 -0
- package/assets/board/_nuxt/BAQQngAq.js +13 -0
- package/assets/board/_nuxt/BE6t7Q2m.js +1 -0
- package/assets/board/_nuxt/BGwhkDRl.js +1 -0
- package/assets/board/_nuxt/BLvbupFS.js +1 -0
- package/assets/board/_nuxt/BQgzP7ur.js +1 -0
- package/assets/board/_nuxt/BRZIF_wo.js +1 -0
- package/assets/board/_nuxt/BU8vdZUs.js +95 -0
- package/assets/board/_nuxt/BW3xJdEx.js +1 -0
- package/assets/board/_nuxt/{Cm9lkUvP.js → BY36DFyj.js} +1 -1
- package/assets/board/_nuxt/BZlZD94i.js +1 -0
- package/assets/board/_nuxt/BZvXNwev.js +3 -0
- package/assets/board/_nuxt/BiWrMOsL.js +1 -0
- package/assets/board/_nuxt/BkoKCNUY.js +1 -0
- package/assets/board/_nuxt/BlKmZhhF.js +1 -0
- package/assets/board/_nuxt/BmBpmU73.js +1 -0
- package/assets/board/_nuxt/BmrSh0rL.js +1 -0
- package/assets/board/_nuxt/BrWE0up6.js +1 -0
- package/assets/board/_nuxt/Bs52qkgk.js +1 -0
- package/assets/board/_nuxt/BuBzMkFZ.js +1 -0
- package/assets/board/_nuxt/Bubk0xn-.js +1 -0
- package/assets/board/_nuxt/BxuBMtk_.js +3 -0
- package/assets/board/_nuxt/By1KXXLR.js +1 -0
- package/assets/board/_nuxt/BygIGL69.js +2 -0
- package/assets/board/_nuxt/C-fx-vFO.js +1 -0
- package/assets/board/_nuxt/C1iO5KH3.js +1 -0
- package/assets/board/_nuxt/C2YPmTzt.js +1 -0
- package/assets/board/_nuxt/C3SpAhCW.js +1 -0
- package/assets/board/_nuxt/C3ZRWz5L.js +1 -0
- package/assets/board/_nuxt/C4WdPP6K.js +1 -0
- package/assets/board/_nuxt/C6o03JHe.js +1 -0
- package/assets/board/_nuxt/C8qB5llI.js +1 -0
- package/assets/board/_nuxt/C9MgRdhu.js +1 -0
- package/assets/board/_nuxt/CCA81-4P.js +1 -0
- package/assets/board/_nuxt/{D2O8Q8x9.js → CFCM18fF.js} +1 -1
- package/assets/board/_nuxt/CGXljzd_.js +1 -0
- package/assets/board/_nuxt/CI0scS-N.js +1 -0
- package/assets/board/_nuxt/CJs9B42o.js +1 -0
- package/assets/board/_nuxt/COmtTtfB.js +1 -0
- package/assets/board/_nuxt/CPYm4J_K.js +1 -0
- package/assets/board/_nuxt/CXG7GZes.js +1 -0
- package/assets/board/_nuxt/CYGiZn-X.js +1 -0
- package/assets/board/_nuxt/CaE8VlUp.js +1 -0
- package/assets/board/_nuxt/Cajxc4Dw.js +1 -0
- package/assets/board/_nuxt/CcGiNUgA.js +1 -0
- package/assets/board/_nuxt/Ccgv3lDj.js +1 -0
- package/assets/board/_nuxt/CdPGFZyy.js +1 -0
- package/assets/board/_nuxt/{DfR3IZN_.js → Cdf_T8Xa.js} +1 -1
- package/assets/board/_nuxt/CgQ30j_6.js +1 -0
- package/assets/board/_nuxt/Ck0-FqVI.js +1 -0
- package/assets/board/_nuxt/CkWKLtjO.js +1 -0
- package/assets/board/_nuxt/CoipdpDu.js +1 -0
- package/assets/board/_nuxt/Cq7hsCKB.js +1 -0
- package/assets/board/_nuxt/D166WVUG.js +1 -0
- package/assets/board/_nuxt/D1V1gysQ.js +1 -0
- package/assets/board/_nuxt/D4Dpzo9e.js +1 -0
- package/assets/board/_nuxt/D5i92OZO.js +1 -0
- package/assets/board/_nuxt/D6dUp4Nm.js +9 -0
- package/assets/board/_nuxt/DFQDFspC.js +1 -0
- package/assets/board/_nuxt/DHX2tw9J.js +1 -0
- package/assets/board/_nuxt/DJM7u8P3.js +1 -0
- package/assets/board/_nuxt/{BPTrRhcw.js → DLr85ebo.js} +1 -1
- package/assets/board/_nuxt/DOMM1wfl.js +1 -0
- package/assets/board/_nuxt/DU6ArlUN.js +1 -0
- package/assets/board/_nuxt/{B_SlFcWp.js → DUgGsde6.js} +1 -1
- package/assets/board/_nuxt/DV4ti-Pq.js +1 -0
- package/assets/board/_nuxt/D_ct-Stz.js +2 -0
- package/assets/board/_nuxt/DbWAComO.js +1 -0
- package/assets/board/_nuxt/DbwlcHAt.js +1 -0
- package/assets/board/_nuxt/Dki9VkAL.js +3 -0
- package/assets/board/_nuxt/DlNJhOoc.js +1 -0
- package/assets/board/_nuxt/Dmg78zOY.js +3 -0
- package/assets/board/_nuxt/DqG7CtD4.js +1 -0
- package/assets/board/_nuxt/DqUSsCJ2.js +1 -0
- package/assets/board/_nuxt/Du2F4WXh.js +1 -0
- package/assets/board/_nuxt/DuRiEXn4.js +1 -0
- package/assets/board/_nuxt/DwCE3305.js +1 -0
- package/assets/board/_nuxt/DwzGxoX2.js +1 -0
- package/assets/board/_nuxt/DxBwVNyP.js +2 -0
- package/assets/board/_nuxt/DzmVW5-D.js +1 -0
- package/assets/board/_nuxt/I-sGtDIB.js +6 -0
- package/assets/board/_nuxt/JU9-x68N.js +1 -0
- package/assets/board/_nuxt/Lozm7hhE.js +1 -0
- package/assets/board/_nuxt/MMsTMkcB.js +1 -0
- package/assets/board/_nuxt/MS7CGmCB.js +1 -0
- package/assets/board/_nuxt/OKKaKILz.js +1 -0
- package/assets/board/_nuxt/{Csqgy925.js → P6qlvBHA.js} +1 -1
- package/assets/board/_nuxt/SrNUvNwO.js +1 -0
- package/assets/board/_nuxt/{DSaWoFHS.js → SywdkA98.js} +1 -1
- package/assets/board/_nuxt/TBIRpVLG.js +1 -0
- package/assets/board/_nuxt/TlTrMIMm.js +1 -0
- package/assets/board/_nuxt/Utb4TVOl.js +1 -0
- package/assets/board/_nuxt/Zv9-SOQF.js +1 -0
- package/assets/board/_nuxt/_id_.B6iqDPxe.css +1 -0
- package/assets/board/_nuxt/b7xtxFRl.js +1 -0
- package/assets/board/_nuxt/builds/latest.json +1 -1
- package/assets/board/_nuxt/builds/meta/08bebe14-0f1b-4d2a-8de4-e84e122d10e9.json +1 -0
- package/assets/board/_nuxt/diagrams.pyhqNtmr.css +1 -0
- package/assets/board/_nuxt/{entry.CKHePurH.css → entry.BBv-sBnP.css} +1 -1
- package/assets/board/_nuxt/error-404.CgJNdpB5.css +1 -0
- package/assets/board/_nuxt/error-500.WYSoH44y.css +1 -0
- package/assets/board/_nuxt/jbri6q1p.js +1 -0
- package/assets/board/_nuxt/q_8bxRMt.js +1 -0
- package/assets/board/burndown/index.html +1 -1
- package/assets/board/diagrams/index.html +1 -0
- package/assets/board/epics/index.html +1 -1
- package/assets/board/gantt/index.html +1 -1
- package/assets/board/index.html +1 -1
- package/assets/board/last-change/index.html +1 -1
- package/assets/board/milestones/index.html +1 -1
- package/assets/board/tests/index.html +1 -1
- package/bin/scrum-skills.mjs +13 -0
- package/package.json +2 -1
- package/templates/AGENTS.md +10 -0
- package/tools/diagram-import.mjs +238 -0
- package/tools/diagram-lint.mjs +518 -0
- package/tools/diagram.mjs +299 -0
- package/tools/last-change.mjs +326 -326
- package/tools/projects.mjs +29 -4
- package/tools/serve.mjs +27 -1
- package/tools/validate.mjs +781 -664
- package/assets/board/_nuxt/1eqboJxR.js +0 -1
- package/assets/board/_nuxt/2K7ag6ES.js +0 -1
- package/assets/board/_nuxt/51OWHj8c.js +0 -2
- package/assets/board/_nuxt/6gFtTBwm.js +0 -1
- package/assets/board/_nuxt/B3jkABw9.js +0 -1
- package/assets/board/_nuxt/B5n2_jZN.js +0 -1
- package/assets/board/_nuxt/BDK2Hj7B.js +0 -1
- package/assets/board/_nuxt/BDcnzXHq.js +0 -1
- package/assets/board/_nuxt/BaG8y0Wt.js +0 -1
- package/assets/board/_nuxt/BbwJq5pb.js +0 -1
- package/assets/board/_nuxt/BgLeKwx0.js +0 -1
- package/assets/board/_nuxt/Bi9Axj3V.js +0 -1
- package/assets/board/_nuxt/BmxvtaMq.js +0 -1
- package/assets/board/_nuxt/BodFvto3.js +0 -1
- package/assets/board/_nuxt/BpWeHLuN.js +0 -1
- package/assets/board/_nuxt/BuOKDFiJ.js +0 -1
- package/assets/board/_nuxt/C40iTe-x.js +0 -1
- package/assets/board/_nuxt/C7K0R7F-.js +0 -2
- package/assets/board/_nuxt/C8vL692X.js +0 -1
- package/assets/board/_nuxt/C9StZL3D.js +0 -3
- package/assets/board/_nuxt/CGI_ZV79.js +0 -1
- package/assets/board/_nuxt/CJ2mz0WY.js +0 -1
- package/assets/board/_nuxt/CJMBJQuf.js +0 -1
- package/assets/board/_nuxt/CK-lOYG9.js +0 -1
- package/assets/board/_nuxt/CK9_veoz.js +0 -1
- package/assets/board/_nuxt/CLBcBrYf.js +0 -1
- package/assets/board/_nuxt/CMUi2-Lj.js +0 -1
- package/assets/board/_nuxt/COf6E6h4.js +0 -1
- package/assets/board/_nuxt/CPCUMJnF.js +0 -1
- package/assets/board/_nuxt/CPcKlmSm.js +0 -1
- package/assets/board/_nuxt/CQTvWh4i.js +0 -1
- package/assets/board/_nuxt/CSEEUF8S.js +0 -1
- package/assets/board/_nuxt/CSSb154I.js +0 -13
- package/assets/board/_nuxt/CgDTd7jS.js +0 -1
- package/assets/board/_nuxt/ChG76uh9.js +0 -1
- package/assets/board/_nuxt/Ci0qbkgh.js +0 -1
- package/assets/board/_nuxt/CqoQ__I_.js +0 -1
- package/assets/board/_nuxt/CuJUHLl8.js +0 -1
- package/assets/board/_nuxt/CvLiA4_O.js +0 -1
- package/assets/board/_nuxt/Cvs12oA0.js +0 -3
- package/assets/board/_nuxt/CyEXFe3V.js +0 -1
- package/assets/board/_nuxt/Cz6rZcLK.js +0 -1
- package/assets/board/_nuxt/D2FhHl1o.js +0 -1
- package/assets/board/_nuxt/D3YCAmfu.js +0 -1
- package/assets/board/_nuxt/D5CE81jK.js +0 -1
- package/assets/board/_nuxt/D75vbfSb.js +0 -1
- package/assets/board/_nuxt/D99LbGfb.js +0 -9
- package/assets/board/_nuxt/DEfLc7p3.js +0 -6
- package/assets/board/_nuxt/DF-nsa1Z.js +0 -1
- package/assets/board/_nuxt/DIc8yx98.js +0 -1
- package/assets/board/_nuxt/DLkAKotw.js +0 -1
- package/assets/board/_nuxt/DRPlYvb3.js +0 -1
- package/assets/board/_nuxt/DRlQgul3.js +0 -1
- package/assets/board/_nuxt/DSLbmoWa.js +0 -1
- package/assets/board/_nuxt/DWO9c9yp.js +0 -1
- package/assets/board/_nuxt/DZo3dYLJ.js +0 -3
- package/assets/board/_nuxt/D_S6N7_b.js +0 -1
- package/assets/board/_nuxt/DajA-Tkt.js +0 -1
- package/assets/board/_nuxt/DbHiyab-.js +0 -1
- package/assets/board/_nuxt/Dc7Ql6eE.js +0 -1
- package/assets/board/_nuxt/Dd9ZukPU.js +0 -1
- package/assets/board/_nuxt/Dg2LiqmN.js +0 -1
- package/assets/board/_nuxt/DhuleNnm.js +0 -1
- package/assets/board/_nuxt/DkI1Qxpp.js +0 -95
- package/assets/board/_nuxt/DnDHGSYI.js +0 -1
- package/assets/board/_nuxt/DpXJ_tCU.js +0 -1
- package/assets/board/_nuxt/DqZgF3hU.js +0 -1
- package/assets/board/_nuxt/DqcxvfbD.js +0 -1
- package/assets/board/_nuxt/DsA2lVci.js +0 -1
- package/assets/board/_nuxt/Dtsa-1NS.js +0 -1
- package/assets/board/_nuxt/Du91iq0p.js +0 -1
- package/assets/board/_nuxt/Dx1wcYFo.js +0 -1
- package/assets/board/_nuxt/EYTShbt4.js +0 -1
- package/assets/board/_nuxt/MaXJprwN.js +0 -1
- package/assets/board/_nuxt/P9x67aq2.js +0 -1
- package/assets/board/_nuxt/S08nFESZ.js +0 -3
- package/assets/board/_nuxt/V0uynWE2.js +0 -1
- package/assets/board/_nuxt/Vo4wMbnS.js +0 -1
- package/assets/board/_nuxt/ZVTqot-_.js +0 -1
- package/assets/board/_nuxt/ZngEd3HB.js +0 -1
- package/assets/board/_nuxt/_id_.B2NDKSlX.css +0 -1
- package/assets/board/_nuxt/assMu_Wn.js +0 -1
- package/assets/board/_nuxt/builds/meta/8e23aec9-5b67-4569-b8bf-d4f07e50ffdf.json +0 -1
- package/assets/board/_nuxt/error-404.BFmXOnCT.css +0 -1
- package/assets/board/_nuxt/error-500.BZ-DdjQ6.css +0 -1
- package/assets/board/_nuxt/rlePnzpc.js +0 -1
- package/assets/board/_nuxt/uKzCKCTq.js +0 -1
- package/assets/board/_nuxt/vwxaNGfc.js +0 -1
- package/assets/board/_nuxt/yh6sf_D5.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-8e352ff6]{display:grid}.mb-2[data-v-8e352ff6]{margin-bottom:.5rem}.mb-4[data-v-8e352ff6]{margin-bottom:1rem}.max-w-520px[data-v-8e352ff6]{max-width:520px}.min-h-screen[data-v-8e352ff6]{min-height:100vh}.w-full[data-v-8e352ff6]{width:100%}.flex[data-v-8e352ff6]{display:flex}.cursor-pointer[data-v-8e352ff6]{cursor:pointer}.appearance-none[data-v-8e352ff6]{appearance:none}.place-content-center[data-v-8e352ff6]{place-content:center}.items-center[data-v-8e352ff6]{align-items:center}.justify-center[data-v-8e352ff6]{justify-content:center}.overflow-hidden[data-v-8e352ff6]{overflow:hidden}.border-0[data-v-8e352ff6]{border-width:0}.bg-transparent[data-v-8e352ff6]{background-color:#0000}.bg-white[data-v-8e352ff6]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.p-0[data-v-8e352ff6]{padding:0}.px-2[data-v-8e352ff6]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-8e352ff6]{text-align:center}.text-\[56px\][data-v-8e352ff6]{font-size:56px}.text-2xl[data-v-8e352ff6]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-8e352ff6]{font-size:.875rem;line-height:1.25rem}.text-neutral-500[data-v-8e352ff6]{--un-text-opacity:1;color:rgb(115 115 115/var(--un-text-opacity))}.text-neutral-950[data-v-8e352ff6]{--un-text-opacity:1;color:rgb(10 10 10/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-8e352ff6]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.text-inherit[data-v-8e352ff6]{color:inherit}.font-medium[data-v-8e352ff6]{font-weight:500}.font-semibold[data-v-8e352ff6]{font-weight:600}.leading-none[data-v-8e352ff6]{line-height:1}.tracking-wide[data-v-8e352ff6]{letter-spacing:.025em}.font-sans[data-v-8e352ff6]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-8e352ff6]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-8e352ff6]{text-decoration-line:underline}.underline-offset-3[data-v-8e352ff6]{text-underline-offset:3px}.antialiased[data-v-8e352ff6]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-neutral-950[data-v-8e352ff6]{--un-bg-opacity:1;background-color:rgb(10 10 10/var(--un-bg-opacity))}.dark\:text-white[data-v-8e352ff6]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[72px\][data-v-8e352ff6]{font-size:72px}.sm\:text-3xl[data-v-8e352ff6]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-07be29b1]{display:grid}.mb-2[data-v-07be29b1]{margin-bottom:.5rem}.mb-4[data-v-07be29b1]{margin-bottom:1rem}.max-w-520px[data-v-07be29b1]{max-width:520px}.min-h-screen[data-v-07be29b1]{min-height:100vh}.place-content-center[data-v-07be29b1]{place-content:center}.overflow-hidden[data-v-07be29b1]{overflow:hidden}.bg-white[data-v-07be29b1]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-07be29b1]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-07be29b1]{text-align:center}.text-\[56px\][data-v-07be29b1]{font-size:56px}.text-2xl[data-v-07be29b1]{font-size:1.5rem;line-height:2rem}.text-neutral-500[data-v-07be29b1]{--un-text-opacity:1;color:rgb(115 115 115/var(--un-text-opacity))}.text-neutral-950[data-v-07be29b1]{--un-text-opacity:1;color:rgb(10 10 10/var(--un-text-opacity))}.font-medium[data-v-07be29b1]{font-weight:500}.font-semibold[data-v-07be29b1]{font-weight:600}.leading-none[data-v-07be29b1]{line-height:1}.tracking-wide[data-v-07be29b1]{letter-spacing:.025em}.font-sans[data-v-07be29b1]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-07be29b1]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-07be29b1]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-neutral-950[data-v-07be29b1]{--un-bg-opacity:1;background-color:rgb(10 10 10/var(--un-bg-opacity))}.dark\:text-white[data-v-07be29b1]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[72px\][data-v-07be29b1]{font-size:72px}.sm\:text-3xl[data-v-07be29b1]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./P6qlvBHA.js";import{At as t,M as n,U as r,Xt as i,d as a,f as o,lt as s,m as c,nt as l,p as u,q as d,qt as f,u as p,y as m}from"./BxuBMtk_.js";import{t as h}from"./D5i92OZO.js";import{n as g,t as _}from"./BE6t7Q2m.js";import{t as v}from"./CXG7GZes.js";import{t as y}from"./DJM7u8P3.js";var b={slots:{base:[`group relative block my-5 p-4 sm:p-6 border border-default rounded-md bg-default`,`transition-colors`],icon:`size-6 mb-2 block`,title:`text-highlighted font-semibold`,description:`text-[15px] text-muted *:first:mt-0 *:last:mb-0 *:my-1`,externalIcon:[`size-4 align-top absolute end-2 top-2 text-dimmed pointer-events-none`,`transition-colors`]},variants:{color:{primary:{icon:`text-primary`},secondary:{icon:`text-secondary`},success:{icon:`text-success`},info:{icon:`text-info`},warning:{icon:`text-warning`},error:{icon:`text-error`},neutral:{icon:`text-highlighted`}},to:{true:``},title:{true:{description:`mt-1`}}},compoundVariants:[{color:`primary`,to:!0,class:{base:`hover:bg-primary/10 hover:border-primary outline-primary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-primary`,externalIcon:`group-hover:text-primary`}},{color:`secondary`,to:!0,class:{base:`hover:bg-secondary/10 hover:border-secondary outline-secondary/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-secondary`,externalIcon:`group-hover:text-secondary`}},{color:`success`,to:!0,class:{base:`hover:bg-success/10 hover:border-success outline-success/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-success`,externalIcon:`group-hover:text-success`}},{color:`info`,to:!0,class:{base:`hover:bg-info/10 hover:border-info outline-info/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-info`,externalIcon:`group-hover:text-info`}},{color:`warning`,to:!0,class:{base:`hover:bg-warning/10 hover:border-warning outline-warning/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-warning`,externalIcon:`group-hover:text-warning`}},{color:`error`,to:!0,class:{base:`hover:bg-error/10 hover:border-error outline-error/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-error`,externalIcon:`group-hover:text-error`}},{color:`neutral`,to:!0,class:{base:`hover:bg-elevated/50 hover:border-inverted outline-inverted/25 has-[>a:focus-visible]:outline-3 has-[>a:focus-visible]:border-inverted`,externalIcon:`group-hover:text-highlighted`}}],defaultVariants:{color:`primary`}},x=Object.assign({inheritAttrs:!1},{__name:`ProseCard`,props:{to:{type:null,required:!1},target:{type:[String,Object,null],required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},color:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(x){let S=x,C=l(),w=g(`prose.card`,S),T=e(),E=p(()=>_({extend:b,...T.ui?.prose?.card||{}})({color:w.color,to:!!w.to,title:!!w.title})),D=p(()=>w.target||(w.to&&typeof w.to==`string`&&w.to.startsWith(`http`)?`_blank`:void 0)),O=p(()=>(w.title||`Card link`).trim());return(e,l)=>(r(),c(`div`,n(t(w).to?{}:e.$attrs,{class:E.value.base({class:[t(w).ui?.base,t(w).class]})}),[t(w).to?(r(),o(v,n({key:0,"aria-label":O.value},{to:t(w).to,target:D.value,...e.$attrs},{class:`focus:outline-none`,raw:``}),{default:s(()=>[...l[0]||=[a(`span`,{class:`absolute inset-0`,"aria-hidden":`true`},null,-1)]]),_:1},16,[`aria-label`])):u(``,!0),t(w).icon?(r(),o(y,{key:1,name:t(w).icon,class:f(E.value.icon({class:t(w).ui?.icon}))},null,8,[`name`,`class`])):u(``,!0),t(w).to&&D.value===`_blank`?(r(),o(y,{key:2,name:t(T).ui.icons.external,class:f(E.value.externalIcon({class:t(w).ui?.externalIcon}))},null,8,[`name`,`class`])):u(``,!0),t(w).title||C.title?(r(),c(`p`,{key:3,class:f(E.value.title({class:t(w).ui?.title}))},[h(e.$slots,`title`,{mdcUnwrap:`p`},()=>[m(i(t(w).title),1)])],2)):u(``,!0),C.default?(r(),c(`div`,{key:4,class:f(E.value.description({class:t(w).ui?.description}))},[d(e.$slots,`default`,{},()=>[m(i(t(w).description),1)])],2)):u(``,!0)],16))}});export{x as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as e}from"./BE6t7Q2m.js";import{Dt as t,S as n,et as r,q as i}from"./BxuBMtk_.js";var[a,o]=e(`ConfigProvider`),s=n({inheritAttrs:!1,__name:`ConfigProvider`,props:{dir:{type:String,required:!1,default:`ltr`},locale:{type:String,required:!1,default:`en`},scrollBody:{type:[Boolean,Object],required:!1,default:!0},nonce:{type:String,required:!1,default:void 0},teleportTo:{type:null,required:!1,default:void 0},useId:{type:Function,required:!1,default:void 0}},setup(e){let n=e,{dir:r,locale:a,scrollBody:s,nonce:c,teleportTo:l}=t(n);return o({dir:r,locale:a,scrollBody:s,nonce:c,teleportTo:l,useId:n.useId}),(e,t)=>i(e.$slots,`default`)}});function c(e,t=`reka`){if(e)return e;let n,i=a({useId:void 0});return n=i.useId?i.useId():r?.(),t?`${t}-${n}`:n}export{s as n,a as r,c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377274,false]</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377275,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377275,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377276,false]</script></body></html>
|
package/assets/board/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377277,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377276,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377276,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BU8vdZUs.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.BBv-sBnP.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BU8vdZUs.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFCM18fF.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxuBMtk_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DxBwVNyP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BygIGL69.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SywdkA98.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BW3xJdEx.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/SrNUvNwO.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CI0scS-N.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D_ct-Stz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/P6qlvBHA.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CdPGFZyy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bubk0xn-.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJM7u8P3.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DUgGsde6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrWE0up6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BE6t7Q2m.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DqUSsCJ2.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/q_8bxRMt.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DFQDFspC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9MgRdhu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQgzP7ur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CgQ30j_6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzmVW5-D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B0C2jsdk.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CYGiZn-X.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C3SpAhCW.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cdf_T8Xa.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DV4ti-Pq.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CXG7GZes.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dki9VkAL.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLr85ebo.js"><script type="module" src="/_nuxt/BU8vdZUs.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/I-sGtDIB.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BuBzMkFZ.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BAQQngAq.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.CgJNdpB5.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/D1V1gysQ.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.WYSoH44y.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BGwhkDRl.js"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="apple-touch-icon" href="/favicon.svg"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"08bebe14-0f1b-4d2a-8de4-e84e122d10e9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793514377276,false]</script></body></html>
|
package/bin/scrum-skills.mjs
CHANGED
|
@@ -65,6 +65,11 @@ function init() {
|
|
|
65
65
|
cpSync(join(PKG_ROOT, 'tools/validate.mjs'), join(dir, 'tools/validate.mjs'));
|
|
66
66
|
// 交付说明的写入工具:纪律要求「写之前先看 git」,工具得跟着装过去
|
|
67
67
|
cpSync(join(PKG_ROOT, 'tools/last-change.mjs'), join(dir, 'tools/last-change.mjs'));
|
|
68
|
+
// 架构图例:入库工具 + 出图质检(上游 self_check 的 Node 移植版,不带 Python)
|
|
69
|
+
cpSync(join(PKG_ROOT, 'tools/diagram.mjs'), join(dir, 'tools/diagram.mjs'));
|
|
70
|
+
cpSync(join(PKG_ROOT, 'tools/diagram-lint.mjs'), join(dir, 'tools/diagram-lint.mjs'));
|
|
71
|
+
// 老图导入摘要(顶替上游 drawio / mermaid / excalidraw 三个 Python 提取脚本)
|
|
72
|
+
cpSync(join(PKG_ROOT, 'tools/diagram-import.mjs'), join(dir, 'tools/diagram-import.mjs'));
|
|
68
73
|
|
|
69
74
|
// 数据骨架:schema v3(已有文件不覆盖,避免踩坏真实数据)
|
|
70
75
|
mkdirSync(join(dir, 'agile'), { recursive: true });
|
|
@@ -74,6 +79,8 @@ function init() {
|
|
|
74
79
|
'journal.json': { schemaVersion: 3, journals: [] },
|
|
75
80
|
// 测试资产:页面空状态也认这个文件,先给空壳,agent 收口时往里加用例
|
|
76
81
|
'tests.json': { schemaVersion: 3, suites: [], runs: [] },
|
|
82
|
+
// 架构图例:索引与产物分开(产物在 agile/diagrams/,由 tools/diagram.mjs 登记)
|
|
83
|
+
'diagrams.json': { schemaVersion: 3, diagrams: [] },
|
|
77
84
|
};
|
|
78
85
|
const created = [];
|
|
79
86
|
for (const [name, body] of Object.entries(skeleton)) {
|
|
@@ -85,8 +92,11 @@ function init() {
|
|
|
85
92
|
|
|
86
93
|
console.log(`✔ 已初始化到 ${dir}
|
|
87
94
|
- .agents/skills/ 四个敏捷 skill(planning / sprint / tdd / report)
|
|
95
|
+
+ 内置 diagram-design(画架构图/时序图/ER 图,无需另装、不依赖 Python)
|
|
88
96
|
- AGENTS.md agent 入口纪律文件${backed ? `(旧文件已备份为 ${basename(backed)})` : ''}
|
|
89
97
|
- tools/validate.mjs 数据校验脚本
|
|
98
|
+
- tools/diagram.mjs 架构图例入库(质检 → 落盘 → 建索引 → 校验回滚)
|
|
99
|
+
- tools/diagram-import.mjs 老图导入摘要(mermaid / drawio / excalidraw)
|
|
90
100
|
- agile/ 数据骨架${created.length ? `(新建 ${created.join('、')})` : '(已存在,未覆盖)'}
|
|
91
101
|
|
|
92
102
|
下一步:
|
|
@@ -114,6 +124,9 @@ function frameworkFiles() {
|
|
|
114
124
|
out.push({ rel: 'AGENTS.md', src: join(PKG_ROOT, 'templates/AGENTS.md') });
|
|
115
125
|
out.push({ rel: 'tools/validate.mjs', src: join(PKG_ROOT, 'tools/validate.mjs') });
|
|
116
126
|
out.push({ rel: 'tools/last-change.mjs', src: join(PKG_ROOT, 'tools/last-change.mjs') });
|
|
127
|
+
out.push({ rel: 'tools/diagram.mjs', src: join(PKG_ROOT, 'tools/diagram.mjs') });
|
|
128
|
+
out.push({ rel: 'tools/diagram-lint.mjs', src: join(PKG_ROOT, 'tools/diagram-lint.mjs') });
|
|
129
|
+
out.push({ rel: 'tools/diagram-import.mjs', src: join(PKG_ROOT, 'tools/diagram-import.mjs') });
|
|
117
130
|
return out;
|
|
118
131
|
}
|
|
119
132
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrum-skills",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"test": "node --test",
|
|
25
25
|
"dev": "pnpm --dir apps/board run dev",
|
|
26
26
|
"build": "node scripts/build-board.mjs",
|
|
27
|
+
"sync:diagram": "node scripts/sync-diagram-skill.mjs",
|
|
27
28
|
"prepublishOnly": "node scripts/build-board.mjs"
|
|
28
29
|
},
|
|
29
30
|
"files": [
|
package/templates/AGENTS.md
CHANGED
|
@@ -45,6 +45,12 @@
|
|
|
45
45
|
|
|
46
46
|
这七项按项目实际情况给——没有账号体系就不提账号,没有前端入口就不提地址,没有的就省略,**但不许编,也不许只回一句「做完了」**。看板「最后更新」(`/last-change`)页渲染的就是这个文件。
|
|
47
47
|
|
|
48
|
+
9. **架构图例用内置的 diagram-design,不许让用户另外安装**。改动涉及模块边界 / 鉴权 / 支付 / 数据模型 / 外部集成时,交工前出图或重画:
|
|
49
|
+
- 读 `.agents/skills/diagram-design/SKILL.md`(随包分发,**不依赖 Python**),按其 §3 选型并先加载 `references/type-<type>.md`;
|
|
50
|
+
- 产物丢进 `agile/diagrams/`,用 `node tools/diagram.mjs add <file> --title "..." --kind sequence --story S-001` 登记,
|
|
51
|
+
它会先跑 `node tools/diagram-lint.mjs` 质检,不过不许入库;
|
|
52
|
+
- 索引 `agile/diagrams.json` 只由工具写,**不要手改**(结构见 schema 第 6 节)。
|
|
53
|
+
|
|
48
54
|
## 状态机(摘要)
|
|
49
55
|
|
|
50
56
|
- story: `draft → ready → in-progress → review → done`;不做就走 `cancelled`(已取消,终态,不要求验收与任务全 done)
|
|
@@ -60,6 +66,10 @@
|
|
|
60
66
|
| `agile/sprints.json` | 迭代 sprints + 里程碑 milestones(MVP 节点 = `kind: "mvp"`) |
|
|
61
67
|
| `agile/journal.json` | 每个 task 一条 TDD 实施日志(内联 entries) |
|
|
62
68
|
| `agile/tests.json` | 测试资产:suites(层 × 级别 → cases,含 covers 映射与最近状态)+ runs(执行记录与代码覆盖率);可选文件 |
|
|
69
|
+
| `agile/diagrams.json` | 架构图例索引(自包含 HTML 产物在 `agile/diagrams/` 下);可选文件 |
|
|
70
|
+
| `.agents/skills/diagram-design/` | 内置的 diagram-design skill(架构 / 时序 / ER 图;不含 Python 脚本) |
|
|
71
|
+
| `tools/diagram.mjs` | 图例入库:质检 → 分配 id → 落盘 → 建索引 → 校验回滚 |
|
|
72
|
+
| `tools/diagram-lint.mjs` | 出图质检(安全 / 文档完整性 / 无障碍 / viewBox 越界 / 动画契约) |
|
|
63
73
|
| `agile/last-change.json` | 最近一次交付的汇报(已提交才覆盖,未提交则合并):变更清单 / 额外工作 / 验证 / 入口与账号 / 测试前准备 / 测试场景 / 说明 |
|
|
64
74
|
| `tools/validate.mjs` | 数据校验(引用完整性 / 状态机 / TDD 纪律 / 测试资产 / 里程碑达成 / 交付说明) |
|
|
65
75
|
| `tools/last-change.mjs` | 交付说明的写入工具:`check` 判 git 状态、`write` 自动覆盖或合并 + 写后校验回滚 |
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 图例源文件摘要(零依赖,node >= 18)
|
|
4
|
+
*
|
|
5
|
+
* 顶替上游三个 Python 提取脚本(drawio / mermaid / excalidraw)。它**不画图**,
|
|
6
|
+
* 只把「又长又啰嗦的源文件」压成节点 + 连线的摘要,喂给模型重新按 diagram-design 的规范画。
|
|
7
|
+
*
|
|
8
|
+
* 为什么值得有这一层:一个 3000 行的 .excalidraw 直接塞给模型,上下文一半没了,
|
|
9
|
+
* 剩下的钱全花在读坐标上——而坐标对重画毫无用处,文字和连线才有用。
|
|
10
|
+
*
|
|
11
|
+
* 用法:
|
|
12
|
+
* node tools/diagram-import.mjs <file.mmd|.drawio|.excalidraw> [--json] [--max 40]
|
|
13
|
+
* 退出码: 0 成功, 1 失败
|
|
14
|
+
*/
|
|
15
|
+
import { readFileSync } from 'node:fs';
|
|
16
|
+
import { extname } from 'node:path';
|
|
17
|
+
|
|
18
|
+
const args = process.argv.slice(2);
|
|
19
|
+
const files = [];
|
|
20
|
+
let json = false;
|
|
21
|
+
let max = 40;
|
|
22
|
+
for (let i = 0; i < args.length; i++) {
|
|
23
|
+
const a = args[i];
|
|
24
|
+
if (a === '--json') json = true;
|
|
25
|
+
else if (a === '--max') max = Number.parseInt(args[++i] ?? '40', 10) || 40;
|
|
26
|
+
else if (a.startsWith('--')) { console.error(`✘ 未知参数: ${a}`); process.exit(1); }
|
|
27
|
+
else files.push(a);
|
|
28
|
+
}
|
|
29
|
+
if (files.length !== 1) {
|
|
30
|
+
console.error('用法: node tools/diagram-import.mjs <file.mmd|.drawio|.excalidraw> [--json] [--max 40]');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const decode = s => String(s)
|
|
35
|
+
.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"')
|
|
36
|
+
.replace(/'/g, "'").replace(/ /g, ' ').replace(/&/g, '&');
|
|
37
|
+
|
|
38
|
+
const clean = s => decode(s ?? '').replace(/<[^>]*>/g, '').replace(/\s+/g, ' ').trim();
|
|
39
|
+
|
|
40
|
+
const unquote = s => {
|
|
41
|
+
const t = String(s ?? '').trim();
|
|
42
|
+
if ((t.startsWith('"') && t.endsWith('"')) || (t.startsWith("'") && t.endsWith("'"))) return t.slice(1, -1);
|
|
43
|
+
return t;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// ---------------- mermaid ----------------
|
|
47
|
+
|
|
48
|
+
const MERMAID_KINDS = [
|
|
49
|
+
[/^\s*(?:flowchart|graph)\b/i, 'flowchart'],
|
|
50
|
+
[/^\s*sequenceDiagram\b/i, 'sequence'],
|
|
51
|
+
[/^\s*erDiagram\b/i, 'er'],
|
|
52
|
+
[/^\s*classDiagram\b/i, 'class'],
|
|
53
|
+
[/^\s*stateDiagram(?:-v2)?\b/i, 'state'],
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
function mermaid(text) {
|
|
57
|
+
const lines = text.split('\n').filter(l => !/^\s*%%/.test(l));
|
|
58
|
+
const kind = MERMAID_KINDS.find(([re]) => re.test(text))?.[1];
|
|
59
|
+
if (!kind) throw new Error('无法识别:mermaid 里没找到 flowchart / sequenceDiagram / erDiagram / classDiagram 之一');
|
|
60
|
+
|
|
61
|
+
const nodes = new Map();
|
|
62
|
+
const edges = [];
|
|
63
|
+
const addNode = (id, label = '') => {
|
|
64
|
+
if (!id) return;
|
|
65
|
+
const prev = nodes.get(id);
|
|
66
|
+
if (!prev || (!prev.label && label)) nodes.set(id, { id, label: label || prev?.label || '' });
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
if (kind === 'flowchart') {
|
|
70
|
+
// 形状:A[文字] / A(文字) / A{文字} / A[(库)] / A((圆)) / A[[子流程]]
|
|
71
|
+
const shape = /([A-Za-z_][\w-]*)\s*(\(\(([^)]*)\)\)|\[\(([^)]*)\)\]|\[\[([^\]]*)\]\]|\{\{([^}]*)\}\}|\[([^\]]*)\]|\(([^)]*)\)|\{([^}]*)\})/g;
|
|
72
|
+
for (const m of text.matchAll(shape)) {
|
|
73
|
+
addNode(m[1], clean(unquote(m.slice(3).find(Boolean) ?? '')));
|
|
74
|
+
}
|
|
75
|
+
// 边:允许两端各带形状(`A[浏览器] -->|提交账号| B[网关]` 是最常见写法)
|
|
76
|
+
const SHAPE = String.raw`(?:\(\([^)]*\)\)|\[\([^)]*\)\]|\[\[[^\]]*\]\]|\{\{[^}]*\}\}|\[[^\]]*\]|\([^)]*\)|\{[^}]*\})`;
|
|
77
|
+
const edgeRe = new RegExp(
|
|
78
|
+
String.raw`([A-Za-z_]\w*)\s*${SHAPE}?\s*(?:-\.->|=>+>|-{2,}[>ox]?|--[ox]|<--+)\s*(?:\|([^|]*)\|)?\s*([A-Za-z_]\w*)`,
|
|
79
|
+
'g',
|
|
80
|
+
);
|
|
81
|
+
for (const line of lines) {
|
|
82
|
+
for (const m of line.matchAll(edgeRe)) {
|
|
83
|
+
addNode(m[1]);
|
|
84
|
+
addNode(m[3]);
|
|
85
|
+
edges.push({ from: m[1], to: m[3], label: clean(unquote(m[2] ?? '')) });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
} else if (kind === 'sequence') {
|
|
89
|
+
const parts = new Map();
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
const p = /^\s*(?:participant|actor)\s+([A-Za-z_]\w*)(?:\s+as\s+(.+))?$/i.exec(line);
|
|
92
|
+
if (p) parts.set(p[1], clean(unquote(p[2] ?? p[1])));
|
|
93
|
+
}
|
|
94
|
+
// 箭头必须显式匹配,id 里不许夹带 `-`:`A-->>U` 若放开连字符,会把 from 吃成 "A-"
|
|
95
|
+
const msgRe = /([A-Za-z_]\w*)\s*(-->>|->>|-->|->|--x|-x|--\)|-\))\s*([+-])?\s*([A-Za-z_]\w*)\s*:\s*(.+)$/;
|
|
96
|
+
for (const line of lines) {
|
|
97
|
+
if (/^\s*(?:participant|actor|note|loop|alt|else|end|opt|par|critical|break|rect|activate|deactivate|autonumber)\b/i.test(line)) continue;
|
|
98
|
+
const m = msgRe.exec(line);
|
|
99
|
+
if (!m) continue;
|
|
100
|
+
for (const id of [m[1], m[4]]) addNode(id, parts.get(id) ?? '');
|
|
101
|
+
edges.push({ from: m[1], to: m[4], label: clean(m[5]) });
|
|
102
|
+
}
|
|
103
|
+
for (const [id, label] of parts) addNode(id, label);
|
|
104
|
+
} else {
|
|
105
|
+
// er / class / state:都按「关系行」处理,够看就行
|
|
106
|
+
const rel = /([A-Za-z_][\w-]*)\s*([|}{o]{1,2}--[|}{o]{1,2}|<\|--|--\|>|-->|<--|\.\.>)\s*([A-Za-z_][\w-]*)\s*:\s*(\S+)/g;
|
|
107
|
+
for (const m of text.matchAll(rel)) {
|
|
108
|
+
addNode(m[1]);
|
|
109
|
+
addNode(m[3]);
|
|
110
|
+
edges.push({ from: m[1], to: m[3], label: clean(unquote(m[4])) });
|
|
111
|
+
}
|
|
112
|
+
for (const m of text.matchAll(/^\s*(?:class\s+)?([A-Z][\w-]*)\s*\{/gm)) addNode(m[1]);
|
|
113
|
+
if (!nodes.size) throw new Error(`${kind} 里没有解析出实体或关系`);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return { format: 'mermaid', kind, nodes: [...nodes.values()], edges };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// ---------------- drawio ----------------
|
|
120
|
+
|
|
121
|
+
function drawio(text) {
|
|
122
|
+
const nodes = new Map();
|
|
123
|
+
const edges = [];
|
|
124
|
+
const cells = [...text.matchAll(/<mxCell\b([^>]*)>/g)].map(m => {
|
|
125
|
+
const attrs = {};
|
|
126
|
+
for (const a of m[1].matchAll(/([\w:-]+)="([^"]*)"/g)) attrs[a[1]] = a[2];
|
|
127
|
+
return attrs;
|
|
128
|
+
});
|
|
129
|
+
if (!cells.length) throw new Error('无法识别:没找到 <mxCell>,确认这是 drawio 的 XML');
|
|
130
|
+
|
|
131
|
+
for (const c of cells) {
|
|
132
|
+
const label = clean(c.value ?? '');
|
|
133
|
+
if (c.vertex === '1' && label) nodes.set(c.id, { id: c.id, label });
|
|
134
|
+
if (c.edge === '1' && c.source && c.target) {
|
|
135
|
+
edges.push({ from: c.source, to: c.target, label });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
for (const e of edges) {
|
|
139
|
+
if (!nodes.has(e.from)) nodes.set(e.from, { id: e.from, label: '' });
|
|
140
|
+
if (!nodes.has(e.to)) nodes.set(e.to, { id: e.to, label: '' });
|
|
141
|
+
}
|
|
142
|
+
return { format: 'drawio', kind: 'graph', nodes: [...nodes.values()], edges };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// ---------------- excalidraw ----------------
|
|
146
|
+
|
|
147
|
+
const SHAPES = new Set(['rectangle', 'diamond', 'ellipse', 'image', 'frame']);
|
|
148
|
+
|
|
149
|
+
function excalidraw(text) {
|
|
150
|
+
let scene;
|
|
151
|
+
try { scene = JSON.parse(text); } catch (e) { throw new Error(`不是合法 JSON:${e.message}`); }
|
|
152
|
+
const all = (scene.elements ?? []).filter(e => !e?.isDeleted);
|
|
153
|
+
if (!Array.isArray(scene.elements)) throw new Error('无法识别:JSON 里没有 elements');
|
|
154
|
+
|
|
155
|
+
const textById = new Map();
|
|
156
|
+
const textOfContainer = new Map();
|
|
157
|
+
for (const e of all) {
|
|
158
|
+
if (e.type !== 'text') continue;
|
|
159
|
+
textById.set(e.id, e.text ?? '');
|
|
160
|
+
if (e.containerId) textOfContainer.set(e.containerId, e.text ?? '');
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const nodes = new Map();
|
|
164
|
+
for (const e of all) {
|
|
165
|
+
if (!SHAPES.has(e.type)) continue;
|
|
166
|
+
const label = clean(textOfContainer.get(e.id) ?? '');
|
|
167
|
+
nodes.set(e.id, { id: e.id, label });
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const edges = [];
|
|
171
|
+
for (const e of all) {
|
|
172
|
+
if (e.type !== 'arrow' && e.type !== 'line') continue;
|
|
173
|
+
const from = e.startBinding?.elementId;
|
|
174
|
+
const to = e.endBinding?.elementId;
|
|
175
|
+
if (!from || !to) continue;
|
|
176
|
+
edges.push({ from, to, label: clean(textOfContainer.get(e.id) ?? '') });
|
|
177
|
+
}
|
|
178
|
+
return { format: 'excalidraw', kind: 'whiteboard', nodes: [...nodes.values()], edges };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ---------------- 输出 ----------------
|
|
182
|
+
|
|
183
|
+
const KIND_CN = {
|
|
184
|
+
flowchart: '流程图', sequence: '时序图', er: 'ER 关系图', class: '类图',
|
|
185
|
+
state: '状态图', graph: '结构图', whiteboard: '白板草图',
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
function summarize(d) {
|
|
189
|
+
const nodes = d.nodes.slice(0, max);
|
|
190
|
+
const edges = d.edges.slice(0, max);
|
|
191
|
+
const restN = d.nodes.length - nodes.length;
|
|
192
|
+
const restE = d.edges.length - edges.length;
|
|
193
|
+
const nameOf = id => nodes.find(n => n.id === id)?.label || id;
|
|
194
|
+
const out = [];
|
|
195
|
+
out.push(`# ${d.format} · ${KIND_CN[d.kind] ?? d.kind}(${d.kind})— ${d.nodes.length} 个节点 / ${d.edges.length} 条边`);
|
|
196
|
+
out.push('');
|
|
197
|
+
if (nodes.length) {
|
|
198
|
+
out.push('节点:');
|
|
199
|
+
for (const n of nodes) out.push(`- ${n.label || n.id}`);
|
|
200
|
+
if (restN > 0) out.push(`- …其余 ${restN} 个节点省略(--max 调大)`);
|
|
201
|
+
out.push('');
|
|
202
|
+
}
|
|
203
|
+
if (edges.length) {
|
|
204
|
+
out.push('连线:');
|
|
205
|
+
for (const e of edges) out.push(`- ${nameOf(e.from)} → ${nameOf(e.to)}${e.label ? `(${e.label})` : ''}`);
|
|
206
|
+
if (restE > 0) out.push(`- …其余 ${restE} 条连线省略`);
|
|
207
|
+
}
|
|
208
|
+
return out.join('\n');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const file = files[0];
|
|
212
|
+
const ext = extname(file).toLowerCase();
|
|
213
|
+
const text = readFileSync(file, 'utf8');
|
|
214
|
+
let data;
|
|
215
|
+
try {
|
|
216
|
+
if (ext === '.mmd' || ext === '.mermaid' || ext === '.md') data = mermaid(text);
|
|
217
|
+
else if (ext === '.drawio' || ext === '.xml') data = drawio(text);
|
|
218
|
+
else if (ext === '.excalidraw' || ext === '.json') data = excalidraw(text);
|
|
219
|
+
else throw new Error(`不支持的格式 ${ext || '(无扩展名)'}:只认 .mmd / .drawio / .excalidraw`);
|
|
220
|
+
} catch (e) {
|
|
221
|
+
console.error(`✘ ${e.message}`);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (json) {
|
|
226
|
+
const nodes = data.nodes.slice(0, max);
|
|
227
|
+
const edges = data.edges.slice(0, max);
|
|
228
|
+
console.log(JSON.stringify({
|
|
229
|
+
format: data.format,
|
|
230
|
+
kind: data.kind,
|
|
231
|
+
stats: { nodes: data.nodes.length, edges: data.edges.length },
|
|
232
|
+
nodes,
|
|
233
|
+
edges,
|
|
234
|
+
truncated: nodes.length < data.nodes.length || edges.length < data.edges.length,
|
|
235
|
+
}, null, 2));
|
|
236
|
+
} else {
|
|
237
|
+
console.log(summarize(data));
|
|
238
|
+
}
|