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,248 @@
1
+ +++
2
+ title = "Cron/Scheduler"
3
+ weight = 11
4
+ +++
5
+
6
+ # Cron Scheduling System
7
+
8
+ The `enact-cron` crate provides job scheduling with SQLite persistence for running agents and commands on schedules.
9
+
10
+ ## Job Types
11
+
12
+ | Type | Description |
13
+ |------|-------------|
14
+ | `Shell` | Execute shell commands |
15
+ | `Agent` | Run an agent with a prompt |
16
+
17
+ ## Schedule Types
18
+
19
+ ### Cron Expressions
20
+
21
+ Standard cron syntax (5, 6, or 7 fields):
22
+
23
+ ```
24
+ # 5 fields: minute hour day month weekday
25
+ 0 9 * * * # Every day at 9:00 AM
26
+
27
+ # 6 fields: second minute hour day month weekday
28
+ 0 30 9 * * * # Every day at 9:30 AM
29
+
30
+ # 7 fields: second minute hour day month weekday year
31
+ 0 0 12 * * 1 2026 # Mondays at noon in 2026
32
+ ```
33
+
34
+ With timezone support:
35
+
36
+ ```rust
37
+ Schedule::Cron {
38
+ expr: "0 9 * * *".into(),
39
+ tz: Some("America/Los_Angeles".into()),
40
+ }
41
+ ```
42
+
43
+ ### One-Shot Execution
44
+
45
+ Run once at a specific time:
46
+
47
+ ```rust
48
+ Schedule::At {
49
+ at: Utc.with_ymd_and_hms(2026, 3, 15, 14, 30, 0).unwrap(),
50
+ }
51
+ ```
52
+
53
+ ### Interval-Based
54
+
55
+ Run at fixed intervals:
56
+
57
+ ```rust
58
+ Schedule::Every {
59
+ every_ms: 60_000, // Every minute
60
+ }
61
+ ```
62
+
63
+ ## Usage
64
+
65
+ ### Creating Jobs
66
+
67
+ ```rust
68
+ use enact_cron::{CronStore, Schedule};
69
+
70
+ let store = CronStore::new(workspace_dir, max_history, max_tasks)?;
71
+
72
+ // Simple shell job
73
+ let job = store.add_job("0 9 * * *", "echo good morning")?;
74
+
75
+ // Shell job with options
76
+ let job = store.add_shell_job(
77
+ Some("daily-backup".into()),
78
+ Schedule::Cron { expr: "0 2 * * *".into(), tz: None },
79
+ "backup.sh"
80
+ )?;
81
+
82
+ // Agent job
83
+ let job = store.add_agent_job(
84
+ Some("daily-summary".into()),
85
+ Schedule::Cron { expr: "0 18 * * *".into(), tz: Some("UTC".into()) },
86
+ "Summarize today's activities",
87
+ Some("claude-3-sonnet".into()),
88
+ SessionTarget::Isolated,
89
+ )?;
90
+ ```
91
+
92
+ ### Managing Jobs
93
+
94
+ ```rust
95
+ // List all jobs
96
+ let jobs = store.list_jobs()?;
97
+
98
+ // Get a specific job
99
+ let job = store.get_job(&job_id)?;
100
+
101
+ // Get jobs that are due to run
102
+ let due = store.due_jobs(Utc::now())?;
103
+
104
+ // Update a job
105
+ store.update_job(&job_id, CronJobPatch {
106
+ enabled: Some(false),
107
+ ..Default::default()
108
+ })?;
109
+
110
+ // Remove a job
111
+ store.remove_job(&job_id)?;
112
+ ```
113
+
114
+ ### Running Jobs
115
+
116
+ ```rust
117
+ // After executing a job, update its status
118
+ store.reschedule_after_run(&job, success, &output)?;
119
+
120
+ // Record execution history
121
+ store.record_run(
122
+ &job_id,
123
+ started_at,
124
+ finished_at,
125
+ "success",
126
+ Some(&output),
127
+ )?;
128
+
129
+ // Get job history
130
+ let runs = store.list_runs(&job_id, 10)?;
131
+ ```
132
+
133
+ ## Job Configuration
134
+
135
+ ### CronJob Fields
136
+
137
+ | Field | Type | Description |
138
+ |-------|------|-------------|
139
+ | `id` | String | Unique job identifier |
140
+ | `expression` | String | Original schedule expression |
141
+ | `schedule` | Schedule | Parsed schedule (Cron/At/Every) |
142
+ | `command` | String | Shell command (for shell jobs) |
143
+ | `prompt` | Option<String> | Agent prompt (for agent jobs) |
144
+ | `name` | Option<String> | Human-readable name |
145
+ | `job_type` | JobType | Shell or Agent |
146
+ | `session_target` | SessionTarget | Isolated or Main |
147
+ | `model` | Option<String> | LLM model for agent jobs |
148
+ | `enabled` | bool | Whether job is active |
149
+ | `delivery` | DeliveryConfig | Output delivery config |
150
+ | `delete_after_run` | bool | Auto-delete after execution |
151
+ | `created_at` | DateTime | Creation timestamp |
152
+ | `next_run` | DateTime | Next scheduled run |
153
+ | `last_run` | Option<DateTime> | Last execution time |
154
+ | `last_status` | Option<String> | Last execution status |
155
+ | `last_output` | Option<String> | Last execution output |
156
+
157
+ ### Session Targets
158
+
159
+ | Target | Description |
160
+ |--------|-------------|
161
+ | `Isolated` | Run in a fresh, isolated session |
162
+ | `Main` | Run in the main conversation session |
163
+
164
+ ### Delivery Config
165
+
166
+ Configure how job output is delivered:
167
+
168
+ ```rust
169
+ DeliveryConfig {
170
+ mode: "telegram".into(), // none, telegram, webhook
171
+ channel: Some("@mychannel".into()),
172
+ to: Some("user_id".into()),
173
+ best_effort: true,
174
+ }
175
+ ```
176
+
177
+ ## Schedule Utilities
178
+
179
+ ### Parse Delay Strings
180
+
181
+ ```rust
182
+ use enact_cron::parse_delay;
183
+
184
+ let duration = parse_delay("5m")?; // 5 minutes
185
+ let duration = parse_delay("2h")?; // 2 hours
186
+ let duration = parse_delay("1d")?; // 1 day
187
+ let duration = parse_delay("30s")?; // 30 seconds
188
+ ```
189
+
190
+ ### Validate Schedules
191
+
192
+ ```rust
193
+ use enact_cron::validate_schedule;
194
+
195
+ // Check if a schedule is valid
196
+ validate_schedule(&schedule, Utc::now())?;
197
+ ```
198
+
199
+ ### Calculate Next Run
200
+
201
+ ```rust
202
+ use enact_cron::next_run_for_schedule;
203
+
204
+ let next = next_run_for_schedule(&schedule, Utc::now())?;
205
+ println!("Next run at: {}", next);
206
+ ```
207
+
208
+ ## Example: Daily Agent Summary
209
+
210
+ ```rust
211
+ // Create a daily summary job
212
+ let job = store.add_agent_job(
213
+ Some("end-of-day-summary".into()),
214
+ Schedule::Cron {
215
+ expr: "0 18 * * 1-5".into(), // 6 PM weekdays
216
+ tz: Some("America/New_York".into()),
217
+ },
218
+ "Generate a summary of today's completed tasks and tomorrow's priorities",
219
+ Some("claude-3-sonnet".into()),
220
+ SessionTarget::Main,
221
+ )?;
222
+
223
+ // Configure delivery to Telegram
224
+ store.update_job(&job.id, CronJobPatch {
225
+ delivery: Some(DeliveryConfig {
226
+ mode: "telegram".into(),
227
+ channel: Some("@team-updates".into()),
228
+ to: None,
229
+ best_effort: true,
230
+ }),
231
+ ..Default::default()
232
+ })?;
233
+ ```
234
+
235
+ ## Persistence
236
+
237
+ Jobs are stored in SQLite with automatic schema management:
238
+
239
+ ```
240
+ workspace/
241
+ └── cron.db # Job definitions and history
242
+ ```
243
+
244
+ The store handles:
245
+ - Automatic table creation
246
+ - Job serialization/deserialization
247
+ - History cleanup (configurable max entries)
248
+ - Concurrent access safety
@@ -0,0 +1,278 @@
1
+ +++
2
+ title = "Developers"
3
+ weight = 8
4
+ sort_by = "weight"
5
+ +++
6
+
7
+ # Developer Guide
8
+
9
+ Contributing to Enact and understanding its internals.
10
+
11
+ ## Crate Architecture
12
+
13
+ | Crate | Purpose | Status |
14
+ |-------|---------|--------|
15
+ | `enact-cli` | CLI binary (doctor, run, serve, version) | ✅ Complete |
16
+ | `enact-runner` | Execution loop, retry, compaction | ✅ Complete |
17
+ | `enact-core` | Callable, LlmCallable, Graph system | ✅ Complete |
18
+ | `enact-providers` | LLM provider implementations | ✅ Complete |
19
+ | `enact-gateway` | HTTP server, webhooks, rate limiting | ✅ Complete |
20
+ | `enact-channels` | WhatsApp, Telegram, Teams | ✅ Complete |
21
+ | `enact-config` | Configuration management | ✅ Complete |
22
+ | `enact-skills` | Skills system (TOML/MD manifests) | ✅ Complete |
23
+ | `enact-mcp` | MCP client (stdio, JSON-RPC) | ✅ Complete |
24
+ | `enact-context` | Context management | ✅ Complete |
25
+ | `enact-memory` | Memory/state persistence | ✅ Complete |
26
+
27
+ ### Dependency Graph
28
+
29
+ ```
30
+ enact-cli
31
+
32
+ ├── enact-runner
33
+ │ │
34
+ │ └── enact-core
35
+ │ │
36
+ │ ├── enact-providers
37
+ │ ├── enact-config
38
+ │ ├── enact-skills
39
+ │ └── enact-mcp
40
+
41
+ ├── enact-gateway
42
+ │ │
43
+ │ ├── enact-channels
44
+ │ └── enact-runner
45
+
46
+ ├── enact-skills
47
+ │ │
48
+ │ └── enact-core
49
+
50
+ ├── enact-mcp
51
+ │ │
52
+ │ └── enact-core
53
+
54
+ └── enact-channels
55
+ ```
56
+
57
+ ## Building from Source
58
+
59
+ ```bash
60
+ git clone https://github.com/your-org/enact-agent.git
61
+ cd enact-agent
62
+
63
+ # Build all crates
64
+ cargo build
65
+
66
+ # Build release
67
+ cargo build --release
68
+
69
+ # Run tests
70
+ cargo test
71
+
72
+ # Run specific crate tests
73
+ cargo test -p enact-gateway
74
+ ```
75
+
76
+ ## Key Components
77
+
78
+ ### Callable (enact-core)
79
+
80
+ The core trait for processing:
81
+
82
+ ```rust
83
+ #[async_trait]
84
+ pub trait Callable: Send + Sync {
85
+ fn name(&self) -> &str;
86
+ async fn run(&self, input: &str) -> anyhow::Result<String>;
87
+ }
88
+ ```
89
+
90
+ ### LlmCallable (enact-core)
91
+
92
+ LLM-powered callable:
93
+
94
+ ```rust
95
+ pub struct LlmCallable {
96
+ name: String,
97
+ system_prompt: String,
98
+ provider: Arc<dyn ModelProvider>,
99
+ }
100
+
101
+ impl LlmCallable {
102
+ pub fn with_provider(
103
+ name: impl Into<String>,
104
+ system_prompt: impl Into<String>,
105
+ provider: Arc<dyn ModelProvider>,
106
+ ) -> Self;
107
+ }
108
+ ```
109
+
110
+ ### DefaultAgentRunner (enact-runner)
111
+
112
+ Executes callables with production features:
113
+
114
+ ```rust
115
+ pub struct DefaultAgentRunner {
116
+ // retry, compaction, checkpoints
117
+ }
118
+
119
+ impl DefaultAgentRunner {
120
+ pub fn default_new() -> Self;
121
+ pub async fn run(&mut self, callable: &dyn Callable, input: &str)
122
+ -> anyhow::Result<LoopOutcome>;
123
+ }
124
+ ```
125
+
126
+ ### Gateway (enact-gateway)
127
+
128
+ HTTP server with webhooks:
129
+
130
+ ```rust
131
+ pub fn router(state: GatewayState) -> Router;
132
+ pub async fn serve(config: GatewayConfig, state: GatewayState) -> anyhow::Result<()>;
133
+ ```
134
+
135
+ Key types:
136
+ - `GatewayConfig` - Server configuration
137
+ - `GatewayState` - Shared state (channel, responder, rate limiter)
138
+ - `InboundResponder` - Message handler trait
139
+ - `RunnerResponder` - Routes to DefaultAgentRunner
140
+ - `EchoResponder` - Simple echo
141
+
142
+ ### Providers (enact-providers)
143
+
144
+ ```rust
145
+ pub struct OpenAICompatible {
146
+ base_url: String,
147
+ model: String,
148
+ api_key: Option<String>,
149
+ }
150
+ ```
151
+
152
+ ### Channels (enact-channels)
153
+
154
+ ```rust
155
+ pub struct WhatsAppChannel {
156
+ access_token: String,
157
+ endpoint_id: String,
158
+ verify_token: String,
159
+ allowed_numbers: Vec<String>,
160
+ }
161
+ ```
162
+
163
+ ## Testing
164
+
165
+ ### Unit Tests
166
+
167
+ ```bash
168
+ # All tests
169
+ cargo test
170
+
171
+ # Specific crate
172
+ cargo test -p enact-gateway
173
+
174
+ # With output
175
+ cargo test -- --nocapture
176
+ ```
177
+
178
+ ### Gateway Tests
179
+
180
+ The gateway has comprehensive tests:
181
+
182
+ ```rust
183
+ #[tokio::test]
184
+ async fn health_route_returns_ok() { ... }
185
+
186
+ #[tokio::test]
187
+ async fn whatsapp_verify_route_returns_challenge() { ... }
188
+
189
+ #[tokio::test]
190
+ async fn whatsapp_webhook_rejects_invalid_signature() { ... }
191
+
192
+ #[tokio::test]
193
+ async fn webhook_duplicate_payload_is_ignored() { ... }
194
+
195
+ #[tokio::test]
196
+ async fn webhook_accepts_valid_signature() { ... }
197
+
198
+ #[tokio::test]
199
+ async fn runner_responder_returns_callable_output() { ... }
200
+ ```
201
+
202
+ ## Code Style
203
+
204
+ ```bash
205
+ # Format
206
+ cargo fmt
207
+
208
+ # Lint
209
+ cargo clippy --all-targets
210
+
211
+ # Check all
212
+ cargo fmt --check && cargo clippy --all-targets -- -D warnings
213
+ ```
214
+
215
+ ## Project Structure
216
+
217
+ ```
218
+ enact-agent/
219
+ ├── Cargo.toml # Workspace definition
220
+ ├── crates/
221
+ │ ├── enact-cli/ # CLI binary
222
+ │ ├── enact-runner/ # Execution runtime
223
+ │ ├── enact-core/ # Core types
224
+ │ ├── enact-providers/ # LLM providers
225
+ │ ├── enact-gateway/ # HTTP server
226
+ │ ├── enact-channels/ # Messaging channels
227
+ │ └── enact-config/ # Configuration
228
+ └── docs/ # This documentation (Zola)
229
+ ```
230
+
231
+ ## Adding a Provider
232
+
233
+ 1. Create module in `enact-providers/src/`
234
+ 2. Implement `ModelProvider` trait
235
+ 3. Export from `lib.rs`
236
+
237
+ ```rust
238
+ pub struct MyProvider { ... }
239
+
240
+ #[async_trait]
241
+ impl ModelProvider for MyProvider {
242
+ async fn complete(&self, request: ChatRequest) -> Result<ChatResponse> {
243
+ // Implementation
244
+ }
245
+ }
246
+ ```
247
+
248
+ ## Adding a Channel
249
+
250
+ 1. Create module in `enact-channels/src/`
251
+ 2. Implement `Channel` trait
252
+ 3. Add gateway integration in `enact-gateway/`
253
+
254
+ ## Documentation
255
+
256
+ ```bash
257
+ cd docs
258
+
259
+ # Development server
260
+ make serve # http://127.0.0.1:1111
261
+
262
+ # Build
263
+ make build
264
+ ```
265
+
266
+ ## Pull Request Process
267
+
268
+ 1. Fork the repository
269
+ 2. Create feature branch
270
+ 3. Write tests
271
+ 4. Update docs
272
+ 5. Run checks (`cargo fmt && cargo clippy && cargo test`)
273
+ 6. Submit PR
274
+
275
+ ## Current Priorities
276
+
277
+ 1. **OAuth/Token lifecycle** (Phase 1)
278
+ 2. **Multi-agent** (Phase 2)
@@ -0,0 +1,180 @@
1
+ +++
2
+ title = "Getting Started"
3
+ weight = 2
4
+ sort_by = "weight"
5
+ +++
6
+
7
+ # Getting Started
8
+
9
+ Get up and running with Enact in minutes.
10
+
11
+ ## Prerequisites
12
+
13
+ - **Rust** 1.75 or later
14
+ - **API Key** for at least one LLM provider (OpenAI, Azure, etc.)
15
+
16
+ ## Quick Start
17
+
18
+ ### 1. Build from Source
19
+
20
+ ```bash
21
+ git clone https://github.com/adl-tan-theta/enactai.git
22
+ cd enya/enact-agent
23
+ cargo build --release
24
+ ```
25
+
26
+ ### 2. Check System Status
27
+
28
+ ```bash
29
+ ./target/release/enact doctor
30
+ ```
31
+
32
+ This shows:
33
+
34
+ - API key configuration status
35
+ - WhatsApp configuration status
36
+ - Current model settings
37
+
38
+ ### 3. Run Your First Agent
39
+
40
+ ```bash
41
+ OPENAI_API_KEY="sk-..." ./target/release/enact run --input "Hello!"
42
+ ```
43
+
44
+ The agent will respond using the configured LLM provider.
45
+
46
+ ### 4. Start the Gateway (Optional)
47
+
48
+ For WhatsApp integration:
49
+
50
+ ```bash
51
+ WHATSAPP_ACCESS_TOKEN="..." \
52
+ WHATSAPP_ENDPOINT_ID="..." \
53
+ WHATSAPP_VERIFY_TOKEN="..." \
54
+ OPENAI_API_KEY="..." \
55
+ ./target/release/enact serve --http-port 8080
56
+ ```
57
+
58
+ ## Configuration
59
+
60
+ ### Environment Variables
61
+
62
+ Create a `.env` file:
63
+
64
+ ```bash
65
+ # LLM Provider (required)
66
+ OPENAI_API_KEY=sk-...
67
+ OPENAI_MODEL=gpt-4o-mini
68
+
69
+ # Or Azure OpenAI
70
+ AZURE_OPENAI_API_KEY=...
71
+ OPENAI_BASE_URL=https://your-resource.openai.azure.com
72
+
73
+ # WhatsApp (for gateway)
74
+ WHATSAPP_ACCESS_TOKEN=EAABc...
75
+ WHATSAPP_ENDPOINT_ID=123456789012345
76
+ WHATSAPP_VERIFY_TOKEN=my-secret-token
77
+ WHATSAPP_APP_SECRET=abc123 # Optional
78
+ ```
79
+
80
+ ## CLI Commands
81
+
82
+ | Command | Description |
83
+ |---------|-------------|
84
+ | `enact doctor` | Check system status |
85
+ | `enact run --input "..."` | Run agent |
86
+ | `enact serve --http-port 8080` | Start gateway |
87
+ | `enact version` | Show version |
88
+
89
+ ## Gateway Flow
90
+
91
+ When you run `enact serve`, messages flow through:
92
+
93
+ ```
94
+ WhatsApp Message (webhook)
95
+
96
+
97
+ WhatsAppChannel (parse)
98
+
99
+
100
+ RunnerResponder
101
+
102
+
103
+ DefaultAgentRunner (retry/compaction)
104
+
105
+
106
+ Response sent back via WhatsApp
107
+ ```
108
+
109
+ ## Production Features
110
+
111
+ The gateway includes enterprise-ready features:
112
+
113
+ - **Rate limiting**: 120 requests/minute per client (sliding window)
114
+ - **Idempotency**: Duplicate messages ignored (5-minute TTL)
115
+ - **Signature verification**: Validates WhatsApp signatures
116
+ - **Request limits**: 64KB max body, 30s timeout
117
+ - **All with tests passing**
118
+
119
+ ## Using as a Library
120
+
121
+ You can also use Enact as a Rust library:
122
+
123
+ ```rust
124
+ use enact_core::callable::LlmCallable;
125
+ use enact_providers::OpenAICompatible;
126
+ use enact_runner::DefaultAgentRunner;
127
+ use std::sync::Arc;
128
+
129
+ #[tokio::main]
130
+ async fn main() -> anyhow::Result<()> {
131
+ let api_key = std::env::var("OPENAI_API_KEY")?;
132
+
133
+ let provider = Arc::new(OpenAICompatible::new(
134
+ "https://api.openai.com",
135
+ "gpt-4o-mini",
136
+ Some(api_key),
137
+ ));
138
+
139
+ let callable = LlmCallable::with_provider(
140
+ "assistant",
141
+ "You are a helpful assistant.",
142
+ provider,
143
+ );
144
+
145
+ let mut runner = DefaultAgentRunner::default_new();
146
+ let outcome = runner.run(&callable, "Hello!").await?;
147
+
148
+ println!("{:?}", outcome);
149
+ Ok(())
150
+ }
151
+ ```
152
+
153
+ ## YAML Agent Definitions
154
+
155
+ Define agents as YAML files (for future YAML-based execution):
156
+
157
+ ```yaml
158
+ name: hello-agent
159
+ version: "1.0"
160
+ description: "A simple greeting agent"
161
+
162
+ nodes:
163
+ greet:
164
+ type: llm
165
+ system_prompt: "You are a friendly assistant. Greet the user warmly."
166
+ edges:
167
+ _default: END
168
+ ```
169
+
170
+ See [YAML Schema](/yaml-schema/) for full documentation.
171
+
172
+ ## Next Steps
173
+
174
+ - [CLI Reference](/cli/) — Full command documentation
175
+ - [Gateway API](/api/) — HTTP endpoint documentation
176
+ - [YAML Schema](/yaml-schema/) — Agent definition format
177
+ - [Channels](/channels/) — WhatsApp, Telegram, Teams setup
178
+ - [Providers](/providers/) — LLM provider configuration
179
+ - [Skills](/skills/) — Skills system (TOML/MD manifests)
180
+ - [MCP Client](/mcp/) — Model Context Protocol integration