sliceagent 0.1.18__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.1.18 → sliceagent-0.3.0}/.env.example +11 -5
- sliceagent-0.3.0/.github/workflows/publish.yml +67 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.gitignore +22 -4
- {sliceagent-0.1.18 → sliceagent-0.3.0}/CHANGELOG.md +216 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/NOTICE +2 -2
- sliceagent-0.3.0/PKG-INFO +411 -0
- sliceagent-0.3.0/QUICKSTART.md +124 -0
- sliceagent-0.3.0/README.md +378 -0
- sliceagent-0.3.0/SECURITY.md +43 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/README.md +14 -1
- sliceagent-0.3.0/benchmarks/provider_concurrency_probe.py +134 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/run.py +48 -11
- sliceagent-0.3.0/benchmarks/subagent_fanout.py +725 -0
- 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.1.18 → sliceagent-0.3.0}/install.ps1 +70 -8
- {sliceagent-0.1.18 → sliceagent-0.3.0}/install.sh +27 -3
- {sliceagent-0.1.18 → sliceagent-0.3.0}/pyproject.toml +11 -9
- {sliceagent-0.1.18 → sliceagent-0.3.0}/sliceagent.toml.example +5 -6
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/__init__.py +1 -1
- sliceagent-0.3.0/src/sliceagent/active_work.py +1087 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/agents.py +26 -9
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/background_review.py +36 -22
- sliceagent-0.3.0/src/sliceagent/cli.py +2656 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/code_grep.py +55 -63
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/code_index.py +1 -1
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/config.py +22 -18
- sliceagent-0.3.0/src/sliceagent/context.py +380 -0
- sliceagent-0.3.0/src/sliceagent/context_compiler.py +355 -0
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/src/sliceagent/envspec.py +42 -15
- 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.3.0/src/sliceagent/execution.py +417 -0
- sliceagent-0.3.0/src/sliceagent/fan_in.py +585 -0
- sliceagent-0.3.0/src/sliceagent/guidance.py +28 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/hippocampus.py +362 -132
- 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.1.18 → sliceagent-0.3.0}/src/sliceagent/interfaces.py +60 -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.1.18 → sliceagent-0.3.0}/src/sliceagent/mcp_client.py +117 -28
- sliceagent-0.3.0/src/sliceagent/memory.py +1452 -0
- sliceagent-0.3.0/src/sliceagent/mentions.py +126 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/model_catalog.py +11 -3
- sliceagent-0.3.0/src/sliceagent/model_runner.py +61 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/monitor.py +59 -17
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/neocortex.py +39 -42
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/onboarding.py +24 -26
- sliceagent-0.3.0/src/sliceagent/oracle.py +53 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/pagetable.py +47 -33
- sliceagent-0.3.0/src/sliceagent/persistence.py +1430 -0
- sliceagent-0.3.0/src/sliceagent/pfc.py +468 -0
- sliceagent-0.3.0/src/sliceagent/platform_compat.py +381 -0
- sliceagent-0.3.0/src/sliceagent/plugins.py +216 -0
- sliceagent-0.3.0/src/sliceagent/private_state.py +118 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/procman.py +40 -26
- 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.1.18 → sliceagent-0.3.0}/src/sliceagent/records.py +11 -4
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/recovery.py +32 -8
- sliceagent-0.3.0/src/sliceagent/regions.py +1855 -0
- sliceagent-0.3.0/src/sliceagent/registry.py +337 -0
- sliceagent-0.3.0/src/sliceagent/runtime_persistence.py +1708 -0
- sliceagent-0.3.0/src/sliceagent/safeguards.py +871 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/safety.py +76 -18
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/sandbox.py +57 -7
- sliceagent-0.3.0/src/sliceagent/scheduler.py +901 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/search_index.py +29 -15
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/seed.py +170 -61
- sliceagent-0.3.0/src/sliceagent/session.py +525 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/skill_usage.py +10 -1
- {sliceagent-0.1.18 → 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.3.0/src/sliceagent/slice_state.py +289 -0
- sliceagent-0.3.0/src/sliceagent/subagent.py +2770 -0
- sliceagent-0.3.0/src/sliceagent/subagent_contract.py +1110 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/swap.py +2 -1
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/taskstate.py +49 -3
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/telemetry.py +17 -6
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/terminal.py +48 -35
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/text_utils.py +3 -1
- sliceagent-0.3.0/src/sliceagent/tool_identity.py +24 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/tools.py +694 -101
- 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.1.18 → 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.3.0/src/sliceagent/workspace_revision.py +117 -0
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_agents.py +20 -9
- sliceagent-0.3.0/tests/test_artifact_federation.py +79 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_ask_echo.py +3 -14
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_ask_user.py +1 -59
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_background_review.py +24 -0
- sliceagent-0.3.0/tests/test_benchmark_runner.py +164 -0
- sliceagent-0.3.0/tests/test_block_rendering.py +148 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bound_is_relevance.py +7 -8
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_breadth_e2e.py +1 -1
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_2b.py +8 -8
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_current_request.py +7 -5
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_memory_wave.py +41 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_p0a.py +2 -2
- 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.1.18 → sliceagent-0.3.0}/tests/test_bugfix_subagent_wave.py +3 -3
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_tools_wave.py +10 -10
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bughunt_fixes.py +178 -196
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_code_grep.py +73 -41
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_config_journey.py +34 -13
- {sliceagent-0.1.18 → 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.3.0/tests/test_context_elasticity.py +521 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_context_overflow.py +13 -0
- sliceagent-0.3.0/tests/test_contextfs.py +592 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_conversation.py +15 -1
- 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.1.18 → sliceagent-0.3.0}/tests/test_echo_before_blocking.py +14 -1
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_episode.py +70 -2
- sliceagent-0.3.0/tests/test_errors_backoff.py +281 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_esc_sentinel.py +18 -14
- sliceagent-0.3.0/tests/test_event_dispatch.py +63 -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.3.0/tests/test_extreview_fixes.py +114 -0
- sliceagent-0.3.0/tests/test_fan_in.py +308 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_file_lock.py +2 -2
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_guidance.py +3 -32
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_history.py +57 -0
- sliceagent-0.3.0/tests/test_identity.py +64 -0
- sliceagent-0.3.0/tests/test_intent_state.py +569 -0
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_loop_overflow.py +205 -37
- {sliceagent-0.1.18 → 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.3.0/tests/test_model_call_observability.py +340 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_monitor.py +62 -1
- sliceagent-0.3.0/tests/test_observation_repeat_advisory.py +149 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_onboarding.py +7 -2
- sliceagent-0.3.0/tests/test_persistence_protocol.py +385 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_pinned_composer.py +35 -2
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_procman.py +19 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_product_features.py +88 -19
- sliceagent-0.3.0/tests/test_progress_status.py +202 -0
- sliceagent-0.3.0/tests/test_projection_truth.py +788 -0
- sliceagent-0.3.0/tests/test_prompt_kernel.py +105 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_provenance.py +44 -10
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_proxy_interrupt.py +41 -1
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_records.py +44 -2
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_reliability.py +224 -73
- sliceagent-0.3.0/tests/test_requirements.py +240 -0
- sliceagent-0.3.0/tests/test_review_deliverable.py +280 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_route_lexical.py +10 -5
- sliceagent-0.3.0/tests/test_runtime_boundaries.py +257 -0
- sliceagent-0.3.0/tests/test_runtime_persistence.py +1368 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_safety.py +28 -0
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_selfreview_fixes.py +9 -29
- sliceagent-0.3.0/tests/test_slice_lifecycle.py +173 -0
- sliceagent-0.3.0/tests/test_slice_reducer.py +217 -0
- sliceagent-0.3.0/tests/test_steered_status.py +183 -0
- {sliceagent-0.1.18 → 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.3.0/tests/test_subagent_review_fixes.py +102 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_subagent_roster.py +93 -43
- 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.1.18 → sliceagent-0.3.0}/tests/test_task_state_roundtrip.py +10 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_telemetry_convergence.py +15 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_tool_dedup.py +10 -7
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_tools_robust.py +6 -5
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_topic_switch.py +59 -2
- sliceagent-0.3.0/tests/test_trajectory.py +124 -0
- sliceagent-0.3.0/tests/test_tui.py +496 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_tui_menus.py +2 -2
- sliceagent-0.3.0/tests/test_tui_render.py +428 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_tui_widgets.py +20 -5
- {sliceagent-0.1.18 → 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.1.18 → sliceagent-0.3.0}/tests/test_web.py +37 -0
- {sliceagent-0.1.18 → 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_revision.py +83 -0
- sliceagent-0.3.0/tests/test_workspace_switch.py +1257 -0
- sliceagent-0.3.0/uv.lock +1489 -0
- sliceagent-0.1.18/.github/workflows/publish.yml +0 -36
- sliceagent-0.1.18/PKG-INFO +0 -295
- sliceagent-0.1.18/QUICKSTART.md +0 -83
- sliceagent-0.1.18/README.md +0 -263
- sliceagent-0.1.18/SECURITY.md +0 -37
- sliceagent-0.1.18/src/sliceagent/cli.py +0 -1004
- sliceagent-0.1.18/src/sliceagent/errors.py +0 -167
- sliceagent-0.1.18/src/sliceagent/events.py +0 -96
- sliceagent-0.1.18/src/sliceagent/guardrails.py +0 -438
- sliceagent-0.1.18/src/sliceagent/guidance.py +0 -69
- sliceagent-0.1.18/src/sliceagent/hooks.py +0 -338
- sliceagent-0.1.18/src/sliceagent/llm.py +0 -768
- sliceagent-0.1.18/src/sliceagent/loop.py +0 -556
- sliceagent-0.1.18/src/sliceagent/memory.py +0 -454
- sliceagent-0.1.18/src/sliceagent/oracle.py +0 -38
- sliceagent-0.1.18/src/sliceagent/pfc.py +0 -447
- sliceagent-0.1.18/src/sliceagent/platform_compat.py +0 -188
- sliceagent-0.1.18/src/sliceagent/plugins.py +0 -127
- sliceagent-0.1.18/src/sliceagent/policy.py +0 -258
- sliceagent-0.1.18/src/sliceagent/prompt.py +0 -273
- sliceagent-0.1.18/src/sliceagent/regions.py +0 -710
- sliceagent-0.1.18/src/sliceagent/registry.py +0 -128
- sliceagent-0.1.18/src/sliceagent/scheduler.py +0 -92
- sliceagent-0.1.18/src/sliceagent/session.py +0 -224
- sliceagent-0.1.18/src/sliceagent/subagent.py +0 -599
- sliceagent-0.1.18/src/sliceagent/tui.py +0 -1504
- sliceagent-0.1.18/tests/test_bugfix_p0c.py +0 -85
- sliceagent-0.1.18/tests/test_bugfix_selfreview_siblings.py +0 -83
- sliceagent-0.1.18/tests/test_cli_smoke.py +0 -162
- sliceagent-0.1.18/tests/test_errors_backoff.py +0 -107
- sliceagent-0.1.18/tests/test_guardrails.py +0 -283
- sliceagent-0.1.18/tests/test_live_composer.py +0 -182
- sliceagent-0.1.18/tests/test_llm_streaming.py +0 -320
- sliceagent-0.1.18/tests/test_llm_watchdog.py +0 -99
- sliceagent-0.1.18/tests/test_mcp_runtime.py +0 -75
- sliceagent-0.1.18/tests/test_permission_patterns.py +0 -78
- sliceagent-0.1.18/tests/test_progress_status.py +0 -96
- sliceagent-0.1.18/tests/test_readonly_subagent.py +0 -282
- sliceagent-0.1.18/tests/test_requirements.py +0 -156
- sliceagent-0.1.18/tests/test_slice_lifecycle.py +0 -87
- sliceagent-0.1.18/tests/test_trajectory.py +0 -287
- sliceagent-0.1.18/tests/test_tui.py +0 -133
- sliceagent-0.1.18/tests/test_tui_render.py +0 -120
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.dockerignore +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.github/dependabot.yml +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/.github/workflows/ci.yml +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/CONTRIBUTING.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/Dockerfile +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/LICENSE +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/assets/sliceagent-core-loop.gif +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/meta.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/prompts.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/reference_fix.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/setup.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s1_longhorizon_debug/verify.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/meta.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/prompts.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/reference_fix.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/setup.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s2_taskdag_scheduler/verify.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/meta.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/prompts.json +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/reference_fix.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/setup.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/benchmarks/multiturn_coding/s3_intervalset_algebra/verify.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/examples/plugins/hello/__init__.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/examples/plugins/hello/plugin.toml +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/scripts/check_windows_footguns.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/scripts/gen_config_reference.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/scripts/run_tests.sh +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/__main__.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/access.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/binsniff.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/clock.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/finding_types.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/flags.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/fuzzy.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/mcp_security.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/metrics.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/retriever.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/sensory_cortex.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/skill_provenance.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/subdir_hints.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/src/sliceagent/tool_summary.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/README.md +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_binary_view.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_breadth_wave.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_linenum.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_loop_wave.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_p0b.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_selfreview.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_skills_h1.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_bugfix_slice_wave.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_checkpoint.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_closure.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_code_index.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_config_docs_current.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_coresidency.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_exec_env.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_finding_types.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_flags.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_fuzzy.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_ghost_index.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_llm_cache.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_llm_usage_cache.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_log_redaction.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_memory.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_memory_persist.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_menu_select.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_metrics.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_mining.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_model_catalog.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_model_identity.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_pageout_compaction.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_plan_tier.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_prompt_ab.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_provider_lineup.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_recall_search.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_refault.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_registry_validation.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_repo_map_bounded.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_review_fixes.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_seal_markdown.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_skill_meta.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_skill_metadata.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_subdir_hints.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_task_agnostic.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_terminal.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_tool_result_ok.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_verification_agent.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_workspace.py +0 -0
- {sliceagent-0.1.18 → sliceagent-0.3.0}/tests/test_world_region.py +0 -0
- {sliceagent-0.1.18 → 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
|
|
@@ -27,6 +27,9 @@ scratch/
|
|
|
27
27
|
evals/prompt_ab/variants/
|
|
28
28
|
evals/prompt_ab/runs/
|
|
29
29
|
|
|
30
|
+
# internal design doc — kept local, not published to the repo or the sdist
|
|
31
|
+
CORE-DESIGN.md
|
|
32
|
+
|
|
30
33
|
# local sliceagent state / monitor runtime (personal; not part of the repo)
|
|
31
34
|
.sliceagent/
|
|
32
35
|
.memagent/ # legacy pre-rename state dir (ignore so an upgraded checkout stays clean)
|
|
@@ -44,10 +47,20 @@ runs/
|
|
|
44
47
|
*.pdf
|
|
45
48
|
|
|
46
49
|
# ── internal-only: untracked 2026-07-02 for the public launch (files stay on disk locally) ──
|
|
47
|
-
# 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.
|
|
48
52
|
# prototype/ = superseded ~250-line JS proof-of-concept (its own README: "not the production codebase")
|
|
49
53
|
# docs/STEP3-PLAN.md, docs/MEMEM-DIAGNOSIS.md = internal R&D planning notes, not user docs
|
|
50
|
-
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
|
|
51
64
|
prototype/
|
|
52
65
|
docs/STEP3-PLAN.md
|
|
53
66
|
docs/MEMEM-DIAGNOSIS.md
|
|
@@ -55,8 +68,13 @@ docs/MEMEM-DIAGNOSIS.md
|
|
|
55
68
|
# internal engineering roadmap (wave planning), not product docs — untracked 2026-07-02
|
|
56
69
|
ROADMAP.md
|
|
57
70
|
|
|
58
|
-
#
|
|
59
|
-
|
|
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
|
|
60
78
|
|
|
61
79
|
# ColBench raw HF dataset (huge; selected tasks are committed under evals/colbench/tasks/)
|
|
62
80
|
evals/colbench/data/
|
|
@@ -5,6 +5,222 @@ 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
|
+
|
|
182
|
+
## [0.2.0] — 2026-07-10
|
|
183
|
+
|
|
184
|
+
A typed re-architecture of the core around a single canonical design (elastic slice, execution kernel,
|
|
185
|
+
crash-safe persistence), plus a rebuilt Rich TUI. No change to the thesis — same history-bounded,
|
|
186
|
+
task-elastic slice — but the invariants are now enforced by typed subsystems rather than convention.
|
|
187
|
+
|
|
188
|
+
### Added
|
|
189
|
+
- **Typed core kernel.** The active slice is split into typed semantic regions (intent, task, evidence,
|
|
190
|
+
working set, continuity, turn runtime), each owning its own seal/reset lifecycle, replacing the flat
|
|
191
|
+
field-classification table. A provenance-tagged **intent ledger** captures verbatim user directives with
|
|
192
|
+
their source handles, deterministically promotes explicit constraint language (`must`/`never`/`only`),
|
|
193
|
+
and records supersession/satisfaction as explicit transitions.
|
|
194
|
+
- **Execution kernel.** Structured tool outcomes (succeeded/failed/cancelled/**indeterminate**), ordered
|
|
195
|
+
read/write waves (pure reads parallel, effects as barriers), reconciliation gates that block dependent
|
|
196
|
+
actions after an unprovable outcome, and one capacity-preflighted model-call path.
|
|
197
|
+
- **Crash-safe persistence.** A pending-journal → immutable-artifact → checkpoint compare-and-swap commit
|
|
198
|
+
order with idempotent replay, a full error taxonomy, and an OS-backed workspace lease, so an interrupted
|
|
199
|
+
turn resumes without re-running side effects. Dependency-scoped workspace revisions stale only the claims
|
|
200
|
+
whose inputs actually changed.
|
|
201
|
+
- **Rebuilt TUI.** A single `TurnProgress` event reducer folds loop events into an immutable snapshot;
|
|
202
|
+
the renderer projects that snapshot (semantic tool buckets, bounded plan/tally, width-responsive
|
|
203
|
+
diagnostics, one live-status owner) instead of interpreting events independently.
|
|
204
|
+
|
|
205
|
+
### Changed
|
|
206
|
+
- Elastic residency is centralized: a pressure controller chooses graded fidelity globally
|
|
207
|
+
(full → excerpt → digest → locator) so no region can consume the window unnoticed.
|
|
208
|
+
- Per-turn cost framing corrected throughout the docs to **history-bounded, task-elastic** — bounded with
|
|
209
|
+
respect to session length, not a fixed size regardless of task breadth.
|
|
210
|
+
|
|
211
|
+
### Fixed
|
|
212
|
+
- **Intent ledger and progress signals no longer lost on resume.** Checkpoint state is deep-frozen on
|
|
213
|
+
write; the resume and crash-recovery paths now thaw it fully at the boundary (and the deserializers
|
|
214
|
+
accept any `Mapping`), so binding user directives and their provenance survive a restart instead of
|
|
215
|
+
being silently dropped.
|
|
216
|
+
- **A completed first-turn objective no longer stays pinned as a mandatory, un-pageable block** — a clean
|
|
217
|
+
turn with no unresolved state marks it pageable background; unresolved state or explicit continuation
|
|
218
|
+
keeps it active.
|
|
219
|
+
- Security/reliability hardening from external review: WAL/recovery redacts tool-call arguments; process
|
|
220
|
+
kill reaps the whole spawn-captured process group; `code_review` and the read-only git policy refuse
|
|
221
|
+
external-diff/textconv and config injection; subagent children charge their tokens to the parent budget,
|
|
222
|
+
stay isolated from the parent's private state, and write durable state 0600/0700.
|
|
223
|
+
|
|
8
224
|
## [0.1.18] — 2026-07-09
|
|
9
225
|
|
|
10
226
|
### Added
|
|
@@ -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).
|