specsmith 0.11.3.dev436__tar.gz → 0.11.3.dev438__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.11.3.dev436/src/specsmith.egg-info → specsmith-0.11.3.dev438}/PKG-INFO +22 -2
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/README.md +21 -1
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/pyproject.toml +1 -1
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/__init__.py +2 -0
- specsmith-0.11.3.dev438/src/specsmith/integrations/codity.py +296 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/governance.py +109 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/agents.md.j2 +11 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438/src/specsmith.egg-info}/PKG-INFO +22 -2
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/SOURCES.txt +2 -0
- specsmith-0.11.3.dev438/tests/test_integrations_codity.py +282 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/LICENSE +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/setup.cfg +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/belief.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/certainty.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/py.typed +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/recovery.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/session.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/trace.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/__main__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/cleanup.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/context_seed.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/_status.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/dag.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/events.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/result.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/hf_leaderboard.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/hf_sync.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/llm_client.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/model_profiles.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/spawner.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/teams.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/architect.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/auditor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/auth.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/block_export.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/channel.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ci_manager.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/cli.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/_compat.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/checker.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/evidence.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/regulations.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/reporter.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compressor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/config.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/context_orchestrator.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/context_window.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/credits.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/differ.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/doctor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/drive.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/editor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/esdb/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/esdb/bridge.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/builtins.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/runner.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/executor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/exporter.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_store.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_yaml.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/history_search.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/importer.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/instinct.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/issue_reporter.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/languages.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ledger.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/mcp_generator.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m002_agents_slim.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m003_compliance_init.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m006_session_governance.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/runner.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ollama_cmds.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/patent.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/paths.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/phase.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/plugins.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/profiles.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/releaser.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/requirements.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/serve.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session_init.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session_store.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/cloud.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/corporate.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/cross_platform.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/devops.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/docs.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/embedded.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/hardware.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/mobile.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/productivity.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/ssh.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills_builder.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/sync.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/tools.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/trace.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/updater.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/validator.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/workspace.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_CMD_001.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_ai_client.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_ai_intelligence.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_auditor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_channel.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_cli.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_compliance.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_compressor.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_dispatch.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_epistemic.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_importer.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_integrations.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_intelligence.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_issue_reporter.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_mcp_client.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_new_modules.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_nexus.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_permissions.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_rate_limits.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_req_248_262.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_scaffolder.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_skills_mcp.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_smoke.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_suggester.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_tools.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_validator.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_vcs.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_warp_parity.py +0 -0
- {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/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.11.3.
|
|
3
|
+
Version: 0.11.3.dev438
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
@@ -274,8 +274,9 @@ be overwritten by the next sync.
|
|
|
274
274
|
| `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
|
|
275
275
|
| `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
|
|
276
276
|
| `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
|
|
277
|
+
| `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
|
|
277
278
|
|
|
278
|
-
**Migration from Markdown-primary:**
|
|
279
|
+
**Migration from Markdown-primary:**
|
|
279
280
|
`scripts/migrate_governance_to_yaml.py` once to convert an existing project.
|
|
280
281
|
Idempotent — safe to re-run.
|
|
281
282
|
|
|
@@ -934,6 +935,25 @@ production LLM systems:
|
|
|
934
935
|
|
|
935
936
|
---
|
|
936
937
|
|
|
938
|
+
## Codity.ai AI Code Review Integration
|
|
939
|
+
|
|
940
|
+
specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
|
|
941
|
+
|
|
942
|
+
```bash
|
|
943
|
+
specsmith integrate codity --project-dir ./my-project
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
This generates:
|
|
947
|
+
- `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
|
|
948
|
+
- `docs/codity-setup.md` — one-time setup checklist
|
|
949
|
+
- Appends a TODO checklist to `LEDGER.md`
|
|
950
|
+
|
|
951
|
+
**AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
|
|
952
|
+
|
|
953
|
+
See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
|
|
954
|
+
|
|
955
|
+
---
|
|
956
|
+
|
|
937
957
|
## The specsmith Bootstrap
|
|
938
958
|
|
|
939
959
|
specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
|
|
@@ -202,8 +202,9 @@ be overwritten by the next sync.
|
|
|
202
202
|
| `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
|
|
203
203
|
| `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
|
|
204
204
|
| `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
|
|
205
|
+
| `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
|
|
205
206
|
|
|
206
|
-
**Migration from Markdown-primary:**
|
|
207
|
+
**Migration from Markdown-primary:**
|
|
207
208
|
`scripts/migrate_governance_to_yaml.py` once to convert an existing project.
|
|
208
209
|
Idempotent — safe to re-run.
|
|
209
210
|
|
|
@@ -862,6 +863,25 @@ production LLM systems:
|
|
|
862
863
|
|
|
863
864
|
---
|
|
864
865
|
|
|
866
|
+
## Codity.ai AI Code Review Integration
|
|
867
|
+
|
|
868
|
+
specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
|
|
869
|
+
|
|
870
|
+
```bash
|
|
871
|
+
specsmith integrate codity --project-dir ./my-project
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
This generates:
|
|
875
|
+
- `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
|
|
876
|
+
- `docs/codity-setup.md` — one-time setup checklist
|
|
877
|
+
- Appends a TODO checklist to `LEDGER.md`
|
|
878
|
+
|
|
879
|
+
**AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
|
|
880
|
+
|
|
881
|
+
See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
865
885
|
## The specsmith Bootstrap
|
|
866
886
|
|
|
867
887
|
specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.11.3.
|
|
7
|
+
version = "0.11.3.dev438"
|
|
8
8
|
description = "Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -28,6 +28,7 @@ def _load_adapters() -> None:
|
|
|
28
28
|
from specsmith.integrations.agent_skill import AgentSkillAdapter
|
|
29
29
|
from specsmith.integrations.aider import AiderAdapter
|
|
30
30
|
from specsmith.integrations.claude_code import ClaudeCodeAdapter
|
|
31
|
+
from specsmith.integrations.codity import CodityAdapter
|
|
31
32
|
from specsmith.integrations.copilot import CopilotAdapter
|
|
32
33
|
from specsmith.integrations.cursor import CursorAdapter
|
|
33
34
|
from specsmith.integrations.gemini import GeminiAdapter
|
|
@@ -36,6 +37,7 @@ def _load_adapters() -> None:
|
|
|
36
37
|
for cls in (
|
|
37
38
|
AgentSkillAdapter,
|
|
38
39
|
ClaudeCodeAdapter,
|
|
40
|
+
CodityAdapter,
|
|
39
41
|
CursorAdapter,
|
|
40
42
|
CopilotAdapter,
|
|
41
43
|
GeminiAdapter,
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2026 BitConcepts, LLC. All rights reserved.
|
|
3
|
+
"""Codity.ai integration adapter.
|
|
4
|
+
|
|
5
|
+
Generates a GitHub Actions (or GitLab CI / Azure Pipelines) workflow that
|
|
6
|
+
runs ``codity review --staged`` on every pull-request, plus appends a setup
|
|
7
|
+
checklist to LEDGER.md and writes a starter Codity configuration hint.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from specsmith.config import ProjectConfig
|
|
15
|
+
from specsmith.integrations.base import AgentAdapter
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CodityAdapter(AgentAdapter):
|
|
19
|
+
"""Scaffold Codity.ai AI-code-review integration files."""
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def name(self) -> str:
|
|
23
|
+
return "codity"
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def description(self) -> str:
|
|
27
|
+
return "Codity.ai AI code review (.github/workflows/codity-review.yml)"
|
|
28
|
+
|
|
29
|
+
# ------------------------------------------------------------------
|
|
30
|
+
# Public API
|
|
31
|
+
# ------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
def generate(self, config: ProjectConfig, target: Path) -> list[Path]:
|
|
34
|
+
"""Generate Codity.ai integration files.
|
|
35
|
+
|
|
36
|
+
Creates:
|
|
37
|
+
- ``.github/workflows/codity-review.yml`` (or GitLab/Azure variant)
|
|
38
|
+
- ``docs/codity-setup.md`` — one-time setup checklist
|
|
39
|
+
Appends:
|
|
40
|
+
- ``LEDGER.md`` — Codity setup TODO entry
|
|
41
|
+
"""
|
|
42
|
+
created: list[Path] = []
|
|
43
|
+
|
|
44
|
+
vcs = self._detect_vcs(target)
|
|
45
|
+
workflow_path = self._write_workflow(config, target, vcs)
|
|
46
|
+
if workflow_path:
|
|
47
|
+
created.append(workflow_path)
|
|
48
|
+
|
|
49
|
+
setup_doc = self._write_setup_doc(config, target, vcs)
|
|
50
|
+
created.append(setup_doc)
|
|
51
|
+
|
|
52
|
+
self._append_ledger(target, vcs)
|
|
53
|
+
|
|
54
|
+
return created
|
|
55
|
+
|
|
56
|
+
# ------------------------------------------------------------------
|
|
57
|
+
# Internal helpers
|
|
58
|
+
# ------------------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
def _detect_vcs(self, target: Path) -> str:
|
|
61
|
+
"""Detect VCS host from scaffold.yml or directory layout.
|
|
62
|
+
|
|
63
|
+
Returns one of: ``"github"``, ``"gitlab"``, ``"azure"``.
|
|
64
|
+
Defaults to ``"github"`` when the host cannot be determined.
|
|
65
|
+
"""
|
|
66
|
+
scaffold = target / "scaffold.yml"
|
|
67
|
+
if scaffold.exists():
|
|
68
|
+
text = scaffold.read_text(encoding="utf-8")
|
|
69
|
+
if "gitlab" in text.lower():
|
|
70
|
+
return "gitlab"
|
|
71
|
+
if "azure" in text.lower() or "azuredevops" in text.lower():
|
|
72
|
+
return "azure"
|
|
73
|
+
# Structural heuristics
|
|
74
|
+
if (target / ".gitlab-ci.yml").exists():
|
|
75
|
+
return "gitlab"
|
|
76
|
+
if (target / "azure-pipelines.yml").exists():
|
|
77
|
+
return "azure"
|
|
78
|
+
return "github"
|
|
79
|
+
|
|
80
|
+
# ---- workflow writers -------------------------------------------
|
|
81
|
+
|
|
82
|
+
def _write_workflow(self, config: ProjectConfig, target: Path, vcs: str) -> Path | None:
|
|
83
|
+
if vcs == "github":
|
|
84
|
+
return self._write_github_workflow(config, target)
|
|
85
|
+
if vcs == "gitlab":
|
|
86
|
+
return self._write_gitlab_workflow(config, target)
|
|
87
|
+
if vcs == "azure":
|
|
88
|
+
return self._write_azure_workflow(config, target)
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
def _write_github_workflow(self, config: ProjectConfig, target: Path) -> Path:
|
|
92
|
+
workflows_dir = target / ".github" / "workflows"
|
|
93
|
+
workflows_dir.mkdir(parents=True, exist_ok=True)
|
|
94
|
+
workflow_path = workflows_dir / "codity-review.yml"
|
|
95
|
+
content = f"""\
|
|
96
|
+
# Codity.ai AI Code Review — {config.name}
|
|
97
|
+
# Generated by specsmith (specsmith integrate codity)
|
|
98
|
+
#
|
|
99
|
+
# Prerequisites:
|
|
100
|
+
# 1. Install the Codity GitHub App: https://github.com/apps/codity
|
|
101
|
+
# 2. (Optional) Restrict to specific repos in the App settings.
|
|
102
|
+
#
|
|
103
|
+
# The workflow runs on every pull-request and posts inline AI review
|
|
104
|
+
# comments directly on the PR diff.
|
|
105
|
+
|
|
106
|
+
name: Codity AI Review
|
|
107
|
+
|
|
108
|
+
on:
|
|
109
|
+
pull_request:
|
|
110
|
+
branches: ["**"]
|
|
111
|
+
|
|
112
|
+
permissions:
|
|
113
|
+
contents: read
|
|
114
|
+
pull-requests: write
|
|
115
|
+
|
|
116
|
+
jobs:
|
|
117
|
+
codity-review:
|
|
118
|
+
name: Codity AI Review
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
steps:
|
|
121
|
+
- name: Checkout
|
|
122
|
+
uses: actions/checkout@v4
|
|
123
|
+
with:
|
|
124
|
+
fetch-depth: 0 # full history for diff context
|
|
125
|
+
|
|
126
|
+
- name: Install Codity CLI
|
|
127
|
+
run: curl -fsSL https://cli.codity.ai/install.sh | sh
|
|
128
|
+
|
|
129
|
+
- name: Run Codity review
|
|
130
|
+
env:
|
|
131
|
+
CODITY_ACCESS_TOKEN: ${{{{ secrets.CODITY_ACCESS_TOKEN }}}}
|
|
132
|
+
run: codity review --staged
|
|
133
|
+
"""
|
|
134
|
+
workflow_path.write_text(content, encoding="utf-8")
|
|
135
|
+
return workflow_path
|
|
136
|
+
|
|
137
|
+
def _write_gitlab_workflow(self, config: ProjectConfig, target: Path) -> Path:
|
|
138
|
+
ci_path = target / ".gitlab-ci-codity.yml"
|
|
139
|
+
content = f"""\
|
|
140
|
+
# Codity.ai AI Code Review — {config.name}
|
|
141
|
+
# Generated by specsmith (specsmith integrate codity)
|
|
142
|
+
#
|
|
143
|
+
# Prerequisites:
|
|
144
|
+
# 1. Configure a GitLab PAT: codity config set-pat --provider gitlab
|
|
145
|
+
# 2. Store it as CI/CD variable CODITY_GITLAB_PAT in GitLab settings.
|
|
146
|
+
|
|
147
|
+
stages:
|
|
148
|
+
- review
|
|
149
|
+
|
|
150
|
+
codity-review:
|
|
151
|
+
stage: review
|
|
152
|
+
image: debian:bookworm-slim
|
|
153
|
+
only:
|
|
154
|
+
- merge_requests
|
|
155
|
+
variables:
|
|
156
|
+
CODITY_ACCESS_TOKEN: $CODITY_ACCESS_TOKEN
|
|
157
|
+
script:
|
|
158
|
+
- apt-get update -qq && apt-get install -y -qq curl
|
|
159
|
+
- curl -fsSL https://cli.codity.ai/install.sh | sh
|
|
160
|
+
- codity config set-pat --provider gitlab --token "$CODITY_GITLAB_PAT"
|
|
161
|
+
- codity review --staged
|
|
162
|
+
"""
|
|
163
|
+
ci_path.write_text(content, encoding="utf-8")
|
|
164
|
+
return ci_path
|
|
165
|
+
|
|
166
|
+
def _write_azure_workflow(self, config: ProjectConfig, target: Path) -> Path:
|
|
167
|
+
pipelines_dir = target / ".azure-pipelines"
|
|
168
|
+
pipelines_dir.mkdir(parents=True, exist_ok=True)
|
|
169
|
+
pipeline_path = pipelines_dir / "codity-review.yml"
|
|
170
|
+
content = f"""\
|
|
171
|
+
# Codity.ai AI Code Review — {config.name}
|
|
172
|
+
# Generated by specsmith (specsmith integrate codity)
|
|
173
|
+
#
|
|
174
|
+
# Prerequisites:
|
|
175
|
+
# 1. Configure an Azure DevOps PAT: codity config set-pat --provider azure
|
|
176
|
+
# 2. Store it as pipeline variable CODITY_AZURE_PAT (secret).
|
|
177
|
+
|
|
178
|
+
trigger: none
|
|
179
|
+
|
|
180
|
+
pr:
|
|
181
|
+
branches:
|
|
182
|
+
include:
|
|
183
|
+
- "*"
|
|
184
|
+
|
|
185
|
+
pool:
|
|
186
|
+
vmImage: ubuntu-latest
|
|
187
|
+
|
|
188
|
+
steps:
|
|
189
|
+
- script: curl -fsSL https://cli.codity.ai/install.sh | sh
|
|
190
|
+
displayName: Install Codity CLI
|
|
191
|
+
|
|
192
|
+
- script: |
|
|
193
|
+
codity config set-pat --provider azure --token "$(CODITY_AZURE_PAT)"
|
|
194
|
+
codity review --staged
|
|
195
|
+
displayName: Run Codity AI Review
|
|
196
|
+
env:
|
|
197
|
+
CODITY_ACCESS_TOKEN: $(CODITY_ACCESS_TOKEN)
|
|
198
|
+
"""
|
|
199
|
+
pipeline_path.write_text(content, encoding="utf-8")
|
|
200
|
+
return pipeline_path
|
|
201
|
+
|
|
202
|
+
# ---- setup doc --------------------------------------------------
|
|
203
|
+
|
|
204
|
+
def _write_setup_doc(self, config: ProjectConfig, target: Path, vcs: str) -> Path:
|
|
205
|
+
docs_dir = target / "docs"
|
|
206
|
+
docs_dir.mkdir(parents=True, exist_ok=True)
|
|
207
|
+
doc_path = docs_dir / "codity-setup.md"
|
|
208
|
+
|
|
209
|
+
pat_note = ""
|
|
210
|
+
if vcs == "gitlab":
|
|
211
|
+
pat_note = (
|
|
212
|
+
"\n5. Set GitLab PAT: `codity config set-pat --provider gitlab`\n"
|
|
213
|
+
"6. Add `CODITY_GITLAB_PAT` as a CI/CD variable in GitLab.\n"
|
|
214
|
+
)
|
|
215
|
+
elif vcs == "azure":
|
|
216
|
+
pat_note = (
|
|
217
|
+
"\n5. Set Azure DevOps PAT: `codity config set-pat --provider azure`\n"
|
|
218
|
+
"6. Add `CODITY_AZURE_PAT` as a secret pipeline variable.\n"
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
content = f"""\
|
|
222
|
+
# Codity.ai Setup — {config.name}
|
|
223
|
+
|
|
224
|
+
> Generated by `specsmith integrate codity`.
|
|
225
|
+
|
|
226
|
+
## One-time setup checklist
|
|
227
|
+
|
|
228
|
+
1. Install Codity CLI:
|
|
229
|
+
```bash
|
|
230
|
+
curl -fsSL https://cli.codity.ai/install.sh | sh
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
2. Authenticate:
|
|
234
|
+
```bash
|
|
235
|
+
codity login # opens browser — magic-link auth
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
3. Initialise in this project:
|
|
239
|
+
```bash
|
|
240
|
+
codity init
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
4. (GitHub) Install the Codity GitHub App:
|
|
244
|
+
<https://github.com/apps/codity>{pat_note}
|
|
245
|
+
|
|
246
|
+
## Daily usage
|
|
247
|
+
|
|
248
|
+
| Command | Effect |
|
|
249
|
+
|---|---|
|
|
250
|
+
| `codity review --staged` | AI review of staged changes |
|
|
251
|
+
| `codity scan --staged` | Security & quality scan of staged changes |
|
|
252
|
+
| `codity test-gen --staged` | Generate tests for staged changes |
|
|
253
|
+
| `codity doctor` | Health-check CLI + project config |
|
|
254
|
+
|
|
255
|
+
## Config location
|
|
256
|
+
|
|
257
|
+
`~/.codity/config.yaml` — or set `CODITY_ACCESS_TOKEN` env var to override.
|
|
258
|
+
|
|
259
|
+
## AGENTS.md rule
|
|
260
|
+
|
|
261
|
+
Projects with Codity configured SHOULD run `codity review --staged` before
|
|
262
|
+
any commit that touches production code. Treat HIGH-severity findings as
|
|
263
|
+
blocking; MEDIUM findings require inline acknowledgement.
|
|
264
|
+
"""
|
|
265
|
+
doc_path.write_text(content, encoding="utf-8")
|
|
266
|
+
return doc_path
|
|
267
|
+
|
|
268
|
+
# ---- ledger append ----------------------------------------------
|
|
269
|
+
|
|
270
|
+
def _append_ledger(self, target: Path, vcs: str) -> None:
|
|
271
|
+
ledger = target / "LEDGER.md"
|
|
272
|
+
if not ledger.exists():
|
|
273
|
+
return
|
|
274
|
+
entry = (
|
|
275
|
+
"\n## TODO: Codity.ai Setup\n\n"
|
|
276
|
+
"- [ ] Run `codity login` and complete browser auth\n"
|
|
277
|
+
"- [ ] Run `codity init` in project root\n"
|
|
278
|
+
)
|
|
279
|
+
if vcs == "github":
|
|
280
|
+
entry += "- [ ] Install Codity GitHub App: https://github.com/apps/codity\n"
|
|
281
|
+
entry += (
|
|
282
|
+
"- [ ] Add `CODITY_ACCESS_TOKEN` to repo secrets (optional — App handles auth)\n"
|
|
283
|
+
)
|
|
284
|
+
elif vcs == "gitlab":
|
|
285
|
+
entry += (
|
|
286
|
+
"- [ ] `codity config set-pat --provider gitlab` "
|
|
287
|
+
"and add `CODITY_GITLAB_PAT` to CI/CD vars\n"
|
|
288
|
+
)
|
|
289
|
+
elif vcs == "azure":
|
|
290
|
+
entry += (
|
|
291
|
+
"- [ ] `codity config set-pat --provider azure` "
|
|
292
|
+
"and add `CODITY_AZURE_PAT` to pipeline vars\n"
|
|
293
|
+
)
|
|
294
|
+
entry += "- [ ] Run `codity doctor` to verify setup\n"
|
|
295
|
+
with ledger.open("a", encoding="utf-8") as f:
|
|
296
|
+
f.write(entry)
|
|
@@ -631,6 +631,115 @@ Increment NNN by scanning existing PAR entries in `docs/LEDGER.md`.
|
|
|
631
631
|
- Filed artifacts in `docs/ip/filings/` are immutable.
|
|
632
632
|
- Normative content lives under `docs/ip/specs/` only.
|
|
633
633
|
- Experiment data belongs in `cpsc-engine-rtl`, not cpsc-core.
|
|
634
|
+
""",
|
|
635
|
+
),
|
|
636
|
+
SkillEntry(
|
|
637
|
+
slug="codity-ai-review",
|
|
638
|
+
name="Codity.ai AI Review — staged-diff code review, security scan, test-gen",
|
|
639
|
+
description=(
|
|
640
|
+
"Codity.ai CLI workflow: install, authenticate, initialise, and run "
|
|
641
|
+
"codity review --staged / scan --staged / test-gen --staged on every commit "
|
|
642
|
+
"that touches production code. Covers GitHub App, GitLab PAT, Azure PAT "
|
|
643
|
+
"setup, CI integration via specsmith integrate codity, and the AGENTS.md rule."
|
|
644
|
+
),
|
|
645
|
+
domain=SkillDomain.GOVERNANCE,
|
|
646
|
+
tags=[
|
|
647
|
+
"codity",
|
|
648
|
+
"ai-review",
|
|
649
|
+
"code-review",
|
|
650
|
+
"security",
|
|
651
|
+
"test-gen",
|
|
652
|
+
"ci",
|
|
653
|
+
"github",
|
|
654
|
+
"gitlab",
|
|
655
|
+
"azure",
|
|
656
|
+
"staged",
|
|
657
|
+
"pre-commit",
|
|
658
|
+
],
|
|
659
|
+
prerequisites=[],
|
|
660
|
+
body="""\
|
|
661
|
+
# Codity.ai AI Review Skill
|
|
662
|
+
|
|
663
|
+
Codity.ai provides AI-powered code review, security scanning, and test
|
|
664
|
+
generation that runs against staged changes (`--staged`) before every commit
|
|
665
|
+
that touches production code.
|
|
666
|
+
|
|
667
|
+
## Installation
|
|
668
|
+
```bash
|
|
669
|
+
curl -fsSL https://cli.codity.ai/install.sh | sh
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
## Authentication
|
|
673
|
+
```bash
|
|
674
|
+
codity login # browser magic-link; no password required
|
|
675
|
+
```
|
|
676
|
+
Config stored at `~/.codity/config.yaml`.
|
|
677
|
+
Override with env var: `CODITY_ACCESS_TOKEN=<token>`.
|
|
678
|
+
|
|
679
|
+
## Project initialisation (once per repo)
|
|
680
|
+
```bash
|
|
681
|
+
codity init
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
## Daily commands (run on staged changes)
|
|
685
|
+
|
|
686
|
+
| Command | Effect |
|
|
687
|
+
|---|---|
|
|
688
|
+
| `codity review --staged` | AI inline code review of staged diff |
|
|
689
|
+
| `codity scan --staged` | Security & quality scan of staged diff |
|
|
690
|
+
| `codity test-gen --staged` | Generate tests for staged changes |
|
|
691
|
+
| `codity doctor` | Health-check CLI + project config |
|
|
692
|
+
|
|
693
|
+
## AGENTS.md rule (non-negotiable)
|
|
694
|
+
|
|
695
|
+
Projects with Codity configured SHOULD run `codity review --staged` before
|
|
696
|
+
any commit that touches production code.
|
|
697
|
+
|
|
698
|
+
- **HIGH severity** findings are **blocking** — do not commit until resolved.
|
|
699
|
+
- **MEDIUM severity** findings require inline acknowledgement in the commit
|
|
700
|
+
message or PR description.
|
|
701
|
+
- Run `codity scan --staged` for security issues on any auth/crypto/infra change.
|
|
702
|
+
|
|
703
|
+
## CI integration (via specsmith)
|
|
704
|
+
|
|
705
|
+
```bash
|
|
706
|
+
specsmith integrate codity --project-dir .
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
This scaffolds:
|
|
710
|
+
- `.github/workflows/codity-review.yml` (GitHub Actions)
|
|
711
|
+
- `.gitlab-ci-codity.yml` (GitLab CI, when gitlab detected)
|
|
712
|
+
- `.azure-pipelines/codity-review.yml` (Azure Pipelines, when azure detected)
|
|
713
|
+
- `docs/codity-setup.md` — one-time setup checklist
|
|
714
|
+
- Appends TODO items to `LEDGER.md`
|
|
715
|
+
|
|
716
|
+
## VCS-specific setup
|
|
717
|
+
|
|
718
|
+
### GitHub (recommended)
|
|
719
|
+
1. Install the Codity GitHub App: <https://github.com/apps/codity>
|
|
720
|
+
2. Grant access to your repo(s).
|
|
721
|
+
3. (Optional) Add `CODITY_ACCESS_TOKEN` as a repo secret for CLI auth.
|
|
722
|
+
|
|
723
|
+
### GitLab
|
|
724
|
+
```bash
|
|
725
|
+
codity config set-pat --provider gitlab --token <YOUR_PAT>
|
|
726
|
+
```
|
|
727
|
+
Add `CODITY_GITLAB_PAT` as a CI/CD variable (masked, protected).
|
|
728
|
+
|
|
729
|
+
### Azure DevOps
|
|
730
|
+
```bash
|
|
731
|
+
codity config set-pat --provider azure --token <YOUR_PAT>
|
|
732
|
+
```
|
|
733
|
+
Add `CODITY_AZURE_PAT` as a secret pipeline variable.
|
|
734
|
+
|
|
735
|
+
## Health check
|
|
736
|
+
```bash
|
|
737
|
+
codity doctor
|
|
738
|
+
# Expected output:
|
|
739
|
+
# ✓ CLI version: x.y.z
|
|
740
|
+
# ✓ Authenticated: <email>
|
|
741
|
+
# ✓ Project: initialised
|
|
742
|
+
```
|
|
634
743
|
""",
|
|
635
744
|
),
|
|
636
745
|
SkillEntry(
|
|
@@ -103,6 +103,17 @@ Agents MUST defer to specsmith for ALL governance decisions.
|
|
|
103
103
|
|
|
104
104
|
---
|
|
105
105
|
|
|
106
|
+
## Codity.ai Code Review (if configured)
|
|
107
|
+
|
|
108
|
+
If `codity doctor` exits 0 (Codity is configured), run
|
|
109
|
+
`codity review --staged` before any commit touching production code.
|
|
110
|
+
- **HIGH severity** findings block the commit.
|
|
111
|
+
- **MEDIUM severity** requires inline acknowledgement in the commit message.
|
|
112
|
+
|
|
113
|
+
To set up Codity: `specsmith integrate codity --project-dir .`
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
106
117
|
**Project:** {{ project.name }}
|
|
107
118
|
**Type:** {{ project.type_label }}
|
|
108
119
|
**Platforms:** {{ project.platform_names | join(', ') }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specsmith
|
|
3
|
-
Version: 0.11.3.
|
|
3
|
+
Version: 0.11.3.dev438
|
|
4
4
|
Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
|
|
5
5
|
Author: BitConcepts
|
|
6
6
|
License-Expression: MIT
|
|
@@ -274,8 +274,9 @@ be overwritten by the next sync.
|
|
|
274
274
|
| `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
|
|
275
275
|
| `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
|
|
276
276
|
| `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
|
|
277
|
+
| `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
|
|
277
278
|
|
|
278
|
-
**Migration from Markdown-primary:**
|
|
279
|
+
**Migration from Markdown-primary:**
|
|
279
280
|
`scripts/migrate_governance_to_yaml.py` once to convert an existing project.
|
|
280
281
|
Idempotent — safe to re-run.
|
|
281
282
|
|
|
@@ -934,6 +935,25 @@ production LLM systems:
|
|
|
934
935
|
|
|
935
936
|
---
|
|
936
937
|
|
|
938
|
+
## Codity.ai AI Code Review Integration
|
|
939
|
+
|
|
940
|
+
specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
|
|
941
|
+
|
|
942
|
+
```bash
|
|
943
|
+
specsmith integrate codity --project-dir ./my-project
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
This generates:
|
|
947
|
+
- `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
|
|
948
|
+
- `docs/codity-setup.md` — one-time setup checklist
|
|
949
|
+
- Appends a TODO checklist to `LEDGER.md`
|
|
950
|
+
|
|
951
|
+
**AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
|
|
952
|
+
|
|
953
|
+
See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
|
|
954
|
+
|
|
955
|
+
---
|
|
956
|
+
|
|
937
957
|
## The specsmith Bootstrap
|
|
938
958
|
|
|
939
959
|
specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
|
|
@@ -162,6 +162,7 @@ src/specsmith/integrations/agent_skill.py
|
|
|
162
162
|
src/specsmith/integrations/aider.py
|
|
163
163
|
src/specsmith/integrations/base.py
|
|
164
164
|
src/specsmith/integrations/claude_code.py
|
|
165
|
+
src/specsmith/integrations/codity.py
|
|
165
166
|
src/specsmith/integrations/copilot.py
|
|
166
167
|
src/specsmith/integrations/cursor.py
|
|
167
168
|
src/specsmith/integrations/gemini.py
|
|
@@ -258,6 +259,7 @@ tests/test_epistemic.py
|
|
|
258
259
|
tests/test_fallback_chain.py
|
|
259
260
|
tests/test_importer.py
|
|
260
261
|
tests/test_integrations.py
|
|
262
|
+
tests/test_integrations_codity.py
|
|
261
263
|
tests/test_intelligence.py
|
|
262
264
|
tests/test_issue_reporter.py
|
|
263
265
|
tests/test_mcp_client.py
|