agentworkshop 0.5.5 → 0.5.7

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 (50) hide show
  1. package/.AgentWorkShop/prompts/compaction-hints.md +9 -0
  2. package/.AgentWorkShop/prompts/host-tools.json +695 -630
  3. package/.AgentWorkShop/prompts/peer-reply-cross-channel.md +10 -0
  4. package/.AgentWorkShop/prompts/system-manual.md +6 -1
  5. package/.output/.AgentWorkShop/prompts/compaction-hints.md +9 -0
  6. package/.output/.AgentWorkShop/prompts/host-tools.json +695 -630
  7. package/.output/.AgentWorkShop/prompts/peer-reply-cross-channel.md +10 -0
  8. package/.output/.AgentWorkShop/prompts/system-manual.md +6 -1
  9. package/.output/nitro.json +1 -1
  10. package/.output/public/_nuxt/builds/latest.json +1 -1
  11. package/.output/public/_nuxt/builds/meta/02278199-eeea-4f96-882a-94c5408c6cb6.json +1 -0
  12. package/.output/server/chunks/_/nitro.mjs +2188 -1324
  13. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  14. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +5 -2
  15. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  16. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +25 -3
  17. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  18. package/.output/server/package.json +1 -1
  19. package/package.json +1 -1
  20. package/scripts/_dbg-cross-channel-e2e.mjs +157 -0
  21. package/scripts/_dbg-cross-team-visibility-e2e.mjs +129 -0
  22. package/scripts/test-context-governor.ts +176 -0
  23. package/scripts/test-memory-brief-chronicle.ts +180 -0
  24. package/scripts/test-memory-dynamic.ts +3 -1
  25. package/scripts/test-memory-rrf-mmr.ts +114 -0
  26. package/server/api/workshop/agent-tools/invoke.post.ts +8 -1
  27. package/server/api/workshop/channels/[id]/messages/index.post.ts +26 -1
  28. package/server/api/workshop/ws.ts +1 -0
  29. package/server/data/daqs.json +35 -13
  30. package/server/data/dcw-lines.json +14 -0
  31. package/server/data/dcw-products.json +14 -0
  32. package/server/data/dcw-recipes.json +28 -0
  33. package/server/data/dcw-rollback.json +122 -1
  34. package/server/data/dcw-runs.json +54 -36
  35. package/server/data/dcw-writes.json +60 -0
  36. package/server/data/dcws.json +42 -0
  37. package/server/data/line-runs.json +32 -22
  38. package/server/services/workshop/agents/adapters/omp-rpc-client.ts +65 -0
  39. package/server/services/workshop/agents/agent-interface.ts +44 -1
  40. package/server/services/workshop/agents/mock-agent.ts +12 -0
  41. package/server/services/workshop/agents/omp-agent.ts +304 -8
  42. package/server/services/workshop/db/database.ts +16 -1
  43. package/server/services/workshop/db/memory.repo.ts +40 -2
  44. package/server/services/workshop/prompts/loader.ts +6 -5
  45. package/server/services/workshop/runtime/agent-runtime.ts +52 -6
  46. package/server/services/workshop/runtime/channel-runtime.ts +14 -6
  47. package/server/services/workshop/runtime/manager.ts +314 -3
  48. package/server/services/workshop/runtime/memory.ts +313 -78
  49. package/server/services/workshop/types/task.ts +14 -0
  50. package/.output/public/_nuxt/builds/meta/f2f649c5-fd3b-4507-a3a1-8b4a194de72d.json +0 -1
@@ -1245,7 +1245,7 @@
1245
1245
  "driverConfig": {},
1246
1246
  "lineId": "ln-c377a6bf",
1247
1247
  "value": 169.8,
1248
- "state": "alarm",
1248
+ "state": "ok",
1249
1249
  "lastAt": "2026-09-02T10:43:19.807Z",
1250
1250
  "createdAt": "2026-09-01T03:23:18.165Z"
1251
1251
  },
@@ -1533,7 +1533,7 @@
1533
1533
  },
