novacode-cli 1.2.0__tar.gz
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.
- novacode_cli-1.2.0/LICENSE +21 -0
- novacode_cli-1.2.0/PKG-INFO +271 -0
- novacode_cli-1.2.0/README.md +167 -0
- novacode_cli-1.2.0/novacode_cli/__init__.py +29 -0
- novacode_cli-1.2.0/novacode_cli/__main__.py +6 -0
- novacode_cli-1.2.0/novacode_cli/_lazy_heavy.py +99 -0
- novacode_cli-1.2.0/novacode_cli/_version.py +3 -0
- novacode_cli-1.2.0/novacode_cli/agent_stream.py +178 -0
- novacode_cli-1.2.0/novacode_cli/agents/agent_file.py +250 -0
- novacode_cli-1.2.0/novacode_cli/agents/agent_mailbox.py +120 -0
- novacode_cli-1.2.0/novacode_cli/agents/approval_decisions.py +146 -0
- novacode_cli-1.2.0/novacode_cli/agents/arg_repair.py +196 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/__init__.py +6 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/_config.py +213 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/_mcp_tools.py +192 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/_specialist.py +84 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/_test_commands.py +89 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/_tools.py +432 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/general_purpose.py +42 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/langgraph.json +9 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_agents/research.py +22 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_context.py +303 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_on_demand.py +52 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_task_errors.py +75 -0
- novacode_cli-1.2.0/novacode_cli/agents/async_workspace.py +27 -0
- novacode_cli-1.2.0/novacode_cli/agents/attribution.py +165 -0
- novacode_cli-1.2.0/novacode_cli/agents/browser_mode.py +119 -0
- novacode_cli-1.2.0/novacode_cli/agents/btw_agent.py +71 -0
- novacode_cli-1.2.0/novacode_cli/agents/caveman.py +352 -0
- novacode_cli-1.2.0/novacode_cli/agents/caveman_support.py +370 -0
- novacode_cli-1.2.0/novacode_cli/agents/code_mode.py +774 -0
- novacode_cli-1.2.0/novacode_cli/agents/code_runtime.py +160 -0
- novacode_cli-1.2.0/novacode_cli/agents/context_compaction.py +1339 -0
- novacode_cli-1.2.0/novacode_cli/agents/core_agent.py +2710 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/__init__.py +24 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/async_subagents.py +296 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/browser-automation-agent.md +110 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/bug-fix-agent.md +22 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/bug-investigation-agent.md +42 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/code-explorer.md +37 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/code-review-agent.md +33 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/dependency-audit-agent.md +34 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/documentation-update-agent.md +46 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/performance-audit-agent.md +41 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/plan-scout-agent.md +64 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/refactoring-agent.md +35 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/refactoring-specialist-agent.md +175 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/security-audit-agent.md +96 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/test-generation-agent.md +33 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/builtin/test-runner-agent.md +55 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/prompt.py +88 -0
- novacode_cli-1.2.0/novacode_cli/agents/default_subagents/subagents.py +138 -0
- novacode_cli-1.2.0/novacode_cli/agents/dream_agent.py +93 -0
- novacode_cli-1.2.0/novacode_cli/agents/edit_diagnostics.py +362 -0
- novacode_cli-1.2.0/novacode_cli/agents/edit_fallback.py +62 -0
- novacode_cli-1.2.0/novacode_cli/agents/handoff.py +166 -0
- novacode_cli-1.2.0/novacode_cli/agents/invocation.py +152 -0
- novacode_cli-1.2.0/novacode_cli/agents/model_budget.py +42 -0
- novacode_cli-1.2.0/novacode_cli/agents/model_retry.py +113 -0
- novacode_cli-1.2.0/novacode_cli/agents/model_router.py +420 -0
- novacode_cli-1.2.0/novacode_cli/agents/openai_decisions.py +186 -0
- novacode_cli-1.2.0/novacode_cli/agents/plan_agent/__init__.py +12 -0
- novacode_cli-1.2.0/novacode_cli/agents/plan_agent/plan_agent.py +357 -0
- novacode_cli-1.2.0/novacode_cli/agents/plan_agent/plan_mode_middleware.py +64 -0
- novacode_cli-1.2.0/novacode_cli/agents/plan_execution.py +237 -0
- novacode_cli-1.2.0/novacode_cli/agents/ponytail.py +66 -0
- novacode_cli-1.2.0/novacode_cli/agents/prime.py +274 -0
- novacode_cli-1.2.0/novacode_cli/agents/provider_caching.py +99 -0
- novacode_cli-1.2.0/novacode_cli/agents/server_launcher.py +904 -0
- novacode_cli-1.2.0/novacode_cli/agents/strict_tools.py +384 -0
- novacode_cli-1.2.0/novacode_cli/agents/task_discipline.py +294 -0
- novacode_cli-1.2.0/novacode_cli/agents/tool_call_repair.py +290 -0
- novacode_cli-1.2.0/novacode_cli/agents/tool_offload.py +291 -0
- novacode_cli-1.2.0/novacode_cli/agents/tool_search.py +806 -0
- novacode_cli-1.2.0/novacode_cli/agents/tool_search_variants.py +106 -0
- novacode_cli-1.2.0/novacode_cli/agents/tool_verdicts.py +1194 -0
- novacode_cli-1.2.0/novacode_cli/agents/user_async_agents.py +312 -0
- novacode_cli-1.2.0/novacode_cli/artifacts/__init__.py +10 -0
- novacode_cli-1.2.0/novacode_cli/artifacts/registry.py +278 -0
- novacode_cli-1.2.0/novacode_cli/artifacts/server.py +426 -0
- novacode_cli-1.2.0/novacode_cli/assets/Nova.png +0 -0
- novacode_cli-1.2.0/novacode_cli/assets/nova-avatar.png +0 -0
- novacode_cli-1.2.0/novacode_cli/audio/__init__.py +301 -0
- novacode_cli-1.2.0/novacode_cli/audio/capture.py +137 -0
- novacode_cli-1.2.0/novacode_cli/audio/downloads.py +273 -0
- novacode_cli-1.2.0/novacode_cli/audio/pipeline.py +391 -0
- novacode_cli-1.2.0/novacode_cli/audio/playback.py +87 -0
- novacode_cli-1.2.0/novacode_cli/audio/providers.py +208 -0
- novacode_cli-1.2.0/novacode_cli/audio/speakable.py +78 -0
- novacode_cli-1.2.0/novacode_cli/audio/stt.py +132 -0
- novacode_cli-1.2.0/novacode_cli/audio/stt_deepgram.py +69 -0
- novacode_cli-1.2.0/novacode_cli/audio/stt_elevenlabs.py +89 -0
- novacode_cli-1.2.0/novacode_cli/audio/stt_parakeet.py +94 -0
- novacode_cli-1.2.0/novacode_cli/audio/stt_whistle.py +61 -0
- novacode_cli-1.2.0/novacode_cli/audio/summarize.py +92 -0
- novacode_cli-1.2.0/novacode_cli/audio/tts.py +85 -0
- novacode_cli-1.2.0/novacode_cli/audio/tts_kokoro.py +73 -0
- novacode_cli-1.2.0/novacode_cli/audio/tts_orpheus.py +180 -0
- novacode_cli-1.2.0/novacode_cli/audio/tts_pocket.py +131 -0
- novacode_cli-1.2.0/novacode_cli/audio/tts_sano.py +69 -0
- novacode_cli-1.2.0/novacode_cli/audio/vad.py +145 -0
- novacode_cli-1.2.0/novacode_cli/backends/__init__.py +17 -0
- novacode_cli-1.2.0/novacode_cli/backends/filesystem.py +894 -0
- novacode_cli-1.2.0/novacode_cli/backends/native_search.py +92 -0
- novacode_cli-1.2.0/novacode_cli/bootstrap/__init__.py +9 -0
- novacode_cli-1.2.0/novacode_cli/bootstrap/env_snapshot.py +240 -0
- novacode_cli-1.2.0/novacode_cli/bootstrap/steering.py +464 -0
- novacode_cli-1.2.0/novacode_cli/bootstrap/vision_router.py +604 -0
- novacode_cli-1.2.0/novacode_cli/brand.py +362 -0
- novacode_cli-1.2.0/novacode_cli/cli_args.py +718 -0
- novacode_cli-1.2.0/novacode_cli/commands/__init__.py +237 -0
- novacode_cli-1.2.0/novacode_cli/commands/agents_commands.py +231 -0
- novacode_cli-1.2.0/novacode_cli/commands/auth_handler.py +40 -0
- novacode_cli-1.2.0/novacode_cli/commands/browser_use_handler.py +75 -0
- novacode_cli-1.2.0/novacode_cli/commands/cache_handler.py +32 -0
- novacode_cli-1.2.0/novacode_cli/commands/chat_handler.py +1357 -0
- novacode_cli-1.2.0/novacode_cli/commands/ci_fix.py +171 -0
- novacode_cli-1.2.0/novacode_cli/commands/claude_plan.py +331 -0
- novacode_cli-1.2.0/novacode_cli/commands/codex_plan.py +195 -0
- novacode_cli-1.2.0/novacode_cli/commands/commands.py +1113 -0
- novacode_cli-1.2.0/novacode_cli/commands/create_handler.py +124 -0
- novacode_cli-1.2.0/novacode_cli/commands/create_server.py +1887 -0
- novacode_cli-1.2.0/novacode_cli/commands/cron_handler.py +119 -0
- novacode_cli-1.2.0/novacode_cli/commands/dream_handler.py +203 -0
- novacode_cli-1.2.0/novacode_cli/commands/effort_handler.py +65 -0
- novacode_cli-1.2.0/novacode_cli/commands/evolution_handler.py +214 -0
- novacode_cli-1.2.0/novacode_cli/commands/file_commands.py +381 -0
- novacode_cli-1.2.0/novacode_cli/commands/handoff_handler.py +68 -0
- novacode_cli-1.2.0/novacode_cli/commands/hooks_handler.py +269 -0
- novacode_cli-1.2.0/novacode_cli/commands/init_handler.py +146 -0
- novacode_cli-1.2.0/novacode_cli/commands/learning_handler.py +160 -0
- novacode_cli-1.2.0/novacode_cli/commands/lite_mode_handler.py +76 -0
- novacode_cli-1.2.0/novacode_cli/commands/log_commands.py +363 -0
- novacode_cli-1.2.0/novacode_cli/commands/mcp_handler.py +29 -0
- novacode_cli-1.2.0/novacode_cli/commands/model_handler.py +29 -0
- novacode_cli-1.2.0/novacode_cli/commands/notifications_handler.py +158 -0
- novacode_cli-1.2.0/novacode_cli/commands/onboard_handler.py +121 -0
- novacode_cli-1.2.0/novacode_cli/commands/plan_handler.py +440 -0
- novacode_cli-1.2.0/novacode_cli/commands/planner_usage.py +250 -0
- novacode_cli-1.2.0/novacode_cli/commands/plugin_install_handler.py +38 -0
- novacode_cli-1.2.0/novacode_cli/commands/plugins_handler.py +35 -0
- novacode_cli-1.2.0/novacode_cli/commands/prime_handler.py +455 -0
- novacode_cli-1.2.0/novacode_cli/commands/prompt_handler.py +149 -0
- novacode_cli-1.2.0/novacode_cli/commands/provider_usage.py +160 -0
- novacode_cli-1.2.0/novacode_cli/commands/ralph_events.py +106 -0
- novacode_cli-1.2.0/novacode_cli/commands/ralph_handler.py +1293 -0
- novacode_cli-1.2.0/novacode_cli/commands/refine_handler.py +213 -0
- novacode_cli-1.2.0/novacode_cli/commands/research_handler.py +202 -0
- novacode_cli-1.2.0/novacode_cli/commands/rootapp_remote.py +83 -0
- novacode_cli-1.2.0/novacode_cli/commands/router_handler.py +36 -0
- novacode_cli-1.2.0/novacode_cli/commands/server_commands.py +249 -0
- novacode_cli-1.2.0/novacode_cli/commands/session_commands.py +203 -0
- novacode_cli-1.2.0/novacode_cli/commands/share_handler.py +450 -0
- novacode_cli-1.2.0/novacode_cli/commands/side_commands.py +366 -0
- novacode_cli-1.2.0/novacode_cli/commands/skill_invoke.py +420 -0
- novacode_cli-1.2.0/novacode_cli/commands/skills_commands.py +48 -0
- novacode_cli-1.2.0/novacode_cli/commands/trace_handler.py +322 -0
- novacode_cli-1.2.0/novacode_cli/commands/trello_handler.py +226 -0
- novacode_cli-1.2.0/novacode_cli/commands/trello_remote.py +177 -0
- novacode_cli-1.2.0/novacode_cli/commands/trello_server.py +1214 -0
- novacode_cli-1.2.0/novacode_cli/commands/vision_handler.py +127 -0
- novacode_cli-1.2.0/novacode_cli/commands/voice_handler.py +447 -0
- novacode_cli-1.2.0/novacode_cli/commands/webhook_handler.py +134 -0
- novacode_cli-1.2.0/novacode_cli/commands/wiki_commands.py +227 -0
- novacode_cli-1.2.0/novacode_cli/compaction.py +753 -0
- novacode_cli-1.2.0/novacode_cli/computation_cache.py +159 -0
- novacode_cli-1.2.0/novacode_cli/computer/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/computer/persistent.py +234 -0
- novacode_cli-1.2.0/novacode_cli/computer/preview.py +253 -0
- novacode_cli-1.2.0/novacode_cli/computer/runtime.py +474 -0
- novacode_cli-1.2.0/novacode_cli/computer/windows_console.py +152 -0
- novacode_cli-1.2.0/novacode_cli/computer/windows_qemu.py +211 -0
- novacode_cli-1.2.0/novacode_cli/config/browser_mode.py +159 -0
- novacode_cli-1.2.0/novacode_cli/config/catalog_models.py +95 -0
- novacode_cli-1.2.0/novacode_cli/config/config.py +1388 -0
- novacode_cli-1.2.0/novacode_cli/config/credentials.py +540 -0
- novacode_cli-1.2.0/novacode_cli/config/google_oauth_auth.py +281 -0
- novacode_cli-1.2.0/novacode_cli/config/model_capabilities.py +343 -0
- novacode_cli-1.2.0/novacode_cli/config/model_catalog.py +275 -0
- novacode_cli-1.2.0/novacode_cli/config/model_create.py +1325 -0
- novacode_cli-1.2.0/novacode_cli/config/model_manager.py +695 -0
- novacode_cli-1.2.0/novacode_cli/config/nova_config.py +1283 -0
- novacode_cli-1.2.0/novacode_cli/config/openai_chatgpt_auth.py +384 -0
- novacode_cli-1.2.0/novacode_cli/config/opencode_gateway.py +25 -0
- novacode_cli-1.2.0/novacode_cli/config/plan_mode.py +188 -0
- novacode_cli-1.2.0/novacode_cli/config/provider_auth.py +438 -0
- novacode_cli-1.2.0/novacode_cli/config/provider_catalog.json +5127 -0
- novacode_cli-1.2.0/novacode_cli/config/provider_registry.py +38 -0
- novacode_cli-1.2.0/novacode_cli/config/provider_transports.py +258 -0
- novacode_cli-1.2.0/novacode_cli/config/role_models.py +175 -0
- novacode_cli-1.2.0/novacode_cli/context/__init__.py +50 -0
- novacode_cli-1.2.0/novacode_cli/context/_analysis.py +799 -0
- novacode_cli-1.2.0/novacode_cli/context/_budget.py +116 -0
- novacode_cli-1.2.0/novacode_cli/context/_conversation.py +73 -0
- novacode_cli-1.2.0/novacode_cli/context/_dynamic.py +264 -0
- novacode_cli-1.2.0/novacode_cli/context/_model_config.py +380 -0
- novacode_cli-1.2.0/novacode_cli/context/_models_dev.py +99 -0
- novacode_cli-1.2.0/novacode_cli/context/archives.py +248 -0
- novacode_cli-1.2.0/novacode_cli/context/estimates.py +65 -0
- novacode_cli-1.2.0/novacode_cli/context/history.py +17 -0
- novacode_cli-1.2.0/novacode_cli/context/knowledge_cache.py +292 -0
- novacode_cli-1.2.0/novacode_cli/context/manager.py +101 -0
- novacode_cli-1.2.0/novacode_cli/context/observations.py +65 -0
- novacode_cli-1.2.0/novacode_cli/context/pressure.py +168 -0
- novacode_cli-1.2.0/novacode_cli/context/provider_accounting.py +109 -0
- novacode_cli-1.2.0/novacode_cli/context/snapshot.py +493 -0
- novacode_cli-1.2.0/novacode_cli/context/strategies.py +279 -0
- novacode_cli-1.2.0/novacode_cli/context/task_progress.py +122 -0
- novacode_cli-1.2.0/novacode_cli/core/__init__.py +0 -0
- novacode_cli-1.2.0/novacode_cli/core/agent_loop.py +1821 -0
- novacode_cli-1.2.0/novacode_cli/core/autonomous_loop.py +277 -0
- novacode_cli-1.2.0/novacode_cli/core/code_approvals.py +57 -0
- novacode_cli-1.2.0/novacode_cli/core/input_preparation.py +276 -0
- novacode_cli-1.2.0/novacode_cli/core/reasoning.py +67 -0
- novacode_cli-1.2.0/novacode_cli/core/streaming.py +326 -0
- novacode_cli-1.2.0/novacode_cli/core/subagent_tasks.py +696 -0
- novacode_cli-1.2.0/novacode_cli/core/subagent_tracking.py +235 -0
- novacode_cli-1.2.0/novacode_cli/core/tool_results.py +116 -0
- novacode_cli-1.2.0/novacode_cli/core/verification_loop.py +272 -0
- novacode_cli-1.2.0/novacode_cli/council.py +595 -0
- novacode_cli-1.2.0/novacode_cli/council_consensus.py +115 -0
- novacode_cli-1.2.0/novacode_cli/council_decision.py +157 -0
- novacode_cli-1.2.0/novacode_cli/council_planner.py +1421 -0
- novacode_cli-1.2.0/novacode_cli/council_settings.py +208 -0
- novacode_cli-1.2.0/novacode_cli/council_web_settings.py +41 -0
- novacode_cli-1.2.0/novacode_cli/council_workspace.py +56 -0
- novacode_cli-1.2.0/novacode_cli/cowork/__init__.py +10 -0
- novacode_cli-1.2.0/novacode_cli/cowork/broker_middleware.py +162 -0
- novacode_cli-1.2.0/novacode_cli/cowork/launcher.py +102 -0
- novacode_cli-1.2.0/novacode_cli/cowork/policy.py +284 -0
- novacode_cli-1.2.0/novacode_cli/cowork/ui.py +826 -0
- novacode_cli-1.2.0/novacode_cli/daemons/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/daemons/registry.py +342 -0
- novacode_cli-1.2.0/novacode_cli/desktop_notifications.py +302 -0
- novacode_cli-1.2.0/novacode_cli/doctor.py +251 -0
- novacode_cli-1.2.0/novacode_cli/embeddings.py +109 -0
- novacode_cli-1.2.0/novacode_cli/entrypoint.py +56 -0
- novacode_cli-1.2.0/novacode_cli/errors/__init__.py +19 -0
- novacode_cli-1.2.0/novacode_cli/errors/handlers.py +648 -0
- novacode_cli-1.2.0/novacode_cli/errors/provider_errors.py +249 -0
- novacode_cli-1.2.0/novacode_cli/errors/taxonomy.py +80 -0
- novacode_cli-1.2.0/novacode_cli/events.py +179 -0
- novacode_cli-1.2.0/novacode_cli/file_ops.py +714 -0
- novacode_cli-1.2.0/novacode_cli/git_safety.py +281 -0
- novacode_cli-1.2.0/novacode_cli/handoff.py +383 -0
- novacode_cli-1.2.0/novacode_cli/headless/__init__.py +18 -0
- novacode_cli-1.2.0/novacode_cli/headless/input.py +58 -0
- novacode_cli-1.2.0/novacode_cli/headless/output.py +224 -0
- novacode_cli-1.2.0/novacode_cli/headless/pipe.py +532 -0
- novacode_cli-1.2.0/novacode_cli/headless/runner.py +461 -0
- novacode_cli-1.2.0/novacode_cli/hermes/__init__.py +39 -0
- novacode_cli-1.2.0/novacode_cli/hermes/activation.py +297 -0
- novacode_cli-1.2.0/novacode_cli/hermes/config.py +129 -0
- novacode_cli-1.2.0/novacode_cli/hermes/curator.py +199 -0
- novacode_cli-1.2.0/novacode_cli/hermes/evolution.py +374 -0
- novacode_cli-1.2.0/novacode_cli/hermes/ledger.py +364 -0
- novacode_cli-1.2.0/novacode_cli/hermes/memory_tiers.py +969 -0
- novacode_cli-1.2.0/novacode_cli/hermes/middleware.py +678 -0
- novacode_cli-1.2.0/novacode_cli/hermes/overview.py +174 -0
- novacode_cli-1.2.0/novacode_cli/hermes/prompt_evolution.py +503 -0
- novacode_cli-1.2.0/novacode_cli/hermes/refine_loop.py +643 -0
- novacode_cli-1.2.0/novacode_cli/hermes/refinement_log.py +190 -0
- novacode_cli-1.2.0/novacode_cli/hermes/review.py +674 -0
- novacode_cli-1.2.0/novacode_cli/hermes/skill_debate.py +135 -0
- novacode_cli-1.2.0/novacode_cli/hermes/skill_discovery.py +450 -0
- novacode_cli-1.2.0/novacode_cli/hermes/skill_manager.py +335 -0
- novacode_cli-1.2.0/novacode_cli/hermes/skill_proposals.py +43 -0
- novacode_cli-1.2.0/novacode_cli/hermes/test_gaming.py +119 -0
- novacode_cli-1.2.0/novacode_cli/hermes/tracker.py +435 -0
- novacode_cli-1.2.0/novacode_cli/hermes/tuner.py +206 -0
- novacode_cli-1.2.0/novacode_cli/hermes/verification_memory.py +134 -0
- novacode_cli-1.2.0/novacode_cli/hermes/verifier.py +277 -0
- novacode_cli-1.2.0/novacode_cli/hitl/__init__.py +22 -0
- novacode_cli-1.2.0/novacode_cli/hitl/interrupts.py +493 -0
- novacode_cli-1.2.0/novacode_cli/hooks.py +359 -0
- novacode_cli-1.2.0/novacode_cli/image_utils.py +517 -0
- novacode_cli-1.2.0/novacode_cli/init/__init__.py +7 -0
- novacode_cli-1.2.0/novacode_cli/init/events.py +43 -0
- novacode_cli-1.2.0/novacode_cli/input_utils.py +526 -0
- novacode_cli-1.2.0/novacode_cli/install_commands.py +87 -0
- novacode_cli-1.2.0/novacode_cli/integrations/__init__.py +82 -0
- novacode_cli-1.2.0/novacode_cli/integrations/daytona.py +122 -0
- novacode_cli-1.2.0/novacode_cli/integrations/docker.py +309 -0
- novacode_cli-1.2.0/novacode_cli/integrations/host_path.py +111 -0
- novacode_cli-1.2.0/novacode_cli/integrations/langsmith.py +151 -0
- novacode_cli-1.2.0/novacode_cli/integrations/modal.py +134 -0
- novacode_cli-1.2.0/novacode_cli/integrations/runloop.py +130 -0
- novacode_cli-1.2.0/novacode_cli/integrations/sandbox_factory.py +1388 -0
- novacode_cli-1.2.0/novacode_cli/integrations/sandbox_registry.py +312 -0
- novacode_cli-1.2.0/novacode_cli/integrations/workdir_backend.py +589 -0
- novacode_cli-1.2.0/novacode_cli/main.py +2078 -0
- novacode_cli-1.2.0/novacode_cli/mcp/__init__.py +73 -0
- novacode_cli-1.2.0/novacode_cli/mcp/auth.py +189 -0
- novacode_cli-1.2.0/novacode_cli/mcp/client.py +571 -0
- novacode_cli-1.2.0/novacode_cli/mcp/code_mode.py +5 -0
- novacode_cli-1.2.0/novacode_cli/mcp/code_runtime.py +5 -0
- novacode_cli-1.2.0/novacode_cli/mcp/commands.py +902 -0
- novacode_cli-1.2.0/novacode_cli/mcp/config.py +406 -0
- novacode_cli-1.2.0/novacode_cli/mcp/generic.py +128 -0
- novacode_cli-1.2.0/novacode_cli/mcp/middleware.py +993 -0
- novacode_cli-1.2.0/novacode_cli/mcp/presets.py +367 -0
- novacode_cli-1.2.0/novacode_cli/memory/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/memory/agent_memory.py +1312 -0
- novacode_cli-1.2.0/novacode_cli/memory/builtin_lessons.py +60 -0
- novacode_cli-1.2.0/novacode_cli/memory/dream_gates.py +192 -0
- novacode_cli-1.2.0/novacode_cli/memory/limits.py +59 -0
- novacode_cli-1.2.0/novacode_cli/memory/parsed_cache.py +106 -0
- novacode_cli-1.2.0/novacode_cli/memory/recall_stats.py +97 -0
- novacode_cli-1.2.0/novacode_cli/memory/semantic.py +116 -0
- novacode_cli-1.2.0/novacode_cli/memory/store.py +335 -0
- novacode_cli-1.2.0/novacode_cli/memory/wiki.py +274 -0
- novacode_cli-1.2.0/novacode_cli/migrate.py +185 -0
- novacode_cli-1.2.0/novacode_cli/onboarding.py +649 -0
- novacode_cli-1.2.0/novacode_cli/onboarding_check.py +119 -0
- novacode_cli-1.2.0/novacode_cli/path_approval.py +297 -0
- novacode_cli-1.2.0/novacode_cli/plan_archive.py +148 -0
- novacode_cli-1.2.0/novacode_cli/plugins/__init__.py +121 -0
- novacode_cli-1.2.0/novacode_cli/plugins/claude_plugins.py +538 -0
- novacode_cli-1.2.0/novacode_cli/plugins/cli.py +168 -0
- novacode_cli-1.2.0/novacode_cli/plugins/components.py +413 -0
- novacode_cli-1.2.0/novacode_cli/plugins/hooks.py +356 -0
- novacode_cli-1.2.0/novacode_cli/plugins/loader.py +317 -0
- novacode_cli-1.2.0/novacode_cli/plugins/marketplaces.py +199 -0
- novacode_cli-1.2.0/novacode_cli/plugins/storage.py +70 -0
- novacode_cli-1.2.0/novacode_cli/prime.py +759 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/__init__.py +15 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/container.py +198 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/controller.py +565 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/knowledge.py +261 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/publication.py +218 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/recovery.py +50 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/research.py +370 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/runner.py +608 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/runtime.py +261 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/state.py +201 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/store.py +128 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/worker.py +129 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/workflow.py +899 -0
- novacode_cli-1.2.0/novacode_cli/prime_factory/workspace.py +317 -0
- novacode_cli-1.2.0/novacode_cli/prime_memory.py +290 -0
- novacode_cli-1.2.0/novacode_cli/process_manager.py +585 -0
- novacode_cli-1.2.0/novacode_cli/project_onboard.py +537 -0
- novacode_cli-1.2.0/novacode_cli/prompts/System_Prompt_Nova.jinja +23 -0
- novacode_cli-1.2.0/novacode_cli/prompts/__init__.py +168 -0
- novacode_cli-1.2.0/novacode_cli/prompts/agent_definitions.jinja +11 -0
- novacode_cli-1.2.0/novacode_cli/prompts/agent_generation.jinja +125 -0
- novacode_cli-1.2.0/novacode_cli/prompts/async_agents/general_purpose.jinja +22 -0
- novacode_cli-1.2.0/novacode_cli/prompts/claude_plan_mode.jinja +12 -0
- novacode_cli-1.2.0/novacode_cli/prompts/coding_workflow.jinja +18 -0
- novacode_cli-1.2.0/novacode_cli/prompts/computer_use.jinja +17 -0
- novacode_cli-1.2.0/novacode_cli/prompts/core_agent_system.jinja +81 -0
- novacode_cli-1.2.0/novacode_cli/prompts/delegation.jinja +15 -0
- novacode_cli-1.2.0/novacode_cli/prompts/desktop_power.jinja +4 -0
- novacode_cli-1.2.0/novacode_cli/prompts/file_paths.jinja +15 -0
- novacode_cli-1.2.0/novacode_cli/prompts/file_tracker.jinja +23 -0
- novacode_cli-1.2.0/novacode_cli/prompts/init_agents_md.jinja +56 -0
- novacode_cli-1.2.0/novacode_cli/prompts/init_exploration.jinja +174 -0
- novacode_cli-1.2.0/novacode_cli/prompts/init_semantic_orchestrate.jinja +37 -0
- novacode_cli-1.2.0/novacode_cli/prompts/instruction_scope.jinja +5 -0
- novacode_cli-1.2.0/novacode_cli/prompts/learnings_extraction.jinja +45 -0
- novacode_cli-1.2.0/novacode_cli/prompts/longterm_memory.jinja +54 -0
- novacode_cli-1.2.0/novacode_cli/prompts/mcp.jinja +84 -0
- novacode_cli-1.2.0/novacode_cli/prompts/memory_consolidation.jinja +40 -0
- novacode_cli-1.2.0/novacode_cli/prompts/nova_evolution.jinja +73 -0
- novacode_cli-1.2.0/novacode_cli/prompts/nova_review.jinja +158 -0
- novacode_cli-1.2.0/novacode_cli/prompts/nova_skill_debate.jinja +36 -0
- novacode_cli-1.2.0/novacode_cli/prompts/nova_standing_instructions.jinja +26 -0
- novacode_cli-1.2.0/novacode_cli/prompts/nova_verify.jinja +100 -0
- novacode_cli-1.2.0/novacode_cli/prompts/onboard_dashboard.jinja +378 -0
- novacode_cli-1.2.0/novacode_cli/prompts/plan_agent.jinja +87 -0
- novacode_cli-1.2.0/novacode_cli/prompts/plan_scouts.jinja +5 -0
- novacode_cli-1.2.0/novacode_cli/prompts/plan_storage.jinja +8 -0
- novacode_cli-1.2.0/novacode_cli/prompts/planning.jinja +82 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/LICENSE +21 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/UPSTREAM.json +15 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/hooks/ponytail-config.js +175 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/hooks/ponytail-instructions.js +98 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail/SKILL.md +52 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail-audit/SKILL.md +103 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail-debt/SKILL.md +44 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail-gain/SKILL.md +52 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail-help/SKILL.md +76 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ponytail/skills/ponytail-review/SKILL.md +101 -0
- novacode_cli-1.2.0/novacode_cli/prompts/prompt_evolution.jinja +27 -0
- novacode_cli-1.2.0/novacode_cli/prompts/ralph_iteration.jinja +75 -0
- novacode_cli-1.2.0/novacode_cli/prompts/refine_gate.jinja +31 -0
- novacode_cli-1.2.0/novacode_cli/prompts/refine_plan.jinja +64 -0
- novacode_cli-1.2.0/novacode_cli/prompts/refine_review.jinja +34 -0
- novacode_cli-1.2.0/novacode_cli/prompts/research_delivery.jinja +9 -0
- novacode_cli-1.2.0/novacode_cli/prompts/research_swarm.jinja +130 -0
- novacode_cli-1.2.0/novacode_cli/prompts/response_style.jinja +5 -0
- novacode_cli-1.2.0/novacode_cli/prompts/session_summarization.jinja +86 -0
- novacode_cli-1.2.0/novacode_cli/prompts/skill_creation.jinja +85 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/fact_checker.jinja +48 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/financial_analyst.jinja +50 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/literature_reviewer.jinja +52 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/market_analyst.jinja +48 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/research_synthesizer.jinja +57 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/technical_researcher.jinja +56 -0
- novacode_cli-1.2.0/novacode_cli/prompts/subagents/web_researcher.jinja +46 -0
- novacode_cli-1.2.0/novacode_cli/prompts/summarization.jinja +107 -0
- novacode_cli-1.2.0/novacode_cli/prompts/summarization_answers.jinja +23 -0
- novacode_cli-1.2.0/novacode_cli/prompts/summarization_questions.jinja +32 -0
- novacode_cli-1.2.0/novacode_cli/prompts/vision_caption.jinja +21 -0
- novacode_cli-1.2.0/novacode_cli/prompts/voice_summary.jinja +65 -0
- novacode_cli-1.2.0/novacode_cli/prompts/wiki_file.jinja +57 -0
- novacode_cli-1.2.0/novacode_cli/prompts/wiki_ingest.jinja +87 -0
- novacode_cli-1.2.0/novacode_cli/recovery.py +383 -0
- novacode_cli-1.2.0/novacode_cli/remote/__init__.py +45 -0
- novacode_cli-1.2.0/novacode_cli/remote/approvals.py +282 -0
- novacode_cli-1.2.0/novacode_cli/remote/async_task_clients.py +97 -0
- novacode_cli-1.2.0/novacode_cli/remote/async_task_watcher.py +240 -0
- novacode_cli-1.2.0/novacode_cli/remote/bridge.py +905 -0
- novacode_cli-1.2.0/novacode_cli/remote/command_menu.py +26 -0
- novacode_cli-1.2.0/novacode_cli/remote/command_ui.py +243 -0
- novacode_cli-1.2.0/novacode_cli/remote/config.py +199 -0
- novacode_cli-1.2.0/novacode_cli/remote/discord_bridge.py +530 -0
- novacode_cli-1.2.0/novacode_cli/remote/discord_format.py +31 -0
- novacode_cli-1.2.0/novacode_cli/remote/discord_threads.py +225 -0
- novacode_cli-1.2.0/novacode_cli/remote/images.py +97 -0
- novacode_cli-1.2.0/novacode_cli/remote/processor.py +601 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_bot/bot.cjs +16 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_bot/package-lock.json +2683 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_bot/package.json +18 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_bot/transport.cjs +80 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_bridge.py +370 -0
- novacode_cli-1.2.0/novacode_cli/remote/rootapp_setup.py +89 -0
- novacode_cli-1.2.0/novacode_cli/remote/routing.py +103 -0
- novacode_cli-1.2.0/novacode_cli/remote/scheduler.py +302 -0
- novacode_cli-1.2.0/novacode_cli/remote/session.py +164 -0
- novacode_cli-1.2.0/novacode_cli/remote/status.py +411 -0
- novacode_cli-1.2.0/novacode_cli/remote/streaming.py +188 -0
- novacode_cli-1.2.0/novacode_cli/remote/telegram_bridge.py +1118 -0
- novacode_cli-1.2.0/novacode_cli/remote/telegram_format.py +215 -0
- novacode_cli-1.2.0/novacode_cli/remote/telegram_hub.py +256 -0
- novacode_cli-1.2.0/novacode_cli/remote/voice_notes.py +120 -0
- novacode_cli-1.2.0/novacode_cli/remote/webhook_adapters.py +167 -0
- novacode_cli-1.2.0/novacode_cli/remote/webhook_server.py +154 -0
- novacode_cli-1.2.0/novacode_cli/rewind.py +150 -0
- novacode_cli-1.2.0/novacode_cli/rooms/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/rooms/bridge.py +86 -0
- novacode_cli-1.2.0/novacode_cli/rooms/cli.py +231 -0
- novacode_cli-1.2.0/novacode_cli/rooms/nova.py +227 -0
- novacode_cli-1.2.0/novacode_cli/rooms/runtime.py +299 -0
- novacode_cli-1.2.0/novacode_cli/rooms/store.py +538 -0
- novacode_cli-1.2.0/novacode_cli/rooms/workspace.py +94 -0
- novacode_cli-1.2.0/novacode_cli/security/__init__.py +29 -0
- novacode_cli-1.2.0/novacode_cli/security/approval_context.py +45 -0
- novacode_cli-1.2.0/novacode_cli/security/delegated_approval.py +68 -0
- novacode_cli-1.2.0/novacode_cli/security/local_http.py +85 -0
- novacode_cli-1.2.0/novacode_cli/security/middleware.py +87 -0
- novacode_cli-1.2.0/novacode_cli/security/paths.py +35 -0
- novacode_cli-1.2.0/novacode_cli/security/policy.py +535 -0
- novacode_cli-1.2.0/novacode_cli/security/policy_writer.py +90 -0
- novacode_cli-1.2.0/novacode_cli/security/prompt_injection.py +203 -0
- novacode_cli-1.2.0/novacode_cli/security/remember.py +81 -0
- novacode_cli-1.2.0/novacode_cli/security/rule_synthesis.py +116 -0
- novacode_cli-1.2.0/novacode_cli/security/secret_files.py +61 -0
- novacode_cli-1.2.0/novacode_cli/security/session_allow.py +114 -0
- novacode_cli-1.2.0/novacode_cli/security/unicode_security.py +516 -0
- novacode_cli-1.2.0/novacode_cli/security/validator.py +173 -0
- novacode_cli-1.2.0/novacode_cli/server/__init__.py +9 -0
- novacode_cli-1.2.0/novacode_cli/server/app.py +632 -0
- novacode_cli-1.2.0/novacode_cli/server/event_adapter.py +189 -0
- novacode_cli-1.2.0/novacode_cli/server/session_manager.py +90 -0
- novacode_cli-1.2.0/novacode_cli/server_main.py +64 -0
- novacode_cli-1.2.0/novacode_cli/server_runner/dev_server.py +530 -0
- novacode_cli-1.2.0/novacode_cli/server_runner/test_runner.py +470 -0
- novacode_cli-1.2.0/novacode_cli/session/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/session/adapters/__init__.py +240 -0
- novacode_cli-1.2.0/novacode_cli/session/adapters/claude_code.py +102 -0
- novacode_cli-1.2.0/novacode_cli/session/adapters/codex.py +77 -0
- novacode_cli-1.2.0/novacode_cli/session/adapters/harness_native.py +75 -0
- novacode_cli-1.2.0/novacode_cli/session/checkpoint_coordinator.py +448 -0
- novacode_cli-1.2.0/novacode_cli/session/context_restore.py +25 -0
- novacode_cli-1.2.0/novacode_cli/session/history_export.py +228 -0
- novacode_cli-1.2.0/novacode_cli/session/history_tree.py +174 -0
- novacode_cli-1.2.0/novacode_cli/session/imported_context.py +267 -0
- novacode_cli-1.2.0/novacode_cli/session/runtime_identity.py +32 -0
- novacode_cli-1.2.0/novacode_cli/session/session_persistence.py +1168 -0
- novacode_cli-1.2.0/novacode_cli/session/session_prompt_builder.py +279 -0
- novacode_cli-1.2.0/novacode_cli/session/session_restore.py +351 -0
- novacode_cli-1.2.0/novacode_cli/session/session_summarization.py +20 -0
- novacode_cli-1.2.0/novacode_cli/session/transcript_journal.py +153 -0
- novacode_cli-1.2.0/novacode_cli/sessions/__init__.py +11 -0
- novacode_cli-1.2.0/novacode_cli/sessions/gateway.py +84 -0
- novacode_cli-1.2.0/novacode_cli/sessions/launch.py +51 -0
- novacode_cli-1.2.0/novacode_cli/sessions/lease.py +213 -0
- novacode_cli-1.2.0/novacode_cli/sessions/messaging.py +255 -0
- novacode_cli-1.2.0/novacode_cli/sessions/protocol.py +216 -0
- novacode_cli-1.2.0/novacode_cli/sessions/resume.py +31 -0
- novacode_cli-1.2.0/novacode_cli/sessions/supervisor.py +498 -0
- novacode_cli-1.2.0/novacode_cli/sessions/tasks.py +73 -0
- novacode_cli-1.2.0/novacode_cli/sessions/tui_messaging.py +413 -0
- novacode_cli-1.2.0/novacode_cli/sessions/worker.py +652 -0
- novacode_cli-1.2.0/novacode_cli/sessions/worktree.py +262 -0
- novacode_cli-1.2.0/novacode_cli/shell/__init__.py +27 -0
- novacode_cli-1.2.0/novacode_cli/shell/jobs.py +475 -0
- novacode_cli-1.2.0/novacode_cli/shell/middleware.py +1568 -0
- novacode_cli-1.2.0/novacode_cli/shell/os_sandbox.py +205 -0
- novacode_cli-1.2.0/novacode_cli/shell/output.py +181 -0
- novacode_cli-1.2.0/novacode_cli/shell/patterns.py +275 -0
- novacode_cli-1.2.0/novacode_cli/shell/processes.py +87 -0
- novacode_cli-1.2.0/novacode_cli/shell/utils.py +236 -0
- novacode_cli-1.2.0/novacode_cli/skills/__init__.py +26 -0
- novacode_cli-1.2.0/novacode_cli/skills/builtin/handoff/SKILL.md +15 -0
- novacode_cli-1.2.0/novacode_cli/skills/curation_middleware.py +69 -0
- novacode_cli-1.2.0/novacode_cli/skills/executable.py +161 -0
- novacode_cli-1.2.0/novacode_cli/skills/libraries.py +102 -0
- novacode_cli-1.2.0/novacode_cli/skills/load.py +248 -0
- novacode_cli-1.2.0/novacode_cli/skills/prune.py +215 -0
- novacode_cli-1.2.0/novacode_cli/skills/refreshing_middleware.py +896 -0
- novacode_cli-1.2.0/novacode_cli/skills/retrieval.py +248 -0
- novacode_cli-1.2.0/novacode_cli/skills/runtime.py +118 -0
- novacode_cli-1.2.0/novacode_cli/skills/schema.py +254 -0
- novacode_cli-1.2.0/novacode_cli/skills/skill_creation.py +1549 -0
- novacode_cli-1.2.0/novacode_cli/skills/skill_lock.py +75 -0
- novacode_cli-1.2.0/novacode_cli/skills/skill_system_prompt.py +16 -0
- novacode_cli-1.2.0/novacode_cli/skills/skills_prefs.py +126 -0
- novacode_cli-1.2.0/novacode_cli/skills/tool_resolver.py +31 -0
- novacode_cli-1.2.0/novacode_cli/skills/upstream.py +50 -0
- novacode_cli-1.2.0/novacode_cli/skills/versioning.py +291 -0
- novacode_cli-1.2.0/novacode_cli/states/Session.py +847 -0
- novacode_cli-1.2.0/novacode_cli/states/__init__.py +31 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/__init__.py +17 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/agent_runtime.py +249 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/background_tasks.py +21 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/notifications.py +74 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/remote_bridge.py +56 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/ui_settings.py +49 -0
- novacode_cli-1.2.0/novacode_cli/states/slices/wiki.py +25 -0
- novacode_cli-1.2.0/novacode_cli/teammates/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/teammates/controller.py +557 -0
- novacode_cli-1.2.0/novacode_cli/teammates/graph.py +104 -0
- novacode_cli-1.2.0/novacode_cli/teammates/registry.py +175 -0
- novacode_cli-1.2.0/novacode_cli/teammates/service.py +254 -0
- novacode_cli-1.2.0/novacode_cli/teammates/worker.py +19 -0
- novacode_cli-1.2.0/novacode_cli/teams/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/teams/adapters/__init__.py +1 -0
- novacode_cli-1.2.0/novacode_cli/teams/adapters/container.py +316 -0
- novacode_cli-1.2.0/novacode_cli/teams/adapters/inprocess.py +206 -0
- novacode_cli-1.2.0/novacode_cli/teams/adapters/process.py +364 -0
- novacode_cli-1.2.0/novacode_cli/teams/bootstrap.py +246 -0
- novacode_cli-1.2.0/novacode_cli/teams/container_git.py +67 -0
- novacode_cli-1.2.0/novacode_cli/teams/context.py +34 -0
- novacode_cli-1.2.0/novacode_cli/teams/coordinator.py +815 -0
- novacode_cli-1.2.0/novacode_cli/teams/gateway.py +200 -0
- novacode_cli-1.2.0/novacode_cli/teams/host.py +64 -0
- novacode_cli-1.2.0/novacode_cli/teams/legacy.py +52 -0
- novacode_cli-1.2.0/novacode_cli/teams/middleware.py +176 -0
- novacode_cli-1.2.0/novacode_cli/teams/models.py +104 -0
- novacode_cli-1.2.0/novacode_cli/teams/output.py +47 -0
- novacode_cli-1.2.0/novacode_cli/teams/protocol.py +50 -0
- novacode_cli-1.2.0/novacode_cli/teams/recovery.py +80 -0
- novacode_cli-1.2.0/novacode_cli/teams/scheduler.py +44 -0
- novacode_cli-1.2.0/novacode_cli/teams/store.py +631 -0
- novacode_cli-1.2.0/novacode_cli/teams/worker.py +251 -0
- novacode_cli-1.2.0/novacode_cli/teams/workspace.py +100 -0
- novacode_cli-1.2.0/novacode_cli/token_utils.py +256 -0
- novacode_cli-1.2.0/novacode_cli/tools/__init__.py +104 -0
- novacode_cli-1.2.0/novacode_cli/tools/_shared.py +97 -0
- novacode_cli-1.2.0/novacode_cli/tools/_types.py +24 -0
- novacode_cli-1.2.0/novacode_cli/tools/artifact_tools.py +137 -0
- novacode_cli-1.2.0/novacode_cli/tools/code_search_tools.py +330 -0
- novacode_cli-1.2.0/novacode_cli/tools/computer_tools.py +77 -0
- novacode_cli-1.2.0/novacode_cli/tools/cron_tools.py +65 -0
- novacode_cli-1.2.0/novacode_cli/tools/daemon_tool.py +290 -0
- novacode_cli-1.2.0/novacode_cli/tools/desktop_tools.py +161 -0
- novacode_cli-1.2.0/novacode_cli/tools/fetch_tools.py +530 -0
- novacode_cli-1.2.0/novacode_cli/tools/http_tools.py +279 -0
- novacode_cli-1.2.0/novacode_cli/tools/inspection_tools.py +107 -0
- novacode_cli-1.2.0/novacode_cli/tools/job_tools.py +143 -0
- novacode_cli-1.2.0/novacode_cli/tools/knowledge_tools.py +427 -0
- novacode_cli-1.2.0/novacode_cli/tools/memory_tools.py +461 -0
- novacode_cli-1.2.0/novacode_cli/tools/memory_wiki_tools.py +40 -0
- novacode_cli-1.2.0/novacode_cli/tools/notebook_tools.py +238 -0
- novacode_cli-1.2.0/novacode_cli/tools/oracle_tool.py +83 -0
- novacode_cli-1.2.0/novacode_cli/tools/plan_archive_tools.py +80 -0
- novacode_cli-1.2.0/novacode_cli/tools/plan_mode_tools.py +315 -0
- novacode_cli-1.2.0/novacode_cli/tools/python_kernel_loop.py +165 -0
- novacode_cli-1.2.0/novacode_cli/tools/python_kernel_tool.py +222 -0
- novacode_cli-1.2.0/novacode_cli/tools/reflection_tools.py +34 -0
- novacode_cli-1.2.0/novacode_cli/tools/scraper_tools.py +377 -0
- novacode_cli-1.2.0/novacode_cli/tools/skill_tools.py +275 -0
- novacode_cli-1.2.0/novacode_cli/tools/speak_tool.py +51 -0
- novacode_cli-1.2.0/novacode_cli/tools/store_memory_tools.py +227 -0
- novacode_cli-1.2.0/novacode_cli/tools/ui_tools.py +62 -0
- novacode_cli-1.2.0/novacode_cli/tools/waiter_tools.py +408 -0
- novacode_cli-1.2.0/novacode_cli/tools/web_tools.py +349 -0
- novacode_cli-1.2.0/novacode_cli/tools/wiki_tools.py +152 -0
- novacode_cli-1.2.0/novacode_cli/tools/worktree_tools.py +219 -0
- novacode_cli-1.2.0/novacode_cli/tracking/__init__.py +10 -0
- novacode_cli-1.2.0/novacode_cli/tracking/file_tracker.py +826 -0
- novacode_cli-1.2.0/novacode_cli/tracking/local_metrics.py +170 -0
- novacode_cli-1.2.0/novacode_cli/tracking/loop_guard.py +507 -0
- novacode_cli-1.2.0/novacode_cli/tracking/request_metrics.py +60 -0
- novacode_cli-1.2.0/novacode_cli/tracking/tracing.py +692 -0
- novacode_cli-1.2.0/novacode_cli/tracking/usage_tree.py +677 -0
- novacode_cli-1.2.0/novacode_cli/tracking/workspace_anchoring.py +231 -0
- novacode_cli-1.2.0/novacode_cli/tui/__init__.py +11 -0
- novacode_cli-1.2.0/novacode_cli/tui/animation_rate.py +9 -0
- novacode_cli-1.2.0/novacode_cli/tui/animations.py +332 -0
- novacode_cli-1.2.0/novacode_cli/tui/app.py +19315 -0
- novacode_cli-1.2.0/novacode_cli/tui/auth_display.py +87 -0
- novacode_cli-1.2.0/novacode_cli/tui/auth_screens.py +826 -0
- novacode_cli-1.2.0/novacode_cli/tui/avatar.py +294 -0
- novacode_cli-1.2.0/novacode_cli/tui/avatar_frames.py +21 -0
- novacode_cli-1.2.0/novacode_cli/tui/background_tasks.py +35 -0
- novacode_cli-1.2.0/novacode_cli/tui/browser_settings_screen.py +70 -0
- novacode_cli-1.2.0/novacode_cli/tui/caveman_screen.py +185 -0
- novacode_cli-1.2.0/novacode_cli/tui/council_settings_screen.py +182 -0
- novacode_cli-1.2.0/novacode_cli/tui/council_view.py +535 -0
- novacode_cli-1.2.0/novacode_cli/tui/decision_settings.py +268 -0
- novacode_cli-1.2.0/novacode_cli/tui/diff_preview.py +199 -0
- novacode_cli-1.2.0/novacode_cli/tui/gc_tuning.py +63 -0
- novacode_cli-1.2.0/novacode_cli/tui/handoff_screen.py +206 -0
- novacode_cli-1.2.0/novacode_cli/tui/harness.py +244 -0
- novacode_cli-1.2.0/novacode_cli/tui/history_tree_screen.py +179 -0
- novacode_cli-1.2.0/novacode_cli/tui/home.py +328 -0
- novacode_cli-1.2.0/novacode_cli/tui/home_scene.py +94 -0
- novacode_cli-1.2.0/novacode_cli/tui/icons.py +81 -0
- novacode_cli-1.2.0/novacode_cli/tui/interface_styles.tcss +327 -0
- novacode_cli-1.2.0/novacode_cli/tui/matrix3.py +108 -0
- novacode_cli-1.2.0/novacode_cli/tui/mcp_tools_screen.py +131 -0
- novacode_cli-1.2.0/novacode_cli/tui/motion.py +178 -0
- novacode_cli-1.2.0/novacode_cli/tui/output_body.py +136 -0
- novacode_cli-1.2.0/novacode_cli/tui/output_buffer.py +59 -0
- novacode_cli-1.2.0/novacode_cli/tui/palette.py +334 -0
- novacode_cli-1.2.0/novacode_cli/tui/pickers.py +237 -0
- novacode_cli-1.2.0/novacode_cli/tui/prime_panel.py +506 -0
- novacode_cli-1.2.0/novacode_cli/tui/provider_signin.py +213 -0
- novacode_cli-1.2.0/novacode_cli/tui/pty_shell.py +159 -0
- novacode_cli-1.2.0/novacode_cli/tui/reference_screens.py +444 -0
- novacode_cli-1.2.0/novacode_cli/tui/resume_picker.py +346 -0
- novacode_cli-1.2.0/novacode_cli/tui/rooms.py +597 -0
- novacode_cli-1.2.0/novacode_cli/tui/screens.py +7088 -0
- novacode_cli-1.2.0/novacode_cli/tui/session_import.py +333 -0
- novacode_cli-1.2.0/novacode_cli/tui/session_pane.py +242 -0
- novacode_cli-1.2.0/novacode_cli/tui/session_tab.py +42 -0
- novacode_cli-1.2.0/novacode_cli/tui/session_transcript.py +118 -0
- novacode_cli-1.2.0/novacode_cli/tui/shell_output.py +7 -0
- novacode_cli-1.2.0/novacode_cli/tui/stall_watch.py +174 -0
- novacode_cli-1.2.0/novacode_cli/tui/statusline.py +40 -0
- novacode_cli-1.2.0/novacode_cli/tui/statusline_screen.py +91 -0
- novacode_cli-1.2.0/novacode_cli/tui/teammate_updates.py +162 -0
- novacode_cli-1.2.0/novacode_cli/tui/teammates.py +548 -0
- novacode_cli-1.2.0/novacode_cli/tui/terminal.py +289 -0
- novacode_cli-1.2.0/novacode_cli/tui/terminal_view.py +235 -0
- novacode_cli-1.2.0/novacode_cli/tui/themes.py +118 -0
- novacode_cli-1.2.0/novacode_cli/tui/update_notice.py +84 -0
- novacode_cli-1.2.0/novacode_cli/tui/voice_downloads.py +113 -0
- novacode_cli-1.2.0/novacode_cli/tui/widgets.py +2038 -0
- novacode_cli-1.2.0/novacode_cli/tui/windows_input.py +38 -0
- novacode_cli-1.2.0/novacode_cli/tui/workspace_approval.py +165 -0
- novacode_cli-1.2.0/novacode_cli/ui/council_web.py +113 -0
- novacode_cli-1.2.0/novacode_cli/ui/council_workspace.py +72 -0
- novacode_cli-1.2.0/novacode_cli/ui/cowork_web.py +41 -0
- novacode_cli-1.2.0/novacode_cli/ui/diff_highlight.py +160 -0
- novacode_cli-1.2.0/novacode_cli/ui/execution.py +1396 -0
- novacode_cli-1.2.0/novacode_cli/ui/exit_summary.py +65 -0
- novacode_cli-1.2.0/novacode_cli/ui/hitl_approval.py +196 -0
- novacode_cli-1.2.0/novacode_cli/ui/input_preparation.py +2 -0
- novacode_cli-1.2.0/novacode_cli/ui/interrupt_handlers.py +215 -0
- novacode_cli-1.2.0/novacode_cli/ui/question_prompt.py +151 -0
- novacode_cli-1.2.0/novacode_cli/ui/status_phrases.py +157 -0
- novacode_cli-1.2.0/novacode_cli/ui/stream_preview.py +66 -0
- novacode_cli-1.2.0/novacode_cli/ui/streaming.py +2 -0
- novacode_cli-1.2.0/novacode_cli/ui/subagent_tracking.py +2 -0
- novacode_cli-1.2.0/novacode_cli/ui/ui_elements.py +1585 -0
- novacode_cli-1.2.0/novacode_cli/ui/web_workspace.py +244 -0
- novacode_cli-1.2.0/novacode_cli/ui_events.py +299 -0
- novacode_cli-1.2.0/novacode_cli/update_ui.py +243 -0
- novacode_cli-1.2.0/novacode_cli/updates.py +489 -0
- novacode_cli-1.2.0/novacode_cli/utils/backend_patches.py +399 -0
- novacode_cli-1.2.0/novacode_cli/utils/backend_paths.py +467 -0
- novacode_cli-1.2.0/novacode_cli/utils/lazy_providers.py +51 -0
- novacode_cli-1.2.0/novacode_cli/utils/model_info.py +223 -0
- novacode_cli-1.2.0/novacode_cli/utils/pdf_extraction.py +183 -0
- novacode_cli-1.2.0/novacode_cli/utils/startup.py +29 -0
- novacode_cli-1.2.0/novacode_cli/utils/tasks.py +42 -0
- novacode_cli-1.2.0/novacode_cli/utils/windows.py +9 -0
- novacode_cli-1.2.0/novacode_cli/vixie/hook_adapter.py +127 -0
- novacode_cli-1.2.0/novacode_cli/vixie/server.py +375 -0
- novacode_cli-1.2.0/novacode_cli/wiki/__init__.py +15 -0
- novacode_cli-1.2.0/novacode_cli/wiki/ask.py +56 -0
- novacode_cli-1.2.0/novacode_cli/wiki/file.py +71 -0
- novacode_cli-1.2.0/novacode_cli/wiki/ingest.py +184 -0
- novacode_cli-1.2.0/novacode_cli/wiki/manager.py +261 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/PKG-INFO +271 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/SOURCES.txt +1204 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/dependency_links.txt +1 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/entry_points.txt +2 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/requires.txt +97 -0
- novacode_cli-1.2.0/novacode_cli.egg-info/top_level.txt +1 -0
- novacode_cli-1.2.0/pyproject.toml +320 -0
- novacode_cli-1.2.0/setup.cfg +4 -0
- novacode_cli-1.2.0/tests/test_absolute_host_paths.py +121 -0
- novacode_cli-1.2.0/tests/test_agent_invocation.py +455 -0
- novacode_cli-1.2.0/tests/test_agent_mailbox.py +59 -0
- novacode_cli-1.2.0/tests/test_agent_mentions.py +33 -0
- novacode_cli-1.2.0/tests/test_agent_server_launcher.py +422 -0
- novacode_cli-1.2.0/tests/test_agent_stream.py +1458 -0
- novacode_cli-1.2.0/tests/test_agents_http_api.py +75 -0
- novacode_cli-1.2.0/tests/test_agents_screen.py +263 -0
- novacode_cli-1.2.0/tests/test_approval_decisions.py +306 -0
- novacode_cli-1.2.0/tests/test_approval_policy.py +260 -0
- novacode_cli-1.2.0/tests/test_arg_repair.py +86 -0
- novacode_cli-1.2.0/tests/test_artifacts.py +250 -0
- novacode_cli-1.2.0/tests/test_async_completion_delivery.py +33 -0
- novacode_cli-1.2.0/tests/test_async_general_purpose.py +70 -0
- novacode_cli-1.2.0/tests/test_async_mcp_tools.py +391 -0
- novacode_cli-1.2.0/tests/test_async_model_context.py +559 -0
- novacode_cli-1.2.0/tests/test_async_offload_fixes.py +242 -0
- novacode_cli-1.2.0/tests/test_async_on_demand.py +178 -0
- novacode_cli-1.2.0/tests/test_async_subagent_gating.py +152 -0
- novacode_cli-1.2.0/tests/test_async_task_errors.py +151 -0
- novacode_cli-1.2.0/tests/test_async_task_watcher.py +191 -0
- novacode_cli-1.2.0/tests/test_attribution.py +384 -0
- novacode_cli-1.2.0/tests/test_auth_refresh.py +140 -0
- novacode_cli-1.2.0/tests/test_auth_screens.py +608 -0
- novacode_cli-1.2.0/tests/test_autonomous_loop.py +360 -0
- novacode_cli-1.2.0/tests/test_background_monitor.py +141 -0
- novacode_cli-1.2.0/tests/test_background_responsiveness.py +411 -0
- novacode_cli-1.2.0/tests/test_bash_in_chat.py +328 -0
- novacode_cli-1.2.0/tests/test_brand.py +255 -0
- novacode_cli-1.2.0/tests/test_brand_banner.py +407 -0
- novacode_cli-1.2.0/tests/test_browser_mode.py +329 -0
- novacode_cli-1.2.0/tests/test_browser_mode_ui.py +152 -0
- novacode_cli-1.2.0/tests/test_browser_server_settings.py +194 -0
- novacode_cli-1.2.0/tests/test_build_avatar.py +35 -0
- novacode_cli-1.2.0/tests/test_builtin_agent_files.py +83 -0
- novacode_cli-1.2.0/tests/test_builtin_lessons.py +132 -0
- novacode_cli-1.2.0/tests/test_cache_diagnostics.py +155 -0
- novacode_cli-1.2.0/tests/test_caveman.py +346 -0
- novacode_cli-1.2.0/tests/test_caveman_benchmark.py +109 -0
- novacode_cli-1.2.0/tests/test_caveman_features.py +450 -0
- novacode_cli-1.2.0/tests/test_chat_handler.py +757 -0
- novacode_cli-1.2.0/tests/test_checkpoint_coordinator.py +431 -0
- novacode_cli-1.2.0/tests/test_ci_fix.py +124 -0
- novacode_cli-1.2.0/tests/test_claude_agent_files.py +213 -0
- novacode_cli-1.2.0/tests/test_claude_plan.py +411 -0
- novacode_cli-1.2.0/tests/test_clear.py +57 -0
- novacode_cli-1.2.0/tests/test_clear_context.py +82 -0
- novacode_cli-1.2.0/tests/test_cli_help_branding.py +22 -0
- novacode_cli-1.2.0/tests/test_clipboard_image_paste.py +326 -0
- novacode_cli-1.2.0/tests/test_code_mode_toggle.py +143 -0
- novacode_cli-1.2.0/tests/test_codex_plan.py +184 -0
- novacode_cli-1.2.0/tests/test_commandcode_provider.py +139 -0
- novacode_cli-1.2.0/tests/test_compaction.py +262 -0
- novacode_cli-1.2.0/tests/test_compaction_derived_label.py +113 -0
- novacode_cli-1.2.0/tests/test_compaction_no_replay.py +30 -0
- novacode_cli-1.2.0/tests/test_compaction_notice.py +143 -0
- novacode_cli-1.2.0/tests/test_compaction_prefix.py +261 -0
- novacode_cli-1.2.0/tests/test_compaction_replay_leak.py +85 -0
- novacode_cli-1.2.0/tests/test_compaction_tail.py +310 -0
- novacode_cli-1.2.0/tests/test_compaction_trigger_sync.py +152 -0
- novacode_cli-1.2.0/tests/test_compression_modes.py +238 -0
- novacode_cli-1.2.0/tests/test_computer.py +602 -0
- novacode_cli-1.2.0/tests/test_computer_background.py +135 -0
- novacode_cli-1.2.0/tests/test_context_breakdown_tokens.py +134 -0
- novacode_cli-1.2.0/tests/test_context_compaction.py +744 -0
- novacode_cli-1.2.0/tests/test_context_compaction_guard.py +146 -0
- novacode_cli-1.2.0/tests/test_context_edit_trigger.py +48 -0
- novacode_cli-1.2.0/tests/test_context_history.py +23 -0
- novacode_cli-1.2.0/tests/test_context_learning_audit.py +125 -0
- novacode_cli-1.2.0/tests/test_context_learning_properties.py +149 -0
- novacode_cli-1.2.0/tests/test_context_learning_replay.py +75 -0
- novacode_cli-1.2.0/tests/test_context_learning_verification_gate.py +124 -0
- novacode_cli-1.2.0/tests/test_context_overflow.py +117 -0
- novacode_cli-1.2.0/tests/test_context_pressure_policy.py +77 -0
- novacode_cli-1.2.0/tests/test_context_snapshot.py +97 -0
- novacode_cli-1.2.0/tests/test_context_strategies.py +305 -0
- novacode_cli-1.2.0/tests/test_continuation_heading_coupling.py +90 -0
- novacode_cli-1.2.0/tests/test_continuation_leak.py +69 -0
- novacode_cli-1.2.0/tests/test_conversation_context.py +95 -0
- novacode_cli-1.2.0/tests/test_conversation_history_backend.py +92 -0
- novacode_cli-1.2.0/tests/test_core_prompt_subagents.py +46 -0
- novacode_cli-1.2.0/tests/test_council_chat_ui.py +120 -0
- novacode_cli-1.2.0/tests/test_council_consensus.py +144 -0
- novacode_cli-1.2.0/tests/test_council_planner.py +643 -0
- novacode_cli-1.2.0/tests/test_council_settings.py +306 -0
- novacode_cli-1.2.0/tests/test_council_tui.py +263 -0
- novacode_cli-1.2.0/tests/test_council_view.py +245 -0
- novacode_cli-1.2.0/tests/test_council_workspace.py +40 -0
- novacode_cli-1.2.0/tests/test_cowork_broker_middleware.py +100 -0
- novacode_cli-1.2.0/tests/test_cowork_policy.py +105 -0
- novacode_cli-1.2.0/tests/test_cowork_server.py +240 -0
- novacode_cli-1.2.0/tests/test_credentials.py +215 -0
- novacode_cli-1.2.0/tests/test_cross_session_lifecycle.py +124 -0
- novacode_cli-1.2.0/tests/test_cross_session_tui.py +98 -0
- novacode_cli-1.2.0/tests/test_ctrl_b_background.py +185 -0
- novacode_cli-1.2.0/tests/test_daemon_hardening.py +270 -0
- novacode_cli-1.2.0/tests/test_daemon_security_identity.py +77 -0
- novacode_cli-1.2.0/tests/test_daemon_tool.py +101 -0
- novacode_cli-1.2.0/tests/test_dangerous_patterns.py +97 -0
- novacode_cli-1.2.0/tests/test_decision_settings.py +298 -0
- novacode_cli-1.2.0/tests/test_deepagents_compat.py +160 -0
- novacode_cli-1.2.0/tests/test_deferred_commands.py +84 -0
- novacode_cli-1.2.0/tests/test_delegated_auto_approve.py +186 -0
- novacode_cli-1.2.0/tests/test_desktop_notifications.py +107 -0
- novacode_cli-1.2.0/tests/test_desktop_sleep.py +180 -0
- novacode_cli-1.2.0/tests/test_diff_highlight.py +152 -0
- novacode_cli-1.2.0/tests/test_diff_preview.py +141 -0
- novacode_cli-1.2.0/tests/test_discord_session_threads.py +460 -0
- novacode_cli-1.2.0/tests/test_dream_agent_backend.py +38 -0
- novacode_cli-1.2.0/tests/test_dream_gates.py +191 -0
- novacode_cli-1.2.0/tests/test_dream_handler.py +72 -0
- novacode_cli-1.2.0/tests/test_edit_diagnostics.py +206 -0
- novacode_cli-1.2.0/tests/test_edit_fallback.py +51 -0
- novacode_cli-1.2.0/tests/test_entrance_animation.py +393 -0
- novacode_cli-1.2.0/tests/test_error_taxonomy.py +141 -0
- novacode_cli-1.2.0/tests/test_essential_session_tools.py +237 -0
- novacode_cli-1.2.0/tests/test_events.py +93 -0
- novacode_cli-1.2.0/tests/test_evolution_activity.py +133 -0
- novacode_cli-1.2.0/tests/test_exit_summary.py +130 -0
- novacode_cli-1.2.0/tests/test_external_review.py +157 -0
- novacode_cli-1.2.0/tests/test_factory_container.py +289 -0
- novacode_cli-1.2.0/tests/test_factory_controller.py +321 -0
- novacode_cli-1.2.0/tests/test_factory_interfaces.py +215 -0
- novacode_cli-1.2.0/tests/test_factory_knowledge.py +294 -0
- novacode_cli-1.2.0/tests/test_factory_workers.py +329 -0
- novacode_cli-1.2.0/tests/test_factory_workflow.py +514 -0
- novacode_cli-1.2.0/tests/test_factory_workspace.py +286 -0
- novacode_cli-1.2.0/tests/test_fallback_usage.py +167 -0
- novacode_cli-1.2.0/tests/test_file_mentions.py +263 -0
- novacode_cli-1.2.0/tests/test_file_op_tracker_isolation.py +34 -0
- novacode_cli-1.2.0/tests/test_file_ops.py +170 -0
- novacode_cli-1.2.0/tests/test_file_tracker.py +113 -0
- novacode_cli-1.2.0/tests/test_generic_mcp_tool.py +282 -0
- novacode_cli-1.2.0/tests/test_git_safety.py +147 -0
- novacode_cli-1.2.0/tests/test_goal_rubric.py +142 -0
- novacode_cli-1.2.0/tests/test_goal_usage.py +172 -0
- novacode_cli-1.2.0/tests/test_good_habits_injection.py +49 -0
- novacode_cli-1.2.0/tests/test_google_oauth_auth.py +367 -0
- novacode_cli-1.2.0/tests/test_google_tool_schema.py +30 -0
- novacode_cli-1.2.0/tests/test_google_workspace_offline.py +62 -0
- novacode_cli-1.2.0/tests/test_guard_and_log_fixes.py +105 -0
- novacode_cli-1.2.0/tests/test_handoff.py +419 -0
- novacode_cli-1.2.0/tests/test_handoff_skill_and_delete.py +251 -0
- novacode_cli-1.2.0/tests/test_handoff_ui.py +197 -0
- novacode_cli-1.2.0/tests/test_headless.py +274 -0
- novacode_cli-1.2.0/tests/test_headless_production.py +380 -0
- novacode_cli-1.2.0/tests/test_home_scenes.py +121 -0
- novacode_cli-1.2.0/tests/test_hooks.py +176 -0
- novacode_cli-1.2.0/tests/test_host_path.py +83 -0
- novacode_cli-1.2.0/tests/test_hover_restyle.py +60 -0
- novacode_cli-1.2.0/tests/test_image_utils.py +129 -0
- novacode_cli-1.2.0/tests/test_input_history_and_redirect.py +145 -0
- novacode_cli-1.2.0/tests/test_install_commands.py +97 -0
- novacode_cli-1.2.0/tests/test_interface_styles.py +95 -0
- novacode_cli-1.2.0/tests/test_jev_auth.py +193 -0
- novacode_cli-1.2.0/tests/test_knowledge_cache.py +462 -0
- novacode_cli-1.2.0/tests/test_langsmith_runtime.py +181 -0
- novacode_cli-1.2.0/tests/test_langsmith_setup.py +261 -0
- novacode_cli-1.2.0/tests/test_langsmith_setup_modal.py +115 -0
- novacode_cli-1.2.0/tests/test_large_paste.py +92 -0
- novacode_cli-1.2.0/tests/test_lazy_heavy.py +109 -0
- novacode_cli-1.2.0/tests/test_lazy_providers.py +44 -0
- novacode_cli-1.2.0/tests/test_learning_activation.py +299 -0
- novacode_cli-1.2.0/tests/test_learning_command_lifecycle.py +141 -0
- novacode_cli-1.2.0/tests/test_learning_ledger.py +176 -0
- novacode_cli-1.2.0/tests/test_learning_recall.py +210 -0
- novacode_cli-1.2.0/tests/test_learning_review_safety.py +148 -0
- novacode_cli-1.2.0/tests/test_learning_rework.py +208 -0
- novacode_cli-1.2.0/tests/test_learning_tui.py +91 -0
- novacode_cli-1.2.0/tests/test_lesson_scope.py +312 -0
- novacode_cli-1.2.0/tests/test_lite_mode.py +148 -0
- novacode_cli-1.2.0/tests/test_local_backend_subagent_execute.py +74 -0
- novacode_cli-1.2.0/tests/test_log_session_line.py +37 -0
- novacode_cli-1.2.0/tests/test_loop_guard.py +230 -0
- novacode_cli-1.2.0/tests/test_loop_guard_halts.py +181 -0
- novacode_cli-1.2.0/tests/test_matrix3.py +230 -0
- novacode_cli-1.2.0/tests/test_matrix_rain.py +159 -0
- novacode_cli-1.2.0/tests/test_mcp_auth.py +356 -0
- novacode_cli-1.2.0/tests/test_mcp_cli.py +87 -0
- novacode_cli-1.2.0/tests/test_mcp_code_mode.py +778 -0
- novacode_cli-1.2.0/tests/test_mcp_presets.py +182 -0
- novacode_cli-1.2.0/tests/test_mcp_sessions.py +321 -0
- novacode_cli-1.2.0/tests/test_mcp_structured_content.py +43 -0
- novacode_cli-1.2.0/tests/test_memory_prompt_cache_order.py +303 -0
- novacode_cli-1.2.0/tests/test_memory_retrieval.py +137 -0
- novacode_cli-1.2.0/tests/test_memory_search.py +136 -0
- novacode_cli-1.2.0/tests/test_memory_tools.py +124 -0
- novacode_cli-1.2.0/tests/test_memory_wiki.py +397 -0
- novacode_cli-1.2.0/tests/test_modal_layouts.py +232 -0
- novacode_cli-1.2.0/tests/test_model_build.py +203 -0
- novacode_cli-1.2.0/tests/test_model_capabilities.py +94 -0
- novacode_cli-1.2.0/tests/test_model_catalog.py +163 -0
- novacode_cli-1.2.0/tests/test_model_command_core.py +399 -0
- novacode_cli-1.2.0/tests/test_model_endpoint.py +164 -0
- novacode_cli-1.2.0/tests/test_model_retry_progress.py +151 -0
- novacode_cli-1.2.0/tests/test_model_router.py +654 -0
- novacode_cli-1.2.0/tests/test_model_screen_custom.py +96 -0
- novacode_cli-1.2.0/tests/test_model_screen_roles.py +124 -0
- novacode_cli-1.2.0/tests/test_model_selector.py +820 -0
- novacode_cli-1.2.0/tests/test_models_dev_context.py +168 -0
- novacode_cli-1.2.0/tests/test_more_providers.py +229 -0
- novacode_cli-1.2.0/tests/test_multimodal_content_blocks.py +244 -0
- novacode_cli-1.2.0/tests/test_native_code_mode.py +682 -0
- novacode_cli-1.2.0/tests/test_native_search.py +171 -0
- novacode_cli-1.2.0/tests/test_notebook_tools.py +228 -0
- novacode_cli-1.2.0/tests/test_notifications.py +151 -0
- novacode_cli-1.2.0/tests/test_nova_avatar.py +245 -0
- novacode_cli-1.2.0/tests/test_nova_config_lost_update.py +40 -0
- novacode_cli-1.2.0/tests/test_nvidia_provider.py +234 -0
- novacode_cli-1.2.0/tests/test_ollama_context.py +188 -0
- novacode_cli-1.2.0/tests/test_ollama_stdout_guard.py +112 -0
- novacode_cli-1.2.0/tests/test_openai_chatgpt_auth.py +322 -0
- novacode_cli-1.2.0/tests/test_openai_decisions.py +179 -0
- novacode_cli-1.2.0/tests/test_opencode_jev.py +181 -0
- novacode_cli-1.2.0/tests/test_opencode_model_list.py +262 -0
- novacode_cli-1.2.0/tests/test_opencode_provider.py +156 -0
- novacode_cli-1.2.0/tests/test_opencode_zen.py +226 -0
- novacode_cli-1.2.0/tests/test_optimization.py +304 -0
- novacode_cli-1.2.0/tests/test_os_sandbox.py +152 -0
- novacode_cli-1.2.0/tests/test_packaged_main_prompts.py +74 -0
- novacode_cli-1.2.0/tests/test_passing_fixes.py +259 -0
- novacode_cli-1.2.0/tests/test_paste_placeholders.py +76 -0
- novacode_cli-1.2.0/tests/test_pathless_search_scope.py +66 -0
- novacode_cli-1.2.0/tests/test_phase45.py +435 -0
- novacode_cli-1.2.0/tests/test_phase89.py +204 -0
- novacode_cli-1.2.0/tests/test_pipe_adapter.py +84 -0
- novacode_cli-1.2.0/tests/test_pipe_mode.py +424 -0
- novacode_cli-1.2.0/tests/test_plan_agent_checkpoint.py +45 -0
- novacode_cli-1.2.0/tests/test_plan_approval_options.py +68 -0
- novacode_cli-1.2.0/tests/test_plan_approval_persistence.py +208 -0
- novacode_cli-1.2.0/tests/test_plan_archive.py +170 -0
- novacode_cli-1.2.0/tests/test_plan_auto_scope.py +84 -0
- novacode_cli-1.2.0/tests/test_plan_directory_creation.py +36 -0
- novacode_cli-1.2.0/tests/test_plan_execution.py +100 -0
- novacode_cli-1.2.0/tests/test_plan_lifecycle_regressions.py +293 -0
- novacode_cli-1.2.0/tests/test_plan_mcp_guard.py +285 -0
- novacode_cli-1.2.0/tests/test_plan_middleware.py +120 -0
- novacode_cli-1.2.0/tests/test_plan_paths.py +71 -0
- novacode_cli-1.2.0/tests/test_planner_usage.py +109 -0
- novacode_cli-1.2.0/tests/test_plugin_compatibility.py +1030 -0
- novacode_cli-1.2.0/tests/test_plugins.py +359 -0
- novacode_cli-1.2.0/tests/test_policy_writer.py +61 -0
- novacode_cli-1.2.0/tests/test_portable_daemon_runtime.py +115 -0
- novacode_cli-1.2.0/tests/test_portable_paths_stdlib.py +84 -0
- novacode_cli-1.2.0/tests/test_prime.py +393 -0
- novacode_cli-1.2.0/tests/test_prime_browser.py +215 -0
- novacode_cli-1.2.0/tests/test_prime_records.py +538 -0
- novacode_cli-1.2.0/tests/test_prime_ui.py +286 -0
- novacode_cli-1.2.0/tests/test_process_runtime.py +250 -0
- novacode_cli-1.2.0/tests/test_project_memory.py +74 -0
- novacode_cli-1.2.0/tests/test_project_onboard.py +330 -0
- novacode_cli-1.2.0/tests/test_project_rooms.py +868 -0
- novacode_cli-1.2.0/tests/test_project_root.py +157 -0
- novacode_cli-1.2.0/tests/test_project_session_picker.py +38 -0
- novacode_cli-1.2.0/tests/test_prompt_contracts.py +131 -0
- novacode_cli-1.2.0/tests/test_prompt_injection_guardrails.py +373 -0
- novacode_cli-1.2.0/tests/test_provider_accounting.py +136 -0
- novacode_cli-1.2.0/tests/test_provider_auth.py +223 -0
- novacode_cli-1.2.0/tests/test_provider_caching.py +299 -0
- novacode_cli-1.2.0/tests/test_provider_catalog.py +556 -0
- novacode_cli-1.2.0/tests/test_provider_effort_wiring.py +166 -0
- novacode_cli-1.2.0/tests/test_provider_errors.py +146 -0
- novacode_cli-1.2.0/tests/test_provider_signin_ui.py +163 -0
- novacode_cli-1.2.0/tests/test_provider_transports.py +132 -0
- novacode_cli-1.2.0/tests/test_provider_usage.py +127 -0
- novacode_cli-1.2.0/tests/test_python_kernel_tool.py +223 -0
- novacode_cli-1.2.0/tests/test_queue_and_redirect.py +141 -0
- novacode_cli-1.2.0/tests/test_quickjs_compat.py +19 -0
- novacode_cli-1.2.0/tests/test_ralph_progress.py +65 -0
- novacode_cli-1.2.0/tests/test_ralph_smart_loop.py +92 -0
- novacode_cli-1.2.0/tests/test_ralph_ui.py +302 -0
- novacode_cli-1.2.0/tests/test_reasoning_content.py +202 -0
- novacode_cli-1.2.0/tests/test_reasoning_scroll.py +159 -0
- novacode_cli-1.2.0/tests/test_reasoning_settings.py +127 -0
- novacode_cli-1.2.0/tests/test_reasoning_visibility.py +189 -0
- novacode_cli-1.2.0/tests/test_rebuild_keeps_backend.py +92 -0
- novacode_cli-1.2.0/tests/test_recent_plans.py +72 -0
- novacode_cli-1.2.0/tests/test_recovery.py +209 -0
- novacode_cli-1.2.0/tests/test_recovery_archives.py +249 -0
- novacode_cli-1.2.0/tests/test_reference_pin_background_ui.py +167 -0
- novacode_cli-1.2.0/tests/test_reference_screens.py +173 -0
- novacode_cli-1.2.0/tests/test_refine_handler.py +100 -0
- novacode_cli-1.2.0/tests/test_refreshing_skills.py +112 -0
- novacode_cli-1.2.0/tests/test_release_version.py +50 -0
- novacode_cli-1.2.0/tests/test_remember_approvals.py +79 -0
- novacode_cli-1.2.0/tests/test_remote_approval_processor.py +286 -0
- novacode_cli-1.2.0/tests/test_remote_approval_transport.py +377 -0
- novacode_cli-1.2.0/tests/test_remote_approval_tui.py +382 -0
- novacode_cli-1.2.0/tests/test_remote_approval_worker.py +121 -0
- novacode_cli-1.2.0/tests/test_remote_approvals.py +411 -0
- novacode_cli-1.2.0/tests/test_remote_commands.py +251 -0
- novacode_cli-1.2.0/tests/test_remote_cron.py +155 -0
- novacode_cli-1.2.0/tests/test_remote_image_display.py +79 -0
- novacode_cli-1.2.0/tests/test_remote_launch_approval.py +588 -0
- novacode_cli-1.2.0/tests/test_remote_question.py +136 -0
- novacode_cli-1.2.0/tests/test_remote_session_resume.py +297 -0
- novacode_cli-1.2.0/tests/test_remote_sessions.py +184 -0
- novacode_cli-1.2.0/tests/test_remote_start_approval.py +126 -0
- novacode_cli-1.2.0/tests/test_remote_status.py +298 -0
- novacode_cli-1.2.0/tests/test_remote_stop.py +122 -0
- novacode_cli-1.2.0/tests/test_remote_streaming.py +616 -0
- novacode_cli-1.2.0/tests/test_remote_tool_digest.py +37 -0
- novacode_cli-1.2.0/tests/test_remote_voice_notes.py +250 -0
- novacode_cli-1.2.0/tests/test_repl_context_pressure.py +207 -0
- novacode_cli-1.2.0/tests/test_request_snapshot.py +89 -0
- novacode_cli-1.2.0/tests/test_research_subagents.py +68 -0
- novacode_cli-1.2.0/tests/test_research_swarm_roster.py +110 -0
- novacode_cli-1.2.0/tests/test_resource_efficiency.py +312 -0
- novacode_cli-1.2.0/tests/test_restored_context.py +109 -0
- novacode_cli-1.2.0/tests/test_resume_history.py +109 -0
- novacode_cli-1.2.0/tests/test_resume_picker_design.py +171 -0
- novacode_cli-1.2.0/tests/test_review_gateway_models.py +149 -0
- novacode_cli-1.2.0/tests/test_review_task_end.py +230 -0
- novacode_cli-1.2.0/tests/test_rewind.py +128 -0
- novacode_cli-1.2.0/tests/test_role_models.py +180 -0
- novacode_cli-1.2.0/tests/test_rootapp_remote.py +327 -0
- novacode_cli-1.2.0/tests/test_rootapp_ui.py +43 -0
- novacode_cli-1.2.0/tests/test_rule_synthesis.py +67 -0
- novacode_cli-1.2.0/tests/test_runtime_boundary_fixes.py +295 -0
- novacode_cli-1.2.0/tests/test_sandbox_langsmith.py +519 -0
- novacode_cli-1.2.0/tests/test_sandbox_orphan.py +88 -0
- novacode_cli-1.2.0/tests/test_sandbox_provider_regressions.py +91 -0
- novacode_cli-1.2.0/tests/test_sandbox_provision.py +107 -0
- novacode_cli-1.2.0/tests/test_sandbox_registry.py +150 -0
- novacode_cli-1.2.0/tests/test_security_middleware.py +88 -0
- novacode_cli-1.2.0/tests/test_security_paths_audit.py +270 -0
- novacode_cli-1.2.0/tests/test_security_remediation.py +355 -0
- novacode_cli-1.2.0/tests/test_semantic_cache.py +116 -0
- novacode_cli-1.2.0/tests/test_session_agent_tools.py +23 -0
- novacode_cli-1.2.0/tests/test_session_allow.py +61 -0
- novacode_cli-1.2.0/tests/test_session_clear.py +89 -0
- novacode_cli-1.2.0/tests/test_session_crash_recovery.py +172 -0
- novacode_cli-1.2.0/tests/test_session_edges.py +228 -0
- novacode_cli-1.2.0/tests/test_session_gateway.py +67 -0
- novacode_cli-1.2.0/tests/test_session_import.py +454 -0
- novacode_cli-1.2.0/tests/test_session_launch.py +27 -0
- novacode_cli-1.2.0/tests/test_session_lease.py +142 -0
- novacode_cli-1.2.0/tests/test_session_messaging.py +127 -0
- novacode_cli-1.2.0/tests/test_session_model_restore.py +186 -0
- novacode_cli-1.2.0/tests/test_session_plus.py +259 -0
- novacode_cli-1.2.0/tests/test_session_protocol.py +233 -0
- novacode_cli-1.2.0/tests/test_session_provider_restore.py +223 -0
- novacode_cli-1.2.0/tests/test_session_reply_panels.py +161 -0
- novacode_cli-1.2.0/tests/test_session_retention.py +77 -0
- novacode_cli-1.2.0/tests/test_session_rpc.py +113 -0
- novacode_cli-1.2.0/tests/test_session_state_fields.py +94 -0
- novacode_cli-1.2.0/tests/test_session_supervisor.py +479 -0
- novacode_cli-1.2.0/tests/test_session_transcript.py +125 -0
- novacode_cli-1.2.0/tests/test_session_transport.py +122 -0
- novacode_cli-1.2.0/tests/test_session_tree.py +212 -0
- novacode_cli-1.2.0/tests/test_session_worker.py +724 -0
- novacode_cli-1.2.0/tests/test_settings_screen.py +243 -0
- novacode_cli-1.2.0/tests/test_share_handler.py +320 -0
- novacode_cli-1.2.0/tests/test_shared_embeddings.py +264 -0
- novacode_cli-1.2.0/tests/test_shared_state_read.py +66 -0
- novacode_cli-1.2.0/tests/test_shell_dialect_routing.py +91 -0
- novacode_cli-1.2.0/tests/test_shell_jobs.py +232 -0
- novacode_cli-1.2.0/tests/test_shell_middleware.py +49 -0
- novacode_cli-1.2.0/tests/test_shell_nonblocking.py +242 -0
- novacode_cli-1.2.0/tests/test_shell_output.py +64 -0
- novacode_cli-1.2.0/tests/test_shell_output_responsiveness.py +275 -0
- novacode_cli-1.2.0/tests/test_shell_prompts.py +189 -0
- novacode_cli-1.2.0/tests/test_shutdown.py +69 -0
- novacode_cli-1.2.0/tests/test_side_commands_goal.py +36 -0
- novacode_cli-1.2.0/tests/test_skill_creation_contract.py +216 -0
- novacode_cli-1.2.0/tests/test_skill_executable.py +167 -0
- novacode_cli-1.2.0/tests/test_skill_invoke.py +99 -0
- novacode_cli-1.2.0/tests/test_skill_libraries_and_resolvers.py +345 -0
- novacode_cli-1.2.0/tests/test_skill_manage_tool.py +238 -0
- novacode_cli-1.2.0/tests/test_skill_retrieval.py +235 -0
- novacode_cli-1.2.0/tests/test_skill_selection.py +311 -0
- novacode_cli-1.2.0/tests/test_skill_usage_policy.py +85 -0
- novacode_cli-1.2.0/tests/test_skill_versioning.py +166 -0
- novacode_cli-1.2.0/tests/test_skills_controls.py +55 -0
- novacode_cli-1.2.0/tests/test_skills_curation.py +173 -0
- novacode_cli-1.2.0/tests/test_skills_prune.py +356 -0
- novacode_cli-1.2.0/tests/test_skills_runtime.py +429 -0
- novacode_cli-1.2.0/tests/test_skills_upstream.py +132 -0
- novacode_cli-1.2.0/tests/test_startup_and_search_perf.py +208 -0
- novacode_cli-1.2.0/tests/test_startup_version_scan.py +92 -0
- novacode_cli-1.2.0/tests/test_status_phrases.py +71 -0
- novacode_cli-1.2.0/tests/test_statusline_controls.py +187 -0
- novacode_cli-1.2.0/tests/test_steering.py +193 -0
- novacode_cli-1.2.0/tests/test_store_memory.py +167 -0
- novacode_cli-1.2.0/tests/test_strict_tools.py +241 -0
- novacode_cli-1.2.0/tests/test_subagent_hitl.py +82 -0
- novacode_cli-1.2.0/tests/test_subagent_model_roles.py +188 -0
- novacode_cli-1.2.0/tests/test_subagent_registration.py +32 -0
- novacode_cli-1.2.0/tests/test_subagent_resilience.py +282 -0
- novacode_cli-1.2.0/tests/test_subagent_tasks.py +422 -0
- novacode_cli-1.2.0/tests/test_subagent_tracking.py +31 -0
- novacode_cli-1.2.0/tests/test_summarization_profile.py +72 -0
- novacode_cli-1.2.0/tests/test_tab_mentions.py +137 -0
- novacode_cli-1.2.0/tests/test_tab_performance.py +272 -0
- novacode_cli-1.2.0/tests/test_tab_resume.py +225 -0
- novacode_cli-1.2.0/tests/test_tab_tasks.py +183 -0
- novacode_cli-1.2.0/tests/test_task_discipline.py +540 -0
- novacode_cli-1.2.0/tests/test_task_progress_compaction.py +216 -0
- novacode_cli-1.2.0/tests/test_team_accounting.py +49 -0
- novacode_cli-1.2.0/tests/test_team_approvals.py +263 -0
- novacode_cli-1.2.0/tests/test_team_container.py +57 -0
- novacode_cli-1.2.0/tests/test_team_inprocess.py +422 -0
- novacode_cli-1.2.0/tests/test_team_legacy.py +38 -0
- novacode_cli-1.2.0/tests/test_team_lifecycle.py +74 -0
- novacode_cli-1.2.0/tests/test_team_output.py +52 -0
- novacode_cli-1.2.0/tests/test_team_process.py +217 -0
- novacode_cli-1.2.0/tests/test_team_properties.py +43 -0
- novacode_cli-1.2.0/tests/test_team_recovery.py +41 -0
- novacode_cli-1.2.0/tests/test_team_runtime.py +122 -0
- novacode_cli-1.2.0/tests/test_team_store.py +119 -0
- novacode_cli-1.2.0/tests/test_team_swarm.py +88 -0
- novacode_cli-1.2.0/tests/test_team_update_handoff.py +214 -0
- novacode_cli-1.2.0/tests/test_team_workspace.py +229 -0
- novacode_cli-1.2.0/tests/test_team_worktree.py +80 -0
- novacode_cli-1.2.0/tests/test_teammate_computer.py +166 -0
- novacode_cli-1.2.0/tests/test_teammate_registry.py +330 -0
- novacode_cli-1.2.0/tests/test_teammate_updates.py +199 -0
- novacode_cli-1.2.0/tests/test_teammates.py +717 -0
- novacode_cli-1.2.0/tests/test_teammates_ui.py +396 -0
- novacode_cli-1.2.0/tests/test_telegram_approval_buttons.py +172 -0
- novacode_cli-1.2.0/tests/test_telegram_command_menu.py +134 -0
- novacode_cli-1.2.0/tests/test_telegram_format.py +109 -0
- novacode_cli-1.2.0/tests/test_telegram_hub.py +140 -0
- novacode_cli-1.2.0/tests/test_telegram_images.py +227 -0
- novacode_cli-1.2.0/tests/test_telegram_session_topics.py +497 -0
- novacode_cli-1.2.0/tests/test_telegram_voice.py +294 -0
- novacode_cli-1.2.0/tests/test_test_gaming.py +106 -0
- novacode_cli-1.2.0/tests/test_text_repetition_guard.py +203 -0
- novacode_cli-1.2.0/tests/test_text_selection.py +83 -0
- novacode_cli-1.2.0/tests/test_theme_markdown.py +354 -0
- novacode_cli-1.2.0/tests/test_theme_readability.py +107 -0
- novacode_cli-1.2.0/tests/test_token_efficiency.py +340 -0
- novacode_cli-1.2.0/tests/test_tool_call_repair.py +349 -0
- novacode_cli-1.2.0/tests/test_tool_definition_accounting.py +167 -0
- novacode_cli-1.2.0/tests/test_tool_result_offload_vs_truncation.py +115 -0
- novacode_cli-1.2.0/tests/test_tool_search.py +460 -0
- novacode_cli-1.2.0/tests/test_tool_search_safety.py +359 -0
- novacode_cli-1.2.0/tests/test_tool_search_variants.py +117 -0
- novacode_cli-1.2.0/tests/test_tool_verdict_flag.py +162 -0
- novacode_cli-1.2.0/tests/test_tool_verdicts.py +829 -0
- novacode_cli-1.2.0/tests/test_transcript_journal.py +107 -0
- novacode_cli-1.2.0/tests/test_transcript_restyle.py +41 -0
- novacode_cli-1.2.0/tests/test_trello_remote.py +333 -0
- novacode_cli-1.2.0/tests/test_trello_server.py +275 -0
- novacode_cli-1.2.0/tests/test_tui_agent_server_command.py +157 -0
- novacode_cli-1.2.0/tests/test_tui_animation_rate.py +111 -0
- novacode_cli-1.2.0/tests/test_tui_app.py +5731 -0
- novacode_cli-1.2.0/tests/test_tui_banner_sizes.py +31 -0
- novacode_cli-1.2.0/tests/test_tui_cancel.py +349 -0
- novacode_cli-1.2.0/tests/test_tui_classic_design.py +206 -0
- novacode_cli-1.2.0/tests/test_tui_compaction_row.py +47 -0
- novacode_cli-1.2.0/tests/test_tui_crash_autosave.py +94 -0
- novacode_cli-1.2.0/tests/test_tui_exit_immediate.py +121 -0
- novacode_cli-1.2.0/tests/test_tui_help_coverage.py +40 -0
- novacode_cli-1.2.0/tests/test_tui_home_dashboard.py +45 -0
- novacode_cli-1.2.0/tests/test_tui_home_preferences.py +506 -0
- novacode_cli-1.2.0/tests/test_tui_icons.py +103 -0
- novacode_cli-1.2.0/tests/test_tui_long_run.py +121 -0
- novacode_cli-1.2.0/tests/test_tui_no_blocking_io.py +150 -0
- novacode_cli-1.2.0/tests/test_tui_no_layout_storm.py +328 -0
- novacode_cli-1.2.0/tests/test_tui_notices.py +129 -0
- novacode_cli-1.2.0/tests/test_tui_onboard_progress.py +63 -0
- novacode_cli-1.2.0/tests/test_tui_output_log.py +138 -0
- novacode_cli-1.2.0/tests/test_tui_pickers.py +212 -0
- novacode_cli-1.2.0/tests/test_tui_question_dock.py +453 -0
- novacode_cli-1.2.0/tests/test_tui_remember.py +48 -0
- novacode_cli-1.2.0/tests/test_tui_remote_subcommands.py +96 -0
- novacode_cli-1.2.0/tests/test_tui_replay_layouts.py +84 -0
- novacode_cli-1.2.0/tests/test_tui_resume_model.py +311 -0
- novacode_cli-1.2.0/tests/test_tui_sessions.py +1339 -0
- novacode_cli-1.2.0/tests/test_tui_subagent_panel.py +333 -0
- novacode_cli-1.2.0/tests/test_tui_terminal_title.py +93 -0
- novacode_cli-1.2.0/tests/test_tui_terminal_view.py +162 -0
- novacode_cli-1.2.0/tests/test_tui_test_output.py +35 -0
- novacode_cli-1.2.0/tests/test_tui_trace_command.py +147 -0
- novacode_cli-1.2.0/tests/test_tui_update_release.py +71 -0
- novacode_cli-1.2.0/tests/test_tui_voice_downloads.py +192 -0
- novacode_cli-1.2.0/tests/test_tui_voice_output.py +82 -0
- novacode_cli-1.2.0/tests/test_tui_windows_input.py +113 -0
- novacode_cli-1.2.0/tests/test_ui_harness.py +115 -0
- novacode_cli-1.2.0/tests/test_unified_code_mode.py +984 -0
- novacode_cli-1.2.0/tests/test_update_release.py +88 -0
- novacode_cli-1.2.0/tests/test_update_restart.py +169 -0
- novacode_cli-1.2.0/tests/test_update_success_screen.py +132 -0
- novacode_cli-1.2.0/tests/test_updates.py +375 -0
- novacode_cli-1.2.0/tests/test_usage_lifecycle.py +208 -0
- novacode_cli-1.2.0/tests/test_usage_tree.py +344 -0
- novacode_cli-1.2.0/tests/test_user_async_agents.py +550 -0
- novacode_cli-1.2.0/tests/test_user_config_guard.py +18 -0
- novacode_cli-1.2.0/tests/test_verdict_tool_uses_edit.py +301 -0
- novacode_cli-1.2.0/tests/test_verification_loop.py +69 -0
- novacode_cli-1.2.0/tests/test_verification_memory.py +88 -0
- novacode_cli-1.2.0/tests/test_verification_signal.py +106 -0
- novacode_cli-1.2.0/tests/test_vision_caption_wiring.py +130 -0
- novacode_cli-1.2.0/tests/test_vision_multimodal_routing.py +179 -0
- novacode_cli-1.2.0/tests/test_vision_router.py +580 -0
- novacode_cli-1.2.0/tests/test_voice_catalog.py +106 -0
- novacode_cli-1.2.0/tests/test_voice_credentials.py +179 -0
- novacode_cli-1.2.0/tests/test_waiter_tools.py +429 -0
- novacode_cli-1.2.0/tests/test_web_workspace_browser.py +435 -0
- novacode_cli-1.2.0/tests/test_web_workspace_ui.py +60 -0
- novacode_cli-1.2.0/tests/test_webhook_server.py +195 -0
- novacode_cli-1.2.0/tests/test_windows_qemu.py +373 -0
- novacode_cli-1.2.0/tests/test_workdir_backend.py +169 -0
- novacode_cli-1.2.0/tests/test_workdir_backend_no_python3.py +240 -0
- novacode_cli-1.2.0/tests/test_workdir_grep.py +125 -0
- novacode_cli-1.2.0/tests/test_workspace_approval.py +192 -0
- novacode_cli-1.2.0/tests/test_worktree.py +343 -0
- novacode_cli-1.2.0/tests/test_worktree_tools.py +278 -0
- novacode_cli-1.2.0/tests/test_write_file_content_patch.py +46 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Harrison Chase
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: novacode-cli
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: Agentic Coding Tool that runs in your terminal
|
|
5
|
+
Author-email: Babitdor <babitdorbryan14@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/Babitdor/NovaCode
|
|
8
|
+
Project-URL: Repository, https://github.com/Babitdor/NovaCode
|
|
9
|
+
Project-URL: Issues, https://github.com/Babitdor/NovaCode/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/Babitdor/NovaCode/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: nova,code-cli,nova-code,agentic-code-cli
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Requires-Python: <4.0,>=3.11
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: requests
|
|
21
|
+
Requires-Dist: certifi>=2026.10.19
|
|
22
|
+
Requires-Dist: brotli>=1.2.1
|
|
23
|
+
Requires-Dist: jinja2>=3.1.0
|
|
24
|
+
Requires-Dist: rich>=13.0.0
|
|
25
|
+
Requires-Dist: textual>=1.0.0
|
|
26
|
+
Requires-Dist: psutil>=5.9
|
|
27
|
+
Requires-Dist: pyte<0.9,>=0.8.2
|
|
28
|
+
Requires-Dist: pywinpty<3,>=2.0.15; sys_platform == "win32"
|
|
29
|
+
Requires-Dist: langchain>=1.2.13
|
|
30
|
+
Requires-Dist: langchain-core>=1.2.22
|
|
31
|
+
Requires-Dist: langchain-openai>=1.0.0
|
|
32
|
+
Requires-Dist: langchain-anthropic>=1.4.0
|
|
33
|
+
Requires-Dist: langchain-ollama>=1.0.1
|
|
34
|
+
Requires-Dist: langchain-google-genai>=4.2.1
|
|
35
|
+
Requires-Dist: google-auth>=2.40
|
|
36
|
+
Requires-Dist: google-auth-oauthlib>=1.2.2
|
|
37
|
+
Requires-Dist: langchain-nvidia-ai-endpoints>=1.4.1
|
|
38
|
+
Requires-Dist: langchain-mcp-adapters>=0.2.2
|
|
39
|
+
Requires-Dist: langgraph>=1.1.3
|
|
40
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=2.0.0
|
|
41
|
+
Requires-Dist: langsmith>=0.7.22
|
|
42
|
+
Requires-Dist: tavily-python
|
|
43
|
+
Requires-Dist: deepagents<0.8,>=0.7.0
|
|
44
|
+
Requires-Dist: python-dotenv
|
|
45
|
+
Requires-Dist: daytona>=0.113.0
|
|
46
|
+
Requires-Dist: modal>=0.65.0
|
|
47
|
+
Requires-Dist: markdownify>=0.13.0
|
|
48
|
+
Requires-Dist: runloop-api-client>=0.69.0
|
|
49
|
+
Requires-Dist: mcp<2,>=1.28.1
|
|
50
|
+
Requires-Dist: docker>=7.0.0
|
|
51
|
+
Requires-Dist: keyring>=24.0.0
|
|
52
|
+
Requires-Dist: pillow>=13.0.0
|
|
53
|
+
Requires-Dist: aiosqlite>=0.19.0
|
|
54
|
+
Requires-Dist: pyyaml>=6.0
|
|
55
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
56
|
+
Requires-Dist: ddgs>=7.0.0
|
|
57
|
+
Requires-Dist: aiohttp>=3.9
|
|
58
|
+
Requires-Dist: httpx>=0.27
|
|
59
|
+
Requires-Dist: PyJWT[crypto]>=2.10
|
|
60
|
+
Requires-Dist: pydantic>=2.0
|
|
61
|
+
Requires-Dist: jsonschema>=4.18
|
|
62
|
+
Requires-Dist: referencing>=0.28.4
|
|
63
|
+
Requires-Dist: regex>=2024.11.6
|
|
64
|
+
Requires-Dist: pymupdf>=1.24
|
|
65
|
+
Requires-Dist: bm25s>=0.2
|
|
66
|
+
Requires-Dist: graphifyy>=0.4.0
|
|
67
|
+
Requires-Dist: semble>=0.1.8
|
|
68
|
+
Requires-Dist: discord.py>=2.3.0
|
|
69
|
+
Requires-Dist: python-telegram-bot>=21.0.0
|
|
70
|
+
Requires-Dist: langchain-quickjs==0.3.2
|
|
71
|
+
Requires-Dist: dill>=0.3.8
|
|
72
|
+
Requires-Dist: langchain-typesafe>=0.0.1a3
|
|
73
|
+
Provides-Extra: browser
|
|
74
|
+
Requires-Dist: browser-use>=0.1.0; extra == "browser"
|
|
75
|
+
Requires-Dist: playwright>=1.40.0; extra == "browser"
|
|
76
|
+
Provides-Extra: voice
|
|
77
|
+
Requires-Dist: faster-whisper>=1.0.0; extra == "voice"
|
|
78
|
+
Requires-Dist: silero-vad>=5.1; extra == "voice"
|
|
79
|
+
Requires-Dist: piper-tts>=1.2.0; extra == "voice"
|
|
80
|
+
Requires-Dist: sounddevice>=0.4.6; extra == "voice"
|
|
81
|
+
Provides-Extra: voice-orpheus
|
|
82
|
+
Requires-Dist: orpheus-cpp==0.0.3; extra == "voice-orpheus"
|
|
83
|
+
Requires-Dist: llama-cpp-python>=0.3.0; extra == "voice-orpheus"
|
|
84
|
+
Provides-Extra: voice-parakeet
|
|
85
|
+
Requires-Dist: sherpa-onnx<2,>=1.10.0; extra == "voice-parakeet"
|
|
86
|
+
Provides-Extra: voice-pocket
|
|
87
|
+
Requires-Dist: pocket-tts>=0.1.0; extra == "voice-pocket"
|
|
88
|
+
Provides-Extra: bedrock
|
|
89
|
+
Requires-Dist: langchain-aws>=1.0.0; extra == "bedrock"
|
|
90
|
+
Provides-Extra: server
|
|
91
|
+
Requires-Dist: fastapi>=0.115.0; extra == "server"
|
|
92
|
+
Requires-Dist: uvicorn>=0.34.0; extra == "server"
|
|
93
|
+
Provides-Extra: agents-server
|
|
94
|
+
Requires-Dist: langgraph-cli[inmem]; extra == "agents-server"
|
|
95
|
+
Provides-Extra: voice-whistle
|
|
96
|
+
Requires-Dist: cactus-needle<4,>=3.2.1; extra == "voice-whistle"
|
|
97
|
+
Provides-Extra: voice-kokoro
|
|
98
|
+
Requires-Dist: kokoro-onnx==0.4.9; extra == "voice-kokoro"
|
|
99
|
+
Provides-Extra: voice-sano
|
|
100
|
+
Requires-Dist: sanotts==0.3.0; extra == "voice-sano"
|
|
101
|
+
Provides-Extra: computer
|
|
102
|
+
Requires-Dist: cua==0.9.0; extra == "computer"
|
|
103
|
+
Dynamic: license-file
|
|
104
|
+
|
|
105
|
+

