@beeos-ai/device-agent 0.15.0 → 0.16.1

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 (240) hide show
  1. package/README.md +35 -0
  2. package/dist/adapters/agent-gateway-client.d.ts +6 -68
  3. package/dist/adapters/agent-gateway-client.js +7 -67
  4. package/dist/adapters/agent-gateway-client.js.map +1 -1
  5. package/dist/adapters/device-compat.d.ts +1 -2
  6. package/dist/adapters/device-compat.js +2 -52
  7. package/dist/adapters/device-compat.js.map +1 -1
  8. package/dist/agent-runtime/action-guard.js +92 -17
  9. package/dist/agent-runtime/action-guard.js.map +1 -1
  10. package/dist/agent-runtime/adapters/base.d.ts +13 -9
  11. package/dist/agent-runtime/adapters/base.js.map +1 -1
  12. package/dist/agent-runtime/adapters/general-flash.d.ts +3 -3
  13. package/dist/agent-runtime/adapters/general-flash.js +2 -2
  14. package/dist/agent-runtime/adapters/general-flash.js.map +1 -1
  15. package/dist/agent-runtime/adapters/native-tools.d.ts +56 -0
  16. package/dist/agent-runtime/adapters/native-tools.js +416 -0
  17. package/dist/agent-runtime/adapters/native-tools.js.map +1 -0
  18. package/dist/agent-runtime/adapters/openai.d.ts +1 -2
  19. package/dist/agent-runtime/adapters/openai.js +5 -5
  20. package/dist/agent-runtime/adapters/openai.js.map +1 -1
  21. package/dist/agent-runtime/adapters/pro.d.ts +7 -37
  22. package/dist/agent-runtime/adapters/pro.js +7 -249
  23. package/dist/agent-runtime/adapters/pro.js.map +1 -1
  24. package/dist/agent-runtime/advanced/app-card.js +9 -2
  25. package/dist/agent-runtime/advanced/app-card.js.map +1 -1
  26. package/dist/agent-runtime/advanced/subgoal-verifier.d.ts +1 -0
  27. package/dist/agent-runtime/advanced/subgoal-verifier.js +30 -36
  28. package/dist/agent-runtime/advanced/subgoal-verifier.js.map +1 -1
  29. package/dist/agent-runtime/advanced/task-state.js +4 -9
  30. package/dist/agent-runtime/advanced/task-state.js.map +1 -1
  31. package/dist/agent-runtime/agent-runner.d.ts +2 -11
  32. package/dist/agent-runtime/agent-runner.js +69 -34
  33. package/dist/agent-runtime/agent-runner.js.map +1 -1
  34. package/dist/agent-runtime/core.d.ts +24 -46
  35. package/dist/agent-runtime/core.js +161 -228
  36. package/dist/agent-runtime/core.js.map +1 -1
  37. package/dist/agent-runtime/execution-checks.d.ts +40 -0
  38. package/dist/agent-runtime/execution-checks.js +133 -0
  39. package/dist/agent-runtime/execution-checks.js.map +1 -0
  40. package/dist/agent-runtime/execution-mode.d.ts +1 -8
  41. package/dist/agent-runtime/execution-mode.js +10 -30
  42. package/dist/agent-runtime/execution-mode.js.map +1 -1
  43. package/dist/agent-runtime/feedback.d.ts +4 -28
  44. package/dist/agent-runtime/feedback.js +4 -26
  45. package/dist/agent-runtime/feedback.js.map +1 -1
  46. package/dist/agent-runtime/form-prerequisites.d.ts +3 -0
  47. package/dist/agent-runtime/form-prerequisites.js +52 -0
  48. package/dist/agent-runtime/form-prerequisites.js.map +1 -0
  49. package/dist/agent-runtime/index.d.ts +2 -8
  50. package/dist/agent-runtime/index.js +2 -8
  51. package/dist/agent-runtime/index.js.map +1 -1
  52. package/dist/agent-runtime/{modes/orchestrator → knowledge}/app-guide.d.ts +1 -1
  53. package/dist/agent-runtime/{modes/orchestrator → knowledge}/app-guide.js +1 -1
  54. package/dist/agent-runtime/knowledge/app-guide.js.map +1 -0
  55. package/dist/agent-runtime/models/base.d.ts +3 -1
  56. package/dist/agent-runtime/models/client.js +30 -9
  57. package/dist/agent-runtime/models/client.js.map +1 -1
  58. package/dist/agent-runtime/models/reasoning.d.ts +10 -0
  59. package/dist/agent-runtime/models/reasoning.js +29 -0
  60. package/dist/agent-runtime/models/reasoning.js.map +1 -0
  61. package/dist/agent-runtime/models/runtime-registry.d.ts +2 -1
  62. package/dist/agent-runtime/models/runtime-registry.js +4 -2
  63. package/dist/agent-runtime/models/runtime-registry.js.map +1 -1
  64. package/dist/agent-runtime/models/vlm/autoglm.js +6 -2
  65. package/dist/agent-runtime/models/vlm/autoglm.js.map +1 -1
  66. package/dist/agent-runtime/models/vlm/base.js +1 -12
  67. package/dist/agent-runtime/models/vlm/base.js.map +1 -1
  68. package/dist/agent-runtime/models/vlm/index.d.ts +0 -4
  69. package/dist/agent-runtime/models/vlm/index.js +0 -4
  70. package/dist/agent-runtime/models/vlm/index.js.map +1 -1
  71. package/dist/agent-runtime/modes/hybrid/index.d.ts +2 -12
  72. package/dist/agent-runtime/modes/hybrid/index.js +10 -27
  73. package/dist/agent-runtime/modes/hybrid/index.js.map +1 -1
  74. package/dist/agent-runtime/modes/hybrid/planner/base.d.ts +4 -44
  75. package/dist/agent-runtime/modes/hybrid/planner/base.js +3 -21
  76. package/dist/agent-runtime/modes/hybrid/planner/base.js.map +1 -1
  77. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.d.ts +1 -1
  78. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js +9 -6
  79. package/dist/agent-runtime/modes/hybrid/planner/llm-planner.js.map +1 -1
  80. package/dist/agent-runtime/modes/hybrid/planner/prompts.d.ts +1 -17
  81. package/dist/agent-runtime/modes/hybrid/planner/prompts.js +65 -160
  82. package/dist/agent-runtime/modes/hybrid/planner/prompts.js.map +1 -1
  83. package/dist/agent-runtime/plan-executor.d.ts +13 -14
  84. package/dist/agent-runtime/plan-executor.js +236 -122
  85. package/dist/agent-runtime/plan-executor.js.map +1 -1
  86. package/dist/agent-runtime/pro-memory.js +1 -1
  87. package/dist/agent-runtime/pro-memory.js.map +1 -1
  88. package/dist/agent-runtime/pro-operator.js +8 -2
  89. package/dist/agent-runtime/pro-operator.js.map +1 -1
  90. package/dist/agent-runtime/pro-perception.d.ts +1 -0
  91. package/dist/agent-runtime/pro-perception.js +4 -2
  92. package/dist/agent-runtime/pro-perception.js.map +1 -1
  93. package/dist/agent-runtime/pro-target-check.d.ts +2 -2
  94. package/dist/agent-runtime/pro-target-check.js +102 -17
  95. package/dist/agent-runtime/pro-target-check.js.map +1 -1
  96. package/dist/agent-runtime/prompts/operator.d.ts +2 -0
  97. package/dist/agent-runtime/prompts/operator.js +69 -0
  98. package/dist/agent-runtime/prompts/operator.js.map +1 -0
  99. package/dist/agent-runtime/prompts/verification.d.ts +2 -0
  100. package/dist/agent-runtime/prompts/verification.js +52 -0
  101. package/dist/agent-runtime/prompts/verification.js.map +1 -0
  102. package/dist/agent-runtime/skills/replay.d.ts +4 -14
  103. package/dist/agent-runtime/skills/replay.js +46 -27
  104. package/dist/agent-runtime/skills/replay.js.map +1 -1
  105. package/dist/agent-runtime/tool-batch.d.ts +10 -0
  106. package/dist/agent-runtime/tool-batch.js +51 -0
  107. package/dist/agent-runtime/tool-batch.js.map +1 -0
  108. package/dist/agent-runtime/visual-state.d.ts +2 -0
  109. package/dist/agent-runtime/visual-state.js +24 -0
  110. package/dist/agent-runtime/visual-state.js.map +1 -0
  111. package/dist/agent-runtime/vlm.d.ts +1 -1
  112. package/dist/agent-runtime/vlm.js +1 -1
  113. package/dist/api.js +3 -1
  114. package/dist/api.js.map +1 -1
  115. package/dist/app/agent-host.js +6 -2
  116. package/dist/app/agent-host.js.map +1 -1
  117. package/dist/app/multi-device-host.js +4 -5
  118. package/dist/app/multi-device-host.js.map +1 -1
  119. package/dist/app/session-manager.d.ts +3 -45
  120. package/dist/app/session-manager.js +8 -9
  121. package/dist/app/session-manager.js.map +1 -1
  122. package/dist/bootstrap.js +25 -84
  123. package/dist/bootstrap.js.map +1 -1
  124. package/dist/config/loader.js +12 -1
  125. package/dist/config/loader.js.map +1 -1
  126. package/dist/config/schema.d.ts +7 -2
  127. package/dist/config/schema.js +8 -5
  128. package/dist/config/schema.js.map +1 -1
  129. package/dist/core/abortable-read.d.ts +1 -0
  130. package/dist/core/abortable-read.js +24 -0
  131. package/dist/core/abortable-read.js.map +1 -0
  132. package/dist/device/ui-xml.d.ts +4 -0
  133. package/dist/device/ui-xml.js +35 -13
  134. package/dist/device/ui-xml.js.map +1 -1
  135. package/dist/fleet/adapters/process/node-process-manager.d.ts +2 -1
  136. package/dist/fleet/adapters/process/node-process-manager.js +11 -19
  137. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -1
  138. package/dist/inbound/acp/handlers/models.js +11 -8
  139. package/dist/inbound/acp/handlers/models.js.map +1 -1
  140. package/dist/inbound/acp/handlers/session.d.ts +1 -4
  141. package/dist/inbound/acp/handlers/session.js +3 -6
  142. package/dist/inbound/acp/handlers/session.js.map +1 -1
  143. package/dist/inbound/bma/agent.d.ts +47 -0
  144. package/dist/inbound/bma/agent.js +130 -0
  145. package/dist/inbound/bma/agent.js.map +1 -0
  146. package/dist/inbound/bma/command.d.ts +15 -0
  147. package/dist/inbound/bma/command.js +98 -0
  148. package/dist/inbound/bma/command.js.map +1 -0
  149. package/dist/inbound/bma/model-proxy.d.ts +22 -0
  150. package/dist/inbound/bma/model-proxy.js +130 -0
  151. package/dist/inbound/bma/model-proxy.js.map +1 -0
  152. package/dist/inbound/cli/main.js +12 -2
  153. package/dist/inbound/cli/main.js.map +1 -1
  154. package/dist/inbound/cli/run-artifacts.js +16 -7
  155. package/dist/inbound/cli/run-artifacts.js.map +1 -1
  156. package/dist/inbound/cli/run-command.d.ts +7 -0
  157. package/dist/inbound/cli/run-command.js +37 -29
  158. package/dist/inbound/cli/run-command.js.map +1 -1
  159. package/dist/index.d.ts +1 -10
  160. package/dist/index.js +1 -6
  161. package/dist/index.js.map +1 -1
  162. package/dist/mcp-client/autospawn.d.ts +7 -9
  163. package/dist/mcp-client/autospawn.js +16 -12
  164. package/dist/mcp-client/autospawn.js.map +1 -1
  165. package/dist/mcp-client/client.d.ts +6 -3
  166. package/dist/mcp-client/client.js +31 -13
  167. package/dist/mcp-client/client.js.map +1 -1
  168. package/dist/mcp-client/runtime.d.ts +5 -2
  169. package/dist/plugins/agent-sync/index.d.ts +32 -17
  170. package/dist/plugins/agent-sync/index.js +223 -232
  171. package/dist/plugins/agent-sync/index.js.map +1 -1
  172. package/dist/plugins/message-bus/inbound.d.ts +0 -32
  173. package/dist/plugins/message-bus/inbound.js +3 -0
  174. package/dist/plugins/message-bus/inbound.js.map +1 -1
  175. package/dist/plugins/message-bus/ms-channel-notifier.d.ts +1 -0
  176. package/dist/plugins/message-bus/ms-channel-notifier.js +16 -8
  177. package/dist/plugins/message-bus/ms-channel-notifier.js.map +1 -1
  178. package/dist/plugins/native-chat/deadline.d.ts +2 -0
  179. package/dist/plugins/native-chat/deadline.js +16 -0
  180. package/dist/plugins/native-chat/deadline.js.map +1 -0
  181. package/dist/plugins/native-chat/index.d.ts +46 -0
  182. package/dist/plugins/native-chat/index.js +331 -0
  183. package/dist/plugins/native-chat/index.js.map +1 -0
  184. package/dist/plugins/native-chat/reply-stream.d.ts +50 -0
  185. package/dist/plugins/native-chat/reply-stream.js +81 -0
  186. package/dist/plugins/native-chat/reply-stream.js.map +1 -0
  187. package/dist/plugins/native-chat/session-notifier.d.ts +16 -0
  188. package/dist/plugins/native-chat/session-notifier.js +130 -0
  189. package/dist/plugins/native-chat/session-notifier.js.map +1 -0
  190. package/dist/ports/agent-core.d.ts +2 -0
  191. package/dist/ports/agent-host.d.ts +2 -0
  192. package/dist/ports/agent-host.js +0 -21
  193. package/dist/ports/agent-host.js.map +1 -1
  194. package/dist/ports/device.d.ts +0 -1
  195. package/dist/ports/device.js +0 -1
  196. package/dist/ports/device.js.map +1 -1
  197. package/dist/runtime-authority/device-prompt.gen.d.ts +54 -0
  198. package/dist/runtime-authority/device-prompt.gen.js +19 -0
  199. package/dist/runtime-authority/device-prompt.gen.js.map +1 -0
  200. package/dist/types.d.ts +10 -0
  201. package/dist/types.js +1 -0
  202. package/dist/types.js.map +1 -1
  203. package/package.json +7 -5
  204. package/dist/adapters/device-desktop.d.ts +0 -49
  205. package/dist/adapters/device-desktop.js +0 -132
  206. package/dist/adapters/device-desktop.js.map +0 -1
  207. package/dist/agent-runtime/factory.d.ts +0 -24
  208. package/dist/agent-runtime/factory.js +0 -25
  209. package/dist/agent-runtime/factory.js.map +0 -1
  210. package/dist/agent-runtime/models/vlm/guiowl.d.ts +0 -1
  211. package/dist/agent-runtime/models/vlm/guiowl.js +0 -249
  212. package/dist/agent-runtime/models/vlm/guiowl.js.map +0 -1
  213. package/dist/agent-runtime/models/vlm/maiui.d.ts +0 -1
  214. package/dist/agent-runtime/models/vlm/maiui.js +0 -142
  215. package/dist/agent-runtime/models/vlm/maiui.js.map +0 -1
  216. package/dist/agent-runtime/models/vlm/qwen38.d.ts +0 -1
  217. package/dist/agent-runtime/models/vlm/qwen38.js +0 -241
  218. package/dist/agent-runtime/models/vlm/qwen38.js.map +0 -1
  219. package/dist/agent-runtime/models/vlm/qwenvl.d.ts +0 -1
  220. package/dist/agent-runtime/models/vlm/qwenvl.js +0 -202
  221. package/dist/agent-runtime/models/vlm/qwenvl.js.map +0 -1
  222. package/dist/agent-runtime/modes/orchestrator/app-guide.js.map +0 -1
  223. package/dist/agent-runtime/modes/orchestrator/index.d.ts +0 -41
  224. package/dist/agent-runtime/modes/orchestrator/index.js +0 -218
  225. package/dist/agent-runtime/modes/orchestrator/index.js.map +0 -1
  226. package/dist/agent-runtime/modes/orchestrator/prompt.d.ts +0 -7
  227. package/dist/agent-runtime/modes/orchestrator/prompt.js +0 -53
  228. package/dist/agent-runtime/modes/orchestrator/prompt.js.map +0 -1
  229. package/dist/agent-runtime/reflection.d.ts +0 -100
  230. package/dist/agent-runtime/reflection.js +0 -241
  231. package/dist/agent-runtime/reflection.js.map +0 -1
  232. package/dist/agent-runtime/reflectors/action-reflector.d.ts +0 -97
  233. package/dist/agent-runtime/reflectors/action-reflector.js +0 -234
  234. package/dist/agent-runtime/reflectors/action-reflector.js.map +0 -1
  235. package/dist/agent-runtime/reflectors/policy.d.ts +0 -56
  236. package/dist/agent-runtime/reflectors/policy.js +0 -111
  237. package/dist/agent-runtime/reflectors/policy.js.map +0 -1
  238. package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +0 -93
  239. package/dist/agent-runtime/reflectors/trajectory-reflector.js +0 -224
  240. package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +0 -1