1534
1534
  "lineId": "ln-9224d3d7",
1535
1535
  "value": 66,
1536
- "state": "offline",
1536
+ "state": "alarm",
1537
1537
  "lastAt": "2026-09-01T09:07:35.996Z",
1538
1538
  "createdAt": "2026-09-01T05:59:24.304Z"
1539
1539
  },
@@ -1613,7 +1613,7 @@
1613
1613
  },
1614
1614
  "lineId": "ln-386c53ed",
1615
1615
  "value": 66,
1616
- "state": "offline",
1616
+ "state": "alarm",
1617
1617
  "lastAt": "2026-09-01T09:07:35.996Z",
1618
1618
  "createdAt": "2026-09-01T06:05:53.246Z"
1619
1619
  },
@@ -1693,7 +1693,7 @@
1693
1693
  },
1694
1694
  "lineId": "ln-5957f6db",
1695
1695
  "value": 66,
1696
- "state": "offline",
1696
+ "state": "alarm",
1697
1697
  "lastAt": "2026-09-01T09:07:35.996Z",
1698
1698
  "createdAt": "2026-09-01T06:09:02.297Z"
1699
1699
  },
@@ -1773,7 +1773,7 @@
1773
1773
  },
1774
1774
  "lineId": "ln-9ec42f08",
1775
1775
  "value": 66,
1776
- "state": "offline",
1776
+ "state": "alarm",
1777
1777
  "lastAt": "2026-09-01T09:07:35.996Z",
1778
1778
  "createdAt": "2026-09-01T06:13:44.550Z"
1779
1779
  },
@@ -1853,7 +1853,7 @@
1853
1853
  },
1854
1854
  "lineId": "ln-69e37924",
1855
1855
  "value": 66,
1856
- "state": "offline",
1856
+ "state": "alarm",
1857
1857
  "lastAt": "2026-09-01T09:07:35.996Z",
1858
1858
  "createdAt": "2026-09-01T06:16:47.641Z"
1859
1859
  },
@@ -1933,7 +1933,7 @@
1933
1933
  },
1934
1934
  "lineId": "ln-c269e692",
1935
1935
  "value": 66,
1936
- "state": "offline",
1936
+ "state": "alarm",
1937
1937
  "lastAt": "2026-09-01T09:07:35.996Z",
1938
1938
  "createdAt": "2026-09-01T06:56:06.636Z"
1939
1939
  },
@@ -2013,7 +2013,7 @@
2013
2013
  },
2014
2014
  "lineId": "ln-229d1637",
2015
2015
  "value": 66,
2016
- "state": "offline",
2016
+ "state": "alarm",
2017
2017
  "lastAt": "2026-09-01T09:07:35.996Z",
2018
2018
  "createdAt": "2026-09-01T06:57:29.508Z"
2019
2019
  },
@@ -2093,7 +2093,7 @@
2093
2093
  },
2094
2094
  "lineId": "ln-9546f91f",
2095
2095
  "value": 66,
2096
- "state": "offline",
2096
+ "state": "alarm",
2097
2097
  "lastAt": "2026-09-01T09:07:35.996Z",
2098
2098
  "createdAt": "2026-09-01T07:00:25.309Z"
2099
2099
  },
@@ -2173,7 +2173,7 @@
2173
2173
  },
2174
2174
  "lineId": "ln-087aad5b",
2175
2175
  "value": 66,
2176
- "state": "offline",
2176
+ "state": "alarm",
2177
2177
  "lastAt": "2026-09-01T09:07:35.996Z",
2178
2178
  "createdAt": "2026-09-01T07:09:07.518Z"
2179
2179
  },
@@ -2281,7 +2281,7 @@
2281
2281
  },
2282
2282
  "lineId": "ln-97d44f8a",
2283
2283
  "value": 66,
2284
- "state": "offline",
2284
+ "state": "alarm",
2285
2285
  "lastAt": "2026-09-01T09:01:12.950Z",
2286
2286
  "createdAt": "2026-09-01T07:13:45.697Z"
