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,273 @@
1
+ +++
2
+ title = "Concepts"
3
+ weight = 5
4
+ sort_by = "weight"
5
+ +++
6
+
7
+ # Core Concepts
8
+
9
+ Understanding Enact's architecture and design.
10
+
11
+ ## Architecture Overview
12
+
13
+ Enact is built on a modular crate architecture:
14
+
15
+ ```
16
+ ┌─────────────────────────────────────────────────────────────────┐
17
+ │ enact-cli │
18
+ │ doctor │ run │ serve │ version │
19
+ └───────────────────────────────┬─────────────────────────────────┘
20
+
21
+ ┌───────────────────────────────▼─────────────────────────────────┐
22
+ │ enact-runner │
23
+ │ DefaultAgentRunner │ LoopOutcome │ Retry │
24
+ └───────────────────────────────┬─────────────────────────────────┘
25
+
26
+ ┌───────────────────────────────▼─────────────────────────────────┐
27
+ │ enact-core │
28
+ │ LlmCallable │ Callable trait │ Graph System │
29
+ └─────────────────────────────────────────────────────────────────┘
30
+
31
+ ┌───────────────┬───────────┼───────────┬───────────────┐
32
+ ▼ ▼ ▼ ▼ ▼
33
+ ┌─────────┐ ┌───────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
34
+ │ skills │ │ providers │ │ gateway │ │channels │ │ mcp │
35
+ │ TOML/MD │ │ OpenAI, │ │ HTTP │ │WhatsApp │ │ Stdio │
36
+ │ tools │ │ Azure,etc │ │ Axum │ │Telegram │ │JSON-RPC │
37
+ └─────────┘ └───────────┘ └─────────┘ └─────────┘ └─────────┘
38
+ ```
39
+
40
+ ## Callable
41
+
42
+ The `Callable` trait is the core abstraction for anything that can process input:
43
+
44
+ ```rust
45
+ #[async_trait]
46
+ pub trait Callable: Send + Sync {
47
+ fn name(&self) -> &str;
48
+ async fn run(&self, input: &str) -> anyhow::Result<String>;
49
+ }
50
+ ```
51
+
52
+ ### LlmCallable
53
+
54
+ LLM-powered callable with system prompt:
55
+
56
+ ```rust
57
+ let callable = LlmCallable::with_provider(
58
+ "assistant",
59
+ "You are a helpful assistant.",
60
+ provider,
61
+ );
62
+ ```
63
+
64
+ ## Runner
65
+
66
+ The `DefaultAgentRunner` executes callables with production features:
67
+
68
+ ```rust
69
+ let mut runner = DefaultAgentRunner::default_new();
70
+ let outcome = runner.run(&callable, "Hello!").await?;
71
+ ```
72
+
73
+ ### LoopOutcome
74
+
75
+ Execution results:
76
+
77
+ ```rust
78
+ enum LoopOutcome {
79
+ Completed(String), // Success
80
+ MaxIterationsReached { last_output, iterations },
81
+ Cancelled,
82
+ TimedOut { elapsed_secs },
83
+ }
84
+ ```
85
+
86
+ ## Gateway
87
+
88
+ The HTTP gateway connects channels to the runner:
89
+
90
+ ```
91
+ WhatsApp Message → WhatsAppChannel → RunnerResponder → DefaultAgentRunner → Response
92
+ ```
93
+
94
+ ### InboundResponder
95
+
96
+ Custom message handling:
97
+
98
+ ```rust
99
+ #[async_trait]
100
+ pub trait InboundResponder: Send + Sync {
101
+ async fn handle(&self, message: &ChannelMessage) -> anyhow::Result<Option<String>>;
102
+ }
103
+ ```
104
+
105
+ Built-in implementations:
106
+ - `EchoResponder` - Returns input as output
107
+ - `RunnerResponder` - Routes through `DefaultAgentRunner`
108
+
109
+ ### Gateway Features
110
+
111
+ | Feature | Description |
112
+ |---------|-------------|
113
+ | Rate Limiting | Sliding window, 120/min per client |
114
+ | Idempotency | 5-minute TTL, SHA-256 deduplication |
115
+ | Signature Verification | HMAC-SHA256 validation |
116
+ | Request Limits | 64KB body, 30s timeout |
117
+
118
+ ## Channels
119
+
120
+ Channels connect external messaging platforms:
121
+
122
+ ```rust
123
+ #[async_trait]
124
+ pub trait Channel: Send + Sync {
125
+ fn channel_id(&self) -> &str;
126
+ async fn receive(&self) -> Result<IncomingMessage>;
127
+ async fn send(&self, message: OutgoingMessage) -> Result<MessageId>;
128
+ async fn run(&self) -> Result<()>;
129
+ }
130
+ ```
131
+
132
+ ### WhatsAppChannel
133
+
134
+ ```rust
135
+ let channel = WhatsAppChannel::new(
136
+ access_token,
137
+ endpoint_id,
138
+ verify_token,
139
+ allowed_numbers,
140
+ );
141
+ ```
142
+
143
+ ## Providers
144
+
145
+ LLM providers implement `ModelProvider`:
146
+
147
+ ```rust
148
+ #[async_trait]
149
+ pub trait ModelProvider: Send + Sync {
150
+ async fn complete(&self, request: ChatRequest) -> Result<ChatResponse>;
151
+ fn requires_network(&self) -> bool { true }
152
+ }
153
+ ```
154
+
155
+ ### OpenAICompatible
156
+
157
+ Works with OpenAI, Azure, Ollama, OpenRouter:
158
+
159
+ ```rust
160
+ let provider = OpenAICompatible::new(
161
+ "https://api.openai.com",
162
+ "gpt-4o-mini",
163
+ Some(api_key),
164
+ );
165
+ ```
166
+
167
+ ## YAML Agent Schema
168
+
169
+ Agents can be defined as YAML DAGs:
170
+
171
+ ```yaml
172
+ name: my-agent
173
+ version: "1.0"
174
+
175
+ nodes:
176
+ process:
177
+ type: llm
178
+ system_prompt: "You are helpful."
179
+ edges:
180
+ _default: END
181
+ ```
182
+
183
+ ### Node Types
184
+
185
+ | Type | Description |
186
+ |------|-------------|
187
+ | `llm` | LLM processing with system prompt |
188
+ | `function` | Execute shell command |
189
+ | `condition` | Branch based on expression |
190
+ | `graph` | Execute sub-graph |
191
+
192
+ ## Configuration
193
+
194
+ Environment-based configuration:
195
+
196
+ ```bash
197
+ # LLM Provider
198
+ OPENAI_API_KEY=sk-...
199
+ OPENAI_MODEL=gpt-4o-mini
200
+ OPENAI_BASE_URL=https://api.openai.com
201
+
202
+ # WhatsApp
203
+ WHATSAPP_ACCESS_TOKEN=...
204
+ WHATSAPP_ENDPOINT_ID=...
205
+ WHATSAPP_VERIFY_TOKEN=...
206
+ ```
207
+
208
+ ## Skills System
209
+
210
+ Skills are user-defined or community-built capabilities. They live in `~/.enact/skills/<name>/` or in your workspace `skills/` directory.
211
+
212
+ ### Skill Formats
213
+
214
+ **SKILL.toml** - Structured format with tools:
215
+
216
+ ```toml
217
+ [skill]
218
+ name = "my-skill"
219
+ description = "What this skill does"
220
+ version = "0.1.0"
221
+ author = "your-name"
222
+ tags = ["productivity", "automation"]
223
+
224
+ [[tools]]
225
+ name = "my_tool"
226
+ description = "What this tool does"
227
+ kind = "shell"
228
+ command = "echo hello"
229
+ ```
230
+
231
+ **SKILL.md** - Simple markdown with instructions for the agent.
232
+
233
+ ### Open-Skills Integration
234
+
235
+ Enact automatically syncs with the [open-skills](https://github.com/besoeasy/open-skills) community repository.
236
+
237
+ ## MCP Client
238
+
239
+ The Model Context Protocol (MCP) client connects to MCP servers via stdio transport.
240
+
241
+ ### Connecting to an MCP Server
242
+
243
+ ```rust
244
+ use enact_mcp::McpStdioClient;
245
+
246
+ let mut client = McpStdioClient::new("mcp-server", &["--arg"]).await?;
247
+
248
+ // List available tools
249
+ let tools = client.list_tools().await?;
250
+
251
+ // Call a tool
252
+ let result = client.call_tool("tool_name", json!({"arg": "value"})).await?;
253
+ ```
254
+
255
+ ### MCP Features
256
+
257
+ - **JSON-RPC 2.0 protocol**
258
+ - **Stdio transport** (subprocess communication)
259
+ - **Tool discovery** via `tools/list`
260
+ - **Tool execution** via `tools/call`
261
+ - **Async/await support**
262
+
263
+ ## Future Concepts
264
+
265
+ ### OAuth Token Lifecycle (Phase 1)
266
+ - Token management
267
+ - Automatic refresh
268
+ - Secure storage
269
+
270
+ ### Multi-Agent (Phase 2)
271
+ - Agent communication
272
+ - Orchestration
273
+ - Shared state
@@ -0,0 +1,241 @@
1
+ +++
2
+ title = "Configuration"
3
+ weight = 4
4
+ sort_by = "weight"
5
+ +++
6
+
7
+ # Configuration
8
+
9
+ Enact configuration via environment variables and `.env` files.
10
+
11
+ ## Status
12
+
13
+ | Feature | Status |
14
+ |---------|--------|
15
+ | `.env` file loading | ✅ Implemented |
16
+ | Environment variables | ✅ Implemented |
17
+ | Config struct | ✅ Implemented |
18
+ | CLI config commands | 🚧 Future |
19
+ | Encrypted settings | 🚧 Future |
20
+ | Config TUI | 🚧 Future |
21
+
22
+ ## Quick Start
23
+
24
+ Create a `.env` file in your project root:
25
+
26
+ ```bash
27
+ # .env
28
+ OPENAI_API_KEY=sk-...
29
+ TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
30
+ ```
31
+
32
+ Load configuration in Rust:
33
+
34
+ ```rust
35
+ use enact_config::Config;
36
+
37
+ let config = Config::load()?;
38
+ let api_key = config.openai_api_key()?;
39
+ ```
40
+
41
+ ## Environment Variables
42
+
43
+ ### LLM Providers
44
+
45
+ ```bash
46
+ # Azure OpenAI
47
+ AZURE_OPENAI_API_KEY=your-key
48
+ AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
49
+ AZURE_OPENAI_DEPLOYMENT=gpt-4
50
+ AZURE_OPENAI_API_VERSION=2024-02-01
51
+
52
+ # OpenAI
53
+ OPENAI_API_KEY=sk-...
54
+ OPENAI_ORG_ID=org-... # Optional
55
+
56
+ # Anthropic
57
+ ANTHROPIC_API_KEY=sk-ant-...
58
+
59
+ # Google
60
+ GOOGLE_API_KEY=...
61
+
62
+ # OpenRouter
63
+ OPENROUTER_API_KEY=sk-or-...
64
+
65
+ # Ollama (local)
66
+ OLLAMA_ENDPOINT=http://localhost:11434
67
+ ```
68
+
69
+ ### Channels
70
+
71
+ ```bash
72
+ # Telegram
73
+ TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
74
+
75
+ # Teams
76
+ TEAMS_APP_ID=your-azure-ad-app-id
77
+ TEAMS_APP_SECRET=your-client-secret
78
+ TEAMS_TENANT_ID=your-tenant-id # or "common" for multi-tenant
79
+
80
+ # WhatsApp
81
+ WHATSAPP_PHONE_NUMBER_ID=123456789012345
82
+ WHATSAPP_ACCESS_TOKEN=EAABc...
83
+ WHATSAPP_WEBHOOK_VERIFY_TOKEN=your-secret-token
84
+ WHATSAPP_APP_SECRET=your-app-secret # Optional, for signature verification
85
+ ```
86
+
87
+ ## Using Configuration
88
+
89
+ ### In Rust Code
90
+
91
+ ```rust
92
+ use enact_config::Config;
93
+ use enact_providers::azure::AzureOpenAiProvider;
94
+
95
+ // Load config from .env and environment
96
+ let config = Config::load()?;
97
+
98
+ // Create provider from config
99
+ let provider = AzureOpenAiProvider::from_config(&config)?;
100
+ ```
101
+
102
+ ### Config Struct
103
+
104
+ ```rust
105
+ pub struct Config {
106
+ // Azure OpenAI
107
+ pub azure_openai_api_key: Option<String>,
108
+ pub azure_openai_endpoint: Option<String>,
109
+ pub azure_openai_deployment: Option<String>,
110
+ pub azure_openai_api_version: Option<String>,
111
+
112
+ // OpenAI
113
+ pub openai_api_key: Option<String>,
114
+ pub openai_org_id: Option<String>,
115
+
116
+ // Anthropic
117
+ pub anthropic_api_key: Option<String>,
118
+
119
+ // Google
120
+ pub google_api_key: Option<String>,
121
+
122
+ // OpenRouter
123
+ pub openrouter_api_key: Option<String>,
124
+
125
+ // Ollama
126
+ pub ollama_endpoint: Option<String>,
127
+
128
+ // Telegram
129
+ pub telegram_bot_token: Option<String>,
130
+
131
+ // Teams
132
+ pub teams_app_id: Option<String>,
133
+ pub teams_app_secret: Option<String>,
134
+ pub teams_tenant_id: Option<String>,
135
+
136
+ // WhatsApp
137
+ pub whatsapp_phone_number_id: Option<String>,
138
+ pub whatsapp_access_token: Option<String>,
139
+ pub whatsapp_webhook_verify_token: Option<String>,
140
+ pub whatsapp_app_secret: Option<String>,
141
+ }
142
+ ```
143
+
144
+ ## Configuration Priority
145
+
146
+ Configuration values are loaded in this order (later overrides earlier):
147
+
148
+ 1. Default values
149
+ 2. `.env` file in current directory
150
+ 3. Environment variables
151
+
152
+ ```bash
153
+ # Environment variable overrides .env file
154
+ export OPENAI_API_KEY=sk-override...
155
+ ```
156
+
157
+ ## Security Best Practices
158
+
159
+ ### Never Commit Secrets
160
+
161
+ Add `.env` to `.gitignore`:
162
+
163
+ ```bash
164
+ # .gitignore
165
+ .env
166
+ .env.local
167
+ .env.*.local
168
+ ```
169
+
170
+ ### Use Different Keys per Environment
171
+
172
+ ```bash
173
+ # .env.development
174
+ OPENAI_API_KEY=sk-dev-...
175
+
176
+ # .env.production
177
+ OPENAI_API_KEY=sk-prod-...
178
+ ```
179
+
180
+ ### Validate Required Config
181
+
182
+ ```rust
183
+ let config = Config::load()?;
184
+
185
+ // These will error if not set
186
+ let api_key = config.openai_api_key()
187
+ .ok_or_else(|| anyhow::anyhow!("OPENAI_API_KEY not set"))?;
188
+ ```
189
+
190
+ ---
191
+
192
+ ## Future Configuration (🚧 Planned)
193
+
194
+ ### CLI Config Commands (🚧 Future)
195
+
196
+ ```bash
197
+ # Open interactive configuration TUI
198
+ enact config
199
+
200
+ # Or set values via CLI
201
+ enact config set runtime.mode local
202
+ enact config get runtime.mode
203
+ ```
204
+
205
+ ### Encrypted Settings (🚧 Future)
206
+
207
+ Non-sensitive settings will be stored encrypted:
208
+
209
+ ```bash
210
+ enact config set runtime.stepTimeoutMs 30000
211
+ enact config set storage.vectorStore.type qdrant
212
+ ```
213
+
214
+ Storage location (planned):
215
+ - macOS: `~/.config/enact/config.encrypted`
216
+ - Linux: `~/.config/enact/config.encrypted`
217
+ - Windows: `%APPDATA%\enact\config.encrypted`
218
+
219
+ ### Runtime Modes (🚧 Future)
220
+
221
+ | Mode | Network | Cloud Sync | Use Case |
222
+ |------|---------|------------|----------|
223
+ | `local` | ✅ Full | ❌ Off | Development, personal use |
224
+ | `airgapped` | ❌ Blocked | ❌ Off | Enterprise, secure environments |
225
+ | `cloud` | ✅ Full | ✅ On | Team collaboration |
226
+
227
+ ```bash
228
+ # Set mode (Future)
229
+ enact config set runtime.mode airgapped
230
+
231
+ # Or via CLI flag (Future)
232
+ enact serve --air-gapped
233
+ ```
234
+
235
+ ### Air-Gapped Mode (🚧 Future)
236
+
237
+ When `runtime.mode = airgapped`:
238
+ - All outbound network calls are blocked
239
+ - Only local features available (Ollama, local storage)
240
+ - Telemetry exporters are disabled
241
+ - Cloud sync is disabled