orbit-agent-runtime 0.8.0

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 (168) hide show
  1. package/CHANGELOG.md +750 -0
  2. package/LICENSE +201 -0
  3. package/README.md +492 -0
  4. package/README.zh-CN.md +389 -0
  5. package/benchmarks/README.md +24 -0
  6. package/benchmarks/gateway.mjs +68 -0
  7. package/benchmarks/pae.mjs +90 -0
  8. package/benchmarks/replay.mjs +51 -0
  9. package/benchmarks/run-all.mjs +24 -0
  10. package/benchmarks/wal.mjs +50 -0
  11. package/bin/orbit.mjs +523 -0
  12. package/dist/.tsbuildinfo +1 -0
  13. package/dist/demo-deepseek.d.ts +2 -0
  14. package/dist/demo-deepseek.d.ts.map +1 -0
  15. package/dist/demo-deepseek.js +66 -0
  16. package/dist/demo-deepseek.js.map +1 -0
  17. package/dist/demo-host.d.ts +2 -0
  18. package/dist/demo-host.d.ts.map +1 -0
  19. package/dist/demo-host.js +98 -0
  20. package/dist/demo-host.js.map +1 -0
  21. package/dist/demo-replay.d.ts +2 -0
  22. package/dist/demo-replay.d.ts.map +1 -0
  23. package/dist/demo-replay.js +68 -0
  24. package/dist/demo-replay.js.map +1 -0
  25. package/dist/src/core/orbitRuntimeHost.d.ts +349 -0
  26. package/dist/src/core/orbitRuntimeHost.d.ts.map +1 -0
  27. package/dist/src/core/orbitRuntimeHost.js +706 -0
  28. package/dist/src/core/orbitRuntimeHost.js.map +1 -0
  29. package/dist/src/index.d.ts +92 -0
  30. package/dist/src/index.d.ts.map +1 -0
  31. package/dist/src/index.js +226 -0
  32. package/dist/src/index.js.map +1 -0
  33. package/dist/test/audit_chain.test.d.ts +2 -0
  34. package/dist/test/audit_chain.test.d.ts.map +1 -0
  35. package/dist/test/audit_chain.test.js +283 -0
  36. package/dist/test/audit_chain.test.js.map +1 -0
  37. package/dist/test/channel_hub.test.d.ts +2 -0
  38. package/dist/test/channel_hub.test.d.ts.map +1 -0
  39. package/dist/test/channel_hub.test.js +66 -0
  40. package/dist/test/channel_hub.test.js.map +1 -0
  41. package/dist/test/cordis_adapter.test.d.ts +2 -0
  42. package/dist/test/cordis_adapter.test.d.ts.map +1 -0
  43. package/dist/test/cordis_adapter.test.js +280 -0
  44. package/dist/test/cordis_adapter.test.js.map +1 -0
  45. package/dist/test/cost_routing.test.d.ts +2 -0
  46. package/dist/test/cost_routing.test.d.ts.map +1 -0
  47. package/dist/test/cost_routing.test.js +31 -0
  48. package/dist/test/cost_routing.test.js.map +1 -0
  49. package/dist/test/domain_transaction.test.d.ts +2 -0
  50. package/dist/test/domain_transaction.test.d.ts.map +1 -0
  51. package/dist/test/domain_transaction.test.js +351 -0
  52. package/dist/test/domain_transaction.test.js.map +1 -0
  53. package/dist/test/file_channel.test.d.ts +2 -0
  54. package/dist/test/file_channel.test.d.ts.map +1 -0
  55. package/dist/test/file_channel.test.js +179 -0
  56. package/dist/test/file_channel.test.js.map +1 -0
  57. package/dist/test/gateway.test.d.ts +2 -0
  58. package/dist/test/gateway.test.d.ts.map +1 -0
  59. package/dist/test/gateway.test.js +548 -0
  60. package/dist/test/gateway.test.js.map +1 -0
  61. package/dist/test/governance_profile.test.d.ts +2 -0
  62. package/dist/test/governance_profile.test.d.ts.map +1 -0
  63. package/dist/test/governance_profile.test.js +214 -0
  64. package/dist/test/governance_profile.test.js.map +1 -0
  65. package/dist/test/governance_schema.test.d.ts +2 -0
  66. package/dist/test/governance_schema.test.d.ts.map +1 -0
  67. package/dist/test/governance_schema.test.js +200 -0
  68. package/dist/test/governance_schema.test.js.map +1 -0
  69. package/dist/test/host_integration.test.d.ts +2 -0
  70. package/dist/test/host_integration.test.d.ts.map +1 -0
  71. package/dist/test/host_integration.test.js +104 -0
  72. package/dist/test/host_integration.test.js.map +1 -0
  73. package/dist/test/host_journal_persistence.test.d.ts +2 -0
  74. package/dist/test/host_journal_persistence.test.d.ts.map +1 -0
  75. package/dist/test/host_journal_persistence.test.js +367 -0
  76. package/dist/test/host_journal_persistence.test.js.map +1 -0
  77. package/dist/test/impact_domain.test.d.ts +2 -0
  78. package/dist/test/impact_domain.test.d.ts.map +1 -0
  79. package/dist/test/impact_domain.test.js +48 -0
  80. package/dist/test/impact_domain.test.js.map +1 -0
  81. package/dist/test/injected_clock.test.d.ts +13 -0
  82. package/dist/test/injected_clock.test.d.ts.map +1 -0
  83. package/dist/test/injected_clock.test.js +200 -0
  84. package/dist/test/injected_clock.test.js.map +1 -0
  85. package/dist/test/isolation_domain.test.d.ts +2 -0
  86. package/dist/test/isolation_domain.test.d.ts.map +1 -0
  87. package/dist/test/isolation_domain.test.js +302 -0
  88. package/dist/test/isolation_domain.test.js.map +1 -0
  89. package/dist/test/journal_wal.test.d.ts +2 -0
  90. package/dist/test/journal_wal.test.d.ts.map +1 -0
  91. package/dist/test/journal_wal.test.js +622 -0
  92. package/dist/test/journal_wal.test.js.map +1 -0
  93. package/dist/test/mcp_adapter.test.d.ts +2 -0
  94. package/dist/test/mcp_adapter.test.d.ts.map +1 -0
  95. package/dist/test/mcp_adapter.test.js +440 -0
  96. package/dist/test/mcp_adapter.test.js.map +1 -0
  97. package/dist/test/openai_compat_channel.test.d.ts +2 -0
  98. package/dist/test/openai_compat_channel.test.d.ts.map +1 -0
  99. package/dist/test/openai_compat_channel.test.js +325 -0
  100. package/dist/test/openai_compat_channel.test.js.map +1 -0
  101. package/dist/test/openapi_adapter.test.d.ts +2 -0
  102. package/dist/test/openapi_adapter.test.d.ts.map +1 -0
  103. package/dist/test/openapi_adapter.test.js +270 -0
  104. package/dist/test/openapi_adapter.test.js.map +1 -0
  105. package/dist/test/orbit_cli.test.d.ts +2 -0
  106. package/dist/test/orbit_cli.test.d.ts.map +1 -0
  107. package/dist/test/orbit_cli.test.js +137 -0
  108. package/dist/test/orbit_cli.test.js.map +1 -0
  109. package/dist/test/pact_verifier.test.d.ts +2 -0
  110. package/dist/test/pact_verifier.test.d.ts.map +1 -0
  111. package/dist/test/pact_verifier.test.js +41 -0
  112. package/dist/test/pact_verifier.test.js.map +1 -0
  113. package/dist/test/pae_adapter.test.d.ts +2 -0
  114. package/dist/test/pae_adapter.test.d.ts.map +1 -0
  115. package/dist/test/pae_adapter.test.js +469 -0
  116. package/dist/test/pae_adapter.test.js.map +1 -0
  117. package/dist/test/plugin_sandbox_guard.test.d.ts +2 -0
  118. package/dist/test/plugin_sandbox_guard.test.d.ts.map +1 -0
  119. package/dist/test/plugin_sandbox_guard.test.js +57 -0
  120. package/dist/test/plugin_sandbox_guard.test.js.map +1 -0
  121. package/dist/test/rate_limit_behavior.test.d.ts +2 -0
  122. package/dist/test/rate_limit_behavior.test.d.ts.map +1 -0
  123. package/dist/test/rate_limit_behavior.test.js +85 -0
  124. package/dist/test/rate_limit_behavior.test.js.map +1 -0
  125. package/dist/test/replay_compat.test.d.ts +2 -0
  126. package/dist/test/replay_compat.test.d.ts.map +1 -0
  127. package/dist/test/replay_compat.test.js +1122 -0
  128. package/dist/test/replay_compat.test.js.map +1 -0
  129. package/dist/test/replay_engine.test.d.ts +2 -0
  130. package/dist/test/replay_engine.test.d.ts.map +1 -0
  131. package/dist/test/replay_engine.test.js +85 -0
  132. package/dist/test/replay_engine.test.js.map +1 -0
  133. package/dist/test/shell_channel.test.d.ts +2 -0
  134. package/dist/test/shell_channel.test.d.ts.map +1 -0
  135. package/dist/test/shell_channel.test.js +173 -0
  136. package/dist/test/shell_channel.test.js.map +1 -0
  137. package/dist/test/teardown_isolation.test.d.ts +10 -0
  138. package/dist/test/teardown_isolation.test.d.ts.map +1 -0
  139. package/dist/test/teardown_isolation.test.js +279 -0
  140. package/dist/test/teardown_isolation.test.js.map +1 -0
  141. package/dist/test/token_budget.test.d.ts +2 -0
  142. package/dist/test/token_budget.test.d.ts.map +1 -0
  143. package/dist/test/token_budget.test.js +113 -0
  144. package/dist/test/token_budget.test.js.map +1 -0
  145. package/dist/test/trace_journal.test.d.ts +2 -0
  146. package/dist/test/trace_journal.test.d.ts.map +1 -0
  147. package/dist/test/trace_journal.test.js +43 -0
  148. package/dist/test/trace_journal.test.js.map +1 -0
  149. package/dist/test/trace_journal_persistence.test.d.ts +2 -0
  150. package/dist/test/trace_journal_persistence.test.d.ts.map +1 -0
  151. package/dist/test/trace_journal_persistence.test.js +175 -0
  152. package/dist/test/trace_journal_persistence.test.js.map +1 -0
  153. package/dist/test/trace_persistence.test.d.ts +2 -0
  154. package/dist/test/trace_persistence.test.d.ts.map +1 -0
  155. package/dist/test/trace_persistence.test.js +216 -0
  156. package/dist/test/trace_persistence.test.js.map +1 -0
  157. package/dist/test/trip_protector.test.d.ts +2 -0
  158. package/dist/test/trip_protector.test.d.ts.map +1 -0
  159. package/dist/test/trip_protector.test.js +42 -0
  160. package/dist/test/trip_protector.test.js.map +1 -0
  161. package/examples/README.md +34 -0
  162. package/examples/cli-record-replay.mjs +74 -0
  163. package/examples/custom-channel.mjs +102 -0
  164. package/examples/js-pae-plugin.mjs +128 -0
  165. package/examples/mcp-adapter.mjs +102 -0
  166. package/package.json +60 -0
  167. package/src/core/orbitRuntimeHost.ts +853 -0
  168. package/src/index.ts +256 -0
