@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.
- package/README.en.md +17 -11
- package/README.md +16 -10
- package/dist/cli.mjs +4 -5
- package/package.json +8 -7
- package/web/dist/assets/abnfDiagram-VRR7QNED-DctuL32B.js +1 -0
- package/web/dist/assets/arc-DPoWLLje.js +1 -0
- package/web/dist/assets/architecture-TIHT7OUA-Bgyz4pDY.js +1 -0
- package/web/dist/assets/architectureDiagram-ZJ3FMSHR--07w7V0c.js +36 -0
- package/web/dist/assets/array-BifhSqXX.js +1 -0
- package/web/dist/assets/blockDiagram-677ZJIJ3-CUYUzMZC.js +132 -0
- package/web/dist/assets/c4Diagram-LMCZKHZV-DhT2uxnj.js +10 -0
- package/web/dist/assets/channel-vHKEEV51.js +1 -0
- package/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/web/dist/assets/chunk-32BRIVSS-CztnJRkA.js +1 -0
- package/web/dist/assets/{chunk-5VM5RSS4-BfNutGrI.js → chunk-5VM5RSS4-ZNzvKenW.js} +2 -2
- package/web/dist/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- package/web/dist/assets/chunk-C7G6YPKG-jsbUGVSb.js +1 -0
- package/web/dist/assets/chunk-EX3LRPZG-DQGT_sG5.js +231 -0
- package/web/dist/assets/chunk-HOUHSVGY-DDAtZMtg.js +1 -0
- package/web/dist/assets/chunk-ICXQ74PX-C2h9d1ob.js +2 -0
- package/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/web/dist/assets/chunk-KEIR6QF5-BfrZ3jm6.js +161 -0
- package/web/dist/assets/chunk-MOJQB5TN-Y0jSjq4a.js +88 -0
- package/web/dist/assets/chunk-OGEWGWER-B5mrusUD.js +1 -0
- package/web/dist/assets/chunk-PUDLZKDR-pSIk3CZr.js +156 -0
- package/web/dist/assets/chunk-Q4XR5HBZ-Cfw3UWMb.js +70 -0
- package/web/dist/assets/chunk-RYQCIY6F-CCUojmgb.js +1 -0
- package/web/dist/assets/chunk-V7JOEXUC-D_2vwCJz.js +206 -0
- package/web/dist/assets/chunk-VR4S4FIN-CUMv178C.js +1 -0
- package/web/dist/assets/chunk-WYO6CB5R-BaRUDpDl.js +127 -0
- package/web/dist/assets/chunk-XXDRQBXY-tmq33VNh.js +1 -0
- package/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/web/dist/assets/chunk-ZGVPDNZ5-DK9a-Iwy.js +62 -0
- package/web/dist/assets/classDiagram-OUVF2IWQ-Ckf-YAkB.js +1 -0
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-Ckf-YAkB.js +1 -0
- package/web/dist/assets/cose-bilkent-JH36ORCC-BV8ttTSE.js +1 -0
- package/web/dist/assets/cynefin-VYW2F7L2-BncvlU8s.js +1 -0
- package/web/dist/assets/cynefinDiagram-TSTJHNR4-CtVxnYLa.js +62 -0
- package/web/dist/assets/cytoscape.esm-B3I8pqwA.js +321 -0
- package/web/dist/assets/dagre-CXRCoUWR.js +1 -0
- package/web/dist/assets/dagre-VKFMJZFB-CbAaKbWe.js +4 -0
- package/web/dist/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/web/dist/assets/diagram-FQU43EPY-DkeAFpQM.js +3 -0
- package/web/dist/assets/diagram-G47NLZAW-BdfPbsL1.js +24 -0
- package/web/dist/assets/diagram-NH7WQ7WH-wWIYA2VS.js +24 -0
- package/web/dist/assets/diagram-OA4YK3LP-Chx7_D6X.js +30 -0
- package/web/dist/assets/diagram-WEI45ONY-DxAoHRrP.js +41 -0
- package/web/dist/assets/dist-zlHGdC4Y.js +1 -0
- package/web/dist/assets/ebnfDiagram-CCIWWBDH-DcnWNqZc.js +1 -0
- package/web/dist/assets/erDiagram-Q63AITRT-BX0XqX5B.js +85 -0
- package/web/dist/assets/eventmodeling-45OFAUF4-CA5_fuzk.js +1 -0
- package/web/dist/assets/flowDiagram-23GEKE2U-DL5kTdXb.js +1 -0
- package/web/dist/assets/ganttDiagram-NO4QXBWP-CFmDEUpW.js +292 -0
- package/web/dist/assets/gitGraph-TEB2WS4Q-BiEBwxQy.js +1 -0
- package/web/dist/assets/gitGraphDiagram-IHSO6WYX--62v4OfD.js +106 -0
- package/web/dist/assets/graphlib-B8gBHxth.js +1 -0
- package/web/dist/assets/index-BUs4sN1r.css +1 -0
- package/web/dist/assets/index-DVXPy-Pj.js +414 -0
- package/web/dist/assets/info-DKCQHKI2-BLKxCcH7.js +1 -0
- package/web/dist/assets/infoDiagram-FWYZ7A6U-BnrcoE4X.js +2 -0
- package/web/dist/assets/init-D6jRqBbL.js +1 -0
- package/web/dist/assets/ishikawaDiagram-FXEZZL3T-BuUSROzL.js +70 -0
- package/web/dist/assets/journeyDiagram-5HDEW3XC-CsPvawEB.js +139 -0
- package/web/dist/assets/kanban-definition-HUTT4EX6-hCokh58u.js +89 -0
- package/web/dist/assets/katex-CddkPoXu.js +257 -0
- package/web/dist/assets/line-CE9BvxIa.js +1 -0
- package/web/dist/assets/linear-B8yeZliB.js +1 -0
- package/web/dist/assets/map-DsCK-0Cs.js +1 -0
- package/web/dist/assets/mermaid-parser.core-CAAH_OSq.js +7 -0
- package/web/dist/assets/mindmap-definition-LN4V7U3C-plfH1Ve5.js +96 -0
- package/web/dist/assets/ordinal-hYBb2elL.js +1 -0
- package/web/dist/assets/packet-7NZHBO7P-ap_XD9pB.js +1 -0
- package/web/dist/assets/path-BWPyau1x.js +1 -0
- package/web/dist/assets/pegDiagram-2B236MQR-DpbGacSD.js +1 -0
- package/web/dist/assets/pie-RZYD4A2V-C7RWGzoe.js +1 -0
- package/web/dist/assets/pieDiagram-ENE6RG2P-DsEjdRIW.js +39 -0
- package/web/dist/assets/quadrantDiagram-ABIIQ3AL-CotpR7ZY.js +7 -0
- package/web/dist/assets/radar-I7S5WNFK-D8ICPnt1.js +1 -0
- package/web/dist/assets/railroad-3IZDKUUU-B7ZJ3IRr.js +1 -0
- package/web/dist/assets/railroad-abnf-AHOZXSZD-uSXjMlP2.js +1 -0
- package/web/dist/assets/railroad-ebnf-EBAXGLYW-9im8bOEZ.js +1 -0
- package/web/dist/assets/railroad-peg-LSFZ7HO6-62Yk_rP2.js +1 -0
- package/web/dist/assets/railroadDiagram-RFXS5EU6-C9kLSHvN.js +1 -0
- package/web/dist/assets/requirementDiagram-TGXJPOKE-BslCStWL.js +84 -0
- package/web/dist/assets/rough.esm-CSKSodPl.js +1 -0
- package/web/dist/assets/sankeyDiagram-HTMAVEWB-9CV0aY5J.js +40 -0
- package/web/dist/assets/sequenceDiagram-DBY2YBRQ-Cg8Nc-TM.js +162 -0
- package/web/dist/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- package/web/dist/assets/src-W4W9ly-y.js +1 -0
- package/web/dist/assets/stateDiagram-2N3HPSRC-DB4TsO7Z.js +1 -0
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-SUHVLdPI.js +1 -0
- package/web/dist/assets/swimlanes-5IMT3BWC-CgeBbl6U.js +2 -0
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-BfFfe5gc.js +8 -0
- package/web/dist/assets/timeline-definition-FHXFAJF6-BRSnucVn.js +120 -0
- package/web/dist/assets/treeView-QDETBFTQ-lUySd_Pd.js +1 -0
- package/web/dist/assets/treemap-6X3UGDF4-BewRw9PG.js +1 -0
- package/web/dist/assets/vennDiagram-L72KCM5P-gearbXh2.js +34 -0
- package/web/dist/assets/wardley-OPB4EBWU-BCrrgDHP.js +1 -0
- package/web/dist/assets/wardleyDiagram-EHGQE667-DBWn9RRb.js +78 -0
- package/web/dist/assets/xychartDiagram-FW5EYKEG-CUL1Ijyf.js +7 -0
- package/web/dist/index.html +17 -2
- package/web/dist/assets/abnfDiagram-VRR7QNED-CM_SmMdS.js +0 -1
- package/web/dist/assets/arc-a2d6VGyS.js +0 -1
- package/web/dist/assets/architectureDiagram-ZJ3FMSHR-CKwso5u1.js +0 -36
- package/web/dist/assets/blockDiagram-677ZJIJ3-DOlRPtCE.js +0 -132
- package/web/dist/assets/c4Diagram-LMCZKHZV-BVWP4jKU.js +0 -10
- package/web/dist/assets/channel-Bv2v5Ka7.js +0 -1
- package/web/dist/assets/chunk-2Q5K7J3B-Dg1gXqD_.js +0 -1
- package/web/dist/assets/chunk-32BRIVSS-DMEBIyv0.js +0 -1
- package/web/dist/assets/chunk-EX3LRPZG-B0LUaNef.js +0 -231
- package/web/dist/assets/chunk-JWPE2WC7-RWpAfnwW.js +0 -1
- package/web/dist/assets/chunk-MOJQB5TN-CHzjH2SN.js +0 -88
- package/web/dist/assets/chunk-RYQCIY6F-CB84H40n.js +0 -1
- package/web/dist/assets/chunk-V7JOEXUC-hDfVeloC.js +0 -206
- package/web/dist/assets/chunk-VR4S4FIN-C-ISU9mB.js +0 -1
- package/web/dist/assets/chunk-XXDRQBXY-Q-1uA8_v.js +0 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-C5GMtsqN.js +0 -1
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-C5GMtsqN.js +0 -1
- package/web/dist/assets/cose-bilkent-JH36ORCC-D4aRsqbg.js +0 -1
- package/web/dist/assets/cynefin-VYW2F7L2-Bb_blZYP.js +0 -166
- package/web/dist/assets/cynefinDiagram-TSTJHNR4-CRX9tSwx.js +0 -62
- package/web/dist/assets/cytoscape.esm-D3_iZ_3b.js +0 -321
- package/web/dist/assets/dagre-VKFMJZFB-BHcw1uwS.js +0 -4
- package/web/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
- package/web/dist/assets/diagram-FQU43EPY-BbFIcSGy.js +0 -3
- package/web/dist/assets/diagram-G47NLZAW-D6SEnl9Y.js +0 -24
- package/web/dist/assets/diagram-NH7WQ7WH-Dq4ObETB.js +0 -24
- package/web/dist/assets/diagram-OA4YK3LP-EF9zUKb4.js +0 -30
- package/web/dist/assets/diagram-WEI45ONY-9MSuI1lJ.js +0 -41
- package/web/dist/assets/ebnfDiagram-CCIWWBDH-BKTvNs-v.js +0 -1
- package/web/dist/assets/erDiagram-Q63AITRT-BRZ7eOih.js +0 -85
- package/web/dist/assets/flowDiagram-23GEKE2U-n6RjlBIU.js +0 -156
- package/web/dist/assets/ganttDiagram-NO4QXBWP-DJ8LFx2q.js +0 -292
- package/web/dist/assets/gitGraphDiagram-IHSO6WYX-PBNVnu__.js +0 -106
- package/web/dist/assets/graph-DOmOIIwC.js +0 -1
- package/web/dist/assets/index-BkpgTe8Q.js +0 -674
- package/web/dist/assets/index-CfSIxCYt.css +0 -1
- package/web/dist/assets/infoDiagram-FWYZ7A6U-DpF1ykim.js +0 -2
- package/web/dist/assets/init-Gi6I4Gst.js +0 -1
- package/web/dist/assets/ishikawaDiagram-FXEZZL3T-BcLaz8vn.js +0 -70
- package/web/dist/assets/journeyDiagram-5HDEW3XC-DhDa2tr6.js +0 -139
- package/web/dist/assets/kanban-definition-HUTT4EX6-Cj5MBccm.js +0 -89
- package/web/dist/assets/katex-HP8lGamR.js +0 -257
- package/web/dist/assets/layout-D-LzfAck.js +0 -1
- package/web/dist/assets/linear-D-RAQuF7.js +0 -1
- package/web/dist/assets/map-DxJ2ADlA.js +0 -1
- package/web/dist/assets/mindmap-definition-LN4V7U3C-CDHapI3O.js +0 -96
- package/web/dist/assets/ordinal-Cboi1Yqb.js +0 -1
- package/web/dist/assets/pegDiagram-2B236MQR-Cga1GKF6.js +0 -1
- package/web/dist/assets/pieDiagram-ENE6RG2P-BtzEbqHl.js +0 -39
- package/web/dist/assets/quadrantDiagram-ABIIQ3AL-CMHXJPd5.js +0 -7
- package/web/dist/assets/railroadDiagram-RFXS5EU6-C5dKOd7a.js +0 -1
- package/web/dist/assets/requirementDiagram-TGXJPOKE-Cjx6LPCa.js +0 -84
- package/web/dist/assets/sankeyDiagram-HTMAVEWB-C8kzAycX.js +0 -40
- package/web/dist/assets/sequenceDiagram-DBY2YBRQ-DwEDppgS.js +0 -162
- package/web/dist/assets/sizeCapture-X5ZJPWSS-CUgsJ-ry.js +0 -1
- package/web/dist/assets/stateDiagram-2N3HPSRC-B4fcb7Qa.js +0 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-IQXX7rVH.js +0 -1
- package/web/dist/assets/swimlanes-5IMT3BWC-Bw27O3PP.js +0 -2
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-DRko3G58.js +0 -8
- package/web/dist/assets/timeline-definition-FHXFAJF6-Cra4Bj9n.js +0 -120
- package/web/dist/assets/vennDiagram-L72KCM5P-B_Nmy9aH.js +0 -34
- package/web/dist/assets/wardleyDiagram-EHGQE667-BE1omAzb.js +0 -78
- 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**.
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
`
|
|
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
|
|
239
|
-
pnpm
|
|
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 包 ——
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
`
|
|
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
|
|
225
|
-
pnpm
|
|
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.
|
|
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": "^
|
|
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": "^
|
|
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};
|