specsmith 0.11.6.dev457__tar.gz → 0.11.7.dev461__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.11.6.dev457/src/specsmith.egg-info → specsmith-0.11.7.dev461}/PKG-INFO +1 -1
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/pyproject.toml +1 -1
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/__init__.py +1 -1
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/cli.py +71 -8
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/config.py +1 -1
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/updater.py +34 -12
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_cli.py +9 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/LICENSE +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/README.md +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/setup.cfg +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/belief.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/certainty.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/py.typed +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/recovery.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/session.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/epistemic/trace.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/__main__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/architect.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/auditor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/auth.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/block_export.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/channel.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/compressor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/context_window.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/credits.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/differ.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/doctor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/drive.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/editor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/executor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/exporter.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/history_search.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/importer.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/instinct.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/languages.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/ledger.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/patent.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/paths.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/phase.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/plugins.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/profiles.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/releaser.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/requirements.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/serve.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/session.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/session_init.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/session_store.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/sync.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/tools.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/trace.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/validator.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/workspace.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_CMD_001.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_ai_client.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_auditor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_channel.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_compliance.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_compressor.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_dispatch.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_epistemic.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_importer.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_integrations.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_intelligence.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_mcp_client.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_new_modules.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_nexus.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_permissions.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_rate_limits.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_req_248_262.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_scaffolder.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_smoke.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_suggester.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_tools.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_validator.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_vcs.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/tests/test_warp_parity.py +0 -0
- {specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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.11.
|
|
3
|
+
Version: 0.11.7.dev461
|
|
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.11.
|
|
7
|
+
version = "0.11.7.dev461"
|
|
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"
|
|
@@ -8,4 +8,4 @@ from importlib.metadata import version as _pkg_version
|
|
|
8
8
|
try:
|
|
9
9
|
__version__: str = _pkg_version("specsmith")
|
|
10
10
|
except PackageNotFoundError: # running from source without install
|
|
11
|
-
__version__ = "0.11.
|
|
11
|
+
__version__ = "0.11.7" # fallback: keep in sync with pyproject.toml
|
|
@@ -97,12 +97,32 @@ class _AutoUpdateGroup(click.Group):
|
|
|
97
97
|
|
|
98
98
|
def invoke(self, ctx: click.Context) -> object:
|
|
99
99
|
import os
|
|
100
|
-
|
|
101
|
-
# Skip if explicitly disabled or if this is a meta-command
|
|
102
|
-
# ctx.protected_args is deprecated in Click 9.0; suppress the warning
|
|
103
|
-
# on access (it still works in 8.x). In 9.0 the subcommand moves to args.
|
|
104
100
|
import warnings
|
|
105
101
|
|
|
102
|
+
# ── Pipx-only enforcement ─────────────────────────────────────────────
|
|
103
|
+
# specsmith MUST be installed and invoked through pipx.
|
|
104
|
+
# Any invocation from a non-pipx Python environment is rejected unless
|
|
105
|
+
# the escape hatch SPECSMITH_ALLOW_NON_PIPX=1 is set (CI / dev only).
|
|
106
|
+
if not os.environ.get("SPECSMITH_ALLOW_NON_PIPX"):
|
|
107
|
+
from specsmith.updater import is_pipx_install
|
|
108
|
+
|
|
109
|
+
if not is_pipx_install():
|
|
110
|
+
click.echo(
|
|
111
|
+
"ERROR: specsmith must be installed and run via pipx only.\n"
|
|
112
|
+
" Any pip install, venv install, or editable dev install\n"
|
|
113
|
+
" is rejected to prevent version conflicts.\n"
|
|
114
|
+
"\n"
|
|
115
|
+
" Install: pipx install specsmith\n"
|
|
116
|
+
" Upgrade: pipx upgrade specsmith\n"
|
|
117
|
+
" Remove other: pip uninstall specsmith\n"
|
|
118
|
+
"\n"
|
|
119
|
+
" CI/testing override: set SPECSMITH_ALLOW_NON_PIPX=1",
|
|
120
|
+
err=True,
|
|
121
|
+
)
|
|
122
|
+
raise SystemExit(1)
|
|
123
|
+
|
|
124
|
+
# ── Version checks (skip for meta-commands) ───────────────────────────
|
|
125
|
+
# ctx.protected_args is deprecated in Click 9.0; suppress the warning.
|
|
106
126
|
with warnings.catch_warnings():
|
|
107
127
|
warnings.simplefilter("ignore", DeprecationWarning)
|
|
108
128
|
protected = list(ctx.protected_args) # [subcommand] in 8.x, [] in 9.0
|
|
@@ -182,17 +202,53 @@ def _maybe_prompt_project_update() -> None:
|
|
|
182
202
|
def _maybe_notify_pypi_update() -> None:
|
|
183
203
|
"""Check PyPI for a newer specsmith version. Prints one-liner if outdated.
|
|
184
204
|
|
|
185
|
-
|
|
186
|
-
|
|
205
|
+
Persists the last-check timestamp to ``~/.specsmith/last-update-check``
|
|
206
|
+
so the network call is only made when it has been more than
|
|
207
|
+
``SPECSMITH_UPDATE_INTERVAL_HOURS`` hours since the previous check
|
|
208
|
+
(default: 24h). Within that window the function returns immediately
|
|
209
|
+
without any I/O — adding zero latency to every CLI invocation.
|
|
210
|
+
|
|
211
|
+
Override the interval::
|
|
212
|
+
|
|
213
|
+
SPECSMITH_UPDATE_INTERVAL_HOURS=4 specsmith audit
|
|
214
|
+
|
|
215
|
+
Disable entirely::
|
|
216
|
+
|
|
217
|
+
SPECSMITH_NO_UPDATE_CHECK=1 specsmith audit
|
|
218
|
+
|
|
219
|
+
Uses a 3-second network timeout so a slow/offline connection never
|
|
220
|
+
blocks the user.
|
|
187
221
|
"""
|
|
188
222
|
import os
|
|
223
|
+
import time
|
|
224
|
+
from pathlib import Path
|
|
189
225
|
|
|
226
|
+
if os.environ.get("SPECSMITH_NO_UPDATE_CHECK"):
|
|
227
|
+
return
|
|
228
|
+
|
|
229
|
+
# One check per shell session — never fire twice in the same process tree.
|
|
190
230
|
session_key = "SPECSMITH_PYPI_CHECKED"
|
|
191
231
|
if os.environ.get(session_key):
|
|
192
232
|
return
|
|
193
233
|
os.environ[session_key] = "1"
|
|
194
234
|
|
|
195
235
|
try:
|
|
236
|
+
interval_h = float(os.environ.get("SPECSMITH_UPDATE_INTERVAL_HOURS", "24"))
|
|
237
|
+
interval_s = interval_h * 3600
|
|
238
|
+
|
|
239
|
+
stamp_file = Path.home() / ".specsmith" / "last-update-check"
|
|
240
|
+
now = time.time()
|
|
241
|
+
|
|
242
|
+
# Read persisted last-check time (best-effort).
|
|
243
|
+
last_check = 0.0
|
|
244
|
+
if stamp_file.is_file():
|
|
245
|
+
with contextlib.suppress(ValueError, OSError):
|
|
246
|
+
last_check = float(stamp_file.read_text(encoding="utf-8").strip())
|
|
247
|
+
|
|
248
|
+
# Not due yet — skip entirely (no network call).
|
|
249
|
+
if now - last_check < interval_s:
|
|
250
|
+
return
|
|
251
|
+
|
|
196
252
|
import json as _json # noqa: PLC0415
|
|
197
253
|
from urllib.request import urlopen # noqa: PLC0415
|
|
198
254
|
|
|
@@ -202,9 +258,16 @@ def _maybe_notify_pypi_update() -> None:
|
|
|
202
258
|
if not latest:
|
|
203
259
|
return
|
|
204
260
|
|
|
205
|
-
#
|
|
261
|
+
# Persist the timestamp now that we have a successful response.
|
|
262
|
+
try:
|
|
263
|
+
stamp_file.parent.mkdir(parents=True, exist_ok=True)
|
|
264
|
+
stamp_file.write_text(str(now), encoding="utf-8")
|
|
265
|
+
except OSError:
|
|
266
|
+
pass # Never fail the CLI over a timestamp write error
|
|
267
|
+
|
|
268
|
+
# Simple version comparison — no packaging dep needed.
|
|
206
269
|
def _ver(v: str) -> tuple[int, ...]:
|
|
207
|
-
import re
|
|
270
|
+
import re # noqa: PLC0415
|
|
208
271
|
|
|
209
272
|
clean = re.match(r"(\d+\.\d+\.\d+)", v)
|
|
210
273
|
return tuple(int(x) for x in clean.group(1).split(".")) if clean else (0,)
|
|
@@ -115,7 +115,7 @@ class ProjectConfig(BaseModel):
|
|
|
115
115
|
),
|
|
116
116
|
)
|
|
117
117
|
language: str = Field(default="python", description="Primary language/runtime")
|
|
118
|
-
spec_version: str = Field(default="0.11.
|
|
118
|
+
spec_version: str = Field(default="0.11.7", description="Spec version to scaffold from")
|
|
119
119
|
description: str = Field(default="", description="Short project description")
|
|
120
120
|
|
|
121
121
|
# Options
|
|
@@ -66,17 +66,32 @@ def is_outdated() -> bool:
|
|
|
66
66
|
def is_pipx_install() -> bool:
|
|
67
67
|
"""Return True if specsmith was installed via pipx.
|
|
68
68
|
|
|
69
|
-
Checks sys.executable path
|
|
69
|
+
Checks sys.executable path against known pipx venv locations and the
|
|
70
|
+
PIPX_HOME / PIPX_LOCAL_VENVS env vars. Robust on Windows where pipx
|
|
71
|
+
stores venvs in ``~/pipx/venvs/`` without setting PIPX_HOME.
|
|
70
72
|
"""
|
|
71
73
|
import os
|
|
72
74
|
import sys
|
|
75
|
+
from pathlib import Path
|
|
73
76
|
|
|
74
77
|
exe = sys.executable.replace("\\", "/").lower()
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
|
|
79
|
+
# 1. Executable path contains 'pipx' (catches most OS defaults)
|
|
80
|
+
if "pipx" in exe:
|
|
81
|
+
return True
|
|
82
|
+
|
|
83
|
+
# 2. Explicit pipx env vars (set by some CI / pipx versions)
|
|
84
|
+
if os.environ.get("PIPX_HOME") or os.environ.get("PIPX_LOCAL_VENVS"):
|
|
85
|
+
return True
|
|
86
|
+
|
|
87
|
+
# 3. Windows default: ~/pipx/venvs/<pkg>/Scripts/python.exe
|
|
88
|
+
win_pipx = (Path.home() / "pipx" / "venvs").as_posix().lower()
|
|
89
|
+
if exe.startswith(win_pipx):
|
|
90
|
+
return True
|
|
91
|
+
|
|
92
|
+
# 4. Linux/macOS default: ~/.local/pipx/venvs/<pkg>/bin/python
|
|
93
|
+
unix_pipx = (Path.home() / ".local" / "pipx" / "venvs").as_posix().lower()
|
|
94
|
+
return bool(exe.startswith(unix_pipx))
|
|
80
95
|
|
|
81
96
|
|
|
82
97
|
def run_self_update(
|
|
@@ -123,14 +138,17 @@ def run_self_update(
|
|
|
123
138
|
|
|
124
139
|
|
|
125
140
|
def check_project_version(root: Path) -> tuple[str, str]:
|
|
126
|
-
"""Compare scaffold
|
|
141
|
+
"""Compare scaffold config spec_version to installed version.
|
|
127
142
|
|
|
143
|
+
Checks ``docs/SPECSMITH.yml`` (canonical) then ``scaffold.yml`` (legacy).
|
|
128
144
|
Returns (project_version, installed_version).
|
|
129
145
|
"""
|
|
130
146
|
import yaml
|
|
131
147
|
|
|
132
|
-
|
|
133
|
-
|
|
148
|
+
from specsmith.paths import find_scaffold
|
|
149
|
+
|
|
150
|
+
scaffold_path = find_scaffold(root)
|
|
151
|
+
if scaffold_path is None:
|
|
134
152
|
return "", __version__
|
|
135
153
|
|
|
136
154
|
with open(scaffold_path) as f:
|
|
@@ -150,15 +168,19 @@ def needs_migration(root: Path) -> bool:
|
|
|
150
168
|
def run_migration(root: Path, *, dry_run: bool = False) -> list[str]:
|
|
151
169
|
"""Migrate a project to the current specsmith version.
|
|
152
170
|
|
|
171
|
+
Checks ``docs/SPECSMITH.yml`` (canonical) then ``scaffold.yml`` (legacy).
|
|
153
172
|
Returns list of actions taken (or that would be taken for dry_run).
|
|
154
173
|
"""
|
|
155
174
|
import yaml
|
|
156
175
|
|
|
157
176
|
from specsmith.ledger import add_entry
|
|
177
|
+
from specsmith.paths import find_scaffold
|
|
158
178
|
|
|
159
|
-
scaffold_path = root
|
|
160
|
-
if
|
|
161
|
-
return [
|
|
179
|
+
scaffold_path = find_scaffold(root)
|
|
180
|
+
if scaffold_path is None:
|
|
181
|
+
return [
|
|
182
|
+
"No scaffold config found (docs/SPECSMITH.yml or scaffold.yml) — nothing to migrate"
|
|
183
|
+
]
|
|
162
184
|
|
|
163
185
|
with open(scaffold_path) as f:
|
|
164
186
|
raw = yaml.safe_load(f) or {}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.7.dev461
|
|
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
|
|
@@ -113,6 +113,15 @@ class TestCLIUpgrade:
|
|
|
113
113
|
|
|
114
114
|
def test_upgrade_to_new_version(self, tmp_path: Path) -> None:
|
|
115
115
|
target = _scaffold_governed(tmp_path)
|
|
116
|
+
# Backdate spec_version so there is an actual upgrade to perform.
|
|
117
|
+
# Without this the scaffold is already at __version__ and the
|
|
118
|
+
# command would return "Already at spec version" instead.
|
|
119
|
+
scaffold_yml = target / "scaffold.yml"
|
|
120
|
+
with open(scaffold_yml) as fh:
|
|
121
|
+
data = yaml.safe_load(fh)
|
|
122
|
+
data["spec_version"] = "0.11.6"
|
|
123
|
+
with open(scaffold_yml, "w") as fh:
|
|
124
|
+
yaml.dump(data, fh, default_flow_style=False)
|
|
116
125
|
runner = CliRunner()
|
|
117
126
|
result = runner.invoke(
|
|
118
127
|
main, ["upgrade", "--project-dir", str(target), "--spec-version", "0.11.7"]
|
|
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.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/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
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.11.6.dev457 → specsmith-0.11.7.dev461}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|