enya-agent 0.1.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 (389) hide show
  1. package/.env.example +20 -0
  2. package/.github/workflows/ci.yml +70 -0
  3. package/.github/workflows/publish.yml +250 -0
  4. package/.gitmodules +3 -0
  5. package/Cargo.lock +3584 -0
  6. package/Cargo.toml +97 -0
  7. package/crates/enact/Cargo.toml +27 -0
  8. package/crates/enact/src/lib.rs +60 -0
  9. package/crates/enact-a2a/Cargo.toml +25 -0
  10. package/crates/enact-a2a/src/lib.rs +411 -0
  11. package/crates/enact-channels/Cargo.toml +64 -0
  12. package/crates/enact-channels/examples/README.md +80 -0
  13. package/crates/enact-channels/examples/channel_bot.rs +169 -0
  14. package/crates/enact-channels/examples/telegram-echo.rs +34 -0
  15. package/crates/enact-channels/examples/whatsapp-echo.rs +142 -0
  16. package/crates/enact-channels/src/config.rs +213 -0
  17. package/crates/enact-channels/src/lib.rs +25 -0
  18. package/crates/enact-channels/src/runtime.rs +237 -0
  19. package/crates/enact-channels/src/security/mod.rs +5 -0
  20. package/crates/enact-channels/src/security/pairing.rs +205 -0
  21. package/crates/enact-channels/src/teams.rs +601 -0
  22. package/crates/enact-channels/src/telegram.rs +2833 -0
  23. package/crates/enact-channels/src/traits.rs +200 -0
  24. package/crates/enact-channels/src/webhook.rs +262 -0
  25. package/crates/enact-channels/src/whatsapp.rs +310 -0
  26. package/crates/enact-cli/Cargo.toml +40 -0
  27. package/crates/enact-cli/src/commands/doctor.rs +62 -0
  28. package/crates/enact-cli/src/commands/mod.rs +3 -0
  29. package/crates/enact-cli/src/commands/run.rs +69 -0
  30. package/crates/enact-cli/src/commands/serve.rs +81 -0
  31. package/crates/enact-cli/src/config.rs +2 -0
  32. package/crates/enact-cli/src/main.rs +79 -0
  33. package/crates/enact-config/Cargo.toml +36 -0
  34. package/crates/enact-config/ENV_VAR_MAPPING.md +135 -0
  35. package/crates/enact-config/QUICK_REFERENCE.md +92 -0
  36. package/crates/enact-config/README.md +107 -0
  37. package/crates/enact-config/TESTING.md +161 -0
  38. package/crates/enact-config/examples/test-env-vars.rs +100 -0
  39. package/crates/enact-config/src/config.rs +399 -0
  40. package/crates/enact-config/src/encrypted_store.rs +211 -0
  41. package/crates/enact-config/src/lib.rs +298 -0
  42. package/crates/enact-config/src/secrets.rs +149 -0
  43. package/crates/enact-config/src/sync.rs +260 -0
  44. package/crates/enact-config/test-env-vars.sh +34 -0
  45. package/crates/enact-config/tests/README.md +99 -0
  46. package/crates/enact-config/tests/config_integration_test.rs +202 -0
  47. package/crates/enact-config/tests/security_test.rs +140 -0
  48. package/crates/enact-context/Cargo.toml +41 -0
  49. package/crates/enact-context/src/budget.rs +314 -0
  50. package/crates/enact-context/src/calibrator.rs +535 -0
  51. package/crates/enact-context/src/compactor.rs +392 -0
  52. package/crates/enact-context/src/condenser.rs +826 -0
  53. package/crates/enact-context/src/lib.rs +94 -0
  54. package/crates/enact-context/src/segment.rs +238 -0
  55. package/crates/enact-context/src/step_context.rs +645 -0
  56. package/crates/enact-context/src/token_counter.rs +148 -0
  57. package/crates/enact-context/src/window.rs +372 -0
  58. package/crates/enact-core/Cargo.toml +42 -0
  59. package/crates/enact-core/README.md +98 -0
  60. package/crates/enact-core/src/background/executor.rs +524 -0
  61. package/crates/enact-core/src/background/mod.rs +48 -0
  62. package/crates/enact-core/src/background/target_binding.rs +390 -0
  63. package/crates/enact-core/src/background/trigger.rs +511 -0
  64. package/crates/enact-core/src/callable/callable.rs +152 -0
  65. package/crates/enact-core/src/callable/composite.rs +817 -0
  66. package/crates/enact-core/src/callable/graph.rs +104 -0
  67. package/crates/enact-core/src/callable/llm.rs +211 -0
  68. package/crates/enact-core/src/callable/mod.rs +64 -0
  69. package/crates/enact-core/src/callable/registry.rs +206 -0
  70. package/crates/enact-core/src/context/execution_context.rs +757 -0
  71. package/crates/enact-core/src/context/invocation.rs +99 -0
  72. package/crates/enact-core/src/context/mod.rs +50 -0
  73. package/crates/enact-core/src/context/tenant.rs +175 -0
  74. package/crates/enact-core/src/context/trace.rs +127 -0
  75. package/crates/enact-core/src/flow/conditional.rs +293 -0
  76. package/crates/enact-core/src/flow/mod.rs +43 -0
  77. package/crates/enact-core/src/flow/parallel.rs +437 -0
  78. package/crates/enact-core/src/flow/repeat.rs +534 -0
  79. package/crates/enact-core/src/flow/sequential.rs +248 -0
  80. package/crates/enact-core/src/graph/checkpoint.rs +79 -0
  81. package/crates/enact-core/src/graph/checkpoint_store.rs +76 -0
  82. package/crates/enact-core/src/graph/compiled.rs +189 -0
  83. package/crates/enact-core/src/graph/edge.rs +59 -0
  84. package/crates/enact-core/src/graph/graph_schema.rs +218 -0
  85. package/crates/enact-core/src/graph/loader.rs +155 -0
  86. package/crates/enact-core/src/graph/mod.rs +18 -0
  87. package/crates/enact-core/src/graph/node/function.rs +49 -0
  88. package/crates/enact-core/src/graph/node/mod.rs +48 -0
  89. package/crates/enact-core/src/graph/schema.rs +62 -0
  90. package/crates/enact-core/src/inbox/message.rs +405 -0
  91. package/crates/enact-core/src/inbox/mod.rs +31 -0
  92. package/crates/enact-core/src/inbox/store.rs +355 -0
  93. package/crates/enact-core/src/kernel/artifact/filesystem.rs +546 -0
  94. package/crates/enact-core/src/kernel/artifact/metadata.rs +283 -0
  95. package/crates/enact-core/src/kernel/artifact/mod.rs +27 -0
  96. package/crates/enact-core/src/kernel/artifact/store.rs +427 -0
  97. package/crates/enact-core/src/kernel/enforcement.rs +1315 -0
  98. package/crates/enact-core/src/kernel/error.rs +1200 -0
  99. package/crates/enact-core/src/kernel/event.rs +1394 -0
  100. package/crates/enact-core/src/kernel/execution_model.rs +831 -0
  101. package/crates/enact-core/src/kernel/execution_state.rs +189 -0
  102. package/crates/enact-core/src/kernel/execution_strategy.rs +117 -0
  103. package/crates/enact-core/src/kernel/ids.rs +2086 -0
  104. package/crates/enact-core/src/kernel/interrupt.rs +125 -0
  105. package/crates/enact-core/src/kernel/kernel.rs +1283 -0
  106. package/crates/enact-core/src/kernel/mod.rs +205 -0
  107. package/crates/enact-core/src/kernel/persistence/event_store.rs +270 -0
  108. package/crates/enact-core/src/kernel/persistence/message_store.rs +908 -0
  109. package/crates/enact-core/src/kernel/persistence/mod.rs +102 -0
  110. package/crates/enact-core/src/kernel/persistence/state_store.rs +228 -0
  111. package/crates/enact-core/src/kernel/persistence/vector_store.rs +299 -0
  112. package/crates/enact-core/src/kernel/reducer.rs +808 -0
  113. package/crates/enact-core/src/kernel/replay.rs +153 -0
  114. package/crates/enact-core/src/lib.rs +413 -0
  115. package/crates/enact-core/src/memory/episodic.rs +0 -0
  116. package/crates/enact-core/src/memory/mod.rs +6 -0
  117. package/crates/enact-core/src/memory/semantic.rs +0 -0
  118. package/crates/enact-core/src/memory/trait.rs +0 -0
  119. package/crates/enact-core/src/memory/vector_db.rs +0 -0
  120. package/crates/enact-core/src/memory/working.rs +0 -0
  121. package/crates/enact-core/src/policy/execution_policy.rs +292 -0
  122. package/crates/enact-core/src/policy/filters.rs +458 -0
  123. package/crates/enact-core/src/policy/input_processor.rs +407 -0
  124. package/crates/enact-core/src/policy/long_running.rs +134 -0
  125. package/crates/enact-core/src/policy/mod.rs +193 -0
  126. package/crates/enact-core/src/policy/pii_input.rs +274 -0
  127. package/crates/enact-core/src/policy/tenant_policy.rs +453 -0
  128. package/crates/enact-core/src/policy/tool_policy.rs +407 -0
  129. package/crates/enact-core/src/providers/mod.rs +63 -0
  130. package/crates/enact-core/src/providers/trait.rs +292 -0
  131. package/crates/enact-core/src/runner/callbacks.rs +6 -0
  132. package/crates/enact-core/src/runner/execution_runner.rs +476 -0
  133. package/crates/enact-core/src/runner/loop.rs +117 -0
  134. package/crates/enact-core/src/runner/mod.rs +58 -0
  135. package/crates/enact-core/src/runner/protected_runner.rs +280 -0
  136. package/crates/enact-core/src/signal/inmemory.rs +231 -0
  137. package/crates/enact-core/src/signal/mod.rs +108 -0
  138. package/crates/enact-core/src/streaming/event_logger.rs +195 -0
  139. package/crates/enact-core/src/streaming/event_stream.rs +1423 -0
  140. package/crates/enact-core/src/streaming/mod.rs +108 -0
  141. package/crates/enact-core/src/streaming/pause_cancel.rs +0 -0
  142. package/crates/enact-core/src/streaming/protected_emitter.rs +173 -0
  143. package/crates/enact-core/src/streaming/protection/context.rs +136 -0
  144. package/crates/enact-core/src/streaming/protection/encryption.rs +289 -0
  145. package/crates/enact-core/src/streaming/protection/mod.rs +43 -0
  146. package/crates/enact-core/src/streaming/protection/pii_protection.rs +243 -0
  147. package/crates/enact-core/src/streaming/protection/processor.rs +166 -0
  148. package/crates/enact-core/src/streaming/sse.rs +0 -0
  149. package/crates/enact-core/src/telemetry/exporter.rs +0 -0
  150. package/crates/enact-core/src/telemetry/init.rs +0 -0
  151. package/crates/enact-core/src/telemetry/mod.rs +49 -0
  152. package/crates/enact-core/src/telemetry/spans.rs +245 -0
  153. package/crates/enact-core/src/tool/agent_tool.rs +177 -0
  154. package/crates/enact-core/src/tool/browser/mod.rs +0 -0
  155. package/crates/enact-core/src/tool/browser/webdriver.rs +0 -0
  156. package/crates/enact-core/src/tool/cost.rs +247 -0
  157. package/crates/enact-core/src/tool/discovery.rs +0 -0
  158. package/crates/enact-core/src/tool/dispatcher.rs +347 -0
  159. package/crates/enact-core/src/tool/filesystem.rs +231 -0
  160. package/crates/enact-core/src/tool/function.rs +99 -0
  161. package/crates/enact-core/src/tool/git.rs +162 -0
  162. package/crates/enact-core/src/tool/http.rs +214 -0
  163. package/crates/enact-core/src/tool/mcp/client.rs +0 -0
  164. package/crates/enact-core/src/tool/mcp/mod.rs +0 -0
  165. package/crates/enact-core/src/tool/mod.rs +51 -0
  166. package/crates/enact-core/src/tool/reasoning/debugging.rs +0 -0
  167. package/crates/enact-core/src/tool/reasoning/mcts.rs +0 -0
  168. package/crates/enact-core/src/tool/reasoning/mod.rs +0 -0
  169. package/crates/enact-core/src/tool/reasoning/sequential.rs +0 -0
  170. package/crates/enact-core/src/tool/sandbox/dagger.rs +0 -0
  171. package/crates/enact-core/src/tool/sandbox/mod.rs +0 -0
  172. package/crates/enact-core/src/tool/shell.rs +147 -0
  173. package/crates/enact-core/src/tool/trait.rs +33 -0
  174. package/crates/enact-core/src/tool/web_search.rs +277 -0
  175. package/crates/enact-core/src/util/config.rs +0 -0
  176. package/crates/enact-core/src/util/errors.rs +0 -0
  177. package/crates/enact-core/src/util/mod.rs +6 -0
  178. package/crates/enact-core/tests/airgapped_e2e_test.rs +291 -0
  179. package/crates/enact-core/tests/e2e_agentic_loop.rs +119 -0
  180. package/crates/enact-core/tests/e2e_test.rs +259 -0
  181. package/crates/enact-core/tests/graph_test.rs +130 -0
  182. package/crates/enact-core/tests/stream_event_id_validation.rs +435 -0
  183. package/crates/enact-cron/Cargo.toml +28 -0
  184. package/crates/enact-cron/src/lib.rs +44 -0
  185. package/crates/enact-cron/src/schedule.rs +156 -0
  186. package/crates/enact-cron/src/store.rs +589 -0
  187. package/crates/enact-cron/src/types.rs +148 -0
  188. package/crates/enact-gateway/Cargo.toml +31 -0
  189. package/crates/enact-gateway/README.md +30 -0
  190. package/crates/enact-gateway/examples/whatsapp-gateway-runner-mock.rs +59 -0
  191. package/crates/enact-gateway/examples/whatsapp-gateway.rs +42 -0
  192. package/crates/enact-gateway/src/lib.rs +582 -0
  193. package/crates/enact-mcp/Cargo.toml +24 -0
  194. package/crates/enact-mcp/src/lib.rs +178 -0
  195. package/crates/enact-memory/Cargo.toml +25 -0
  196. package/crates/enact-memory/src/backend.rs +20 -0
  197. package/crates/enact-memory/src/chunker.rs +230 -0
  198. package/crates/enact-memory/src/embeddings.rs +221 -0
  199. package/crates/enact-memory/src/lib.rs +67 -0
  200. package/crates/enact-memory/src/markdown.rs +127 -0
  201. package/crates/enact-memory/src/none.rs +61 -0
  202. package/crates/enact-memory/src/sqlite.rs +276 -0
  203. package/crates/enact-memory/src/traits.rs +65 -0
  204. package/crates/enact-memory/src/vector.rs +198 -0
  205. package/crates/enact-oauth/Cargo.toml +27 -0
  206. package/crates/enact-oauth/src/lib.rs +584 -0
  207. package/crates/enact-observability/Cargo.toml +22 -0
  208. package/crates/enact-observability/src/lib.rs +197 -0
  209. package/crates/enact-providers/Cargo.toml +33 -0
  210. package/crates/enact-providers/examples/hello-agent.rs +33 -0
  211. package/crates/enact-providers/src/anthropic.rs +182 -0
  212. package/crates/enact-providers/src/azure.rs +96 -0
  213. package/crates/enact-providers/src/bridge.rs +221 -0
  214. package/crates/enact-providers/src/gemini.rs +227 -0
  215. package/crates/enact-providers/src/http.rs +78 -0
  216. package/crates/enact-providers/src/lib.rs +53 -0
  217. package/crates/enact-providers/src/openai_compatible.rs +167 -0
  218. package/crates/enact-providers/src/openrouter.rs +33 -0
  219. package/crates/enact-runner/Cargo.toml +24 -0
  220. package/crates/enact-runner/README.md +76 -0
  221. package/crates/enact-runner/src/compaction.rs +225 -0
  222. package/crates/enact-runner/src/config.rs +118 -0
  223. package/crates/enact-runner/src/lib.rs +63 -0
  224. package/crates/enact-runner/src/loop_driver.rs +414 -0
  225. package/crates/enact-runner/src/parser.rs +421 -0
  226. package/crates/enact-runner/src/retry.rs +262 -0
  227. package/crates/enact-runner/tests/integration.rs +278 -0
  228. package/crates/enact-security/Cargo.toml +22 -0
  229. package/crates/enact-security/src/audit.rs +375 -0
  230. package/crates/enact-security/src/lib.rs +37 -0
  231. package/crates/enact-security/src/policy.rs +406 -0
  232. package/crates/enact-skills/Cargo.toml +25 -0
  233. package/crates/enact-skills/src/lib.rs +506 -0
  234. package/crates/enact-tools/Cargo.toml +22 -0
  235. package/crates/enact-tools/src/file_read.rs +166 -0
  236. package/crates/enact-tools/src/file_write.rs +216 -0
  237. package/crates/enact-tools/src/git_operations.rs +513 -0
  238. package/crates/enact-tools/src/http_request.rs +417 -0
  239. package/crates/enact-tools/src/lib.rs +104 -0
  240. package/crates/enact-tools/src/security.rs +227 -0
  241. package/crates/enact-tools/src/shell.rs +191 -0
  242. package/crates/enact-tools/src/traits.rs +159 -0
  243. package/docs/Makefile +74 -0
  244. package/docs/config.toml +62 -0
  245. package/docs/content/_index.md +174 -0
  246. package/docs/content/a2a/_index.md +431 -0
  247. package/docs/content/api/_index.md +323 -0
  248. package/docs/content/channels/_index.md +160 -0
  249. package/docs/content/channels/teams.md +205 -0
  250. package/docs/content/channels/telegram.md +182 -0
  251. package/docs/content/channels/webhook.md +423 -0
  252. package/docs/content/channels/whatsapp.md +240 -0
  253. package/docs/content/cli/_index.md +261 -0
  254. package/docs/content/concepts/_index.md +273 -0
  255. package/docs/content/configuration/_index.md +241 -0
  256. package/docs/content/cron/_index.md +248 -0
  257. package/docs/content/developers/_index.md +278 -0
  258. package/docs/content/getting-started/_index.md +180 -0
  259. package/docs/content/installation/_index.md +186 -0
  260. package/docs/content/installation/uninstall.md +101 -0
  261. package/docs/content/installation/updating.md +120 -0
  262. package/docs/content/mcp/_index.md +215 -0
  263. package/docs/content/memory/_index.md +163 -0
  264. package/docs/content/oauth/_index.md +515 -0
  265. package/docs/content/providers/_index.md +206 -0
  266. package/docs/content/roadmap/_index.md +199 -0
  267. package/docs/content/security/_index.md +219 -0
  268. package/docs/content/skills/_index.md +228 -0
  269. package/docs/content/tools/_index.md +485 -0
  270. package/docs/content/troubleshooting/_index.md +259 -0
  271. package/docs/content/yaml-schema/_index.md +294 -0
  272. package/docs/static/giallo-dark.css +91 -0
  273. package/docs/static/giallo-light.css +91 -0
  274. package/docs/themes/tanuki/.github/workflows/deploy.yml +44 -0
  275. package/docs/themes/tanuki/LICENSE +21 -0
  276. package/docs/themes/tanuki/README.md +166 -0
  277. package/docs/themes/tanuki/examples/blog/config.toml +58 -0
  278. package/docs/themes/tanuki/examples/blog/content/_index.md +4 -0
  279. package/docs/themes/tanuki/examples/blog/content/about.md +33 -0
  280. package/docs/themes/tanuki/examples/blog/content/blog/_index.md +7 -0
  281. package/docs/themes/tanuki/examples/blog/content/blog/api-design-best-practices.md +245 -0
  282. package/docs/themes/tanuki/examples/blog/content/blog/building-accessible-websites.md +147 -0
  283. package/docs/themes/tanuki/examples/blog/content/blog/css-grid-vs-flexbox.md +165 -0
  284. package/docs/themes/tanuki/examples/blog/content/blog/customizing-catppuccin-colors.md +137 -0
  285. package/docs/themes/tanuki/examples/blog/content/blog/dark-mode-best-practices.md +82 -0
  286. package/docs/themes/tanuki/examples/blog/content/blog/docker-essentials.md +301 -0
  287. package/docs/themes/tanuki/examples/blog/content/blog/getting-started-with-zola.md +129 -0
  288. package/docs/themes/tanuki/examples/blog/content/blog/git-workflow-for-content.md +112 -0
  289. package/docs/themes/tanuki/examples/blog/content/blog/introduction-to-webassembly.md +183 -0
  290. package/docs/themes/tanuki/examples/blog/content/blog/modern-javascript-features.md +234 -0
  291. package/docs/themes/tanuki/examples/blog/content/blog/testing-strategies.md +311 -0
  292. package/docs/themes/tanuki/examples/blog/content/blog/typography-for-developers.md +104 -0
  293. package/docs/themes/tanuki/examples/blog/content/blog/welcome-to-tanuki.md +67 -0
  294. package/docs/themes/tanuki/examples/blog/content/blog/why-static-sites.md +85 -0
  295. package/docs/themes/tanuki/examples/blog/content/projects.md +64 -0
  296. package/docs/themes/tanuki/examples/book/config.toml +17 -0
  297. package/docs/themes/tanuki/examples/book/content/_index.md +12 -0
  298. package/docs/themes/tanuki/examples/book/content/chapter-1.md +90 -0
  299. package/docs/themes/tanuki/examples/book/content/chapter-2.md +143 -0
  300. package/docs/themes/tanuki/examples/book/content/chapter-3.md +217 -0
  301. package/docs/themes/tanuki/examples/book/content/chapter-4.md +224 -0
  302. package/docs/themes/tanuki/examples/book/content/chapter-5.md +297 -0
  303. package/docs/themes/tanuki/examples/book/content/print.md +6 -0
  304. package/docs/themes/tanuki/examples/docs/config.toml +28 -0
  305. package/docs/themes/tanuki/examples/docs/content/_index.md +20 -0
  306. package/docs/themes/tanuki/examples/docs/content/components.md +156 -0
  307. package/docs/themes/tanuki/examples/docs/content/configuration.md +94 -0
  308. package/docs/themes/tanuki/examples/docs/content/customization.md +202 -0
  309. package/docs/themes/tanuki/examples/docs/content/deployment.md +204 -0
  310. package/docs/themes/tanuki/examples/docs/content/installation.md +59 -0
  311. package/docs/themes/tanuki/examples/docs/content/print.md +6 -0
  312. package/docs/themes/tanuki/examples/docs/static/img/tanuki-icon.avif +0 -0
  313. package/docs/themes/tanuki/examples/index.html +2104 -0
  314. package/docs/themes/tanuki/mise.toml +108 -0
  315. package/docs/themes/tanuki/sass/base/_catppuccin.scss +164 -0
  316. package/docs/themes/tanuki/sass/base/_fonts.scss +64 -0
  317. package/docs/themes/tanuki/sass/base/_reset.scss +152 -0
  318. package/docs/themes/tanuki/sass/base/_typography.scss +523 -0
  319. package/docs/themes/tanuki/sass/components/_buttons.scss +209 -0
  320. package/docs/themes/tanuki/sass/components/_code.scss +457 -0
  321. package/docs/themes/tanuki/sass/components/_landing.scss +633 -0
  322. package/docs/themes/tanuki/sass/components/_layout.scss +294 -0
  323. package/docs/themes/tanuki/sass/components/_navigation.scss +1200 -0
  324. package/docs/themes/tanuki/sass/components/_print.scss +237 -0
  325. package/docs/themes/tanuki/sass/components/_search.scss +224 -0
  326. package/docs/themes/tanuki/sass/components/_sidebar.scss +473 -0
  327. package/docs/themes/tanuki/sass/components/_theme-toggle.scss +186 -0
  328. package/docs/themes/tanuki/sass/modes/_blog.scss +366 -0
  329. package/docs/themes/tanuki/sass/modes/_product.scss +875 -0
  330. package/docs/themes/tanuki/sass/modes/_raskell.scss +1696 -0
  331. package/docs/themes/tanuki/sass/patterns/_buttons.scss +183 -0
  332. package/docs/themes/tanuki/sass/patterns/_cards.scss +144 -0
  333. package/docs/themes/tanuki/sass/patterns/_index.scss +9 -0
  334. package/docs/themes/tanuki/sass/patterns/_lists.scss +259 -0
  335. package/docs/themes/tanuki/sass/patterns/_sections.scss +243 -0
  336. package/docs/themes/tanuki/sass/style.scss +47 -0
  337. package/docs/themes/tanuki/sass/tokens/_colors.scss +139 -0
  338. package/docs/themes/tanuki/sass/tokens/_spacing.scss +100 -0
  339. package/docs/themes/tanuki/sass/tokens/_typography.scss +186 -0
  340. package/docs/themes/tanuki/screenshot.png +0 -0
  341. package/docs/themes/tanuki/sentinel.kdl +59 -0
  342. package/docs/themes/tanuki/static/elasticlunr.min.js +10 -0
  343. package/docs/themes/tanuki/static/fonts/GEIST-LICENSE.txt +92 -0
  344. package/docs/themes/tanuki/static/fonts/Geist-Variable.woff2 +0 -0
  345. package/docs/themes/tanuki/static/fonts/GeistMono-Variable.woff2 +0 -0
  346. package/docs/themes/tanuki/static/img/tanuki-icon.avif +0 -0
  347. package/docs/themes/tanuki/static/img/tanuki-icon.png +0 -0
  348. package/docs/themes/tanuki/static/js/anchors.js +18 -0
  349. package/docs/themes/tanuki/static/js/app.js +274 -0
  350. package/docs/themes/tanuki/static/js/code.js +394 -0
  351. package/docs/themes/tanuki/static/js/navigation.js +778 -0
  352. package/docs/themes/tanuki/static/js/scroll-to-top.js +33 -0
  353. package/docs/themes/tanuki/static/js/search-raskell.js +240 -0
  354. package/docs/themes/tanuki/static/js/search.js +215 -0
  355. package/docs/themes/tanuki/static/js/theme.js +169 -0
  356. package/docs/themes/tanuki/static/syntax-dark.css +151 -0
  357. package/docs/themes/tanuki/static/syntax-light.css +151 -0
  358. package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm.js +486 -0
  359. package/docs/themes/tanuki/static/wasm/sentinel_playground_wasm_bg.wasm +0 -0
  360. package/docs/themes/tanuki/templates/404.html +52 -0
  361. package/docs/themes/tanuki/templates/base.html +428 -0
  362. package/docs/themes/tanuki/templates/blog.html +66 -0
  363. package/docs/themes/tanuki/templates/home.html +108 -0
  364. package/docs/themes/tanuki/templates/index.html +178 -0
  365. package/docs/themes/tanuki/templates/landing.html +168 -0
  366. package/docs/themes/tanuki/templates/macros/nav.html +128 -0
  367. package/docs/themes/tanuki/templates/macros/posts.html +101 -0
  368. package/docs/themes/tanuki/templates/macros/ui.html +159 -0
  369. package/docs/themes/tanuki/templates/page.html +135 -0
  370. package/docs/themes/tanuki/templates/partials/footer.html +38 -0
  371. package/docs/themes/tanuki/templates/partials/header.html +366 -0
  372. package/docs/themes/tanuki/templates/partials/nav-buttons.html +55 -0
  373. package/docs/themes/tanuki/templates/partials/nav-overlay.html +81 -0
  374. package/docs/themes/tanuki/templates/partials/page-toc-panel.html +43 -0
  375. package/docs/themes/tanuki/templates/partials/search.html +52 -0
  376. package/docs/themes/tanuki/templates/partials/sidebar.html +107 -0
  377. package/docs/themes/tanuki/templates/partials/theme-toggle.html +35 -0
  378. package/docs/themes/tanuki/templates/partials/toc-overlay.html +146 -0
  379. package/docs/themes/tanuki/templates/partials/version-picker.html +38 -0
  380. package/docs/themes/tanuki/templates/print.html +244 -0
  381. package/docs/themes/tanuki/templates/section.html +186 -0
  382. package/docs/themes/tanuki/templates/taxonomy_list.html +18 -0
  383. package/docs/themes/tanuki/templates/taxonomy_single.html +31 -0
  384. package/docs/themes/tanuki/theme.toml +58 -0
  385. package/examples/hello-agent.rs +55 -0
  386. package/package.json +36 -0
  387. package/proto/config.proto +60 -0
  388. package/proto/events.proto +0 -0
  389. package/proto/runtime.proto +215 -0
