praisonai-code 0.0.1__py3-none-any.whl

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 (309) hide show
  1. praisonai_code/__init__.py +17 -0
  2. praisonai_code/cli/__init__.py +12 -0
  3. praisonai_code/cli/_forward_shim.py +10 -0
  4. praisonai_code/cli/_paths.py +88 -0
  5. praisonai_code/cli/_warnings.py +58 -0
  6. praisonai_code/cli/app.py +757 -0
  7. praisonai_code/cli/approval_backend.py +272 -0
  8. praisonai_code/cli/branding.py +94 -0
  9. praisonai_code/cli/commands/__init__.py +114 -0
  10. praisonai_code/cli/commands/acp.py +80 -0
  11. praisonai_code/cli/commands/agent.py +116 -0
  12. praisonai_code/cli/commands/agents.py +80 -0
  13. praisonai_code/cli/commands/app.py +139 -0
  14. praisonai_code/cli/commands/attach.py +95 -0
  15. praisonai_code/cli/commands/audit.py +102 -0
  16. praisonai_code/cli/commands/auth.py +508 -0
  17. praisonai_code/cli/commands/batch.py +848 -0
  18. praisonai_code/cli/commands/benchmark.py +286 -0
  19. praisonai_code/cli/commands/browser.py +299 -0
  20. praisonai_code/cli/commands/call.py +45 -0
  21. praisonai_code/cli/commands/chat.py +332 -0
  22. praisonai_code/cli/commands/checkpoint.py +170 -0
  23. praisonai_code/cli/commands/code.py +276 -0
  24. praisonai_code/cli/commands/command.py +114 -0
  25. praisonai_code/cli/commands/commit.py +47 -0
  26. praisonai_code/cli/commands/completion.py +333 -0
  27. praisonai_code/cli/commands/config.py +681 -0
  28. praisonai_code/cli/commands/context.py +414 -0
  29. praisonai_code/cli/commands/daemon.py +203 -0
  30. praisonai_code/cli/commands/debug.py +142 -0
  31. praisonai_code/cli/commands/deploy.py +71 -0
  32. praisonai_code/cli/commands/diag.py +55 -0
  33. praisonai_code/cli/commands/docs.py +1575 -0
  34. praisonai_code/cli/commands/doctor.py +332 -0
  35. praisonai_code/cli/commands/endpoints.py +51 -0
  36. praisonai_code/cli/commands/environment.py +179 -0
  37. praisonai_code/cli/commands/eval.py +131 -0
  38. praisonai_code/cli/commands/examples.py +953 -0
  39. praisonai_code/cli/commands/flow.py +436 -0
  40. praisonai_code/cli/commands/github.py +752 -0
  41. praisonai_code/cli/commands/hooks.py +74 -0
  42. praisonai_code/cli/commands/init.py +174 -0
  43. praisonai_code/cli/commands/knowledge.py +440 -0
  44. praisonai_code/cli/commands/langextract.py +120 -0
  45. praisonai_code/cli/commands/langfuse.py +984 -0
  46. praisonai_code/cli/commands/loop.py +211 -0
  47. praisonai_code/cli/commands/lsp.py +112 -0
  48. praisonai_code/cli/commands/managed.py +659 -0
  49. praisonai_code/cli/commands/mcp.py +763 -0
  50. praisonai_code/cli/commands/memory.py +298 -0
  51. praisonai_code/cli/commands/models.py +264 -0
  52. praisonai_code/cli/commands/n8n.py +326 -0
  53. praisonai_code/cli/commands/obs.py +19 -0
  54. praisonai_code/cli/commands/package.py +76 -0
  55. praisonai_code/cli/commands/paths.py +106 -0
  56. praisonai_code/cli/commands/permissions.py +272 -0
  57. praisonai_code/cli/commands/plugins.py +609 -0
  58. praisonai_code/cli/commands/port.py +530 -0
  59. praisonai_code/cli/commands/profile.py +466 -0
  60. praisonai_code/cli/commands/publish.py +193 -0
  61. praisonai_code/cli/commands/rag.py +913 -0
  62. praisonai_code/cli/commands/realtime.py +52 -0
  63. praisonai_code/cli/commands/recipe.py +684 -0
  64. praisonai_code/cli/commands/registry.py +59 -0
  65. praisonai_code/cli/commands/replay.py +830 -0
  66. praisonai_code/cli/commands/research.py +49 -0
  67. praisonai_code/cli/commands/retrieval.py +377 -0
  68. praisonai_code/cli/commands/rules.py +71 -0
  69. praisonai_code/cli/commands/run.py +1573 -0
  70. praisonai_code/cli/commands/sandbox.py +371 -0
  71. praisonai_code/cli/commands/schedule.py +529 -0
  72. praisonai_code/cli/commands/serve.py +690 -0
  73. praisonai_code/cli/commands/session.py +450 -0
  74. praisonai_code/cli/commands/setup.py +174 -0
  75. praisonai_code/cli/commands/skills.py +545 -0
  76. praisonai_code/cli/commands/standardise.py +711 -0
  77. praisonai_code/cli/commands/templates.py +54 -0
  78. praisonai_code/cli/commands/test.py +558 -0
  79. praisonai_code/cli/commands/todo.py +74 -0
  80. praisonai_code/cli/commands/tools.py +205 -0
  81. praisonai_code/cli/commands/traces.py +145 -0
  82. praisonai_code/cli/commands/tracker.py +852 -0
  83. praisonai_code/cli/commands/train.py +613 -0
  84. praisonai_code/cli/commands/ui.py +172 -0
  85. praisonai_code/cli/commands/up.py +354 -0
  86. praisonai_code/cli/commands/validate.py +291 -0
  87. praisonai_code/cli/commands/version.py +101 -0
  88. praisonai_code/cli/commands/workflow.py +97 -0
  89. praisonai_code/cli/config_loader.py +437 -0
  90. praisonai_code/cli/configuration/__init__.py +27 -0
  91. praisonai_code/cli/configuration/config.schema.json +57 -0
  92. praisonai_code/cli/configuration/credentials.py +446 -0
  93. praisonai_code/cli/configuration/loader.py +364 -0
  94. praisonai_code/cli/configuration/model_resolver.py +161 -0
  95. praisonai_code/cli/configuration/oauth.py +389 -0
  96. praisonai_code/cli/configuration/paths.py +224 -0
  97. praisonai_code/cli/configuration/resolver.py +687 -0
  98. praisonai_code/cli/configuration/schema.py +317 -0
  99. praisonai_code/cli/execution/__init__.py +99 -0
  100. praisonai_code/cli/execution/core.py +208 -0
  101. praisonai_code/cli/execution/profiler.py +898 -0
  102. praisonai_code/cli/execution/request.py +85 -0
  103. praisonai_code/cli/execution/result.py +74 -0
  104. praisonai_code/cli/fallback_schema.py +416 -0
  105. praisonai_code/cli/features/__init__.py +278 -0
  106. praisonai_code/cli/features/_endpoint_registry.py +64 -0
  107. praisonai_code/cli/features/_search_registry.py +43 -0
  108. praisonai_code/cli/features/acp.py +236 -0
  109. praisonai_code/cli/features/action_orchestrator.py +576 -0
  110. praisonai_code/cli/features/agent_scheduler.py +773 -0
  111. praisonai_code/cli/features/agent_tools.py +603 -0
  112. praisonai_code/cli/features/agents.py +397 -0
  113. praisonai_code/cli/features/at_mentions.py +471 -0
  114. praisonai_code/cli/features/audit_cli.py +270 -0
  115. praisonai_code/cli/features/auto_memory.py +182 -0
  116. praisonai_code/cli/features/auto_mode.py +552 -0
  117. praisonai_code/cli/features/autonomy_mode.py +546 -0
  118. praisonai_code/cli/features/background.py +356 -0
  119. praisonai_code/cli/features/base.py +168 -0
  120. praisonai_code/cli/features/benchmark.py +1462 -0
  121. praisonai_code/cli/features/capabilities.py +1326 -0
  122. praisonai_code/cli/features/checkpoints.py +345 -0
  123. praisonai_code/cli/features/cli_profiler.py +335 -0
  124. praisonai_code/cli/features/code_intelligence.py +666 -0
  125. praisonai_code/cli/features/compaction.py +294 -0
  126. praisonai_code/cli/features/compare.py +534 -0
  127. praisonai_code/cli/features/config_hierarchy.py +366 -0
  128. praisonai_code/cli/features/context_manager.py +597 -0
  129. praisonai_code/cli/features/cost_tracker.py +514 -0
  130. praisonai_code/cli/features/csv_test_runner.py +736 -0
  131. praisonai_code/cli/features/custom_definitions.py +790 -0
  132. praisonai_code/cli/features/debug.py +810 -0
  133. praisonai_code/cli/features/deploy.py +605 -0
  134. praisonai_code/cli/features/diag.py +289 -0
  135. praisonai_code/cli/features/display_jsonl.py +173 -0
  136. praisonai_code/cli/features/doctor/__init__.py +63 -0
  137. praisonai_code/cli/features/doctor/checks/__init__.py +29 -0
  138. praisonai_code/cli/features/doctor/checks/acp_checks.py +220 -0
  139. praisonai_code/cli/features/doctor/checks/bot_checks.py +340 -0
  140. praisonai_code/cli/features/doctor/checks/config_checks.py +373 -0
  141. praisonai_code/cli/features/doctor/checks/db_checks.py +366 -0
  142. praisonai_code/cli/features/doctor/checks/env_checks.py +637 -0
  143. praisonai_code/cli/features/doctor/checks/gateway_checks.py +387 -0
  144. praisonai_code/cli/features/doctor/checks/lsp_checks.py +231 -0
  145. praisonai_code/cli/features/doctor/checks/mcp_checks.py +367 -0
  146. praisonai_code/cli/features/doctor/checks/memory_checks.py +268 -0
  147. praisonai_code/cli/features/doctor/checks/network_checks.py +251 -0
  148. praisonai_code/cli/features/doctor/checks/obs_checks.py +328 -0
  149. praisonai_code/cli/features/doctor/checks/packaging_checks.py +422 -0
  150. praisonai_code/cli/features/doctor/checks/performance_checks.py +235 -0
  151. praisonai_code/cli/features/doctor/checks/permissions_checks.py +259 -0
  152. praisonai_code/cli/features/doctor/checks/runtime_checks.py +650 -0
  153. praisonai_code/cli/features/doctor/checks/runtime_migration_checks.py +220 -0
  154. praisonai_code/cli/features/doctor/checks/selftest_checks.py +322 -0
  155. praisonai_code/cli/features/doctor/checks/serve_checks.py +426 -0
  156. praisonai_code/cli/features/doctor/checks/skills_checks.py +327 -0
  157. praisonai_code/cli/features/doctor/checks/tools_checks.py +371 -0
  158. praisonai_code/cli/features/doctor/engine.py +266 -0
  159. praisonai_code/cli/features/doctor/formatters.py +377 -0
  160. praisonai_code/cli/features/doctor/handler.py +564 -0
  161. praisonai_code/cli/features/doctor/models.py +276 -0
  162. praisonai_code/cli/features/doctor/registry.py +239 -0
  163. praisonai_code/cli/features/endpoints.py +1016 -0
  164. praisonai_code/cli/features/eval.py +559 -0
  165. praisonai_code/cli/features/examples.py +707 -0
  166. praisonai_code/cli/features/external_agents.py +231 -0
  167. praisonai_code/cli/features/fast_context.py +410 -0
  168. praisonai_code/cli/features/file_history.py +320 -0
  169. praisonai_code/cli/features/flow_display.py +566 -0
  170. praisonai_code/cli/features/git_attribution.py +159 -0
  171. praisonai_code/cli/features/git_integration.py +651 -0
  172. praisonai_code/cli/features/guardrail.py +171 -0
  173. praisonai_code/cli/features/handoff.py +252 -0
  174. praisonai_code/cli/features/hooks.py +583 -0
  175. praisonai_code/cli/features/hybrid_workflow.py +391 -0
  176. praisonai_code/cli/features/image.py +384 -0
  177. praisonai_code/cli/features/interactive_core_headless.py +450 -0
  178. praisonai_code/cli/features/interactive_runtime.py +600 -0
  179. praisonai_code/cli/features/interactive_test_harness.py +537 -0
  180. praisonai_code/cli/features/interactive_tools.py +428 -0
  181. praisonai_code/cli/features/interactive_tui.py +603 -0
  182. praisonai_code/cli/features/job_workflow.py +906 -0
  183. praisonai_code/cli/features/jobs.py +632 -0
  184. praisonai_code/cli/features/knowledge.py +531 -0
  185. praisonai_code/cli/features/knowledge_cli.py +438 -0
  186. praisonai_code/cli/features/lite.py +244 -0
  187. praisonai_code/cli/features/logs.py +200 -0
  188. praisonai_code/cli/features/lsp_cli.py +225 -0
  189. praisonai_code/cli/features/lsp_diagnostics.py +185 -0
  190. praisonai_code/cli/features/mcp.py +344 -0
  191. praisonai_code/cli/features/message_queue.py +587 -0
  192. praisonai_code/cli/features/metrics.py +210 -0
  193. praisonai_code/cli/features/migrate.py +1329 -0
  194. praisonai_code/cli/features/migration_flow.py +463 -0
  195. praisonai_code/cli/features/migration_spec.py +276 -0
  196. praisonai_code/cli/features/n8n.py +703 -0
  197. praisonai_code/cli/features/observability.py +293 -0
  198. praisonai_code/cli/features/ollama.py +361 -0
  199. praisonai_code/cli/features/output_modes.py +155 -0
  200. praisonai_code/cli/features/output_style.py +273 -0
  201. praisonai_code/cli/features/package.py +631 -0
  202. praisonai_code/cli/features/performance.py +308 -0
  203. praisonai_code/cli/features/persistence.py +636 -0
  204. praisonai_code/cli/features/profiler/__init__.py +81 -0
  205. praisonai_code/cli/features/profiler/core.py +558 -0
  206. praisonai_code/cli/features/profiler/optimizations.py +652 -0
  207. praisonai_code/cli/features/profiler/suite.py +386 -0
  208. praisonai_code/cli/features/queue/__init__.py +73 -0
  209. praisonai_code/cli/features/queue/manager.py +435 -0
  210. praisonai_code/cli/features/queue/models.py +289 -0
  211. praisonai_code/cli/features/queue/persistence.py +564 -0
  212. praisonai_code/cli/features/queue/scheduler.py +529 -0
  213. praisonai_code/cli/features/queue/worker.py +400 -0
  214. praisonai_code/cli/features/recipe.py +2187 -0
  215. praisonai_code/cli/features/recipe_creator.py +996 -0
  216. praisonai_code/cli/features/recipe_optimizer.py +1364 -0
  217. praisonai_code/cli/features/recipe_prompts.py +226 -0
  218. praisonai_code/cli/features/registry.py +229 -0
  219. praisonai_code/cli/features/repo_map.py +860 -0
  220. praisonai_code/cli/features/router.py +466 -0
  221. praisonai_code/cli/features/safe_shell.py +427 -0
  222. praisonai_code/cli/features/sandbox_cli.py +283 -0
  223. praisonai_code/cli/features/sandbox_executor.py +536 -0
  224. praisonai_code/cli/features/sdk_knowledge.py +500 -0
  225. praisonai_code/cli/features/session.py +222 -0
  226. praisonai_code/cli/features/session_checkpoints.py +208 -0
  227. praisonai_code/cli/features/setup/__init__.py +9 -0
  228. praisonai_code/cli/features/setup/handler.py +355 -0
  229. praisonai_code/cli/features/setup/templates.py +62 -0
  230. praisonai_code/cli/features/skills.py +940 -0
  231. praisonai_code/cli/features/slash_commands.py +692 -0
  232. praisonai_code/cli/features/telemetry.py +179 -0
  233. praisonai_code/cli/features/templates.py +1390 -0
  234. praisonai_code/cli/features/thinking.py +343 -0
  235. praisonai_code/cli/features/todo.py +334 -0
  236. praisonai_code/cli/features/tools.py +680 -0
  237. praisonai_code/cli/features/tui/__init__.py +83 -0
  238. praisonai_code/cli/features/tui/app.py +871 -0
  239. praisonai_code/cli/features/tui/cli.py +580 -0
  240. praisonai_code/cli/features/tui/config.py +150 -0
  241. praisonai_code/cli/features/tui/debug.py +526 -0
  242. praisonai_code/cli/features/tui/events.py +99 -0
  243. praisonai_code/cli/features/tui/mock_provider.py +328 -0
  244. praisonai_code/cli/features/tui/orchestrator.py +652 -0
  245. praisonai_code/cli/features/tui/screens/__init__.py +50 -0
  246. praisonai_code/cli/features/tui/screens/help.py +157 -0
  247. praisonai_code/cli/features/tui/screens/main.py +568 -0
  248. praisonai_code/cli/features/tui/screens/queue.py +174 -0
  249. praisonai_code/cli/features/tui/screens/session.py +124 -0
  250. praisonai_code/cli/features/tui/screens/settings.py +148 -0
  251. praisonai_code/cli/features/tui/session_store.py +198 -0
  252. praisonai_code/cli/features/tui/widgets/__init__.py +56 -0
  253. praisonai_code/cli/features/tui/widgets/chat.py +263 -0
  254. praisonai_code/cli/features/tui/widgets/command_popup.py +258 -0
  255. praisonai_code/cli/features/tui/widgets/composer.py +292 -0
  256. praisonai_code/cli/features/tui/widgets/file_popup.py +207 -0
  257. praisonai_code/cli/features/tui/widgets/queue_panel.py +223 -0
  258. praisonai_code/cli/features/tui/widgets/status.py +181 -0
  259. praisonai_code/cli/features/tui/widgets/tool_panel.py +307 -0
  260. praisonai_code/cli/features/wizard.py +289 -0
  261. praisonai_code/cli/features/workflow.py +802 -0
  262. praisonai_code/cli/features/yaml_utils.py +321 -0
  263. praisonai_code/cli/interactive/__init__.py +48 -0
  264. praisonai_code/cli/interactive/async_tui.py +1218 -0
  265. praisonai_code/cli/interactive/config.py +139 -0
  266. praisonai_code/cli/interactive/core.py +618 -0
  267. praisonai_code/cli/interactive/events.py +131 -0
  268. praisonai_code/cli/interactive/frontends/__init__.py +31 -0
  269. praisonai_code/cli/interactive/frontends/rich_frontend.py +462 -0
  270. praisonai_code/cli/interactive/frontends/textual_frontend.py +157 -0
  271. praisonai_code/cli/interactive/praison_io.py +502 -0
  272. praisonai_code/cli/interactive/repl.py +297 -0
  273. praisonai_code/cli/interactive/split_tui.py +456 -0
  274. praisonai_code/cli/interactive/tui_app.py +457 -0
  275. praisonai_code/cli/langfuse_client.py +360 -0
  276. praisonai_code/cli/main.py +7421 -0
  277. praisonai_code/cli/output/__init__.py +25 -0
  278. praisonai_code/cli/output/console.py +456 -0
  279. praisonai_code/cli/output/event_bridge.py +191 -0
  280. praisonai_code/cli/schedule_cli.py +54 -0
  281. praisonai_code/cli/schema_provider.py +23 -0
  282. praisonai_code/cli/session/__init__.py +16 -0
  283. praisonai_code/cli/session/resume.py +148 -0
  284. praisonai_code/cli/session/unified.py +548 -0
  285. praisonai_code/cli/state/__init__.py +31 -0
  286. praisonai_code/cli/state/identifiers.py +161 -0
  287. praisonai_code/cli/state/project_sessions.py +383 -0
  288. praisonai_code/cli/state/sessions.py +390 -0
  289. praisonai_code/cli/ui/__init__.py +160 -0
  290. praisonai_code/cli/ui/config.py +46 -0
  291. praisonai_code/cli/ui/events.py +61 -0
  292. praisonai_code/cli/ui/mg_backend.py +342 -0
  293. praisonai_code/cli/ui/plain.py +133 -0
  294. praisonai_code/cli/ui/rich_backend.py +162 -0
  295. praisonai_code/cli/unified_schema.py +655 -0
  296. praisonai_code/cli/utils/env_utils.py +126 -0
  297. praisonai_code/cli/utils/project.py +131 -0
  298. praisonai_code/cli_backends/__init__.py +73 -0
  299. praisonai_code/cli_backends/claude.py +373 -0
  300. praisonai_code/cli_backends/registry.py +113 -0
  301. praisonai_code/runtime/__init__.py +36 -0
  302. praisonai_code/runtime/__main__.py +81 -0
  303. praisonai_code/runtime/client.py +131 -0
  304. praisonai_code/runtime/descriptor.py +209 -0
  305. praisonai_code/runtime/server.py +356 -0
  306. praisonai_code-0.0.1.dist-info/METADATA +80 -0
  307. praisonai_code-0.0.1.dist-info/RECORD +309 -0
  308. praisonai_code-0.0.1.dist-info/WHEEL +5 -0
  309. praisonai_code-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,278 @@
