specsmith 0.17.0.dev649__tar.gz → 0.17.1.dev657__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.17.0.dev649/src/specsmith.egg-info → specsmith-0.17.1.dev657}/PKG-INFO +1 -1
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/pyproject.toml +1 -1
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/__init__.py +1 -1
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/cli.py +18 -12
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/config.py +1 -1
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/governance_logic.py +19 -15
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_cli.py +4 -2
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/LICENSE +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/README.md +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/setup.cfg +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/belief.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/certainty.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/py.typed +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/recovery.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/session.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/epistemic/trace.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/__main__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/model_router.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/approvals.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/architect.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/auditor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/auth.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/block_export.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/channel.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/commands/issues_policy.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/commands/reporting.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/compressor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/context_window.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/credits.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/dashboard.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/differ.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/doctor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/drive.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/editor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/esdb/sqlite_store.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/executor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/exporter.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/governed_pr.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/history_search.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/importer.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/instinct.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/languages.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/ledger.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/local_model.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m007_yaml_first.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/patent.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/paths.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/phase.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/plugins.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/policy.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/profiles.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/project_metrics.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/quality_report.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/recover.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/releaser.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/requirements.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/risk.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/serve.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/session.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/session_init.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/session_store.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/sync.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/tools.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/trace.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/transcripts.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/updater.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/validator.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/wi_store.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/workspace.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_CMD_001.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_ai_client.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_architect_interview.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_architect_v2.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_architecture.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_auditor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_channel.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_cleanup_cmd.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_cli_regressions.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_compliance.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_compliance_governance.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_compressor.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_dispatch.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_epistemic.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_esdb_backend_switch.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_esdb_enforcement.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_esdb_license.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_esdb_verify_chain_cli.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_golden_path.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_importer.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_init_modes.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_integrations.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_intelligence.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_issue_policy_features.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_issues_263_264.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_local_model.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_markdown_deprecation.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_mcp_client.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_mcp_server.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_migration_direction.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_model_router.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_new_modules.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_nexus.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_permissions.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_project_metrics.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_quality_report.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_rate_limits.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_reporting_commands.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_req_248_262.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_req_358_359.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_scaffolder.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_schema_migrations.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_smoke.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_suggester.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_tools.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_typing_guardrails.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_validator.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_vcs.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_warp_parity.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_warp_parity_followup.py +0 -0
- {specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/tests/test_wi_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.1.dev657
|
|
4
4
|
Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
|
|
5
5
|
Author: Layer1Labs Silicon, Inc.
|
|
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.17.
|
|
7
|
+
version = "0.17.1.dev657"
|
|
8
8
|
description = "AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider."
|
|
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.17.
|
|
11
|
+
__version__ = "0.17.1" # fallback: keep in sync with pyproject.toml
|
|
@@ -1845,9 +1845,12 @@ def doctor(project_dir: str, onboarding: bool, as_json: bool) -> None:
|
|
|
1845
1845
|
import subprocess
|
|
1846
1846
|
import sys
|
|
1847
1847
|
|
|
1848
|
-
# Single import style (no from-import) avoids CodeQL py/import-and-import-from.
|
|
1849
|
-
import specsmith.esdb as _esdb_mod_dr
|
|
1850
1848
|
from specsmith.auditor import run_audit
|
|
1849
|
+
|
|
1850
|
+
# Use from-import to stay consistent with the rest of the file (#208).
|
|
1851
|
+
# Re-read ESDB_BACKEND via sys.modules after open_default_store() updates
|
|
1852
|
+
# the module-level global in-place so the locally-imported name is fresh.
|
|
1853
|
+
from specsmith.esdb import open_default_store as _open_esdb_dr # noqa: PLC0415
|
|
1851
1854
|
from specsmith.phase import read_phase
|
|
1852
1855
|
|
|
1853
1856
|
def _tool_version(cmd: str) -> tuple[bool, str]:
|
|
@@ -1897,7 +1900,7 @@ def doctor(project_dir: str, onboarding: bool, as_json: bool) -> None:
|
|
|
1897
1900
|
chain_ok = False
|
|
1898
1901
|
record_count = 0
|
|
1899
1902
|
try:
|
|
1900
|
-
with
|
|
1903
|
+
with _open_esdb_dr(root, warn=False) as store: # type: ignore[attr-defined]
|
|
1901
1904
|
esdb_open = True
|
|
1902
1905
|
record_count = int(store.record_count())
|
|
1903
1906
|
chain_ok = store.chain_valid() is not False
|
|
@@ -1907,7 +1910,7 @@ def doctor(project_dir: str, onboarding: bool, as_json: bool) -> None:
|
|
|
1907
1910
|
# Re-read the module-level ESDB_BACKEND — open_default_store() updates
|
|
1908
1911
|
# the global in-place so we read it via the module object, not a
|
|
1909
1912
|
# locally-imported name that would be stale. (#263)
|
|
1910
|
-
_add("esdb backend", True, f"{
|
|
1913
|
+
_add("esdb backend", True, f"{sys.modules['specsmith.esdb'].ESDB_BACKEND} open")
|
|
1911
1914
|
_add(
|
|
1912
1915
|
"esdb chain",
|
|
1913
1916
|
chain_ok,
|
|
@@ -11264,8 +11267,11 @@ def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
|
|
|
11264
11267
|
import json as _json
|
|
11265
11268
|
import sys
|
|
11266
11269
|
|
|
11267
|
-
|
|
11268
|
-
|
|
11270
|
+
# Use from-import + sys.modules to avoid py/import-and-import-from (#207).
|
|
11271
|
+
# open_default_store() updates the module-level ESDB_BACKEND global in-place;
|
|
11272
|
+
# we re-read it via sys.modules after the open so the name is always current.
|
|
11273
|
+
from specsmith.esdb import open_default_store as _esdb_open_status # noqa: PLC0415
|
|
11274
|
+
from specsmith.esdb._license import check_license, resolve_license_path # noqa: PLC0415
|
|
11269
11275
|
from specsmith.sync import auto_migrate_if_needed
|
|
11270
11276
|
|
|
11271
11277
|
root = Path(project_dir).resolve()
|
|
@@ -11276,10 +11282,10 @@ def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
|
|
|
11276
11282
|
lic_status = check_license(warn=False) if lic_path else None
|
|
11277
11283
|
|
|
11278
11284
|
# Open the appropriate store (no warning — we’ll report it ourselves)
|
|
11279
|
-
store =
|
|
11280
|
-
# Re-read ESDB_BACKEND from the module — open_default_store()
|
|
11281
|
-
# module-level global;
|
|
11282
|
-
active_backend =
|
|
11285
|
+
store = _esdb_open_status(root, warn=False)
|
|
11286
|
+
# Re-read ESDB_BACKEND from the module via sys.modules — open_default_store()
|
|
11287
|
+
# updates the module-level global in-place; a locally-imported name is stale.
|
|
11288
|
+
active_backend = sys.modules["specsmith.esdb"].ESDB_BACKEND
|
|
11283
11289
|
|
|
11284
11290
|
backend_label: str
|
|
11285
11291
|
chain_ok: bool = True
|
|
@@ -11311,7 +11317,7 @@ def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
|
|
|
11311
11317
|
backend_label = f"{active_backend} (error: {exc})"
|
|
11312
11318
|
|
|
11313
11319
|
license_info: dict[str, object]
|
|
11314
|
-
if not
|
|
11320
|
+
if not sys.modules["specsmith.esdb"].CHRONO_AVAILABLE:
|
|
11315
11321
|
license_info = {"chronomemory_installed": False, "active": False}
|
|
11316
11322
|
elif lic_status is None:
|
|
11317
11323
|
license_info = {
|
|
@@ -11383,7 +11389,7 @@ def esdb_status_cmd(project_dir: str, as_json: bool) -> None:
|
|
|
11383
11389
|
if store_error:
|
|
11384
11390
|
console.print(f" [red]\u2717[/red] Store error: {store_error}")
|
|
11385
11391
|
# License line
|
|
11386
|
-
if not
|
|
11392
|
+
if not sys.modules["specsmith.esdb"].CHRONO_AVAILABLE:
|
|
11387
11393
|
console.print(
|
|
11388
11394
|
" [dim]chronomemory not installed \u2014 run "
|
|
11389
11395
|
"'pip install specsmith[esdb]' for ChronoStore[/dim]"
|
|
@@ -141,7 +141,7 @@ class ProjectConfig(BaseModel):
|
|
|
141
141
|
),
|
|
142
142
|
)
|
|
143
143
|
language: str = Field(default="python", description="Primary language/runtime")
|
|
144
|
-
spec_version: str = Field(default="0.
|
|
144
|
+
spec_version: str = Field(default="0.17.1", description="Spec version to scaffold from")
|
|
145
145
|
description: str = Field(default="", description="Short project description")
|
|
146
146
|
|
|
147
147
|
# Options
|
|
@@ -71,26 +71,30 @@ def run_preflight(
|
|
|
71
71
|
from specsmith import __version__
|
|
72
72
|
from specsmith.agent.broker import Intent, classify_intent, infer_scope
|
|
73
73
|
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
# interprocedural
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
# Inline validation + sanitisation so CodeQL's taint analysis can follow
|
|
75
|
+
# the os.path.realpath sanitiser without crossing a user-defined function
|
|
76
|
+
# boundary (interprocedural tracking is unreliable for py/path-injection).
|
|
77
|
+
_raw = str(project_dir)
|
|
78
|
+
if "\x00" in _raw:
|
|
79
|
+
raise ValueError(f"Path contains null byte: {_raw!r}")
|
|
80
|
+
for _p in Path(_raw).parts:
|
|
81
|
+
if _p in ("..", "..."):
|
|
82
|
+
raise ValueError(f"Path traversal rejected: {_raw!r}")
|
|
83
|
+
# os.path.realpath is a CodeQL-recognised py/path-injection sanitiser.
|
|
84
|
+
# Assign once at root level; all derived paths inherit the sanitisation.
|
|
85
|
+
_safe_root = os.path.realpath(_raw)
|
|
86
|
+
_root = Path(_safe_root)
|
|
87
|
+
_root_str = _safe_root # alias used by helpers later in this function
|
|
81
88
|
intent = classify_intent(utterance)
|
|
82
89
|
# Requirements are now sourced from .specsmith/requirements.json (YAML-first mode).
|
|
83
90
|
# docs/REQUIREMENTS.md is deprecated (REQ-373) but still used as a fallback
|
|
84
91
|
# for keyword matching in infer_scope() when it exists. Explicit REQ-NNN IDs
|
|
85
92
|
# in the utterance are always resolved from requirements.json regardless.
|
|
86
|
-
|
|
87
|
-
# interprocedural taint analysis can confirm the sanitiser inline without
|
|
88
|
-
# having to track through a user-defined wrapper function.
|
|
89
|
-
_req_md = Path(os.path.realpath(os.path.join(_root_str, "docs", "REQUIREMENTS.md")))
|
|
93
|
+
_req_md = Path(os.path.join(_safe_root, "docs", "REQUIREMENTS.md"))
|
|
90
94
|
if not _req_md.is_file():
|
|
91
|
-
_req_md = Path(os.path.
|
|
95
|
+
_req_md = Path(os.path.join(_safe_root, "REQUIREMENTS.md")) # legacy
|
|
92
96
|
# infer_scope handles a non-existent path gracefully (returns empty scope)
|
|
93
|
-
_repo_idx = Path(os.path.
|
|
97
|
+
_repo_idx = Path(os.path.join(_safe_root, ".repo-index", "files.json"))
|
|
94
98
|
scope = infer_scope(
|
|
95
99
|
utterance,
|
|
96
100
|
_req_md,
|
|
@@ -111,7 +115,7 @@ def run_preflight(
|
|
|
111
115
|
# Read requirements machine-state using os.path.join on the clean _root_str
|
|
112
116
|
# so CodeQL traces the full sanitisation chain without re-tainting via Path.
|
|
113
117
|
rq_records: list[Any] = []
|
|
114
|
-
rq_path =
|
|
118
|
+
rq_path = Path(os.path.join(_safe_root, ".specsmith", "requirements.json"))
|
|
115
119
|
if rq_path.is_file():
|
|
116
120
|
try:
|
|
117
121
|
_rq = _json.loads(rq_path.read_text(encoding="utf-8"))
|
|
@@ -128,7 +132,7 @@ def run_preflight(
|
|
|
128
132
|
# Read test-case machine-state (same rationale as above).
|
|
129
133
|
test_case_ids: list[str] = []
|
|
130
134
|
tc_records: list[Any] = []
|
|
131
|
-
tc_path =
|
|
135
|
+
tc_path = Path(os.path.join(_safe_root, ".specsmith", "testcases.json"))
|
|
132
136
|
if tc_path.is_file():
|
|
133
137
|
try:
|
|
134
138
|
_tc = _json.loads(tc_path.read_text(encoding="utf-8"))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.1.dev657
|
|
4
4
|
Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
|
|
5
5
|
Author: Layer1Labs Silicon, Inc.
|
|
6
6
|
License-Expression: MIT
|
|
@@ -112,6 +112,8 @@ class TestCLIUpgrade:
|
|
|
112
112
|
assert "Already at spec version" in result.output
|
|
113
113
|
|
|
114
114
|
def test_upgrade_to_new_version(self, tmp_path: Path) -> None:
|
|
115
|
+
from specsmith import __version__
|
|
116
|
+
|
|
115
117
|
target = _scaffold_governed(tmp_path)
|
|
116
118
|
# Backdate spec_version so there is an actual upgrade to perform.
|
|
117
119
|
# Without this the scaffold is already at __version__ and the
|
|
@@ -124,14 +126,14 @@ class TestCLIUpgrade:
|
|
|
124
126
|
yaml.dump(data, fh, default_flow_style=False)
|
|
125
127
|
runner = CliRunner()
|
|
126
128
|
result = runner.invoke(
|
|
127
|
-
main, ["upgrade", "--project-dir", str(target), "--spec-version",
|
|
129
|
+
main, ["upgrade", "--project-dir", str(target), "--spec-version", __version__]
|
|
128
130
|
)
|
|
129
131
|
assert result.exit_code == 0
|
|
130
132
|
assert "Upgraded" in result.output
|
|
131
133
|
# Verify scaffold.yml spec_version was updated to the target version
|
|
132
134
|
with open(target / "scaffold.yml") as fh:
|
|
133
135
|
data = yaml.safe_load(fh)
|
|
134
|
-
assert data["spec_version"] ==
|
|
136
|
+
assert data["spec_version"] == __version__
|
|
135
137
|
|
|
136
138
|
|
|
137
139
|
class TestCLICreditsLimits:
|
|
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.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/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
|
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m004_ledger_esdb.py
RENAMED
|
File without changes
|
{specsmith-0.17.0.dev649 → specsmith-0.17.1.dev657}/src/specsmith/migrations/m005_agent_run_tool.py
RENAMED
|
File without changes
|