invar-tools 1.14.0__tar.gz → 1.15.1__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.1}/.invar/context.md +6 -4
- invar_tools-1.15.1/.serena/cache/python/document_symbols.pkl +0 -0
- invar_tools-1.15.1/.serena/cache/python/raw_document_symbols.pkl +0 -0
- invar_tools-1.15.1/CHANGELOG.md +370 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/CLAUDE.md +61 -13
- {invar_tools-1.14.0 → invar_tools-1.15.1}/PKG-INFO +6 -3
- {invar_tools-1.14.0 → invar_tools-1.15.1}/README.md +5 -2
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/multi-agent.md +58 -2
- invar_tools-1.15.1/docs/proposals/DX-81-multi-agent-init.md +836 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/pyproject.toml +1 -1
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/init.py +71 -41
- invar_tools-1.15.1/src/invar/shell/pi_tools.py +127 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +31 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/pi/invar.ts.jinja +35 -1
- invar_tools-1.15.1/src/invar/templates/pi-tools/invar/index.ts +596 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/CONFIG.md +154 -29
- invar_tools-1.15.1/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/document_symbols.pkl +0 -0
- invar_tools-1.15.1/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/raw_document_symbols.pkl +0 -0
- invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/acorn +17 -0
- invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/eslint +17 -0
- invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.1/typescript/packages/eslint-plugin/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.1/typescript/packages/fc-runner/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.1/typescript/packages/fc-runner/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/acorn +17 -0
- invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/eslint +17 -0
- invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.1/typescript/packages/quick-check/node_modules/.bin/tsserver +17 -0
- invar_tools-1.15.1/typescript/packages/ts-analyzer/node_modules/.bin/tsc +17 -0
- invar_tools-1.15.1/typescript/packages/ts-analyzer/node_modules/.bin/tsserver +17 -0
- invar_tools-1.14.0/CHANGELOG.md +0 -221
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.aider.conf.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/commands/audit.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/commands/guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.PostToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.PreToolUse.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.Stop.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/acceptance/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/develop/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/CONFIG.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/investigate/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/review/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/_common.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/python.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.claude/skills/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.cursorrules +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.github/workflows/ci.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/functional.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/feedback/feedback-2026-01-03.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/project-additions.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.mcp.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.pre-commit-config.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.serena/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/.serena/project.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/INVAR.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/LICENSE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/LICENSE-GPL +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/NOTICE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/.nojekyll +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/agents.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/design.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/diagrams.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guide.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/aider.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/cline.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/continue.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/cursor.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/guides/pi.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/original-vision.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/index.html +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/logo.svg +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-74-experiment-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-78-mcp-protocol-sync.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-79-invar-usage-feedback.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/DX-80-guard-cli-mcp-alignment.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-07-extension-skills.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-08-extension-skills-future.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/proposals/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/documentation.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/docs/vision.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/LICENSE +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/pyproject.toml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/scripts/embed_node_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/core/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/doc_edit.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/doc_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/feedback.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/language.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/models.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/purity.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/references.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/rules.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/template_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/ts_parsers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/ts_sig_parser.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/handlers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/mcp/server.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/MANIFEST +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/fc-runner/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/quick-check/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/node_tools/ts-query.js +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/py.typed +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/claude_hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/doc.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/feedback.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/guard.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/perception.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/skill.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/uninstall.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/config.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/contract_coverage.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/doc_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/fs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/git.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/pi_hooks.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/crosshair.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/guard_ts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/py_refs.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/skill_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/templates.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/shell/ts_compiler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/check-in.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/skills.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/tool-selection.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/claude-md/universal/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/commands/audit.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/commands/guard.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/AGENT.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/contracts.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/core_shell.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/functional.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/python/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/contracts.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/functional.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/patterns.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/examples/typescript/workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/markers.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/tools.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/markers.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/tools.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/architecture.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/completion.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/header.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/session.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/six-laws.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/usbv.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/src/shell/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/conftest.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/__init__.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_cli_flags.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx55_regression.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx56_sync.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_dx78_ts_compiler.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_detection.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_integration.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx05_templates.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx06_typescript.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_lx07_skills.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/integration/test_mcp_doc_tools.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/tests/test_subprocess_env.py +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/.gitignore +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/README.md +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/fc-runner/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/quick-check/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/package.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/src/index.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/pnpm-workspace.yaml +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/scripts/bundle.mjs +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/tsconfig.base.json +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/typescript/vitest.config.ts +0 -0
- {invar_tools-1.14.0 → invar_tools-1.15.1}/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
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Invar will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [1.15.1] - 2026-01-03
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
|
|
16
|
+
- `invar_doc_toc`: Extract document structure (Table of Contents)
|
|
17
|
+
- `invar_doc_read`: Read specific section from a document
|
|
18
|
+
- `invar_doc_find`: Find sections matching a pattern
|
|
19
|
+
- `invar_doc_replace`: Replace section content
|
|
20
|
+
- `invar_doc_insert`: Insert content relative to a section
|
|
21
|
+
- `invar_doc_delete`: Delete a section
|
|
22
|
+
- All tools follow the same security patterns as core tools (path validation, temp file handling)
|
|
23
|
+
- Brings Pi custom tools to parity with MCP server capabilities (9 tools total)
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- **Pi Custom Tools: uvx Fallback Support** - Automatic fallback to `uvx invar-tools`
|
|
27
|
+
- Added `resolveInvarCommand()` helper to replace `checkInvarInstalled()`
|
|
28
|
+
- Try `invar` command first (if installed in PATH)
|
|
29
|
+
- Fallback to `uvx invar-tools` if `invar` not found
|
|
30
|
+
- No installation required - uvx downloads and runs invar-tools on-demand
|
|
31
|
+
- Matches the 3-tier calling method documented in CLAUDE.md
|
|
32
|
+
- All 9 tools updated to use the command resolver
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
|
|
36
|
+
- `invar_doc_toc`: Extract document structure (Table of Contents)
|
|
37
|
+
- `invar_doc_read`: Read specific section from a document
|
|
38
|
+
- `invar_doc_find`: Find sections matching a pattern
|
|
39
|
+
- `invar_doc_replace`: Replace section content
|
|
40
|
+
- `invar_doc_insert`: Insert content relative to a section
|
|
41
|
+
- `invar_doc_delete`: Delete a section
|
|
42
|
+
- All tools follow the same security patterns as core tools (path validation, temp file handling)
|
|
43
|
+
- Brings Pi custom tools to parity with MCP server capabilities
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
- **Pi Custom Tools: uvx Fallback Support** - Automatic fallback to `uvx invar-tools`
|
|
47
|
+
- Try `invar` command first (if installed in PATH)
|
|
48
|
+
- Fallback to `uvx invar-tools` if `invar` not found
|
|
49
|
+
- No installation required - uvx downloads and runs invar-tools on-demand
|
|
50
|
+
- Matches the 3-tier calling method documented in CLAUDE.md
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
- **Pi Custom Tools: Document Tools** - Added 6 doc tools for structured markdown editing
|
|
54
|
+
- `invar_doc_toc`: Extract document structure (Table of Contents)
|
|
55
|
+
- `invar_doc_read`: Read specific section from a document
|
|
56
|
+
- `invar_doc_find`: Find sections matching a pattern
|
|
57
|
+
- `invar_doc_replace`: Replace section content
|
|
58
|
+
- `invar_doc_insert`: Insert content relative to a section
|
|
59
|
+
- `invar_doc_delete`: Delete a section
|
|
60
|
+
- All tools follow the same security patterns as core tools (path validation, temp file handling)
|
|
61
|
+
- Brings Pi custom tools to parity with MCP server capabilities
|
|
62
|
+
|
|
63
|
+
## [1.15.0] - 2026-01-03
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
- **DX-81: Multi-Agent Init Support** - Complete implementation
|
|
67
|
+
- Remove mutual exclusivity between `--claude` and `--pi` flags
|
|
68
|
+
- Support combined flags: `invar init --claude --pi`
|
|
69
|
+
- Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
|
|
70
|
+
- **Interactive mode enhancement**:
|
|
71
|
+
- Changed from single-select to checkbox multi-select
|
|
72
|
+
- Allow selecting multiple agents with Space key
|
|
73
|
+
- Claude Code pre-checked as default
|
|
74
|
+
- **Backward compatibility maintained**:
|
|
75
|
+
- `invar init --claude` works as before (Claude only)
|
|
76
|
+
- `invar init --pi` works as before (Pi only)
|
|
77
|
+
- Sequential init (`--claude` then `--pi`) still works
|
|
78
|
+
- **Use cases enabled**:
|
|
79
|
+
- Team collaboration (different members use different agents)
|
|
80
|
+
- Agent switching (both configured, use either)
|
|
81
|
+
- Open source projects (contributors have agent choice)
|
|
82
|
+
- **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
|
|
83
|
+
- Automatic feedback reminder at configurable message threshold (default: 30)
|
|
84
|
+
- **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
|
|
85
|
+
- **Pi implementation**: TypeScript hook with fs config reading
|
|
86
|
+
- **Shared configuration**: Both read `.claude/settings.local.json` feedback section
|
|
87
|
+
- **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
|
|
88
|
+
- Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
|
|
89
|
+
- **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
|
|
90
|
+
- `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
|
|
91
|
+
- `invar_sig`: Show function signatures and contracts
|
|
92
|
+
- `invar_map`: Symbol map with reference counts
|
|
93
|
+
- Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
|
|
94
|
+
- Pi auto-discovers tools, no configuration needed
|
|
95
|
+
- Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
|
|
96
|
+
|
|
97
|
+
### Changed
|
|
98
|
+
- Agent selection prompt now uses checkbox instead of radio buttons
|
|
99
|
+
- Header shows "Claude Code + Pi" when both flags used
|
|
100
|
+
- File selection logic builds from all selected agents' categories
|
|
101
|
+
|
|
102
|
+
### Fixed
|
|
103
|
+
- **Security hardening in Pi templates** (3-round adversarial review)
|
|
104
|
+
- Path injection defense with comprehensive shell metacharacter blocking
|
|
105
|
+
- TOCTOU race condition eliminated in config reading
|
|
106
|
+
- Runtime type validation for external inputs
|
|
107
|
+
- ES module consistency (no CommonJS mixing)
|
|
108
|
+
|
|
109
|
+
### Documentation
|
|
110
|
+
- Updated README.md with multi-agent examples
|
|
111
|
+
- Added Multi-Agent Support section to CLAUDE.md
|
|
112
|
+
- Updated context.md to reflect DX-81 completion
|
|
113
|
+
|
|
114
|
+
### Added
|
|
115
|
+
- **DX-81: Multi-Agent Init Support** - Complete implementation
|
|
116
|
+
- Remove mutual exclusivity between `--claude` and `--pi` flags
|
|
117
|
+
- Support combined flags: `invar init --claude --pi`
|
|
118
|
+
- Install both `.claude/hooks/` and `.pi/hooks/` simultaneously
|
|
119
|
+
- **Interactive mode enhancement**:
|
|
120
|
+
- Changed from single-select to checkbox multi-select
|
|
121
|
+
- Allow selecting multiple agents with Space key
|
|
122
|
+
- Claude Code pre-checked as default
|
|
123
|
+
- **Backward compatibility maintained**:
|
|
124
|
+
- `invar init --claude` works as before (Claude only)
|
|
125
|
+
- `invar init --pi` works as before (Pi only)
|
|
126
|
+
- Sequential init (`--claude` then `--pi`) still works
|
|
127
|
+
- **Use cases enabled**:
|
|
128
|
+
- Team collaboration (different members use different agents)
|
|
129
|
+
- Agent switching (both configured, use either)
|
|
130
|
+
- Open source projects (contributors have agent choice)
|
|
131
|
+
- **DX-79: Message Count Auto-Trigger for /invar-reflect** - Cross-platform feedback automation
|
|
132
|
+
- Automatic feedback reminder at configurable message threshold (default: 30)
|
|
133
|
+
- **Claude Code implementation**: UserPromptSubmit hook with jq config parsing
|
|
134
|
+
- **Pi implementation**: TypeScript hook with fs config reading
|
|
135
|
+
- **Shared configuration**: Both read `.claude/settings.local.json` feedback section
|
|
136
|
+
- **User control**: Disable via `feedback.enabled=false` or adjust `min_messages` threshold
|
|
137
|
+
- Replaces unimplemented PostTaskCompletion hook with simpler, universally-supported approach
|
|
138
|
+
- **Pi Custom Tools for Invar** - Native tool integration without CLI dependency
|
|
139
|
+
- `invar_guard`: Smart verification wrapper (static + doctests + symbolic)
|
|
140
|
+
- `invar_sig`: Show function signatures and contracts
|
|
141
|
+
- `invar_map`: Symbol map with reference counts
|
|
142
|
+
- Auto-installed via `invar init --pi` in `.pi/tools/invar/index.ts`
|
|
143
|
+
- Pi auto-discovers tools, no configuration needed
|
|
144
|
+
- Solves problem of Pi agents not actively using invar tools (falling back to pytest/grep)
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
- Agent selection prompt now uses checkbox instead of radio buttons
|
|
148
|
+
- Header shows "Claude Code + Pi" when both flags used
|
|
149
|
+
- File selection logic builds from all selected agents' categories
|
|
150
|
+
|
|
151
|
+
### Documentation
|
|
152
|
+
- Updated README.md with multi-agent examples
|
|
153
|
+
- Added Multi-Agent Support section to CLAUDE.md
|
|
154
|
+
- Updated context.md to reflect DX-81 completion
|
|
155
|
+
|
|
156
|
+
## [1.14.0] - 2026-01-03
|
|
157
|
+
|
|
158
|
+
### Added
|
|
159
|
+
- **DX-79: Invar Usage Feedback Collection** - Complete implementation of automatic feedback generation system
|
|
160
|
+
- `/invar-reflect` skill: Generate structured feedback on Invar tool usage
|
|
161
|
+
- Analyzes tool usage patterns and pain points
|
|
162
|
+
- Tracks learning curves and confusion points
|
|
163
|
+
- Produces detailed markdown reports in `.invar/feedback/`
|
|
164
|
+
- **CLI tools** for feedback management:
|
|
165
|
+
- `invar feedback list` - Display all feedback files with timestamps
|
|
166
|
+
- `invar feedback cleanup` - Remove old feedback files (default: >90 days)
|
|
167
|
+
- `invar feedback anonymize` - Strip sensitive data for safe sharing
|
|
168
|
+
- **Core anonymization logic** (`src/invar/core/feedback.py`):
|
|
169
|
+
- Removes 8 types of sensitive data (emails, IPs, paths, tokens, etc.)
|
|
170
|
+
- Contract-verified with `@pre`/`@post` and doctests
|
|
171
|
+
- CrossHair symbolic verification passed
|
|
172
|
+
- **Init integration**:
|
|
173
|
+
- Automatic feedback configuration in `.claude/settings.local.json`
|
|
174
|
+
- Interactive consent prompt (opt-out design, default: enabled)
|
|
175
|
+
- Visible notifications in quick modes (`--claude`, `--pi`)
|
|
176
|
+
- **Template integration**: New projects get `/invar-reflect` skill out-of-box
|
|
177
|
+
- Added to `manifest.toml` with 3 files (SKILL.md, template.md, CONFIG.md)
|
|
178
|
+
- Installed automatically via `invar init --claude`
|
|
179
|
+
|
|
180
|
+
### Fixed
|
|
181
|
+
- **Round 2 review fixes**:
|
|
182
|
+
- Moved anonymization logic from Shell to Core (proper separation)
|
|
183
|
+
- Removed redundant type contracts (guard warning resolved)
|
|
184
|
+
- Fixed Pi notification path mismatch
|
|
185
|
+
- Expanded anonymization patterns (comprehensive coverage)
|
|
186
|
+
|
|
187
|
+
### Security
|
|
188
|
+
- Privacy-first design: All feedback stored locally, never sent automatically
|
|
189
|
+
- Comprehensive anonymization for safe sharing with maintainers
|
|
190
|
+
- User controls what (if anything) to share
|
|
191
|
+
|
|
192
|
+
## [1.13.0] - 2026-01-03
|
|
193
|
+
|
|
194
|
+
### Fixed
|
|
195
|
+
- **guard CLI默认行为对齐MCP**: CLI和MCP默认都检查修改文件
|
|
196
|
+
- 修复设计遗留问题:CLI应该和MCP行为一致(agent-first原则)
|
|
197
|
+
- 之前:`invar guard` 检查全部文件(慢)
|
|
198
|
+
- 现在:`invar guard` 检查修改文件(快,和MCP一致)
|
|
199
|
+
|
|
200
|
+
### Added
|
|
201
|
+
- **新增`--all`标志**: 显式请求全检查
|
|
202
|
+
- `invar guard --all` - 检查整个项目(CI、release场景)
|
|
203
|
+
- 向后兼容:`invar guard --changed` 仍然有效
|
|
204
|
+
- **Tool Selection文档章节**: 解决Pi等不支持MCP的agent调用问题
|
|
205
|
+
- 三种等价调用方式对照表(MCP / CLI / uvx)
|
|
206
|
+
- 参数映射说明
|
|
207
|
+
- 快速示例
|
|
208
|
+
|
|
209
|
+
### Migration
|
|
210
|
+
- **Agent用户(主要)**: 自动获得更快体验,无需改动
|
|
211
|
+
- **CI脚本(极少)**: 如需全检查,改为 `invar guard --all`
|
|
212
|
+
- **Pre-commit hooks**: 不受影响(已经用--changed)
|
|
213
|
+
|
|
214
|
+
## [1.12.0] - 2026-01-03
|
|
215
|
+
|
|
216
|
+
### Added
|
|
217
|
+
- **DX-78: TypeScript Compiler API Integration**
|
|
218
|
+
- Full TypeScript semantic analysis via Compiler API
|
|
219
|
+
- `invar refs` command for finding symbol references across Python and TypeScript
|
|
220
|
+
- Security fixes for TypeScript code analysis
|
|
221
|
+
- Comprehensive MCP handlers for TypeScript tools
|
|
222
|
+
|
|
223
|
+
### Fixed
|
|
224
|
+
- Skill frontmatter missing in skill definitions
|
|
225
|
+
|
|
226
|
+
## [1.11.0] - 2025-12
|
|
227
|
+
|
|
228
|
+
### Added
|
|
229
|
+
- **DX-77: MCP Document Tools Enhancements**
|
|
230
|
+
- Phase A: Batch section reading with `invar_doc_read_many`
|
|
231
|
+
- Unicode-aware fuzzy matching for section search
|
|
232
|
+
- Explicit tool substitution hints
|
|
233
|
+
|
|
234
|
+
### Changed
|
|
235
|
+
- Documentation improvements for MCP server configuration
|
|
236
|
+
|
|
237
|
+
## [1.10.0] - 2025-12
|
|
238
|
+
|
|
239
|
+
### Added
|
|
240
|
+
- **DX-75: Lightweight Review Strategy**
|
|
241
|
+
- Scope-based review strategies (THOROUGH, HYBRID, CHUNKED)
|
|
242
|
+
- Isolation requirements for non-trivial implementations
|
|
243
|
+
|
|
244
|
+
### Changed
|
|
245
|
+
- Review skill now spawns isolated subagents based on scope
|
|
246
|
+
|
|
247
|
+
## [1.9.0] - 2025-12
|
|
248
|
+
|
|
249
|
+
### Added
|
|
250
|
+
- **DX-63: Contracts-First Enforcement**
|
|
251
|
+
- `--contracts-only` flag for contract coverage checking
|
|
252
|
+
- Function-level gates in BUILD phase
|
|
253
|
+
- Incremental development patterns
|
|
254
|
+
|
|
255
|
+
### Changed
|
|
256
|
+
- USBV workflow now enforces contracts before implementation
|
|
257
|
+
|
|
258
|
+
## [1.8.0] - 2025-12
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
- **DX-54: Context Management**
|
|
262
|
+
- Context refresh requirements at workflow entry points
|
|
263
|
+
- Task Router in `.invar/context.md`
|
|
264
|
+
|
|
265
|
+
### Changed
|
|
266
|
+
- Workflow skills now read context on entry
|
|
267
|
+
|
|
268
|
+
## [1.7.0] - 2025-12
|
|
269
|
+
|
|
270
|
+
### Added
|
|
271
|
+
- **DX-51: Workflow Phase Visibility**
|
|
272
|
+
- Visual phase headers for USBV transitions
|
|
273
|
+
- Three-layer visibility (Skill, Phase, Tasks)
|
|
274
|
+
|
|
275
|
+
### Changed
|
|
276
|
+
- Phase transitions now display clear visual separators
|
|
277
|
+
|
|
278
|
+
## [1.6.0] - 2025-12
|
|
279
|
+
|
|
280
|
+
### Added
|
|
281
|
+
- **DX-42: Workflow Auto-Routing**
|
|
282
|
+
- Automatic skill selection based on trigger words
|
|
283
|
+
- User redirect capability with natural language
|
|
284
|
+
- Simple task optimization
|
|
285
|
+
|
|
286
|
+
### Changed
|
|
287
|
+
- Skills now announce routing decisions before execution
|
|
288
|
+
|
|
289
|
+
## [1.5.0] - 2025-12
|
|
290
|
+
|
|
291
|
+
### Added
|
|
292
|
+
- **DX-41: Automatic Review Orchestration**
|
|
293
|
+
- Guard triggers `review_suggested` for security-sensitive changes
|
|
294
|
+
- Auto-entry to /review skill
|
|
295
|
+
|
|
296
|
+
### Changed
|
|
297
|
+
- Review is now automatically invoked after development when appropriate
|
|
298
|
+
|
|
299
|
+
## [1.4.0] - 2025-12
|
|
300
|
+
|
|
301
|
+
### Added
|
|
302
|
+
- **DX-37: Coverage Integration**
|
|
303
|
+
- `--coverage` flag for branch coverage collection
|
|
304
|
+
- Integration with pytest-cov
|
|
305
|
+
|
|
306
|
+
### Changed
|
|
307
|
+
- Guard can now collect and report branch coverage
|
|
308
|
+
|
|
309
|
+
## [1.3.0] - 2025-12
|
|
310
|
+
|
|
311
|
+
### Added
|
|
312
|
+
- **DX-30: Visible Workflow**
|
|
313
|
+
- TodoList checkpoints for complex tasks (UNDERSTAND, SPECIFY, VALIDATE)
|
|
314
|
+
- Contracts shown before code in SPECIFY phase
|
|
315
|
+
|
|
316
|
+
### Changed
|
|
317
|
+
- BUILD phase is now internal work (not shown in TodoList)
|
|
318
|
+
|
|
319
|
+
## [1.2.0] - 2025-12
|
|
320
|
+
|
|
321
|
+
### Added
|
|
322
|
+
- **DX-26: Guard Simplification**
|
|
323
|
+
- Agent mode auto-detection (TTY vs non-TTY)
|
|
324
|
+
- JSON output for non-TTY environments
|
|
325
|
+
|
|
326
|
+
### Changed
|
|
327
|
+
- Guard now automatically outputs JSON when piped
|
|
328
|
+
|
|
329
|
+
## [1.1.0] - 2025-12
|
|
330
|
+
|
|
331
|
+
### Added
|
|
332
|
+
- **DX-21: Package and Init**
|
|
333
|
+
- `invar init` command for project initialization
|
|
334
|
+
- Template-based CLAUDE.md and INVAR.md generation
|
|
335
|
+
|
|
336
|
+
### Changed
|
|
337
|
+
- Initial project setup now streamlined with `invar init`
|
|
338
|
+
|
|
339
|
+
## [1.0.0] - 2025-12
|
|
340
|
+
|
|
341
|
+
### Added
|
|
342
|
+
- Initial release of Invar
|
|
343
|
+
- Core/Shell architecture
|
|
344
|
+
- Contract-based verification (@pre/@post)
|
|
345
|
+
- USBV workflow (Understand → Specify → Build → Validate)
|
|
346
|
+
- Smart Guard (static + doctests + CrossHair + Hypothesis)
|
|
347
|
+
- MCP server for Claude Code integration
|
|
348
|
+
- CLI tools (guard, sig, map, rules)
|
|
349
|
+
- Multi-agent support (Claude Code, Aider, Pi)
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
[Unreleased]: https://github.com/yourusername/invar/compare/v1.15.1...HEAD
|
|
354
|
+
[1.15.1]: https://github.com/yourusername/invar/compare/v1.15.0...v1.15.1
|
|
355
|
+
[1.15.0]: https://github.com/yourusername/invar/compare/v1.14.0...v1.15.0
|
|
356
|
+
[1.14.0]: https://github.com/yourusername/invar/compare/v1.13.0...v1.14.0
|
|
357
|
+
[1.13.0]: https://github.com/yourusername/invar/compare/v1.12.0...v1.13.0
|
|
358
|
+
[1.12.0]: https://github.com/yourusername/invar/compare/v1.11.0...v1.12.0
|
|
359
|
+
[1.11.0]: https://github.com/yourusername/invar/compare/v1.10.0...v1.11.0
|
|
360
|
+
[1.10.0]: https://github.com/yourusername/invar/compare/v1.9.0...v1.10.0
|
|
361
|
+
[1.9.0]: https://github.com/yourusername/invar/compare/v1.8.0...v1.9.0
|
|
362
|
+
[1.8.0]: https://github.com/yourusername/invar/compare/v1.7.0...v1.8.0
|
|
363
|
+
[1.7.0]: https://github.com/yourusername/invar/compare/v1.6.0...v1.7.0
|
|
364
|
+
[1.6.0]: https://github.com/yourusername/invar/compare/v1.5.0...v1.6.0
|
|
365
|
+
[1.5.0]: https://github.com/yourusername/invar/compare/v1.4.0...v1.5.0
|
|
366
|
+
[1.4.0]: https://github.com/yourusername/invar/compare/v1.3.0...v1.4.0
|
|
367
|
+
[1.3.0]: https://github.com/yourusername/invar/compare/v1.2.0...v1.3.0
|
|
368
|
+
[1.2.0]: https://github.com/yourusername/invar/compare/v1.1.0...v1.2.0
|
|
369
|
+
[1.1.0]: https://github.com/yourusername/invar/compare/v1.0.0...v1.1.0
|
|
370
|
+
[1.0.0]: https://github.com/yourusername/invar/releases/tag/v1.0.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.1
|
|
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
|
---
|