ngpt 3.9.6__py3-none-any.whl → 3.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.
- ngpt/cli/args.py +5 -0
- ngpt/cli/modes/gitcommsg.py +112 -2
- ngpt/cli/modes/rewrite.py +110 -3
- {ngpt-3.9.6.dist-info → ngpt-3.11.0.dist-info}/METADATA +6 -2
- {ngpt-3.9.6.dist-info → ngpt-3.11.0.dist-info}/RECORD +8 -8
- {ngpt-3.9.6.dist-info → ngpt-3.11.0.dist-info}/WHEEL +0 -0
- {ngpt-3.9.6.dist-info → ngpt-3.11.0.dist-info}/entry_points.txt +0 -0
- {ngpt-3.9.6.dist-info → ngpt-3.11.0.dist-info}/licenses/LICENSE +0 -0
ngpt/cli/args.py
CHANGED
@@ -135,6 +135,11 @@ def setup_argument_parser():
|
|
135
135
|
mode_exclusive_group.add_argument('-g', '--gitcommsg', action='store_true',
|
136
136
|
help='Generate AI-powered git commit messages from staged changes or diff file')
|
137
137
|
|
138
|
+
# Rewrite mode options
|
139
|
+
rewrite_group = parser.add_argument_group('Rewrite Mode Options')
|
140
|
+
rewrite_group.add_argument('--humanize', action='store_true',
|
141
|
+
help='Transform AI-generated text into human-like content that passes AI detection tools')
|
142
|
+
|
138
143
|
return parser
|
139
144
|
|
140
145
|
def parse_args():
|
ngpt/cli/modes/gitcommsg.py
CHANGED
@@ -582,7 +582,7 @@ def process_with_chunking(client, diff_content, preprompt, chunk_size=200, recur
|
|
582
582
|
|
583
583
|
# If the commit message is too long, we need to condense it
|
584
584
|
if len(commit_message.splitlines()) > max_msg_lines:
|
585
|
-
|
585
|
+
commit_message = condense_commit_message(
|
586
586
|
client,
|
587
587
|
commit_message,
|
588
588
|
commit_system_prompt,
|
@@ -591,6 +591,10 @@ def process_with_chunking(client, diff_content, preprompt, chunk_size=200, recur
|
|
591
591
|
1, # Start at depth 1
|
592
592
|
logger
|
593
593
|
)
|
594
|
+
|
595
|
+
# Format the final commit message to eliminate path repetition and improve readability
|
596
|
+
commit_message = optimize_file_references(client, commit_message, commit_system_prompt, logger)
|
597
|
+
|
594
598
|
return commit_message
|
595
599
|
except Exception as e:
|
596
600
|
# Stop the spinner
|
@@ -672,7 +676,7 @@ DO NOT include any explanation or commentary outside the commit message format."
|
|
672
676
|
|
673
677
|
# If the commit message is too long, we need to condense it
|
674
678
|
if len(commit_message.splitlines()) > max_msg_lines:
|
675
|
-
|
679
|
+
commit_message = condense_commit_message(
|
676
680
|
client,
|
677
681
|
commit_message,
|
678
682
|
commit_system_prompt,
|
@@ -681,6 +685,10 @@ DO NOT include any explanation or commentary outside the commit message format."
|
|
681
685
|
1, # Start at depth 1
|
682
686
|
logger
|
683
687
|
)
|
688
|
+
|
689
|
+
# Format the final commit message to eliminate path repetition and improve readability
|
690
|
+
commit_message = optimize_file_references(client, commit_message, commit_system_prompt, logger)
|
691
|
+
|
684
692
|
return commit_message
|
685
693
|
|
686
694
|
# Analysis is still too large, need to chunk it
|
@@ -1015,6 +1023,105 @@ def strip_code_block_formatting(text):
|
|
1015
1023
|
return match.group(1).rstrip()
|
1016
1024
|
return text
|
1017
1025
|
|
1026
|
+
def optimize_file_references(client, commit_message, system_prompt=None, logger=None):
|
1027
|
+
"""Optimize the file references in the commit message by eliminating path repetition and improving readability.
|
1028
|
+
|
1029
|
+
Args:
|
1030
|
+
client: The NGPTClient instance
|
1031
|
+
commit_message: The commit message to format
|
1032
|
+
system_prompt: Optional system prompt for formatting
|
1033
|
+
logger: Optional logger instance
|
1034
|
+
|
1035
|
+
Returns:
|
1036
|
+
str: Commit message with optimized file references
|
1037
|
+
"""
|
1038
|
+
# If no system prompt provided, use a minimalist one
|
1039
|
+
if not system_prompt:
|
1040
|
+
system_prompt = """You are an expert Git commit message formatter."""
|
1041
|
+
|
1042
|
+
format_prompt = f"""TASK: Reformat file paths in this commit message to make it more readable while preserving the standard format
|
1043
|
+
|
1044
|
+
COMMIT MESSAGE TO OPTIMIZE:
|
1045
|
+
{commit_message}
|
1046
|
+
|
1047
|
+
MAINTAIN THIS EXACT FORMAT FOR EACH BULLET:
|
1048
|
+
- [type] Description with file references (filepath:line/function)
|
1049
|
+
|
1050
|
+
FILE PATH OPTIMIZATION RULES (CRITICAL PRIORITY):
|
1051
|
+
1. PRESERVE PROPER PARENTHESES FORMAT - File references go in parentheses at the end of each bullet:
|
1052
|
+
• "- [add] Add components (src/components/Button.jsx, Card.jsx)"
|
1053
|
+
• Always keep references in parentheses at the end
|
1054
|
+
|
1055
|
+
2. ELIMINATE PATH REPETITION in file lists:
|
1056
|
+
• "- [add] Add components (src/components/Button.jsx, src/components/Card.jsx)" - BAD
|
1057
|
+
• "- [add] Add components (src/components/*.jsx)" - Use wildcard when appropriate
|
1058
|
+
• "- [add] Add 5 component files (src/components/)" - Use count for many files
|
1059
|
+
|
1060
|
+
3. AVOID REDUNDANT FILENAMES:
|
1061
|
+
• Don't repeat filenames in both description and parentheses
|
1062
|
+
• Group files by category in the description
|
1063
|
+
|
1064
|
+
EXAMPLES THAT FOLLOW THE PROPER FORMAT:
|
1065
|
+
|
1066
|
+
❌ BEFORE (POOR FORMATTING):
|
1067
|
+
- [docs] Add documentation for tawhid, names_of_allah, transcendence (islam/beliefs/tawhid.md, islam/beliefs/names_of_allah.md, islam/beliefs/transcendence.md)
|
1068
|
+
|
1069
|
+
✅ AFTER (GOOD FORMATTING):
|
1070
|
+
- [docs] Add documentation for theological concepts (islam/beliefs/tawhid.md, names_of_allah.md, transcendence.md)
|
1071
|
+
|
1072
|
+
❌ BEFORE (POOR FORMATTING):
|
1073
|
+
- [fix] Update error handling in app/utils/errors.js, app/utils/validation.js, app/utils/formatting.js
|
1074
|
+
|
1075
|
+
✅ AFTER (GOOD FORMATTING):
|
1076
|
+
- [fix] Update error handling (app/utils/errors.js, validation.js, formatting.js)
|
1077
|
+
|
1078
|
+
RULES FOR OUTPUT:
|
1079
|
+
1. PRESERVE proper format with parentheses at the end
|
1080
|
+
2. Keep the same bullet structure and number of bullets
|
1081
|
+
3. DO NOT change type tags or summary line
|
1082
|
+
4. Mention common paths ONCE, then list files
|
1083
|
+
|
1084
|
+
THE STANDARD FORMAT FOR COMMIT MESSAGES IS:
|
1085
|
+
type[(scope)]: concise summary
|
1086
|
+
|
1087
|
+
- [type] Description (filepath:line/function)
|
1088
|
+
- [type] Another description (filepath:line/function)"""
|
1089
|
+
|
1090
|
+
# Log formatting template
|
1091
|
+
if logger:
|
1092
|
+
logger.log_template("DEBUG", "OPTIMIZE_FILE_REFS", format_prompt)
|
1093
|
+
|
1094
|
+
# Start spinner for formatting
|
1095
|
+
stop_spinner = threading.Event()
|
1096
|
+
spinner_thread = threading.Thread(
|
1097
|
+
target=spinner,
|
1098
|
+
args=("Optimizing file references...",),
|
1099
|
+
kwargs={"stop_event": stop_spinner, "color": COLORS['green']}
|
1100
|
+
)
|
1101
|
+
spinner_thread.daemon = True
|
1102
|
+
spinner_thread.start()
|
1103
|
+
|
1104
|
+
try:
|
1105
|
+
formatted_message = handle_api_call(client, format_prompt, system_prompt, logger)
|
1106
|
+
# Stop the spinner
|
1107
|
+
stop_spinner.set()
|
1108
|
+
spinner_thread.join()
|
1109
|
+
|
1110
|
+
if logger:
|
1111
|
+
logger.log_content("DEBUG", "OPTIMIZED_FILE_REFS", formatted_message)
|
1112
|
+
|
1113
|
+
return formatted_message
|
1114
|
+
except Exception as e:
|
1115
|
+
# Stop the spinner
|
1116
|
+
stop_spinner.set()
|
1117
|
+
spinner_thread.join()
|
1118
|
+
|
1119
|
+
print(f"{COLORS['red']}Error optimizing file references: {str(e)}{COLORS['reset']}")
|
1120
|
+
if logger:
|
1121
|
+
logger.error(f"Error optimizing file references: {str(e)}")
|
1122
|
+
# Return the original message if formatting fails
|
1123
|
+
return commit_message
|
1124
|
+
|
1018
1125
|
def gitcommsg_mode(client, args, logger=None):
|
1019
1126
|
"""Handle the Git commit message generation mode.
|
1020
1127
|
|
@@ -1195,6 +1302,9 @@ def gitcommsg_mode(client, args, logger=None):
|
|
1195
1302
|
1, # Start at depth 1
|
1196
1303
|
active_logger
|
1197
1304
|
)
|
1305
|
+
|
1306
|
+
# Format the final commit message to eliminate path repetition and improve readability
|
1307
|
+
result = optimize_file_references(client, result, commit_system_prompt, active_logger)
|
1198
1308
|
|
1199
1309
|
if not result:
|
1200
1310
|
print(f"{COLORS['red']}Failed to generate commit message.{COLORS['reset']}")
|
ngpt/cli/modes/rewrite.py
CHANGED
@@ -70,6 +70,80 @@ ORIGINAL: "The user interface, which is built using React, Redux, and various ot
|
|
70
70
|
BETTER: "The React/Redux user interface needs redesigning to accommodate our planned new features."
|
71
71
|
"""
|
72
72
|
|
73
|
+
# System prompt for humanizing AI-generated text
|
74
|
+
HUMANIZE_SYSTEM_PROMPT = """You are an advanced TextHumanizer specialist with expertise in transforming AI-generated content into authentic, undetectable human writing. Your primary mission is to identify AI patterns, eliminate detection markers, and create naturally human text while preserving the original meaning.
|
75
|
+
|
76
|
+
PRIMARY GOAL:
|
77
|
+
Transform AI-generated text to make it indistinguishable from human writing while preserving the core meaning and information.
|
78
|
+
|
79
|
+
IDENTIFICATION AND ANALYSIS:
|
80
|
+
1. Identify common AI writing patterns, including:
|
81
|
+
- Overuse of em dashes (—) and predictable sentence structures (e.g., "It's not just X, it's Y")
|
82
|
+
- Formulaic lists and groups of three items (AI loves triplets)
|
83
|
+
- Repetitive clarifications and unnecessary context setting
|
84
|
+
- Overly consistent paragraph lengths and sentence structures
|
85
|
+
- Perfect grammar and overly formal academic language
|
86
|
+
- Excessive use of transition phrases and connecting words
|
87
|
+
- Generic corporate language and vague positive adjectives ("innovative", "practical", "elevate")
|
88
|
+
- Unusual collocations or word pairings that feel slightly off
|
89
|
+
- Predictable flow that lacks natural human tangents
|
90
|
+
- Perfectly balanced arguments without personal bias
|
91
|
+
- Suspiciously consistent tone throughout the piece
|
92
|
+
|
93
|
+
HUMANIZATION TECHNIQUES:
|
94
|
+
1. Vary sentence structure with a mix of simple, compound, and complex sentences
|
95
|
+
2. Create irregular paragraph lengths, mimicking natural human writing patterns
|
96
|
+
3. Introduce strategic "imperfections" like sentence fragments or occasional wordiness
|
97
|
+
4. Replace clichés and stock phrases with unexpected alternatives
|
98
|
+
5. Break predictable patterns by varying rhythm and cadence
|
99
|
+
6. Add strategic redundancies where natural in human speech
|
100
|
+
7. Insert occasional asides, parentheticals, or digressions that feel authentic
|
101
|
+
8. Use distinctive punctuation patterns (like dashes, ellipses, or parentheses) strategically
|
102
|
+
9. Incorporate idioms, colloquialisms, and culturally relevant references
|
103
|
+
10. Add subtle opinion markers or perspective indicators
|
104
|
+
11. Include personal anecdotes or first-person perspective ONLY when specific personal context is provided by the user - NEVER invent or hallucinate personal experiences or relationships
|
105
|
+
|
106
|
+
CONTENT TYPE CUSTOMIZATION:
|
107
|
+
1. Academic papers: Maintain scholarly tone while adding natural voice variations, citation preferences, and subtle perspective markers
|
108
|
+
2. Blog posts: Incorporate conversational tone, personal anecdotes (only if provided), and reader engagement elements
|
109
|
+
3. Business content: Balance professionalism with authentic voice, avoiding corporate jargon while maintaining expertise
|
110
|
+
4. Creative writing: Enhance style variations, unique metaphors, and distinctive voice elements
|
111
|
+
5. Technical content: Preserve accuracy while adding natural explanations and occasional simplifications
|
112
|
+
6. Social media: Include informal language, cultural references, and authentic engagement hooks
|
113
|
+
|
114
|
+
AI DETECTION EVASION STRATEGIES:
|
115
|
+
1. Avoid perfect coherence between paragraphs, mimicking natural thought progression
|
116
|
+
2. Introduce strategic tense variations where naturally occurring
|
117
|
+
3. Simulate human thinking patterns with occasional backtracking or clarification
|
118
|
+
4. Vary vocabulary sophistication throughout the text
|
119
|
+
5. Include subjective judgments and personal opinions where appropriate
|
120
|
+
6. Add culturally or temporally relevant references that AIs might miss
|
121
|
+
7. Incorporate casual phrasings, contractions, and verbal quirks
|
122
|
+
8. Use nonlinear information organization that follows human association patterns
|
123
|
+
|
124
|
+
READABILITY AND PURPOSE ADJUSTMENT:
|
125
|
+
1. Adapt content to the specified audience and goal
|
126
|
+
2. Match language complexity to human capabilities
|
127
|
+
3. Allow perspective shifts that occur naturally in human writing
|
128
|
+
4. Use strategic repetition for emphasis (unlike AI's mechanical repetition)
|
129
|
+
5. Create natural flow between topics rather than mechanical transitions
|
130
|
+
|
131
|
+
IMPORTANT: Never invent personal stories, experiences, or relationships unless specifically provided by the user.
|
132
|
+
|
133
|
+
OUTPUT INSTRUCTION:
|
134
|
+
Provide ONLY the humanized text with no explanations, comments, or meta-text.
|
135
|
+
|
136
|
+
EXAMPLES:
|
137
|
+
|
138
|
+
AI VERSION: "Artificial intelligence is revolutionizing the healthcare industry by enhancing diagnostic accuracy, streamlining administrative processes, and improving patient outcomes. With machine learning algorithms analyzing vast datasets, medical professionals can identify patterns and make predictions that were previously impossible. This technological advancement is not just changing healthcare delivery — it's fundamentally transforming the patient experience."
|
139
|
+
|
140
|
+
HUMANIZED VERSION: "AI is shaking things up in healthcare, and honestly, it's about time. Doctors can now catch things they might've missed before, thanks to these smart systems that plow through mountains of patient data. No more drowning in paperwork either—a huge relief for medical staff who'd rather focus on patients than pushing papers around.
|
141
|
+
|
142
|
+
The real winners? Patients. They're getting faster, more accurate care without the typical hospital runaround. Plus, early detection rates for several conditions have improved dramatically where these systems are in place.
|
143
|
+
|
144
|
+
But let's not pretend it's all perfect. These systems cost a fortune to implement, and plenty of doctors still view them with skepticism. Can't really blame them-medicine has always been as much art as science. The trick will be finding that sweet spot where technology enhances the human touch rather than replacing it."
|
145
|
+
"""
|
146
|
+
|
73
147
|
def rewrite_mode(client, args, logger=None):
|
74
148
|
"""Handle the text rewriting mode.
|
75
149
|
|
@@ -94,7 +168,10 @@ def rewrite_mode(client, args, logger=None):
|
|
94
168
|
input_text = args.prompt
|
95
169
|
else:
|
96
170
|
# No pipe or prompt - use multiline input
|
97
|
-
|
171
|
+
if getattr(args, 'humanize', False):
|
172
|
+
print("Enter or paste AI-generated text to humanize (Ctrl+D or Ctrl+Z to submit):")
|
173
|
+
else:
|
174
|
+
print("Enter or paste text to rewrite (Ctrl+D or Ctrl+Z to submit):")
|
98
175
|
input_text = get_multiline_input()
|
99
176
|
if input_text is None:
|
100
177
|
# Input was cancelled or empty
|
@@ -145,15 +222,18 @@ def rewrite_mode(client, args, logger=None):
|
|
145
222
|
print(f"{COLORS['yellow']}Warning: Failed to enhance input with web search: {str(e)}{COLORS['reset']}")
|
146
223
|
# Continue with the original input if web search fails
|
147
224
|
|
225
|
+
# Determine which system prompt to use based on the humanize flag
|
226
|
+
system_prompt = HUMANIZE_SYSTEM_PROMPT if getattr(args, 'humanize', False) else REWRITE_SYSTEM_PROMPT
|
227
|
+
|
148
228
|
# Set up messages array with system prompt and user content
|
149
229
|
messages = [
|
150
|
-
{"role": "system", "content":
|
230
|
+
{"role": "system", "content": system_prompt},
|
151
231
|
{"role": "user", "content": input_text}
|
152
232
|
]
|
153
233
|
|
154
234
|
# Log the messages if logging is enabled
|
155
235
|
if logger:
|
156
|
-
logger.log("system",
|
236
|
+
logger.log("system", system_prompt)
|
157
237
|
logger.log("user", input_text)
|
158
238
|
|
159
239
|
# Set default streaming behavior based on --no-stream and --prettify arguments
|
@@ -215,6 +295,24 @@ def rewrite_mode(client, args, logger=None):
|
|
215
295
|
if args.stream_prettify and live_display:
|
216
296
|
stream_callback = spinner_handling_callback
|
217
297
|
|
298
|
+
if getattr(args, 'humanize', False):
|
299
|
+
operation_text = "Humanizing AI text"
|
300
|
+
else:
|
301
|
+
operation_text = "Rewriting text"
|
302
|
+
|
303
|
+
# Start spinner for processing
|
304
|
+
if not args.stream_prettify and not args.no_stream:
|
305
|
+
stop_spinner = threading.Event()
|
306
|
+
spinner_thread = threading.Thread(
|
307
|
+
target=spinner,
|
308
|
+
args=(f"{operation_text}...",),
|
309
|
+
kwargs={"stop_event": stop_spinner, "color": COLORS['cyan']}
|
310
|
+
)
|
311
|
+
spinner_thread.daemon = True
|
312
|
+
# Use lock to prevent terminal rendering conflicts when starting spinner
|
313
|
+
with TERMINAL_RENDER_LOCK:
|
314
|
+
spinner_thread.start()
|
315
|
+
|
218
316
|
response = client.chat(
|
219
317
|
prompt=None, # Not used when messages are provided
|
220
318
|
stream=should_stream,
|
@@ -226,6 +324,15 @@ def rewrite_mode(client, args, logger=None):
|
|
226
324
|
messages=messages # Use messages array instead of prompt
|
227
325
|
)
|
228
326
|
|
327
|
+
# Stop spinner if it was started
|
328
|
+
if not args.stream_prettify and not args.no_stream:
|
329
|
+
stop_spinner.set()
|
330
|
+
spinner_thread.join()
|
331
|
+
# Clear the spinner line
|
332
|
+
with TERMINAL_RENDER_LOCK:
|
333
|
+
sys.stdout.write("\r" + " " * 100 + "\r")
|
334
|
+
sys.stdout.flush()
|
335
|
+
|
229
336
|
# Ensure spinner is stopped if no content was received
|
230
337
|
if stop_spinner_event and not first_content_received:
|
231
338
|
stop_spinner_event.set()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ngpt
|
3
|
-
Version: 3.
|
3
|
+
Version: 3.11.0
|
4
4
|
Summary: A Swiss army knife for LLMs: A fast, lightweight CLI and interactive chat tool that brings the power of any OpenAI-compatible LLM (OpenAI, Ollama, Groq, Claude, Gemini, etc.) straight to your terminal. rewrite texts or refine code, craft git commit messages, generate and run OS-aware shell commands.
|
5
5
|
Project-URL: Homepage, https://github.com/nazdridoy/ngpt
|
6
6
|
Project-URL: Repository, https://github.com/nazdridoy/ngpt
|
@@ -288,7 +288,7 @@ usage: ngpt [-h] [-v] [--language LANGUAGE] [--config [CONFIG]] [--config-index
|
|
288
288
|
[--preprompt PREPROMPT | --role ROLE] [--no-stream | --prettify | --stream-prettify]
|
289
289
|
[--renderer {auto,rich,glow}] [--rec-chunk] [--diff [FILE]] [--chunk-size CHUNK_SIZE]
|
290
290
|
[--analyses-chunk-size ANALYSES_CHUNK_SIZE] [--max-msg-lines MAX_MSG_LINES]
|
291
|
-
[--max-recursion-depth MAX_RECURSION_DEPTH] [-i | -s | -c | -t | -r | -g]
|
291
|
+
[--max-recursion-depth MAX_RECURSION_DEPTH] [-i | -s | -c | -t | -r | -g] [--humanize]
|
292
292
|
[prompt]
|
293
293
|
|
294
294
|
nGPT - Interact with AI language models via OpenAI-compatible APIs
|
@@ -355,6 +355,10 @@ Modes (mutually exclusive)::
|
|
355
355
|
-r, --rewrite Rewrite text from stdin to be more natural while preserving tone and meaning
|
356
356
|
-g, --gitcommsg Generate AI-powered git commit messages from staged changes or diff file
|
357
357
|
|
358
|
+
Rewrite Mode Options::
|
359
|
+
|
360
|
+
--humanize Transform AI-generated text into human-like content that passes AI detection tools
|
361
|
+
|
358
362
|
```
|
359
363
|
|
360
364
|
> **Note**: For better visualization of conventional commit messages on GitHub, you can use the [GitHub Commit Labels](https://greasyfork.org/en/scripts/526153-github-commit-labels) userscript, which adds colorful labels to your commits.
|
@@ -2,7 +2,7 @@ ngpt/__init__.py,sha256=kpKhViLakwMdHZkuLht2vWcjt0uD_5gR33gvMhfXr6w,664
|
|
2
2
|
ngpt/__main__.py,sha256=j3eFYPOtCCFBOGh7NK5IWEnADnTMMSEB9GLyIDoW724,66
|
3
3
|
ngpt/client.py,sha256=XjpA2UnvrRvzk6_DzVEddUTzoPlF8koQ-cZURpHoT7c,9041
|
4
4
|
ngpt/cli/__init__.py,sha256=hebbDSMGiOd43YNnQP67uzr67Ue6rZPwm2czynr5iZY,43
|
5
|
-
ngpt/cli/args.py,sha256=
|
5
|
+
ngpt/cli/args.py,sha256=Vih8fBectyHHr2G8q3Kl2lflo_yFbB0ory55MZv1dEI,15048
|
6
6
|
ngpt/cli/config_manager.py,sha256=NQQcWnjUppAAd0s0p9YAf8EyKS1ex5-0EB4DvKdB4dk,3662
|
7
7
|
ngpt/cli/formatters.py,sha256=HBYGlx_7eoAKyzfy0Vq5L0yn8yVKjngqYBukMmXCcz0,9401
|
8
8
|
ngpt/cli/main.py,sha256=36mi8uYDcl56IhTkt-TJTRRhwHeF157xMAYgufLRAMo,29256
|
@@ -12,9 +12,9 @@ ngpt/cli/ui.py,sha256=8-WyPMwgQiqLXWO0mGfBhKTRnIDDtPUtm_XCvOnqBJA,11334
|
|
12
12
|
ngpt/cli/modes/__init__.py,sha256=KP7VR6Xw9k1p5Jcu0F38RDxSFvFIzH3j1ThDLNwznUI,363
|
13
13
|
ngpt/cli/modes/chat.py,sha256=x1leClKq7UupA_CdW4tym0AivY2o_II123-I5IcAkxQ,7091
|
14
14
|
ngpt/cli/modes/code.py,sha256=Qj59xq6fZqgUDw7SbvmPKX_gdpc7DHJhNkn1sB5qgUU,12932
|
15
|
-
ngpt/cli/modes/gitcommsg.py,sha256=
|
15
|
+
ngpt/cli/modes/gitcommsg.py,sha256=qFOrll333ebFOkzLP_WD1Qw0VfpphYqeiuHumkP6OB4,54833
|
16
16
|
ngpt/cli/modes/interactive.py,sha256=E0c38NA8xnuRKAce40F35uFYcohFDvaqSB8nf1ywS-4,17958
|
17
|
-
ngpt/cli/modes/rewrite.py,sha256=
|
17
|
+
ngpt/cli/modes/rewrite.py,sha256=hA3KxfuZSTGKWD0HyzpHP2cExncQrTM2npln_3k_-N4,18050
|
18
18
|
ngpt/cli/modes/shell.py,sha256=it1Brq1-LGeNfPKYBeVAwF-a78g9UP-KscofBZQkbr4,41589
|
19
19
|
ngpt/cli/modes/text.py,sha256=NOikaU9YVCBgyaCl6pwy9EVt-YY5Q4jBx0l47izpVTA,6986
|
20
20
|
ngpt/utils/__init__.py,sha256=_92f8eGMMOtQQA3uwgSRVwUEl1EIRFjWPUjcfGgI-eI,1244
|
@@ -23,8 +23,8 @@ ngpt/utils/config.py,sha256=wsArA4osnh8fKqOvtsPqqBxAz3DpdjtaWUFaRtnUdyc,10452
|
|
23
23
|
ngpt/utils/log.py,sha256=f1jg2iFo35PAmsarH8FVL_62plq4VXH0Mu2QiP6RJGw,15934
|
24
24
|
ngpt/utils/pipe.py,sha256=qRHF-Ma7bbU0cOcb1Yhe4S-kBavivtnnvLA3EYS4FY4,2162
|
25
25
|
ngpt/utils/web_search.py,sha256=w5ke4KJMRxq7r5jtbUXvspja6XhjoPZloVkZ0IvBXIE,30731
|
26
|
-
ngpt-3.
|
27
|
-
ngpt-3.
|
28
|
-
ngpt-3.
|
29
|
-
ngpt-3.
|
30
|
-
ngpt-3.
|
26
|
+
ngpt-3.11.0.dist-info/METADATA,sha256=LVlb93ajT_eKq-CbaqX2zzShkKfxlAlgpt5ctdbNma8,31332
|
27
|
+
ngpt-3.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
28
|
+
ngpt-3.11.0.dist-info/entry_points.txt,sha256=SqAAvLhMrsEpkIr4YFRdUeyuXQ9o0IBCeYgE6AVojoI,44
|
29
|
+
ngpt-3.11.0.dist-info/licenses/LICENSE,sha256=mQkpWoADxbHqE0HRefYLJdm7OpdrXBr3vNv5bZ8w72M,1065
|
30
|
+
ngpt-3.11.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|