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