sliceagent 0.1.4__tar.gz → 0.1.5__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.
- {sliceagent-0.1.4 → sliceagent-0.1.5}/CHANGELOG.md +6 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/PKG-INFO +1 -1
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/__init__.py +1 -1
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/onboarding.py +8 -6
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.dockerignore +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.env.example +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/dependabot.yml +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/workflows/ci.yml +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/workflows/publish.yml +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/.gitignore +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/CODE_OF_CONDUCT.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/CONTRIBUTING.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/Dockerfile +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/LICENSE +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/NOTICE +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/QUICKSTART.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/README.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/SECURITY.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/examples/plugins/hello/__init__.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/examples/plugins/hello/plugin.toml +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/install.sh +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/pyproject.toml +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/scripts/gen_config_reference.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/scripts/run_tests.sh +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/sliceagent.toml.example +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/__main__.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/access.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/agents.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/background_review.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/binsniff.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/cli.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/clock.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/code_grep.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/code_index.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/config.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/context_overflow.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/envspec.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/errors.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/events.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/finding_types.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/flags.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/fuzzy.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/guardrails.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/guidance.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/hippocampus.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/hooks.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/interfaces.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/llm.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/loop.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/mcp_client.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/mcp_security.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/memory.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/metrics.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/model_catalog.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/monitor.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/neocortex.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/oracle.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/pagetable.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/pfc.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/plugins.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/policy.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/procman.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/prompt.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/records.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/recovery.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/regions.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/registry.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/retriever.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/safety.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/sandbox.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/scheduler.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/search_index.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/seed.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/sensory_cortex.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/session.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skill_provenance.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skill_usage.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skills.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/subagent.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/subdir_hints.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/swap.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/taskstate.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/telemetry.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/terminal.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/text_utils.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tool_summary.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tools.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tui.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/web.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/README.md +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_active_focus.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_agents.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ask_echo.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ask_user.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_background_review.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_binary_view.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bound_is_relevance.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_breadth_e2e.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_2b.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_breadth_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_current_request.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_linenum.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_loop_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_memory_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0a.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0b.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0c.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_selfreview.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_selfreview_siblings.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_skills_h1.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_slice_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_subagent_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_tools_wave.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bughunt_fixes.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_cache_manifest.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_checkpoint.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_cli_smoke.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_closure.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_code_grep.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_code_index.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_consolidate.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_context_overflow.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_conversation.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_coresidency.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_echo_before_blocking.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_episode.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_errors_backoff.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_esc_sentinel.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_exec_env.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_finding_types.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_flags.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_fuzzy.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ghost_index.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_guardrails.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_guidance.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_history.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_invariant_fixes.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_live_composer.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_streaming.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_usage_cache.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_watchdog.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_log_redaction.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_loop_overflow.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mcp_output_cap.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mcp_runtime.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_memory.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_memory_persist.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_menu_select.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_metrics.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mining.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mission_tier.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_model_catalog.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_monitor.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_onboarding.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_pageout_compaction.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_permission_patterns.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_pinned_composer.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_plan_tier.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_procman.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_product_features.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_progress_status.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_prompt_ab.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_provenance.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_provider_lineup.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_proxy_interrupt.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_reach.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_readonly_subagent.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_recall_search.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_records.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_refault.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_registry_validation.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_reliability.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_repo_map_bounded.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_requirements.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_review_fixes.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_route_lexical.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_safety.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_seal_markdown.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_search_index.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_skill_meta.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_skill_metadata.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_subdir_hints.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_task_agnostic.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_task_state_roundtrip.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_telemetry_convergence.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_terminal.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tool_dedup.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tool_result_ok.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tools_robust.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_topic_switch.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_trajectory.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_menus.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_render.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_widgets.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_turn_budget.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_verification_agent.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_web.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_workspace.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_world_region.py +0 -0
- {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_world_state.py +0 -0
|
@@ -5,6 +5,12 @@ this project aims for [Semantic Versioning](https://semver.org/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.1.5] — 2026-07-02
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- Wizard step order is now **provider → model → key** ("choose what you want, then prove you can") —
|
|
12
|
+
the key is the last thing typed, so the live test follows it immediately.
|
|
13
|
+
|
|
8
14
|
## [0.1.4] — 2026-07-02
|
|
9
15
|
|
|
10
16
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sliceagent
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.5
|
|
4
4
|
Summary: A coding agent with a new context-engineering framework: bounded, deterministic, reconstructed context (slice architecture) — built for long-horizon work.
|
|
5
5
|
Author: TT-Wang
|
|
6
6
|
License-Expression: MIT
|
|
@@ -261,12 +261,8 @@ def run_init(*, inp=input, getpw=None, llm_factory=None, home=None) -> int:
|
|
|
261
261
|
existing = _read_config(path).get("providers")
|
|
262
262
|
existing = existing.get(pid) if isinstance(existing, dict) else None
|
|
263
263
|
existing = existing if isinstance(existing, dict) else {}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
else " API key (typed as ******): ") if fancy else (
|
|
267
|
-
" API key (hidden, Enter to keep existing): " if existing_key
|
|
268
|
-
else " API key (hidden): ")
|
|
269
|
-
key = (_masked_input(key_prompt, getpw) if fancy else getpw(key_prompt)).strip() or existing_key
|
|
264
|
+
# ORDER (user-decided): provider → MODEL → key. "Choose what you want, then prove you can" —
|
|
265
|
+
# the key is the last thing typed, so the live test follows it immediately.
|
|
270
266
|
picked_model = None
|
|
271
267
|
if fancy:
|
|
272
268
|
cur = existing.get("model") or model
|
|
@@ -283,6 +279,12 @@ def run_init(*, inp=input, getpw=None, llm_factory=None, home=None) -> int:
|
|
|
283
279
|
else:
|
|
284
280
|
model = (inp(f" Model [{existing.get('model') or model or 'required'}]: ").strip()
|
|
285
281
|
or existing.get("model") or model)
|
|
282
|
+
existing_key = existing.get("api_key") or ""
|
|
283
|
+
key_prompt = (" API key (typed as ******, Enter to keep existing): " if existing_key
|
|
284
|
+
else " API key (typed as ******): ") if fancy else (
|
|
285
|
+
" API key (hidden, Enter to keep existing): " if existing_key
|
|
286
|
+
else " API key (hidden): ")
|
|
287
|
+
key = (_masked_input(key_prompt, getpw) if fancy else getpw(key_prompt)).strip() or existing_key
|
|
286
288
|
except (EOFError, KeyboardInterrupt):
|
|
287
289
|
out("\n cancelled."); return 1
|
|
288
290
|
if not key:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|