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.
Files changed (204) hide show
  1. {sliceagent-0.1.4 → sliceagent-0.1.5}/CHANGELOG.md +6 -0
  2. {sliceagent-0.1.4 → sliceagent-0.1.5}/PKG-INFO +1 -1
  3. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/__init__.py +1 -1
  4. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/onboarding.py +8 -6
  5. {sliceagent-0.1.4 → sliceagent-0.1.5}/.dockerignore +0 -0
  6. {sliceagent-0.1.4 → sliceagent-0.1.5}/.env.example +0 -0
  7. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  10. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/dependabot.yml +0 -0
  11. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/workflows/ci.yml +0 -0
  12. {sliceagent-0.1.4 → sliceagent-0.1.5}/.github/workflows/publish.yml +0 -0
  13. {sliceagent-0.1.4 → sliceagent-0.1.5}/.gitignore +0 -0
  14. {sliceagent-0.1.4 → sliceagent-0.1.5}/CODE_OF_CONDUCT.md +0 -0
  15. {sliceagent-0.1.4 → sliceagent-0.1.5}/CONTRIBUTING.md +0 -0
  16. {sliceagent-0.1.4 → sliceagent-0.1.5}/Dockerfile +0 -0
  17. {sliceagent-0.1.4 → sliceagent-0.1.5}/LICENSE +0 -0
  18. {sliceagent-0.1.4 → sliceagent-0.1.5}/NOTICE +0 -0
  19. {sliceagent-0.1.4 → sliceagent-0.1.5}/QUICKSTART.md +0 -0
  20. {sliceagent-0.1.4 → sliceagent-0.1.5}/README.md +0 -0
  21. {sliceagent-0.1.4 → sliceagent-0.1.5}/SECURITY.md +0 -0
  22. {sliceagent-0.1.4 → sliceagent-0.1.5}/examples/plugins/hello/__init__.py +0 -0
  23. {sliceagent-0.1.4 → sliceagent-0.1.5}/examples/plugins/hello/plugin.toml +0 -0
  24. {sliceagent-0.1.4 → sliceagent-0.1.5}/install.sh +0 -0
  25. {sliceagent-0.1.4 → sliceagent-0.1.5}/pyproject.toml +0 -0
  26. {sliceagent-0.1.4 → sliceagent-0.1.5}/scripts/gen_config_reference.py +0 -0
  27. {sliceagent-0.1.4 → sliceagent-0.1.5}/scripts/run_tests.sh +0 -0
  28. {sliceagent-0.1.4 → sliceagent-0.1.5}/sliceagent.toml.example +0 -0
  29. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/__main__.py +0 -0
  30. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/access.py +0 -0
  31. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/agents.py +0 -0
  32. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/background_review.py +0 -0
  33. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/binsniff.py +0 -0
  34. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/cli.py +0 -0
  35. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/clock.py +0 -0
  36. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/code_grep.py +0 -0
  37. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/code_index.py +0 -0
  38. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/config.py +0 -0
  39. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/context_overflow.py +0 -0
  40. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/envspec.py +0 -0
  41. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/errors.py +0 -0
  42. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/events.py +0 -0
  43. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/finding_types.py +0 -0
  44. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/flags.py +0 -0
  45. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/fuzzy.py +0 -0
  46. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/guardrails.py +0 -0
  47. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/guidance.py +0 -0
  48. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/hippocampus.py +0 -0
  49. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/hooks.py +0 -0
  50. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/interfaces.py +0 -0
  51. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/llm.py +0 -0
  52. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/loop.py +0 -0
  53. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/mcp_client.py +0 -0
  54. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/mcp_security.py +0 -0
  55. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/memory.py +0 -0
  56. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/metrics.py +0 -0
  57. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/model_catalog.py +0 -0
  58. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/monitor.py +0 -0
  59. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/neocortex.py +0 -0
  60. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/oracle.py +0 -0
  61. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/pagetable.py +0 -0
  62. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/pfc.py +0 -0
  63. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/plugins.py +0 -0
  64. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/policy.py +0 -0
  65. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/procman.py +0 -0
  66. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/prompt.py +0 -0
  67. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/records.py +0 -0
  68. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/recovery.py +0 -0
  69. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/regions.py +0 -0
  70. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/registry.py +0 -0
  71. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/retriever.py +0 -0
  72. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/safety.py +0 -0
  73. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/sandbox.py +0 -0
  74. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/scheduler.py +0 -0
  75. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/search_index.py +0 -0
  76. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/seed.py +0 -0
  77. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/sensory_cortex.py +0 -0
  78. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/session.py +0 -0
  79. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skill_provenance.py +0 -0
  80. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skill_usage.py +0 -0
  81. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/skills.py +0 -0
  82. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/subagent.py +0 -0
  83. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/subdir_hints.py +0 -0
  84. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/swap.py +0 -0
  85. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/taskstate.py +0 -0
  86. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/telemetry.py +0 -0
  87. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/terminal.py +0 -0
  88. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/text_utils.py +0 -0
  89. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tool_summary.py +0 -0
  90. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tools.py +0 -0
  91. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/tui.py +0 -0
  92. {sliceagent-0.1.4 → sliceagent-0.1.5}/src/sliceagent/web.py +0 -0
  93. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/README.md +0 -0
  94. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_active_focus.py +0 -0
  95. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_agents.py +0 -0
  96. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ask_echo.py +0 -0
  97. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ask_user.py +0 -0
  98. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_background_review.py +0 -0
  99. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_binary_view.py +0 -0
  100. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bound_is_relevance.py +0 -0
  101. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_breadth_e2e.py +0 -0
  102. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_2b.py +0 -0
  103. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_breadth_wave.py +0 -0
  104. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_current_request.py +0 -0
  105. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_linenum.py +0 -0
  106. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_loop_wave.py +0 -0
  107. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_memory_wave.py +0 -0
  108. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0a.py +0 -0
  109. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0b.py +0 -0
  110. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_p0c.py +0 -0
  111. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_selfreview.py +0 -0
  112. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_selfreview_siblings.py +0 -0
  113. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_skills_h1.py +0 -0
  114. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_slice_wave.py +0 -0
  115. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_subagent_wave.py +0 -0
  116. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bugfix_tools_wave.py +0 -0
  117. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_bughunt_fixes.py +0 -0
  118. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_cache_manifest.py +0 -0
  119. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_checkpoint.py +0 -0
  120. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_cli_smoke.py +0 -0
  121. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_closure.py +0 -0
  122. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_code_grep.py +0 -0
  123. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_code_index.py +0 -0
  124. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_consolidate.py +0 -0
  125. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_context_overflow.py +0 -0
  126. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_conversation.py +0 -0
  127. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_coresidency.py +0 -0
  128. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_echo_before_blocking.py +0 -0
  129. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_episode.py +0 -0
  130. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_errors_backoff.py +0 -0
  131. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_esc_sentinel.py +0 -0
  132. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_exec_env.py +0 -0
  133. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_finding_types.py +0 -0
  134. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_flags.py +0 -0
  135. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_fuzzy.py +0 -0
  136. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_ghost_index.py +0 -0
  137. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_guardrails.py +0 -0
  138. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_guidance.py +0 -0
  139. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_history.py +0 -0
  140. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_invariant_fixes.py +0 -0
  141. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_live_composer.py +0 -0
  142. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_streaming.py +0 -0
  143. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_usage_cache.py +0 -0
  144. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_llm_watchdog.py +0 -0
  145. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_log_redaction.py +0 -0
  146. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_loop_overflow.py +0 -0
  147. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mcp_output_cap.py +0 -0
  148. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mcp_runtime.py +0 -0
  149. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_memory.py +0 -0
  150. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_memory_persist.py +0 -0
  151. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_menu_select.py +0 -0
  152. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_metrics.py +0 -0
  153. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mining.py +0 -0
  154. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_mission_tier.py +0 -0
  155. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_model_catalog.py +0 -0
  156. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_monitor.py +0 -0
  157. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_onboarding.py +0 -0
  158. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_pageout_compaction.py +0 -0
  159. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_permission_patterns.py +0 -0
  160. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_pinned_composer.py +0 -0
  161. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_plan_tier.py +0 -0
  162. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_procman.py +0 -0
  163. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_product_features.py +0 -0
  164. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_progress_status.py +0 -0
  165. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_prompt_ab.py +0 -0
  166. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_provenance.py +0 -0
  167. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_provider_lineup.py +0 -0
  168. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_proxy_interrupt.py +0 -0
  169. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_reach.py +0 -0
  170. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_readonly_subagent.py +0 -0
  171. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_recall_search.py +0 -0
  172. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_records.py +0 -0
  173. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_refault.py +0 -0
  174. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_registry_validation.py +0 -0
  175. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_reliability.py +0 -0
  176. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_repo_map_bounded.py +0 -0
  177. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_requirements.py +0 -0
  178. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_review_fixes.py +0 -0
  179. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_route_lexical.py +0 -0
  180. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_safety.py +0 -0
  181. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_seal_markdown.py +0 -0
  182. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_search_index.py +0 -0
  183. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_skill_meta.py +0 -0
  184. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_skill_metadata.py +0 -0
  185. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_subdir_hints.py +0 -0
  186. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_task_agnostic.py +0 -0
  187. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_task_state_roundtrip.py +0 -0
  188. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_telemetry_convergence.py +0 -0
  189. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_terminal.py +0 -0
  190. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tool_dedup.py +0 -0
  191. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tool_result_ok.py +0 -0
  192. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tools_robust.py +0 -0
  193. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_topic_switch.py +0 -0
  194. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_trajectory.py +0 -0
  195. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui.py +0 -0
  196. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_menus.py +0 -0
  197. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_render.py +0 -0
  198. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_tui_widgets.py +0 -0
  199. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_turn_budget.py +0 -0
  200. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_verification_agent.py +0 -0
  201. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_web.py +0 -0
  202. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_workspace.py +0 -0
  203. {sliceagent-0.1.4 → sliceagent-0.1.5}/tests/test_world_region.py +0 -0
  204. {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.4
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
@@ -1,3 +1,3 @@
1
1
  """sliceagent — a memory-native coding agent (deterministic, bounded, reconstructed context)."""
2
2
 
3
- __version__ = "0.1.4"
3
+ __version__ = "0.1.5"
@@ -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
- existing_key = existing.get("api_key") or ""
265
- key_prompt = (" API key (typed as ******, Enter to keep existing): " if existing_key
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