specsmith 0.17.1.dev651__tar.gz → 0.17.1.dev659__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.1.dev651/src/specsmith.egg-info → specsmith-0.17.1.dev659}/PKG-INFO +1 -1
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/pyproject.toml +1 -1
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/cli.py +18 -12
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/governance_logic.py +24 -16
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/LICENSE +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/README.md +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/setup.cfg +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/belief.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/certainty.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/py.typed +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/recovery.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/session.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/epistemic/trace.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/__main__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/model_router.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/approvals.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/architect.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/auditor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/auth.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/block_export.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/channel.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/commands/issues_policy.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/commands/reporting.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/compressor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/config.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/context_window.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/credits.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/dashboard.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/differ.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/doctor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/drive.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/editor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/esdb/sqlite_store.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/executor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/exporter.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/governed_pr.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/history_search.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/importer.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/instinct.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/languages.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/ledger.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/local_model.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m007_yaml_first.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/patent.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/paths.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/phase.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/plugins.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/policy.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/profiles.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/project_metrics.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/quality_report.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/recover.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/releaser.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/requirements.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/risk.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/serve.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/session.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/session_init.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/session_store.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/sync.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/tools.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/trace.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/transcripts.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/updater.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/validator.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/wi_store.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/workspace.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_CMD_001.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_ai_client.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_architect_interview.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_architect_v2.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_architecture.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_auditor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_channel.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_cleanup_cmd.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_cli.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_cli_regressions.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_compliance.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_compliance_governance.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_compressor.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_dispatch.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_epistemic.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_esdb_backend_switch.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_esdb_enforcement.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_esdb_license.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_esdb_verify_chain_cli.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_golden_path.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_importer.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_init_modes.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_integrations.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_intelligence.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_issue_policy_features.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_issues_263_264.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_local_model.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_markdown_deprecation.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_mcp_client.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_mcp_server.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_migration_direction.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_model_router.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_new_modules.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_nexus.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_permissions.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_project_metrics.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_quality_report.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_rate_limits.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_reporting_commands.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_req_248_262.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_req_358_359.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_scaffolder.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_schema_migrations.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_smoke.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_suggester.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_tools.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_typing_guardrails.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_validator.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_vcs.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_warp_parity.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/tests/test_warp_parity_followup.py +0 -0
- {specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.
|
|
3
|
+
Version: 0.17.1.dev659
|
|
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.1.
|
|
7
|
+
version = "0.17.1.dev659"
|
|
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"
|
|
@@ -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]"
|
|
@@ -71,26 +71,34 @@ 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
|
+
# Apply it once at root level; each derived path also wraps its construction
|
|
85
|
+
# in os.path.realpath so CodeQL can trace the sanitiser inline at every sink
|
|
86
|
+
# without relying on interprocedural taint propagation.
|
|
87
|
+
_safe_root = os.path.realpath(_raw)
|
|
88
|
+
_root_str = _safe_root # alias used by helpers later in this function
|
|
81
89
|
intent = classify_intent(utterance)
|
|
82
90
|
# Requirements are now sourced from .specsmith/requirements.json (YAML-first mode).
|
|
83
91
|
# docs/REQUIREMENTS.md is deprecated (REQ-373) but still used as a fallback
|
|
84
92
|
# for keyword matching in infer_scope() when it exists. Explicit REQ-NNN IDs
|
|
85
93
|
# in the utterance are always resolved from requirements.json regardless.
|
|
86
|
-
# Use os.path
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
# Use os.path.* string functions so CodeQL can follow os.path.realpath as an
|
|
95
|
+
# inline sanitiser without a Path() object potentially re-tainting the flow.
|
|
96
|
+
_req_md_s = os.path.realpath(os.path.join(_raw, "docs", "REQUIREMENTS.md"))
|
|
97
|
+
if not os.path.isfile(_req_md_s):
|
|
98
|
+
_req_md_s = os.path.realpath(os.path.join(_raw, "REQUIREMENTS.md")) # legacy fallback
|
|
99
|
+
_req_md = Path(_req_md_s) # convert to Path for infer_scope (read-only use)
|
|
92
100
|
# infer_scope handles a non-existent path gracefully (returns empty scope)
|
|
93
|
-
_repo_idx = Path(os.path.realpath(os.path.join(
|
|
101
|
+
_repo_idx = Path(os.path.realpath(os.path.join(_safe_root, ".repo-index", "files.json")))
|
|
94
102
|
scope = infer_scope(
|
|
95
103
|
utterance,
|
|
96
104
|
_req_md,
|
|
@@ -111,7 +119,7 @@ def run_preflight(
|
|
|
111
119
|
# Read requirements machine-state using os.path.join on the clean _root_str
|
|
112
120
|
# so CodeQL traces the full sanitisation chain without re-tainting via Path.
|
|
113
121
|
rq_records: list[Any] = []
|
|
114
|
-
rq_path =
|
|
122
|
+
rq_path = Path(os.path.realpath(os.path.join(_safe_root, ".specsmith", "requirements.json")))
|
|
115
123
|
if rq_path.is_file():
|
|
116
124
|
try:
|
|
117
125
|
_rq = _json.loads(rq_path.read_text(encoding="utf-8"))
|
|
@@ -128,7 +136,7 @@ def run_preflight(
|
|
|
128
136
|
# Read test-case machine-state (same rationale as above).
|
|
129
137
|
test_case_ids: list[str] = []
|
|
130
138
|
tc_records: list[Any] = []
|
|
131
|
-
tc_path =
|
|
139
|
+
tc_path = Path(os.path.realpath(os.path.join(_safe_root, ".specsmith", "testcases.json")))
|
|
132
140
|
if tc_path.is_file():
|
|
133
141
|
try:
|
|
134
142
|
_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.1.
|
|
3
|
+
Version: 0.17.1.dev659
|
|
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
|
|
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.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/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
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/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.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m004_ledger_esdb.py
RENAMED
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m005_agent_run_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.17.1.dev651 → specsmith-0.17.1.dev659}/src/specsmith/migrations/m007_yaml_first.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
|