npcsh 0.3.27__tar.gz → 0.3.27.2__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 (70) hide show
  1. {npcsh-0.3.27/npcsh.egg-info → npcsh-0.3.27.2}/PKG-INFO +43 -29
  2. {npcsh-0.3.27 → npcsh-0.3.27.2/npcsh.egg-info}/PKG-INFO +43 -29
  3. npcsh-0.3.27.2/npcsh.egg-info/requires.txt +55 -0
  4. {npcsh-0.3.27 → npcsh-0.3.27.2}/setup.py +26 -45
  5. npcsh-0.3.27/npcsh.egg-info/requires.txt +0 -38
  6. {npcsh-0.3.27 → npcsh-0.3.27.2}/LICENSE +0 -0
  7. {npcsh-0.3.27 → npcsh-0.3.27.2}/MANIFEST.in +0 -0
  8. {npcsh-0.3.27 → npcsh-0.3.27.2}/README.md +0 -0
  9. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/__init__.py +0 -0
  10. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/audio.py +0 -0
  11. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/cli.py +0 -0
  12. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/command_history.py +0 -0
  13. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/conversation.py +0 -0
  14. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/data_models.py +0 -0
  15. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/dataframes.py +0 -0
  16. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/embeddings.py +0 -0
  17. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/helpers.py +0 -0
  18. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/image.py +0 -0
  19. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/image_gen.py +0 -0
  20. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/knowledge_graph.py +0 -0
  21. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/llm_funcs.py +0 -0
  22. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/load_data.py +0 -0
  23. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/main.py +0 -0
  24. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/model_runner.py +0 -0
  25. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_compiler.py +0 -0
  26. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_sysenv.py +0 -0
  27. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/assembly_lines/test_pipeline.py +0 -0
  28. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/corca.npc +0 -0
  29. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/foreman.npc +0 -0
  30. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/npcsh.ctx +0 -0
  31. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/sibiji.npc +0 -0
  32. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/analytics/celona.npc +0 -0
  33. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/hr_support/raone.npc +0 -0
  34. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/humanities/eriane.npc +0 -0
  35. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/it_support/lineru.npc +0 -0
  36. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/marketing/slean.npc +0 -0
  37. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/philosophy/maurawa.npc +0 -0
  38. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/sales/turnic.npc +0 -0
  39. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/templates/software/welxor.npc +0 -0
  40. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/calculator.tool +0 -0
  41. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/generic_search.tool +0 -0
  42. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/image_generation.tool +0 -0
  43. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/local_search.tool +0 -0
  44. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/screen_cap.tool +0 -0
  45. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/npc_team/tools/sql_executor.tool +0 -0
  46. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/plonk.py +0 -0
  47. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/response.py +0 -0
  48. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/search.py +0 -0
  49. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/serve.py +0 -0
  50. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/shell.py +0 -0
  51. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/shell_helpers.py +0 -0
  52. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/stream.py +0 -0
  53. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh/video.py +0 -0
  54. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh.egg-info/SOURCES.txt +0 -0
  55. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh.egg-info/dependency_links.txt +0 -0
  56. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh.egg-info/entry_points.txt +0 -0
  57. {npcsh-0.3.27 → npcsh-0.3.27.2}/npcsh.egg-info/top_level.txt +0 -0
  58. {npcsh-0.3.27 → npcsh-0.3.27.2}/setup.cfg +0 -0
  59. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_chromadb.py +0 -0
  60. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_embedding_check.py +0 -0
  61. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_embedding_methods.py +0 -0
  62. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_helpers.py +0 -0
  63. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_knowledge_graph_rag.py +0 -0
  64. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_llm_funcs.py +0 -0
  65. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_networkx_vis.py +0 -0
  66. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_npc_compiler.py +0 -0
  67. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_npcsh.py +0 -0
  68. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_npcteam.py +0 -0
  69. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_shell_helpers.py +0 -0
  70. {npcsh-0.3.27 → npcsh-0.3.27.2}/tests/test_tool_use.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: npcsh
