@dawipong/opcflow 0.1.0 → 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.
Files changed (164) hide show
  1. package/README.en.md +17 -11
  2. package/README.md +16 -10
  3. package/dist/cli.mjs +4 -5
  4. package/package.json +8 -7
  5. package/web/dist/assets/abnfDiagram-VRR7QNED-DctuL32B.js +1 -0
  6. package/web/dist/assets/arc-DPoWLLje.js +1 -0
  7. package/web/dist/assets/architecture-TIHT7OUA-Bgyz4pDY.js +1 -0
  8. package/web/dist/assets/architectureDiagram-ZJ3FMSHR--07w7V0c.js +36 -0
  9. package/web/dist/assets/array-BifhSqXX.js +1 -0
  10. package/web/dist/assets/blockDiagram-677ZJIJ3-CUYUzMZC.js +132 -0
  11. package/web/dist/assets/c4Diagram-LMCZKHZV-DhT2uxnj.js +10 -0
  12. package/web/dist/assets/channel-vHKEEV51.js +1 -0
  13. package/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  14. package/web/dist/assets/chunk-32BRIVSS-CztnJRkA.js +1 -0
  15. package/web/dist/assets/{chunk-5VM5RSS4-BfNutGrI.js → chunk-5VM5RSS4-ZNzvKenW.js} +2 -2
  16. package/web/dist/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  17. package/web/dist/assets/chunk-C7G6YPKG-jsbUGVSb.js +1 -0
  18. package/web/dist/assets/chunk-EX3LRPZG-DQGT_sG5.js +231 -0
  19. package/web/dist/assets/chunk-HOUHSVGY-DDAtZMtg.js +1 -0
  20. package/web/dist/assets/chunk-ICXQ74PX-C2h9d1ob.js +2 -0
  21. package/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  22. package/web/dist/assets/chunk-KEIR6QF5-BfrZ3jm6.js +161 -0
  23. package/web/dist/assets/chunk-MOJQB5TN-Y0jSjq4a.js +88 -0
  24. package/web/dist/assets/chunk-OGEWGWER-B5mrusUD.js +1 -0
  25. package/web/dist/assets/chunk-PUDLZKDR-pSIk3CZr.js +156 -0
  26. package/web/dist/assets/chunk-Q4XR5HBZ-Cfw3UWMb.js +70 -0
  27. package/web/dist/assets/chunk-RYQCIY6F-CCUojmgb.js +1 -0
  28. package/web/dist/assets/chunk-V7JOEXUC-D_2vwCJz.js +206 -0
  29. package/web/dist/assets/chunk-VR4S4FIN-CUMv178C.js +1 -0
  30. package/web/dist/assets/chunk-WYO6CB5R-BaRUDpDl.js +127 -0
  31. package/web/dist/assets/chunk-XXDRQBXY-tmq33VNh.js +1 -0
  32. package/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  33. package/web/dist/assets/chunk-ZGVPDNZ5-DK9a-Iwy.js +62 -0
  34. package/web/dist/assets/classDiagram-OUVF2IWQ-Ckf-YAkB.js +1 -0
  35. package/web/dist/assets/classDiagram-v2-EOCWNBFH-Ckf-YAkB.js +1 -0
  36. package/web/dist/assets/cose-bilkent-JH36ORCC-BV8ttTSE.js +1 -0
  37. package/web/dist/assets/cynefin-VYW2F7L2-BncvlU8s.js +1 -0
  38. package/web/dist/assets/cynefinDiagram-TSTJHNR4-CtVxnYLa.js +62 -0
  39. package/web/dist/assets/cytoscape.esm-B3I8pqwA.js +321 -0
  40. package/web/dist/assets/dagre-CXRCoUWR.js +1 -0
  41. package/web/dist/assets/dagre-VKFMJZFB-CbAaKbWe.js +4 -0
  42. package/web/dist/assets/defaultLocale-C8Fc0cco.js +1 -0
  43. package/web/dist/assets/diagram-FQU43EPY-DkeAFpQM.js +3 -0
  44. package/web/dist/assets/diagram-G47NLZAW-BdfPbsL1.js +24 -0
  45. package/web/dist/assets/diagram-NH7WQ7WH-wWIYA2VS.js +24 -0
  46. package/web/dist/assets/diagram-OA4YK3LP-Chx7_D6X.js +30 -0
  47. package/web/dist/assets/diagram-WEI45ONY-DxAoHRrP.js +41 -0
  48. package/web/dist/assets/dist-zlHGdC4Y.js +1 -0
  49. package/web/dist/assets/ebnfDiagram-CCIWWBDH-DcnWNqZc.js +1 -0
  50. package/web/dist/assets/erDiagram-Q63AITRT-BX0XqX5B.js +85 -0
  51. package/web/dist/assets/eventmodeling-45OFAUF4-CA5_fuzk.js +1 -0
  52. package/web/dist/assets/flowDiagram-23GEKE2U-DL5kTdXb.js +1 -0
  53. package/web/dist/assets/ganttDiagram-NO4QXBWP-CFmDEUpW.js +292 -0
  54. package/web/dist/assets/gitGraph-TEB2WS4Q-BiEBwxQy.js +1 -0
  55. package/web/dist/assets/gitGraphDiagram-IHSO6WYX--62v4OfD.js +106 -0
  56. package/web/dist/assets/graphlib-B8gBHxth.js +1 -0
  57. package/web/dist/assets/index-BUs4sN1r.css +1 -0
  58. package/web/dist/assets/index-DVXPy-Pj.js +414 -0
  59. package/web/dist/assets/info-DKCQHKI2-BLKxCcH7.js +1 -0
  60. package/web/dist/assets/infoDiagram-FWYZ7A6U-BnrcoE4X.js +2 -0
  61. package/web/dist/assets/init-D6jRqBbL.js +1 -0
  62. package/web/dist/assets/ishikawaDiagram-FXEZZL3T-BuUSROzL.js +70 -0
  63. package/web/dist/assets/journeyDiagram-5HDEW3XC-CsPvawEB.js +139 -0
  64. package/web/dist/assets/kanban-definition-HUTT4EX6-hCokh58u.js +89 -0
  65. package/web/dist/assets/katex-CddkPoXu.js +257 -0
  66. package/web/dist/assets/line-CE9BvxIa.js +1 -0
  67. package/web/dist/assets/linear-B8yeZliB.js +1 -0
  68. package/web/dist/assets/map-DsCK-0Cs.js +1 -0
  69. package/web/dist/assets/mermaid-parser.core-CAAH_OSq.js +7 -0
  70. package/web/dist/assets/mindmap-definition-LN4V7U3C-plfH1Ve5.js +96 -0
  71. package/web/dist/assets/ordinal-hYBb2elL.js +1 -0
  72. package/web/dist/assets/packet-7NZHBO7P-ap_XD9pB.js +1 -0
  73. package/web/dist/assets/path-BWPyau1x.js +1 -0
  74. package/web/dist/assets/pegDiagram-2B236MQR-DpbGacSD.js +1 -0
  75. package/web/dist/assets/pie-RZYD4A2V-C7RWGzoe.js +1 -0
  76. package/web/dist/assets/pieDiagram-ENE6RG2P-DsEjdRIW.js +39 -0
  77. package/web/dist/assets/quadrantDiagram-ABIIQ3AL-CotpR7ZY.js +7 -0
  78. package/web/dist/assets/radar-I7S5WNFK-D8ICPnt1.js +1 -0
  79. package/web/dist/assets/railroad-3IZDKUUU-B7ZJ3IRr.js +1 -0
  80. package/web/dist/assets/railroad-abnf-AHOZXSZD-uSXjMlP2.js +1 -0
  81. package/web/dist/assets/railroad-ebnf-EBAXGLYW-9im8bOEZ.js +1 -0
  82. package/web/dist/assets/railroad-peg-LSFZ7HO6-62Yk_rP2.js +1 -0
  83. package/web/dist/assets/railroadDiagram-RFXS5EU6-C9kLSHvN.js +1 -0
  84. package/web/dist/assets/requirementDiagram-TGXJPOKE-BslCStWL.js +84 -0
  85. package/web/dist/assets/rough.esm-CSKSodPl.js +1 -0
  86. package/web/dist/assets/sankeyDiagram-HTMAVEWB-9CV0aY5J.js +40 -0
  87. package/web/dist/assets/sequenceDiagram-DBY2YBRQ-Cg8Nc-TM.js +162 -0
  88. package/web/dist/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  89. package/web/dist/assets/src-W4W9ly-y.js +1 -0
  90. package/web/dist/assets/stateDiagram-2N3HPSRC-DB4TsO7Z.js +1 -0
  91. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-SUHVLdPI.js +1 -0
  92. package/web/dist/assets/swimlanes-5IMT3BWC-CgeBbl6U.js +2 -0
  93. package/web/dist/assets/swimlanesDiagram-G3AALYLV-BfFfe5gc.js +8 -0
  94. package/web/dist/assets/timeline-definition-FHXFAJF6-BRSnucVn.js +120 -0
  95. package/web/dist/assets/treeView-QDETBFTQ-lUySd_Pd.js +1 -0
  96. package/web/dist/assets/treemap-6X3UGDF4-BewRw9PG.js +1 -0
  97. package/web/dist/assets/vennDiagram-L72KCM5P-gearbXh2.js +34 -0
  98. package/web/dist/assets/wardley-OPB4EBWU-BCrrgDHP.js +1 -0
  99. package/web/dist/assets/wardleyDiagram-EHGQE667-DBWn9RRb.js +78 -0
  100. package/web/dist/assets/xychartDiagram-FW5EYKEG-CUL1Ijyf.js +7 -0
  101. package/web/dist/index.html +17 -2
  102. package/web/dist/assets/abnfDiagram-VRR7QNED-CM_SmMdS.js +0 -1
  103. package/web/dist/assets/arc-a2d6VGyS.js +0 -1
  104. package/web/dist/assets/architectureDiagram-ZJ3FMSHR-CKwso5u1.js +0 -36
  105. package/web/dist/assets/blockDiagram-677ZJIJ3-DOlRPtCE.js +0 -132
  106. package/web/dist/assets/c4Diagram-LMCZKHZV-BVWP4jKU.js +0 -10
  107. package/web/dist/assets/channel-Bv2v5Ka7.js +0 -1
  108. package/web/dist/assets/chunk-2Q5K7J3B-Dg1gXqD_.js +0 -1
  109. package/web/dist/assets/chunk-32BRIVSS-DMEBIyv0.js +0 -1
  110. package/web/dist/assets/chunk-EX3LRPZG-B0LUaNef.js +0 -231
  111. package/web/dist/assets/chunk-JWPE2WC7-RWpAfnwW.js +0 -1
  112. package/web/dist/assets/chunk-MOJQB5TN-CHzjH2SN.js +0 -88
  113. package/web/dist/assets/chunk-RYQCIY6F-CB84H40n.js +0 -1
  114. package/web/dist/assets/chunk-V7JOEXUC-hDfVeloC.js +0 -206
  115. package/web/dist/assets/chunk-VR4S4FIN-C-ISU9mB.js +0 -1
  116. package/web/dist/assets/chunk-XXDRQBXY-Q-1uA8_v.js +0 -1
  117. package/web/dist/assets/classDiagram-OUVF2IWQ-C5GMtsqN.js +0 -1
  118. package/web/dist/assets/classDiagram-v2-EOCWNBFH-C5GMtsqN.js +0 -1
  119. package/web/dist/assets/cose-bilkent-JH36ORCC-D4aRsqbg.js +0 -1
  120. package/web/dist/assets/cynefin-VYW2F7L2-Bb_blZYP.js +0 -166
  121. package/web/dist/assets/cynefinDiagram-TSTJHNR4-CRX9tSwx.js +0 -62
  122. package/web/dist/assets/cytoscape.esm-D3_iZ_3b.js +0 -321
  123. package/web/dist/assets/dagre-VKFMJZFB-BHcw1uwS.js +0 -4
  124. package/web/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
  125. package/web/dist/assets/diagram-FQU43EPY-BbFIcSGy.js +0 -3
  126. package/web/dist/assets/diagram-G47NLZAW-D6SEnl9Y.js +0 -24
  127. package/web/dist/assets/diagram-NH7WQ7WH-Dq4ObETB.js +0 -24
  128. package/web/dist/assets/diagram-OA4YK3LP-EF9zUKb4.js +0 -30
  129. package/web/dist/assets/diagram-WEI45ONY-9MSuI1lJ.js +0 -41
  130. package/web/dist/assets/ebnfDiagram-CCIWWBDH-BKTvNs-v.js +0 -1
  131. package/web/dist/assets/erDiagram-Q63AITRT-BRZ7eOih.js +0 -85
  132. package/web/dist/assets/flowDiagram-23GEKE2U-n6RjlBIU.js +0 -156
  133. package/web/dist/assets/ganttDiagram-NO4QXBWP-DJ8LFx2q.js +0 -292
  134. package/web/dist/assets/gitGraphDiagram-IHSO6WYX-PBNVnu__.js +0 -106
  135. package/web/dist/assets/graph-DOmOIIwC.js +0 -1
  136. package/web/dist/assets/index-BkpgTe8Q.js +0 -674
  137. package/web/dist/assets/index-CfSIxCYt.css +0 -1
  138. package/web/dist/assets/infoDiagram-FWYZ7A6U-DpF1ykim.js +0 -2
  139. package/web/dist/assets/init-Gi6I4Gst.js +0 -1
  140. package/web/dist/assets/ishikawaDiagram-FXEZZL3T-BcLaz8vn.js +0 -70
  141. package/web/dist/assets/journeyDiagram-5HDEW3XC-DhDa2tr6.js +0 -139
  142. package/web/dist/assets/kanban-definition-HUTT4EX6-Cj5MBccm.js +0 -89
  143. package/web/dist/assets/katex-HP8lGamR.js +0 -257
  144. package/web/dist/assets/layout-D-LzfAck.js +0 -1
  145. package/web/dist/assets/linear-D-RAQuF7.js +0 -1
  146. package/web/dist/assets/map-DxJ2ADlA.js +0 -1
  147. package/web/dist/assets/mindmap-definition-LN4V7U3C-CDHapI3O.js +0 -96
  148. package/web/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  149. package/web/dist/assets/pegDiagram-2B236MQR-Cga1GKF6.js +0 -1
  150. package/web/dist/assets/pieDiagram-ENE6RG2P-BtzEbqHl.js +0 -39
  151. package/web/dist/assets/quadrantDiagram-ABIIQ3AL-CMHXJPd5.js +0 -7
  152. package/web/dist/assets/railroadDiagram-RFXS5EU6-C5dKOd7a.js +0 -1
  153. package/web/dist/assets/requirementDiagram-TGXJPOKE-Cjx6LPCa.js +0 -84
  154. package/web/dist/assets/sankeyDiagram-HTMAVEWB-C8kzAycX.js +0 -40
  155. package/web/dist/assets/sequenceDiagram-DBY2YBRQ-DwEDppgS.js +0 -162
  156. package/web/dist/assets/sizeCapture-X5ZJPWSS-CUgsJ-ry.js +0 -1
  157. package/web/dist/assets/stateDiagram-2N3HPSRC-B4fcb7Qa.js +0 -1
  158. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-IQXX7rVH.js +0 -1
  159. package/web/dist/assets/swimlanes-5IMT3BWC-Bw27O3PP.js +0 -2
  160. package/web/dist/assets/swimlanesDiagram-G3AALYLV-DRko3G58.js +0 -8
  161. package/web/dist/assets/timeline-definition-FHXFAJF6-Cra4Bj9n.js +0 -120
  162. package/web/dist/assets/vennDiagram-L72KCM5P-B_Nmy9aH.js +0 -34
  163. package/web/dist/assets/wardleyDiagram-EHGQE667-BE1omAzb.js +0 -78
  164. package/web/dist/assets/xychartDiagram-FW5EYKEG-CsNs1p2c.js +0 -7
