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,240 @@
1
+ +++
2
+ title = "WhatsApp"
3
+ weight = 3
4
+ +++
5
+
6
+ # WhatsApp Channel
7
+
8
+ Deploy your Enact agent to WhatsApp via Meta Business API.
9
+
10
+ ## Status
11
+
12
+ | Feature | Status |
13
+ |---------|--------|
14
+ | Cloud API Integration | ✅ Implemented |
15
+ | Text Messages | ✅ Implemented |
16
+ | Interactive Messages | ✅ Implemented |
17
+ | Message Templates | ✅ Implemented |
18
+ | Media Messages | ✅ Implemented |
19
+ | Webhook Handling | ✅ Implemented |
20
+
21
+ ## Setup
22
+
23
+ ### 1. Create Meta Business Account
24
+
25
+ 1. Go to [Meta Business Suite](https://business.facebook.com)
26
+ 2. Create or select a business account
27
+ 3. Go to [Meta for Developers](https://developers.facebook.com)
28
+ 4. Create a new app (type: Business)
29
+
30
+ ### 2. Set Up WhatsApp
31
+
32
+ 1. In your app dashboard, add the WhatsApp product
33
+ 2. Complete business verification
34
+ 3. Set up a test phone number or add your business number
35
+
36
+ ### 3. Get Credentials
37
+
38
+ From WhatsApp > API Setup:
39
+ - **Phone Number ID**
40
+ - **Access Token**
41
+ - **Webhook Verify Token** (create your own)
42
+
43
+ ### 4. Configure Environment
44
+
45
+ ```bash
46
+ # .env
47
+ WHATSAPP_PHONE_NUMBER_ID=123456789012345
48
+ WHATSAPP_ACCESS_TOKEN=EAABc...
49
+ WHATSAPP_WEBHOOK_VERIFY_TOKEN=your-secret-token
50
+ WHATSAPP_APP_SECRET=your-app-secret # For signature verification
51
+ ```
52
+
53
+ ### 5. Run Channel (Rust API)
54
+
55
+ ```rust
56
+ use enact_channels::whatsapp::{WhatsAppChannel, WhatsAppConfig};
57
+
58
+ #[tokio::main]
59
+ async fn main() -> anyhow::Result<()> {
60
+ let config = WhatsAppConfig {
61
+ phone_number_id: std::env::var("WHATSAPP_PHONE_NUMBER_ID")?,
62
+ access_token: std::env::var("WHATSAPP_ACCESS_TOKEN")?,
63
+ webhook_verify_token: std::env::var("WHATSAPP_WEBHOOK_VERIFY_TOKEN")?,
64
+ app_secret: std::env::var("WHATSAPP_APP_SECRET").ok(),
65
+ ..Default::default()
66
+ };
67
+
68
+ let channel = WhatsAppChannel::new(config)?;
69
+ channel.run().await?;
70
+
71
+ Ok(())
72
+ }
73
+ ```
74
+
75
+ ## Configuration Options
76
+
77
+ ```rust
78
+ pub struct WhatsAppConfig {
79
+ /// WhatsApp Business Phone Number ID
80
+ pub phone_number_id: String,
81
+
82
+ /// Meta Graph API Access Token
83
+ pub access_token: String,
84
+
85
+ /// Webhook verification token
86
+ pub webhook_verify_token: String,
87
+
88
+ /// App secret for signature verification
89
+ pub app_secret: Option<String>,
90
+
91
+ /// Graph API version
92
+ pub api_version: String, // default: "v18.0"
93
+ }
94
+ ```
95
+
96
+ ## Features
97
+
98
+ ### Text Messages
99
+
100
+ ```rust
101
+ channel.send(OutgoingMessage {
102
+ to: recipient_phone.clone(),
103
+ message_type: MessageContent::Text {
104
+ body: "Hello from Enact!".to_string(),
105
+ preview_url: false,
106
+ },
107
+ }).await?;
108
+ ```
109
+
110
+ ### Interactive Messages
111
+
112
+ ```rust
113
+ use enact_channels::whatsapp::{Interactive, Button};
114
+
115
+ // Button message (max 3 buttons)
116
+ let buttons = Interactive::Buttons {
117
+ body: "How can I help?".to_string(),
118
+ buttons: vec![
119
+ Button::new("btn_order", "Check Order"),
120
+ Button::new("btn_support", "Get Support"),
121
+ Button::new("btn_info", "More Info"),
122
+ ],
123
+ };
124
+
125
+ channel.send(OutgoingMessage {
126
+ to: recipient_phone,
127
+ message_type: MessageContent::Interactive(buttons),
128
+ }).await?;
129
+ ```
130
+
131
+ ### List Messages
132
+
133
+ ```rust
134
+ let list = Interactive::List {
135
+ body: "Select a category:".to_string(),
136
+ button: "View Options".to_string(),
137
+ sections: vec![
138
+ ListSection {
139
+ title: "Products".to_string(),
140
+ rows: vec![
141
+ ListRow::new("prod_1", "Product A", Some("Description")),
142
+ ListRow::new("prod_2", "Product B", Some("Description")),
143
+ ],
144
+ },
145
+ ],
146
+ };
147
+ ```
148
+
149
+ ### Message Templates
150
+
151
+ For initiating conversations:
152
+
153
+ ```rust
154
+ channel.send_template(SendTemplate {
155
+ to: customer_phone,
156
+ template_name: "order_confirmation".to_string(),
157
+ language_code: "en".to_string(),
158
+ components: vec![
159
+ TemplateComponent::Body {
160
+ parameters: vec![
161
+ Parameter::Text("John".to_string()),
162
+ Parameter::Text("ORD-12345".to_string()),
163
+ ],
164
+ },
165
+ ],
166
+ }).await?;
167
+ ```
168
+
169
+ ### Media Messages
170
+
171
+ ```rust
172
+ // Send image
173
+ channel.send(OutgoingMessage {
174
+ to: recipient_phone,
175
+ message_type: MessageContent::Image {
176
+ link: "https://example.com/image.png".to_string(),
177
+ caption: Some("Check this out!".to_string()),
178
+ },
179
+ }).await?;
180
+
181
+ // Send document
182
+ channel.send(OutgoingMessage {
183
+ to: recipient_phone,
184
+ message_type: MessageContent::Document {
185
+ link: "https://example.com/report.pdf".to_string(),
186
+ filename: "report.pdf".to_string(),
187
+ caption: Some("Your report".to_string()),
188
+ },
189
+ }).await?;
190
+ ```
191
+
192
+ ## Webhook Setup
193
+
194
+ WhatsApp requires a webhook endpoint:
195
+
196
+ ```rust
197
+ use axum::{Router, routing::{get, post}};
198
+
199
+ let app = Router::new()
200
+ .route("/webhook", get(webhook_verify))
201
+ .route("/webhook", post(webhook_handler));
202
+
203
+ async fn webhook_verify(Query(params): Query<VerifyParams>) -> impl IntoResponse {
204
+ if params.hub_verify_token == config.webhook_verify_token {
205
+ params.hub_challenge
206
+ } else {
207
+ "Invalid token".to_string()
208
+ }
209
+ }
210
+ ```
211
+
212
+ **Configure in Meta:**
213
+ 1. Go to WhatsApp > Configuration
214
+ 2. Add webhook URL: `https://your-domain.com/webhook`
215
+ 3. Enter your verify token
216
+ 4. Subscribe to: `messages`
217
+
218
+ ## Rate Limits
219
+
220
+ | Tier | Messages/day | Requirement |
221
+ |------|--------------|-------------|
222
+ | Unverified | 250 | Testing only |
223
+ | Tier 1 | 1,000 | Business verified |
224
+ | Tier 2 | 10,000 | High quality rating |
225
+ | Tier 3 | 100,000 | High quality rating |
226
+ | Tier 4 | Unlimited | High quality rating |
227
+
228
+ ## Security
229
+
230
+ ### Signature Verification
231
+
232
+ Verify webhook requests:
233
+
234
+ ```rust
235
+ fn verify_signature(payload: &[u8], signature: &str, app_secret: &str) -> bool {
236
+ let expected = hmac_sha256(app_secret.as_bytes(), payload);
237
+ let expected_hex = format!("sha256={}", hex::encode(expected));
238
+ signature == expected_hex
239
+ }
240
+ ```
@@ -0,0 +1,261 @@
1
+ +++
2
+ title = "CLI Reference"
3
+ weight = 3
4
+ sort_by = "weight"
5
+ +++
6
+
7
+ # CLI Reference
8
+
9
+ The `enact` command-line interface for running agents and managing the gateway.
10
+
11
+ ## Status
12
+
13
+ | Command | Status |
14
+ |---------|--------|
15
+ | `enact --help` | ✅ Complete |
16
+ | `enact version` | ✅ Complete |
17
+ | `enact doctor` | ✅ Complete |
18
+ | `enact run` | ✅ Complete |
19
+ | `enact serve` | ✅ Complete |
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ # Build from source
25
+ git clone https://github.com/adl-tan-theta/enactai.git
26
+ cd enya/enact-agent
27
+ cargo build --release
28
+
29
+ # Binary is at ./target/release/enact
30
+
31
+ # OR install via Cargo (recommended)
32
+ cargo install enact
33
+
34
+ # OR via npm
35
+ npm install -g enact
36
+ ```
37
+
38
+ ## Commands
39
+
40
+ ### `enact --help`
41
+
42
+ Show all available commands.
43
+
44
+ ```bash
45
+ ./target/release/enact --help
46
+ ```
47
+
48
+ ### `enact version`
49
+
50
+ Display version information.
51
+
52
+ ```bash
53
+ ./target/release/enact version
54
+ # enact 0.0.1
55
+ ```
56
+
57
+ ### `enact doctor`
58
+
59
+ Run system diagnostics and check configuration.
60
+
61
+ ```bash
62
+ ./target/release/enact doctor
63
+ ```
64
+
65
+ **Output:**
66
+ ```
67
+ Enact System Check
68
+
69
+ ┌───────────┬────────┬─────────────────────────────────────────┐
70
+ │ Component │ Status │ Details │
71
+ ├───────────┼────────┼─────────────────────────────────────────┤
72
+ │ API Key │ ✓ │ Configured │
73
+ │ WhatsApp │ ○ │ Optional - not configured │
74
+ │ Model │ ✓ │ gpt-4o-mini (default) │
75
+ └───────────┴────────┴─────────────────────────────────────────┘
76
+
77
+ Environment Variables:
78
+ ✓ set OPENAI_API_KEY
79
+ not set AZURE_OPENAI_API_KEY
80
+ not set OPENAI_BASE_URL
81
+ ✓ set OPENAI_MODEL
82
+ not set WHATSAPP_ACCESS_TOKEN
83
+ not set WHATSAPP_ENDPOINT_ID
84
+ not set WHATSAPP_VERIFY_TOKEN
85
+ not set WHATSAPP_APP_SECRET
86
+ ```
87
+
88
+ ### `enact run`
89
+
90
+ Execute an agent with the given input.
91
+
92
+ ```bash
93
+ ./target/release/enact run --input "What is the capital of France?"
94
+ ```
95
+
96
+ **Options:**
97
+ - `--input <TEXT>` - The input to send to the agent (required)
98
+ - `--agent <NAME>` - Agent name (default: "default")
99
+ - `--system-prompt <TEXT>` - Override system prompt
100
+
101
+ **Environment Variables:**
102
+ - `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` - API key (required)
103
+ - `OPENAI_BASE_URL` - API base URL (default: `https://api.openai.com`)
104
+ - `OPENAI_MODEL` - Model to use (default: `gpt-4o-mini`)
105
+
106
+ **Example:**
107
+ ```bash
108
+ OPENAI_API_KEY="sk-..." ./target/release/enact run \
109
+ --input "Explain quantum computing in simple terms"
110
+ ```
111
+
112
+ ### `enact serve`
113
+
114
+ Start the HTTP gateway server.
115
+
116
+ ```bash
117
+ ./target/release/enact serve --http-port 8080
118
+ ```
119
+
120
+ **Options:**
121
+ - `--http-port <PORT>` - Port to listen on (default: 8080)
122
+ - `--air-gapped` - Run in air-gapped mode (disable external network calls)
123
+
124
+ **Environment Variables:**
125
+ - `WHATSAPP_ACCESS_TOKEN` - WhatsApp API token (required for WhatsApp)
126
+ - `WHATSAPP_ENDPOINT_ID` - WhatsApp phone number ID (required for WhatsApp)
127
+ - `WHATSAPP_VERIFY_TOKEN` - Webhook verification token (required for WhatsApp)
128
+ - `WHATSAPP_APP_SECRET` - App secret for signature verification (optional)
129
+ - `WHATSAPP_ALLOWED_NUMBERS` - Comma-separated list of allowed phone numbers (default: `*`)
130
+ - `OPENAI_API_KEY` - API key for agent responses (optional, falls back to echo mode)
131
+
132
+ **Example:**
133
+ ```bash
134
+ WHATSAPP_ACCESS_TOKEN="EAABc..." \
135
+ WHATSAPP_ENDPOINT_ID="123456789012345" \
136
+ WHATSAPP_VERIFY_TOKEN="my-secret-token" \
137
+ OPENAI_API_KEY="sk-..." \
138
+ ./target/release/enact serve --http-port 8080
139
+ ```
140
+
141
+ ## Gateway Endpoints
142
+
143
+ When running `enact serve`, the following endpoints are available:
144
+
145
+ | Endpoint | Method | Description |
146
+ |----------|--------|-------------|
147
+ | `/health` | GET | Health check |
148
+ | `/webhook/whatsapp` | GET | WhatsApp webhook verification |
149
+ | `/webhook/whatsapp` | POST | WhatsApp message webhook |
150
+
151
+ ### Health Check
152
+
153
+ ```bash
154
+ curl http://localhost:8080/health
155
+ # {"status":"ok"}
156
+ ```
157
+
158
+ ### WhatsApp Webhook Verification
159
+
160
+ Meta sends a GET request to verify your webhook:
161
+
162
+ ```
163
+ GET /webhook/whatsapp?hub.mode=subscribe&hub.verify_token=YOUR_TOKEN&hub.challenge=CHALLENGE
164
+ ```
165
+
166
+ The server responds with the challenge if the verify token matches.
167
+
168
+ ### WhatsApp Message Webhook
169
+
170
+ POST requests from WhatsApp are processed with:
171
+ - **Rate limiting**: 120 requests/minute per client (sliding window)
172
+ - **Idempotency**: Duplicate messages are ignored (5-minute TTL)
173
+ - **Signature verification**: If `WHATSAPP_APP_SECRET` is set
174
+ - **Request limits**: Max 64KB body, 30-second timeout
175
+
176
+ ## Configuration
177
+
178
+ ### Environment Variables
179
+
180
+ | Variable | Required | Description |
181
+ |----------|----------|-------------|
182
+ | `OPENAI_API_KEY` | Yes* | OpenAI API key |
183
+ | `AZURE_OPENAI_API_KEY` | Yes* | Azure OpenAI API key |
184
+ | `OPENAI_BASE_URL` | No | API base URL |
185
+ | `OPENAI_MODEL` | No | Model name (default: gpt-4o-mini) |
186
+ | `WHATSAPP_ACCESS_TOKEN` | For serve | WhatsApp API token |
187
+ | `WHATSAPP_ENDPOINT_ID` | For serve | WhatsApp phone number ID |
188
+ | `WHATSAPP_VERIFY_TOKEN` | For serve | Webhook verify token |
189
+ | `WHATSAPP_APP_SECRET` | No | For signature verification |
190
+ | `WHATSAPP_ALLOWED_NUMBERS` | No | Allowed phone numbers (comma-separated, or `*`) |
191
+
192
+ *One of `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` is required for `run` command.
193
+
194
+ ### Using .env File
195
+
196
+ Create a `.env` file in your working directory:
197
+
198
+ ```bash
199
+ # .env
200
+ OPENAI_API_KEY=sk-...
201
+ OPENAI_MODEL=gpt-4o-mini
202
+
203
+ WHATSAPP_ACCESS_TOKEN=EAABc...
204
+ WHATSAPP_ENDPOINT_ID=123456789012345
205
+ WHATSAPP_VERIFY_TOKEN=my-secret-token
206
+ WHATSAPP_APP_SECRET=abc123
207
+ ```
208
+
209
+ ## Examples
210
+
211
+ ### Run a Simple Query
212
+
213
+ ```bash
214
+ OPENAI_API_KEY="sk-..." ./target/release/enact run --input "Hello!"
215
+ ```
216
+
217
+ ### Run with Custom Model
218
+
219
+ ```bash
220
+ OPENAI_API_KEY="sk-..." \
221
+ OPENAI_MODEL="gpt-4" \
222
+ ./target/release/enact run --input "Explain Rust ownership"
223
+ ```
224
+
225
+ ### Run with Azure OpenAI
226
+
227
+ ```bash
228
+ AZURE_OPENAI_API_KEY="..." \
229
+ OPENAI_BASE_URL="https://your-resource.openai.azure.com" \
230
+ OPENAI_MODEL="gpt-4" \
231
+ ./target/release/enact run --input "Hello!"
232
+ ```
233
+
234
+ ### Start Gateway for Production
235
+
236
+ ```bash
237
+ # Load from .env file
238
+ source .env
239
+
240
+ ./target/release/enact serve --http-port 8080
241
+ ```
242
+
243
+ ### Air-Gapped Mode
244
+
245
+ ```bash
246
+ OLLAMA_BASE_URL="http://localhost:11434" \
247
+ OPENAI_MODEL="llama3" \
248
+ ./target/release/enact serve --http-port 8080 --air-gapped
249
+ ```
250
+
251
+ ## Roadmap
252
+
253
+ ### Phase 2 (Planned)
254
+ - [ ] `enact init` - Create new agent project
255
+ - [ ] `enact validate` - Validate YAML syntax
256
+ - [ ] `enact console` - Interactive TUI
257
+
258
+ ### Phase 3 (Planned)
259
+ - [ ] `enact deploy` - Deploy to channels
260
+ - [ ] `enact logs` - View execution logs
261
+ - [ ] `enact eval` - Run evaluation suites