2287
2287
  },
@@ -2361,7 +2361,7 @@
2361
2361
  },
2362
2362
  "lineId": "ln-a9551770",
2363
2363
  "value": 66,
2364
- "state": "offline",
2364
+ "state": "alarm",
2365
2365
  "lastAt": "2026-09-01T09:01:12.950Z",
2366
2366
  "createdAt": "2026-09-01T07:15:40.329Z"
2367
2367
  },
@@ -2627,7 +2627,7 @@
2627
2627
  },
2628
2628
  "lineId": "ln-844ad82f",
2629
2629
  "value": 66,
2630
- "state": "offline",
2630
+ "state": "alarm",
2631
2631
  "lastAt": "2026-09-01T09:07:36.508Z",
2632
2632
  "createdAt": "2026-09-01T09:06:55.959Z"
2633
2633
  },
@@ -2984,5 +2984,27 @@
2984
2984
  "state": "ok",
2985
2985
  "lastAt": "2026-09-02T10:43:19.556Z",
2986
2986
  "createdAt": "2026-09-02T05:37:50.702Z"
2987
+ },
2988
+ {
2989
+ "id": "dn-833816c5",
2990
+ "templateRef": "daq-temp-tc",
2991
+ "name": "̽���¶�",
2992
+ "driver": "mock",
2993
+ "enabled": true,
2994
+ "intervalMs": 500,
2995
+ "publishIntervalMs": null,
2996
+ "unit": "℃",
2997
+ "decimals": 1,
2998
+ "min": 150,
2999
+ "max": 185,
3000
+ "warnLow": 152.8,
3001
+ "warnHigh": 182.2,
3002
+ "deviceBindingId": null,
3003
+ "driverConfig": {},
3004
+ "lineId": "ln-c1ef6c0d",
3005
+ "value": null,
3006
+ "state": "offline",
3007
+ "lastAt": null,
3008
+ "createdAt": "2026-09-02T11:55:28.275Z"
2987
3009
  }
2988
3010
  ]
@@ -1034,5 +1034,19 @@
1034
1034
  "color": "#41c8f4",
1035
1035
  "description": "",
1036
1036
  "createdAt": "2026-09-02T10:37:43.626Z"
1037
+ },
1038
+ {
1039
+ "id": "ln-af1e04a3",
1040
+ "name": "全功能验证线-3lqwow",
1041
+ "color": "#b58cff",
1042
+ "description": "",
1043
+ "createdAt": "2026-09-02T11:40:28.452Z"
1044
+ },
1045
+ {
1046
+ "id": "ln-c1ef6c0d",
1047
+ "name": "���̽����",
1048
+ "color": "#ff8a5c",
1049
+ "description": "",
1050
+ "createdAt": "2026-09-02T11:55:27.943Z"
1037
1051
  }
1038
1052
  ]
@@ -936,5 +936,19 @@
936
936
  "name": "全功能产品-41bdm2",
937
937
  "description": "",
938
938
  "createdAt": "2026-09-02T10:37:43.637Z"
939
+ },
940
+ {
941
+ "id": "pd-765f8dfb",
942
+ "lineId": "ln-af1e04a3",
943
+ "name": "全功能产品-3lqwow",
944
+ "description": "",
945
+ "createdAt": "2026-09-02T11:40:28.474Z"
946
+ },
947
+ {
948
+ "id": "pd-efb05c40",
949
+ "lineId": "ln-c1ef6c0d",
950
+ "name": "���̽��Ʒ",
951
+ "description": "",
952
+ "createdAt": "2026-09-02T11:55:28.108Z"
939
953
  }
940
954
  ]
@@ -1886,5 +1886,33 @@
1886
1886
  "lastGoodRunId": null,
1887
1887
  "createdAt": "2026-09-02T05:37:46.125Z",
1888
1888
  "updatedAt": "2026-09-02T05:37:46.125Z"
