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,405 @@
1
+ //! Inbox Message Types
2
+ //!
3
+ //! @see docs/TECHNICAL/31-MID-EXECUTION-GUIDANCE.md Section 3
4
+
5
+ use crate::kernel::ExecutionId;
6
+ use chrono::{DateTime, Utc};
7
+ use serde::{Deserialize, Serialize};
8
+
9
+ /// Inbox message - wraps all message types
10
+ #[derive(Debug, Clone, Serialize, Deserialize)]
11
+ #[serde(tag = "type", rename_all = "snake_case")]
12
+ pub enum InboxMessage {
13
+ /// Control message (pause/resume/cancel)
14
+ Control(ControlMessage),
15
+ /// User or system guidance
16
+ Guidance(GuidanceMessage),
17
+ /// Evidence update from discovery or external source
18
+ Evidence(EvidenceUpdate),
19
+ /// Agent-to-Agent message
20
+ A2a(A2aMessage),
21
+ }
22
+
23
+ impl InboxMessage {
24
+ /// Get the message type for logging/audit
25
+ pub fn message_type(&self) -> InboxMessageType {
26
+ match self {
27
+ InboxMessage::Control(_) => InboxMessageType::Control,
28
+ InboxMessage::Guidance(_) => InboxMessageType::Guidance,
29
+ InboxMessage::Evidence(_) => InboxMessageType::Evidence,
30
+ InboxMessage::A2a(_) => InboxMessageType::A2a,
31
+ }
32
+ }
33
+
34
+ /// Get the message ID
35
+ pub fn id(&self) -> &str {
36
+ match self {
37
+ InboxMessage::Control(m) => &m.id,
38
+ InboxMessage::Guidance(m) => &m.id,
39
+ InboxMessage::Evidence(m) => &m.id,
40
+ InboxMessage::A2a(m) => &m.id,
41
+ }
42
+ }
43
+
44
+ /// Get the execution ID this message is for
45
+ pub fn execution_id(&self) -> &ExecutionId {
46
+ match self {
47
+ InboxMessage::Control(m) => &m.execution_id,
48
+ InboxMessage::Guidance(m) => &m.execution_id,
49
+ InboxMessage::Evidence(m) => &m.execution_id,
50
+ InboxMessage::A2a(m) => &m.execution_id,
51
+ }
52
+ }
53
+
54
+ /// Get the priority for sorting (lower = higher priority)
55
+ ///
56
+ /// INV-INBOX-002: Control messages have highest priority
57
+ pub fn priority_order(&self) -> u8 {
58
+ match self {
59
+ InboxMessage::Control(_) => 0, // Highest priority
60
+ InboxMessage::Evidence(e) if e.impact == EvidenceImpact::ContradictsPlan => 1,
61
+ InboxMessage::Evidence(_) => 2,
62
+ InboxMessage::Guidance(g) if g.priority == GuidancePriority::High => 3,
63
+ InboxMessage::Guidance(_) => 4,
64
+ InboxMessage::A2a(_) => 5, // Lowest priority
65
+ }
66
+ }
67
+
68
+ /// Check if this is a control message
69
+ pub fn is_control(&self) -> bool {
70
+ matches!(self, InboxMessage::Control(_))
71
+ }
72
+ }
73
+
74
+ /// Message type for logging
75
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
76
+ #[serde(rename_all = "snake_case")]
77
+ pub enum InboxMessageType {
78
+ Control,
79
+ Guidance,
80
+ Evidence,
81
+ A2a,
82
+ }
83
+
84
+ // =============================================================================
85
+ // Control Messages
86
+ // =============================================================================
87
+
88
+ /// Control message - pause/resume/cancel execution
89
+ #[derive(Debug, Clone, Serialize, Deserialize)]
90
+ pub struct ControlMessage {
91
+ /// Unique message ID
92
+ pub id: String,
93
+ /// Target execution
94
+ pub execution_id: ExecutionId,
95
+ /// Control action
96
+ pub action: ControlAction,
97
+ /// Reason for the action
98
+ pub reason: Option<String>,
99
+ /// Actor who initiated (user_id, system, agent_id)
100
+ pub actor: String,
101
+ /// When the message was created
102
+ pub created_at: DateTime<Utc>,
103
+ }
104
+
105
+ impl ControlMessage {
106
+ /// Create a new control message
107
+ pub fn new(execution_id: ExecutionId, action: ControlAction, actor: impl Into<String>) -> Self {
108
+ Self {
109
+ id: uuid::Uuid::new_v4().to_string(),
110
+ execution_id,
111
+ action,
112
+ reason: None,
113
+ actor: actor.into(),
114
+ created_at: Utc::now(),
115
+ }
116
+ }
117
+
118
+ /// Add a reason
119
+ pub fn with_reason(mut self, reason: impl Into<String>) -> Self {
120
+ self.reason = Some(reason.into());
121
+ self
122
+ }
123
+ }
124
+
125
+ /// Control action
126
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
127
+ #[serde(rename_all = "snake_case")]
128
+ pub enum ControlAction {
129
+ /// Pause execution
130
+ Pause,
131
+ /// Resume paused execution
132
+ Resume,
133
+ /// Cancel execution
134
+ Cancel,
135
+ /// Create a checkpoint
136
+ Checkpoint,
137
+ /// Compact context (free memory)
138
+ Compact,
139
+ }
140
+
141
+ // =============================================================================
142
+ // Guidance Messages
143
+ // =============================================================================
144
+
145
+ /// Guidance message - user or system guidance
146
+ #[derive(Debug, Clone, Serialize, Deserialize)]
147
+ pub struct GuidanceMessage {
148
+ /// Unique message ID
149
+ pub id: String,
150
+ /// Target execution
151
+ pub execution_id: ExecutionId,
152
+ /// Source of guidance
153
+ pub from: GuidanceSource,
154
+ /// Guidance content
155
+ pub content: String,
156
+ /// Additional context
157
+ pub context: Option<serde_json::Value>,
158
+ /// Priority level
159
+ pub priority: GuidancePriority,
160
+ /// When the message was created
161
+ pub created_at: DateTime<Utc>,
162
+ }
163
+
164
+ impl GuidanceMessage {
165
+ /// Create a new guidance message from user
166
+ pub fn from_user(
167
+ execution_id: ExecutionId,
168
+ content: impl Into<String>,
169
+ ) -> Self {
170
+ Self {
171
+ id: uuid::Uuid::new_v4().to_string(),
172
+ execution_id,
173
+ from: GuidanceSource::User,
174
+ content: content.into(),
175
+ context: None,
176
+ priority: GuidancePriority::Medium,
177
+ created_at: Utc::now(),
178
+ }
179
+ }
180
+
181
+ /// Set priority
182
+ pub fn with_priority(mut self, priority: GuidancePriority) -> Self {
183
+ self.priority = priority;
184
+ self
185
+ }
186
+
187
+ /// Add context
188
+ pub fn with_context(mut self, context: serde_json::Value) -> Self {
189
+ self.context = Some(context);
190
+ self
191
+ }
192
+ }
193
+
194
+ /// Source of guidance
195
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
196
+ #[serde(rename_all = "snake_case")]
197
+ pub enum GuidanceSource {
198
+ User,
199
+ System,
200
+ Agent,
201
+ }
202
+
203
+ /// Guidance priority
204
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
205
+ #[serde(rename_all = "snake_case")]
206
+ pub enum GuidancePriority {
207
+ Low,
208
+ Medium,
209
+ High,
210
+ }
211
+
212
+ // =============================================================================
213
+ // Evidence Updates
214
+ // =============================================================================
215
+
216
+ /// Evidence update - new information that may affect execution
217
+ #[derive(Debug, Clone, Serialize, Deserialize)]
218
+ pub struct EvidenceUpdate {
219
+ /// Unique message ID
220
+ pub id: String,
221
+ /// Target execution
222
+ pub execution_id: ExecutionId,
223
+ /// Source of evidence
224
+ pub source: EvidenceSource,
225
+ /// The evidence content
226
+ pub title: String,
227
+ /// Detailed content
228
+ pub content: serde_json::Value,
229
+ /// Confidence score (0.0 - 1.0)
230
+ pub confidence: Option<f64>,
231
+ /// Impact classification
232
+ pub impact: EvidenceImpact,
233
+ /// When the message was created
234
+ pub created_at: DateTime<Utc>,
235
+ }
236
+
237
+ impl EvidenceUpdate {
238
+ /// Create a new evidence update
239
+ pub fn new(
240
+ execution_id: ExecutionId,
241
+ source: EvidenceSource,
242
+ title: impl Into<String>,
243
+ content: serde_json::Value,
244
+ impact: EvidenceImpact,
245
+ ) -> Self {
246
+ Self {
247
+ id: uuid::Uuid::new_v4().to_string(),
248
+ execution_id,
249
+ source,
250
+ title: title.into(),
251
+ content,
252
+ confidence: None,
253
+ impact,
254
+ created_at: Utc::now(),
255
+ }
256
+ }
257
+
258
+ /// Set confidence score
259
+ pub fn with_confidence(mut self, confidence: f64) -> Self {
260
+ self.confidence = Some(confidence.clamp(0.0, 1.0));
261
+ self
262
+ }
263
+ }
264
+
265
+ /// Source of evidence
266
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
267
+ #[serde(rename_all = "snake_case")]
268
+ pub enum EvidenceSource {
269
+ /// Discovered during execution
270
+ Discovery,
271
+ /// From a tool result
272
+ ToolResult,
273
+ /// From external source
274
+ External,
275
+ /// From memory retrieval
276
+ Memory,
277
+ }
278
+
279
+ /// Evidence impact classification
280
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
281
+ #[serde(rename_all = "snake_case")]
282
+ pub enum EvidenceImpact {
283
+ /// Just informational, add to context
284
+ Informational,
285
+ /// Requires human review
286
+ RequiresReview,
287
+ /// Contradicts current plan
288
+ ContradictsPlan,
289
+ }
290
+
291
+ // =============================================================================
292
+ // A2A Messages (Agent-to-Agent)
293
+ // =============================================================================
294
+
295
+ /// Agent-to-Agent message
296
+ #[derive(Debug, Clone, Serialize, Deserialize)]
297
+ pub struct A2aMessage {
298
+ /// Unique message ID
299
+ pub id: String,
300
+ /// Target execution
301
+ pub execution_id: ExecutionId,
302
+ /// Source agent ID
303
+ pub from_agent: String,
304
+ /// Message type
305
+ pub message_type: String,
306
+ /// Message payload
307
+ pub payload: serde_json::Value,
308
+ /// When the message was created
309
+ pub created_at: DateTime<Utc>,
310
+ }
311
+
312
+ impl A2aMessage {
313
+ /// Create a new A2A message
314
+ pub fn new(
315
+ execution_id: ExecutionId,
316
+ from_agent: impl Into<String>,
317
+ message_type: impl Into<String>,
318
+ payload: serde_json::Value,
319
+ ) -> Self {
320
+ Self {
321
+ id: uuid::Uuid::new_v4().to_string(),
322
+ execution_id,
323
+ from_agent: from_agent.into(),
324
+ message_type: message_type.into(),
325
+ payload,
326
+ created_at: Utc::now(),
327
+ }
328
+ }
329
+ }
330
+
331
+ #[cfg(test)]
332
+ mod tests {
333
+ use super::*;
334
+
335
+ #[test]
336
+ fn test_control_message_priority() {
337
+ let exec_id = ExecutionId::new();
338
+ let control = InboxMessage::Control(ControlMessage::new(
339
+ exec_id.clone(),
340
+ ControlAction::Pause,
341
+ "test_user",
342
+ ));
343
+
344
+ assert_eq!(control.priority_order(), 0);
345
+ assert!(control.is_control());
346
+ }
347
+
348
+ #[test]
349
+ fn test_evidence_priority_contradicts() {
350
+ let exec_id = ExecutionId::new();
351
+ let evidence = InboxMessage::Evidence(EvidenceUpdate::new(
352
+ exec_id,
353
+ EvidenceSource::Discovery,
354
+ "Found conflict",
355
+ serde_json::json!({}),
356
+ EvidenceImpact::ContradictsPlan,
357
+ ));
358
+
359
+ assert_eq!(evidence.priority_order(), 1);
360
+ }
361
+
362
+ #[test]
363
+ fn test_guidance_priority() {
364
+ let exec_id = ExecutionId::new();
365
+ let high = InboxMessage::Guidance(
366
+ GuidanceMessage::from_user(exec_id.clone(), "Focus on EU")
367
+ .with_priority(GuidancePriority::High),
368
+ );
369
+ let low = InboxMessage::Guidance(
370
+ GuidanceMessage::from_user(exec_id, "Also check this")
371
+ .with_priority(GuidancePriority::Low),
372
+ );
373
+
374
+ assert_eq!(high.priority_order(), 3);
375
+ assert_eq!(low.priority_order(), 4);
376
+ }
377
+
378
+ #[test]
379
+ fn test_message_sorting() {
380
+ let exec_id = ExecutionId::new();
381
+ let mut messages = vec![
382
+ InboxMessage::Guidance(GuidanceMessage::from_user(exec_id.clone(), "test")),
383
+ InboxMessage::Control(ControlMessage::new(
384
+ exec_id.clone(),
385
+ ControlAction::Pause,
386
+ "user",
387
+ )),
388
+ InboxMessage::Evidence(EvidenceUpdate::new(
389
+ exec_id,
390
+ EvidenceSource::Discovery,
391
+ "Found",
392
+ serde_json::json!({}),
393
+ EvidenceImpact::Informational,
394
+ )),
395
+ ];
396
+
397
+ // Sort by priority (INV-INBOX-002)
398
+ messages.sort_by_key(|m| m.priority_order());
399
+
400
+ // Control should be first
401
+ assert!(messages[0].is_control());
402
+ assert!(matches!(messages[1], InboxMessage::Evidence(_)));
403
+ assert!(matches!(messages[2], InboxMessage::Guidance(_)));
404
+ }
405
+ }
@@ -0,0 +1,31 @@
1
+ //! Agent Inbox - Mid-Execution Guidance
2
+ //!
3
+ //! The inbox enables injection of guidance, evidence, and control signals
4
+ //! into running executions. This is checked after every step in the Agentic Loop.
5
+ //!
6
+ //! ## Invariants
7
+ //!
8
+ //! - **INV-INBOX-001**: Inbox MUST be checked after every step in the Agentic Loop
9
+ //! - **INV-INBOX-002**: Control messages (pause/cancel) MUST be processed first
10
+ //! - **INV-INBOX-003**: All inbox messages MUST emit events for audit trail
11
+ //! - **INV-INBOX-004**: Messages are scoped to a specific ExecutionId
12
+ //!
13
+ //! ## Message Priority
14
+ //!
15
+ //! 1. Control (pause/resume/cancel) - highest
16
+ //! 2. Evidence (contradicts_plan)
17
+ //! 3. Evidence (other)
18
+ //! 4. Guidance (high priority)
19
+ //! 5. Guidance (other)
20
+ //! 6. A2A - lowest
21
+ //!
22
+ //! @see docs/TECHNICAL/31-MID-EXECUTION-GUIDANCE.md
23
+
24
+ mod message;
25
+ mod store;
26
+
27
+ pub use message::{
28
+ A2aMessage, ControlAction, ControlMessage, EvidenceImpact, EvidenceSource, EvidenceUpdate,
29
+ GuidanceMessage, GuidancePriority, GuidanceSource, InboxMessage, InboxMessageType,
30
+ };
31
+ pub use store::{InMemoryInboxStore, InboxStore};