invar-tools 1.15.2__tar.gz → 1.15.4__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.15.2 → invar_tools-1.15.4}/CHANGELOG.md +29 -1
- {invar_tools-1.15.2 → invar_tools-1.15.4}/PKG-INFO +1 -1
- {invar_tools-1.15.2 → invar_tools-1.15.4}/pyproject.toml +1 -1
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/pi-tools/invar/index.ts +116 -28
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.aider.conf.yml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/commands/audit.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/commands/guard.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/invar.PostToolUse.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/invar.PreToolUse.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/invar.Stop.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/acceptance/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/develop/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-reflect/CONFIG.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/investigate/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/review/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/security/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/security/patterns/_common.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/security/patterns/python.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.cursorrules +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.github/workflows/ci.yml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.gitignore +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/context.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/functional.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/feedback/feedback-2026-01-03.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/project-additions.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.mcp.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.pre-commit-config.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.serena/.gitignore +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.serena/cache/python/document_symbols.pkl +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.serena/cache/python/raw_document_symbols.pkl +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/.serena/project.yml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/CLAUDE.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/INVAR.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/LICENSE +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/LICENSE-GPL +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/NOTICE +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/.nojekyll +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/agents.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/design.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/diagrams.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guide.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/aider.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/cline.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/continue.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/cursor.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/multi-agent.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/guides/pi.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/original-vision.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/index.html +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/logo.svg +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-74-experiment-report.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-78-mcp-protocol-sync.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-79-invar-usage-feedback.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-80-guard-cli-mcp-alignment.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-81-multi-agent-init.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-07-extension-skills.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-08-extension-skills-future.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/documentation.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/docs/vision.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/LICENSE +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/pyproject.toml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/scripts/embed_node_tools.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/core/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/doc_edit.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/doc_parser.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/feedback.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/language.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/models.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/parser.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/purity.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/references.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/rules.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/template_helpers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/ts_parsers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/ts_sig_parser.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/mcp/handlers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/mcp/server.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/MANIFEST +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/fc-runner/cli.js +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/quick-check/cli.js +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/node_tools/ts-query.js +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/py.typed +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/claude_hooks.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/doc.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/feedback.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/guard.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/init.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/perception.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/skill.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/uninstall.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/config.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/contract_coverage.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/doc_tools.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/fs.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/git.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/pi_hooks.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/pi_tools.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/crosshair.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/guard_ts.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/py_refs.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/skill_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/templates.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/shell/ts_compiler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/universal/check-in.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/universal/skills.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/universal/tool-selection.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/claude-md/universal/workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/commands/audit.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/commands/guard.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/config/AGENT.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/conftest.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/contracts.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/core_shell.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/functional.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/python/workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/contracts.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/functional.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/patterns.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/examples/typescript/workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/hooks/pi/invar.ts.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/onboard/assessment.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/onboard/patterns/python.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/onboard/patterns/typescript.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/python/markers.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/python/tools.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/typescript/markers.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/typescript/tools.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/architecture.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/completion.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/header.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/session.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/six-laws.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/usbv.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/invar-reflect/CONFIG.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/invar-reflect/SKILL.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/invar-reflect/template.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/src/shell/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/conftest.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/conftest.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/document_symbols.pkl +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/cache/python/raw_document_symbols.pkl +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/__init__.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_cli_flags.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_dx55_regression.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_dx56_sync.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_dx78_ts_compiler.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_lx05_detection.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_lx05_integration.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_lx05_templates.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_lx06_typescript.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_lx07_skills.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/integration/test_mcp_doc_tools.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/tests/test_subprocess_env.py +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/.gitignore +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/README.md +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/package.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/node_modules/.bin/acorn +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/node_modules/.bin/eslint +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/node_modules/.bin/tsc +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/node_modules/.bin/tsserver +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/package.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/index.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/node_modules/.bin/tsc +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/node_modules/.bin/tsserver +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/package.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/src/cli.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/src/index.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/fc-runner/tsconfig.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/node_modules/.bin/acorn +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/node_modules/.bin/eslint +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/node_modules/.bin/tsc +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/node_modules/.bin/tsserver +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/package.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/src/cli.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/src/index.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/quick-check/tsconfig.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/node_modules/.bin/tsc +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/node_modules/.bin/tsserver +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/package.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/src/index.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/pnpm-workspace.yaml +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/scripts/bundle.mjs +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/tsconfig.base.json +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/typescript/vitest.config.ts +0 -0
- {invar_tools-1.15.2 → invar_tools-1.15.4}/uv.lock +0 -0
|
@@ -9,6 +9,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
## [1.15.4] - 2026-01-03
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- **Pi Custom Tools: Error Message Capture** - Improved error diagnostics
|
|
16
|
+
- Enhanced error message capture to include both stderr and stdout
|
|
17
|
+
- Prevents empty error messages like "Failed to extract TOC: "
|
|
18
|
+
- Fallback to "Unknown error" if both streams are empty
|
|
19
|
+
- **Solves diagnostic issue** where error details were missing:
|
|
20
|
+
- Root cause: Some errors may output to stdout instead of stderr
|
|
21
|
+
- Pi's exec() stderr might be empty even when command fails
|
|
22
|
+
- All 9 tools now provide clear error messages for debugging
|
|
23
|
+
- Fixed in: invar_sig, invar_map, invar_doc_toc, invar_doc_read, invar_doc_find, invar_doc_replace, invar_doc_insert, invar_doc_delete
|
|
24
|
+
|
|
25
|
+
## [1.15.3] - 2026-01-03
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
- **Pi Custom Tools: Parameter Handling** - Fixed parameter validation and default values
|
|
29
|
+
- Added validation for all required parameters (file, target, section, etc.)
|
|
30
|
+
- Added explicit default value handling using `??` operator for optional parameters
|
|
31
|
+
- Prevents tools from failing when Pi doesn't pass parameter values
|
|
32
|
+
- **Solves critical issue** where tools failed with missing parameters:
|
|
33
|
+
- Root cause: TypeBox default values not automatically populated in params object
|
|
34
|
+
- Pi may call tools without passing values, even for required parameters
|
|
35
|
+
- All 9 tools now validate inputs and handle defaults correctly
|
|
36
|
+
- Clear error messages guide LLM to provide required parameters
|
|
37
|
+
|
|
12
38
|
|
|
13
39
|
## [1.15.2] - 2026-01-03
|
|
14
40
|
|
|
@@ -365,7 +391,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
365
391
|
|
|
366
392
|
---
|
|
367
393
|
|
|
368
|
-
[Unreleased]: https://github.com/yourusername/invar/compare/v1.15.
|
|
394
|
+
[Unreleased]: https://github.com/yourusername/invar/compare/v1.15.4...HEAD
|
|
395
|
+
[1.15.4]: https://github.com/yourusername/invar/compare/v1.15.3...v1.15.4
|
|
396
|
+
[1.15.3]: https://github.com/yourusername/invar/compare/v1.15.2...v1.15.3
|
|
369
397
|
[1.15.2]: https://github.com/yourusername/invar/compare/v1.15.1...v1.15.2
|
|
370
398
|
[1.15.1]: https://github.com/yourusername/invar/compare/v1.15.0...v1.15.1
|
|
371
399
|
[1.15.0]: https://github.com/yourusername/invar/compare/v1.14.0...v1.15.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.15.
|
|
3
|
+
Version: 1.15.4
|
|
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
|
|
@@ -14,7 +14,7 @@ artifacts = ["src/invar/node_tools/**/*.js", "src/invar/node_tools/**/MANIFEST"]
|
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
name = "invar-tools"
|
|
17
|
-
version = "1.15.
|
|
17
|
+
version = "1.15.4"
|
|
18
18
|
description = "AI-native software engineering tools with design-by-contract verification"
|
|
19
19
|
readme = "README.md"
|
|
20
20
|
license = "GPL-3.0-or-later"
|
|
@@ -69,18 +69,24 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
69
69
|
const cmd = await resolveInvarCommand();
|
|
70
70
|
const args = [...cmd.args, "guard"];
|
|
71
71
|
|
|
72
|
+
// Handle optional parameters with defaults
|
|
73
|
+
const changed = params.changed ?? true;
|
|
74
|
+
const contractsOnly = params.contracts_only ?? false;
|
|
75
|
+
const coverage = params.coverage ?? false;
|
|
76
|
+
const strict = params.strict ?? false;
|
|
77
|
+
|
|
72
78
|
// Default is --changed (check modified files)
|
|
73
|
-
if (
|
|
79
|
+
if (changed === false) {
|
|
74
80
|
args.push("--all");
|
|
75
81
|
}
|
|
76
82
|
|
|
77
|
-
if (
|
|
83
|
+
if (contractsOnly) {
|
|
78
84
|
args.push("-c");
|
|
79
85
|
}
|
|
80
|
-
if (
|
|
86
|
+
if (coverage) {
|
|
81
87
|
args.push("--coverage");
|
|
82
88
|
}
|
|
83
|
-
if (
|
|
89
|
+
if (strict) {
|
|
84
90
|
args.push("--strict");
|
|
85
91
|
}
|
|
86
92
|
|
|
@@ -117,6 +123,11 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
117
123
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
118
124
|
const cmd = await resolveInvarCommand();
|
|
119
125
|
|
|
126
|
+
// Validate required parameter
|
|
127
|
+
if (!params.target) {
|
|
128
|
+
throw new Error("Missing required parameter: target (file path or file::symbol)");
|
|
129
|
+
}
|
|
130
|
+
|
|
120
131
|
if (!isValidPath(params.target)) {
|
|
121
132
|
throw new Error("Invalid target path: contains unsafe characters or path traversal");
|
|
122
133
|
}
|
|
@@ -131,7 +142,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
131
142
|
}
|
|
132
143
|
|
|
133
144
|
if (result.exitCode !== 0) {
|
|
134
|
-
|
|
145
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
146
|
+
throw new Error(`Failed to get signatures: ${errorMsg}`);
|
|
135
147
|
}
|
|
136
148
|
|
|
137
149
|
return {
|
|
@@ -163,19 +175,21 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
163
175
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
164
176
|
const cmd = await resolveInvarCommand();
|
|
165
177
|
|
|
166
|
-
|
|
178
|
+
// Handle optional parameters with defaults
|
|
179
|
+
const targetPath = params.path ?? ".";
|
|
180
|
+
const topN = params.top ?? 10;
|
|
181
|
+
|
|
182
|
+
if (targetPath !== "." && !isValidPath(targetPath)) {
|
|
167
183
|
throw new Error("Invalid path: contains unsafe characters or path traversal");
|
|
168
184
|
}
|
|
169
185
|
|
|
170
186
|
const args = [...cmd.args, "map"];
|
|
171
187
|
|
|
172
|
-
if (
|
|
173
|
-
args.push(
|
|
188
|
+
if (targetPath !== ".") {
|
|
189
|
+
args.push(targetPath);
|
|
174
190
|
}
|
|
175
191
|
|
|
176
|
-
|
|
177
|
-
args.push("--top", params.top.toString());
|
|
178
|
-
}
|
|
192
|
+
args.push("--top", topN.toString());
|
|
179
193
|
|
|
180
194
|
const result = await pi.exec(cmd.command, args, {
|
|
181
195
|
cwd: pi.cwd,
|
|
@@ -187,14 +201,15 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
187
201
|
}
|
|
188
202
|
|
|
189
203
|
if (result.exitCode !== 0) {
|
|
190
|
-
|
|
204
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
205
|
+
throw new Error(`Failed to generate map: ${errorMsg}`);
|
|
191
206
|
}
|
|
192
207
|
|
|
193
208
|
return {
|
|
194
209
|
content: [{ type: "text", text: result.stdout }],
|
|
195
210
|
details: {
|
|
196
|
-
path:
|
|
197
|
-
top:
|
|
211
|
+
path: targetPath,
|
|
212
|
+
top: topN,
|
|
198
213
|
},
|
|
199
214
|
};
|
|
200
215
|
},
|
|
@@ -221,14 +236,22 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
221
236
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
222
237
|
const cmd = await resolveInvarCommand();
|
|
223
238
|
|
|
239
|
+
// Validate required parameter
|
|
240
|
+
if (!params.file) {
|
|
241
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
242
|
+
}
|
|
243
|
+
|
|
224
244
|
if (!isValidPath(params.file)) {
|
|
225
245
|
throw new Error("Invalid file path: contains unsafe characters or path traversal");
|
|
226
246
|
}
|
|
227
247
|
|
|
248
|
+
// Handle optional parameter with default
|
|
249
|
+
const maxDepth = params.depth ?? 6;
|
|
250
|
+
|
|
228
251
|
const args = [...cmd.args, "doc", "toc", params.file];
|
|
229
252
|
|
|
230
|
-
if (
|
|
231
|
-
args.push("--depth",
|
|
253
|
+
if (maxDepth !== 6) {
|
|
254
|
+
args.push("--depth", maxDepth.toString());
|
|
232
255
|
}
|
|
233
256
|
|
|
234
257
|
const result = await pi.exec(cmd.command, args, {
|
|
@@ -241,14 +264,15 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
241
264
|
}
|
|
242
265
|
|
|
243
266
|
if (result.exitCode !== 0) {
|
|
244
|
-
|
|
267
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
268
|
+
throw new Error(`Failed to extract TOC: ${errorMsg}`);
|
|
245
269
|
}
|
|
246
270
|
|
|
247
271
|
return {
|
|
248
272
|
content: [{ type: "text", text: result.stdout }],
|
|
249
273
|
details: {
|
|
250
274
|
file: params.file,
|
|
251
|
-
depth:
|
|
275
|
+
depth: maxDepth,
|
|
252
276
|
},
|
|
253
277
|
};
|
|
254
278
|
},
|
|
@@ -276,13 +300,24 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
276
300
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
277
301
|
const cmd = await resolveInvarCommand();
|
|
278
302
|
|
|
303
|
+
// Validate required parameters
|
|
304
|
+
if (!params.file) {
|
|
305
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
306
|
+
}
|
|
307
|
+
if (!params.section) {
|
|
308
|
+
throw new Error("Missing required parameter: section (section path or identifier)");
|
|
309
|
+
}
|
|
310
|
+
|
|
279
311
|
if (!isValidPath(params.file) || !isValidPath(params.section)) {
|
|
280
312
|
throw new Error("Invalid file or section path: contains unsafe characters or path traversal");
|
|
281
313
|
}
|
|
282
314
|
|
|
315
|
+
// Handle optional parameter with default
|
|
316
|
+
const includeChildren = params.children ?? true;
|
|
317
|
+
|
|
283
318
|
const args = [...cmd.args, "doc", "read", params.file, params.section, "--json"];
|
|
284
319
|
|
|
285
|
-
if (
|
|
320
|
+
if (includeChildren === false) {
|
|
286
321
|
args.push("--no-children");
|
|
287
322
|
}
|
|
288
323
|
|
|
@@ -296,7 +331,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
296
331
|
}
|
|
297
332
|
|
|
298
333
|
if (result.exitCode !== 0) {
|
|
299
|
-
|
|
334
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
335
|
+
throw new Error(`Failed to read section: ${errorMsg}`);
|
|
300
336
|
}
|
|
301
337
|
|
|
302
338
|
return {
|
|
@@ -335,12 +371,21 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
335
371
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
336
372
|
const cmd = await resolveInvarCommand();
|
|
337
373
|
|
|
374
|
+
// Validate required parameters
|
|
375
|
+
if (!params.file) {
|
|
376
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
377
|
+
}
|
|
378
|
+
if (!params.pattern) {
|
|
379
|
+
throw new Error("Missing required parameter: pattern (glob pattern for section titles)");
|
|
380
|
+
}
|
|
381
|
+
|
|
338
382
|
if (!isValidPath(params.file)) {
|
|
339
383
|
throw new Error("Invalid file path: contains unsafe characters or path traversal");
|
|
340
384
|
}
|
|
341
385
|
|
|
342
386
|
const args = [...cmd.args, "doc", "find", params.pattern, params.file, "--json"];
|
|
343
387
|
|
|
388
|
+
// Handle optional parameters
|
|
344
389
|
if (params.content) {
|
|
345
390
|
args.push("--content", params.content);
|
|
346
391
|
}
|
|
@@ -359,7 +404,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
359
404
|
}
|
|
360
405
|
|
|
361
406
|
if (result.exitCode !== 0) {
|
|
362
|
-
|
|
407
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
408
|
+
throw new Error(`Failed to find sections: ${errorMsg}`);
|
|
363
409
|
}
|
|
364
410
|
|
|
365
411
|
return {
|
|
@@ -397,10 +443,24 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
397
443
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
398
444
|
const cmd = await resolveInvarCommand();
|
|
399
445
|
|
|
446
|
+
// Validate required parameters
|
|
447
|
+
if (!params.file) {
|
|
448
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
449
|
+
}
|
|
450
|
+
if (!params.section) {
|
|
451
|
+
throw new Error("Missing required parameter: section (section path or identifier)");
|
|
452
|
+
}
|
|
453
|
+
if (!params.content) {
|
|
454
|
+
throw new Error("Missing required parameter: content (new content for section)");
|
|
455
|
+
}
|
|
456
|
+
|
|
400
457
|
if (!isValidPath(params.file) || !isValidPath(params.section)) {
|
|
401
458
|
throw new Error("Invalid file or section path: contains unsafe characters or path traversal");
|
|
402
459
|
}
|
|
403
460
|
|
|
461
|
+
// Handle optional parameter with default
|
|
462
|
+
const keepHeading = params.keep_heading ?? true;
|
|
463
|
+
|
|
404
464
|
// Write content to temporary file to avoid shell injection
|
|
405
465
|
const tmpFile = path.join(pi.cwd, `.invar-tmp-${Date.now()}.txt`);
|
|
406
466
|
|
|
@@ -417,7 +477,7 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
417
477
|
tmpFile,
|
|
418
478
|
];
|
|
419
479
|
|
|
420
|
-
if (
|
|
480
|
+
if (keepHeading === false) {
|
|
421
481
|
args.push("--no-keep-heading");
|
|
422
482
|
}
|
|
423
483
|
|
|
@@ -431,7 +491,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
431
491
|
}
|
|
432
492
|
|
|
433
493
|
if (result.exitCode !== 0) {
|
|
434
|
-
|
|
494
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
495
|
+
throw new Error(`Failed to replace section: ${errorMsg}`);
|
|
435
496
|
}
|
|
436
497
|
|
|
437
498
|
return {
|
|
@@ -478,10 +539,24 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
478
539
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
479
540
|
const cmd = await resolveInvarCommand();
|
|
480
541
|
|
|
542
|
+
// Validate required parameters
|
|
543
|
+
if (!params.file) {
|
|
544
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
545
|
+
}
|
|
546
|
+
if (!params.anchor) {
|
|
547
|
+
throw new Error("Missing required parameter: anchor (section path for insertion point)");
|
|
548
|
+
}
|
|
549
|
+
if (!params.content) {
|
|
550
|
+
throw new Error("Missing required parameter: content (content to insert)");
|
|
551
|
+
}
|
|
552
|
+
|
|
481
553
|
if (!isValidPath(params.file) || !isValidPath(params.anchor)) {
|
|
482
554
|
throw new Error("Invalid file or anchor path: contains unsafe characters or path traversal");
|
|
483
555
|
}
|
|
484
556
|
|
|
557
|
+
// Handle optional parameter with default
|
|
558
|
+
const position = params.position ?? "after";
|
|
559
|
+
|
|
485
560
|
// Write content to temporary file
|
|
486
561
|
const tmpFile = path.join(pi.cwd, `.invar-tmp-${Date.now()}.txt`);
|
|
487
562
|
|
|
@@ -498,8 +573,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
498
573
|
tmpFile,
|
|
499
574
|
];
|
|
500
575
|
|
|
501
|
-
if (
|
|
502
|
-
args.push("--position",
|
|
576
|
+
if (position !== "after") {
|
|
577
|
+
args.push("--position", position);
|
|
503
578
|
}
|
|
504
579
|
|
|
505
580
|
const result = await pi.exec(cmd.command, args, {
|
|
@@ -512,7 +587,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
512
587
|
}
|
|
513
588
|
|
|
514
589
|
if (result.exitCode !== 0) {
|
|
515
|
-
|
|
590
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
591
|
+
throw new Error(`Failed to insert content: ${errorMsg}`);
|
|
516
592
|
}
|
|
517
593
|
|
|
518
594
|
return {
|
|
@@ -556,13 +632,24 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
556
632
|
async execute(toolCallId, params, onUpdate, ctx, signal) {
|
|
557
633
|
const cmd = await resolveInvarCommand();
|
|
558
634
|
|
|
635
|
+
// Validate required parameters
|
|
636
|
+
if (!params.file) {
|
|
637
|
+
throw new Error("Missing required parameter: file (markdown file path)");
|
|
638
|
+
}
|
|
639
|
+
if (!params.section) {
|
|
640
|
+
throw new Error("Missing required parameter: section (section path or identifier)");
|
|
641
|
+
}
|
|
642
|
+
|
|
559
643
|
if (!isValidPath(params.file) || !isValidPath(params.section)) {
|
|
560
644
|
throw new Error("Invalid file or section path: contains unsafe characters or path traversal");
|
|
561
645
|
}
|
|
562
646
|
|
|
647
|
+
// Handle optional parameter with default
|
|
648
|
+
const includeChildren = params.children ?? true;
|
|
649
|
+
|
|
563
650
|
const args = [...cmd.args, "doc", "delete", params.file, params.section];
|
|
564
651
|
|
|
565
|
-
if (
|
|
652
|
+
if (includeChildren === false) {
|
|
566
653
|
args.push("--no-children");
|
|
567
654
|
}
|
|
568
655
|
|
|
@@ -576,7 +663,8 @@ const factory: CustomToolFactory = (pi) => {
|
|
|
576
663
|
}
|
|
577
664
|
|
|
578
665
|
if (result.exitCode !== 0) {
|
|
579
|
-
|
|
666
|
+
const errorMsg = result.stderr || result.stdout || "Unknown error";
|
|
667
|
+
throw new Error(`Failed to delete section: ${errorMsg}`);
|
|
580
668
|
}
|
|
581
669
|
|
|
582
670
|
return {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/patterns/typescript.md
RENAMED
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/templates/assessment.md.jinja
RENAMED
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/.claude/skills/invar-onboard/templates/roadmap.md.jinja
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/docs/history/research/cruxeval-quick-validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-61-functional-pattern-guidance.md
RENAMED
|
File without changes
|
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-62-proactive-reference-reading.md
RENAMED
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/DX-68-agent-behavior-optimization.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{invar_tools-1.15.2 → invar_tools-1.15.4}/docs/proposals/LX-01-multi-language-feasibility.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|