specsmith 0.14.0.dev539__tar.gz → 0.14.0.dev542__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.14.0.dev539/src/specsmith.egg-info → specsmith-0.14.0.dev542}/PKG-INFO +18 -6
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/README.md +17 -5
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/pyproject.toml +1 -1
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/governance_logic.py +21 -22
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542/src/specsmith.egg-info}/PKG-INFO +18 -6
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/LICENSE +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/setup.cfg +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/belief.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/certainty.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/py.typed +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/recovery.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/session.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/epistemic/trace.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/__main__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/architect.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/auditor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/auth.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/block_export.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/channel.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/cli.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/compressor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/config.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/context_window.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/credits.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/differ.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/doctor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/drive.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/editor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/esdb/sqlite_store.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/executor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/exporter.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/history_search.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/importer.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/instinct.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/languages.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/ledger.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/patent.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/paths.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/phase.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/plugins.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/profiles.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/releaser.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/requirements.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/serve.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/session.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/session_init.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/session_store.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/sync.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/tools.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/trace.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/updater.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/validator.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/workspace.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_CMD_001.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_ai_client.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_auditor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_channel.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_cli.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_compliance.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_compressor.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_dispatch.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_epistemic.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_esdb_license.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_importer.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_integrations.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_intelligence.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_mcp_client.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_mcp_server.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_new_modules.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_nexus.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_permissions.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_rate_limits.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_req_248_262.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_req_358_359.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_scaffolder.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_smoke.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_suggester.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_tools.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_validator.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_vcs.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_warp_parity.py +0 -0
- {specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/tests/test_warp_parity_followup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.14.0.
|
|
3
|
+
Version: 0.14.0.dev542
|
|
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
|
|
@@ -187,13 +187,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
|
|
|
187
187
|
**Recommended — via pipx (CLI + CI):**
|
|
188
188
|
|
|
189
189
|
```bash
|
|
190
|
-
pipx install specsmith
|
|
191
|
-
pipx inject specsmith anthropic # + Claude support
|
|
192
|
-
pipx inject specsmith openai # + GPT / O-series support
|
|
193
|
-
pipx inject specsmith google-genai # + Gemini (google-genai SDK, GA May 2025)
|
|
194
|
-
# Ollama: install locally at https://ollama.ai — no extra package needed
|
|
190
|
+
pipx install specsmith
|
|
195
191
|
```
|
|
196
192
|
|
|
193
|
+
That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
|
|
194
|
+
and all governance commands work immediately with no additional packages.
|
|
195
|
+
|
|
196
|
+
> **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
|
|
197
|
+
> the built-in agentic REPL with a cloud API key:
|
|
198
|
+
>
|
|
199
|
+
> ```bash
|
|
200
|
+
> pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
|
|
201
|
+
> pipx inject specsmith openai # if you set OPENAI_API_KEY
|
|
202
|
+
> pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
|
|
203
|
+
> ```
|
|
204
|
+
>
|
|
205
|
+
> Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
|
|
206
|
+
> For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
|
|
207
|
+
> no injection needed.
|
|
208
|
+
|
|
197
209
|
**Library-only use (venv / conda / any Python environment):**
|
|
198
210
|
|
|
199
211
|
```bash
|
|
@@ -109,13 +109,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
|
|
|
109
109
|
**Recommended — via pipx (CLI + CI):**
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
pipx install specsmith
|
|
113
|
-
pipx inject specsmith anthropic # + Claude support
|
|
114
|
-
pipx inject specsmith openai # + GPT / O-series support
|
|
115
|
-
pipx inject specsmith google-genai # + Gemini (google-genai SDK, GA May 2025)
|
|
116
|
-
# Ollama: install locally at https://ollama.ai — no extra package needed
|
|
112
|
+
pipx install specsmith
|
|
117
113
|
```
|
|
118
114
|
|
|
115
|
+
That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
|
|
116
|
+
and all governance commands work immediately with no additional packages.
|
|
117
|
+
|
|
118
|
+
> **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
|
|
119
|
+
> the built-in agentic REPL with a cloud API key:
|
|
120
|
+
>
|
|
121
|
+
> ```bash
|
|
122
|
+
> pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
|
|
123
|
+
> pipx inject specsmith openai # if you set OPENAI_API_KEY
|
|
124
|
+
> pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
|
|
125
|
+
> ```
|
|
126
|
+
>
|
|
127
|
+
> Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
|
|
128
|
+
> For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
|
|
129
|
+
> no injection needed.
|
|
130
|
+
|
|
119
131
|
**Library-only use (venv / conda / any Python environment):**
|
|
120
132
|
|
|
121
133
|
```bash
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.14.0.
|
|
7
|
+
version = "0.14.0.dev542"
|
|
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"
|
|
@@ -72,30 +72,29 @@ def run_preflight(
|
|
|
72
72
|
from specsmith.agent.broker import Intent, classify_intent, infer_scope
|
|
73
73
|
|
|
74
74
|
_safe_resolve(project_dir) # validate: reject null bytes and traversal sequences
|
|
75
|
-
#
|
|
76
|
-
#
|
|
77
|
-
#
|
|
75
|
+
# os.path.realpath breaks the taint chain and returns a clean plain str.
|
|
76
|
+
# ALL subsequent path construction uses os.path.join on _root_str — never
|
|
77
|
+
# the Path / operator on root — so CodeQL never re-acquires the taint from
|
|
78
|
+
# project_dir through a Path object.
|
|
78
79
|
_root_str: str = os.path.realpath(str(project_dir))
|
|
79
|
-
root = Path(_root_str)
|
|
80
80
|
intent = classify_intent(utterance)
|
|
81
81
|
# Requirements live at docs/REQUIREMENTS.md, not at the project root.
|
|
82
82
|
# Falling back to root/REQUIREMENTS.md would always yield an empty list
|
|
83
83
|
# on standard projects, causing preflight to always return
|
|
84
84
|
# needs_clarification (GitHub issue #197).
|
|
85
|
-
|
|
86
|
-
# at the point of the file-system call (.exists()), not just at root.
|
|
87
|
-
_req_md = Path(os.path.realpath(str(root / "docs" / "REQUIREMENTS.md")))
|
|
85
|
+
_req_md = Path(os.path.realpath(os.path.join(_root_str, "docs", "REQUIREMENTS.md")))
|
|
88
86
|
if not _req_md.exists():
|
|
89
|
-
_req_md = Path(os.path.realpath(
|
|
87
|
+
_req_md = Path(os.path.realpath(os.path.join(_root_str, "REQUIREMENTS.md"))) # legacy
|
|
88
|
+
_repo_idx = Path(os.path.realpath(os.path.join(_root_str, ".repo-index", "files.json")))
|
|
90
89
|
scope = infer_scope(
|
|
91
90
|
utterance,
|
|
92
91
|
_req_md,
|
|
93
|
-
repo_index_path=
|
|
92
|
+
repo_index_path=_repo_idx,
|
|
94
93
|
)
|
|
95
94
|
|
|
96
95
|
requirement_ids = [r.req_id for r in scope.matched_requirements]
|
|
97
96
|
|
|
98
|
-
# ── Direct ID extraction (fix #166)
|
|
97
|
+
# ── Direct ID extraction (fix #166) ───────────────────────────────────────────
|
|
99
98
|
# If the utterance contains explicit REQ-*/TEST-* IDs, look them up in the
|
|
100
99
|
# JSON machine state and merge them in — this handles project-prefixed IDs
|
|
101
100
|
# (e.g. REQ-NN-001, TEST-NN-002a) that token overlap may not catch.
|
|
@@ -104,12 +103,10 @@ def run_preflight(
|
|
|
104
103
|
explicit_req_ids = [m.upper() for m in _EXPLICIT_REQ.findall(utterance)]
|
|
105
104
|
explicit_test_ids = [m.upper() for m in _EXPLICIT_TEST.findall(utterance)]
|
|
106
105
|
|
|
107
|
-
# Read requirements machine-state
|
|
108
|
-
#
|
|
109
|
-
# (Helper functions with a root: Path parameter are analysed conservatively
|
|
110
|
-
# by CodeQL and can re-introduce py/path-injection alerts.)
|
|
106
|
+
# Read requirements machine-state using os.path.join on the clean _root_str
|
|
107
|
+
# so CodeQL traces the full sanitisation chain without re-tainting via Path.
|
|
111
108
|
rq_records: list[Any] = []
|
|
112
|
-
rq_path = Path(os.path.realpath(
|
|
109
|
+
rq_path = Path(os.path.realpath(os.path.join(_root_str, ".specsmith", "requirements.json")))
|
|
113
110
|
if rq_path.is_file():
|
|
114
111
|
try:
|
|
115
112
|
_rq = _json.loads(rq_path.read_text(encoding="utf-8"))
|
|
@@ -123,10 +120,10 @@ def run_preflight(
|
|
|
123
120
|
if eid in known_req_ids and eid not in requirement_ids:
|
|
124
121
|
requirement_ids.append(eid)
|
|
125
122
|
|
|
126
|
-
# Read test-case machine-state
|
|
123
|
+
# Read test-case machine-state (same rationale as above).
|
|
127
124
|
test_case_ids: list[str] = []
|
|
128
125
|
tc_records: list[Any] = []
|
|
129
|
-
tc_path = Path(os.path.realpath(
|
|
126
|
+
tc_path = Path(os.path.realpath(os.path.join(_root_str, ".specsmith", "testcases.json")))
|
|
130
127
|
if tc_path.is_file():
|
|
131
128
|
try:
|
|
132
129
|
_tc = _json.loads(tc_path.read_text(encoding="utf-8"))
|
|
@@ -193,8 +190,9 @@ def run_preflight(
|
|
|
193
190
|
)
|
|
194
191
|
confidence_target = 0.7
|
|
195
192
|
|
|
196
|
-
# Config floor (REQ-098)
|
|
197
|
-
|
|
193
|
+
# Config floor (REQ-098) — pass _root_str so the helper never receives
|
|
194
|
+
# a tainted Path object derived from project_dir.
|
|
195
|
+
cfg_threshold = _read_confidence_threshold(_root_str)
|
|
198
196
|
if cfg_threshold is not None and cfg_threshold > confidence_target:
|
|
199
197
|
confidence_target = cfg_threshold
|
|
200
198
|
|
|
@@ -1021,9 +1019,10 @@ def _resolve_provider_name() -> str:
|
|
|
1021
1019
|
return "byoe"
|
|
1022
1020
|
|
|
1023
1021
|
|
|
1024
|
-
def _read_confidence_threshold(root: Path) -> float | None:
|
|
1025
|
-
# .
|
|
1026
|
-
|
|
1022
|
+
def _read_confidence_threshold(root: Path | str) -> float | None:
|
|
1023
|
+
# Use os.path.join + os.path.realpath on the plain-string form so CodeQL
|
|
1024
|
+
# sees the sanitiser inline and does not flag cfg.is_file() or cfg.read_text().
|
|
1025
|
+
cfg = Path(os.path.realpath(os.path.join(str(root), ".specsmith", "config.yml")))
|
|
1027
1026
|
if not cfg.is_file():
|
|
1028
1027
|
return None
|
|
1029
1028
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.14.0.
|
|
3
|
+
Version: 0.14.0.dev542
|
|
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
|
|
@@ -187,13 +187,25 @@ of file/command criteria, recommended commands, and a readiness percentage.
|
|
|
187
187
|
**Recommended — via pipx (CLI + CI):**
|
|
188
188
|
|
|
189
189
|
```bash
|
|
190
|
-
pipx install specsmith
|
|
191
|
-
pipx inject specsmith anthropic # + Claude support
|
|
192
|
-
pipx inject specsmith openai # + GPT / O-series support
|
|
193
|
-
pipx inject specsmith google-genai # + Gemini (google-genai SDK, GA May 2025)
|
|
194
|
-
# Ollama: install locally at https://ollama.ai — no extra package needed
|
|
190
|
+
pipx install specsmith
|
|
195
191
|
```
|
|
196
192
|
|
|
193
|
+
That's it. `specsmith audit`, `preflight`, `sync`, `checkpoint`, `esdb`, `mcp serve`,
|
|
194
|
+
and all governance commands work immediately with no additional packages.
|
|
195
|
+
|
|
196
|
+
> **Want `specsmith run` with a cloud LLM?** Inject the provider SDK only if you use
|
|
197
|
+
> the built-in agentic REPL with a cloud API key:
|
|
198
|
+
>
|
|
199
|
+
> ```bash
|
|
200
|
+
> pipx inject specsmith anthropic # if you set ANTHROPIC_API_KEY
|
|
201
|
+
> pipx inject specsmith openai # if you set OPENAI_API_KEY
|
|
202
|
+
> pipx inject specsmith google-genai # if you set GOOGLE_API_KEY
|
|
203
|
+
> ```
|
|
204
|
+
>
|
|
205
|
+
> Ollama works out of the box with no injection — specsmith uses stdlib HTTP.
|
|
206
|
+
> For Warp, Claude Code, Cursor, and Copilot, the AI client provides the LLM;
|
|
207
|
+
> no injection needed.
|
|
208
|
+
|
|
197
209
|
**Library-only use (venv / conda / any Python environment):**
|
|
198
210
|
|
|
199
211
|
```bash
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/provider_bar.py
RENAMED
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/gui/widgets/token_meter.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/integrations/agent_skill.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/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
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m001_governance_yaml.py
RENAMED
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m002_agents_slim.py
RENAMED
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m003_compliance_init.py
RENAMED
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m004_ledger_esdb.py
RENAMED
|
File without changes
|
{specsmith-0.14.0.dev539 → specsmith-0.14.0.dev542}/src/specsmith/migrations/m005_agent_run_tool.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
|