agentworkshop 0.5.4 → 0.5.6

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 (49) hide show
  1. package/.AgentWorkShop/prompts/compaction-hints.md +9 -0
  2. package/.AgentWorkShop/prompts/host-tools.json +664 -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 +664 -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/d50c6ec2-801c-4ba2-97d8-a4db401b702c.json +1 -0
  12. package/.output/server/chunks/_/nitro.mjs +1936 -1195
  13. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  14. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +25 -3
  15. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  16. package/.output/server/package.json +1 -1
  17. package/cli/commands/start.mjs +2 -2
  18. package/package.json +1 -1
  19. package/scripts/_dbg-cross-channel-e2e.mjs +157 -0
  20. package/scripts/_dbg-prompts-resolve-test.ts +39 -0
  21. package/scripts/start.mjs +2 -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/channels/[id]/messages/index.post.ts +26 -1
  27. package/server/api/workshop/ws.ts +1 -0
  28. package/server/data/daqs.json +110 -88
  29. package/server/data/dcw-lines.json +21 -0
  30. package/server/data/dcw-products.json +21 -0
  31. package/server/data/dcw-recipes.json +28 -0
  32. package/server/data/dcw-rollback.json +260 -1
  33. package/server/data/dcw-runs.json +81 -54
  34. package/server/data/dcw-writes.json +108 -0
  35. package/server/data/dcws.json +63 -0
  36. package/server/data/line-runs.json +32 -22
  37. package/server/services/workshop/agents/adapters/omp-rpc-client.ts +65 -0
  38. package/server/services/workshop/agents/agent-interface.ts +26 -1
  39. package/server/services/workshop/agents/mock-agent.ts +12 -0
  40. package/server/services/workshop/agents/omp-agent.ts +277 -8
  41. package/server/services/workshop/db/database.ts +16 -1
  42. package/server/services/workshop/db/memory.repo.ts +22 -2
  43. package/server/services/workshop/prompts/loader.ts +64 -10
  44. package/server/services/workshop/runtime/agent-runtime.ts +52 -6
  45. package/server/services/workshop/runtime/channel-runtime.ts +14 -6
  46. package/server/services/workshop/runtime/manager.ts +192 -3
  47. package/server/services/workshop/runtime/memory.ts +313 -78
  48. package/server/services/workshop/types/task.ts +14 -0
  49. package/.output/public/_nuxt/builds/meta/70bd10c7-55cf-4e49-94de-8aa1b9edf33a.json +0 -1
@@ -2980,6 +2980,109 @@
2980
2980
  "id": "anc-505979a6",
2981
2981
  "at": "2026-09-02T08:46:51.200Z",
2982
2982
  "recordId": "opt-6359e595"
2983
+ },
2984
+ {
2985
+ "lineId": "ln-69eaecb9",
2986
+ "nodeId": "dw-eeedb292",
2987
+ "prevValue": null,
2988
+ "newValue": 180,
2989
+ "source": "recipe",
2990
+ "actor": "recipe",
2991
+ "recipeRunId": "rr-09acb43b",
2992
+ "id": "anc-91a44530",
2993
+ "at": "2026-09-02T10:37:44.170Z"
2994
+ },
2995
+ {
2996
+ "lineId": "ln-69eaecb9",
2997
+ "nodeId": "dw-eeedb292",
2998
+ "prevValue": 180,
2999
+ "newValue": 182,
3000
+ "source": "manual",
3001
+ "actor": "5297cae1-2433-4d77-baf8-d67f5b71ed79",
3002
+ "recipeRunId": null,
3003
+ "id": "anc-b1bb0e47",
3004
+ "at": "2026-09-02T10:37:51.134Z"
3005
+ },
3006
+ {
3007
+ "lineId": "ln-69eaecb9",
3008
+ "nodeId": "dw-eeedb292",
3009
+ "prevValue": 182,
3010
+ "newValue": 180,
3011
+ "source": "manual",
3012
+ "actor": "5297cae1-2433-4d77-baf8-d67f5b71ed79",
3013
+ "recipeRunId": null,
3014
+ "id": "anc-8f41ca5c",
3015
+ "at": "2026-09-02T10:37:51.260Z"
3016
+ },
3017
+ {
3018
+ "lineId": "ln-69eaecb9",
3019
+ "nodeId": "dw-eeedb292",
3020
+ "prevValue": 180,
3021
+ "newValue": 182,
3022
+ "source": "agent",
3023
+ "actor": "24c5f341-d313-4bb7-8971-6223c42883be",
3024
+ "recipeRunId": null,
3025
+ "taskId": "87e886d0-04b1-41ae-b930-9a5df52c709f",
3026
+ "id": "anc-f709106f",
3027
+ "at": "2026-09-02T10:39:20.183Z",
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"
2983
3086
  }