1889
+ },
1890
+ {
1891
+ "id": "rc-ed3e066e",
1892
+ "productId": "pd-efb05c40",
1893
+ "lineId": "ln-c1ef6c0d",
1894
+ "name": "̽���䷽",
1895
+ "description": "",
1896
+ "params": [
1897
+ {
1898
+ "nodeId": "dw-4bcbc922",
1899
+ "templateRef": "dcw-temp-sp",
1900
+ "value": 180,
1901
+ "min": 176,
1902
+ "max": 188
1903
+ }
1904
+ ],
1905
+ "daqWindows": [
1906
+ {
1907
+ "nodeId": "dn-833816c5",
1908
+ "min": 100,
1909
+ "max": 260
1910
+ }
1911
+ ],
1912
+ "version": 1,
1913
+ "paramsHistory": [],
1914
+ "lastGoodRunId": null,
1915
+ "createdAt": "2026-09-02T11:55:28.651Z",
1916
+ "updatedAt": "2026-09-02T11:55:28.651Z"
1889
1917
  }
1890
1918
  ]
@@ -3026,6 +3026,63 @@
3026
3026
  "id": "anc-f709106f",
3027
3027
  "at": "2026-09-02T10:39:20.183Z",
3028
3028
  "recordId": "opt-1ad7ec25"
3029
+ },
3030
+ {
3031
+ "lineId": "ln-af1e04a3",
3032
+ "nodeId": "dw-e760b6b0",
3033
+ "prevValue": null,
3034
+ "newValue": 180,
3035
+ "source": "recipe",
3036
+ "actor": "recipe",
3037
+ "recipeRunId": "rr-63af7723",
3038
+ "id": "anc-fbdebff4",
3039
+ "at": "2026-09-02T11:40:28.861Z"
3040
+ },
3041
+ {
3042
+ "lineId": "ln-af1e04a3",
3043
+ "nodeId": "dw-e760b6b0",
3044
+ "prevValue": 180,
3045
+ "newValue": 182,
3046
+ "source": "manual",
3047
+ "actor": "c2413698-6f6a-424e-b1fc-dcf352b069ca",
3048
+ "recipeRunId": null,
3049
+ "id": "anc-25070300",
3050
+ "at": "2026-09-02T11:40:33.958Z"
3051
+ },
3052
+ {
3053
+ "lineId": "ln-af1e04a3",
3054
+ "nodeId": "dw-e760b6b0",
3055
+ "prevValue": 182,
3056
+ "newValue": 180,
3057
+ "source": "manual",
3058
+ "actor": "c2413698-6f6a-424e-b1fc-dcf352b069ca",
3059
+ "recipeRunId": null,
3060
+ "id": "anc-6f512745",
3061
+ "at": "2026-09-02T11:40:34.111Z"
3062
+ },
3063
+ {
3064
+ "lineId": "ln-af1e04a3",
3065
+ "nodeId": "dw-e760b6b0",
3066
+ "prevValue": 180,
3067
+ "newValue": 182,
3068
+ "source": "agent",
3069
+ "actor": "32423684-ffa6-4d61-a926-9db901993a6c",
3070
+ "recipeRunId": null,
3071
+ "taskId": "950d501b-3b33-4cf1-9e19-c4123b3b0cd1",
3072
+ "id": "anc-394b03d4",
3073
+ "at": "2026-09-02T11:42:48.425Z",
3074
+ "recordId": "opt-97a03904"
3075
+ },
3076
+ {
3077
+ "lineId": "ln-c1ef6c0d",
3078
+ "nodeId": "dw-4bcbc922",
3079
+ "prevValue": null,
3080
+ "newValue": 180,
3081
+ "source": "recipe",
3082
+ "actor": "recipe",
3083
+ "recipeRunId": "rr-4549422d",
3084
+ "id": "anc-6825e0d2",
3085
+ "at": "2026-09-02T11:55:28.883Z"
3029
3086
  }
3030
3087
  ],
3031
3088
  "records": [
@@ -3417,7 +3474,7 @@
3417
3474
  "channels": [],
3418
3475
  "degraded": true
3419
3476
  },
