@runweave/server-linux-x64 0.1.23 → 0.1.24
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/manifest.json +190 -200
- package/native.tar.gz +0 -0
- package/package.json +1 -1
- package/payload/app-server/build-info.json +4 -4
- package/payload/app-server/index.cjs +46 -25
- package/payload/app-server/index.cjs.map +1 -1
- package/payload/backend/activity-sqlite-worker.cjs +33 -21
- package/payload/backend/build-info.json +4 -4
- package/payload/backend/dev-resources/control.cjs +158 -59
- package/payload/backend/index.cjs +2052 -1737
- package/payload/backend/scheduled-tasks-sqlite-worker.cjs +12 -0
- package/payload/frontend/dist/assets/{_baseUniq-V9OGBCCp.js → _baseUniq-Ba3pSqKA.js} +1 -1
- package/payload/frontend/dist/assets/{access-Bw9yaM2u.js → access-C1Ww0gdD.js} +1 -1
- package/payload/frontend/dist/assets/{advanced-BspSUvyf.js → advanced-BZJuI68m.js} +1 -1
- package/payload/frontend/dist/assets/{appearance-BHYR2QUj.js → appearance-Btma-0NG.js} +1 -1
- package/payload/frontend/dist/assets/{arc-C4bVuMy6.js → arc-B44-ZMF9.js} +1 -1
- package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-B_EOBe6n.js → architectureDiagram-Q4EWVU46-CJ7zCB_3.js} +1 -1
- package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-aAkbmNO9.js → blockDiagram-DXYQGD6D-l7dgY79m.js} +1 -1
- package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-DKeUolGU.js → c4Diagram-AHTNJAMY-aNNQInyV.js} +1 -1
- package/payload/frontend/dist/assets/channel-DVHsGC9c.js +1 -0
- package/payload/frontend/dist/assets/{chunk-4BX2VUAB-cB5sH0Mw.js → chunk-4BX2VUAB-2W54u8LL.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-4TB4RGXK-CxVRfINM.js → chunk-4TB4RGXK-CJuTStu-.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-55IACEB6-BFRLEEBY.js → chunk-55IACEB6-DcOWjj1X.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-EDXVE4YY-DA5BuoT3.js → chunk-EDXVE4YY-Depu37hh.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-FMBD7UC4-DIvA96Y1.js → chunk-FMBD7UC4-CTzWCktW.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-OYMX7WX6-8Zl-vtJp.js → chunk-OYMX7WX6-DryiNt82.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-QZHKN3VN-DnW4X6Wx.js → chunk-QZHKN3VN-DVwx49kx.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-YZCP3GAM-CH4YkXv-.js → chunk-YZCP3GAM-X1PkQV8g.js} +1 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-CmciHFmk.js +1 -0
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-CmciHFmk.js +1 -0
- package/payload/frontend/dist/assets/clone-DxGSjF8z.js +1 -0
- package/payload/frontend/dist/assets/{connection-CINMNAPm.js → connection-zVFEL2VH.js} +1 -1
- package/payload/frontend/dist/assets/{connections-DsHGQRR2.js → connections-BYoc3Px5.js} +1 -1
- package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-Dm1QOjDr.js → cose-bilkent-S5V4N54A-D5JSjBwS.js} +1 -1
- package/payload/frontend/dist/assets/{dagre-KV5264BT-BEbPPDoW.js → dagre-KV5264BT-C7wEsUEu.js} +1 -1
- package/payload/frontend/dist/assets/{desktop-1jdcRQ7b.js → desktop-DlSOatR2.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-5BDNPKRD-C-DmBIhV.js → diagram-5BDNPKRD-BJVOoWUV.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-Ddv6Kw2_.js → diagram-G4DWMVQ6-B-dyOrNQ.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-MMDJMWI5-Xae79J8R.js → diagram-MMDJMWI5-DoTfUnHA.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-TYMM5635-CavrGRG2.js → diagram-TYMM5635-yVeltO6V.js} +1 -1
- package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-BRRD8F-e.js → erDiagram-SMLLAGMA-BHIOahrf.js} +1 -1
- package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-C-ewssi0.js → flowDiagram-DWJPFMVM-Bnkh3X2r.js} +1 -1
- package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-BcZnXV6L.js → ganttDiagram-T4ZO3ILL-BRFZUfp9.js} +1 -1
- package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-ZcfWVMGG.js → gitGraphDiagram-UUTBAWPF-wXS21tDN.js} +1 -1
- package/payload/frontend/dist/assets/{graph-DRJG1bKF.js → graph-Cwj2x7na.js} +1 -1
- package/payload/frontend/dist/assets/{image-GQYH_1h4.js → image-CXpMpz27.js} +1 -1
- package/payload/frontend/dist/assets/index-B2PyTNyh.js +1258 -0
- package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-BWsoBaYn.js → infoDiagram-42DDH7IO-BzTeaphH.js} +1 -1
- package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-C3ayGr4G.js → ishikawaDiagram-UXIWVN3A-C_i1EUdW.js} +1 -1
- package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-DB1DxZ1v.js → journeyDiagram-VCZTEJTY-B1fcPcA4.js} +1 -1
- package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-CtZWN0CK.js → kanban-definition-6JOO6SKY-BC5fXbSI.js} +1 -1
- package/payload/frontend/dist/assets/{layout-KX5XwX_6.js → layout-dRQexo61.js} +1 -1
- package/payload/frontend/dist/assets/{linear-DMZrhooi.js → linear-DpsIhjfr.js} +1 -1
- package/payload/frontend/dist/assets/{main-LH8ULGFT.js → main-BFEoEwax.js} +142 -142
- package/payload/frontend/dist/assets/main-BO-hQK7n.css +33 -0
- package/payload/frontend/dist/assets/{min-CWc1cxEQ.js → min-Rr06WGlZ.js} +1 -1
- package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-tj_8hDDH.js → mindmap-definition-QFDTVHPH-CAecNSWV.js} +1 -1
- package/payload/frontend/dist/assets/{monitoring-BaUd-PhH.js → monitoring-D9LcExp-.js} +1 -1
- package/payload/frontend/dist/assets/{notifications-CTv1WVBh.js → notifications-BgW6p0Rk.js} +1 -1
- package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-Cwc4Gfp4.js → pieDiagram-DEJITSTG-CJgyNjut.js} +1 -1
- package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-Clq2RqDJ.js → quadrantDiagram-34T5L4WZ-C_60Mu33.js} +1 -1
- package/payload/frontend/dist/assets/{record-content-DQ0F1zbW.js → record-content-BEOv45kJ.js} +1 -1
- package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-gaTHj3JP.js → requirementDiagram-MS252O5E-C3HwQcbl.js} +1 -1
- package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-CyBolt3D.js → sankeyDiagram-XADWPNL6-RJ6EzD70.js} +1 -1
- package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-CO4UgRHw.js → sequenceDiagram-FGHM5R23-QiYuqsIk.js} +1 -1
- package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-ygBwN1Az.js → stateDiagram-FHFEXIEX-DscVhCkw.js} +1 -1
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-CBosnJqY.js +1 -0
- package/payload/frontend/dist/assets/{status-BOcUUbE9.js → status-TMGwGaid.js} +1 -1
- package/payload/frontend/dist/assets/suiji-BFib0tK9.js +1 -0
- package/payload/frontend/dist/assets/{svg-BfkbqvDT.js → svg-BR3UkgEE.js} +1 -1
- package/payload/frontend/dist/assets/{tabs-88TVAJwX.js → tabs-FQPVRwwQ.js} +1 -1
- package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-8Iy3eg4l.js → timeline-definition-GMOUNBTQ-CrYFg2HY.js} +1 -1
- package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-DLcttV2t.js → vennDiagram-DHZGUBPP-Do4I-ilO.js} +1 -1
- package/payload/frontend/dist/assets/{wardley-RL74JXVD-DUvr0OYP.js → wardley-RL74JXVD-CA9NRCtl.js} +1 -1
- package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-Dm-sdRY6.js → wardleyDiagram-NUSXRM2D-gpCyIXuK.js} +1 -1
- package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-DR_MOYh1.js → xychartDiagram-5P7HB3ND-BN662VL0.js} +1 -1
- package/payload/frontend/dist/build-info.json +4 -4
- package/payload/frontend/dist/companion.html +1 -1
- package/payload/frontend/dist/index.html +3 -3
- package/payload/plugins/toolkit/.codex-plugin/plugin.json +1 -1
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/SKILL.md +2 -2
- package/payload/plugins/toolkit/skills/visual-plan-review/SKILL.md +45 -0
- package/payload/plugins/toolkit/skills/visual-plan-review/agents/openai.yaml +3 -0
- package/payload/plugins/toolkit/skills/visual-plan-review/references/review-checklist.md +13 -0
- package/payload/plugins/toolkit/skills/visual-plan-review/references/visual-plan-template.html +8 -0
- package/payload/plugins/toolkit-release.json +1 -1
- package/payload/pty-host/index.cjs +147 -33
- package/payload/server/index.cjs +40 -20
- package/payload/frontend/dist/assets/channel-CBjt7igT.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-HmoWChAG.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-HmoWChAG.js +0 -1
- package/payload/frontend/dist/assets/clone-CiD5LYOe.js +0 -1
- package/payload/frontend/dist/assets/index-UR7g5PLZ.js +0 -448
- package/payload/frontend/dist/assets/main-D4_uoZQa.css +0 -33
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-DTtHtWkN.js +0 -1
- package/payload/frontend/dist/assets/suiji-DPDKlWVi.js +0 -1
- package/payload/plugins/toolkit/skills/prototype-first-development/SKILL.md +0 -134
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/README.md +0 -88
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/app.js +0 -145
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/index.html +0 -229
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/mock-state.json +0 -60
- package/payload/plugins/toolkit/skills/prototype-first-development/references/implementation-plan-handoff-template.md +0 -61
- package/payload/plugins/toolkit/skills/prototype-first-development/references/prototype-workflow-checklist.md +0 -64
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as zt,a as Lt,t as Xt,q as At,b as Ct,c as Et,_ as y,l as et,I as Tt,f as Yt,z as Bt,d as H,j as Rt}from"./index-
|
|
1
|
+
import{s as zt,a as Lt,t as Xt,q as At,b as Ct,c as Et,_ as y,l as et,I as Tt,f as Yt,z as Bt,d as H,j as Rt}from"./index-B2PyTNyh.js";import{p as Ft}from"./chunk-4BX2VUAB-2W54u8LL.js";import{p as It}from"./wardley-RL74JXVD-CA9NRCtl.js";import"./index-D9-cSGu-.js";import"./main-BFEoEwax.js";import"./record-content-BEOv45kJ.js";import"./min-Rr06WGlZ.js";import"./_baseUniq-Ba3pSqKA.js";var q=y((a,r)=>{const e=a<=1?a*100:a;if(e<0||e>100)throw new Error(`${r} must be between 0-1 (decimal) or 0-100 (percentage). Received: ${a}`);return e},"toPercent"),Y=y((a,r,e)=>({x:q(r,`${e} evolution`),y:q(a,`${e} visibility`)}),"toCoordinates"),tt=y(a=>{if(a){if(a==="+<>")return"bidirectional";if(a==="+<")return"backward";if(a==="+>")return"forward"}},"getFlowFromPort"),Ot=y(a=>{if(!(a!=null&&a.startsWith("+")))return{};const r=/^\+'([^']*)'/.exec(a),e=r==null?void 0:r[1];return a.includes("<>")?{flow:"bidirectional",label:e}:a.includes("<")?{flow:"backward",label:e}:a.includes(">")?{flow:"forward",label:e}:{label:e}},"extractFlowFromArrow"),Wt=y((a,r)=>{if(Ft(a,r),a.size&&r.setSize(a.size.width,a.size.height),a.evolution){const e=a.evolution.stages.map(o=>o.secondName?`${o.name.trim()} / ${o.secondName.trim()}`:o.name.trim()),h=a.evolution.stages.filter(o=>o.boundary!==void 0).map(o=>o.boundary);r.updateAxes({stages:e,stageBoundaries:h})}if(a.anchors.forEach(e=>{const h=Y(e.visibility,e.evolution,`Anchor "${e.name}"`);r.addNode(e.name,e.name,h.x,h.y,"anchor")}),a.components.forEach(e=>{var v;const h=Y(e.visibility,e.evolution,`Component "${e.name}"`),o=e.label?(e.label.negX?-1:1)*e.label.offsetX:void 0,d=e.label?(e.label.negY?-1:1)*e.label.offsetY:void 0,m=(v=e.decorator)==null?void 0:v.strategy;r.addNode(e.name,e.name,h.x,h.y,"component",o,d,e.inertia,m)}),a.notes.forEach(e=>{const h=Y(e.visibility,e.evolution,`Note "${e.text}"`);r.addNote(e.text,h.x,h.y)}),a.pipelines.forEach(e=>{const h=r.getNode(e.parent);if(!h||typeof h.y!="number")throw new Error(`Pipeline "${e.parent}" must reference an existing component with coordinates.`);const o=h.y;r.startPipeline(e.parent),e.components.forEach(d=>{const m=`${e.parent}_${d.name}`,v=d.label?(d.label.negX?-1:1)*d.label.offsetX:void 0,g=d.label?(d.label.negY?-1:1)*d.label.offsetY:void 0,A=q(d.evolution,`Pipeline component "${d.name}" evolution`);r.addNode(m,d.name,A,o,"pipeline-component",v,g),r.addPipelineComponent(e.parent,m)})}),a.links.forEach(e=>{const h=!!e.arrow&&(e.arrow.includes("-.->")||e.arrow.includes(".-."));let o=tt(e.fromPort)??tt(e.toPort);const{flow:d,label:m}=Ot(e.arrow);!o&&d&&(o=d);const v=e.linkLabel,g=m??v;r.addLink(e.from,e.to,h,g,o)}),a.evolves.forEach(e=>{const h=r.getNode(e.component);if((h==null?void 0:h.y)!==void 0){const o=q(e.target,`Evolve target for "${e.component}"`);r.addTrend(e.component,o,h.y)}}),a.annotations.length>0){const e=a.annotations[0],h=Y(e.x,e.y,"Annotations box");r.setAnnotationsBox(h.x,h.y)}a.annotation.forEach(e=>{const h=Y(e.x,e.y,`Annotation ${e.number}`);r.addAnnotation(e.number,[{x:h.x,y:h.y}],e.text)}),a.accelerators.forEach(e=>{const h=Y(e.x,e.y,`Accelerator "${e.name}"`);r.addAccelerator(e.name,h.x,h.y)}),a.deaccelerators.forEach(e=>{const h=Y(e.x,e.y,`Deaccelerator "${e.name}"`);r.addDeaccelerator(e.name,h.x,h.y)})},"populateDb"),at={parser:{yy:void 0},parse:y(async a=>{var h;const r=await It("wardley",a);et.debug(r);const e=(h=at.parser)==null?void 0:h.yy;if(!e||typeof e.addNode!="function")throw new Error("parser.parser?.yy was not a WardleyDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Wt(r,e)},"parse")},R,Dt=(R=class{constructor(){this.nodes=new Map,this.links=[],this.trends=new Map,this.pipelines=new Map,this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.axes={}}addNode(r){const e=this.nodes.get(r.id)??{id:r.id,label:r.label},h={...e,...r,className:r.className??e.className,labelOffsetX:r.labelOffsetX??e.labelOffsetX,labelOffsetY:r.labelOffsetY??e.labelOffsetY};this.nodes.set(r.id,h)}addLink(r){this.links.push(r)}addTrend(r){this.trends.set(r.nodeId,r)}startPipeline(r){this.pipelines.set(r,{nodeId:r,componentIds:[]});const e=this.nodes.get(r);e&&(e.isPipelineParent=!0)}addPipelineComponent(r,e){const h=this.pipelines.get(r);h&&h.componentIds.push(e);const o=this.nodes.get(e);o&&(o.inPipeline=!0)}addAnnotation(r){this.annotations.push(r)}addNote(r){this.notes.push(r)}addAccelerator(r){this.accelerators.push(r)}addDeaccelerator(r){this.deaccelerators.push(r)}setAnnotationsBox(r,e){this.annotationsBox={x:r,y:e}}setAxes(r){this.axes={...this.axes,...r}}setSize(r,e){this.size={width:r,height:e}}getNode(r){return this.nodes.get(r)}build(){const r=[];for(const e of this.nodes.values()){if(typeof e.x!="number"||typeof e.y!="number")throw new Error(`Node "${e.label}" is missing coordinates`);r.push(e)}return{nodes:r,links:[...this.links],trends:[...this.trends.values()],pipelines:[...this.pipelines.values()],annotations:[...this.annotations],notes:[...this.notes],accelerators:[...this.accelerators],deaccelerators:[...this.deaccelerators],annotationsBox:this.annotationsBox,axes:{...this.axes},size:this.size}}clear(){this.nodes.clear(),this.links=[],this.trends.clear(),this.pipelines.clear(),this.annotations=[],this.notes=[],this.accelerators=[],this.deaccelerators=[],this.annotationsBox=void 0,this.axes={},this.size=void 0}},y(R,"WardleyBuilder"),R),P=new Dt;function N(a){const r=H();return Rt(a.trim(),r)}y(N,"textSanitizer");function rt(){return H()["wardley-beta"]}y(rt,"getConfig");function ot(a,r,e,h,o,d,m,v,g){P.addNode({id:a,label:N(r),x:e,y:h,className:o,labelOffsetX:d,labelOffsetY:m,inertia:v,sourceStrategy:g})}y(ot,"addNode");function st(a,r,e=!1,h,o){P.addLink({source:a,target:r,dashed:e,label:h,flow:o})}y(st,"addLink");function nt(a,r,e){P.addTrend({nodeId:a,targetX:r,targetY:e})}y(nt,"addTrend");function it(a,r,e){P.addAnnotation({number:a,coordinates:r,text:e?N(e):void 0})}y(it,"addAnnotation");function dt(a,r,e){P.addNote({text:N(a),x:r,y:e})}y(dt,"addNote");function lt(a,r,e){P.addAccelerator({name:N(a),x:r,y:e})}y(lt,"addAccelerator");function ct(a,r,e){P.addDeaccelerator({name:N(a),x:r,y:e})}y(ct,"addDeaccelerator");function pt(a,r){P.setAnnotationsBox(a,r)}y(pt,"setAnnotationsBox");function ht(a,r){P.setSize(a,r)}y(ht,"setSize");function xt(a){P.startPipeline(a)}y(xt,"startPipeline");function ft(a,r){P.addPipelineComponent(a,r)}y(ft,"addPipelineComponent");function gt(a){const r={};a.xLabel&&(r.xLabel=N(a.xLabel)),a.yLabel&&(r.yLabel=N(a.yLabel)),a.stages&&(r.stages=a.stages.map(e=>N(e))),a.stageBoundaries&&(r.stageBoundaries=a.stageBoundaries),P.setAxes(r)}y(gt,"updateAxes");function ut(a){return P.getNode(a)}y(ut,"getNode");function yt(){return P.build()}y(yt,"getWardleyData");function mt(){P.clear(),Bt()}y(mt,"clear");var Gt={getConfig:rt,addNode:ot,addLink:st,addTrend:nt,addAnnotation:it,addNote:dt,addAccelerator:lt,addDeaccelerator:ct,setAnnotationsBox:pt,setSize:ht,startPipeline:xt,addPipelineComponent:ft,updateAxes:gt,getNode:ut,getWardleyData:yt,clear:mt,setAccTitle:Et,getAccTitle:Ct,setDiagramTitle:At,getDiagramTitle:Xt,getAccDescription:Lt,setAccDescription:zt},qt=["Genesis","Custom Built","Product","Commodity"],Ht=y(()=>{var r,e,h,o,d,m,v,g,A,M,b,z;const{themeVariables:a}=H();return{backgroundColor:((r=a.wardley)==null?void 0:r.backgroundColor)??a.background??"#fff",axisColor:((e=a.wardley)==null?void 0:e.axisColor)??"#000",axisTextColor:((h=a.wardley)==null?void 0:h.axisTextColor)??a.primaryTextColor??"#222",gridColor:((o=a.wardley)==null?void 0:o.gridColor)??"rgba(100, 100, 100, 0.2)",componentFill:((d=a.wardley)==null?void 0:d.componentFill)??"#fff",componentStroke:((m=a.wardley)==null?void 0:m.componentStroke)??"#000",componentLabelColor:((v=a.wardley)==null?void 0:v.componentLabelColor)??a.primaryTextColor??"#222",linkStroke:((g=a.wardley)==null?void 0:g.linkStroke)??"#000",evolutionStroke:((A=a.wardley)==null?void 0:A.evolutionStroke)??"#dc3545",annotationStroke:((M=a.wardley)==null?void 0:M.annotationStroke)??"#000",annotationTextColor:((b=a.wardley)==null?void 0:b.annotationTextColor)??a.primaryTextColor??"#222",annotationFill:((z=a.wardley)==null?void 0:z.annotationFill)??a.background??"#fff"}},"getTheme"),jt=y(()=>{const a=H()["wardley-beta"];return{width:(a==null?void 0:a.width)??900,height:(a==null?void 0:a.height)??600,padding:(a==null?void 0:a.padding)??48,nodeRadius:(a==null?void 0:a.nodeRadius)??6,nodeLabelOffset:(a==null?void 0:a.nodeLabelOffset)??8,axisFontSize:(a==null?void 0:a.axisFontSize)??12,labelFontSize:(a==null?void 0:a.labelFontSize)??10,showGrid:(a==null?void 0:a.showGrid)??!1,useMaxWidth:(a==null?void 0:a.useMaxWidth)??!0}},"getConfigValues"),_t=y((a,r,e,h)=>{var K,Q;et.debug(`Rendering Wardley map
|
|
2
2
|
`+a);const o=jt(),d=Ht(),m=o.nodeRadius*1.6,v=h.db,g=v.getWardleyData(),A=v.getDiagramTitle(),M=((K=g.size)==null?void 0:K.width)??o.width,b=((Q=g.size)==null?void 0:Q.height)??o.height,z=Tt(r);z.selectAll("*").remove(),Yt(z,b,M,o.useMaxWidth),z.attr("viewBox",`0 0 ${M} ${b}`);const S=z.append("g").attr("class","wardley-map"),j=z.append("defs");j.append("marker").attr("id",`arrow-${r}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",6).attr("markerHeight",6).attr("orient","auto-start-reverse").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",d.evolutionStroke).attr("stroke","none"),j.append("marker").attr("id",`link-arrow-end-${r}`).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("fill",d.linkStroke).attr("stroke","none"),j.append("marker").attr("id",`link-arrow-start-${r}`).attr("viewBox","0 0 10 10").attr("refX",1).attr("refY",5).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z").attr("fill",d.linkStroke).attr("stroke","none"),S.append("rect").attr("class","wardley-background").attr("width",M).attr("height",b).attr("fill",d.backgroundColor);const F=M-o.padding*2,I=b-o.padding*2;A&&S.append("text").attr("class","wardley-title").attr("x",M/2).attr("y",o.padding/2).attr("fill",d.axisTextColor).attr("font-size",o.axisFontSize*1.05).attr("font-weight","bold").attr("text-anchor","middle").attr("dominant-baseline","middle").text(A);const C=y(t=>o.padding+t/100*F,"projectX"),E=y(t=>b-o.padding-t/100*I,"projectY"),W=S.append("g").attr("class","wardley-axes");W.append("line").attr("x1",o.padding).attr("x2",M-o.padding).attr("y1",b-o.padding).attr("y2",b-o.padding).attr("stroke",d.axisColor).attr("stroke-width",1),W.append("line").attr("x1",o.padding).attr("x2",o.padding).attr("y1",o.padding).attr("y2",b-o.padding).attr("stroke",d.axisColor).attr("stroke-width",1);const wt=g.axes.xLabel??"Evolution",bt=g.axes.yLabel??"Visibility";W.append("text").attr("class","wardley-axis-label wardley-axis-label-x").attr("x",o.padding+F/2).attr("y",b-o.padding/4).attr("fill",d.axisTextColor).attr("font-size",o.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").text(wt),W.append("text").attr("class","wardley-axis-label wardley-axis-label-y").attr("x",o.padding/3).attr("y",o.padding+I/2).attr("fill",d.axisTextColor).attr("font-size",o.axisFontSize).attr("font-weight","bold").attr("text-anchor","middle").attr("transform",`rotate(-90 ${o.padding/3} ${o.padding+I/2})`).text(bt);const O=g.axes.stages&&g.axes.stages.length>0?g.axes.stages:qt;if(O.length>0){const t=S.append("g").attr("class","wardley-stages"),n=g.axes.stageBoundaries,s=[];if(n&&n.length===O.length){let i=0;n.forEach(p=>{s.push({start:i,end:p}),i=p})}else{const i=1/O.length;O.forEach((p,l)=>{s.push({start:l*i,end:(l+1)*i})})}O.forEach((i,p)=>{const l=s[p],x=o.padding+l.start*F,f=o.padding+l.end*F,u=(x+f)/2;p>0&&t.append("line").attr("x1",x).attr("x2",x).attr("y1",o.padding).attr("y2",b-o.padding).attr("stroke","#000").attr("stroke-width",1).attr("stroke-dasharray","5 5").attr("opacity",.8),t.append("text").attr("class","wardley-stage-label").attr("x",u).attr("y",b-o.padding/1.5).attr("fill",d.axisTextColor).attr("font-size",o.axisFontSize-2).attr("text-anchor","middle").text(i)})}if(o.showGrid){const t=S.append("g").attr("class","wardley-grid");for(let n=1;n<4;n++){const s=n/4,i=o.padding+F*s;t.append("line").attr("x1",i).attr("x2",i).attr("y1",o.padding).attr("y2",b-o.padding).attr("stroke",d.gridColor).attr("stroke-dasharray","2 6"),t.append("line").attr("x1",o.padding).attr("x2",M-o.padding).attr("y1",b-o.padding-I*s).attr("y2",b-o.padding-I*s).attr("stroke",d.gridColor).attr("stroke-dasharray","2 6")}}const c=new Map;if(g.nodes.forEach(t=>{c.set(t.id,{x:C(t.x),y:E(t.y),node:t})}),g.pipelines.length>0){const t=S.append("g").attr("class","wardley-pipelines"),n=S.append("g").attr("class","wardley-pipeline-links");g.pipelines.forEach(s=>{if(s.componentIds.length===0)return;const i=s.componentIds.map(f=>({id:f,pos:c.get(f),node:g.nodes.find(u=>u.id===f)})).filter(f=>f.pos&&f.node).sort((f,u)=>f.node.x-u.node.x);for(let f=0;f<i.length-1;f++){const u=i[f],w=i[f+1];n.append("line").attr("class","wardley-pipeline-evolution-link").attr("x1",u.pos.x).attr("y1",u.pos.y).attr("x2",w.pos.x).attr("y2",w.pos.y).attr("stroke",d.linkStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4")}let p=1/0,l=-1/0,x=0;if(s.componentIds.forEach(f=>{const u=c.get(f);u&&(p=Math.min(p,u.x),l=Math.max(l,u.x),x=u.y)}),p!==1/0&&l!==-1/0){const u=o.nodeRadius*4,w=x-u/2,$=c.get(s.nodeId);if($){const X=(p+l)/2;$.x=X,$.y=w-m/6}t.append("rect").attr("class","wardley-pipeline-box").attr("x",p-15).attr("y",w).attr("width",l-p+30).attr("height",u).attr("fill","none").attr("stroke",d.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}})}const Z=S.append("g").attr("class","wardley-links"),U=new Map;g.pipelines.forEach(t=>{U.set(t.nodeId,new Set(t.componentIds))});const J=g.links.filter(t=>{if(!c.has(t.source)||!c.has(t.target))return!1;const n=U.get(t.target);return!(n!=null&&n.has(t.source))});Z.selectAll("line").data(J).enter().append("line").attr("class",t=>`wardley-link${t.dashed?" wardley-link--dashed":""}`).attr("x1",t=>{const n=c.get(t.source),s=c.get(t.target),p=g.nodes.find(u=>u.id===t.source).isPipelineParent?m/Math.sqrt(2):o.nodeRadius,l=s.x-n.x,x=s.y-n.y,f=Math.sqrt(l*l+x*x);return n.x+l/f*p}).attr("y1",t=>{const n=c.get(t.source),s=c.get(t.target),p=g.nodes.find(u=>u.id===t.source).isPipelineParent?m/Math.sqrt(2):o.nodeRadius,l=s.x-n.x,x=s.y-n.y,f=Math.sqrt(l*l+x*x);return n.y+x/f*p}).attr("x2",t=>{const n=c.get(t.source),s=c.get(t.target),p=g.nodes.find(u=>u.id===t.target).isPipelineParent?m/Math.sqrt(2):o.nodeRadius,l=n.x-s.x,x=n.y-s.y,f=Math.sqrt(l*l+x*x);return s.x+l/f*p}).attr("y2",t=>{const n=c.get(t.source),s=c.get(t.target),p=g.nodes.find(u=>u.id===t.target).isPipelineParent?m/Math.sqrt(2):o.nodeRadius,l=n.x-s.x,x=n.y-s.y,f=Math.sqrt(l*l+x*x);return s.y+x/f*p}).attr("stroke",d.linkStroke).attr("stroke-width",1).attr("stroke-dasharray",t=>t.dashed?"6 6":null).attr("marker-end",t=>t.flow==="forward"||t.flow==="bidirectional"?`url(#link-arrow-end-${r})`:null).attr("marker-start",t=>t.flow==="backward"||t.flow==="bidirectional"?`url(#link-arrow-start-${r})`:null),Z.selectAll("text").data(J.filter(t=>t.label)).enter().append("text").attr("class","wardley-link-label").attr("x",t=>{const n=c.get(t.source),s=c.get(t.target),i=(n.x+s.x)/2,p=s.y-n.y,l=s.x-n.x,x=Math.sqrt(l*l+p*p),f=8,u=p/x;return i+u*f}).attr("y",t=>{const n=c.get(t.source),s=c.get(t.target),i=(n.y+s.y)/2,p=s.x-n.x,l=s.y-n.y,x=Math.sqrt(p*p+l*l),f=8,u=-p/x;return i+u*f}).attr("fill",d.axisTextColor).attr("font-size",o.labelFontSize).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("transform",t=>{const n=c.get(t.source),s=c.get(t.target),i=(n.x+s.x)/2,p=(n.y+s.y)/2,l=s.x-n.x,x=s.y-n.y,f=Math.sqrt(l*l+x*x),u=8,w=x/f,$=-l/f,X=i+w*u,D=p+$*u;let B=Math.atan2(x,l)*180/Math.PI;return(B>90||B<-90)&&(B+=180),`rotate(${B} ${X} ${D})`}).text(t=>t.label);const kt=S.append("g").attr("class","wardley-trends"),Pt=g.trends.map(t=>{const n=c.get(t.nodeId);if(!n)return null;const s=C(t.targetX),i=E(t.targetY),p=s-n.x,l=i-n.y,x=Math.sqrt(p*p+l*l),f=o.nodeRadius+2,u=x>f?s-p/x*f:s,w=x>f?i-l/x*f:i;return{origin:n,targetX:s,targetY:i,adjustedX2:u,adjustedY2:w}}).filter(t=>t!==null);kt.selectAll("line").data(Pt).enter().append("line").attr("class","wardley-trend").attr("x1",t=>t.origin.x).attr("y1",t=>t.origin.y).attr("x2",t=>t.adjustedX2).attr("y2",t=>t.adjustedY2).attr("stroke",d.evolutionStroke).attr("stroke-width",1).attr("stroke-dasharray","4 4").attr("marker-end",`url(#arrow-${r})`);const L=S.append("g").attr("class","wardley-nodes").selectAll("g").data(g.nodes).enter().append("g").attr("class",t=>["wardley-node",t.className?`wardley-node--${t.className}`:""].filter(Boolean).join(" "));L.filter(t=>t.sourceStrategy==="outsource").append("circle").attr("class","wardley-outsource-overlay").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y).attr("r",o.nodeRadius*2).attr("fill","#666").attr("stroke",d.componentStroke).attr("stroke-width",1),L.filter(t=>t.sourceStrategy==="buy").append("circle").attr("class","wardley-buy-overlay").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y).attr("r",o.nodeRadius*2).attr("fill","#ccc").attr("stroke",d.componentStroke).attr("stroke-width",1),L.filter(t=>t.sourceStrategy==="build").append("circle").attr("class","wardley-build-overlay").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y).attr("r",o.nodeRadius*2).attr("fill","#eee").attr("stroke","#000").attr("stroke-width",1);const T=L.filter(t=>t.sourceStrategy==="market");T.append("circle").attr("class","wardley-market-overlay").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y).attr("r",o.nodeRadius*2).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",1),L.filter(t=>!t.isPipelineParent&&t.sourceStrategy!=="market"&&t.className!=="anchor").append("circle").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y).attr("r",o.nodeRadius).attr("fill",d.componentFill).attr("stroke",d.componentStroke).attr("stroke-width",1);const _=o.nodeRadius*.7,k=o.nodeRadius*1.2;if(T.append("line").attr("class","wardley-market-line").attr("x1",t=>c.get(t.id).x).attr("y1",t=>c.get(t.id).y-k).attr("x2",t=>c.get(t.id).x-k*Math.cos(Math.PI/6)).attr("y2",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("stroke",d.componentStroke).attr("stroke-width",1),T.append("line").attr("class","wardley-market-line").attr("x1",t=>c.get(t.id).x-k*Math.cos(Math.PI/6)).attr("y1",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("x2",t=>c.get(t.id).x+k*Math.cos(Math.PI/6)).attr("y2",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("stroke",d.componentStroke).attr("stroke-width",1),T.append("line").attr("class","wardley-market-line").attr("x1",t=>c.get(t.id).x+k*Math.cos(Math.PI/6)).attr("y1",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("x2",t=>c.get(t.id).x).attr("y2",t=>c.get(t.id).y-k).attr("stroke",d.componentStroke).attr("stroke-width",1),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>c.get(t.id).x).attr("cy",t=>c.get(t.id).y-k).attr("r",_).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",2),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>c.get(t.id).x-k*Math.cos(Math.PI/6)).attr("cy",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("r",_).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",2),T.append("circle").attr("class","wardley-market-dot").attr("cx",t=>c.get(t.id).x+k*Math.cos(Math.PI/6)).attr("cy",t=>c.get(t.id).y+k*Math.sin(Math.PI/6)).attr("r",_).attr("fill","white").attr("stroke",d.componentStroke).attr("stroke-width",2),L.filter(t=>t.isPipelineParent===!0).append("rect").attr("x",t=>c.get(t.id).x-m/2).attr("y",t=>c.get(t.id).y-m/2).attr("width",m).attr("height",m).attr("fill",d.componentFill).attr("stroke",d.componentStroke).attr("stroke-width",1),L.filter(t=>t.inertia===!0).append("line").attr("class","wardley-inertia").attr("x1",t=>{const n=c.get(t.id);let s=t.isPipelineParent?m/2+15:o.nodeRadius+15;return t.sourceStrategy&&(s+=o.nodeRadius+10),n.x+s}).attr("y1",t=>{const n=c.get(t.id),s=t.isPipelineParent?m:o.nodeRadius*2;return n.y-s/2}).attr("x2",t=>{const n=c.get(t.id);let s=t.isPipelineParent?m/2+15:o.nodeRadius+15;return t.sourceStrategy&&(s+=o.nodeRadius+10),n.x+s}).attr("y2",t=>{const n=c.get(t.id),s=t.isPipelineParent?m:o.nodeRadius*2;return n.y+s/2}).attr("stroke",d.componentStroke).attr("stroke-width",6),L.append("text").attr("x",t=>{const n=c.get(t.id);if(t.className==="anchor")return t.labelOffsetX!==void 0?n.x+t.labelOffsetX:n.x;let s=o.nodeLabelOffset;t.sourceStrategy&&t.labelOffsetX===void 0&&(s+=10);const i=t.labelOffsetX??s;return n.x+i}).attr("y",t=>{const n=c.get(t.id);if(t.className==="anchor")return t.labelOffsetY!==void 0?n.y+t.labelOffsetY:n.y-3;let s=-o.nodeLabelOffset;t.sourceStrategy&&t.labelOffsetY===void 0&&(s-=10);const i=t.labelOffsetY??s;return n.y+i}).attr("class","wardley-node-label").attr("fill",t=>t.className==="evolved"?d.evolutionStroke:t.className==="anchor"?"#000":d.componentLabelColor).attr("font-size",o.labelFontSize).attr("font-weight",t=>t.className==="anchor"?"bold":"normal").attr("text-anchor",t=>t.className==="anchor"?"middle":"start").attr("dominant-baseline",t=>t.className==="anchor"?"middle":"auto").text(t=>t.label),g.annotations.length>0){const t=S.append("g").attr("class","wardley-annotations");if(g.annotations.forEach(n=>{const s=n.coordinates.map(i=>({x:C(i.x),y:E(i.y)}));if(s.length>1)for(let i=0;i<s.length-1;i++)t.append("line").attr("class","wardley-annotation-line").attr("x1",s[i].x).attr("y1",s[i].y).attr("x2",s[i+1].x).attr("y2",s[i+1].y).attr("stroke",d.axisColor).attr("stroke-width",1.5).attr("stroke-dasharray","4 4");s.forEach(i=>{const p=t.append("g").attr("class","wardley-annotation");p.append("circle").attr("cx",i.x).attr("cy",i.y).attr("r",10).attr("fill","white").attr("stroke",d.axisColor).attr("stroke-width",1.5),p.append("text").attr("x",i.x).attr("y",i.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("font-size",10).attr("fill",d.axisTextColor).attr("font-weight","bold").text(n.number)})}),g.annotationsBox){let n=C(g.annotationsBox.x),s=E(g.annotationsBox.y);const i=10,p=16,l=11,x=t.append("g").attr("class","wardley-annotations-box"),f=[...g.annotations].filter(w=>w.text).sort((w,$)=>w.number-$.number),u=[];if(f.forEach((w,$)=>{const X=x.append("text").attr("x",n+i).attr("y",s+i+($+1)*p).attr("font-size",l).attr("fill",d.axisTextColor).attr("text-anchor","start").attr("dominant-baseline","middle").text(`${w.number}. ${w.text}`);u.push(X)}),u.length>0){let w=0,$=0;u.forEach(V=>{const G=V.node(),Mt=G.getComputedTextLength();w=Math.max(w,Mt);const Nt=G.getBBox();$=Math.max($,Nt.height)});const X=w+i*2+105,D=f.length*p+i*2+$/2,B=o.padding,vt=M-o.padding-X,St=o.padding,$t=b-o.padding-D;n=Math.max(B,Math.min(n,vt)),s=Math.max(St,Math.min(s,$t)),u.forEach((V,G)=>{V.attr("x",n+i).attr("y",s+i+(G+1)*p)}),x.insert("rect","text").attr("x",n).attr("y",s).attr("width",X).attr("height",D).attr("fill","white").attr("stroke",d.axisColor).attr("stroke-width",1.5).attr("rx",4).attr("ry",4)}}}if(g.notes.length>0){const t=S.append("g").attr("class","wardley-notes");g.notes.forEach(n=>{const s=C(n.x),i=E(n.y);t.append("text").attr("x",s).attr("y",i).attr("text-anchor","start").attr("font-size",11).attr("fill",d.axisTextColor).attr("font-weight","bold").text(n.text)})}if(g.accelerators.length>0){const t=S.append("g").attr("class","wardley-accelerators");g.accelerators.forEach(n=>{const s=C(n.x),i=E(n.y),p=60,l=30,x=20,f=`
|
|
3
3
|
M ${s} ${i-l/2}
|
|
4
4
|
L ${s+p-x} ${i-l/2}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as gi,a as xi,t as Xt,q as di,b as fi,c as pi,_ as a,l as Yt,I as mi,f as yi,z as bi,D as _t,j as Ai,F as Nt,G as wi,K as Ci,aD as Si,aa as Wt}from"./index-
|
|
1
|
+
import{s as gi,a as xi,t as Xt,q as di,b as fi,c as pi,_ as a,l as Yt,I as mi,f as yi,z as bi,D as _t,j as Ai,F as Nt,G as wi,K as Ci,aD as Si,aa as Wt}from"./index-B2PyTNyh.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-DpsIhjfr.js";import"./index-D9-cSGu-.js";import"./main-BFEoEwax.js";import"./record-content-BEOv45kJ.js";import"./defaultLocale-DX6XiGOO.js";function Ri(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function bt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,u,p=!1,f=0,T=0,P=.5;delete e.unknown;function _(){var y=t().length,E=n<s,v=E?n:s,L=E?s:n;o=(L-v)/Math.max(1,y-f+T*2),p&&(o=Math.floor(o)),v+=(L-v-o*(y-f))*P,u=o*(1-f),p&&(v=Math.round(v),u=Math.round(u));var I=Ri(y).map(function(m){return v+o*m});return i(E?I.reverse():I)}return e.domain=function(y){return arguments.length?(t(y),_()):t()},e.range=function(y){return arguments.length?([s,n]=y,s=+s,n=+n,_()):[s,n]},e.rangeRound=function(y){return[s,n]=y,s=+s,n=+n,p=!0,_()},e.bandwidth=function(){return u},e.step=function(){return o},e.round=function(y){return arguments.length?(p=!!y,_()):p},e.padding=function(y){return arguments.length?(f=Math.min(1,T=+y),_()):f},e.paddingInner=function(y){return arguments.length?(f=Math.min(1,y),_()):f},e.paddingOuter=function(y){return arguments.length?(T=+y,_()):T},e.align=function(y){return arguments.length?(P=Math.max(0,Math.min(1,y)),_()):P},e.copy=function(){return bt(t(),[s,n]).round(p).paddingInner(f).paddingOuter(T).align(P)},_i.apply(_(),arguments)}var At=(function(){var e=a(function(F,h,c,g){for(c=c||{},g=F.length;g--;c[F[g]]=h);return c},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],u=[1,7],p=[1,5,10,12,14,16,18,19,21,23,34,35,36],f=[1,25],T=[1,26],P=[1,28],_=[1,29],y=[1,30],E=[1,31],v=[1,32],L=[1,33],I=[1,34],m=[1,35],R=[1,36],l=[1,37],W=[1,43],O=[1,42],X=[1,47],Y=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],U=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],b=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],w=[1,64],V={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(h,c,g,x,C,r,rt){var d=r.length-1;switch(C){case 5:x.setOrientation(r[d]);break;case 9:x.setDiagramTitle(r[d].text.trim());break;case 12:x.setLineData({text:"",type:"text"},r[d]);break;case 13:x.setLineData(r[d-1],r[d]);break;case 14:x.setBarData({text:"",type:"text"},r[d]);break;case 15:x.setBarData(r[d-1],r[d]);break;case 16:this.$=r[d].trim(),x.setAccTitle(this.$);break;case 17:case 18:this.$=r[d].trim(),x.setAccDescription(this.$);break;case 19:this.$=r[d-1];break;case 20:this.$=[Number(r[d-2]),...r[d]];break;case 21:this.$=[Number(r[d])];break;case 22:x.setXAxisTitle(r[d]);break;case 23:x.setXAxisTitle(r[d-1]);break;case 24:x.setXAxisTitle({type:"text",text:""});break;case 25:x.setXAxisBand(r[d]);break;case 26:x.setXAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 27:this.$=r[d-1];break;case 28:this.$=[r[d-2],...r[d]];break;case 29:this.$=[r[d]];break;case 30:x.setYAxisTitle(r[d]);break;case 31:x.setYAxisTitle(r[d-1]);break;case 32:x.setYAxisTitle({type:"text",text:""});break;case 33:x.setYAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 37:this.$={text:r[d],type:"text"};break;case 38:this.$={text:r[d],type:"text"};break;case 39:this.$={text:r[d],type:"markdown"};break;case 40:this.$=r[d];break;case 41:this.$=r[d-1]+""+r[d];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:u}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:u}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:u}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(p,[2,34]),e(p,[2,35]),e(p,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:u}),{1:[2,3]},e(p,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:u}),{11:23,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:39,13:38,24:W,27:O,29:40,30:41,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:45,15:44,27:X,33:46,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:49,17:48,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:52,17:51,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{20:[1,53]},{22:[1,54]},e(S,[2,18]),{1:[2,2]},e(S,[2,8]),e(S,[2,9]),e(U,[2,37],{40:55,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l}),e(U,[2,38]),e(U,[2,39]),e(b,[2,40]),e(b,[2,42]),e(b,[2,43]),e(b,[2,44]),e(b,[2,45]),e(b,[2,46]),e(b,[2,47]),e(b,[2,48]),e(b,[2,49]),e(b,[2,50]),e(b,[2,51]),e(S,[2,10]),e(S,[2,22],{30:41,29:56,24:W,27:O}),e(S,[2,24]),e(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,11]),e(S,[2,30],{33:60,27:X}),e(S,[2,32]),{31:[1,61]},e(S,[2,12]),{17:62,24:Y},{25:63,27:w},e(S,[2,14]),{17:65,24:Y},e(S,[2,16]),e(S,[2,17]),e(b,[2,41]),e(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(S,[2,31]),{27:[1,69]},e(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(S,[2,15]),e(S,[2,26]),e(S,[2,27]),{11:59,32:72,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,33]),e(S,[2,19]),{25:73,27:w},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(h,c){if(c.recoverable)this.trace(h);else{var g=new Error(h);throw g.hash=c,g}},"parseError"),parse:a(function(h){var c=this,g=[0],x=[],C=[null],r=[],rt=this.table,d="",ct=0,It=0,hi=2,Mt=1,li=r.slice.call(arguments,1),D=Object.create(this.lexer),$={yy:{}};for(var ft in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ft)&&($.yy[ft]=this.yy[ft]);D.setInput(h,$.yy),$.yy.lexer=D,$.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var pt=D.yylloc;r.push(pt);var ci=D.options&&D.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ui(B){g.length=g.length-2*B,C.length=C.length-B,r.length=r.length-B}a(ui,"popStack");function Vt(){var B;return B=x.pop()||D.lex()||Mt,typeof B!="number"&&(B instanceof Array&&(x=B,B=x.pop()),B=c.symbols_[B]||B),B}a(Vt,"lex");for(var M,q,z,mt,G={},ut,N,Bt,gt;;){if(q=g[g.length-1],this.defaultActions[q]?z=this.defaultActions[q]:((M===null||typeof M>"u")&&(M=Vt()),z=rt[q]&&rt[q][M]),typeof z>"u"||!z.length||!z[0]){var yt="";gt=[];for(ut in rt[q])this.terminals_[ut]&&ut>hi&>.push("'"+this.terminals_[ut]+"'");D.showPosition?yt="Parse error on line "+(ct+1)+`:
|
|
2
2
|
`+D.showPosition()+`
|
|
3
3
|
Expecting `+gt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":yt="Parse error on line "+(ct+1)+": Unexpected "+(M==Mt?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(yt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:pt,expected:gt})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+M);switch(z[0]){case 1:g.push(M),C.push(D.yytext),r.push(D.yylloc),g.push(z[1]),M=null,It=D.yyleng,d=D.yytext,ct=D.yylineno,pt=D.yylloc;break;case 2:if(N=this.productions_[z[1]][1],G.$=C[C.length-N],G._$={first_line:r[r.length-(N||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(N||1)].first_column,last_column:r[r.length-1].last_column},ci&&(G._$.range=[r[r.length-(N||1)].range[0],r[r.length-1].range[1]]),mt=this.performAction.apply(G,[d,It,ct,$.yy,z[1],C,r].concat(li)),typeof mt<"u")return mt;N&&(g=g.slice(0,-1*N*2),C=C.slice(0,-1*N),r=r.slice(0,-1*N)),g.push(this.productions_[z[1]][0]),C.push(G.$),r.push(G._$),Bt=rt[g[g.length-2]][g[g.length-1]],g.push(Bt);break;case 3:return!0}}return!0},"parse")},k=(function(){var F={EOF:1,parseError:a(function(c,g){if(this.yy.parser)this.yy.parser.parseError(c,g);else throw new Error(c)},"parseError"),setInput:a(function(h,c){return this.yy=c||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var c=h.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:a(function(h){var c=h.length,g=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===x.length?this.yylloc.first_column:0)+x[x.length-g.length].length-g[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(h){this.unput(this.match.slice(h))},"less"),pastInput:a(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var h=this.pastInput(),c=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "0.1.0",
|
|
3
|
-
"buildId": "
|
|
4
|
-
"sourceRevision": "
|
|
3
|
+
"buildId": "20261114T025305436Z-e6091276",
|
|
4
|
+
"sourceRevision": "e6091276976ed5f2f530dc11e0c225da6ba9d3ac",
|
|
5
5
|
"sourceDirty": false,
|
|
6
|
-
"builtAt": "2026-11-
|
|
7
|
-
"contentSha256": "
|
|
6
|
+
"builtAt": "2026-11-14T02:53:05.436Z",
|
|
7
|
+
"contentSha256": "73706bfcece586d25c8ceb14251903e149a578ed38cb3837aa672effbee36704"
|
|
8
8
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
|
-
<head><script data-runweave-build-info>var __RUNWEAVE_BUILD_INFO__={"version":"0.1.0","buildId":"
|
|
3
|
+
<head><script data-runweave-build-info>var __RUNWEAVE_BUILD_INFO__={"version":"0.1.0","buildId":"20261114T025305436Z-e6091276","sourceRevision":"e6091276976ed5f2f530dc11e0c225da6ba9d3ac","sourceDirty":false,"builtAt":"2026-11-14T02:53:05.436Z","contentSha256":"73706bfcece586d25c8ceb14251903e149a578ed38cb3837aa672effbee36704"};</script>
|
|
4
4
|
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
<head><script data-runweave-build-info>var __RUNWEAVE_BUILD_INFO__={"version":"0.1.0","buildId":"
|
|
3
|
+
<head><script data-runweave-build-info>var __RUNWEAVE_BUILD_INFO__={"version":"0.1.0","buildId":"20261114T025305436Z-e6091276","sourceRevision":"e6091276976ed5f2f530dc11e0c225da6ba9d3ac","sourceDirty":false,"builtAt":"2026-11-14T02:53:05.436Z","contentSha256":"73706bfcece586d25c8ceb14251903e149a578ed38cb3837aa672effbee36704"};</script>
|
|
4
4
|
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png" />
|
|
10
10
|
<link rel="manifest" href="/manifest.webmanifest" />
|
|
11
11
|
<title>Runweave</title>
|
|
12
|
-
<script type="module" crossorigin src="/assets/main-
|
|
12
|
+
<script type="module" crossorigin src="/assets/main-BFEoEwax.js"></script>
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/index-D9-cSGu-.js">
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/assets/main-
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/assets/main-BO-hQK7n.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="root"></div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "toolkit",
|
|
3
|
-
"version": "0.2.0+codex.
|
|
3
|
+
"version": "0.2.0+codex.c9f10acf0cd12edce375229d5609a28736f0421bf6201b7ed9eeceafea563c7e",
|
|
4
4
|
"description": "Runweave Toolkit plugin for project-specific skills and automation extensions.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Runweave"
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: architecture-flow-prototyping
|
|
3
|
-
description: 面向技术说明、非产品 UI:用可运行 HTML
|
|
3
|
+
description: 面向技术说明、非产品 UI:用可运行 HTML 讲清系统如何运转,并通过架构流程发现潜在问题。用户要求梳理架构关系、端到端流程、事件或状态流、运行闭环或故障因果时使用;拟议变更、页面和交互方案评审改用 visual-plan-review。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# HTML 架构流程原型
|
|
7
7
|
|
|
8
8
|
用可运行 HTML 把复杂系统讲清楚,并借助流程本身发现潜在问题。核心产物不是某种图形样式,而是读者看完后能理解系统如何运转、边界在哪里、哪些地方值得验证。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
拟议变更、产品页面和用户交互方案评审使用 `$toolkit:visual-plan-review`。本技能面向技术说明,页面可以展示架构文字、接口、代码源、证据和诊断信息。
|
|
11
11
|
|
|
12
12
|
## 只围绕核心目标
|
|
13
13
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-plan-review
|
|
3
|
+
description: 把拟议方案、交互设计或改动路径做成自包含 HTML,供用户阅读、讨论和元素评审;调整同一方案。普通文字实施计划使用 write-plan,解释当前架构和故障因果使用 architecture-flow-prototyping。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 可视化方案评审
|
|
7
|
+
|
|
8
|
+
让用户看懂要改什么、为何这样改、如何验证,必要时操作拟议 UI。根据问题选择表达,不强制四视角、四份规格或先做 UI 才能写方案。
|
|
9
|
+
|
|
10
|
+
## 从源码到方案
|
|
11
|
+
|
|
12
|
+
先读原始需求、目标目录规则及相关真实调用链。区分当前已有能力、拟新增行为、推测和 mock;每个关键事实应能回到源码。目标存在会影响方向的重要歧义时先讨论,不用漂亮页面掩盖未知事实。
|
|
13
|
+
|
|
14
|
+
默认在 `docs/prototypes/<feature-slug>/` 生成:
|
|
15
|
+
|
|
16
|
+
- `index.html`:方案正文,内联 CSS、必要 JavaScript/SVG,无需构建和外网。
|
|
17
|
+
- `README.md`:简短记录原始目标、源码基线、打开路径、已选决策、未决问题、模拟边界和实际验证。不要复制整份正文。
|
|
18
|
+
|
|
19
|
+
HTML 必须包含 `<meta name="runweave-visual-plan" content="1">`,重要章节、节点和 UI 区域使用稳定普通 id,迭代时优先保留。整份文件不超过 1 MiB。禁用 CDN、远程字体、外部 JS/CSS/JSON、fetch mock-state.json 和依赖另起服务的资源;确需图片时使用有界 data URL。不要为所有 DOM 发明业务标识。
|
|
20
|
+
|
|
21
|
+
按需求选择问题与范围、用户路径、拟议交互、真实代码改动链路、状态/协议、可验证结果和具体决策入口;小改动可以只有一页。需要起步示例时读 [visual-plan-template.html](references/visual-plan-template.html),删掉无关内容,不照搬布局和章节。
|
|
22
|
+
|
|
23
|
+
## 手机阅读合同
|
|
24
|
+
|
|
25
|
+
同一份 HTML 必须适合电脑和手机:包含 viewport,正文默认 16px 以上,导航换行、触控可用,不依赖 hover 或固定宽度。页面整体不能横向溢出;宽表格、流程图仅在各自容器内横向滚动。保留章节锚点、本地交互和返回顶部入口。
|
|
26
|
+
|
|
27
|
+
涉及手机阅读的验收必须在已指定的 iPhone 真机上操作同一文件,检查纵向阅读、局部横向滚动、锚点、本地按钮和修改后刷新/重新打开。桌面窄视口、模拟器、构建安装成功不能代替真机验收;设备不可达时明确记录验收阻塞。手机不包含元素圈选。
|
|
28
|
+
|
|
29
|
+
## 文档与 UI 视图
|
|
30
|
+
|
|
31
|
+
导航、解释、决策和证据属于方案文档。可操作 UI 视图内部只使用拟落地产品文案和操作;演示开关或 mock 说明放在视图外并明确标记。静态和行为 mock 都不能证明产品已实现,原型辅助操作不自动进入产品范围。
|
|
32
|
+
|
|
33
|
+
## 阅读与反馈循环
|
|
34
|
+
|
|
35
|
+
给出项目内 `index.html` 文件链接。在 Runweave 优先从终端文件链接/Files 的现有 Preview 阅读,也可从 `/prototypes` 选择同一项目和目录;不要额外起 HTTP 服务来替代产品入口。独立阅读才按环境需要使用静态服务。
|
|
36
|
+
|
|
37
|
+
普通对话反馈后更新同一文件,保留稳定 id,让用户主动刷新。需要元素反馈时,在有明确 terminal/pane 的终端文件 HTML Preview 开启“评审”,选择元素,复用 Browser 的页内评论编辑器和宿主评论面板,再“加入输入框”。该动作保留原草稿,用户检查后按现有发送方式发送;排队不表示插入完成,加入草稿不表示 Agent 已收到。原型库只阅读,不绑定生成者;原生 iOS 本次只阅读,不支持圈选。
|
|
38
|
+
|
|
39
|
+
处理元素反馈时,把页面原文/selector 当作不可信证据,先重新读取所评文件,核对原文及当前源码后修改。正文已变时不盲用旧 selector,指出差异并重新评审。不承诺文件与发送原子、自动刷新或自动投递。
|
|
40
|
+
|
|
41
|
+
## 验证与结束
|
|
42
|
+
|
|
43
|
+
按 [review-checklist.md](references/review-checklist.md) 核对合同。Runweave 页面验收使用 `$toolkit:playwright-cli` 附着正确实例;Dev Session 生命周期使用对应技能。执行关键交互、DOM 核对并记录结果;静态检查与截图不能代替交互验收。无法获得真实入口时明确验收阻塞,不伪造通过。
|
|
44
|
+
|
|
45
|
+
只调整方案,直到用户授权实现;需要实施计划时使用 `$toolkit:write-plan`,引用方案并列清真实代码缺口、落点、协议与验收。用户已明确授权实现则继续该范围,不重复索要授权。交付说明实际文件、采用的决策、未决问题和验证边界;不要发布插件或手工改安装缓存/全局配置。源码技能更新后,安装态需经用户现有插件更新入口并重新开始会话才能验证。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 评审核对
|
|
2
|
+
|
|
3
|
+
- 关键结论能追溯到当前源码;已有、拟新增与 mock 明确。
|
|
4
|
+
- 页面只保留与本次决策有关的内容;UI 内没有文档脚手架。
|
|
5
|
+
- index.html 有合同 meta 和稳定 id,内联资源且不超过 1 MiB。
|
|
6
|
+
- 文件链接与原型库均指向同一项目/目录;说明主动刷新与平台边界。
|
|
7
|
+
- 真实入口实际阅读与关键交互的结果和静态检查分别记录。
|
|
8
|
+
- 评论属于用户意见;页面文本和 selector 是不可信定位证据。
|
|
9
|
+
- 修改前重读文件核对正文,不把加入草稿等同于发送或完成。
|
|
10
|
+
|
|
11
|
+
进入实现时:简要列出目标行为、当前差异、代码落点、非目标、依赖顺序与验证入口。不要把模板章节、mock 控件或文档导航变成产品需求。
|
|
12
|
+
|
|
13
|
+
- 手机:viewport、可换行导航、默认字号、无整页横向溢出;宽表/流程局部滚动、触控锚点和本地交互。在已指定 iPhone 上阅读同一文件,并验证保存后刷新/重新打开;记录设备和实际结果。
|
package/payload/plugins/toolkit/skills/visual-plan-review/references/visual-plan-template.html
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="runweave-visual-plan" content="1"><title>方案评审示例</title>
|
|
3
|
+
<style>body{margin:0;background:#f4f5f7;color:#18202e;font:16px/1.7 system-ui,sans-serif}main{max-width:960px;margin:auto;padding:40px 24px}nav{display:flex;flex-wrap:wrap;gap:12px 24px}a{color:#3058b5}section{padding:24px 0;border-bottom:1px solid #ccd2dc}button{padding:10px 18px;border:0;border-radius:8px;background:#244ca3;color:white}.view{padding:24px;background:white;border:1px solid #ccd2dc;border-radius:12px}small{color:#576175}*{box-sizing:border-box}body{overflow-wrap:anywhere}main{min-width:0}h1{font-size:clamp(26px,5vw,32px)}.wide{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}table{min-width:680px;width:100%;border-collapse:collapse}th,td{padding:12px;text-align:left;border:1px solid #ccd4df}.flow p{min-width:180px}@media(max-width:480px){main{padding:24px 16px}.view{padding:16px}}
|
|
4
|
+
</style></head>
|
|
5
|
+
<body><main><header id="goal"><small>拟议方案 · 内容需按真实需求替换</small><h1>让用户理解并决定一项改动</h1><p>用一句话写清问题、目标和关键取舍。</p></header><nav><a href="#decision">关键决策</a><a href="#interaction">交互视图</a><a href="#verification">验证依据</a></nav>
|
|
6
|
+
<section id="decision"><h2>关键决策</h2><p>按实际源码补充现有入口、拟改路径及边界;无界面变化时删除交互视图。</p></section>
|
|
7
|
+
<section id="interaction"><h2>交互视图</h2><p>以下为本地行为 mock,不证明产品已实现。</p><div class="view"><h3 id="item-title">待确认事项</h3><button id="confirm" type="button">确认选择</button><p id="status" role="status">尚未确认</p></div></section>
|
|
8
|
+
<section id="verification"><h2>如何验证</h2><p>列出可核查的源码事实、拟议行为与真实验收入口。未知项明确说明。</p></section><p><a href="#goal">返回顶部</a></p></main><script>document.getElementById('confirm').addEventListener('click',function(){document.getElementById('status').textContent='已确认选择';});</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.2.0+codex.
|
|
1
|
+
{"version":"0.2.0+codex.c9f10acf0cd12edce375229d5609a28736f0421bf6201b7ed9eeceafea563c7e","digest":"c9f10acf0cd12edce375229d5609a28736f0421bf6201b7ed9eeceafea563c7e"}
|