openmeld 0.3.261 → 0.3.263

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 (150) hide show
  1. package/README.md +7 -0
  2. package/dist/{add-me-membership-erEkzelq.js → add-me-membership-C_t_Mg-Z.js} +2 -2
  3. package/dist/{add-me-membership-erEkzelq.js.map → add-me-membership-C_t_Mg-Z.js.map} +1 -1
  4. package/dist/{agents-BGpftZJo.js → agents-DFHWtOt8.js} +13 -13
  5. package/dist/{agents-BGpftZJo.js.map → agents-DFHWtOt8.js.map} +1 -1
  6. package/dist/{api-client-foundation-DBl_OaMj.js → api-client-foundation-6MeNwklv.js} +4 -4
  7. package/dist/{api-client-foundation-DBl_OaMj.js.map → api-client-foundation-6MeNwklv.js.map} +1 -1
  8. package/dist/{api-client-foundation-DgQRzwbJ.js → api-client-foundation-BPJBWsRD.js} +1 -1
  9. package/dist/{auth-session-RQOVI0Gb.js → auth-session-B0J2UwSR.js} +5 -5
  10. package/dist/{auth-session-RQOVI0Gb.js.map → auth-session-B0J2UwSR.js.map} +1 -1
  11. package/dist/auth-session-DkDdLUPZ.js +4 -0
  12. package/dist/{auth-url-BH-9HTpn.js → auth-url-BheLcWg9.js} +2 -2
  13. package/dist/{auth-url-BH-9HTpn.js.map → auth-url-BheLcWg9.js.map} +1 -1
  14. package/dist/{base-url-B9NwMjEF.js → base-url-CLMqlF1w.js} +3 -3
  15. package/dist/{base-url-B9NwMjEF.js.map → base-url-CLMqlF1w.js.map} +1 -1
  16. package/dist/{base-url-DO0hjUUk.js → base-url-D84aBKXK.js} +1 -1
  17. package/dist/{channel-fUczwp7l.js → channel-7iF6DSp4.js} +2 -2
  18. package/dist/{channel-fUczwp7l.js.map → channel-7iF6DSp4.js.map} +1 -1
  19. package/dist/{cloud-computer-CCxIrSZU.js → cloud-computer-BddlwRAk.js} +6 -6
  20. package/dist/{cloud-computer-CCxIrSZU.js.map → cloud-computer-BddlwRAk.js.map} +1 -1
  21. package/dist/{command-BgBsh9xU.js → command-7ZoDO_Hy.js} +77 -21
  22. package/dist/command-7ZoDO_Hy.js.map +1 -0
  23. package/dist/{computer-connection-review-D4iW1JS7.js → computer-connection-review-vYYCtG_l.js} +6 -6
  24. package/dist/{computer-connection-review-D4iW1JS7.js.map → computer-connection-review-vYYCtG_l.js.map} +1 -1
  25. package/dist/{computer-disconnect-CZalrKK7.js → computer-disconnect-C0n2IGfR.js} +9 -9
  26. package/dist/{computer-disconnect-CZalrKK7.js.map → computer-disconnect-C0n2IGfR.js.map} +1 -1
  27. package/dist/{computer-setup-continuation-B4JriFmR.js → computer-setup-continuation-DiT88kEQ.js} +3 -3
  28. package/dist/{computer-setup-continuation-B4JriFmR.js.map → computer-setup-continuation-DiT88kEQ.js.map} +1 -1
  29. package/dist/{context-DqkwGCKj.js → context-DFf16i-C.js} +7 -7
  30. package/dist/{context-DqkwGCKj.js.map → context-DFf16i-C.js.map} +1 -1
  31. package/dist/{daemon-device-id-BmL_1aHE.js → daemon-device-id-C3UTBv9T.js} +4 -4
  32. package/dist/{daemon-device-id-BmL_1aHE.js.map → daemon-device-id-C3UTBv9T.js.map} +1 -1
  33. package/dist/{daemon-lifecycle-journal-D4Xupqhp.js → daemon-lifecycle-journal-DoAQ-E6K.js} +7 -7
  34. package/dist/{daemon-lifecycle-journal-D4Xupqhp.js.map → daemon-lifecycle-journal-DoAQ-E6K.js.map} +1 -1
  35. package/dist/{daemon-runtime-lease-Cvssoa6x.js → daemon-runtime-lease-CACGRuZ3.js} +1 -1
  36. package/dist/{daemon-runtime-lease-B--QbOlQ.js → daemon-runtime-lease-D5f4zLXB.js} +3 -3
  37. package/dist/{daemon-runtime-lease-B--QbOlQ.js.map → daemon-runtime-lease-D5f4zLXB.js.map} +1 -1
  38. package/dist/{daemon-service-contract-DGPRa_PH.js → daemon-service-contract-D9gUVdhc.js} +3 -3
  39. package/dist/{daemon-service-contract-DGPRa_PH.js.map → daemon-service-contract-D9gUVdhc.js.map} +1 -1
  40. package/dist/{daemon-service-manager-CDBNfjOu.js → daemon-service-manager-BDIsfrfx.js} +5 -5
  41. package/dist/{daemon-service-manager-CDBNfjOu.js.map → daemon-service-manager-BDIsfrfx.js.map} +1 -1
  42. package/dist/{daemon-service-manager-DW6ySNEe.js → daemon-service-manager-k9IJJuqv.js} +1 -1
  43. package/dist/{daemon-service-runtime-BMUXKr64.js → daemon-service-runtime-LFoUNQQu.js} +14 -14
  44. package/dist/{daemon-service-runtime-BMUXKr64.js.map → daemon-service-runtime-LFoUNQQu.js.map} +1 -1
  45. package/dist/{daemon-service-update-coordinator-ef1RLL_R.js → daemon-service-update-coordinator-4WJr8-5_.js} +21 -23
  46. package/dist/daemon-service-update-coordinator-4WJr8-5_.js.map +1 -0
  47. package/dist/{daemon-state-e0klzRsC.js → daemon-state-C09DaALw.js} +3 -3
  48. package/dist/{daemon-state-e0klzRsC.js.map → daemon-state-C09DaALw.js.map} +1 -1
  49. package/dist/{dispatch-owned-runtime-D5J7omXK.js → dispatch-owned-runtime-BTK0uuOV.js} +10 -10
  50. package/dist/{dispatch-owned-runtime-D5J7omXK.js.map → dispatch-owned-runtime-BTK0uuOV.js.map} +1 -1
  51. package/dist/{dist-DGZXxIvJ.js → dist-DRfPWuFM.js} +1 -1
  52. package/dist/{dist-Dip3sgFz.js → dist-DY8oLAop.js} +21 -2
  53. package/dist/dist-DY8oLAop.js.map +1 -0
  54. package/dist/dist-Df2Qywqr.js +4 -0
  55. package/dist/{dist-CMBBVJVE.js → dist-YSbIHBnl.js} +52 -3
  56. package/dist/dist-YSbIHBnl.js.map +1 -0
  57. package/dist/{dual-view-guide-catalog-DkoOcvAt.js → dual-view-guide-catalog-3LaB18SR.js} +3 -3
  58. package/dist/{dual-view-guide-catalog-DkoOcvAt.js.map → dual-view-guide-catalog-3LaB18SR.js.map} +1 -1
  59. package/dist/{elapsed-time-COLGQWPQ.js → elapsed-time-CGeKqTzX.js} +4 -4
  60. package/dist/{elapsed-time-COLGQWPQ.js.map → elapsed-time-CGeKqTzX.js.map} +1 -1
  61. package/dist/{entry-agrfgBQh.js → entry-CMDScEVO.js} +12 -12
  62. package/dist/{entry-agrfgBQh.js.map → entry-CMDScEVO.js.map} +1 -1
  63. package/dist/{installation-inventory-Bxelkj89.js → installation-inventory-CvtmIZj8.js} +4 -4
  64. package/dist/{installation-inventory-Bxelkj89.js.map → installation-inventory-CvtmIZj8.js.map} +1 -1
  65. package/dist/{installer-BZfDlcZI.js → installer-CwK5uV4Q.js} +2 -2
  66. package/dist/{installer-BZfDlcZI.js.map → installer-CwK5uV4Q.js.map} +1 -1
  67. package/dist/{lock-CqozgAXC.js → lock-Cz8h_yJh.js} +3 -3
  68. package/dist/{lock-CqozgAXC.js.map → lock-Cz8h_yJh.js.map} +1 -1
  69. package/dist/{meta-api-BPhaiMmU.js → meta-api-B01L3fo4.js} +7 -7
  70. package/dist/{meta-api-BPhaiMmU.js.map → meta-api-B01L3fo4.js.map} +1 -1
  71. package/dist/{openmeld-CiLo42M9.js → openmeld-RoIfH4iG.js} +43 -41
  72. package/dist/{openmeld-CiLo42M9.js.map → openmeld-RoIfH4iG.js.map} +1 -1
  73. package/dist/{openmeld-dev-environment-Dt_yVZn2.js → openmeld-dev-environment-POXQHtTN.js} +3 -3
  74. package/dist/{openmeld-dev-environment-Dt_yVZn2.js.map → openmeld-dev-environment-POXQHtTN.js.map} +1 -1
  75. package/dist/openmeld-dev.js +1 -1
  76. package/dist/{openmeld-environment-target-BjcRwYW3.js → openmeld-environment-target-B0Z7eI6O.js} +3 -3
  77. package/dist/{openmeld-environment-target-BjcRwYW3.js.map → openmeld-environment-target-B0Z7eI6O.js.map} +1 -1
  78. package/dist/{openmeld-maintenance-worker-pgUSH8PK.js → openmeld-maintenance-worker--ucPEftH.js} +14 -14
  79. package/dist/{openmeld-maintenance-worker-pgUSH8PK.js.map → openmeld-maintenance-worker--ucPEftH.js.map} +1 -1
  80. package/dist/{openmeld-tools-update-join-BuJ6DCqG.js → openmeld-tools-update-join-gps19byt.js} +4 -4
  81. package/dist/{openmeld-tools-update-join-BuJ6DCqG.js.map → openmeld-tools-update-join-gps19byt.js.map} +1 -1
  82. package/dist/{openmeld-tools-update-process-frame-CMSbyGR2.js → openmeld-tools-update-process-frame-C9hDfFXg.js} +1 -1
  83. package/dist/{openmeld-tools-update-process-frame-CwO6rIba.js → openmeld-tools-update-process-frame-Ctim4GrA.js} +2 -2
  84. package/dist/{openmeld-tools-update-process-frame-CwO6rIba.js.map → openmeld-tools-update-process-frame-Ctim4GrA.js.map} +1 -1
  85. package/dist/openmeld.js +23 -7
  86. package/dist/openmeld.js.map +1 -1
  87. package/dist/{prepare-provider-runtime-CkW7c9bF.js → prepare-provider-runtime-CyIGaDTC.js} +786 -490
  88. package/dist/prepare-provider-runtime-CyIGaDTC.js.map +1 -0
  89. package/dist/{prepare-session-executor-BExa01B_.js → prepare-session-executor-BesIXfWv.js} +25 -25
  90. package/dist/{prepare-session-executor-BExa01B_.js.map → prepare-session-executor-BesIXfWv.js.map} +1 -1
  91. package/dist/{process-channel-BCIgC7jM.js → process-channel-DILzf1ek.js} +2 -2
  92. package/dist/{process-channel-BCIgC7jM.js.map → process-channel-DILzf1ek.js.map} +1 -1
  93. package/dist/{process-identity-e30Hp6t3.js → process-identity-D_VPVruT.js} +2 -2
  94. package/dist/{process-identity-e30Hp6t3.js.map → process-identity-D_VPVruT.js.map} +1 -1
  95. package/dist/{runtime-DoIazDNu.js → runtime-BsLzW985.js} +174 -24
  96. package/dist/runtime-BsLzW985.js.map +1 -0
  97. package/dist/{runtime-agent-controller-reporting-submission-ZLj8H7TM.js → runtime-agent-controller-reporting-submission-Dtvml_vt.js} +10 -10
  98. package/dist/runtime-agent-controller-reporting-submission-Dtvml_vt.js.map +1 -0
  99. package/dist/{service-8ReqDsOx.js → service-BNpxWxYQ.js} +31 -30
  100. package/dist/service-BNpxWxYQ.js.map +1 -0
  101. package/dist/{service-account-authorization-CznmJjXZ.js → service-account-authorization-CJv1vZzm.js} +5 -5
  102. package/dist/{service-account-authorization-CznmJjXZ.js.map → service-account-authorization-CJv1vZzm.js.map} +1 -1
  103. package/dist/{service-account-control-DhU1ulXB.js → service-account-control-f9-hQZzW.js} +15 -15
  104. package/dist/{service-account-control-DhU1ulXB.js.map → service-account-control-f9-hQZzW.js.map} +1 -1
  105. package/dist/{service-control-capabilities-BVarsj7B.js → service-control-capabilities-D2-b-23n.js} +1 -1
  106. package/dist/{service-control-capabilities-DWOxjL2z.js → service-control-capabilities-DyX9foHw.js} +6 -6
  107. package/dist/{service-control-capabilities-DWOxjL2z.js.map → service-control-capabilities-DyX9foHw.js.map} +1 -1
  108. package/dist/{service-control-carrier-capability-DsHkOLJ6.js → service-control-carrier-capability-B8-5s0Z4.js} +3 -3
  109. package/dist/{service-control-carrier-capability-DsHkOLJ6.js.map → service-control-carrier-capability-B8-5s0Z4.js.map} +1 -1
  110. package/dist/setup-node-runtime-n0iHzmDA.js +19 -0
  111. package/dist/setup-node-runtime-n0iHzmDA.js.map +1 -0
  112. package/dist/{state-6y71kBCo.js → state-BlZXA4Rd.js} +3 -3
  113. package/dist/{state-6y71kBCo.js.map → state-BlZXA4Rd.js.map} +1 -1
  114. package/dist/{updates-api-DluYmth3.js → updates-api-BpuVusi5.js} +14 -14
  115. package/dist/{updates-api-DluYmth3.js.map → updates-api-BpuVusi5.js.map} +1 -1
  116. package/dist/{upgrade-BARBtyld.js → upgrade-CII-Xiab.js} +9 -9
  117. package/dist/{upgrade-BARBtyld.js.map → upgrade-CII-Xiab.js.map} +1 -1
  118. package/dist/upgrade-D3f82xoM.js +4 -0
  119. package/dist/windows/openmeld-windows-process.exe +0 -0
  120. package/dist/{windows-managed-install-q2TxKIIe.js → windows-managed-install-Db8X1tQ4.js} +2 -2
  121. package/dist/{windows-managed-install-q2TxKIIe.js.map → windows-managed-install-Db8X1tQ4.js.map} +1 -1
  122. package/dist/{windows-preview-channel-CqHp94Vp.js → windows-preview-channel-BJfMRixx.js} +3 -3
  123. package/dist/{windows-preview-channel-CqHp94Vp.js.map → windows-preview-channel-BJfMRixx.js.map} +1 -1
  124. package/dist/{windows-task-command-67Zb0gGt.js → windows-task-command-BGrlQDFJ.js} +2 -2
  125. package/dist/{windows-task-command-67Zb0gGt.js.map → windows-task-command-BGrlQDFJ.js.map} +1 -1
  126. package/dist/{windows-task-entry-ufpxSuX_.js → windows-task-entry-bzn-6mTB.js} +3 -3
  127. package/dist/{windows-task-entry-ufpxSuX_.js.map → windows-task-entry-bzn-6mTB.js.map} +1 -1
  128. package/dist/{windows-user-task-jz44qH1q.js → windows-user-task-GqNzbzc9.js} +1 -1
  129. package/dist/{windows-user-task-QsSEzkhv.js → windows-user-task-bkBjpShZ.js} +6 -6
  130. package/dist/{windows-user-task-QsSEzkhv.js.map → windows-user-task-bkBjpShZ.js.map} +1 -1
  131. package/package.json +8 -8
  132. package/skills/openmeld-cli/SKILL.md +6 -0
  133. package/skills/openmeld-cli/playbooks/agent-onboarding.md +8 -0
  134. package/skills/openmeld-cli/playbooks/computer.md +6 -0
  135. package/skills/openmeld-cli/playbooks/plugins.md +6 -0
  136. package/skills/openmeld-cli/playbooks/space-ops.md +20 -0
  137. package/skills/openmeld-cli/playbooks/space-reads.md +6 -0
  138. package/skills/openmeld-cli/references/commands.md +6 -0
  139. package/skills/openmeld-cli/references/runtime-resolution.md +6 -0
  140. package/dist/auth-session-CNPe3mUj.js +0 -4
  141. package/dist/command-BgBsh9xU.js.map +0 -1
  142. package/dist/daemon-service-update-coordinator-ef1RLL_R.js.map +0 -1
  143. package/dist/dist-CMBBVJVE.js.map +0 -1
  144. package/dist/dist-Dip3sgFz.js.map +0 -1
  145. package/dist/dist-qVdtMWpW.js +0 -4
  146. package/dist/prepare-provider-runtime-CkW7c9bF.js.map +0 -1
  147. package/dist/runtime-DoIazDNu.js.map +0 -1
  148. package/dist/runtime-agent-controller-reporting-submission-ZLj8H7TM.js.map +0 -1
  149. package/dist/service-8ReqDsOx.js.map +0 -1
  150. package/dist/upgrade-CshMPPlp.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"channel-fUczwp7l.js","names":[],"sources":["../src/local-service/execution-host/channel.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES,\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS,\n SERVICE_EXECUTION_HOST_PROTOCOL,\n type ServiceExecutionHostArguments,\n type ServiceExecutionHostInput,\n type ServiceExecutionHostMessage,\n type ServiceExecutionHostMethod,\n type ServiceExecutionHostOutput,\n serviceExecutionHostMessageSchema,\n serviceExecutionHostMethods,\n serviceExecutionHostRequestSchema,\n} from \"@openmeld/schemas\";\n\nexport type ExecutionHostChannel = {\n connected(): boolean;\n send(message: object, completed: (error: Error | null) => void): void;\n onMessage(listener: (message: unknown) => void): () => void;\n onDisconnect(listener: (error?: Error) => void): () => void;\n};\n\nexport class ExecutionHostError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"ExecutionHostError\";\n this.code = code;\n }\n}\n\nconst RESERVED_CONTROL_REQUESTS = 4;\nconst controlMethods = new Set<ServiceExecutionHostMethod>([\n \"health\",\n \"beginDrain\",\n \"detachConnection\",\n \"stop\",\n]);\n\nfunction assertFrameSize(message: unknown): number {\n const serialized = JSON.stringify(message);\n if (serialized === undefined) {\n throw new ExecutionHostError(\n \"host.invalid_frame\",\n \"Host IPC requires JSON.\"\n );\n }\n const size = Buffer.byteLength(serialized);\n if (size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES) {\n throw new ExecutionHostError(\n \"host.frame_too_large\",\n \"The local execution message exceeds the IPC limit.\"\n );\n }\n return size;\n}\n\nfunction createSender(channel: ExecutionHostChannel) {\n let queuedBytes = 0;\n return (message: object, completed: (error: Error | null) => void): void => {\n const size = assertFrameSize(message);\n if (!channel.connected()) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The Host IPC channel is closed.\"\n );\n }\n if (queuedBytes + size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES * 2) {\n throw new ExecutionHostError(\n \"host.backpressure\",\n \"Host IPC is full; no new message was queued.\"\n );\n }\n queuedBytes += size;\n let settled = false;\n const settle = (error: Error | null) => {\n if (settled) {\n return;\n }\n settled = true;\n queuedBytes -= size;\n completed(error);\n };\n try {\n channel.send(message, settle);\n } catch (error) {\n settle(error instanceof Error ? error : new Error(String(error)));\n }\n };\n}\n\ntype PendingRequest = {\n method: ServiceExecutionHostMethod;\n resolve(value: unknown): void;\n reject(error: Error): void;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nfunction resolveReply(\n request: PendingRequest,\n message: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>\n): void {\n if (!message.result.ok) {\n request.reject(\n new ExecutionHostError(\n message.result.error.code,\n message.result.error.message\n )\n );\n return;\n }\n const result = serviceExecutionHostMethods[request.method].output.safeParse(\n message.result.payload\n );\n if (!result.success) {\n const error = new ExecutionHostError(\n \"host.invalid_response\",\n `Invalid ${request.method} response from the execution host.`\n );\n request.reject(error);\n throw error;\n }\n request.resolve(result.data);\n}\n\nexport function createExecutionHostClient(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n onEvent?(\n event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>\n ): void;\n onFailure?(error: Error): void;\n}) {\n const pending = new Map<string, PendingRequest>();\n const send = createSender(input.channel);\n let failure: Error | null = null;\n\n const fail = (error: Error) => {\n if (failure) {\n return;\n }\n failure = error;\n for (const request of pending.values()) {\n if (request.timer) {\n clearTimeout(request.timer);\n }\n request.reject(error);\n }\n pending.clear();\n input.onFailure?.(error);\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (failure) {\n return;\n }\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostMessageSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response does not match this process incarnation.\"\n );\n }\n const message = parsed.data;\n if (message.type !== \"reply\") {\n input.onEvent?.(message);\n return;\n }\n const request = pending.get(message.requestId);\n // A timed-out observer is gone, not the accepted operation. Do not retry it\n // or turn its late result into the outcome of a newer request.\n if (!request) {\n return;\n }\n if (request.method !== message.method) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response method does not match its request.\"\n );\n }\n pending.delete(message.requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n resolveReply(request, message);\n } catch (error) {\n fail(error instanceof Error ? error : new Error(String(error)));\n }\n });\n const stopDisconnect = input.channel.onDisconnect((cause) => {\n fail(\n new ExecutionHostError(\n \"host.disconnected\",\n cause\n ? `The execution host disconnected: ${cause.message}. In-flight outcomes are unconfirmed.`\n : \"The execution host disconnected; in-flight outcomes are unconfirmed.\"\n )\n );\n });\n\n return {\n call<M extends ServiceExecutionHostMethod>(\n method: M,\n value: ServiceExecutionHostInput<M>,\n options: { timeoutMs?: number | null } = {}\n ): Promise<ServiceExecutionHostOutput<M>> {\n if (failure) {\n return Promise.reject(failure);\n }\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (pending.size >= limit) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Too many outstanding Host requests; no new request was sent.\"\n )\n );\n }\n const payload =\n serviceExecutionHostMethods[method].input.safeParse(value);\n if (!payload.success) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${method} request.`\n )\n );\n }\n const requestId = randomUUID();\n const timeoutMs =\n options.timeoutMs === undefined ? 30_000 : options.timeoutMs;\n if (\n timeoutMs !== null &&\n (!Number.isFinite(timeoutMs) || timeoutMs <= 0)\n ) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_timeout\",\n \"The observer deadline must be positive or absent.\"\n )\n );\n }\n return new Promise<ServiceExecutionHostOutput<M>>((resolve, reject) => {\n const request: PendingRequest = {\n method,\n resolve: (result) => resolve(result as ServiceExecutionHostOutput<M>),\n reject,\n timer: null,\n };\n if (timeoutMs !== null) {\n request.timer = setTimeout(() => {\n pending.delete(requestId);\n reject(\n new ExecutionHostError(\n \"host.observation_timeout\",\n `The ${method} response is unconfirmed. No operation was cancelled or retried.`\n )\n );\n }, timeoutMs);\n request.timer.unref?.();\n }\n pending.set(requestId, request);\n try {\n send(\n {\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n requestId,\n method,\n payload: payload.data,\n },\n (error) => {\n if (error) {\n fail(error);\n }\n }\n );\n } catch (error) {\n pending.delete(requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n reject(error);\n }\n });\n },\n pendingCount: () => pending.size,\n dispose(): void {\n stopMessages();\n stopDisconnect();\n fail(\n new ExecutionHostError(\n \"host.observer_closed\",\n \"The Host observer closed; accepted work was not cancelled.\"\n )\n );\n },\n };\n}\n\nexport type ExecutionHostHandlers = {\n [M in ServiceExecutionHostMethod]: (\n input: ServiceExecutionHostArguments<M>\n ) => Promise<ServiceExecutionHostOutput<M>> | ServiceExecutionHostOutput<M>;\n};\n\nexport function serveExecutionHost(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n handlers: ExecutionHostHandlers;\n onFailure(error: Error): void;\n onDisconnect(): void;\n}) {\n const activeIds = new Set<string>();\n const send = createSender(input.channel);\n let closed = false;\n\n const sendMessage = (message: ServiceExecutionHostMessage) => {\n if (closed) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The connector is no longer observing this Host.\"\n );\n }\n send(message, (error) => {\n if (error) {\n input.onFailure(error);\n }\n });\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (closed) {\n return;\n }\n let request: ReturnType<typeof serviceExecutionHostRequestSchema.parse>;\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostRequestSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_request\",\n \"Host request does not match this process incarnation.\"\n );\n }\n request = parsed.data;\n } catch (error) {\n input.onFailure(\n error instanceof Error ? error : new Error(String(error))\n );\n return;\n }\n\n const respond = (\n result: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>[\"result\"]\n ) => {\n if (!closed) {\n sendMessage({\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n type: \"reply\",\n requestId: request.requestId,\n method: request.method,\n result,\n });\n }\n };\n const reject = (error: unknown) => {\n try {\n respond({\n ok: false,\n error: {\n code:\n error instanceof ExecutionHostError\n ? error.code\n : \"host.operation_failed\",\n message:\n (error instanceof Error ? error.message : String(error)).slice(\n 0,\n 4096\n ) || \"Host operation failed.\",\n },\n });\n } catch (sendError) {\n input.onFailure(\n sendError instanceof Error ? sendError : new Error(String(sendError))\n );\n }\n };\n\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(request.method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (activeIds.has(request.requestId) || activeIds.size >= limit) {\n reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Host request is duplicate or capacity is exhausted; it was not admitted again.\"\n )\n );\n return;\n }\n const method = serviceExecutionHostMethods[request.method];\n const payload = method.input.safeParse(request.payload);\n if (!payload.success) {\n reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${request.method} payload.`\n )\n );\n return;\n }\n activeIds.add(request.requestId);\n // This cast connects the fixed schema table to its corresponding handler.\n // Both request and response are runtime-validated, including local callers.\n const handler = input.handlers[request.method] as (\n value: unknown\n ) => unknown;\n Promise.resolve()\n .then(() => handler(payload.data))\n .then((result) => {\n const parsed = method.output.safeParse(result);\n if (!parsed.success) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n `The ${request.method} owner returned an invalid response.`\n );\n }\n respond({ ok: true, payload: parsed.data });\n })\n .catch(reject)\n .finally(() => activeIds.delete(request.requestId));\n });\n const stopDisconnect = input.channel.onDisconnect(() => {\n if (closed) {\n return;\n }\n closed = true;\n input.onDisconnect();\n });\n return {\n emit(event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>): void {\n const parsed = serviceExecutionHostMessageSchema.safeParse(event);\n if (!parsed.success || event.hostInstanceId !== input.hostInstanceId) {\n throw new ExecutionHostError(\n \"host.invalid_event\",\n \"Invalid execution-host event.\"\n );\n }\n sendMessage(parsed.data);\n },\n dispose(): void {\n closed = true;\n stopMessages();\n stopDisconnect();\n },\n };\n}\n"],"mappings":";;;;;AAsBA,IAAa,qBAAb,cAAwC,MAAM;CAC5C;CAEA,YAAY,MAAc,SAAiB;EACzC,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,OAAO;CACd;AACF;AAEA,MAAM,4BAA4B;AAClC,MAAM,iCAAiB,IAAI,IAAgC;CACzD;CACA;CACA;CACA;AACF,CAAC;AAED,SAAS,gBAAgB,SAA0B;CACjD,MAAM,aAAa,KAAK,UAAU,OAAO;CACzC,IAAI,eAAe,KAAA,GACjB,MAAM,IAAI,mBACR,sBACA,yBACF;CAEF,MAAM,OAAO,OAAO,WAAW,UAAU;CACzC,IAAI,OAAA,SACF,MAAM,IAAI,mBACR,wBACA,oDACF;CAEF,OAAO;AACT;AAEA,SAAS,aAAa,SAA+B;CACnD,IAAI,cAAc;CAClB,QAAQ,SAAiB,cAAmD;EAC1E,MAAM,OAAO,gBAAgB,OAAO;EACpC,IAAI,CAAC,QAAQ,UAAU,GACrB,MAAM,IAAI,mBACR,qBACA,iCACF;EAEF,IAAI,cAAc,OAAA,UAAgD,GAChE,MAAM,IAAI,mBACR,qBACA,8CACF;EAEF,eAAe;EACf,IAAI,UAAU;EACd,MAAM,UAAU,UAAwB;GACtC,IAAI,SACF;GAEF,UAAU;GACV,eAAe;GACf,UAAU,KAAK;EACjB;EACA,IAAI;GACF,QAAQ,KAAK,SAAS,MAAM;EAC9B,SAAS,OAAO;GACd,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;EAClE;CACF;AACF;AASA,SAAS,aACP,SACA,SACM;CACN,IAAI,CAAC,QAAQ,OAAO,IAAI;EACtB,QAAQ,OACN,IAAI,mBACF,QAAQ,OAAO,MAAM,MACrB,QAAQ,OAAO,MAAM,OACvB,CACF;EACA;CACF;CACA,MAAM,SAAS,4BAA4B,QAAQ,OAAO,CAAC,OAAO,UAChE,QAAQ,OAAO,OACjB;CACA,IAAI,CAAC,OAAO,SAAS;EACnB,MAAM,QAAQ,IAAI,mBAChB,yBACA,WAAW,QAAQ,OAAO,mCAC5B;EACA,QAAQ,OAAO,KAAK;EACpB,MAAM;CACR;CACA,QAAQ,QAAQ,OAAO,IAAI;AAC7B;AAEA,SAAgB,0BAA0B,OAOvC;CACD,MAAM,0BAAU,IAAI,IAA4B;CAChD,MAAM,OAAO,aAAa,MAAM,OAAO;CACvC,IAAI,UAAwB;CAE5B,MAAM,QAAQ,UAAiB;EAC7B,IAAI,SACF;EAEF,UAAU;EACV,KAAK,MAAM,WAAW,QAAQ,OAAO,GAAG;GACtC,IAAI,QAAQ,OACV,aAAa,QAAQ,KAAK;GAE5B,QAAQ,OAAO,KAAK;EACtB;EACA,QAAQ,MAAM;EACd,MAAM,YAAY,KAAK;CACzB;CAEA,MAAM,eAAe,MAAM,QAAQ,WAAW,QAAQ;EACpD,IAAI,SACF;EAEF,IAAI;GACF,gBAAgB,GAAG;GACnB,MAAM,SAAS,kCAAkC,UAAU,GAAG;GAC9D,IACE,CAAC,OAAO,WACR,OAAO,KAAK,mBAAmB,MAAM,gBAErC,MAAM,IAAI,mBACR,yBACA,wDACF;GAEF,MAAM,UAAU,OAAO;GACvB,IAAI,QAAQ,SAAS,SAAS;IAC5B,MAAM,UAAU,OAAO;IACvB;GACF;GACA,MAAM,UAAU,QAAQ,IAAI,QAAQ,SAAS;GAG7C,IAAI,CAAC,SACH;GAEF,IAAI,QAAQ,WAAW,QAAQ,QAC7B,MAAM,IAAI,mBACR,yBACA,kDACF;GAEF,QAAQ,OAAO,QAAQ,SAAS;GAChC,IAAI,QAAQ,OACV,aAAa,QAAQ,KAAK;GAE5B,aAAa,SAAS,OAAO;EAC/B,SAAS,OAAO;GACd,KAAK,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAAC;EAChE;CACF,CAAC;CACD,MAAM,iBAAiB,MAAM,QAAQ,cAAc,UAAU;EAC3D,KACE,IAAI,mBACF,qBACA,QACI,oCAAoC,MAAM,QAAQ,yCAClD,sEACN,CACF;CACF,CAAC;CAED,OAAO;EACL,KACE,QACA,OACA,UAAyC,CAAC,GACF;GACxC,IAAI,SACF,OAAO,QAAQ,OAAO,OAAO;GAE/B,MAAM,QAAA,MAEH,eAAe,IAAI,MAAM,IAAI,IAAI;GACpC,IAAI,QAAQ,QAAQ,OAClB,OAAO,QAAQ,OACb,IAAI,mBACF,aACA,8DACF,CACF;GAEF,MAAM,UACJ,4BAA4B,OAAO,CAAC,MAAM,UAAU,KAAK;GAC3D,IAAI,CAAC,QAAQ,SACX,OAAO,QAAQ,OACb,IAAI,mBACF,wBACA,WAAW,OAAO,UACpB,CACF;GAEF,MAAM,YAAY,WAAW;GAC7B,MAAM,YACJ,QAAQ,cAAc,KAAA,IAAY,MAAS,QAAQ;GACrD,IACE,cAAc,SACb,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,IAE7C,OAAO,QAAQ,OACb,IAAI,mBACF,wBACA,mDACF,CACF;GAEF,OAAO,IAAI,SAAwC,SAAS,WAAW;IACrE,MAAM,UAA0B;KAC9B;KACA,UAAU,WAAW,QAAQ,MAAuC;KACpE;KACA,OAAO;IACT;IACA,IAAI,cAAc,MAAM;KACtB,QAAQ,QAAQ,iBAAiB;MAC/B,QAAQ,OAAO,SAAS;MACxB,OACE,IAAI,mBACF,4BACA,OAAO,OAAO,iEAChB,CACF;KACF,GAAG,SAAS;KACZ,QAAQ,MAAM,QAAQ;IACxB;IACA,QAAQ,IAAI,WAAW,OAAO;IAC9B,IAAI;KACF,KACE;MACE,UAAU;MACV,gBAAgB,MAAM;MACtB;MACA;MACA,SAAS,QAAQ;KACnB,IACC,UAAU;MACT,IAAI,OACF,KAAK,KAAK;KAEd,CACF;IACF,SAAS,OAAO;KACd,QAAQ,OAAO,SAAS;KACxB,IAAI,QAAQ,OACV,aAAa,QAAQ,KAAK;KAE5B,OAAO,KAAK;IACd;GACF,CAAC;EACH;EACA,oBAAoB,QAAQ;EAC5B,UAAgB;GACd,aAAa;GACb,eAAe;GACf,KACE,IAAI,mBACF,wBACA,4DACF,CACF;EACF;CACF;AACF;AAQA,SAAgB,mBAAmB,OAMhC;CACD,MAAM,4BAAY,IAAI,IAAY;CAClC,MAAM,OAAO,aAAa,MAAM,OAAO;CACvC,IAAI,SAAS;CAEb,MAAM,eAAe,YAAyC;EAC5D,IAAI,QACF,MAAM,IAAI,mBACR,qBACA,iDACF;EAEF,KAAK,UAAU,UAAU;GACvB,IAAI,OACF,MAAM,UAAU,KAAK;EAEzB,CAAC;CACH;CAEA,MAAM,eAAe,MAAM,QAAQ,WAAW,QAAQ;EACpD,IAAI,QACF;EAEF,IAAI;EACJ,IAAI;GACF,gBAAgB,GAAG;GACnB,MAAM,SAAS,kCAAkC,UAAU,GAAG;GAC9D,IACE,CAAC,OAAO,WACR,OAAO,KAAK,mBAAmB,MAAM,gBAErC,MAAM,IAAI,mBACR,wBACA,uDACF;GAEF,UAAU,OAAO;EACnB,SAAS,OAAO;GACd,MAAM,UACJ,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC,CAC1D;GACA;EACF;EAEA,MAAM,WACJ,WACG;GACH,IAAI,CAAC,QACH,YAAY;IACV,UAAU;IACV,gBAAgB,MAAM;IACtB,MAAM;IACN,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB;GACF,CAAC;EAEL;EACA,MAAM,UAAU,UAAmB;GACjC,IAAI;IACF,QAAQ;KACN,IAAI;KACJ,OAAO;MACL,MACE,iBAAiB,qBACb,MAAM,OACN;MACN,UACG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAA,CAAG,MACvD,GACA,IACF,KAAK;KACT;IACF,CAAC;GACH,SAAS,WAAW;IAClB,MAAM,UACJ,qBAAqB,QAAQ,YAAY,IAAI,MAAM,OAAO,SAAS,CAAC,CACtE;GACF;EACF;EAEA,MAAM,QAAA,MAEH,eAAe,IAAI,QAAQ,MAAM,IAAI,IAAI;EAC5C,IAAI,UAAU,IAAI,QAAQ,SAAS,KAAK,UAAU,QAAQ,OAAO;GAC/D,OACE,IAAI,mBACF,aACA,gFACF,CACF;GACA;EACF;EACA,MAAM,SAAS,4BAA4B,QAAQ;EACnD,MAAM,UAAU,OAAO,MAAM,UAAU,QAAQ,OAAO;EACtD,IAAI,CAAC,QAAQ,SAAS;GACpB,OACE,IAAI,mBACF,wBACA,WAAW,QAAQ,OAAO,UAC5B,CACF;GACA;EACF;EACA,UAAU,IAAI,QAAQ,SAAS;EAG/B,MAAM,UAAU,MAAM,SAAS,QAAQ;EAGvC,QAAQ,QAAQ,CAAC,CACd,WAAW,QAAQ,QAAQ,IAAI,CAAC,CAAC,CACjC,MAAM,WAAW;GAChB,MAAM,SAAS,OAAO,OAAO,UAAU,MAAM;GAC7C,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,mBACR,yBACA,OAAO,QAAQ,OAAO,qCACxB;GAEF,QAAQ;IAAE,IAAI;IAAM,SAAS,OAAO;GAAK,CAAC;EAC5C,CAAC,CAAC,CACD,MAAM,MAAM,CAAC,CACb,cAAc,UAAU,OAAO,QAAQ,SAAS,CAAC;CACtD,CAAC;CACD,MAAM,iBAAiB,MAAM,QAAQ,mBAAmB;EACtD,IAAI,QACF;EAEF,SAAS;EACT,MAAM,aAAa;CACrB,CAAC;CACD,OAAO;EACL,KAAK,OAAsE;GACzE,MAAM,SAAS,kCAAkC,UAAU,KAAK;GAChE,IAAI,CAAC,OAAO,WAAW,MAAM,mBAAmB,MAAM,gBACpD,MAAM,IAAI,mBACR,sBACA,+BACF;GAEF,YAAY,OAAO,IAAI;EACzB;EACA,UAAgB;GACd,SAAS;GACT,aAAa;GACb,eAAe;EACjB;CACF;AACF"}