3420
- "evaluatedAt": "2026-09-02T10:43:15.492Z",
3477
+ "evaluatedAt": "2026-09-02T12:19:06.694Z",
3421
3478
  "windowAgg": {
3422
3479
  "at": "2026-08-31T16:25:17.398Z",
3423
3480
  "fromMs": 1788193396897,
@@ -9693,6 +9750,70 @@
9693
9750
  "closedAt": "2026-09-02T10:42:58.683Z",
9694
9751
  "closedBy": "judged",
9695
9752
  "aggPending": false
9753
+ },
9754
+ {
9755
+ "lineId": "ln-af1e04a3",
9756
+ "nodeId": "dw-e760b6b0",
9757
+ "nodeName": "FFX-温度设定",
9758
+ "recipeId": "rc-53194df4",
9759
+ "agentId": "32423684-ffa6-4d61-a926-9db901993a6c",
9760
+ "taskId": "950d501b-3b33-4cf1-9e19-c4123b3b0cd1",
9761
+ "hypothesis": "任务要求将温度设定调至 182℃。近 5 分钟实测温度均值仅 168.177℃(最低 165.1,最新 170.6),与目标 182℃ 偏差 13.8℃,判定为欠温。设定从 180→182℃(+2℃,安全量程 150~200 ∩ 配方窗口 176~188 内),热惯性数十秒级,预期 5 分钟后实际温度向 182℃ 逼近,届时复测 daq 验证并落判定。",
9762
+ "params": [
9763
+ {
9764
+ "nodeId": "dw-e760b6b0",
9765
+ "templateRef": "dcw-temp-sp",
9766
+ "from": 180,
9767
+ "to": 182
9768
+ }
9769
+ ],
9770
+ "setAt": "2026-09-02T11:42:48.425Z",
9771
+ "status": "closed-line-stop",
9772
+ "judge": null,
9773
+ "anchorId": "anc-394b03d4",
9774
+ "policy": "approve_rollback",
9775
+ "id": "opt-97a03904",
9776
+ "createdAt": "2026-09-02T11:42:48.425Z",
9777
+ "baseline": {
9778
+ "at": "2026-09-02T11:42:48.456Z",
9779
+ "fromMs": 1788348768425,
9780
+ "toMs": 1788349368425,
9781
+ "channels": [
9782
+ {
9783
+ "daqNodeId": "dn-f46e2df5",
9784
+ "ch": "temp-tc",
9785
+ "unit": "℃",
9786
+ "latest": 166.5,
9787
+ "avg": 167.99,
9788
+ "min": 165.73,
9789
+ "max": 170.67,
9790
+ "cnt": 47,
9791
+ "breaches": 0
9792
+ },
9793
+ {
9794
+ "daqNodeId": "dn-0d9b7e8e",
9795
+ "ch": "pressure-tx",
9796
+ "unit": "MPa",
9797
+ "latest": 0.7866666666666667,
9798
+ "avg": 0.82,
9799
+ "min": 0.78,
9800
+ "max": 0.86,
9801
+ "cnt": 47,
9802
+ "breaches": -1
9803
+ }
9804
+ ]
9805
+ },
9806
+ "evaluatedAt": "2026-09-02T11:48:49.649Z",
9807
+ "windowAgg": {
9808
+ "at": "2026-09-02T11:48:49.964Z",
9809
+ "fromMs": 1788349368425,
9810
+ "toMs": 1788349729964,
9811
+ "channels": [],
9812
+ "degraded": true
9813
+ },
9814
+ "closedAt": "2026-09-02T11:48:49.964Z",
9815
+ "closedBy": "line-stop",
9816
+ "aggPending": false
9696
9817
  }
9697
9818
  ]
9698
9819
  }
