specsmith 0.13.0.dev506__tar.gz → 0.13.0.dev518__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.0.dev506/src/specsmith.egg-info → specsmith-0.13.0.dev518}/PKG-INFO +53 -70
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/README.md +45 -68
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/pyproject.toml +18 -3
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/cli.py +234 -68
- specsmith-0.13.0.dev518/src/specsmith/esdb/__init__.py +191 -0
- specsmith-0.13.0.dev518/src/specsmith/esdb/_license.py +226 -0
- specsmith-0.13.0.dev518/src/specsmith/esdb/bridge.py +63 -0
- specsmith-0.13.0.dev518/src/specsmith/esdb/sqlite_store.py +360 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/mcp_server.py +74 -31
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/governance.py +299 -3
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518/src/specsmith.egg-info}/PKG-INFO +53 -70
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith.egg-info/SOURCES.txt +4 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith.egg-info/requires.txt +8 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_dispatch.py +3 -1
- specsmith-0.13.0.dev518/tests/test_esdb_license.py +261 -0
- specsmith-0.13.0.dev518/tests/test_esdb_sqlite.py +278 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_mcp_server.py +89 -0
- specsmith-0.13.0.dev506/src/specsmith/esdb/__init__.py +0 -110
- specsmith-0.13.0.dev506/src/specsmith/esdb/bridge.py +0 -28
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/LICENSE +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/setup.cfg +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/belief.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/certainty.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/py.typed +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/recovery.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/session.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/epistemic/trace.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/__main__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/architect.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/auditor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/auth.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/block_export.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/channel.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/compressor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/config.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/context_window.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/credits.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/differ.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/doctor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/drive.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/editor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/executor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/exporter.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/history_search.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/importer.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/instinct.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/codity.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/languages.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/ledger.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/patent.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/paths.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/phase.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/plugins.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/profiles.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/releaser.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/requirements.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/serve.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/session.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/session_init.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/session_store.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/ai_agents.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/data_engineering.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/platform_engineering.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/software_engineering.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/specsmith_skills.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills/web_backend.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/sync.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/tools.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/trace.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/updater.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/validator.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith/workspace.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_CMD_001.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_agent_run_feedback.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_ai_client.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_auditor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_channel.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_cli.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_compliance.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_compressor.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_epistemic.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_importer.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_integrations.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_integrations_codity.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_intelligence.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_mcp_client.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_new_modules.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_nexus.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_permissions.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_rate_limits.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_req_248_262.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_req_358_359.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_scaffolder.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_smoke.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_suggester.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_tools.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_validator.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_vcs.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_warp_parity.py +0 -0
- {specsmith-0.13.0.dev506 → specsmith-0.13.0.dev518}/tests/test_warp_parity_followup.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.13.0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.13.0.dev518
|
|
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: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/BitConcepts/specsmith
|
|
@@ -38,6 +38,10 @@ Requires-Dist: ruff>=0.4; extra == "dev"
|
|
|
38
38
|
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
39
39
|
Requires-Dist: pre-commit>=3.0; extra == "dev"
|
|
40
40
|
Requires-Dist: types-pyyaml>=6.0; extra == "dev"
|
|
41
|
+
Requires-Dist: cryptography>=42.0; extra == "dev"
|
|
42
|
+
Provides-Extra: esdb
|
|
43
|
+
Requires-Dist: chronomemory>=0.1.3; extra == "esdb"
|
|
44
|
+
Requires-Dist: cryptography>=42.0; extra == "esdb"
|
|
41
45
|
Provides-Extra: docs
|
|
42
46
|
Requires-Dist: mkdocs>=1.6; extra == "docs"
|
|
43
47
|
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
|
|
@@ -68,6 +72,8 @@ Requires-Dist: pytest>=7.0; extra == "all"
|
|
|
68
72
|
Requires-Dist: pytest-cov>=4.0; extra == "all"
|
|
69
73
|
Requires-Dist: ruff>=0.4; extra == "all"
|
|
70
74
|
Requires-Dist: mypy>=1.10; extra == "all"
|
|
75
|
+
Provides-Extra: license-verify
|
|
76
|
+
Requires-Dist: cryptography>=42.0; extra == "license-verify"
|
|
71
77
|
Dynamic: license-file
|
|
72
78
|
|
|
73
79
|
# specsmith
|
|
@@ -88,14 +94,13 @@ epistemically-governed projects, stress-tests requirements as BeliefArtifacts, r
|
|
|
88
94
|
cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
|
|
89
95
|
|
|
90
96
|
**v0.13.0 — 16 new project types (LLM apps, MCP servers, Kubernetes operators, game dev, Web3, desktop, JVM and more), 131 built-in skills across 16 domains, EU AI Act / NIST AI RMF compliance, native Warp/Oz MCP governance server, multi-agent DAG dispatch, and context window management.**
|
|
91
|
-
|
|
97
|
+
specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
|
|
92
98
|
and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
|
|
93
99
|
every AI-generated output is disclosed, context windows are GPU-aware and protected against
|
|
94
|
-
overflow, and
|
|
95
|
-
per-session and per-project.
|
|
100
|
+
overflow, and compliance settings are configurable per-session and per-project.
|
|
96
101
|
|
|
97
102
|
```bash
|
|
98
|
-
specsmith governance-serve --port 7700 #
|
|
103
|
+
specsmith governance-serve --port 7700 # governance REST API
|
|
99
104
|
specsmith sync # sync YAML → JSON → MD (YAML-first mode)
|
|
100
105
|
specsmith generate docs # regenerate REQUIREMENTS.md + TESTS.md from YAML
|
|
101
106
|
specsmith validate --strict # YAML schema checks: dup IDs, orphans, coverage
|
|
@@ -134,6 +139,10 @@ from epistemic import AEESession # works in any Python 3.10+ project
|
|
|
134
139
|
from epistemic import BeliefArtifact, StressTester, CertaintyEngine
|
|
135
140
|
```
|
|
136
141
|
|
|
142
|
+
> **Library vs CLI:** The `specsmith` CLI requires pipx for isolation. The `epistemic` library
|
|
143
|
+
> (and `specsmith.esdb`) work in any venv — `pip install specsmith` is all you need for
|
|
144
|
+
> library-only use. The pipx guard only fires on CLI invocations.
|
|
145
|
+
|
|
137
146
|
---
|
|
138
147
|
|
|
139
148
|
## What is Applied Epistemic Engineering?
|
|
@@ -168,15 +177,14 @@ specsmith phase set requirements # jump to a specific phase
|
|
|
168
177
|
specsmith phase list # list all phases
|
|
169
178
|
```
|
|
170
179
|
|
|
171
|
-
The current phase is persisted in `scaffold.yml` as `aee_phase
|
|
172
|
-
|
|
173
|
-
commands, and a readiness percentage.
|
|
180
|
+
The current phase is persisted in `scaffold.yml` as `aee_phase`. Each phase has a checklist
|
|
181
|
+
of file/command criteria, recommended commands, and a readiness percentage.
|
|
174
182
|
|
|
175
183
|
---
|
|
176
184
|
|
|
177
185
|
## Install
|
|
178
186
|
|
|
179
|
-
**Recommended — via pipx (
|
|
187
|
+
**Recommended — via pipx (CLI + CI):**
|
|
180
188
|
|
|
181
189
|
```bash
|
|
182
190
|
pipx install specsmith # core CLI + epistemic library
|
|
@@ -185,15 +193,30 @@ pipx inject specsmith openai # + GPT / O-series support
|
|
|
185
193
|
pipx inject specsmith google-generativeai # + Gemini support
|
|
186
194
|
```
|
|
187
195
|
|
|
188
|
-
**
|
|
196
|
+
**Library-only use (venv / conda / any Python environment):**
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
pip install specsmith # epistemic library + SQLite ESDB — no pipx needed
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
This makes `from epistemic import AEESession` and `from specsmith.esdb import SqliteStore`
|
|
203
|
+
immediately importable. The pipx isolation guard only applies to the `specsmith` CLI
|
|
204
|
+
command — not to library imports. Use this when you want the AEE belief-state machinery
|
|
205
|
+
in your own application without managing a pipx environment.
|
|
206
|
+
|
|
207
|
+
**ESDB ChronoStore (commercial, requires license):**
|
|
189
208
|
|
|
190
209
|
```bash
|
|
191
|
-
pip install specsmith
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
pip install "specsmith[gemini]" # + Gemini
|
|
210
|
+
pip install "specsmith[esdb]" # + chronomemory from PyPI (commercial — requires license key)
|
|
211
|
+
specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
212
|
+
specsmith esdb status # confirms ChronoStore is active
|
|
195
213
|
```
|
|
196
214
|
|
|
215
|
+
The default ESDB backend is SQLite (free, MIT, no license needed). ChronoStore
|
|
216
|
+
(tamper-evident WAL, OEA fields, Rust acceleration) is a commercial add-on.
|
|
217
|
+
Contact [licensing@layer1labs.com](mailto:licensing@layer1labs.com) to obtain a license.
|
|
218
|
+
See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
|
|
219
|
+
|
|
197
220
|
**Update:**
|
|
198
221
|
|
|
199
222
|
```bash
|
|
@@ -374,7 +397,7 @@ any response is returned to the client.
|
|
|
374
397
|
|
|
375
398
|
When an action's confidence is below the escalation threshold, specsmith sets
|
|
376
399
|
`escalation_required: true` and includes an `escalation_reason` in the preflight payload.
|
|
377
|
-
|
|
400
|
+
AI clients that support MCP will surface this via the `governance_preflight` tool response.
|
|
378
401
|
|
|
379
402
|
```bash
|
|
380
403
|
specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
|
|
@@ -385,8 +408,8 @@ This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE
|
|
|
385
408
|
|
|
386
409
|
#### 4. Kill-Switch — Immediate Session Termination (REQ-210)
|
|
387
410
|
|
|
388
|
-
A `kill-session` CLI command
|
|
389
|
-
|
|
411
|
+
A `kill-session` CLI command immediately terminates all active agent sessions and records
|
|
412
|
+
a timestamped kill event in `LEDGER.md`:
|
|
390
413
|
|
|
391
414
|
```bash
|
|
392
415
|
specsmith kill-session # terminate all sessions, log kill event
|
|
@@ -449,12 +472,11 @@ Compliance settings are layered:
|
|
|
449
472
|
|
|
450
473
|
1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
|
|
451
474
|
2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
|
|
452
|
-
3. **Per-session overrides** —
|
|
475
|
+
3. **Per-session overrides** — CLI flags
|
|
453
476
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
session and can optionally be written back to the per-project `.specsmith/config.yml`.
|
|
477
|
+
Compliance controls include: escalation threshold, permission profile, kill-switch, and
|
|
478
|
+
context window settings. Changes take effect immediately and can optionally be written back
|
|
479
|
+
to the per-project `.specsmith/config.yml`.
|
|
458
480
|
|
|
459
481
|
---
|
|
460
482
|
|
|
@@ -483,15 +505,14 @@ Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.s
|
|
|
483
505
|
|
|
484
506
|
### Live Context Fill Indicator (REQ-245)
|
|
485
507
|
|
|
486
|
-
The context fill tracker emits real-time JSONL events
|
|
508
|
+
The context fill tracker emits real-time JSONL events:
|
|
487
509
|
|
|
488
510
|
```jsonl
|
|
489
511
|
{"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
|
|
490
512
|
```
|
|
491
513
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
should run before the next turn.
|
|
514
|
+
When fill reaches the compression threshold (default 80%), specsmith signals that context
|
|
515
|
+
summarization should run before the next turn.
|
|
495
516
|
|
|
496
517
|
### Auto Context Compression (REQ-246)
|
|
497
518
|
|
|
@@ -517,14 +538,10 @@ request cannot be processed. This is a safety invariant, not a configuration opt
|
|
|
517
538
|
|
|
518
539
|
---
|
|
519
540
|
|
|
520
|
-
##
|
|
521
|
-
|
|
522
|
-
**Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
|
|
523
|
-
acts as the governance backend: Kairos spawns `specsmith governance-serve` at startup
|
|
524
|
-
and routes all preflight and verify calls through it.
|
|
541
|
+
## Governance REST API
|
|
525
542
|
|
|
526
543
|
```bash
|
|
527
|
-
# Start the governance REST API (
|
|
544
|
+
# Start the governance REST API (for MCP clients and IDE integrations)
|
|
528
545
|
specsmith governance-serve --port 7700 --project-dir .
|
|
529
546
|
|
|
530
547
|
# Classify a natural-language utterance under Specsmith governance
|
|
@@ -658,13 +675,6 @@ specsmith agent suggest-profiles --json # structured suggestions with bucket
|
|
|
658
675
|
Suggestions are read-only (never persisted) and inspect `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`,
|
|
659
676
|
`GOOGLE_API_KEY`, and local Ollama availability.
|
|
660
677
|
|
|
661
|
-
### Kairos AI Providers — Bucket Score Columns (REQ-281)
|
|
662
|
-
|
|
663
|
-
The Kairos **Agents > AI Providers** table gained three new columns — **R** (reasoning),
|
|
664
|
-
**C** (conversational), **L** (longform) — showing each provider's HF bucket scores inline.
|
|
665
|
-
A **Sync Scores** button triggers a background sync from the HF leaderboard without
|
|
666
|
-
interrupting the active session.
|
|
667
|
-
|
|
668
678
|
---
|
|
669
679
|
|
|
670
680
|
## Multi-Agent DAG Dispatcher (REQ-321..334)
|
|
@@ -714,7 +724,6 @@ print(f"{len(summary.completed)} completed, {len(summary.failed)} failed")
|
|
|
714
724
|
```
|
|
715
725
|
|
|
716
726
|
Events are persisted to `.specsmith/dispatch/<dag_id>/events.jsonl` for resume and replay.
|
|
717
|
-
Kairos renders the live dispatch view — see `app/` for build instructions.
|
|
718
727
|
|
|
719
728
|
---
|
|
720
729
|
|
|
@@ -752,35 +761,11 @@ result = run_vsg("rtl/top.vhd", rules="vsg_rules.yaml")
|
|
|
752
761
|
|
|
753
762
|
---
|
|
754
763
|
|
|
755
|
-
## Kairos — Flagship Terminal Client
|
|
756
|
-
|
|
757
|
-
**[Kairos](https://github.com/layer1labs/kairos)** is the recommended terminal client for specsmith.
|
|
758
|
-
Kairos spawns specsmith as a managed governance child process at startup and routes all
|
|
759
|
-
preflight, verify, and BYOE proxy calls through it. The Governance settings page shows live
|
|
760
|
-
specsmith status, version, and one-click update.
|
|
761
|
-
|
|
762
|
-
```bash
|
|
763
|
-
# Kairos starts specsmith automatically; or run manually:
|
|
764
|
-
specsmith governance-serve --port 7700 --project-dir .
|
|
765
|
-
```
|
|
766
|
-
|
|
767
|
-
The Kairos **Dispatch Panel** (`app/` — Rust, egui/eframe) renders the multi-agent DAG live:
|
|
768
|
-
- SVG DAG graph with nodes coloured by status (grey/blue/green/red/amber)
|
|
769
|
-
- Gantt timeline strip showing parallelism
|
|
770
|
-
- Per-node Retry (FAILED/BLOCKED) and Abort (RUNNING) buttons
|
|
771
|
-
- Subscribes to `GET /api/dispatch/events?dag_id=` SSE from `specsmith serve`
|
|
772
|
-
|
|
773
|
-
Build Kairos dispatch panel: `cd app && cargo build --release`
|
|
774
|
-
|
|
775
|
-
Use `pipx install specsmith` for standalone CLI usage from any terminal.
|
|
776
|
-
|
|
777
|
-
---
|
|
778
|
-
|
|
779
764
|
## Supporting specsmith
|
|
780
765
|
|
|
781
766
|
specsmith is open source and built by a small team. Every bit of support helps:
|
|
782
767
|
|
|
783
|
-
- ⭐ **Star** [specsmith](https://github.com/layer1labs/specsmith)
|
|
768
|
+
- ⭐ **Star** [specsmith](https://github.com/layer1labs/specsmith) on GitHub
|
|
784
769
|
- 📣 **Tell your friends and colleagues** — word of mouth is our best marketing
|
|
785
770
|
- 🐛 **Report bugs** via [GitHub Issues](https://github.com/layer1labs/specsmith/issues) — even small ones help
|
|
786
771
|
- 💡 **Suggest features** via [GitHub Discussions](https://github.com/layer1labs/specsmith/discussions) — we read every suggestion
|
|
@@ -1088,20 +1073,18 @@ Clone this repo and open it in Warp — seven governance workflows appear automa
|
|
|
1088
1073
|
|
|
1089
1074
|
specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
|
|
1090
1075
|
in this repo to check its governance health. This means every feature we add to specsmith is
|
|
1091
|
-
immediately dogfooded on specsmith itself.
|
|
1092
|
-
is the companion terminal and flagship client.
|
|
1076
|
+
immediately dogfooded on specsmith itself.
|
|
1093
1077
|
|
|
1094
1078
|
## Documentation
|
|
1095
1079
|
|
|
1096
1080
|
**[specsmith.readthedocs.io](https://specsmith.readthedocs.io)** — Full manual: AEE primer,
|
|
1097
|
-
command reference, project types, tool registry, governance model,
|
|
1081
|
+
command reference, project types, tool registry, governance model, ESDB, skills integrations, Ollama guide.
|
|
1098
1082
|
|
|
1099
1083
|
## Links
|
|
1100
1084
|
|
|
1101
1085
|
- [PyPI](https://pypi.org/project/specsmith/)
|
|
1102
1086
|
- [Documentation](https://specsmith.readthedocs.io)
|
|
1103
1087
|
- [Changelog](CHANGELOG.md)
|
|
1104
|
-
- [Kairos terminal client](https://github.com/layer1labs/kairos)
|
|
1105
1088
|
- [Contributing](CONTRIBUTING.md)
|
|
1106
1089
|
- [Security](SECURITY.md)
|
|
1107
1090
|
|
|
@@ -16,14 +16,13 @@ epistemically-governed projects, stress-tests requirements as BeliefArtifacts, r
|
|
|
16
16
|
cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
|
|
17
17
|
|
|
18
18
|
**v0.13.0 — 16 new project types (LLM apps, MCP servers, Kubernetes operators, game dev, Web3, desktop, JVM and more), 131 built-in skills across 16 domains, EU AI Act / NIST AI RMF compliance, native Warp/Oz MCP governance server, multi-agent DAG dispatch, and context window management.**
|
|
19
|
-
|
|
19
|
+
specsmith ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
|
|
20
20
|
and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
|
|
21
21
|
every AI-generated output is disclosed, context windows are GPU-aware and protected against
|
|
22
|
-
overflow, and
|
|
23
|
-
per-session and per-project.
|
|
22
|
+
overflow, and compliance settings are configurable per-session and per-project.
|
|
24
23
|
|
|
25
24
|
```bash
|
|
26
|
-
specsmith governance-serve --port 7700 #
|
|
25
|
+
specsmith governance-serve --port 7700 # governance REST API
|
|
27
26
|
specsmith sync # sync YAML → JSON → MD (YAML-first mode)
|
|
28
27
|
specsmith generate docs # regenerate REQUIREMENTS.md + TESTS.md from YAML
|
|
29
28
|
specsmith validate --strict # YAML schema checks: dup IDs, orphans, coverage
|
|
@@ -62,6 +61,10 @@ from epistemic import AEESession # works in any Python 3.10+ project
|
|
|
62
61
|
from epistemic import BeliefArtifact, StressTester, CertaintyEngine
|
|
63
62
|
```
|
|
64
63
|
|
|
64
|
+
> **Library vs CLI:** The `specsmith` CLI requires pipx for isolation. The `epistemic` library
|
|
65
|
+
> (and `specsmith.esdb`) work in any venv — `pip install specsmith` is all you need for
|
|
66
|
+
> library-only use. The pipx guard only fires on CLI invocations.
|
|
67
|
+
|
|
65
68
|
---
|
|
66
69
|
|
|
67
70
|
## What is Applied Epistemic Engineering?
|
|
@@ -96,15 +99,14 @@ specsmith phase set requirements # jump to a specific phase
|
|
|
96
99
|
specsmith phase list # list all phases
|
|
97
100
|
```
|
|
98
101
|
|
|
99
|
-
The current phase is persisted in `scaffold.yml` as `aee_phase
|
|
100
|
-
|
|
101
|
-
commands, and a readiness percentage.
|
|
102
|
+
The current phase is persisted in `scaffold.yml` as `aee_phase`. Each phase has a checklist
|
|
103
|
+
of file/command criteria, recommended commands, and a readiness percentage.
|
|
102
104
|
|
|
103
105
|
---
|
|
104
106
|
|
|
105
107
|
## Install
|
|
106
108
|
|
|
107
|
-
**Recommended — via pipx (
|
|
109
|
+
**Recommended — via pipx (CLI + CI):**
|
|
108
110
|
|
|
109
111
|
```bash
|
|
110
112
|
pipx install specsmith # core CLI + epistemic library
|
|
@@ -113,15 +115,30 @@ pipx inject specsmith openai # + GPT / O-series support
|
|
|
113
115
|
pipx inject specsmith google-generativeai # + Gemini support
|
|
114
116
|
```
|
|
115
117
|
|
|
116
|
-
**
|
|
118
|
+
**Library-only use (venv / conda / any Python environment):**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pip install specsmith # epistemic library + SQLite ESDB — no pipx needed
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
This makes `from epistemic import AEESession` and `from specsmith.esdb import SqliteStore`
|
|
125
|
+
immediately importable. The pipx isolation guard only applies to the `specsmith` CLI
|
|
126
|
+
command — not to library imports. Use this when you want the AEE belief-state machinery
|
|
127
|
+
in your own application without managing a pipx environment.
|
|
128
|
+
|
|
129
|
+
**ESDB ChronoStore (commercial, requires license):**
|
|
117
130
|
|
|
118
131
|
```bash
|
|
119
|
-
pip install specsmith
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
pip install "specsmith[gemini]" # + Gemini
|
|
132
|
+
pip install "specsmith[esdb]" # + chronomemory from PyPI (commercial — requires license key)
|
|
133
|
+
specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
134
|
+
specsmith esdb status # confirms ChronoStore is active
|
|
123
135
|
```
|
|
124
136
|
|
|
137
|
+
The default ESDB backend is SQLite (free, MIT, no license needed). ChronoStore
|
|
138
|
+
(tamper-evident WAL, OEA fields, Rust acceleration) is a commercial add-on.
|
|
139
|
+
Contact [licensing@layer1labs.com](mailto:licensing@layer1labs.com) to obtain a license.
|
|
140
|
+
See [ESDB docs](https://specsmith.readthedocs.io/esdb) for a full feature comparison.
|
|
141
|
+
|
|
125
142
|
**Update:**
|
|
126
143
|
|
|
127
144
|
```bash
|
|
@@ -302,7 +319,7 @@ any response is returned to the client.
|
|
|
302
319
|
|
|
303
320
|
When an action's confidence is below the escalation threshold, specsmith sets
|
|
304
321
|
`escalation_required: true` and includes an `escalation_reason` in the preflight payload.
|
|
305
|
-
|
|
322
|
+
AI clients that support MCP will surface this via the `governance_preflight` tool response.
|
|
306
323
|
|
|
307
324
|
```bash
|
|
308
325
|
specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
|
|
@@ -313,8 +330,8 @@ This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE
|
|
|
313
330
|
|
|
314
331
|
#### 4. Kill-Switch — Immediate Session Termination (REQ-210)
|
|
315
332
|
|
|
316
|
-
A `kill-session` CLI command
|
|
317
|
-
|
|
333
|
+
A `kill-session` CLI command immediately terminates all active agent sessions and records
|
|
334
|
+
a timestamped kill event in `LEDGER.md`:
|
|
318
335
|
|
|
319
336
|
```bash
|
|
320
337
|
specsmith kill-session # terminate all sessions, log kill event
|
|
@@ -377,12 +394,11 @@ Compliance settings are layered:
|
|
|
377
394
|
|
|
378
395
|
1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
|
|
379
396
|
2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
|
|
380
|
-
3. **Per-session overrides** —
|
|
397
|
+
3. **Per-session overrides** — CLI flags
|
|
381
398
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
session and can optionally be written back to the per-project `.specsmith/config.yml`.
|
|
399
|
+
Compliance controls include: escalation threshold, permission profile, kill-switch, and
|
|
400
|
+
context window settings. Changes take effect immediately and can optionally be written back
|
|
401
|
+
to the per-project `.specsmith/config.yml`.
|
|
386
402
|
|
|
387
403
|
---
|
|
388
404
|
|
|
@@ -411,15 +427,14 @@ Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.s
|
|
|
411
427
|
|
|
412
428
|
### Live Context Fill Indicator (REQ-245)
|
|
413
429
|
|
|
414
|
-
The context fill tracker emits real-time JSONL events
|
|
430
|
+
The context fill tracker emits real-time JSONL events:
|
|
415
431
|
|
|
416
432
|
```jsonl
|
|
417
433
|
{"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
|
|
418
434
|
```
|
|
419
435
|
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
should run before the next turn.
|
|
436
|
+
When fill reaches the compression threshold (default 80%), specsmith signals that context
|
|
437
|
+
summarization should run before the next turn.
|
|
423
438
|
|
|
424
439
|
### Auto Context Compression (REQ-246)
|
|
425
440
|
|
|
@@ -445,14 +460,10 @@ request cannot be processed. This is a safety invariant, not a configuration opt
|
|
|
445
460
|
|
|
446
461
|
---
|
|
447
462
|
|
|
448
|
-
##
|
|
449
|
-
|
|
450
|
-
**Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
|
|
451
|
-
acts as the governance backend: Kairos spawns `specsmith governance-serve` at startup
|
|
452
|
-
and routes all preflight and verify calls through it.
|
|
463
|
+
## Governance REST API
|
|
453
464
|
|
|
454
465
|
```bash
|
|
455
|
-
# Start the governance REST API (
|
|
466
|
+
# Start the governance REST API (for MCP clients and IDE integrations)
|
|
456
467
|
specsmith governance-serve --port 7700 --project-dir .
|
|
457
468
|
|
|
458
469
|
# Classify a natural-language utterance under Specsmith governance
|
|
@@ -586,13 +597,6 @@ specsmith agent suggest-profiles --json # structured suggestions with bucket
|
|
|
586
597
|
Suggestions are read-only (never persisted) and inspect `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`,
|
|
587
598
|
`GOOGLE_API_KEY`, and local Ollama availability.
|
|
588
599
|
|
|
589
|
-
### Kairos AI Providers — Bucket Score Columns (REQ-281)
|
|
590
|
-
|
|
591
|
-
The Kairos **Agents > AI Providers** table gained three new columns — **R** (reasoning),
|
|
592
|
-
**C** (conversational), **L** (longform) — showing each provider's HF bucket scores inline.
|
|
593
|
-
A **Sync Scores** button triggers a background sync from the HF leaderboard without
|
|
594
|
-
interrupting the active session.
|
|
595
|
-
|
|
596
600
|
---
|
|
597
601
|
|
|
598
602
|
## Multi-Agent DAG Dispatcher (REQ-321..334)
|
|
@@ -642,7 +646,6 @@ print(f"{len(summary.completed)} completed, {len(summary.failed)} failed")
|
|
|
642
646
|
```
|
|
643
647
|
|
|
644
648
|
Events are persisted to `.specsmith/dispatch/<dag_id>/events.jsonl` for resume and replay.
|
|
645
|
-
Kairos renders the live dispatch view — see `app/` for build instructions.
|
|
646
649
|
|
|
647
650
|
---
|
|
648
651
|
|
|
@@ -680,35 +683,11 @@ result = run_vsg("rtl/top.vhd", rules="vsg_rules.yaml")
|
|
|
680
683
|
|
|
681
684
|
---
|
|
682
685
|
|
|
683
|
-
## Kairos — Flagship Terminal Client
|
|
684
|
-
|
|
685
|
-
**[Kairos](https://github.com/layer1labs/kairos)** is the recommended terminal client for specsmith.
|
|
686
|
-
Kairos spawns specsmith as a managed governance child process at startup and routes all
|
|
687
|
-
preflight, verify, and BYOE proxy calls through it. The Governance settings page shows live
|
|
688
|
-
specsmith status, version, and one-click update.
|
|
689
|
-
|
|
690
|
-
```bash
|
|
691
|
-
# Kairos starts specsmith automatically; or run manually:
|
|
692
|
-
specsmith governance-serve --port 7700 --project-dir .
|
|
693
|
-
```
|
|
694
|
-
|
|
695
|
-
The Kairos **Dispatch Panel** (`app/` — Rust, egui/eframe) renders the multi-agent DAG live:
|
|
696
|
-
- SVG DAG graph with nodes coloured by status (grey/blue/green/red/amber)
|
|
697
|
-
- Gantt timeline strip showing parallelism
|
|
698
|
-
- Per-node Retry (FAILED/BLOCKED) and Abort (RUNNING) buttons
|
|
699
|
-
- Subscribes to `GET /api/dispatch/events?dag_id=` SSE from `specsmith serve`
|
|
700
|
-
|
|
701
|
-
Build Kairos dispatch panel: `cd app && cargo build --release`
|
|
702
|
-
|
|
703
|
-
Use `pipx install specsmith` for standalone CLI usage from any terminal.
|
|
704
|
-
|
|
705
|
-
---
|
|
706
|
-
|
|
707
686
|
## Supporting specsmith
|
|
708
687
|
|
|
709
688
|
specsmith is open source and built by a small team. Every bit of support helps:
|
|
710
689
|
|
|
711
|
-
- ⭐ **Star** [specsmith](https://github.com/layer1labs/specsmith)
|
|
690
|
+
- ⭐ **Star** [specsmith](https://github.com/layer1labs/specsmith) on GitHub
|
|
712
691
|
- 📣 **Tell your friends and colleagues** — word of mouth is our best marketing
|
|
713
692
|
- 🐛 **Report bugs** via [GitHub Issues](https://github.com/layer1labs/specsmith/issues) — even small ones help
|
|
714
693
|
- 💡 **Suggest features** via [GitHub Discussions](https://github.com/layer1labs/specsmith/discussions) — we read every suggestion
|
|
@@ -1016,20 +995,18 @@ Clone this repo and open it in Warp — seven governance workflows appear automa
|
|
|
1016
995
|
|
|
1017
996
|
specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
|
|
1018
997
|
in this repo to check its governance health. This means every feature we add to specsmith is
|
|
1019
|
-
immediately dogfooded on specsmith itself.
|
|
1020
|
-
is the companion terminal and flagship client.
|
|
998
|
+
immediately dogfooded on specsmith itself.
|
|
1021
999
|
|
|
1022
1000
|
## Documentation
|
|
1023
1001
|
|
|
1024
1002
|
**[specsmith.readthedocs.io](https://specsmith.readthedocs.io)** — Full manual: AEE primer,
|
|
1025
|
-
command reference, project types, tool registry, governance model,
|
|
1003
|
+
command reference, project types, tool registry, governance model, ESDB, skills integrations, Ollama guide.
|
|
1026
1004
|
|
|
1027
1005
|
## Links
|
|
1028
1006
|
|
|
1029
1007
|
- [PyPI](https://pypi.org/project/specsmith/)
|
|
1030
1008
|
- [Documentation](https://specsmith.readthedocs.io)
|
|
1031
1009
|
- [Changelog](CHANGELOG.md)
|
|
1032
|
-
- [Kairos terminal client](https://github.com/layer1labs/kairos)
|
|
1033
1010
|
- [Contributing](CONTRIBUTING.md)
|
|
1034
1011
|
- [Security](SECURITY.md)
|
|
1035
1012
|
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.13.0.
|
|
8
|
-
description = "
|
|
7
|
+
version = "0.13.0.dev518"
|
|
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"
|
|
11
11
|
requires-python = ">=3.10"
|
|
@@ -41,6 +41,9 @@ dependencies = [
|
|
|
41
41
|
"pyyaml>=6.0",
|
|
42
42
|
"pydantic>=2.0",
|
|
43
43
|
"rich>=13.0",
|
|
44
|
+
# chronomemory is now an OPTIONAL commercial dep (specsmith[esdb]).
|
|
45
|
+
# The free SQLite backend is built-in and requires no extra install.
|
|
46
|
+
# To unlock ChronoStore: pip install specsmith[esdb] + specsmith esdb enable
|
|
44
47
|
]
|
|
45
48
|
|
|
46
49
|
[project.optional-dependencies]
|
|
@@ -51,6 +54,14 @@ dev = [
|
|
|
51
54
|
"mypy>=1.10",
|
|
52
55
|
"pre-commit>=3.0",
|
|
53
56
|
"types-pyyaml>=6.0",
|
|
57
|
+
"cryptography>=42.0", # needed for test_esdb_license.py signing helpers
|
|
58
|
+
]
|
|
59
|
+
# ESDB commercial backend — requires a valid license from licensing@layer1labs.com
|
|
60
|
+
# Install: pip install specsmith[esdb]
|
|
61
|
+
# Activate: specsmith esdb enable --key-file /path/to/your.esdb.key
|
|
62
|
+
esdb = [
|
|
63
|
+
"chronomemory>=0.1.3", # proprietary commercial — see chronomemory LICENSE
|
|
64
|
+
"cryptography>=42.0",
|
|
54
65
|
]
|
|
55
66
|
docs = [
|
|
56
67
|
"mkdocs>=1.6",
|
|
@@ -74,7 +85,7 @@ history-semantic = ["sentence-transformers>=2.2", "numpy>=1.24"]
|
|
|
74
85
|
voice = ["whisper-cpp-python>=0.2"]
|
|
75
86
|
# Install all optional LLM providers
|
|
76
87
|
agent = ["anthropic>=0.56", "openai>=1.0"]
|
|
77
|
-
# Convenience bundle: everything
|
|
88
|
+
# Convenience bundle: everything EXCEPT esdb (commercial license required separately)
|
|
78
89
|
all = [
|
|
79
90
|
"anthropic>=0.56",
|
|
80
91
|
"openai>=1.0",
|
|
@@ -83,6 +94,8 @@ all = [
|
|
|
83
94
|
"ruff>=0.4",
|
|
84
95
|
"mypy>=1.10",
|
|
85
96
|
]
|
|
97
|
+
# cryptography for license verification (usable without full esdb extra)
|
|
98
|
+
license-verify = ["cryptography>=42.0"]
|
|
86
99
|
|
|
87
100
|
[project.scripts]
|
|
88
101
|
specsmith = "specsmith.cli:main"
|
|
@@ -227,7 +240,9 @@ module = [
|
|
|
227
240
|
# ESDB package: conditional chronomemory stubs in except ImportError branch
|
|
228
241
|
# produce type[_Stub] vs type[ChronoRecord] assignment errors that are
|
|
229
242
|
# correct at runtime but cannot be expressed statically without TYPE_CHECKING.
|
|
243
|
+
# specsmith.esdb.* covers bridge.py and _license.py sub-modules too.
|
|
230
244
|
"specsmith.esdb",
|
|
245
|
+
"specsmith.esdb.*",
|
|
231
246
|
]
|
|
232
247
|
ignore_errors = true
|
|
233
248
|
|