1
+ {"version":3,"file":"channel-7iF6DSp4.js","names":[],"sources":["../src/local-service/execution-host/channel.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES,\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS,\n SERVICE_EXECUTION_HOST_PROTOCOL,\n type ServiceExecutionHostArguments,\n type ServiceExecutionHostInput,\n type ServiceExecutionHostMessage,\n type ServiceExecutionHostMethod,\n type ServiceExecutionHostOutput,\n serviceExecutionHostMessageSchema,\n serviceExecutionHostMethods,\n serviceExecutionHostRequestSchema,\n} from \"@openmeld/schemas\";\n\nexport type ExecutionHostChannel = {\n connected(): boolean;\n send(message: object, completed: (error: Error | null) => void): void;\n onMessage(listener: (message: unknown) => void): () => void;\n onDisconnect(listener: (error?: Error) => void): () => void;\n};\n\nexport class ExecutionHostError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"ExecutionHostError\";\n this.code = code;\n }\n}\n\nconst RESERVED_CONTROL_REQUESTS = 4;\nconst controlMethods = new Set<ServiceExecutionHostMethod>([\n \"health\",\n \"beginDrain\",\n \"detachConnection\",\n \"stop\",\n]);\n\nfunction assertFrameSize(message: unknown): number {\n const serialized = JSON.stringify(message);\n if (serialized === undefined) {\n throw new ExecutionHostError(\n \"host.invalid_frame\",\n \"Host IPC requires JSON.\"\n );\n }\n const size = Buffer.byteLength(serialized);\n if (size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES) {\n throw new ExecutionHostError(\n \"host.frame_too_large\",\n \"The local execution message exceeds the IPC limit.\"\n );\n }\n return size;\n}\n\nfunction createSender(channel: ExecutionHostChannel) {\n let queuedBytes = 0;\n return (message: object, completed: (error: Error | null) => void): void => {\n const size = assertFrameSize(message);\n if (!channel.connected()) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The Host IPC channel is closed.\"\n );\n }\n if (queuedBytes + size > SERVICE_EXECUTION_HOST_MAX_FRAME_BYTES * 2) {\n throw new ExecutionHostError(\n \"host.backpressure\",\n \"Host IPC is full; no new message was queued.\"\n );\n }\n queuedBytes += size;\n let settled = false;\n const settle = (error: Error | null) => {\n if (settled) {\n return;\n }\n settled = true;\n queuedBytes -= size;\n completed(error);\n };\n try {\n channel.send(message, settle);\n } catch (error) {\n settle(error instanceof Error ? error : new Error(String(error)));\n }\n };\n}\n\ntype PendingRequest = {\n method: ServiceExecutionHostMethod;\n resolve(value: unknown): void;\n reject(error: Error): void;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nfunction resolveReply(\n request: PendingRequest,\n message: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>\n): void {\n if (!message.result.ok) {\n request.reject(\n new ExecutionHostError(\n message.result.error.code,\n message.result.error.message\n )\n );\n return;\n }\n const result = serviceExecutionHostMethods[request.method].output.safeParse(\n message.result.payload\n );\n if (!result.success) {\n const error = new ExecutionHostError(\n \"host.invalid_response\",\n `Invalid ${request.method} response from the execution host.`\n );\n request.reject(error);\n throw error;\n }\n request.resolve(result.data);\n}\n\nexport function createExecutionHostClient(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n onEvent?(\n event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>\n ): void;\n onFailure?(error: Error): void;\n}) {\n const pending = new Map<string, PendingRequest>();\n const send = createSender(input.channel);\n let failure: Error | null = null;\n\n const fail = (error: Error) => {\n if (failure) {\n return;\n }\n failure = error;\n for (const request of pending.values()) {\n if (request.timer) {\n clearTimeout(request.timer);\n }\n request.reject(error);\n }\n pending.clear();\n input.onFailure?.(error);\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (failure) {\n return;\n }\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostMessageSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response does not match this process incarnation.\"\n );\n }\n const message = parsed.data;\n if (message.type !== \"reply\") {\n input.onEvent?.(message);\n return;\n }\n const request = pending.get(message.requestId);\n // A timed-out observer is gone, not the accepted operation. Do not retry it\n // or turn its late result into the outcome of a newer request.\n if (!request) {\n return;\n }\n if (request.method !== message.method) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n \"Host response method does not match its request.\"\n );\n }\n pending.delete(message.requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n resolveReply(request, message);\n } catch (error) {\n fail(error instanceof Error ? error : new Error(String(error)));\n }\n });\n const stopDisconnect = input.channel.onDisconnect((cause) => {\n fail(\n new ExecutionHostError(\n \"host.disconnected\",\n cause\n ? `The execution host disconnected: ${cause.message}. In-flight outcomes are unconfirmed.`\n : \"The execution host disconnected; in-flight outcomes are unconfirmed.\"\n )\n );\n });\n\n return {\n call<M extends ServiceExecutionHostMethod>(\n method: M,\n value: ServiceExecutionHostInput<M>,\n options: { timeoutMs?: number | null } = {}\n ): Promise<ServiceExecutionHostOutput<M>> {\n if (failure) {\n return Promise.reject(failure);\n }\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (pending.size >= limit) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Too many outstanding Host requests; no new request was sent.\"\n )\n );\n }\n const payload =\n serviceExecutionHostMethods[method].input.safeParse(value);\n if (!payload.success) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${method} request.`\n )\n );\n }\n const requestId = randomUUID();\n const timeoutMs =\n options.timeoutMs === undefined ? 30_000 : options.timeoutMs;\n if (\n timeoutMs !== null &&\n (!Number.isFinite(timeoutMs) || timeoutMs <= 0)\n ) {\n return Promise.reject(\n new ExecutionHostError(\n \"host.invalid_timeout\",\n \"The observer deadline must be positive or absent.\"\n )\n );\n }\n return new Promise<ServiceExecutionHostOutput<M>>((resolve, reject) => {\n const request: PendingRequest = {\n method,\n resolve: (result) => resolve(result as ServiceExecutionHostOutput<M>),\n reject,\n timer: null,\n };\n if (timeoutMs !== null) {\n request.timer = setTimeout(() => {\n pending.delete(requestId);\n reject(\n new ExecutionHostError(\n \"host.observation_timeout\",\n `The ${method} response is unconfirmed. No operation was cancelled or retried.`\n )\n );\n }, timeoutMs);\n request.timer.unref?.();\n }\n pending.set(requestId, request);\n try {\n send(\n {\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n requestId,\n method,\n payload: payload.data,\n },\n (error) => {\n if (error) {\n fail(error);\n }\n }\n );\n } catch (error) {\n pending.delete(requestId);\n if (request.timer) {\n clearTimeout(request.timer);\n }\n reject(error);\n }\n });\n },\n pendingCount: () => pending.size,\n dispose(): void {\n stopMessages();\n stopDisconnect();\n fail(\n new ExecutionHostError(\n \"host.observer_closed\",\n \"The Host observer closed; accepted work was not cancelled.\"\n )\n );\n },\n };\n}\n\nexport type ExecutionHostHandlers = {\n [M in ServiceExecutionHostMethod]: (\n input: ServiceExecutionHostArguments<M>\n ) => Promise<ServiceExecutionHostOutput<M>> | ServiceExecutionHostOutput<M>;\n};\n\nexport function serveExecutionHost(input: {\n channel: ExecutionHostChannel;\n hostInstanceId: string;\n handlers: ExecutionHostHandlers;\n onFailure(error: Error): void;\n onDisconnect(): void;\n}) {\n const activeIds = new Set<string>();\n const send = createSender(input.channel);\n let closed = false;\n\n const sendMessage = (message: ServiceExecutionHostMessage) => {\n if (closed) {\n throw new ExecutionHostError(\n \"host.disconnected\",\n \"The connector is no longer observing this Host.\"\n );\n }\n send(message, (error) => {\n if (error) {\n input.onFailure(error);\n }\n });\n };\n\n const stopMessages = input.channel.onMessage((raw) => {\n if (closed) {\n return;\n }\n let request: ReturnType<typeof serviceExecutionHostRequestSchema.parse>;\n try {\n assertFrameSize(raw);\n const parsed = serviceExecutionHostRequestSchema.safeParse(raw);\n if (\n !parsed.success ||\n parsed.data.hostInstanceId !== input.hostInstanceId\n ) {\n throw new ExecutionHostError(\n \"host.invalid_request\",\n \"Host request does not match this process incarnation.\"\n );\n }\n request = parsed.data;\n } catch (error) {\n input.onFailure(\n error instanceof Error ? error : new Error(String(error))\n );\n return;\n }\n\n const respond = (\n result: Extract<ServiceExecutionHostMessage, { type: \"reply\" }>[\"result\"]\n ) => {\n if (!closed) {\n sendMessage({\n protocol: SERVICE_EXECUTION_HOST_PROTOCOL,\n hostInstanceId: input.hostInstanceId,\n type: \"reply\",\n requestId: request.requestId,\n method: request.method,\n result,\n });\n }\n };\n const reject = (error: unknown) => {\n try {\n respond({\n ok: false,\n error: {\n code:\n error instanceof ExecutionHostError\n ? error.code\n : \"host.operation_failed\",\n message:\n (error instanceof Error ? error.message : String(error)).slice(\n 0,\n 4096\n ) || \"Host operation failed.\",\n },\n });\n } catch (sendError) {\n input.onFailure(\n sendError instanceof Error ? sendError : new Error(String(sendError))\n );\n }\n };\n\n const limit =\n SERVICE_EXECUTION_HOST_MAX_PENDING_REQUESTS -\n (controlMethods.has(request.method) ? 0 : RESERVED_CONTROL_REQUESTS);\n if (activeIds.has(request.requestId) || activeIds.size >= limit) {\n reject(\n new ExecutionHostError(\n \"host.busy\",\n \"Host request is duplicate or capacity is exhausted; it was not admitted again.\"\n )\n );\n return;\n }\n const method = serviceExecutionHostMethods[request.method];\n const payload = method.input.safeParse(request.payload);\n if (!payload.success) {\n reject(\n new ExecutionHostError(\n \"host.invalid_request\",\n `Invalid ${request.method} payload.`\n )\n );\n return;\n }\n activeIds.add(request.requestId);\n // This cast connects the fixed schema table to its corresponding handler.\n // Both request and response are runtime-validated, including local callers.\n const handler = input.handlers[request.method] as (\n value: unknown\n ) => unknown;\n Promise.resolve()\n .then(() => handler(payload.data))\n .then((result) => {\n const parsed = method.output.safeParse(result);\n if (!parsed.success) {\n throw new ExecutionHostError(\n \"host.invalid_response\",\n `The ${request.method} owner returned an invalid response.`\n );\n }\n respond({ ok: true, payload: parsed.data });\n })\n .catch(reject)\n .finally(() => activeIds.delete(request.requestId));\n });\n const stopDisconnect = input.channel.onDisconnect(() => {\n if (closed) {\n return;\n }\n closed = true;\n input.onDisconnect();\n });\n return {\n emit(event: Exclude<ServiceExecutionHostMessage, { type: \"reply\" }>): void {\n const parsed = serviceExecutionHostMessageSchema.safeParse(event);\n if (!parsed.success || event.hostInstanceId !== input.hostInstanceId) {\n throw new ExecutionHostError(\n \"host.invalid_event\",\n \"Invalid execution-host event.\"\n );\n }\n sendMessage(parsed.data);\n },\n dispose(): void {\n closed = true;\n stopMessages();\n stopDisconnect();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { a as resolveBaseUrl } from "./base-url-B9NwMjEF.js";
4
- import { uC as cloudComputerOperationSchema } from "./dist-CMBBVJVE.js";
5
- import { Gt as createCloudComputerApi } from "./dist-Dip3sgFz.js";
6
- import { n as resolveRuntimeContext } from "./context-DqkwGCKj.js";
3
+ import { a as resolveBaseUrl } from "./base-url-CLMqlF1w.js";
4
+ import { uC as cloudComputerOperationSchema } from "./dist-YSbIHBnl.js";
5
+ import { Gt as createCloudComputerApi } from "./dist-DY8oLAop.js";
6
+ import { n as resolveRuntimeContext } from "./context-DFf16i-C.js";
7
7
  import { t as createPresenter } from "./presenter-DiP7Yh2y.js";
8
- import { t as createCliApiClientFoundation } from "./api-client-foundation-DBl_OaMj.js";
8
+ import { t as createCliApiClientFoundation } from "./api-client-foundation-6MeNwklv.js";
9
9
  //#region src/commands/cloud-computer.ts
10
10
  async function runCloudComputer(input) {
11
11
  const presenter = createPresenter(await resolveRuntimeContext({ view: input.view }));
@@ -19,4 +19,4 @@ async function runCloudComputer(input) {
19
19
  //#endregion
20
20
  export { runCloudComputer };
21
21
 
22
- //# sourceMappingURL=cloud-computer-CCxIrSZU.js.map
22
+ //# sourceMappingURL=cloud-computer-BddlwRAk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-computer-CCxIrSZU.js","names":[],"sources":["../src/commands/cloud-computer.ts"],"sourcesContent":["import { createCloudComputerApi } from \"@openmeld/api-client\";\nimport { cloudComputerOperationSchema } from \"@openmeld/schemas\";\nimport { resolveBaseUrl } from \"../config/base-url\";\nimport { resolveRuntimeContext } from \"../runtime/context\";\nimport { createPresenter } from \"../runtime/presenter/index\";\nimport { createCliApiClientFoundation } from \"../space/api-client-foundation\";\n\nexport async function runCloudComputer(input: {\n operation?: string;\n view?: string;\n}) {\n const runtime = await resolveRuntimeContext({ view: input.view });\n const presenter = createPresenter(runtime);\n const api = createCloudComputerApi(\n createCliApiClientFoundation(await resolveBaseUrl())\n );\n const response = input.operation\n ? await api.execute(\n cloudComputerOperationSchema.parse(JSON.parse(input.operation))\n )\n : await api.read();\n presenter.data({ code: \"computer.cloud.completed\", payload: response });\n}\n"],"mappings":";;;;;;;;;AAOA,eAAsB,iBAAiB,OAGpC;CAED,MAAM,YAAY,gBAAgB,MADZ,sBAAsB,EAAE,MAAM,MAAM,KAAK,CAAC,CACvB;CACzC,MAAM,MAAM,uBACV,6BAA6B,MAAM,eAAe,CAAC,CACrD;CACA,MAAM,WAAW,MAAM,YACnB,MAAM,IAAI,QACR,6BAA6B,MAAM,KAAK,MAAM,MAAM,SAAS,CAAC,CAChE,IACA,MAAM,IAAI,KAAK;CACnB,UAAU,KAAK;EAAE,MAAM;EAA4B,SAAS;CAAS,CAAC;AACxE"}
1
+ {"version":3,"file":"cloud-computer-BddlwRAk.js","names":[],"sources":["../src/commands/cloud-computer.ts"],"sourcesContent":["import { createCloudComputerApi } from \"@openmeld/api-client\";\nimport { cloudComputerOperationSchema } from \"@openmeld/schemas\";\nimport { resolveBaseUrl } from \"../config/base-url\";\nimport { resolveRuntimeContext } from \"../runtime/context\";\nimport { createPresenter } from \"../runtime/presenter/index\";\nimport { createCliApiClientFoundation } from \"../space/api-client-foundation\";\n\nexport async function runCloudComputer(input: {\n operation?: string;\n view?: string;\n}) {\n const runtime = await resolveRuntimeContext({ view: input.view });\n const presenter = createPresenter(runtime);\n const api = createCloudComputerApi(\n createCliApiClientFoundation(await resolveBaseUrl())\n );\n const response = input.operation\n ? await api.execute(\n cloudComputerOperationSchema.parse(JSON.parse(input.operation))\n )\n : await api.read();\n presenter.data({ code: \"computer.cloud.completed\", payload: response });\n}\n"],"mappings":";;;;;;;;;AAOA,eAAsB,iBAAiB,OAGpC;CAED,MAAM,YAAY,gBAAgB,MADZ,sBAAsB,EAAE,MAAM,MAAM,KAAK,CAAC,CACvB;CACzC,MAAM,MAAM,uBACV,6BAA6B,MAAM,eAAe,CAAC,CACrD;CACA,MAAM,WAAW,MAAM,YACnB,MAAM,IAAI,QACR,6BAA6B,MAAM,KAAK,MAAM,MAAM,SAAS,CAAC,CAChE,IACA,MAAM,IAAI,KAAK;CACnB,UAAU,KAAK;EAAE,MAAM;EAA4B,SAAS;CAAS,CAAC;AACxE"}
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { Br as resolveSelectableCandidates, Dr as isAgentExecutionReadyOrConnecting, Dt as resolveRegistryOriginLaunchCommand, Et as listBuiltinAgentsRegistryEntries, I as listAgentTargetStates, O as syncDeviceRuntimeStateProjection, S as syncProfileWorkspaceState, Sr as createAuthorityOpenMeldServiceRuntimeId, V as resolveAgentTargetState, Vr as supportsExecutionContextSelection, W as updateAgentRegistrations, Z as resolveLocalRegistryAgentIdFromAgentControllerRef, gr as buildAgentControllerRef, j as resolveAgentProfilePrimaryAgentControllerReport, kr as parseAgentControllerRef, kt as resolveRegistryRuntimeAdapterContractByAgentControllerRef } from "./prepare-provider-runtime-CkW7c9bF.js";
4
- import { B as toSpacePasswordUrl, D as isLoopbackHostname, L as toSpaceLeaveUrl, M as toSpaceCreateUrl, N as toSpaceCursorUrl, O as normalizeBaseUrl, P as toSpaceDeleteUrl, R as toSpaceMembersUrl, V as toSpaceRemoveMembersUrl, W as toSpaceWsUrl, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, z as toSpaceMetaUrl } from "./base-url-B9NwMjEF.js";
3
+ import { At as resolveRegistryRuntimeAdapterContractByAgentControllerRef, Dt as listBuiltinAgentsRegistryEntries, Fr as parseAgentControllerRef, G as updateAgentRegistrations, H as resolveAgentTargetState, I as listAgentTargetStates, Kr as resolveSelectableCandidates, Nr as isAgentExecutionReadyOrConnecting, O as syncDeviceRuntimeStateProjection, Or as createAuthorityOpenMeldServiceRuntimeId, Ot as resolveRegistryOriginLaunchCommand, Q as resolveLocalRegistryAgentIdFromAgentControllerRef, S as syncProfileWorkspaceState, Sr as buildAgentControllerRef, j as resolveAgentProfilePrimaryAgentControllerReport, qr as supportsExecutionContextSelection } from "./prepare-provider-runtime-CyIGaDTC.js";
4
+ import { B as toSpacePasswordUrl, D as isLoopbackHostname, L as toSpaceLeaveUrl, M as toSpaceCreateUrl, N as toSpaceCursorUrl, O as normalizeBaseUrl, P as toSpaceDeleteUrl, R as toSpaceMembersUrl, V as toSpaceRemoveMembersUrl, W as toSpaceWsUrl, a as resolveBaseUrl, d as createDefaultRuntimeAgentControllerSettings, z as toSpaceMetaUrl } from "./base-url-CLMqlF1w.js";
5
5
  import { P as resolveOpenMeldEnvPreset } from "./paths-De9xdA2h.js";
6
- import { $C as CONVERSATION_CONTINUITY_WARNING_PURPOSE, AI as normalizeBuiltinAgentControllerId, CI as resolveBuiltinAgentControllerBrand, DO as clientMessageIdSchema, MI as parseAgentControllerRef$1, OO as parseOptionalClientMessageId, RR as normalizeOptionalWorkingDirectory, _p as removeSpaceMembersResponseSchema, aw as SPACE_MENTION_REJECT_NOTICE_PURPOSE, eF as toLegacySpaceImageGeometryWireValue, fn as normalizeSpaceCursorPatch, gk as resolveSingleSpaceMentionLabels, hp as postSpaceMembersResponseSchema, iw as SPACE_MEMBER_REMOVE_NOTICE_PURPOSE, kI as canonicalizeBuiltinAgentControllerRef, pk as normalizeSpacePasswordText, pp as leaveSpaceResponseSchema, q_ as resolveInitialSpaceAccessMode, ro as spaceSendRequestReceiptSchema, rw as SPACE_MEMBER_JOIN_NOTICE_PURPOSE, tF as toCompatibleSpaceAddressingRequestWireValue } from "./dist-CMBBVJVE.js";
7
- import { d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock, u as resolveOpenMeldOrphanedLockIssue } from "./lock-CqozgAXC.js";
6
+ import { $C as CONVERSATION_CONTINUITY_WARNING_PURPOSE, AO as clientMessageIdSchema, EI as resolveBuiltinAgentControllerBrand, FI as parseAgentControllerRef$1, MI as canonicalizeBuiltinAgentControllerRef, NI as normalizeBuiltinAgentControllerId, VR as normalizeOptionalWorkingDirectory, _p as removeSpaceMembersResponseSchema, aw as SPACE_MENTION_REJECT_NOTICE_PURPOSE, fn as normalizeSpaceCursorPatch, gk as normalizeSpacePasswordText, hp as postSpaceMembersResponseSchema, iF as toCompatibleSpaceAddressingRequestWireValue, iw as SPACE_MEMBER_REMOVE_NOTICE_PURPOSE, jO as parseOptionalClientMessageId, pp as leaveSpaceResponseSchema, q_ as resolveInitialSpaceAccessMode, rF as toLegacySpaceImageGeometryWireValue, ro as spaceSendRequestReceiptSchema, rw as SPACE_MEMBER_JOIN_NOTICE_PURPOSE, tD as buildTargetWakeLifecycleId, yk as resolveSingleSpaceMentionLabels } from "./dist-YSbIHBnl.js";
7
+ import { d as runWithHeldLock, i as isOpenMeldLockError, t as acquireLock, u as resolveOpenMeldOrphanedLockIssue } from "./lock-Cz8h_yJh.js";
8
8
  import { t as sleep } from "./dist-BLuEEVHh.js";
9
- import { $t as createFetchTransport, Kn as resolveAccountSpaceIndexGatewayHost, Vt as createAgentProfileBindingApi, Yn as toStructuredApiClientFailure, bt as buildProfileSpaceHistoryStatusPath, cr as parseIncoming$1, ir as MAX_TEXT_LENGTH, lr as parseServerErrorFrame$1, n as OpenMeldApiClientInvalidResponseError, on as createOpenMeldApiClient, pn as createProfileSpaceHistoryApi, qn as resolveProfileSpaceHistoryGatewayHost, sn as createOrganizationApi, sr as parseEnvelope$1, t as OpenMeldApiClientHttpError, ur as resolveCustomMentionAliasOverride, xt as buildProfileSpaceHistoryUpsertPath, zt as createAccountSpaceIndexApi } from "./dist-Dip3sgFz.js";
10
- import { A as resolveAuthenticationGuidanceFromError, E as buildHumanAuthenticationCard, F as resolveCurrentOpenMeldAccountContext, a as requireOpenMeldProfile, c as createOpenMeldHumanProfile, d as listOpenMeldProfiles, h as assertAdditionalHumanProfileCreationEnabled, k as resolveAuthenticationGuidance, n as resolveRuntimeContext, o as resolveOpenMeldProfileOrNull, s as createOpenMeldAgentProfile, u as getOpenMeldProfileCapabilities } from "./context-DqkwGCKj.js";
9
+ import { $t as createFetchTransport, Kn as resolveAccountSpaceIndexGatewayHost, Vt as createAgentProfileBindingApi, Yn as toStructuredApiClientFailure, bt as buildProfileSpaceHistoryStatusPath, cr as parseIncoming$1, ir as MAX_TEXT_LENGTH, lr as parseServerErrorFrame$1, n as OpenMeldApiClientInvalidResponseError, on as createOpenMeldApiClient, pn as createProfileSpaceHistoryApi, qn as resolveProfileSpaceHistoryGatewayHost, sn as createOrganizationApi, sr as parseEnvelope$1, t as OpenMeldApiClientHttpError, ur as resolveCustomMentionAliasOverride, xt as buildProfileSpaceHistoryUpsertPath, zt as createAccountSpaceIndexApi } from "./dist-DY8oLAop.js";
10
+ import { A as resolveAuthenticationGuidanceFromError, E as buildHumanAuthenticationCard, F as resolveCurrentOpenMeldAccountContext, a as requireOpenMeldProfile, c as createOpenMeldHumanProfile, d as listOpenMeldProfiles, h as assertAdditionalHumanProfileCreationEnabled, k as resolveAuthenticationGuidance, n as resolveRuntimeContext, o as resolveOpenMeldProfileOrNull, s as createOpenMeldAgentProfile, u as getOpenMeldProfileCapabilities } from "./context-DFf16i-C.js";
11
11
  import { a as formatOpenMeldCliTextBlock, l as resolveUserFacingCliEntryCommand, n as formatOpenMeldCliCommand, o as formatProfileAwareOpenMeldCliCommand, r as formatOpenMeldCliCommands, t as formatInlineOpenMeldCliCommands } from "./cli-entry-command-CR_9QU1i.js";
12
- import { d as getAuthSessionState } from "./auth-session-RQOVI0Gb.js";
12
+ import { d as getAuthSessionState } from "./auth-session-B0J2UwSR.js";
13
13
  import { a as outJsonLine, i as errLine, n as sanitizeTerminalDisplayText, o as outLine, r as formatMessage, t as createPresenter } from "./presenter-DiP7Yh2y.js";
14
- import { a as buildOpenMeldProfileIdentityRequestHeadersWithAuth, d as buildOpenMeldRequestContextFromProfile, f as buildOpenMeldRequestContextFromProfileIdentity, m as resolveAuthRequestCompatibility, n as fetchSpaceRequestWithTimeout, o as buildOpenMeldProfileRequestHeadersWithAuth, p as deriveAuthBaseUrlFromGatewayUrl, r as resolveSpaceRequestTimeoutMsForDiagnostics, s as buildOpenMeldRequestContextHeadersWithAuth, t as createCliApiClientFoundation } from "./api-client-foundation-DBl_OaMj.js";
15
- import { F as formatSpaceMemberCommandRecoveryCopy, H as resolveGatewayChainRetryGuidance, I as resolveReplyReadinessAvailabilityReasonCopy, L as resolveReplyReadinessGuidanceSummaryCopy, M as formatReplyReadinessSummary, O as resolveCurrentReplyReadinessSnapshot, P as REPLY_READINESS_COPY, R as resolveOpenClawDiagnosticsGuidance, U as resolveOpenClawLocalDiagnosticsValue, V as resolveGatewayChainRepairGuidance, W as resolveLocalServiceDemand, b as buildDaemonServiceRepairGuidance, z as classifyGatewayChainFailure } from "./daemon-service-update-coordinator-ef1RLL_R.js";
16
- import { D as createDelayedSpinner, G as ensureCommandAuthenticationOrCancel, N as renderHumanErrorCard, U as connectWebSocket, W as buildCommandAuthenticationPromptMessage, at as promptTextEntry, b as formatServiceRuntimeHeadline, it as buildUnifiedCardFrame, lt as getCurrentCommandCheckState, nt as renderInfoCard, x as resolveServiceParticipationReadiness, y as formatServiceParticipationReadinessLabel } from "./service-8ReqDsOx.js";
17
- import { A as createSpaceUpdatesGuideError, D as createSpaceSubcommandTargetGuideError, Dt as formatAgentOverviewPayload, O as createSpaceTargetGuideError, S as createSpaceResultGuideError, _ as createSpaceProfileRequiredGuideError, at as SPACE_ADD_MEMBERS_PROGRESS_HEARTBEAT_MS, b as createSpaceRemoveMembersCurrentProfileGuideError, c as createSpaceAddMembersCurrentProfileGuideError, d as createSpaceContractSetGuideError, et as ROOT_ENTRY_COMMANDS, f as createSpaceCreateGuideError, ft as formatCliVersionSummary, g as createSpaceMenuGuideError, h as createSpaceLeaveGuideError, i as createProfileCreateGuideError, it as SPACE_ADD_MEMBERS_AGENT_OVERVIEW_STAGES, k as createSpaceUnsupportedProfileKindGuideError, l as createSpaceAddMembersGuideError, m as createSpaceLeaveCreatorGuideError, ot as resolveSpaceAddMembersProgressPhase, p as createSpaceDeleteHumanApprovalGuideError, pt as getCliVersionInfo, rt as validateSpaceMemberSelectionInput, tt as ROOT_ENTRY_START_COMMAND, v as createSpacePublicationSetGuideError, x as createSpaceRemoveMembersGuideError, y as createSpaceRemoveMembersCreatorGuideError } from "./dual-view-guide-catalog-DkoOcvAt.js";
18
- import { g as canUseInteractivePrompts } from "./elapsed-time-COLGQWPQ.js";
19
- import { At as toLocalSpaceStateIntegrityError, Ct as isLocalSpaceStateCorruptResult, Dt as readSpaceLastSeenTs, Et as readSpaceConfig, Ft as writeSpaceRecentMentionProfileIds, Gt as buildSpaceMentionProfileIndex, Ht as buildSignalMessageReadProjection, It as SpaceComposerSubmissionError, Kt as buildSpaceMessageReadRelationSummary, Lt as buildDispatchResultMessageReadProjection, Mt as updateSpaceLastSeenTs, Nt as upsertSpaceConfig, Ot as readSpaceRecentMentionProfileIds, Pt as writeSpaceCacheDeletionNoticeState, Qt as collectResolvedSpaceMentions, Tt as readSpaceCacheDeletionNoticeState, Ut as buildSignalReplyWorkflowProjection, Vt as buildSignalIndex, Wt as buildSpaceMemberAgentPresencePresentation, Zt as closeMentionPickerState, _n as resolveSpaceMemberAgentOwnerWakeDiagnosticsView, bt as projectSpaceProfileCache, cn as isTargetPickerState, dn as listSpaceMentionRelationChoices, fn as listSpaceMentionSuggestions, gn as resolveNextRecentMentionProfileIdsForQueuedText, hn as prepareSpaceFileOnlySubmission, jt as toSpaceConfigListIntegrityError, kt as removeSpaceConfig, mn as prepareSpaceComposerSubmission, nn as enterRelationPickerState, pn as openTargetPickerState, qt as buildSpaceProfileAddPlan, rn as extractMentionAuthoringPrefix, sn as isRelationPickerState, t as assertDispatchOwnedRuntimePublicWriteAllowed, tn as createSpaceTargetCatalog, vn as returnToTargetPickerState, wt as listSpaceConfigs, xt as LocalSpaceStateIntegrityError, yn as updateAuthoredMentionRanges } from "./dispatch-owned-runtime-D5J7omXK.js";
20
- import { S as buildSpaceWebUrl, T as runDaemonServiceParticipationGate, _ as promptSearchSelect, b as resolveOffsetVisibleWindow, f as runAgentsRepair, g as promptSearchMultiselectWorkbench, h as promptSearchMultiselect, l as runAgentsEnable, m as formatTransportModeDisplay, v as clampNumber$2, x as computeRetryDelayMs, y as resolveAnchoredVisibleWindow } from "./agents-BGpftZJo.js";
21
- import { l as resolveLocalAgentControllerReportDecision, n as submitProfileRuntimeAgentControllerReport, o as collectLocalAgentControllerInventory, r as submitRuntimeAgentControllerReport } from "./runtime-agent-controller-reporting-submission-ZLj8H7TM.js";
22
- import { a as GatewayHttpError, c as toStructuredGatewayFailure, d as resolveSpaceSendText, h as createCliSpaceApi, i as parseSpaceMetaResponse, m as uploadPreparedSpaceFiles, o as readGatewayJsonResponse, p as prepareRequestedSpaceSendFiles, r as parseSpaceMetaPayload, t as fetchSpaceMeta } from "./meta-api-BPhaiMmU.js";
14
+ import { a as buildOpenMeldProfileIdentityRequestHeadersWithAuth, d as buildOpenMeldRequestContextFromProfile, f as buildOpenMeldRequestContextFromProfileIdentity, m as resolveAuthRequestCompatibility, n as fetchSpaceRequestWithTimeout, o as buildOpenMeldProfileRequestHeadersWithAuth, p as deriveAuthBaseUrlFromGatewayUrl, r as resolveSpaceRequestTimeoutMsForDiagnostics, s as buildOpenMeldRequestContextHeadersWithAuth, t as createCliApiClientFoundation } from "./api-client-foundation-6MeNwklv.js";
15
+ import { F as formatSpaceMemberCommandRecoveryCopy, H as resolveGatewayChainRetryGuidance, I as resolveReplyReadinessAvailabilityReasonCopy, L as resolveReplyReadinessGuidanceSummaryCopy, M as formatReplyReadinessSummary, O as resolveCurrentReplyReadinessSnapshot, P as REPLY_READINESS_COPY, R as resolveOpenClawDiagnosticsGuidance, U as resolveOpenClawLocalDiagnosticsValue, V as resolveGatewayChainRepairGuidance, W as resolveLocalServiceDemand, b as buildDaemonServiceRepairGuidance, z as classifyGatewayChainFailure } from "./daemon-service-update-coordinator-4WJr8-5_.js";
16
+ import { D as createDelayedSpinner, G as ensureCommandAuthenticationOrCancel, N as renderHumanErrorCard, U as connectWebSocket, W as buildCommandAuthenticationPromptMessage, at as promptTextEntry, b as formatServiceRuntimeHeadline, it as buildUnifiedCardFrame, lt as getCurrentCommandCheckState, nt as renderInfoCard, x as resolveServiceParticipationReadiness, y as formatServiceParticipationReadinessLabel } from "./service-BNpxWxYQ.js";
17
+ import { A as createSpaceUpdatesGuideError, D as createSpaceSubcommandTargetGuideError, Dt as formatAgentOverviewPayload, O as createSpaceTargetGuideError, S as createSpaceResultGuideError, _ as createSpaceProfileRequiredGuideError, at as SPACE_ADD_MEMBERS_PROGRESS_HEARTBEAT_MS, b as createSpaceRemoveMembersCurrentProfileGuideError, c as createSpaceAddMembersCurrentProfileGuideError, d as createSpaceContractSetGuideError, et as ROOT_ENTRY_COMMANDS, f as createSpaceCreateGuideError, ft as formatCliVersionSummary, g as createSpaceMenuGuideError, h as createSpaceLeaveGuideError, i as createProfileCreateGuideError, it as SPACE_ADD_MEMBERS_AGENT_OVERVIEW_STAGES, k as createSpaceUnsupportedProfileKindGuideError, l as createSpaceAddMembersGuideError, m as createSpaceLeaveCreatorGuideError, ot as resolveSpaceAddMembersProgressPhase, p as createSpaceDeleteHumanApprovalGuideError, pt as getCliVersionInfo, rt as validateSpaceMemberSelectionInput, tt as ROOT_ENTRY_START_COMMAND, v as createSpacePublicationSetGuideError, x as createSpaceRemoveMembersGuideError, y as createSpaceRemoveMembersCreatorGuideError } from "./dual-view-guide-catalog-3LaB18SR.js";
18
+ import { g as canUseInteractivePrompts } from "./elapsed-time-CGeKqTzX.js";
19
+ import { At as toLocalSpaceStateIntegrityError, Ct as isLocalSpaceStateCorruptResult, Dt as readSpaceLastSeenTs, Et as readSpaceConfig, Ft as writeSpaceRecentMentionProfileIds, Gt as buildSpaceMentionProfileIndex, Ht as buildSignalMessageReadProjection, It as SpaceComposerSubmissionError, Kt as buildSpaceMessageReadRelationSummary, Lt as buildDispatchResultMessageReadProjection, Mt as updateSpaceLastSeenTs, Nt as upsertSpaceConfig, Ot as readSpaceRecentMentionProfileIds, Pt as writeSpaceCacheDeletionNoticeState, Qt as collectResolvedSpaceMentions, Tt as readSpaceCacheDeletionNoticeState, Ut as buildSignalReplyWorkflowProjection, Vt as buildSignalIndex, Wt as buildSpaceMemberAgentPresencePresentation, Zt as closeMentionPickerState, _n as resolveSpaceMemberAgentOwnerWakeDiagnosticsView, bt as projectSpaceProfileCache, cn as isTargetPickerState, dn as listSpaceMentionRelationChoices, fn as listSpaceMentionSuggestions, gn as resolveNextRecentMentionProfileIdsForQueuedText, hn as prepareSpaceFileOnlySubmission, jt as toSpaceConfigListIntegrityError, kt as removeSpaceConfig, mn as prepareSpaceComposerSubmission, nn as enterRelationPickerState, pn as openTargetPickerState, qt as buildSpaceProfileAddPlan, rn as extractMentionAuthoringPrefix, sn as isRelationPickerState, t as assertDispatchOwnedRuntimePublicWriteAllowed, tn as createSpaceTargetCatalog, vn as returnToTargetPickerState, wt as listSpaceConfigs, xt as LocalSpaceStateIntegrityError, yn as updateAuthoredMentionRanges } from "./dispatch-owned-runtime-BTK0uuOV.js";
20
+ import { S as buildSpaceWebUrl, T as runDaemonServiceParticipationGate, _ as promptSearchSelect, b as resolveOffsetVisibleWindow, f as runAgentsRepair, g as promptSearchMultiselectWorkbench, h as promptSearchMultiselect, l as runAgentsEnable, m as formatTransportModeDisplay, v as clampNumber$2, x as computeRetryDelayMs, y as resolveAnchoredVisibleWindow } from "./agents-DFHWtOt8.js";
21
+ import { l as resolveLocalAgentControllerReportDecision, n as submitProfileRuntimeAgentControllerReport, o as collectLocalAgentControllerInventory, r as submitRuntimeAgentControllerReport } from "./runtime-agent-controller-reporting-submission-Dtvml_vt.js";
22
+ import { a as GatewayHttpError, c as toStructuredGatewayFailure, d as resolveSpaceSendText, h as createCliSpaceApi, i as parseSpaceMetaResponse, m as uploadPreparedSpaceFiles, o as readGatewayJsonResponse, p as prepareRequestedSpaceSendFiles, r as parseSpaceMetaPayload, t as fetchSpaceMeta } from "./meta-api-B01L3fo4.js";
23
23
  import { stripVTControlCharacters } from "node:util";
24
24
  import pc from "picocolors";
25
25
  import { cancel, confirm, isCancel, multiselect, password, select, text } from "@clack/prompts";
@@ -6394,6 +6394,7 @@ function resolveLocalSlashCommandIntent(input) {
6394
6394
  }
6395
6395
  //#endregion
6396
6396
  //#region src/space/composer-submission-adapter.ts
6397
+ const ADDRESS_BOUNDARY = /[\s,.:;!?,。、!?:;—–…]/u;
6397
6398
  async function prepareCliSpaceComposerSubmission(input) {
6398
6399
  const requested = [
6399
6400
  ["wake", input.wakeTargets ?? []],
@@ -6418,6 +6419,7 @@ async function prepareCliSpaceComposerSubmission(input) {
6418
6419
  });
6419
6420
  }
6420
6421
  const { mentions, prefix, resolvedAddressingTargets } = resolveRequestedRecipients(snapshot, requested);
6422
+ assertNoDuplicateLeadingRecipient(input.text, resolvedAddressingTargets);
6421
6423
  const preparedSubmission = prefix.length === 0 && input.text.length === 0 ? prepareSpaceFileOnlySubmission({ replyTo: input.replyTo }) : prepareSpaceComposerSubmission({
6422
6424
  authoredMentionsInTextOrder: [...mentions, ...(input.authoredMentionsInTextOrder ?? []).map((mention) => ({
6423
6425
  ...mention,
@@ -6436,6 +6438,17 @@ async function prepareCliSpaceComposerSubmission(input) {
6436
6438
  resolvedAddressingTargets
6437
6439
  };
6438
6440
  }
6441
+ function assertNoDuplicateLeadingRecipient(body, targets) {
6442
+ const text = body.trimStart();
6443
+ for (const target of targets) {
6444
+ const label = `@${target.primaryMentionLabel}`;
6445
+ if (text === label || text.startsWith(label) && ADDRESS_BOUNDARY.test(text.charAt(label.length))) throw new SpaceComposerSubmissionError({
6446
+ code: "addressing.duplicate_target",
6447
+ message: `Recipient flags already add ${label}. Remove the leading name from the message text and send again. No message was sent.`,
6448
+ targetProfileId: target.profileId
6449
+ });
6450
+ }
6451
+ }
6439
6452
  function resolveRequestedRecipients(snapshot, requested) {
6440
6453
  const catalog = snapshot ? createSpaceTargetCatalog(snapshot) : null;
6441
6454
  const seen = /* @__PURE__ */ new Map();
@@ -19441,6 +19454,32 @@ async function leaveSpace(input) {
19441
19454
  });
19442
19455
  }
19443
19456
  //#endregion
19457
+ //#region src/space/send-task-selection.ts
19458
+ const UNAVAILABLE_TASK_MESSAGE = "This message has no recorded task for the selected Agent. Select its original Wake request or an Agent reply with task details, or use --new-task. No message was sent.";
19459
+ async function resolveMessageTaskSelection(input) {
19460
+ const selection = input.selection;
19461
+ if (!selection || selection.mode !== "resume" && selection.mode !== "fork") return selection;
19462
+ const sourceSignalId = input.sourceSignalId?.trim();
19463
+ if (!sourceSignalId) return selection;
19464
+ let details = await input.readDetails(sourceSignalId);
19465
+ if (details.query.spaceId !== input.spaceId || details.message.signalId !== sourceSignalId) throw new Error(UNAVAILABLE_TASK_MESSAGE);
19466
+ const replySource = details.replyContext.replyingToSignalId;
19467
+ if (details.message.actor.profileKind === "agent" && details.message.actor.profileId === input.targetProfileId && replySource.state === "recorded" && replySource.value) {
19468
+ details = await input.readDetails(replySource.value);
19469
+ if (details.message.signalId !== replySource.value) throw new Error(UNAVAILABLE_TASK_MESSAGE);
19470
+ }
19471
+ const source = details.wakeContext.sourceSignalId;
19472
+ if (details.query.spaceId !== input.spaceId || source.state !== "recorded" || !source.value || source.value !== details.message.signalId || !input.targetProfileId || !details.wakeContext.targets.some((target) => target.targetProfileId === input.targetProfileId)) throw new Error(UNAVAILABLE_TASK_MESSAGE);
19473
+ return {
19474
+ ...selection,
19475
+ sourceWakeId: buildTargetWakeLifecycleId({
19476
+ spaceId: input.spaceId,
19477
+ sourceSignalId: source.value,
19478
+ targetProfileId: input.targetProfileId
19479
+ })
19480
+ };
19481
+ }
19482
+ //#endregion
19444
19483
  //#region src/space/send.ts
19445
19484
  function assertSessionSelectionSupported(selection, targets) {
19446
19485
  if (!selection) return;
@@ -19535,6 +19574,18 @@ async function runSend(input) {
19535
19574
  }
19536
19575
  });
19537
19576
  const requestContext = buildOpenMeldRequestContextFromProfile({ openMeldProfile });
19577
+ const contextSelection = await resolveMessageTaskSelection({
19578
+ selection: input.contextSelection,
19579
+ sourceSignalId: input.contextSourceSignalId,
19580
+ targetProfileId: resolvedAddressingTargets.find((target) => target.relation === "wake")?.profileId,
19581
+ spaceId: space,
19582
+ readDetails: (signalId) => spaceApi.getMessageDetails({
19583
+ spaceId: space,
19584
+ signalId,
19585
+ requestContext,
19586
+ ...input.password === void 0 ? {} : { spacePassword: input.password }
19587
+ })
19588
+ });
19538
19589
  emitFileUploadProgress({
19539
19590
  fileCount: preparedFiles.length,
19540
19591
  presenter,
@@ -19557,7 +19608,7 @@ async function runSend(input) {
19557
19608
  });
19558
19609
  const replyToSignalId = String(input.replyToSignalId ?? "").trim();
19559
19610
  const payload = replyToSignalId ? await postReplyIntoThread({
19560
- contextSelection: input.contextSelection,
19611
+ contextSelection,
19561
19612
  spaceApi,
19562
19613
  space,
19563
19614
  requestContext,
@@ -19568,7 +19619,7 @@ async function runSend(input) {
19568
19619
  clientMessageId,
19569
19620
  files
19570
19621
  }) : await spaceApi.postNormalMessage({
19571
- contextSelection: input.contextSelection,
19622
+ contextSelection,
19572
19623
  spaceId: space,
19573
19624
  requestContext,
19574
19625
  ...input.password === void 0 ? {} : { spacePassword: input.password },
@@ -19592,11 +19643,15 @@ async function runSend(input) {
19592
19643
  });
19593
19644
  }
19594
19645
  async function postReplyIntoThread(input) {
19595
- let threadId = (await input.spaceApi.listThreads({
19646
+ const details = await input.spaceApi.getMessageDetails({
19596
19647
  spaceId: input.space,
19648
+ signalId: input.replyToSignalId,
19649
+ includeThreadContext: true,
19597
19650
  requestContext: input.requestContext,
19598
19651
  ...input.password === void 0 ? {} : { spacePassword: input.password }
19599
- })).threads.find((thread) => thread.rootSignalId === input.replyToSignalId)?.threadId;
19652
+ });
19653
+ if (details.threadContext === void 0) throw new Error("This server cannot resolve the message's thread yet. Update Core and Gateway before using --reply-to. No reply was sent.");
19654
+ let threadId = details.threadContext?.threadId;
19600
19655
  if (!threadId) threadId = (await input.spaceApi.createThread({
19601
19656
  spaceId: input.space,
19602
19657
  rootSignalId: input.replyToSignalId,
@@ -24449,6 +24504,7 @@ async function runSpaceSend(input) {
24449
24504
  try {
24450
24505
  await runSend({
24451
24506
  clientMessageId: input.clientMessageId,
24507
+ contextSourceSignalId: input.contextSourceSignalId,
24452
24508
  contextSelection: input.contextSelection,
24453
24509
  wakeTargets: input.wakeTargets,
24454
24510
  referenceTargets: input.referenceTargets,
@@ -24631,4 +24687,4 @@ function isHumanInteractiveSpaceRuntime(runtime) {
24631
24687
  //#endregion
24632
24688
  export { assessActionParticipationCandidate as $, isSpaceCommandOutputHandledError as A, persistAgentTransportSelection as B, buildFormalSignalReadPayload as C, resolveLinkAccessLabel as D, formatHumanReadTargetList as E, emitSpaceAgentOverview as F, renderOpenMeldBrandBlockLines as G, colorizeAgentLabel as H, emitSpaceCliAgentOverview as I, renderOpenMeldTagline as J, renderOpenMeldHeader as K, prepareLocalAgentReadiness as L, assertValidSpaceIdTarget as M, prepareAuthenticatedSpaceCommandContext as N, resolveOrganizationVisibilityLabel as O, resolveOpenMeldProfileForSpaceCommand as P, ensureAgentProfileRuntimeBinding as Q, buildReplyReadinessGuidance as R, buildFormalDispatchResultReadPayload as S, buildHumanReplyContextSummary as T, colorizeDisplayProfileLabel as U, resolveAgentProfileSetup as V, printOpenMeldBanner as W, resolveCreateProfileKind as X, createProfileByKind as Y, resolveCreateProfileName as Z, emitHumanReadSignalsTextProjection as _, runSpaceDelete as a, loadSpaceSignalIndexOrNull as b, runSpaceLeave as c, runSpaceRemoveMembers as d, runSpaceSend as f, buildHumanReadSignalsTranscriptItems as g, runSpaceWriteWithPasswordRetry as h, runSpaceCreate as i, assertFullSignalIdArgument as j, parseEnvelope as k, runSpaceList as l, runSpaceReadWithPasswordRetry as m, promptAndConfirmSpacePassword as n, runSpaceHistory as o, runSpaceWatch as p, renderOpenMeldLogo as q, runSpaceAddMembers as r, runSpaceJoin as s, buildCreateSpacePasswordPromptConfig as t, runSpacePassword as u, buildIdentityOnlyMembersSnapshotForReadProjection as v, formatTextEvent as w, toSpaceMetaUpsertInput as x, loadSpaceIdentityDirectoryOrNull as y, resolveHumanControllerDisplayName as z };
24633
24689
 
24634
- //# sourceMappingURL=command-BgBsh9xU.js.map
24690
+ //# sourceMappingURL=command-7ZoDO_Hy.js.map