@abot-ai/runtime 1.2.0 → 1.3.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 (550) hide show
  1. package/README.md +14 -0
  2. package/dist/scripts/init-runtime.js +4 -13
  3. package/dist/scripts/runtime-setup-directories.d.ts +2 -0
  4. package/dist/scripts/runtime-setup-directories.js +38 -0
  5. package/dist/src/bridge/request-steering.d.ts +2 -1
  6. package/dist/src/bridge/request-steering.js +4 -2
  7. package/dist/src/bridge/runtime-replay.js +2 -19
  8. package/dist/src/bridge/start-agent-bridge.js +1 -1
  9. package/dist/src/capabilities/normal-invocation/validator.js +1 -1
  10. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
  11. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.d.ts +2 -0
  12. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.js +74 -0
  13. package/dist/src/capabilities/tool-event-metadata.js +3 -0
  14. package/dist/src/capabilities/tool-result-event-projection.d.ts +3 -0
  15. package/dist/src/capabilities/tool-result-event-projection.js +82 -0
  16. package/dist/src/capabilities/tool-types.d.ts +5 -0
  17. package/dist/src/cli/abot.js +2 -11
  18. package/dist/src/runtime/adapters/in-memory-session-store.js +1 -0
  19. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +11 -2
  20. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +2 -0
  21. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.d.ts +2 -0
  22. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.js +40 -0
  23. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +3 -0
  24. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +9 -0
  25. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts +13 -0
  26. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.js +25 -0
  27. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +18 -2
  28. package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +8 -0
  29. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +7 -3
  30. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +17 -2
  31. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.d.ts +9 -0
  32. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.js +8 -0
  33. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +16 -1
  34. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +2 -2
  35. package/dist/src/runtime/adapters/scheduled-request-outcome.d.ts +11 -0
  36. package/dist/src/runtime/adapters/scheduled-request-outcome.js +41 -0
  37. package/dist/src/runtime/adapters/scheduler-runtime.d.ts +19 -0
  38. package/dist/src/runtime/adapters/scheduler-runtime.js +138 -0
  39. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +55 -0
  40. package/dist/src/runtime/capabilities/scheduling/create-operations.js +30 -0
  41. package/dist/src/runtime/capabilities/scheduling/create-time-zone.d.ts +1 -0
  42. package/dist/src/runtime/capabilities/scheduling/create-time-zone.js +11 -0
  43. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +25 -0
  44. package/dist/src/runtime/capabilities/scheduling/job-list-page.js +40 -0
  45. package/dist/src/runtime/capabilities/scheduling/model-validation.d.ts +2 -0
  46. package/dist/src/runtime/capabilities/scheduling/model-validation.js +15 -0
  47. package/dist/src/runtime/capabilities/scheduling/tool-contract.d.ts +2 -0
  48. package/dist/src/runtime/capabilities/scheduling/tool-contract.js +35 -0
  49. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.d.ts +43 -0
  50. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.js +27 -0
  51. package/dist/src/runtime/capabilities/scheduling/tool-module.d.ts +4 -0
  52. package/dist/src/runtime/capabilities/scheduling/tool-module.js +158 -0
  53. package/dist/src/runtime/capabilities/scheduling/update-operations.d.ts +2 -0
  54. package/dist/src/runtime/capabilities/scheduling/update-operations.js +49 -0
  55. package/dist/src/runtime/composition.d.ts +23 -3
  56. package/dist/src/runtime/composition.js +12 -17
  57. package/dist/src/runtime/config/environment-paths.d.ts +10 -0
  58. package/dist/src/runtime/config/environment-paths.js +31 -0
  59. package/dist/src/runtime/config/environment-storage.d.ts +9 -0
  60. package/dist/src/runtime/config/environment-storage.js +65 -0
  61. package/dist/src/runtime/config/fields.js +7 -0
  62. package/dist/src/runtime/config/long-term-memory.js +15 -0
  63. package/dist/src/runtime/config/schema.js +8 -0
  64. package/dist/src/runtime/config.js +9 -5
  65. package/dist/src/runtime/context/scheduled-execution-context.d.ts +10 -0
  66. package/dist/src/runtime/context/scheduled-execution-context.js +52 -0
  67. package/dist/src/runtime/default-adapters.d.ts +3 -32
  68. package/dist/src/runtime/default-adapters.js +3 -270
  69. package/dist/src/runtime/default-environment-adapters.d.ts +19 -0
  70. package/dist/src/runtime/default-environment-adapters.js +144 -0
  71. package/dist/src/runtime/index.d.ts +5 -0
  72. package/dist/src/runtime/index.js +4 -0
  73. package/dist/src/runtime/local-application.d.ts +22 -0
  74. package/dist/src/runtime/local-application.js +81 -0
  75. package/dist/src/runtime/local-host/app-memory-dispatch.d.ts +11 -0
  76. package/dist/src/runtime/local-host/app-memory-dispatch.js +103 -0
  77. package/dist/src/runtime/local-host/app-owner.d.ts +4 -0
  78. package/dist/src/runtime/local-host/app-owner.js +119 -0
  79. package/dist/src/runtime/local-host/app-request-control.d.ts +24 -0
  80. package/dist/src/runtime/local-host/app-request-control.js +135 -0
  81. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +5 -0
  82. package/dist/src/runtime/local-host/app-service-dispatch.js +64 -0
  83. package/dist/src/runtime/local-host/client-identity.d.ts +3 -0
  84. package/dist/src/runtime/local-host/client-identity.js +17 -0
  85. package/dist/src/runtime/local-host/client-memory.d.ts +7 -0
  86. package/dist/src/runtime/local-host/client-memory.js +54 -0
  87. package/dist/src/runtime/local-host/client-requests.d.ts +19 -0
  88. package/dist/src/runtime/local-host/client-requests.js +145 -0
  89. package/dist/src/runtime/local-host/client-services.d.ts +10 -0
  90. package/dist/src/runtime/local-host/client-services.js +14 -0
  91. package/dist/src/runtime/local-host/contracts.d.ts +36 -0
  92. package/dist/src/runtime/local-host/contracts.js +1 -0
  93. package/dist/src/runtime/local-host/endpoint.d.ts +7 -0
  94. package/dist/src/runtime/local-host/endpoint.js +79 -0
  95. package/dist/src/runtime/local-host/owner-activity.d.ts +10 -0
  96. package/dist/src/runtime/local-host/owner-activity.js +30 -0
  97. package/dist/src/runtime/local-host/owner-retirement.d.ts +3 -0
  98. package/dist/src/runtime/local-host/owner-retirement.js +15 -0
  99. package/dist/src/runtime/local-host/owner-server.d.ts +6 -0
  100. package/dist/src/runtime/local-host/owner-server.js +88 -0
  101. package/dist/src/runtime/local-host/private-access.d.ts +2 -0
  102. package/dist/src/runtime/local-host/private-access.js +16 -0
  103. package/dist/src/runtime/local-host/private-directory.d.ts +1 -0
  104. package/dist/src/runtime/local-host/private-directory.js +57 -0
  105. package/dist/src/runtime/local-host/rpc-peer.d.ts +22 -0
  106. package/dist/src/runtime/local-host/rpc-peer.js +168 -0
  107. package/dist/src/runtime/local-host/rpc-protocol.d.ts +21 -0
  108. package/dist/src/runtime/local-host/rpc-protocol.js +46 -0
  109. package/dist/src/runtime/local-host/startup-connection.d.ts +5 -0
  110. package/dist/src/runtime/local-host/startup-connection.js +72 -0
  111. package/dist/src/runtime/local-host/transport.d.ts +3 -0
  112. package/dist/src/runtime/local-host/transport.js +88 -0
  113. package/dist/src/runtime/local-host/windows-private-access.d.ts +1 -0
  114. package/dist/src/runtime/local-host/windows-private-access.js +51 -0
  115. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +6 -0
  116. package/dist/src/runtime/long-term-memory/recall-binding.d.ts +3 -0
  117. package/dist/src/runtime/long-term-memory/recall-binding.js +27 -0
  118. package/dist/src/runtime/long-term-memory/recall-context.d.ts +20 -0
  119. package/dist/src/runtime/long-term-memory/recall-context.js +101 -0
  120. package/dist/src/runtime/long-term-memory/recall-continuation.d.ts +8 -0
  121. package/dist/src/runtime/long-term-memory/recall-continuation.js +36 -0
  122. package/dist/src/runtime/long-term-memory/recall-policy.d.ts +7 -0
  123. package/dist/src/runtime/long-term-memory/recall-policy.js +14 -0
  124. package/dist/src/runtime/long-term-memory/recall-result.d.ts +5 -0
  125. package/dist/src/runtime/long-term-memory/recall-result.js +54 -0
  126. package/dist/src/runtime/long-term-memory/repository-state.d.ts +2 -1
  127. package/dist/src/runtime/long-term-memory/repository-state.js +2 -2
  128. package/dist/src/runtime/model/invoke-raw-step.d.ts +1 -0
  129. package/dist/src/runtime/model/invoke-raw-step.js +1 -0
  130. package/dist/src/runtime/model/invoke-step.js +6 -0
  131. package/dist/src/runtime/model/invoke-structured-step.d.ts +1 -0
  132. package/dist/src/runtime/model/invoke-structured-step.js +1 -0
  133. package/dist/src/runtime/model/model-step-port.d.ts +2 -0
  134. package/dist/src/runtime/model/model-step-steering.d.ts +8 -0
  135. package/dist/src/runtime/model/model-step-steering.js +19 -0
  136. package/dist/src/runtime/orchestration/final-response/authoring-contract.js +1 -1
  137. package/dist/src/runtime/orchestration/final-response/invoke.d.ts +1 -0
  138. package/dist/src/runtime/orchestration/final-response/invoke.js +1 -0
  139. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  140. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +9 -49
  141. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.d.ts +9 -0
  142. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +17 -8
  143. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.d.ts +2 -0
  144. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.js +62 -0
  145. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +4 -0
  146. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.d.ts +4 -0
  147. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.js +89 -0
  148. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +5 -0
  149. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +9 -7
  150. package/dist/src/runtime/orchestration/role-calls/contracts.js +2 -2
  151. package/dist/src/runtime/orchestration/role-calls/diagnostics.js +3 -0
  152. package/dist/src/runtime/orchestration/role-calls/index.d.ts +1 -0
  153. package/dist/src/runtime/orchestration/role-calls/index.js +1 -0
  154. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +51 -0
  155. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.js +4 -0
  156. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.d.ts +6 -0
  157. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.js +147 -0
  158. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.d.ts +5 -0
  159. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.js +27 -0
  160. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +3 -0
  161. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +121 -0
  162. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.d.ts +3 -0
  163. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.js +44 -0
  164. package/dist/src/runtime/orchestration/role-calls/reducer.js +1 -0
  165. package/dist/src/runtime/orchestration/role-calls/transaction-effect.d.ts +5 -0
  166. package/dist/src/runtime/orchestration/role-calls/transaction-effect.js +14 -0
  167. package/dist/src/runtime/orchestration/role-calls/transactions.js +3 -24
  168. package/dist/src/runtime/plugins/manifest-validator.js +4 -1
  169. package/dist/src/runtime/ports.d.ts +4 -0
  170. package/dist/src/runtime/request/bound-runtime-handler.d.ts +2 -0
  171. package/dist/src/runtime/request/bound-runtime-handler.js +25 -0
  172. package/dist/src/runtime/request/contracts.d.ts +6 -0
  173. package/dist/src/runtime/request/execution-agent-root-execution.js +12 -0
  174. package/dist/src/runtime/request/execution-facets.js +6 -0
  175. package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
  176. package/dist/src/runtime/request/execution-scope.d.ts +1 -1
  177. package/dist/src/runtime/request/handler.js +6 -0
  178. package/dist/src/runtime/request/root-contract.d.ts +7 -1
  179. package/dist/src/runtime/request/root-execution-kernel.js +33 -37
  180. package/dist/src/runtime/request/root-memory-recall.d.ts +11 -0
  181. package/dist/src/runtime/request/root-memory-recall.js +71 -0
  182. package/dist/src/runtime/request/root-observation-handoff.d.ts +17 -0
  183. package/dist/src/runtime/request/root-observation-handoff.js +44 -0
  184. package/dist/src/runtime/request/scheduled-execution.d.ts +9 -0
  185. package/dist/src/runtime/request/scheduled-execution.js +32 -0
  186. package/dist/src/runtime/request/session-admission.d.ts +17 -0
  187. package/dist/src/runtime/request/session-admission.js +88 -0
  188. package/dist/src/runtime/request/supervisor-root-execution-diagnostics.d.ts +1 -1
  189. package/dist/src/runtime/request/supervisor-root-execution.js +8 -0
  190. package/dist/src/runtime/runtime-environment.d.ts +31 -0
  191. package/dist/src/runtime/runtime-environment.js +102 -0
  192. package/dist/src/runtime/runtime-host-environment.d.ts +8 -0
  193. package/dist/src/runtime/runtime-host-environment.js +57 -0
  194. package/dist/src/runtime/runtime-host-lifecycle.d.ts +4 -0
  195. package/dist/src/runtime/runtime-host-lifecycle.js +64 -0
  196. package/dist/src/runtime/runtime-host-scheduler-ownership.d.ts +5 -0
  197. package/dist/src/runtime/runtime-host-scheduler-ownership.js +67 -0
  198. package/dist/src/runtime/runtime-host.d.ts +19 -0
  199. package/dist/src/runtime/runtime-host.js +63 -0
  200. package/dist/src/runtime/scheduler/calendar-time.d.ts +10 -0
  201. package/dist/src/runtime/scheduler/calendar-time.js +58 -0
  202. package/dist/src/runtime/scheduler/contracts.d.ts +143 -0
  203. package/dist/src/runtime/scheduler/contracts.js +1 -0
  204. package/dist/src/runtime/scheduler/file-store.d.ts +2 -0
  205. package/dist/src/runtime/scheduler/file-store.js +76 -0
  206. package/dist/src/runtime/scheduler/instant-validation.d.ts +4 -0
  207. package/dist/src/runtime/scheduler/instant-validation.js +69 -0
  208. package/dist/src/runtime/scheduler/interval-range.d.ts +8 -0
  209. package/dist/src/runtime/scheduler/interval-range.js +24 -0
  210. package/dist/src/runtime/scheduler/job-management.d.ts +8 -0
  211. package/dist/src/runtime/scheduler/job-management.js +212 -0
  212. package/dist/src/runtime/scheduler/journal-checkpoint.d.ts +9 -0
  213. package/dist/src/runtime/scheduler/journal-checkpoint.js +45 -0
  214. package/dist/src/runtime/scheduler/journal-durability.d.ts +8 -0
  215. package/dist/src/runtime/scheduler/journal-durability.js +59 -0
  216. package/dist/src/runtime/scheduler/journal-files.d.ts +14 -0
  217. package/dist/src/runtime/scheduler/journal-files.js +59 -0
  218. package/dist/src/runtime/scheduler/journal-head.d.ts +21 -0
  219. package/dist/src/runtime/scheduler/journal-head.js +81 -0
  220. package/dist/src/runtime/scheduler/journal-index-state.d.ts +31 -0
  221. package/dist/src/runtime/scheduler/journal-index-state.js +137 -0
  222. package/dist/src/runtime/scheduler/journal-index.d.ts +22 -0
  223. package/dist/src/runtime/scheduler/journal-index.js +195 -0
  224. package/dist/src/runtime/scheduler/journal-store.d.ts +21 -0
  225. package/dist/src/runtime/scheduler/journal-store.js +184 -0
  226. package/dist/src/runtime/scheduler/journal-transaction.d.ts +14 -0
  227. package/dist/src/runtime/scheduler/journal-transaction.js +104 -0
  228. package/dist/src/runtime/scheduler/next-occurrence.d.ts +3 -0
  229. package/dist/src/runtime/scheduler/next-occurrence.js +39 -0
  230. package/dist/src/runtime/scheduler/run-completion.d.ts +12 -0
  231. package/dist/src/runtime/scheduler/run-completion.js +77 -0
  232. package/dist/src/runtime/scheduler/run-list-query.d.ts +5 -0
  233. package/dist/src/runtime/scheduler/run-list-query.js +38 -0
  234. package/dist/src/runtime/scheduler/run-records.d.ts +6 -0
  235. package/dist/src/runtime/scheduler/run-records.js +41 -0
  236. package/dist/src/runtime/scheduler/schedule-update.d.ts +3 -0
  237. package/dist/src/runtime/scheduler/schedule-update.js +22 -0
  238. package/dist/src/runtime/scheduler/schedule-validation.d.ts +10 -0
  239. package/dist/src/runtime/scheduler/schedule-validation.js +132 -0
  240. package/dist/src/runtime/scheduler/scheduler-engine.d.ts +2 -0
  241. package/dist/src/runtime/scheduler/scheduler-engine.js +174 -0
  242. package/dist/src/runtime/scheduler/scheduler-service.d.ts +10 -0
  243. package/dist/src/runtime/scheduler/scheduler-service.js +115 -0
  244. package/dist/src/runtime/scheduler/service-context.d.ts +21 -0
  245. package/dist/src/runtime/scheduler/service-context.js +26 -0
  246. package/dist/src/runtime/scheduler/session-deletion-state.d.ts +9 -0
  247. package/dist/src/runtime/scheduler/session-deletion-state.js +30 -0
  248. package/dist/src/runtime/scheduler/snapshot-validation.d.ts +4 -0
  249. package/dist/src/runtime/scheduler/snapshot-validation.js +112 -0
  250. package/dist/src/runtime/scheduler/startup-recovery.d.ts +2 -0
  251. package/dist/src/runtime/scheduler/startup-recovery.js +38 -0
  252. package/dist/src/runtime/scheduler/validation-error.d.ts +4 -0
  253. package/dist/src/runtime/scheduler/validation-error.js +8 -0
  254. package/dist/src/runtime/scheduler/working-store.d.ts +3 -0
  255. package/dist/src/runtime/scheduler/working-store.js +8 -0
  256. package/dist/src/runtime/session/request-session.d.ts +1 -0
  257. package/dist/src/runtime/session/request-session.js +14 -1
  258. package/dist/src/runtime/session/session-attachment-deletion.d.ts +8 -0
  259. package/dist/src/runtime/session/session-attachment-deletion.js +87 -0
  260. package/dist/src/runtime/session/session-deletion-boundary.d.ts +10 -0
  261. package/dist/src/runtime/session/session-deletion-boundary.js +39 -0
  262. package/dist/src/runtime/session/session-deletion-cleanup.d.ts +7 -0
  263. package/dist/src/runtime/session/session-deletion-cleanup.js +62 -0
  264. package/dist/src/runtime/session/session-deletion-finalization.d.ts +7 -0
  265. package/dist/src/runtime/session/session-deletion-finalization.js +34 -0
  266. package/dist/src/runtime/session/session-deletion-receipts.d.ts +7 -0
  267. package/dist/src/runtime/session/session-deletion-receipts.js +18 -0
  268. package/dist/src/runtime/session/session-lifecycle-store.d.ts +21 -0
  269. package/dist/src/runtime/session/session-lifecycle-store.js +72 -0
  270. package/dist/src/runtime/session/session-mutation-queue.d.ts +3 -0
  271. package/dist/src/runtime/session/session-mutation-queue.js +15 -0
  272. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.d.ts +16 -0
  273. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.js +165 -0
  274. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +3 -1
  275. package/dist/src/runtime/steps/execution-agent/decision-parsing.d.ts +2 -0
  276. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +195 -0
  277. package/dist/src/runtime/steps/execution-agent/decision-validation.d.ts +30 -0
  278. package/dist/src/runtime/steps/execution-agent/decision-validation.js +127 -0
  279. package/dist/src/runtime/steps/execution-agent/format.d.ts +1 -0
  280. package/dist/src/runtime/steps/execution-agent/format.js +12 -0
  281. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -1
  282. package/dist/src/runtime/steps/execution-agent/input.js +17 -2
  283. package/dist/src/runtime/steps/execution-agent/parser.d.ts +1 -2
  284. package/dist/src/runtime/steps/execution-agent/parser.js +1 -472
  285. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +2 -0
  286. package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
  287. package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +4 -3
  288. package/dist/src/runtime/steps/execution-agent/response-input.js +5 -4
  289. package/dist/src/runtime/steps/execution-agent/response-run.d.ts +3 -0
  290. package/dist/src/runtime/steps/execution-agent/response-run.js +7 -3
  291. package/dist/src/runtime/steps/execution-agent/run.d.ts +2 -0
  292. package/dist/src/runtime/steps/execution-agent/run.js +2 -0
  293. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -1
  294. package/dist/src/runtime/steps/execution-agent/state-context.js +13 -5
  295. package/dist/src/runtime/steps/memory-recall-decision.d.ts +30 -0
  296. package/dist/src/runtime/steps/memory-recall-decision.js +101 -0
  297. package/dist/src/runtime/steps/memory-recall-prompt.d.ts +1 -0
  298. package/dist/src/runtime/steps/memory-recall-prompt.js +15 -0
  299. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +4 -2
  300. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +2 -0
  301. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +13 -6
  302. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +2 -0
  303. package/dist/src/runtime/steps/supervisor-decision/format.js +41 -2
  304. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +5 -1
  305. package/dist/src/runtime/steps/supervisor-decision/input.js +25 -5
  306. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.d.ts +10 -0
  307. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.js +32 -0
  308. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +2 -0
  309. package/dist/src/runtime/steps/supervisor-decision/parser.js +36 -1
  310. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +3 -0
  311. package/dist/src/runtime/steps/supervisor-decision/prompt.js +16 -8
  312. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +13 -0
  313. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +32 -0
  314. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +2 -0
  315. package/dist/src/runtime/steps/supervisor-decision/resume.js +13 -0
  316. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +3 -0
  317. package/dist/src/runtime/steps/supervisor-decision/run.js +19 -0
  318. package/dist/src/runtime/steps/supervisor-decision/working-directory.js +7 -1
  319. package/dist/src/runtime/steps/supervisor-response/diagnostics.d.ts +1 -0
  320. package/dist/src/runtime/steps/supervisor-response/diagnostics.js +1 -0
  321. package/dist/src/runtime/steps/supervisor-response/input.d.ts +2 -1
  322. package/dist/src/runtime/steps/supervisor-response/input.js +17 -4
  323. package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +1 -0
  324. package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +4 -0
  325. package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +1 -0
  326. package/dist/src/runtime/steps/supervisor-response/prompt.js +8 -2
  327. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +10 -0
  328. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +25 -0
  329. package/dist/src/runtime/steps/supervisor-response/run.d.ts +6 -1
  330. package/dist/src/runtime/steps/supervisor-response/run.js +26 -7
  331. package/dist/src/sessions/record/projection.js +1 -0
  332. package/dist/src/sessions/schedule-metadata.d.ts +8 -0
  333. package/dist/src/sessions/schedule-metadata.js +1 -0
  334. package/dist/src/sessions/session-service.d.ts +1 -0
  335. package/dist/src/sessions/session-service.js +1 -0
  336. package/dist/src/sessions/types.d.ts +2 -0
  337. package/dist/src/shared/directory-authority/bootstrap.d.ts +1 -0
  338. package/dist/src/shared/directory-authority/bootstrap.js +118 -0
  339. package/dist/src/shared/directory-authority/command.d.ts +8 -0
  340. package/dist/src/shared/directory-authority/command.js +27 -0
  341. package/dist/src/shared/directory-authority/errors.d.ts +5 -0
  342. package/dist/src/shared/directory-authority/errors.js +10 -0
  343. package/dist/src/shared/directory-authority/index.d.ts +3 -0
  344. package/dist/src/shared/directory-authority/index.js +3 -0
  345. package/dist/src/shared/directory-authority/protocol.d.ts +11 -0
  346. package/dist/src/shared/directory-authority/protocol.js +62 -0
  347. package/dist/src/shared/directory-authority/task.d.ts +7 -0
  348. package/dist/src/shared/directory-authority/task.js +97 -0
  349. package/dist/src/shared/http-server-shutdown.d.ts +4 -0
  350. package/dist/src/shared/http-server-shutdown.js +17 -0
  351. package/dist/src/shared/public-http/aggregate-gate.d.ts +3 -0
  352. package/dist/src/shared/public-http/aggregate-gate.js +87 -0
  353. package/dist/src/shared/public-http/deadline.d.ts +2 -0
  354. package/dist/src/shared/public-http/deadline.js +29 -0
  355. package/dist/src/shared/public-http/errors.d.ts +6 -0
  356. package/dist/src/shared/public-http/errors.js +11 -0
  357. package/dist/src/shared/public-http/limits.d.ts +8 -0
  358. package/dist/src/shared/public-http/limits.js +8 -0
  359. package/dist/src/shared/public-http/network-policy.d.ts +11 -0
  360. package/dist/src/shared/public-http/network-policy.js +178 -0
  361. package/dist/src/shared/public-http/public-http.d.ts +24 -0
  362. package/dist/src/shared/public-http/public-http.js +85 -0
  363. package/dist/src/shared/public-http/request-hop.d.ts +18 -0
  364. package/dist/src/shared/public-http/request-hop.js +140 -0
  365. package/dist/src/web-ui/app/ARCHITECTURE.md +66 -4
  366. package/dist/src/web-ui/app/app-bootstrap.js +53 -0
  367. package/dist/src/web-ui/app/app-dom.js +80 -0
  368. package/dist/src/web-ui/app/app.js +195 -212
  369. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  370. package/dist/src/web-ui/app/components/conversation-activity.js +34 -7
  371. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +1 -0
  372. package/dist/src/web-ui/app/components/conversation-role-cards.js +61 -5
  373. package/dist/src/web-ui/app/components/conversation-schedule.js +71 -0
  374. package/dist/src/web-ui/app/components/conversation-status.js +65 -0
  375. package/dist/src/web-ui/app/components/conversation-tools.d.ts +13 -0
  376. package/dist/src/web-ui/app/components/conversation-tools.js +284 -0
  377. package/dist/src/web-ui/app/components/conversation-view.js +39 -11
  378. package/dist/src/web-ui/app/components/dashboard/activity.js +61 -0
  379. package/dist/src/web-ui/app/components/dashboard/icons.js +23 -0
  380. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +64 -0
  381. package/dist/src/web-ui/app/components/dashboard/workspace.js +107 -0
  382. package/dist/src/web-ui/app/components/message-link-previews.d.ts +16 -0
  383. package/dist/src/web-ui/app/components/message-link-previews.js +179 -0
  384. package/dist/src/web-ui/app/components/schedules/details.js +101 -0
  385. package/dist/src/web-ui/app/components/schedules/form.d.ts +13 -0
  386. package/dist/src/web-ui/app/components/schedules/form.js +246 -0
  387. package/dist/src/web-ui/app/components/schedules/workspace-state.js +59 -0
  388. package/dist/src/web-ui/app/components/schedules/workspace.js +165 -0
  389. package/dist/src/web-ui/app/components/workspace-shell.js +48 -2
  390. package/dist/src/web-ui/app/configuration-feature.js +72 -0
  391. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +1 -0
  392. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +17 -6
  393. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +2 -0
  394. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +15 -1
  395. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +58 -0
  396. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +53 -0
  397. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +180 -0
  398. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +23 -0
  399. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +82 -0
  400. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +8 -0
  401. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +28 -39
  402. package/dist/src/web-ui/app/controllers/dashboard-controller.js +127 -0
  403. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +40 -0
  404. package/dist/src/web-ui/app/controllers/home-composer-feature.js +119 -0
  405. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +37 -0
  406. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +1 -0
  407. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +74 -3
  408. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +2 -1
  409. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +15 -14
  410. package/dist/src/web-ui/app/controllers/schedule-realtime.js +118 -0
  411. package/dist/src/web-ui/app/controllers/schedules-controller.js +421 -0
  412. package/dist/src/web-ui/app/controllers/session-controller.js +30 -3
  413. package/dist/src/web-ui/app/dashboard-feature.js +44 -0
  414. package/dist/src/web-ui/app/index.html +53 -1
  415. package/dist/src/web-ui/app/lib/composer-submission-scope.d.ts +21 -0
  416. package/dist/src/web-ui/app/lib/composer-submission-scope.js +13 -0
  417. package/dist/src/web-ui/app/lib/context-window-snapshot-order.d.ts +15 -0
  418. package/dist/src/web-ui/app/lib/context-window-snapshot-order.js +31 -0
  419. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +10 -1
  420. package/dist/src/web-ui/app/lib/conversation-role-model.js +97 -15
  421. package/dist/src/web-ui/app/lib/conversation-status-model.d.ts +12 -0
  422. package/dist/src/web-ui/app/lib/conversation-status-model.js +116 -0
  423. package/dist/src/web-ui/app/lib/dashboard-job-templates.js +41 -0
  424. package/dist/src/web-ui/app/lib/dashboard-presentation.js +126 -0
  425. package/dist/src/web-ui/app/lib/message-markdown.d.ts +5 -0
  426. package/dist/src/web-ui/app/lib/message-markdown.js +99 -0
  427. package/dist/src/web-ui/app/lib/message-url-policy.d.ts +1 -0
  428. package/dist/src/web-ui/app/lib/message-url-policy.js +13 -0
  429. package/dist/src/web-ui/app/lib/schedule-errors.js +29 -0
  430. package/dist/src/web-ui/app/lib/schedule-message.js +30 -0
  431. package/dist/src/web-ui/app/lib/schedule-presentation.js +81 -0
  432. package/dist/src/web-ui/app/lib/session-read-state.d.ts +22 -0
  433. package/dist/src/web-ui/app/lib/session-read-state.js +63 -0
  434. package/dist/src/web-ui/app/lib/text-format.js +2 -143
  435. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +26 -0
  436. package/dist/src/web-ui/app/lib/tool-activity-event.js +228 -0
  437. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +41 -0
  438. package/dist/src/web-ui/app/lib/tool-activity-model.js +255 -0
  439. package/dist/src/web-ui/app/lib/tool-timeline.d.ts +3 -0
  440. package/dist/src/web-ui/app/lib/tool-timeline.js +18 -0
  441. package/dist/src/web-ui/app/schedules-feature.js +87 -0
  442. package/dist/src/web-ui/app/services/message-link-preview-client.d.ts +14 -0
  443. package/dist/src/web-ui/app/services/message-link-preview-client.js +96 -0
  444. package/dist/src/web-ui/app/services/runtime-web-client/schedules.js +51 -0
  445. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +37 -0
  446. package/dist/src/web-ui/app/services/runtime-web-client.js +13 -8
  447. package/dist/src/web-ui/app/styles/00-tokens-base.css +11 -11
  448. package/dist/src/web-ui/app/styles/18-dashboard.css +384 -0
  449. package/dist/src/web-ui/app/styles/20-chat-composer.css +1 -130
  450. package/dist/src/web-ui/app/styles/26-message-content.css +295 -0
  451. package/dist/src/web-ui/app/styles/27-conversation-tools.css +266 -0
  452. package/dist/src/web-ui/app/styles/28-conversation-status.css +52 -0
  453. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +263 -0
  454. package/dist/src/web-ui/app/styles/38-schedules.css +352 -0
  455. package/dist/src/web-ui/app/styles/90-responsive.css +14 -0
  456. package/dist/src/web-ui/app/styles/91-schedules-responsive.css +72 -0
  457. package/dist/src/web-ui/app/styles/92-dashboard-responsive.css +88 -0
  458. package/dist/src/web-ui/app/styles.css +8 -0
  459. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  460. package/dist/src/web-ui/app/ui-behavior.js +3 -1
  461. package/dist/src/web-ui/app/vendor/README.md +15 -0
  462. package/dist/src/web-ui/app/vendor/markdown-it.LICENSE +22 -0
  463. package/dist/src/web-ui/app/vendor/markdown-it.js +3003 -0
  464. package/dist/src/web-ui/link-preview/metadata.d.ts +9 -0
  465. package/dist/src/web-ui/link-preview/metadata.js +97 -0
  466. package/dist/src/web-ui/link-preview/preview-cache.d.ts +4 -0
  467. package/dist/src/web-ui/link-preview/preview-cache.js +23 -0
  468. package/dist/src/web-ui/link-preview/raster-response.d.ts +9 -0
  469. package/dist/src/web-ui/link-preview/raster-response.js +49 -0
  470. package/dist/src/web-ui/link-preview/routes.d.ts +3 -0
  471. package/dist/src/web-ui/link-preview/routes.js +97 -0
  472. package/dist/src/web-ui/link-preview/service.d.ts +11 -0
  473. package/dist/src/web-ui/link-preview/service.js +117 -0
  474. package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -1
  475. package/dist/src/web-ui/local-runtime/api-router.js +42 -73
  476. package/dist/src/web-ui/local-runtime/contracts.d.ts +2 -2
  477. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +12 -1
  478. package/dist/src/web-ui/local-runtime/environment-registry.js +38 -3
  479. package/dist/src/web-ui/local-runtime/realtime-controller.js +3 -1
  480. package/dist/src/web-ui/local-runtime/request-execution.d.ts +5 -1
  481. package/dist/src/web-ui/local-runtime/request-execution.js +38 -2
  482. package/dist/src/web-ui/local-runtime/schedule-job-creation.d.ts +7 -0
  483. package/dist/src/web-ui/local-runtime/schedule-job-creation.js +62 -0
  484. package/dist/src/web-ui/local-runtime/schedule-management-routes.d.ts +30 -0
  485. package/dist/src/web-ui/local-runtime/schedule-management-routes.js +134 -0
  486. package/dist/src/web-ui/local-runtime/schedule-run-page.d.ts +5 -0
  487. package/dist/src/web-ui/local-runtime/schedule-run-page.js +23 -0
  488. package/dist/src/web-ui/local-runtime/session-routes.d.ts +17 -0
  489. package/dist/src/web-ui/local-runtime/session-routes.js +74 -0
  490. package/dist/src/web-ui/local-runtime-backend.d.ts +2 -0
  491. package/dist/src/web-ui/local-runtime-backend.js +11 -1
  492. package/dist/src/web-ui/schedule-creation-contract.d.ts +7 -0
  493. package/dist/src/web-ui/schedule-creation-contract.js +1 -0
  494. package/dist/src/web-ui/server-shutdown.d.ts +4 -0
  495. package/dist/src/web-ui/server-shutdown.js +32 -0
  496. package/dist/src/web-ui/server.js +13 -10
  497. package/dist/src/web-ui/session-read-state/availability.d.ts +16 -0
  498. package/dist/src/web-ui/session-read-state/availability.js +20 -0
  499. package/dist/src/web-ui/session-read-state/projection.d.ts +17 -0
  500. package/dist/src/web-ui/session-read-state/projection.js +71 -0
  501. package/dist/src/web-ui/session-read-state/service.d.ts +86 -0
  502. package/dist/src/web-ui/session-read-state/service.js +89 -0
  503. package/dist/src/web-ui/session-read-state/store.d.ts +22 -0
  504. package/dist/src/web-ui/session-read-state/store.js +110 -0
  505. package/docs/configuration.md +41 -1
  506. package/docs/long-term-memory.md +46 -5
  507. package/docs/plugins.md +15 -9
  508. package/docs/runtime-invariant-coverage.md +1 -1
  509. package/docs/runtime-library.md +23 -0
  510. package/docs/runtime-public-contracts.md +32 -1
  511. package/package.json +3 -1
  512. package/plugins/code-outline/plugin.json +15 -0
  513. package/plugins/document-reader/plugin.json +17 -0
  514. package/plugins/exec/plugin.json +3 -3
  515. package/plugins/exec/skills/exec_skill/SKILL.md +1 -1
  516. package/plugins/exec/source/process-manager.ts +1 -20
  517. package/plugins/exec/source/shell-platform.ts +29 -0
  518. package/plugins/exec/src/index.cjs +25 -18
  519. package/plugins/filesystem/plugin.json +17 -2
  520. package/plugins/filesystem/source/atomic-write.ts +9 -0
  521. package/plugins/filesystem/source/bounded-io.ts +5 -99
  522. package/plugins/filesystem/source/directory-authority-write.ts +64 -0
  523. package/plugins/filesystem/source/directory-sample-task.ts +23 -0
  524. package/plugins/filesystem/source/directory-sample.ts +132 -0
  525. package/plugins/filesystem/source/directory-write-task.ts +160 -0
  526. package/plugins/filesystem/source/mutation-parent.ts +11 -0
  527. package/plugins/filesystem/src/index.cjs +693 -118
  528. package/plugins/json-inspector/plugin.json +12 -0
  529. package/plugins/local-search/plugin.json +12 -0
  530. package/plugins/local-search/source/index.ts +2 -0
  531. package/plugins/local-search/source/paths.ts +30 -7
  532. package/plugins/local-search/source/ripgrep-process.ts +69 -0
  533. package/plugins/local-search/source/ripgrep.ts +19 -23
  534. package/plugins/local-search/src/index.cjs +295 -32
  535. package/plugins/memory/plugin.json +26 -1
  536. package/plugins/memory/source/index.ts +10 -6
  537. package/plugins/memory/src/index.cjs +11 -7
  538. package/plugins/project-orientation/plugin.json +14 -0
  539. package/plugins/web/source/aggregate-gate.ts +8 -130
  540. package/plugins/web/source/deadline.ts +14 -50
  541. package/plugins/web/source/errors.ts +17 -11
  542. package/plugins/web/source/limits.ts +3 -6
  543. package/plugins/web/source/network-policy.ts +28 -226
  544. package/plugins/web/source/public-http.ts +17 -142
  545. package/plugins/web/source/request-hop.ts +11 -191
  546. package/plugins/web/src/index.cjs +119 -59
  547. package/runtime.config.schema.json +7 -0
  548. package/src/runtime/README.md +105 -1
  549. package/src/runtime/local-host/README.md +86 -0
  550. package/src/runtime/scheduler/README.md +166 -0
