npcsh 1.0.30__py3-none-any.whl → 1.0.31__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.
- npcsh/guac.py +77 -62
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/METADATA +1 -1
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/RECORD +33 -33
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/bash_executer.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/foreman.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/image_generation.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/internet_search.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/python_executor.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/screen_cap.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.31.data}/data/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/WHEEL +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/entry_points.txt +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/licenses/LICENSE +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.31.dist-info}/top_level.txt +0 -0
npcsh/guac.py
CHANGED
|
@@ -6,18 +6,9 @@ import pandas as pd
|
|
|
6
6
|
import sys
|
|
7
7
|
import argparse
|
|
8
8
|
import importlib.metadata
|
|
9
|
-
import matplotlib
|
|
10
|
-
import platform
|
|
11
9
|
import queue
|
|
12
10
|
plot_queue = queue.Queue()
|
|
13
11
|
|
|
14
|
-
if platform.system() == 'Darwin':
|
|
15
|
-
try:
|
|
16
|
-
matplotlib.use('TkAgg')
|
|
17
|
-
except ImportError:
|
|
18
|
-
matplotlib.use('Agg')
|
|
19
|
-
else:
|
|
20
|
-
matplotlib.use('TkAgg')
|
|
21
12
|
|
|
22
13
|
import matplotlib.pyplot as plt
|
|
23
14
|
from chroptiks.plotting_utils import *
|
|
@@ -155,17 +146,16 @@ def is_python_code(text: str) -> bool:
|
|
|
155
146
|
text = text.strip()
|
|
156
147
|
if not text:
|
|
157
148
|
return False
|
|
149
|
+
|
|
158
150
|
try:
|
|
159
|
-
compile(text, "<input>", "
|
|
151
|
+
compile(text, "<input>", "exec")
|
|
160
152
|
return True
|
|
161
153
|
except SyntaxError:
|
|
162
|
-
|
|
163
|
-
compile(text, "<input>", "exec")
|
|
164
|
-
return True
|
|
165
|
-
except SyntaxError:
|
|
166
|
-
return False
|
|
154
|
+
return False
|
|
167
155
|
except (OverflowError, ValueError):
|
|
168
156
|
return False
|
|
157
|
+
except IndentationError:
|
|
158
|
+
return True
|
|
169
159
|
def execute_python_code(code_str: str, state: ShellState, locals_dict: Dict[str, Any]) -> Tuple[ShellState, Any]:
|
|
170
160
|
import io
|
|
171
161
|
output_capture = io.StringIO()
|
|
@@ -1168,24 +1158,7 @@ def _run_agentic_mode(command: str,
|
|
|
1168
1158
|
compressed_state = state.npc.compress_planning_state(planning_state)
|
|
1169
1159
|
state.messages = [{"role": "system", "content": f"Session context: {compressed_state}"}]
|
|
1170
1160
|
|
|
1171
|
-
|
|
1172
|
-
for var_name, var_value in locals_dict.items():
|
|
1173
|
-
if not var_name.startswith('_') and var_name not in ['In', 'Out', 'exit', 'quit', 'get_ipython']:
|
|
1174
|
-
try:
|
|
1175
|
-
var_type = type(var_value).__name__
|
|
1176
|
-
var_repr = repr(var_value)
|
|
1177
|
-
if len(var_repr) > 100:
|
|
1178
|
-
var_repr = var_repr[:97] + "..."
|
|
1179
|
-
existing_vars_context += f"- {var_name} ({var_type}): {var_repr}\n"
|
|
1180
|
-
except:
|
|
1181
|
-
existing_vars_context += f"- {var_name} ({type(var_value).__name__}): <unrepresentable>\n"
|
|
1182
|
-
previous_code = ''
|
|
1183
|
-
next_step = ''
|
|
1184
|
-
steps = []
|
|
1185
|
-
while iteration < max_iterations and consecutive_failures < max_consecutive_failures:
|
|
1186
|
-
iteration += 1
|
|
1187
|
-
print(f"\n{_get_guac_agent_emoji(consecutive_failures, max_consecutive_failures)} Agentic iteration {iteration} ")
|
|
1188
|
-
|
|
1161
|
+
|
|
1189
1162
|
|
|
1190
1163
|
|
|
1191
1164
|
existing_vars_context = "EXISTING VARIABLES IN ENVIRONMENT:\n"
|
|
@@ -1489,6 +1462,7 @@ def execute_guac_command(command: str, state: ShellState, locals_dict: Dict[str,
|
|
|
1489
1462
|
|
|
1490
1463
|
if stripped_command.startswith('/') and stripped_command not in ["/refresh", "/agent", "/chat", "/cmd"]:
|
|
1491
1464
|
return execute_command(stripped_command, state, review=True, router=router)
|
|
1465
|
+
print(is_python_code(stripped_command))
|
|
1492
1466
|
if is_python_code(stripped_command):
|
|
1493
1467
|
try:
|
|
1494
1468
|
state, exec_output = execute_python_code(stripped_command, state, locals_dict)
|
|
@@ -1497,6 +1471,7 @@ def execute_guac_command(command: str, state: ShellState, locals_dict: Dict[str,
|
|
|
1497
1471
|
print("\nExecution interrupted by user")
|
|
1498
1472
|
return state, "Execution interrupted"
|
|
1499
1473
|
if state.current_mode == "agent":
|
|
1474
|
+
|
|
1500
1475
|
return _run_agentic_mode(stripped_command, state, locals_dict, npc_team_dir)
|
|
1501
1476
|
if state.current_mode == "cmd":
|
|
1502
1477
|
|
|
@@ -1908,38 +1883,78 @@ def enter_guac_mode(npc=None,
|
|
|
1908
1883
|
state.command_history = command_history
|
|
1909
1884
|
|
|
1910
1885
|
if npc is None and default_npc is None:
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1886
|
+
guac_npc_path = Path(npc_team_dir) / "guac.npc"
|
|
1887
|
+
if guac_npc_path.exists():
|
|
1888
|
+
npc = NPC(file=str(guac_npc_path),
|
|
1889
|
+
db_conn=command_history.engine)
|
|
1890
|
+
print(guac_npc_path, npc)
|
|
1891
|
+
|
|
1892
|
+
team_ctx_path = get_team_ctx_path(str(npc_team_dir))
|
|
1893
|
+
team_ctx = {}
|
|
1894
|
+
if team_ctx_path and Path(team_ctx_path).exists():
|
|
1895
|
+
with open(team_ctx_path, "r") as f:
|
|
1896
|
+
team_ctx = yaml.safe_load(f) or {}
|
|
1897
|
+
print(team_ctx, team_ctx_path)
|
|
1898
|
+
team = Team(team_path=str(npc_team_dir),
|
|
1899
|
+
forenpc=npc,
|
|
1900
|
+
jinxs={})
|
|
1901
|
+
team.name = team_ctx.get("team_name", "guac_global_team")
|
|
1902
|
+
team.team_ctx = team_ctx
|
|
1903
|
+
print(team)
|
|
1904
|
+
if npc.model is None:
|
|
1905
|
+
npc.model = team_ctx.get("model", state.chat_model)
|
|
1906
|
+
if npc.provider is None:
|
|
1907
|
+
npc.provider = team_ctx.get("provider", state.chat_provider)
|
|
1908
|
+
|
|
1909
|
+
for npc_name, npc_obj in team.npcs.items():
|
|
1910
|
+
if not npc_obj.model:
|
|
1911
|
+
npc_obj.model = team_ctx.get("model", state.chat_model)
|
|
1912
|
+
if not npc_obj.provider:
|
|
1913
|
+
npc_obj.provider = team_ctx.get("provider", state.chat_provider)
|
|
1914
|
+
else:
|
|
1915
|
+
print("No local guac.npc found. Checking for global team...")
|
|
1916
|
+
global_team_dir = ensure_global_guac_team()
|
|
1917
|
+
global_guac_npc_path = global_team_dir / "guac.npc"
|
|
1933
1918
|
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1919
|
+
if global_guac_npc_path.exists():
|
|
1920
|
+
print("Using global guac team")
|
|
1921
|
+
npc = NPC(file=str(global_guac_npc_path),
|
|
1922
|
+
db_conn=command_history.engine)
|
|
1923
|
+
team_ctx_path = global_team_dir / "team.ctx"
|
|
1924
|
+
team_ctx = {}
|
|
1925
|
+
if team_ctx_path.exists():
|
|
1926
|
+
with open(team_ctx_path, "r") as f:
|
|
1927
|
+
team_ctx = yaml.safe_load(f) or {}
|
|
1928
|
+
|
|
1929
|
+
team = Team(team_path=str(global_team_dir),
|
|
1930
|
+
forenpc=npc,
|
|
1931
|
+
jinxs={})
|
|
1932
|
+
team.name = team_ctx.get("team_name", "guac_global_team")
|
|
1933
|
+
team.team_ctx = team_ctx
|
|
1934
|
+
|
|
1935
|
+
if npc.model is None:
|
|
1936
|
+
npc.model = team_ctx.get("model", state.chat_model)
|
|
1937
|
+
if npc.provider is None:
|
|
1938
|
+
npc.provider = team_ctx.get("provider", state.chat_provider)
|
|
1939
|
+
else:
|
|
1940
|
+
print("Could not find or create global guac team. Please run /init to set up guac properly.")
|
|
1941
|
+
try:
|
|
1942
|
+
user_choice = input("Would you like to initialize guac now? (y/n): ").strip().lower()
|
|
1943
|
+
if user_choice == 'y':
|
|
1944
|
+
setup_npc_team(Path(npc_team_dir), lang)
|
|
1945
|
+
npc = NPC(file=str(Path(npc_team_dir) / "guac.npc"),
|
|
1946
|
+
db_conn=command_history.engine)
|
|
1947
|
+
team = Team(team_path=str(npc_team_dir), forenpc=npc, jinxs={})
|
|
1948
|
+
else:
|
|
1949
|
+
print("Exiting guac mode.")
|
|
1950
|
+
return
|
|
1951
|
+
except (KeyboardInterrupt, EOFError):
|
|
1952
|
+
print("Initialization cancelled. Exiting guac mode.")
|
|
1953
|
+
return
|
|
1941
1954
|
elif default_npc and npc is None:
|
|
1942
1955
|
npc = default_npc
|
|
1956
|
+
|
|
1957
|
+
|
|
1943
1958
|
state.npc = npc or default_npc
|
|
1944
1959
|
state.team = team or default_team
|
|
1945
1960
|
|
|
@@ -2,7 +2,7 @@ npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
npcsh/_state.py,sha256=sntRSm9DKthandawaLCf-semAm_1CNx3AUh-066G248,86498
|
|
3
3
|
npcsh/alicanto.py,sha256=S-_mFtEzE8CKWSctJawUtAKmVLgUz-loODTDtL0f6eo,41538
|
|
4
4
|
npcsh/corca.py,sha256=XuaNVhZ1Yslx43AcdmApViUXMuWMoXncLaNT0wwiHmk,47737
|
|
5
|
-
npcsh/guac.py,sha256=
|
|
5
|
+
npcsh/guac.py,sha256=sVdLYVkzkQw6TE7crtLUX0QJZFkzQthWZTe1p7IfAQE,80412
|
|
6
6
|
npcsh/mcp_helpers.py,sha256=9TsCfcquGu_vX4WaKlY3J3P13-uxruQKrXng-jJ5YyY,11176
|
|
7
7
|
npcsh/mcp_server.py,sha256=krc1rhiSU9gI76w99Ph3Mk7OyUVzfiEXKMvVid-7-Ik,5201
|
|
8
8
|
npcsh/npc.py,sha256=OjCDu03hAcXyqPbzMeBBr1cBnmQsB1FBhd7kLNsWALc,8330
|
|
@@ -39,35 +39,35 @@ npcsh/npc_team/jinxs/image_generation.jinx,sha256=bQxZdEm0_eqvf_OJSHw3qarp8Klp3L
|
|
|
39
39
|
npcsh/npc_team/jinxs/internet_search.jinx,sha256=s8zVxwKFUAof_VzQrwB5dpAQdeJ6hUBkbIdRsT-I5mo,1267
|
|
40
40
|
npcsh/npc_team/jinxs/python_executor.jinx,sha256=vZz3pZaj1BnPFHMs_wpyjRc0b32JR4rLhZfulCMDF1s,398
|
|
41
41
|
npcsh/npc_team/jinxs/screen_cap.jinx,sha256=-4DG0EiEe61N_kMhVqqHKhLVGOLuZQT9ax6IZk20NjI,960
|
|
42
|
-
npcsh-1.0.
|
|
43
|
-
npcsh-1.0.
|
|
44
|
-
npcsh-1.0.
|
|
45
|
-
npcsh-1.0.
|
|
46
|
-
npcsh-1.0.
|
|
47
|
-
npcsh-1.0.
|
|
48
|
-
npcsh-1.0.
|
|
49
|
-
npcsh-1.0.
|
|
50
|
-
npcsh-1.0.
|
|
51
|
-
npcsh-1.0.
|
|
52
|
-
npcsh-1.0.
|
|
53
|
-
npcsh-1.0.
|
|
54
|
-
npcsh-1.0.
|
|
55
|
-
npcsh-1.0.
|
|
56
|
-
npcsh-1.0.
|
|
57
|
-
npcsh-1.0.
|
|
58
|
-
npcsh-1.0.
|
|
59
|
-
npcsh-1.0.
|
|
60
|
-
npcsh-1.0.
|
|
61
|
-
npcsh-1.0.
|
|
62
|
-
npcsh-1.0.
|
|
63
|
-
npcsh-1.0.
|
|
64
|
-
npcsh-1.0.
|
|
65
|
-
npcsh-1.0.
|
|
66
|
-
npcsh-1.0.
|
|
67
|
-
npcsh-1.0.
|
|
68
|
-
npcsh-1.0.
|
|
69
|
-
npcsh-1.0.
|
|
70
|
-
npcsh-1.0.
|
|
71
|
-
npcsh-1.0.
|
|
72
|
-
npcsh-1.0.
|
|
73
|
-
npcsh-1.0.
|
|
42
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
43
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
44
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/bash_executer.jinx,sha256=C_oQccOY8cKevMMPLRdznlMOccQvLgyzyOIThXvmrD8,692
|
|
45
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/corca.npc,sha256=HI3Bs6KlUBPMz7icF1TRE8-V3f3EdU_VxvQxEpru3L4,662
|
|
46
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
47
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/edit_file.jinx,sha256=4PaJs8g_cdeDpbQwQSBycU5RDA0rczEC_NpLfLjo74Y,3490
|
|
48
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
49
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
50
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
51
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
52
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/image_generation.jinx,sha256=bQxZdEm0_eqvf_OJSHw3qarp8Klp3LlBDv1_HY3COo4,1307
|
|
53
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/internet_search.jinx,sha256=s8zVxwKFUAof_VzQrwB5dpAQdeJ6hUBkbIdRsT-I5mo,1267
|
|
54
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
55
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
56
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
57
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
58
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
59
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
60
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
61
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
62
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/python_executor.jinx,sha256=vZz3pZaj1BnPFHMs_wpyjRc0b32JR4rLhZfulCMDF1s,398
|
|
63
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/screen_cap.jinx,sha256=-4DG0EiEe61N_kMhVqqHKhLVGOLuZQT9ax6IZk20NjI,960
|
|
64
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
65
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
66
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
67
|
+
npcsh-1.0.31.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
68
|
+
npcsh-1.0.31.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
|
|
69
|
+
npcsh-1.0.31.dist-info/METADATA,sha256=gAjnehN3A7kfXcP4WxyuZnf2JwKBBklbLjUl2VtCuS4,25486
|
|
70
|
+
npcsh-1.0.31.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
71
|
+
npcsh-1.0.31.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
|
|
72
|
+
npcsh-1.0.31.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
|
|
73
|
+
npcsh-1.0.31.dist-info/RECORD,,
|
|
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
|