contextzip 0.2.4__tar.gz → 0.3.1__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 (37) hide show
  1. contextzip-0.3.1/PKG-INFO +241 -0
  2. contextzip-0.3.1/README.md +212 -0
  3. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/__init__.py +1 -1
  4. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/cli.py +331 -303
  5. contextzip-0.3.1/contextzip/cli_ai.py +160 -0
  6. contextzip-0.3.1/contextzip/cli_display.py +331 -0
  7. contextzip-0.3.1/contextzip/cli_onboard.py +124 -0
  8. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/clipboard.py +15 -10
  9. contextzip-0.3.1/contextzip/config.py +161 -0
  10. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/detector.py +12 -13
  11. contextzip-0.3.1/contextzip/error_parser.py +506 -0
  12. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/filters.py +24 -20
  13. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/git.py +21 -14
  14. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/packager.py +20 -19
  15. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/base.py +1 -9
  16. contextzip-0.3.1/contextzip/rules/errors/__init__.py +0 -0
  17. contextzip-0.3.1/contextzip/rules/errors/node.py +506 -0
  18. contextzip-0.3.1/contextzip/rules/errors/python.py +103 -0
  19. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/node.py +1 -1
  20. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/python.py +4 -4
  21. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/ruby.py +6 -13
  22. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/rust.py +1 -1
  23. contextzip-0.3.1/contextzip/watcher.py +662 -0
  24. contextzip-0.3.1/contextzip.egg-info/PKG-INFO +241 -0
  25. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip.egg-info/SOURCES.txt +10 -1
  26. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip.egg-info/requires.txt +1 -0
  27. {contextzip-0.2.4 → contextzip-0.3.1}/pyproject.toml +3 -2
  28. contextzip-0.2.4/PKG-INFO +0 -335
  29. contextzip-0.2.4/README.md +0 -307
  30. contextzip-0.2.4/contextzip.egg-info/PKG-INFO +0 -335
  31. {contextzip-0.2.4 → contextzip-0.3.1}/LICENSE +0 -0
  32. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/__init__.py +0 -0
  33. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip/rules/go.py +0 -0
  34. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip.egg-info/dependency_links.txt +0 -0
  35. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip.egg-info/entry_points.txt +0 -0
  36. {contextzip-0.2.4 → contextzip-0.3.1}/contextzip.egg-info/top_level.txt +0 -0
  37. {contextzip-0.2.4 → contextzip-0.3.1}/setup.cfg +0 -0
