invar-tools 1.14.0__tar.gz → 1.15.0__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.
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/context.md +6 -4
- invar_tools-1.15.0/.serena/cache/python/document_symbols.pkl +0 -0
- invar_tools-1.15.0/.serena/cache/python/raw_document_symbols.pkl +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/CHANGELOG.md +96 -1
- {invar_tools-1.14.0 → invar_tools-1.15.0}/CLAUDE.md +61 -13
- {invar_tools-1.14.0 → invar_tools-1.15.0}/PKG-INFO +6 -3
- {invar_tools-1.14.0 → invar_tools-1.15.0}/README.md +5 -2
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/multi-agent.md +58 -2
- invar_tools-1.15.0/docs/proposals/DX-81-multi-agent-init.md +836 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/pyproject.toml +1 -1
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/init.py +71 -41
- invar_tools-1.15.0/src/invar/shell/pi_tools.py +120 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +31 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/pi/invar.ts.jinja +35 -1
- invar_tools-1.15.0/src/invar/templates/pi-tools/invar/index.ts +207 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/CONFIG.md +154 -29
- invar_tools-1.15.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/document_symbols.pkl +0 -0
- invar_tools-1.15.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/raw_document_symbols.pkl +0 -0
- invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/acorn +17 -0
- invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/eslint +17 -0
- invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.0/typescript/packages/eslint-plugin/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.0/typescript/packages/fc-runner/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.0/typescript/packages/fc-runner/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/acorn +17 -0
- invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/eslint +17 -0
- invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.0/typescript/packages/quick-check/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.0/typescript/packages/ts-analyzer/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.0/typescript/packages/ts-analyzer/node_modules/.bin/tsserver +17 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.aider.conf.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/commands/audit.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/commands/guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.Stop.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/acceptance/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/develop/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/CONFIG.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/investigate/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/review/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/_common.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/python.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.cursorrules +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.github/workflows/ci.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/functional.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/feedback/feedback-2026-01-03.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/project-additions.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.mcp.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.pre-commit-config.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.serena/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/.serena/project.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/INVAR.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/LICENSE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/LICENSE-GPL +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/NOTICE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/.nojekyll +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/agents.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/design.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/diagrams.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guide.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/aider.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/cline.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/continue.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/cursor.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/guides/pi.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/original-vision.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/index.html +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/logo.svg +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-74-experiment-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-78-mcp-protocol-sync.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-79-invar-usage-feedback.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/DX-80-guard-cli-mcp-alignment.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-07-extension-skills.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/proposals/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/documentation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/docs/vision.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/LICENSE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/pyproject.toml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/scripts/embed_node_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/core/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/doc_edit.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/doc_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/feedback.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/language.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/models.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/purity.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/references.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/rules.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/template_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/ts_parsers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/ts_sig_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/handlers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/mcp/server.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/MANIFEST +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/quick-check/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/node_tools/ts-query.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/py.typed +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/claude_hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/doc.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/feedback.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/guard.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/perception.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/skill.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/uninstall.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/config.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/contract_coverage.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/doc_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/fs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/git.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/pi_hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/crosshair.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/guard_ts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/py_refs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/skill_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/templates.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/shell/ts_compiler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/tool-selection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/commands/audit.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/commands/guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/core_shell.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/functional.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/python/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/patterns.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/markers.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/tools.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/completion.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/header.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/session.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/src/shell/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_cli_flags.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx55_regression.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx56_sync.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_dx78_ts_compiler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_detection.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_integration.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx05_templates.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx06_typescript.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_lx07_skills.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/integration/test_mcp_doc_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/tests/test_subprocess_env.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/quick-check/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/pnpm-workspace.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/scripts/bundle.mjs +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/tsconfig.base.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/typescript/vitest.config.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.0}/uv.lock +0 -0
|
@@ -51,17 +51,17 @@
|
|
|
51
51
|
|
|
52
52
|
## Current State
|
|
53
53
|
|
|
54
|
-
- **PyPI:** `invar-tools` v1.
|
|
54
|
+
- **PyPI:** `invar-tools` v1.14.0 + `invar-runtime` v1.3.0
|
|
55
55
|
- **Protocol:** v5.0 (USBV workflow, DX-58 critical section)
|
|
56
|
-
- **Status:** Feature complete,
|
|
57
|
-
- **Recent:** DX-
|
|
56
|
+
- **Status:** Feature complete, multi-agent support added (DX-81)
|
|
57
|
+
- **Recent:** DX-81 (Multi-agent init support), DX-79 (Feedback collection), DX-78 (TypeScript Compiler API)
|
|
58
58
|
- **Blockers:** None
|
|
59
59
|
|
|
60
60
|
## Active Work
|
|
61
61
|
|
|
62
62
|
See [docs/proposals/](../docs/proposals/) for planned changes.
|
|
63
63
|
|
|
64
|
-
**Current focus:**
|
|
64
|
+
**Current focus:** DX-81 (Multi-agent init) completed, ready for v1.15.0 release
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
@@ -185,6 +185,8 @@ gh release create vX.Y.Z --title "vX.Y.Z - Title" --notes "..."
|
|
|
185
185
|
|
|
186
186
|
| Version | Date | Highlights |
|
|
187
187
|
|---------|------|------------|
|
|
188
|
+
| 1.15.0 | 2026-01 | Multi-agent init support (DX-81), checkbox selection UI |
|
|
189
|
+
| 1.14.0 | 2026-01 | Invar usage feedback collection (DX-79), anonymization tools |
|
|
188
190
|
| 1.12.0 | 2026-01 | TypeScript Compiler API integration (DX-78), multi-language refs |
|
|
189
191
|
| 1.9.0 | 2026-01 | Extension Skills (LX-07), TypeScript support (LX-05/06) |
|
|
190
192
|
| 1.8.0 | 2025-12 | Claude hooks improvements, interactive init (DX-70) |
|
|
Binary file
|
|
Binary file
|
|
@@ -7,6 +7,99 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.15.0] - 2026-01-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **DX-81: Multi-Agent Init Support** - Complete implementation
|
|
14
|
+
- Remove mutual exclusivity between `--claude` and `--pi` flags
|
|
15
|
+
- Support combined flags: `invar init --claude --pi`
|
|
16
|
+
- Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
|
|
17
|
+
- **Interactive mode enhancement**:
|
|
18
|
+
- Changed from single-select to checkbox multi-select
|
|
19
|
+
- Allow selecting multiple agents with Space key
|
|
20
|
+
- Claude Code pre-checked as default
|
|
21
|
+
- **Backward compatibility maintained**:
|
|
22
|
+
- `invar init --claude` works as before (Claude only)
|
|
23
|
+
- `invar init --pi` works as before (Pi only)
|
|
24
|
+
- Sequential init (`--claude` then `--pi`) still works
|
|
25
|
+
- **Use cases enabled**:
|
|
26
|
+
- Team collaboration (different members use different agents)
|
|
27
|
+
- Agent switching (both configured, use either)
|
|
28
|
+
- Open source projects (contributors have agent choice)
|
|
29
|
+
- **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
|
|
30
|
+
- Automatic feedback reminder at configurable message threshold (default: 30)
|
|
31
|
+
- **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
|
|
32
|
+
- **Pi implementation**: TypeScript hook with fs config reading
|
|
33
|
+
- **Shared configuration**: Both read `.claude/settings.local.json` feedback section
|
|
34
|
+
- **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
|
|
35
|
+
- Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
|
|
36
|
+
- **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
|
|
37
|
+
- `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
|
|
38
|
+
- `invar_sig`: Show function signatures and contracts
|
|
39
|
+
- `invar_map`: Symbol map with reference counts
|
|
40
|
+
- Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
|
|
41
|
+
- Pi auto-discovers tools, no configuration needed
|
|
42
|
+
- Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- Agent selection prompt now uses checkbox instead of radio buttons
|
|
46
|
+
- Header shows "Claude Code + Pi" when both flags used
|
|
47
|
+
- File selection logic builds from all selected agents' categories
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
- **Security hardening in Pi templates** (3-round adversarial review)
|
|
51
|
+
- Path injection defense with comprehensive shell metacharacter blocking
|
|
52
|
+
- TOCTOU race condition eliminated in config reading
|
|
53
|
+
- Runtime type validation for external inputs
|
|
54
|
+
- ES module consistency (no CommonJS mixing)
|
|
55
|
+
|
|
56
|
+
### Documentation
|
|
57
|
+
- Updated README.md with multi-agent examples
|
|
58
|
+
- Added Multi-Agent Support section to CLAUDE.md
|
|
59
|
+
- Updated context.md to reflect DX-81 completion
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- **DX-81: Multi-Agent Init Support** - Complete implementation
|
|
63
|
+
- Remove mutual exclusivity between `--claude` and `--pi` flags
|
|
64
|
+
- Support combined flags: `invar init --claude --pi`
|
|
65
|
+
- Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
|
|
66
|
+
- **Interactive mode enhancement**:
|
|
67
|
+
- Changed from single-select to checkbox multi-select
|
|
68
|
+
- Allow selecting multiple agents with Space key
|
|
69
|
+
- Claude Code pre-checked as default
|
|
70
|
+
- **Backward compatibility maintained**:
|
|
71
|
+
- `invar init --claude` works as before (Claude only)
|
|
72
|
+
- `invar init --pi` works as before (Pi only)
|
|
73
|
+
- Sequential init (`--claude` then `--pi`) still works
|
|
74
|
+
- **Use cases enabled**:
|
|
75
|
+
- Team collaboration (different members use different agents)
|
|
76
|
+
- Agent switching (both configured, use either)
|
|
77
|
+
- Open source projects (contributors have agent choice)
|
|
78
|
+
- **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
|
|
79
|
+
- Automatic feedback reminder at configurable message threshold (default: 30)
|
|
80
|
+
- **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
|
|
81
|
+
- **Pi implementation**: TypeScript hook with fs config reading
|
|
82
|
+
- **Shared configuration**: Both read `.claude/settings.local.json` feedback section
|
|
83
|
+
- **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
|
|
84
|
+
- Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
|
|
85
|
+
- **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
|
|
86
|
+
- `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
|
|
87
|
+
- `invar_sig`: Show function signatures and contracts
|
|
88
|
+
- `invar_map`: Symbol map with reference counts
|
|
89
|
+
- Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
|
|
90
|
+
- Pi auto-discovers tools, no configuration needed
|
|
91
|
+
- Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
- Agent selection prompt now uses checkbox instead of radio buttons
|
|
95
|
+
- Header shows "Claude Code + Pi" when both flags used
|
|
96
|
+
- File selection logic builds from all selected agents' categories
|
|
97
|
+
|
|
98
|
+
### Documentation
|
|
99
|
+
- Updated README.md with multi-agent examples
|
|
100
|
+
- Added Multi-Agent Support section to CLAUDE.md
|
|
101
|
+
- Updated context.md to reflect DX-81 completion
|
|
102
|
+
|
|
10
103
|
## [1.14.0] - 2026-01-03
|
|
11
104
|
|
|
12
105
|
### Added
|
|
@@ -204,7 +297,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
204
297
|
|
|
205
298
|
---
|
|
206
299
|
|
|
207
|
-
[Unreleased]: https://github.com/yourusername/invar/compare/v1.
|
|
300
|
+
[Unreleased]: https://github.com/yourusername/invar/compare/v1.15.0...HEAD
|
|
301
|
+
[1.15.0]: https://github.com/yourusername/invar/compare/v1.14.0...v1.15.0
|
|
302
|
+
[1.14.0]: https://github.com/yourusername/invar/compare/v1.13.0...v1.14.0
|
|
208
303
|
[1.13.0]: https://github.com/yourusername/invar/compare/v1.12.0...v1.13.0
|
|
209
304
|
[1.12.0]: https://github.com/yourusername/invar/compare/v1.11.0...v1.12.0
|
|
210
305
|
[1.11.0]: https://github.com/yourusername/invar/compare/v1.10.0...v1.11.0
|
|
@@ -102,51 +102,71 @@ src/{project}/
|
|
|
102
102
|
|
|
103
103
|
### Calling Methods (Priority Order)
|
|
104
104
|
|
|
105
|
-
Invar tools can be called in 3 ways. **Try in order:**
|
|
106
105
|
|
|
107
|
-
|
|
108
|
-
- Direct function calls: `invar_guard()`, `invar_sig()`, etc.
|
|
109
|
-
- No Bash wrapper needed
|
|
106
|
+
Invar tools can be called in different ways depending on your agent:
|
|
110
107
|
|
|
111
|
-
|
|
108
|
+
**Claude Code (MCP enabled):**
|
|
109
|
+
1. **MCP tools** - Direct function calls: `invar_guard()`, `invar_sig()`, etc.
|
|
110
|
+
2. **CLI command** - Via Bash: `invar guard`, `invar sig`, etc.
|
|
111
|
+
|
|
112
|
+
**Pi Coding Agent:**
|
|
113
|
+
1. **Custom tools** (auto-installed via `invar init --pi`)
|
|
114
|
+
- Direct tool calls: `invar_guard(changed=true)`, `invar_sig(target="file.py")`, `invar_map(top=10)`
|
|
115
|
+
- Installed in `.pi/tools/invar/index.ts`
|
|
116
|
+
- Pi auto-discovers tools, no configuration needed
|
|
117
|
+
2. **CLI command** (fallback)
|
|
112
118
|
- Via Bash: `invar guard`, `invar sig`, etc.
|
|
113
|
-
- Install: `pip install invar-tools`
|
|
114
119
|
|
|
115
|
-
|
|
116
|
-
|
|
120
|
+
**Other agents:**
|
|
121
|
+
- **CLI command** - Via Bash: `invar guard`, `invar sig`, etc.
|
|
122
|
+
- **uvx fallback** - No install needed: `uvx invar-tools guard`
|
|
117
123
|
|
|
118
124
|
---
|
|
119
125
|
|
|
120
126
|
### Parameter Reference
|
|
121
127
|
|
|
128
|
+
|
|
122
129
|
**guard** - Verify code quality
|
|
123
130
|
```python
|
|
124
|
-
# MCP
|
|
131
|
+
# MCP (Claude Code)
|
|
125
132
|
invar_guard() # Check changed files (default)
|
|
126
133
|
invar_guard(changed=False) # Check all files
|
|
134
|
+
|
|
135
|
+
# Pi Custom Tool
|
|
136
|
+
invar_guard(changed=true) # Check changed files (default)
|
|
137
|
+
invar_guard(changed=false) # Check all files
|
|
138
|
+
invar_guard(coverage=true) # Collect branch coverage
|
|
127
139
|
```
|
|
128
140
|
|
|
129
141
|
**sig** - Show function signatures and contracts
|
|
130
142
|
```python
|
|
131
|
-
# MCP
|
|
143
|
+
# MCP (Claude Code)
|
|
144
|
+
invar_sig(target="src/foo.py")
|
|
145
|
+
|
|
146
|
+
# Pi Custom Tool
|
|
132
147
|
invar_sig(target="src/foo.py")
|
|
148
|
+
invar_sig(target="src/foo.py::MyClass")
|
|
133
149
|
```
|
|
134
150
|
|
|
135
151
|
**map** - Find entry points
|
|
136
152
|
```python
|
|
137
|
-
# MCP
|
|
153
|
+
# MCP (Claude Code)
|
|
138
154
|
invar_map(path=".", top=10)
|
|
155
|
+
|
|
156
|
+
# Pi Custom Tool
|
|
157
|
+
invar_map(path=".", top=10)
|
|
158
|
+
invar_map(top=20) # Show top 20 symbols
|
|
139
159
|
```
|
|
140
160
|
|
|
141
161
|
**refs** - Find all references to a symbol
|
|
142
162
|
```python
|
|
143
|
-
# MCP
|
|
163
|
+
# MCP (Claude Code only - not available as Pi tool yet)
|
|
144
164
|
invar_refs(target="src/foo.py::MyClass")
|
|
145
165
|
```
|
|
146
166
|
|
|
147
167
|
**doc*** - Document tools
|
|
148
168
|
```python
|
|
149
|
-
# MCP
|
|
169
|
+
# MCP (Claude Code only - not available as Pi tool yet)
|
|
150
170
|
invar_doc_toc(file="docs/spec.md")
|
|
151
171
|
invar_doc_read(file="docs/spec.md", section="intro")
|
|
152
172
|
```
|
|
@@ -363,6 +383,34 @@ pip install -e runtime/ # Runtime in dev mode
|
|
|
363
383
|
|
|
364
384
|
Run `ruff check --fix` frequently after changing code to fix lint issues before commit.
|
|
365
385
|
|
|
386
|
+
## Multi-Agent Support (DX-81)
|
|
387
|
+
|
|
388
|
+
**Status:** ✅ Implemented (v1.15.0)
|
|
389
|
+
|
|
390
|
+
Invar now supports initializing projects for multiple agents simultaneously:
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# Single agent (backward compatible)
|
|
394
|
+
invar init --claude
|
|
395
|
+
invar init --pi
|
|
396
|
+
|
|
397
|
+
# Multiple agents (DX-81)
|
|
398
|
+
invar init --claude --pi
|
|
399
|
+
|
|
400
|
+
# Interactive mode with checkbox selection
|
|
401
|
+
invar init # Select multiple agents with Space key
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**File Structure:**
|
|
405
|
+
- Shared: CLAUDE.md, .claude/skills/, .invar/
|
|
406
|
+
- Isolated: .claude/hooks/ (Claude Code), .pi/hooks/ (Pi)
|
|
407
|
+
- No conflicts: All files designed for coexistence
|
|
408
|
+
|
|
409
|
+
**Use Cases:**
|
|
410
|
+
- Team collaboration (different members use different agents)
|
|
411
|
+
- Agent switching (have both configured, use either)
|
|
412
|
+
- Open source projects (contributors have agent choice)
|
|
413
|
+
|
|
366
414
|
## Session Restore
|
|
367
415
|
|
|
368
416
|
When continuing from a previous session summary:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.0
|
|
4
4
|
Summary: AI-native software engineering tools with design-by-contract verification
|
|
5
5
|
Project-URL: Homepage, https://github.com/tefx/invar
|
|
6
6
|
Project-URL: Documentation, https://github.com/tefx/invar#readme
|
|
@@ -190,8 +190,9 @@ cd your-project
|
|
|
190
190
|
uvx invar-tools init
|
|
191
191
|
|
|
192
192
|
# Or quick setup (skip prompts)
|
|
193
|
-
uvx invar-tools init --claude # Claude Code
|
|
194
|
-
uvx invar-tools init --pi # Pi
|
|
193
|
+
uvx invar-tools init --claude # Claude Code only
|
|
194
|
+
uvx invar-tools init --pi # Pi only
|
|
195
|
+
uvx invar-tools init --claude --pi # Both agents (DX-81)
|
|
195
196
|
uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
|
|
196
197
|
|
|
197
198
|
# Add runtime contracts to your project
|
|
@@ -492,6 +493,7 @@ AlphaCodium · Parsel · Reflexion · Clover
|
|
|
492
493
|
|-------|--------|-------|
|
|
493
494
|
| **Claude Code** | ✅ Full | `invar init --claude` |
|
|
494
495
|
| **[Pi](https://shittycodingagent.ai/)** | ✅ Full | `invar init --pi` |
|
|
496
|
+
| **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
|
|
495
497
|
| **Cursor** | ✅ MCP | `invar init` → select Other, add MCP config |
|
|
496
498
|
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
497
499
|
|
|
@@ -821,6 +823,7 @@ rules = ["missing_contract", "shell_result"]
|
|
|
821
823
|
| `invar init` | Initialize or update project (interactive) |
|
|
822
824
|
| `invar init --claude` | Quick setup for Claude Code |
|
|
823
825
|
| `invar init --pi` | Quick setup for Pi agent |
|
|
826
|
+
| `invar init --claude --pi` | Setup for both agents (DX-81) |
|
|
824
827
|
| `invar init --mcp-only` | MCP tools only (no framework files) |
|
|
825
828
|
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
826
829
|
| `invar sig <file>` | Show signatures and contracts |
|
|
@@ -146,8 +146,9 @@ cd your-project
|
|
|
146
146
|
uvx invar-tools init
|
|
147
147
|
|
|
148
148
|
# Or quick setup (skip prompts)
|
|
149
|
-
uvx invar-tools init --claude # Claude Code
|
|
150
|
-
uvx invar-tools init --pi # Pi
|
|
149
|
+
uvx invar-tools init --claude # Claude Code only
|
|
150
|
+
uvx invar-tools init --pi # Pi only
|
|
151
|
+
uvx invar-tools init --claude --pi # Both agents (DX-81)
|
|
151
152
|
uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
|
|
152
153
|
|
|
153
154
|
# Add runtime contracts to your project
|
|
@@ -448,6 +449,7 @@ AlphaCodium · Parsel · Reflexion · Clover
|
|
|
448
449
|
|-------|--------|-------|
|
|
449
450
|
| **Claude Code** | ✅ Full | `invar init --claude` |
|
|
450
451
|
| **[Pi](https://shittycodingagent.ai/)** | ✅ Full | `invar init --pi` |
|
|
452
|
+
| **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
|
|
451
453
|
| **Cursor** | ✅ MCP | `invar init` → select Other, add MCP config |
|
|
452
454
|
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
453
455
|
|
|
@@ -777,6 +779,7 @@ rules = ["missing_contract", "shell_result"]
|
|
|
777
779
|
| `invar init` | Initialize or update project (interactive) |
|
|
778
780
|
| `invar init --claude` | Quick setup for Claude Code |
|
|
779
781
|
| `invar init --pi` | Quick setup for Pi agent |
|
|
782
|
+
| `invar init --claude --pi` | Setup for both agents (DX-81) |
|
|
780
783
|
| `invar init --mcp-only` | MCP tools only (no framework files) |
|
|
781
784
|
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
782
785
|
| `invar sig <file>` | Show signatures and contracts |
|
|
@@ -8,6 +8,7 @@ Invar's core value—USBV workflow, contract-driven development, and automated v
|
|
|
8
8
|
|-------|--------|-------|
|
|
9
9
|
| **Claude Code** | ✅ Full | `invar init --claude` |
|
|
10
10
|
| **Pi** | ✅ Full | `invar init --pi` |
|
|
11
|
+
| **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
|
|
11
12
|
| **Cursor** | ✅ MCP | `invar init` → select Other, add MCP |
|
|
12
13
|
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
13
14
|
|
|
@@ -203,14 +204,69 @@ Or if installed in a virtual environment:
|
|
|
203
204
|
|
|
204
205
|
---
|
|
205
206
|
|
|
207
|
+
## Multi-Agent Setup (DX-81)
|
|
208
|
+
|
|
209
|
+
**Use multiple agents in the same project**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Setup both Claude Code and Pi
|
|
213
|
+
invar init --claude --pi
|
|
214
|
+
|
|
215
|
+
# Or interactive mode (select multiple with Space key)
|
|
216
|
+
invar init # Choose both "Claude Code" and "Pi Coding Agent"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**What gets installed:**
|
|
220
|
+
- `.claude/hooks/` — Claude Code hooks (4 files)
|
|
221
|
+
- `.pi/hooks/` — Pi hooks (1 file)
|
|
222
|
+
- Shared files: `CLAUDE.md`, `.claude/skills/`, `.invar/`
|
|
223
|
+
|
|
224
|
+
**Use cases:**
|
|
225
|
+
- **Team collaboration** — Different team members use different agents
|
|
226
|
+
- **Agent switching** — Have both configured, use either
|
|
227
|
+
- **Open source** — Contributors can choose their preferred agent
|
|
228
|
+
|
|
229
|
+
**File structure:**
|
|
230
|
+
```
|
|
231
|
+
project/
|
|
232
|
+
├── CLAUDE.md # Shared by both agents
|
|
233
|
+
├── .claude/
|
|
234
|
+
│ ├── skills/ # Shared by both agents
|
|
235
|
+
│ └── hooks/ # Claude Code only
|
|
236
|
+
├── .pi/
|
|
237
|
+
│ └── hooks/ # Pi only
|
|
238
|
+
└── .mcp.json # Claude Code MCP config
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**No conflicts:** All files designed for coexistence. Shared files (CLAUDE.md, skills) work identically for both agents. Isolated files (.claude/hooks/, .pi/hooks/) never interfere.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
206
245
|
## Migration Path
|
|
207
246
|
|
|
247
|
+
### Adding a Second Agent
|
|
248
|
+
|
|
249
|
+
Already using Claude Code or Pi? Add the other agent:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# Already have Claude Code, add Pi
|
|
253
|
+
invar init --pi
|
|
254
|
+
|
|
255
|
+
# Already have Pi, add Claude Code
|
|
256
|
+
invar init --claude
|
|
257
|
+
|
|
258
|
+
# Or use combined command (safe, no duplicates)
|
|
259
|
+
invar init --claude --pi
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
All shared files (CLAUDE.md, skills) are safely merged. Only agent-specific hooks are added.
|
|
263
|
+
|
|
208
264
|
### From Claude Code to Pi
|
|
209
265
|
|
|
210
266
|
No migration needed! Pi reads the same files:
|
|
211
267
|
- CLAUDE.md → works in Pi
|
|
212
268
|
- .claude/skills/ → works in Pi
|
|
213
|
-
- Just run `invar init`
|
|
269
|
+
- Just run `invar init --pi` to add Pi hooks
|
|
214
270
|
|
|
215
271
|
### From Claude Code to Others
|
|
216
272
|
|
|
@@ -220,7 +276,7 @@ No migration needed! Pi reads the same files:
|
|
|
220
276
|
|
|
221
277
|
### From Others to Claude Code
|
|
222
278
|
|
|
223
|
-
1. Run `invar init`
|
|
279
|
+
1. Run `invar init --claude`
|
|
224
280
|
2. All features auto-configured (skills, hooks, MCP)
|
|
225
281
|
|
|
226
282
|
---
|