invar-tools 1.10.0__py3-none-any.whl → 1.12.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invar-tools
3
- Version: 1.10.0
3
+ Version: 1.12.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
@@ -24,7 +24,9 @@ Requires-Python: >=3.11
24
24
  Requires-Dist: crosshair-tool>=0.0.60
25
25
  Requires-Dist: hypothesis>=6.0
26
26
  Requires-Dist: invar-runtime>=1.0
27
+ Requires-Dist: jedi>=0.19
27
28
  Requires-Dist: jinja2>=3.0
29
+ Requires-Dist: markdown-it-py>=3.0
28
30
  Requires-Dist: mcp>=1.0
29
31
  Requires-Dist: pre-commit>=3.0
30
32
  Requires-Dist: pydantic>=2.0
@@ -145,7 +147,19 @@ Guard passed.
145
147
 
146
148
  ## 🚀 Quick Start
147
149
 
148
- > **Language Support:** Python (full), TypeScript (verification via Zod contracts).
150
+ ### Tool × Language Support
151
+
152
+ | Tool | Python | TypeScript | Notes |
153
+ |------|--------|------------|-------|
154
+ | `invar guard` | ✅ Full | ⚠️ Partial | TS: tsc + eslint + vitest |
155
+ | `invar sig` | ✅ Full | ✅ Full | TS: TS Compiler API |
156
+ | `invar map` | ✅ Full | ✅ Full | TS: With reference counts |
157
+ | `invar refs` | ✅ Full | ✅ Full | Cross-file reference finding |
158
+ | `invar doc *` | ✅ Full | ✅ Full | Language-agnostic |
159
+
160
+ **TypeScript Notes:**
161
+ - Requires Node.js + TypeScript (most TS projects have these)
162
+ - Falls back to regex parser if Node.js unavailable
149
163
 
150
164
  ### 📦 Two Packages, Different Purposes
151
165
 
@@ -178,6 +192,7 @@ uvx invar-tools init
178
192
  # Or quick setup (skip prompts)
179
193
  uvx invar-tools init --claude # Claude Code
180
194
  uvx invar-tools init --pi # Pi Coding Agent
195
+ uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
181
196
 
182
197
  # Add runtime contracts to your project
183
198
  pip install invar-runtime