package/README.en.md CHANGED
@@ -13,6 +13,8 @@ One template turns Claude Code / Codex / OpenCode / Cursor into a contract-gover
13
13
 
14
14
  [简体中文](README.md) · **English**
15
15
 
16
+ <img src="screen-en.png" alt="opcflow visual workbench — artifact tree + review-queue diff + live rendering" width="840" />
17
+
16
18
  </div>
17
19
 
18
20
  ---
@@ -61,12 +63,17 @@ from contract to code to acceptance.**
61
63
 
62
64
  ## Installation
63
65
 
64
- opcflow is an npm package — it **does not drop source into your project**. Bootstrap from your
65
- project root with npx, zero install:
66
+ opcflow is an npm package — it **does not drop source into your project**. Install it once globally to
67
+ get the `opcflow` command:
68
+
69
+ ```bash
70
+ pnpm i -g @dawipong/opcflow # or npm i -g @dawipong/opcflow
71
+ ```
72
+
73
+ Bootstrap from your project root (no args → interactive: pick platforms / endpoints / model; or pass flags):
66
74
 
67
75
  ```bash
68
- # In your project root: pick platforms (multi-select) + endpoints, generate in one shot
69
- npx -y @dawipong/opcflow init --platforms=claude,cursor --endpoints=service,web
76
+ opcflow init --platforms=claude,cursor --endpoints=service,web
70
77
  # backend-only: --endpoints=service (auto-prunes designer, qa kept)
71
78
  # set models: --model='{"codex":"gpt-5.1-codex"}' or --model=<single string> (defaults per platform)
72
79
  ```
