npcsh 1.0.30__py3-none-any.whl → 1.0.32__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/alicanto.py +1001 -1015
- npcsh/corca.py +61 -21
- npcsh/guac.py +77 -62
- npcsh/routes.py +16 -15
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/METADATA +1 -1
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/RECORD +36 -36
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/bash_executer.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/foreman.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/image_generation.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/internet_search.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/python_executor.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/screen_cap.jinx +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.0.30.data → npcsh-1.0.32.data}/data/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/WHEEL +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/entry_points.txt +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/licenses/LICENSE +0 -0
- {npcsh-1.0.30.dist-info → npcsh-1.0.32.dist-info}/top_level.txt +0 -0
npcsh/corca.py
CHANGED
|
@@ -7,6 +7,7 @@ from contextlib import AsyncExitStack
|
|
|
7
7
|
from typing import Optional, Callable, Dict, Any, Tuple, List
|
|
8
8
|
import shutil
|
|
9
9
|
import traceback
|
|
10
|
+
from litellm.exceptions import Timeout, ContextWindowExceededError, RateLimitError
|
|
10
11
|
|
|
11
12
|
try:
|
|
12
13
|
from mcp import ClientSession, StdioServerParameters
|
|
@@ -250,6 +251,7 @@ def process_mcp_stream(stream_response, active_npc):
|
|
|
250
251
|
|
|
251
252
|
|
|
252
253
|
|
|
254
|
+
|
|
253
255
|
def execute_command_corca(command: str, state: ShellState, command_history, selected_mcp_tools_names: Optional[List[str]] = None) -> Tuple[ShellState, Any]:
|
|
254
256
|
mcp_tools_for_llm = []
|
|
255
257
|
|
|
@@ -270,27 +272,63 @@ def execute_command_corca(command: str, state: ShellState, command_history, sele
|
|
|
270
272
|
|
|
271
273
|
active_npc = state.npc if isinstance(state.npc, NPC) else NPC(name="default")
|
|
272
274
|
|
|
273
|
-
if len(state.messages) >
|
|
274
|
-
compressed_state = active_npc.compress_planning_state(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
275
|
+
if len(state.messages) > 50:
|
|
276
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
277
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
278
|
+
print(compressed_state)
|
|
279
|
+
|
|
280
|
+
try:
|
|
281
|
+
response_dict = get_llm_response(
|
|
282
|
+
prompt=command,
|
|
283
|
+
npc=state.npc,
|
|
284
|
+
messages=state.messages,
|
|
285
|
+
tools=mcp_tools_for_llm,
|
|
286
|
+
auto_process_tool_calls=False,
|
|
287
|
+
stream=state.stream_output,
|
|
288
|
+
team=state.team
|
|
289
|
+
)
|
|
290
|
+
except Timeout:
|
|
291
|
+
response_dict = get_llm_response(
|
|
292
|
+
prompt=command,
|
|
293
|
+
npc=state.npc,
|
|
294
|
+
messages=state.messages,
|
|
295
|
+
tools=mcp_tools_for_llm,
|
|
296
|
+
auto_process_tool_calls=False,
|
|
297
|
+
stream=state.stream_output,
|
|
298
|
+
team=state.team
|
|
299
|
+
)
|
|
300
|
+
except ContextWindowExceededError:
|
|
301
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
302
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
303
|
+
|
|
304
|
+
response_dict = get_llm_response(
|
|
305
|
+
prompt=command,
|
|
306
|
+
npc=state.npc,
|
|
307
|
+
messages=state.messages,
|
|
308
|
+
tools=mcp_tools_for_llm,
|
|
309
|
+
auto_process_tool_calls=False,
|
|
310
|
+
stream=state.stream_output,
|
|
311
|
+
team=state.team
|
|
312
|
+
)
|
|
313
|
+
except RateLimitError:
|
|
314
|
+
import time
|
|
315
|
+
print('rate limit hit... waiting 60 seconds')
|
|
316
|
+
time.sleep(60)
|
|
317
|
+
print('compressing..... ')
|
|
318
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
319
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
320
|
+
|
|
321
|
+
response_dict = get_llm_response(
|
|
322
|
+
prompt=command,
|
|
323
|
+
npc=state.npc,
|
|
324
|
+
messages=state.messages,
|
|
325
|
+
tools=mcp_tools_for_llm,
|
|
326
|
+
auto_process_tool_calls=False,
|
|
327
|
+
stream=state.stream_output,
|
|
328
|
+
team=state.team
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
|
|
294
332
|
stream_response = response_dict.get('response')
|
|
295
333
|
messages = response_dict.get('messages', state.messages)
|
|
296
334
|
|
|
@@ -308,6 +346,8 @@ def execute_command_corca(command: str, state: ShellState, command_history, sele
|
|
|
308
346
|
"tool_calls": tool_calls,
|
|
309
347
|
"messages": state.messages
|
|
310
348
|
}
|
|
349
|
+
|
|
350
|
+
|
|
311
351
|
def _resolve_and_copy_mcp_server_path(
|
|
312
352
|
explicit_path: Optional[str],
|
|
313
353
|
current_path: Optional[str],
|
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
|
|
npcsh/routes.py
CHANGED
|
@@ -1130,18 +1130,11 @@ def yap_handler(command: str, **kwargs):
|
|
|
1130
1130
|
@router.route("alicanto", "Conduct deep research with multiple perspectives, identifying gold insights and cliff warnings")
|
|
1131
1131
|
def alicanto_handler(command: str, **kwargs):
|
|
1132
1132
|
messages = safe_get(kwargs, "messages", [])
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
1133
|
parts = shlex.split(command)
|
|
1136
|
-
|
|
1137
1134
|
|
|
1138
1135
|
query = ""
|
|
1139
1136
|
num_npcs = safe_get(kwargs, 'num_npcs', 5)
|
|
1140
1137
|
depth = safe_get(kwargs, 'depth', 3)
|
|
1141
|
-
exploration_factor = safe_get(kwargs, 'exploration', 0.3)
|
|
1142
|
-
creativity_factor = safe_get(kwargs, 'creativity', 0.5)
|
|
1143
|
-
output_format = safe_get(kwargs, 'format', 'report')
|
|
1144
|
-
|
|
1145
1138
|
|
|
1146
1139
|
i = 1
|
|
1147
1140
|
while i < len(parts):
|
|
@@ -1217,17 +1210,25 @@ def alicanto_handler(command: str, **kwargs):
|
|
|
1217
1210
|
|
|
1218
1211
|
try:
|
|
1219
1212
|
logging.info(f"Starting Alicanto research on: {query}")
|
|
1213
|
+
model = safe_get(kwargs, 'model')
|
|
1214
|
+
if len(model) == 0 :
|
|
1215
|
+
model = NPCSH_CHAT_MODEL
|
|
1216
|
+
provider = safe_get(kwargs, 'provider')
|
|
1217
|
+
if len(provider) == 0 :
|
|
1218
|
+
provider = NPCSH_CHAT_PROVIDER
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
print('model: ', model)
|
|
1222
|
+
print('provider: ', provider)
|
|
1223
|
+
|
|
1220
1224
|
result = alicanto(
|
|
1221
|
-
|
|
1225
|
+
query,
|
|
1222
1226
|
num_npcs=num_npcs,
|
|
1223
1227
|
depth=depth,
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
exploration_factor=exploration_factor,
|
|
1229
|
-
creativity_factor=creativity_factor,
|
|
1230
|
-
output_format=output_format
|
|
1228
|
+
model=model,
|
|
1229
|
+
provider=provider,
|
|
1230
|
+
max_steps = safe_get(kwargs, 'max_steps', 20),
|
|
1231
|
+
|
|
1231
1232
|
)
|
|
1232
1233
|
|
|
1233
1234
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
npcsh/_state.py,sha256=sntRSm9DKthandawaLCf-semAm_1CNx3AUh-066G248,86498
|
|
3
|
-
npcsh/alicanto.py,sha256=
|
|
4
|
-
npcsh/corca.py,sha256=
|
|
5
|
-
npcsh/guac.py,sha256=
|
|
3
|
+
npcsh/alicanto.py,sha256=ZftzxfQPQuuj9VB9V2FCTQN5NIE9Rvsg4iNiNqOUE6U,38118
|
|
4
|
+
npcsh/corca.py,sha256=iX_20JYYak_KKEKgG-S5buKkBc-1iZ-k2YdPr1FDG2A,49141
|
|
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
|
|
9
9
|
npcsh/npcsh.py,sha256=3WLkZxHGzRekVGxHiJUA4VFyhC3A1jwX11aB0kgzE9s,8818
|
|
10
10
|
npcsh/plonk.py,sha256=IfOuiE5FBvk-EIsrWFjGy0SrNywDpn4a49E7seBtEmY,14246
|
|
11
11
|
npcsh/pti.py,sha256=UciiiH2Kz4ERQFy0-FX6BQEU2VxYQEUril-_Cvj76Y0,7853
|
|
12
|
-
npcsh/routes.py,sha256=
|
|
12
|
+
npcsh/routes.py,sha256=ulQMLrNwOAQqfbHC1Nijr8lkn9v4efviCdkgZe9T0iY,44106
|
|
13
13
|
npcsh/spool.py,sha256=oCive2dbn1o3UGUJnFMzfON6g4bOnauuzyyQBgul6RI,9839
|
|
14
14
|
npcsh/wander.py,sha256=8WOX8az8BXjizXGraEvu-ZVphi6PECKZzo9alTK4gmA,21730
|
|
15
15
|
npcsh/yap.py,sha256=QU-j9eg8zixXG6nyjoIYXsanJ4FjPnzhS4aJ241HLxw,18467
|
|
@@ -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.32.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
43
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
44
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/bash_executer.jinx,sha256=C_oQccOY8cKevMMPLRdznlMOccQvLgyzyOIThXvmrD8,692
|
|
45
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/corca.npc,sha256=HI3Bs6KlUBPMz7icF1TRE8-V3f3EdU_VxvQxEpru3L4,662
|
|
46
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
47
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/edit_file.jinx,sha256=4PaJs8g_cdeDpbQwQSBycU5RDA0rczEC_NpLfLjo74Y,3490
|
|
48
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
49
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
50
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
51
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
52
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/image_generation.jinx,sha256=bQxZdEm0_eqvf_OJSHw3qarp8Klp3LlBDv1_HY3COo4,1307
|
|
53
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/internet_search.jinx,sha256=s8zVxwKFUAof_VzQrwB5dpAQdeJ6hUBkbIdRsT-I5mo,1267
|
|
54
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
55
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
56
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
57
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
58
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
59
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
60
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
61
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
62
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/python_executor.jinx,sha256=vZz3pZaj1BnPFHMs_wpyjRc0b32JR4rLhZfulCMDF1s,398
|
|
63
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/screen_cap.jinx,sha256=-4DG0EiEe61N_kMhVqqHKhLVGOLuZQT9ax6IZk20NjI,960
|
|
64
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
65
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
66
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
67
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
68
|
+
npcsh-1.0.32.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
|
|
69
|
+
npcsh-1.0.32.dist-info/METADATA,sha256=FmgUyMW-g9qkavXUoHlMl9juRc-b1Jka6yyDzj8kN1s,25486
|
|
70
|
+
npcsh-1.0.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
71
|
+
npcsh-1.0.32.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
|
|
72
|
+
npcsh-1.0.32.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
|
|
73
|
+
npcsh-1.0.32.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
|