invar-tools 1.10.0__py3-none-any.whl → 1.11.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- invar/core/doc_edit.py +187 -0
- invar/core/doc_parser.py +563 -0
- invar/core/ts_sig_parser.py +6 -3
- invar/mcp/handlers.py +408 -0
- invar/mcp/server.py +288 -143
- invar/shell/commands/doc.py +409 -0
- invar/shell/commands/guard.py +5 -0
- invar/shell/commands/init.py +72 -13
- invar/shell/doc_tools.py +459 -0
- invar/shell/fs.py +15 -14
- invar/shell/prove/crosshair.py +3 -0
- invar/shell/prove/guard_ts.py +13 -10
- invar/shell/skill_manager.py +17 -15
- invar/templates/skills/develop/SKILL.md.jinja +46 -0
- invar/templates/skills/review/SKILL.md.jinja +205 -493
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/METADATA +34 -2
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/RECORD +22 -17
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/WHEEL +0 -0
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/entry_points.txt +0 -0
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/licenses/LICENSE +0 -0
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/licenses/LICENSE-GPL +0 -0
- {invar_tools-1.10.0.dist-info → invar_tools-1.11.0.dist-info}/licenses/NOTICE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: AI-native software engineering tools with design-by-contract verification
|
|
5
5
|
Project-URL: Homepage, https://github.com/tefx/invar
|
|
6
6
|
Project-URL: Documentation, https://github.com/tefx/invar#readme
|
|
@@ -25,6 +25,7 @@ Requires-Dist: crosshair-tool>=0.0.60
|
|
|
25
25
|
Requires-Dist: hypothesis>=6.0
|
|
26
26
|
Requires-Dist: invar-runtime>=1.0
|
|
27
27
|
Requires-Dist: jinja2>=3.0
|
|
28
|
+
Requires-Dist: markdown-it-py>=3.0
|
|
28
29
|
Requires-Dist: mcp>=1.0
|
|
29
30
|
Requires-Dist: pre-commit>=3.0
|
|
30
31
|
Requires-Dist: pydantic>=2.0
|
|
@@ -178,6 +179,7 @@ uvx invar-tools init
|
|
|
178
179
|
# Or quick setup (skip prompts)
|
|
179
180
|
uvx invar-tools init --claude # Claude Code
|
|
180
181
|
uvx invar-tools init --pi # Pi Coding Agent
|
|
182
|
+
uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
|
|
181
183
|
|
|
182
184
|
# Add runtime contracts to your project
|
|
183
185
|
pip install invar-runtime
|
|
@@ -584,7 +586,22 @@ These customizations are preserved when updating skills via `invar skill add`.
|
|
|
584
586
|
|
|
585
587
|
## 🔄 Legacy Project Migration
|
|
586
588
|
|
|
587
|
-
|
|
589
|
+
### Quick Start: MCP Tools Only
|
|
590
|
+
|
|
591
|
+
For projects that want Invar's MCP tools **without adopting the framework**:
|
|
592
|
+
|
|
593
|
+
```bash
|
|
594
|
+
uvx invar-tools init --mcp-only
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
This creates only `.mcp.json` — no INVAR.md, CLAUDE.md, or Core/Shell structure. Your AI agent gets access to:
|
|
598
|
+
- **Document tools** (`invar_doc_toc`, `invar_doc_read`, etc.)
|
|
599
|
+
- **Code navigation** (`invar_sig`, `invar_map`)
|
|
600
|
+
- **Basic verification** (`invar_guard` with minimal rules)
|
|
601
|
+
|
|
602
|
+
### Full Adoption: `/invar-onboard`
|
|
603
|
+
|
|
604
|
+
For projects that want to fully adopt Invar's patterns, use the `/invar-onboard` skill:
|
|
588
605
|
|
|
589
606
|
```bash
|
|
590
607
|
# Install the onboarding skill
|
|
@@ -785,9 +802,17 @@ rules = ["missing_contract", "shell_result"]
|
|
|
785
802
|
| `invar guard --coverage` | Collect branch coverage from tests |
|
|
786
803
|
| `invar init` | Initialize or update project (interactive) |
|
|
787
804
|
| `invar init --claude` | Quick setup for Claude Code |
|
|
805
|
+
| `invar init --pi` | Quick setup for Pi agent |
|
|
806
|
+
| `invar init --mcp-only` | MCP tools only (no framework files) |
|
|
788
807
|
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
789
808
|
| `invar sig <file>` | Show signatures and contracts |
|
|
790
809
|
| `invar map` | Symbol map with reference counts |
|
|
810
|
+
| `invar doc toc <file>` | View document structure (headings) |
|
|
811
|
+
| `invar doc read <file> <section>` | Read specific section by slug/fuzzy/index |
|
|
812
|
+
| `invar doc find <pattern> <files>` | Search sections by title pattern |
|
|
813
|
+
| `invar doc replace <file> <section>` | Replace section content |
|
|
814
|
+
| `invar doc insert <file> <anchor>` | Insert content relative to section |
|
|
815
|
+
| `invar doc delete <file> <section>` | Delete section |
|
|
791
816
|
| `invar rules` | List all rules with severity |
|
|
792
817
|
| `invar test` | Property-based tests (Hypothesis) |
|
|
793
818
|
| `invar verify` | Symbolic verification (CrossHair) |
|
|
@@ -805,6 +830,13 @@ rules = ["missing_contract", "shell_result"]
|
|
|
805
830
|
| `invar_guard` | Smart multi-layer verification |
|
|
806
831
|
| `invar_sig` | Extract signatures and contracts |
|
|
807
832
|
| `invar_map` | Symbol map with reference counts |
|
|
833
|
+
| `invar_doc_toc` | Extract document structure (TOC) |
|
|
834
|
+
| `invar_doc_read` | Read specific section |
|
|
835
|
+
| `invar_doc_read_many` | Read multiple sections (batch) |
|
|
836
|
+
| `invar_doc_find` | Search sections by title pattern |
|
|
837
|
+
| `invar_doc_replace` | Replace section content |
|
|
838
|
+
| `invar_doc_insert` | Insert content relative to section |
|
|
839
|
+
| `invar_doc_delete` | Delete section |
|
|
808
840
|
|
|
809
841
|
---
|
|
810
842
|
|
|
@@ -2,6 +2,8 @@ invar/__init__.py,sha256=E-Mg9DG6qFzjP8D5TEkmy2ponvR99Yfn96RVJggAr64,1682
|
|
|
2
2
|
invar/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
invar/core/__init__.py,sha256=01TgQ2bqTFV4VFdksfqXYPa2WUqo-DpUWUkEcIUXFb4,218
|
|
4
4
|
invar/core/contracts.py,sha256=SOyF1KeJ6hrEwfQ09UzMt881OJKDXRbPTslKA6HzdKg,19085
|
|
5
|
+
invar/core/doc_edit.py,sha256=kLBkSQMFiXKdZMlQYAy-pzld1f1p2UFKGpKVVJo8Nes,6690
|
|
6
|
+
invar/core/doc_parser.py,sha256=yzZKzgr9myUiiRGtRidT2tubrs4-omtGlTwbUkSKhoM,18197
|
|
5
7
|
invar/core/entry_points.py,sha256=1p6GRGTp9kA9spNkGKidFLlzLPheh6JO2XFb68Cr0sE,12209
|
|
6
8
|
invar/core/extraction.py,sha256=mScqEMEEQdsd-Z0jx9g3scK6Z1vI9l-ESjggXPIWHZ4,6112
|
|
7
9
|
invar/core/format_specs.py,sha256=P299aRHFMXyow8STwsvaT6Bg2ALPs2wSy7SByiRZZ-A,5610
|
|
@@ -33,7 +35,7 @@ invar/core/template_parser.py,sha256=vH3H8OX55scZ1hWh3xoA8oJMhgleKufCOhkTvsSuu_4
|
|
|
33
35
|
invar/core/timeout_inference.py,sha256=BS2fJGmwOrLpYZUku4qrizgNDSIXVLFBslW-6sRAvpc,3451
|
|
34
36
|
invar/core/trivial_detection.py,sha256=KYP8jJb7QDeusAxFdX5NAML_H0NL5wLgMeBWDQmNqfU,6086
|
|
35
37
|
invar/core/ts_parsers.py,sha256=gXvLgb141gD8VAtiW4T1aaRnaSv10BEm0XYqArYIN00,8743
|
|
36
|
-
invar/core/ts_sig_parser.py,sha256=
|
|
38
|
+
invar/core/ts_sig_parser.py,sha256=_lUNfArFPILpENo-1dqmPY1qoVmcfAehv2Tva3r6dzw,9931
|
|
37
39
|
invar/core/utils.py,sha256=PyW8dcTLUEFD81xcvkz-LNnCwjIQefn08OUh23fM_Po,14266
|
|
38
40
|
invar/core/verification_routing.py,sha256=_jXi1txFCcUdnB3-Yavtuyk8N-XhEO_Vu_051Vuz27Y,5020
|
|
39
41
|
invar/core/patterns/__init__.py,sha256=79a3ucN0BI54RnIOe49lngKASpADygs1hll9ROCrP6s,1429
|
|
@@ -47,7 +49,8 @@ invar/core/patterns/registry.py,sha256=2rz0wWDRarMkuHN-qM_ZrT3qeGFDSKMABvRvPNZxQ
|
|
|
47
49
|
invar/core/patterns/types.py,sha256=ULAlWuAdmO6CFcEDjTrWBfzNTBsnomAl2d25tR11ihU,5506
|
|
48
50
|
invar/mcp/__init__.py,sha256=n3S7QwMjSMqOMT8cI2jf9E0yZPjKmBOJyIYhq4WZ8TQ,226
|
|
49
51
|
invar/mcp/__main__.py,sha256=ZcIT2U6xUyGOWucl4jq422BDE3lRLjqyxb9pFylRBdk,219
|
|
50
|
-
invar/mcp/
|
|
52
|
+
invar/mcp/handlers.py,sha256=usPgYvNLB3nE1G8gkA3LtKKNQ4k_eXQEr4GueA-8NSw,14939
|
|
53
|
+
invar/mcp/server.py,sha256=nDEHhF-eDkyNOX-y-wsZDa6Ed2nvjk5HtIC9SIbi7z0,18491
|
|
51
54
|
invar/node_tools/MANIFEST,sha256=UwtO2AsQ-0UwskG6ZkE2kXqz_hdp-gzRTyp32-X22Mc,131
|
|
52
55
|
invar/node_tools/__init__.py,sha256=HzILh3jtP28Lm2jZwss1SY65ECxbtw2J2uFpXQA6Y94,1740
|
|
53
56
|
invar/node_tools/fc-runner/cli.js,sha256=72_gIhvnx2peKITdzdnFWI5fzGaNTS3BcEqyS628cI0,243277
|
|
@@ -58,7 +61,8 @@ invar/shell/claude_hooks.py,sha256=I_2VEepwS0kW55lW7U--FPwpuJq5hAXECcyYCd9D-jM,1
|
|
|
58
61
|
invar/shell/config.py,sha256=6-kbo6--SxfROXoyU-v7InSLR8f_U1Mar_xEOdCXFkY,17633
|
|
59
62
|
invar/shell/contract_coverage.py,sha256=81OQkQqUVYUKytG5aiJyRK62gwh9UzbSG926vkvFTc8,12088
|
|
60
63
|
invar/shell/coverage.py,sha256=m01o898IFIdBztEBQLwwL1Vt5PWrpUntO4lv4nWEkls,11344
|
|
61
|
-
invar/shell/
|
|
64
|
+
invar/shell/doc_tools.py,sha256=16gvo_ay9-_EK6lX16WkiRGg4OfTAKK_i0ucQkE7lbI,15149
|
|
65
|
+
invar/shell/fs.py,sha256=ctqU-EX0NnKC4txudRCRpbWxWSgBZTInXMeOUnl3IM0,6196
|
|
62
66
|
invar/shell/git.py,sha256=s6RQxEDQuLrmK3mru88EoYP8__4hiFW8AozlcxmY47E,2784
|
|
63
67
|
invar/shell/guard_helpers.py,sha256=QeYgbW0lgUa9Z_RCjAMG7UJdiMzz5cW48Lb2u-qgQi8,15114
|
|
64
68
|
invar/shell/guard_output.py,sha256=v3gG5P-_47nIFo8eAMKwdA_hLf2KZ0cQ-45Z6JjKp4w,12520
|
|
@@ -67,15 +71,16 @@ invar/shell/mutation.py,sha256=Lfyk2b8j8-hxAq-iwAgQeOhr7Ci6c5tRF1TXe3CxQCs,8914
|
|
|
67
71
|
invar/shell/pattern_integration.py,sha256=pRcjfq3NvMW_tvQCnaXZnD1k5AVEWK8CYOE2jN6VTro,7842
|
|
68
72
|
invar/shell/pi_hooks.py,sha256=ulZc1sP8mTRJTBsjwFHQzUgg-h8ajRIMp7iF1Y4UUtw,6885
|
|
69
73
|
invar/shell/property_tests.py,sha256=N9JreyH5PqR89oF5yLcX7ZAV-Koyg5BKo-J05-GUPsA,9109
|
|
70
|
-
invar/shell/skill_manager.py,sha256=
|
|
74
|
+
invar/shell/skill_manager.py,sha256=Mr7Mh9rxPSKSAOTJCAM5ZHiG5nfUf6KQVCuD4LBNHSI,12440
|
|
71
75
|
invar/shell/subprocess_env.py,sha256=9oXl3eMEbzLsFEgMHqobEw6oW_wV0qMEP7pklwm58Pw,11453
|
|
72
76
|
invar/shell/template_engine.py,sha256=eNKMz7R8g9Xp3_1TGx-QH137jf52E0u3KaVcnotu1Tg,12056
|
|
73
77
|
invar/shell/templates.py,sha256=31f5ieoGeWU0qqfLJUMWnz0yyLa1FBc_sOz6UGzToqk,13884
|
|
74
78
|
invar/shell/testing.py,sha256=rTNBH0Okh2qtG9ohSXOz487baQ2gXrWT3s_WECW3HJs,11143
|
|
75
79
|
invar/shell/commands/__init__.py,sha256=MEkKwVyjI9DmkvBpJcuumXo2Pg_FFkfEr-Rr3nrAt7A,284
|
|
76
|
-
invar/shell/commands/
|
|
80
|
+
invar/shell/commands/doc.py,sha256=SOLDoCXXGxx_JU0PKXlAIGEF36PzconHmmAtL-rM6D4,13819
|
|
81
|
+
invar/shell/commands/guard.py,sha256=-QYR2wc-KjD6VL9tb9Ih6gr5LFX-H7_H843TX5qR5wk,23686
|
|
77
82
|
invar/shell/commands/hooks.py,sha256=W-SOnT4VQyUvXwipozkJwgEYfiOJGz7wksrbcdWegUg,2356
|
|
78
|
-
invar/shell/commands/init.py,sha256
|
|
83
|
+
invar/shell/commands/init.py,sha256=-FZTYTwJr_NRoluAM4YwcseNju56GSxtnKVkqsXREPg,20461
|
|
79
84
|
invar/shell/commands/merge.py,sha256=nuvKo8m32-OL-SCQlS4SLKmOZxQ3qj-1nGCx1Pgzifw,8183
|
|
80
85
|
invar/shell/commands/mutate.py,sha256=GwemiO6LlbGCBEQsBFnzZuKhF-wIMEl79GAMnKUWc8U,5765
|
|
81
86
|
invar/shell/commands/perception.py,sha256=MDJvjLcrT7ZjhT4L1zjaMoQpjQaHe9qNWHdy-7yECrQ,8524
|
|
@@ -88,8 +93,8 @@ invar/shell/commands/update.py,sha256=-NNQQScEb_0bV1B8YFxTjpUECk9c8dGAiNVRc64nWh
|
|
|
88
93
|
invar/shell/prove/__init__.py,sha256=ZqlbmyMFJf6yAle8634jFuPRv8wNvHps8loMlOJyf8A,240
|
|
89
94
|
invar/shell/prove/accept.py,sha256=cnY_6jzU1EBnpLF8-zWUWcXiSXtCwxPsXEYXsSVPG38,3717
|
|
90
95
|
invar/shell/prove/cache.py,sha256=jbNdrvfLjvK7S0iqugErqeabb4YIbQuwIlcSRyCKbcg,4105
|
|
91
|
-
invar/shell/prove/crosshair.py,sha256=
|
|
92
|
-
invar/shell/prove/guard_ts.py,sha256=
|
|
96
|
+
invar/shell/prove/crosshair.py,sha256=XhJDsQWIriX9SuqeflUYvJgp9gJTDH7I7Uka6zjNzZ0,16734
|
|
97
|
+
invar/shell/prove/guard_ts.py,sha256=M285vnaKGC3Dokyu7PrjlNk-sT1TP8H821fz5K4CL8c,31717
|
|
93
98
|
invar/shell/prove/hypothesis.py,sha256=QUclOOUg_VB6wbmHw8O2EPiL5qBOeBRqQeM04AVuLw0,9880
|
|
94
99
|
invar/templates/CLAUDE.md.template,sha256=eaGU3SyRO_NEifw5b26k3srgQH4jyeujjCJ-HbM36_w,4913
|
|
95
100
|
invar/templates/__init__.py,sha256=cb3ht8KPK5oBn5oG6HsTznujmo9WriJ_P--fVxJwycc,45
|
|
@@ -149,7 +154,7 @@ invar/templates/protocol/universal/session.md,sha256=bOaHfu-1QsCXaNyL-412W6b0YFu
|
|
|
149
154
|
invar/templates/protocol/universal/six-laws.md,sha256=15NHyDJhOlTU22FH9xhuEtrMGI3N5SyUCUnjq_0HCco,530
|
|
150
155
|
invar/templates/protocol/universal/usbv.md,sha256=WlAxDQ27dlNDale_HeusIjEiCdYSXXaFeO4ed_BiL0Q,659
|
|
151
156
|
invar/templates/protocol/universal/visible-workflow.md,sha256=nw3_Z3ZbEv4fjpgOMAZX2DNpYPvSJshLQ6aZfIfrrvA,726
|
|
152
|
-
invar/templates/skills/develop/SKILL.md.jinja,sha256=
|
|
157
|
+
invar/templates/skills/develop/SKILL.md.jinja,sha256=gTS3jTalTV6tnvKqiS4wUJzq4MLNO9VC_m50iVSJj70,17072
|
|
153
158
|
invar/templates/skills/extensions/_registry.yaml,sha256=T0Fkqg8ZKzlyQeoOcGtUsZRNnIyisxcZr_l6woKWBzY,2030
|
|
154
159
|
invar/templates/skills/extensions/acceptance/SKILL.md,sha256=-0pRJTBm6Jyo__KpN32ixNhNbuWUZDSMCDA6RXGnNiE,11719
|
|
155
160
|
invar/templates/skills/extensions/invar-onboard/SKILL.md,sha256=wFXlicF6JJUSLSB0YYP1cKO1cuseuAdOcqLsyJX0bes,11575
|
|
@@ -163,11 +168,11 @@ invar/templates/skills/extensions/security/patterns/python.yaml,sha256=osyR8mWiy
|
|
|
163
168
|
invar/templates/skills/extensions/security/patterns/typescript.yaml,sha256=qDEg-sxSE63Bis2IZG1y4L8m8g2ZYkC29o6t-J_LmUo,5508
|
|
164
169
|
invar/templates/skills/investigate/SKILL.md.jinja,sha256=cp6TBEixBYh1rLeeHOR1yqEnFqv1NZYePORMnavLkQI,3231
|
|
165
170
|
invar/templates/skills/propose/SKILL.md.jinja,sha256=6BuKiCqO1AEu3VtzMHy1QWGqr_xqG9eJlhbsKT4jev4,3463
|
|
166
|
-
invar/templates/skills/review/SKILL.md.jinja,sha256=
|
|
167
|
-
invar_tools-1.
|
|
168
|
-
invar_tools-1.
|
|
169
|
-
invar_tools-1.
|
|
170
|
-
invar_tools-1.
|
|
171
|
-
invar_tools-1.
|
|
172
|
-
invar_tools-1.
|
|
173
|
-
invar_tools-1.
|
|
171
|
+
invar/templates/skills/review/SKILL.md.jinja,sha256=ET5mbdSe_eKgJbi2LbgFC-z1aviKcHOBw7J5Q28fr4U,14105
|
|
172
|
+
invar_tools-1.11.0.dist-info/METADATA,sha256=ZqSNbqNPK1MeTHJ-dEOEqR1HCJfJeDrMIkalsjef59w,27504
|
|
173
|
+
invar_tools-1.11.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
174
|
+
invar_tools-1.11.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
|
|
175
|
+
invar_tools-1.11.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
|
|
176
|
+
invar_tools-1.11.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
|
|
177
|
+
invar_tools-1.11.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
|
|
178
|
+
invar_tools-1.11.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|