npcsh 1.1.12__py3-none-any.whl → 1.1.14__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/_state.py +700 -377
- npcsh/alicanto.py +54 -1153
- npcsh/completion.py +206 -0
- npcsh/config.py +163 -0
- npcsh/corca.py +35 -1462
- npcsh/execution.py +185 -0
- npcsh/guac.py +31 -1986
- npcsh/npc_team/jinxs/code/sh.jinx +11 -15
- npcsh/npc_team/jinxs/modes/alicanto.jinx +186 -80
- npcsh/npc_team/jinxs/modes/corca.jinx +243 -22
- npcsh/npc_team/jinxs/modes/guac.jinx +313 -42
- npcsh/npc_team/jinxs/modes/plonk.jinx +209 -48
- npcsh/npc_team/jinxs/modes/pti.jinx +167 -25
- npcsh/npc_team/jinxs/modes/spool.jinx +158 -37
- npcsh/npc_team/jinxs/modes/wander.jinx +179 -74
- npcsh/npc_team/jinxs/modes/yap.jinx +258 -21
- npcsh/npc_team/jinxs/utils/chat.jinx +39 -12
- npcsh/npc_team/jinxs/utils/cmd.jinx +44 -0
- npcsh/npc_team/jinxs/utils/search.jinx +3 -3
- npcsh/npc_team/jinxs/utils/usage.jinx +33 -0
- npcsh/npcsh.py +76 -20
- npcsh/parsing.py +118 -0
- npcsh/plonk.py +41 -329
- npcsh/pti.py +41 -201
- npcsh/spool.py +34 -239
- npcsh/ui.py +199 -0
- npcsh/wander.py +54 -542
- npcsh/yap.py +38 -570
- npcsh-1.1.14.data/data/npcsh/npc_team/alicanto.jinx +194 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/chat.jinx +44 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/cmd.jinx +44 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/corca.jinx +249 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/guac.jinx +317 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/plonk.jinx +214 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/pti.jinx +170 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/search.jinx +3 -3
- npcsh-1.1.14.data/data/npcsh/npc_team/sh.jinx +34 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/spool.jinx +161 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/usage.jinx +33 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/wander.jinx +186 -0
- npcsh-1.1.14.data/data/npcsh/npc_team/yap.jinx +262 -0
- {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/METADATA +1 -1
- npcsh-1.1.14.dist-info/RECORD +135 -0
- npcsh-1.1.12.data/data/npcsh/npc_team/alicanto.jinx +0 -88
- npcsh-1.1.12.data/data/npcsh/npc_team/chat.jinx +0 -17
- npcsh-1.1.12.data/data/npcsh/npc_team/corca.jinx +0 -28
- npcsh-1.1.12.data/data/npcsh/npc_team/guac.jinx +0 -46
- npcsh-1.1.12.data/data/npcsh/npc_team/plonk.jinx +0 -53
- npcsh-1.1.12.data/data/npcsh/npc_team/pti.jinx +0 -28
- npcsh-1.1.12.data/data/npcsh/npc_team/sh.jinx +0 -38
- npcsh-1.1.12.data/data/npcsh/npc_team/spool.jinx +0 -40
- npcsh-1.1.12.data/data/npcsh/npc_team/wander.jinx +0 -81
- npcsh-1.1.12.data/data/npcsh/npc_team/yap.jinx +0 -25
- npcsh-1.1.12.dist-info/RECORD +0 -126
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/agent.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/build.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/compile.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/compress.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca_example.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/foreman.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/help.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/init.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/jinxs.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/load_file.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npc-studio.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/ots.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/python.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/roll.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sample.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/serve.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/set.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sleep.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sql.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/trigger.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/vixynt.jinx +0 -0
- {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/WHEEL +0 -0
- {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/entry_points.txt +0 -0
- {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/licenses/LICENSE +0 -0
- {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
jinx_name: yap
|
|
2
|
+
description: Voice chat mode - speech-to-text input, text-to-speech output
|
|
3
|
+
inputs:
|
|
4
|
+
- model: null
|
|
5
|
+
- provider: null
|
|
6
|
+
- tts_model: kokoro
|
|
7
|
+
- voice: af_heart
|
|
8
|
+
- files: null
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
- name: yap_repl
|
|
12
|
+
engine: python
|
|
13
|
+
code: |
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
import time
|
|
17
|
+
import tempfile
|
|
18
|
+
import threading
|
|
19
|
+
import queue
|
|
20
|
+
from termcolor import colored
|
|
21
|
+
|
|
22
|
+
# Audio imports with graceful fallback
|
|
23
|
+
try:
|
|
24
|
+
import torch
|
|
25
|
+
import pyaudio
|
|
26
|
+
import wave
|
|
27
|
+
import numpy as np
|
|
28
|
+
from faster_whisper import WhisperModel
|
|
29
|
+
from gtts import gTTS
|
|
30
|
+
from npcpy.data.audio import (
|
|
31
|
+
FORMAT, CHANNELS, RATE, CHUNK,
|
|
32
|
+
transcribe_recording, convert_mp3_to_wav, cleanup_temp_files
|
|
33
|
+
)
|
|
34
|
+
AUDIO_AVAILABLE = True
|
|
35
|
+
except ImportError as e:
|
|
36
|
+
AUDIO_AVAILABLE = False
|
|
37
|
+
print(colored(f"Audio dependencies not available: {e}", "yellow"))
|
|
38
|
+
print("Install with: pip install npcsh[audio]")
|
|
39
|
+
|
|
40
|
+
from npcpy.llm_funcs import get_llm_response
|
|
41
|
+
from npcpy.npc_sysenv import get_system_message, render_markdown
|
|
42
|
+
from npcpy.data.load import load_file_contents
|
|
43
|
+
from npcpy.data.text import rag_search
|
|
44
|
+
|
|
45
|
+
npc = context.get('npc')
|
|
46
|
+
team = context.get('team')
|
|
47
|
+
messages = context.get('messages', [])
|
|
48
|
+
files = context.get('files')
|
|
49
|
+
tts_model = context.get('tts_model', 'kokoro')
|
|
50
|
+
voice = context.get('voice', 'af_heart')
|
|
51
|
+
|
|
52
|
+
model = context.get('model') or (npc.model if npc else None)
|
|
53
|
+
provider = context.get('provider') or (npc.provider if npc else None)
|
|
54
|
+
|
|
55
|
+
print("""
|
|
56
|
+
██╗ ██╗ █████╗ ██████╗
|
|
57
|
+
╚██╗ ██╔╝██╔══██╗██╔══██╗
|
|
58
|
+
╚████╔╝ ███████║██████╔╝
|
|
59
|
+
╚██╔╝ ██╔══██║██╔═══╝
|
|
60
|
+
██║ ██║ ██║██║
|
|
61
|
+
╚═╝ ╚═╝ ╚═╝╚═╝
|
|
62
|
+
|
|
63
|
+
Voice Chat Mode
|
|
64
|
+
""")
|
|
65
|
+
|
|
66
|
+
npc_name = npc.name if npc else "yap"
|
|
67
|
+
print(f"Entering yap mode (NPC: {npc_name}). Type '/yq' to exit.")
|
|
68
|
+
|
|
69
|
+
if not AUDIO_AVAILABLE:
|
|
70
|
+
print(colored("Audio not available. Falling back to text mode.", "yellow"))
|
|
71
|
+
|
|
72
|
+
# Load files for RAG context
|
|
73
|
+
loaded_chunks = {}
|
|
74
|
+
if files:
|
|
75
|
+
if isinstance(files, str):
|
|
76
|
+
files = [f.strip() for f in files.split(',')]
|
|
77
|
+
for file_path in files:
|
|
78
|
+
file_path = os.path.expanduser(file_path)
|
|
79
|
+
if os.path.exists(file_path):
|
|
80
|
+
try:
|
|
81
|
+
chunks = load_file_contents(file_path)
|
|
82
|
+
loaded_chunks[file_path] = chunks
|
|
83
|
+
print(colored(f"Loaded: {file_path}", "green"))
|
|
84
|
+
except Exception as e:
|
|
85
|
+
print(colored(f"Error loading {file_path}: {e}", "red"))
|
|
86
|
+
|
|
87
|
+
# System message for concise voice responses
|
|
88
|
+
sys_msg = get_system_message(npc) if npc else "You are a helpful assistant."
|
|
89
|
+
sys_msg += "\n\nProvide brief responses of 1-2 sentences unless asked for more detail. Keep responses clear and conversational for voice."
|
|
90
|
+
|
|
91
|
+
if not messages or messages[0].get("role") != "system":
|
|
92
|
+
messages.insert(0, {"role": "system", "content": sys_msg})
|
|
93
|
+
|
|
94
|
+
# Audio state
|
|
95
|
+
vad_model = None
|
|
96
|
+
whisper_model = None
|
|
97
|
+
|
|
98
|
+
if AUDIO_AVAILABLE:
|
|
99
|
+
try:
|
|
100
|
+
# Load VAD model for voice activity detection
|
|
101
|
+
vad_model, _ = torch.hub.load(
|
|
102
|
+
repo_or_dir="snakers4/silero-vad",
|
|
103
|
+
model="silero_vad",
|
|
104
|
+
force_reload=False,
|
|
105
|
+
onnx=False,
|
|
106
|
+
verbose=False
|
|
107
|
+
)
|
|
108
|
+
vad_model.to('cpu')
|
|
109
|
+
print(colored("VAD model loaded.", "green"))
|
|
110
|
+
|
|
111
|
+
# Load Whisper for STT
|
|
112
|
+
whisper_model = WhisperModel("base", device="cpu", compute_type="int8")
|
|
113
|
+
print(colored("Whisper model loaded.", "green"))
|
|
114
|
+
except Exception as e:
|
|
115
|
+
print(colored(f"Error loading audio models: {e}", "red"))
|
|
116
|
+
AUDIO_AVAILABLE = False
|
|
117
|
+
|
|
118
|
+
def speak_text(text, tts_model='kokoro', voice='af_heart'):
|
|
119
|
+
"""Convert text to speech and play it"""
|
|
120
|
+
if not AUDIO_AVAILABLE:
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
# Use gTTS as fallback
|
|
125
|
+
tts = gTTS(text=text, lang='en')
|
|
126
|
+
with tempfile.NamedTemporaryFile(suffix='.mp3', delete=False) as f:
|
|
127
|
+
tts.save(f.name)
|
|
128
|
+
wav_path = convert_mp3_to_wav(f.name)
|
|
129
|
+
|
|
130
|
+
# Play audio
|
|
131
|
+
import subprocess
|
|
132
|
+
if sys.platform == 'darwin':
|
|
133
|
+
subprocess.run(['afplay', wav_path], check=True)
|
|
134
|
+
elif sys.platform == 'linux':
|
|
135
|
+
subprocess.run(['aplay', wav_path], check=True)
|
|
136
|
+
else:
|
|
137
|
+
# Windows
|
|
138
|
+
import winsound
|
|
139
|
+
winsound.PlaySound(wav_path, winsound.SND_FILENAME)
|
|
140
|
+
|
|
141
|
+
cleanup_temp_files([f.name, wav_path])
|
|
142
|
+
except Exception as e:
|
|
143
|
+
print(colored(f"TTS error: {e}", "red"))
|
|
144
|
+
|
|
145
|
+
def record_audio(duration=5):
|
|
146
|
+
"""Record audio from microphone"""
|
|
147
|
+
if not AUDIO_AVAILABLE:
|
|
148
|
+
return None
|
|
149
|
+
|
|
150
|
+
try:
|
|
151
|
+
p = pyaudio.PyAudio()
|
|
152
|
+
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
|
|
153
|
+
|
|
154
|
+
print(colored("Recording...", "cyan"), end='', flush=True)
|
|
155
|
+
frames = []
|
|
156
|
+
for _ in range(0, int(RATE / CHUNK * duration)):
|
|
157
|
+
data = stream.read(CHUNK)
|
|
158
|
+
frames.append(data)
|
|
159
|
+
print(colored(" Done.", "cyan"))
|
|
160
|
+
|
|
161
|
+
stream.stop_stream()
|
|
162
|
+
stream.close()
|
|
163
|
+
p.terminate()
|
|
164
|
+
|
|
165
|
+
# Save to temp file
|
|
166
|
+
with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f:
|
|
167
|
+
wf = wave.open(f.name, 'wb')
|
|
168
|
+
wf.setnchannels(CHANNELS)
|
|
169
|
+
wf.setsampwidth(p.get_sample_size(FORMAT))
|
|
170
|
+
wf.setframerate(RATE)
|
|
171
|
+
wf.writeframes(b''.join(frames))
|
|
172
|
+
wf.close()
|
|
173
|
+
return f.name
|
|
174
|
+
except Exception as e:
|
|
175
|
+
print(colored(f"Recording error: {e}", "red"))
|
|
176
|
+
return None
|
|
177
|
+
|
|
178
|
+
def transcribe_audio(audio_path):
|
|
179
|
+
"""Transcribe audio to text using Whisper"""
|
|
180
|
+
if not whisper_model or not audio_path:
|
|
181
|
+
return ""
|
|
182
|
+
|
|
183
|
+
try:
|
|
184
|
+
segments, _ = whisper_model.transcribe(audio_path, beam_size=5)
|
|
185
|
+
text = " ".join([seg.text for seg in segments])
|
|
186
|
+
cleanup_temp_files([audio_path])
|
|
187
|
+
return text.strip()
|
|
188
|
+
except Exception as e:
|
|
189
|
+
print(colored(f"Transcription error: {e}", "red"))
|
|
190
|
+
return ""
|
|
191
|
+
|
|
192
|
+
# REPL loop
|
|
193
|
+
while True:
|
|
194
|
+
try:
|
|
195
|
+
# Voice input or text input
|
|
196
|
+
if AUDIO_AVAILABLE:
|
|
197
|
+
prompt_str = f"{npc_name}:yap> [Press Enter to speak, or type] "
|
|
198
|
+
else:
|
|
199
|
+
prompt_str = f"{npc_name}:yap> "
|
|
200
|
+
|
|
201
|
+
user_input = input(prompt_str).strip()
|
|
202
|
+
|
|
203
|
+
if user_input.lower() == "/yq":
|
|
204
|
+
print("Exiting yap mode.")
|
|
205
|
+
break
|
|
206
|
+
|
|
207
|
+
# Empty input = record audio
|
|
208
|
+
if not user_input and AUDIO_AVAILABLE:
|
|
209
|
+
audio_path = record_audio(5)
|
|
210
|
+
if audio_path:
|
|
211
|
+
user_input = transcribe_audio(audio_path)
|
|
212
|
+
if user_input:
|
|
213
|
+
print(colored(f"You said: {user_input}", "cyan"))
|
|
214
|
+
else:
|
|
215
|
+
print(colored("Could not transcribe audio.", "yellow"))
|
|
216
|
+
continue
|
|
217
|
+
else:
|
|
218
|
+
continue
|
|
219
|
+
|
|
220
|
+
if not user_input:
|
|
221
|
+
continue
|
|
222
|
+
|
|
223
|
+
# Add RAG context if files loaded
|
|
224
|
+
current_prompt = user_input
|
|
225
|
+
if loaded_chunks:
|
|
226
|
+
context_content = ""
|
|
227
|
+
for filename, chunks in loaded_chunks.items():
|
|
228
|
+
full_text = "\n".join(chunks)
|
|
229
|
+
retrieved = rag_search(user_input, full_text, similarity_threshold=0.3)
|
|
230
|
+
if retrieved:
|
|
231
|
+
context_content += f"\n{retrieved}\n"
|
|
232
|
+
if context_content:
|
|
233
|
+
current_prompt += f"\n\nContext:{context_content}"
|
|
234
|
+
|
|
235
|
+
# Get response
|
|
236
|
+
resp = get_llm_response(
|
|
237
|
+
current_prompt,
|
|
238
|
+
model=model,
|
|
239
|
+
provider=provider,
|
|
240
|
+
messages=messages,
|
|
241
|
+
stream=False, # Don't stream for voice
|
|
242
|
+
npc=npc
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
messages = resp.get('messages', messages)
|
|
246
|
+
response_text = str(resp.get('response', ''))
|
|
247
|
+
|
|
248
|
+
# Display and speak response
|
|
249
|
+
print(colored(f"{npc_name}: ", "green") + response_text)
|
|
250
|
+
|
|
251
|
+
if AUDIO_AVAILABLE:
|
|
252
|
+
speak_text(response_text, tts_model, voice)
|
|
253
|
+
|
|
254
|
+
except KeyboardInterrupt:
|
|
255
|
+
print("\nUse '/yq' to exit or continue.")
|
|
256
|
+
continue
|
|
257
|
+
except EOFError:
|
|
258
|
+
print("\nExiting yap mode.")
|
|
259
|
+
break
|
|
260
|
+
|
|
261
|
+
context['output'] = "Exited yap mode."
|
|
262
|
+
context['messages'] = messages
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
npcsh/_state.py,sha256=jRXIBNvrf76dJVDkXe4fQmibLuQGIHzPDfY6arGEa-I,126564
|
|
3
|
+
npcsh/alicanto.py,sha256=SXxpT525cOje1J60OMwpaEdWfyPVTEecl_dTVpOvUYQ,2415
|
|
4
|
+
npcsh/build.py,sha256=UuId0_rQml40A4U1KuvMekRyfB30s8HiLsXFJjqrBmM,7692
|
|
5
|
+
npcsh/completion.py,sha256=iX7JDBGC_Tiutr3Iux5zB6eHKu2bLsJfv9Klln0iUq8,5666
|
|
6
|
+
npcsh/config.py,sha256=1m5WNft9PbAlDCTMmnA_tI27UracAvME7MCC9udBvMg,5541
|
|
7
|
+
npcsh/corca.py,sha256=zZRcW_EDoVsz6Xhyos1dlOgk7oNF2-bJvHraLGLj8pc,1568
|
|
8
|
+
npcsh/execution.py,sha256=sgM6HwAfGnattdItKtNpzvQJhhDh5ro2mPfp2swFbys,5270
|
|
9
|
+
npcsh/guac.py,sha256=nU33ONVP4He0ak9kKP1sJLsoMBm0Zl8q0Zp7h17Ev1E,1342
|
|
10
|
+
npcsh/mcp_helpers.py,sha256=9TsCfcquGu_vX4WaKlY3J3P13-uxruQKrXng-jJ5YyY,11176
|
|
11
|
+
npcsh/mcp_server.py,sha256=Lfpabnwi_xu0UudJxQ_YNyyCn2f0_JjzorhWmIeclwY,8777
|
|
12
|
+
npcsh/npc.py,sha256=yqgqZDLwqniIbbDu-vaJf31fWVbOrtgNnFXfjDBk-D8,9853
|
|
13
|
+
npcsh/npcsh.py,sha256=P3Ce0TATwDXRGKT00ilKawVZUKJFAt9ImIYbtGWdin4,11906
|
|
14
|
+
npcsh/parsing.py,sha256=eGATFUkDvHu5pVbh0RswhWEmGjcIsLaDwgxTtPbC9sk,2943
|
|
15
|
+
npcsh/plonk.py,sha256=34ORKsIFkIK9BK5nNM4KQRprA-RVXe1vLk_vHNK4wmI,1725
|
|
16
|
+
npcsh/pti.py,sha256=zTqE6bH4H_QOqJ4zQbC4-vT_dm7TE9iUIqTbIGb_bxY,1783
|
|
17
|
+
npcsh/routes.py,sha256=27rZUwiMK12WuFEDOxLL_F_F8GjmHlFBxKQRuvElrHI,4967
|
|
18
|
+
npcsh/spool.py,sha256=G0Sc_veJVKqoEdeOCTkBfAwFSHIMK5oAwYel1rr463A,1508
|
|
19
|
+
npcsh/ui.py,sha256=unUQvgaVbE1LapC9xK2Cirho2WQo57EyERVvEMYcnHU,6485
|
|
20
|
+
npcsh/wander.py,sha256=CRQ8eCaIckJL21wLCXTjj5f0bnVmUEK_vHipFGKghGs,2288
|
|
21
|
+
npcsh/yap.py,sha256=jvGHHaFfPgQheLwWC_ORn63eGDPOq9vZCh-OBaSeu3A,1593
|
|
22
|
+
npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
23
|
+
npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
24
|
+
npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
|
|
25
|
+
npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
26
|
+
npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
|
|
27
|
+
npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
28
|
+
npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
29
|
+
npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
30
|
+
npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
31
|
+
npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
32
|
+
npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
33
|
+
npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
34
|
+
npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
35
|
+
npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
36
|
+
npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
37
|
+
npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
38
|
+
npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
39
|
+
npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
40
|
+
npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
41
|
+
npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
42
|
+
npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
43
|
+
npcsh/npc_team/jinxs/code/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
|
|
44
|
+
npcsh/npc_team/jinxs/code/sh.jinx,sha256=5cX7LWqbyXrqzjhjVWY3hw0intjA7mtFtk0nNK3fooo,943
|
|
45
|
+
npcsh/npc_team/jinxs/code/sql.jinx,sha256=qKheyMHZQe-YJBisLFwApiwUph0Gn7lbkz_WFueymWA,574
|
|
46
|
+
npcsh/npc_team/jinxs/modes/alicanto.jinx,sha256=5WzVIvlNOOr6TQ5c9AgAnQSSf8TVoBHCxmm3Y7m0tx0,7512
|
|
47
|
+
npcsh/npc_team/jinxs/modes/corca.jinx,sha256=FVdRJec6RAfA33we_QvvRa8LzWdVQOmZ9gjuRB8H-UQ,10046
|
|
48
|
+
npcsh/npc_team/jinxs/modes/guac.jinx,sha256=fuQBbKrWqRjhlhpn0vikhfMrCUx8heS9SUO9aL1uEE4,12733
|
|
49
|
+
npcsh/npc_team/jinxs/modes/plonk.jinx,sha256=7zOig7Qn5CuXHZRO0UeG_-036Xj7QZBd4knzn8iCNWo,8983
|
|
50
|
+
npcsh/npc_team/jinxs/modes/pti.jinx,sha256=HRWK5IKMiZUX9jToNIQOkO3RB6q6HSm4g6pNe1sXwYw,6436
|
|
51
|
+
npcsh/npc_team/jinxs/modes/spool.jinx,sha256=MLmqcnsytTQjektI7feD9bwUu3m-plPme1tRM6_zO6M,6446
|
|
52
|
+
npcsh/npc_team/jinxs/modes/wander.jinx,sha256=fw5007M-MiZnRSl_BMJRyIU4GGDyXemmj8cPzcrWyMw,7638
|
|
53
|
+
npcsh/npc_team/jinxs/modes/yap.jinx,sha256=EU_10qxp-GIaCUfJo0sldl4N4989yd5tysfr4J_8biw,9596
|
|
54
|
+
npcsh/npc_team/jinxs/npc_studio/npc-studio.jinx,sha256=0aY-z399BRIXIL3TLMTcYDiHjDm-krZy0CnYfiskQUo,2234
|
|
55
|
+
npcsh/npc_team/jinxs/utils/agent.jinx,sha256=8aw99XNfslRz2OZIzufptBEKZwyyzdfD9PpC7f2gQYA,529
|
|
56
|
+
npcsh/npc_team/jinxs/utils/chat.jinx,sha256=zSrhjm58SkcpIbHtfpWbBKWF_ha6f7HdZLkiY1Ad9Qg,1405
|
|
57
|
+
npcsh/npc_team/jinxs/utils/cmd.jinx,sha256=9pRiNmSeraimszsWg3HVIqvvhe8F40JJHaSkOFhkqm8,1406
|
|
58
|
+
npcsh/npc_team/jinxs/utils/compress.jinx,sha256=B2dMsT-jrMWzjQfMhRIuO7afgqj7MJngshz5DBMmu7s,6834
|
|
59
|
+
npcsh/npc_team/jinxs/utils/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
|
|
60
|
+
npcsh/npc_team/jinxs/utils/load_file.jinx,sha256=KdL3nhYWL2-8A0-lN2A2NIe0mAgoc-fIWzpFJnnLPZs,1264
|
|
61
|
+
npcsh/npc_team/jinxs/utils/ots.jinx,sha256=DKoSVgH_ZcmOaZ2-R-Yn80KyCiYgqG25JG6e4wQwP64,2301
|
|
62
|
+
npcsh/npc_team/jinxs/utils/roll.jinx,sha256=RhYhDDdyKcWjVhVSU7dX_DMn5s4rz-nY6pXmtr6tytM,2908
|
|
63
|
+
npcsh/npc_team/jinxs/utils/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
|
|
64
|
+
npcsh/npc_team/jinxs/utils/search.jinx,sha256=RtnQtF0TSWHryr1h6x4VX00zofqNCOjMwOBzysDAhT8,5472
|
|
65
|
+
npcsh/npc_team/jinxs/utils/serve.jinx,sha256=D-a-UafymNfAWeLW1sLM_Ef-971SF9TPcUvYu70AIlk,837
|
|
66
|
+
npcsh/npc_team/jinxs/utils/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
|
|
67
|
+
npcsh/npc_team/jinxs/utils/trigger.jinx,sha256=YVFPEH6mT9HiAyfPZOCcBpKB033g6K4QCJO0sfgKSQA,2458
|
|
68
|
+
npcsh/npc_team/jinxs/utils/usage.jinx,sha256=40zhs19l7-16KAXHzOa8hjv7hA32ORe0F7das0TTLXY,1052
|
|
69
|
+
npcsh/npc_team/jinxs/utils/vixynt.jinx,sha256=gsBtTTOtwYkIE43AjOf6U6cc1aLyl9sQiwdM00vrzA4,5662
|
|
70
|
+
npcsh/npc_team/jinxs/utils/core/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
|
|
71
|
+
npcsh/npc_team/jinxs/utils/core/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
|
|
72
|
+
npcsh/npc_team/jinxs/utils/core/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
|
|
73
|
+
npcsh/npc_team/jinxs/utils/core/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
|
|
74
|
+
npcsh/npc_team/jinxs/utils/core/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
|
|
75
|
+
npcsh/npc_team/jinxs/utils/core/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
|
|
76
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/agent.jinx,sha256=8aw99XNfslRz2OZIzufptBEKZwyyzdfD9PpC7f2gQYA,529
|
|
77
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/alicanto.jinx,sha256=5WzVIvlNOOr6TQ5c9AgAnQSSf8TVoBHCxmm3Y7m0tx0,7512
|
|
78
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
79
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
80
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
|
|
81
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/chat.jinx,sha256=zSrhjm58SkcpIbHtfpWbBKWF_ha6f7HdZLkiY1Ad9Qg,1405
|
|
82
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/cmd.jinx,sha256=9pRiNmSeraimszsWg3HVIqvvhe8F40JJHaSkOFhkqm8,1406
|
|
83
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
|
|
84
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/compress.jinx,sha256=B2dMsT-jrMWzjQfMhRIuO7afgqj7MJngshz5DBMmu7s,6834
|
|
85
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/corca.jinx,sha256=FVdRJec6RAfA33we_QvvRa8LzWdVQOmZ9gjuRB8H-UQ,10046
|
|
86
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
|
|
87
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
88
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
|
|
89
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
|
|
90
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
91
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
92
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
93
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/guac.jinx,sha256=fuQBbKrWqRjhlhpn0vikhfMrCUx8heS9SUO9aL1uEE4,12733
|
|
94
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
95
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
|
|
96
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
|
|
97
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
|
|
98
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
99
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
100
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/load_file.jinx,sha256=KdL3nhYWL2-8A0-lN2A2NIe0mAgoc-fIWzpFJnnLPZs,1264
|
|
101
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/npc-studio.jinx,sha256=0aY-z399BRIXIL3TLMTcYDiHjDm-krZy0CnYfiskQUo,2234
|
|
102
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
103
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
104
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/ots.jinx,sha256=DKoSVgH_ZcmOaZ2-R-Yn80KyCiYgqG25JG6e4wQwP64,2301
|
|
105
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/plonk.jinx,sha256=7zOig7Qn5CuXHZRO0UeG_-036Xj7QZBd4knzn8iCNWo,8983
|
|
106
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
107
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
108
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
109
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
110
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/pti.jinx,sha256=HRWK5IKMiZUX9jToNIQOkO3RB6q6HSm4g6pNe1sXwYw,6436
|
|
111
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
|
|
112
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/roll.jinx,sha256=RhYhDDdyKcWjVhVSU7dX_DMn5s4rz-nY6pXmtr6tytM,2908
|
|
113
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
|
|
114
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/search.jinx,sha256=RtnQtF0TSWHryr1h6x4VX00zofqNCOjMwOBzysDAhT8,5472
|
|
115
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/serve.jinx,sha256=D-a-UafymNfAWeLW1sLM_Ef-971SF9TPcUvYu70AIlk,837
|
|
116
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
|
|
117
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sh.jinx,sha256=5cX7LWqbyXrqzjhjVWY3hw0intjA7mtFtk0nNK3fooo,943
|
|
118
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
119
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
120
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
|
|
121
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/spool.jinx,sha256=MLmqcnsytTQjektI7feD9bwUu3m-plPme1tRM6_zO6M,6446
|
|
122
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
123
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/sql.jinx,sha256=qKheyMHZQe-YJBisLFwApiwUph0Gn7lbkz_WFueymWA,574
|
|
124
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/trigger.jinx,sha256=YVFPEH6mT9HiAyfPZOCcBpKB033g6K4QCJO0sfgKSQA,2458
|
|
125
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/usage.jinx,sha256=40zhs19l7-16KAXHzOa8hjv7hA32ORe0F7das0TTLXY,1052
|
|
126
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/vixynt.jinx,sha256=gsBtTTOtwYkIE43AjOf6U6cc1aLyl9sQiwdM00vrzA4,5662
|
|
127
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/wander.jinx,sha256=fw5007M-MiZnRSl_BMJRyIU4GGDyXemmj8cPzcrWyMw,7638
|
|
128
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/yap.jinx,sha256=EU_10qxp-GIaCUfJo0sldl4N4989yd5tysfr4J_8biw,9596
|
|
129
|
+
npcsh-1.1.14.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
130
|
+
npcsh-1.1.14.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
|
|
131
|
+
npcsh-1.1.14.dist-info/METADATA,sha256=pW4dc8Xe2MM9DSpNf1KMgNKTQu_6_Z7zGs8qcuprAAc,25805
|
|
132
|
+
npcsh-1.1.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
133
|
+
npcsh-1.1.14.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
|
|
134
|
+
npcsh-1.1.14.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
|
|
135
|
+
npcsh-1.1.14.dist-info/RECORD,,
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
jinx_name: "alicanto"
|
|
2
|
-
description: "Conduct deep research with multiple perspectives, identifying gold insights and cliff warnings"
|
|
3
|
-
inputs:
|
|
4
|
-
- query: "" # Required research query.
|
|
5
|
-
- num_npcs: 5 # Number of NPCs to involve in research.
|
|
6
|
-
- depth: 3 # Depth of research.
|
|
7
|
-
- model: "" # LLM model to use. Defaults to NPCSH_CHAT_MODEL or NPC's model.
|
|
8
|
-
- provider: "" # LLM provider to use. Defaults to NPCSH_CHAT_PROVIDER or NPC's provider.
|
|
9
|
-
- max_steps: 20 # Maximum number of steps in Alicanto research.
|
|
10
|
-
- skip_research: True # Whether to skip the research phase.
|
|
11
|
-
- exploration: "" # Exploration factor (float).
|
|
12
|
-
- creativity: "" # Creativity factor (float).
|
|
13
|
-
- format: "" # Output format (report, summary, full).
|
|
14
|
-
steps:
|
|
15
|
-
- name: "conduct_alicanto_research"
|
|
16
|
-
engine: "python"
|
|
17
|
-
code: |
|
|
18
|
-
import traceback
|
|
19
|
-
import logging
|
|
20
|
-
from npcsh.alicanto import alicanto
|
|
21
|
-
# Assuming NPCSH_CHAT_MODEL and NPCSH_CHAT_PROVIDER are accessible
|
|
22
|
-
|
|
23
|
-
query = context.get('query')
|
|
24
|
-
num_npcs = int(context.get('num_npcs', 5)) # Ensure int type
|
|
25
|
-
depth = int(context.get('depth', 3)) # Ensure int type
|
|
26
|
-
llm_model = context.get('model')
|
|
27
|
-
llm_provider = context.get('provider')
|
|
28
|
-
max_steps = int(context.get('max_steps', 20)) # Ensure int type
|
|
29
|
-
skip_research = context.get('skip_research', True)
|
|
30
|
-
exploration_factor = context.get('exploration')
|
|
31
|
-
creativity_factor = context.get('creativity')
|
|
32
|
-
output_format = context.get('format')
|
|
33
|
-
output_messages = context.get('messages', [])
|
|
34
|
-
current_npc = context.get('npc')
|
|
35
|
-
|
|
36
|
-
if not query or not query.strip():
|
|
37
|
-
context['output'] = "Usage: /alicanto <research query> [--num-npcs N] [--depth N] [--exploration 0.3] [--creativity 0.5] [--format report|summary|full]"
|
|
38
|
-
context['messages'] = output_messages
|
|
39
|
-
exit()
|
|
40
|
-
|
|
41
|
-
# Fallback for model/provider if not explicitly set in Jinx inputs
|
|
42
|
-
if not llm_model and current_npc and current_npc.model:
|
|
43
|
-
llm_model = current_npc.model
|
|
44
|
-
if not llm_provider and current_npc and current_npc.provider:
|
|
45
|
-
llm_provider = current_npc.provider
|
|
46
|
-
|
|
47
|
-
# Final fallbacks (these would ideally come from npcsh._state config)
|
|
48
|
-
# Assuming NPCSH_CHAT_MODEL and NPCSH_CHAT_PROVIDER exist and are imported implicitly or set by environment
|
|
49
|
-
# Hardcoding defaults for demonstration if not available through NPC or _state
|
|
50
|
-
if not llm_model: llm_model = "gemini-1.5-pro"
|
|
51
|
-
if not llm_provider: llm_provider = "gemini"
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
logging.info(f"Starting Alicanto research on: {query}")
|
|
55
|
-
|
|
56
|
-
alicanto_kwargs = {
|
|
57
|
-
'query': query,
|
|
58
|
-
'num_npcs': num_npcs,
|
|
59
|
-
'depth': depth,
|
|
60
|
-
'model': llm_model,
|
|
61
|
-
'provider': llm_provider,
|
|
62
|
-
'max_steps': max_steps,
|
|
63
|
-
'skip_research': skip_research,
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if exploration_factor: alicanto_kwargs['exploration_factor'] = float(exploration_factor)
|
|
67
|
-
if creativity_factor: alicanto_kwargs['creativity_factor'] = float(creativity_factor)
|
|
68
|
-
if output_format: alicanto_kwargs['output_format'] = output_format
|
|
69
|
-
|
|
70
|
-
result = alicanto(**alicanto_kwargs)
|
|
71
|
-
|
|
72
|
-
output_result = ""
|
|
73
|
-
if isinstance(result, dict):
|
|
74
|
-
if "integration" in result:
|
|
75
|
-
output_result = result["integration"]
|
|
76
|
-
else:
|
|
77
|
-
output_result = "Alicanto research completed. Full results available in returned data."
|
|
78
|
-
else:
|
|
79
|
-
output_result = str(result)
|
|
80
|
-
|
|
81
|
-
context['output'] = output_result
|
|
82
|
-
context['messages'] = output_messages
|
|
83
|
-
context['alicanto_result'] = result # Store full result in context
|
|
84
|
-
except Exception as e:
|
|
85
|
-
traceback.print_exc()
|
|
86
|
-
logging.error(f"Error during Alicanto research: {e}")
|
|
87
|
-
context['output'] = f"Error during Alicanto research: {e}"
|
|
88
|
-
context['messages'] = output_messages
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
jinx_name: chat
|
|
2
|
-
description: Provides a direct LLM response without tool use.
|
|
3
|
-
inputs:
|
|
4
|
-
- query
|
|
5
|
-
- auto_process_tool_calls: False
|
|
6
|
-
- use_core_tools: False
|
|
7
|
-
steps:
|
|
8
|
-
- name: get_chat_response
|
|
9
|
-
engine: python
|
|
10
|
-
code: |
|
|
11
|
-
response = npc.get_llm_response(
|
|
12
|
-
request=query,
|
|
13
|
-
messages=context.get('messages', []),
|
|
14
|
-
auto_process_tool_calls={{ auto_process_tool_calls | default(False) }},
|
|
15
|
-
use_core_tools={{ use_core_tools | default(False) }}
|
|
16
|
-
)
|
|
17
|
-
output = response.get('response', '')
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
jinx_name: "corca"
|
|
2
|
-
description: "Enter the Corca MCP-powered agentic shell"
|
|
3
|
-
inputs:
|
|
4
|
-
- mcp_server_path: '~/.npcsh/npc_team/mcp_server.py'
|
|
5
|
-
- force_global: false
|
|
6
|
-
- initial_command: null
|
|
7
|
-
steps:
|
|
8
|
-
- name: "enter_corca"
|
|
9
|
-
engine: "python"
|
|
10
|
-
code: |
|
|
11
|
-
from npcsh._state import setup_shell
|
|
12
|
-
from npcsh.corca import corca_session
|
|
13
|
-
|
|
14
|
-
mcp_server_path = context.get('mcp_server_path')
|
|
15
|
-
force_global = context.get('force_global', False)
|
|
16
|
-
initial_command = context.get('initial_command')
|
|
17
|
-
|
|
18
|
-
command_history, _, _ = setup_shell()
|
|
19
|
-
|
|
20
|
-
result = corca_session(
|
|
21
|
-
command_history=command_history,
|
|
22
|
-
mcp_server_path=mcp_server_path,
|
|
23
|
-
force_global=force_global,
|
|
24
|
-
initial_command=initial_command
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
context['output'] = result.get('output', 'Exited Corca mode.')
|
|
28
|
-
context['messages'] = result.get('messages', [])
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
jinx_name: "guac"
|
|
2
|
-
description: "Enter guac mode for plotting and data visualization."
|
|
3
|
-
inputs:
|
|
4
|
-
- config_dir: "" # Optional configuration directory.
|
|
5
|
-
- plots_dir: "" # Optional directory for plots.
|
|
6
|
-
- refresh_period: 100 # Refresh period for guac mode.
|
|
7
|
-
- lang: "" # Language setting for guac mode.
|
|
8
|
-
steps:
|
|
9
|
-
- name: "enter_guac"
|
|
10
|
-
engine: "python"
|
|
11
|
-
code: |
|
|
12
|
-
import os
|
|
13
|
-
from sqlalchemy import create_engine
|
|
14
|
-
from npcpy.npc_compiler import NPC, Team
|
|
15
|
-
from npcsh.guac import enter_guac_mode
|
|
16
|
-
|
|
17
|
-
config_dir = context.get('config_dir')
|
|
18
|
-
plots_dir = context.get('plots_dir')
|
|
19
|
-
refresh_period = context.get('refresh_period')
|
|
20
|
-
lang = context.get('lang')
|
|
21
|
-
output_messages = context.get('messages', [])
|
|
22
|
-
|
|
23
|
-
db_path = os.path.expanduser('~/npcsh_history.db')
|
|
24
|
-
db_conn = create_engine(f'sqlite:///{db_path}')
|
|
25
|
-
|
|
26
|
-
npc_file = os.path.expanduser('~/.npcsh/guac/npc_team/guac.npc')
|
|
27
|
-
npc_team_dir = os.path.expanduser('~/.npcsh/guac/npc_team/')
|
|
28
|
-
|
|
29
|
-
# Ensure directories exist for guac NPC/Team
|
|
30
|
-
os.makedirs(os.path.dirname(npc_file), exist_ok=True)
|
|
31
|
-
|
|
32
|
-
guac_npc = NPC(file=npc_file, db_conn=db_conn)
|
|
33
|
-
guac_team = Team(npc_team_dir, db_conn=db_conn)
|
|
34
|
-
|
|
35
|
-
enter_guac_mode(
|
|
36
|
-
npc=guac_npc,
|
|
37
|
-
team=guac_team,
|
|
38
|
-
config_dir=config_dir,
|
|
39
|
-
plots_dir=plots_dir,
|
|
40
|
-
npc_team_dir=npc_team_dir,
|
|
41
|
-
refresh_period=int(refresh_period), # Ensure int type
|
|
42
|
-
lang=lang
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
context['output'] = 'Exiting Guac Mode'
|
|
46
|
-
context['messages'] = output_messages
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
jinx_name: "plonk"
|
|
2
|
-
description: "Use vision model to interact with GUI. Usage: /plonk <task description>"
|
|
3
|
-
inputs:
|
|
4
|
-
- task_description: "" # Required task description for GUI interaction.
|
|
5
|
-
- vmodel: "" # Vision model to use. Defaults to NPCSH_VISION_MODEL or NPC's model.
|
|
6
|
-
- vprovider: "" # Vision model provider. Defaults to NPCSH_VISION_PROVIDER or NPC's provider.
|
|
7
|
-
steps:
|
|
8
|
-
- name: "execute_plonk"
|
|
9
|
-
engine: "python"
|
|
10
|
-
code: |
|
|
11
|
-
import traceback
|
|
12
|
-
from npcsh.plonk import execute_plonk_command, format_plonk_summary
|
|
13
|
-
# Assuming NPCSH_VISION_MODEL and NPCSH_VISION_PROVIDER are accessible
|
|
14
|
-
|
|
15
|
-
task_description = context.get('task_description')
|
|
16
|
-
vision_model = context.get('vmodel')
|
|
17
|
-
vision_provider = context.get('vprovider')
|
|
18
|
-
plonk_context = context.get('plonk_context') # Passed from original context
|
|
19
|
-
current_npc = context.get('npc')
|
|
20
|
-
output_messages = context.get('messages', [])
|
|
21
|
-
|
|
22
|
-
if not task_description or not task_description.strip():
|
|
23
|
-
context['output'] = "Usage: /plonk <task_description> [--vmodel model_name] [--vprovider provider_name]"
|
|
24
|
-
context['messages'] = output_messages
|
|
25
|
-
exit()
|
|
26
|
-
|
|
27
|
-
# Fallback for model/provider if not explicitly set in Jinx inputs
|
|
28
|
-
if not vision_model and current_npc and current_npc.model:
|
|
29
|
-
vision_model = current_npc.model
|
|
30
|
-
if not vision_provider and current_npc and current_npc.provider:
|
|
31
|
-
vision_provider = current_npc.provider
|
|
32
|
-
|
|
33
|
-
try:
|
|
34
|
-
summary_data = execute_plonk_command(
|
|
35
|
-
request=task_description,
|
|
36
|
-
model=vision_model,
|
|
37
|
-
provider=vision_provider,
|
|
38
|
-
npc=current_npc,
|
|
39
|
-
plonk_context=plonk_context,
|
|
40
|
-
debug=True # Assuming debug is often desired for plonk
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
if summary_data and isinstance(summary_data, list):
|
|
44
|
-
output_report = format_plonk_summary(summary_data)
|
|
45
|
-
context['output'] = output_report
|
|
46
|
-
else:
|
|
47
|
-
context['output'] = "Plonk command did not complete within the maximum number of iterations."
|
|
48
|
-
|
|
49
|
-
except Exception as e:
|
|
50
|
-
traceback.print_exc()
|
|
51
|
-
context['output'] = f"Error executing plonk command: {e}"
|
|
52
|
-
|
|
53
|
-
context['messages'] = output_messages
|