specsmith 0.10.1.dev296__tar.gz → 0.10.1.dev298__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.
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/PKG-INFO +1 -1
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/pyproject.toml +1 -1
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/cli.py +289 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/esdb/bridge.py +1 -1
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/PKG-INFO +1 -1
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/LICENSE +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/README.md +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/setup.cfg +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/belief.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/certainty.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/py.typed +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/recovery.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/session.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/epistemic/trace.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/__main__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/architect.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/auditor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/auth.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/block_export.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/compliance.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/compressor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/config.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/context_window.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/credits.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/differ.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/doctor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/drive.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/editor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/executor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/exporter.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/history_search.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/importer.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/instinct.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/languages.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/ledger.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/patent.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/paths.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/phase.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/plugins.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/profiles.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/releaser.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/requirements.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/serve.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/session.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/session_init.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/skills.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/sync.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/tools.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/trace.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/updater.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/validator.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/workspace.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_CMD_001.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_auditor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_cli.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_compliance.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_compressor.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_epistemic.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_importer.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_integrations.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_intelligence.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_mcp_client.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_new_modules.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_nexus.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_permissions.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_rate_limits.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_scaffolder.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_smoke.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_suggester.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_tools.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_validator.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_vcs.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_warp_parity.py +0 -0
- {specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/tests/test_warp_parity_followup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.10.1.
|
|
3
|
+
Version: 0.10.1.dev298
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.10.1.
|
|
7
|
+
version = "0.10.1.dev298"
|
|
8
8
|
description = "Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -7983,5 +7983,294 @@ except Exception: # noqa: BLE001
|
|
|
7983
7983
|
pass # graceful degradation if commands module has issues
|
|
7984
7984
|
|
|
7985
7985
|
|
|
7986
|
+
# ---------------------------------------------------------------------------
|
|
7987
|
+
# specsmith skills — AI Skills Builder (Phase A)
|
|
7988
|
+
# ---------------------------------------------------------------------------
|
|
7989
|
+
|
|
7990
|
+
|
|
7991
|
+
@main.group(name="skills")
|
|
7992
|
+
def skills_group() -> None:
|
|
7993
|
+
"""Build, list, test, and activate AI agent skills."""
|
|
7994
|
+
|
|
7995
|
+
|
|
7996
|
+
@skills_group.command(name="build")
|
|
7997
|
+
@click.argument("description")
|
|
7998
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
7999
|
+
@click.option("--tag", "tags", multiple=True, help="Tags for the skill.")
|
|
8000
|
+
def skills_build_cmd(description: str, project_dir: str, tags: tuple[str, ...]) -> None:
|
|
8001
|
+
"""Generate a new skill from a natural-language description."""
|
|
8002
|
+
from specsmith.skills_builder import build_skill
|
|
8003
|
+
|
|
8004
|
+
spec = build_skill(description, project_dir=project_dir, tags=list(tags))
|
|
8005
|
+
console.print(f"[green]\u2713[/green] Skill created: [bold]{spec.name}[/bold] ({spec.id})")
|
|
8006
|
+
console.print(f" [dim]{spec.purpose}[/dim]")
|
|
8007
|
+
|
|
8008
|
+
|
|
8009
|
+
@skills_group.command(name="list")
|
|
8010
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8011
|
+
@click.option("--json", "as_json", is_flag=True, default=False)
|
|
8012
|
+
def skills_list_cmd(project_dir: str, as_json: bool) -> None:
|
|
8013
|
+
"""List available skills."""
|
|
8014
|
+
import json as _json
|
|
8015
|
+
|
|
8016
|
+
from specsmith.skills_builder import list_skills
|
|
8017
|
+
|
|
8018
|
+
skills = list_skills(project_dir)
|
|
8019
|
+
if as_json:
|
|
8020
|
+
click.echo(_json.dumps({"skills": [s.to_dict() for s in skills]}, indent=2))
|
|
8021
|
+
return
|
|
8022
|
+
if not skills:
|
|
8023
|
+
console.print("[dim]No skills found. Use `specsmith skills build` to create one.[/dim]")
|
|
8024
|
+
return
|
|
8025
|
+
console.print(f"[bold]Skills[/bold] ({len(skills)})\n")
|
|
8026
|
+
for s in skills:
|
|
8027
|
+
badge = "[green]\u2714[/green]" if s.active else "[dim]\u25cb[/dim]"
|
|
8028
|
+
console.print(f" {badge} [bold]{s.id}[/bold] {s.name}")
|
|
8029
|
+
|
|
8030
|
+
|
|
8031
|
+
@skills_group.command(name="test")
|
|
8032
|
+
@click.argument("skill_id")
|
|
8033
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8034
|
+
def skills_test_cmd(skill_id: str, project_dir: str) -> None:
|
|
8035
|
+
"""Dry-run a skill to verify its spec."""
|
|
8036
|
+
from specsmith.skills_builder import list_skills
|
|
8037
|
+
|
|
8038
|
+
skills = {s.id: s for s in list_skills(project_dir)}
|
|
8039
|
+
if skill_id not in skills:
|
|
8040
|
+
console.print(f"[red]Skill not found:[/red] {skill_id}")
|
|
8041
|
+
raise SystemExit(1)
|
|
8042
|
+
spec = skills[skill_id]
|
|
8043
|
+
console.print(f"[bold]Testing:[/bold] {spec.name}")
|
|
8044
|
+
console.print(f" Purpose: {spec.purpose}")
|
|
8045
|
+
console.print(f" Tools: {', '.join(spec.tools_used) or 'none'}")
|
|
8046
|
+
console.print(f" Stop conditions: {len(spec.stop_conditions)}")
|
|
8047
|
+
console.print("[green]\u2713[/green] Skill spec is valid (dry-run).")
|
|
8048
|
+
|
|
8049
|
+
|
|
8050
|
+
@skills_group.command(name="activate")
|
|
8051
|
+
@click.argument("skill_id")
|
|
8052
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8053
|
+
def skills_activate_cmd(skill_id: str, project_dir: str) -> None:
|
|
8054
|
+
"""Activate a skill for agent use."""
|
|
8055
|
+
from specsmith.skills_builder import activate_skill
|
|
8056
|
+
|
|
8057
|
+
if activate_skill(skill_id, project_dir):
|
|
8058
|
+
console.print(f"[green]\u2713[/green] Skill [bold]{skill_id}[/bold] activated.")
|
|
8059
|
+
else:
|
|
8060
|
+
console.print(f"[red]Skill not found:[/red] {skill_id}")
|
|
8061
|
+
raise SystemExit(1)
|
|
8062
|
+
|
|
8063
|
+
|
|
8064
|
+
main.add_command(skills_group)
|
|
8065
|
+
|
|
8066
|
+
|
|
8067
|
+
# ---------------------------------------------------------------------------
|
|
8068
|
+
# specsmith eval — Eval-Driven Development framework (Phase P3)
|
|
8069
|
+
# ---------------------------------------------------------------------------
|
|
8070
|
+
|
|
8071
|
+
|
|
8072
|
+
@main.group(name="eval")
|
|
8073
|
+
def eval_group() -> None:
|
|
8074
|
+
"""Run eval suites to benchmark AI model capabilities."""
|
|
8075
|
+
|
|
8076
|
+
|
|
8077
|
+
@eval_group.command(name="list")
|
|
8078
|
+
@click.option("--json", "as_json", is_flag=True, default=False)
|
|
8079
|
+
def eval_list_cmd(as_json: bool) -> None:
|
|
8080
|
+
"""List available eval suites."""
|
|
8081
|
+
import json as _json
|
|
8082
|
+
|
|
8083
|
+
from specsmith.eval.builtins import list_suites
|
|
8084
|
+
|
|
8085
|
+
suites = list_suites()
|
|
8086
|
+
if as_json:
|
|
8087
|
+
click.echo(_json.dumps({"suites": [s.to_dict() for s in suites]}, indent=2))
|
|
8088
|
+
return
|
|
8089
|
+
if not suites:
|
|
8090
|
+
console.print("[dim]No eval suites available.[/dim]")
|
|
8091
|
+
return
|
|
8092
|
+
console.print(f"[bold]Eval Suites[/bold] ({len(suites)})\n")
|
|
8093
|
+
for s in suites:
|
|
8094
|
+
console.print(f" [bold]{s.id}[/bold] {s.name} ({len(s.cases)} cases)")
|
|
8095
|
+
console.print(f" [dim]{s.description}[/dim]")
|
|
8096
|
+
|
|
8097
|
+
|
|
8098
|
+
@eval_group.command(name="run")
|
|
8099
|
+
@click.argument("suite_id", default="core")
|
|
8100
|
+
@click.option("--json", "as_json", is_flag=True, default=False)
|
|
8101
|
+
def eval_run_cmd(suite_id: str, as_json: bool) -> None:
|
|
8102
|
+
"""Run an eval suite (stub mode — no real LLM calls)."""
|
|
8103
|
+
import json as _json
|
|
8104
|
+
|
|
8105
|
+
from specsmith.eval.builtins import get_suite
|
|
8106
|
+
from specsmith.eval.runner import run_suite
|
|
8107
|
+
|
|
8108
|
+
suite = get_suite(suite_id)
|
|
8109
|
+
if suite is None:
|
|
8110
|
+
console.print(f"[red]Suite not found:[/red] {suite_id}")
|
|
8111
|
+
raise SystemExit(1)
|
|
8112
|
+
report = run_suite(suite, stub=True)
|
|
8113
|
+
if as_json:
|
|
8114
|
+
click.echo(_json.dumps(report.to_dict(), indent=2))
|
|
8115
|
+
return
|
|
8116
|
+
icon = "[green]\u2714[/green]" if report.failed == 0 else "[red]\u2717[/red]"
|
|
8117
|
+
console.print(
|
|
8118
|
+
f"{icon} [bold]{suite_id}[/bold] "
|
|
8119
|
+
f"{report.passed}/{report.total} passed "
|
|
8120
|
+
f"avg score {report.avg_score:.0%} "
|
|
8121
|
+
f"avg latency {report.avg_latency_ms:.0f}ms"
|
|
8122
|
+
)
|
|
8123
|
+
for r in report.results:
|
|
8124
|
+
ri = "[green]\u2713[/green]" if r.passed else "[red]\u2717[/red]"
|
|
8125
|
+
console.print(f" {ri} {r.case_id} score={r.score:.0%} {r.latency_ms:.0f}ms")
|
|
8126
|
+
|
|
8127
|
+
|
|
8128
|
+
@eval_group.command(name="report")
|
|
8129
|
+
@click.argument("suite_id", default="core")
|
|
8130
|
+
@click.option("--output", type=click.Path(), default=None, help="Write markdown report to file.")
|
|
8131
|
+
def eval_report_cmd(suite_id: str, output: str | None) -> None:
|
|
8132
|
+
"""Generate a markdown eval report."""
|
|
8133
|
+
from specsmith.eval.builtins import get_suite
|
|
8134
|
+
from specsmith.eval.runner import generate_markdown_report, run_suite
|
|
8135
|
+
|
|
8136
|
+
suite = get_suite(suite_id)
|
|
8137
|
+
if suite is None:
|
|
8138
|
+
console.print(f"[red]Suite not found:[/red] {suite_id}")
|
|
8139
|
+
raise SystemExit(1)
|
|
8140
|
+
report = run_suite(suite, stub=True)
|
|
8141
|
+
md = generate_markdown_report(report)
|
|
8142
|
+
if output:
|
|
8143
|
+
Path(output).write_text(md, encoding="utf-8")
|
|
8144
|
+
console.print(f"[green]\u2713[/green] Report written to {output}")
|
|
8145
|
+
else:
|
|
8146
|
+
click.echo(md)
|
|
8147
|
+
|
|
8148
|
+
|
|
8149
|
+
main.add_command(eval_group)
|
|
8150
|
+
|
|
8151
|
+
|
|
8152
|
+
# ---------------------------------------------------------------------------
|
|
8153
|
+
# specsmith teams — Multi-agent team coordination (Phase P4)
|
|
8154
|
+
# ---------------------------------------------------------------------------
|
|
8155
|
+
|
|
8156
|
+
|
|
8157
|
+
@main.group(name="teams")
|
|
8158
|
+
def teams_group() -> None:
|
|
8159
|
+
"""List and run multi-agent teams."""
|
|
8160
|
+
|
|
8161
|
+
|
|
8162
|
+
@teams_group.command(name="list")
|
|
8163
|
+
@click.option("--json", "as_json", is_flag=True, default=False)
|
|
8164
|
+
def teams_list_cmd(as_json: bool) -> None:
|
|
8165
|
+
"""List predefined agent teams."""
|
|
8166
|
+
import json as _json
|
|
8167
|
+
|
|
8168
|
+
from specsmith.agent.teams import list_teams
|
|
8169
|
+
|
|
8170
|
+
teams = list_teams()
|
|
8171
|
+
if as_json:
|
|
8172
|
+
click.echo(_json.dumps({"teams": [t.to_dict() for t in teams]}, indent=2))
|
|
8173
|
+
return
|
|
8174
|
+
console.print(f"[bold]Agent Teams[/bold] ({len(teams)})\n")
|
|
8175
|
+
for t in teams:
|
|
8176
|
+
roles = ", ".join(m.role for m in t.members)
|
|
8177
|
+
console.print(f" [bold]{t.id}[/bold] {t.name} [{roles}]")
|
|
8178
|
+
console.print(f" [dim]{t.description}[/dim]")
|
|
8179
|
+
|
|
8180
|
+
|
|
8181
|
+
@teams_group.command(name="run")
|
|
8182
|
+
@click.argument("team_id")
|
|
8183
|
+
@click.argument("task")
|
|
8184
|
+
def teams_run_cmd(team_id: str, task: str) -> None:
|
|
8185
|
+
"""Spawn a team to execute a task (stub — prints team plan)."""
|
|
8186
|
+
from specsmith.agent.teams import get_team
|
|
8187
|
+
|
|
8188
|
+
team = get_team(team_id)
|
|
8189
|
+
if team is None:
|
|
8190
|
+
console.print(f"[red]Team not found:[/red] {team_id}")
|
|
8191
|
+
raise SystemExit(1)
|
|
8192
|
+
console.print(f"[bold]Spawning team:[/bold] {team.name}")
|
|
8193
|
+
for m in team.members:
|
|
8194
|
+
console.print(f" \u2192 {m.role} ({'required' if m.required else 'optional'})")
|
|
8195
|
+
console.print(f"[dim]Task: {task}[/dim]")
|
|
8196
|
+
console.print(
|
|
8197
|
+
"[yellow]\u26a0[/yellow] Team execution is in stub mode (no real agents spawned)."
|
|
8198
|
+
)
|
|
8199
|
+
|
|
8200
|
+
|
|
8201
|
+
main.add_command(teams_group)
|
|
8202
|
+
|
|
8203
|
+
|
|
8204
|
+
# ---------------------------------------------------------------------------
|
|
8205
|
+
# specsmith esdb — ChronoMemory ESDB management (Phase ESDB)
|
|
8206
|
+
# ---------------------------------------------------------------------------
|
|
8207
|
+
|
|
8208
|
+
|
|
8209
|
+
@main.group(name="esdb")
|
|
8210
|
+
def esdb_group() -> None:
|
|
8211
|
+
"""Manage the ChronoMemory Epistemic State Database."""
|
|
8212
|
+
|
|
8213
|
+
|
|
8214
|
+
@esdb_group.command(name="status")
|
|
8215
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8216
|
+
@click.option("--json", "as_json", is_flag=True, default=False)
|
|
8217
|
+
def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
|
|
8218
|
+
"""Show ESDB status and record counts."""
|
|
8219
|
+
import json as _json
|
|
8220
|
+
|
|
8221
|
+
from specsmith.esdb.bridge import EsdbBridge
|
|
8222
|
+
|
|
8223
|
+
bridge = EsdbBridge(project_dir)
|
|
8224
|
+
st = bridge.status()
|
|
8225
|
+
counts = bridge.record_counts()
|
|
8226
|
+
if as_json:
|
|
8227
|
+
click.echo(_json.dumps({"status": st.to_dict(), "counts": counts}, indent=2))
|
|
8228
|
+
return
|
|
8229
|
+
icon = "[green]\u25cf[/green]" if st.available else "[red]\u25cf[/red]"
|
|
8230
|
+
console.print(f"{icon} ESDB — {st.backend}")
|
|
8231
|
+
console.print(f" Records: {st.record_count}")
|
|
8232
|
+
for kind, count in counts.items():
|
|
8233
|
+
console.print(f" {kind}: {count}")
|
|
8234
|
+
if st.chain_valid:
|
|
8235
|
+
console.print(" [green]\u2714[/green] WAL chain integrity OK")
|
|
8236
|
+
|
|
8237
|
+
|
|
8238
|
+
@esdb_group.command(name="migrate")
|
|
8239
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8240
|
+
def esdb_migrate_cmd(project_dir: str) -> None:
|
|
8241
|
+
"""Migrate .specsmith/ flat JSON to ESDB (stub — validates data)."""
|
|
8242
|
+
from specsmith.esdb.bridge import EsdbBridge
|
|
8243
|
+
|
|
8244
|
+
bridge = EsdbBridge(project_dir)
|
|
8245
|
+
reqs = bridge.requirements()
|
|
8246
|
+
tests = bridge.testcases()
|
|
8247
|
+
console.print("[bold]Migration scan:[/bold]")
|
|
8248
|
+
console.print(f" Requirements: {len(reqs)}")
|
|
8249
|
+
console.print(f" Test cases: {len(tests)}")
|
|
8250
|
+
console.print("[green]\u2713[/green] Data validated. Full Rust ESDB migration not yet active.")
|
|
8251
|
+
console.print(
|
|
8252
|
+
"[dim]When ChronoMemory native engine is linked, run this again to migrate.[/dim]"
|
|
8253
|
+
)
|
|
8254
|
+
|
|
8255
|
+
|
|
8256
|
+
@esdb_group.command(name="replay")
|
|
8257
|
+
@click.option("--project-dir", type=click.Path(exists=True), default=".")
|
|
8258
|
+
def esdb_replay_cmd(project_dir: str) -> None:
|
|
8259
|
+
"""Replay ESDB WAL to verify state integrity (stub)."""
|
|
8260
|
+
from specsmith.esdb.bridge import EsdbBridge
|
|
8261
|
+
|
|
8262
|
+
bridge = EsdbBridge(project_dir)
|
|
8263
|
+
st = bridge.status()
|
|
8264
|
+
console.print(f"[bold]Replay check:[/bold] {st.backend}")
|
|
8265
|
+
console.print(f" Records: {st.record_count}")
|
|
8266
|
+
if st.chain_valid:
|
|
8267
|
+
console.print("[green]\u2714[/green] WAL chain valid — state consistent.")
|
|
8268
|
+
else:
|
|
8269
|
+
console.print("[red]\u2717[/red] WAL chain integrity failure detected.")
|
|
8270
|
+
|
|
8271
|
+
|
|
8272
|
+
main.add_command(esdb_group)
|
|
8273
|
+
|
|
8274
|
+
|
|
7986
8275
|
if __name__ == "__main__":
|
|
7987
8276
|
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.10.1.
|
|
3
|
+
Version: 0.10.1.dev298
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/execution_profiles.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/agent/provider_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/datasources/patentsview.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/epistemic/stress_tester.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/gui/widgets/update_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.10.1.dev296 → specsmith-0.10.1.dev298}/src/specsmith/integrations/claude_code.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|