@botbotgo/runtime 1.0.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 (313) hide show
  1. package/.github/workflows/ci.yml +46 -0
  2. package/.github/workflows/release.yml +79 -0
  3. package/README.md +71 -0
  4. package/config/examples/memory.yaml +39 -0
  5. package/config/examples/model.yaml +21 -0
  6. package/config/examples/runtime.yaml +44 -0
  7. package/config/examples/skills.yaml +8 -0
  8. package/config/examples/tool.yaml +16 -0
  9. package/dist/config/index.d.ts +7 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +4 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/loader.d.ts +41 -0
  14. package/dist/config/loader.d.ts.map +1 -0
  15. package/dist/config/loader.js +140 -0
  16. package/dist/config/loader.js.map +1 -0
  17. package/dist/config/resolveRuntimeConfig.d.ts +83 -0
  18. package/dist/config/resolveRuntimeConfig.d.ts.map +1 -0
  19. package/dist/config/resolveRuntimeConfig.js +85 -0
  20. package/dist/config/resolveRuntimeConfig.js.map +1 -0
  21. package/dist/config/resources.d.ts +112 -0
  22. package/dist/config/resources.d.ts.map +1 -0
  23. package/dist/config/resources.js +20 -0
  24. package/dist/config/resources.js.map +1 -0
  25. package/dist/config/runtimeConfigLoader.d.ts +28 -0
  26. package/dist/config/runtimeConfigLoader.d.ts.map +1 -0
  27. package/dist/config/runtimeConfigLoader.js +38 -0
  28. package/dist/config/runtimeConfigLoader.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +5 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/runtime/agentMiddleware.d.ts +3 -0
  34. package/dist/runtime/agentMiddleware.d.ts.map +1 -0
  35. package/dist/runtime/agentMiddleware.js +2 -0
  36. package/dist/runtime/agentMiddleware.js.map +1 -0
  37. package/dist/runtime/bootstrap/runtimeFactory.d.ts +7 -0
  38. package/dist/runtime/bootstrap/runtimeFactory.d.ts.map +1 -0
  39. package/dist/runtime/bootstrap/runtimeFactory.js +139 -0
  40. package/dist/runtime/bootstrap/runtimeFactory.js.map +1 -0
  41. package/dist/runtime/bootstrap/runtimeModuleInitializer.d.ts +5 -0
  42. package/dist/runtime/bootstrap/runtimeModuleInitializer.d.ts.map +1 -0
  43. package/dist/runtime/bootstrap/runtimeModuleInitializer.js +32 -0
  44. package/dist/runtime/bootstrap/runtimeModuleInitializer.js.map +1 -0
  45. package/dist/runtime/context/agentContext.d.ts +5 -0
  46. package/dist/runtime/context/agentContext.d.ts.map +1 -0
  47. package/dist/runtime/context/agentContext.js +19 -0
  48. package/dist/runtime/context/agentContext.js.map +1 -0
  49. package/dist/runtime/context/globalContext.d.ts +19 -0
  50. package/dist/runtime/context/globalContext.d.ts.map +1 -0
  51. package/dist/runtime/context/globalContext.js +47 -0
  52. package/dist/runtime/context/globalContext.js.map +1 -0
  53. package/dist/runtime/events/eventPublisher.d.ts +15 -0
  54. package/dist/runtime/events/eventPublisher.d.ts.map +1 -0
  55. package/dist/runtime/events/eventPublisher.js +23 -0
  56. package/dist/runtime/events/eventPublisher.js.map +1 -0
  57. package/dist/runtime/execution/agentRunExecutor.d.ts +38 -0
  58. package/dist/runtime/execution/agentRunExecutor.d.ts.map +1 -0
  59. package/dist/runtime/execution/agentRunExecutor.js +378 -0
  60. package/dist/runtime/execution/agentRunExecutor.js.map +1 -0
  61. package/dist/runtime/execution/agentRunExecutor.types.d.ts +37 -0
  62. package/dist/runtime/execution/agentRunExecutor.types.d.ts.map +1 -0
  63. package/dist/runtime/execution/agentRunExecutor.types.js +2 -0
  64. package/dist/runtime/execution/agentRunExecutor.types.js.map +1 -0
  65. package/dist/runtime/execution/agentRunProgress.d.ts +8 -0
  66. package/dist/runtime/execution/agentRunProgress.d.ts.map +1 -0
  67. package/dist/runtime/execution/agentRunProgress.js +46 -0
  68. package/dist/runtime/execution/agentRunProgress.js.map +1 -0
  69. package/dist/runtime/execution/agentRunState.d.ts +44 -0
  70. package/dist/runtime/execution/agentRunState.d.ts.map +1 -0
  71. package/dist/runtime/execution/agentRunState.js +17 -0
  72. package/dist/runtime/execution/agentRunState.js.map +1 -0
  73. package/dist/runtime/execution/policies/runCompletionPolicy.d.ts +5 -0
  74. package/dist/runtime/execution/policies/runCompletionPolicy.d.ts.map +1 -0
  75. package/dist/runtime/execution/policies/runCompletionPolicy.js +30 -0
  76. package/dist/runtime/execution/policies/runCompletionPolicy.js.map +1 -0
  77. package/dist/runtime/execution/policies/runErrorPolicy.d.ts +7 -0
  78. package/dist/runtime/execution/policies/runErrorPolicy.d.ts.map +1 -0
  79. package/dist/runtime/execution/policies/runErrorPolicy.js +40 -0
  80. package/dist/runtime/execution/policies/runErrorPolicy.js.map +1 -0
  81. package/dist/runtime/execution/policies/runPromptBuilder.d.ts +10 -0
  82. package/dist/runtime/execution/policies/runPromptBuilder.d.ts.map +1 -0
  83. package/dist/runtime/execution/policies/runPromptBuilder.js +34 -0
  84. package/dist/runtime/execution/policies/runPromptBuilder.js.map +1 -0
  85. package/dist/runtime/execution/policies/runSummaryFormatter.d.ts +6 -0
  86. package/dist/runtime/execution/policies/runSummaryFormatter.d.ts.map +1 -0
  87. package/dist/runtime/execution/policies/runSummaryFormatter.js +47 -0
  88. package/dist/runtime/execution/policies/runSummaryFormatter.js.map +1 -0
  89. package/dist/runtime/execution/policies/runtimeDelay.d.ts +4 -0
  90. package/dist/runtime/execution/policies/runtimeDelay.d.ts.map +1 -0
  91. package/dist/runtime/execution/policies/runtimeDelay.js +6 -0
  92. package/dist/runtime/execution/policies/runtimeDelay.js.map +1 -0
  93. package/dist/runtime/execution/policies/toolConfigReader.d.ts +8 -0
  94. package/dist/runtime/execution/policies/toolConfigReader.d.ts.map +1 -0
  95. package/dist/runtime/execution/policies/toolConfigReader.js +91 -0
  96. package/dist/runtime/execution/policies/toolConfigReader.js.map +1 -0
  97. package/dist/runtime/human-loop/consoleHumanLoop.d.ts +21 -0
  98. package/dist/runtime/human-loop/consoleHumanLoop.d.ts.map +1 -0
  99. package/dist/runtime/human-loop/consoleHumanLoop.js +102 -0
  100. package/dist/runtime/human-loop/consoleHumanLoop.js.map +1 -0
  101. package/dist/runtime/human-loop/humanLoop.d.ts +44 -0
  102. package/dist/runtime/human-loop/humanLoop.d.ts.map +1 -0
  103. package/dist/runtime/human-loop/humanLoop.js +36 -0
  104. package/dist/runtime/human-loop/humanLoop.js.map +1 -0
  105. package/dist/runtime/index.d.ts +10 -0
  106. package/dist/runtime/index.d.ts.map +1 -0
  107. package/dist/runtime/index.js +6 -0
  108. package/dist/runtime/index.js.map +1 -0
  109. package/dist/runtime/middleware/agentToolMiddleware.d.ts +30 -0
  110. package/dist/runtime/middleware/agentToolMiddleware.d.ts.map +1 -0
  111. package/dist/runtime/middleware/agentToolMiddleware.js +259 -0
  112. package/dist/runtime/middleware/agentToolMiddleware.js.map +1 -0
  113. package/dist/runtime/middleware/commandPolicy.d.ts +8 -0
  114. package/dist/runtime/middleware/commandPolicy.d.ts.map +1 -0
  115. package/dist/runtime/middleware/commandPolicy.js +55 -0
  116. package/dist/runtime/middleware/commandPolicy.js.map +1 -0
  117. package/dist/runtime/middleware/frameworkPrompt.d.ts +4 -0
  118. package/dist/runtime/middleware/frameworkPrompt.d.ts.map +1 -0
  119. package/dist/runtime/middleware/frameworkPrompt.js +44 -0
  120. package/dist/runtime/middleware/frameworkPrompt.js.map +1 -0
  121. package/dist/runtime/middleware/index.d.ts +4 -0
  122. package/dist/runtime/middleware/index.d.ts.map +1 -0
  123. package/dist/runtime/middleware/index.js +3 -0
  124. package/dist/runtime/middleware/index.js.map +1 -0
  125. package/dist/runtime/middleware/skillPathMap.d.ts +3 -0
  126. package/dist/runtime/middleware/skillPathMap.d.ts.map +1 -0
  127. package/dist/runtime/middleware/skillPathMap.js +44 -0
  128. package/dist/runtime/middleware/skillPathMap.js.map +1 -0
  129. package/dist/runtime/middleware/toolArgsNormalizer.d.ts +21 -0
  130. package/dist/runtime/middleware/toolArgsNormalizer.d.ts.map +1 -0
  131. package/dist/runtime/middleware/toolArgsNormalizer.js +227 -0
  132. package/dist/runtime/middleware/toolArgsNormalizer.js.map +1 -0
  133. package/dist/runtime/middleware/toolCallGuard.d.ts +8 -0
  134. package/dist/runtime/middleware/toolCallGuard.d.ts.map +1 -0
  135. package/dist/runtime/middleware/toolCallGuard.js +60 -0
  136. package/dist/runtime/middleware/toolCallGuard.js.map +1 -0
  137. package/dist/runtime/middleware/toolFsHandlers.d.ts +12 -0
  138. package/dist/runtime/middleware/toolFsHandlers.d.ts.map +1 -0
  139. package/dist/runtime/middleware/toolFsHandlers.js +79 -0
  140. package/dist/runtime/middleware/toolFsHandlers.js.map +1 -0
  141. package/dist/runtime/middleware/toolRequestParser.d.ts +14 -0
  142. package/dist/runtime/middleware/toolRequestParser.d.ts.map +1 -0
  143. package/dist/runtime/middleware/toolRequestParser.js +72 -0
  144. package/dist/runtime/middleware/toolRequestParser.js.map +1 -0
  145. package/dist/runtime/middleware/types.d.ts +87 -0
  146. package/dist/runtime/middleware/types.d.ts.map +1 -0
  147. package/dist/runtime/middleware/types.js +3 -0
  148. package/dist/runtime/middleware/types.js.map +1 -0
  149. package/dist/runtime/providers/backendResolver.d.ts +26 -0
  150. package/dist/runtime/providers/backendResolver.d.ts.map +1 -0
  151. package/dist/runtime/providers/backendResolver.js +73 -0
  152. package/dist/runtime/providers/backendResolver.js.map +1 -0
  153. package/dist/runtime/providers/index.d.ts +14 -0
  154. package/dist/runtime/providers/index.d.ts.map +1 -0
  155. package/dist/runtime/providers/index.js +10 -0
  156. package/dist/runtime/providers/index.js.map +1 -0
  157. package/dist/runtime/providers/langchainRuntime.d.ts +11 -0
  158. package/dist/runtime/providers/langchainRuntime.d.ts.map +1 -0
  159. package/dist/runtime/providers/langchainRuntime.js +45 -0
  160. package/dist/runtime/providers/langchainRuntime.js.map +1 -0
  161. package/dist/runtime/providers/localShellBackend.d.ts +10 -0
  162. package/dist/runtime/providers/localShellBackend.d.ts.map +1 -0
  163. package/dist/runtime/providers/localShellBackend.js +23 -0
  164. package/dist/runtime/providers/localShellBackend.js.map +1 -0
  165. package/dist/runtime/providers/openaiDeepAgent.d.ts +9 -0
  166. package/dist/runtime/providers/openaiDeepAgent.d.ts.map +1 -0
  167. package/dist/runtime/providers/openaiDeepAgent.js +7 -0
  168. package/dist/runtime/providers/openaiDeepAgent.js.map +1 -0
  169. package/dist/runtime/providers/openaiLocalAgent.d.ts +17 -0
  170. package/dist/runtime/providers/openaiLocalAgent.d.ts.map +1 -0
  171. package/dist/runtime/providers/openaiLocalAgent.js +26 -0
  172. package/dist/runtime/providers/openaiLocalAgent.js.map +1 -0
  173. package/dist/runtime/providers/openaiLocalAgentFactory.d.ts +36 -0
  174. package/dist/runtime/providers/openaiLocalAgentFactory.d.ts.map +1 -0
  175. package/dist/runtime/providers/openaiLocalAgentFactory.js +139 -0
  176. package/dist/runtime/providers/openaiLocalAgentFactory.js.map +1 -0
  177. package/dist/runtime/providers/shared/agentProbe.d.ts +4 -0
  178. package/dist/runtime/providers/shared/agentProbe.d.ts.map +1 -0
  179. package/dist/runtime/providers/shared/agentProbe.js +17 -0
  180. package/dist/runtime/providers/shared/agentProbe.js.map +1 -0
  181. package/dist/runtime/providers/shared/moduleFallback.d.ts +2 -0
  182. package/dist/runtime/providers/shared/moduleFallback.d.ts.map +1 -0
  183. package/dist/runtime/providers/shared/moduleFallback.js +34 -0
  184. package/dist/runtime/providers/shared/moduleFallback.js.map +1 -0
  185. package/dist/runtime/providers/shared/resourceCloser.d.ts +6 -0
  186. package/dist/runtime/providers/shared/resourceCloser.d.ts.map +1 -0
  187. package/dist/runtime/providers/shared/resourceCloser.js +30 -0
  188. package/dist/runtime/providers/shared/resourceCloser.js.map +1 -0
  189. package/dist/runtime/runtimeService.d.ts +109 -0
  190. package/dist/runtime/runtimeService.d.ts.map +1 -0
  191. package/dist/runtime/runtimeService.js +90 -0
  192. package/dist/runtime/runtimeService.js.map +1 -0
  193. package/dist/runtime/stream/agentMessages.d.ts +40 -0
  194. package/dist/runtime/stream/agentMessages.d.ts.map +1 -0
  195. package/dist/runtime/stream/agentMessages.js +44 -0
  196. package/dist/runtime/stream/agentMessages.js.map +1 -0
  197. package/dist/runtime/stream/agentStream.d.ts +31 -0
  198. package/dist/runtime/stream/agentStream.d.ts.map +1 -0
  199. package/dist/runtime/stream/agentStream.js +106 -0
  200. package/dist/runtime/stream/agentStream.js.map +1 -0
  201. package/dist/runtime/stream/messageSummary.d.ts +20 -0
  202. package/dist/runtime/stream/messageSummary.d.ts.map +1 -0
  203. package/dist/runtime/stream/messageSummary.js +150 -0
  204. package/dist/runtime/stream/messageSummary.js.map +1 -0
  205. package/dist/runtime/stream/runArtifacts.d.ts +9 -0
  206. package/dist/runtime/stream/runArtifacts.d.ts.map +1 -0
  207. package/dist/runtime/stream/runArtifacts.js +48 -0
  208. package/dist/runtime/stream/runArtifacts.js.map +1 -0
  209. package/dist/state/index.d.ts +7 -0
  210. package/dist/state/index.d.ts.map +1 -0
  211. package/dist/state/index.js +4 -0
  212. package/dist/state/index.js.map +1 -0
  213. package/dist/state/runState.d.ts +36 -0
  214. package/dist/state/runState.d.ts.map +1 -0
  215. package/dist/state/runState.js +51 -0
  216. package/dist/state/runState.js.map +1 -0
  217. package/dist/state/todos.d.ts +19 -0
  218. package/dist/state/todos.d.ts.map +1 -0
  219. package/dist/state/todos.js +45 -0
  220. package/dist/state/todos.js.map +1 -0
  221. package/dist/state/workspaceRunSession.d.ts +32 -0
  222. package/dist/state/workspaceRunSession.d.ts.map +1 -0
  223. package/dist/state/workspaceRunSession.js +67 -0
  224. package/dist/state/workspaceRunSession.js.map +1 -0
  225. package/dist/state/workspaceState.d.ts +94 -0
  226. package/dist/state/workspaceState.d.ts.map +1 -0
  227. package/dist/state/workspaceState.js +119 -0
  228. package/dist/state/workspaceState.js.map +1 -0
  229. package/dist/types.d.ts +2 -0
  230. package/dist/types.d.ts.map +1 -0
  231. package/dist/types.js +2 -0
  232. package/dist/types.js.map +1 -0
  233. package/example/.tsbuildinfo +1 -0
  234. package/example/build/.tsbuildinfo +1 -0
  235. package/example/config/memory.yaml +35 -0
  236. package/example/config/model.yaml +14 -0
  237. package/example/config/runtime.yaml +46 -0
  238. package/example/config/tool.yaml +24 -0
  239. package/example/index.ts +159 -0
  240. package/example/package-lock.json +1396 -0
  241. package/example/package.json +26 -0
  242. package/example/serve-output.mjs +52 -0
  243. package/example/tsconfig.json +19 -0
  244. package/package.json +73 -0
  245. package/scripts/resolve-deps.js +40 -0
  246. package/src/config/index.ts +29 -0
  247. package/src/config/loader.ts +174 -0
  248. package/src/config/resolveRuntimeConfig.ts +160 -0
  249. package/src/config/resources.ts +152 -0
  250. package/src/config/runtimeConfigLoader.ts +68 -0
  251. package/src/external-modules.d.ts +20 -0
  252. package/src/index.ts +36 -0
  253. package/src/runtime/agentMiddleware.ts +6 -0
  254. package/src/runtime/bootstrap/runtimeFactory.ts +212 -0
  255. package/src/runtime/bootstrap/runtimeModuleInitializer.ts +34 -0
  256. package/src/runtime/context/agentContext.ts +24 -0
  257. package/src/runtime/context/globalContext.ts +70 -0
  258. package/src/runtime/events/eventPublisher.ts +45 -0
  259. package/src/runtime/execution/agentRunExecutor.ts +499 -0
  260. package/src/runtime/execution/agentRunExecutor.types.ts +39 -0
  261. package/src/runtime/execution/agentRunProgress.ts +67 -0
  262. package/src/runtime/execution/agentRunState.ts +66 -0
  263. package/src/runtime/execution/policies/runCompletionPolicy.ts +30 -0
  264. package/src/runtime/execution/policies/runErrorPolicy.ts +50 -0
  265. package/src/runtime/execution/policies/runPromptBuilder.ts +39 -0
  266. package/src/runtime/execution/policies/runSummaryFormatter.ts +57 -0
  267. package/src/runtime/execution/policies/runtimeDelay.ts +5 -0
  268. package/src/runtime/execution/policies/toolConfigReader.ts +107 -0
  269. package/src/runtime/human-loop/consoleHumanLoop.ts +113 -0
  270. package/src/runtime/human-loop/humanLoop.ts +90 -0
  271. package/src/runtime/index.ts +36 -0
  272. package/src/runtime/middleware/agentToolMiddleware.ts +329 -0
  273. package/src/runtime/middleware/commandPolicy.ts +65 -0
  274. package/src/runtime/middleware/frameworkPrompt.ts +51 -0
  275. package/src/runtime/middleware/index.ts +7 -0
  276. package/src/runtime/middleware/skillPathMap.ts +49 -0
  277. package/src/runtime/middleware/toolArgsNormalizer.ts +277 -0
  278. package/src/runtime/middleware/toolCallGuard.ts +73 -0
  279. package/src/runtime/middleware/toolFsHandlers.ts +94 -0
  280. package/src/runtime/middleware/toolRequestParser.ts +84 -0
  281. package/src/runtime/middleware/types.ts +91 -0
  282. package/src/runtime/providers/backendResolver.ts +127 -0
  283. package/src/runtime/providers/index.ts +19 -0
  284. package/src/runtime/providers/langchainRuntime.ts +67 -0
  285. package/src/runtime/providers/localShellBackend.ts +54 -0
  286. package/src/runtime/providers/openaiDeepAgent.ts +17 -0
  287. package/src/runtime/providers/openaiLocalAgent.ts +35 -0
  288. package/src/runtime/providers/openaiLocalAgentFactory.ts +185 -0
  289. package/src/runtime/providers/shared/agentProbe.ts +24 -0
  290. package/src/runtime/providers/shared/moduleFallback.ts +41 -0
  291. package/src/runtime/providers/shared/resourceCloser.ts +30 -0
  292. package/src/runtime/runtimeService.ts +205 -0
  293. package/src/runtime/stream/agentMessages.ts +72 -0
  294. package/src/runtime/stream/agentStream.ts +168 -0
  295. package/src/runtime/stream/messageSummary.ts +164 -0
  296. package/src/runtime/stream/runArtifacts.ts +72 -0
  297. package/src/state/index.ts +19 -0
  298. package/src/state/runState.ts +84 -0
  299. package/src/state/todos.ts +59 -0
  300. package/src/state/workspaceRunSession.ts +96 -0
  301. package/src/state/workspaceState.ts +199 -0
  302. package/src/types/easynet-agent-common.d.ts +62 -0
  303. package/src/types.ts +1 -0
  304. package/test/integration/runtime-live.integration.test.ts +30 -0
  305. package/test/unit/config/loader.test.ts +429 -0
  306. package/test/unit/runtime/agentContext.test.ts +23 -0
  307. package/test/unit/runtime/agentRuntime.test.ts +99 -0
  308. package/test/unit/runtime/consoleHumanLoop.test.ts +52 -0
  309. package/test/unit/runtime/events.test.ts +11 -0
  310. package/test/unit/runtime/globalContext.test.ts +34 -0
  311. package/test/unit/runtime/humanLoop.test.ts +104 -0
  312. package/test/unit/runtime/toolArgsNormalizer.test.ts +136 -0
  313. package/tsconfig.json +18 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * K8s-style resource base: apiVersion, kind, metadata, spec.