@@ -200,6 +200,7 @@ export class SessionService {
200
200
  taskType: options.taskType,
201
201
  requestId: options.requestId,
202
202
  cronJobId: options.cronJobId,
203
+ ...(options.schedule ? { schedule: options.schedule } : {}),
203
204
  cronTitle: options.cronTitle,
204
205
  triggerType: options.triggerType,
205
206
  attachments: options.attachments,
@@ -86,6 +86,7 @@ export type SessionListResult = {
86
86
  nextCursor: string | null;
87
87
  };
88
88
  export type SessionSnapshotMessage = {
89
+ schedule?: import("./schedule-metadata.js").ScheduleMessageReference;
89
90
  id: string | number;
90
91
  sessionId: string;
91
92
  role: SessionMessageRole;
@@ -137,6 +138,7 @@ export type SessionMessageDeleteResult = {
137
138
  deletedRequestEvents?: number;
138
139
  };
139
140
  export type SessionMessage = {
141
+ schedule?: import("./schedule-metadata.js").ScheduleMessageReference;
140
142
  id: string;
141
143
  role: SessionMessageRole;
142
144
  content: string;
@@ -0,0 +1 @@
1
+ export declare function directoryAuthorityScript(mode: "task" | "command", messageLimit: number, task?: (input: never) => unknown): string;
@@ -0,0 +1,118 @@
1
+ /**
2
+ * This function is serialized into a fresh Node process. It must remain
3
+ * closure-free and use only node: built-ins; the starting cwd is untrusted
4
+ * until its identity has been compared with the inherited directory handle.
5
+ */
6
+ function directoryAuthorityBootstrap(mode, messageLimit, task) {
7
+ const fs = require("node:fs");
8
+ function fail(code, message) {
9
+ throw Object.assign(new Error(message), { code });
10
+ }
11
+ function verifyDirectoryAuthority() {
12
+ const expected = fs.fstatSync(3, { bigint: true });
13
+ const actual = fs.statSync(".", { bigint: true });
14
+ const matchesHeldDirectory = expected.isDirectory() &&
15
+ actual.isDirectory() &&
16
+ expected.dev === actual.dev &&
17
+ expected.ino === actual.ino;
18
+ if (matchesHeldDirectory)
19
+ return;
20
+ fail("directory_authority_changed", "The directory changed before the operation could establish its authority.");
21
+ }
22
+ function readRequest() {
23
+ const fd = mode === "task" ? 0 : 4;
24
+ const chunk = Buffer.alloc(64 * 1024);
25
+ const chunks = [];
26
+ let total = 0;
27
+ for (;;) {
28
+ const length = fs.readSync(fd, chunk, 0, chunk.length, null);
29
+ if (length === 0)
30
+ break;
31
+ total += length;
32
+ if (total > messageLimit) {
33
+ fail("directory_authority_request_too_large", "The directory operation input exceeds the bridge byte limit.");
34
+ }
35
+ chunks.push(Buffer.from(chunk.subarray(0, length)));
36
+ }
37
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
38
+ }
39
+ function reportFailure(error) {
40
+ const detail = error;
41
+ const code = typeof detail?.code === "string"
42
+ ? detail.code.slice(0, 256)
43
+ : "directory_authority_failed";
44
+ const message = typeof detail?.message === "string"
45
+ ? detail.message.slice(0, 4096)
46
+ : "The directory operation failed.";
47
+ let encoded;
48
+ try {
49
+ encoded = JSON.stringify({
50
+ ok: false,
51
+ error: { code, message, data: detail?.data },
52
+ });
53
+ if (Buffer.byteLength(encoded) > messageLimit)
54
+ throw new Error();
55
+ }
56
+ catch {
57
+ encoded = JSON.stringify({ ok: false, error: { code, message } });
58
+ }
59
+ writeResponse(mode === "task" ? 1 : 2, encoded);
60
+ process.exitCode = mode === "task" ? 0 : 125;
61
+ }
62
+ function writeResponse(fd, encoded) {
63
+ const bytes = Buffer.from(encoded);
64
+ let offset = 0;
65
+ while (offset < bytes.length) {
66
+ offset += fs.writeSync(fd, bytes, offset, bytes.length - offset);
67
+ }
68
+ }
69
+ async function runTask(input) {
70
+ if (!task)
71
+ fail("directory_authority_failed", "The directory task is missing.");
72
+ const result = await task(input);
73
+ const encoded = JSON.stringify({ ok: true, result });
74
+ if (Buffer.byteLength(encoded) > messageLimit) {
75
+ fail("directory_authority_result_too_large", "The directory operation result exceeds the bridge byte limit.");
76
+ }
77
+ writeResponse(1, encoded);
78
+ }
79
+ function runCommand(input) {
80
+ const { spawn } = require("node:child_process");
81
+ const command = input;
82
+ // Omitting cwd inherits the kernel-pinned authority. Resolving cwd() back
83
+ // into a pathname here would reopen the race this bridge prevents.
84
+ const child = spawn(command.command, command.args, {
85
+ stdio: ["ignore", "inherit", "inherit"],
86
+ env: process.env,
87
+ });
88
+ child.once("error", reportFailure);
89
+ child.once("exit", (code, signal) => {
90
+ if (signal) {
91
+ process.kill(process.pid, signal);
92
+ return;
93
+ }
94
+ if (typeof code === "number")
95
+ process.exitCode = code;
96
+ });
97
+ }
98
+ try {
99
+ verifyDirectoryAuthority();
100
+ const input = readRequest();
101
+ if (mode === "command") {
102
+ runCommand(input);
103
+ return;
104
+ }
105
+ void runTask(input).catch(reportFailure);
106
+ }
107
+ catch (error) {
108
+ reportFailure(error);
109
+ }
110
+ }
111
+ export function directoryAuthorityScript(mode, messageLimit, task) {
112
+ const taskSource = task ? `(${task.toString()})` : "undefined";
113
+ // tsx preserves nested function names with esbuild's __name annotation.
114
+ // Include that annotation's definition so the same trusted task works in
115
+ // development and in the production bundle without rewriting its source.
116
+ const preserveFunctionName = "const __name=(target,value)=>Object.defineProperty(target,'name',{value,configurable:true});";
117
+ return `${preserveFunctionName}(${directoryAuthorityBootstrap.toString()})(${JSON.stringify(mode)},${messageLimit},${taskSource});`;
118
+ }
@@ -0,0 +1,8 @@
1
+ import { type ChildProcessByStdio } from "node:child_process";
2
+ import type { Readable } from "node:stream";
3
+ import { type DirectoryAuthorityLocation } from "./protocol.js";
4
+ export declare function spawnDirectoryAuthorityCommand(input: DirectoryAuthorityLocation & Readonly<{
5
+ command: string;
6
+ args: readonly string[];
7
+ env?: NodeJS.ProcessEnv;
8
+ }>): ChildProcessByStdio<null, Readable, Readable>;
@@ -0,0 +1,27 @@
1
+ import { spawn } from "node:child_process";
2
+ import { directoryAuthorityScript } from "./bootstrap.js";
3
+ import { assertDirectoryAuthorityLocation, authorityEnvironment, AUTHORITY_MESSAGE_LIMIT, encodeAuthorityRequest, } from "./protocol.js";
4
+ export function spawnDirectoryAuthorityCommand(input) {
5
+ assertDirectoryAuthorityLocation(input);
6
+ const request = encodeAuthorityRequest({
7
+ command: input.command,
8
+ args: input.args,
9
+ });
10
+ const child = spawn(process.execPath, [
11
+ "--input-type=commonjs",
12
+ "-e",
13
+ directoryAuthorityScript("command", AUTHORITY_MESSAGE_LIMIT),
14
+ ], {
15
+ cwd: input.directoryPath,
16
+ env: authorityEnvironment(input.env),
17
+ detached: true,
18
+ windowsHide: true,
19
+ stdio: ["ignore", "pipe", "pipe", input.directoryFd, "pipe"],
20
+ });
21
+ const requestPipe = child.stdio[4];
22
+ // An early authority failure may close the request pipe before the parent
23
+ // finishes writing. The process result remains the authoritative error.
24
+ requestPipe?.on("error", () => undefined);
25
+ requestPipe?.end(request);
26
+ return child;
27
+ }
@@ -0,0 +1,5 @@
1
+ export declare class DirectoryAuthorityError extends Error {
2
+ readonly code: string;
3
+ readonly data?: Readonly<Record<string, unknown>> | undefined;
4
+ constructor(code: string, message: string, data?: Readonly<Record<string, unknown>> | undefined);
5
+ }
@@ -0,0 +1,10 @@
1
+ export class DirectoryAuthorityError extends Error {
2
+ code;
3
+ data;
4
+ constructor(code, message, data) {
5
+ super(message);
6
+ this.code = code;
7
+ this.data = data;
8
+ this.name = "DirectoryAuthorityError";
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ export { spawnDirectoryAuthorityCommand } from "./command.js";
2
+ export { DirectoryAuthorityError } from "./errors.js";
3
+ export { runDirectoryAuthorityTask } from "./task.js";
@@ -0,0 +1,3 @@
1
+ export { spawnDirectoryAuthorityCommand } from "./command.js";
2
+ export { DirectoryAuthorityError } from "./errors.js";
3
+ export { runDirectoryAuthorityTask } from "./task.js";
@@ -0,0 +1,11 @@
1
+ export declare const AUTHORITY_MESSAGE_LIMIT: number;
2
+ export declare const AUTHORITY_STDERR_LIMIT: number;
3
+ export declare const AUTHORITY_TASK_TIMEOUT_MS = 30000;
4
+ export type DirectoryAuthorityLocation = Readonly<{
5
+ directoryPath: string;
6
+ directoryFd: number;
7
+ }>;
8
+ export declare function assertDirectoryAuthorityLocation(location: DirectoryAuthorityLocation): void;
9
+ export declare function authorityEnvironment(environment?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
10
+ export declare function encodeAuthorityRequest(input: unknown): string;
11
+ export declare function decodeAuthorityResult<Result>(output: string): Result;
@@ -0,0 +1,62 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { DirectoryAuthorityError } from "./errors.js";
3
+ export const AUTHORITY_MESSAGE_LIMIT = 8 * 1024 * 1024;
4
+ export const AUTHORITY_STDERR_LIMIT = 16 * 1024;
5
+ export const AUTHORITY_TASK_TIMEOUT_MS = 30_000;
6
+ export function assertDirectoryAuthorityLocation(location) {
7
+ if (!isAbsolute(location.directoryPath)) {
8
+ throw new DirectoryAuthorityError("directory_authority_invalid_path", "The directory authority requires an absolute starting path.");
9
+ }
10
+ const hasOpenDescriptorNumber = Number.isInteger(location.directoryFd) && location.directoryFd >= 0;
11
+ if (hasOpenDescriptorNumber)
12
+ return;
13
+ throw new DirectoryAuthorityError("directory_authority_invalid_fd", "The directory authority requires an open directory descriptor.");
14
+ }
15
+ export function authorityEnvironment(environment = process.env) {
16
+ const sanitized = { ...environment };
17
+ delete sanitized.NODE_OPTIONS;
18
+ delete sanitized.NODE_PATH;
19
+ return sanitized;
20
+ }
21
+ export function encodeAuthorityRequest(input) {
22
+ let encoded;
23
+ try {
24
+ encoded = JSON.stringify(input);
25
+ }
26
+ catch {
27
+ throw new DirectoryAuthorityError("directory_authority_invalid_request", "The directory operation input must be JSON serializable.");
28
+ }
29
+ if (encoded === undefined) {
30
+ throw new DirectoryAuthorityError("directory_authority_invalid_request", "The directory operation input must be JSON serializable.");
31
+ }
32
+ if (Buffer.byteLength(encoded) <= AUTHORITY_MESSAGE_LIMIT)
33
+ return encoded;
34
+ throw new DirectoryAuthorityError("directory_authority_request_too_large", "The directory operation input exceeds the bridge byte limit.");
35
+ }
36
+ function isAuthorityMessageObject(value) {
37
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38
+ }
39
+ export function decodeAuthorityResult(output) {
40
+ let message;
41
+ try {
42
+ message = JSON.parse(output);
43
+ }
44
+ catch {
45
+ throw new DirectoryAuthorityError("directory_authority_protocol_error", "The directory operation returned an invalid response.");
46
+ }
47
+ if (!isAuthorityMessageObject(message)) {
48
+ throw new DirectoryAuthorityError("directory_authority_protocol_error", "The directory operation returned an invalid response.");
49
+ }
50
+ if (message.ok === true)
51
+ return message.result;
52
+ const hasAuthorityError = message.ok === false && isAuthorityMessageObject(message.error);
53
+ if (!hasAuthorityError) {
54
+ throw new DirectoryAuthorityError("directory_authority_protocol_error", "The directory operation returned an invalid response.");
55
+ }
56
+ const { code, message: explanation, data, } = message.error;
57
+ const hasErrorDescription = typeof code === "string" && typeof explanation === "string";
58
+ if (!hasErrorDescription) {
59
+ throw new DirectoryAuthorityError("directory_authority_protocol_error", "The directory operation returned an invalid error response.");
60
+ }
61
+ throw new DirectoryAuthorityError(code, explanation, isAuthorityMessageObject(data) ? data : undefined);
62
+ }
@@ -0,0 +1,7 @@
1
+ import { type DirectoryAuthorityLocation } from "./protocol.js";
2
+ export declare function runDirectoryAuthorityTask<Input, Result>(input: DirectoryAuthorityLocation & Readonly<{
3
+ input: Input;
4
+ task: (input: Input) => Result | Promise<Result>;
5
+ timeoutMs?: number;
6
+ signal?: AbortSignal;
7
+ }>): Promise<Result>;
@@ -0,0 +1,97 @@
1
+ import { spawn } from "node:child_process";
2
+ import { directoryAuthorityScript } from "./bootstrap.js";
3
+ import { DirectoryAuthorityError } from "./errors.js";
4
+ import { assertDirectoryAuthorityLocation, authorityEnvironment, AUTHORITY_MESSAGE_LIMIT, AUTHORITY_STDERR_LIMIT, AUTHORITY_TASK_TIMEOUT_MS, decodeAuthorityResult, encodeAuthorityRequest, } from "./protocol.js";
5
+ export async function runDirectoryAuthorityTask(input) {
6
+ assertDirectoryAuthorityLocation(input);
7
+ const request = encodeAuthorityRequest(input.input);
8
+ const timeoutMs = input.timeoutMs ?? AUTHORITY_TASK_TIMEOUT_MS;
9
+ const hasPositiveDeadline = Number.isFinite(timeoutMs) && timeoutMs > 0;
10
+ if (!hasPositiveDeadline) {
11
+ throw new DirectoryAuthorityError("directory_authority_invalid_timeout", "The directory operation deadline must be a positive finite duration.");
12
+ }
13
+ if (input.signal?.aborted) {
14
+ throw new DirectoryAuthorityError("directory_authority_aborted", "The directory operation was cancelled before it started.");
15
+ }
16
+ const child = spawn(process.execPath, [
17
+ "--input-type=commonjs",
18
+ "-e",
19
+ directoryAuthorityScript("task", AUTHORITY_MESSAGE_LIMIT, input.task),
20
+ ], {
21
+ cwd: input.directoryPath,
22
+ env: authorityEnvironment(),
23
+ detached: true,
24
+ windowsHide: true,
25
+ stdio: ["pipe", "pipe", "pipe", input.directoryFd],
26
+ });
27
+ return new Promise((resolve, reject) => {
28
+ const chunks = [];
29
+ const stderrChunks = [];
30
+ let bytes = 0;
31
+ let stderrBytes = 0;
32
+ let failure;
33
+ const stop = (error) => {
34
+ if (failure)
35
+ return;
36
+ failure = error;
37
+ if (typeof child.pid === "number") {
38
+ try {
39
+ process.kill(-child.pid, "SIGKILL");
40
+ return;
41
+ }
42
+ catch {
43
+ // A process which has already exited may no longer own its group.
44
+ }
45
+ }
46
+ child.kill("SIGKILL");
47
+ };
48
+ const onAbort = () => stop(new DirectoryAuthorityError("directory_authority_aborted", "The directory operation was cancelled."));
49
+ const timer = setTimeout(() => stop(new DirectoryAuthorityError("directory_authority_timeout", "The directory operation exceeded its deadline.")), timeoutMs);
50
+ timer.unref();
51
+ input.signal?.addEventListener("abort", onAbort, { once: true });
52
+ if (input.signal?.aborted)
53
+ onAbort();
54
+ child.stdout.on("data", (chunk) => {
55
+ bytes += chunk.length;
56
+ if (bytes > AUTHORITY_MESSAGE_LIMIT) {
57
+ stop(new DirectoryAuthorityError("directory_authority_result_too_large", "The directory operation result exceeds the bridge byte limit."));
58
+ return;
59
+ }
60
+ chunks.push(chunk);
61
+ });
62
+ child.stderr.on("data", (chunk) => {
63
+ const remaining = Math.max(AUTHORITY_STDERR_LIMIT - stderrBytes, 0);
64
+ if (remaining === 0)
65
+ return;
66
+ stderrChunks.push(chunk.subarray(0, remaining));
67
+ stderrBytes += Math.min(chunk.length, remaining);
68
+ });
69
+ child.stdin.on("error", () => undefined);
70
+ child.once("error", (error) => {
71
+ failure ??= new DirectoryAuthorityError("directory_authority_unavailable", `The directory operation could not start: ${error.message}`);
72
+ });
73
+ child.once("close", (code, signal) => {
74
+ clearTimeout(timer);
75
+ input.signal?.removeEventListener("abort", onAbort);
76
+ if (failure) {
77
+ reject(failure);
78
+ return;
79
+ }
80
+ if (code !== 0) {
81
+ reject(new DirectoryAuthorityError("directory_authority_failed", "The directory operation process did not complete successfully.", {
82
+ exitCode: code,
83
+ signal,
84
+ stderr: Buffer.concat(stderrChunks).toString("utf8"),
85
+ }));
86
+ return;
87
+ }
88
+ try {
89
+ resolve(decodeAuthorityResult(Buffer.concat(chunks).toString("utf8")));
90
+ }
91
+ catch (error) {
92
+ reject(error);
93
+ }
94
+ });
95
+ child.stdin.end(request);
96
+ });
97
+ }
@@ -0,0 +1,4 @@
1
+ import type { Server } from "node:http";
2
+ import type { WebSocketServer } from "ws";
3
+ /** Stops only this server's connections; active work is not drained on shutdown. */
4
+ export declare function closeHttpServerImmediately(server: Server, webSockets?: WebSocketServer): Promise<void>;
@@ -0,0 +1,17 @@
1
+ /** Stops only this server's connections; active work is not drained on shutdown. */
2
+ export function closeHttpServerImmediately(server, webSockets) {
3
+ return new Promise((resolve, reject) => {
4
+ server.close((error) => {
5
+ if (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ resolve();
10
+ });
11
+ // Stop accepting first: a connection cannot arrive between the sweep and close.
12
+ server.closeAllConnections();
13
+ webSockets?.close();
14
+ for (const client of webSockets?.clients ?? [])
15
+ client.terminate();
16
+ });
17
+ }
@@ -0,0 +1,3 @@
1
+ export declare function createAggregateGate(maxActive: number, maxQueued: number): Readonly<{
2
+ run<T>(operation: () => Promise<T>, deadline: number, abortSignal?: AbortSignal): Promise<T>;
3
+ }>;
@@ -0,0 +1,87 @@
1
+ import { remainingTime, withinDeadline } from "./deadline.js";
2
+ import { PublicHttpError } from "./errors.js";
3
+ export function createAggregateGate(maxActive, maxQueued) {
4
+ let active = 0;
5
+ const queue = [];
6
+ const startQueued = () => {
7
+ while (active < maxActive && queue.length > 0) {
8
+ const waiter = queue.shift();
9
+ clearTimeout(waiter.timeout);
10
+ if (waiter.onAbort) {
11
+ waiter.abortSignal?.removeEventListener("abort", waiter.onAbort);
12
+ }
13
+ if (waiter.abortSignal?.aborted) {
14
+ waiter.reject(new PublicHttpError("web_request_aborted", "The web request was aborted."));
15
+ continue;
16
+ }
17
+ if (waiter.deadline <= Date.now()) {
18
+ waiter.reject(new PublicHttpError("web_request_timed_out", "The upstream web request timed out."));
19
+ continue;
20
+ }
21
+ active += 1;
22
+ let released = false;
23
+ waiter.resolve(() => {
24
+ if (released)
25
+ return;
26
+ released = true;
27
+ active -= 1;
28
+ startQueued();
29
+ });
30
+ }
31
+ };
32
+ const acquire = (deadline, abortSignal) => {
33
+ if (abortSignal?.aborted) {
34
+ return Promise.reject(new PublicHttpError("web_request_aborted", "The web request was aborted."));
35
+ }
36
+ if (active < maxActive) {
37
+ active += 1;
38
+ let released = false;
39
+ return Promise.resolve(() => {
40
+ if (released)
41
+ return;
42
+ released = true;
43
+ active -= 1;
44
+ startQueued();
45
+ });
46
+ }
47
+ if (queue.length >= maxQueued) {
48
+ return Promise.reject(new PublicHttpError("web_request_capacity_exceeded", "The web client is at its bounded request capacity."));
49
+ }
50
+ return new Promise((resolve, reject) => {
51
+ const waiter = {
52
+ resolve,
53
+ reject,
54
+ deadline,
55
+ ...(abortSignal ? { abortSignal } : {}),
56
+ };
57
+ const remove = () => {
58
+ const index = queue.indexOf(waiter);
59
+ if (index >= 0)
60
+ queue.splice(index, 1);
61
+ };
62
+ const fail = (error) => {
63
+ remove();
64
+ clearTimeout(waiter.timeout);
65
+ if (waiter.onAbort) {
66
+ abortSignal?.removeEventListener("abort", waiter.onAbort);
67
+ }
68
+ reject(error);
69
+ };
70
+ waiter.onAbort = () => fail(new PublicHttpError("web_request_aborted", "The web request was aborted."));
71
+ waiter.timeout = setTimeout(() => fail(new PublicHttpError("web_request_timed_out", "The upstream web request timed out.")), remainingTime(deadline));
72
+ waiter.timeout.unref?.();
73
+ abortSignal?.addEventListener("abort", waiter.onAbort, { once: true });
74
+ queue.push(waiter);
75
+ });
76
+ };
77
+ return Object.freeze({
78
+ async run(operation, deadline, abortSignal) {
79
+ const release = await acquire(deadline, abortSignal);
80
+ const rawWork = Promise.resolve().then(operation);
81
+ // A deadline rejects the visible operation promptly, but the capacity slot
82
+ // remains held until non-cancellable DNS or transport work actually settles.
83
+ void rawWork.then(release, release);
84
+ return await withinDeadline(rawWork, deadline, abortSignal);
85
+ },
86
+ });
87
+ }
@@ -0,0 +1,2 @@
1
+ export declare function remainingTime(deadline: number): number;
2
+ export declare function withinDeadline<T>(promise: Promise<T>, deadline: number, abortSignal?: AbortSignal): Promise<T>;
@@ -0,0 +1,29 @@
1
+ import { PublicHttpError } from "./errors.js";
2
+ export function remainingTime(deadline) {
3
+ const remaining = deadline - Date.now();
4
+ if (remaining <= 0) {
5
+ throw new PublicHttpError("web_request_timed_out", "The upstream web request timed out.");
6
+ }
7
+ return remaining;
8
+ }
9
+ export function withinDeadline(promise, deadline, abortSignal) {
10
+ if (abortSignal?.aborted) {
11
+ return Promise.reject(new PublicHttpError("web_request_aborted", "The web request was aborted."));
12
+ }
13
+ return new Promise((resolve, reject) => {
14
+ let settled = false;
15
+ const finish = (operation) => {
16
+ if (settled)
17
+ return;
18
+ settled = true;
19
+ clearTimeout(timeout);
20
+ abortSignal?.removeEventListener("abort", onAbort);
21
+ operation();
22
+ };
23
+ const onAbort = () => finish(() => reject(new PublicHttpError("web_request_aborted", "The web request was aborted.")));
24
+ const timeout = setTimeout(() => finish(() => reject(new PublicHttpError("web_request_timed_out", "The upstream web request timed out."))), remainingTime(deadline));
25
+ timeout.unref?.();
26
+ abortSignal?.addEventListener("abort", onAbort, { once: true });
27
+ promise.then((value) => finish(() => resolve(value)), (error) => finish(() => reject(error)));
28
+ });
29
+ }
@@ -0,0 +1,6 @@
1
+ export type PublicHttpErrorCode = "web_request_aborted" | "web_request_timed_out" | "web_request_capacity_exceeded" | "web_target_invalid" | "web_target_not_public" | "web_target_unresolvable" | "web_redirect_invalid" | "web_redirect_limit_exceeded" | "web_response_invalid";
2
+ export declare class PublicHttpError<Code extends string = PublicHttpErrorCode> extends Error {
3
+ readonly code: Code;
4
+ constructor(code: Code, message: string);
5
+ }
6
+ export declare function isPublicHttpError(error: unknown): error is PublicHttpError;
@@ -0,0 +1,11 @@
1
+ export class PublicHttpError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = "PublicHttpError";
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function isPublicHttpError(error) {
10
+ return error instanceof PublicHttpError;
11
+ }
@@ -0,0 +1,8 @@
1
+ export declare const PUBLIC_HTTP_LIMITS: Readonly<{
2
+ readonly httpConcurrency: 6;
3
+ readonly httpQueueLimit: 64;
4
+ readonly redirects: 3;
5
+ readonly responseBytes: number;
6
+ readonly requestTimeoutMs: 10000;
7
+ readonly responseHeaderBytes: number;
8
+ }>;
@@ -0,0 +1,8 @@
1
+ export const PUBLIC_HTTP_LIMITS = Object.freeze({
2
+ httpConcurrency: 6,
3
+ httpQueueLimit: 64,
4
+ redirects: 3,
5
+ responseBytes: 512 * 1024,
6
+ requestTimeoutMs: 10_000,
7
+ responseHeaderBytes: 32 * 1024,
8
+ });
@@ -0,0 +1,11 @@
1
+ export type PublicAddress = Readonly<{
2
+ address: string;
3
+ family: 4 | 6;
4
+ }>;
5
+ export type HostResolver = (hostname: string) => Promise<readonly PublicAddress[]>;
6
+ export declare function isPublicIpv4(address: string): boolean;
7
+ export declare function isPublicIpv6(address: string): boolean;
8
+ export declare function isPublicAddress(address: PublicAddress): boolean;
9
+ export declare function parsePublicHttpUrl(rawUrl: string): URL;
10
+ export declare const resolveHostAddresses: HostResolver;
11
+ export declare function resolvePublicTarget(url: URL, resolver?: HostResolver): Promise<PublicAddress>;