3
- Version: 0.3.27
3
+ Version: 0.3.27.2
4
4
  Summary: npcsh is a command line tool for integrating LLMs into everyday workflows and for orchestrating teams of NPCs.
5
5
  Home-page: https://github.com/cagostino/npcsh
6
6
  Author: Christopher Agostino
@@ -10,44 +10,57 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
- Requires-Dist: redis
14
- Requires-Dist: flask_sse
15
- Requires-Dist: anthropic
16
- Requires-Dist: beautifulsoup4
17
- Requires-Dist: google-generativeai
18
- Requires-Dist: google-genai
19
- Requires-Dist: duckduckgo-search
20
- Requires-Dist: openai
21
13
  Requires-Dist: jinja2
14
+ Requires-Dist: scipy
15
+ Requires-Dist: numpy
22
16
  Requires-Dist: requests
23
17
  Requires-Dist: markdown
24
18
  Requires-Dist: PyYAML
25
- Requires-Dist: langchain
26
- Requires-Dist: langchain_community
27
19
  Requires-Dist: pygments
28
20
  Requires-Dist: termcolor
29
21
  Requires-Dist: colorama
30
22
  Requires-Dist: python-dotenv
31
- Requires-Dist: pytest
32
- Requires-Dist: googlesearch-python
23
+ Requires-Dist: pandas
24
+ Requires-Dist: beautifulsoup4
25
+ Requires-Dist: duckduckgo-search
33
26
  Requires-Dist: flask
34
27
  Requires-Dist: flask_cors
35
- Requires-Dist: librosa
36
- Requires-Dist: pandas
37
- Requires-Dist: matplotlib
38
- Requires-Dist: IPython
39
- Requires-Dist: pyautogui
40
- Requires-Dist: nltk
41
- Requires-Dist: thefuzz
42
- Requires-Dist: pypdf
43
- Requires-Dist: PyMuPDF
44
- Requires-Dist: screeninfo
45
- Requires-Dist: sentence_transformers
46
- Requires-Dist: opencv-python
47
- Requires-Dist: ollama
48
- Requires-Dist: kuzu
49
- Requires-Dist: chromadb
50
- Requires-Dist: diffusers
28
+ Requires-Dist: redis
29
+ Requires-Dist: flask_sse
30
+ Provides-Extra: lite
31
+ Requires-Dist: anthropic; extra == "lite"
32
+ Requires-Dist: openai; extra == "lite"
33
+ Requires-Dist: google-generativeai; extra == "lite"
34
+ Requires-Dist: google-genai; extra == "lite"
35
+ Provides-Extra: local
36
+ Requires-Dist: sentence_transformers; extra == "local"
37
+ Requires-Dist: opencv-python; extra == "local"
38
+ Requires-Dist: ollama; extra == "local"
39
+ Requires-Dist: kuzu; extra == "local"
40
+ Requires-Dist: chromadb; extra == "local"
41
+ Requires-Dist: diffusers; extra == "local"
42
+ Provides-Extra: whisper
43
+ Requires-Dist: openai-whisper; extra == "whisper"
44
+ Requires-Dist: pyaudio; extra == "whisper"
45
+ Requires-Dist: gtts; extra == "whisper"
46
+ Requires-Dist: playsound==1.2.2; extra == "whisper"
47
+ Requires-Dist: pyttsx3; extra == "whisper"
48
+ Provides-Extra: all
49
+ Requires-Dist: anthropic; extra == "all"
50
+ Requires-Dist: openai; extra == "all"
51
+ Requires-Dist: google-generativeai; extra == "all"
52
+ Requires-Dist: google-genai; extra == "all"
53
+ Requires-Dist: sentence_transformers; extra == "all"
54
+ Requires-Dist: opencv-python; extra == "all"
55
+ Requires-Dist: ollama; extra == "all"
56
+ Requires-Dist: kuzu; extra == "all"
57
+ Requires-Dist: chromadb; extra == "all"
58
+ Requires-Dist: diffusers; extra == "all"
59
+ Requires-Dist: openai-whisper; extra == "all"
60
+ Requires-Dist: pyaudio; extra == "all"
61
+ Requires-Dist: gtts; extra == "all"
62
+ Requires-Dist: playsound==1.2.2; extra == "all"
63
+ Requires-Dist: pyttsx3; extra == "all"
51
64
  Dynamic: author
