specsmith 0.13.1.dev522__tar.gz → 0.13.1.dev534__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.13.1.dev522/src/specsmith.egg-info → specsmith-0.13.1.dev534}/PKG-INFO +34 -9
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/README.md +32 -7
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/pyproject.toml +2 -2
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/cli.py +4 -3
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/__init__.py +3 -1
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/bridge.py +3 -1
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/sqlite_store.py +2 -2
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_logic.py +2 -1
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534/src/specsmith.egg-info}/PKG-INFO +34 -9
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/requires.txt +1 -1
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_esdb_license.py +1 -1
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_mcp_server.py +0 -6
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/LICENSE +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/setup.cfg +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/belief.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/certainty.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/py.typed +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/recovery.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/session.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/epistemic/trace.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/__main__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/architect.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/auditor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/auth.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/block_export.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/channel.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/compressor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/config.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/context_window.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/credits.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/differ.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/doctor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/drive.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/editor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/esdb/_license.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/executor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/exporter.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/history_search.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/importer.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/instinct.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/languages.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ledger.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/mcp_server.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/patent.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/paths.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/phase.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/plugins.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/profiles.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/releaser.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/requirements.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/serve.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session_init.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/session_store.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/governance.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/sync.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/tools.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/trace.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/updater.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/validator.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/workspace.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/SOURCES.txt +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_CMD_001.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_ai_client.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_auditor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_channel.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_cli.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_compliance.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_compressor.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_dispatch.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_epistemic.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_esdb_sqlite.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_importer.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_integrations.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_intelligence.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_mcp_client.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_new_modules.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_nexus.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_permissions.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_rate_limits.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_req_248_262.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_req_358_359.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_scaffolder.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_smoke.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_suggester.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_tools.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_validator.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_vcs.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/tests/test_warp_parity.py +0 -0
- {specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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.13.1.
|
|
3
|
+
Version: 0.13.1.dev534
|
|
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
|
|
@@ -40,7 +40,7 @@ Requires-Dist: pre-commit>=3.0; extra == "dev"
|
|
|
40
40
|
Requires-Dist: types-pyyaml>=6.0; extra == "dev"
|
|
41
41
|
Requires-Dist: cryptography>=42.0; extra == "dev"
|
|
42
42
|
Provides-Extra: esdb
|
|
43
|
-
Requires-Dist: chronomemory>=0.1.
|
|
43
|
+
Requires-Dist: chronomemory>=0.1.4; extra == "esdb"
|
|
44
44
|
Requires-Dist: cryptography>=42.0; extra == "esdb"
|
|
45
45
|
Provides-Extra: docs
|
|
46
46
|
Requires-Dist: mkdocs>=1.6; extra == "docs"
|
|
@@ -204,18 +204,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
|
|
|
204
204
|
command — not to library imports. Use this when you want the AEE belief-state machinery
|
|
205
205
|
in your own application without managing a pipx environment.
|
|
206
206
|
|
|
207
|
-
**ESDB
|
|
207
|
+
**ESDB — Epistemic State Database**
|
|
208
|
+
|
|
209
|
+
| Tier | Package | License | What you get |
|
|
210
|
+
|------|---------|---------|-------------|
|
|
211
|
+
| **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
|
|
212
|
+
| **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
|
|
213
|
+
|
|
214
|
+
`pip install specsmith` always installs the **free SQLite backend** automatically.
|
|
215
|
+
No additional packages, no license key, no configuration — it works out of the box.
|
|
208
216
|
|
|
209
217
|
```bash
|
|
210
|
-
|
|
218
|
+
specsmith esdb status # shows: SQLite (free, MIT) — active by default
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Upgrading to chronomemory ChronoStore (commercial):**
|
|
222
|
+
|
|
223
|
+
If you hold a chronomemory ESDB license, activate the commercial backend:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Step 1 — install the chronomemory package
|
|
227
|
+
pip install "specsmith[esdb]" # installs chronomemory from PyPI
|
|
228
|
+
# or if using pipx:
|
|
229
|
+
pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
|
|
230
|
+
|
|
231
|
+
# Step 2 — activate your license key
|
|
211
232
|
specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
212
|
-
specsmith
|
|
233
|
+
# The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
|
|
234
|
+
|
|
235
|
+
# Step 3 — verify ChronoStore is active
|
|
236
|
+
specsmith esdb status
|
|
237
|
+
# ● ESDB — ChronoStore WAL (chronomemory commercial)
|
|
238
|
+
# ✔ License: your-org (expires YYYY-MM-DD)
|
|
213
239
|
```
|
|
214
240
|
|
|
215
|
-
|
|
216
|
-
(
|
|
217
|
-
|
|
218
|
-
See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
|
|
241
|
+
To obtain a chronomemory ESDB license:
|
|
242
|
+
[licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
|
|
243
|
+
See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
|
|
219
244
|
|
|
220
245
|
**Update:**
|
|
221
246
|
|
|
@@ -126,18 +126,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
|
|
|
126
126
|
command — not to library imports. Use this when you want the AEE belief-state machinery
|
|
127
127
|
in your own application without managing a pipx environment.
|
|
128
128
|
|
|
129
|
-
**ESDB
|
|
129
|
+
**ESDB — Epistemic State Database**
|
|
130
|
+
|
|
131
|
+
| Tier | Package | License | What you get |
|
|
132
|
+
|------|---------|---------|-------------|
|
|
133
|
+
| **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
|
|
134
|
+
| **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
|
|
135
|
+
|
|
136
|
+
`pip install specsmith` always installs the **free SQLite backend** automatically.
|
|
137
|
+
No additional packages, no license key, no configuration — it works out of the box.
|
|
130
138
|
|
|
131
139
|
```bash
|
|
132
|
-
|
|
140
|
+
specsmith esdb status # shows: SQLite (free, MIT) — active by default
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Upgrading to chronomemory ChronoStore (commercial):**
|
|
144
|
+
|
|
145
|
+
If you hold a chronomemory ESDB license, activate the commercial backend:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Step 1 — install the chronomemory package
|
|
149
|
+
pip install "specsmith[esdb]" # installs chronomemory from PyPI
|
|
150
|
+
# or if using pipx:
|
|
151
|
+
pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
|
|
152
|
+
|
|
153
|
+
# Step 2 — activate your license key
|
|
133
154
|
specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
134
|
-
specsmith
|
|
155
|
+
# The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
|
|
156
|
+
|
|
157
|
+
# Step 3 — verify ChronoStore is active
|
|
158
|
+
specsmith esdb status
|
|
159
|
+
# ● ESDB — ChronoStore WAL (chronomemory commercial)
|
|
160
|
+
# ✔ License: your-org (expires YYYY-MM-DD)
|
|
135
161
|
```
|
|
136
162
|
|
|
137
|
-
|
|
138
|
-
(
|
|
139
|
-
|
|
140
|
-
See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
|
|
163
|
+
To obtain a chronomemory ESDB license:
|
|
164
|
+
[licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
|
|
165
|
+
See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
|
|
141
166
|
|
|
142
167
|
**Update:**
|
|
143
168
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.13.1.
|
|
7
|
+
version = "0.13.1.dev534"
|
|
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"
|
|
@@ -60,7 +60,7 @@ dev = [
|
|
|
60
60
|
# Install: pip install specsmith[esdb]
|
|
61
61
|
# Activate: specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
62
62
|
esdb = [
|
|
63
|
-
"chronomemory>=0.1.
|
|
63
|
+
"chronomemory>=0.1.4", # proprietary commercial — see chronomemory LICENSE
|
|
64
64
|
"cryptography>=42.0",
|
|
65
65
|
]
|
|
66
66
|
docs = [
|
|
@@ -4234,15 +4234,16 @@ def agent_ask_cmd(prompt: str, project_dir: str, as_json: bool) -> None:
|
|
|
4234
4234
|
)
|
|
4235
4235
|
action = "skills_hint"
|
|
4236
4236
|
elif any(k in lower for k in ("esdb", "database", "backup", "export", "records")):
|
|
4237
|
-
|
|
4237
|
+
from specsmith.esdb import ESDB_BACKEND as _ESDB_BACKEND # noqa: PLC0415
|
|
4238
|
+
from specsmith.esdb import open_default_store as _open_default_store # noqa: PLC0415
|
|
4238
4239
|
|
|
4239
4240
|
action = "esdb_status"
|
|
4240
4241
|
try:
|
|
4241
|
-
store =
|
|
4242
|
+
store = _open_default_store(project_dir, warn=False)
|
|
4242
4243
|
with store:
|
|
4243
4244
|
count = store.record_count()
|
|
4244
4245
|
chain_ok = store.chain_valid()
|
|
4245
|
-
reply = f"ESDB: {
|
|
4246
|
+
reply = f"ESDB: {_ESDB_BACKEND} | {count} records | chain_valid={chain_ok}"
|
|
4246
4247
|
except Exception as exc: # noqa: BLE001
|
|
4247
4248
|
reply = f"ESDB unavailable: {exc}"
|
|
4248
4249
|
elif any(k in lower for k in ("mcp", "server", "tool server")):
|
|
@@ -98,7 +98,9 @@ except ImportError:
|
|
|
98
98
|
"""Stub module reference so 'from specsmith.esdb import query, metrics' works."""
|
|
99
99
|
|
|
100
100
|
def __getattr__(self, name: str) -> "_Stub":
|
|
101
|
-
raise
|
|
101
|
+
raise AttributeError( # noqa: TRY301
|
|
102
|
+
f"'{name}' is unavailable: {_INSTALL_HINT}"
|
|
103
|
+
)
|
|
102
104
|
|
|
103
105
|
query = _StubModule() # type: ignore[assignment]
|
|
104
106
|
metrics = _StubModule() # type: ignore[assignment]
|
|
@@ -44,7 +44,9 @@ except ImportError: # pragma: no cover
|
|
|
44
44
|
|
|
45
45
|
class _StubModule: # noqa: F811
|
|
46
46
|
def __getattr__(self, name: str) -> "_Stub":
|
|
47
|
-
raise
|
|
47
|
+
raise AttributeError( # noqa: TRY301
|
|
48
|
+
f"'{name}' is unavailable: {_INSTALL_HINT}"
|
|
49
|
+
)
|
|
48
50
|
|
|
49
51
|
EsdbBridge = EsdbRecord = EsdbStatus = ContextPackCompiler = DepGraph = _Stub # noqa: F811
|
|
50
52
|
query = _StubModule() # noqa: F811
|
|
@@ -330,7 +330,7 @@ class SqliteStore:
|
|
|
330
330
|
)
|
|
331
331
|
counts["requirements"] += 1
|
|
332
332
|
except (OSError, ValueError):
|
|
333
|
-
|
|
333
|
+
counts["skipped"] += 1 # file unreadable or invalid JSON
|
|
334
334
|
|
|
335
335
|
test_path = state_dir / "testcases.json"
|
|
336
336
|
if test_path.exists():
|
|
@@ -351,7 +351,7 @@ class SqliteStore:
|
|
|
351
351
|
)
|
|
352
352
|
counts["testcases"] += 1
|
|
353
353
|
except (OSError, ValueError):
|
|
354
|
-
|
|
354
|
+
counts["skipped"] += 1 # file unreadable or invalid JSON
|
|
355
355
|
|
|
356
356
|
return counts
|
|
357
357
|
|
|
@@ -71,7 +71,8 @@ def run_preflight(
|
|
|
71
71
|
from specsmith import __version__
|
|
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
|
+
root = Path(os.path.realpath(str(project_dir))) # CodeQL-visible sanitiser (py/path-injection)
|
|
75
76
|
intent = classify_intent(utterance)
|
|
76
77
|
# Requirements live at docs/REQUIREMENTS.md, not at the project root.
|
|
77
78
|
# Falling back to root/REQUIREMENTS.md would always yield an empty list
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.13.1.
|
|
3
|
+
Version: 0.13.1.dev534
|
|
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
|
|
@@ -40,7 +40,7 @@ Requires-Dist: pre-commit>=3.0; extra == "dev"
|
|
|
40
40
|
Requires-Dist: types-pyyaml>=6.0; extra == "dev"
|
|
41
41
|
Requires-Dist: cryptography>=42.0; extra == "dev"
|
|
42
42
|
Provides-Extra: esdb
|
|
43
|
-
Requires-Dist: chronomemory>=0.1.
|
|
43
|
+
Requires-Dist: chronomemory>=0.1.4; extra == "esdb"
|
|
44
44
|
Requires-Dist: cryptography>=42.0; extra == "esdb"
|
|
45
45
|
Provides-Extra: docs
|
|
46
46
|
Requires-Dist: mkdocs>=1.6; extra == "docs"
|
|
@@ -204,18 +204,43 @@ immediately importable. The pipx isolation guard only applies to the `specsmith
|
|
|
204
204
|
command — not to library imports. Use this when you want the AEE belief-state machinery
|
|
205
205
|
in your own application without managing a pipx environment.
|
|
206
206
|
|
|
207
|
-
**ESDB
|
|
207
|
+
**ESDB — Epistemic State Database**
|
|
208
|
+
|
|
209
|
+
| Tier | Package | License | What you get |
|
|
210
|
+
|------|---------|---------|-------------|
|
|
211
|
+
| **Default** | `specsmith` (built-in) | MIT, free | SQLite backend — requirements, test cases, confidence filtering |
|
|
212
|
+
| **Commercial** | `chronomemory` via `specsmith[esdb]` | Proprietary — license required | ChronoStore: tamper-evident SHA-256 WAL, OEA anti-hallucination fields, Rust acceleration, epistemic rollback |
|
|
213
|
+
|
|
214
|
+
`pip install specsmith` always installs the **free SQLite backend** automatically.
|
|
215
|
+
No additional packages, no license key, no configuration — it works out of the box.
|
|
208
216
|
|
|
209
217
|
```bash
|
|
210
|
-
|
|
218
|
+
specsmith esdb status # shows: SQLite (free, MIT) — active by default
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Upgrading to chronomemory ChronoStore (commercial):**
|
|
222
|
+
|
|
223
|
+
If you hold a chronomemory ESDB license, activate the commercial backend:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Step 1 — install the chronomemory package
|
|
227
|
+
pip install "specsmith[esdb]" # installs chronomemory from PyPI
|
|
228
|
+
# or if using pipx:
|
|
229
|
+
pipx inject specsmith "chronomemory>=0.1.4" # inject into the specsmith pipx venv
|
|
230
|
+
|
|
231
|
+
# Step 2 — activate your license key
|
|
211
232
|
specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
212
|
-
specsmith
|
|
233
|
+
# The key is copied to ~/.specsmith/esdb.key and used automatically from now on.
|
|
234
|
+
|
|
235
|
+
# Step 3 — verify ChronoStore is active
|
|
236
|
+
specsmith esdb status
|
|
237
|
+
# ● ESDB — ChronoStore WAL (chronomemory commercial)
|
|
238
|
+
# ✔ License: your-org (expires YYYY-MM-DD)
|
|
213
239
|
```
|
|
214
240
|
|
|
215
|
-
|
|
216
|
-
(
|
|
217
|
-
|
|
218
|
-
See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
|
|
241
|
+
To obtain a chronomemory ESDB license:
|
|
242
|
+
[licensing@layer1labs.com](mailto:licensing@layer1labs.com) · [layer1labs.com/esdb-licensing](https://layer1labs.com/esdb-licensing)
|
|
243
|
+
See the [full ESDB docs](https://specsmith.readthedocs.io/esdb) for a feature comparison and Python API reference.
|
|
219
244
|
|
|
220
245
|
**Update:**
|
|
221
246
|
|
|
@@ -159,7 +159,7 @@ def test_resolve_license_path_default(tmp_path: Path) -> None:
|
|
|
159
159
|
specsmith_dir = tmp_path / ".specsmith"
|
|
160
160
|
specsmith_dir.mkdir()
|
|
161
161
|
_make_license_file(specsmith_dir, filename="esdb.key")
|
|
162
|
-
|
|
162
|
+
from specsmith.esdb import _license as lic_mod # noqa: PLC0415
|
|
163
163
|
|
|
164
164
|
def fake_home() -> Path:
|
|
165
165
|
return tmp_path
|
|
@@ -634,8 +634,6 @@ class TestGovernanceReqListYamlMode:
|
|
|
634
634
|
|
|
635
635
|
def test_yaml_mode_returns_new_req_despite_stale_cache(self, yaml_mode_project: Path) -> None:
|
|
636
636
|
"""REQ-364: governance_req_list in yaml_mode reads YAML, not JSON cache."""
|
|
637
|
-
import specsmith.mcp_server as mcp_mod
|
|
638
|
-
|
|
639
637
|
result = mcp_mod._handle_governance_req_list({"project_dir": str(yaml_mode_project)})
|
|
640
638
|
req_ids = {r["id"] for r in result["reqs"]}
|
|
641
639
|
assert "REQ-NEW" in req_ids, (
|
|
@@ -646,8 +644,6 @@ class TestGovernanceReqListYamlMode:
|
|
|
646
644
|
|
|
647
645
|
def test_yaml_mode_coverage_from_yaml_tests(self, yaml_mode_project: Path) -> None:
|
|
648
646
|
"""Coverage is computed from YAML tests, not stale JSON cache."""
|
|
649
|
-
import specsmith.mcp_server as mcp_mod
|
|
650
|
-
|
|
651
647
|
result = mcp_mod._handle_governance_req_list({"project_dir": str(yaml_mode_project)})
|
|
652
648
|
reqs_by_id = {r["id"]: r for r in result["reqs"]}
|
|
653
649
|
# REQ-001 has a test in YAML → covered
|
|
@@ -657,8 +653,6 @@ class TestGovernanceReqListYamlMode:
|
|
|
657
653
|
|
|
658
654
|
def test_legacy_mode_still_uses_json_cache(self, tmp_path: Path) -> None:
|
|
659
655
|
"""Non-yaml-mode projects still use the JSON cache (backward compat)."""
|
|
660
|
-
import specsmith.mcp_server as mcp_mod
|
|
661
|
-
|
|
662
656
|
state = tmp_path / ".specsmith"
|
|
663
657
|
state.mkdir()
|
|
664
658
|
# No governance-mode file → legacy mode
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/dispatch/dispatcher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/agent/model_intelligence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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
|
{specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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.13.1.dev522 → specsmith-0.13.1.dev534}/src/specsmith/epistemic/failure_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{specsmith-0.13.1.dev522 → specsmith-0.13.1.dev534}/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
|