package/src/index.ts ADDED
@@ -0,0 +1,256 @@
1
+ /** Public API surface of Orbit Agent Runtime. */
2
+
3
+ export { OrbitRuntimeHost } from "./core/orbitRuntimeHost";
4
+ export type { OrbitRuntimeHostOptions } from "./core/orbitRuntimeHost";
5
+ export { ChannelHub } from "@orbit/core-hub";
6
+ export type { CapabilityGate } from "@orbit/core-hub";
7
+ export type { IChannelProvider } from "@orbit/core-hub";
8
+ export { MemoryKvChannel } from "@orbit/core-hub";
9
+ export { LlmMockChannel } from "@orbit/core-hub";
10
+ export { OpenAICompatChannel, DeepSeekChannel, LlmChannelFaultError, isRetryableLlmFault } from "@orbit/core-hub";
11
+ export type {
12
+ OpenAICompatChannelConfig,
13
+ DeepSeekChannelConfig,
14
+ ChatMessage,
15
+ ChatRoundOptions,
16
+ LlmFaultKind
17
+ } from "@orbit/core-hub";
18
+ export { FileChannel } from "@orbit/core-hub";
19
+ export type { FileChannelConfig, FileStatInfo } from "@orbit/core-hub";
20
+ export { ShellChannel } from "@orbit/core-hub";
21
+ export type { ShellChannelConfig, ShellExecResult } from "@orbit/core-hub";
22
+ export { PluginPactVerifier } from "@orbit/core-hub";
23
+ export { TripProtector } from "@orbit/core-hub";
24
+ export type { TripSnapshot } from "@orbit/core-hub";
25
+ export { tokenBudgetConfigForProfile, tripThresholdForProfile } from "@orbit/core-hub";
26
+ export { PluginSandboxGuard } from "@orbit/core-hub";
27
+ export { TraceJournal } from "@orbit/core-hub";
28
+ export { AgentSandbox } from "@orbit/sandbox-runtime";
29
+ export { SandboxPool } from "@orbit/sandbox-runtime";
30
+
31
+ // Deliberately NOT exported: SYSTEM_RNG / SYSTEM_CLOCK read Math.random() and
32
+ // Date.now() directly (see core-hub/src/replay/injectors.ts). Re-exporting them
33
+ // from this facade hands callers a way to feed un-injected entropy into a
34
+ // recorded call, which silently breaks determinism — the journal would differ
35
+ // between two recordings of the same input. SeededRng / FixedClock are the
36
+ // supported, reproducible sources.
37
+ export { SeededRng, FixedClock } from "@orbit/core-hub";
38
+ export { RecordJournal } from "@orbit/core-hub";
39
+ export type { ReplayCallRecord } from "@orbit/core-hub";
40
+ export { ReplayEngine, ReplayDriftError } from "@orbit/core-hub";
41
+ export type { ReconcileReport } from "@orbit/core-hub";
42
+ export { saveRecordJournal, loadRecordJournal, TraceFileInvalidError } from "@orbit/core-hub";
43
+ export type { ChannelRuntimeMeta } from "@orbit/core-hub";
44
+ // W30: audit hash chain — anti-tamper audit trail primitives.
45
+ export {
46
+ verifyAuditChain,
47
+ chainFieldsOf,
48
+ firstChainHash,
49
+ auditChainHash,
50
+ chainTailOf,
51
+ stableJson,
52
+ AUDIT_GENESIS_HASH
53
+ } from "@orbit/core-hub";
54
+ export type { AuditChainReport } from "@orbit/core-hub";
55
+
56
+ // W27: journal durability — append-only WAL substrate, persisted journals and
57
+ // the explicit checkpoint/export pair for the audit journal.
58
+ export {
59
+ walAppend,
60
+ walCompact,
61
+ walLineCount,
62
+ walRecover,
63
+ walRecoverSync,
64
+ walReset,
65
+ WalFileInvalidError
66
+ } from "@orbit/core-hub";
67
+ export { PersistedRecordJournal } from "@orbit/core-hub";
68
+ export { PersistedTraceJournal } from "@orbit/core-hub";
69
+ export { saveTraceJournal, loadTraceJournal } from "@orbit/core-hub";
70
+
71
+ // W7: unified gateway entry (determinism boundary) + its decision types.
72
+ // GatewayDecision / RunVersionFingerprint are re-exported from types/orbitDomain.
73
+ export { CapabilityGateway } from "@orbit/core-hub";
74
+ export type { GatewayInvokeParams } from "@orbit/core-hub";
75
+ export { RunFingerprintDriftError, DecisionDriftError } from "@orbit/core-hub";
76
+ export type { GatewayCheckers } from "@orbit/core-hub";
77
+ export type { GatewayCallRecord } from "@orbit/core-hub";
78
+
79
+ // W8: pure-function token budget + context compressor.
80
+ export { TokenBudgetEngine, DEFAULT_TOKEN_BUDGET_CONFIG, compressPayload, decompressPayload, isCompressedPayload, packSnapshot } from "@orbit/core-hub";
81
+ // W11: pure-function rate limiter + three-mode behavior collector.
82
+ export { RateLimiter, DEFAULT_RATE_LIMIT_CONFIG } from "@orbit/core-hub";
83
+ export type { RateLimitConfig } from "@orbit/core-hub";
84
+ export { BehaviorCollector } from "@orbit/core-hub";
85
+ export type { CollectorPhase } from "@orbit/core-hub";
86
+ // BehaviorNote is exported via `export * from "@orbit/infra-common"` below.
87
+ export type {
88
+ TokenBudgetConfig,
89
+ CompressionLevel,
90
+ BudgetStrategy,
91
+ CompressResult,
92
+ BudgetDecision,
93
+ CompressedPayload
94
+ } from "@orbit/core-hub";
95
+
96
+ // W15: PAE — the plugin adaptation engine (foreign runtimes as channels).
97
+ export { PaeAdapterRegistry } from "@orbit/pae-engine";
98
+ export type { PaeToolBinding } from "@orbit/pae-engine";
99
+ export { PaeChannel } from "@orbit/pae-engine";
100
+ export { JsPaeAdapter } from "@orbit/pae-engine";
101
+ export type { JsPaeAdapterConfig, JsToolSpec } from "@orbit/pae-engine";
102
+ // W16: MCP — the first adapter family that crosses a process boundary.
103
+ export { McpPaeAdapter, MCP_DEFAULT_FIDELITY_NOTE } from "@orbit/pae-engine";
104
+ export type { McpPaeAdapterConfig, McpToolOverride } from "@orbit/pae-engine";
105
+ export { InMemoryMcpTransport, StdioMcpTransport, unwrapResponse } from "@orbit/pae-engine";
106
+ export type { IMcpTransport, McpRequestHandler, StdioMcpTransportConfig } from "@orbit/pae-engine";
107
+ export {
108
+ MCP_PROTOCOL_VERSION,
109
+ decodeJsonRpc,
110
+ encodeJsonRpc,
111
+ isJsonRpcResponse,
112
+ isRemoteToolError,
113
+ jsonRpcRemoteErrorOf,
114
+ normaliseToolResult,
115
+ parseToolList
116
+ } from "@orbit/pae-engine";
117
+ export type {
118
+ JsonRpcErrorObject,
119
+ JsonRpcMessage,
120
+ JsonRpcNotification,
121
+ JsonRpcRequest,
122
+ JsonRpcResponse,
123
+ McpToolDefinition,
124
+ NormalisedToolResult
125
+ } from "@orbit/pae-engine";
126
+ // W17: OpenAPI — maps a foreign REST API onto the capability contract.
127
+ export { OpenApiPaeAdapter, OPENAPI_DEFAULT_FIDELITY_NOTE } from "@orbit/pae-engine";
128
+ export type { OpenApiPaeAdapterConfig, OpenApiOperationOverride } from "@orbit/pae-engine";
129
+ export { InMemoryHttpTransport, FetchHttpTransport } from "@orbit/pae-engine";
130
+ export type {
131
+ IHttpTransport,
132
+ HttpRequest,
133
+ HttpResponse,
134
+ HttpHandler,
135
+ FetchHttpTransportOptions
136
+ } from "@orbit/pae-engine";
137
+ export { parseOpenApiDocument, resolveDocumentBaseUrl, buildHttpRequest, normaliseHttpResponse, isHttpSuccess, bodyTail } from "@orbit/pae-engine";
138
+ export type {
139
+ OpenApiOperation,
140
+ OpenApiParameter,
141
+ ParsedOpenApiDocument,
142
+ NormalisedHttpResponse
143
+ } from "@orbit/pae-engine";
144
+ // W18: Cordis — a host-defined protocol to an isolated plugin instance (L2).
145
+ export { CordisPaeAdapter, CORDIS_DEFAULT_FIDELITY_NOTE } from "@orbit/pae-engine";
146
+ export type { CordisPaeAdapterConfig, CordisToolOverride } from "@orbit/pae-engine";
147
+ export { InMemoryCordisTransport, ChildProcessCordisTransport, unwrapCordisResponse } from "@orbit/pae-engine";
148
+ export type {
149
+ ICordisTransport,
150
+ CordisRequestHandler,
151
+ ChildProcessCordisTransportConfig
152
+ } from "@orbit/pae-engine";
153
+ export {
154
+ CORDIS_PROTOCOL_VERSION,
155
+ decodeFrame,
156
+ encodeFrame,
157
+ isCordisResponse,
158
+ normaliseCordisToolResult,
159
+ parseCordisToolList,
160
+ cordisRemoteErrorOf,
161
+ // Back-compatible alias: `remoteErrorOf` was the Cordis-specific helper
162
+ // before the protocol families were given qualified names at the package
163
+ // boundary. Kept so 0.2.x consumers do not break on the rename.
164
+ cordisRemoteErrorOf as remoteErrorOf
165
+ } from "@orbit/pae-engine";
166
+ export type {
167
+ CordisErrorObject,
168
+ CordisRequest,
169
+ CordisResponse,
170
+ CordisToolDefinition,
171
+ NormalisedCordisResult
172
+ } from "@orbit/pae-engine";
173
+ // W19: isolation domains — graph-driven L2 subprocess allocation (VISION 2.3).
174
+ export {
175
+ allocateDomains,
176
+ impactClosureSizes
177
+ } from "@orbit/sandbox-runtime";
178
+ export type {
179
+ AllocateOptions,
180
+ DomainIsolationLevel,
181
+ IsolationDomainPlan,
182
+ IsolationDomainSpec
183
+ } from "@orbit/sandbox-runtime";
184
+ export { IsolationDomain } from "@orbit/sandbox-runtime";
185
+ export type { DomainHostInfo, DomainInvokeCtx, IsolationDomainConfig } from "@orbit/sandbox-runtime";
186
+ export { IsolationDomainManager } from "@orbit/sandbox-runtime";
187
+ export type { DomainTransportFactory, IsolationDomainManagerOptions } from "@orbit/sandbox-runtime";
188
+ export { DomainChannel } from "@orbit/sandbox-runtime";
189
+ export { InMemoryDomainTransport, ChildProcessDomainTransport, unwrapDomainResponse } from "@orbit/sandbox-runtime";
190
+ export type {
191
+ IDomainTransport,
192
+ DomainRequestHandler,
193
+ ChildProcessDomainTransportConfig
194
+ } from "@orbit/sandbox-runtime";
195
+ export {
196
+ DOMAIN_PROTOCOL_VERSION,
197
+ decodeDomainFrame,
198
+ encodeDomainFrame,
199
+ isDomainResponse,
200
+ normaliseDomainResult,
201
+ parseUnitList,
202
+ domainRemoteErrorOf
203
+ } from "@orbit/sandbox-runtime";
204
+ export type {
205
+ DomainErrorObject,
206
+ DomainRequest,
207
+ DomainResponse,
208
+ DomainToolDefinition,
209
+ DomainUnitDefinition,
210
+ NormalisedDomainResult
211
+ } from "@orbit/sandbox-runtime";
212
+ export { DOMAIN_HOST_SHIM, DOMAIN_HOST_VERSION } from "@orbit/sandbox-runtime";
213
+ export { DomainRemoteError, DomainUnitMissingError } from "@orbit/sandbox-runtime";
214
+ // W20: cross-domain transactions — decision + execution + result + audit.
215
+ export {
216
+ beginTransaction,
217
+ markExecuted,
218
+ newTxnId,
219
+ reconcileTransactions,
220
+ settleTransaction,
221
+ ledgerHash,
222
+ stableHash
223
+ } from "@orbit/sandbox-runtime";
224
+ export type {
225
+ BeginTransactionInput,
226
+ DomainPairBalance,
227
+ DomainReconciliation,
228
+ DomainTransaction,
229
+ DomainTxnDecision,
230
+ DomainTxnState,
231
+ SettlementOutcome
232
+ } from "@orbit/sandbox-runtime";
233
+ export {
234
+ PaeAdapterRejectError,
235
+ PaeToolMissingError,
236
+ PaeFidelityRejectError,
237
+ PaeRemoteError,
238
+ FIDELITY_RANK
239
+ } from "@orbit/pae-engine";
240
+ export type {
241
+ IPaeAdapter,
242
+ PaeAdapterKind,
243
+ PaeAdapterMeta,
244
+ PaeFidelity,
245
+ PaeInvokeCtx,
246
+ PaeIsolationLevel,
247
+ PaeToolDescriptor
248
+ } from "@orbit/pae-engine";
249
+
250
+ export { ImpactDomainGraph } from "@orbit/sandbox-runtime";
251
+ export { CostRouter } from "@orbit/core-hub";
252
+ export type { ChannelCostMeta } from "@orbit/core-hub";
253
+
254
+ export { digestInputs } from "@orbit/infra-common";
255
+
256
+ export * from "@orbit/infra-common";