2984
3087
  ],
2985
3088
  "records": [
@@ -3371,7 +3474,7 @@
3371
3474
  "channels": [],
3372
3475
  "degraded": true
3373
3476
  },
3374
- "evaluatedAt": "2026-09-02T08:53:13.631Z",
3477
+ "evaluatedAt": "2026-09-02T12:07:31.704Z",
3375
3478
  "windowAgg": {
3376
3479
  "at": "2026-08-31T16:25:17.398Z",
3377
3480
  "fromMs": 1788193396897,
@@ -9555,6 +9658,162 @@
9555
9658
  "closedAt": "2026-09-02T08:50:55.330Z",
9556
9659
  "closedBy": "line-stop",
9557
9660
  "aggPending": false
9661
+ },
9662
+ {
9663
+ "lineId": "ln-69eaecb9",
9664
+ "nodeId": "dw-eeedb292",
9665
+ "nodeName": "FFX-温度设定",
9666
+ "recipeId": "rc-4d460065",
9667
+ "agentId": "24c5f341-d313-4bb7-8971-6223c42883be",
9668
+ "taskId": "87e886d0-04b1-41ae-b930-9a5df52c709f",
9669
+ "hypothesis": "目标:温度设定 180→182℃(任务目标值,落在安全量程[150,200]∩配方窗口[176,188]内)。依据:最近5分钟(10:33~10:38,85样本)温度均值168.278℃,与182℃偏差-13.72℃,超±1℃阈值。预期效果:设定上调2℃补偿箱体散热偏差,推动熔体温度向182℃收敛。观察计划:热惯性数十秒,等待≥5分钟后 daq_query 复测5分钟窗口均值,再以 dcw_judge 落判定。",
9670
+ "params": [
9671
+ {
9672
+ "nodeId": "dw-eeedb292",
9673
+ "templateRef": "dcw-temp-sp",
9674
+ "from": 180,
9675
+ "to": 182
9676
+ }
9677
+ ],
9678
+ "setAt": "2026-09-02T10:39:20.183Z",
9679
+ "status": "judged-keep",
9680
+ "judge": {
9681
+ "by": "agent",
9682
+ "actor": "24c5f341-d313-4bb7-8971-6223c42883be",
9683
+ "verdict": "keep",
9684
+ "reason": "设定下发验证:FFX-温度设定 180→182℃(任务目标值,窗口[176,188]内),PLC回读182℃一致。数采证据:调整前5分钟窗(10:33~10:38,85样本)均值168.278℃;调整后窗1(10:38~10:40,120样本)均值168.06℃,窗2(10:40~10:42,120样本)均值168.01℃,全程在预警带[152.8,182.2]内无告警,无持续单边漂移。结论:182℃设定稳定安全,已达成任务目标;实际熔体温度与设定存在~14℃稳态偏差(疑似箱体散热/热惯性耦合,节点语义已提示该滞后),不建议继续加码设定(违背≤1℃步进与收敛异常禁盲调规则),如需闭合实际偏差应查散热/传感器根因。",
9685
+ "at": "2026-09-02T10:42:58.683Z"
9686
+ },
9687
+ "anchorId": "anc-f709106f",
9688
+ "policy": "approve_rollback",
9689
+ "id": "opt-1ad7ec25",
9690
+ "createdAt": "2026-09-02T10:39:20.183Z",
9691
+ "baseline": {
9692
+ "at": "2026-09-02T10:39:20.200Z",
9693
+ "fromMs": 1788344960183,
9694
+ "toMs": 1788345560183,
9695
+ "channels": [
9696
+ {
9697
+ "daqNodeId": "dn-50d96a4f",
9698
+ "ch": "temp-tc",
9699
+ "unit": "℃",
9700
+ "latest": 167.9,
9701
+ "avg": 168.19,
9702
+ "min": 165.65,
9703
+ "max": 170.52,
9704
+ "cnt": 33,
9705
+ "breaches": 0
9706
+ },
9707
+ {
9708
+ "daqNodeId": "dn-fa573af6",
9709
+ "ch": "pressure-tx",
9710
+ "unit": "MPa",
9711
+ "latest": 0.8266666666666667,
9712
+ "avg": 0.82,
9713
+ "min": 0.76,
9714
+ "max": 0.92,
9715
+ "cnt": 33,
9716
+ "breaches": -1
9717
+ }
9718
+ ]
9719
+ },
9720
+ "evaluatedAt": "2026-09-02T10:42:50.523Z",
9721
+ "windowAgg": {
9722
+ "at": "2026-09-02T10:42:58.691Z",
9723
+ "fromMs": 1788345560183,
9724
+ "toMs": 1788345778683,
9725
+ "channels": [
9726
+ {
9727
+ "daqNodeId": "dn-50d96a4f",
9728
+ "ch": "temp-tc",
9729
+ "unit": "℃",
9730
+ "latest": 169.5,
9731
+ "avg": 167.98,
9732
+ "min": 165.15,
9733
+ "max": 170.45,
9734
+ "cnt": 200,
9735
+ "breaches": 0
9736
+ },
9737
+ {
9738
+ "daqNodeId": "dn-fa573af6",
9739
+ "ch": "pressure-tx",
9740
+ "unit": "MPa",
9741
+ "latest": 0.935,
9742
+ "avg": 0.82,
9743
+ "min": 0.69,
9744
+ "max": 0.94,
9745
+ "cnt": 200,
9746
+ "breaches": -1
9747
+ }
9748
+ ]
9749
+ },
9750
+ "closedAt": "2026-09-02T10:42:58.683Z",
9751
+ "closedBy": "judged",
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
9558
9817
  }
