sliceagent 0.2.0__tar.gz → 0.3.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.
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.env.example +11 -5
- sliceagent-0.3.0/.github/workflows/publish.yml +67 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.gitignore +19 -4
- {sliceagent-0.2.0 → sliceagent-0.3.0}/CHANGELOG.md +174 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/NOTICE +2 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/PKG-INFO +101 -34
- {sliceagent-0.2.0 → sliceagent-0.3.0}/QUICKSTART.md +26 -6
- {sliceagent-0.2.0 → sliceagent-0.3.0}/README.md +96 -30
- sliceagent-0.3.0/SECURITY.md +43 -0
- sliceagent-0.3.0/benchmarks/provider_concurrency_probe.py +134 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/subagent_fanout.py +4 -8
- sliceagent-0.3.0/docs/CONFIGURATION.md +94 -0
- sliceagent-0.3.0/docs/ENDGAME-CONTEXT-DESIGN.md +248 -0
- sliceagent-0.3.0/docs/MEMORY-LAYERS-DESIGN.md +325 -0
- sliceagent-0.3.0/docs/SUBAGENT-DESIGN.md +250 -0
- sliceagent-0.3.0/evals/__init__.py +2 -0
- sliceagent-0.3.0/evals/context_contract_eval.py +282 -0
- sliceagent-0.3.0/evals/oldprompt_memory_model.txt +11 -0
- sliceagent-0.3.0/evals/receipt_claims.py +617 -0
- sliceagent-0.3.0/evals/receipt_prompt_ab.py +469 -0
- sliceagent-0.3.0/evals/self_inspection_tool_eval.py +633 -0
- sliceagent-0.3.0/evals/selfnarrative_ab.py +863 -0
- sliceagent-0.3.0/evals/usersim.py +298 -0
- sliceagent-0.3.0/evals/usersim_pty.py +303 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/install.ps1 +70 -8
- {sliceagent-0.2.0 → sliceagent-0.3.0}/install.sh +27 -3
- {sliceagent-0.2.0 → sliceagent-0.3.0}/pyproject.toml +11 -9
- {sliceagent-0.2.0 → sliceagent-0.3.0}/sliceagent.toml.example +5 -6
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/__init__.py +1 -1
- sliceagent-0.3.0/src/sliceagent/active_work.py +1087 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/agents.py +25 -9
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/background_review.py +36 -22
- sliceagent-0.3.0/src/sliceagent/cli.py +2656 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/code_grep.py +55 -63
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/config.py +22 -18
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/context.py +81 -15
- sliceagent-0.3.0/src/sliceagent/context_compiler.py +355 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/context_overflow.py +24 -5
- sliceagent-0.3.0/src/sliceagent/contextfs.py +1657 -0
- sliceagent-0.3.0/src/sliceagent/deliverables.py +134 -0
- sliceagent-0.3.0/src/sliceagent/discourse.py +2129 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/envspec.py +32 -14
- sliceagent-0.3.0/src/sliceagent/errors.py +286 -0
- sliceagent-0.3.0/src/sliceagent/event_ledger.py +438 -0
- sliceagent-0.3.0/src/sliceagent/events.py +341 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/execution.py +46 -96
- sliceagent-0.3.0/src/sliceagent/fan_in.py +585 -0
- sliceagent-0.3.0/src/sliceagent/guidance.py +28 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/hippocampus.py +278 -118
- sliceagent-0.3.0/src/sliceagent/hooks.py +406 -0
- sliceagent-0.3.0/src/sliceagent/identity.py +176 -0
- sliceagent-0.3.0/src/sliceagent/intent.py +2795 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/interfaces.py +49 -7
- sliceagent-0.3.0/src/sliceagent/knowledge.py +1444 -0
- sliceagent-0.3.0/src/sliceagent/knowledge_index.py +438 -0
- sliceagent-0.3.0/src/sliceagent/llm.py +2098 -0
- sliceagent-0.3.0/src/sliceagent/loop.py +1722 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/mcp_client.py +107 -26
- sliceagent-0.3.0/src/sliceagent/memory.py +1452 -0
- sliceagent-0.3.0/src/sliceagent/mentions.py +126 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/model_catalog.py +11 -3
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/model_runner.py +19 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/monitor.py +25 -10
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/neocortex.py +34 -40
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/onboarding.py +20 -25
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/oracle.py +3 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/pagetable.py +46 -32
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/persistence.py +182 -20
- sliceagent-0.3.0/src/sliceagent/pfc.py +468 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/platform_compat.py +74 -11
- sliceagent-0.3.0/src/sliceagent/plugins.py +216 -0
- sliceagent-0.3.0/src/sliceagent/private_state.py +118 -0
- sliceagent-0.3.0/src/sliceagent/progress.py +1169 -0
- sliceagent-0.3.0/src/sliceagent/prompt.py +304 -0
- sliceagent-0.3.0/src/sliceagent/reach.py +163 -0
- sliceagent-0.3.0/src/sliceagent/receipts.py +759 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/records.py +11 -4
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/recovery.py +10 -4
- sliceagent-0.3.0/src/sliceagent/regions.py +1855 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/registry.py +126 -31
- sliceagent-0.3.0/src/sliceagent/runtime_persistence.py +1708 -0
- sliceagent-0.3.0/src/sliceagent/safeguards.py +871 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/safety.py +76 -18
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/sandbox.py +12 -3
- sliceagent-0.3.0/src/sliceagent/scheduler.py +901 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/search_index.py +29 -15
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/seed.py +141 -50
- sliceagent-0.3.0/src/sliceagent/session.py +525 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/skill_usage.py +10 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/skills.py +29 -2
- sliceagent-0.3.0/src/sliceagent/slash.py +37 -0
- sliceagent-0.3.0/src/sliceagent/slice_reducer.py +673 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/slice_state.py +69 -1
- sliceagent-0.3.0/src/sliceagent/subagent.py +2770 -0
- sliceagent-0.3.0/src/sliceagent/subagent_contract.py +1110 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/taskstate.py +13 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/telemetry.py +17 -6
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/terminal.py +12 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/text_utils.py +3 -1
- sliceagent-0.3.0/src/sliceagent/tool_identity.py +24 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/tools.py +510 -87
- sliceagent-0.3.0/src/sliceagent/tui.py +3109 -0
- sliceagent-0.3.0/src/sliceagent/tui_projection.py +329 -0
- sliceagent-0.3.0/src/sliceagent/updater.py +368 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/web.py +11 -4
- sliceagent-0.3.0/src/sliceagent/workspace_context.py +416 -0
- sliceagent-0.3.0/src/sliceagent/workspace_handoff.py +39 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_active_focus.py +20 -0
- sliceagent-0.3.0/tests/test_active_work.py +542 -0
- sliceagent-0.3.0/tests/test_active_work_persistence.py +47 -0
- sliceagent-0.3.0/tests/test_admission_retirement.py +262 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_agents.py +20 -9
- sliceagent-0.3.0/tests/test_artifact_federation.py +79 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_ask_echo.py +1 -14
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_ask_user.py +1 -59
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_background_review.py +24 -0
- sliceagent-0.3.0/tests/test_block_rendering.py +148 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_2b.py +8 -8
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_current_request.py +7 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_memory_wave.py +41 -0
- sliceagent-0.3.0/tests/test_bugfix_p0c.py +230 -0
- sliceagent-0.3.0/tests/test_bugfix_selfreview_siblings.py +55 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_subagent_wave.py +3 -3
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_tools_wave.py +10 -10
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bughunt_fixes.py +144 -174
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_cache_manifest.py +13 -7
- sliceagent-0.3.0/tests/test_catastrophic_safeguard.py +287 -0
- sliceagent-0.3.0/tests/test_cli_smoke.py +329 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_code_grep.py +73 -41
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_config_journey.py +34 -13
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_consolidate.py +24 -3
- sliceagent-0.3.0/tests/test_context_compiler.py +251 -0
- sliceagent-0.3.0/tests/test_context_contract_eval.py +120 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_context_elasticity.py +37 -6
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_context_overflow.py +13 -0
- sliceagent-0.3.0/tests/test_contextfs.py +592 -0
- sliceagent-0.3.0/tests/test_deepseek_v4.py +213 -0
- sliceagent-0.3.0/tests/test_dependency_first_seed.py +77 -0
- sliceagent-0.3.0/tests/test_discourse.py +820 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_episode.py +29 -1
- sliceagent-0.3.0/tests/test_errors_backoff.py +281 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_esc_sentinel.py +18 -14
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_event_dispatch.py +17 -0
- sliceagent-0.3.0/tests/test_event_ledger.py +273 -0
- sliceagent-0.3.0/tests/test_execution_kernel.py +2540 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_extreview_fixes.py +0 -17
- sliceagent-0.3.0/tests/test_fan_in.py +308 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_file_lock.py +2 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_guidance.py +3 -32
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_history.py +57 -0
- sliceagent-0.3.0/tests/test_identity.py +64 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_intent_state.py +65 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_invariant_fixes.py +2 -61
- sliceagent-0.3.0/tests/test_knowledge.py +957 -0
- sliceagent-0.3.0/tests/test_live_composer.py +1047 -0
- sliceagent-0.3.0/tests/test_llm_streaming.py +1364 -0
- sliceagent-0.3.0/tests/test_llm_watchdog.py +486 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_loop_overflow.py +136 -30
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_mcp_output_cap.py +38 -5
- sliceagent-0.3.0/tests/test_mcp_runtime.py +220 -0
- sliceagent-0.3.0/tests/test_memem_knowledge_index.py +196 -0
- sliceagent-0.3.0/tests/test_mind_model_demo_replay.py +489 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_model_call_observability.py +59 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_monitor.py +42 -0
- sliceagent-0.3.0/tests/test_observation_repeat_advisory.py +149 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_onboarding.py +7 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_pinned_composer.py +35 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_product_features.py +33 -32
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_progress_status.py +46 -2
- sliceagent-0.3.0/tests/test_projection_truth.py +788 -0
- sliceagent-0.3.0/tests/test_prompt_kernel.py +105 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_provenance.py +23 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_proxy_interrupt.py +41 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_reach.py +12 -3
- sliceagent-0.3.0/tests/test_reachset.py +35 -0
- sliceagent-0.3.0/tests/test_readonly_subagent.py +516 -0
- sliceagent-0.3.0/tests/test_receipt_context.py +273 -0
- sliceagent-0.3.0/tests/test_receipt_elasticity.py +291 -0
- sliceagent-0.3.0/tests/test_receipt_eval.py +790 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_records.py +44 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_reliability.py +224 -73
- sliceagent-0.3.0/tests/test_review_deliverable.py +280 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_runtime_boundaries.py +2 -2
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_runtime_persistence.py +682 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_safety.py +28 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_search_index.py +40 -0
- sliceagent-0.3.0/tests/test_self_inspection_tool_eval.py +425 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_selfreview_fixes.py +9 -29
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_slice_lifecycle.py +21 -2
- sliceagent-0.3.0/tests/test_slice_reducer.py +217 -0
- sliceagent-0.3.0/tests/test_steered_status.py +183 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_subagent_artifacts.py +66 -23
- sliceagent-0.3.0/tests/test_subagent_contract.py +2362 -0
- sliceagent-0.3.0/tests/test_subagent_matrix_truth.py +389 -0
- sliceagent-0.3.0/tests/test_subagent_orchestration.py +808 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_subagent_review_fixes.py +1 -1
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_subagent_roster.py +90 -45
- sliceagent-0.3.0/tests/test_subagent_steering.py +355 -0
- sliceagent-0.3.0/tests/test_subagent_work_binding.py +169 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_telemetry_convergence.py +15 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_tool_dedup.py +2 -3
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_tools_robust.py +6 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_topic_switch.py +14 -17
- sliceagent-0.3.0/tests/test_trajectory.py +124 -0
- sliceagent-0.3.0/tests/test_tui.py +496 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_tui_menus.py +2 -2
- sliceagent-0.3.0/tests/test_tui_render.py +428 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_tui_widgets.py +20 -5
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_turn_budget.py +6 -38
- sliceagent-0.3.0/tests/test_turn_contract.py +470 -0
- sliceagent-0.3.0/tests/test_turn_progress.py +681 -0
- sliceagent-0.3.0/tests/test_turn_receipts.py +379 -0
- sliceagent-0.3.0/tests/test_update_work.py +201 -0
- sliceagent-0.3.0/tests/test_updater.py +401 -0
- sliceagent-0.3.0/tests/test_wave_commitments.py +224 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_web.py +37 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_windows_footguns.py +16 -0
- sliceagent-0.3.0/tests/test_workspace_context.py +201 -0
- sliceagent-0.3.0/tests/test_workspace_switch.py +1257 -0
- sliceagent-0.3.0/uv.lock +1489 -0
- sliceagent-0.2.0/.github/workflows/publish.yml +0 -36
- sliceagent-0.2.0/SECURITY.md +0 -37
- sliceagent-0.2.0/src/sliceagent/cli.py +0 -1293
- sliceagent-0.2.0/src/sliceagent/errors.py +0 -169
- sliceagent-0.2.0/src/sliceagent/events.py +0 -163
- sliceagent-0.2.0/src/sliceagent/guardrails.py +0 -438
- sliceagent-0.2.0/src/sliceagent/guidance.py +0 -69
- sliceagent-0.2.0/src/sliceagent/hooks.py +0 -455
- sliceagent-0.2.0/src/sliceagent/intent.py +0 -724
- sliceagent-0.2.0/src/sliceagent/llm.py +0 -768
- sliceagent-0.2.0/src/sliceagent/loop.py +0 -995
- sliceagent-0.2.0/src/sliceagent/memory.py +0 -480
- sliceagent-0.2.0/src/sliceagent/pfc.py +0 -446
- sliceagent-0.2.0/src/sliceagent/plugins.py +0 -127
- sliceagent-0.2.0/src/sliceagent/policy.py +0 -268
- sliceagent-0.2.0/src/sliceagent/progress.py +0 -464
- sliceagent-0.2.0/src/sliceagent/prompt.py +0 -280
- sliceagent-0.2.0/src/sliceagent/regions.py +0 -934
- sliceagent-0.2.0/src/sliceagent/runtime_persistence.py +0 -583
- sliceagent-0.2.0/src/sliceagent/scheduler.py +0 -200
- sliceagent-0.2.0/src/sliceagent/session.py +0 -271
- sliceagent-0.2.0/src/sliceagent/subagent.py +0 -882
- sliceagent-0.2.0/src/sliceagent/subagent_contract.py +0 -407
- sliceagent-0.2.0/src/sliceagent/tui.py +0 -1790
- sliceagent-0.2.0/tests/test_bugfix_p0c.py +0 -85
- sliceagent-0.2.0/tests/test_bugfix_selfreview_siblings.py +0 -83
- sliceagent-0.2.0/tests/test_cli_smoke.py +0 -162
- sliceagent-0.2.0/tests/test_errors_backoff.py +0 -107
- sliceagent-0.2.0/tests/test_execution_kernel.py +0 -937
- sliceagent-0.2.0/tests/test_guardrails.py +0 -283
- sliceagent-0.2.0/tests/test_live_composer.py +0 -194
- sliceagent-0.2.0/tests/test_llm_streaming.py +0 -320
- sliceagent-0.2.0/tests/test_llm_watchdog.py +0 -99
- sliceagent-0.2.0/tests/test_mcp_runtime.py +0 -102
- sliceagent-0.2.0/tests/test_permission_patterns.py +0 -78
- sliceagent-0.2.0/tests/test_readonly_subagent.py +0 -287
- sliceagent-0.2.0/tests/test_subagent_contract.py +0 -488
- sliceagent-0.2.0/tests/test_trajectory.py +0 -287
- sliceagent-0.2.0/tests/test_tui.py +0 -225
- sliceagent-0.2.0/tests/test_tui_render.py +0 -172
- sliceagent-0.2.0/tests/test_turn_progress.py +0 -270
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.dockerignore +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.github/dependabot.yml +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/.github/workflows/ci.yml +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/CONTRIBUTING.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/Dockerfile +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/LICENSE +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/assets/sliceagent-core-loop.gif +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/README.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/meta.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/prompts.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/reference_fix.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/setup.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/verify.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/meta.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/prompts.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/reference_fix.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/setup.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/verify.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/meta.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/prompts.json +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/reference_fix.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/setup.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/verify.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/benchmarks/run.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/examples/plugins/hello/__init__.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/examples/plugins/hello/plugin.toml +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/scripts/check_windows_footguns.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/scripts/gen_config_reference.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/scripts/run_tests.sh +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/__main__.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/access.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/binsniff.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/clock.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/code_index.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/finding_types.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/flags.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/fuzzy.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/mcp_security.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/metrics.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/procman.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/retriever.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/sensory_cortex.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/skill_provenance.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/subdir_hints.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/swap.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/tool_summary.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/src/sliceagent/workspace_revision.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/README.md +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_benchmark_runner.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_binary_view.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bound_is_relevance.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_breadth_e2e.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_breadth_wave.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_linenum.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_loop_wave.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_p0a.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_p0b.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_selfreview.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_skills_h1.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_bugfix_slice_wave.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_checkpoint.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_closure.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_code_index.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_config_docs_current.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_conversation.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_coresidency.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_echo_before_blocking.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_exec_env.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_finding_types.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_flags.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_fuzzy.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_ghost_index.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_llm_cache.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_llm_usage_cache.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_log_redaction.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_memory.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_memory_persist.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_menu_select.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_metrics.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_mining.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_model_catalog.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_model_identity.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_pageout_compaction.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_persistence_protocol.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_plan_tier.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_procman.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_prompt_ab.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_provider_lineup.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_recall_search.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_refault.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_registry_validation.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_repo_map_bounded.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_requirements.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_review_fixes.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_route_lexical.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_seal_markdown.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_skill_meta.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_skill_metadata.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_subdir_hints.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_task_agnostic.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_task_state_roundtrip.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_terminal.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_tool_result_ok.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_verification_agent.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_workspace.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_workspace_revision.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_world_region.py +0 -0
- {sliceagent-0.2.0 → sliceagent-0.3.0}/tests/test_world_state.py +0 -0
|
@@ -4,18 +4,24 @@
|
|
|
4
4
|
LLM_API_KEY=sk-... # REQUIRED — any OpenAI-compatible provider (OpenAI/DeepSeek/Moonshot/…)
|
|
5
5
|
AGENT_MODEL=gpt-5.5 # REQUIRED — model id (no default; pick your provider's model)
|
|
6
6
|
# LLM_BASE_URL=https://api.deepseek.com # provider endpoint; omit for OpenAI
|
|
7
|
+
# LLM_HARD_TIMEOUT_SEC=300 # absolute whole-call watchdog; unset derives from completion budget
|
|
8
|
+
# LLM_STREAM_CLOSE_GRACE_SEC=2 # wait to prove a cancelled SSE stream physically closed
|
|
9
|
+
# LLM_PROVIDER_MAX_INFLIGHT=4 # physical request cap; timed-out calls hold a slot until closed
|
|
7
10
|
# AGENT_PROXY=http://127.0.0.1:7890 # optional proxy URL (default: direct connection)
|
|
8
11
|
# SHOW_SLICE=1 # print the slice each turn
|
|
9
12
|
# back-compat: OPENAI_API_KEY / OPENAI_BASE_URL / MOONSHOT_API_KEY are still accepted as fallbacks
|
|
10
13
|
|
|
11
|
-
# --- memory tier (
|
|
12
|
-
# SLICEAGENT_VAULT=~/.sliceagent/vault #
|
|
13
|
-
# MEMEM_VAULT=~/obsidian-brain # memem's
|
|
14
|
+
# --- memory tier (native typed knowledge is always on; Memem is an optional `memory` install extra) ---
|
|
15
|
+
# SLICEAGENT_VAULT=~/.sliceagent/vault # legacy episodic/task/roster compatibility records
|
|
16
|
+
# MEMEM_VAULT=~/obsidian-brain # memem's human-readable semantic-index projection
|
|
14
17
|
# MEMEM_DIR=~/.memem # memem's index/state dir
|
|
15
18
|
|
|
16
|
-
# ---
|
|
17
|
-
#
|
|
19
|
+
# --- execution / hooks (optional) ---
|
|
20
|
+
# AGENT_SANDBOX=local # local (not an OS boundary) | docker (POSIX/WSL2; native Windows use local/WSL2)
|
|
18
21
|
# AGENT_MINE=deterministic # write side of memory loop: deterministic (default) | llm | off
|
|
19
22
|
# AGENT_SUBAGENT_DEPTH=1 # max delegation depth (0 disables spawn_subagent)
|
|
23
|
+
# AGENT_DELEGATION_TIMEOUT=900 # hard ceiling for a child-agent wave; cannot be disabled
|
|
24
|
+
# AGENT_EXPLORER_REASONING=staged # fast evidence navigation + one full tool-free synthesis
|
|
25
|
+
# AGENT_EXPLORER_NAV_STEPS=6 # staged explorer's fast-navigation ceiling (then synthesis)
|
|
20
26
|
# AGENT_VERIFY_CMD=python3 -m pytest -q # Oracle: run before "done"; failures force another turn
|
|
21
27
|
# AGENT_MAX_TOKENS=200000 # budget ceiling
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Publish to PyPI via trusted publishing (OIDC — no tokens).
|
|
4
|
+
# Trigger: a published GitHub release. The release tag must match the package version.
|
|
5
|
+
on:
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v7
|
|
14
|
+
with:
|
|
15
|
+
ref: ${{ github.event.release.tag_name }}
|
|
16
|
+
- uses: actions/setup-python@v6
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
- name: Verify release tag matches package version
|
|
20
|
+
env:
|
|
21
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
22
|
+
run: |
|
|
23
|
+
python - <<'PY'
|
|
24
|
+
import ast
|
|
25
|
+
import os
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
tree = ast.parse(Path("src/sliceagent/__init__.py").read_text(encoding="utf-8"))
|
|
29
|
+
version = next(
|
|
30
|
+
ast.literal_eval(node.value)
|
|
31
|
+
for node in tree.body
|
|
32
|
+
if isinstance(node, ast.Assign)
|
|
33
|
+
and any(isinstance(target, ast.Name) and target.id == "__version__" for target in node.targets)
|
|
34
|
+
)
|
|
35
|
+
tag = os.environ["RELEASE_TAG"]
|
|
36
|
+
expected_tag = f"v{version}"
|
|
37
|
+
expected_ref = f"refs/tags/{tag}"
|
|
38
|
+
if tag != expected_tag:
|
|
39
|
+
raise SystemExit(f"release tag {tag!r} does not match package version {version!r}")
|
|
40
|
+
if os.environ["GITHUB_REF"] != expected_ref:
|
|
41
|
+
raise SystemExit(
|
|
42
|
+
f"release ref {os.environ['GITHUB_REF']!r} does not match tag ref {expected_ref!r}"
|
|
43
|
+
)
|
|
44
|
+
print(f"Publishing SliceAgent {version} from {expected_ref}")
|
|
45
|
+
PY
|
|
46
|
+
- name: Build and validate distributions
|
|
47
|
+
run: |
|
|
48
|
+
python -m pip install build twine
|
|
49
|
+
python -m build
|
|
50
|
+
python -m twine check dist/*
|
|
51
|
+
- uses: actions/upload-artifact@v7
|
|
52
|
+
with:
|
|
53
|
+
name: dist
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
publish:
|
|
57
|
+
needs: build
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
environment: pypi
|
|
60
|
+
permissions:
|
|
61
|
+
id-token: write # OIDC token for PyPI trusted publishing
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/download-artifact@v8
|
|
64
|
+
with:
|
|
65
|
+
name: dist
|
|
66
|
+
path: dist/
|
|
67
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -47,10 +47,20 @@ runs/
|
|
|
47
47
|
*.pdf
|
|
48
48
|
|
|
49
49
|
# ── internal-only: untracked 2026-07-02 for the public launch (files stay on disk locally) ──
|
|
50
|
-
# evals/
|
|
50
|
+
# evals/ contains ~127 MB of captured tbench/job artifacts. Keep those ignored, but version the small,
|
|
51
|
+
# receipt-grounded prompt experiment needed to reproduce the mind-model claim and its offline tests.
|
|
51
52
|
# prototype/ = superseded ~250-line JS proof-of-concept (its own README: "not the production codebase")
|
|
52
53
|
# docs/STEP3-PLAN.md, docs/MEMEM-DIAGNOSIS.md = internal R&D planning notes, not user docs
|
|
53
|
-
evals
|
|
54
|
+
evals/*
|
|
55
|
+
!evals/__init__.py
|
|
56
|
+
!evals/oldprompt_memory_model.txt
|
|
57
|
+
!evals/receipt_claims.py
|
|
58
|
+
!evals/receipt_prompt_ab.py
|
|
59
|
+
!evals/context_contract_eval.py
|
|
60
|
+
!evals/self_inspection_tool_eval.py
|
|
61
|
+
!evals/selfnarrative_ab.py
|
|
62
|
+
!evals/usersim.py
|
|
63
|
+
!evals/usersim_pty.py
|
|
54
64
|
prototype/
|
|
55
65
|
docs/STEP3-PLAN.md
|
|
56
66
|
docs/MEMEM-DIAGNOSIS.md
|
|
@@ -58,8 +68,13 @@ docs/MEMEM-DIAGNOSIS.md
|
|
|
58
68
|
# internal engineering roadmap (wave planning), not product docs — untracked 2026-07-02
|
|
59
69
|
ROADMAP.md
|
|
60
70
|
|
|
61
|
-
#
|
|
62
|
-
|
|
71
|
+
# Architecture specs below are part of the OSS design contract; other internal
|
|
72
|
+
# drafts and brand assets remain local by default.
|
|
73
|
+
docs/*
|
|
74
|
+
!docs/ENDGAME-CONTEXT-DESIGN.md
|
|
75
|
+
!docs/MEMORY-LAYERS-DESIGN.md
|
|
76
|
+
!docs/SUBAGENT-DESIGN.md
|
|
77
|
+
!docs/CONFIGURATION.md
|
|
63
78
|
|
|
64
79
|
# ColBench raw HF dataset (huge; selected tasks are committed under evals/colbench/tasks/)
|
|
65
80
|
evals/colbench/data/
|
|
@@ -5,6 +5,180 @@ this project aims for [Semantic Versioning](https://semver.org/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.3.0] — 2026-07-17
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Intent Fidelity v2.** One shared, ephemeral turn contract now separates user-authorized action spans
|
|
12
|
+
from quoted/reported prior output, grounds historical references in sealed responses, resolves numbered
|
|
13
|
+
items and launch-ordered subagents, and helps the model carry terse confirmations onto the immediately
|
|
14
|
+
pending proposal or explicitly selected numbered option. This intent metadata is advisory context, not a
|
|
15
|
+
second host-side permission system.
|
|
16
|
+
- **Safe update path.** `sliceagent update` now updates a positively identified canonical `uv tool`
|
|
17
|
+
install before any API-key, workspace, plugin, or MCP startup. Editable/direct installs are preserved,
|
|
18
|
+
alternative package managers receive exact guidance, and `/update` points active sessions to the safe
|
|
19
|
+
process boundary.
|
|
20
|
+
- **Seamless workspace handoff.** `/cwd <path>` and the model-facing `change_workspace` control tool now
|
|
21
|
+
stage and validate the target runtime, durably seal the current turn, and atomically replace only
|
|
22
|
+
workspace-owned resources. The terminal application, model client, token/cost counters, and connection stay
|
|
23
|
+
alive; target preparation failures roll back to the untouched current workspace.
|
|
24
|
+
- **Canonical execution receipts.** Every tool lifecycle now records requested, rejected-before-start,
|
|
25
|
+
physically started, settled, and effect-applied states under one invocation identity. Sealed receipts flow
|
|
26
|
+
into turns, recovered crashes, child-artifact references, terminal completion, and receipt-grounded recall;
|
|
27
|
+
large-task aggregates remain exact without replaying thousands of operation rows into the prompt.
|
|
28
|
+
- **Receipt-aware mind-model evaluation.** The paired old-autobiography/operating-contract harness now proves
|
|
29
|
+
the substituted system-prompt diff on one Git revision and workspace, retains full replies, rejects
|
|
30
|
+
screen-derived ground truth, and scores lifecycle claims, abstentions, corrections, and required coverage
|
|
31
|
+
directly against sealed receipts.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- **Subagents now return direct, ordered outcomes.** Every completed child contributes its full normalized
|
|
35
|
+
report to the parent as an ordinary tool result in launch order. The parent continues its normal loop and
|
|
36
|
+
owns synthesis; there is no synthetic fan-in packet, transcript reset, child-lifecycle mutation of Active
|
|
37
|
+
Work, or hidden terminal-delivery enforcement. Active Work is reserved for genuine cross-turn user
|
|
38
|
+
commitments rather than acting as a second scheduler.
|
|
39
|
+
- **Subagent persistence is optional and fail-soft.** Once a safe child report exists, artifact-store,
|
|
40
|
+
reference-publication, or memory-mirror failures are retained as warnings instead of discarding useful
|
|
41
|
+
evidence or making the child indeterminate. Truly unresolved execution remains indeterminate; optional
|
|
42
|
+
artifacts remain durable locators, not a prerequisite for parent delivery.
|
|
43
|
+
- **Subagent progress uses truthful readiness language.** The live matrix distinguishes running, queued,
|
|
44
|
+
failed, completed-without-report, and report-ready children without describing a report as sealed merely
|
|
45
|
+
because it is ready for the parent. “Partial report” is reserved for actually partial report bytes;
|
|
46
|
+
operationally incomplete work and persistence status stay separate from report completeness.
|
|
47
|
+
- **One typed memory model, with Memem as retrieval rather than authority.** L0 remains canonical sealed
|
|
48
|
+
evidence, L1 remains rebuildable Active Work, and native SQLite owns provenance-linked USER/PROJECT/CRAFT
|
|
49
|
+
L2 records. Memem 2.10's structured external-index protocol is the primary semantic ranker when available:
|
|
50
|
+
stable IDs, hard scope partitions, one primary abstraction, and bounded cue anchors are always resolved back
|
|
51
|
+
through SliceAgent's lifecycle, revision, sensitivity, and provenance predicates. Resolved or revision-drifted
|
|
52
|
+
project diagnostics stay explicit-pull instead of being re-injected as current bugs; a whole-query native
|
|
53
|
+
fallback preserves availability without co-ranking historical full-body noise.
|
|
54
|
+
- **Autonomous admission kernel.** General permission modes, host-side turn-authority denials,
|
|
55
|
+
reconciliation locks, and loop-policy refusals are retired. Ordinary requested work now flows directly;
|
|
56
|
+
the host retains only a narrow, high-confidence safeguard for commands that could catastrophically damage
|
|
57
|
+
the machine (such as formatting a device or recursively deleting `/` or the user's home).
|
|
58
|
+
- **Calmer, informative Rich TUI.** The footer no longer pins task text; it restores total-token and
|
|
59
|
+
dollar-savings meters. The live reasoning/progress row also shows only current activity (or the active plan
|
|
60
|
+
step), never the task's first prompt. Assistant replies have more breathing room, and the composer drops its
|
|
61
|
+
redundant title. Combined greetings such as “hi how are you” stay on the cheap chitchat path instead of
|
|
62
|
+
becoming a durable task title.
|
|
63
|
+
- **Natural workspace intent.** “Go/open/work in the hunter workspace” now navigates without requiring
|
|
64
|
+
implementation-shaped wording. Safe fallback path probes remain observational, and an assistant's exact
|
|
65
|
+
workspace-path clarification carries naturally into a terse confirmation such as “yes.”
|
|
66
|
+
- **Elastic observation flow.** Pipelines and fallback branches composed entirely of read-only commands
|
|
67
|
+
(for example `find … | sort` and `ls … 2>/dev/null || ls …`) remain ordinary inspection. A failed operation
|
|
68
|
+
does not poison unrelated reads, and terminal messages report the actual failed action without internal
|
|
69
|
+
policy jargon.
|
|
70
|
+
- **Capability-shaped intent grounding.** Effects are understood by governing action, concrete target, and
|
|
71
|
+
command family rather than by tool name or stray keywords. Coordinated directives retain each capability;
|
|
72
|
+
quoted filenames, exact commands, dotfiles, file sets, requirements, VCS/package operations, and adjacent
|
|
73
|
+
“go” or “continue” confirmations remain grounded without turning intent recognition into authorization.
|
|
74
|
+
- **Typed evidence selection.** One `EvidenceQuery` now owns execution-recall family, predicate, and scope.
|
|
75
|
+
Receipt projections distinguish exact aggregates from failure details and latest-turn from task-wide recall,
|
|
76
|
+
while the slice remains elastic for active complexity and history-bounded with respect to transcript age.
|
|
77
|
+
- **Plugin execution-admission APIs are intentionally retired.** Plugins continue to register tools, skills,
|
|
78
|
+
and MCP servers, but the old `register_hook` / `intent_effect` permission surfaces and hook-bearing
|
|
79
|
+
`load_plugins` tuple are removed with the policy-gate machinery. This is a deliberate pre-1.0 API break;
|
|
80
|
+
ordinary advisory behavior belongs in tool results or skills, not hidden host-side action gates.
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
- **Delegated results can no longer disappear behind a synthetic delivery gate.** Successful child reports
|
|
84
|
+
reach the next parent model call in full and in order, so a stale deliverable contract, revision mismatch,
|
|
85
|
+
or missing heading cannot replace the requested final answer with a host-authored interruption. The model
|
|
86
|
+
remains responsible for synthesizing and delivering the user-visible result.
|
|
87
|
+
- **Useful child reports survive optional publication failures.** A completed, normalized report is returned
|
|
88
|
+
directly even when its artifact, reference, or memory mirror cannot be written. Those failures remain
|
|
89
|
+
visible as persistence warnings; they no longer erase child evidence or turn a known report into an
|
|
90
|
+
indeterminate execution outcome.
|
|
91
|
+
- **Child reports are not silently lost at lifecycle edges.** A mixed indeterminate batch gets one
|
|
92
|
+
synthesis-only closeout over settled siblings before the turn parks; deadline-grace completion retains the
|
|
93
|
+
full direct report without requiring an artifact; context overflow parks instead of evicting an unseen
|
|
94
|
+
report; and crash recovery advertises the exact interrupted-turn artifact for one resumed seed.
|
|
95
|
+
- **Broad subagent reviews no longer collapse into timeout cascades.** Repository audits use ignore-aware,
|
|
96
|
+
source-weighted scopes and staged 2–3-child waves instead of one exhaustive child per directory. Every child
|
|
97
|
+
drains and assembles SSE off the main thread even without a UI sink, so an ordinary long reasoning response
|
|
98
|
+
is not mistaken for 60 seconds of transport silence. The completion-budget-aware monotonic watchdog remains
|
|
99
|
+
configurable with `LLM_HARD_TIMEOUT_SEC`; provider SDK retries stay disabled and the model runner is the one
|
|
100
|
+
visible retry owner. A process-wide physical-call lease now bounds live requests per provider account,
|
|
101
|
+
including sockets whose logical watchdog already returned, while pre-admission cancellation cannot start a
|
|
102
|
+
late request and capacity wait shares the same absolute deadline as execution.
|
|
103
|
+
- **Canonical installs can actually self-update.** The updater now recognizes the standard
|
|
104
|
+
`python = "3.12"` field emitted by current `uv tool` receipts while continuing to reject custom
|
|
105
|
+
requirements, resolver settings, and non-public package sources. Trusted executable discovery rejects
|
|
106
|
+
repository and arbitrary-PATH shims while correctly following Homebrew/Nix-style manager-owned symlink
|
|
107
|
+
chains; a receipt-provided bin can no longer redirect execution to an unrelated external target.
|
|
108
|
+
- **Native Windows paths keep one identity across the runtime.** Model-facing mention handles stay
|
|
109
|
+
slash-normalized, physical workspace evidence retains its native invocation spelling, and workspace
|
|
110
|
+
transitions compare case-insensitive canonical identities without changing display paths. Git-Bash live
|
|
111
|
+
composition reuses the application-selected terminal I/O, while POSIX-only PTY eval support is loaded only
|
|
112
|
+
when a live eval actually runs.
|
|
113
|
+
- **Concurrent evidence appends are serialized on Windows too.** The JSONL `FileLock` now uses a
|
|
114
|
+
canonical-path-keyed Windows kernel mutex with abandoned-owner recovery, matching the existing POSIX `flock`
|
|
115
|
+
guarantee instead of allowing independently opened append handles to overwrite records.
|
|
116
|
+
- **Private state modes do not leak into shared skills.** Personal vault/config/default-skill files remain
|
|
117
|
+
owner-only, while an explicitly selected project/shared skill directory creates collaborator-readable
|
|
118
|
+
`SKILL.md` files and preserves an existing file mode across atomic rewrites.
|
|
119
|
+
- **Workspace switches preserve the live collaboration state.** One application session identity now spans
|
|
120
|
+
in-process workspace handoffs; conversation, standing user intent, proposals, and every open topic survive
|
|
121
|
+
A→B→A, while file residency, observed facts, revisions, receipt snapshots, and old artifact handles are
|
|
122
|
+
restored only from the selected workspace. Handoff publication stages fallible derived objects first, and
|
|
123
|
+
teardown/logging failures can no longer falsify a switch that already committed.
|
|
124
|
+
- **Durable evidence has an unambiguous order and explicit gaps.** A crash-durable monotonic turn order is
|
|
125
|
+
shared by journals, artifacts, and checkpoints (including recovery and idempotent retries); legacy
|
|
126
|
+
same-second ties expand as partial evidence instead of task-ID guessing. Corrupt immutable records now
|
|
127
|
+
propagate bounded gap metadata into execution/quality coverage and the artifact index rather than silently
|
|
128
|
+
producing exact counts over survivors.
|
|
129
|
+
- **Intent continuity no longer drifts across attribution or redaction.** A user who adopts wording from an
|
|
130
|
+
assistant recommendation retains a live imperative; quoted/fenced proposal examples cannot authorize a
|
|
131
|
+
later “yes”; nested numbered details cannot steal top-level ordinals; and persistence-only secret masks
|
|
132
|
+
preserve source offsets so exact user clauses still point to the same words after recovery.
|
|
133
|
+
- **User-reported failures close only on real proof.** Stale tool errors clear only after the exact failed call
|
|
134
|
+
succeeds. Test/build reports clear only after an explicit file-tool edit followed by a status-propagating
|
|
135
|
+
shell command whose test/lint/type/build family matches the report; sequential families accumulate only
|
|
136
|
+
until the next edit. Help, list, collect, dry-run, skip, or exit-zero modes do not count, and source text
|
|
137
|
+
inside `execute_code` is never treated as a mutation or verification receipt.
|
|
138
|
+
Neutral lifecycle cancellations remain visible as “not run” without becoming blockers, evidence, warning
|
|
139
|
+
completions, or policy errors; catastrophic safety refusals remain explicit and adverse.
|
|
140
|
+
- **Child budgets remain hard batch ceilings.** Delegated token reservations now carry across scheduler waves,
|
|
141
|
+
so interleaved effects or serialized writable children cannot each receive the parent's full remaining cap;
|
|
142
|
+
children rejected before physical start no longer dilute a valid sibling's reservation.
|
|
143
|
+
- **Subagent fan-out now degrades gracefully under provider pressure.** A wave admits at most four child model
|
|
144
|
+
loops, launches the first pair immediately, and ramps later starts instead of creating a synchronized provider
|
|
145
|
+
burst. Explorers default to at most six fast evidence-navigation steps followed by one full, tool-free
|
|
146
|
+
synthesis. Clean navigation or planned navigation-budget exhaustion may hand off only typed workspace
|
|
147
|
+
evidence; the latter carries an explicit incomplete-coverage note. The fast navigator suppresses the generic
|
|
148
|
+
max-step closeout, avoiding a redundant billed call, while cancellation, uncertainty, fatal provider/tool
|
|
149
|
+
stops, token exhaustion, truncation, and evidence-free runs never synthesize. The live matrix is driven by typed
|
|
150
|
+
queued/starting/model-active/reasoning/writing/tool/
|
|
151
|
+
retry/terminal phases rather than detail-string inference. Exhausted attempts, truncated output,
|
|
152
|
+
cancellation, or a final-synthesis failure start no wrapper-level recovery call. Usable partial report text,
|
|
153
|
+
observations, trace, and usage return directly as an explicitly partial outcome; optional artifact
|
|
154
|
+
persistence does not create an Active Work dependency or gate delivery. Cancellation still wakes retry
|
|
155
|
+
backoff and prevents a late outcome from publishing into a replacement task.
|
|
156
|
+
- **Hung read deadlines stay live.** Timeout-enabled pure reads use bounded daemon workers and a short grace
|
|
157
|
+
period; unresolved readers become typed indeterminate outcomes, later barriers are cancelled, Ctrl-C remains
|
|
158
|
+
responsive, and a permanently stuck reader no longer freezes the turn or process exit.
|
|
159
|
+
- **Read scheduling keeps truthful lifecycle boundaries.** Lifecycle children no longer disable adjacent read
|
|
160
|
+
deadlines; exhausted daemon capacity settles as a typed not-started cancellation; late indeterminate results
|
|
161
|
+
still close later effects; and a start journal crossing a deadline cannot enter its handler or route a late
|
|
162
|
+
lifecycle edge into a newer turn/workspace.
|
|
163
|
+
- **Registry outcomes stay typed at every edge.** Preflight-cancelled calls bypass execution-only effect
|
|
164
|
+
factories, availability is admitted exactly once before the durable start boundary, direct validation
|
|
165
|
+
failures never construct execution effects, and registry replacement cannot mix an admitted handler with a
|
|
166
|
+
stale effect factory. Invalid explicit statuses become indeterminate instead of successful, and byte or
|
|
167
|
+
unrenderable extension results remain inside the canonical outcome path.
|
|
168
|
+
- **Streaming deadlines cannot leak output into a later turn.** On platforms without a synchronous SIGALRM
|
|
169
|
+
lease, both Chat Completions and Responses interactive paths use the blocking daemon watchdog rather than
|
|
170
|
+
abandoning an SSE worker that could continue emitting deltas after timeout.
|
|
171
|
+
- **Plugin/MCP extension startup is transactional and bounded.** Plugin packages support relative imports and
|
|
172
|
+
fully roll back registry, skill, MCP, and module state on failure. MCP timeouts cancel discarded workers,
|
|
173
|
+
malformed configuration/descriptors are contained before spawn, and remote tool names cannot control
|
|
174
|
+
page-out paths or labels.
|
|
175
|
+
- **The catastrophic floor survives extension failure and common shell spelling.** A crashing/no-op earlier
|
|
176
|
+
preflight hook cannot skip the later machine-safety check, and high-confidence POSIX escaped executable names
|
|
177
|
+
or quoted raw-device assignments are recognized without treating escaped literal home/glob operands as wipes.
|
|
178
|
+
- **Varying re-inspection loops get an advisory recovery cue.** Eight distinct observation calls returning the
|
|
179
|
+
same meaningful result add one model-only nudge to synthesize, act, or ask. It never rejects a tool or emits a
|
|
180
|
+
user-facing policy error.
|
|
181
|
+
|
|
8
182
|
## [0.2.0] — 2026-07-10
|
|
9
183
|
|
|
10
184
|
A typed re-architecture of the core around a single canonical design (elastic slice, execution kernel,
|
|
@@ -6,7 +6,7 @@ This product includes code ported from, and architecture reimplemented after, th
|
|
|
6
6
|
open-source projects below. We are grateful to their authors.
|
|
7
7
|
|
|
8
8
|
────────────────────────────────────────────────────────────────────────────
|
|
9
|
-
Hermes — https://github.com/NousResearch/hermes (MIT License)
|
|
9
|
+
Hermes Agent — https://github.com/NousResearch/hermes-agent (MIT License)
|
|
10
10
|
Copyright (c) 2025 Nous Research
|
|
11
11
|
|
|
12
12
|
Verbatim / closely-ported source:
|
|
@@ -28,7 +28,7 @@ Kimi-Code — https://github.com/MoonshotAI/kimi-code (Moonshot AI)
|
|
|
28
28
|
ARCHITECTURE AND PATTERNS reimplemented in Python (no source copied — ideas,
|
|
29
29
|
not code):
|
|
30
30
|
access.py + scheduler.py (resource-access model for safe tool parallelism),
|
|
31
|
-
|
|
31
|
+
config.py (layered config), clock.py, cron.py,
|
|
32
32
|
flags.py, model_catalog.py, mcp_client.py (the mcp__server__tool namespacing),
|
|
33
33
|
loop.py (micro-compaction), tui.py (selector menus + footer/streaming),
|
|
34
34
|
code_grep.py (ripgrep pagination), agents.py (named-agent registry).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sliceagent
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: A coding agent with
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: A coding agent with history-bounded, task-elastic reconstructed context — built for long-horizon work.
|
|
5
5
|
Author: TT-Wang
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
License-File: LICENSE
|
|
@@ -16,12 +16,13 @@ Classifier: Topic :: Software Development :: Build Tools
|
|
|
16
16
|
Requires-Python: >=3.11
|
|
17
17
|
Requires-Dist: httpx>=0.27
|
|
18
18
|
Requires-Dist: mcp>=1.0
|
|
19
|
-
Requires-Dist: memem>=2.9.7
|
|
20
|
-
Requires-Dist: numpy>=1.24
|
|
21
19
|
Requires-Dist: openai>=1.40
|
|
22
20
|
Provides-Extra: dev
|
|
23
21
|
Requires-Dist: pytest>=8; extra == 'dev'
|
|
24
22
|
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
23
|
+
Provides-Extra: memory
|
|
24
|
+
Requires-Dist: memem>=2.9.7; extra == 'memory'
|
|
25
|
+
Requires-Dist: numpy>=1.24; extra == 'memory'
|
|
25
26
|
Provides-Extra: treesitter
|
|
26
27
|
Requires-Dist: tree-sitter-python>=0.21; extra == 'treesitter'
|
|
27
28
|
Requires-Dist: tree-sitter>=0.21; extra == 'treesitter'
|
|
@@ -55,14 +56,23 @@ The field's default is *bigger windows + summarize*. sliceagent does the opposit
|
|
|
55
56
|
alt="The core loop: a transcript agent re-sends its entire growing history every turn (208k to 1.66M tokens over 6 turns), while sliceagent rebuilds a history-bounded, task-elastic seed from the carried slice, live files, and lessons, then seals each turn to disk, and the hippocampus pages past turns back into future seeds on demand — peak input stayed ~12-15k in the s1 benchmark, 112x smaller by turn 6.">
|
|
56
57
|
</p>
|
|
57
58
|
|
|
58
|
-
sliceagent's memory is organized like a brain: fast, lossy **perception** of the live world; an elastic **working memory** for the current task; a **hippocampus** backed by always-on local artifacts; and
|
|
59
|
+
sliceagent's memory is organized like a brain: fast, lossy **perception** of the live world; an elastic **working memory** for the current task; a **hippocampus** backed by always-on local artifacts; and a typed native **neocortex** for provenance-linked USER, PROJECT, and CRAFT knowledge. Every turn *reconstructs* a history-bounded working set from these — it never replays a growing transcript. With Memem's structured-index protocol (2.10+) installed, Memem is the primary semantic retrieval backend for typed L2; it is not another brain layer or a second record authority.
|
|
59
60
|
|
|
60
61
|
| Region | Role |
|
|
61
62
|
|---|---|
|
|
62
|
-
| **Sensory cortex** — live perception | Re-derives the
|
|
63
|
-
| **Prefrontal cortex** — working memory |
|
|
64
|
-
| **Hippocampus** — episodic memory | Seals
|
|
65
|
-
| **Neocortex** — long-term memory |
|
|
63
|
+
| **Sensory cortex** — live perception | Re-derives only live resources named by the active dependency closure; unrelated repo maps, history, and memory are not eagerly injected. |
|
|
64
|
+
| **Prefrontal cortex** — working memory | Source-linked **Active Work** for genuine unresolved, cross-turn user commitments; it is not a shadow scheduler for tools or subagents. |
|
|
65
|
+
| **Hippocampus** — episodic memory | Seals every turn into the always-on local artifact store; optional child-report artifacts add re-readable locators without gating direct report delivery. |
|
|
66
|
+
| **Neocortex** — long-term memory | Stores scoped, provenance-linked USER, PROJECT, and CRAFT records in one typed model; Memem provides primary semantic retrieval when available, with native search as failover. |
|
|
67
|
+
|
|
68
|
+
The implementation contracts are documented in [End-game context design](docs/ENDGAME-CONTEXT-DESIGN.md) and
|
|
69
|
+
[Memory layers design](docs/MEMORY-LAYERS-DESIGN.md).
|
|
70
|
+
|
|
71
|
+
The exact current request is admitted once into an application event ledger and one Active Work root. Context
|
|
72
|
+
is selected from that graph's unresolved dependency closure before physical elasticity is applied. After
|
|
73
|
+
execution, the sealed turn carries a canonical receipt distinguishing requested, rejected, started, settled,
|
|
74
|
+
and applied work. A constant-size receipt projection remains visible without constructing an autobiography
|
|
75
|
+
from conversational residue.
|
|
66
76
|
|
|
67
77
|
```text
|
|
68
78
|
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
|
@@ -90,7 +100,7 @@ sliceagent's memory is organized like a brain: fast, lossy **perception** of the
|
|
|
90
100
|
live views re-derive, archived detail returns by handle.
|
|
91
101
|
```
|
|
92
102
|
|
|
93
|
-
Each turn faults in what the active task references — the carried slice, live views, selected artifacts, and
|
|
103
|
+
Each turn faults in what the active task references — the carried slice, live views, selected artifacts, and applicable typed USER, PROJECT, or CRAFT knowledge — and hands the model an elastic **Seed**. The model acts; observations fold back into working memory; at the turn boundary the episode is sealed into an immutable local artifact and the next checkpoint is published. Qualifying evidence may then consolidate into a native typed lesson; optional semantic retrieval may index it but is not required. Net effect: **for stable active task state, context does not grow merely with session age; it can still expand with genuine task complexity.**
|
|
94
104
|
|
|
95
105
|
## Benchmark
|
|
96
106
|
|
|
@@ -180,7 +190,7 @@ Per turn (mean of 3 runs) — the orchestrator's context is what caps how large
|
|
|
180
190
|
| 5 · follow-up | 41,447 | 338,507 |
|
|
181
191
|
| 6 · follow-up | 31,963 | 362,595 |
|
|
182
192
|
|
|
183
|
-
In these runs, sliceagent's orchestrator peak stayed roughly flat because
|
|
193
|
+
In these runs, sliceagent's orchestrator peak stayed roughly flat because it carried child results rather than child trajectories; its largest single request averaged **~17k** across the six-turn workload. A transcript orchestrator **re-carries the whole session every turn**, so the same delegation-heavy session reached a **~21× larger orchestrator peak and ~3.7× more total tokens** once both agents' children were counted. Parent context does not grow with child trajectory length, though it may still grow when more delegated results are genuinely relevant. Delegation is table stakes; the architectural advantage is direct child outcomes, optional re-readable artifacts, and a history-bounded parent.
|
|
184
194
|
|
|
185
195
|
*N = 3 runs, single model, one opponent, needs the Codex CLI installed. A value-recall sub-check varied wildly run-to-run (sliceagent 1–3 / 3, Codex 0–2 / 3) — it turns on a behavioral re-read choice, so it is within noise and **not** part of the claim. The defensible result is the orchestrator-context and total-token gap, which is structural and held across all three runs (orchestrator 8.8–14.3×, total 3.2–4.3×).*
|
|
186
196
|
|
|
@@ -257,14 +267,42 @@ pipx install "sliceagent[tui]" # pipx
|
|
|
257
267
|
pip install "sliceagent[tui]" # plain pip (use a venv)
|
|
258
268
|
```
|
|
259
269
|
|
|
270
|
+
Native evidence, Active Work, history, and typed knowledge are included in the base install. The
|
|
271
|
+
`sliceagent[tui,memory]` extra adds optional Memem; when its structured-index protocol is available (Memem 2.10+),
|
|
272
|
+
SliceAgent uses it as primary L2 retrieval and falls back to native search on a whole-query failure. Older Memem
|
|
273
|
+
versions are reported as unavailable for this protocol rather than used as an unscoped recall tail. Typed record
|
|
274
|
+
truth and `@sliceagent/` durability remain available without it.
|
|
275
|
+
|
|
260
276
|
If `pip` refuses with `Requires-Python >=3.11`: `conda create -n sliceagent python=3.12 -y && conda activate sliceagent`, then pip install. Prefer env vars over the wizard? Export **both** `LLM_API_KEY` and `AGENT_MODEL` (plus `LLM_BASE_URL` for non-OpenAI endpoints). `ripgrep` is recommended (code search degrades gracefully without it).
|
|
261
277
|
</details>
|
|
262
278
|
|
|
263
|
-
|
|
279
|
+
### Updating
|
|
280
|
+
|
|
281
|
+
For installs created by the one-line installer:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
sliceagent update
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
The command updates only when it can positively identify SliceAgent's isolated `uv` tool environment;
|
|
288
|
+
it never replaces an editable checkout or guesses at a manager-owned environment. On Windows, exit
|
|
289
|
+
SliceAgent and follow the external process guidance it prints. If your installed version predates
|
|
290
|
+
`sliceagent update`, re-run the one-line installer; the installer is deliberately safe to re-run.
|
|
291
|
+
|
|
292
|
+
Self-managed installs stay self-managed: `uv tool upgrade sliceagent`, `pipx upgrade sliceagent`, or
|
|
293
|
+
`python -m pip install --upgrade "sliceagent[tui]"` (or `sliceagent[tui,memory]` when using Memem). Source checkouts should pull first, then run
|
|
294
|
+
`uv sync --all-extras`.
|
|
295
|
+
|
|
296
|
+
Footprint is light (no torch), and `pip install -e .` works for a clone. Distribution is currently through
|
|
297
|
+
the one-line installers and PyPI; no Homebrew formula or prebuilt SliceAgent container image is advertised.
|
|
298
|
+
Docker is available separately as the optional POSIX/WSL2 command-sandbox backend. → Full walkthrough in
|
|
299
|
+
**[QUICKSTART.md](QUICKSTART.md)**.
|
|
264
300
|
|
|
265
301
|
## Usage
|
|
266
302
|
|
|
267
|
-
Run `sliceagent` in your project and type what you want in plain language. It rebuilds its working context,
|
|
303
|
+
Run `sliceagent` in your project and type what you want in plain language. It rebuilds its working context,
|
|
304
|
+
investigates, edits, and can run your tests to verify. Ordinary requested work proceeds without permission
|
|
305
|
+
prompts; only a narrow high-confidence catastrophic-command safeguard can refuse execution. A turn looks like:
|
|
268
306
|
|
|
269
307
|
```text
|
|
270
308
|
❯ why does retry_with_backoff drop the last attempt? fix it
|
|
@@ -275,12 +313,14 @@ Run `sliceagent` in your project and type what you want in plain language. It re
|
|
|
275
313
|
◌ 2/3 add a regression test · Running pytest -q · 00:12
|
|
276
314
|
│ run pytest -q
|
|
277
315
|
│ 38 passed
|
|
278
|
-
│
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
316
|
+
│ agent note · The focused regression now passes.
|
|
317
|
+
─ assistant ───────────────────────────────────────────────
|
|
318
|
+
|
|
319
|
+
The loop exits on `attempt == max` before the final
|
|
320
|
+
sleep+retry, so the last attempt never runs. Changed the
|
|
321
|
+
bound to `attempt <= max` and added a regression test.
|
|
322
|
+
|
|
323
|
+
───────────────────────────────────────────────────────────
|
|
284
324
|
✓ turn saved · plan 3/3 · 2 passes · 4 read · 1 edit · 1 cmd · 00:18
|
|
285
325
|
```
|
|
286
326
|
|
|
@@ -290,54 +330,81 @@ Attach a file or path to your message with `@`: `@src/errors.py explain the back
|
|
|
290
330
|
|
|
291
331
|
| Command | What it does |
|
|
292
332
|
|---|---|
|
|
293
|
-
| `/config` · `/model`
|
|
294
|
-
|
|
|
295
|
-
| `/
|
|
296
|
-
| `/cwd [path]` | show the fixed workspace root; with a path, show where to relaunch |
|
|
333
|
+
| `/config` · `/model` | add/switch providers · switch model / reasoning effort (persists) |
|
|
334
|
+
| `Esc` | revert the last edit(s) |
|
|
335
|
+
| `/cwd [path]` | show the workspace; with a path, atomically switch it without restarting the UI or model client |
|
|
297
336
|
| `/cost` | tokens and estimated $ spent this session |
|
|
298
337
|
| `/skills` · `/tools` · `/mcp` · `/plugins` · `/agents` | list what's available to the agent |
|
|
299
338
|
| `/threads` · `/resume` | switch between, or resume, parked topics |
|
|
300
339
|
| `/learn <note>` | save a durable lesson yourself |
|
|
301
340
|
| `/plan` | show the current task plan |
|
|
341
|
+
| `/update` | show the safe process-boundary update command |
|
|
302
342
|
| `Ctrl-C` · `exit` | interrupt the turn · quit |
|
|
303
343
|
|
|
344
|
+
Public `/` palette: `/config` · `/model` · `/cwd` · `/learn` · `/plan` · `/cost` · `/update` · `/threads` · `/resume` · `/plugins` · `/mcp` · `/skills` · `/tools` · `/agents` · `/help` · `/exit`.
|
|
345
|
+
The typed compatibility aliases `/reasoning`, `/undo`, and `/switch` remain accepted, but stay out of the
|
|
346
|
+
palette because `/model`, Esc, and `/resume` are their clearer public spellings.
|
|
347
|
+
|
|
348
|
+
File mentions accept exact workspace paths such as `@app/jobs/[id]/page.tsx`; quote paths containing spaces,
|
|
349
|
+
for example `@"docs/my guide.md"`.
|
|
350
|
+
|
|
304
351
|
Prefix an unrelated request with `New task:` to start it with fresh task state while parking the current task
|
|
305
352
|
for `/resume`. Ambiguous follow-ups deliberately continue the active task so context is never discarded on a
|
|
306
353
|
guess.
|
|
307
354
|
|
|
308
|
-
It can edit code
|
|
355
|
+
It can edit code in the primary workspace and grounded focus roots (reversible with `/undo`), run regular shell commands through a sandbox (`local` by default, `docker` for container isolation on POSIX/WSL2), search the tree and the web, and delegate decomposable research to a fresh one-shot read-only explorer (each child gets its own history-bounded, task-elastic slice). Native Windows uses the local backend; run SliceAgent inside WSL2 if you want the Docker backend. That narrow surface is the demo default. Set `AGENT_ADVANCED_AGENTS=1` to expose writable and named specialist delegation (and nested delegation when `AGENT_SUBAGENT_DEPTH` is raised above its default of `1`), or `AGENT_ADVANCED_TOOLS=1` to expose persistent process and interactive terminal tools. The flags are independent. Ordinary work runs directly from the user's request; the host retains only a narrow safeguard against high-confidence catastrophic shell commands. Secrets are scrubbed from anything persisted or logged.
|
|
309
356
|
|
|
310
|
-
Every clean or interrupted agent task turn
|
|
357
|
+
Every clean or interrupted agent task turn is sealed into the always-on local artifact/checkpoint path.
|
|
358
|
+
Subagent reports return directly to the parent in launch order; when optional artifact persistence succeeds,
|
|
359
|
+
they also gain durable re-readable locators. The model reads exact evidence, project history, Active Work, and
|
|
360
|
+
typed knowledge through the permanent read-only `@sliceagent/` namespace in every workspace.
|
|
361
|
+
`@sliceagent/memory/status.md` is the bounded general summary; raw host-counted inventory lives separately at
|
|
362
|
+
`@sliceagent/memory/diagnostics.md` for explicit diagnostic requests. Compatibility counts are not layer sizes
|
|
363
|
+
or an L2 backlog. Memem is primary semantic retrieval when enabled; task recovery and typed record truth do
|
|
364
|
+
not depend on it.
|
|
311
365
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
366
|
+
Automatic knowledge push is lifecycle- and revision-aware: stale or dependency-drifted PROJECT observations and
|
|
367
|
+
resolved diagnostic reports remain explicitly searchable, but do not reappear as if they described the current
|
|
368
|
+
workspace. USER preferences and reusable CRAFT procedures do not decay merely because time passed.
|
|
369
|
+
|
|
370
|
+
If a timeout or disconnect leaves an operation's side effects uncertain, SliceAgent records that uncertainty
|
|
371
|
+
durably and shows it to the model as grounding on later turns. It can re-observe relevant live state before
|
|
372
|
+
making claims, but the receipt does not block ordinary work, task switching, undo, or workspace navigation.
|
|
373
|
+
Ambiguous recovery journals still stop startup before plugins or MCP processes run because that boundary
|
|
374
|
+
protects the integrity of the durable local store rather than interpreting user intent.
|
|
317
375
|
|
|
318
376
|
**Configuration.** `sliceagent config --list` prints every setting. Set them persistently in `~/.sliceagent/config.toml` (written by `init`), or override any one via an environment variable:
|
|
319
377
|
|
|
320
378
|
| Setting | Default | Purpose |
|
|
321
379
|
|---|---|---|
|
|
322
380
|
| `AGENT_MODEL` | *(required)* | the model id to run |
|
|
323
|
-
| `
|
|
324
|
-
| `AGENT_SANDBOX` | `local` | `local` or `docker` (isolated) |
|
|
381
|
+
| `AGENT_SANDBOX` | `local` | `local`, or `docker` on POSIX/WSL2 (native Windows: use `local` or run under WSL2) |
|
|
325
382
|
| `AGENT_MAX_STEPS` | `60` | per-turn step ceiling |
|
|
326
383
|
| `AGENT_CONTEXT_WINDOW` | *(catalog or unset)* | explicit provider window for strict per-call preflight; unknown models otherwise use compatibility mode |
|
|
327
384
|
| `AGENT_ADVANCED_AGENTS` | *(off)* | enable writable and named specialists; unlock the nested surface subject to the depth ceiling |
|
|
328
385
|
| `AGENT_SUBAGENT_DEPTH` | `1` | delegation depth ceiling; raise it to permit nested advanced agents |
|
|
386
|
+
| `AGENT_DELEGATION_TIMEOUT` | `900` | hard ceiling in seconds for one child-agent wave; raise for unusually slow providers |
|
|
387
|
+
| `AGENT_EXPLORER_REASONING` | `staged` | fast evidence navigation followed by one full, tool-free final synthesis (`fast`/`full` are single-stage overrides) |
|
|
388
|
+
| `AGENT_EXPLORER_NAV_STEPS` | `6` | fast-navigation model-step ceiling for staged explorers; one separate synthesis step stays reserved |
|
|
389
|
+
| `LLM_HARD_TIMEOUT_SEC` | *(completion-budget derived)* | absolute per-call watchdog; provider-agnostic default allows the configured completion cap at a conservative generation rate (minimum 180s) |
|
|
390
|
+
| `LLM_STREAM_CLOSE_GRACE_SEC` | `2` | bounded wait to prove a cancelled/timed-out SSE request physically closed before any retry |
|
|
391
|
+
| `LLM_PROVIDER_MAX_INFLIGHT` | `4` | process-wide physical request cap per provider account; indeterminate calls hold their slot until the transport closes |
|
|
329
392
|
| `AGENT_ADVANCED_TOOLS` | *(off)* | enable persistent process and interactive terminal tools |
|
|
330
393
|
| `SLICEAGENT_CACHE_DIR` | `~/.sliceagent` | always-on local checkpoints, immutable artifacts, and recovery journals |
|
|
331
|
-
| `SLICEAGENT_VAULT` | `~/.sliceagent/vault` |
|
|
394
|
+
| `SLICEAGENT_VAULT` | `~/.sliceagent/vault` | legacy episodic/task/roster compatibility records (not canonical typed L2) |
|
|
332
395
|
| `AGENT_VERIFY_CMD` | *(unset)* | test command used as the verification oracle |
|
|
333
396
|
|
|
397
|
+
DeepSeek official-API configurations should move from the retiring `deepseek-chat` / `deepseek-reasoner`
|
|
398
|
+
aliases to `deepseek-v4-flash` or `deepseek-v4-pro`. SliceAgent keeps the old names temporarily compatible,
|
|
399
|
+
but new provider setup and model suggestions use the V4 names.
|
|
400
|
+
|
|
334
401
|
## License
|
|
335
402
|
|
|
336
403
|
**MIT** — see [LICENSE](LICENSE). Third-party components and their licenses are listed in [NOTICE](NOTICE). Security policy + threat model: **[SECURITY.md](SECURITY.md)**.
|
|
337
404
|
|
|
338
405
|
## Acknowledgements
|
|
339
406
|
|
|
340
|
-
sliceagent's design was informed by two excellent open-source agents: **[Hermes](https://github.com/NousResearch/hermes)** (MIT) and **[Kimi Code](https://github.com/MoonshotAI/kimi-code)**. A few peripheral utilities are ported from Hermes (see [NOTICE](NOTICE)); most of the rest are patterns we studied and reimplemented on our own terms.
|
|
407
|
+
sliceagent's design was informed by two excellent open-source agents: **[Hermes Agent](https://github.com/NousResearch/hermes-agent)** (MIT) and **[Kimi Code](https://github.com/MoonshotAI/kimi-code)**. A few peripheral utilities are ported from Hermes (see [NOTICE](NOTICE)); most of the rest are patterns we studied and reimplemented on our own terms. [memem](https://github.com/TT-Wang/memem) provides primary semantic retrieval for SliceAgent-owned typed L2 knowledge when the memory extra is installed. Its value/primary-index/cue representation was also informed by Microsoft [Memora](https://github.com/microsoft/Memora) (MIT). Neither is another brain layer, and local artifacts and recovery do not depend on them. With thanks to their authors.
|
|
341
408
|
|
|
342
409
|
## Contact
|
|
343
410
|
|