@@ -1,40 +1,4 @@
1
1
  [
2
- {
3
- "id": "rr-c8ccb1f5",
4
- "recipeId": "rc-3b094c50",
5
- "recipeName": "终审配方A",
6
- "productId": "pd-b9a585f7",
7
- "lineId": "ln-cd6402cc",
8
- "startedAt": "2026-08-29T15:14:14.982Z",
9
- "endedAt": "2026-08-29T15:14:32.369Z",
10
- "results": [
11
- {
12
- "templateRef": "dcw-temp-sp",
13
- "nodeId": "dw-1740a6f5",
14
- "ok": true,
15
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
16
- "value": 182
17
- }
18
- ]
19
- },
20
- {
21
- "id": "rr-ff58554d",
22
- "recipeId": "rc-49a15b8f",
23
- "recipeName": "终审配方A",
24
- "productId": "pd-82dd3f92",
25
- "lineId": "ln-1d5c8bb9",
26
- "startedAt": "2026-08-29T15:15:06.137Z",
27
- "endedAt": "2026-08-29T15:15:23.589Z",
28
- "results": [
29
- {
30
- "templateRef": "dcw-temp-sp",
31
- "nodeId": "dw-5dcf6dd1",
32
- "ok": true,
33
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
34
- "value": 182
35
- }
36
- ]
37
- },
38
2
  {
39
3
  "id": "rr-5fc104fc",
40
4
  "recipeId": "rc-cc5d88b8",
@@ -4740,5 +4704,59 @@
4740
4704
  "max": 188
4741
4705
  }
4742
4706
  ]
4707
+ },
4708
+ {
4709
+ "id": "rr-63af7723",
4710
+ "recipeId": "rc-53194df4",
4711
+ "recipeName": "全功能配方-3lqwow",
4712
+ "productId": "pd-765f8dfb",
4713
+ "lineId": "ln-af1e04a3",
4714
+ "startedAt": "2026-09-02T11:40:28.720Z",
4715
+ "endedAt": "2026-09-02T11:48:49.963Z",
4716
+ "results": [
4717
+ {
4718
+ "templateRef": "dcw-temp-sp",
4719
+ "nodeId": "dw-e760b6b0",
4720
+ "ok": true,
4721
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
4722
+ "value": 180
4723
+ }
4724
+ ],
4725
+ "paramsSnapshot": [
4726
+ {
4727
+ "nodeId": "dw-e760b6b0",
4728
+ "templateRef": "dcw-temp-sp",
4729
+ "value": 180,
4730
+ "min": 176,
4731
+ "max": 188
4732
+ }
4733
+ ]
4734
+ },
4735
+ {
4736
+ "id": "rr-4549422d",
4737
+ "recipeId": "rc-ed3e066e",
4738
+ "recipeName": "̽���䷽",
4739
+ "productId": "pd-efb05c40",
4740
+ "lineId": "ln-c1ef6c0d",
4741
+ "startedAt": "2026-09-02T11:55:28.775Z",
4742
+ "endedAt": null,
4743
+ "results": [
4744
+ {
4745
+ "templateRef": "dcw-temp-sp",
4746
+ "nodeId": "dw-4bcbc922",
4747
+ "ok": true,
4748
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
4749
+ "value": 180
4750
+ }
4751
+ ],
4752
+ "paramsSnapshot": [
4753
+ {
4754
+ "nodeId": "dw-4bcbc922",
4755
+ "templateRef": "dcw-temp-sp",
4756
+ "value": 180,
4757
+ "min": 176,
4758
+ "max": 188
4759
+ }
4760
+ ]
4743
4761
  }
4744
4762
  ]
@@ -9910,5 +9910,65 @@
9910
9910
  "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9911
9911
  "recipeRunId": null,
9912
9912
  "at": "2026-09-02T10:39:20.083Z"
