@things-factory/headless-twin 10.1.35 → 10.1.38

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 (34) hide show
  1. package/dist-server/engine/twin-engine.js +3 -2
  2. package/dist-server/engine/twin-engine.js.map +1 -1
  3. package/dist-server/engine/twin-state-channel.d.ts +14 -0
  4. package/dist-server/engine/twin-state-channel.js +31 -0
  5. package/dist-server/engine/twin-state-channel.js.map +1 -0
  6. package/dist-server/service/reference/reference-progress-channel.d.ts +14 -0
  7. package/dist-server/service/reference/reference-progress-channel.js +24 -0
  8. package/dist-server/service/reference/reference-progress-channel.js.map +1 -0
  9. package/dist-server/service/reference/reference-progress-subscription.d.ts +2 -3
  10. package/dist-server/service/reference/reference-progress-subscription.js +14 -6
  11. package/dist-server/service/reference/reference-progress-subscription.js.map +1 -1
  12. package/dist-server/service/reference/reference-resolver.js +3 -6
  13. package/dist-server/service/reference/reference-resolver.js.map +1 -1
  14. package/dist-server/service/twin-forecast/gap-analytics.d.ts +10 -1
  15. package/dist-server/service/twin-forecast/gap-analytics.js +15 -6
  16. package/dist-server/service/twin-forecast/gap-analytics.js.map +1 -1
  17. package/dist-server/service/twin-forecast/twin-forecast-query.js.map +1 -1
  18. package/dist-server/service/twin-state/twin-state-subscription.d.ts +2 -3
  19. package/dist-server/service/twin-state/twin-state-subscription.js +20 -13
  20. package/dist-server/service/twin-state/twin-state-subscription.js.map +1 -1
  21. package/package.json +6 -6
  22. package/server/engine/twin-engine.ts +6 -5
  23. package/server/engine/twin-state-channel.ts +39 -0
  24. package/server/service/reference/reference-progress-channel.ts +26 -0
  25. package/server/service/reference/reference-progress-subscription.ts +15 -10
  26. package/server/service/reference/reference-resolver.ts +6 -6
  27. package/server/service/twin-forecast/gap-analytics.ts +15 -6
  28. package/server/service/twin-forecast/twin-forecast-query.ts +1 -1
  29. package/server/service/twin-state/twin-state-subscription.ts +22 -19
  30. package/test/boot-resume.test.ts +4 -1
  31. package/test/gap-analytics.test.ts +25 -1
  32. package/test/open-doors.test.ts +197 -0
  33. package/test/twin-state-channel.test.ts +111 -0
  34. package/tsconfig.tsbuildinfo +1 -1
@@ -22,6 +22,7 @@ const item_resolver_js_1 = require("../service/twin-subject/item-resolver.js");
22
22
  const warm_start_js_1 = require("./warm-start.js");
23
23
  const local_declarations_js_1 = require("./local-declarations.js");
24
24
  const runtime_key_js_1 = require("./runtime-key.js");
25
+ const twin_state_channel_js_1 = require("./twin-state-channel.js");
25
26
  const command_routing_js_1 = require("./command-routing.js");
26
27
  const twin_instance_js_1 = require("../service/twin-instance/twin-instance.js");
27
28
  /* 자극의 집은 원본이다(ADR-0029) — 그 행을 읽고 쓴다. */
@@ -1455,7 +1456,7 @@ class TwinEngine {
1455
1456
  (0, shell_1.getRepository)(shell_1.Domain).findOne({ where: { id: domainId } }).then(d => (inst.domain = d)).catch(() => { });
1456
1457
  /* State 채널: runtime.subscribe(snapshot→delta→clock) → pubsub 브로드캐스팅(구독 리졸버가 instanceId 필터). */
1457
1458
  const sub = runtime.subscribe((msg) => {
1458
- this.publishGuarded('twin-state', { twinState: { instanceId: id, kind: msg.kind, revision: msg.revision, payload: msg } }, `twin-state:${id}`);
1459
+ this.publishGuarded(twin_state_channel_js_1.TWIN_STATE_TOPIC, (0, twin_state_channel_js_1.twinStatePayload)(domainId, { instanceId: id, kind: msg.kind, revision: msg.revision, payload: msg }), `twin-state:${id}`);
1459
1460
  /* 영속 + 라이브 바인딩 브리지: delta 를 저널 버퍼에 담고 + 엔티티별 data(tag:) publish → 보드 컴포넌트 라이브. */
1460
1461
  if (msg.kind === 'delta') {
1461
1462
  /*
@@ -2099,7 +2100,7 @@ class TwinEngine {
2099
2100
  // ② State 채널 브로드캐스팅 — "바뀌었다"는 가벼운 신호만(kind+revision). 맵 구독(subscribeTwinState)은 이 신호에
2100
2101
  // scheduleRefresh(250ms 디바운스)→pollLive 로 되물어봄. 스냅샷(O(state))은 보는 사람이 물을 때만 1회 계산.
2101
2102
  // (여기서 payload 로 스냅샷을 실으면 아무도 안 읽는데 tick 마다 통째로 떠서 순수 낭비 — 신호만 보낸다.)
2102
- this.publishGuarded('twin-state', { twinState: { instanceId: inst.id, kind: 'delta', revision: inst.revision ?? 0 } }, `twin-state:${inst.id}`);
2103
+ this.publishGuarded(twin_state_channel_js_1.TWIN_STATE_TOPIC, (0, twin_state_channel_js_1.twinStatePayload)(inst.domainId, { instanceId: inst.id, kind: 'delta', revision: inst.revision ?? 0 }), `twin-state:${inst.id}`);
2103
2104
  }
2104
2105
  /* 가동 중인 인스턴스가 하나도 없으면 tick 을 멈춘다(예전엔 「라이브가 없으면」이었는데, 이제
2105
2106
  시뮬도 이 flush 에 기대므로 그 조건이면 시뮬 브로드캐스팅이 멈춘 채 남는다). */