@@ -0,0 +1,205 @@
1
+ //! Kernel - The Execution Engine
2
+ //!
3
+ //! The kernel is the heart of enact-core. It:
4
+ //! - Defines the execution state machine
5
+ //! - Applies all state transitions through a reducer
6
+ //! - Provides the ExecutionKernel for running graphs
7
+ //! - Enables replay from event logs
8
+ //!
9
+ //! ## Architecture
10
+ //!
11
+ //! ```text
12
+ //! ┌─────────────────────────────────────────────┐
13
+ //! │ ExecutionKernel │
14
+ //! │ ┌───────────────────────────────────────┐ │
15
+ //! │ │ Execution State │ │
16
+ //! │ │ (ExecutionState, Steps, Artifacts) │ │
17
+ //! │ └───────────────────────────────────────┘ │
18
+ //! │ │ │
19
+ //! │ ▼ │
20
+ //! │ ┌───────────────────────────────────────┐ │
21
+ //! │ │ Reducer │ │
22
+ //! │ │ (Action, State) → State │ │
23
+ //! │ └───────────────────────────────────────┘ │
24
+ //! │ │ │
25
+ //! │ ▼ │
26
+ //! │ ┌───────────────────────────────────────┐ │
27
+ //! │ │ Event Emitter │ │
28
+ //! │ │ (StreamEvent for UI/persistence) │ │
29
+ //! │ └───────────────────────────────────────┘ │
30
+ //! └─────────────────────────────────────────────┘
31
+ //! ```
32
+ //!
33
+ //! ## Key Invariants
34
+ //!
35
+ //! 1. **Single Source of Truth**: ExecutionKernel owns the Execution state
36
+ //! 2. **Reducer-Only Transitions**: All state changes go through the reducer
37
+ //! 3. **Deterministic**: Same actions → same state (enables replay)
38
+ //! 4. **Observable**: All transitions emit events
39
+ //!
40
+ //! @see docs/TECHNICAL/01-EXECUTION-TELEMETRY.md
41
+
42
+ pub mod artifact;
43
+ mod enforcement;
44
+ mod error;
45
+ mod event;
46
+ mod execution_model;
47
+ mod execution_state;
48
+ mod execution_strategy;
49
+ pub mod ids;
50
+ mod interrupt;
51
+ mod kernel;
52
+ pub mod persistence;
53
+ mod reducer;
54
+ mod replay;
55
+
56
+ // =============================================================================
57
+ // IDs - Source of Truth for all execution identifiers
58
+ // =============================================================================
59
+ pub use ids::{
60
+ // ID prefix constants
61
+ prefixes,
62
+ // Primary IDs
63
+ ArtifactId,
64
+ ExecutionId,
65
+ GraphId,
66
+ // Message/Thread IDs (MessageStore)
67
+ MessageId,
68
+ ThreadId,
69
+ // Backward compatibility aliases
70
+ NodeId,
71
+ // Parent linkage (causal tracing)
72
+ ParentLink,
73
+ ParentType,
74
+ RunId,
75
+ StepId,
76
+ // Step source (discovery tracking for agentic loops)
77
+ StepSource,
78
+ StepSourceType,
79
+ // SpawnMode (execution isolation control)
80
+ SpawnMode,
81
+ CancellationPolicy,
82
+ // Step/Node types
83
+ StepType,
84
+ // Callable types (for billing/traceability)
85
+ CallableType,
86
+ TenantId,
87
+ UserId,
88
+ };
89
+
90
+ // =============================================================================
91
+ // Events - Source of Truth for all execution events
92
+ // =============================================================================
93
+ pub use event::{
94
+ // Control events
95
+ ControlAction,
96
+ ControlActor,
97
+ ControlEvent,
98
+ ControlOutcome,
99
+ // Decision audit
100
+ DecisionAlternative,
101
+ DecisionInput,
102
+ DecisionRecord,
103
+ DecisionType,
104
+ // Legacy
105
+ Event,
106
+ // Execution events
107
+ ExecutionContext,
108
+ ExecutionEvent,
109
+ ExecutionEventType,
110
+ ModelContext,
111
+ };
112
+
113
+ // =============================================================================
114
+ // Core execution types
115
+ // =============================================================================
116
+ pub use execution_model::{Execution, Step};
117
+
118
+ // State machine
119
+ pub use execution_state::{ExecutionState, StepState, WaitReason};
120
+
121
+ // Reducer
122
+ pub use reducer::{reduce, ExecutionAction, ReducerError};
123
+
124
+ // Replay
125
+ pub use replay::{replay, EventLog, ReplayError};
126
+
127
+ // The kernel itself
128
+ pub use kernel::ExecutionKernel;
129
+
130
+ // =============================================================================
131
+ // Error Taxonomy (feat-02)
132
+ // =============================================================================
133
+ pub use error::{
134
+ // Error categories
135
+ ExecutionError,
136
+ ExecutionErrorCategory,
137
+ // Retry policies
138
+ BackoffStrategy,
139
+ RetryPolicy,
140
+ // Specific error codes
141
+ LlmErrorCode,
142
+ ToolErrorCode,
143
+ };
144
+
145
+ // =============================================================================
146
+ // Enforcement & Limits (feat-03)
147
+ // =============================================================================
148
+ pub use enforcement::{
149
+ // Usage tracking
150
+ ExecutionUsage,
151
+ UsageSnapshot,
152
+ // Enforcement results
153
+ EnforcementResult,
154
+ EnforcementViolation,
155
+ EnforcementWarning,
156
+ ViolationType,
157
+ // Middleware
158
+ EnforcementMiddleware,
159
+ EnforcementPolicy,
160
+ // Long-running execution policy (agentic DAG controls)
161
+ LongRunningExecutionPolicy,
162
+ // Timeout guard
163
+ StepTimeoutGuard,
164
+ };
165
+
166
+ // =============================================================================
167
+ // Execution strategy (parallel, interrupt handling)
168
+ // =============================================================================
169
+ pub use execution_strategy::{run_parallel, ParallelResult};
170
+ pub use interrupt::{InterruptDecision, InterruptReason, InterruptableRunner};
171
+
172
+ // =============================================================================
173
+ // Persistence Layer (feat-05)
174
+ // =============================================================================
175
+ pub use persistence::{
176
+ // Base trait
177
+ StorageBackend,
178
+ // EventStore
179
+ EventStore,
180
+ ExecutionEventData,
181
+ StoredEvent,
182
+ // MessageStore
183
+ CostInfo,
184
+ ExecutionStats,
185
+ FinishReason,
186
+ InMemoryMessageStore,
187
+ Message,
188
+ MessageMetadata,
189
+ MessagePart,
190
+ MessageRole,
191
+ MessageStore,
192
+ Thread,
193
+ TokenUsage,
194
+ // StateStore
195
+ ExecutionSnapshot,
196
+ StateStore,
197
+ StateStoreJsonExt,
198
+ // VectorStore
199
+ CollectionInfo,
200
+ DistanceMetric,
201
+ VectorDocument,
202
+ VectorFilter,
203
+ VectorSearchResult,
204
+ VectorStore,
205
+ };
@@ -0,0 +1,270 @@
1
+ //! EventStore - Append-only event log
2
+ //!
3
+ //! The EventStore is the **authoritative source of truth** for execution history.
4
+ //! It provides:
5
+ //! - Append-only semantics (events are never modified)
6
+ //! - Ordered events per execution
7
+ //! - Durability guarantees (event is persisted before append returns)
8
+ //!
9
+ //! ## Guarantees
10
+ //!
11
+ //! - **Durability**: Event is durable before `append()` returns
12
+ //! - **Ordering**: Events are strictly ordered by sequence number within an execution
13
+ //! - **Immutability**: Events are append-only, never modified or deleted
14
+ //! - **Authority**: EventStore is the single source of truth for execution history
15
+ //!
16
+ //! @see docs/TECHNICAL/14-PERSISTENCE-LAYER.md
17
+
18
+ use async_trait::async_trait;
19
+ use chrono::{DateTime, Utc};
20
+ use serde::{Deserialize, Serialize};
21
+
22
+ use crate::kernel::{
23
+ ExecutionError, ExecutionId, ParentLink, StepId, StepSourceType, StepType, TenantId,
24
+ };
25
+
26
+ use super::StorageBackend;
27
+
28
+ /// A stored event with metadata
29
+ #[derive(Debug, Clone, Serialize, Deserialize)]
30
+ pub struct StoredEvent {
31
+ /// Unique sequence number within the execution
32
+ pub sequence: u64,
33
+ /// The execution this event belongs to
34
+ pub execution_id: ExecutionId,
35
+ /// Tenant for multi-tenancy
36
+ pub tenant_id: TenantId,
37
+ /// The event payload
38
+ pub event: ExecutionEventData,
39
+ /// When this event occurred
40
+ pub timestamp: DateTime<Utc>,
41
+ }
42
+
43
+ /// Event data that can be stored
44
+ ///
45
+ /// These events represent all state transitions in an execution.
46
+ /// They can be replayed to reconstruct execution state.
47
+ #[derive(Debug, Clone, Serialize, Deserialize)]
48
+ #[serde(tag = "type", rename_all = "snake_case")]
49
+ pub enum ExecutionEventData {
50
+ /// Execution started
51
+ ExecutionStarted {
52
+ parent: Option<ParentLink>,
53
+ metadata: Option<serde_json::Value>,
54
+ },
55
+
56
+ /// A step started
57
+ StepStarted {
58
+ step_id: StepId,
59
+ parent_step_id: Option<StepId>,
60
+ step_type: StepType,
61
+ name: String,
62
+ },
63
+
64
+ /// A step completed successfully
65
+ StepCompleted {
66
+ step_id: StepId,
67
+ output: Option<String>,
68
+ duration_ms: u64,
69
+ },
70
+
71
+ /// A step failed
72
+ StepFailed {
73
+ step_id: StepId,
74
+ error: ExecutionError,
75
+ },
76
+
77
+ /// Execution paused
78
+ ExecutionPaused { reason: String },
79
+
80
+ /// Execution resumed
81
+ ExecutionResumed,
82
+
83
+ /// Execution completed successfully
84
+ ExecutionCompleted {
85
+ output: Option<String>,
86
+ duration_ms: u64,
87
+ },
88
+
89
+ /// Execution failed
90
+ ExecutionFailed { error: ExecutionError },
91
+
92
+ /// Execution cancelled
93
+ ExecutionCancelled { reason: String },
94
+
95
+ /// Artifact stored
96
+ ArtifactStored {
97
+ artifact_id: String,
98
+ step_id: StepId,
99
+ content_hash: String,
100
+ size_bytes: u64,
101
+ },
102
+
103
+ /// A step was dynamically discovered during execution
104
+ ///
105
+ /// Emitted when the agentic loop or LLM output identifies new work.
106
+ /// Enables audit trails for discovered steps and replay of discovery sequences.
107
+ StepDiscovered {
108
+ /// The discovered step's ID
109
+ step_id: StepId,
110
+ /// Which step discovered this new work (if any)
111
+ discovered_by: Option<StepId>,
112
+ /// What triggered the discovery
113
+ source_type: StepSourceType,
114
+ /// Human-readable reason for discovery
115
+ reason: String,
116
+ /// Discovery depth (how deep in the discovery chain)
117
+ depth: u32,
118
+ },
119
+
120
+ /// A tool call started (input available)
121
+ ToolCallStarted {
122
+ step_id: Option<StepId>,
123
+ tool_call_id: String,
124
+ tool_name: String,
125
+ input: serde_json::Value,
126
+ },
127
+
128
+ /// A tool call completed (output available)
129
+ ToolCallCompleted {
130
+ step_id: Option<StepId>,
131
+ tool_call_id: String,
132
+ output: serde_json::Value,
133
+ },
134
+
135
+ /// A checkpoint was saved
136
+ CheckpointSaved {
137
+ step_id: Option<StepId>,
138
+ checkpoint_id: String,
139
+ state_hash: String,
140
+ },
141
+
142
+ /// A goal was evaluated
143
+ GoalEvaluated {
144
+ step_id: Option<StepId>,
145
+ goal_id: String,
146
+ status: String, // "met", "not_met", "progressing"
147
+ score: Option<f64>,
148
+ reason: Option<String>,
149
+ },
150
+
151
+ /// Custom event (for extensibility)
152
+ Custom {
153
+ event_type: String,
154
+ data: serde_json::Value,
155
+ },
156
+ }
157
+
158
+ /// EventStore trait - append-only event log
159
+ ///
160
+ /// This is the core persistence trait for execution events. All execution
161
+ /// state can be reconstructed by replaying events from this store.
162
+ #[async_trait]
163
+ pub trait EventStore: StorageBackend {
164
+ /// Append an event to the store
165
+ ///
166
+ /// # Arguments
167
+ /// * `execution_id` - The execution this event belongs to
168
+ /// * `tenant_id` - Tenant for multi-tenancy isolation
169
+ /// * `event` - The event data to store
170
+ ///
171
+ /// # Returns
172
+ /// * `Ok(sequence)` - The sequence number assigned to this event
173
+ /// * `Err` - If the event could not be persisted
174
+ ///
175
+ /// # Guarantees
176
+ /// - Event is durable when this returns Ok
177
+ /// - Sequence numbers are monotonically increasing per execution
178
+ async fn append(
179
+ &self,
180
+ execution_id: &ExecutionId,
181
+ tenant_id: &TenantId,
182
+ event: ExecutionEventData,
183
+ ) -> anyhow::Result<u64>;
184
+
185
+ /// Append multiple events atomically
186
+ ///
187
+ /// All events are stored with consecutive sequence numbers, or none are stored.
188
+ ///
189
+ /// # Returns
190
+ /// * `Ok(first_sequence)` - The sequence number of the first event in the batch
191
+ async fn append_batch(
192
+ &self,
193
+ execution_id: &ExecutionId,
194
+ tenant_id: &TenantId,
195
+ events: Vec<ExecutionEventData>,
196
+ ) -> anyhow::Result<u64>;
197
+
198
+ /// Load all events for an execution
199
+ ///
200
+ /// Returns events ordered by sequence number.
201
+ async fn load_events(&self, execution_id: &ExecutionId) -> anyhow::Result<Vec<StoredEvent>>;
202
+
203
+ /// Load events after a specific sequence number
204
+ ///
205
+ /// Useful for incremental replay or catching up after a checkpoint.
206
+ ///
207
+ /// # Arguments
208
+ /// * `execution_id` - The execution to load events for
209
+ /// * `after_seq` - Return events with sequence > after_seq
210
+ async fn load_events_after(
211
+ &self,
212
+ execution_id: &ExecutionId,
213
+ after_seq: u64,
214
+ ) -> anyhow::Result<Vec<StoredEvent>>;
215
+
216
+ /// Get the latest sequence number for an execution
217
+ ///
218
+ /// Returns `None` if no events exist for this execution.
219
+ async fn get_latest_sequence(&self, execution_id: &ExecutionId) -> anyhow::Result<Option<u64>>;
220
+
221
+ /// Check if an execution exists
222
+ async fn execution_exists(&self, execution_id: &ExecutionId) -> anyhow::Result<bool> {
223
+ Ok(self.get_latest_sequence(execution_id).await?.is_some())
224
+ }
225
+
226
+ /// List executions for a tenant
227
+ ///
228
+ /// Returns execution IDs ordered by creation time (newest first).
229
+ ///
230
+ /// # Arguments
231
+ /// * `tenant_id` - The tenant to list executions for
232
+ /// * `limit` - Maximum number of executions to return
233
+ /// * `offset` - Number of executions to skip (for pagination)
234
+ async fn list_executions(
235
+ &self,
236
+ tenant_id: &TenantId,
237
+ limit: usize,
238
+ offset: usize,
239
+ ) -> anyhow::Result<Vec<ExecutionId>>;
240
+
241
+ /// Count events for an execution
242
+ async fn count_events(&self, execution_id: &ExecutionId) -> anyhow::Result<u64> {
243
+ Ok(self.get_latest_sequence(execution_id).await?.unwrap_or(0))
244
+ }
245
+ }
246
+
247
+ #[cfg(test)]
248
+ mod tests {
249
+ use super::*;
250
+
251
+ #[test]
252
+ fn test_event_serialization() {
253
+ let event = ExecutionEventData::StepStarted {
254
+ step_id: StepId::new(),
255
+ parent_step_id: None,
256
+ step_type: StepType::FunctionNode,
257
+ name: "test_step".to_string(),
258
+ };
259
+
260
+ let json = serde_json::to_string(&event).unwrap();
261
+ let parsed: ExecutionEventData = serde_json::from_str(&json).unwrap();
262
+
263
+ match parsed {
264
+ ExecutionEventData::StepStarted { name, .. } => {
265
+ assert_eq!(name, "test_step");
266
+ }
267
+ _ => panic!("Wrong event type"),
268
+ }
269
+ }
270
+ }