9913
+ },
9914
+ {
9915
+ "id": "wh-f3d044f9",
9916
+ "nodeId": "dw-e760b6b0",
9917
+ "nodeName": "FFX-温度设定",
9918
+ "param": "烘箱温度设定",
9919
+ "eng": 180,
9920
+ "raw": 180,
9921
+ "ok": true,
9922
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
9923
+ "recipeRunId": "rr-63af7723",
9924
+ "at": "2026-09-02T11:40:28.724Z"
9925
+ },
9926
+ {
9927
+ "id": "wh-18b01c04",
9928
+ "nodeId": "dw-e760b6b0",
9929
+ "nodeName": "FFX-温度设定",
9930
+ "param": "烘箱温度设定",
9931
+ "eng": 182,
9932
+ "raw": 182,
9933
+ "ok": true,
9934
+ "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9935
+ "recipeRunId": null,
9936
+ "at": "2026-09-02T11:40:33.852Z"
9937
+ },
9938
+ {
9939
+ "id": "wh-9172dfae",
9940
+ "nodeId": "dw-e760b6b0",
9941
+ "nodeName": "FFX-温度设定",
9942
+ "param": "烘箱温度设定",
9943
+ "eng": 180,
9944
+ "raw": 180,
9945
+ "ok": true,
9946
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
9947
+ "recipeRunId": null,
9948
+ "at": "2026-09-02T11:40:33.978Z"
9949
+ },
9950
+ {
9951
+ "id": "wh-636c05af",
9952
+ "nodeId": "dw-e760b6b0",
9953
+ "nodeName": "FFX-温度设定",
9954
+ "param": "烘箱温度设定",
9955
+ "eng": 182,
9956
+ "raw": 182,
9957
+ "ok": true,
9958
+ "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9959
+ "recipeRunId": null,
9960
+ "at": "2026-09-02T11:42:48.318Z"
9961
+ },
9962
+ {
9963
+ "id": "wh-db091e26",
9964
+ "nodeId": "dw-4bcbc922",
9965
+ "nodeName": "̽���趨",
9966
+ "param": "烘箱温度设定",
9967
+ "eng": 180,
9968
+ "raw": 180,
9969
+ "ok": true,
9970
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
9971
+ "recipeRunId": "rr-4549422d",
9972
+ "at": "2026-09-02T11:55:28.777Z"
9913
9973
  }
9914
9974
  ]
@@ -2047,5 +2047,47 @@
2047
2047
  "state": "ok",
2048
2048
  "lastError": null,
2049
2049
  "createdAt": "2026-09-02T10:37:43.697Z"
2050
+ },
2051
+ {
2052
+ "id": "dw-e760b6b0",
2053
+ "templateRef": "dcw-temp-sp",
2054
+ "name": "FFX-温度设定",
2055
+ "driver": "mock",
2056
+ "enabled": true,
2057
+ "holdIntervalMs": null,
2058
+ "unit": "℃",
2059
+ "decimals": 1,
2060
+ "min": 150,
2061
+ "max": 200,
2062
+ "deviceBindingId": null,
2063
+ "driverConfig": {},
2064
+ "lineId": "ln-af1e04a3",
2065
+ "value": 182,
2066
+ "lastAckAt": "2026-09-02T11:42:48.318Z",
2067
+ "lastWriteAt": "2026-09-02T11:42:48.318Z",
2068
+ "state": "ok",
2069
+ "lastError": null,
2070
+ "createdAt": "2026-09-02T11:40:28.553Z"
2071
+ },
2072
+ {
2073
+ "id": "dw-4bcbc922",
2074
+ "templateRef": "dcw-temp-sp",
2075
+ "name": "̽���趨",
2076
+ "driver": "mock",
2077
+ "enabled": true,
2078
+ "holdIntervalMs": null,
2079
+ "unit": "℃",
2080
+ "decimals": 1,
2081
+ "min": 150,
2082
+ "max": 200,
2083
+ "deviceBindingId": null,
2084
+ "driverConfig": {},
2085
+ "lineId": "ln-c1ef6c0d",
2086
+ "value": 180,
2087
+ "lastAckAt": "2026-09-02T11:55:28.777Z",
2088
+ "lastWriteAt": "2026-09-02T11:55:28.777Z",
2089
+ "state": "ok",
2090
+ "lastError": null,
2091
+ "createdAt": "2026-09-02T11:55:28.447Z"
2050
2092
  }
2051
2093
  ]