52
65
  Dynamic: author-email
53
66
  Dynamic: classifier
@@ -55,6 +68,7 @@ Dynamic: description
55
68
  Dynamic: description-content-type
56
69
  Dynamic: home-page
57
70
  Dynamic: license-file
71
+ Dynamic: provides-extra
58
72
  Dynamic: requires-dist
59
73
  Dynamic: requires-python
60
74
  Dynamic: summary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: npcsh
3
- Version: 0.3.27
3
+ Version: 0.3.27.2
4
4
  Summary: npcsh is a command line tool for integrating LLMs into everyday workflows and for orchestrating teams of NPCs.
5
5
  Home-page: https://github.com/cagostino/npcsh
6
6
  Author: Christopher Agostino
@@ -10,44 +10,57 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
12
  License-File: LICENSE
13
- Requires-Dist: redis
14
- Requires-Dist: flask_sse
15
- Requires-Dist: anthropic
16
- Requires-Dist: beautifulsoup4
17
- Requires-Dist: google-generativeai
18
- Requires-Dist: google-genai
19
- Requires-Dist: duckduckgo-search
20
- Requires-Dist: openai
21
13
  Requires-Dist: jinja2
14
+ Requires-Dist: scipy
15
+ Requires-Dist: numpy
22
16
  Requires-Dist: requests
23
17
  Requires-Dist: markdown
24
18
  Requires-Dist: PyYAML
25
- Requires-Dist: langchain
26
- Requires-Dist: langchain_community
27
19
  Requires-Dist: pygments
28
20
  Requires-Dist: termcolor
29
21
  Requires-Dist: colorama
30
22
  Requires-Dist: python-dotenv
31
- Requires-Dist: pytest
32
- Requires-Dist: googlesearch-python
23
+ Requires-Dist: pandas
24
+ Requires-Dist: beautifulsoup4
25
+ Requires-Dist: duckduckgo-search
33
26
  Requires-Dist: flask
34
27
  Requires-Dist: flask_cors
35
- Requires-Dist: librosa
36
- Requires-Dist: pandas
37
- Requires-Dist: matplotlib
38
- Requires-Dist: IPython
39
- Requires-Dist: pyautogui
40
- Requires-Dist: nltk
41
- Requires-Dist: thefuzz
42
- Requires-Dist: pypdf
43
- Requires-Dist: PyMuPDF
44
- Requires-Dist: screeninfo
45
- Requires-Dist: sentence_transformers
46
- Requires-Dist: opencv-python
47
- Requires-Dist: ollama
48
- Requires-Dist: kuzu
49
- Requires-Dist: chromadb
50
- Requires-Dist: diffusers
28
+ Requires-Dist: redis
29
+ Requires-Dist: flask_sse
30
+ Provides-Extra: lite
31
+ Requires-Dist: anthropic; extra == "lite"
32
+ Requires-Dist: openai; extra == "lite"
33
+ Requires-Dist: google-generativeai; extra == "lite"
34
+ Requires-Dist: google-genai; extra == "lite"
35
+ Provides-Extra: local
36
+ Requires-Dist: sentence_transformers; extra == "local"
37
+ Requires-Dist: opencv-python; extra == "local"
38
+ Requires-Dist: ollama; extra == "local"
39
+ Requires-Dist: kuzu; extra == "local"
40
+ Requires-Dist: chromadb; extra == "local"
41
+ Requires-Dist: diffusers; extra == "local"
42
+ Provides-Extra: whisper
43
+ Requires-Dist: openai-whisper; extra == "whisper"
44
+ Requires-Dist: pyaudio; extra == "whisper"
45
+ Requires-Dist: gtts; extra == "whisper"
46
+ Requires-Dist: playsound==1.2.2; extra == "whisper"
47
+ Requires-Dist: pyttsx3; extra == "whisper"
48
+ Provides-Extra: all
49
+ Requires-Dist: anthropic; extra == "all"
50
+ Requires-Dist: openai; extra == "all"
51
+ Requires-Dist: google-generativeai; extra == "all"
52
+ Requires-Dist: google-genai; extra == "all"
53
+ Requires-Dist: sentence_transformers; extra == "all"
54
+ Requires-Dist: opencv-python; extra == "all"
55
+ Requires-Dist: ollama; extra == "all"
56
+ Requires-Dist: kuzu; extra == "all"
57
+ Requires-Dist: chromadb; extra == "all"
58
+ Requires-Dist: diffusers; extra == "all"
59
+ Requires-Dist: openai-whisper; extra == "all"
60
+ Requires-Dist: pyaudio; extra == "all"
61
+ Requires-Dist: gtts; extra == "all"
62
+ Requires-Dist: playsound==1.2.2; extra == "all"
63
+ Requires-Dist: pyttsx3; extra == "all"
51
64
  Dynamic: author
