specsmith 0.10.1.dev277__tar.gz → 0.10.1.dev282__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.10.1.dev277 → specsmith-0.10.1.dev282}/PKG-INFO +228 -8
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/README.md +227 -7
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/pyproject.toml +1 -1
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/cleanup.py +2 -1
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/cli.py +1 -1
- specsmith-0.10.1.dev282/src/specsmith/context_window.py +274 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/PKG-INFO +228 -8
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/SOURCES.txt +2 -0
- specsmith-0.10.1.dev282/tests/test_compliance.py +527 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/LICENSE +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/setup.cfg +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/belief.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/certainty.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/failure_graph.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/py.typed +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/recovery.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/session.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/stress_tester.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/epistemic/trace.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/__main__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/broker.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/chat_runner.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/core.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/endpoints.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/events.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/execution_profiles.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/fallback.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/indexer.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/mcp.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/memory.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/model_intelligence.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/orchestrator.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/permissions.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/profiles.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/provider_registry.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/repl.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/router.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/rules.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/runner.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/safety.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/suggester.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/tools.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/verifier.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/agent/voice.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/architect.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/auditor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/auth.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/block_export.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/commands/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/commands/intelligence.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/compressor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/config.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/console_utils.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/credit_analyzer.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/credits.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/base.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/citations.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/fpd.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/odp.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/patentsview.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/pfw.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/ppubs.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/datasources/ptab.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/differ.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/doctor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/drive.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/editor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/belief.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/certainty.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/failure_graph.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/recovery.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/epistemic/stress_tester.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/executor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/exporter.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/governance_logic.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/app.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/main_window.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/session_tab.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/theme.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/chat_view.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/input_bar.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/provider_bar.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/token_meter.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/tool_panel.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/widgets/update_checker.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/gui/worker.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/history_search.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/importer.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/instinct.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/agent_skill.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/aider.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/base.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/claude_code.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/copilot.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/cursor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/gemini.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/integrations/windsurf.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/languages.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/ledger.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/patent.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/paths.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/phase.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/plugins.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/profiles.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/rate_limits.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/releaser.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/requirements.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/requirements_parser.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/retrieval.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/safe_write.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/scaffolder.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/serve.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/session.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/skills.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/sync.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/agents.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/contributing.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/license-MIT.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/community/security.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/editorconfig.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/gitattributes.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/gitignore.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/go/go.mod.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/go/main.go.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/roles.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/rules.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/governance/verification.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/js/package.json.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/ledger.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/cli.py.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/init.py.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/readme.md.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/rust/main.rs.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/tool_installer.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/toolrules.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/tools.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/trace.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/updater.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/upgrader.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/validator.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs/__init__.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs/base.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs/bitbucket.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs/github.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs/gitlab.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/vcs_commands.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/wireframes.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith/workspace.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/dependency_links.txt +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/entry_points.txt +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/requires.txt +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/src/specsmith.egg-info/top_level.txt +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_CMD_001.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_agent_profiles.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_agent_runner_ready.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_auditor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_chat_diff_decision.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_chat_runner_openai_compat.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_chat_stdin_protocol.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_cli.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_cli_workflows_history_drive.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_compressor.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_e2e_nexus.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_endpoints_cli.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_endpoints_store.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_epistemic.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_fallback_chain.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_importer.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_integrations.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_mcp_client.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_nexus.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_permissions.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_phase1_4_new.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_phase34_completion.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_rate_limits.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_scaffolder.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_skill_marketplace.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_smoke.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_suggester.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_tools.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_validator.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_vcs.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/tests/test_warp_parity.py +0 -0
- {specsmith-0.10.1.dev277 → specsmith-0.10.1.dev282}/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.10.1.
|
|
3
|
+
Version: 0.10.1.dev282
|
|
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
|
|
@@ -78,6 +78,7 @@ Dynamic: license-file
|
|
|
78
78
|
[](https://pypi.org/project/specsmith/)
|
|
79
79
|
[](https://www.python.org/downloads/)
|
|
80
80
|
[](LICENSE)
|
|
81
|
+
|
|
81
82
|
**Applied Epistemic Engineering toolkit for AI-assisted development.**
|
|
82
83
|
|
|
83
84
|
> Intelligence proposes. Constraints decide. The ledger remembers.
|
|
@@ -86,17 +87,19 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
|
|
|
86
87
|
epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
|
|
87
88
|
cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
|
|
88
89
|
|
|
89
|
-
**0.
|
|
90
|
-
Specsmith now
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
**0.11.0 — EU AI Act / NIST AI RMF compliance, context window management, and governance tools panel.**
|
|
91
|
+
Specsmith now ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
|
|
92
|
+
and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
|
|
93
|
+
every AI-generated output is disclosed, context windows are GPU-aware and protected against
|
|
94
|
+
overflow, and a dedicated governance tools panel in Kairos surfaces compliance settings
|
|
95
|
+
per-session and per-project.
|
|
95
96
|
|
|
96
97
|
```bash
|
|
97
98
|
specsmith governance-serve --port 7700 # Kairos governance REST API
|
|
98
99
|
specsmith sync # sync .specsmith/ from docs/ markdown
|
|
99
|
-
specsmith agent permissions-check git_push # check tool permission (
|
|
100
|
+
specsmith agent permissions-check git_push # check tool permission (REQ-012)
|
|
101
|
+
specsmith ollama gpu # detect GPU VRAM, recommend context size
|
|
102
|
+
specsmith export # generate full compliance report
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
It also co-installs the standalone `epistemic` Python library for direct use in any project:
|
|
@@ -241,6 +244,223 @@ agent:
|
|
|
241
244
|
|
|
242
245
|
---
|
|
243
246
|
|
|
247
|
+
## AI Compliance & Governance
|
|
248
|
+
|
|
249
|
+
specsmith is designed from the ground up for **auditable, explainable, and human-overseen AI**.
|
|
250
|
+
It implements concrete compliance mechanisms mapped to the two major regulatory frameworks
|
|
251
|
+
that govern AI systems in production today.
|
|
252
|
+
|
|
253
|
+
### Standards Coverage
|
|
254
|
+
|
|
255
|
+
**EU AI Act (Regulation 2024/1689)** — The world's first comprehensive legal framework for AI,
|
|
256
|
+
enforced across the European Union. High-risk AI systems must provide transparency, auditability,
|
|
257
|
+
human oversight, and robustness. specsmith implements:
|
|
258
|
+
|
|
259
|
+
| EU AI Act Requirement | specsmith Mechanism |
|
|
260
|
+
|---|---|
|
|
261
|
+
| Art. 9 — Risk Management System | AEE verification loop with confidence scoring and equilibrium checks |
|
|
262
|
+
| Art. 12 — Logging & Record-Keeping | `TraceVault` SHA-256 chained ledger (tamper-evident, append-only) |
|
|
263
|
+
| Art. 13 — Transparency & Explainability | `ai_disclosure` block in every preflight response; `/why` in Nexus REPL |
|
|
264
|
+
| Art. 14 — Human Oversight | Human escalation threshold (`--escalate-threshold`); kill-switch CLI |
|
|
265
|
+
| Art. 15 — Accuracy & Robustness | Bounded retry (max 3×), confidence gates, hard context ceiling (REQ-247) |
|
|
266
|
+
| Art. 53 — GPAI Model Transparency | Provider + model name emitted in every `ai_disclosure` block |
|
|
267
|
+
|
|
268
|
+
**NIST AI Risk Management Framework 1.0 (AI RMF)** — The US standard for managing AI risk
|
|
269
|
+
across the AI lifecycle. specsmith addresses all four core functions:
|
|
270
|
+
|
|
271
|
+
| NIST AI RMF Function | specsmith Mechanism |
|
|
272
|
+
|---|---|
|
|
273
|
+
| **GOVERN** — Policies & accountability | Governance rules (H1–H13), permissions profile, `scaffold.yml` policy |
|
|
274
|
+
| **MAP** — Risk identification | AEE stress-test, belief graph, contradictions and uncertainty metrics |
|
|
275
|
+
| **MEASURE** — Risk analysis | Confidence scoring, epistemic equilibrium, `specsmith epistemic-audit` |
|
|
276
|
+
| **MANAGE** — Risk treatment | Kill-switch, escalation, bounded retry, safe-write backup, permissions deny-list |
|
|
277
|
+
|
|
278
|
+
### How Each Compliance Mechanism Works
|
|
279
|
+
|
|
280
|
+
#### 1. Tamper-Evident Audit Log — `TraceVault` (REQ-206)
|
|
281
|
+
|
|
282
|
+
Every agent action, decision, milestone, and audit gate is recorded as a JSONL entry in
|
|
283
|
+
`.specsmith/trace.jsonl`. Each entry contains a SHA-256 hash of its own content plus the
|
|
284
|
+
hash of the previous entry, forming a cryptographic chain:
|
|
285
|
+
|
|
286
|
+
```jsonl
|
|
287
|
+
{"seq":1, "type":"DECISION", "description":"...", "hash":"a3f9...", "prev":"genesis"}
|
|
288
|
+
{"seq":2, "type":"MILESTONE", "description":"...", "hash":"7c2b...", "prev":"a3f9..."}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Any modification to a past entry breaks every subsequent hash. `specsmith trace verify`
|
|
292
|
+
detects and reports the first corrupted entry. The file is append-only — overwrites are
|
|
293
|
+
blocked by `safe_write`. This satisfies **EU AI Act Art. 12** (logging and record-keeping)
|
|
294
|
+
and **NIST AI RMF GOVERN** (accountability trail).
|
|
295
|
+
|
|
296
|
+
#### 2. AI Disclosure — Every Response (REQ-207)
|
|
297
|
+
|
|
298
|
+
Every preflight response includes a mandatory `ai_disclosure` block:
|
|
299
|
+
|
|
300
|
+
```json
|
|
301
|
+
{
|
|
302
|
+
"ai_disclosure": {
|
|
303
|
+
"governed_by": "specsmith",
|
|
304
|
+
"governance_gated": true,
|
|
305
|
+
"provider": "ollama",
|
|
306
|
+
"model": "qwen2.5:14b",
|
|
307
|
+
"spec_version": "0.11.0"
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
This ensures every AI-generated output is traceable to its source model and version,
|
|
313
|
+
meeting **EU AI Act Art. 13** (transparency) and **Art. 53** (GPAI transparency).
|
|
314
|
+
It is impossible to suppress — the field is injected at the governance layer before
|
|
315
|
+
any response is returned to the client.
|
|
316
|
+
|
|
317
|
+
#### 3. Human Escalation — Configurable Threshold (REQ-209)
|
|
318
|
+
|
|
319
|
+
When an action's confidence is below the escalation threshold, specsmith sets
|
|
320
|
+
`escalation_required: true` and includes an `escalation_reason` in the preflight payload.
|
|
321
|
+
Kairos surfaces this as a confirmation dialog before execution proceeds.
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
|
|
325
|
+
# → escalation_required: true, escalation_reason: "confidence 0.71 < threshold 0.85"
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE**.
|
|
329
|
+
|
|
330
|
+
#### 4. Kill-Switch — Immediate Session Termination (REQ-210)
|
|
331
|
+
|
|
332
|
+
A `kill-session` CLI command and keyboard shortcut (surfaced in Kairos) immediately
|
|
333
|
+
terminates all active agent sessions and records a timestamped kill event in `LEDGER.md`:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
specsmith kill-session # terminate all sessions, log kill event
|
|
337
|
+
specsmith kill-session --session abc123 # terminate a specific session
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
This satisfies **EU AI Act Art. 14 §4** (ability to intervene and stop the AI system)
|
|
341
|
+
and is required for certification of high-risk AI systems.
|
|
342
|
+
|
|
343
|
+
#### 5. Append-Only Safe Write — `safe_write` (REQ-213)
|
|
344
|
+
|
|
345
|
+
All governance file writes go through `safe_write`, which:
|
|
346
|
+
- **Appends** to `LEDGER.md` and `.specsmith/ledger.jsonl` — never truncates
|
|
347
|
+
- **Backs up** any file before overwriting it (timestamped `.bak` copy)
|
|
348
|
+
- **Prevents** accidental destruction of audit history
|
|
349
|
+
|
|
350
|
+
This satisfies **EU AI Act Art. 12** (records must be kept for the lifetime of the system)
|
|
351
|
+
and provides recovery capability per **NIST AI RMF MANAGE**.
|
|
352
|
+
|
|
353
|
+
#### 6. Least-Privilege Permissions (REQ-217, REQ-012)
|
|
354
|
+
|
|
355
|
+
Every agent tool call is gated through a permission profile. Tools outside the active
|
|
356
|
+
profile are denied with exit code 3 and a ledger entry:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
specsmith agent permissions-check git_push # exit 0 = allowed, exit 3 = denied
|
|
360
|
+
specsmith agent permissions # show active profile
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Four built-in presets (`read_only`, `standard`, `extended`, `admin`) plus full
|
|
364
|
+
custom allow/deny lists in `.specsmith/config.yml`. This implements **NIST AI RMF GOVERN**
|
|
365
|
+
(policy enforcement) and principle of least privilege per standard security practice.
|
|
366
|
+
|
|
367
|
+
#### 7. Policy Guardrails — `is_safe_command` (REQ-220)
|
|
368
|
+
|
|
369
|
+
Before any shell command is executed, `agent.safety.is_safe_command()` classifies it
|
|
370
|
+
against a deny list of destructive patterns (`rm -rf`, `git push origin main`,
|
|
371
|
+
`kubectl apply`, `cat .env`, etc.). Denied commands are blocked and logged.
|
|
372
|
+
This implements **NIST AI RMF MANAGE** (risk treatment at the action level).
|
|
373
|
+
|
|
374
|
+
#### 8. Compliance Export Report (REQ-208, REQ-215)
|
|
375
|
+
|
|
376
|
+
`specsmith export` generates a full compliance report containing:
|
|
377
|
+
- **AI System Inventory** — all providers, models, and versions used
|
|
378
|
+
- **Risk Classification** — AEE phase, confidence scores, open work items
|
|
379
|
+
- **Human Oversight Controls** — active permission profile, escalation settings, kill-switch state
|
|
380
|
+
- **Audit Trail Summary** — TraceVault chain length, last verification, any tampering
|
|
381
|
+
|
|
382
|
+
```bash
|
|
383
|
+
specsmith export --format markdown > compliance-report.md
|
|
384
|
+
specsmith export --format json > compliance-report.json
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
This report is suitable for submission to regulators, internal audit teams, or
|
|
388
|
+
SOC-2 / ISO-42001 reviewers.
|
|
389
|
+
|
|
390
|
+
### Compliance per Session and per Project
|
|
391
|
+
|
|
392
|
+
Compliance settings are layered:
|
|
393
|
+
|
|
394
|
+
1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
|
|
395
|
+
2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
|
|
396
|
+
3. **Per-session overrides** — Kairos Governance panel or CLI flags
|
|
397
|
+
|
|
398
|
+
The Kairos **Governance Tools Panel** (Settings → Governance) exposes all compliance
|
|
399
|
+
controls in a live UI: escalation threshold, permission profile, kill-switch, audit log
|
|
400
|
+
viewer, and context window settings. Changes take effect immediately for the active
|
|
401
|
+
session and can optionally be written back to the per-project `.specsmith/config.yml`.
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Context Window Management
|
|
406
|
+
|
|
407
|
+
specsmith enforces safe, efficient use of LLM context windows — especially critical
|
|
408
|
+
when running local models via Ollama where the context limit directly affects GPU VRAM.
|
|
409
|
+
|
|
410
|
+
### GPU-Aware Context Sizing (REQ-244)
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
specsmith ollama gpu # detect GPU VRAM (NVIDIA + AMD supported)
|
|
414
|
+
specsmith ollama available # show models within your VRAM budget
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
VRAM tiers and recommended context sizes:
|
|
418
|
+
|
|
419
|
+
| VRAM | Recommended Context |
|
|
420
|
+
|---|---|
|
|
421
|
+
| < 6 GB (CPU or low-end GPU) | 4,096 tokens |
|
|
422
|
+
| 6–11 GB | 8,192 tokens |
|
|
423
|
+
| 12–19 GB | 16,384 tokens |
|
|
424
|
+
| 20 GB+ | 32,768 tokens |
|
|
425
|
+
|
|
426
|
+
Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.specsmith/config.yml`.
|
|
427
|
+
|
|
428
|
+
### Live Context Fill Indicator (REQ-245)
|
|
429
|
+
|
|
430
|
+
The context fill tracker emits real-time JSONL events consumed by Kairos:
|
|
431
|
+
|
|
432
|
+
```jsonl
|
|
433
|
+
{"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Kairos displays a compact fill bar in the agent footer. When fill reaches the
|
|
437
|
+
compression threshold (default 80%), specsmith signals that context summarization
|
|
438
|
+
should run before the next turn.
|
|
439
|
+
|
|
440
|
+
### Auto Context Compression (REQ-246)
|
|
441
|
+
|
|
442
|
+
When fill reaches the compression threshold, specsmith automatically triggers
|
|
443
|
+
conversation summarization — the current context is condensed to a compact summary
|
|
444
|
+
that preserves key decisions and facts while freeing window space. This happens
|
|
445
|
+
transparently before the next agent turn.
|
|
446
|
+
|
|
447
|
+
Configure in `.specsmith/config.yml`:
|
|
448
|
+
|
|
449
|
+
```yaml
|
|
450
|
+
context:
|
|
451
|
+
compression_threshold_pct: 80 # trigger summarization at 80% fill
|
|
452
|
+
auto_compress: true # enable automatic compression
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Hard Context Ceiling — Never 100% Full (REQ-247)
|
|
456
|
+
|
|
457
|
+
A hard reservation of **15% of the context window** (minimum 2,048 tokens) is always
|
|
458
|
+
held back for the governance layer. Attempts to fill beyond the effective ceiling raise
|
|
459
|
+
`ContextFullError` — making it impossible to reach a state where even a compression
|
|
460
|
+
request cannot be processed. This is a safety invariant, not a configuration option.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
244
464
|
## Kairos + Governance REST API
|
|
245
465
|
|
|
246
466
|
**Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
[](https://pypi.org/project/specsmith/)
|
|
7
7
|
[](https://www.python.org/downloads/)
|
|
8
8
|
[](LICENSE)
|
|
9
|
+
|
|
9
10
|
**Applied Epistemic Engineering toolkit for AI-assisted development.**
|
|
10
11
|
|
|
11
12
|
> Intelligence proposes. Constraints decide. The ledger remembers.
|
|
@@ -14,17 +15,19 @@ specsmith treats belief systems like code: codable, testable, and deployable. It
|
|
|
14
15
|
epistemically-governed projects, stress-tests requirements as BeliefArtifacts, runs
|
|
15
16
|
cryptographically-sealed trace vaults, and orchestrates AI agents under formal AEE governance.
|
|
16
17
|
|
|
17
|
-
**0.
|
|
18
|
-
Specsmith now
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
**0.11.0 — EU AI Act / NIST AI RMF compliance, context window management, and governance tools panel.**
|
|
19
|
+
Specsmith now ships a full compliance and auditability layer aligned to the EU AI Act (2024/1689)
|
|
20
|
+
and the NIST AI Risk Management Framework 1.0. Every agent action is cryptographically sealed,
|
|
21
|
+
every AI-generated output is disclosed, context windows are GPU-aware and protected against
|
|
22
|
+
overflow, and a dedicated governance tools panel in Kairos surfaces compliance settings
|
|
23
|
+
per-session and per-project.
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
26
|
specsmith governance-serve --port 7700 # Kairos governance REST API
|
|
26
27
|
specsmith sync # sync .specsmith/ from docs/ markdown
|
|
27
|
-
specsmith agent permissions-check git_push # check tool permission (
|
|
28
|
+
specsmith agent permissions-check git_push # check tool permission (REQ-012)
|
|
29
|
+
specsmith ollama gpu # detect GPU VRAM, recommend context size
|
|
30
|
+
specsmith export # generate full compliance report
|
|
28
31
|
```
|
|
29
32
|
|
|
30
33
|
It also co-installs the standalone `epistemic` Python library for direct use in any project:
|
|
@@ -169,6 +172,223 @@ agent:
|
|
|
169
172
|
|
|
170
173
|
---
|
|
171
174
|
|
|
175
|
+
## AI Compliance & Governance
|
|
176
|
+
|
|
177
|
+
specsmith is designed from the ground up for **auditable, explainable, and human-overseen AI**.
|
|
178
|
+
It implements concrete compliance mechanisms mapped to the two major regulatory frameworks
|
|
179
|
+
that govern AI systems in production today.
|
|
180
|
+
|
|
181
|
+
### Standards Coverage
|
|
182
|
+
|
|
183
|
+
**EU AI Act (Regulation 2024/1689)** — The world's first comprehensive legal framework for AI,
|
|
184
|
+
enforced across the European Union. High-risk AI systems must provide transparency, auditability,
|
|
185
|
+
human oversight, and robustness. specsmith implements:
|
|
186
|
+
|
|
187
|
+
| EU AI Act Requirement | specsmith Mechanism |
|
|
188
|
+
|---|---|
|
|
189
|
+
| Art. 9 — Risk Management System | AEE verification loop with confidence scoring and equilibrium checks |
|
|
190
|
+
| Art. 12 — Logging & Record-Keeping | `TraceVault` SHA-256 chained ledger (tamper-evident, append-only) |
|
|
191
|
+
| Art. 13 — Transparency & Explainability | `ai_disclosure` block in every preflight response; `/why` in Nexus REPL |
|
|
192
|
+
| Art. 14 — Human Oversight | Human escalation threshold (`--escalate-threshold`); kill-switch CLI |
|
|
193
|
+
| Art. 15 — Accuracy & Robustness | Bounded retry (max 3×), confidence gates, hard context ceiling (REQ-247) |
|
|
194
|
+
| Art. 53 — GPAI Model Transparency | Provider + model name emitted in every `ai_disclosure` block |
|
|
195
|
+
|
|
196
|
+
**NIST AI Risk Management Framework 1.0 (AI RMF)** — The US standard for managing AI risk
|
|
197
|
+
across the AI lifecycle. specsmith addresses all four core functions:
|
|
198
|
+
|
|
199
|
+
| NIST AI RMF Function | specsmith Mechanism |
|
|
200
|
+
|---|---|
|
|
201
|
+
| **GOVERN** — Policies & accountability | Governance rules (H1–H13), permissions profile, `scaffold.yml` policy |
|
|
202
|
+
| **MAP** — Risk identification | AEE stress-test, belief graph, contradictions and uncertainty metrics |
|
|
203
|
+
| **MEASURE** — Risk analysis | Confidence scoring, epistemic equilibrium, `specsmith epistemic-audit` |
|
|
204
|
+
| **MANAGE** — Risk treatment | Kill-switch, escalation, bounded retry, safe-write backup, permissions deny-list |
|
|
205
|
+
|
|
206
|
+
### How Each Compliance Mechanism Works
|
|
207
|
+
|
|
208
|
+
#### 1. Tamper-Evident Audit Log — `TraceVault` (REQ-206)
|
|
209
|
+
|
|
210
|
+
Every agent action, decision, milestone, and audit gate is recorded as a JSONL entry in
|
|
211
|
+
`.specsmith/trace.jsonl`. Each entry contains a SHA-256 hash of its own content plus the
|
|
212
|
+
hash of the previous entry, forming a cryptographic chain:
|
|
213
|
+
|
|
214
|
+
```jsonl
|
|
215
|
+
{"seq":1, "type":"DECISION", "description":"...", "hash":"a3f9...", "prev":"genesis"}
|
|
216
|
+
{"seq":2, "type":"MILESTONE", "description":"...", "hash":"7c2b...", "prev":"a3f9..."}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Any modification to a past entry breaks every subsequent hash. `specsmith trace verify`
|
|
220
|
+
detects and reports the first corrupted entry. The file is append-only — overwrites are
|
|
221
|
+
blocked by `safe_write`. This satisfies **EU AI Act Art. 12** (logging and record-keeping)
|
|
222
|
+
and **NIST AI RMF GOVERN** (accountability trail).
|
|
223
|
+
|
|
224
|
+
#### 2. AI Disclosure — Every Response (REQ-207)
|
|
225
|
+
|
|
226
|
+
Every preflight response includes a mandatory `ai_disclosure` block:
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"ai_disclosure": {
|
|
231
|
+
"governed_by": "specsmith",
|
|
232
|
+
"governance_gated": true,
|
|
233
|
+
"provider": "ollama",
|
|
234
|
+
"model": "qwen2.5:14b",
|
|
235
|
+
"spec_version": "0.11.0"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
This ensures every AI-generated output is traceable to its source model and version,
|
|
241
|
+
meeting **EU AI Act Art. 13** (transparency) and **Art. 53** (GPAI transparency).
|
|
242
|
+
It is impossible to suppress — the field is injected at the governance layer before
|
|
243
|
+
any response is returned to the client.
|
|
244
|
+
|
|
245
|
+
#### 3. Human Escalation — Configurable Threshold (REQ-209)
|
|
246
|
+
|
|
247
|
+
When an action's confidence is below the escalation threshold, specsmith sets
|
|
248
|
+
`escalation_required: true` and includes an `escalation_reason` in the preflight payload.
|
|
249
|
+
Kairos surfaces this as a confirmation dialog before execution proceeds.
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
specsmith preflight "deploy to production" --escalate-threshold 0.85 --json
|
|
253
|
+
# → escalation_required: true, escalation_reason: "confidence 0.71 < threshold 0.85"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
This implements **EU AI Act Art. 14** (human oversight) and **NIST AI RMF MANAGE**.
|
|
257
|
+
|
|
258
|
+
#### 4. Kill-Switch — Immediate Session Termination (REQ-210)
|
|
259
|
+
|
|
260
|
+
A `kill-session` CLI command and keyboard shortcut (surfaced in Kairos) immediately
|
|
261
|
+
terminates all active agent sessions and records a timestamped kill event in `LEDGER.md`:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
specsmith kill-session # terminate all sessions, log kill event
|
|
265
|
+
specsmith kill-session --session abc123 # terminate a specific session
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
This satisfies **EU AI Act Art. 14 §4** (ability to intervene and stop the AI system)
|
|
269
|
+
and is required for certification of high-risk AI systems.
|
|
270
|
+
|
|
271
|
+
#### 5. Append-Only Safe Write — `safe_write` (REQ-213)
|
|
272
|
+
|
|
273
|
+
All governance file writes go through `safe_write`, which:
|
|
274
|
+
- **Appends** to `LEDGER.md` and `.specsmith/ledger.jsonl` — never truncates
|
|
275
|
+
- **Backs up** any file before overwriting it (timestamped `.bak` copy)
|
|
276
|
+
- **Prevents** accidental destruction of audit history
|
|
277
|
+
|
|
278
|
+
This satisfies **EU AI Act Art. 12** (records must be kept for the lifetime of the system)
|
|
279
|
+
and provides recovery capability per **NIST AI RMF MANAGE**.
|
|
280
|
+
|
|
281
|
+
#### 6. Least-Privilege Permissions (REQ-217, REQ-012)
|
|
282
|
+
|
|
283
|
+
Every agent tool call is gated through a permission profile. Tools outside the active
|
|
284
|
+
profile are denied with exit code 3 and a ledger entry:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
specsmith agent permissions-check git_push # exit 0 = allowed, exit 3 = denied
|
|
288
|
+
specsmith agent permissions # show active profile
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Four built-in presets (`read_only`, `standard`, `extended`, `admin`) plus full
|
|
292
|
+
custom allow/deny lists in `.specsmith/config.yml`. This implements **NIST AI RMF GOVERN**
|
|
293
|
+
(policy enforcement) and principle of least privilege per standard security practice.
|
|
294
|
+
|
|
295
|
+
#### 7. Policy Guardrails — `is_safe_command` (REQ-220)
|
|
296
|
+
|
|
297
|
+
Before any shell command is executed, `agent.safety.is_safe_command()` classifies it
|
|
298
|
+
against a deny list of destructive patterns (`rm -rf`, `git push origin main`,
|
|
299
|
+
`kubectl apply`, `cat .env`, etc.). Denied commands are blocked and logged.
|
|
300
|
+
This implements **NIST AI RMF MANAGE** (risk treatment at the action level).
|
|
301
|
+
|
|
302
|
+
#### 8. Compliance Export Report (REQ-208, REQ-215)
|
|
303
|
+
|
|
304
|
+
`specsmith export` generates a full compliance report containing:
|
|
305
|
+
- **AI System Inventory** — all providers, models, and versions used
|
|
306
|
+
- **Risk Classification** — AEE phase, confidence scores, open work items
|
|
307
|
+
- **Human Oversight Controls** — active permission profile, escalation settings, kill-switch state
|
|
308
|
+
- **Audit Trail Summary** — TraceVault chain length, last verification, any tampering
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
specsmith export --format markdown > compliance-report.md
|
|
312
|
+
specsmith export --format json > compliance-report.json
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
This report is suitable for submission to regulators, internal audit teams, or
|
|
316
|
+
SOC-2 / ISO-42001 reviewers.
|
|
317
|
+
|
|
318
|
+
### Compliance per Session and per Project
|
|
319
|
+
|
|
320
|
+
Compliance settings are layered:
|
|
321
|
+
|
|
322
|
+
1. **Global defaults** — `~/.specsmith/config.yml` (user-level defaults)
|
|
323
|
+
2. **Per-project policy** — `.specsmith/config.yml` (committed to the repo)
|
|
324
|
+
3. **Per-session overrides** — Kairos Governance panel or CLI flags
|
|
325
|
+
|
|
326
|
+
The Kairos **Governance Tools Panel** (Settings → Governance) exposes all compliance
|
|
327
|
+
controls in a live UI: escalation threshold, permission profile, kill-switch, audit log
|
|
328
|
+
viewer, and context window settings. Changes take effect immediately for the active
|
|
329
|
+
session and can optionally be written back to the per-project `.specsmith/config.yml`.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Context Window Management
|
|
334
|
+
|
|
335
|
+
specsmith enforces safe, efficient use of LLM context windows — especially critical
|
|
336
|
+
when running local models via Ollama where the context limit directly affects GPU VRAM.
|
|
337
|
+
|
|
338
|
+
### GPU-Aware Context Sizing (REQ-244)
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
specsmith ollama gpu # detect GPU VRAM (NVIDIA + AMD supported)
|
|
342
|
+
specsmith ollama available # show models within your VRAM budget
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
VRAM tiers and recommended context sizes:
|
|
346
|
+
|
|
347
|
+
| VRAM | Recommended Context |
|
|
348
|
+
|---|---|
|
|
349
|
+
| < 6 GB (CPU or low-end GPU) | 4,096 tokens |
|
|
350
|
+
| 6–11 GB | 8,192 tokens |
|
|
351
|
+
| 12–19 GB | 16,384 tokens |
|
|
352
|
+
| 20 GB+ | 32,768 tokens |
|
|
353
|
+
|
|
354
|
+
Override via `SPECSMITH_OLLAMA_CONTEXT_LENGTH` or `ollama.context_length` in `.specsmith/config.yml`.
|
|
355
|
+
|
|
356
|
+
### Live Context Fill Indicator (REQ-245)
|
|
357
|
+
|
|
358
|
+
The context fill tracker emits real-time JSONL events consumed by Kairos:
|
|
359
|
+
|
|
360
|
+
```jsonl
|
|
361
|
+
{"type": "context_fill", "used": 27500, "limit": 32768, "pct": 83.9}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Kairos displays a compact fill bar in the agent footer. When fill reaches the
|
|
365
|
+
compression threshold (default 80%), specsmith signals that context summarization
|
|
366
|
+
should run before the next turn.
|
|
367
|
+
|
|
368
|
+
### Auto Context Compression (REQ-246)
|
|
369
|
+
|
|
370
|
+
When fill reaches the compression threshold, specsmith automatically triggers
|
|
371
|
+
conversation summarization — the current context is condensed to a compact summary
|
|
372
|
+
that preserves key decisions and facts while freeing window space. This happens
|
|
373
|
+
transparently before the next agent turn.
|
|
374
|
+
|
|
375
|
+
Configure in `.specsmith/config.yml`:
|
|
376
|
+
|
|
377
|
+
```yaml
|
|
378
|
+
context:
|
|
379
|
+
compression_threshold_pct: 80 # trigger summarization at 80% fill
|
|
380
|
+
auto_compress: true # enable automatic compression
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Hard Context Ceiling — Never 100% Full (REQ-247)
|
|
384
|
+
|
|
385
|
+
A hard reservation of **15% of the context window** (minimum 2,048 tokens) is always
|
|
386
|
+
held back for the governance layer. Attempts to fill beyond the effective ceiling raise
|
|
387
|
+
`ContextFullError` — making it impossible to reach a state where even a compression
|
|
388
|
+
request cannot be processed. This is a safety invariant, not a configuration option.
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
172
392
|
## Kairos + Governance REST API
|
|
173
393
|
|
|
174
394
|
**Kairos** is the companion Rust terminal runtime (`BitConcepts/kairos`). specsmith
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specsmith"
|
|
7
|
-
version = "0.10.1.
|
|
7
|
+
version = "0.10.1.dev282"
|
|
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"
|
|
@@ -7917,7 +7917,7 @@ def rules_list_cmd(project_dir: str, as_json: bool) -> None:
|
|
|
7917
7917
|
project / ".specsmith" / "rules",
|
|
7918
7918
|
project / "docs" / "governance",
|
|
7919
7919
|
]
|
|
7920
|
-
workspace_dirs = [project / ".warp" / "rules"]
|
|
7920
|
+
workspace_dirs = [project / ".kairos" / "rules", project / ".warp" / "rules"]
|
|
7921
7921
|
personal_dirs = [home / "rules"]
|
|
7922
7922
|
for d in project_dirs:
|
|
7923
7923
|
if d.is_dir():
|