specsmith 0.18.0.dev686__tar.gz → 0.18.0.dev691__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.18.0.dev686/src/specsmith.egg-info → specsmith-0.18.0.dev691}/PKG-INFO +1 -1
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/pyproject.toml +1 -1
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb/__init__.py +9 -2
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb/sqlite_store.py +20 -5
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/governance_logic.py +24 -5
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691/src/specsmith.egg-info}/PKG-INFO +1 -1
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/LICENSE +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/README.md +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/setup.cfg +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/belief.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/certainty.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/py.typed +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/recovery.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/session.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/epistemic/trace.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/__main__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/model_router.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/token_pricing.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/approvals.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/architect.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/auditor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/auth.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/block_export.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/channel.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/cli.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/commands/issues_policy.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/commands/reporting.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/compressor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/config.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/context_window.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/credits.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/dashboard.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/differ.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/doctor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/drive.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/editor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/efficiency.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb_sweep.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/esdb_writer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/executor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/exporter.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/governed_pr.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/history_search.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/importer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/instinct.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/languages.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/ledger.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/local_model.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m007_yaml_first.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m008_esdb_full_coverage.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m009_esdb_first.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m010_post_esdb_cleanup.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/patent.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/paths.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/phase.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/plugins.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/policy.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/profiles.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/project_metrics.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/quality_report.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/recover.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/releaser.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/requirements.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/risk.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/serve.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/session.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/session_init.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/session_store.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/sync.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/tools.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/trace.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/transcripts.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/updater.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/validator.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/wi_store.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/workspace.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_CMD_001.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_ai_client.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_architect_interview.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_architect_v2.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_architecture.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_auditor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_benchmark_harness.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_channel.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_cleanup_cmd.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_cli.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_cli_regressions.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_compliance.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_compliance_governance.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_compressor.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_deprecation_registry.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_dispatch.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_dual_write.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_efficiency.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_epistemic.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_backend_switch.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_enforcement.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_integration.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_license.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_status_integrity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_status_output.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_sweep.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_verify_chain_cli.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_esdb_writer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_golden_path.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_importer.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_init_modes.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_integrations.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_intelligence.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_issue_policy_features.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_issues_263_264.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_local_model.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_markdown_deprecation.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_mcp_client.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_mcp_server.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_migration_direction.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_model_router.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_new_modules.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_nexus.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_parallel_agents.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_permissions.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_project_metrics.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_quality_report.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_rate_limits.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_repl.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_repl_extended.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_reporting_commands.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_req_248_262.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_req_358_359.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_resume_command.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_scaffolder.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_schema_migrations.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_smoke.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_sqlite_parity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_suggester.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_token_cost.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_tools.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_trace_vault_esdb.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_typing_guardrails.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_validator.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_vcs.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_warp_parity.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_warp_parity_followup.py +0 -0
- {specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/tests/test_wi_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.18.0.
|
|
3
|
+
Version: 0.18.0.dev691
|
|
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.18.0.
|
|
7
|
+
version = "0.18.0.dev691"
|
|
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"
|
|
@@ -136,7 +136,10 @@ def open_default_store(
|
|
|
136
136
|
|
|
137
137
|
from pathlib import Path
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
# CodeQL py/path-injection: use os.path.realpath (recognised normaliser);
|
|
140
|
+
# the filesystem-path containment checks live in SqliteStore.__init__ and
|
|
141
|
+
# _maybe_promote_sqlite_to_chrono where the actual sinks are.
|
|
142
|
+
root = Path(_os.path.realpath(str(project_root)))
|
|
140
143
|
|
|
141
144
|
# Priority 1: explicit override
|
|
142
145
|
if _os.environ.get("SPECSMITH_ESDB_BACKEND", "").strip().lower() == "sqlite":
|
|
@@ -172,7 +175,11 @@ def _maybe_promote_sqlite_to_chrono(root: "object", chrono: "object") -> None:
|
|
|
172
175
|
from pathlib import Path as _Path
|
|
173
176
|
|
|
174
177
|
try:
|
|
175
|
-
|
|
178
|
+
_r = os.path.realpath(str(root))
|
|
179
|
+
_sp = os.path.realpath(os.path.join(_r, ".specsmith", "esdb.sqlite3"))
|
|
180
|
+
if _sp != _r and not _sp.startswith(_r + os.sep):
|
|
181
|
+
return
|
|
182
|
+
sqlite_path = _Path(_sp)
|
|
176
183
|
if not sqlite_path.exists():
|
|
177
184
|
return
|
|
178
185
|
|
|
@@ -150,8 +150,15 @@ class SqliteStore:
|
|
|
150
150
|
"""
|
|
151
151
|
|
|
152
152
|
def __init__(self, project_root: str | Path) -> None:
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
# CodeQL py/path-injection: normalize with os.path.realpath AND assert the
|
|
154
|
+
# DB path stays within the project root (containment), then store the
|
|
155
|
+
# sanitised values so the open() sinks (mkdir/connect) receive clean paths.
|
|
156
|
+
_root = os.path.realpath(str(project_root))
|
|
157
|
+
_db = os.path.realpath(os.path.join(_root, ".specsmith", _DB_FILENAME))
|
|
158
|
+
if _db != _root and not _db.startswith(_root + os.sep):
|
|
159
|
+
raise ValueError(f"Database path escapes project root: {_db!r}")
|
|
160
|
+
self.root = Path(_root)
|
|
161
|
+
self._db_path = Path(_db)
|
|
155
162
|
self._conn: sqlite3.Connection | None = None
|
|
156
163
|
self._open: bool = False
|
|
157
164
|
|
|
@@ -415,10 +422,15 @@ class SqliteStore:
|
|
|
415
422
|
Returns a dict with counts: ``{"requirements": N, "testcases": M, "skipped": K}``.
|
|
416
423
|
Already-present records (by ID) are updated in-place.
|
|
417
424
|
"""
|
|
418
|
-
|
|
425
|
+
# CodeQL py/path-injection: normalize + containment-check each JSON path
|
|
426
|
+
# before the .exists()/.read_text() sinks below.
|
|
427
|
+
_state = os.path.realpath(str(specsmith_dir))
|
|
419
428
|
counts: dict[str, int] = {"requirements": 0, "testcases": 0, "skipped": 0}
|
|
420
429
|
|
|
421
|
-
|
|
430
|
+
_req = os.path.realpath(os.path.join(_state, "requirements.json"))
|
|
431
|
+
if _req != _state and not _req.startswith(_state + os.sep):
|
|
432
|
+
raise ValueError(f"Path escapes state directory: {_req!r}")
|
|
433
|
+
req_path = Path(_req)
|
|
422
434
|
if req_path.exists():
|
|
423
435
|
try:
|
|
424
436
|
reqs = json.loads(req_path.read_text(encoding="utf-8"))
|
|
@@ -439,7 +451,10 @@ class SqliteStore:
|
|
|
439
451
|
except (OSError, ValueError):
|
|
440
452
|
counts["skipped"] += 1 # file unreadable or invalid JSON
|
|
441
453
|
|
|
442
|
-
|
|
454
|
+
_test = os.path.realpath(os.path.join(_state, "testcases.json"))
|
|
455
|
+
if _test != _state and not _test.startswith(_state + os.sep):
|
|
456
|
+
raise ValueError(f"Path escapes state directory: {_test!r}")
|
|
457
|
+
test_path = Path(_test)
|
|
443
458
|
if test_path.exists():
|
|
444
459
|
try:
|
|
445
460
|
tests = json.loads(test_path.read_text(encoding="utf-8"))
|
|
@@ -98,10 +98,23 @@ def run_preflight(
|
|
|
98
98
|
# traces the py/path-injection sanitiser inline; selecting between two
|
|
99
99
|
# already-sanitised Paths does not re-taint. infer_scope handles a
|
|
100
100
|
# non-existent path gracefully (returns an empty scope).
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
# CodeQL py/path-injection requires normalize (realpath) AND containment
|
|
102
|
+
# (startswith root), not normalization alone. Build each candidate as a
|
|
103
|
+
# realpath string, assert it stays within _safe_root, then wrap in Path so
|
|
104
|
+
# the sanitised value flows into infer_scope() and the .is_file() sinks.
|
|
105
|
+
_docs_str = os.path.realpath(os.path.join(_safe_root, "docs", "REQUIREMENTS.md"))
|
|
106
|
+
if _docs_str != _safe_root and not _docs_str.startswith(_safe_root + os.sep):
|
|
107
|
+
raise ValueError(f"Path escapes project root: {_docs_str!r}")
|
|
108
|
+
_root_md_str = os.path.realpath(os.path.join(_safe_root, "REQUIREMENTS.md"))
|
|
109
|
+
if _root_md_str != _safe_root and not _root_md_str.startswith(_safe_root + os.sep):
|
|
110
|
+
raise ValueError(f"Path escapes project root: {_root_md_str!r}")
|
|
111
|
+
_repo_idx_str = os.path.realpath(os.path.join(_safe_root, ".repo-index", "files.json"))
|
|
112
|
+
if _repo_idx_str != _safe_root and not _repo_idx_str.startswith(_safe_root + os.sep):
|
|
113
|
+
raise ValueError(f"Path escapes project root: {_repo_idx_str!r}")
|
|
114
|
+
_req_md_docs = Path(_docs_str)
|
|
115
|
+
_req_md_root = Path(_root_md_str)
|
|
103
116
|
_req_md = _req_md_docs if _req_md_docs.is_file() else _req_md_root
|
|
104
|
-
_repo_idx = Path(
|
|
117
|
+
_repo_idx = Path(_repo_idx_str)
|
|
105
118
|
scope = infer_scope(
|
|
106
119
|
utterance,
|
|
107
120
|
_req_md,
|
|
@@ -122,7 +135,10 @@ def run_preflight(
|
|
|
122
135
|
# Read requirements machine-state using os.path.join on the clean _root_str
|
|
123
136
|
# so CodeQL traces the full sanitisation chain without re-tainting via Path.
|
|
124
137
|
rq_records: list[Any] = []
|
|
125
|
-
|
|
138
|
+
rq_str = os.path.realpath(os.path.join(_safe_root, ".specsmith", "requirements.json"))
|
|
139
|
+
if rq_str != _safe_root and not rq_str.startswith(_safe_root + os.sep):
|
|
140
|
+
raise ValueError(f"Path escapes project root: {rq_str!r}")
|
|
141
|
+
rq_path = Path(rq_str)
|
|
126
142
|
if rq_path.is_file():
|
|
127
143
|
try:
|
|
128
144
|
_rq = _json.loads(rq_path.read_text(encoding="utf-8"))
|
|
@@ -139,7 +155,10 @@ def run_preflight(
|
|
|
139
155
|
# Read test-case machine-state (same rationale as above).
|
|
140
156
|
test_case_ids: list[str] = []
|
|
141
157
|
tc_records: list[Any] = []
|
|
142
|
-
|
|
158
|
+
tc_str = os.path.realpath(os.path.join(_safe_root, ".specsmith", "testcases.json"))
|
|
159
|
+
if tc_str != _safe_root and not tc_str.startswith(_safe_root + os.sep):
|
|
160
|
+
raise ValueError(f"Path escapes project root: {tc_str!r}")
|
|
161
|
+
tc_path = Path(tc_str)
|
|
143
162
|
if tc_path.is_file():
|
|
144
163
|
try:
|
|
145
164
|
_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.18.0.
|
|
3
|
+
Version: 0.18.0.dev691
|
|
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.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/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.18.0.dev686 → specsmith-0.18.0.dev691}/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.18.0.dev686 → specsmith-0.18.0.dev691}/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
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/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
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/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.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/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.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/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.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m004_ledger_esdb.py
RENAMED
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m005_agent_run_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m007_yaml_first.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.18.0.dev686 → specsmith-0.18.0.dev691}/src/specsmith/migrations/m009_esdb_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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|