9559
9818
  ]
9560
9819
  }
@@ -1,58 +1,4 @@
1
1
  [
2
- {
3
- "id": "rr-57bca111",
4
- "recipeId": "rc-ee30a7a0",
5
- "recipeName": "终审配方A",
6
- "productId": "pd-99159b45",
7
- "lineId": "ln-c6713e4d",
8
- "startedAt": "2026-08-29T15:13:03.707Z",
9
- "endedAt": "2026-08-29T15:14:14.609Z",
10
- "results": [
11
- {
12
- "templateRef": "dcw-temp-sp",
13
- "nodeId": "dw-c4da380a",
14
- "ok": true,
15
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
16
- "value": 182
17
- }
18
- ]
19
- },
20
- {
21
- "id": "rr-c8ccb1f5",
22
- "recipeId": "rc-3b094c50",
23
- "recipeName": "终审配方A",
24
- "productId": "pd-b9a585f7",
25
- "lineId": "ln-cd6402cc",
26
- "startedAt": "2026-08-29T15:14:14.982Z",
27
- "endedAt": "2026-08-29T15:14:32.369Z",
28
- "results": [
29
- {
30
- "templateRef": "dcw-temp-sp",
31
- "nodeId": "dw-1740a6f5",
32
- "ok": true,
33
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
34
- "value": 182
35
- }
36
- ]
37
- },
38
- {
39
- "id": "rr-ff58554d",
40
- "recipeId": "rc-49a15b8f",
41
- "recipeName": "终审配方A",
42
- "productId": "pd-82dd3f92",
43
- "lineId": "ln-1d5c8bb9",
44
- "startedAt": "2026-08-29T15:15:06.137Z",
45
- "endedAt": "2026-08-29T15:15:23.589Z",
46
- "results": [
47
- {
48
- "templateRef": "dcw-temp-sp",
49
- "nodeId": "dw-5dcf6dd1",
50
- "ok": true,
51
- "message": "写入并回读一致:182 → raw 1280,回读 182(标定后物理值 182)",
52
- "value": 182
53
- }
54
- ]
55
- },
56
2
  {
57
3
  "id": "rr-5fc104fc",
58
4
  "recipeId": "rc-cc5d88b8",
@@ -4731,5 +4677,86 @@
4731
4677
  "max": 188
4732
4678
  }
4733
4679
  ]