52
65
  Dynamic: author-email
53
66
  Dynamic: classifier
@@ -55,6 +68,7 @@ Dynamic: description
55
68
  Dynamic: description-content-type
56
69
  Dynamic: home-page
57
70
  Dynamic: license-file
71
+ Dynamic: provides-extra
58
72
  Dynamic: requires-dist
59
73
  Dynamic: requires-python
60
74
  Dynamic: summary
@@ -0,0 +1,55 @@
1
+ jinja2
2
+ scipy
3
+ numpy
4
+ requests
5
+ markdown
6
+ PyYAML
7
+ pygments
8
+ termcolor
9
+ colorama
10
+ python-dotenv
11
+ pandas
12
+ beautifulsoup4
13
+ duckduckgo-search
14
+ flask
15
+ flask_cors
16
+ redis
17
+ flask_sse
18
+
19
+ [all]
20
+ anthropic
21
+ openai
22
+ google-generativeai
23
+ google-genai
24
+ sentence_transformers
25
+ opencv-python
26
+ ollama
27
+ kuzu
28
+ chromadb
29
+ diffusers
30
+ openai-whisper
31
+ pyaudio
32
+ gtts
33
+ playsound==1.2.2
34
+ pyttsx3
35
+
36
+ [lite]
37
+ anthropic
38
+ openai
39
+ google-generativeai
40
+ google-genai
41
+
42
+ [local]
43
+ sentence_transformers
44
+ opencv-python
45
+ ollama
46
+ kuzu
47
+ chromadb
48
+ diffusers
49
+
50
+ [whisper]
51
+ openai-whisper
52
+ pyaudio
53
+ gtts
54
+ playsound==1.2.2
55
+ pyttsx3
@@ -1,9 +1,8 @@
1
1
  from setuptools import setup, find_packages
2
- import os
3
2
  import site
4
- import sys
5
3
  import platform
6
4
  from pathlib import Path
5
+ import os
7
6
 
8
7
 
9
8
  def package_files(directory):
@@ -50,47 +49,35 @@ npcsh-setup
50
49
  To configure your API keys and preferences.
51
50
  ==============================================