@@ -85,13 +92,13 @@ Requires Node ≥ 22.
85
92
  1. **Fill in code-dir conventions** — edit `codeRoots` in `workbench.config.json` (each endpoint's code dir, `{module}` placeholder).
86
93
  2. **Start the opcflow** (visual approval panel, connects to the project's `.workbench`):
87
94
  ```bash
88
- npx -y @dawipong/opcflow serve # → http://127.0.0.1:5620 (--project sets the root, defaults to cwd)
95
+ opcflow serve # → http://127.0.0.1:5620 (--project sets the root, defaults to cwd)
89
96
  ```
90
97
  3. **Give the AI your first requirement** (one sentence). It runs the five-role pipeline, producing contracts layer by layer and submitting them for review.
91
98
  4. **Nod in the review queue** — view diffs in the opcflow; approve / reject; thumbs-up prototypes.
92
99
  5. **Once all contracts are approved, dispatch:**
93
100
  ```bash
94
- npx -y @dawipong/opcflow plan --module=<module> # dispatch architect/designer/developer/qa tasks
101
+ opcflow plan --module=<module> # dispatch architect/designer/developer/qa tasks
95
102
  ```
96
103
 
97
104
  Every later change is tracked: edit an approved contract → auto-invalidate → downstream stale → a
@@ -136,7 +143,7 @@ never silently deviate.
136
143
 
137
144
  ## CLI Commands & Parameters
138
145
 
139
- Every command: `npx -y @dawipong/opcflow <command> [args]`. Global `--project=<path>` sets the project
146
+ Every command: `opcflow <command> [args]` (after global install; or `npx -y @dawipong/opcflow <command>` without installing). Global `--project=<path>` sets the project
140
147
  root (otherwise it searches upward for `workbench.config.json`). File-path arguments are separated with
141
148
  `--` (e.g. `submit --actor=x -- <path>`).
142
149
 
@@ -227,7 +234,7 @@ root (otherwise it searches upward for `workbench.config.json`). File-path argum
227
234
 
228
235
  ## Visual opcflow
229
236
 
230
- `npx -y @dawipong/opcflow serve` serves at `http://127.0.0.1:5620`: the artifact tree (colors update live), markdown /
237
+ `opcflow serve` serves at `http://127.0.0.1:5620`: the artifact tree (colors update live), markdown /
231
238
  mermaid / HTML-prototype iframe / code rendering, the **review-queue diff** (approved version vs.
232
239
  current), an event timeline, and live SSE refresh. Approve, reject, and thumbs-up/down prototypes right
233
240
  here.
@@ -235,9 +242,8 @@ here.
235
242
  ## Scripts
236
243
 
237
244
  ```bash
238
- pnpm start # start the opcflow (build frontend + start server; use for first run)
239
- pnpm run serve # server only, no frontend build (404 if web/dist is missing)
240
- pnpm run web:build # build the frontend
245
+ pnpm run web:build # build the frontend (required before first serve, else web/dist is missing → 404)
246
+ pnpm exec tsx cli.ts serve # start the workbench from source http://127.0.0.1:5620
241
247
  pnpm test # core unit tests
242
248
  pnpm run typecheck # type check
243
249
  pnpm run check:isolation # zero business-coupling check
package/README.md CHANGED
@@ -13,6 +13,8 @@
13
13
 
14
14
  **简体中文** · [English](README.en.md)
15
15
 
16
+ <img src="screen.png" alt="opcflow 可视化工作台 —— artifact 树 + 待审队列 diff + 实时渲染" width="840" />
17
+
16
18
  </div>
17
19
 
18
20
  ---
@@ -56,11 +58,16 @@ opcflow 接管 **spec 之后的执行与验证**,两者是不同层次、可互
56
58
 
57
59
  ## 安装
58
60
 
59
- opcflow 是一个 npm 包 —— **不往你的项目里塞源码**。在项目根用 npx 零安装引导:
61
+ opcflow 是一个 npm 包 —— **不往你的项目里塞源码**。全局装一次,拿到 `opcflow` 命令:
62
+
63
+ ```bash
64
+ pnpm i -g @dawipong/opcflow # 或 npm i -g @dawipong/opcflow
65
+ ```
66
+
67
+ 在你的项目根一键引导(不带参数进交互:选平台 / 端 / 模型;也可用参数直接指定):
60
68
 
61
69
  ```bash
62
- # 在你的项目根:选平台(多选)+ 端,一键生成
63
- npx -y @dawipong/opcflow init --platforms=claude,cursor --endpoints=service,web
70
+ opcflow init --platforms=claude,cursor --endpoints=service,web
64
71
  # 纯后端: --endpoints=service (自动裁掉 designer,qa 保留)
65
72
  # 指定模型: --model='{"codex":"gpt-5.1-codex"}' 或 --model=<单个串>(缺省用各平台默认)
66
73
  ```
@@ -78,13 +85,13 @@ npx -y @dawipong/opcflow init --platforms=claude,cursor --endpoints=service,web
78
85
  1. **填代码目录约定** —— 编辑 `workbench.config.json` 的 `codeRoots`(每个端的代码目录,`{module}` 占位)。
79
86
  2. **起工作台**(可视化审批面板,连接项目的 `.workbench`):
80
87
  ```bash
81
- npx -y @dawipong/opcflow serve # → http://127.0.0.1:5620(--project 指定项目根,缺省 cwd)
88
+ opcflow serve # → http://127.0.0.1:5620(--project 指定项目根,缺省 cwd)
82
89
  ```
83
90
  3. **对 AI 提第一个需求**(一句话)。它走五角色流水线逐层产出契约并送审。
84
91
  4. **在待审队列点头** —— 工作台看 diff,approve / 打回 / 给原型 👍。
85
92
  5. **契约全 approved 后派发**:
86
93
  ```bash
87
- npx -y @dawipong/opcflow plan --module=<模块> # 一键派发 architect/designer/developer/qa 任务
94
+ opcflow plan --module=<模块> # 一键派发 architect/designer/developer/qa 任务
88
95
  ```
89
96
 
90
97
  之后的每次改动都被追踪:改了已批契约 → 自动失效 → 下游 stale → 待审队列出现复审任务。
@@ -124,7 +131,7 @@ flowchart LR
124
131
 
125
132
  ## CLI 命令参数
126
133
 
127
- 所有命令:`npx -y @dawipong/opcflow <命令> [参数]`。全局 `--project=<路径>` 指定项目根(缺省向上找
134
+ 所有命令:`opcflow <命令> [参数]`(全局装后即用;或 `npx -y @dawipong/opcflow <命令>` 免装)。全局 `--project=<路径>` 指定项目根(缺省向上找
128
135
  `workbench.config.json`)。文件路径参数用 `--` 分隔(如 `submit --actor=x -- <路径>`)。
129
136
 
130
137
  **任务**
@@ -214,16 +221,15 @@ flowchart LR
214
221
 
215
222
  ## 可视化工作台
216
223
 
217
- `npx -y @dawipong/opcflow serve` 起在 `http://127.0.0.1:5620`:artifact 树(状态实时变色)、markdown / mermaid / HTML 原型
224
+ `opcflow serve` 起在 `http://127.0.0.1:5620`:artifact 树(状态实时变色)、markdown / mermaid / HTML 原型
218
225
  iframe / 代码渲染、**待审队列 diff**(approved 版本 vs 当前)、事件时间线、SSE 实时刷新。审批、打回、
219
226
  给原型 👍👎 都在这里点。
220
227
 
221
228
  ## 脚本
222
229
 
223
230
  ```bash
224
- pnpm start # 启动工作台(build 前端 + 起 server;首次用它)
225
- pnpm run serve # 只起 server,不 build 前端(web/dist 未生成会 404)
226
- pnpm run web:build # 构建前端
231
+ pnpm run web:build # 构建前端(工作台首次运行前需先构建,否则 web/dist 未生成会 404)
232
+ pnpm exec tsx cli.ts serve # 从源码起工作台 http://127.0.0.1:5620
227
233
  pnpm test # core 单元测试
228
234
  pnpm run typecheck # 类型检查
229
235
  pnpm run check:isolation # 零业务耦合校验
package/dist/cli.mjs CHANGED
@@ -4466,9 +4466,12 @@ function fail(msg) {
4466
4466
  }
4467
4467
 
4468
4468
  // cli.ts
4469
- init_core();
4470
4469
  async function main() {
4471
4470
  const { command, a } = parseArgs(process.argv.slice(2));
4471
+ if (!command || command === "-h" || command === "--help" || command === "help") {
4472
+ console.log(HELP);
4473
+ return;
4474
+ }
4472
4475
  if (command === "init") {
4473
4476
  await runInit(a.project || process.cwd(), a);
4474
4477
  return;
@@ -4534,10 +4537,6 @@ async function main() {
4534
4537
  return;
4535
4538
  }
4536
4539
  const ctx = openWorkbench(a.project);
4537
- if (!command) {
4538
- printTasks(listTasks(ctx, {}));
4539
- return;
4540
- }
4541
4540
  try {
4542
4541
  await runCommand(ctx, command, a);
4543
4542
  } catch (err) {
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@dawipong/opcflow",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Spec-anchored, drift-enforced execution layer for AI coding agents — artifact DAG, trust gates, multi-role pipeline; generates agents/MCP/hooks for Claude Code, Codex, OpenCode & Cursor.",
5
5
  "license": "MIT",
6
6
  "author": "Dawi",
7
7
  "homepage": "https://github.com/nvrenshiren/opcflow#readme",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/nvrenshiren/opcflow.git"
10
+ "url": "git+https://github.com/nvrenshiren/opcflow.git"
11
11
  },
12
12
  "bugs": "https://github.com/nvrenshiren/opcflow/issues",
13
13
  "keywords": [
@@ -44,9 +44,7 @@
44
44
  "check:isolation": "tsx scripts/check-isolation.ts",
45
45
  "web:build": "vite build",
46
46
  "build": "pnpm run web:build && node scripts/build.mjs",
47
- "prepublishOnly": "pnpm run build",
48
- "serve": "tsx cli.ts serve",
49
- "start": "pnpm run web:build && tsx cli.ts serve"
47
+ "prepublishOnly": "pnpm run build"
50
48
  },
51
49
  "dependencies": {
52
50
  "@fastify/cors": "^11",
@@ -62,11 +60,13 @@
62
60
  "devDependencies": {
63
61
  "@ant-design/icons": "^6",
64
62
  "@monaco-editor/react": "^4.7.0",
63
+ "@semantic-release/changelog": "^6.0.3",
64
+ "@semantic-release/git": "^10.0.1",
65
65
  "@types/better-sqlite3": "^7",
66
66
  "@types/node": "^22",
67
67
  "@types/react": "^18",
68
68
  "@types/react-dom": "^18",
69
- "@vitejs/plugin-react": "^5",
69
+ "@vitejs/plugin-react": "^6",
70
70
  "antd": "^6",
71
71
  "esbuild": "^0.28.1",
72
72
  "mermaid": "^11",
@@ -74,8 +74,9 @@
74
74
  "react-dom": "^18.3.1",
75
75
  "react-markdown": "^10",
76
76
  "remark-gfm": "^4",
77
+ "semantic-release": "^25.0.5",
77
78
  "tsx": "^4",
78
79
  "typescript": "^5.5.0",
79
- "vite": "^7"
80
+ "vite": "^8"
80
81
  }
81
82
  }
@@ -0,0 +1 @@
1
+ import{m as e}from"./src-W4W9ly-y.js";import{n as t}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import"./chunk-WYO6CB5R-BaRUDpDl.js";import"./index-DVXPy-Pj.js";import{m as n,t as r}from"./mermaid-parser.core-CAAH_OSq.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-Y0jSjq4a.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";var c=n().RailroadAbnf.parser.LangiumParser,l=t(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=t(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=t(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=t(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=t(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=t(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=t(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:t(t=>{o.clear(),e.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(t);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new r(n);let i=n.value;e.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),e.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./path-BWPyau1x.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-zlHGdC4Y.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-KEIR6QF5-BfrZ3jm6.js";import{M as e}from"./mermaid-parser.core-CAAH_OSq.js";export{e as createArchitectureServices};