@@ -301,14 +316,17 @@ function average(items: number[]): number {
301
316
 
302
317
  ### ✅ Solution 2: Multi-Layer Verification
303
318
 
304
- Guard provides fast feedback. Agent sees errors, fixes immediately:
319
+ Guard provides fast feedback **on top of standard type checking**. Agent sees errors, fixes immediately:
305
320
 
306
321
  | Layer | Tool | Speed | What It Catches |
307
322
  |-------|------|-------|-----------------|
323
+ | **Type Check*** | mypy (Python) / tsc (TypeScript) | ~1s | Type errors, missing annotations |
308
324
  | **Static** | Guard rules | ~0.5s | Architecture violations, missing contracts |
309
- | **Doctest** | pytest | ~2s | Example correctness |
310
- | **Property** | Hypothesis | ~10s | Edge cases via random inputs |
311
- | **Symbolic** | CrossHair | ~30s | Mathematical proof of contracts |
325
+ | **Doctest** | pytest / vitest | ~2s | Example correctness |
326
+ | **Property** | Hypothesis / fast-check | ~10s | Edge cases via random inputs |
327
+ | **Symbolic** | CrossHair / (TS: N/A) | ~30s | Mathematical proof of contracts |
328
+
329
+ <sup>* Requires separate installation: `pip install mypy` or configure TypeScript in your project</sup>
312
330
 
313
331
  ```
314
332
  ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌────────────┐
@@ -523,7 +541,7 @@ Cursor users get full verification via MCP:
523
541
  |----------------|---------|----------|
524
542
  | `INVAR.md` | Protocol for AI agents | Required |
525
543
  | `.invar/` | Config, context, examples | Required |
526
- | `.pre-commit-config.yaml` | Verification before commit | Optional |
544
+ | `.pre-commit-config.yaml` | Verification before commit (Ruff, mypy*, Guard) | Optional |
527
545
  | `src/core/`, `src/shell/` | Recommended structure | Optional |
528
546
  | `CLAUDE.md` | Agent instructions | Claude Code |
529
547
  | `.claude/skills/` | Workflow + extension skills | Claude Code |
@@ -532,6 +550,8 @@ Cursor users get full verification via MCP:
532
550
  | `.mcp.json` | MCP server config | Claude Code |
533
551
  | `AGENT.md` | Universal agent instructions | Other agents |
534
552
 
553
+ <sup>* mypy hook included in `.pre-commit-config.yaml` but requires: `pip install mypy`</sup>
554
+
535
555
  **Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
536
556
 
537
557
  **Recommended structure:**
@@ -584,7 +604,22 @@ These customizations are preserved when updating skills via `invar skill add`.
584
604
 
585
605
  ## 🔄 Legacy Project Migration
586
606
 
587
- For existing projects that want to adopt Invar's patterns, use the `/invar-onboard` skill:
607
+ ### Quick Start: MCP Tools Only
608
+
609
+ For projects that want Invar's MCP tools **without adopting the framework**:
610
+
611
+ ```bash
612
+ uvx invar-tools init --mcp-only
613
+ ```
614
+
615
+ This creates only `.mcp.json` — no INVAR.md, CLAUDE.md, or Core/Shell structure. Your AI agent gets access to:
616
+ - **Document tools** (`invar_doc_toc`, `invar_doc_read`, etc.)
617
+ - **Code navigation** (`invar_sig`, `invar_map`)
618
+ - **Basic verification** (`invar_guard` with minimal rules)
619
+
620
+ ### Full Adoption: `/invar-onboard`
621
+
622
+ For projects that want to fully adopt Invar's patterns, use the `/invar-onboard` skill:
588
623
 
589
624
  ```bash
590
625
  # Install the onboarding skill
@@ -785,9 +820,17 @@ rules = ["missing_contract", "shell_result"]
785
820
  | `invar guard --coverage` | Collect branch coverage from tests |
786
821
  | `invar init` | Initialize or update project (interactive) |
787
822
  | `invar init --claude` | Quick setup for Claude Code |
823
+ | `invar init --pi` | Quick setup for Pi agent |
824
+ | `invar init --mcp-only` | MCP tools only (no framework files) |
788
825
  | `invar uninstall` | Remove Invar from project (preserves user content) |
789
826
  | `invar sig <file>` | Show signatures and contracts |
790
827
  | `invar map` | Symbol map with reference counts |
828
+ | `invar doc toc <file>` | View document structure (headings) |
829
+ | `invar doc read <file> <section>` | Read specific section by slug/fuzzy/index |
830
+ | `invar doc find <pattern> <files>` | Search sections by title pattern |
831
+ | `invar doc replace <file> <section>` | Replace section content |
832
+ | `invar doc insert <file> <anchor>` | Insert content relative to section |
833
+ | `invar doc delete <file> <section>` | Delete section |
791
834
  | `invar rules` | List all rules with severity |
792
835
  | `invar test` | Property-based tests (Hypothesis) |
793
836
  | `invar verify` | Symbolic verification (CrossHair) |
@@ -805,6 +848,13 @@ rules = ["missing_contract", "shell_result"]
805
848
  | `invar_guard` | Smart multi-layer verification |
806
849
  | `invar_sig` | Extract signatures and contracts |
807
850
  | `invar_map` | Symbol map with reference counts |
851
+ | `invar_doc_toc` | Extract document structure (TOC) |
852
+ | `invar_doc_read` | Read specific section |
853
+ | `invar_doc_read_many` | Read multiple sections (batch) |
854
+ | `invar_doc_find` | Search sections by title pattern |
855
+ | `invar_doc_replace` | Replace section content |
856
+ | `invar_doc_insert` | Insert content relative to section |
857
+ | `invar_doc_delete` | Delete section |
808
858
 
809
859
  ---
810
860
 
@@ -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=Hlx411yQzk-W13OqXk3oljV04MC4PA_KgQuqAeZ4ESU,9694
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,9 +49,11 @@ 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/server.py,sha256=ay-w2YfSa1kTmBFx3x3jEgmNRC3NFEW0EYuZRt7M39w,12244
52
+ invar/mcp/handlers.py,sha256=b0LRWKMpu6lnjPV7SozH0cxKYJufVWy3eJhiAu3of-M,15947
53
+ invar/mcp/server.py,sha256=WmVNs2_AcOMbmp3tEgWR57hjqqJkMx3nV3z9fcNuSAA,20109
51
54
  invar/node_tools/MANIFEST,sha256=UwtO2AsQ-0UwskG6ZkE2kXqz_hdp-gzRTyp32-X22Mc,131
52
55
  invar/node_tools/__init__.py,sha256=HzILh3jtP28Lm2jZwss1SY65ECxbtw2J2uFpXQA6Y94,1740
56
+ invar/node_tools/ts-query.js,sha256=fEc_f0JT_Mb18dEoA4_vJoazvd7Lqv_rsed4eHSAbCg,13303
53
57
  invar/node_tools/fc-runner/cli.js,sha256=72_gIhvnx2peKITdzdnFWI5fzGaNTS3BcEqyS628cI0,243277
54
58
  invar/node_tools/quick-check/cli.js,sha256=dwV3hdJleFQga2cKUn3PPfQDvvujhzKdjQcIvWsKgM0,66196
55
59
  invar/node_tools/ts-analyzer/cli.js,sha256=SvZ6HyjmobpP8NAZqXFiy8BwH_t5Hb17Ytar_18udaQ,4092887
@@ -58,7 +62,8 @@ invar/shell/claude_hooks.py,sha256=I_2VEepwS0kW55lW7U--FPwpuJq5hAXECcyYCd9D-jM,1
58
62
  invar/shell/config.py,sha256=6-kbo6--SxfROXoyU-v7InSLR8f_U1Mar_xEOdCXFkY,17633
59
63
  invar/shell/contract_coverage.py,sha256=81OQkQqUVYUKytG5aiJyRK62gwh9UzbSG926vkvFTc8,12088
60
64
  invar/shell/coverage.py,sha256=m01o898IFIdBztEBQLwwL1Vt5PWrpUntO4lv4nWEkls,11344
61
- invar/shell/fs.py,sha256=dnoi2XEE7Vy1g9xtt3jzAoYZxGPBFB9KL98EcVL8gig,6052
65
+ invar/shell/doc_tools.py,sha256=16gvo_ay9-_EK6lX16WkiRGg4OfTAKK_i0ucQkE7lbI,15149
66
+ invar/shell/fs.py,sha256=ctqU-EX0NnKC4txudRCRpbWxWSgBZTInXMeOUnl3IM0,6196
62
67
  invar/shell/git.py,sha256=s6RQxEDQuLrmK3mru88EoYP8__4hiFW8AozlcxmY47E,2784
63
68
  invar/shell/guard_helpers.py,sha256=QeYgbW0lgUa9Z_RCjAMG7UJdiMzz5cW48Lb2u-qgQi8,15114
64
69
  invar/shell/guard_output.py,sha256=v3gG5P-_47nIFo8eAMKwdA_hLf2KZ0cQ-45Z6JjKp4w,12520
@@ -67,18 +72,21 @@ invar/shell/mutation.py,sha256=Lfyk2b8j8-hxAq-iwAgQeOhr7Ci6c5tRF1TXe3CxQCs,8914
67
72
  invar/shell/pattern_integration.py,sha256=pRcjfq3NvMW_tvQCnaXZnD1k5AVEWK8CYOE2jN6VTro,7842
68
73
  invar/shell/pi_hooks.py,sha256=ulZc1sP8mTRJTBsjwFHQzUgg-h8ajRIMp7iF1Y4UUtw,6885
69
74
  invar/shell/property_tests.py,sha256=N9JreyH5PqR89oF5yLcX7ZAV-Koyg5BKo-J05-GUPsA,9109
70
- invar/shell/skill_manager.py,sha256=o-2YSmLJ_PbNz3KK9aDLKuaS2qHtDD6DaaUpfFPCEDo,12213
75
+ invar/shell/py_refs.py,sha256=Vjz50lmt9prDBcBv4nkkODdiJ7_DKu5zO4UPZBjAfmM,4638
76
+ invar/shell/skill_manager.py,sha256=Mr7Mh9rxPSKSAOTJCAM5ZHiG5nfUf6KQVCuD4LBNHSI,12440
71
77
  invar/shell/subprocess_env.py,sha256=9oXl3eMEbzLsFEgMHqobEw6oW_wV0qMEP7pklwm58Pw,11453
72
78
  invar/shell/template_engine.py,sha256=eNKMz7R8g9Xp3_1TGx-QH137jf52E0u3KaVcnotu1Tg,12056
73
79
  invar/shell/templates.py,sha256=31f5ieoGeWU0qqfLJUMWnz0yyLa1FBc_sOz6UGzToqk,13884
74
80
  invar/shell/testing.py,sha256=rTNBH0Okh2qtG9ohSXOz487baQ2gXrWT3s_WECW3HJs,11143
81
+ invar/shell/ts_compiler.py,sha256=nA8brnOhThj9J_J3vAEGjDsM4NjbWQ_eX8Yf4pHPOgk,6672
75
82
  invar/shell/commands/__init__.py,sha256=MEkKwVyjI9DmkvBpJcuumXo2Pg_FFkfEr-Rr3nrAt7A,284
76
- invar/shell/commands/guard.py,sha256=kUMgLzhLw8JKLLMin39A0gNM2jLqkh2nZzudcsyRNoI,23571
83
+ invar/shell/commands/doc.py,sha256=SOLDoCXXGxx_JU0PKXlAIGEF36PzconHmmAtL-rM6D4,13819
84
+ invar/shell/commands/guard.py,sha256=p0kI63RUzC1OTh_YviviY6dz2bq_SoBksGOp2NyocQM,24512
77
85
  invar/shell/commands/hooks.py,sha256=W-SOnT4VQyUvXwipozkJwgEYfiOJGz7wksrbcdWegUg,2356
78
- invar/shell/commands/init.py,sha256=63ZuZ78KfDTI-lc5iaj9kVcGp2d1Pa1iZKprCh-L2Ys,17859
86
+ invar/shell/commands/init.py,sha256=-FZTYTwJr_NRoluAM4YwcseNju56GSxtnKVkqsXREPg,20461
79
87
  invar/shell/commands/merge.py,sha256=nuvKo8m32-OL-SCQlS4SLKmOZxQ3qj-1nGCx1Pgzifw,8183
80
88
  invar/shell/commands/mutate.py,sha256=GwemiO6LlbGCBEQsBFnzZuKhF-wIMEl79GAMnKUWc8U,5765
81
- invar/shell/commands/perception.py,sha256=MDJvjLcrT7ZjhT4L1zjaMoQpjQaHe9qNWHdy-7yECrQ,8524
89
+ invar/shell/commands/perception.py,sha256=HewSv6Kv8Gw2UQqkGY2rP5YKlnwyC3LBrQ2hFVXXw30,19304
82
90
  invar/shell/commands/skill.py,sha256=oKVyaxQ_LK28FpJhRpBDpXcpRdUBK3n6rC0qD77ax1M,5803
83
91
  invar/shell/commands/sync_self.py,sha256=nmqBry7V2_enKwy2zzHg8UoedZNicLe3yKDhjmBeZ68,3880
84
92
  invar/shell/commands/template_sync.py,sha256=aNWyFPMFT7pSwHrvwGCqcKAwb4dp7S9tvZzy9H4gAnw,16094
@@ -88,8 +96,8 @@ invar/shell/commands/update.py,sha256=-NNQQScEb_0bV1B8YFxTjpUECk9c8dGAiNVRc64nWh
88
96
  invar/shell/prove/__init__.py,sha256=ZqlbmyMFJf6yAle8634jFuPRv8wNvHps8loMlOJyf8A,240
89
97
  invar/shell/prove/accept.py,sha256=cnY_6jzU1EBnpLF8-zWUWcXiSXtCwxPsXEYXsSVPG38,3717
90
98
  invar/shell/prove/cache.py,sha256=jbNdrvfLjvK7S0iqugErqeabb4YIbQuwIlcSRyCKbcg,4105
91
- invar/shell/prove/crosshair.py,sha256=4Z_iIYBlkp-I6FqSYZa89wWB09V4Ouw2PduYhTn6rfw,16525
92
- invar/shell/prove/guard_ts.py,sha256=3_xvuDYYzbusRkHAKkRG86Oz-j9JDlN4y6jH_dF2kQE,31431
99
+ invar/shell/prove/crosshair.py,sha256=XhJDsQWIriX9SuqeflUYvJgp9gJTDH7I7Uka6zjNzZ0,16734
100
+ invar/shell/prove/guard_ts.py,sha256=M285vnaKGC3Dokyu7PrjlNk-sT1TP8H821fz5K4CL8c,31717
93
101
  invar/shell/prove/hypothesis.py,sha256=QUclOOUg_VB6wbmHw8O2EPiL5qBOeBRqQeM04AVuLw0,9880
94
102
  invar/templates/CLAUDE.md.template,sha256=eaGU3SyRO_NEifw5b26k3srgQH4jyeujjCJ-HbM36_w,4913
95
103
  invar/templates/__init__.py,sha256=cb3ht8KPK5oBn5oG6HsTznujmo9WriJ_P--fVxJwycc,45
@@ -119,6 +127,7 @@ invar/templates/examples/typescript/README.md,sha256=I6kVTJAk6wqb21eC09hyOZXRP74
119
127
  invar/templates/examples/typescript/contracts.ts,sha256=X6EeNUAurw9MHJlHPDos_JtnScMu2aDMSkveIaA4wHs,4597
120
128
  invar/templates/examples/typescript/core_shell.ts,sha256=VuPl0xmn_s6pA7ZJtq0zNjXzK_DRmq3LexwTS8MEqnQ,11267
121
129
  invar/templates/examples/typescript/functional.ts,sha256=bQHfl0EYDC_RziRQLJBgPNBGhWBBO7SVSVchqBJUetM,17347
130
+ invar/templates/examples/typescript/patterns.md,sha256=rlZ6IOC8iYUQzIXaW7fUf95OQbeWPWSjQXDDJNoU05E,4859
122
131
  invar/templates/examples/typescript/workflow.md,sha256=5byADjA3WgOgiDbkEtVRKKGvlhvu3EbFCzqEg9lEV7k,2764
123
132
  invar/templates/hooks/PostToolUse.sh.jinja,sha256=JHJGMdF3xp2qEqkPC9GaLp0NCa5gdRzqAmgRy4IldBg,3428
124
133
  invar/templates/hooks/PreToolUse.sh.jinja,sha256=tZb-FGFxOBtTprUfeChau7rZOMPII69_5HSF-i_WD4Q,3558
@@ -149,7 +158,7 @@ invar/templates/protocol/universal/session.md,sha256=bOaHfu-1QsCXaNyL-412W6b0YFu
149
158
  invar/templates/protocol/universal/six-laws.md,sha256=15NHyDJhOlTU22FH9xhuEtrMGI3N5SyUCUnjq_0HCco,530
150
159
  invar/templates/protocol/universal/usbv.md,sha256=WlAxDQ27dlNDale_HeusIjEiCdYSXXaFeO4ed_BiL0Q,659
151
160
  invar/templates/protocol/universal/visible-workflow.md,sha256=nw3_Z3ZbEv4fjpgOMAZX2DNpYPvSJshLQ6aZfIfrrvA,726
152
- invar/templates/skills/develop/SKILL.md.jinja,sha256=9uc6zZIKYsNud2ACcah3NANkn9WOS_ou46tGTEpAOlc,13875
161
+ invar/templates/skills/develop/SKILL.md.jinja,sha256=gTS3jTalTV6tnvKqiS4wUJzq4MLNO9VC_m50iVSJj70,17072
153
162
  invar/templates/skills/extensions/_registry.yaml,sha256=T0Fkqg8ZKzlyQeoOcGtUsZRNnIyisxcZr_l6woKWBzY,2030
154
163
  invar/templates/skills/extensions/acceptance/SKILL.md,sha256=-0pRJTBm6Jyo__KpN32ixNhNbuWUZDSMCDA6RXGnNiE,11719
155
164
  invar/templates/skills/extensions/invar-onboard/SKILL.md,sha256=wFXlicF6JJUSLSB0YYP1cKO1cuseuAdOcqLsyJX0bes,11575
@@ -163,11 +172,11 @@ invar/templates/skills/extensions/security/patterns/python.yaml,sha256=osyR8mWiy
163
172
  invar/templates/skills/extensions/security/patterns/typescript.yaml,sha256=qDEg-sxSE63Bis2IZG1y4L8m8g2ZYkC29o6t-J_LmUo,5508
164
173
  invar/templates/skills/investigate/SKILL.md.jinja,sha256=cp6TBEixBYh1rLeeHOR1yqEnFqv1NZYePORMnavLkQI,3231
165
174
  invar/templates/skills/propose/SKILL.md.jinja,sha256=6BuKiCqO1AEu3VtzMHy1QWGqr_xqG9eJlhbsKT4jev4,3463
166
- invar/templates/skills/review/SKILL.md.jinja,sha256=063SBCTjqK6uCrpk1wiTe1amQovXXoZCIHUU6zvCOi0,24066
167
- invar_tools-1.10.0.dist-info/METADATA,sha256=3ewjNnpAtkifPw5JdLdi33wRSjFzd-cncel-00dmy8s,26025
168
- invar_tools-1.10.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
169
- invar_tools-1.10.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
170
- invar_tools-1.10.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
171
- invar_tools-1.10.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
172
- invar_tools-1.10.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
173
- invar_tools-1.10.0.dist-info/RECORD,,
175
+ invar/templates/skills/review/SKILL.md.jinja,sha256=ET5mbdSe_eKgJbi2LbgFC-z1aviKcHOBw7J5Q28fr4U,14105
176
+ invar_tools-1.12.0.dist-info/METADATA,sha256=jpbC0FFokpDTexuAf5nodUMsRM46nU5-ZC0SmVVN5cQ,28409
177
+ invar_tools-1.12.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
178
+ invar_tools-1.12.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
179
+ invar_tools-1.12.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
180
+ invar_tools-1.12.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
181
+ invar_tools-1.12.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
182
+ invar_tools-1.12.0.dist-info/RECORD,,