3
+ * Used for MemoryConfig, SkillsConfig, and future resource kinds.
4
+ */
5
+
6
+ export const API_GROUP = "botbotgo.world";
7
+ export const API_VERSION = "v1";
8
+ export const API_VERSION_FULL = `${API_GROUP}/${API_VERSION}`;
9
+
10
+ /** Standard metadata for all resources */
11
+ export interface ObjectMeta {
12
+ name: string;
13
+ /** Optional labels (e.g. for filtering) */
14
+ labels?: Record<string, string>;
15
+ /** Optional annotations */
16
+ annotations?: Record<string, string>;
17
+ }
18
+
19
+ /** Base resource: apiVersion, kind, metadata, spec */
20
+ export interface Resource<TKind extends string = string, TSpec = unknown> {
21
+ apiVersion: string;
22
+ kind: TKind;
23
+ metadata: ObjectMeta;
24
+ spec: TSpec;
25
+ }
26
+
27
+ // --- MemoryConfig (your example) ---
28
+
29
+ export interface StoreSpec {
30
+ type: "in_memory" | string;
31
+ /** Backend-specific options (e.g. path for file store) */
32
+ options?: Record<string, unknown>;
33
+ }
34
+
35
+ export interface SessionCompactionSpec {
36
+ enabled: boolean;
37
+ maxTokens: number;
38
+ keepRecentTurns: number;
39
+ summaryKey: string;
40
+ checkEveryTurns: number;
41
+ }
42
+
43
+ export interface MemoryStoreSpec {
44
+ store: StoreSpec;
45
+ allowWrite: boolean;
46
+ maxItems: number;
47
+ sessionCompaction?: SessionCompactionSpec;
48
+ }
49
+
50
+ export interface MemorySpec {
51
+ thread: MemoryStoreSpec;
52
+ cross_thread: MemoryStoreSpec;
53
+ knowledge: MemoryStoreSpec;
54
+ }
55
+
56
+ export interface ObservabilitySpec {
57
+ trace: boolean;
58
+ }
59
+
60
+ export interface PrivacySpec {
61
+ forbiddenMetadataKeys: string[];
62
+ }
63
+
64
+ export interface MemoryConfigSpec {
65
+ memory: MemorySpec;
66
+ observability?: ObservabilitySpec;
67
+ privacy?: PrivacySpec;
68
+ }
69
+
70
+ export type MemoryConfigResource = Resource<"MemoryConfig", MemoryConfigSpec>;
71
+
72
+ // --- SkillsConfig (for SKILL paths used by deepagents) ---
73
+
74
+ export interface SkillsConfigSpec {
75
+ /** Optional cache directory for downloaded remote skills. */
76
+ cacheDir?: string;
77
+ /** Unified skill sources: local paths, GitHub Releases, or JFrog descriptors. */
78
+ skills: Record<string, Record<string, unknown>>;
79
+ /** Optional: which agent name this config applies to (for multi-agent setups) */
80
+ agent?: string;
81
+ }
82
+
83
+ export type SkillsConfigResource = Resource<"SkillsConfig", SkillsConfigSpec>;
84
+
85
+ // --- AgentRuntimeConfig (runtime defaults consumed by AgentRuntimeService) ---
86
+
87
+ export interface AgentBackendConfigSpec {
88
+ type?: "local_shell" | "deepagents_export" | "module_export";
89
+ exportName?: string;
90
+ module?: string;
91
+ createMethod?: string;
92
+ options?: Record<string, unknown>;
93
+ inheritEnv?: boolean;
94
+ timeoutMs?: number;
95
+ maxOutputBytes?: number;
96
+ }
97
+
98
+ export interface AgentRuntimeConfigSpec {
99
+ artifacts?: Array<{
100
+ key: string;
101
+ path: string;
102
+ }>;
103
+ stateDirName?: string;
104
+ legacyOutputState?: boolean;
105
+ executeTimeoutMs?: number;
106
+ blockTaskTool?: boolean;
107
+ systemPrompt?: string;
108
+ llmIdleTimeoutMs?: number;
109
+ backend?: AgentBackendConfigSpec;
110
+ incompleteRunMaxRetries?: number;
111
+ emptyRunMaxRetries?: number;
112
+ malformedToolCallMaxRetries?: number;
113
+ idleTimeoutMaxRetries?: number;
114
+ heartbeatIntervalMs?: number;
115
+ debug?: {
116
+ run?: boolean;
117
+ workspace?: boolean;
118
+ toolCall?: boolean;
119
+ stream?: boolean;
120
+ close?: boolean;
121
+ };
122
+ eventLogLevel?: "silent" | "lifecycle" | "tools" | "verbose";
123
+ }
124
+
125
+ export type AgentRuntimeConfigResource = Resource<"AgentRuntimeConfig", AgentRuntimeConfigSpec>;
126
+
127
+ // --- Union of known kinds for type-safe loading ---
128
+
129
+ export type KnownResource = MemoryConfigResource | SkillsConfigResource | AgentRuntimeConfigResource;
130
+
131
+ export type KnownKind = KnownResource["kind"];
132
+
133
+ /** Type guard: resource is MemoryConfig */
134
+ export function isMemoryConfig(
135
+ r: Resource<string, unknown>
136
+ ): r is MemoryConfigResource {
137
+ return r.kind === "MemoryConfig";
138
+ }
139
+
140
+ /** Type guard: resource is SkillsConfig */
141
+ export function isSkillsConfig(
142
+ r: Resource<string, unknown>
143
+ ): r is SkillsConfigResource {
144
+ return r.kind === "SkillsConfig";
145
+ }
146
+
147
+ /** Type guard: resource is AgentRuntimeConfig */
148
+ export function isAgentRuntimeConfig(
149
+ r: Resource<string, unknown>
150
+ ): r is AgentRuntimeConfigResource {
151
+ return r.kind === "AgentRuntimeConfig";
152
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * High-level API for agent-runtime2 config loading: aggregate YAML resources into
3
+ * runtime, memory, observability, and privacy settings. Skill root resolution
4
+ * lives in @botbotgo/kit and is intentionally kept separate.
5
+ */
6
+
7
+ import { loadFromFile, loadFromDirectory } from "./loader.js";
8
+ import { resolveAgentConfig, type ResolvedAgentConfig } from "./resolveRuntimeConfig.js";
9
+ import { type KnownResource } from "./resources.js";
10
+
11
+ export interface LoadAgentRuntimeConfigOptions {
12
+ /** Load a single YAML config file */
13
+ configPath?: string;
14
+ /** Load all YAML resources from this directory */
15
+ configDir?: string;
16
+ /** Pre-loaded resources (skip file loading) */
17
+ resources?: KnownResource[];
18
+ /** If true, skip invalid documents when loading from directory (default: true) */
19
+ ignoreInvalid?: boolean;
20
+ }
21
+
22
+ export interface AgentRuntimeConfigResult {
23
+ resolved: ResolvedAgentConfig;
24
+ }
25
+
26
+ export class AgentRuntimeConfigService implements AgentRuntimeConfigResult {
27
+ public readonly resolved: ResolvedAgentConfig;
28
+
29
+ private constructor(resolved: ResolvedAgentConfig) {
30
+ this.resolved = resolved;
31
+ }
32
+
33
+ public static async create(
34
+ options: LoadAgentRuntimeConfigOptions,
35
+ ): Promise<AgentRuntimeConfigService> {
36
+ const resources = await AgentRuntimeConfigService.loadResources(options);
37
+ const resolved = resolveAgentConfig(resources);
38
+ return new AgentRuntimeConfigService(resolved);
39
+ }
40
+
41
+ private static async loadResources(options: LoadAgentRuntimeConfigOptions): Promise<KnownResource[]> {
42
+ if (options.resources) {
43
+ return options.resources;
44
+ }
45
+
46
+ if (options.configDir) {
47
+ const raw = await loadFromDirectory(options.configDir, {
48
+ ignoreInvalid: options.ignoreInvalid ?? true,
49
+ });
50
+ return raw as KnownResource[];
51
+ }
52
+
53
+ if (options.configPath) {
54
+ const single = await loadFromFile(options.configPath);
55
+ return [single as KnownResource];
56
+ }
57
+
58
+ throw new Error(
59
+ "loadAgentRuntimeConfig: provide one of configPath, configDir, or resources",
60
+ );
61
+ }
62
+ }
63
+
64
+ export async function loadAgentRuntimeConfig(
65
+ options: LoadAgentRuntimeConfigOptions,
66
+ ): Promise<AgentRuntimeConfigResult> {
67
+ return AgentRuntimeConfigService.create(options);
68
+ }
@@ -0,0 +1,20 @@
1
+ declare module "@botbotgo/kit" {
2
+ export function createAgentTools(...args: any[]): Promise<any>;
3
+ export function resolveAgentSkillRootsFromToolConfig(...args: any[]): string[];
4
+ }
5
+
6
+ declare module "@botbotgo/model" {
7
+ export function createAgentModel(...args: any[]): Promise<void>;
8
+ }
9
+
10
+ declare module "@botbotgo/memory" {
11
+ export function createAgentMemory(...args: any[]): Promise<any>;
12
+
13
+ export interface AgentMemoryStoreAdapterOptions {
14
+ agentMemory: any;
15
+ }
16
+
17
+ export class AgentMemoryStoreAdapter {
18
+ constructor(...args: any[]);
19
+ }
20
+ }
package/src/index.ts ADDED
@@ -0,0 +1,36 @@
1
+ export {
2
+ AgentRuntimeService,
3
+ createAgentRuntime2,
4
+ initializeAgentRuntimeModules,
5
+ } from "./runtime/index.js";
6
+ export type { ResolvedAgentRuntimeConfig } from "./config/index.js";
7
+ export type {
8
+ CreateAgentRuntimeFrameworkOptions,
9
+ HumanLoopDecision,
10
+ HumanLoopRequest,
11
+ HumanLoopService,
12
+ HumanLoopToolCallContext,
13
+ HumanLoopToolPolicy,
14
+ } from "./runtime/index.js";
15
+ export {
16
+ ConsoleHumanLoopService,
17
+ createDefaultHumanLoopToolPolicy,
18
+ } from "./runtime/index.js";
19
+ export { createRuntime2TreeEventListener } from "@botbotgo/common";
20
+ export type {
21
+ Runtime2EventDebugConfig,
22
+ Runtime2EventRuntimeConfig,
23
+ Runtime2TreeEventListenerOptions,
24
+ } from "@botbotgo/common";
25
+ export {
26
+ clearAgentRuntimeGlobalContext,
27
+ getAgentRuntimeGlobal,
28
+ getAgentRuntimeGlobalContext,
29
+ getOrRegisterAgentRuntimeGlobal,
30
+ registerAgentRuntimeGlobal,
31
+ requireAgentRuntimeChatModel,
32
+ requireAgentRuntimeContextValue,
33
+ requireAgentRuntimeMemory,
34
+ requireAgentRuntimeTools,
35
+ } from "./runtime/index.js";
36
+ export type { AgentRuntimeGlobalContext } from "./runtime/index.js";
@@ -0,0 +1,6 @@
1
+ export { AgentToolMiddlewareFactory } from "./middleware/index.js";
2
+ export type {
3
+ CreateAgentToolMiddlewareOptions,
4
+ ToolCallAfterHookContext,
5
+ ToolCallHookContext,
6
+ } from "./middleware/index.js";
@@ -0,0 +1,212 @@
1
+ import { resolve } from "node:path";
2
+ import { resolveAgentSkillRootsFromToolConfig } from "@botbotgo/kit";
3
+ import { AgentToolMiddlewareFactory, type CreateAgentToolMiddlewareOptions } from "../middleware/index.js";
4
+ import { ToolConfigReader } from "../execution/policies/toolConfigReader.js";
5
+ import {
6
+ createAgentWorkspaceState,
7
+ type AgentWorkspaceState,
8
+ type CreateAgentWorkspaceStateOptions,
9
+ } from "../../state/workspaceState.js";
10
+ import {
11
+ OpenAILocalAgentService,
12
+ LangchainRuntimeBindingsResolver,
13
+ type AgentBackendConfig,
14
+ } from "../providers/index.js";
15
+ import { loadAgentRuntimeConfig } from "../../config/runtimeConfigLoader.js";
16
+ import { AgentRuntimeEventPublisher, type AgentEventBus } from "../events/eventPublisher.js";
17
+ import type { ResolvedAgentRuntimeConfig } from "../../config/index.js";
18
+ import { AgentRuntimeService, type CreateAgentRuntimeOptions } from "../runtimeService.js";
19
+ import { createDefaultHumanLoopToolPolicy } from "../human-loop/humanLoop.js";
20
+
21
+ export class AgentRuntimeFactory {
22
+ public static async create(options: CreateAgentRuntimeOptions): Promise<AgentRuntimeService> {
23
+ const runtimeOptions = new RuntimeOptionsResolver(options);
24
+ const toolConfigPath = runtimeOptions.resolveToolConfigPath();
25
+ const { resolved } = await loadAgentRuntimeConfig({
26
+ configDir: runtimeOptions.configDir,
27
+ ignoreInvalid: true,
28
+ });
29
+ const skillRoots = resolveAgentSkillRootsFromToolConfig({ configFilePath: toolConfigPath });
30
+ const runtimeConfig = resolved.runtime;
31
+ const runtimeDeps = runtimeOptions.resolve(runtimeConfig);
32
+ const { createMiddleware, ToolMessage } = LangchainRuntimeBindingsResolver.resolve(runtimeOptions.rootDir);
33
+ const events = new AgentRuntimeEventPublisher(runtimeOptions.eventBus);
34
+ const workspace = this.createWorkspace(runtimeOptions.rootDir, runtimeDeps, events, runtimeOptions.todosLogger);
35
+ const middleware = this.createMiddleware(
36
+ runtimeOptions.rootDir,
37
+ skillRoots,
38
+ runtimeDeps,
39
+ events,
40
+ workspace,
41
+ createMiddleware,
42
+ ToolMessage,
43
+ );
44
+ const runtimeAgent = await OpenAILocalAgentService.create({
45
+ rootDir: runtimeOptions.rootDir,
46
+ configDir: runtimeOptions.configDir,
47
+ toolConfigPath: runtimeDeps.toolConfigPath,
48
+ allowedToolNames: runtimeDeps.allowedToolNames,
49
+ modelConfigPath: runtimeDeps.modelConfigPath,
50
+ modelCheckConnectivity: runtimeDeps.modelCheckConnectivity,
51
+ model: runtimeDeps.model,
52
+ systemPrompt: runtimeDeps.systemPrompt,
53
+ temperature: runtimeDeps.temperature,
54
+ maxTokens: runtimeDeps.maxTokens,
55
+ backend: runtimeDeps.backend,
56
+ middleware: [middleware],
57
+ logger: runtimeOptions.runLogger,
58
+ });
59
+
60
+ return new AgentRuntimeService({
61
+ rootDir: runtimeOptions.rootDir,
62
+ runLogger: runtimeOptions.runLogger,
63
+ events,
64
+ runtimeConfig,
65
+ middleware,
66
+ workspace,
67
+ runtimeAgent,
68
+ defaultIncompleteRunMaxRetries: runtimeDeps.defaultIncompleteRunMaxRetries,
69
+ defaultEmptyRunMaxRetries: runtimeDeps.defaultEmptyRunMaxRetries,
70
+ defaultMalformedToolCallMaxRetries: runtimeDeps.defaultMalformedToolCallMaxRetries,
71
+ defaultIdleTimeoutMaxRetries: runtimeDeps.defaultIdleTimeoutMaxRetries,
72
+ defaultHeartbeatIntervalMs: runtimeDeps.defaultHeartbeatIntervalMs,
73
+ defaultIdleTimeoutMs: runtimeDeps.defaultIdleTimeoutMs,
74
+ artifactValidator: runtimeDeps.artifactValidator,
75
+ });
76
+ }
77
+
78
+ private static createWorkspace(
79
+ rootDir: string,
80
+ runtimeDeps: ResolvedRuntimeOptions,
81
+ events: AgentRuntimeEventPublisher,
82
+ todosLogger: CreateAgentWorkspaceStateOptions["todosLogger"],
83
+ ): AgentWorkspaceState {
84
+ return createAgentWorkspaceState({
85
+ rootDir,
86
+ artifacts: runtimeDeps.artifacts,
87
+ stateDirName: runtimeDeps.stateDirName,
88
+ legacyOutputState: runtimeDeps.legacyOutputState,
89
+ todosLogger,
90
+ events,
91
+ });
92
+ }
93
+
94
+ private static createMiddleware(
95
+ rootDir: string,
96
+ skillRoots: string[],
97
+ runtimeDeps: ResolvedRuntimeOptions,
98
+ events: AgentRuntimeEventPublisher,
99
+ workspace: AgentWorkspaceState,
100
+ createMiddleware: CreateAgentToolMiddlewareOptions["createMiddleware"],
101
+ ToolMessage: CreateAgentToolMiddlewareOptions["ToolMessage"],
102
+ ): unknown {
103
+ return new AgentToolMiddlewareFactory({
104
+ rootDir,
105
+ skillRoots,
106
+ createMiddleware,
107
+ ToolMessage,
108
+ events,
109
+ executeTimeoutMs: runtimeDeps.executeTimeoutMs,
110
+ blockTaskTool: runtimeDeps.blockTaskTool,
111
+ allowedToolNames: runtimeDeps.allowedToolNames,
112
+ logger: runtimeDeps.logger,
113
+ persistTodos: workspace.persistTodos.bind(workspace),
114
+ humanLoop: runtimeDeps.humanLoop,
115
+ humanLoopToolPolicy: runtimeDeps.humanLoopToolPolicy,
116
+ beforeToolCall: runtimeDeps.beforeToolCall,
117
+ afterToolCall: runtimeDeps.afterToolCall,
118
+ }).create();
119
+ }
120
+ }
121
+
122
+ class RuntimeOptionsResolver {
123
+ public readonly rootDir: string;
124
+ public readonly configDir: string;
125
+ public readonly eventBus?: AgentEventBus;
126
+ public readonly todosLogger?: CreateAgentWorkspaceStateOptions["todosLogger"];
127
+ public readonly runLogger: (message: string) => void;
128
+
129
+ private readonly options: CreateAgentRuntimeOptions;
130
+
131
+ public constructor(options: CreateAgentRuntimeOptions) {
132
+ this.options = options;
133
+ this.rootDir = options.rootDir;
134
+ this.configDir = options.configDir ?? resolve(options.rootDir, "config");
135
+ this.eventBus = options.eventBus;
136
+ this.todosLogger = options.todosLogger;
137
+ this.runLogger = options.runLogger ?? (() => {});
138
+ }
139
+
140
+ public resolve(runtimeConfig: ResolvedAgentRuntimeConfig): ResolvedRuntimeOptions {
141
+ const toolConfigPath = this.resolveToolConfigPath();
142
+ return {
143
+ artifacts: this.options.artifacts ?? runtimeConfig.artifacts,
144
+ stateDirName: this.options.stateDirName ?? runtimeConfig.stateDirName,
145
+ legacyOutputState: this.options.legacyOutputState ?? runtimeConfig.legacyOutputState,
146
+ executeTimeoutMs: this.options.executeTimeoutMs ?? runtimeConfig.executeTimeoutMs,
147
+ blockTaskTool: this.options.blockTaskTool ?? runtimeConfig.blockTaskTool,
148
+ systemPrompt: this.options.systemPrompt ?? runtimeConfig.systemPrompt,
149
+ toolConfigPath,
150
+ allowedToolNames: ToolConfigReader.readAllowedToolNames(toolConfigPath),
151
+ modelConfigPath: this.options.modelConfigPath ?? resolve(this.configDir, "model.yaml"),
152
+ modelCheckConnectivity: this.options.modelCheckConnectivity ?? false,
153
+ model: this.options.model,
154
+ temperature: this.options.temperature,
155
+ maxTokens: this.options.maxTokens,
156
+ backend: this.options.backend ?? runtimeConfig.backend,
157
+ logger: this.options.logger,
158
+ humanLoop: this.options.humanLoop,
159
+ humanLoopToolPolicy: this.options.humanLoop
160
+ ? (this.options.humanLoopToolPolicy ?? createDefaultHumanLoopToolPolicy())
161
+ : this.options.humanLoopToolPolicy,
162
+ beforeToolCall: this.options.beforeToolCall,
163
+ afterToolCall: this.options.afterToolCall,
164
+ artifactValidator: this.options.artifactValidator,
165
+ defaultIncompleteRunMaxRetries:
166
+ this.options.incompleteRunMaxRetries ?? runtimeConfig.incompleteRunMaxRetries,
167
+ defaultEmptyRunMaxRetries:
168
+ this.options.emptyRunMaxRetries ?? runtimeConfig.emptyRunMaxRetries,
169
+ defaultMalformedToolCallMaxRetries:
170
+ this.options.malformedToolCallMaxRetries ?? runtimeConfig.malformedToolCallMaxRetries,
171
+ defaultIdleTimeoutMaxRetries:
172
+ this.options.idleTimeoutMaxRetries ?? runtimeConfig.idleTimeoutMaxRetries,
173
+ defaultHeartbeatIntervalMs:
174
+ this.options.heartbeatIntervalMs ?? runtimeConfig.heartbeatIntervalMs,
175
+ defaultIdleTimeoutMs:
176
+ this.options.idleTimeoutMs ?? runtimeConfig.llmIdleTimeoutMs,
177
+ };
178
+ }
179
+
180
+ public resolveToolConfigPath(): string {
181
+ return this.options.toolConfigPath ?? resolve(this.configDir, "tool.yaml");
182
+ }
183
+ }
184
+
185
+ interface ResolvedRuntimeOptions {
186
+ artifacts: CreateAgentRuntimeOptions["artifacts"];
187
+ stateDirName: CreateAgentRuntimeOptions["stateDirName"];
188
+ legacyOutputState: CreateAgentRuntimeOptions["legacyOutputState"];
189
+ executeTimeoutMs: number | undefined;
190
+ blockTaskTool: boolean | undefined;
191
+ systemPrompt: string | undefined;
192
+ toolConfigPath: string;
193
+ allowedToolNames: string[] | undefined;
194
+ modelConfigPath: string;
195
+ modelCheckConnectivity: boolean;
196
+ model: string | undefined;
197
+ temperature: number | undefined;
198
+ maxTokens: number | undefined;
199
+ backend: AgentBackendConfig | undefined;
200
+ logger: CreateAgentRuntimeOptions["logger"];
201
+ humanLoop: CreateAgentRuntimeOptions["humanLoop"];
202
+ humanLoopToolPolicy: CreateAgentRuntimeOptions["humanLoopToolPolicy"];
203
+ beforeToolCall: CreateAgentRuntimeOptions["beforeToolCall"];
204
+ afterToolCall: CreateAgentRuntimeOptions["afterToolCall"];
205
+ artifactValidator: CreateAgentRuntimeOptions["artifactValidator"];
206
+ defaultIncompleteRunMaxRetries: number | undefined;
207
+ defaultEmptyRunMaxRetries: number | undefined;
208
+ defaultMalformedToolCallMaxRetries: number | undefined;
209
+ defaultIdleTimeoutMaxRetries: number | undefined;
210
+ defaultHeartbeatIntervalMs: number | undefined;
211
+ defaultIdleTimeoutMs: number | undefined;
212
+ }
@@ -0,0 +1,34 @@
1
+ import { resolve } from "node:path";
2
+ import { AgentContextTokens, getDefaultAgentContext } from "@botbotgo/common/context";
3
+ import { createAgentEventBus } from "@botbotgo/common/events";
4
+ import { createAgentMemory } from "@botbotgo/memory";
5
+ import { createAgentModel } from "@botbotgo/model";
6
+ import { createAgentTools } from "@botbotgo/kit";
7
+ import type { CreateAgentRuntimeFrameworkOptions } from "../runtimeService.js";
8
+
9
+ export class AgentRuntimeModuleInitializer {
10
+ public static async initialize(options: CreateAgentRuntimeFrameworkOptions): Promise<void> {
11
+ const context = getDefaultAgentContext();
12
+ const configDir = options.configDir ?? resolve(options.rootDir, "config");
13
+ const modelConfigPath = options.modelConfigPath ?? resolve(configDir, "model.yaml");
14
+ const memoryConfigPath = options.memoryConfigPath ?? resolve(configDir, "memory.yaml");
15
+ const toolConfigPath = options.toolConfigPath ?? resolve(configDir, "tool.yaml");
16
+ const forceInitializeModules = options.forceInitializeModules ?? false;
17
+
18
+ if (forceInitializeModules || !context.has(AgentContextTokens.EventBus)) {
19
+ createAgentEventBus();
20
+ }
21
+ if (forceInitializeModules || !context.has(AgentContextTokens.ChatModel)) {
22
+ await createAgentModel({
23
+ configPath: modelConfigPath,
24
+ checkConnectivity: options.modelCheckConnectivity ?? false,
25
+ });
26
+ }
27
+ if (forceInitializeModules || !context.has(AgentContextTokens.Memory)) {
28
+ await createAgentMemory(memoryConfigPath);
29
+ }
30
+ if (forceInitializeModules || !context.has(AgentContextTokens.Tools)) {
31
+ await createAgentTools(toolConfigPath);
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,24 @@
1
+ import { AgentContextTokens, getDefaultAgentContext } from "@botbotgo/common/context";
2
+
3
+ export function requireAgentRuntimeContextValue<T>(token: symbol, label: string): T {
4
+ const context = getDefaultAgentContext();
5
+ const value = context.tryGet<T>(token);
6
+ if (value === undefined) {
7
+ throw new Error(
8
+ `agent-runtime2 requires ${label} to be registered in AgentContext before runtime creation.`,
9
+ );
10
+ }
11
+ return value;
12
+ }
13
+
14
+ export function requireAgentRuntimeChatModel<T>(): T {
15
+ return requireAgentRuntimeContextValue<T>(AgentContextTokens.ChatModel, "ChatModel");
16
+ }
17
+
18
+ export function requireAgentRuntimeMemory<T>(): T {
19
+ return requireAgentRuntimeContextValue<T>(AgentContextTokens.Memory, "Memory");
20
+ }
21
+
22
+ export function requireAgentRuntimeTools<T>(): T {
23
+ return requireAgentRuntimeContextValue<T>(AgentContextTokens.Tools, "Tools");
24
+ }
@@ -0,0 +1,70 @@
1
+ const AGENT_RUNTIME2_GLOBAL_CONTEXT_KEY = "__agent_runtime2_global_context__";
2
+
3
+ export interface AgentRuntimeGlobalContext {
4
+ register<T>(key: PropertyKey, value: T): T;
5
+ get<T>(key: PropertyKey): T | undefined;
6
+ getOrRegister<T>(key: PropertyKey, create: () => T): T;
7
+ has(key: PropertyKey): boolean;
8
+ remove(key: PropertyKey): boolean;
9
+ clear(): void;
10
+ }
11
+
12
+ type GlobalContextStore = Map<PropertyKey, unknown>;
13
+
14
+ declare global {
15
+ var __agent_runtime2_global_context__: GlobalContextStore | undefined;
16
+ }
17
+
18
+ function getStore(): GlobalContextStore {
19
+ globalThis[AGENT_RUNTIME2_GLOBAL_CONTEXT_KEY] ??= new Map<PropertyKey, unknown>();
20
+ return globalThis[AGENT_RUNTIME2_GLOBAL_CONTEXT_KEY];
21
+ }
22
+
23
+ export function getAgentRuntimeGlobalContext(): AgentRuntimeGlobalContext {
24
+ const store = getStore();
25
+ return {
26
+ register<T>(key: PropertyKey, value: T): T {
27
+ store.set(key, value);
28
+ return value;
29
+ },
30
+ get<T>(key: PropertyKey): T | undefined {
31
+ return store.get(key) as T | undefined;
32
+ },
33
+ getOrRegister<T>(key: PropertyKey, create: () => T): T {
34
+ if (store.has(key)) {
35
+ return store.get(key) as T;
36
+ }
37
+ const value = create();
38
+ store.set(key, value);
39
+ return value;
40
+ },
41
+ has(key: PropertyKey): boolean {
42
+ return store.has(key);
43
+ },
44
+ remove(key: PropertyKey): boolean {
45
+ return store.delete(key);
46
+ },
47
+ clear(): void {
48
+ store.clear();
49
+ },
50
+ };
51
+ }
52
+
53
+ export function registerAgentRuntimeGlobal<T>(key: PropertyKey, value: T): T {
54
+ return getAgentRuntimeGlobalContext().register(key, value);
55
+ }
56
+
57
+ export function getAgentRuntimeGlobal<T>(key: PropertyKey): T | undefined {
58
+ return getAgentRuntimeGlobalContext().get<T>(key);
59
+ }
60
+
61
+ export function getOrRegisterAgentRuntimeGlobal<T>(
62
+ key: PropertyKey,
63
+ create: () => T,
64
+ ): T {
65
+ return getAgentRuntimeGlobalContext().getOrRegister(key, create);
66
+ }
67
+
68
+ export function clearAgentRuntimeGlobalContext(): void {
69
+ getAgentRuntimeGlobalContext().clear();
70
+ }
@@ -0,0 +1,45 @@
1
+ import {
2
+ AgentContextTokens,
3
+ getDefaultAgentContext,
4
+ createAgentEventBus,
5
+ type AgentEvent,
6
+ type AgentEventBus,
7
+ type AgentEventListener,
8
+ } from "@botbotgo/common";
9
+
10
+ export type { AgentEvent, AgentEventBus, AgentEventListener };
11
+
12
+ export interface RuntimeEventEnvelope<TPayload = unknown> {
13
+ name: string;
14
+ from?: string;
15
+ to?: string;
16
+ payload?: TPayload;
17
+ }
18
+
19
+ function getRuntime2EventBus(): AgentEventBus {
20
+ return (
21
+ getDefaultAgentContext().tryGet<AgentEventBus>(AgentContextTokens.EventBus)
22
+ ?? createAgentEventBus()
23
+ );
24
+ }
25
+
26
+ export class AgentRuntimeEventPublisher {
27
+ public readonly bus: AgentEventBus;
28
+
29
+ public constructor(bus?: AgentEventBus) {
30
+ this.bus = bus ?? getRuntime2EventBus();
31
+ }
32
+
33
+ public emit<TPayload = unknown>(event: RuntimeEventEnvelope<TPayload>): AgentEvent<TPayload> {
34
+ return this.bus.publish({
35
+ name: event.name,
36
+ from: event.from ?? "agent-runtime2",
37
+ to: event.to ?? "agent-runtime2",
38
+ payload: event.payload,
39
+ });
40
+ }
41
+
42
+ public subscribe(listener: AgentEventListener): () => void {
43
+ return this.bus.subscribe(listener);
44
+ }
45
+ }