@@ -0,0 +1,241 @@
1
+ Metadata-Version: 2.4
2
+ Name: contextzip
3
+ Version: 0.3.1
4
+ Summary: Intelligently package your codebase for AI tools
5
+ Author-email: Deepesh <akadeepesh@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/akadeepesh/contextzip
8
+ Project-URL: Repository, https://github.com/akadeepesh/contextzip
9
+ Project-URL: Issues, https://github.com/akadeepesh/contextzip/issues
10
+ Keywords: ai,cli,developer-tools,context,zip,llm,claude,chatgpt,code-packaging
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Software Development :: Build Tools
20
+ Classifier: Topic :: Utilities
21
+ Requires-Python: >=3.9
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: click>=8.1
25
+ Requires-Dist: rich>=13.0
26
+ Requires-Dist: pathspec>=0.12
27
+ Requires-Dist: httpx>=0.27
28
+ Dynamic: license-file
29
+
30
+ # contextzip
31
+
32
+ > Package exactly the right parts of your codebase and paste it into any AI tool — in one command.
33
+
34
+ ```bash
35
+ pip install contextzip
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Why contextzip
41
+
42
+ Every AI session starts the same way: hunt down the relevant files, manually skip `node_modules`, build artifacts, and lock files, zip them, find the zip, upload it. Then do it all again next session.
43
+
44
+ contextzip eliminates that entirely. Run it from your project root — it detects your stack, applies smart exclusions, produces a lean ZIP, and opens your file manager with the archive already selected. One `Ctrl+C` and you're done.
45
+
46
+ ---
47
+
48
+ ## Features
49
+
50
+ - **Smart framework detection** — automatically identifies Node.js, Next.js, Python, Django, FastAPI, Rust, Go, and Ruby, applying the right exclusion rules for each
51
+ - **Respects `.gitignore`** — your existing ignore patterns are honoured automatically
52
+ - **Git-aware packaging** — use `--git-changes` to package only modified, staged, and untracked files; perfect for incremental debugging and PR review sessions
53
+ - **AI-powered file selection** — describe your task in plain English with `--prompt` and Gemini selects the minimum relevant files automatically, no manual hunting required
54
+ - **Terminal error watcher** — wrap any dev server with `contextzip watch` to auto-detect errors and package a ready-to-upload debug context in one keypress
55
+ - **Persistent workspace** — all generated ZIPs land in `.contextzip/` at your project root, discoverable, reusable, and git-ignored automatically
56
+ - **Warns before it's a problem** — flags large (≥ 1 MB) and binary files that AI tools can't read, before you waste an upload
57
+ - **Handles edge cases** — dangling symlinks, unreadable files, and paths outside the project tree are caught and reported, never silently dropped
58
+ - **Full CLI control** — `--include`, `--exclude`, `--dry-run`, `--output`, all composable
59
+
60
+ ---
61
+
62
+ ## Installation
63
+
64
+ **Requires Python 3.9+**
65
+
66
+ ```bash
67
+ pip install contextzip
68
+ ```
69
+
70
+ With [pipx](https://pipx.pypa.io/) (recommended for CLI tools — keeps it isolated):
71
+
72
+ ```bash
73
+ pipx install contextzip
74
+ ```
75
+
76
+ Verify:
77
+
78
+ ```bash
79
+ contextzip --version
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Quick start
85
+
86
+ Navigate to any project and run:
87
+
88
+ ```bash
89
+ cd ~/projects/my-app
90
+ contextzip
91
+ ```
92
+
93
+ contextzip will:
94
+
95
+ 1. Detect your framework (e.g. `Next.js + Node.js`)
96
+ 2. Apply the appropriate exclusion rules
97
+ 3. Create a compressed ZIP in `.contextzip/` at your project root
98
+ 4. Open your file manager with the ZIP selected and ready to copy
99
+
100
+ ---
101
+
102
+ ## Usage
103
+
104
+ ```
105
+ contextzip [OPTIONS]
106
+ ```
107
+
108
+ | Option | Description |
109
+ |---|---|
110
+ | `-p`, `--prompt TEXT` | Describe your task in plain English — Gemini selects only the relevant files |
111
+ | `-i`, `--include PATH` | Only include files under this path (repeatable) |
112
+ | `-e`, `--exclude PATTERN` | Add exclusion patterns in gitignore syntax (repeatable) |
113
+ | `--git-changes` | Only include files reported by git as modified, staged, or untracked |
114
+ | `-n`, `--dry-run` | Preview what would be included without creating a ZIP |
115
+ | `-o`, `--output FILE` | Write ZIP to a custom path |
116
+ | `-v`, `--verbose` | Show every included and excluded file with sizes |
117
+ | `--no-clipboard` | Skip the clipboard / folder-open step |
118
+ | `--no-gitignore` | Ignore the project's `.gitignore` |
119
+
120
+ **Subcommands:** `exclude`, `include`, `watch`, `config` — run `contextzip --help` for full details.
121
+
122
+ ---
123
+
124
+ ## Examples
125
+
126
+ ```bash
127
+ # Preview what would be packaged
128
+ contextzip --dry-run --verbose
129
+
130
+ # Package only specific directories
131
+ contextzip --include src --include app
132
+
133
+ # Exclude additional patterns
134
+ contextzip --exclude "*.log" --exclude "tests/"
135
+
136
+ # Package only git-modified files
137
+ contextzip --git-changes
138
+
139
+ # Let AI pick only the files relevant to your task
140
+ contextzip --prompt "Change toast color on failed login"
141
+
142
+ # Preview AI file selection without creating a ZIP
143
+ contextzip --prompt "Refactor auth middleware" --dry-run
144
+
145
+ # Save to a custom path
146
+ contextzip --output ~/Desktop/project-context.zip
147
+ ```
148
+
149
+ ---
150
+
151
+ ## AI-powered file selection
152
+
153
+ The `--prompt` flag lets you describe a task in plain English. contextzip scans your project, builds a lightweight file map, and asks Gemini to return the minimum set of files needed for that task — typically 2–5, never more than 10. The result is a tightly scoped ZIP with only what you'd actually open to make the change.
154
+
155
+ ```bash
156
+ contextzip --prompt "Change toast color on failed login"
157
+ # → components/ui/toast.tsx, app/login/page.tsx, lib/auth.ts
158
+ ```
159
+
160
+ The ZIP also includes a `prompt.txt` describing the task, so when you drop it into Claude, ChatGPT, or any other AI tool, it immediately understands what you're trying to do.
161
+
162
+ **First-time setup:** `--prompt` requires a free Gemini API key from [Google AI Studio](https://aistudio.google.com/apikey) — no credit card needed. On first use, contextzip guides you through obtaining and saving one. You can also skip the setup entirely with an environment variable:
163
+
164
+ ```bash
165
+ export GEMINI_API_KEY=AIza...
166
+ ```
167
+
168
+ Manage your key at any time:
169
+
170
+ ```bash
171
+ contextzip config # show current key status
172
+ contextzip config --reset-key # clear and re-run setup
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Terminal error watcher
178
+
179
+ The `watch` command wraps your dev server, buffers its output, and packages a debug-ready ZIP the moment you spot an error — no manual file hunting, no copy-pasting stack traces.
180
+
181
+ ```bash
182
+ contextzip watch -- npm run dev
183
+ contextzip watch -- python manage.py runserver
184
+ ```
185
+
186
+ contextzip starts your process normally. You see output exactly as you would without it. In the background, it watches the stream for errors. When one is detected, a prompt appears directly beneath the error output:
187
+
188
+ ```
189
+ ╭─ contextzip · error detected ─────────────────────╮
190
+ │ Press [D] to package debug context [S] to skip │
191
+ ╰───────────────────────────────────────────────────╯
192
+ ```
193
+
194
+ Press **D** and contextzip immediately writes `.contextzip/debug-context.zip`. Your server keeps running — no restart, no interruption.
195
+
196
+ **What's in the ZIP:**
197
+
198
+ | File | Contents |
199
+ |---|---|
200
+ | `prompt.txt` | Auto-generated: detected framework, error type, and task description — ready to paste into any AI tool |
201
+ | `terminal-error.txt` | The cleaned, noise-stripped error block and stack trace |
202
+ | `source-files.zip` | Source files referenced in the stack trace, paths preserved |
203
+
204
+ **On Ctrl+C:** If no errors were packaged during the session, contextzip offers one final prompt to capture the full session output — useful when something looked wrong but didn't match a known error pattern.
205
+
206
+ **Supported frameworks:** Python, Django, FastAPI, Node.js, Next.js, React. Each has its own error detection patterns and noise filters so the output stays clean across stacks.
207
+
208
+ > **Note:** `watch` works best with dev servers that don't read stdin interactively (`npm run dev`, `manage.py runserver`, etc.). PTY emulation is not used — on Windows, color passthrough may be limited.
209
+
210
+ ---
211
+
212
+ ## What gets excluded
213
+
214
+ contextzip stacks exclusion rules based on your detected stack, on top of your `.gitignore`.
215
+
216
+ **Always excluded:** `.git/`, `.env` files, logs, caches, editor config (`.vscode/`, `.idea/`), OS files (`.DS_Store`, `Thumbs.db`), and common binary formats.
217
+
218
+ **By framework:**
219
+
220
+ | Stack | Additional exclusions |
221
+ |---|---|
222
+ | Node.js / Next.js | `node_modules/`, `.next/`, `dist/`, `build/`, lock files, `*.min.js`, `*.d.ts` |
223
+ | Python / Django / FastAPI | `__pycache__/`, `.venv/`, `*.pyc`, `migrations/`, `.pytest_cache/`, lock files |
224
+ | Rust | `target/`, `Cargo.lock`, `*.rlib` |
225
+ | Go | `vendor/`, `go.sum`, `bin/` |
226
+
227
+ Detection is additive — a monorepo with both `package.json` and `pyproject.toml` gets both rule sets applied.
228
+
229
+ ---
230
+
231
+ ## Contributing
232
+
233
+ Contributions are welcome — especially new framework rule sets, edge case fixes, and platform-specific clipboard improvements.
234
+
235
+ See [CONTRIBUTING.md](https://github.com/akadeepesh/contextzip/blob/main/CONTRIBUTING.md) for local setup, how to add a new framework, and PR guidelines. Please open an issue before starting a large PR so we can align on the approach first.
236
+
237
+ ---
238
+
239
+ ## License
240
+
241
+ MIT — see [LICENSE](https://github.com/akadeepesh/contextzip/blob/main/LICENSE) for details.
@@ -0,0 +1,212 @@
1
+ # contextzip
2
+
3
+ > Package exactly the right parts of your codebase and paste it into any AI tool — in one command.
4
+
5
+ ```bash
6
+ pip install contextzip
7
+ ```
8
+
9
+ ---
10
+
11
+ ## Why contextzip
12
+
13
+ Every AI session starts the same way: hunt down the relevant files, manually skip `node_modules`, build artifacts, and lock files, zip them, find the zip, upload it. Then do it all again next session.
14
+
15
+ contextzip eliminates that entirely. Run it from your project root — it detects your stack, applies smart exclusions, produces a lean ZIP, and opens your file manager with the archive already selected. One `Ctrl+C` and you're done.
16
+
17
+ ---
18
+
19
+ ## Features
20
+
21
+ - **Smart framework detection** — automatically identifies Node.js, Next.js, Python, Django, FastAPI, Rust, Go, and Ruby, applying the right exclusion rules for each
22
+ - **Respects `.gitignore`** — your existing ignore patterns are honoured automatically
23
+ - **Git-aware packaging** — use `--git-changes` to package only modified, staged, and untracked files; perfect for incremental debugging and PR review sessions
24
+ - **AI-powered file selection** — describe your task in plain English with `--prompt` and Gemini selects the minimum relevant files automatically, no manual hunting required
25
+ - **Terminal error watcher** — wrap any dev server with `contextzip watch` to auto-detect errors and package a ready-to-upload debug context in one keypress
26
+ - **Persistent workspace** — all generated ZIPs land in `.contextzip/` at your project root, discoverable, reusable, and git-ignored automatically
27
+ - **Warns before it's a problem** — flags large (≥ 1 MB) and binary files that AI tools can't read, before you waste an upload
28
+ - **Handles edge cases** — dangling symlinks, unreadable files, and paths outside the project tree are caught and reported, never silently dropped
29
+ - **Full CLI control** — `--include`, `--exclude`, `--dry-run`, `--output`, all composable
30
+
31
+ ---
32
+
33
+ ## Installation
34
+
35
+ **Requires Python 3.9+**
36
+
37
+ ```bash
38
+ pip install contextzip
39
+ ```
40
+
41
+ With [pipx](https://pipx.pypa.io/) (recommended for CLI tools — keeps it isolated):
42
+
43
+ ```bash
44
+ pipx install contextzip
45
+ ```
46
+
47
+ Verify:
48
+
49
+ ```bash
50
+ contextzip --version
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Quick start
56
+
57
+ Navigate to any project and run:
58
+
59
+ ```bash
60
+ cd ~/projects/my-app
61
+ contextzip
62
+ ```
63
+
64
+ contextzip will:
65
+
66
+ 1. Detect your framework (e.g. `Next.js + Node.js`)
67
+ 2. Apply the appropriate exclusion rules
68
+ 3. Create a compressed ZIP in `.contextzip/` at your project root
69
+ 4. Open your file manager with the ZIP selected and ready to copy
70
+
71
+ ---
72
+
73
+ ## Usage
74
+
75
+ ```
76
+ contextzip [OPTIONS]
77
+ ```
78
+
79
+ | Option | Description |
80
+ |---|---|
81
+ | `-p`, `--prompt TEXT` | Describe your task in plain English — Gemini selects only the relevant files |
82
+ | `-i`, `--include PATH` | Only include files under this path (repeatable) |
83
+ | `-e`, `--exclude PATTERN` | Add exclusion patterns in gitignore syntax (repeatable) |
84
+ | `--git-changes` | Only include files reported by git as modified, staged, or untracked |
85
+ | `-n`, `--dry-run` | Preview what would be included without creating a ZIP |
86
+ | `-o`, `--output FILE` | Write ZIP to a custom path |
87
+ | `-v`, `--verbose` | Show every included and excluded file with sizes |
88
+ | `--no-clipboard` | Skip the clipboard / folder-open step |
89
+ | `--no-gitignore` | Ignore the project's `.gitignore` |
90
+
91
+ **Subcommands:** `exclude`, `include`, `watch`, `config` — run `contextzip --help` for full details.
92
+
93
+ ---
94
+
95
+ ## Examples
96
+
97
+ ```bash
98
+ # Preview what would be packaged
99
+ contextzip --dry-run --verbose
100
+
101
+ # Package only specific directories
102
+ contextzip --include src --include app
103
+
104
+ # Exclude additional patterns
105
+ contextzip --exclude "*.log" --exclude "tests/"
106
+
107
+ # Package only git-modified files
108
+ contextzip --git-changes
109
+
110
+ # Let AI pick only the files relevant to your task
111
+ contextzip --prompt "Change toast color on failed login"
112
+
113
+ # Preview AI file selection without creating a ZIP
114
+ contextzip --prompt "Refactor auth middleware" --dry-run
115
+
116
+ # Save to a custom path
117
+ contextzip --output ~/Desktop/project-context.zip
118
+ ```
119
+
120
+ ---
121
+
122
+ ## AI-powered file selection
123
+
124
+ The `--prompt` flag lets you describe a task in plain English. contextzip scans your project, builds a lightweight file map, and asks Gemini to return the minimum set of files needed for that task — typically 2–5, never more than 10. The result is a tightly scoped ZIP with only what you'd actually open to make the change.
125
+
126
+ ```bash
127
+ contextzip --prompt "Change toast color on failed login"
128
+ # → components/ui/toast.tsx, app/login/page.tsx, lib/auth.ts
129
+ ```
130
+
131
+ The ZIP also includes a `prompt.txt` describing the task, so when you drop it into Claude, ChatGPT, or any other AI tool, it immediately understands what you're trying to do.
132
+
133
+ **First-time setup:** `--prompt` requires a free Gemini API key from [Google AI Studio](https://aistudio.google.com/apikey) — no credit card needed. On first use, contextzip guides you through obtaining and saving one. You can also skip the setup entirely with an environment variable:
134
+
135
+ ```bash
136
+ export GEMINI_API_KEY=AIza...
137
+ ```
138
+
139
+ Manage your key at any time:
140
+
141
+ ```bash
142
+ contextzip config # show current key status
143
+ contextzip config --reset-key # clear and re-run setup
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Terminal error watcher
149
+
150
+ The `watch` command wraps your dev server, buffers its output, and packages a debug-ready ZIP the moment you spot an error — no manual file hunting, no copy-pasting stack traces.
151
+
152
+ ```bash
153
+ contextzip watch -- npm run dev
154
+ contextzip watch -- python manage.py runserver
155
+ ```
156
+
157
+ contextzip starts your process normally. You see output exactly as you would without it. In the background, it watches the stream for errors. When one is detected, a prompt appears directly beneath the error output:
158
+
159
+ ```
160
+ ╭─ contextzip · error detected ─────────────────────╮
161
+ │ Press [D] to package debug context [S] to skip │
162
+ ╰───────────────────────────────────────────────────╯
163
+ ```
164
+
165
+ Press **D** and contextzip immediately writes `.contextzip/debug-context.zip`. Your server keeps running — no restart, no interruption.
166
+
167
+ **What's in the ZIP:**
168
+
169
+ | File | Contents |
170
+ |---|---|
171
+ | `prompt.txt` | Auto-generated: detected framework, error type, and task description — ready to paste into any AI tool |
172
+ | `terminal-error.txt` | The cleaned, noise-stripped error block and stack trace |
173
+ | `source-files.zip` | Source files referenced in the stack trace, paths preserved |
174
+
175
+ **On Ctrl+C:** If no errors were packaged during the session, contextzip offers one final prompt to capture the full session output — useful when something looked wrong but didn't match a known error pattern.
176
+
177
+ **Supported frameworks:** Python, Django, FastAPI, Node.js, Next.js, React. Each has its own error detection patterns and noise filters so the output stays clean across stacks.
178
+
179
+ > **Note:** `watch` works best with dev servers that don't read stdin interactively (`npm run dev`, `manage.py runserver`, etc.). PTY emulation is not used — on Windows, color passthrough may be limited.
180
+
181
+ ---
182
+
183
+ ## What gets excluded
184
+
185
+ contextzip stacks exclusion rules based on your detected stack, on top of your `.gitignore`.
186
+
187
+ **Always excluded:** `.git/`, `.env` files, logs, caches, editor config (`.vscode/`, `.idea/`), OS files (`.DS_Store`, `Thumbs.db`), and common binary formats.
188
+
189
+ **By framework:**
190
+
191
+ | Stack | Additional exclusions |
192
+ |---|---|
193
+ | Node.js / Next.js | `node_modules/`, `.next/`, `dist/`, `build/`, lock files, `*.min.js`, `*.d.ts` |
194
+ | Python / Django / FastAPI | `__pycache__/`, `.venv/`, `*.pyc`, `migrations/`, `.pytest_cache/`, lock files |
195
+ | Rust | `target/`, `Cargo.lock`, `*.rlib` |
196
+ | Go | `vendor/`, `go.sum`, `bin/` |
197
+
198
+ Detection is additive — a monorepo with both `package.json` and `pyproject.toml` gets both rule sets applied.
199
+
200
+ ---
201
+
202
+ ## Contributing
203
+
204
+ Contributions are welcome — especially new framework rule sets, edge case fixes, and platform-specific clipboard improvements.
205
+
206
+ See [CONTRIBUTING.md](https://github.com/akadeepesh/contextzip/blob/main/CONTRIBUTING.md) for local setup, how to add a new framework, and PR guidelines. Please open an issue before starting a large PR so we can align on the approach first.
207
+
208
+ ---
209
+
210
+ ## License
211
+
212
+ MIT — see [LICENSE](https://github.com/akadeepesh/contextzip/blob/main/LICENSE) for details.
@@ -1,3 +1,3 @@
1
1
  """contextzip — intelligent codebase packager for AI tools."""
2
2
 
3
- __version__ = "0.2.4"
3
+ __version__ = "0.3.1"