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.
Files changed (99) hide show
  1. npcsh/_state.py +700 -377
  2. npcsh/alicanto.py +54 -1153
  3. npcsh/completion.py +206 -0
  4. npcsh/config.py +163 -0
  5. npcsh/corca.py +35 -1462
  6. npcsh/execution.py +185 -0
  7. npcsh/guac.py +31 -1986
  8. npcsh/npc_team/jinxs/code/sh.jinx +11 -15
  9. npcsh/npc_team/jinxs/modes/alicanto.jinx +186 -80
  10. npcsh/npc_team/jinxs/modes/corca.jinx +243 -22
  11. npcsh/npc_team/jinxs/modes/guac.jinx +313 -42
  12. npcsh/npc_team/jinxs/modes/plonk.jinx +209 -48
  13. npcsh/npc_team/jinxs/modes/pti.jinx +167 -25
  14. npcsh/npc_team/jinxs/modes/spool.jinx +158 -37
  15. npcsh/npc_team/jinxs/modes/wander.jinx +179 -74
  16. npcsh/npc_team/jinxs/modes/yap.jinx +258 -21
  17. npcsh/npc_team/jinxs/utils/chat.jinx +39 -12
  18. npcsh/npc_team/jinxs/utils/cmd.jinx +44 -0
  19. npcsh/npc_team/jinxs/utils/search.jinx +3 -3
  20. npcsh/npc_team/jinxs/utils/usage.jinx +33 -0
  21. npcsh/npcsh.py +76 -20
  22. npcsh/parsing.py +118 -0
  23. npcsh/plonk.py +41 -329
  24. npcsh/pti.py +41 -201
  25. npcsh/spool.py +34 -239
  26. npcsh/ui.py +199 -0
  27. npcsh/wander.py +54 -542
  28. npcsh/yap.py +38 -570
  29. npcsh-1.1.14.data/data/npcsh/npc_team/alicanto.jinx +194 -0
  30. npcsh-1.1.14.data/data/npcsh/npc_team/chat.jinx +44 -0
  31. npcsh-1.1.14.data/data/npcsh/npc_team/cmd.jinx +44 -0
  32. npcsh-1.1.14.data/data/npcsh/npc_team/corca.jinx +249 -0
  33. npcsh-1.1.14.data/data/npcsh/npc_team/guac.jinx +317 -0
  34. npcsh-1.1.14.data/data/npcsh/npc_team/plonk.jinx +214 -0
  35. npcsh-1.1.14.data/data/npcsh/npc_team/pti.jinx +170 -0
  36. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/search.jinx +3 -3
  37. npcsh-1.1.14.data/data/npcsh/npc_team/sh.jinx +34 -0
  38. npcsh-1.1.14.data/data/npcsh/npc_team/spool.jinx +161 -0
  39. npcsh-1.1.14.data/data/npcsh/npc_team/usage.jinx +33 -0
  40. npcsh-1.1.14.data/data/npcsh/npc_team/wander.jinx +186 -0
  41. npcsh-1.1.14.data/data/npcsh/npc_team/yap.jinx +262 -0
  42. {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/METADATA +1 -1
  43. npcsh-1.1.14.dist-info/RECORD +135 -0
  44. npcsh-1.1.12.data/data/npcsh/npc_team/alicanto.jinx +0 -88
  45. npcsh-1.1.12.data/data/npcsh/npc_team/chat.jinx +0 -17
  46. npcsh-1.1.12.data/data/npcsh/npc_team/corca.jinx +0 -28
  47. npcsh-1.1.12.data/data/npcsh/npc_team/guac.jinx +0 -46
  48. npcsh-1.1.12.data/data/npcsh/npc_team/plonk.jinx +0 -53
  49. npcsh-1.1.12.data/data/npcsh/npc_team/pti.jinx +0 -28
  50. npcsh-1.1.12.data/data/npcsh/npc_team/sh.jinx +0 -38
  51. npcsh-1.1.12.data/data/npcsh/npc_team/spool.jinx +0 -40
  52. npcsh-1.1.12.data/data/npcsh/npc_team/wander.jinx +0 -81
  53. npcsh-1.1.12.data/data/npcsh/npc_team/yap.jinx +0 -25
  54. npcsh-1.1.12.dist-info/RECORD +0 -126
  55. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/agent.jinx +0 -0
  56. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/alicanto.npc +0 -0
  57. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/alicanto.png +0 -0
  58. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/build.jinx +0 -0
  59. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/compile.jinx +0 -0
  60. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/compress.jinx +0 -0
  61. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca.npc +0 -0
  62. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca.png +0 -0
  63. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/corca_example.png +0 -0
  64. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
  65. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/foreman.npc +0 -0
  66. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/frederic.npc +0 -0
  67. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/frederic4.png +0 -0
  68. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/guac.png +0 -0
  69. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/help.jinx +0 -0
  70. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/init.jinx +0 -0
  71. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/jinxs.jinx +0 -0
  72. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
  73. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/kadiefa.png +0 -0
  74. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/load_file.jinx +0 -0
  75. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npc-studio.jinx +0 -0
  76. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
  77. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
  78. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/ots.jinx +0 -0
  79. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonk.npc +0 -0
  80. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonk.png +0 -0
  81. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
  82. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/plonkjr.png +0 -0
  83. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/python.jinx +0 -0
  84. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/roll.jinx +0 -0
  85. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sample.jinx +0 -0
  86. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/serve.jinx +0 -0
  87. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/set.jinx +0 -0
  88. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sibiji.npc +0 -0
  89. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sibiji.png +0 -0
  90. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sleep.jinx +0 -0
  91. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/spool.png +0 -0
  92. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/sql.jinx +0 -0
  93. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/trigger.jinx +0 -0
  94. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/vixynt.jinx +0 -0
  95. {npcsh-1.1.12.data → npcsh-1.1.14.data}/data/npcsh/npc_team/yap.png +0 -0
  96. {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/WHEEL +0 -0
  97. {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/entry_points.txt +0 -0
  98. {npcsh-1.1.12.dist-info → npcsh-1.1.14.dist-info}/licenses/LICENSE +0 -0
  99. {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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: npcsh
3
- Version: 1.1.12
3
+ Version: 1.1.14
4
4
  Summary: npcsh is a command-line toolkit for using AI agents in novel ways.
5
5
  Home-page: https://github.com/NPC-Worldwide/npcsh
6
6
  Author: Christopher Agostino
@@ -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