|
|
106
|
+
|
|
107
|
+
# NovaCode
|
|
108
|
+
|
|
109
|
+
An open-source terminal coding assistant that reads your project, plans changes,
|
|
110
|
+
edits files and runs checks. Choose cloud or local models and keep useful project
|
|
111
|
+
knowledge between sessions.
|
|
112
|
+
|
|
113
|
+
Built with Python, LangGraph, deepagents and Textual. [MIT licensed](LICENSE).
|
|
114
|
+
|
|
115
|
+

|
|
116
|
+
|
|
117
|
+
## Get started
|
|
118
|
+
|
|
119
|
+
Requires **Python 3.11+**, **Git** and **uv**, plus a supported model provider or
|
|
120
|
+
a running Ollama instance with a model installed.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
git clone https://github.com/Babitdor/NovaCode.git
|
|
124
|
+
cd NovaCode
|
|
125
|
+
uv sync
|
|
126
|
+
uv run nova
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
First-run setup guides provider configuration and workspace approval. Hosted
|
|
130
|
+
models may charge for usage. To install a global `nova` command from this checkout,
|
|
131
|
+
run `uv tool install .`, then launch `nova` from your project directory.
|
|
132
|
+
|
|
133
|
+
## What Nova can do
|
|
134
|
+
|
|
135
|
+
- **Code and verify:** investigate projects, edit files, run commands and checks,
|
|
136
|
+
and review changes with workspace and tool approvals.
|
|
137
|
+
- **Plan and delegate:** compare Council proposals, use specialist agents and
|
|
138
|
+
coordinate project tabs with messages and Git worktrees.
|
|
139
|
+
- **Remember:** inspect and maintain a linked Markdown memory wiki, resume
|
|
140
|
+
sessions and recover supported file snapshots.
|
|
141
|
+
- **Choose and extend:** select hosted or local models, configure an independent
|
|
142
|
+
vision model, and add skills, plugins and MCP servers.
|
|
143
|
+
- **Compose tools in Code Mode:** toggle it below the composer to combine
|
|
144
|
+
eligible native and MCP tools in bounded JavaScript workflows.
|
|
145
|
+
- **Speak and listen:** optional speech input and short spoken reply summaries,
|
|
146
|
+
including lightweight CPU voice choices and model download progress.
|
|
147
|
+
- **Make it yours:** choose from 13 interface styles, including character art
|
|
148
|
+
and optional animated home scenes.
|
|
149
|
+
- **Work beyond the terminal:** use remote chats, local web workspaces, temporary
|
|
150
|
+
artifact previews and headless automation.
|
|
151
|
+
|
|
152
|
+
See [FEATURES.md](FEATURES.md) for the full catalog, setup requirements and
|
|
153
|
+
landing-page copy.
|
|
154
|
+
|
|
155
|
+
## Everyday use
|
|
156
|
+
|
|
157
|
+
| Command | Purpose |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| `/help` | Commands and keyboard shortcuts |
|
|
160
|
+
| `/onboard` | Interactive code map, guided tours, architecture guide, Q&A and change impact |
|
|
161
|
+
| `/model`, `/auth` | Models, vision and provider access |
|
|
162
|
+
| `/plan`, `/council <task>` | Investigate changes and compare plans |
|
|
163
|
+
| `/tabs`, `/resume` | Parallel projects and saved sessions |
|
|
164
|
+
| `/dream`, `/context` | Memory maintenance and context inspection |
|
|
165
|
+
| `/settings`, `/theme` | Voice, interface styles and preferences |
|
|
166
|
+
| `/mcp`, `/remote` | External tools and remote chat setup |
|
|
167
|
+
| `/restore` | Recoverable file snapshots |
|
|
168
|
+
|
|
169
|
+
Attach files with `@`; use **Shift+Enter** for a new line. For a one-shot task:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
uv run nova -p "Summarize the changes in this repository"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**New to a project? Start with `/onboard`.** Inspired by
|
|
176
|
+
[Understand Anything](https://github.com/Egonex-AI/Understand-Anything), it parses
|
|
177
|
+
the local workspace with the already installed Graphify language parsers and
|
|
178
|
+
saves a persistent graph and guide in `.nova/onboard/`. The local artifact
|
|
179
|
+
dashboard provides file/symbol search, directory filters, a clickable dependency
|
|
180
|
+
map, a learning tour and incoming dependency impact tracing. It needs no Node
|
|
181
|
+
installation, browser credentials or external dashboard assets.
|
|
182
|
+
|
|
183
|
+
Use `/onboard open` to reopen the dashboard, `/onboard tour` for a conversational
|
|
184
|
+
tour, `/onboard ask <question>` for source-grounded Q&A, and
|
|
185
|
+
`/onboard impact <symbol or path>` before changing code. The dashboard's **Ask
|
|
186
|
+
Nova** tab prepares a command to paste into the conversation. Nova explains the
|
|
187
|
+
architecture and business flows using its normal model and tool permissions;
|
|
188
|
+
the initial deterministic guide contains structural facts only. Reopen the
|
|
189
|
+
dashboard after Nova enriches the guide. Model calls use your configured provider.
|
|
190
|
+
|
|
191
|
+
`/onboard refresh` rebuilds after changes. File-content fingerprints detect
|
|
192
|
+
new, edited and deleted inputs; saved analyses display a staleness notice.
|
|
193
|
+
Scans respect Git ignore rules and skip links, generated directories and common
|
|
194
|
+
secret filenames. Static parsing can miss dynamic dependencies; directory
|
|
195
|
+
groups are not semantic architecture layers. Limits: 5,000 source/Markdown
|
|
196
|
+
files, 1 MiB per file, 64 MiB total input and 32 MiB graph. The parsing deadline
|
|
197
|
+
scales with file count and input size from two to ten minutes; Escape cancels it.
|
|
198
|
+
Refresh replaces generated graph/guide files, so copy edited guides
|
|
199
|
+
elsewhere before rebuilding. This command currently requires a local workspace;
|
|
200
|
+
Plan Mode prevents building or refreshing the saved analysis.
|
|
201
|
+
|
|
202
|
+
## Optional features
|
|
203
|
+
|
|
204
|
+
Install selected extras from this checkout, for example:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
uv sync --extra voice --extra voice-kokoro
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Keep all desired `--extra` flags when syncing. Speech models download on first
|
|
211
|
+
use. See [setup and usage](SETUP.md) for global installation, voice providers,
|
|
212
|
+
browser automation and background-agent requirements.
|
|
213
|
+
|
|
214
|
+
**Local computer preview:** the `computer` extra lets Nova operate a
|
|
215
|
+
separate Linux QEMU VM with a private live browser preview and pause/resume/stop
|
|
216
|
+
controls. Requires QEMU, a guest-image download and 4 GiB RAM for the guest.
|
|
217
|
+
Start with `/computer start`; see [computer setup and limits](COMPUTER.md).
|
|
218
|
+
The Windows WHPX compatibility fix in this checkout has passed a real desktop boot.
|
|
219
|
+
|
|
220
|
+
## Documentation and contributing
|
|
221
|
+
|
|
222
|
+
[Setup and usage](SETUP.md) · [Feature catalog](FEATURES.md) ·
|
|
223
|
+
[Code Mode](docs/mcp-code-mode.md) · [Permissions](docs/security-guardrails.md) ·
|
|
224
|
+
[Sharing](docs/temporary-sharing.md) · [Changelog](changelog/)
|
|
225
|
+
|
|
226
|
+
For development, run `uv sync --group dev` and tests relevant to your change.
|
|
227
|
+
See [project instructions](AGENTS.md) for build and check commands. Report bugs
|
|
228
|
+
or propose changes through repository issues and pull requests.
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
### Compression preferences
|
|
232
|
+
|
|
233
|
+
The composer selector cycles **Off → Caveman → Ponytail → Off**. Options saves
|
|
234
|
+
mode, independent intensities and Caveman feature switches together; Escape discards
|
|
235
|
+
edits. Preferences persist across restarts. Existing Caveman settings migrate automatically.
|
|
236
|
+
Mode changes use temporary notifications and never submit your draft.
|
|
237
|
+
|
|
238
|
+
- `/caveman on|off|lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra`
|
|
239
|
+
- `/ponytail` activates Ponytail without resetting its selected intensity.
|
|
240
|
+
- `/ponytail lite|full|ultra|off|settings|status`
|
|
241
|
+
- `/ponytail-review [scope]`, `/ponytail-audit [scope]`, `/ponytail-debt [scope]`,
|
|
242
|
+
`/ponytail-gain`, `/ponytail-help` run the corresponding one-shot helper without
|
|
243
|
+
changing the selected mode. Review and audit request reports, not edits.
|
|
244
|
+
- A standalone `stop ponytail` or `normal mode` disables Ponytail. Those phrases
|
|
245
|
+
inside an ordinary task do not change preferences.
|
|
246
|
+
|
|
247
|
+
Caveman compresses prose and optionally tool views. Ponytail applies the upstream
|
|
248
|
+
coding rules: solve the complete problem with the least new code, preserve necessary
|
|
249
|
+
checks, and name skipped work and risks. Ponytail leaves tool results intact and
|
|
250
|
+
also applies to delegated model requests. Neither mode changes tool permissions.
|
|
251
|
+
Savings depend on the task and model; shorter output is not guaranteed.
|
|
252
|
+
|
|
253
|
+
Ponytail's MIT-licensed skill bodies and JavaScript instruction builder are vendored
|
|
254
|
+
from [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) at
|
|
255
|
+
`09c434ab73ca43761c5d8b0c5d341926c2fba710`. Nova's Python builder is checked
|
|
256
|
+
against golden hashes from that JavaScript builder. Nova owns the persistent selector;
|
|
257
|
+
upstream Claude-specific band, board, install hooks and default-mode files are not used.
|
|
258
|
+
There is no Node runtime requirement.
|
|
259
|
+
|
|
260
|
+
To validate every compression intensity against your configured LLM (20 paid/provider
|
|
261
|
+
calls, concurrency two, 60-second timeout each), run:
|
|
262
|
+
|
|
263
|
+
```sh
|
|
264
|
+
uv run python -m scripts.verify_compression_live
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
This opt-in check preserves exact failure facts/commands and validates generated
|
|
268
|
+
Python on boundary and invalid-bound cases. It writes synthetic outputs and reported
|
|
269
|
+
usage (or `unknown`) to `test-results/compression-live.json`, without changing your
|
|
270
|
+
preferences. Offline tests never call an LLM. Golden parity proves prompt equivalence;
|
|
271
|
+
it cannot guarantee identical stochastic model responses.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# NovaCode
|
|
4
|
+
|
|
5
|
+
An open-source terminal coding assistant that reads your project, plans changes,
|
|
6
|
+
edits files and runs checks. Choose cloud or local models and keep useful project
|
|
7
|
+
knowledge between sessions.
|
|
8
|
+
|
|
9
|
+
Built with Python, LangGraph, deepagents and Textual. [MIT licensed](LICENSE).
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Get started
|
|
14
|
+
|
|
15
|
+
Requires **Python 3.11+**, **Git** and **uv**, plus a supported model provider or
|
|
16
|
+
a running Ollama instance with a model installed.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git clone https://github.com/Babitdor/NovaCode.git
|
|
20
|
+
cd NovaCode
|
|
21
|
+
uv sync
|
|
22
|
+
uv run nova
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
First-run setup guides provider configuration and workspace approval. Hosted
|
|
26
|
+
models may charge for usage. To install a global `nova` command from this checkout,
|
|
27
|
+
run `uv tool install .`, then launch `nova` from your project directory.
|
|
28
|
+
|
|
29
|
+
## What Nova can do
|
|
30
|
+
|
|
31
|
+
- **Code and verify:** investigate projects, edit files, run commands and checks,
|
|
32
|
+
and review changes with workspace and tool approvals.
|
|
33
|
+
- **Plan and delegate:** compare Council proposals, use specialist agents and
|
|
34
|
+
coordinate project tabs with messages and Git worktrees.
|
|
35
|
+
- **Remember:** inspect and maintain a linked Markdown memory wiki, resume
|
|
36
|
+
sessions and recover supported file snapshots.
|
|
37
|
+
- **Choose and extend:** select hosted or local models, configure an independent
|
|
38
|
+
vision model, and add skills, plugins and MCP servers.
|
|
39
|
+
- **Compose tools in Code Mode:** toggle it below the composer to combine
|
|
40
|
+
eligible native and MCP tools in bounded JavaScript workflows.
|
|
41
|
+
- **Speak and listen:** optional speech input and short spoken reply summaries,
|
|
42
|
+
including lightweight CPU voice choices and model download progress.
|
|
43
|
+
- **Make it yours:** choose from 13 interface styles, including character art
|
|
44
|
+
and optional animated home scenes.
|
|
45
|
+
- **Work beyond the terminal:** use remote chats, local web workspaces, temporary
|
|
46
|
+
artifact previews and headless automation.
|
|
47
|
+
|
|
48
|
+
See [FEATURES.md](FEATURES.md) for the full catalog, setup requirements and
|
|
49
|
+
landing-page copy.
|
|
50
|
+
|
|
51
|
+
## Everyday use
|
|
52
|
+
|
|
53
|
+
| Command | Purpose |
|
|
54
|
+
| --- | --- |
|
|
55
|
+
| `/help` | Commands and keyboard shortcuts |
|
|
56
|
+
| `/onboard` | Interactive code map, guided tours, architecture guide, Q&A and change impact |
|
|
57
|
+
| `/model`, `/auth` | Models, vision and provider access |
|
|
58
|
+
| `/plan`, `/council <task>` | Investigate changes and compare plans |
|
|
59
|
+
| `/tabs`, `/resume` | Parallel projects and saved sessions |
|
|
60
|
+
| `/dream`, `/context` | Memory maintenance and context inspection |
|
|
61
|
+
| `/settings`, `/theme` | Voice, interface styles and preferences |
|
|
62
|
+
| `/mcp`, `/remote` | External tools and remote chat setup |
|
|
63
|
+
| `/restore` | Recoverable file snapshots |
|
|
64
|
+
|
|
65
|
+
Attach files with `@`; use **Shift+Enter** for a new line. For a one-shot task:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uv run nova -p "Summarize the changes in this repository"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**New to a project? Start with `/onboard`.** Inspired by
|
|
72
|
+
[Understand Anything](https://github.com/Egonex-AI/Understand-Anything), it parses
|
|
73
|
+
the local workspace with the already installed Graphify language parsers and
|
|
74
|
+
saves a persistent graph and guide in `.nova/onboard/`. The local artifact
|
|
75
|
+
dashboard provides file/symbol search, directory filters, a clickable dependency
|
|
76
|
+
map, a learning tour and incoming dependency impact tracing. It needs no Node
|
|
77
|
+
installation, browser credentials or external dashboard assets.
|
|
78
|
+
|
|
79
|
+
Use `/onboard open` to reopen the dashboard, `/onboard tour` for a conversational
|
|
80
|
+
tour, `/onboard ask <question>` for source-grounded Q&A, and
|
|
81
|
+
`/onboard impact <symbol or path>` before changing code. The dashboard's **Ask
|
|
82
|
+
Nova** tab prepares a command to paste into the conversation. Nova explains the
|
|
83
|
+
architecture and business flows using its normal model and tool permissions;
|
|
84
|
+
the initial deterministic guide contains structural facts only. Reopen the
|
|
85
|
+
dashboard after Nova enriches the guide. Model calls use your configured provider.
|
|
86
|
+
|
|
87
|
+
`/onboard refresh` rebuilds after changes. File-content fingerprints detect
|
|
88
|
+
new, edited and deleted inputs; saved analyses display a staleness notice.
|
|
89
|
+
Scans respect Git ignore rules and skip links, generated directories and common
|
|
90
|
+
secret filenames. Static parsing can miss dynamic dependencies; directory
|
|
91
|
+
groups are not semantic architecture layers. Limits: 5,000 source/Markdown
|
|
92
|
+
files, 1 MiB per file, 64 MiB total input and 32 MiB graph. The parsing deadline
|
|
93
|
+
scales with file count and input size from two to ten minutes; Escape cancels it.
|
|
94
|
+
Refresh replaces generated graph/guide files, so copy edited guides
|
|
95
|
+
elsewhere before rebuilding. This command currently requires a local workspace;
|
|
96
|
+
Plan Mode prevents building or refreshing the saved analysis.
|
|
97
|
+
|
|
98
|
+
## Optional features
|
|
99
|
+
|
|
100
|
+
Install selected extras from this checkout, for example:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv sync --extra voice --extra voice-kokoro
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Keep all desired `--extra` flags when syncing. Speech models download on first
|
|
107
|
+
use. See [setup and usage](SETUP.md) for global installation, voice providers,
|
|
108
|
+
browser automation and background-agent requirements.
|
|
109
|
+
|
|
110
|
+
**Local computer preview:** the `computer` extra lets Nova operate a
|
|
111
|
+
separate Linux QEMU VM with a private live browser preview and pause/resume/stop
|
|
112
|
+
controls. Requires QEMU, a guest-image download and 4 GiB RAM for the guest.
|
|
113
|
+
Start with `/computer start`; see [computer setup and limits](COMPUTER.md).
|
|
114
|
+
The Windows WHPX compatibility fix in this checkout has passed a real desktop boot.
|
|
115
|
+
|
|
116
|
+
## Documentation and contributing
|
|
117
|
+
|
|
118
|
+
[Setup and usage](SETUP.md) · [Feature catalog](FEATURES.md) ·
|
|
119
|
+
[Code Mode](docs/mcp-code-mode.md) · [Permissions](docs/security-guardrails.md) ·
|
|
120
|
+
[Sharing](docs/temporary-sharing.md) · [Changelog](changelog/)
|
|
121
|
+
|
|
122
|
+
For development, run `uv sync --group dev` and tests relevant to your change.
|
|
123
|
+
See [project instructions](AGENTS.md) for build and check commands. Report bugs
|
|
124
|
+
or propose changes through repository issues and pull requests.
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
### Compression preferences
|
|
128
|
+
|
|
129
|
+
The composer selector cycles **Off → Caveman → Ponytail → Off**. Options saves
|
|
130
|
+
mode, independent intensities and Caveman feature switches together; Escape discards
|
|
131
|
+
edits. Preferences persist across restarts. Existing Caveman settings migrate automatically.
|
|
132
|
+
Mode changes use temporary notifications and never submit your draft.
|
|
133
|
+
|
|
134
|
+
- `/caveman on|off|lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra`
|
|
135
|
+
- `/ponytail` activates Ponytail without resetting its selected intensity.
|
|
136
|
+
- `/ponytail lite|full|ultra|off|settings|status`
|
|
137
|
+
- `/ponytail-review [scope]`, `/ponytail-audit [scope]`, `/ponytail-debt [scope]`,
|
|
138
|
+
`/ponytail-gain`, `/ponytail-help` run the corresponding one-shot helper without
|
|
139
|
+
changing the selected mode. Review and audit request reports, not edits.
|
|
140
|
+
- A standalone `stop ponytail` or `normal mode` disables Ponytail. Those phrases
|
|
141
|
+
inside an ordinary task do not change preferences.
|
|
142
|
+
|
|
143
|
+
Caveman compresses prose and optionally tool views. Ponytail applies the upstream
|
|
144
|
+
coding rules: solve the complete problem with the least new code, preserve necessary
|
|
145
|
+
checks, and name skipped work and risks. Ponytail leaves tool results intact and
|
|
146
|
+
also applies to delegated model requests. Neither mode changes tool permissions.
|
|
147
|
+
Savings depend on the task and model; shorter output is not guaranteed.
|
|
148
|
+
|
|
149
|
+
Ponytail's MIT-licensed skill bodies and JavaScript instruction builder are vendored
|
|
150
|
+
from [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) at
|
|
151
|
+
`09c434ab73ca43761c5d8b0c5d341926c2fba710`. Nova's Python builder is checked
|
|
152
|
+
against golden hashes from that JavaScript builder. Nova owns the persistent selector;
|
|
153
|
+
upstream Claude-specific band, board, install hooks and default-mode files are not used.
|
|
154
|
+
There is no Node runtime requirement.
|
|
155
|
+
|
|
156
|
+
To validate every compression intensity against your configured LLM (20 paid/provider
|
|
157
|
+
calls, concurrency two, 60-second timeout each), run:
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
uv run python -m scripts.verify_compression_live
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
This opt-in check preserves exact failure facts/commands and validates generated
|
|
164
|
+
Python on boundary and invalid-bound cases. It writes synthetic outputs and reported
|
|
165
|
+
usage (or `unknown`) to `test-results/compression-live.json`, without changing your
|
|
166
|
+
preferences. Offline tests never call an LLM. Golden parity proves prompt equivalence;
|
|
167
|
+
it cannot guarantee identical stochastic model responses.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""NOVA CLI - Interactive AI coding assistant."""
|
|
2
|
+
|
|
3
|
+
import os as _os
|
|
4
|
+
|
|
5
|
+
# Must run before numpy is imported anywhere in the process. numpy's OpenBLAS
|
|
6
|
+
# pre-allocates a buffer per CPU thread at import: on a 12-thread machine that
|
|
7
|
+
# is ~380 MB of private memory for nothing — Nova's numeric work is small
|
|
8
|
+
# vector searches (skill and code retrieval over a few thousand 256-d rows),
|
|
9
|
+
# where one thread is measurably FASTER (91 us vs 180 us for a 1000-row
|
|
10
|
+
# search) because thread hand-off costs more than the arithmetic. One thread:
|
|
11
|
+
# ~9 MB. It applies to every Nova process — the TUI and each spawned session.
|
|
12
|
+
# setdefault, so an explicit setting in the environment still wins.
|
|
13
|
+
_os.environ.setdefault("OPENBLAS_NUM_THREADS", "1")
|
|
14
|
+
# Other numerical backends also default to machine-wide thread pools. Multiple
|
|
15
|
+
# Nova processes should not each occupy every core; explicit user values win.
|
|
16
|
+
_os.environ.setdefault("OMP_NUM_THREADS", "1")
|
|
17
|
+
_os.environ.setdefault("MKL_NUM_THREADS", "1")
|
|
18
|
+
_os.environ.setdefault("NUMEXPR_NUM_THREADS", "1")
|
|
19
|
+
|
|
20
|
+
# Must run before langchain_core is imported: it pulls in `transformers` (and
|
|
21
|
+
# therefore torch/numpy/PIL) at module scope for a fallback tokenizer Nova never
|
|
22
|
+
# uses, costing ~160 MB RSS and ~10 s of startup. See novacode_cli._lazy_heavy.
|
|
23
|
+
from novacode_cli import _lazy_heavy as _lazy_heavy
|
|
24
|
+
|
|
25
|
+
_lazy_heavy.install()
|
|
26
|
+
|
|
27
|
+
# from novacode_cli.main import cli_main
|
|
28
|
+
|
|
29
|
+
__all__ = []
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Keep `transformers`/`torch` out of Nova's startup import graph.
|
|
2
|
+
|
|
3
|
+
``langchain_core.language_models.base`` does, at module scope::
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from transformers import GPT2TokenizerFast
|
|
7
|
+
_HAS_TRANSFORMERS = True
|
|
8
|
+
except ImportError:
|
|
9
|
+
_HAS_TRANSFORMERS = False
|
|
10
|
+
|
|
11
|
+
That import is only ever used for a *fallback* GPT-2 token counter
|
|
12
|
+
(``_get_token_ids_default_method``), but ``transformers`` eagerly pulls in
|
|
13
|
+
``torch``, ``numpy``, ``huggingface_hub`` and ``PIL``. Measured on this project:
|
|
14
|
+
|
|
15
|
+
full import of novacode_cli.main 305 MB RSS, ~13 s, 4056 modules
|
|
16
|
+
with transformers/torch excluded 145 MB RSS, ~2.4 s, 3053 modules
|
|
17
|
+
|
|
18
|
+
Nova talks to hosted model APIs and takes token counts from the provider
|
|
19
|
+
(``get_num_tokens_from_messages``, with char-based fallbacks at every call
|
|
20
|
+
site), so it never needs the GPT-2 tokenizer. Paying 160 MB of resident memory
|
|
21
|
+
and ~10 s of startup for it caused real problems on memory-constrained machines
|
|
22
|
+
(paging-file exhaustion, failed subprocess spawns).
|
|
23
|
+
|
|
24
|
+
This installs a meta-path finder that makes ``import transformers`` raise
|
|
25
|
+
``ImportError`` — the exact exception langchain_core already handles — so it
|
|
26
|
+
cleanly takes the ``_HAS_TRANSFORMERS = False`` branch.
|
|
27
|
+
|
|
28
|
+
Escape hatch: set ``NOVA_ALLOW_TRANSFORMERS=1`` to disable the guard. Anything
|
|
29
|
+
that genuinely needs the library (a local HF model, say) can also call
|
|
30
|
+
:func:`allow_transformers` first.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import os
|
|
36
|
+
import sys
|
|
37
|
+
from typing import Any
|
|
38
|
+
|
|
39
|
+
#: Top-level packages kept out of the startup graph.
|
|
40
|
+
_BLOCKED = frozenset({"transformers", "torch"})
|
|
41
|
+
|
|
42
|
+
_ENV_OPT_OUT = "NOVA_ALLOW_TRANSFORMERS"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class _HeavyImportGuard:
|
|
46
|
+
"""Meta-path finder that refuses the heavy optional deps.
|
|
47
|
+
|
|
48
|
+
Raising ``ImportError`` (rather than returning ``None``) is deliberate: the
|
|
49
|
+
consumers of these packages all wrap the import in ``try/except
|
|
50
|
+
ImportError`` and degrade gracefully. Returning ``None`` would just let the
|
|
51
|
+
real finder load them.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
def find_spec(self, name: str, path: Any = None, target: Any = None) -> None: # noqa: ANN401, ARG002
|
|
55
|
+
if name.split(".")[0] in _BLOCKED:
|
|
56
|
+
msg = (
|
|
57
|
+
f"{name!r} is not imported at Nova startup (it costs ~160 MB of "
|
|
58
|
+
f"resident memory and is only needed for a fallback tokenizer). "
|
|
59
|
+
f"Set {_ENV_OPT_OUT}=1 if you really need it."
|
|
60
|
+
)
|
|
61
|
+
raise ImportError(msg)
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
_guard: _HeavyImportGuard | None = None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def install() -> bool:
|
|
69
|
+
"""Install the guard. Returns True if it is now active.
|
|
70
|
+
|
|
71
|
+
No-ops when the user opted out, or when the packages are already imported
|
|
72
|
+
(blocking then would be pointless — the memory is already committed).
|
|
73
|
+
"""
|
|
74
|
+
global _guard
|
|
75
|
+
if os.environ.get(_ENV_OPT_OUT, "").strip().lower() in ("1", "true", "yes"):
|
|
76
|
+
return False
|
|
77
|
+
if _guard is not None:
|
|
78
|
+
return True
|
|
79
|
+
if any(mod in sys.modules for mod in _BLOCKED):
|
|
80
|
+
return False
|
|
81
|
+
_guard = _HeavyImportGuard()
|
|
82
|
+
sys.meta_path.insert(0, _guard)
|
|
83
|
+
return True
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def allow_transformers() -> None:
|
|
87
|
+
"""Remove the guard so ``transformers``/``torch`` can be imported again."""
|
|
88
|
+
global _guard
|
|
89
|
+
if _guard is not None:
|
|
90
|
+
try:
|
|
91
|
+
sys.meta_path.remove(_guard)
|
|
92
|
+
except ValueError:
|
|
93
|
+
pass
|
|
94
|
+
_guard = None
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def is_active() -> bool:
|
|
98
|
+
"""Whether the guard is currently installed."""
|
|
99
|
+
return _guard is not None
|