4680
+ },
4681
+ {
4682
+ "id": "rr-09acb43b",
4683
+ "recipeId": "rc-4d460065",
4684
+ "recipeName": "全功能配方-41bdm2",
4685
+ "productId": "pd-33f3607e",
4686
+ "lineId": "ln-69eaecb9",
4687
+ "startedAt": "2026-09-02T10:37:44.029Z",
4688
+ "endedAt": "2026-09-02T10:43:20.233Z",
4689
+ "results": [
4690
+ {
4691
+ "templateRef": "dcw-temp-sp",
4692
+ "nodeId": "dw-eeedb292",
4693
+ "ok": true,
4694
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
4695
+ "value": 180
4696
+ }
4697
+ ],
4698
+ "paramsSnapshot": [
4699
+ {
4700
+ "nodeId": "dw-eeedb292",
4701
+ "templateRef": "dcw-temp-sp",
4702
+ "value": 180,
4703
+ "min": 176,
4704
+ "max": 188
4705
+ }
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
+ ]
4734
4761
  }
4735
4762
  ]
@@ -9862,5 +9862,113 @@
9862
9862
  "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9863
9863
  "recipeRunId": null,
9864
9864
  "at": "2026-09-02T08:46:51.079Z"
9865
+ },
9866
+ {
9867
+ "id": "wh-4b83484b",
9868
+ "nodeId": "dw-eeedb292",
9869
+ "nodeName": "FFX-温度设定",
9870
+ "param": "烘箱温度设定",
9871
+ "eng": 180,
9872
+ "raw": 180,
9873
+ "ok": true,
9874
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
9875
+ "recipeRunId": "rr-09acb43b",
9876
+ "at": "2026-09-02T10:37:44.035Z"
9877
+ },
9878
+ {
9879
+ "id": "wh-515c6f27",
9880
+ "nodeId": "dw-eeedb292",
9881
+ "nodeName": "FFX-温度设定",
9882
+ "param": "烘箱温度设定",
9883
+ "eng": 182,
9884
+ "raw": 182,
9885
+ "ok": true,
9886
+ "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9887
+ "recipeRunId": null,
9888
+ "at": "2026-09-02T10:37:51.026Z"
9889
+ },
9890
+ {
9891
+ "id": "wh-f337d292",
9892
+ "nodeId": "dw-eeedb292",
9893
+ "nodeName": "FFX-温度设定",
9894
+ "param": "烘箱温度设定",
9895
+ "eng": 180,
9896
+ "raw": 180,
9897
+ "ok": true,
9898
+ "message": "Mock PLC 写入成功:180 → raw 180,回读一致(标定后物理值 180)",
9899
+ "recipeRunId": null,
9900
+ "at": "2026-09-02T10:37:51.168Z"
9901
+ },
9902
+ {
9903
+ "id": "wh-f7919063",
9904
+ "nodeId": "dw-eeedb292",
9905
+ "nodeName": "FFX-温度设定",
9906
+ "param": "烘箱温度设定",
9907
+ "eng": 182,
9908
+ "raw": 182,
9909
+ "ok": true,
9910
+ "message": "Mock PLC 写入成功:182 → raw 182,回读一致(标定后物理值 182)",
9911
+ "recipeRunId": null,
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"
9865
9973
  }
9866
9974
  ]
@@ -2026,5 +2026,68 @@
2026
2026
  "state": "ok",
2027
2027
  "lastError": null,
2028
2028
  "createdAt": "2026-09-02T08:44:01.557Z"
2029
+ },
2030
+ {
2031
+ "id": "dw-eeedb292",
2032
+ "templateRef": "dcw-temp-sp",
2033
+ "name": "FFX-温度设定",
2034
+ "driver": "mock",
2035
+ "enabled": true,
2036
+ "holdIntervalMs": null,
2037
+ "unit": "℃",
2038
+ "decimals": 1,
2039
+ "min": 150,
2040
+ "max": 200,
2041
+ "deviceBindingId": null,
2042
+ "driverConfig": {},
2043
+ "lineId": "ln-69eaecb9",
2044
+ "value": 182,
2045
+ "lastAckAt": "2026-09-02T10:39:20.083Z",
2046
+ "lastWriteAt": "2026-09-02T10:39:20.083Z",
2047
+ "state": "ok",
2048
+ "lastError": null,
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"
2029
2092
  }
2030
2093
  ]