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