millrace-ai 0.1.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.
- millrace_ai-0.1.0/PKG-INFO +267 -0
- millrace_ai-0.1.0/README.md +252 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/PKG-INFO +267 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/SOURCES.txt +250 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/dependency_links.txt +1 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/entry_points.txt +2 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/requires.txt +9 -0
- millrace_ai-0.1.0/millrace_ai.egg-info/top_level.txt +1 -0
- millrace_ai-0.1.0/millrace_engine/__init__.py +7 -0
- millrace_ai-0.1.0/millrace_engine/__main__.py +9 -0
- millrace_ai-0.1.0/millrace_engine/adapters/__init__.py +1 -0
- millrace_ai-0.1.0/millrace_engine/adapters/control_mailbox.py +155 -0
- millrace_ai-0.1.0/millrace_engine/adapters/file_watcher.py +422 -0
- millrace_ai-0.1.0/millrace_engine/assets/ADVISOR.md +163 -0
- millrace_ai-0.1.0/millrace_engine/assets/OPERATOR_GUIDE.md +289 -0
- millrace_ai-0.1.0/millrace_engine/assets/README.md +252 -0
- millrace_ai-0.1.0/millrace_engine/assets/__init__.py +1 -0
- millrace_ai-0.1.0/millrace_engine/assets/docs/RUNTIME_DEEP_DIVE.md +1425 -0
- millrace_ai-0.1.0/millrace_engine/assets/docs/TUI_DOCUMENTATION.md +803 -0
- millrace_ai-0.1.0/millrace_engine/assets/manifest.json +1349 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large__1.0.0.json +424 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large__1.0.0.md +422 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large_direct_update__1.0.0.json +266 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.large_direct_update__1.0.0.md +265 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.quick_build__1.0.0.json +77 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.quick_build__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.standard__1.0.0.json +313 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/execution/execution.standard__1.0.0.md +449 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.audit__1.0.0.json +224 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.audit__1.0.0.md +224 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.goalspec__1.0.0.json +300 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.goalspec__1.0.0.md +300 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.incident__1.0.0.json +202 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/loops/research/research.incident__1.0.0.md +202 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.complex__1.0.0.json +99 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.complex__1.0.0.md +108 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.involved__1.0.0.json +99 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.involved__1.0.0.md +108 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.moderate__1.0.0.json +99 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.complexity.moderate__1.0.0.md +108 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.default__1.0.0.json +42 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/model_profiles/model.default__1.0.0.md +45 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.default_autonomous__1.0.0.json +43 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.default_autonomous__1.0.0.md +50 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large__1.0.0.json +52 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large__1.0.0.md +50 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large_direct_update__1.0.0.json +51 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.large_direct_update__1.0.0.md +50 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_audit__1.0.0.json +55 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_audit__1.0.0.md +54 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_goalspec__1.0.0.json +55 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_goalspec__1.0.0.md +54 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_incident__1.0.0.json +55 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.research_incident__1.0.0.md +54 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.standard__1.0.0.json +45 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/modes/mode.standard__1.0.0.md +50 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.builder__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.builder__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.consult__1.0.0.json +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.consult__1.0.0.md +93 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.doublecheck__1.0.0.json +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.doublecheck__1.0.0.md +93 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.hotfix__1.0.0.json +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.hotfix__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.integration__1.0.0.json +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.integration__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-execute__1.0.0.json +93 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-execute__1.0.0.md +94 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-plan__1.0.0.json +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.large-plan__1.0.0.md +92 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.qa__1.0.0.json +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.qa__1.0.0.md +93 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.reassess__1.0.0.json +94 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.reassess__1.0.0.md +94 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.refactor__1.0.0.json +95 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.refactor__1.0.0.md +95 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.troubleshoot__1.0.0.json +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.troubleshoot__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.update__1.0.0.json +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/execution.update__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-gatekeeper__1.0.0.json +88 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-gatekeeper__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-intake__1.0.0.json +88 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-intake__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-validate__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.audit-validate__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.goal-intake__1.0.0.json +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.goal-intake__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-archive__1.0.0.json +88 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-archive__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-intake__1.0.0.json +88 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-intake__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-resolve__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.incident-resolve__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.objective-profile-sync__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.objective-profile-sync__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-review__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-review__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-synthesis__1.0.0.json +90 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.spec-synthesis__1.0.0.md +91 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.taskmaster__1.0.0.json +88 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/stages/research.taskmaster__1.0.0.md +89 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/task_authoring/task_authoring.narrow__1.0.0.json +42 -0
- millrace_ai-0.1.0/millrace_engine/assets/registry/task_authoring/task_authoring.narrow__1.0.0.md +45 -0
- millrace_ai-0.1.0/millrace_engine/assets/resolver.py +285 -0
- millrace_ai-0.1.0/millrace_engine/baseline_assets.py +114 -0
- millrace_ai-0.1.0/millrace_engine/cli.py +1281 -0
- millrace_ai-0.1.0/millrace_engine/compiler.py +793 -0
- millrace_ai-0.1.0/millrace_engine/compiler_artifacts.py +249 -0
- millrace_ai-0.1.0/millrace_engine/compiler_models.py +505 -0
- millrace_ai-0.1.0/millrace_engine/compiler_rebinding.py +119 -0
- millrace_ai-0.1.0/millrace_engine/compiler_rendering.py +183 -0
- millrace_ai-0.1.0/millrace_engine/config.py +1083 -0
- millrace_ai-0.1.0/millrace_engine/contracts.py +1529 -0
- millrace_ai-0.1.0/millrace_engine/control.py +725 -0
- millrace_ai-0.1.0/millrace_engine/control_common.py +75 -0
- millrace_ai-0.1.0/millrace_engine/control_models.py +503 -0
- millrace_ai-0.1.0/millrace_engine/control_mutations.py +167 -0
- millrace_ai-0.1.0/millrace_engine/control_reports.py +540 -0
- millrace_ai-0.1.0/millrace_engine/diagnostics.py +556 -0
- millrace_ai-0.1.0/millrace_engine/engine.py +1262 -0
- millrace_ai-0.1.0/millrace_engine/events.py +251 -0
- millrace_ai-0.1.0/millrace_engine/execution_nodes.py +50 -0
- millrace_ai-0.1.0/millrace_engine/health.py +499 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture.py +125 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture_catalog.py +223 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture_common.py +385 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture_loop_contracts.py +234 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture_profile_contracts.py +213 -0
- millrace_ai-0.1.0/millrace_engine/loop_architecture_stage_contracts.py +524 -0
- millrace_ai-0.1.0/millrace_engine/markdown.py +105 -0
- millrace_ai-0.1.0/millrace_engine/materialization.py +905 -0
- millrace_ai-0.1.0/millrace_engine/materialization_merge.py +149 -0
- millrace_ai-0.1.0/millrace_engine/materialization_models.py +250 -0
- millrace_ai-0.1.0/millrace_engine/materialization_provenance.py +69 -0
- millrace_ai-0.1.0/millrace_engine/paths.py +196 -0
- millrace_ai-0.1.0/millrace_engine/planes/__init__.py +1 -0
- millrace_ai-0.1.0/millrace_engine/planes/base.py +25 -0
- millrace_ai-0.1.0/millrace_engine/planes/execution.py +1357 -0
- millrace_ai-0.1.0/millrace_engine/planes/execution_recovery.py +348 -0
- millrace_ai-0.1.0/millrace_engine/planes/execution_routing.py +439 -0
- millrace_ai-0.1.0/millrace_engine/planes/execution_runtime.py +643 -0
- millrace_ai-0.1.0/millrace_engine/planes/research.py +905 -0
- millrace_ai-0.1.0/millrace_engine/policies/__init__.py +166 -0
- millrace_ai-0.1.0/millrace_engine/policies/complexity.py +146 -0
- millrace_ai-0.1.0/millrace_engine/policies/hooks.py +618 -0
- millrace_ai-0.1.0/millrace_engine/policies/integration.py +319 -0
- millrace_ai-0.1.0/millrace_engine/policies/network_guard.py +77 -0
- millrace_ai-0.1.0/millrace_engine/policies/outage.py +487 -0
- millrace_ai-0.1.0/millrace_engine/policies/pacing.py +138 -0
- millrace_ai-0.1.0/millrace_engine/policies/preflight.py +376 -0
- millrace_ai-0.1.0/millrace_engine/policies/sizing.py +706 -0
- millrace_ai-0.1.0/millrace_engine/policies/transport.py +163 -0
- millrace_ai-0.1.0/millrace_engine/policies/usage_budget.py +421 -0
- millrace_ai-0.1.0/millrace_engine/provenance.py +582 -0
- millrace_ai-0.1.0/millrace_engine/publishing/__init__.py +33 -0
- millrace_ai-0.1.0/millrace_engine/publishing/manifest.py +193 -0
- millrace_ai-0.1.0/millrace_engine/publishing/staging.py +467 -0
- millrace_ai-0.1.0/millrace_engine/queue.py +496 -0
- millrace_ai-0.1.0/millrace_engine/registry.py +527 -0
- millrace_ai-0.1.0/millrace_engine/runner.py +326 -0
- millrace_ai-0.1.0/millrace_engine/stages/__init__.py +1 -0
- millrace_ai-0.1.0/millrace_engine/stages/base.py +250 -0
- millrace_ai-0.1.0/millrace_engine/stages/builder.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/consult.py +22 -0
- millrace_ai-0.1.0/millrace_engine/stages/doublecheck.py +22 -0
- millrace_ai-0.1.0/millrace_engine/stages/hotfix.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/integrate.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/large_execute.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/large_plan.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/qa.py +22 -0
- millrace_ai-0.1.0/millrace_engine/stages/reassess.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/refactor.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/troubleshoot.py +18 -0
- millrace_ai-0.1.0/millrace_engine/stages/update.py +19 -0
- millrace_ai-0.1.0/millrace_engine/standard_runtime.py +264 -0
- millrace_ai-0.1.0/millrace_engine/standard_runtime_models.py +140 -0
- millrace_ai-0.1.0/millrace_engine/standard_runtime_overrides.py +140 -0
- millrace_ai-0.1.0/millrace_engine/standard_runtime_views.py +234 -0
- millrace_ai-0.1.0/millrace_engine/status.py +543 -0
- millrace_ai-0.1.0/millrace_engine/telemetry.py +773 -0
- millrace_ai-0.1.0/millrace_engine/tui/__init__.py +2 -0
- millrace_ai-0.1.0/millrace_engine/tui/__main__.py +44 -0
- millrace_ai-0.1.0/millrace_engine/tui/app.py +268 -0
- millrace_ai-0.1.0/millrace_engine/tui/bindings.py +30 -0
- millrace_ai-0.1.0/millrace_engine/tui/formatting.py +386 -0
- millrace_ai-0.1.0/millrace_engine/tui/gateway.py +910 -0
- millrace_ai-0.1.0/millrace_engine/tui/launcher.py +329 -0
- millrace_ai-0.1.0/millrace_engine/tui/messages.py +105 -0
- millrace_ai-0.1.0/millrace_engine/tui/models.py +709 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/__init__.py +6 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/add_idea_modal.py +105 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/add_task_modal.py +104 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/config_edit_modal.py +142 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/confirm_modal.py +61 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/health_gate.py +240 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/help_modal.py +117 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/run_detail_modal.py +191 -0
- millrace_ai-0.1.0/millrace_engine/tui/screens/shell.py +977 -0
- millrace_ai-0.1.0/millrace_engine/tui/store.py +368 -0
- millrace_ai-0.1.0/millrace_engine/tui/styles/app.tcss +22 -0
- millrace_ai-0.1.0/millrace_engine/tui/styles/panels.tcss +290 -0
- millrace_ai-0.1.0/millrace_engine/tui/styles/shell.tcss +174 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/__init__.py +8 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/config_panel.py +497 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/expanded_stream.py +362 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/logs_panel.py +592 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/notices.py +50 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/overview_panel.py +497 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/panels.py +27 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/progressive_disclosure.py +68 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/publish_panel.py +419 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/queue_panel.py +586 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/research_panel.py +530 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/runs_panel.py +363 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/sidebar.py +153 -0
- millrace_ai-0.1.0/millrace_engine/tui/widgets/status_bar.py +246 -0
- millrace_ai-0.1.0/millrace_engine/tui/workers.py +185 -0
- millrace_ai-0.1.0/millrace_engine/workspace_init.py +292 -0
- millrace_ai-0.1.0/pyproject.toml +65 -0
- millrace_ai-0.1.0/setup.cfg +4 -0
- millrace_ai-0.1.0/tests/test_asset_resolver.py +155 -0
- millrace_ai-0.1.0/tests/test_baseline_assets.py +238 -0
- millrace_ai-0.1.0/tests/test_cli.py +3486 -0
- millrace_ai-0.1.0/tests/test_compiler.py +945 -0
- millrace_ai-0.1.0/tests/test_config.py +365 -0
- millrace_ai-0.1.0/tests/test_contracts.py +140 -0
- millrace_ai-0.1.0/tests/test_execution_plane.py +2710 -0
- millrace_ai-0.1.0/tests/test_execution_prompt_contracts.py +189 -0
- millrace_ai-0.1.0/tests/test_file_watcher.py +117 -0
- millrace_ai-0.1.0/tests/test_goalspec_state.py +806 -0
- millrace_ai-0.1.0/tests/test_health.py +100 -0
- millrace_ai-0.1.0/tests/test_loop_architecture.py +503 -0
- millrace_ai-0.1.0/tests/test_materialization.py +683 -0
- millrace_ai-0.1.0/tests/test_package_parity.py +95 -0
- millrace_ai-0.1.0/tests/test_policy_hooks.py +490 -0
- millrace_ai-0.1.0/tests/test_publishing.py +189 -0
- millrace_ai-0.1.0/tests/test_queue.py +443 -0
- millrace_ai-0.1.0/tests/test_registry.py +621 -0
- millrace_ai-0.1.0/tests/test_research_dispatcher.py +3038 -0
- millrace_ai-0.1.0/tests/test_research_queues.py +445 -0
- millrace_ai-0.1.0/tests/test_research_registry.py +92 -0
- millrace_ai-0.1.0/tests/test_research_state.py +531 -0
- millrace_ai-0.1.0/tests/test_research_stub.py +72 -0
- millrace_ai-0.1.0/tests/test_runner.py +486 -0
- millrace_ai-0.1.0/tests/test_scaffold.py +150 -0
- millrace_ai-0.1.0/tests/test_sizing.py +200 -0
- millrace_ai-0.1.0/tests/test_status.py +101 -0
- millrace_ai-0.1.0/tests/test_tui.py +3983 -0
- millrace_ai-0.1.0/tests/test_tui_snapshots.py +361 -0
- millrace_ai-0.1.0/tests/test_validation_mode_custom.py +211 -0
- millrace_ai-0.1.0/tests/test_validation_mode_standard.py +217 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: millrace-ai
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Python runtime engine for the Millrace v1 control plane
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: pydantic<3,>=2
|
|
8
|
+
Requires-Dist: textual<9,>=8
|
|
9
|
+
Requires-Dist: tomlkit<1,>=0.13
|
|
10
|
+
Requires-Dist: typer<1,>=0.12
|
|
11
|
+
Requires-Dist: watchdog<7,>=4
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: pytest<9,>=8; extra == "dev"
|
|
14
|
+
Requires-Dist: pytest-textual-snapshot<2,>=1; extra == "dev"
|
|
15
|
+
|
|
16
|
+
# Millrace
|
|
17
|
+
|
|
18
|
+
Millrace is a local autonomous software-delivery runtime for long-running coding work. It runs governed execution and research loops inside a file-backed workspace with durable state, explicit recovery surfaces, per-run provenance, and publish controls.
|
|
19
|
+
|
|
20
|
+
It is built for unattended or semi-attended work that needs more than a chat session or a thin agent wrapper. You get one engine, one control plane, and multiple operator surfaces over the same on-disk truth: CLI, TUI, and agent-guided operation.
|
|
21
|
+
|
|
22
|
+
It gives you:
|
|
23
|
+
|
|
24
|
+
- a Python CLI and a Textual TUI, plus an agent-facing advisor surface
|
|
25
|
+
- a single runtime engine
|
|
26
|
+
- an execution plane for delivery work
|
|
27
|
+
- a research plane for idea intake, audit, and governed handoff
|
|
28
|
+
- durable runtime state, event logs, diagnostics, provenance, and publish surfaces inside the workspace
|
|
29
|
+
|
|
30
|
+
Read next:
|
|
31
|
+
|
|
32
|
+
- `OPERATOR_GUIDE.md` for the human operator workflow
|
|
33
|
+
- `ADVISOR.md` for the agent-facing operator prompt
|
|
34
|
+
- `docs/RUNTIME_DEEP_DIVE.md` for architecture and failure-model detail
|
|
35
|
+
|
|
36
|
+
## Why Millrace Exists
|
|
37
|
+
|
|
38
|
+
Interactive coding tools are good at short sessions. They are weak at long-running governed work that needs queue discipline, durable state, recoverable execution, research-to-delivery handoff, and publish controls.
|
|
39
|
+
|
|
40
|
+
Millrace exists to make those runtime concerns first-class instead of leaving them implicit in shell history, chat transcripts, or one-off wrapper scripts.
|
|
41
|
+
|
|
42
|
+
## How Millrace Is Different
|
|
43
|
+
|
|
44
|
+
- Runtime, not wrapper: Millrace owns lifecycle, queue mutation, watch surfaces, status, events, and publish flow.
|
|
45
|
+
- File-backed truth: runs, queues, status, diagnostics, and provenance live in the workspace, not in opaque process memory.
|
|
46
|
+
- Governed autonomy: execution and research share one engine but keep distinct state, reporting, and handoff surfaces.
|
|
47
|
+
- Frozen per-run plans: each run resolves its effective mode and loop, then records the exact plan used for that run.
|
|
48
|
+
- Multiple operator surfaces: CLI, TUI, and agent-guided operation all sit over the same control plane.
|
|
49
|
+
|
|
50
|
+
## Design Philosophy
|
|
51
|
+
|
|
52
|
+
- Local and inspectable: the workspace is the source of operational truth.
|
|
53
|
+
- Honest failure over hidden magic: blocked work, partial progress, and degraded state should stay legible.
|
|
54
|
+
- Explicit boundaries: lifecycle, runtime state, research, execution, and publish are separate product surfaces.
|
|
55
|
+
- Recoverability matters: long-running systems need durable ledgers, diagnostics, and restart-safe state.
|
|
56
|
+
|
|
57
|
+
## Repo Layout
|
|
58
|
+
|
|
59
|
+
The public Millrace repo is package-first. Its main surfaces are:
|
|
60
|
+
|
|
61
|
+
- `millrace_engine/`: the runtime package, CLI, control layer, and engine
|
|
62
|
+
- `docs/`: longer-form reference material, including the runtime deep dive and TUI reference
|
|
63
|
+
- `tests/`: unit and integration tests
|
|
64
|
+
- `pyproject.toml`: packaging metadata and console entrypoint
|
|
65
|
+
- `millrace_engine/assets/`: the packaged baseline bundle used by `millrace init`
|
|
66
|
+
|
|
67
|
+
`millrace.toml` and `agents/` are part of an initialized Millrace workspace. They are seeded by `millrace init`; they are not expected at the public repo root.
|
|
68
|
+
|
|
69
|
+
## Initialized Workspace Layout
|
|
70
|
+
|
|
71
|
+
An initialized workspace created by `millrace init /absolute/path/to/workspace` contains:
|
|
72
|
+
|
|
73
|
+
- `millrace.toml`: the active workspace config
|
|
74
|
+
- `agents/`: queues, runs, logs, prompts, state, and provenance
|
|
75
|
+
- `docs/`: copied reference material that travels with the workspace
|
|
76
|
+
|
|
77
|
+
## Core Runtime Model
|
|
78
|
+
|
|
79
|
+
- One CLI: `python3 -m millrace_engine --config millrace.toml ...`
|
|
80
|
+
- One TUI shell: `python3 -m millrace_engine.tui --config millrace.toml`
|
|
81
|
+
- One engine: the daemon owns lifecycle, watchers, mailbox commands, runtime state, and event emission.
|
|
82
|
+
- Two logical planes: execution work and research work share the same engine but keep separate status and reporting surfaces.
|
|
83
|
+
- File-backed truth: queues, runs, status, logs, diagnostics, and provenance live under `agents/`.
|
|
84
|
+
- Workspace-first assets: workspace files override packaged defaults when present; packaged assets are the fallback.
|
|
85
|
+
- Frozen per-run plans: before a standard execution run, Millrace resolves the selected mode and loop, applies workspace overrides, and freezes the effective plan under `agents/runs/<run_id>/`.
|
|
86
|
+
|
|
87
|
+
## Quick Start
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd /absolute/path/to/millrace
|
|
91
|
+
python3 -m venv .venv
|
|
92
|
+
source .venv/bin/activate
|
|
93
|
+
python3 -m pip install -e '.[dev]'
|
|
94
|
+
python3 -m millrace_engine init /absolute/path/to/workspace
|
|
95
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
|
|
96
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml status --detail --json
|
|
97
|
+
python3 -m millrace_engine.tui --config /absolute/path/to/workspace/millrace.toml
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
After init, you can `cd /absolute/path/to/workspace` and use the shorter `--config millrace.toml` form.
|
|
101
|
+
|
|
102
|
+
Add work and execute one foreground cycle:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
cd /absolute/path/to/workspace
|
|
106
|
+
python3 -m millrace_engine --config millrace.toml add-task "Example task"
|
|
107
|
+
python3 -m millrace_engine --config millrace.toml start --once
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
If the package entrypoint is installed, `millrace --config millrace.toml ...` is equivalent.
|
|
111
|
+
|
|
112
|
+
## TUI Shell
|
|
113
|
+
|
|
114
|
+
The TUI is the fastest way to operate an initialized workspace when you want a dense control panel instead of a stream of CLI calls.
|
|
115
|
+
|
|
116
|
+
Launch it with:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
python3 -m millrace_engine.tui --config millrace.toml
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
What it provides:
|
|
123
|
+
|
|
124
|
+
- a startup health gate before the shell becomes interactive
|
|
125
|
+
- a dual-mode shell with summary-first `operator` mode and detail-forward `debug` mode
|
|
126
|
+
- one toggleable expanded stream mode that takes over the main content area while leaving the sidebar, status strip, and notices visible
|
|
127
|
+
- a persistent shell with sidebar navigation, a compact status strip, and widget-composed overview/queue/runs/research/logs/config/publish panels
|
|
128
|
+
- explicit lifecycle signaling across the sidebar daemon badge, top status strip, and notices rail
|
|
129
|
+
- guided task, idea, queue reorder, config edit, and publish confirmation flows
|
|
130
|
+
- lifecycle actions for `start --once`, `start --daemon`, `pause`, `resume`, and `stop`
|
|
131
|
+
- a command palette for common actions, including display-mode toggle and lifecycle controls
|
|
132
|
+
- built-in keyboard help (`?`) and panel shortcuts (`1` through `7`)
|
|
133
|
+
- the same runtime semantics as the CLI, including mailbox-safe daemon mutations and the same file-backed truth surfaces
|
|
134
|
+
|
|
135
|
+
Use the TUI for day-to-day observation and control. Use the CLI when you want scriptable, one-shot commands or JSON output.
|
|
136
|
+
|
|
137
|
+
The repo also ships a dedicated TUI reference in its `docs/` directory for the full panel, control, and interaction map.
|
|
138
|
+
|
|
139
|
+
Expanded stream behavior to know:
|
|
140
|
+
|
|
141
|
+
- press `e` to toggle the active panel into expanded mode and `Escape` to return to the normal panel body
|
|
142
|
+
- in `operator` mode, expanded view renders a narrated activity feed from runtime events
|
|
143
|
+
- in `debug` mode, expanded view renders the raw structured event lines, close to `logs --follow`
|
|
144
|
+
- if you scroll upward, live follow disengages until you jump back with `l`
|
|
145
|
+
|
|
146
|
+
## Start A Fresh Workspace
|
|
147
|
+
|
|
148
|
+
Use `init` when you want a new Millrace workspace without copying files by hand:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
python3 -m millrace_engine init /absolute/path/to/workspace
|
|
152
|
+
python3 -m millrace_engine init --force /absolute/path/to/workspace
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Important behavior:
|
|
156
|
+
|
|
157
|
+
- Without `--force`, the destination must be absent or empty.
|
|
158
|
+
- With `--force`, Millrace overwrites manifest-tracked baseline files in place. It does not wipe the directory.
|
|
159
|
+
- Workspace prompt and registry overlays can override packaged defaults after scaffolding.
|
|
160
|
+
- Missing workspace prompt files fall back to packaged assets when the resolver supports that family.
|
|
161
|
+
|
|
162
|
+
After scaffolding, run the workspace preflight before you rely on the runtime:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Daily Operator Flow
|
|
169
|
+
|
|
170
|
+
The rest of this section assumes you are operating inside an initialized workspace root that contains the active `millrace.toml`.
|
|
171
|
+
|
|
172
|
+
1. Preflight the workspace:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
python3 -m millrace_engine --config millrace.toml health --json
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Or launch the TUI and let the health gate run automatically:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
python3 -m millrace_engine.tui --config millrace.toml
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
2. Inspect current state:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
python3 -m millrace_engine --config millrace.toml status --detail --json
|
|
188
|
+
python3 -m millrace_engine --config millrace.toml queue inspect --json
|
|
189
|
+
python3 -m millrace_engine --config millrace.toml research --json
|
|
190
|
+
python3 -m millrace_engine --config millrace.toml logs --tail 50 --json
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
In the TUI, the Overview, Queue, Research, Logs, and Runs panels expose the same runtime state without leaving the shell.
|
|
194
|
+
|
|
195
|
+
3. Add work:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
python3 -m millrace_engine --config millrace.toml add-task "Example task"
|
|
199
|
+
python3 -m millrace_engine --config millrace.toml add-idea /absolute/path/to/idea.md
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`add-task` appends an execution task to the backlog. `add-idea` copies a source markdown file into `agents/ideas/raw/` for research-side intake.
|
|
203
|
+
|
|
204
|
+
4. Run the engine:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
python3 -m millrace_engine --config millrace.toml start --once
|
|
208
|
+
python3 -m millrace_engine --config millrace.toml start --daemon
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
The TUI exposes the same actions through the command palette and keyboard-driven panel flows.
|
|
212
|
+
|
|
213
|
+
5. Inspect outcomes:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
python3 -m millrace_engine --config millrace.toml logs --follow
|
|
217
|
+
python3 -m millrace_engine --config millrace.toml run-provenance <run_id> --json
|
|
218
|
+
python3 -m millrace_engine --config millrace.toml research history --json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The TUI keeps recent runs, filtered logs, and concise run-provenance drilldown in one place, including a run-detail modal from the Runs and Logs panels.
|
|
222
|
+
|
|
223
|
+
When you want the old foreground-feed feel without leaving the shell, use TUI expanded mode instead of opening a second terminal just to run `logs --follow`.
|
|
224
|
+
|
|
225
|
+
6. Control a long-running daemon:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
python3 -m millrace_engine --config millrace.toml pause
|
|
229
|
+
python3 -m millrace_engine --config millrace.toml resume
|
|
230
|
+
python3 -m millrace_engine --config millrace.toml stop
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
When the daemon is running, mutating commands route through the mailbox so one owner process stays in control of live state.
|
|
234
|
+
|
|
235
|
+
## Publish And Staging
|
|
236
|
+
|
|
237
|
+
Millrace includes a staging and publish surface for preparing a release worktree:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
python3 -m millrace_engine --config millrace.toml publish sync --json
|
|
241
|
+
python3 -m millrace_engine --config millrace.toml publish preflight --json
|
|
242
|
+
python3 -m millrace_engine --config millrace.toml publish commit --no-push --json
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
`publish preflight` is read-only. It reports the resolved staging repo, manifest source, git readiness, and changed paths without mutating git state.
|
|
246
|
+
|
|
247
|
+
## Runtime Inputs
|
|
248
|
+
|
|
249
|
+
By default the daemon watches:
|
|
250
|
+
|
|
251
|
+
- backlog and autonomy marker files
|
|
252
|
+
- raw ideas under `agents/ideas/raw/`
|
|
253
|
+
- mailbox commands under `agents/.runtime/commands/incoming/`
|
|
254
|
+
- the config file `millrace.toml`
|
|
255
|
+
|
|
256
|
+
These roots are configured under `[watchers]`.
|
|
257
|
+
|
|
258
|
+
Remaining shell loop artifacts under `agents/` are compatibility or reference material only. The supported operating surfaces are the Python CLI and the Textual TUI.
|
|
259
|
+
|
|
260
|
+
## Verification
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
python3 -m compileall millrace_engine
|
|
264
|
+
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q tests
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Use `health --json` as the first runtime preflight and `status --detail --json`, `research --json`, `logs`, and `run-provenance` as the main visibility surfaces once the engine is running.
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# Millrace
|
|
2
|
+
|
|
3
|
+
Millrace is a local autonomous software-delivery runtime for long-running coding work. It runs governed execution and research loops inside a file-backed workspace with durable state, explicit recovery surfaces, per-run provenance, and publish controls.
|
|
4
|
+
|
|
5
|
+
It is built for unattended or semi-attended work that needs more than a chat session or a thin agent wrapper. You get one engine, one control plane, and multiple operator surfaces over the same on-disk truth: CLI, TUI, and agent-guided operation.
|
|
6
|
+
|
|
7
|
+
It gives you:
|
|
8
|
+
|
|
9
|
+
- a Python CLI and a Textual TUI, plus an agent-facing advisor surface
|
|
10
|
+
- a single runtime engine
|
|
11
|
+
- an execution plane for delivery work
|
|
12
|
+
- a research plane for idea intake, audit, and governed handoff
|
|
13
|
+
- durable runtime state, event logs, diagnostics, provenance, and publish surfaces inside the workspace
|
|
14
|
+
|
|
15
|
+
Read next:
|
|
16
|
+
|
|
17
|
+
- `OPERATOR_GUIDE.md` for the human operator workflow
|
|
18
|
+
- `ADVISOR.md` for the agent-facing operator prompt
|
|
19
|
+
- `docs/RUNTIME_DEEP_DIVE.md` for architecture and failure-model detail
|
|
20
|
+
|
|
21
|
+
## Why Millrace Exists
|
|
22
|
+
|
|
23
|
+
Interactive coding tools are good at short sessions. They are weak at long-running governed work that needs queue discipline, durable state, recoverable execution, research-to-delivery handoff, and publish controls.
|
|
24
|
+
|
|
25
|
+
Millrace exists to make those runtime concerns first-class instead of leaving them implicit in shell history, chat transcripts, or one-off wrapper scripts.
|
|
26
|
+
|
|
27
|
+
## How Millrace Is Different
|
|
28
|
+
|
|
29
|
+
- Runtime, not wrapper: Millrace owns lifecycle, queue mutation, watch surfaces, status, events, and publish flow.
|
|
30
|
+
- File-backed truth: runs, queues, status, diagnostics, and provenance live in the workspace, not in opaque process memory.
|
|
31
|
+
- Governed autonomy: execution and research share one engine but keep distinct state, reporting, and handoff surfaces.
|
|
32
|
+
- Frozen per-run plans: each run resolves its effective mode and loop, then records the exact plan used for that run.
|
|
33
|
+
- Multiple operator surfaces: CLI, TUI, and agent-guided operation all sit over the same control plane.
|
|
34
|
+
|
|
35
|
+
## Design Philosophy
|
|
36
|
+
|
|
37
|
+
- Local and inspectable: the workspace is the source of operational truth.
|
|
38
|
+
- Honest failure over hidden magic: blocked work, partial progress, and degraded state should stay legible.
|
|
39
|
+
- Explicit boundaries: lifecycle, runtime state, research, execution, and publish are separate product surfaces.
|
|
40
|
+
- Recoverability matters: long-running systems need durable ledgers, diagnostics, and restart-safe state.
|
|
41
|
+
|
|
42
|
+
## Repo Layout
|
|
43
|
+
|
|
44
|
+
The public Millrace repo is package-first. Its main surfaces are:
|
|
45
|
+
|
|
46
|
+
- `millrace_engine/`: the runtime package, CLI, control layer, and engine
|
|
47
|
+
- `docs/`: longer-form reference material, including the runtime deep dive and TUI reference
|
|
48
|
+
- `tests/`: unit and integration tests
|
|
49
|
+
- `pyproject.toml`: packaging metadata and console entrypoint
|
|
50
|
+
- `millrace_engine/assets/`: the packaged baseline bundle used by `millrace init`
|
|
51
|
+
|
|
52
|
+
`millrace.toml` and `agents/` are part of an initialized Millrace workspace. They are seeded by `millrace init`; they are not expected at the public repo root.
|
|
53
|
+
|
|
54
|
+
## Initialized Workspace Layout
|
|
55
|
+
|
|
56
|
+
An initialized workspace created by `millrace init /absolute/path/to/workspace` contains:
|
|
57
|
+
|
|
58
|
+
- `millrace.toml`: the active workspace config
|
|
59
|
+
- `agents/`: queues, runs, logs, prompts, state, and provenance
|
|
60
|
+
- `docs/`: copied reference material that travels with the workspace
|
|
61
|
+
|
|
62
|
+
## Core Runtime Model
|
|
63
|
+
|
|
64
|
+
- One CLI: `python3 -m millrace_engine --config millrace.toml ...`
|
|
65
|
+
- One TUI shell: `python3 -m millrace_engine.tui --config millrace.toml`
|
|
66
|
+
- One engine: the daemon owns lifecycle, watchers, mailbox commands, runtime state, and event emission.
|
|
67
|
+
- Two logical planes: execution work and research work share the same engine but keep separate status and reporting surfaces.
|
|
68
|
+
- File-backed truth: queues, runs, status, logs, diagnostics, and provenance live under `agents/`.
|
|
69
|
+
- Workspace-first assets: workspace files override packaged defaults when present; packaged assets are the fallback.
|
|
70
|
+
- Frozen per-run plans: before a standard execution run, Millrace resolves the selected mode and loop, applies workspace overrides, and freezes the effective plan under `agents/runs/<run_id>/`.
|
|
71
|
+
|
|
72
|
+
## Quick Start
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
cd /absolute/path/to/millrace
|
|
76
|
+
python3 -m venv .venv
|
|
77
|
+
source .venv/bin/activate
|
|
78
|
+
python3 -m pip install -e '.[dev]'
|
|
79
|
+
python3 -m millrace_engine init /absolute/path/to/workspace
|
|
80
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
|
|
81
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml status --detail --json
|
|
82
|
+
python3 -m millrace_engine.tui --config /absolute/path/to/workspace/millrace.toml
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
After init, you can `cd /absolute/path/to/workspace` and use the shorter `--config millrace.toml` form.
|
|
86
|
+
|
|
87
|
+
Add work and execute one foreground cycle:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd /absolute/path/to/workspace
|
|
91
|
+
python3 -m millrace_engine --config millrace.toml add-task "Example task"
|
|
92
|
+
python3 -m millrace_engine --config millrace.toml start --once
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
If the package entrypoint is installed, `millrace --config millrace.toml ...` is equivalent.
|
|
96
|
+
|
|
97
|
+
## TUI Shell
|
|
98
|
+
|
|
99
|
+
The TUI is the fastest way to operate an initialized workspace when you want a dense control panel instead of a stream of CLI calls.
|
|
100
|
+
|
|
101
|
+
Launch it with:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
python3 -m millrace_engine.tui --config millrace.toml
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
What it provides:
|
|
108
|
+
|
|
109
|
+
- a startup health gate before the shell becomes interactive
|
|
110
|
+
- a dual-mode shell with summary-first `operator` mode and detail-forward `debug` mode
|
|
111
|
+
- one toggleable expanded stream mode that takes over the main content area while leaving the sidebar, status strip, and notices visible
|
|
112
|
+
- a persistent shell with sidebar navigation, a compact status strip, and widget-composed overview/queue/runs/research/logs/config/publish panels
|
|
113
|
+
- explicit lifecycle signaling across the sidebar daemon badge, top status strip, and notices rail
|
|
114
|
+
- guided task, idea, queue reorder, config edit, and publish confirmation flows
|
|
115
|
+
- lifecycle actions for `start --once`, `start --daemon`, `pause`, `resume`, and `stop`
|
|
116
|
+
- a command palette for common actions, including display-mode toggle and lifecycle controls
|
|
117
|
+
- built-in keyboard help (`?`) and panel shortcuts (`1` through `7`)
|
|
118
|
+
- the same runtime semantics as the CLI, including mailbox-safe daemon mutations and the same file-backed truth surfaces
|
|
119
|
+
|
|
120
|
+
Use the TUI for day-to-day observation and control. Use the CLI when you want scriptable, one-shot commands or JSON output.
|
|
121
|
+
|
|
122
|
+
The repo also ships a dedicated TUI reference in its `docs/` directory for the full panel, control, and interaction map.
|
|
123
|
+
|
|
124
|
+
Expanded stream behavior to know:
|
|
125
|
+
|
|
126
|
+
- press `e` to toggle the active panel into expanded mode and `Escape` to return to the normal panel body
|
|
127
|
+
- in `operator` mode, expanded view renders a narrated activity feed from runtime events
|
|
128
|
+
- in `debug` mode, expanded view renders the raw structured event lines, close to `logs --follow`
|
|
129
|
+
- if you scroll upward, live follow disengages until you jump back with `l`
|
|
130
|
+
|
|
131
|
+
## Start A Fresh Workspace
|
|
132
|
+
|
|
133
|
+
Use `init` when you want a new Millrace workspace without copying files by hand:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
python3 -m millrace_engine init /absolute/path/to/workspace
|
|
137
|
+
python3 -m millrace_engine init --force /absolute/path/to/workspace
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Important behavior:
|
|
141
|
+
|
|
142
|
+
- Without `--force`, the destination must be absent or empty.
|
|
143
|
+
- With `--force`, Millrace overwrites manifest-tracked baseline files in place. It does not wipe the directory.
|
|
144
|
+
- Workspace prompt and registry overlays can override packaged defaults after scaffolding.
|
|
145
|
+
- Missing workspace prompt files fall back to packaged assets when the resolver supports that family.
|
|
146
|
+
|
|
147
|
+
After scaffolding, run the workspace preflight before you rely on the runtime:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
python3 -m millrace_engine --config /absolute/path/to/workspace/millrace.toml health --json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Daily Operator Flow
|
|
154
|
+
|
|
155
|
+
The rest of this section assumes you are operating inside an initialized workspace root that contains the active `millrace.toml`.
|
|
156
|
+
|
|
157
|
+
1. Preflight the workspace:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
python3 -m millrace_engine --config millrace.toml health --json
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Or launch the TUI and let the health gate run automatically:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
python3 -m millrace_engine.tui --config millrace.toml
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
2. Inspect current state:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
python3 -m millrace_engine --config millrace.toml status --detail --json
|
|
173
|
+
python3 -m millrace_engine --config millrace.toml queue inspect --json
|
|
174
|
+
python3 -m millrace_engine --config millrace.toml research --json
|
|
175
|
+
python3 -m millrace_engine --config millrace.toml logs --tail 50 --json
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
In the TUI, the Overview, Queue, Research, Logs, and Runs panels expose the same runtime state without leaving the shell.
|
|
179
|
+
|
|
180
|
+
3. Add work:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
python3 -m millrace_engine --config millrace.toml add-task "Example task"
|
|
184
|
+
python3 -m millrace_engine --config millrace.toml add-idea /absolute/path/to/idea.md
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
`add-task` appends an execution task to the backlog. `add-idea` copies a source markdown file into `agents/ideas/raw/` for research-side intake.
|
|
188
|
+
|
|
189
|
+
4. Run the engine:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
python3 -m millrace_engine --config millrace.toml start --once
|
|
193
|
+
python3 -m millrace_engine --config millrace.toml start --daemon
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
The TUI exposes the same actions through the command palette and keyboard-driven panel flows.
|
|
197
|
+
|
|
198
|
+
5. Inspect outcomes:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
python3 -m millrace_engine --config millrace.toml logs --follow
|
|
202
|
+
python3 -m millrace_engine --config millrace.toml run-provenance <run_id> --json
|
|
203
|
+
python3 -m millrace_engine --config millrace.toml research history --json
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The TUI keeps recent runs, filtered logs, and concise run-provenance drilldown in one place, including a run-detail modal from the Runs and Logs panels.
|
|
207
|
+
|
|
208
|
+
When you want the old foreground-feed feel without leaving the shell, use TUI expanded mode instead of opening a second terminal just to run `logs --follow`.
|
|
209
|
+
|
|
210
|
+
6. Control a long-running daemon:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
python3 -m millrace_engine --config millrace.toml pause
|
|
214
|
+
python3 -m millrace_engine --config millrace.toml resume
|
|
215
|
+
python3 -m millrace_engine --config millrace.toml stop
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
When the daemon is running, mutating commands route through the mailbox so one owner process stays in control of live state.
|
|
219
|
+
|
|
220
|
+
## Publish And Staging
|
|
221
|
+
|
|
222
|
+
Millrace includes a staging and publish surface for preparing a release worktree:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
python3 -m millrace_engine --config millrace.toml publish sync --json
|
|
226
|
+
python3 -m millrace_engine --config millrace.toml publish preflight --json
|
|
227
|
+
python3 -m millrace_engine --config millrace.toml publish commit --no-push --json
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`publish preflight` is read-only. It reports the resolved staging repo, manifest source, git readiness, and changed paths without mutating git state.
|
|
231
|
+
|
|
232
|
+
## Runtime Inputs
|
|
233
|
+
|
|
234
|
+
By default the daemon watches:
|
|
235
|
+
|
|
236
|
+
- backlog and autonomy marker files
|
|
237
|
+
- raw ideas under `agents/ideas/raw/`
|
|
238
|
+
- mailbox commands under `agents/.runtime/commands/incoming/`
|
|
239
|
+
- the config file `millrace.toml`
|
|
240
|
+
|
|
241
|
+
These roots are configured under `[watchers]`.
|
|
242
|
+
|
|
243
|
+
Remaining shell loop artifacts under `agents/` are compatibility or reference material only. The supported operating surfaces are the Python CLI and the Textual TUI.
|
|
244
|
+
|
|
245
|
+
## Verification
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
python3 -m compileall millrace_engine
|
|
249
|
+
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q tests
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Use `health --json` as the first runtime preflight and `status --detail --json`, `research --json`, `logs`, and `run-provenance` as the main visibility surfaces once the engine is running.
|