@openflowjs/cli 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/openflow.d.ts +2 -0
- package/dist/bin/openflow.js +8 -0
- package/dist/bin/openflow.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +38 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/flow.d.ts +1 -0
- package/dist/commands/flow.js +119 -0
- package/dist/commands/flow.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +1082 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/iteration.d.ts +1 -0
- package/dist/commands/iteration.js +131 -0
- package/dist/commands/iteration.js.map +1 -0
- package/dist/commands/mcp.d.ts +1 -0
- package/dist/commands/mcp.js +12 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/module.d.ts +1 -0
- package/dist/commands/module.js +137 -0
- package/dist/commands/module.js.map +1 -0
- package/dist/commands/plan.d.ts +1 -0
- package/dist/commands/plan.js +111 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/plugin.d.ts +1 -0
- package/dist/commands/plugin.js +246 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/preflight.d.ts +8 -0
- package/dist/commands/preflight.js +57 -0
- package/dist/commands/preflight.js.map +1 -0
- package/dist/commands/review.d.ts +1 -0
- package/dist/commands/review.js +145 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/state.d.ts +1 -0
- package/dist/commands/state.js +28 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/validate.d.ts +1 -0
- package/dist/commands/validate.js +310 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/artifacts.d.ts +140 -0
- package/dist/core/artifacts.js +809 -0
- package/dist/core/artifacts.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.js +27 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core-artifacts/marketplace.json +14 -0
- package/dist/core-artifacts/modules.json +20 -0
- package/dist/core-artifacts/openflow/.claude-plugin/plugin.json +8 -0
- package/dist/core-artifacts/openflow/.mcp.json +9 -0
- package/dist/core-artifacts/openflow/agents/openflow-artifact-reviewer.md +308 -0
- package/dist/core-artifacts/openflow/agents/openflow-code-reviewer.md +177 -0
- package/dist/core-artifacts/openflow/agents/openflow-executor-deep.md +119 -0
- package/dist/core-artifacts/openflow/agents/openflow-executor-general.md +104 -0
- package/dist/core-artifacts/openflow/agents/openflow-executor-quick.md +93 -0
- package/dist/core-artifacts/openflow/agents/openflow-explorer.md +69 -0
- package/dist/core-artifacts/openflow/agents/openflow-knowledge-curator.md +89 -0
- package/dist/core-artifacts/openflow/commands/knowledge.md +102 -0
- package/dist/core-artifacts/openflow/hooks/hooks.json +33 -0
- package/dist/core-artifacts/openflow/scripts/openflow-drift-guard.cjs +54 -0
- package/dist/core-artifacts/openflow/scripts/openflow-evidence-reminder.cjs +64 -0
- package/dist/core-artifacts/openflow/scripts/openflow-mcp-review.cjs +27 -0
- package/dist/core-artifacts/openflow/scripts/openflow-write-guard.cjs +27 -0
- package/dist/core-artifacts/openflow/scripts/session-start.cjs +12 -0
- package/dist/core-artifacts/openflow/skills/brainstorm/SKILL.md +131 -0
- package/dist/core-artifacts/openflow/skills/cli-reference/SKILL.md +196 -0
- package/dist/core-artifacts/openflow/skills/finalize/SKILL.md +109 -0
- package/dist/core-artifacts/openflow/skills/finalize/references/summary-template.md +39 -0
- package/dist/core-artifacts/openflow/skills/implement/SKILL.md +296 -0
- package/dist/core-artifacts/openflow/skills/implement/references/working-memory.md +49 -0
- package/dist/core-artifacts/openflow/skills/knowledge-retrieval/SKILL.md +78 -0
- package/dist/core-artifacts/openflow/skills/prd/SKILL.md +173 -0
- package/dist/core-artifacts/openflow/skills/prd/references/level-routing.md +94 -0
- package/dist/core-artifacts/openflow/skills/prd/references/prd-template.md +187 -0
- package/dist/core-artifacts/openflow/skills/prd/references/wireframe-template.html +122 -0
- package/dist/core-artifacts/openflow/skills/spec/SKILL.md +341 -0
- package/dist/core-artifacts/openflow/skills/spec/references/context-template.md +38 -0
- package/dist/core-artifacts/openflow/skills/spec/references/plan-template.md +61 -0
- package/dist/core-artifacts/openflow/skills/spec/references/spec-template.md +187 -0
- package/dist/core-artifacts/openflow/skills/spec/references/tasks-template.md +99 -0
- package/dist/core-artifacts/openflow/skills/workflow-governance/SKILL.md +384 -0
- package/dist/core-artifacts/openflow/skills/workflow-governance/references/knowledge-schema.md +241 -0
- package/dist/core-artifacts/openflow/skills/workflow-governance/references/state-files.md +148 -0
- package/dist/core-artifacts/openflow/skills/workflow-governance/references/workflow.md +119 -0
- package/dist/core-artifacts/templates/.gitkeep +0 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/review-mcp-server.d.ts +1 -0
- package/dist/mcp/review-mcp-server.js +191 -0
- package/dist/mcp/review-mcp-server.js.map +1 -0
- package/dist/mcp/review-server.d.ts +33 -0
- package/dist/mcp/review-server.js +340 -0
- package/dist/mcp/review-server.js.map +1 -0
- package/dist/mcp/review-ui/assets/arc-DH58vMfF.js +1 -0
- package/dist/mcp/review-ui/assets/architecture-YZFGNWBL-CW8o5JQi.js +1 -0
- package/dist/mcp/review-ui/assets/architectureDiagram-Q4EWVU46-CH35GquJ.js +36 -0
- package/dist/mcp/review-ui/assets/array-BCJ35G43.js +1 -0
- package/dist/mcp/review-ui/assets/blockDiagram-DXYQGD6D-B1JZnKG_.js +132 -0
- package/dist/mcp/review-ui/assets/c4Diagram-AHTNJAMY-DCAtnxWd.js +10 -0
- package/dist/mcp/review-ui/assets/channel-BgHR4NPf.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-2KRD3SAO-BkEfK915.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-4BX2VUAB-Dn9kswJO.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-4TB4RGXK-DbeI3ZO6.js +206 -0
- package/dist/mcp/review-ui/assets/chunk-55IACEB6-CLBoivXU.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-5FUZZQ4R-DU7La6QA.js +62 -0
- package/dist/mcp/review-ui/assets/chunk-5PVQY5BW-Dy3eUu9a.js +2 -0
- package/dist/mcp/review-ui/assets/chunk-67CJDMHE-BKQ4iYAM.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-7N4EOEYR-CUngSlME.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-AA7GKIK3-BClDbXxt.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-BSJP7CBP-BlpmbHL-.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-CIAEETIT-THpBXcoN.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-Dlc7tRH4.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-EDXVE4YY-DNUlHz7M.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-ENJZ2VHE-fwEKj0pQ.js +10 -0
- package/dist/mcp/review-ui/assets/chunk-FMBD7UC4-Cj8B2TLo.js +15 -0
- package/dist/mcp/review-ui/assets/chunk-FOC6F5B3-BtR_JW_A.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-ICPOFSXX-WTr3HDYE.js +122 -0
- package/dist/mcp/review-ui/assets/chunk-K5T4RW27-vtP3ehR7.js +94 -0
- package/dist/mcp/review-ui/assets/chunk-KGLVRYIC-Di2tkB7O.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-LIHQZDEY-DoHl9hYE.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-ORNJ4GCN-Bff-Vc2X.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-OYMX7WX6-Djey8TrX.js +231 -0
- package/dist/mcp/review-ui/assets/chunk-QZHKN3VN-C4w1Z4n9.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-U2HBQHQK-D8HUikvJ.js +70 -0
- package/dist/mcp/review-ui/assets/chunk-X2U36JSP-CuZ-SN2r.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-YZCP3GAM-D0-dHF3G.js +1 -0
- package/dist/mcp/review-ui/assets/chunk-ZZ45TVLE-C1aIZGDA.js +1 -0
- package/dist/mcp/review-ui/assets/classDiagram-6PBFFD2Q-DHrSK7zx.js +1 -0
- package/dist/mcp/review-ui/assets/classDiagram-v2-HSJHXN6E-ftN8ECVk.js +1 -0
- package/dist/mcp/review-ui/assets/clone-C3rjhi9V.js +1 -0
- package/dist/mcp/review-ui/assets/cose-bilkent-S5V4N54A-szpqu_3d.js +1 -0
- package/dist/mcp/review-ui/assets/cytoscape.esm-DZ22BVwz.js +321 -0
- package/dist/mcp/review-ui/assets/dagre-B4oIQbi5.js +1 -0
- package/dist/mcp/review-ui/assets/dagre-KV5264BT-zDsxU5-B.js +4 -0
- package/dist/mcp/review-ui/assets/defaultLocale-CIS5GEjP.js +1 -0
- package/dist/mcp/review-ui/assets/diagram-5BDNPKRD-UgfFjZ4o.js +10 -0
- package/dist/mcp/review-ui/assets/diagram-G4DWMVQ6-Wh9VCn50.js +24 -0
- package/dist/mcp/review-ui/assets/diagram-MMDJMWI5-xVD3G7_9.js +43 -0
- package/dist/mcp/review-ui/assets/diagram-TYMM5635-AUD291P2.js +24 -0
- package/dist/mcp/review-ui/assets/dist-B51l2n-9.js +1 -0
- package/dist/mcp/review-ui/assets/erDiagram-SMLLAGMA-B83D6NXm.js +85 -0
- package/dist/mcp/review-ui/assets/flatten-B80WBwOJ.js +1 -0
- package/dist/mcp/review-ui/assets/flowDiagram-DWJPFMVM-D3lXOeHD.js +162 -0
- package/dist/mcp/review-ui/assets/ganttDiagram-T4ZO3ILL-CFAN903o.js +292 -0
- package/dist/mcp/review-ui/assets/gitGraph-7Q5UKJZL-BfgkNWmC.js +1 -0
- package/dist/mcp/review-ui/assets/gitGraphDiagram-UUTBAWPF-DxqTOi4I.js +106 -0
- package/dist/mcp/review-ui/assets/graphlib-De-foo_H.js +1 -0
- package/dist/mcp/review-ui/assets/identity-CWMh0UL-.js +1 -0
- package/dist/mcp/review-ui/assets/index-Do0fBEfH.css +2 -0
- package/dist/mcp/review-ui/assets/index-uPMLqduV.js +123 -0
- package/dist/mcp/review-ui/assets/info-OMHHGYJF-DE18zZ5Z.js +1 -0
- package/dist/mcp/review-ui/assets/infoDiagram-42DDH7IO-Bnco1OGr.js +2 -0
- package/dist/mcp/review-ui/assets/init-BMBYmmUa.js +1 -0
- package/dist/mcp/review-ui/assets/ishikawaDiagram-UXIWVN3A-B89fugr9.js +70 -0
- package/dist/mcp/review-ui/assets/journeyDiagram-VCZTEJTY-CMx2w_is.js +139 -0
- package/dist/mcp/review-ui/assets/kanban-definition-6JOO6SKY-YvTOD1Vd.js +89 -0
- package/dist/mcp/review-ui/assets/katex-8mXVa4k3.js +257 -0
- package/dist/mcp/review-ui/assets/line-BCdBO-oK.js +1 -0
- package/dist/mcp/review-ui/assets/linear-d7UHSQqm.js +1 -0
- package/dist/mcp/review-ui/assets/mermaid-parser.core-DI1-3xL2.js +4 -0
- package/dist/mcp/review-ui/assets/mindmap-definition-QFDTVHPH-E_mV-_Fs.js +96 -0
- package/dist/mcp/review-ui/assets/ordinal-BDTCIhXR.js +1 -0
- package/dist/mcp/review-ui/assets/packet-4T2RLAQJ-BLPGKWDX.js +1 -0
- package/dist/mcp/review-ui/assets/path-CIRGLb_6.js +1 -0
- package/dist/mcp/review-ui/assets/pie-ZZUOXDRM-DVV6Yua9.js +1 -0
- package/dist/mcp/review-ui/assets/pieDiagram-DEJITSTG-Ct4JvywP.js +30 -0
- package/dist/mcp/review-ui/assets/quadrantDiagram-34T5L4WZ-BSFYvc1U.js +7 -0
- package/dist/mcp/review-ui/assets/radar-PYXPWWZC-BMkQDLKp.js +1 -0
- package/dist/mcp/review-ui/assets/reduce-C80XcylQ.js +1 -0
- package/dist/mcp/review-ui/assets/requirementDiagram-MS252O5E-Bp7uSYEK.js +84 -0
- package/dist/mcp/review-ui/assets/rough.esm-DtEqI08j.js +1 -0
- package/dist/mcp/review-ui/assets/sankeyDiagram-XADWPNL6-CV38ZpSv.js +10 -0
- package/dist/mcp/review-ui/assets/sequenceDiagram-FGHM5R23-BXN9jl1N.js +157 -0
- package/dist/mcp/review-ui/assets/src-Cxc1bu7b.js +1 -0
- package/dist/mcp/review-ui/assets/stateDiagram-FHFEXIEX-DZduDkIw.js +1 -0
- package/dist/mcp/review-ui/assets/stateDiagram-v2-QKLJ7IA2-xAWOcxSi.js +1 -0
- package/dist/mcp/review-ui/assets/timeline-definition-GMOUNBTQ-CLqXzNm8.js +120 -0
- package/dist/mcp/review-ui/assets/treeView-SZITEDCU-tPcANHUc.js +1 -0
- package/dist/mcp/review-ui/assets/treemap-W4RFUUIX-BGbXISSk.js +1 -0
- package/dist/mcp/review-ui/assets/vennDiagram-DHZGUBPP-gCnd0IYN.js +34 -0
- package/dist/mcp/review-ui/assets/wardley-RL74JXVD-CK3EfklM.js +1 -0
- package/dist/mcp/review-ui/assets/wardleyDiagram-NUSXRM2D-Dd7qMlPS.js +20 -0
- package/dist/mcp/review-ui/assets/xychartDiagram-5P7HB3ND-DXHXO8Zm.js +7 -0
- package/dist/mcp/review-ui/index.html +29 -0
- package/dist/mcp/studio/assets/arc-DH58vMfF.js +1 -0
- package/dist/mcp/studio/assets/architecture-YZFGNWBL-8xrwD39F.js +1 -0
- package/dist/mcp/studio/assets/architectureDiagram-Q4EWVU46-VmcLZTJf.js +36 -0
- package/dist/mcp/studio/assets/array-BCJ35G43.js +1 -0
- package/dist/mcp/studio/assets/blockDiagram-DXYQGD6D-D-1mlLYy.js +132 -0
- package/dist/mcp/studio/assets/c4Diagram-AHTNJAMY-DCAtnxWd.js +10 -0
- package/dist/mcp/studio/assets/channel-BgHR4NPf.js +1 -0
- package/dist/mcp/studio/assets/chunk-2KRD3SAO-CMDQx2WD.js +1 -0
- package/dist/mcp/studio/assets/chunk-4BX2VUAB-Dn9kswJO.js +1 -0
- package/dist/mcp/studio/assets/chunk-4TB4RGXK-aFEYGDkJ.js +206 -0
- package/dist/mcp/studio/assets/chunk-55IACEB6-CLBoivXU.js +1 -0
- package/dist/mcp/studio/assets/chunk-5FUZZQ4R-DU7La6QA.js +62 -0
- package/dist/mcp/studio/assets/chunk-5PVQY5BW-Dy3eUu9a.js +2 -0
- package/dist/mcp/studio/assets/chunk-67CJDMHE-DnkyJt7A.js +1 -0
- package/dist/mcp/studio/assets/chunk-7N4EOEYR-cnJ9dWSC.js +1 -0
- package/dist/mcp/studio/assets/chunk-AA7GKIK3-DjCZnyrT.js +1 -0
- package/dist/mcp/studio/assets/chunk-BSJP7CBP-BlpmbHL-.js +1 -0
- package/dist/mcp/studio/assets/chunk-CIAEETIT-CtvXSBsf.js +1 -0
- package/dist/mcp/studio/assets/chunk-Dlc7tRH4.js +1 -0
- package/dist/mcp/studio/assets/chunk-EDXVE4YY-DNUlHz7M.js +1 -0
- package/dist/mcp/studio/assets/chunk-ENJZ2VHE-fwEKj0pQ.js +10 -0
- package/dist/mcp/studio/assets/chunk-FMBD7UC4-Cj8B2TLo.js +15 -0
- package/dist/mcp/studio/assets/chunk-FOC6F5B3-Ca28VADd.js +1 -0
- package/dist/mcp/studio/assets/chunk-ICPOFSXX-WTr3HDYE.js +122 -0
- package/dist/mcp/studio/assets/chunk-K5T4RW27-pqiOLnBn.js +94 -0
- package/dist/mcp/studio/assets/chunk-KGLVRYIC-DZfGlR-G.js +1 -0
- package/dist/mcp/studio/assets/chunk-LIHQZDEY-6Ygb8Kwt.js +1 -0
- package/dist/mcp/studio/assets/chunk-ORNJ4GCN-DSlr7oSO.js +1 -0
- package/dist/mcp/studio/assets/chunk-OYMX7WX6-8z_2lCb3.js +231 -0
- package/dist/mcp/studio/assets/chunk-QZHKN3VN-C4w1Z4n9.js +1 -0
- package/dist/mcp/studio/assets/chunk-U2HBQHQK-D8HUikvJ.js +70 -0
- package/dist/mcp/studio/assets/chunk-X2U36JSP-CuZ-SN2r.js +1 -0
- package/dist/mcp/studio/assets/chunk-YZCP3GAM-D0-dHF3G.js +1 -0
- package/dist/mcp/studio/assets/chunk-ZZ45TVLE-C1aIZGDA.js +1 -0
- package/dist/mcp/studio/assets/classDiagram-6PBFFD2Q-IZXxqxqM.js +1 -0
- package/dist/mcp/studio/assets/classDiagram-v2-HSJHXN6E-BiJKwTXT.js +1 -0
- package/dist/mcp/studio/assets/clone-g4CuF1Hf.js +1 -0
- package/dist/mcp/studio/assets/cose-bilkent-S5V4N54A-szpqu_3d.js +1 -0
- package/dist/mcp/studio/assets/cytoscape.esm-DZ22BVwz.js +321 -0
- package/dist/mcp/studio/assets/dagre-Be9o0OzC.js +1 -0
- package/dist/mcp/studio/assets/dagre-KV5264BT-iB6PnHLr.js +4 -0
- package/dist/mcp/studio/assets/defaultLocale-CIS5GEjP.js +1 -0
- package/dist/mcp/studio/assets/diagram-5BDNPKRD-BLfWbiEB.js +10 -0
- package/dist/mcp/studio/assets/diagram-G4DWMVQ6-CgcnwgVO.js +24 -0
- package/dist/mcp/studio/assets/diagram-MMDJMWI5-CpkXvs2p.js +43 -0
- package/dist/mcp/studio/assets/diagram-TYMM5635-guxqmxjJ.js +24 -0
- package/dist/mcp/studio/assets/dist-B51l2n-9.js +1 -0
- package/dist/mcp/studio/assets/erDiagram-SMLLAGMA-Lwv-cC2Y.js +85 -0
- package/dist/mcp/studio/assets/flatten-Dv3Z_7XJ.js +1 -0
- package/dist/mcp/studio/assets/flowDiagram-DWJPFMVM-BKnaFfFR.js +162 -0
- package/dist/mcp/studio/assets/ganttDiagram-T4ZO3ILL-CFAN903o.js +292 -0
- package/dist/mcp/studio/assets/gitGraph-7Q5UKJZL-BSdEZNVc.js +1 -0
- package/dist/mcp/studio/assets/gitGraphDiagram-UUTBAWPF-D4z4QWni.js +106 -0
- package/dist/mcp/studio/assets/graphlib-C1IZi4Cg.js +1 -0
- package/dist/mcp/studio/assets/identity-CWMh0UL-.js +1 -0
- package/dist/mcp/studio/assets/index-CyBqHDpB.js +109 -0
- package/dist/mcp/studio/assets/index-Dn_Ujmba.css +2 -0
- package/dist/mcp/studio/assets/info-OMHHGYJF-CoTx64p3.js +1 -0
- package/dist/mcp/studio/assets/infoDiagram-42DDH7IO-QEji23sQ.js +2 -0
- package/dist/mcp/studio/assets/init-BMBYmmUa.js +1 -0
- package/dist/mcp/studio/assets/ishikawaDiagram-UXIWVN3A-lMurmqul.js +70 -0
- package/dist/mcp/studio/assets/journeyDiagram-VCZTEJTY-CMx2w_is.js +139 -0
- package/dist/mcp/studio/assets/kanban-definition-6JOO6SKY-DsOybLrS.js +89 -0
- package/dist/mcp/studio/assets/katex-8mXVa4k3.js +257 -0
- package/dist/mcp/studio/assets/line-BCdBO-oK.js +1 -0
- package/dist/mcp/studio/assets/linear-d7UHSQqm.js +1 -0
- package/dist/mcp/studio/assets/mermaid-parser.core-BZtTt4qJ.js +4 -0
- package/dist/mcp/studio/assets/mindmap-definition-QFDTVHPH-B2yfABR9.js +96 -0
- package/dist/mcp/studio/assets/ordinal-BDTCIhXR.js +1 -0
- package/dist/mcp/studio/assets/packet-4T2RLAQJ-Bi4IG7s8.js +1 -0
- package/dist/mcp/studio/assets/path-CIRGLb_6.js +1 -0
- package/dist/mcp/studio/assets/pie-ZZUOXDRM-DsJRjVcu.js +1 -0
- package/dist/mcp/studio/assets/pieDiagram-DEJITSTG-JeKGFs3r.js +30 -0
- package/dist/mcp/studio/assets/quadrantDiagram-34T5L4WZ-BSFYvc1U.js +7 -0
- package/dist/mcp/studio/assets/radar-PYXPWWZC-cUDYP2Ic.js +1 -0
- package/dist/mcp/studio/assets/reduce-x-wchVXY.js +1 -0
- package/dist/mcp/studio/assets/requirementDiagram-MS252O5E-CGeLKQyn.js +84 -0
- package/dist/mcp/studio/assets/rough.esm-DtEqI08j.js +1 -0
- package/dist/mcp/studio/assets/sankeyDiagram-XADWPNL6-CV38ZpSv.js +10 -0
- package/dist/mcp/studio/assets/sequenceDiagram-FGHM5R23-BbHPv3l1.js +157 -0
- package/dist/mcp/studio/assets/src-Cxc1bu7b.js +1 -0
- package/dist/mcp/studio/assets/stateDiagram-FHFEXIEX-BuBuguzn.js +1 -0
- package/dist/mcp/studio/assets/stateDiagram-v2-QKLJ7IA2-PQA-rl9o.js +1 -0
- package/dist/mcp/studio/assets/timeline-definition-GMOUNBTQ-D5xtyNE9.js +120 -0
- package/dist/mcp/studio/assets/treeView-SZITEDCU-DhRx0eaI.js +1 -0
- package/dist/mcp/studio/assets/treemap-W4RFUUIX-Btsj9DUH.js +1 -0
- package/dist/mcp/studio/assets/vennDiagram-DHZGUBPP-W4g15SMY.js +34 -0
- package/dist/mcp/studio/assets/wardley-RL74JXVD-BTpKsgl7.js +1 -0
- package/dist/mcp/studio/assets/wardleyDiagram-NUSXRM2D-f7wgXdwe.js +20 -0
- package/dist/mcp/studio/assets/xychartDiagram-5P7HB3ND-BWx9swPf.js +7 -0
- package/dist/mcp/studio/index.html +29 -0
- package/dist/review-mcp-server.d.ts +1 -0
- package/dist/review-mcp-server.js +178 -0
- package/dist/review-mcp-server.js.map +1 -0
- package/dist/review-server.d.ts +17 -0
- package/dist/review-server.js +223 -0
- package/dist/review-server.js.map +1 -0
- package/dist/review-ui/assets/arc-DH58vMfF.js +1 -0
- package/dist/review-ui/assets/architecture-YZFGNWBL-ChakYgFO.js +1 -0
- package/dist/review-ui/assets/architectureDiagram-Q4EWVU46-CcJOZCOb.js +36 -0
- package/dist/review-ui/assets/array-BCJ35G43.js +1 -0
- package/dist/review-ui/assets/blockDiagram-DXYQGD6D-H7mMv5Tv.js +132 -0
- package/dist/review-ui/assets/c4Diagram-AHTNJAMY-DCAtnxWd.js +10 -0
- package/dist/review-ui/assets/channel-BgHR4NPf.js +1 -0
- package/dist/review-ui/assets/chunk-2KRD3SAO-BfA3IkPQ.js +1 -0
- package/dist/review-ui/assets/chunk-4BX2VUAB-Dn9kswJO.js +1 -0
- package/dist/review-ui/assets/chunk-4TB4RGXK-CvTeZi33.js +206 -0
- package/dist/review-ui/assets/chunk-55IACEB6-CLBoivXU.js +1 -0
- package/dist/review-ui/assets/chunk-5FUZZQ4R-DU7La6QA.js +62 -0
- package/dist/review-ui/assets/chunk-5PVQY5BW-Dy3eUu9a.js +2 -0
- package/dist/review-ui/assets/chunk-67CJDMHE-BQ1xNHFx.js +1 -0
- package/dist/review-ui/assets/chunk-7N4EOEYR-B1ORNLQP.js +1 -0
- package/dist/review-ui/assets/chunk-AA7GKIK3-D3pS3mnx.js +1 -0
- package/dist/review-ui/assets/chunk-BSJP7CBP-BlpmbHL-.js +1 -0
- package/dist/review-ui/assets/chunk-CIAEETIT-BDZkAY47.js +1 -0
- package/dist/review-ui/assets/chunk-Dlc7tRH4.js +1 -0
- package/dist/review-ui/assets/chunk-EDXVE4YY-DNUlHz7M.js +1 -0
- package/dist/review-ui/assets/chunk-ENJZ2VHE-fwEKj0pQ.js +10 -0
- package/dist/review-ui/assets/chunk-FMBD7UC4-Cj8B2TLo.js +15 -0
- package/dist/review-ui/assets/chunk-FOC6F5B3-DGtCX5Ra.js +1 -0
- package/dist/review-ui/assets/chunk-ICPOFSXX-WTr3HDYE.js +122 -0
- package/dist/review-ui/assets/chunk-K5T4RW27-CWpdECLF.js +94 -0
- package/dist/review-ui/assets/chunk-KGLVRYIC-oI2XKaPz.js +1 -0
- package/dist/review-ui/assets/chunk-LIHQZDEY-Dzp3G35O.js +1 -0
- package/dist/review-ui/assets/chunk-ORNJ4GCN-DsHuVbPU.js +1 -0
- package/dist/review-ui/assets/chunk-OYMX7WX6-fgjoXAXJ.js +231 -0
- package/dist/review-ui/assets/chunk-QZHKN3VN-C4w1Z4n9.js +1 -0
- package/dist/review-ui/assets/chunk-U2HBQHQK-D8HUikvJ.js +70 -0
- package/dist/review-ui/assets/chunk-X2U36JSP-CuZ-SN2r.js +1 -0
- package/dist/review-ui/assets/chunk-YZCP3GAM-D0-dHF3G.js +1 -0
- package/dist/review-ui/assets/chunk-ZZ45TVLE-C1aIZGDA.js +1 -0
- package/dist/review-ui/assets/classDiagram-6PBFFD2Q-D_3LhkJc.js +1 -0
- package/dist/review-ui/assets/classDiagram-v2-HSJHXN6E-DQRUREh5.js +1 -0
- package/dist/review-ui/assets/clone-BZMtGzbS.js +1 -0
- package/dist/review-ui/assets/cose-bilkent-S5V4N54A-szpqu_3d.js +1 -0
- package/dist/review-ui/assets/cytoscape.esm-DZ22BVwz.js +321 -0
- package/dist/review-ui/assets/dagre-BfNtd34y.js +1 -0
- package/dist/review-ui/assets/dagre-KV5264BT-D6PbxORW.js +4 -0
- package/dist/review-ui/assets/defaultLocale-CIS5GEjP.js +1 -0
- package/dist/review-ui/assets/diagram-5BDNPKRD-BNAXBDig.js +10 -0
- package/dist/review-ui/assets/diagram-G4DWMVQ6-CIGS_5yQ.js +24 -0
- package/dist/review-ui/assets/diagram-MMDJMWI5-DJmcU2xZ.js +43 -0
- package/dist/review-ui/assets/diagram-TYMM5635-DW8XzrAz.js +24 -0
- package/dist/review-ui/assets/dist-B51l2n-9.js +1 -0
- package/dist/review-ui/assets/erDiagram-SMLLAGMA-BfUNH8zz.js +85 -0
- package/dist/review-ui/assets/flatten-BHh95bpO.js +1 -0
- package/dist/review-ui/assets/flowDiagram-DWJPFMVM-qgnlSvEC.js +162 -0
- package/dist/review-ui/assets/ganttDiagram-T4ZO3ILL-CFAN903o.js +292 -0
- package/dist/review-ui/assets/gitGraph-7Q5UKJZL-Dn47XunR.js +1 -0
- package/dist/review-ui/assets/gitGraphDiagram-UUTBAWPF-BcG6fDsE.js +106 -0
- package/dist/review-ui/assets/graphlib-Cie4kcbC.js +1 -0
- package/dist/review-ui/assets/identity-CWMh0UL-.js +1 -0
- package/dist/review-ui/assets/index-ByplNhhd.css +2 -0
- package/dist/review-ui/assets/index-S7nbpFp2.js +123 -0
- package/dist/review-ui/assets/info-OMHHGYJF-hAukP1xW.js +1 -0
- package/dist/review-ui/assets/infoDiagram-42DDH7IO-FblTAfC3.js +2 -0
- package/dist/review-ui/assets/init-BMBYmmUa.js +1 -0
- package/dist/review-ui/assets/ishikawaDiagram-UXIWVN3A-BA7dJd-J.js +70 -0
- package/dist/review-ui/assets/journeyDiagram-VCZTEJTY-CMx2w_is.js +139 -0
- package/dist/review-ui/assets/kanban-definition-6JOO6SKY-CFiOZCrT.js +89 -0
- package/dist/review-ui/assets/katex-8mXVa4k3.js +257 -0
- package/dist/review-ui/assets/line-BCdBO-oK.js +1 -0
- package/dist/review-ui/assets/linear-d7UHSQqm.js +1 -0
- package/dist/review-ui/assets/mermaid-parser.core-BHMXLuNx.js +4 -0
- package/dist/review-ui/assets/mindmap-definition-QFDTVHPH-CWO7vDqu.js +96 -0
- package/dist/review-ui/assets/ordinal-BDTCIhXR.js +1 -0
- package/dist/review-ui/assets/packet-4T2RLAQJ-Btz3ryW7.js +1 -0
- package/dist/review-ui/assets/path-CIRGLb_6.js +1 -0
- package/dist/review-ui/assets/pie-ZZUOXDRM-CreBtuDj.js +1 -0
- package/dist/review-ui/assets/pieDiagram-DEJITSTG-X2mFk5I3.js +30 -0
- package/dist/review-ui/assets/quadrantDiagram-34T5L4WZ-BSFYvc1U.js +7 -0
- package/dist/review-ui/assets/radar-PYXPWWZC-BcAPYMpV.js +1 -0
- package/dist/review-ui/assets/reduce-14YNCNxn.js +1 -0
- package/dist/review-ui/assets/requirementDiagram-MS252O5E-CDv1lxdq.js +84 -0
- package/dist/review-ui/assets/rough.esm-DtEqI08j.js +1 -0
- package/dist/review-ui/assets/sankeyDiagram-XADWPNL6-CV38ZpSv.js +10 -0
- package/dist/review-ui/assets/sequenceDiagram-FGHM5R23-DCuV_bhx.js +157 -0
- package/dist/review-ui/assets/src-Cxc1bu7b.js +1 -0
- package/dist/review-ui/assets/stateDiagram-FHFEXIEX-BfE_bGUQ.js +1 -0
- package/dist/review-ui/assets/stateDiagram-v2-QKLJ7IA2-u1yKXWoz.js +1 -0
- package/dist/review-ui/assets/timeline-definition-GMOUNBTQ-Ci0uFxaT.js +120 -0
- package/dist/review-ui/assets/treeView-SZITEDCU-BXg6-7zY.js +1 -0
- package/dist/review-ui/assets/treemap-W4RFUUIX-BToYbgol.js +1 -0
- package/dist/review-ui/assets/vennDiagram-DHZGUBPP-DvOuThac.js +34 -0
- package/dist/review-ui/assets/wardley-RL74JXVD-BAYzkcK-.js +1 -0
- package/dist/review-ui/assets/wardleyDiagram-NUSXRM2D-YxTu6WZw.js +20 -0
- package/dist/review-ui/assets/xychartDiagram-5P7HB3ND-V9j-Dl7t.js +7 -0
- package/dist/review-ui/index.html +29 -0
- package/dist/run-openflow-cli.d.ts +1 -0
- package/dist/run-openflow-cli.js +41 -0
- package/dist/run-openflow-cli.js.map +1 -0
- package/dist/shared/args.d.ts +3 -0
- package/dist/shared/args.js +27 -0
- package/dist/shared/args.js.map +1 -0
- package/dist/shared/browser.d.ts +4 -0
- package/dist/shared/browser.js +17 -0
- package/dist/shared/browser.js.map +1 -0
- package/dist/shared/fs.d.ts +15 -0
- package/dist/shared/fs.js +48 -0
- package/dist/shared/fs.js.map +1 -0
- package/dist/shared/i18n.d.ts +5 -0
- package/dist/shared/i18n.js +65 -0
- package/dist/shared/i18n.js.map +1 -0
- package/dist/shared/locales/en-US.json +88 -0
- package/dist/shared/locales/zh-CN.json +88 -0
- package/dist/shared/plugin-registry.d.ts +36 -0
- package/dist/shared/plugin-registry.js +51 -0
- package/dist/shared/plugin-registry.js.map +1 -0
- package/dist/shared/project-state.d.ts +17 -0
- package/dist/shared/project-state.js +75 -0
- package/dist/shared/project-state.js.map +1 -0
- package/dist/shared/terminal.d.ts +10 -0
- package/dist/shared/terminal.js +110 -0
- package/dist/shared/terminal.js.map +1 -0
- package/package.json +28 -0
- package/templates/archive/.gitkeep +1 -0
- package/templates/config.json +11 -0
- package/templates/current.json +3 -0
- package/templates/iterations/.gitkeep +1 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// PostToolUse hook: remind AI to record validation evidence before clearing active task.
|
|
3
|
+
// Triggers when product code is edited while an activeTask exists and evidence is still pending.
|
|
4
|
+
const { existsSync, readFileSync } = require("node:fs");
|
|
5
|
+
const { join } = require("node:path");
|
|
6
|
+
|
|
7
|
+
const input = JSON.parse(readFileSync("/dev/stdin", "utf8"));
|
|
8
|
+
const filePath = input?.tool_input?.file_path ?? "";
|
|
9
|
+
|
|
10
|
+
// Ignore edits to .openflow/ files (those are workflow artifacts, not product code)
|
|
11
|
+
if (/(?:^|\/)\.openflow\//.test(filePath)) process.exit(0);
|
|
12
|
+
|
|
13
|
+
// Read current project state
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
const currentPath = join(cwd, ".openflow", "current.json");
|
|
16
|
+
if (!existsSync(currentPath)) process.exit(0);
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
const current = JSON.parse(readFileSync(currentPath, "utf8"));
|
|
20
|
+
if (!current.activeIteration) process.exit(0);
|
|
21
|
+
|
|
22
|
+
const iterPath = join(cwd, ".openflow", "iterations", current.activeIteration);
|
|
23
|
+
const flowPath = join(iterPath, "flow.json");
|
|
24
|
+
if (!existsSync(flowPath)) process.exit(0);
|
|
25
|
+
|
|
26
|
+
const flow = JSON.parse(readFileSync(flowPath, "utf8"));
|
|
27
|
+
|
|
28
|
+
// Only trigger if there's an active task during implement
|
|
29
|
+
if (flow.stage !== "implement" || !flow.activeTask) process.exit(0);
|
|
30
|
+
|
|
31
|
+
// Check if TASKS.md has pending evidence for the active task
|
|
32
|
+
const tasksPath = join(iterPath, "TASKS.md");
|
|
33
|
+
if (!existsSync(tasksPath)) process.exit(0);
|
|
34
|
+
|
|
35
|
+
const tasksContent = readFileSync(tasksPath, "utf8");
|
|
36
|
+
const taskId = flow.activeTask;
|
|
37
|
+
|
|
38
|
+
// Look for the task's evidence field — if it says "pending", remind
|
|
39
|
+
const taskSection = tasksContent.split(new RegExp(`\\b${taskId}\\b`))[1] ?? "";
|
|
40
|
+
const evidenceMatch = taskSection.match(/Evidence:\s*(.*)/i);
|
|
41
|
+
if (!evidenceMatch || evidenceMatch[1].trim().toLowerCase() !== "pending") process.exit(0);
|
|
42
|
+
|
|
43
|
+
const msg = [
|
|
44
|
+
`📋 Task ${taskId} is active with pending evidence.`,
|
|
45
|
+
"",
|
|
46
|
+
"Before running `openflow flow set-task -`, you must:",
|
|
47
|
+
" 1. Run your validation command",
|
|
48
|
+
" 2. Record BEFORE/AFTER results in TASKS.md Evidence field",
|
|
49
|
+
"",
|
|
50
|
+
"Do not clear the active task until evidence is recorded.",
|
|
51
|
+
].join("\n");
|
|
52
|
+
|
|
53
|
+
process.stdout.write(
|
|
54
|
+
JSON.stringify({
|
|
55
|
+
hookSpecificOutput: {
|
|
56
|
+
hookEventName: "PostToolUse",
|
|
57
|
+
additionalContext: msg,
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
} catch {
|
|
62
|
+
// Silent exit on any error — don't block the workflow
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { spawn } = require("node:child_process");
|
|
3
|
+
|
|
4
|
+
const isWindows = process.platform === "win32";
|
|
5
|
+
const command = isWindows ? (process.env.ComSpec || "cmd.exe") : "npx";
|
|
6
|
+
const args = isWindows
|
|
7
|
+
? ["/d", "/c", "npx", "-y", "@openflowjs/cli", "mcp", "review"]
|
|
8
|
+
: ["-y", "@openflowjs/cli", "mcp", "review"];
|
|
9
|
+
|
|
10
|
+
const child = spawn(command, args, {
|
|
11
|
+
stdio: "inherit",
|
|
12
|
+
windowsHide: true
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
child.on("exit", (code, signal) => {
|
|
16
|
+
if (signal) {
|
|
17
|
+
process.kill(process.pid, signal);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
process.exitCode = code ?? 1;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
child.on("error", (error) => {
|
|
25
|
+
console.error(`[openflow] failed to start MCP server: ${error.message}`);
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// PostToolUse hook: remind AI to use openflow CLI instead of directly writing state files.
|
|
3
|
+
const input = JSON.parse(require("node:fs").readFileSync("/dev/stdin", "utf8"));
|
|
4
|
+
const filePath = input?.tool_input?.file_path ?? "";
|
|
5
|
+
|
|
6
|
+
const STATE_FILES = /(?:^|\/)\.openflow\/(?:current\.json|iterations\/[^/]+\/flow\.json)$/;
|
|
7
|
+
if (!STATE_FILES.test(filePath)) process.exit(0);
|
|
8
|
+
|
|
9
|
+
const msg = [
|
|
10
|
+
`Direct write detected: ${filePath}`,
|
|
11
|
+
"For future state changes, prefer the openflow CLI:",
|
|
12
|
+
" openflow flow set-stage <stage>",
|
|
13
|
+
" openflow flow set-gate <gate>",
|
|
14
|
+
" openflow flow set-task <id|->",
|
|
15
|
+
" openflow flow inc-revision",
|
|
16
|
+
" openflow iteration create <YYYY-MM-DD-slug>",
|
|
17
|
+
" openflow iteration close",
|
|
18
|
+
].join("\n");
|
|
19
|
+
|
|
20
|
+
process.stdout.write(
|
|
21
|
+
JSON.stringify({
|
|
22
|
+
hookSpecificOutput: {
|
|
23
|
+
hookEventName: "PostToolUse",
|
|
24
|
+
additionalContext: msg,
|
|
25
|
+
},
|
|
26
|
+
})
|
|
27
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { execSync } = require("node:child_process");
|
|
3
|
+
|
|
4
|
+
try {
|
|
5
|
+
const output = execSync("pnpm exec openflow state --context", {
|
|
6
|
+
encoding: "utf8",
|
|
7
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
8
|
+
}).trim();
|
|
9
|
+
if (output) console.log(output);
|
|
10
|
+
} catch {
|
|
11
|
+
// openflow not available or no active state — silent exit
|
|
12
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openflow-brainstorm
|
|
3
|
+
description: Guide requirement discussions and progressively write PRD drafts.
|
|
4
|
+
depends_on: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OpenFlow Brainstorm
|
|
8
|
+
|
|
9
|
+
Guide the user through structured discussion to progressively fill a PRD draft. Ask only the single most valuable question at a time, choosing the next discussion direction based on which sections have already been filled. Discussions can be interrupted and resumed.
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
1. Check whether a PRD ID parameter was passed at invocation:
|
|
14
|
+
- **With parameter**: treat as resuming an existing discussion. Jump to the "Resume" flow.
|
|
15
|
+
- **Without parameter**: use `AskUserQuestion` to prompt the user for a PRD ID in the format `YYYY-MM-DD-short-slug` (e.g., `2025-05-12-user-auth`).
|
|
16
|
+
|
|
17
|
+
2. Read `.openflow/config.json` and extract the `language` field. Use this language for all generated content and user-facing questions. If absent, default to `en-US`.
|
|
18
|
+
|
|
19
|
+
## Draft Creation
|
|
20
|
+
|
|
21
|
+
Once a new PRD ID is determined, execute the following steps:
|
|
22
|
+
|
|
23
|
+
1. Create the directory `.openflow/prds/<id>/`.
|
|
24
|
+
|
|
25
|
+
2. Use the Write tool to create `prd.json`:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"id": "<id>",
|
|
30
|
+
"status": "draft",
|
|
31
|
+
"revision": 0,
|
|
32
|
+
"linkedIteration": null,
|
|
33
|
+
"assets": [],
|
|
34
|
+
"createdAt": "<now>",
|
|
35
|
+
"updatedAt": "<now>"
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Use ISO 8601 format for `<now>`, e.g., `2025-05-12T10:30:00+08:00`.
|
|
40
|
+
|
|
41
|
+
3. Use the Write tool to create `draft.md` with a template containing 5 empty sections:
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
# PRD Draft: <title>
|
|
45
|
+
|
|
46
|
+
## Background & Motivation
|
|
47
|
+
_(To be filled through discussion)_
|
|
48
|
+
|
|
49
|
+
## Target Users
|
|
50
|
+
_(Brief sketches of who will use this — role, context, key pain point)_
|
|
51
|
+
|
|
52
|
+
## Core Scenarios
|
|
53
|
+
_(To be filled through discussion)_
|
|
54
|
+
|
|
55
|
+
## Key Constraints
|
|
56
|
+
_(To be filled through discussion)_
|
|
57
|
+
|
|
58
|
+
## Initial Solution Ideas
|
|
59
|
+
_(To be filled through discussion)_
|
|
60
|
+
|
|
61
|
+
## Decisions
|
|
62
|
+
_(Key product decisions made during discussion. Format: each entry has "Topic / Options Considered / Chosen / Rationale". Capture decisions as they're made, not at the end.)_
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Derive `<title>` from the slug portion of the PRD ID (e.g., `user-auth` becomes `User Auth`), or let the user specify it during the first discussion round.
|
|
66
|
+
|
|
67
|
+
4. After creation, enter the "Discussion Loop".
|
|
68
|
+
|
|
69
|
+
## Discussion Loop
|
|
70
|
+
|
|
71
|
+
Each discussion round follows this flow:
|
|
72
|
+
|
|
73
|
+
1. Read `draft.md` and analyze the fill status of the sections (Background & Motivation, Target Users, Core Scenarios, Key Constraints, Initial Solution Ideas).
|
|
74
|
+
|
|
75
|
+
2. Select the next section to discuss by priority. Priority order:
|
|
76
|
+
- Background & Motivation
|
|
77
|
+
- Target Users
|
|
78
|
+
- Core Scenarios
|
|
79
|
+
- Key Constraints
|
|
80
|
+
- Initial Solution Ideas
|
|
81
|
+
|
|
82
|
+
3. Use `AskUserQuestion` to ask one high-value question related to that section. The question should guide the user toward specific, actionable information rather than vague descriptions.
|
|
83
|
+
|
|
84
|
+
4. After receiving the user's answer, use the Edit tool to update the corresponding section in `draft.md`. Organize the user's answer into clear, structured text, replacing the `_(To be filled through discussion)_` placeholder or appending to existing content.
|
|
85
|
+
|
|
86
|
+
5. **Capture decisions**: whenever the discussion settles a choice between options (e.g., "use VitePress vs Docusaurus", "support 2 languages vs 1"), append an entry to the `## Decisions` section in this format:
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
- **<Topic>**
|
|
90
|
+
- Options Considered: <A / B / C>
|
|
91
|
+
- Chosen: <option>
|
|
92
|
+
- Rationale: <why>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Do this immediately after a decision is made, not at the end. The Decisions section becomes the input for the PRD's Decision Log.
|
|
96
|
+
|
|
97
|
+
6. Update the `updatedAt` field in `prd.json` to the current time.
|
|
98
|
+
|
|
99
|
+
7. When all 5 main sections (excluding Decisions, which grows incrementally) have substantive content (not placeholders, not single-sentence vague descriptions), proactively suggest ending the discussion. Use `AskUserQuestion` with the following options:
|
|
100
|
+
- "Continue discussing the next section"
|
|
101
|
+
- "End discussion and generate PRD"
|
|
102
|
+
|
|
103
|
+
If the user chooses to continue, return to step 1 to re-evaluate each section's status and dig deeper into sections that need more content.
|
|
104
|
+
|
|
105
|
+
If the user chooses to end, proceed to the "Completion Handoff".
|
|
106
|
+
|
|
107
|
+
## Resume
|
|
108
|
+
|
|
109
|
+
When the user resumes an existing PRD discussion:
|
|
110
|
+
|
|
111
|
+
1. Read the contents of `.openflow/prds/<id>/draft.md`.
|
|
112
|
+
|
|
113
|
+
2. Analyze the fill status of each section:
|
|
114
|
+
- Whether it still contains the `_(To be filled through discussion)_` placeholder
|
|
115
|
+
- Whether the content is substantive enough (not single-sentence vague descriptions)
|
|
116
|
+
|
|
117
|
+
3. Report the current status to the user: which sections are filled and which still need discussion.
|
|
118
|
+
|
|
119
|
+
4. Continue the "Discussion Loop" starting from the first section with insufficient content.
|
|
120
|
+
|
|
121
|
+
## Completion Handoff
|
|
122
|
+
|
|
123
|
+
After the discussion is complete, inform the user:
|
|
124
|
+
|
|
125
|
+
"PRD draft is complete. Run `/openflow-prd <id>` to generate the formal PRD document."
|
|
126
|
+
|
|
127
|
+
Do not automatically execute subsequent commands. Only provide clear next-step instructions.
|
|
128
|
+
|
|
129
|
+
## Subagent Dispatch
|
|
130
|
+
|
|
131
|
+
None. Brainstorm is a purely interactive skill executed directly by the main agent. No subagent dispatch.
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openflow-cli-reference
|
|
3
|
+
description: Reference for all openflow shell commands. Use when you need to call the CLI during spec, implement, or finalize phases, or when diagnosing state and validation errors.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OpenFlow CLI Reference
|
|
7
|
+
|
|
8
|
+
The `openflow` binary is a **supporting tool** for the AI workflow. The actual workflow phases live in `/openflow-spec`, `/openflow-implement`, and `/openflow-finalize`. The CLI handles infrastructure: installation, state inspection, artifact mutation, validation, and the review UI server.
|
|
9
|
+
|
|
10
|
+
Never call `openflow spec`, `openflow implement`, or `openflow finalize` from the shell — they are not shell commands and will throw.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
openflow init
|
|
18
|
+
openflow init --adapter claude-code [--target <path>] [--language zh-CN|en-US] [--force]
|
|
19
|
+
openflow init --adapter claude-code --global [--force]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- No `--target`: installs into the current directory (`.claude/` + `.openflow/`).
|
|
23
|
+
- `--global`: installs only adapter files into `~/.claude/`. Does not create `.openflow/` or `.mcp.json`.
|
|
24
|
+
- `--force`: overwrites existing files. Without it, existing files are skipped.
|
|
25
|
+
- `--language`: sets `.openflow/config.json` language on first install. Prompts interactively if omitted on TTY.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
openflow update [--target <path>] [--dry-run] [--force]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Refreshes managed `.claude/` adapter files (commands, skills, agents, hooks) and merges missing defaults into `config.json`. Files the user has edited since install are flagged `conflict` and skipped unless `--force` is passed. Use `--dry-run` to preview without writing.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Configuration
|
|
36
|
+
|
|
37
|
+
Language is set during `openflow init` (interactive prompt or `--language` flag). Config is stored in `.openflow/config.json`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Project State
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
openflow state [--context]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- Default (no flag): prints the full project state as JSON. Fields: `language`, `defaultLevel`, `activeIteration`, `iterationPath`, `stage`, `level`, `gate`, `revision`, `activeTask`.
|
|
48
|
+
- `--context`: prints `STATE.md` of the active iteration as plain text with a hint about which slash command to use next. This is what the `session-start` hook injects into the AI context window at startup.
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
openflow preflight --command spec|implement|finalize
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Validates whether a phase can proceed. Returns JSON with:
|
|
55
|
+
- `action`: `"create"` | `"continue"` | `"ok"`
|
|
56
|
+
- `valid`: `true` | `false`
|
|
57
|
+
- `error`: reason when `valid` is `false`
|
|
58
|
+
|
|
59
|
+
Exits with code 1 when `valid` is `false`. Always call this at the start of each slash command before doing any work.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Flow Artifact Mutations
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
openflow flow set-stage <stage>
|
|
67
|
+
openflow flow set-gate <gate>
|
|
68
|
+
openflow flow set-task <T-###|->
|
|
69
|
+
openflow flow inc-revision
|
|
70
|
+
openflow flow restart-spec
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
All four base commands mutate `flow.json` of the active iteration atomically and update `updatedAt`.
|
|
74
|
+
|
|
75
|
+
| Command | When to use |
|
|
76
|
+
|---------|-------------|
|
|
77
|
+
| `set-stage <stage>` | Transition the iteration through its lifecycle: `spec` → `implement` → `finalize` → `archived` |
|
|
78
|
+
| `set-gate <gate>` | Mark workflow gate status: `draft`, `review_required`, `changes_requested`, `approved`, `skipped`, `blocked` |
|
|
79
|
+
| `set-task <T-###>` | Record which task is actively being worked on |
|
|
80
|
+
| `set-task -` | Clear the active task after a task slice is complete |
|
|
81
|
+
| `inc-revision` | Bump revision counter and reset gate to `draft` when reworking a rejected spec |
|
|
82
|
+
| `restart-spec` | Atomic rollback to spec stage for drift recovery |
|
|
83
|
+
|
|
84
|
+
Valid stages: `spec`, `blocked`, `implement`, `finalize`, `archived`
|
|
85
|
+
Valid gates: `draft`, `review_required`, `changes_requested`, `approved`, `skipped`, `blocked`
|
|
86
|
+
|
|
87
|
+
### `openflow flow restart-spec`
|
|
88
|
+
|
|
89
|
+
Atomic rollback to Spec stage for drift recovery.
|
|
90
|
+
|
|
91
|
+
**Usage:**
|
|
92
|
+
```bash
|
|
93
|
+
openflow flow restart-spec --reason "<drift reason>" --task <T-###>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Parameters:**
|
|
97
|
+
- `--reason` (required): Description of the spec drift reason
|
|
98
|
+
- `--task` (required): Task ID that triggered the drift
|
|
99
|
+
|
|
100
|
+
**Behavior:**
|
|
101
|
+
1. Increment flow.json revision
|
|
102
|
+
2. Set stage to "spec"
|
|
103
|
+
3. Set gate to "draft"
|
|
104
|
+
4. Clear activeTask
|
|
105
|
+
5. Append Drift Log entry to STATE.md (with date, reason, source task ID)
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Iteration Lifecycle
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
openflow iteration create <YYYY-MM-DD-slug>
|
|
113
|
+
openflow iteration close
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
- `create`: makes the directory `.openflow/iterations/<id>/` and writes `current.json` with `activeIteration` pointing to it.
|
|
117
|
+
- `close`: writes `current.json` with `activeIteration: null`. Call this at the end of finalize after moving the folder.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Validation
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
openflow validate [--flow <path>] [--json]
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Reads all required artifacts (`flow.json`, `STATE.md`, `SPEC.md`, `CONTEXT.md`, `TASKS.md`) and optional artifacts (`config.json`, reviews, `SUMMARY.md`, extension results), then runs schema validation. Exits with code 1 on any error-severity issue.
|
|
128
|
+
|
|
129
|
+
- `--flow .openflow`: resolves the active iteration from `current.json` automatically.
|
|
130
|
+
- `--flow .openflow/iterations/<id>`: validates a specific iteration directory directly.
|
|
131
|
+
- `--json`: outputs `{ valid, issues }` as JSON instead of human-readable output.
|
|
132
|
+
|
|
133
|
+
Run `openflow validate` after writing artifacts and before triggering review.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Review UI
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
openflow review [--flow .openflow] [--mode spec|prd] [--port 3456] [--wait] [--json] [--no-open]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Starts the HTTP Review UI (React SPA). This is the **fallback** path when MCP is not available. Prefer the MCP tools (`openflow_review_start` / `openflow_review_wait`) when running inside an AI tool.
|
|
144
|
+
|
|
145
|
+
- `--wait`: block until a review is submitted, then exit. Without it, the server runs until Ctrl+C.
|
|
146
|
+
- `--no-open`: suppress automatic browser launch.
|
|
147
|
+
- `--json`: emit `{ url, flow, mode }` as JSON to stdout (suppresses browser launch by default).
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
openflow mcp review
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Starts the MCP stdio server. This is wired up automatically via `.mcp.json` so AI tools can call review tools without launching a shell command. Do not call this manually.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Common Patterns
|
|
158
|
+
|
|
159
|
+
**Start of every slash command:**
|
|
160
|
+
```
|
|
161
|
+
openflow preflight --command <spec|implement|finalize>
|
|
162
|
+
```
|
|
163
|
+
Parse the JSON. Stop immediately if `valid` is `false`.
|
|
164
|
+
|
|
165
|
+
**After creating a new iteration (spec phase):**
|
|
166
|
+
```
|
|
167
|
+
openflow iteration create YYYY-MM-DD-slug
|
|
168
|
+
openflow state # get iterationPath for subsequent commands
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**After writing artifacts:**
|
|
172
|
+
```
|
|
173
|
+
openflow validate --flow .openflow/iterations/<id>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**During implement — task lifecycle:**
|
|
177
|
+
```
|
|
178
|
+
openflow flow set-task T-001
|
|
179
|
+
# ... implement ...
|
|
180
|
+
openflow flow set-task -
|
|
181
|
+
openflow validate --flow .openflow/iterations/<id>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Triggering review (when MCP is available, prefer this):**
|
|
185
|
+
```
|
|
186
|
+
openflow_review_start → openflow_review_wait → openflow_review_close
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Completing finalize:**
|
|
190
|
+
```
|
|
191
|
+
openflow flow set-stage archived
|
|
192
|
+
openflow flow set-gate approved
|
|
193
|
+
openflow validate --flow <iterationPath>
|
|
194
|
+
# mv iterationPath to .openflow/archive/<id>
|
|
195
|
+
openflow iteration close
|
|
196
|
+
```
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openflow-finalize
|
|
3
|
+
description: Use for the OpenFlow finalize phase: final validation, knowledge capture, review, commit support, and archival.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OpenFlow Finalize
|
|
7
|
+
|
|
8
|
+
Close the flow so `.openflow/` explains what shipped, how it was validated, what remains, and what knowledge should persist.
|
|
9
|
+
|
|
10
|
+
This skill depends on:
|
|
11
|
+
|
|
12
|
+
- `openflow-workflow-governance` for level, stage, and gate rules.
|
|
13
|
+
- `openflow-cli-reference` for exact CLI command syntax and options.
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
|
|
17
|
+
- `.openflow/current.json`
|
|
18
|
+
- active iteration `flow.json`
|
|
19
|
+
- active iteration `STATE.md`
|
|
20
|
+
- active iteration `SPEC.md`
|
|
21
|
+
- active iteration `TASKS.md`
|
|
22
|
+
- active iteration `CONTEXT.md`
|
|
23
|
+
- active iteration `PLAN.md` when present
|
|
24
|
+
- active iteration `reviews/spec-review.json`
|
|
25
|
+
- active iteration `extensions/**/result.json`
|
|
26
|
+
- Repository diff and validation output
|
|
27
|
+
|
|
28
|
+
## Archive Gate
|
|
29
|
+
|
|
30
|
+
Before finalize:
|
|
31
|
+
|
|
32
|
+
- Run `openflow validate --flow .openflow/iterations/<iteration-id>`.
|
|
33
|
+
- Confirm all completed tasks have evidence.
|
|
34
|
+
- Confirm incomplete tasks are explicitly marked `deferred:`, `blocked:`, or `waived:` with rationale.
|
|
35
|
+
- Confirm required extension results passed or have explicit accepted deferral.
|
|
36
|
+
- Run final relevant project validation.
|
|
37
|
+
- For code changes with behavior impact, use `code-reviewer` (mode: compliance) followed by `code-reviewer` (mode: quality) for complex reviews. Use `artifact-reviewer` (mode: docs) when documentation impact warrants it.
|
|
38
|
+
- Use `artifact-reviewer` (mode: validation) when evidence quality is uncertain.
|
|
39
|
+
|
|
40
|
+
## Flow
|
|
41
|
+
|
|
42
|
+
1. Run `openflow preflight --command finalize` and parse the JSON output. If `valid` is `false`, stop and tell the user what went wrong in plain language — do not show the raw preflight error.
|
|
43
|
+
2. Use `language` and `iterationPath` from the output for all subsequent steps.
|
|
44
|
+
3. Read `flow.json`, `STATE.md`, `SPEC.md`, `TASKS.md`, `CONTEXT.md`, optional `PLAN.md`, `reviews/spec-review.json`, extension results, and current repository status from `iterationPath`.
|
|
45
|
+
4. Run `openflow validate --flow .openflow/iterations/<iteration-id>`.
|
|
46
|
+
5. Confirm every completed task has evidence and every required extension passed or has an accepted deferral.
|
|
47
|
+
6. Confirm every incomplete task is explicitly deferred, blocked, or waived with rationale before final finalize.
|
|
48
|
+
7. Run final project validation relevant to the diff.
|
|
49
|
+
8. Write `SUMMARY.md` with shipped changes, validation evidence, deferred items, and durable knowledge. Use the template in `references/summary-template.md`.
|
|
50
|
+
9. Use `artifact-reviewer` (mode: validation) when task evidence or extension results need a final readiness check.
|
|
51
|
+
10. **Extract structured knowledge** to `.openflow/knowledge/`, using `WORKING_MEMORY.md` as the primary source:
|
|
52
|
+
- **Primary source — WORKING_MEMORY.md** (located at `.openflow/iterations/<iteration-id>/WORKING_MEMORY.md`):
|
|
53
|
+
- Read the three append-only sections:
|
|
54
|
+
- `## Execution Observations` → extract potential `decision` and `guideline` knowledge from execution observations.
|
|
55
|
+
- `## Knowledge Candidates` → use directly as candidate input for knowledge extraction.
|
|
56
|
+
- `## Blockers and Resolutions` → extract `pitfall` knowledge from blocker descriptions and their resolutions.
|
|
57
|
+
- **Fallback source — SUMMARY.md**: use `SUMMARY.md` only when `WORKING_MEMORY.md` does not exist or all three append-only sections are empty.
|
|
58
|
+
- **Call `knowledge-curator` Agent** for each candidate knowledge entry to perform:
|
|
59
|
+
- **Dedup check** (`dedup` operation): compare summary + tags with existing entries in `.openflow/knowledge/` of the same type. Skip if a duplicate is found, or merge into the existing entry.
|
|
60
|
+
- **Schema validation** (`validate` operation): ensure frontmatter conforms to the schema defined in `workflow-governance` `references/knowledge-schema.md`.
|
|
61
|
+
- **Create knowledge files by type** (follow file format in `workflow-governance` `references/knowledge-schema.md`):
|
|
62
|
+
- `decision` → `.openflow/knowledge/decisions/NNN-<slug>.md`
|
|
63
|
+
- `guideline` → `.openflow/knowledge/guidelines/NNN-<slug>.md`
|
|
64
|
+
- `pitfall` → `.openflow/knowledge/pitfalls/NNN-<slug>.md`
|
|
65
|
+
- `process` → `.openflow/knowledge/processes/NNN-<slug>.md`
|
|
66
|
+
- **Update indexes** after creating knowledge files:
|
|
67
|
+
- Regenerate `.openflow/knowledge/catalog.json` from all knowledge files.
|
|
68
|
+
- Update the per-type `index.json` in each affected type directory.
|
|
69
|
+
- Regenerate `.openflow/knowledge/CATALOG.md` from the updated catalog data.
|
|
70
|
+
- Only extract when the extraction criteria in `workflow-governance` are met.
|
|
71
|
+
- If no durable knowledge meets extraction criteria, skip this step.
|
|
72
|
+
11. Verify knowledge files were created correctly by checking the format follows the `workflow-governance` `references/knowledge-schema.md` specification.
|
|
73
|
+
12. Run `openflow flow set-stage archived` and `openflow flow set-gate approved`, then run `openflow validate --flow <iterationPath>`.
|
|
74
|
+
13. Move the iteration folder to the archive:
|
|
75
|
+
```bash
|
|
76
|
+
mv .openflow/iterations/<iteration-id> .openflow/archive/<iteration-id>
|
|
77
|
+
```
|
|
78
|
+
14. Run `openflow iteration close` to clear `activeIteration`.
|
|
79
|
+
15. Produce commit support according to the project policy.
|
|
80
|
+
|
|
81
|
+
Do not finalize if validation is failing.
|
|
82
|
+
Write generated OpenFlow documents in the resolved language; default to `en-US` if not configured.
|
|
83
|
+
Do not use OpenFlow MCP for workflow state management. MCP is only for Review UI interaction; write `.openflow` artifacts directly and validate them with `openflow validate`.
|
|
84
|
+
|
|
85
|
+
## Summary Rules
|
|
86
|
+
|
|
87
|
+
Write active iteration `SUMMARY.md` with:
|
|
88
|
+
|
|
89
|
+
- Shipped Changes
|
|
90
|
+
- Validation Evidence
|
|
91
|
+
- Deferred Items
|
|
92
|
+
- Durable Knowledge
|
|
93
|
+
|
|
94
|
+
Durable knowledge should include project conventions, decisions, domain language, and recurring failure modes worth preserving.
|
|
95
|
+
|
|
96
|
+
Extract knowledge files only when there is durable knowledge with future reuse value. Do not create long-term knowledge for ordinary task logs.
|
|
97
|
+
|
|
98
|
+
## Commit Support
|
|
99
|
+
|
|
100
|
+
Follow the host repository policy. If committing is not appropriate, produce a commit message draft and list the files that changed.
|
|
101
|
+
|
|
102
|
+
## User-Facing Output
|
|
103
|
+
|
|
104
|
+
When communicating with the user:
|
|
105
|
+
|
|
106
|
+
- Do not show raw `openflow validate` or `openflow preflight` error codes, field names, or schema rules. Translate errors into plain language (e.g. "There is a formatting issue in SUMMARY.md").
|
|
107
|
+
- Do not explain internal OpenFlow state machine concepts (gates, stages, revisions, level routing rationale) unless the user asks.
|
|
108
|
+
- Do not output "Insight" blocks about OpenFlow's internal mechanics, validation rules, or artifact schemas.
|
|
109
|
+
- Keep status updates short: what was archived and what the user should do next.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SUMMARY.md
|
|
2
|
+
|
|
3
|
+
`SUMMARY.md` is the final human-readable closeout for `/openflow-finalize`.
|
|
4
|
+
|
|
5
|
+
Location:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
.openflow/iterations/<iteration-id>/SUMMARY.md
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Template:
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# Summary
|
|
15
|
+
|
|
16
|
+
## Shipped Changes
|
|
17
|
+
|
|
18
|
+
- <what changed, grouped by user-visible or system outcome>
|
|
19
|
+
|
|
20
|
+
## Validation Evidence
|
|
21
|
+
|
|
22
|
+
- <commands, test results, screenshots, review signals, or extension results>
|
|
23
|
+
|
|
24
|
+
## Deferred Items
|
|
25
|
+
|
|
26
|
+
- <deferred, blocked, or waived work with rationale>
|
|
27
|
+
|
|
28
|
+
## Durable Knowledge
|
|
29
|
+
|
|
30
|
+
- <project conventions, decisions, domain language, or recurring failure modes worth preserving>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Rules:
|
|
34
|
+
|
|
35
|
+
- Write the summary before final archive validation.
|
|
36
|
+
- Do not repeat every implementation detail; summarize outcomes and evidence.
|
|
37
|
+
- Every completed task in `TASKS.md` should be represented by validation evidence here.
|
|
38
|
+
- Deferred items must match unchecked tasks or known follow-ups.
|
|
39
|
+
- Durable knowledge is optional in substance but the heading is required. Use `None identified.` when there is nothing worth preserving.
|