52
51
  """
53
- return "" # Return empty string for non-Windows platforms
52
+ return ""
54
53
 
55
54
 
56
- # Define core (lite) requirements
57
- core_requirements = [
58
- "redis",
59
- "flask_sse",
60
- "anthropic",
61
- "beautifulsoup4",
62
- "google-generativeai",
63
- "google-genai",
64
- "duckduckgo-search",
65
- "openai",
55
+ # Base requirements (no LLM packages)
56
+ base_requirements = [
66
57
  "jinja2",
58
+ "scipy",
59
+ "numpy",
67
60
  "requests",
68
61
  "markdown",
69
62
  "PyYAML",
70
- "langchain",
71
- "langchain_community",
72
63
  "pygments",
73
64
  "termcolor",
74
65
  "colorama",
75
66
  "python-dotenv",
76
- "pytest",
77
- "googlesearch-python",
67
+ "pandas",
68
+ "beautifulsoup4",
69
+ "duckduckgo-search",
78
70
  "flask",
79
71
  "flask_cors",
80
- "librosa",
81
- "pandas",
82
- "matplotlib",
83
- "IPython",
84
- "pyautogui",
85
- "nltk",
86
- "thefuzz",
87
- "pypdf",
88
- "PyMuPDF",
89
- "screeninfo",
72
+ "redis",
73
+ "flask_sse",
90
74
  ]
91
75
 
92
- # Define full requirements
93
- full_requirements = core_requirements + [
76
+ # API integration requirements
77
+ api_requirements = ["anthropic", "openai", "google-generativeai", "google-genai"]
78
+
79
+ # Local ML/AI requirements
80
+ local_requirements = [
94
81
  "sentence_transformers",
95
82
  "opencv-python",
96
83
  "ollama",
@@ -99,8 +86,8 @@ full_requirements = core_requirements + [
99
86
  "diffusers",
100
87
  ]
101
88
 
102
- # Define audio requirements
103
- audio_requirements = [
89
+ # Voice/Audio requirements
90
+ voice_requirements = [
104
91
  "openai-whisper",
105
92
  "pyaudio",
106
93
  "gtts",
@@ -110,22 +97,17 @@ audio_requirements = [
110
97
 
111
98
  extra_files = package_files("npcsh/npc_team/")
112
99
 
113
- # Choose requirements based on environment variables
114
- is_lite = os.environ.get("NPCSH_LITE_INSTALL", "").lower() == "true"
115
- is_audio = os.environ.get("NPCSH_AUDIO_INSTALL", "").lower() == "true"
116
-
117
- if is_lite:
118
- requirements = core_requirements
119
- elif is_audio:
120
- requirements = full_requirements + audio_requirements
121
- else:
122
- requirements = full_requirements
123
-
124
100
  setup(
125
101
  name="npcsh",
126
- version="0.3.27",
102
+ version="0.3.27.2",
127
103
  packages=find_packages(exclude=["tests*"]),
128
- install_requires=requirements,
104
+ install_requires=base_requirements, # Only install base requirements by default
105
+ extras_require={
106
+ "lite": api_requirements, # Just API integrations
107
+ "local": local_requirements, # Local AI/ML features
108
+ "whisper": voice_requirements, # Voice/Audio features
109
+ "all": api_requirements + local_requirements + voice_requirements, # Everything
110
+ },
129
111
  entry_points={
130
112
  "console_scripts": [
131
113
  "npcsh=npcsh.shell:main",
@@ -147,6 +129,5 @@ setup(
147
129
  python_requires=">=3.10",
148
130
  )
149
131
 
150
- # Print setup message only on Windows
151
132
  if platform.system() == "Windows":
152
133
  print(get_setup_message())
@@ -1,38 +0,0 @@
1
- redis
2
- flask_sse
3
- anthropic
4
- beautifulsoup4
5
- google-generativeai
6
- google-genai
7
- duckduckgo-search
8
- openai
9
- jinja2
10
- requests
11
- markdown
12
- PyYAML
13
- langchain
14
- langchain_community
15
- pygments
16
- termcolor
17
- colorama
18
- python-dotenv
19
- pytest
20
- googlesearch-python
21
- flask
22
- flask_cors
23
- librosa
24
- pandas
25
- matplotlib
26
- IPython
27
- pyautogui
28
- nltk
29
- thefuzz
30
- pypdf
31
- PyMuPDF
32
- screeninfo
33
- sentence_transformers
34
- opencv-python
35
- ollama
36
- kuzu
37
- chromadb
38
- diffusers
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes