pari-cli 0.1.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.
Files changed (81) hide show
  1. pari/__init__.py +3 -0
  2. pari/agent/__init__.py +14 -0
  3. pari/agent/loop.py +35 -0
  4. pari/agent/reflection.py +39 -0
  5. pari/agent/runtime.py +91 -0
  6. pari/agent/subagent.py +34 -0
  7. pari/cli.py +132 -0
  8. pari/config.py +23 -0
  9. pari/context/__init__.py +15 -0
  10. pari/context/cache.py +15 -0
  11. pari/context/chunks.py +40 -0
  12. pari/context/compaction.py +21 -0
  13. pari/context/epoch.py +32 -0
  14. pari/context/warmer.py +32 -0
  15. pari/edit/__init__.py +20 -0
  16. pari/edit/cascade.py +22 -0
  17. pari/edit/diff.py +8 -0
  18. pari/edit/dmp.py +15 -0
  19. pari/edit/exact.py +37 -0
  20. pari/edit/git_osr.py +14 -0
  21. pari/edit/indenter.py +12 -0
  22. pari/eval/__init__.py +14 -0
  23. pari/eval/judge.py +21 -0
  24. pari/eval/logging.py +19 -0
  25. pari/eval/metrics.py +22 -0
  26. pari/eval/runner.py +34 -0
  27. pari/fs/__init__.py +16 -0
  28. pari/fs/atomic.py +53 -0
  29. pari/fs/path.py +28 -0
  30. pari/fs/queue.py +22 -0
  31. pari/intelligence/__init__.py +15 -0
  32. pari/intelligence/ast.py +25 -0
  33. pari/intelligence/cache.py +21 -0
  34. pari/intelligence/ppr.py +21 -0
  35. pari/intelligence/repomap.py +21 -0
  36. pari/intelligence/search.py +33 -0
  37. pari/output/__init__.py +14 -0
  38. pari/output/parser.py +14 -0
  39. pari/output/spooler.py +33 -0
  40. pari/output/truncation.py +20 -0
  41. pari/providers/__init__.py +24 -0
  42. pari/providers/anthropic.py +23 -0
  43. pari/providers/base.py +56 -0
  44. pari/providers/deepseek.py +24 -0
  45. pari/providers/mock.py +46 -0
  46. pari/providers/ollama.py +25 -0
  47. pari/providers/openai.py +23 -0
  48. pari/routing/__init__.py +16 -0
  49. pari/routing/anti_verbosity.py +13 -0
  50. pari/routing/classifier.py +24 -0
  51. pari/routing/router.py +23 -0
  52. pari/sandbox/__init__.py +16 -0
  53. pari/sandbox/base.py +74 -0
  54. pari/sandbox/bwrap.py +39 -0
  55. pari/sandbox/dispatcher.py +31 -0
  56. pari/sandbox/e2b.py +32 -0
  57. pari/sandbox/process.py +38 -0
  58. pari/sandbox/seatbelt.py +32 -0
  59. pari/session/__init__.py +15 -0
  60. pari/session/checkpoint.py +24 -0
  61. pari/session/dag.py +34 -0
  62. pari/session/events.py +50 -0
  63. pari/session/logger.py +41 -0
  64. pari/session/undo.py +99 -0
  65. pari/tools/__init__.py +14 -0
  66. pari/tools/base.py +35 -0
  67. pari/tools/bash.py +24 -0
  68. pari/tools/fs.py +53 -0
  69. pari/tools/registry.py +36 -0
  70. pari/tools/search.py +38 -0
  71. pari/tui/__init__.py +28 -0
  72. pari/tui/app.py +355 -0
  73. pari/tui/commands.py +45 -0
  74. pari/tui/diff_view.py +17 -0
  75. pari/tui/status.py +65 -0
  76. pari_cli-0.1.0.dist-info/METADATA +167 -0
  77. pari_cli-0.1.0.dist-info/RECORD +81 -0
  78. pari_cli-0.1.0.dist-info/WHEEL +5 -0
  79. pari_cli-0.1.0.dist-info/entry_points.txt +2 -0
  80. pari_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
  81. pari_cli-0.1.0.dist-info/top_level.txt +1 -0
pari/tui/status.py ADDED
@@ -0,0 +1,65 @@
1
+ """PARI Layer 9: Real-time Cost Meter & Status Tracker.
2
+
3
+ Architectural Purpose:
4
+ Displays transparent, continuous token consumption and estimated USD cost
5
+ directly in the terminal status bar so developers never suffer billing surprises.
6
+ """
7
+
8
+ from dataclasses import dataclass
9
+ from typing import Dict, Tuple
10
+
11
+
12
+ @dataclass
13
+ class TokenUsage:
14
+ input_tokens: int = 0
15
+ output_tokens: int = 0
16
+ cached_tokens: int = 0
17
+
18
+ @property
19
+ def total_tokens(self) -> int:
20
+ return self.input_tokens + self.output_tokens + self.cached_tokens
21
+
22
+
23
+ class CostMeter:
24
+ """Calculates and tracks real-time USD cost based on model pricing tiers."""
25
+
26
+ # Pricing per million tokens: (input_per_m, output_per_m, cache_read_per_m)
27
+ PRICING_TIERS: Dict[str, Tuple[float, float, float]] = {
28
+ "claude-3-7-sonnet": (3.00, 15.00, 0.30),
29
+ "claude-3-5-sonnet": (3.00, 15.00, 0.30),
30
+ "gpt-4o": (2.50, 10.00, 1.25),
31
+ "pari-core": (3.00, 15.00, 0.30),
32
+ }
33
+
34
+ def __init__(self, model_family: str = "pari-core"):
35
+ self.model_family = model_family.lower()
36
+ self.usage = TokenUsage()
37
+
38
+ def add_usage(self, in_tokens: int, out_tokens: int, cached: int = 0) -> None:
39
+ """Record token consumption."""
40
+ self.usage.input_tokens += max(0, in_tokens)
41
+ self.usage.output_tokens += max(0, out_tokens)
42
+ self.usage.cached_tokens += max(0, cached)
43
+
44
+ def calculate_cost_usd(self) -> float:
45
+ """Compute estimated USD cost."""
46
+ rates = self.PRICING_TIERS.get(self.model_family, self.PRICING_TIERS["pari-core"])
47
+ in_cost = (self.usage.input_tokens / 1_000_000.0) * rates[0]
48
+ out_cost = (self.usage.output_tokens / 1_000_000.0) * rates[1]
49
+ cache_cost = (self.usage.cached_tokens / 1_000_000.0) * rates[2]
50
+ return in_cost + out_cost + cache_cost
51
+
52
+ def format_status(self) -> str:
53
+ """Format token and cost string for status bar."""
54
+ total = self.usage.total_tokens
55
+ cost = self.calculate_cost_usd()
56
+
57
+ if total >= 1_000_000:
58
+ token_str = f"{total / 1_000_000:.1f}M tokens"
59
+ elif total >= 1_000:
60
+ token_str = f"{total / 1_000:.1f}k tokens"
61
+ else:
62
+ token_str = f"{total} tokens"
63
+
64
+ return f"{token_str} · ${cost:.3f}"
65
+
@@ -0,0 +1,167 @@
1
+ Metadata-Version: 2.4
2
+ Name: pari-cli
3
+ Version: 0.1.0
4
+ Summary: A resilient, sandbox-first terminal coding agent engineered for high pass rates and low token burn.
5
+ Author: PARI Contributors
6
+ License: MIT
7
+ Keywords: ai,coding-agent,terminal,llm,developer-tools
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Console
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Operating System :: MacOS
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Software Development :: Code Generators
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: rich>=13.0.0
21
+ Requires-Dist: prompt_toolkit>=3.0.36
22
+ Requires-Dist: pydantic>=2.0.0
23
+ Requires-Dist: httpx>=0.24.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
26
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
27
+ Provides-Extra: ast
28
+ Requires-Dist: tree-sitter>=0.21.0; extra == "ast"
29
+ Requires-Dist: tree-sitter-languages>=1.10.0; extra == "ast"
30
+ Requires-Dist: networkx>=3.0; extra == "ast"
31
+ Requires-Dist: grep-ast>=0.3.0; extra == "ast"
32
+ Provides-Extra: cloud
33
+ Requires-Dist: e2b>=0.14.0; extra == "cloud"
34
+ Provides-Extra: all
35
+ Requires-Dist: pari[ast,cloud,dev]; extra == "all"
36
+ Dynamic: license-file
37
+
38
+ # PARI — Next-Generation Terminal Coding Agent
39
+
40
+ > *A Synthesis Architecture That Surpasses Claude Code, OpenAI Codex, OpenCode, Pi, Aider, Cursor, and Google Antigravity.*
41
+ > *(Named by a college friend, built for world-class systems engineering performance.)*
42
+
43
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
44
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
45
+ [![Architecture: 11-Layer Stack](https://img.shields.io/badge/architecture-11--layer-green.svg)](docs/architecture/overview.md)
46
+ [![Security: Kernel Sandboxed](https://img.shields.io/badge/sandbox-bwrap%20%7C%20Seatbelt%20%7C%20E2B-orange.svg)](docs/layers/layer-0-sandboxing.md)
47
+
48
+ ---
49
+
50
+ ## ⚡ The Core Thesis
51
+
52
+ $$\text{\bf Agent failure is a systems engineering failure, not a reasoning failure.}$$
53
+
54
+ The exact same frontier reasoning model (Claude 3.7 Sonnet, GPT-4o) demonstrates a **15% pass rate** in a naive loop, but achieves a **50–55% pass rate** inside an engineered harness. The 35% delta is not model intelligence; it is accounted for by **six fatal systems failure modes**:
55
+
56
+ 1. **Unbounded stdout poisoning** $\rightarrow$ Solved by Layer 7 (50KB/2k-line disk spooler + balanced head/tail extraction).
57
+ 2. **Mid-stream token truncation** $\rightarrow$ Solved by Layer 4 (Strict `stop_reason == "length"` rejection guard).
58
+ 3. **File write race conditions** $\rightarrow$ Solved by Layer 6 (`FileMutationQueue` canonical realpath serialization).
59
+ 4. **KV cache invalidation cascades** $\rightarrow$ Solved by Layer 2 (Immutable Baseline Epochs freezing Tiers 1–4).
60
+ 5. **Blind file traversal loops** $\rightarrow$ Solved by Layer 3 (v1: Fast substring ripgrep & globbing / v2: Tree-sitter AST fallback).
61
+ 6. **Unsandboxed host execution** $\rightarrow$ Solved by Layer 0 (Multi-platform kernel isolation: `bwrap`, `Seatbelt`, E2B MicroVMs).
62
+
63
+ ---
64
+
65
+ ## 🏗️ 11-Layer Architecture Topology
66
+
67
+ ```
68
+ +-----------------------------------------------------------------------------------+
69
+ | PARI -- SYSTEM TOPOLOGY |
70
+ +-----------------------------------------------------------------------------------+
71
+ | Layer 9: TERMINAL INTERFACE (Rich / Textual differential rendering TUI) |
72
+ | | |
73
+ | Layer 8: DUAL-MODEL ROUTER (Architect -> Planner / Editor -> Fast Model) |
74
+ | | |
75
+ | Layer 7: OUTPUT HYGIENE (50KB/2k-line disk spooler + head/tail extraction) |
76
+ | | |
77
+ | Layer 6: CONCURRENCY SAFETY (asyncio.TaskGroup + realpath FileMutationQueue) |
78
+ | | |
79
+ | Layer 5: EDIT ENGINE (Exact -> Git OSR -> DMP -> Prefill Continue) |
80
+ | | |
81
+ | Layer 4: AGENT EXECUTION LOOP (Double-while + stop_reason guard + tools) |
82
+ | | |
83
+ | Layer 3: NAVIGATION (v1: Substring Grep & Globbing / v2: Tree-sitter Fallback) |
84
+ | | |
85
+ | Layer 2: CONTEXT & CACHE (Immutable Epoch + mid-session updates + Warmer) |
86
+ | | |
87
+ | Layer 1: DURABLE SESSION (Append-only JSONL Merkle DAG + Checkpoint Index) |
88
+ | | |
89
+ | Layer 0: SANDBOX (bwrap on Linux/WSL2 + Seatbelt on macOS + E2B Cloud) |
90
+ +-----------------------------------------------------------------------------------+
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 📚 Complete Documentation Suite
96
+
97
+ All system documentation has been modularized and organized inside the [`docs/`](docs/README.md) directory:
98
+
99
+ ### Architecture Deep Dives
100
+ * [Architecture Overview](docs/architecture/overview.md) — System topology, execution lifecycle, and core thesis.
101
+ * [Failure Mode Atlas](docs/architecture/failure-mode-atlas.md) — Verified weaknesses across 7 production systems.
102
+ * [The Trade-Off Framework](docs/architecture/trade-offs.md) — The 12 design trade-off axes and what PARI sacrifices.
103
+ * [Cross-System Decision Matrix](docs/architecture/decision-matrix.md) — Harvested innovations vs. discarded anti-patterns.
104
+
105
+ ### Layer Specifications
106
+ * [Layer 0: Sandboxing Engine](docs/layers/layer-0-sandboxing.md) — Multi-platform kernel isolation (`bwrap`, `Seatbelt`, E2B).
107
+ * [Layer 1: Durable Session Engine](docs/layers/layer-1-session-dag.md) — Append-only JSONL Merkle DAG with $O(K)$ checkpoints.
108
+ * [Layer 2: Context & Cache Architecture](docs/layers/layer-2-context-cache.md) — Immutable Baseline Epochs & Economic Warmer.
109
+ * [Layer 3: Codebase Intelligence & Navigation](docs/layers/layer-3-intelligence-repomap.md) — v1 ripgrep & globbing / v2 Tree-sitter AST fallback.
110
+
111
+ * [Layer 4: Agent Execution Loop](docs/layers/layer-4-execution-loop.md) — Double-while state machine & PTY daemon detection.
112
+ * [Layer 5: Multi-Tier Fuzzy Edit Engine](docs/layers/layer-5-edit-engine.md) — 4-tier diff cascade (Exact $\rightarrow$ Git OSR $\rightarrow$ DMP $\rightarrow$ Prefill).
113
+ * [Layer 6: Concurrency & File Safety](docs/layers/layer-6-concurrency-safety.md) — `FileMutationQueue` realpath locks & shadow worktrees.
114
+ * [Layer 7: Output Hygiene](docs/layers/layer-7-output-hygiene.md) — 50KB/2k-line spooler & structured traceback parsing.
115
+ * [Layer 8: Dual-Model Routing Engine](docs/layers/layer-8-dual-model-router.md) — Architect vs. Editor decoupling (85% cost reduction).
116
+ * [Layer 9: Terminal Interface & TUI](docs/layers/layer-9-terminal-interface.md) — Rich differential streaming & zero idle CPU drain.
117
+ * [Layer 10: Evaluation & Observability](docs/layers/layer-10-eval-observability.md) — Local micro-eval suite & Cross-Model Verification.
118
+
119
+ ### Developer Guides
120
+ * [Developer Pain Points & Solutions](docs/guides/user-pain-and-solutions.md) — Real developer frustrations and PARI's direct fixes.
121
+ * [Getting Started Guide](docs/guides/getting-started.md) — Installation, environment setup, and running locally.
122
+ * [Phased Build Roadmap](docs/guides/roadmap.md) — 12-week implementation timeline across four phases.
123
+
124
+ ---
125
+
126
+ ## 🚀 Installation & Quick Start
127
+
128
+ Choose your platform's one-line install command:
129
+
130
+ ### 1. macOS & Linux (`curl`)
131
+ ```bash
132
+ curl -fsSL https://raw.githubusercontent.com/MdTanwer/pari/main/install.sh | bash
133
+ ```
134
+
135
+ ### 2. Windows (`irm` in PowerShell)
136
+ ```powershell
137
+ irm https://raw.githubusercontent.com/MdTanwer/pari/main/install.ps1 | iex
138
+ ```
139
+
140
+ ### 3. Via `pip` / `pipx` / `uv`
141
+ ```bash
142
+ # Recommended (isolated CLI)
143
+ pipx install pari-cli
144
+
145
+ # Fast via uv
146
+ uv tool install pari-cli
147
+
148
+ # Standard pip
149
+ pip install pari-cli
150
+ ```
151
+
152
+ ---
153
+
154
+ ### 💻 Launch Interactive Session
155
+ ```bash
156
+ # Export your API key
157
+ export ANTHROPIC_API_KEY="sk-ant-..."
158
+
159
+ # Launch PARI anywhere in your project workspace
160
+ pari
161
+ ```
162
+
163
+ ---
164
+
165
+ ## ⚖️ License
166
+
167
+ MIT License. See [LICENSE](LICENSE) for details.
@@ -0,0 +1,81 @@
1
+ pari/__init__.py,sha256=tfR-7DliCdBApsbxCtsfG3qOuMHwzCmobPCQmWhbg_Y,78
2
+ pari/cli.py,sha256=UvIUs7GO5_ElwgRZDIeR4tet5f_lD3L9-OdeX8Fxa8E,4590
3
+ pari/config.py,sha256=kHo8YrFqBgsea7IFUk5MPzWbqY-8adMLVEMDnOGcNEg,649
4
+ pari/agent/__init__.py,sha256=oj2IWelrF_bybjt-hZtMCgDMM8cyAAbxLmA5UYTvBSk,642
5
+ pari/agent/loop.py,sha256=a0Azet6VvPWFA-1yXrVji1XWuelRwWYOqEWxn9_J5V0,1106
6
+ pari/agent/reflection.py,sha256=XlY-trdaBp1-cQgjZFSC8S26xoD-6nYs2bUaoGbWX3w,1301
7
+ pari/agent/runtime.py,sha256=oJsfTQnbV1_WLd6DWn7mn8BMevs3Bi3dTVEEjd-WKuw,3320
8
+ pari/agent/subagent.py,sha256=TmOHzMaisVWwWBrRLZHXrt6hKVObz7YcJyWWnwVZORw,1187
9
+ pari/context/__init__.py,sha256=-imPTQ41PcB5g7pmRoDNze_4o6gPhj00xH2tj7H_1VY,652
10
+ pari/context/cache.py,sha256=NXYXLvH2zRHv6dAiv7e5NMoqGYN8oIPMbkjLXUwi8LE,613
11
+ pari/context/chunks.py,sha256=3jCAVMh0aKKdV18BoIPUyI4-AvZJcBlHz-Jhq1UusZI,1066
12
+ pari/context/compaction.py,sha256=uwxjgEeA3U6gyjBRGrHrCXtrZpLQZDci0f6cLCceJpw,832
13
+ pari/context/epoch.py,sha256=0yDunyqavX--w1N1-RO4YAxQUGpcg7KV2W_czfuipsk,1032
14
+ pari/context/warmer.py,sha256=0Fm-zAvDwHRYNlLBSL2FS5_pGIpxnYcf0yYXqghSPE0,1143
15
+ pari/edit/__init__.py,sha256=xcGzUxDyAEuqj4kX-H5YdXDCr6qc9s6zmndegIEZi84,884
16
+ pari/edit/cascade.py,sha256=Ap-DyZF-ixG1pZsSf-zFG2i5n8Oq5VuQHvY7rZJbEsQ,702
17
+ pari/edit/diff.py,sha256=9FHlUVTuNjYYB8C_LE1k7Kv4qAmZFFyAXMaM4H2ofZ4,323
18
+ pari/edit/dmp.py,sha256=6vAJLWKCB-jyUDybpglz8AdJUqfY6DwNfywhGUUOO74,602
19
+ pari/edit/exact.py,sha256=stcz_fqgkB-y14etdBWc9wu-NjKyZvFVjE0rXI_YrgA,1434
20
+ pari/edit/git_osr.py,sha256=UfNiwTAyIWEf2vSXAIayUyToLTxslTkRh8OmE-YgzrU,523
21
+ pari/edit/indenter.py,sha256=EyAWHWu27ntRb-LUHdHIfcpvAcgtd1zxiMQCzoQHFKA,571
22
+ pari/eval/__init__.py,sha256=M8LmVXhMVhDDBfX1Ezg0SnEwZYhH6R72amOBUymwY2Q,725
23
+ pari/eval/judge.py,sha256=xEY3yXC5vYNk7WnTf0pFYFHvJxvNQmQMlOJq2WKR874,777
24
+ pari/eval/logging.py,sha256=MKRhxUgY4Ub82stuQiIBq65u6hWHTKASYix4bYeXETs,591
25
+ pari/eval/metrics.py,sha256=6M0RHyKlQG1Bc49sdTnwgJ3I1WcCMlBS5Yb2Stq7JKw,545
26
+ pari/eval/runner.py,sha256=jJK7NuIXs3RrjxX4wwEVR8kZZjBOOP5LZrbJYdauT9A,852
27
+ pari/fs/__init__.py,sha256=t7Hg6hB2mRrGSwQNhG_PA0v2y2l3zqAxic0gltCyu3U,643
28
+ pari/fs/atomic.py,sha256=TrATiws2EI-Y14vSXjxxrdlXqCOEM-a3W3YFQLdyRV8,1722
29
+ pari/fs/path.py,sha256=X2cIX-nwgn5IHXk9DAr-5runbrNn0jisL3xJY6Zx0Qc,953
30
+ pari/fs/queue.py,sha256=6WrdFhdr6-cyTs3mvIpqY9wZTrPsfMjO3Yh2AWZPozk,634
31
+ pari/intelligence/__init__.py,sha256=dJafBpDO4IztYQ3QgIF_jCskz804TTT6KFInI9uBGq4,742
32
+ pari/intelligence/ast.py,sha256=LInxu6B39_gug51KECUsxENjylwRyXR5lWBWYP_p3Uc,739
33
+ pari/intelligence/cache.py,sha256=_J_TZAq5zMZBWnJWbsQCdLDNoPTF_3v5pU9SUd08pjE,749
34
+ pari/intelligence/ppr.py,sha256=AZMLc5kbmyEfYGe2NBhxzf-Hntk6nf3HE_JLuSvxwb8,852
35
+ pari/intelligence/repomap.py,sha256=BlecfU4_48MqlHE6VgKoJNi0TA1YaFOa6FcNRcKFWXs,716
36
+ pari/intelligence/search.py,sha256=w6lVH8VgCoSDr-_d1zwfDsqZdHyiaEbcY1C90_sVdzM,955
37
+ pari/output/__init__.py,sha256=O_QSKs0QVVzsV-bNSzWDmY7vuovktNjivRF2jUmmGJI,640
38
+ pari/output/parser.py,sha256=ramx8dwF_JY_vvhqNIyLGIqhHK_BcMT24FMHudrN-4o,458
39
+ pari/output/spooler.py,sha256=QCALUrGUOuIaoUjQ5Ma0V8e1d5Pg3NqLJLheaSi5kBI,1128
40
+ pari/output/truncation.py,sha256=feQ1ossW4O8UB5XSA8JAwyKnjqII6Ou6b477MKRgq5o,659
41
+ pari/providers/__init__.py,sha256=WyEna1gq9bwpiLCB8JIt-v7wqMhwONamSejLNl4CzKg,737
42
+ pari/providers/anthropic.py,sha256=dlTc2EqiJbmgnbGKUe8ZR_HxUeHyq6fttkCQFdPi7bc,786
43
+ pari/providers/base.py,sha256=b_XAdtzoItnQiMhR5IrOmC52Eiw2oLPYYbL5EoX6qMc,1400
44
+ pari/providers/deepseek.py,sha256=rNgjAviDOws_HFxVlKaIidE7T_VNRuVHV1jdMUb1VYw,831
45
+ pari/providers/mock.py,sha256=9bsmvGrhux-EZRn85e4m_zLD8HVs2-Y5pxf3Mwl1wxY,1582
46
+ pari/providers/ollama.py,sha256=Yt_mZD8MPmVcGnUlMkrpX8d2GL5fsd93KSwkoQiwPTg,903
47
+ pari/providers/openai.py,sha256=VUInjmoWDvJM-WW_NExzHh-bwVeXePWguAZyoOrIfys,715
48
+ pari/routing/__init__.py,sha256=BiqeNEfPUkFxrNJy-iEPIHCPMCbT2x1javEc5wfmg48,751
49
+ pari/routing/anti_verbosity.py,sha256=mSxUVyYqggeiQQUyMR4q9D7OAbWRWYzlAJUD0xmpUKI,620
50
+ pari/routing/classifier.py,sha256=rL8exPR-pvnp7__MPSUzJZpNfHoQDzsPl6iJsndJ5Mk,824
51
+ pari/routing/router.py,sha256=KNuFk5RQ6qZlK_vU66w-m6lrm3HkaJ_7F0jcvNmbOl0,846
52
+ pari/sandbox/__init__.py,sha256=PlNK23fxc7-Ew0C1bPGmtytoX9rKep3G5RBy6d4kZ1o,738
53
+ pari/sandbox/base.py,sha256=teGv6KSDx6lgHDBxoGVE08JAWWEjUcoWon3-wXpKUN8,2428
54
+ pari/sandbox/bwrap.py,sha256=zIiHCv29EC3JQXUBrAc0AFmfDF44ls93xu4UiyhZnfc,1480
55
+ pari/sandbox/dispatcher.py,sha256=jI5njX_2w9yo6eYU5KYUB4n1T8jX6cQ8ryi4lNF9C2Y,1126
56
+ pari/sandbox/e2b.py,sha256=-M2i-6kBbdP969BlYLnRQMgiYS1Nxv1r09pq_q7QIDc,1205
57
+ pari/sandbox/process.py,sha256=CJlq-wTLhrG8ScR3Ldctm7iZ9So1i2DbU-reRr73qik,1516
58
+ pari/sandbox/seatbelt.py,sha256=qT_1yLDbTbE3gdPYO8VE4EvSjZ2cLVlYjHs--1qd4rE,1218
59
+ pari/session/__init__.py,sha256=HnML1UyPFPudtPZJenUN9gx131ViXjYNkw6Ds0IcNbs,773
60
+ pari/session/checkpoint.py,sha256=NS2HQ4z3CB2hxdWEB4Opfp-9VG3jC5gX-6OkJGN4-CE,944
61
+ pari/session/dag.py,sha256=06I7869B8KbHU7aD4iFtO5fIPv_9hQSDimIEw1u40wk,1185
62
+ pari/session/events.py,sha256=w0JW3x8w9tVL7w9thj4h2UhVHjVeQptMMhWXb2S_6Us,1479
63
+ pari/session/logger.py,sha256=UPTZEFIAQNCuEenCwp173C0ZU9SWhPNxoCVkE_bHiKg,1702
64
+ pari/session/undo.py,sha256=UhWjrhPFvUl-QDXm4IoTms-JKUl5Rw2hxRiywvAjabA,3348
65
+ pari/tools/__init__.py,sha256=oyrMFzfRRLEHEklQZF-H3pCiFiL0qV-kB1DZAirUUew,608
66
+ pari/tools/base.py,sha256=x3fId2OpuzR98L_0gxU6SP136nevhY1yAkQ_nzAdGGQ,859
67
+ pari/tools/bash.py,sha256=BjDGqkL0DykhC-TTXeAyVoap-M1m2VYRNah5ctgrrNg,744
68
+ pari/tools/fs.py,sha256=PqW20lL0XFI68mpn_Gqbm0OHPWeCd5l-alibx6-LJDM,1450
69
+ pari/tools/registry.py,sha256=ZXWvSM0VeDIoXj_0mSAthZLnauiSxa6pptv1YR7Hues,1129
70
+ pari/tools/search.py,sha256=vyx1cMtpaUIwdsIAq2phEZtVXTmt0kkdNKMakUaBIzg,1120
71
+ pari/tui/__init__.py,sha256=sf9J0U9xxJyrWKvGHhyzyRhiLJ9dR8MgabtxlnH6zi8,934
72
+ pari/tui/app.py,sha256=RAIgQse9WyB6t6x0WM7yJ1AOaR4yfZhscSaN8qHoMTM,13799
73
+ pari/tui/commands.py,sha256=q3py7YIW_iGAayptlt6WDUK3XC_02OEwnPejUZGeBT4,1556
74
+ pari/tui/diff_view.py,sha256=cGIhVszk02vWVpzPnvFLwd57ag0bTfoqRarmbsU7Lag,718
75
+ pari/tui/status.py,sha256=lVxJT64f2Y0Y914Vx-0gAp1VBl6dIJa0skb9Yunrb0U,2296
76
+ pari_cli-0.1.0.dist-info/licenses/LICENSE,sha256=6Y2X4KtsMbXZd_eG4H7PFXg-rOWTpI1fZWbm-CAKaXQ,1066
77
+ pari_cli-0.1.0.dist-info/METADATA,sha256=Y3vsUlphc6BHZtY1fT0vTupiNu0-0oPBpo6CmOGgRe4,8666
78
+ pari_cli-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
79
+ pari_cli-0.1.0.dist-info/entry_points.txt,sha256=Pn-l07GkpxDh1_HpTeCwLLWbF-WOzJFcByqnG6AYfhw,39
80
+ pari_cli-0.1.0.dist-info/top_level.txt,sha256=DcqBWrimiHbsRiRfuXI_7FSQlCusmlbMHUmIWNe9dpI,5
81
+ pari_cli-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pari = pari.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Md Tanwir
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ pari