1
+ """
2
+ CLI Features Module for PraisonAI (agentic terminal product).
3
+
4
+ This module contains modular CLI feature handlers that extend the base CLI
5
+ functionality. Each feature is implemented as a separate module for
6
+ maintainability and testability.
7
+
8
+ Migrated to ``praisonai_code`` as part of the C0–C6 extraction (issue #2512).
9
+ Public paths under ``praisonai.cli.features.*`` continue to work via a shim in
10
+ the main ``praisonai`` package.
11
+
12
+ Features:
13
+ - guardrail: Output validation using LLM guardrails
14
+ - metrics: Token usage and cost tracking
15
+ - image: Image processing with ImageAgent
16
+ - telemetry: Usage monitoring and analytics
17
+ - mcp: Model Context Protocol server integration
18
+ - fast_context: Codebase search capability
19
+ - knowledge: RAG/vector store management
20
+ - session: Session management for multi-turn conversations
21
+ - tools: Tool registry management
22
+ - handoff: Agent-to-agent delegation
23
+ - auto_memory: Automatic memory extraction
24
+ - todo: Todo list management
25
+ - router: Smart model selection
26
+ - flow_display: Visual workflow tracking
27
+ - workflow: YAML workflow management
28
+ - n8n: Export workflows to n8n visual editor
29
+ - external_agents: External AI CLI tool integrations (Claude, Gemini, Codex, Cursor)
30
+ - slash_commands: Interactive slash commands (/help, /cost, /plan, etc.)
31
+ - autonomy_mode: Autonomy levels (suggest, auto-edit, full-auto)
32
+ - cost_tracker: Real-time cost and token tracking
33
+ - message_queue: Message queuing while agent is processing
34
+ - at_mentions: @ mention autocomplete for files and directories
35
+ - compare: CLI command comparison feature
36
+ - eval: Agent evaluation framework (accuracy, performance, reliability, criteria)
37
+ - hooks: Hook system for intercepting and modifying agent behavior
38
+ - checkpoints: Shadow git checkpointing for file-level undo/restore
39
+ - background: Background agent task execution and management
40
+ - thinking: Thinking budget management
41
+ - compaction: Context compaction settings
42
+ - output_style: Output style configuration
43
+ - ollama: Ollama provider and Weak-Model-Proof execution
44
+ """
45
+
46
+ # Type hints available for IDE support
47
+
48
+ # Lazy imports to avoid performance impact
49
+ __all__ = [
50
+ 'GuardrailHandler',
51
+ 'MetricsHandler',
52
+ 'ImageHandler',
53
+ 'TelemetryHandler',
54
+ 'MCPHandler',
55
+ 'FastContextHandler',
56
+ 'KnowledgeHandler',
57
+ 'SessionHandler',
58
+ 'ToolsHandler',
59
+ 'HandoffHandler',
60
+ 'AutoMemoryHandler',
61
+ 'TodoHandler',
62
+ 'RouterHandler',
63
+ 'FlowDisplayHandler',
64
+ 'WorkflowHandler',
65
+ 'N8nHandler',
66
+ 'ExternalAgentsHandler',
67
+ # New CLI enhancement features
68
+ 'SlashCommandHandler',
69
+ 'AutonomyModeHandler',
70
+ 'CostTrackerHandler',
71
+ 'RepoMapHandler',
72
+ 'InteractiveTUIHandler',
73
+ 'GitIntegrationHandler',
74
+ 'SandboxExecutorHandler',
75
+ 'MessageQueueHandler',
76
+ # @ mention autocomplete
77
+ 'AtMentionCompleter',
78
+ 'CombinedCompleter',
79
+ 'FileSearchService',
80
+ # Evaluation
81
+ 'EvalHandler',
82
+ # Compare feature
83
+ 'CompareHandler',
84
+ # Agent Skills
85
+ 'SkillsHandler',
86
+ # Hooks
87
+ 'HooksHandler',
88
+ # Checkpoints
89
+ 'CheckpointsHandler',
90
+ # Background
91
+ 'BackgroundHandler',
92
+ # Thinking, Compaction, Output Style
93
+ 'ThinkingHandler',
94
+ 'CompactionHandler',
95
+ 'OutputStyleHandler',
96
+ # Ollama + WMP
97
+ 'OllamaHandler',
98
+ # Capabilities (LiteLLM endpoint parity)
99
+ 'CapabilitiesHandler',
100
+ # Performance benchmarking
101
+ 'PerformanceHandler',
102
+ # Comprehensive benchmarking
103
+ 'BenchmarkHandler',
104
+ # Lite agent (BYO-LLM)
105
+ 'LiteHandler',
106
+ # Agent-centric tools (LSP/ACP powered)
107
+ 'create_agent_centric_tools',
108
+ 'InteractiveRuntime',
109
+ 'RuntimeConfig',
110
+ 'CodeIntelligenceRouter',
111
+ 'ActionOrchestrator',
112
+ # Interactive tools provider (canonical source)
113
+ 'get_interactive_tools',
114
+ 'resolve_tool_groups',
115
+ 'ToolConfig',
116
+ 'TOOL_GROUPS',
117
+ ]
118
+
119
+ def __getattr__(name):
120
+ """Lazy load handlers to minimize import overhead."""
121
+ if name == 'GuardrailHandler':
122
+ from .guardrail import GuardrailHandler
123
+ return GuardrailHandler
124
+ elif name == 'MetricsHandler':
125
+ from .metrics import MetricsHandler
126
+ return MetricsHandler
127
+ elif name == 'ImageHandler':
128
+ from .image import ImageHandler
129
+ return ImageHandler
130
+ elif name == 'TelemetryHandler':
131
+ from .telemetry import TelemetryHandler
132
+ return TelemetryHandler
133
+ elif name == 'MCPHandler':
134
+ from .mcp import MCPHandler
135
+ return MCPHandler
136
+ elif name == 'FastContextHandler':
137
+ from .fast_context import FastContextHandler
138
+ return FastContextHandler
139
+ elif name == 'KnowledgeHandler':
140
+ from .knowledge import KnowledgeHandler
141
+ return KnowledgeHandler
142
+ elif name == 'SessionHandler':
143
+ from .session import SessionHandler
144
+ return SessionHandler
145
+ elif name == 'ToolsHandler':
146
+ from .tools import ToolsHandler
147
+ return ToolsHandler
148
+ elif name == 'HandoffHandler':
149
+ from .handoff import HandoffHandler
150
+ return HandoffHandler
151
+ elif name == 'AutoMemoryHandler':
152
+ from .auto_memory import AutoMemoryHandler
153
+ return AutoMemoryHandler
154
+ elif name == 'TodoHandler':
155
+ from .todo import TodoHandler
156
+ return TodoHandler
157
+ elif name == 'RouterHandler':
158
+ from .router import RouterHandler
159
+ return RouterHandler
160
+ elif name == 'FlowDisplayHandler':
161
+ from .flow_display import FlowDisplayHandler
162
+ return FlowDisplayHandler
163
+ elif name == 'WorkflowHandler':
164
+ from .workflow import WorkflowHandler
165
+ return WorkflowHandler
166
+ elif name == 'N8nHandler':
167
+ from .n8n import N8nHandler
168
+ return N8nHandler
169
+ elif name == 'ExternalAgentsHandler':
170
+ from .external_agents import ExternalAgentsHandler
171
+ return ExternalAgentsHandler
172
+ # New CLI enhancement features
173
+ elif name == 'SlashCommandHandler':
174
+ from .slash_commands import SlashCommandHandler
175
+ return SlashCommandHandler
176
+ elif name == 'AutonomyModeHandler':
177
+ from .autonomy_mode import AutonomyModeHandler
178
+ return AutonomyModeHandler
179
+ elif name == 'CostTrackerHandler':
180
+ from .cost_tracker import CostTrackerHandler
181
+ return CostTrackerHandler
182
+ elif name == 'RepoMapHandler':
183
+ from .repo_map import RepoMapHandler
184
+ return RepoMapHandler
185
+ elif name == 'InteractiveTUIHandler':
186
+ from .interactive_tui import InteractiveTUIHandler
187
+ return InteractiveTUIHandler
188
+ elif name == 'GitIntegrationHandler':
189
+ from .git_integration import GitIntegrationHandler
190
+ return GitIntegrationHandler
191
+ elif name == 'SandboxExecutorHandler':
192
+ from .sandbox_executor import SandboxExecutorHandler
193
+ return SandboxExecutorHandler
194
+ elif name == 'MessageQueueHandler':
195
+ from .message_queue import MessageQueueHandler
196
+ return MessageQueueHandler
197
+ # @ mention autocomplete
198
+ elif name == 'AtMentionCompleter':
199
+ from .at_mentions import AtMentionCompleter
200
+ return AtMentionCompleter
201
+ elif name == 'CombinedCompleter':
202
+ from .at_mentions import CombinedCompleter
203
+ return CombinedCompleter
204
+ elif name == 'FileSearchService':
205
+ from .at_mentions import FileSearchService
206
+ return FileSearchService
207
+ elif name == 'CompareHandler':
208
+ from .compare import CompareHandler
209
+ return CompareHandler
210
+ elif name == 'EvalHandler':
211
+ from .eval import EvalHandler
212
+ return EvalHandler
213
+ elif name == 'SkillsHandler':
214
+ from .skills import SkillsHandler
215
+ return SkillsHandler
216
+ elif name == 'HooksHandler':
217
+ from .hooks import HooksHandler
218
+ return HooksHandler
219
+ elif name == 'CheckpointsHandler':
220
+ from .checkpoints import CheckpointsHandler
221
+ return CheckpointsHandler
222
+ elif name == 'BackgroundHandler':
223
+ from .background import BackgroundHandler
224
+ return BackgroundHandler
225
+ elif name == 'ThinkingHandler':
226
+ from .thinking import ThinkingHandler
227
+ return ThinkingHandler
228
+ elif name == 'CompactionHandler':
229
+ from .compaction import CompactionHandler
230
+ return CompactionHandler
231
+ elif name == 'OutputStyleHandler':
232
+ from .output_style import OutputStyleHandler
233
+ return OutputStyleHandler
234
+ elif name == 'OllamaHandler':
235
+ from .ollama import OllamaHandler
236
+ return OllamaHandler
237
+ elif name == 'CapabilitiesHandler':
238
+ from .capabilities import CapabilitiesHandler
239
+ return CapabilitiesHandler
240
+ elif name == 'PerformanceHandler':
241
+ from .performance import PerformanceHandler
242
+ return PerformanceHandler
243
+ elif name == 'BenchmarkHandler':
244
+ from .benchmark import BenchmarkHandler
245
+ return BenchmarkHandler
246
+ elif name == 'LiteHandler':
247
+ from .lite import LiteHandler
248
+ return LiteHandler
249
+ # Agent-centric tools (LSP/ACP powered)
250
+ elif name == 'create_agent_centric_tools':
251
+ from .agent_tools import create_agent_centric_tools
252
+ return create_agent_centric_tools
253
+ elif name == 'InteractiveRuntime':
254
+ from .interactive_runtime import InteractiveRuntime
255
+ return InteractiveRuntime
256
+ elif name == 'RuntimeConfig':
257
+ from .interactive_runtime import RuntimeConfig
258
+ return RuntimeConfig
259
+ elif name == 'CodeIntelligenceRouter':
260
+ from .code_intelligence import CodeIntelligenceRouter
261
+ return CodeIntelligenceRouter
262
+ elif name == 'ActionOrchestrator':
263
+ from .action_orchestrator import ActionOrchestrator
264
+ return ActionOrchestrator
265
+ # Interactive tools provider (canonical source)
266
+ elif name == 'get_interactive_tools':
267
+ from .interactive_tools import get_interactive_tools
268
+ return get_interactive_tools
269
+ elif name == 'resolve_tool_groups':
270
+ from .interactive_tools import resolve_tool_groups
271
+ return resolve_tool_groups
272
+ elif name == 'ToolConfig':
273
+ from .interactive_tools import ToolConfig
274
+ return ToolConfig
275
+ elif name == 'TOOL_GROUPS':
276
+ from .interactive_tools import TOOL_GROUPS
277
+ return TOOL_GROUPS
278
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,64 @@
1
+ """
2
+ Registry for endpoint provider types.
3
+
4
+ Maps endpoint types to their invocation methods (lazy-loaded).
5
+ Extensible: third-party endpoint types can register via entry points.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Callable, Any
11
+
12
+ from ..._registry import PluginRegistry
13
+
14
+
15
+ # Built-in endpoint types - return callables that will be bound to the class instance
16
+ def _recipe_loader():
17
+ def invoke_recipe(self, endpoint_name: str, input_data: Any, config: dict, parsed: dict):
18
+ return self._invoke_recipe(endpoint_name, input_data, config, parsed)
19
+ return invoke_recipe
20
+
21
+
22
+ def _agents_api_loader():
23
+ def invoke_agents_api(self, endpoint_name: str, input_data: Any, config: dict, parsed: dict):
24
+ return self._invoke_agents_api(endpoint_name, input_data, config, parsed)
25
+ return invoke_agents_api
26
+
27
+
28
+ def _mcp_loader():
29
+ def invoke_mcp(self, endpoint_name: str, input_data: Any, config: dict, parsed: dict):
30
+ return self._invoke_mcp(endpoint_name, input_data, config, parsed)
31
+ return invoke_mcp
32
+
33
+
34
+ def _a2a_loader():
35
+ def invoke_a2a(self, endpoint_name: str, input_data: Any, config: dict, parsed: dict):
36
+ return self._invoke_a2a(endpoint_name, input_data, config, parsed)
37
+ return invoke_a2a
38
+
39
+
40
+ def _a2u_loader():
41
+ def invoke_a2u(self, endpoint_name: str, input_data: Any, config: dict, parsed: dict):
42
+ return self._invoke_a2u(endpoint_name, input_data, config, parsed)
43
+ return invoke_a2u
44
+
45
+
46
+ # Built-in endpoint types with lazy loading
47
+ _BUILTIN_ENDPOINTS = {
48
+ "recipe": _recipe_loader,
49
+ "agents-api": _agents_api_loader,
50
+ "mcp": _mcp_loader,
51
+ "tools-mcp": _mcp_loader, # Alias for mcp
52
+ "a2a": _a2a_loader,
53
+ "a2u": _a2u_loader,
54
+ }
55
+
56
+
57
+ class EndpointProviderRegistry(PluginRegistry):
58
+ """Registry for endpoint provider types."""
59
+
60
+ def __init__(self):
61
+ super().__init__(
62
+ entry_point_group="praisonai.endpoints.providers",
63
+ builtins=_BUILTIN_ENDPOINTS
64
+ )
@@ -0,0 +1,43 @@
1
+ """
2
+ Registry for web search providers.
3
+
4
+ Maps search provider names to their tool classes (lazy-loaded).
5
+ Extensible: third-party search providers can register via entry points.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from ..._registry import PluginRegistry
11
+
12
+
13
+ def _duckduckgo_loader():
14
+ from praisonai_tools import DuckDuckGoTool
15
+ return DuckDuckGoTool
16
+
17
+
18
+ def _tavily_loader():
19
+ from praisonai_tools import TavilyTool
20
+ return TavilyTool
21
+
22
+
23
+ def _serper_loader():
24
+ from praisonai_tools import SerperTool
25
+ return SerperTool
26
+
27
+
28
+ # Built-in search providers with lazy loading
29
+ _BUILTIN_SEARCH = {
30
+ "duckduckgo": _duckduckgo_loader,
31
+ "tavily": _tavily_loader,
32
+ "serper": _serper_loader,
33
+ }
34
+
35
+
36
+ class SearchProviderRegistry(PluginRegistry):
37
+ """Registry for web search providers."""
38
+
39
+ def __init__(self):
40
+ super().__init__(
41
+ entry_point_group="praisonai.tools.search",
42
+ builtins=_BUILTIN_SEARCH
43
+ )
@@ -0,0 +1,236 @@
1
+ """
2
+ ACP CLI handler for PraisonAI.
3
+
4
+ Provides the `praisonai acp` command for IDE/editor integration.
5
+ """
6
+
7
+ import argparse
8
+ import logging
9
+ import sys
10
+ from typing import Optional
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class ACPHandler:
16
+ """Handler for ACP CLI commands."""
17
+
18
+ @staticmethod
19
+ def add_arguments(parser: argparse.ArgumentParser) -> None:
20
+ """Add ACP-specific arguments to parser."""
21
+ parser.add_argument(
22
+ "-w", "--workspace",
23
+ type=str,
24
+ default=".",
25
+ help="Workspace root directory (default: current directory)"
26
+ )
27
+ parser.add_argument(
28
+ "-a", "--agent",
29
+ type=str,
30
+ default="default",
31
+ help="Agent name or configuration file"
32
+ )
33
+ parser.add_argument(
34
+ "--agents",
35
+ type=str,
36
+ help="Multi-agent configuration YAML file"
37
+ )
38
+ parser.add_argument(
39
+ "--router",
40
+ action="store_true",
41
+ help="Enable router agent for task delegation"
42
+ )
43
+ parser.add_argument(
44
+ "-m", "--model",
45
+ type=str,
46
+ help="LLM model to use"
47
+ )
48
+ parser.add_argument(
49
+ "-r", "--resume",
50
+ type=str,
51
+ nargs="?",
52
+ const="__last__",
53
+ help="Resume session by ID (or --resume --last for most recent)"
54
+ )
55
+ parser.add_argument(
56
+ "--last",
57
+ action="store_true",
58
+ help="Resume the last session (use with --resume)"
59
+ )
60
+ parser.add_argument(
61
+ "--approve",
62
+ type=str,
63
+ choices=["manual", "auto", "scoped"],
64
+ default="manual",
65
+ help="Approval mode for actions (default: manual)"
66
+ )
67
+ parser.add_argument(
68
+ "--read-only",
69
+ action="store_true",
70
+ default=True,
71
+ help="Read-only mode (default: enabled)"
72
+ )
73
+ parser.add_argument(
74
+ "--allow-write",
75
+ action="store_true",
76
+ help="Allow file write operations"
77
+ )
78
+ parser.add_argument(
79
+ "--allow-shell",
80
+ action="store_true",
81
+ help="Allow shell command execution"
82
+ )
83
+ parser.add_argument(
84
+ "--allow-network",
85
+ action="store_true",
86
+ help="Allow network requests"
87
+ )
88
+ parser.add_argument(
89
+ "--debug",
90
+ action="store_true",
91
+ help="Enable debug logging to stderr"
92
+ )
93
+ parser.add_argument(
94
+ "--profile",
95
+ type=str,
96
+ help="Use named profile from config"
97
+ )
98
+
99
+ @staticmethod
100
+ def handle(args: argparse.Namespace) -> int:
101
+ """
102
+ Handle ACP command execution.
103
+
104
+ Returns:
105
+ Exit code (0 for success, non-zero for error)
106
+ """
107
+ # Check if ACP SDK is available
108
+ try:
109
+ import importlib.util
110
+ if importlib.util.find_spec("acp") is None:
111
+ print(
112
+ "Error: agent-client-protocol package not installed.\n"
113
+ "Install with: pip install praisonai[acp]\n"
114
+ "Or: pip install agent-client-protocol",
115
+ file=sys.stderr
116
+ )
117
+ return 1
118
+ except Exception as e:
119
+ print(f"Error checking ACP availability: {e}", file=sys.stderr)
120
+ return 1
121
+
122
+ # Import ACP module
123
+ try:
124
+ from praisonai.acp import serve
125
+ except ImportError as e:
126
+ print(f"Error importing ACP module: {e}", file=sys.stderr)
127
+ return 1
128
+
129
+ # Determine resume session
130
+ resume_session: Optional[str] = None
131
+ resume_last = False
132
+
133
+ if args.resume:
134
+ if args.resume == "__last__" or args.last:
135
+ resume_last = True
136
+ else:
137
+ resume_session = args.resume
138
+ elif args.last:
139
+ resume_last = True
140
+
141
+ # Determine read-only mode
142
+ read_only = args.read_only and not args.allow_write
143
+
144
+ try:
145
+ # Start ACP server
146
+ serve(
147
+ workspace=args.workspace,
148
+ agent=args.agent,
149
+ model=args.model,
150
+ resume=resume_session,
151
+ resume_last=resume_last,
152
+ debug=args.debug,
153
+ read_only=read_only,
154
+ allow_write=args.allow_write,
155
+ allow_shell=args.allow_shell,
156
+ approval_mode=args.approve,
157
+ )
158
+ return 0
159
+ except KeyboardInterrupt:
160
+ logger.info("ACP server stopped by user")
161
+ return 0
162
+ except Exception as e:
163
+ logger.exception(f"ACP server error: {e}")
164
+ print(f"Error: {e}", file=sys.stderr)
165
+ return 1
166
+
167
+
168
+ def setup_acp_subparser(subparsers) -> None:
169
+ """Set up the ACP subcommand parser."""
170
+ acp_parser = subparsers.add_parser(
171
+ "acp",
172
+ help="Start ACP server for IDE/editor integration",
173
+ description=(
174
+ "Start the Agent Client Protocol (ACP) server.\n\n"
175
+ "This allows IDEs and editors (Zed, JetBrains, VSCode, Toad) "
176
+ "to connect to PraisonAI agents via JSON-RPC over stdio."
177
+ ),
178
+ formatter_class=argparse.RawDescriptionHelpFormatter,
179
+ epilog="""
180
+ Examples:
181
+ praisonai acp # Start with defaults
182
+ praisonai acp --debug # Enable debug logging
183
+ praisonai acp --resume --last # Resume last session
184
+ praisonai acp --allow-write # Enable file writes
185
+ praisonai acp -m gpt-4o # Use specific model
186
+
187
+ Editor Configuration:
188
+
189
+ Zed (~/.config/zed/settings.json):
190
+ {
191
+ "agent_servers": {
192
+ "PraisonAI": {
193
+ "command": "praisonai",
194
+ "args": ["acp"],
195
+ "env": {}
196
+ }
197
+ }
198
+ }
199
+
200
+ JetBrains (~/.jetbrains/acp.json):
201
+ {
202
+ "agent_servers": {
203
+ "PraisonAI": {
204
+ "command": "praisonai",
205
+ "args": ["acp"],
206
+ "env": {}
207
+ }
208
+ }
209
+ }
210
+
211
+ Toad:
212
+ toad acp "praisonai acp"
213
+ """
214
+ )
215
+ ACPHandler.add_arguments(acp_parser)
216
+ acp_parser.set_defaults(func=lambda args: ACPHandler.handle(args))
217
+
218
+
219
+ def run_acp_command(args: Optional[list] = None) -> int:
220
+ """
221
+ Run ACP command directly.
222
+
223
+ This can be called from the main CLI or as a standalone entry point.
224
+ """
225
+ parser = argparse.ArgumentParser(
226
+ prog="praisonai acp",
227
+ description="Start ACP server for IDE/editor integration"
228
+ )
229
+ ACPHandler.add_arguments(parser)
230
+
231
+ parsed_args = parser.parse_args(args)
232
+ return ACPHandler.handle(parsed_args)
233
+
234
+
235
+ if __name__ == "__main__":
236
+ sys.exit(run_acp_command())