@@ -0,0 +1,331 @@
1
+ import { createHash } from "node:crypto";
2
+ import { join } from "node:path";
3
+ import { NodeRuntimeDeliveryPort, RuntimeLeaseHttp, harnessOperationPath, } from "@beeos-ai/cloud-harness-sdk";
4
+ import { RUNTIME_ERROR_DESCRIPTORS } from "@beeos-ai/beeos-types/runtime";
5
+ import { parseTurnExecutionOptions } from "../../inbound/acp/handlers/session.js";
6
+ import { runtimeDomainHash } from "../../runtime-authority/canonical.js";
7
+ import { NativeReplyStream, readTurnJournal, writeTurnJournal } from "./reply-stream.js";
8
+ import { NativeSessionNotifier } from "./session-notifier.js";
9
+ import { scheduleDeadline } from "./deadline.js";
10
+ /** Native task transport only; the existing SessionManager remains the device turn owner. */
11
+ export class NativeChatPlugin {
12
+ opts;
13
+ name = "native-chat";
14
+ ctx;
15
+ consumer;
16
+ port;
17
+ http;
18
+ active = new Map();
19
+ activeOperation;
20
+ reportedErrors = new Map();
21
+ constructor(opts) {
22
+ this.opts = opts;
23
+ }
24
+ init(ctx) { this.ctx = ctx; }
25
+ start() {
26
+ const origin = { serviceOrigin: async () => this.ctx.config.agentGatewayUrl };
27
+ this.http = new RuntimeLeaseHttp({ origin: this.ctx.config.agentGatewayUrl, fetch: this.opts.fetchImpl });
28
+ this.port = new NodeRuntimeDeliveryPort(origin, this.opts.authority);
29
+ this.consumer = this.port.consume({
30
+ idleDelayMs: 5000,
31
+ onDelivery: (delivery, context) => this.deliver(delivery, context.lease, context.signal),
32
+ onError: (error) => {
33
+ const failure = consumerError(error);
34
+ const { code, phase, status } = failure.details;
35
+ const key = `${code}:${phase}:${status ?? ""}`;
36
+ const now = Date.now();
37
+ const reportedAt = this.reportedErrors.get(key);
38
+ if (reportedAt !== undefined && now - reportedAt < 30_000)
39
+ return;
40
+ this.reportedErrors.set(key, now);
41
+ this.logFailure(failure);
42
+ },
43
+ });
44
+ this.consumer.start();
45
+ }
46
+ async stop() { await this.consumer?.stop(); }
47
+ async deliver(delivery, lease, signal) {
48
+ const message = delivery.message;
49
+ const request = message.payload;
50
+ if (message.type === "runtime_operation_cancel_requested") {
51
+ if (this.activeOperation === request.operationId)
52
+ await this.ctx.sessionManager.cancel();
53
+ await at("delivery_ack", "/api/v1/runtime/deliveries/ack", () => this.consumer.acknowledge([delivery.deliveryId]));
54
+ return;
55
+ }
56
+ const previous = this.active.get(request.operationId);
57
+ if (previous)
58
+ await previous;
59
+ else {
60
+ const task = this.execute(request, delivery.executionGrant, lease, signal);
61
+ this.active.set(request.operationId, task);
62
+ try {
63
+ await task;
64
+ }
65
+ finally {
66
+ this.active.delete(request.operationId);
67
+ }
68
+ }
69
+ await at("delivery_ack", "/api/v1/runtime/deliveries/ack", () => this.consumer.acknowledge([delivery.deliveryId]));
70
+ }
71
+ logFailure(error) {
72
+ this.ctx.log.error(error.details, "native-chat: delivery failure");
73
+ }
74
+ async execute(request, grant, lease, signal) {
75
+ try {
76
+ await this.executeTurn(request, grant, lease, signal);
77
+ }
78
+ catch (error) {
79
+ const failure = deliveryError(error, "execution", "/api/v1/runtime/operations/{operationId}/messages");
80
+ const path = join(this.opts.journalDir, `${createHash("sha256").update(request.operationId).digest("hex")}.json`);
81
+ const journal = await readTurnJournal(path);
82
+ // A committed local final cannot be replaced by a later publication failure.
83
+ if (journal?.final)
84
+ throw failure;
85
+ const descriptor = RUNTIME_ERROR_DESCRIPTORS.RUNTIME_EXECUTION_FAILED;
86
+ const final = { schemaVersion: 1, operationId: request.operationId, requestMessageId: request.requestMessageId,
87
+ requestHash: request.requestHash, dispatchEpoch: request.dispatchEpoch, method: request.method,
88
+ completedAt: new Date().toISOString(), outcome: "failed", response: { jsonrpc: "2.0", id: request.request.id,
89
+ error: { code: descriptor.jsonRpcCode, message: "RUNTIME_EXECUTION_FAILED", data: { code: "RUNTIME_EXECUTION_FAILED",
90
+ operationId: request.operationId, effectState: "failed", retryMode: descriptor.retryMode, context: { deliveryFailure: failure.publicDetails } } } } };
91
+ const failed = { stage: "completed", claimedAt: journal?.claimedAt ?? new Date().toISOString(),
92
+ body: failure.message, parts: [], state: "failed", stopReason: "error", final };
93
+ let publicationFailure;
94
+ if (failure.details.phase !== "reply_patch") {
95
+ try {
96
+ await this.patchReply(request, grant, failed, signal);
97
+ if (journal?.stage === "started")
98
+ await this.finishRun(request, lease, "failed");
99
+ }
100
+ catch (error) {
101
+ publicationFailure = deliveryError(error, "reply_patch", "/api/v1/runtime/conversations/{conversationId}/messages/{messageId}");
102
+ }
103
+ }
104
+ await writeTurnJournal(path, failed);
105
+ const receipt = await at("terminal_append", "/api/v1/runtime/operations/{operationId}/messages", () => this.consumer.append(request.operationId, "runtime_rpc_response", final, grant));
106
+ if (receipt.outcome === "outcome_unknown")
107
+ throw new NativeChatDeliveryError("OUTCOME_UNKNOWN", "terminal_append", "/api/v1/runtime/operations/{operationId}/messages");
108
+ // The durable terminal reached the caller; acknowledge this turn and keep consuming.
109
+ this.logFailure(failure);
110
+ if (publicationFailure)
111
+ this.logFailure(publicationFailure);
112
+ }
113
+ }
114
+ async finishRun(request, lease, terminalState) {
115
+ const params = request.request.params;
116
+ const path = "/api/v1/runtime/conversations/{conversationId}/runs/finish";
117
+ const response = await at("run_finish", path, () => this.port.finishConversationRun({
118
+ operationId: request.operationId, requestMessageId: request.requestMessageId,
119
+ conversationId: params.conversationId, runtimeRunId: params.runtimeRunId,
120
+ historyGeneration: request.command.context.historyGeneration,
121
+ lease: { leaseId: lease.leaseId, handlerIdentity: lease.handlerIdentity, runtimeEpoch: lease.runtimeEpoch,
122
+ runtimeLeaseCredential: this.opts.authority.currentLease().runtimeLeaseCredential },
123
+ activeRunRegistrationId: request.operationId, terminalState, source: "runtime",
124
+ }));
125
+ await accepted(response, "run_finish", path);
126
+ }
127
+ async patchReply(request, grant, value, signal) {
128
+ const params = request.request.params;
129
+ const path = harnessOperationPath("runtimeConversationMessagePatch", { conversationId: params.conversationId, messageId: params.replyMessageId });
130
+ await at("reply_patch", "/api/v1/runtime/conversations/{conversationId}/messages/{messageId}", async () => {
131
+ const response = await this.http.fetch(path, { runtimeLeaseCredential: this.opts.authority.currentLease().runtimeLeaseCredential, executionGrant: grant }, {
132
+ method: "PATCH", signal, headers: { "Content-Type": "application/json" },
133
+ body: JSON.stringify({ ...(value.contentRetained ? {} : { body: value.body, parts: value.parts }), state: value.state, stop_reason: value.stopReason }),
134
+ });
135
+ await accepted(response, "reply_patch", "/api/v1/runtime/conversations/{conversationId}/messages/{messageId}");
136
+ });
137
+ }
138
+ async executeTurn(request, grant, lease, signal) {
139
+ const params = request.request.params;
140
+ const path = join(this.opts.journalDir, `${createHash("sha256").update(request.operationId).digest("hex")}.json`);
141
+ let journal = await readTurnJournal(path);
142
+ const fresh = journal === undefined;
143
+ if (journal === undefined) {
144
+ // The local store can disappear on pod recreation. Message owns the durable effect receipt.
145
+ const retained = await at("operation_history", "/api/v1/runtime/operations/{operationId}/history", () => this.consumer.history(request.operationId));
146
+ if (retained.status !== "found")
147
+ throw new NativeChatDeliveryError("HISTORY_UNAVAILABLE", "operation_history", "/api/v1/runtime/operations/{operationId}/history");
148
+ const history = retained.snapshot;
149
+ if (history.final)
150
+ return;
151
+ journal = { stage: history.started ? "started" : "claimed", claimedAt: history.started?.payload.claimedAt ?? new Date().toISOString(),
152
+ body: "", parts: [], state: "streaming", stopReason: "", ...(history.started ? { contentRetained: true } : {}) };
153
+ }
154
+ if (fresh)
155
+ await writeTurnJournal(path, journal);
156
+ const correlation = { schemaVersion: 1, operationId: request.operationId, requestMessageId: request.requestMessageId,
157
+ requestHash: request.requestHash, dispatchEpoch: request.dispatchEpoch, method: request.method };
158
+ const boundary = { operationId: request.operationId, requestMessageId: request.requestMessageId,
159
+ conversationId: params.conversationId, runtimeRunId: params.runtimeRunId, historyGeneration: request.command.context.historyGeneration };
160
+ const currentBoundary = () => ({ ...boundary, lease: {
161
+ leaseId: lease.leaseId, handlerIdentity: lease.handlerIdentity, runtimeEpoch: lease.runtimeEpoch,
162
+ runtimeLeaseCredential: this.opts.authority.currentLease().runtimeLeaseCredential,
163
+ } });
164
+ const append = async (type, payload) => {
165
+ const receipt = await at("operation_append", "/api/v1/runtime/operations/{operationId}/messages", () => this.consumer.append(request.operationId, type, payload, grant));
166
+ if (receipt.outcome === "outcome_unknown")
167
+ throw new NativeChatDeliveryError("OUTCOME_UNKNOWN", "operation_append", "/api/v1/runtime/operations/{operationId}/messages");
168
+ };
169
+ const patch = (value) => this.patchReply(request, grant, value, signal);
170
+ if (!journal.final) {
171
+ if (journal.stage === "claimed") {
172
+ await append("runtime_operation_started", { ...correlation, executionGrantHash: request.executionGrantHash,
173
+ handlerIdentity: lease.handlerIdentity, executionMode: "start", claimedAt: journal.claimedAt });
174
+ }
175
+ const start = await at("run_start", "/api/v1/runtime/conversations/{conversationId}/runs/start", () => this.port.startConversationRun(currentBoundary()));
176
+ await accepted(start, "run_start", "/api/v1/runtime/conversations/{conversationId}/runs/start");
177
+ let failure;
178
+ if (journal.stage === "started") {
179
+ // A physical phone action cannot be replayed after process death.
180
+ if (journal.state === "streaming") {
181
+ failure = "OUTCOME_UNKNOWN";
182
+ journal.state = "failed";
183
+ journal.stopReason = "error";
184
+ }
185
+ else if (journal.state === "cancelled")
186
+ failure = "OPERATION_CANCELLED";
187
+ else if (journal.state !== "completed")
188
+ failure = "RUNTIME_EXECUTION_FAILED";
189
+ }
190
+ else {
191
+ journal.stage = "started";
192
+ await writeTurnJournal(path, journal);
193
+ const stream = new NativeReplyStream(params.replyMessageId, journal, path, patch, () => {
194
+ if (this.activeOperation === request.operationId)
195
+ void this.ctx.sessionManager.cancel();
196
+ });
197
+ const notifier = new NativeSessionNotifier(stream);
198
+ const sessions = this.ctx.sessionManager;
199
+ if (sessions.isDeviceBusy()) {
200
+ await stream.fail({ body: "Agent is busy", stopReason: "agent_busy" });
201
+ }
202
+ else {
203
+ this.activeOperation = request.operationId;
204
+ sessions.bindNotifier(params.conversationId, notifier);
205
+ const cancel = () => { if (this.activeOperation === request.operationId)
206
+ void sessions.cancel(); };
207
+ signal.addEventListener("abort", cancel, { once: true });
208
+ const clearDeadline = scheduleDeadline(Date.parse(request.executionDeadlineAt), cancel);
209
+ try {
210
+ signal.throwIfAborted();
211
+ const prompt = params.parts.map(part => part.type === "text" ? part.text : part.type === "resource_link" ? part.resourceRef : part.blobRef).join("\n");
212
+ const result = await sessions.promptForSession(params.conversationId, prompt, parseTurnExecutionOptions({ ...params }));
213
+ await notifier.finish(result.stopReason);
214
+ }
215
+ finally {
216
+ clearDeadline();
217
+ signal.removeEventListener("abort", cancel);
218
+ sessions.unbindNotifier(params.conversationId);
219
+ this.activeOperation = undefined;
220
+ await stream.persisted();
221
+ }
222
+ }
223
+ await stream.persisted();
224
+ await stream.flush();
225
+ if (journal.state === "cancelled")
226
+ failure = "OPERATION_CANCELLED";
227
+ else if (journal.state !== "completed")
228
+ failure = "RUNTIME_EXECUTION_FAILED";
229
+ }
230
+ const response = { jsonrpc: "2.0", id: request.request.id };
231
+ const final = { ...correlation, completedAt: new Date().toISOString() };
232
+ if (failure) {
233
+ const descriptor = RUNTIME_ERROR_DESCRIPTORS[failure];
234
+ const state = failure === "OUTCOME_UNKNOWN" ? "outcome_unknown" : failure === "OPERATION_CANCELLED" ? "cancelled" : "failed";
235
+ response.error = { code: descriptor.jsonRpcCode, message: failure, data: { code: failure,
236
+ operationId: request.operationId, effectState: state, retryMode: descriptor.retryMode } };
237
+ final.outcome = state;
238
+ }
239
+ else {
240
+ const result = { runtimeRunId: params.runtimeRunId, stopReason: journal.stopReason, requestAborted: false };
241
+ response.result = result;
242
+ final.serviceResultHash = runtimeDomainHash("beeos.runtime.service-result.v1", { method: request.method, result });
243
+ final.outcome = "succeeded";
244
+ }
245
+ final.response = response;
246
+ journal.final = final;
247
+ journal.stage = "completed";
248
+ await writeTurnJournal(path, journal);
249
+ }
250
+ await patch(journal);
251
+ await this.finishRun(request, lease, journal.state);
252
+ await append("runtime_rpc_response", journal.final);
253
+ }
254
+ }
255
+ /** Public diagnostics contain only fixed categories and route templates, never response text or credentials. */
256
+ export class NativeChatDeliveryError extends Error {
257
+ details;
258
+ get publicDetails() {
259
+ const { path: _path, ...details } = this.details;
260
+ return details;
261
+ }
262
+ constructor(code, phase, path, status, cause) {
263
+ status = typeof status === "number" && Number.isInteger(status) && status >= 100 && status <= 599 ? status : undefined;
264
+ super(`Native chat ${phase}: ${code}${status === undefined ? "" : ` (${status})`}`, { cause });
265
+ this.name = "NativeChatDeliveryError";
266
+ this.details = { code, phase, ...(path === undefined ? {} : { path }), ...(status === undefined ? {} : { status }) };
267
+ }
268
+ }
269
+ function deliveryError(error, phase, path) {
270
+ if (error instanceof NativeChatDeliveryError)
271
+ return error;
272
+ const status = error?.status;
273
+ if (typeof status === "number")
274
+ return new NativeChatDeliveryError("HTTP_REJECTED", phase, path, status, error);
275
+ if (error instanceof TypeError)
276
+ return new NativeChatDeliveryError("TRANSPORT_FAILED", phase, path, undefined, error);
277
+ const message = error instanceof Error ? error.message : "";
278
+ const known = new Map([
279
+ ["runtime delivery lease is unavailable", "LEASE_UNAVAILABLE"],
280
+ ["runtime delivery lease is unavailable or expired", "LEASE_UNAVAILABLE"],
281
+ ["runtime delivery lease expired", "LEASE_EXPIRED"],
282
+ ["runtime delivery lease changed", "LEASE_CHANGED"],
283
+ ["runtime delivery lease changed during read", "LEASE_CHANGED"],
284
+ ["conversation run authority does not match current runtime lease", "LEASE_CHANGED"],
285
+ ["conversation run runtime lease or journal changed", "LEASE_CHANGED"],
286
+ ["Cloud Message Service returned invalid runtime deliveries", "INVALID_DELIVERY_RESPONSE"],
287
+ ["Cloud Message Service returned duplicate runtime delivery ids", "INVALID_DELIVERY_RESPONSE"],
288
+ ["Cloud Message Service returned an invalid runtime delivery", "INVALID_DELIVERY_RESPONSE"],
289
+ ["Cloud Message Service returned invalid runtime delivery renewal", "INVALID_DELIVERY_RESPONSE"],
290
+ ["Cloud Message Service returned invalid runtime delivery acknowledgement", "INVALID_DELIVERY_RESPONSE"],
291
+ ["Cloud Message Service returned invalid runtime history", "INVALID_DELIVERY_RESPONSE"],
292
+ ["Cloud Message Service returned invalid runtime append receipt", "INVALID_DELIVERY_RESPONSE"],
293
+ ["runtime delivery request escaped the Cloud Message Service origin", "ORIGIN_REJECTED"],
294
+ ["runtime delivery response origin changed", "ORIGIN_REJECTED"],
295
+ ]);
296
+ return new NativeChatDeliveryError(known.get(message) ?? "EXECUTION_FAILED", phase, path, undefined, error);
297
+ }
298
+ function consumerError(error) {
299
+ if (error instanceof NativeChatDeliveryError)
300
+ return error;
301
+ const failure = deliveryError(error, "delivery_read", "/api/v1/runtime/deliveries/read");
302
+ if (failure.details.code === "LEASE_UNAVAILABLE" || failure.details.code === "LEASE_EXPIRED" || failure.details.code === "LEASE_CHANGED") {
303
+ return deliveryError(error, "runtime_lease");
304
+ }
305
+ // The pinned SDK passes opaque renewal errors; its awaited renewActive frame
306
+ // identifies both HTTP rejection and transport failure without logging raw text.
307
+ if (error instanceof Error && (error.message === "Cloud Message Service returned invalid runtime delivery renewal" ||
308
+ error.stack?.split("\n").slice(1).some(frame => /\bat (?:async )?NodeRuntimeDeliveryConsumer\.renewActive \(/.test(frame)))) {
309
+ return deliveryError(error, "delivery_renew", "/api/v1/runtime/deliveries/renew");
310
+ }
311
+ // Some fetch failures carry no SDK stack frame, so their route is unknowable.
312
+ if (error instanceof TypeError)
313
+ return deliveryError(error, "delivery_transport");
314
+ return failure;
315
+ }
316
+ async function at(phase, path, action) {
317
+ try {
318
+ return await action();
319
+ }
320
+ catch (error) {
321
+ throw deliveryError(error, phase, path);
322
+ }
323
+ }
324
+ async function accepted(response, phase, path) {
325
+ if (!response.ok)
326
+ throw new NativeChatDeliveryError("HTTP_REJECTED", phase, path, response.status);
327
+ const body = await response.json();
328
+ if (body.status === "rejected")
329
+ throw new NativeChatDeliveryError("REJECTED", phase, path, response.status);
330
+ }
331
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/native-chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,GAMrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAA0B,MAAM,mBAAmB,CAAC;AACjH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAqBjD,6FAA6F;AAC7F,MAAM,OAAO,gBAAgB;IASE;IARpB,IAAI,GAAG,aAAa,CAAC;IACtB,GAAG,CAAiB;IACpB,QAAQ,CAA2B;IACnC,IAAI,CAA2B;IAC/B,IAAI,CAAoB;IACf,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IACnD,eAAe,CAAU;IAChB,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5D,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;IAAG,CAAC;IACxD,IAAI,CAAC,GAAkB,IAAU,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK;QACH,MAAM,MAAM,GAAG,EAAE,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAI,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,IAAI,GAAG,IAAI,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAChC,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;YACxF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;gBAChD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,UAAU,KAAK,SAAS,IAAI,GAAG,GAAG,UAAU,GAAG,MAAM;oBAAE,OAAO;gBAClE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,IAAI,KAAoB,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5D,KAAK,CAAC,OAAO,CAAC,QAA+B,EAAE,KAA2B,EAAE,MAAmB;QAC7F,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAqC,CAAC;QAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,KAAK,oCAAoC,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,WAAW;gBAAE,MAAM,IAAI,CAAC,GAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC1F,MAAM,EAAE,CAAC,cAAc,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpH,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,MAAM,QAAQ,CAAC;aACxB,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC;YAAC,CAAC;oBAAS,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAAC,CAAC;QAC1E,CAAC;QACD,MAAM,EAAE,CAAC,cAAc,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACtH,CAAC;IAEO,UAAU,CAAC,KAA8B;QAC/C,IAAI,CAAC,GAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAwB,EAAE,KAAa,EAAE,KAA2B,EAAE,MAAmB;QAC7G,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,mDAAmD,CAAC,CAAC;YACvG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,6EAA6E;YAC7E,IAAI,OAAO,EAAE,KAAK;gBAAE,MAAM,OAAO,CAAC;YAClC,MAAM,UAAU,GAAG,yBAAyB,CAAC,wBAAwB,CAAC;YACtE,MAAM,KAAK,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC5G,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;gBAC9F,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC1G,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,0BAA0B;4BAClH,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC5J,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC/G,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAClF,IAAI,kBAAuD,CAAC;YAC5D,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACtD,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;wBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACnF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,kBAAkB,GAAG,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,qEAAqE,CAAC,CAAC;gBAClI,CAAC;YACH,CAAC;YACD,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,iBAAiB,EAAE,mDAAmD,EAC7F,GAAG,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1F,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB;gBAAE,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,mDAAmD,CAAC,CAAC;YACxK,qFAAqF;YACrF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,kBAAkB;gBAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,OAAwB,EAAE,KAA2B,EAAE,aAAmD;QAChI,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,MAAM,IAAI,GAAG,4DAA4D,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAK,CAAC,qBAAqB,CAAC;YACnF,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC5E,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY;YACxE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAgC;YAC3E,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,YAA2B;gBACtH,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAG,CAAC,sBAAsB,EAAE;YACtF,uBAAuB,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS;SAC/E,CAAC,CAAC,CAAC;QACJ,MAAM,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,OAAwB,EAAE,KAAa,EAAE,KAAwB,EAAE,MAAmB;QAC7G,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,MAAM,IAAI,GAAG,oBAAoB,CAAC,iCAAiC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAClJ,MAAM,EAAE,CAAC,aAAa,EAAE,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACxG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAG,CAAC,sBAAsB,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE;gBAC3J,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACxE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;aACxJ,CAAC,CAAC;YACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,qEAAqE,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,KAAa,EAAE,KAA2B,EAAE,MAAmB;QACjH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClH,IAAI,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS,CAAC;QACpC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,4FAA4F;YAC5F,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,mBAAmB,EAAE,kDAAkD,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACtJ,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO;gBAAE,MAAM,IAAI,uBAAuB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,kDAAkD,CAAC,CAAC;YACnK,MAAM,OAAO,GAAG,QAAQ,CAAC,QAA6E,CAAC;YACvG,IAAI,OAAO,CAAC,KAAK;gBAAE,OAAO;YAC1B,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnI,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QACD,IAAI,KAAK;YAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAClH,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACnG,MAAM,QAAQ,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC7F,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAgC,EAAE,CAAC;QAC1J,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;gBACnD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,YAA2B;gBAC/G,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAG,CAAC,sBAAsB;aACnF,EAAE,CAAC,CAAC;QACL,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAE,OAAkB,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,kBAAkB,EAAE,mDAAmD,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1K,IAAI,OAAO,CAAC,OAAO,KAAK,iBAAiB;gBAAE,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mDAAmD,CAAC,CAAC;QAC3K,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3F,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,MAAM,CAAC,2BAA2B,EAAE,EAAE,GAAG,WAAW,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;oBACxG,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,2DAA2D,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAK,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAC3J,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,2DAA2D,CAAC,CAAC;YAChG,IAAI,OAA2F,CAAC;YAChG,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,kEAAkE;gBAClE,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBAClC,OAAO,GAAG,iBAAiB,CAAC;oBAC5B,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACzB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC/B,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW;oBAAE,OAAO,GAAG,qBAAqB,CAAC;qBACrE,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW;oBAAE,OAAO,GAAG,0BAA0B,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;gBAC1B,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;oBACrF,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,WAAW;wBAAE,KAAK,IAAI,CAAC,GAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC3F,CAAC,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,QAAQ,GAAmB,IAAI,CAAC,GAAI,CAAC,cAAc,CAAC;gBAC1D,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;oBAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;oBAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;oBACvD,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,WAAW;wBAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;oBACnG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;oBACxF,IAAI,CAAC;wBACH,MAAM,CAAC,cAAc,EAAE,CAAC;wBACxB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,yBAAyB,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;wBACxH,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC3C,CAAC;4BAAS,CAAC;wBACT,aAAa,EAAE,CAAC;wBAChB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBAC5C,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;wBAC/C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;wBACjC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW;oBAAE,OAAO,GAAG,qBAAqB,CAAC;qBAC9D,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW;oBAAE,OAAO,GAAG,0BAA0B,CAAC;YAC/E,CAAC;YACD,MAAM,QAAQ,GAA8B,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACvF,MAAM,KAAK,GAA8B,EAAE,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACnG,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,KAAK,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC7H,QAAQ,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO;wBACtF,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5F,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;gBAC5G,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;gBACzB,KAAK,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnH,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC;YAC9B,CAAC;YACD,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC1B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;YAC5B,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAA6C,CAAC,CAAC;QAC5F,MAAM,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;CACF;AAID,gHAAgH;AAChH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,OAAO,CAA+E;IAC/F,IAAI,aAAa;QACf,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,YAAY,IAAyB,EAAE,KAAa,EAAE,IAAa,EAAE,MAAe,EAAE,KAAe;QACnG,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACvH,KAAK,CAAC,eAAe,KAAK,KAAK,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvH,CAAC;CACF;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,EAAE,IAAa;IACjE,IAAI,KAAK,YAAY,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,MAAM,GAAI,KAAoC,EAAE,MAAM,CAAC;IAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,uBAAuB,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChH,IAAI,KAAK,YAAY,SAAS;QAAE,OAAO,IAAI,uBAAuB,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACtH,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,CAA8B;QACjD,CAAC,uCAAuC,EAAE,mBAAmB,CAAC;QAC9D,CAAC,kDAAkD,EAAE,mBAAmB,CAAC;QACzE,CAAC,gCAAgC,EAAE,eAAe,CAAC;QACnD,CAAC,gCAAgC,EAAE,eAAe,CAAC;QACnD,CAAC,4CAA4C,EAAE,eAAe,CAAC;QAC/D,CAAC,iEAAiE,EAAE,eAAe,CAAC;QACpF,CAAC,mDAAmD,EAAE,eAAe,CAAC;QACtE,CAAC,2DAA2D,EAAE,2BAA2B,CAAC;QAC1F,CAAC,+DAA+D,EAAE,2BAA2B,CAAC;QAC9F,CAAC,4DAA4D,EAAE,2BAA2B,CAAC;QAC3F,CAAC,iEAAiE,EAAE,2BAA2B,CAAC;QAChG,CAAC,yEAAyE,EAAE,2BAA2B,CAAC;QACxG,CAAC,wDAAwD,EAAE,2BAA2B,CAAC;QACvF,CAAC,+DAA+D,EAAE,2BAA2B,CAAC;QAC9F,CAAC,mEAAmE,EAAE,iBAAiB,CAAC;QACxF,CAAC,0CAA0C,EAAE,iBAAiB,CAAC;KAChE,CAAC,CAAC;IACH,OAAO,IAAI,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,YAAY,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,iCAAiC,CAAC,CAAC;IACzF,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACzI,OAAO,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC/C,CAAC;IACD,6EAA6E;IAC7E,iFAAiF;IACjF,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,iEAAiE;QAC9G,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,6DAA6D,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChI,OAAO,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,kCAAkC,CAAC,CAAC;IACpF,CAAC;IACD,8EAA8E;IAC9E,IAAI,KAAK,YAAY,SAAS;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAClF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,EAAE,CAAI,KAAa,EAAE,IAAY,EAAE,MAAwB;IACxE,IAAI,CAAC;QAAC,OAAO,MAAM,MAAM,EAAE,CAAC;IAAC,CAAC;IAC9B,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,QAAkB,EAAE,KAAa,EAAE,IAAY;IACrE,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,uBAAuB,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9G,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { JsonValue } from "@beeos-ai/message-sdk/protocol";
2
+ import type { MessageReplyStream } from "../../messaging/message-client.js";
3
+ export interface NativeTurnJournal {
4
+ stage: "claimed" | "started" | "completed";
5
+ claimedAt: string;
6
+ body: string;
7
+ parts: JsonValue[];
8
+ state: string;
9
+ stopReason: string;
10
+ /** The output remains in Message after loss of this runtime's local store. */
11
+ contentRetained?: boolean;
12
+ final?: JsonValue;
13
+ }
14
+ /** Contains output and effect receipts only; lease/grant credentials stay in memory. */
15
+ export declare function writeTurnJournal(path: string, value: NativeTurnJournal): Promise<void>;
16
+ export declare function readTurnJournal(path: string): Promise<NativeTurnJournal | undefined>;
17
+ /** Uses Message's reserved reply row, while the existing notifier owns wire projection. */
18
+ export declare class NativeReplyStream implements MessageReplyStream {
19
+ readonly id: string;
20
+ readonly journal: NativeTurnJournal;
21
+ private readonly path;
22
+ private readonly patch;
23
+ private readonly onFailure;
24
+ private chain;
25
+ private saves;
26
+ constructor(id: string, journal: NativeTurnJournal, path: string, patch: (snapshot: NativeTurnJournal) => Promise<void>, onFailure: (error: unknown) => void);
27
+ get isTerminated(): boolean;
28
+ get parts(): readonly JsonValue[];
29
+ opened(): Promise<unknown>;
30
+ flush(): Promise<void>;
31
+ persisted(): Promise<void>;
32
+ appendBody(chunk: string): void;
33
+ addPart(part: JsonValue): void;
34
+ replacePart(index: number, part: JsonValue): void;
35
+ finalize(options?: {
36
+ stopReason?: string;
37
+ }): Promise<unknown>;
38
+ fail(options?: {
39
+ body?: string;
40
+ stopReason?: string;
41
+ }): Promise<unknown>;
42
+ refuse(options?: {
43
+ stopReason?: string;
44
+ }): Promise<unknown>;
45
+ cancel(options?: {
46
+ stopReason?: string;
47
+ }): Promise<unknown>;
48
+ private finish;
49
+ private enqueue;
50
+ }
@@ -0,0 +1,81 @@
1
+ import { mkdir, open, readFile, rename } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ /** Contains output and effect receipts only; lease/grant credentials stay in memory. */
4
+ export async function writeTurnJournal(path, value) {
5
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
6
+ const file = await open(`${path}.tmp`, "w", 0o600);
7
+ try {
8
+ await file.writeFile(JSON.stringify(value));
9
+ await file.sync();
10
+ }
11
+ finally {
12
+ await file.close();
13
+ }
14
+ await rename(`${path}.tmp`, path);
15
+ const dir = await open(dirname(path), "r");
16
+ try {
17
+ await dir.sync();
18
+ }
19
+ finally {
20
+ await dir.close();
21
+ }
22
+ }
23
+ export async function readTurnJournal(path) {
24
+ try {
25
+ return JSON.parse(await readFile(path, "utf8"));
26
+ }
27
+ catch (error) {
28
+ if (error.code === "ENOENT")
29
+ return undefined;
30
+ throw error;
31
+ }
32
+ }
33
+ /** Uses Message's reserved reply row, while the existing notifier owns wire projection. */
34
+ export class NativeReplyStream {
35
+ id;
36
+ journal;
37
+ path;
38
+ patch;
39
+ onFailure;
40
+ chain = Promise.resolve();
41
+ saves = Promise.resolve();
42
+ constructor(id, journal, path, patch, onFailure) {
43
+ this.id = id;
44
+ this.journal = journal;
45
+ this.path = path;
46
+ this.patch = patch;
47
+ this.onFailure = onFailure;
48
+ }
49
+ get isTerminated() { return this.journal.state !== "streaming"; }
50
+ get parts() { return this.journal.parts; }
51
+ async opened() { return { outcome: "created", messageId: this.id }; }
52
+ flush() { return this.chain; }
53
+ persisted() { return this.saves; }
54
+ appendBody(chunk) { this.journal.body += chunk; this.enqueue(); }
55
+ addPart(part) { this.journal.parts.push(part); this.enqueue(); }
56
+ replacePart(index, part) { this.journal.parts[index] = part; this.enqueue(); }
57
+ finalize(options) { return this.finish("completed", options?.stopReason ?? "end_turn"); }
58
+ fail(options) {
59
+ if (options?.body !== undefined)
60
+ this.journal.body = options.body;
61
+ return this.finish("failed", options?.stopReason ?? "error");
62
+ }
63
+ refuse(options) { return this.finish("refused", options?.stopReason ?? "refused"); }
64
+ cancel(options) { return this.finish("cancelled", options?.stopReason ?? "cancelled"); }
65
+ finish(state, stopReason) {
66
+ this.journal.state = state;
67
+ this.journal.stopReason = stopReason;
68
+ this.enqueue();
69
+ return this.chain;
70
+ }
71
+ enqueue() {
72
+ const snapshot = structuredClone(this.journal);
73
+ // Persist every produced snapshot even if its preceding network write failed.
74
+ this.saves = this.saves.then(() => writeTurnJournal(this.path, snapshot));
75
+ const saved = this.saves;
76
+ this.chain = this.chain.then(async () => { await saved; await this.patch(snapshot); });
77
+ // The owned task observes this rejection at flush; also cancel its device action promptly.
78
+ void this.chain.catch(this.onFailure);
79
+ }
80
+ }
81
+ //# sourceMappingURL=reply-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-stream.js","sourceRoot":"","sources":["../../../src/plugins/native-chat/reply-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { SessionUpdateNotifier } from "../../app/session-manager.js";
2
+ import type { NativeReplyStream } from "./reply-stream.js";
3
+ /** Maps the existing SessionManager's trusted updates to the reserved native reply. */
4
+ export declare class NativeSessionNotifier implements SessionUpdateNotifier {
5
+ private readonly stream;
6
+ private text;
7
+ private thought;
8
+ private thoughtIndex?;
9
+ private readonly tools;
10
+ constructor(stream: NativeReplyStream);
11
+ send(_sessionId: string, update: Record<string, unknown>): Promise<void>;
12
+ finish(stopReason: string): Promise<void>;
13
+ private commitText;
14
+ private appendText;
15
+ private finishThought;
16
+ }