npcsh 1.1.4__py3-none-any.whl → 1.1.5__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 +47 -63
- npcsh/npc_team/corca_example.png +0 -0
- npcsh/npc_team/jinxs/{python_executor.jinx → code/python.jinx} +1 -1
- npcsh/npc_team/jinxs/{bash_executer.jinx → code/sh.jinx} +1 -1
- npcsh/npc_team/jinxs/code/sql.jinx +18 -0
- npcsh/npc_team/jinxs/modes/alicanto.jinx +88 -0
- npcsh/npc_team/jinxs/modes/corca.jinx +28 -0
- npcsh/npc_team/jinxs/modes/guac.jinx +46 -0
- npcsh/npc_team/jinxs/modes/plonk.jinx +57 -0
- npcsh/npc_team/jinxs/modes/pti.jinx +28 -0
- npcsh/npc_team/jinxs/modes/spool.jinx +40 -0
- npcsh/npc_team/jinxs/modes/wander.jinx +81 -0
- npcsh/npc_team/jinxs/modes/yap.jinx +25 -0
- npcsh/npc_team/jinxs/utils/breathe.jinx +20 -0
- npcsh/npc_team/jinxs/utils/core/build.jinx +65 -0
- npcsh/npc_team/jinxs/utils/core/compile.jinx +50 -0
- npcsh/npc_team/jinxs/utils/core/help.jinx +52 -0
- npcsh/npc_team/jinxs/utils/core/init.jinx +41 -0
- npcsh/npc_team/jinxs/utils/core/jinxs.jinx +32 -0
- npcsh/npc_team/jinxs/utils/core/set.jinx +40 -0
- npcsh/npc_team/jinxs/{edit_file.jinx → utils/edit_file.jinx} +1 -1
- npcsh/npc_team/jinxs/utils/flush.jinx +39 -0
- npcsh/npc_team/jinxs/utils/npc-studio.jinx +82 -0
- npcsh/npc_team/jinxs/utils/ots.jinx +92 -0
- npcsh/npc_team/jinxs/utils/plan.jinx +33 -0
- npcsh/npc_team/jinxs/utils/roll.jinx +66 -0
- npcsh/npc_team/jinxs/utils/sample.jinx +56 -0
- npcsh/npc_team/jinxs/utils/search/brainblast.jinx +51 -0
- npcsh/npc_team/jinxs/utils/search/rag.jinx +70 -0
- npcsh/npc_team/jinxs/utils/search/search.jinx +192 -0
- npcsh/npc_team/jinxs/utils/serve.jinx +29 -0
- npcsh/npc_team/jinxs/utils/sleep.jinx +116 -0
- npcsh/npc_team/jinxs/utils/trigger.jinx +36 -0
- npcsh/npc_team/jinxs/utils/vixynt.jinx +129 -0
- npcsh/npcsh.py +13 -11
- npcsh/routes.py +80 -1420
- npcsh-1.1.5.data/data/npcsh/npc_team/alicanto.jinx +88 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/brainblast.jinx +51 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/breathe.jinx +20 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/build.jinx +65 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/compile.jinx +50 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/corca.jinx +28 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/corca_example.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/edit_file.jinx +1 -1
- npcsh-1.1.5.data/data/npcsh/npc_team/flush.jinx +39 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/guac.jinx +46 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/help.jinx +52 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/init.jinx +41 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/jinxs.jinx +32 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/npc-studio.jinx +82 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/ots.jinx +92 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/plan.jinx +33 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/plonk.jinx +57 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/pti.jinx +28 -0
- npcsh-1.1.4.data/data/npcsh/npc_team/python_executor.jinx → npcsh-1.1.5.data/data/npcsh/npc_team/python.jinx +1 -1
- npcsh-1.1.5.data/data/npcsh/npc_team/rag.jinx +70 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/roll.jinx +66 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/sample.jinx +56 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/search.jinx +192 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/serve.jinx +29 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/set.jinx +40 -0
- npcsh-1.1.4.data/data/npcsh/npc_team/bash_executer.jinx → npcsh-1.1.5.data/data/npcsh/npc_team/sh.jinx +1 -1
- npcsh-1.1.5.data/data/npcsh/npc_team/sleep.jinx +116 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/spool.jinx +40 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/sql.jinx +18 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/trigger.jinx +36 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/vixynt.jinx +129 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/wander.jinx +81 -0
- npcsh-1.1.5.data/data/npcsh/npc_team/yap.jinx +25 -0
- {npcsh-1.1.4.dist-info → npcsh-1.1.5.dist-info}/METADATA +1 -1
- npcsh-1.1.5.dist-info/RECORD +132 -0
- npcsh/npc_team/jinxs/image_generation.jinx +0 -29
- npcsh/npc_team/jinxs/internet_search.jinx +0 -31
- npcsh/npc_team/jinxs/screen_cap.jinx +0 -25
- npcsh-1.1.4.data/data/npcsh/npc_team/image_generation.jinx +0 -29
- npcsh-1.1.4.data/data/npcsh/npc_team/internet_search.jinx +0 -31
- npcsh-1.1.4.data/data/npcsh/npc_team/screen_cap.jinx +0 -25
- npcsh-1.1.4.dist-info/RECORD +0 -78
- /npcsh/npc_team/jinxs/{kg_search.jinx → utils/search/kg_search.jinx} +0 -0
- /npcsh/npc_team/jinxs/{memory_search.jinx → utils/search/memory_search.jinx} +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/foreman.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/kg_search.jinx +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/memory_search.jinx +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.1.4.data → npcsh-1.1.5.data}/data/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.1.4.dist-info → npcsh-1.1.5.dist-info}/WHEEL +0 -0
- {npcsh-1.1.4.dist-info → npcsh-1.1.5.dist-info}/entry_points.txt +0 -0
- {npcsh-1.1.4.dist-info → npcsh-1.1.5.dist-info}/licenses/LICENSE +0 -0
- {npcsh-1.1.4.dist-info → npcsh-1.1.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
jinx_name: "set"
|
|
2
|
+
description: "Set configuration values"
|
|
3
|
+
inputs:
|
|
4
|
+
- key: "" # The configuration key to set.
|
|
5
|
+
- value: "" # The value to set for the configuration key.
|
|
6
|
+
steps:
|
|
7
|
+
- name: "set_config_value"
|
|
8
|
+
engine: "python"
|
|
9
|
+
code: |
|
|
10
|
+
import traceback
|
|
11
|
+
# Assuming set_npcsh_config_value is accessible
|
|
12
|
+
try:
|
|
13
|
+
from npcsh._state import set_npcsh_config_value
|
|
14
|
+
except ImportError:
|
|
15
|
+
def set_npcsh_config_value(key, value):
|
|
16
|
+
print(f"Mock: Setting config '{key}' to '{value}'")
|
|
17
|
+
# In a real scenario, this might write to a config file or global state
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
key = context.get('key')
|
|
21
|
+
value = context.get('value')
|
|
22
|
+
output_messages = context.get('messages', [])
|
|
23
|
+
|
|
24
|
+
output_result = ""
|
|
25
|
+
if not key or not value:
|
|
26
|
+
context['output'] = "Usage: /set <key>=<value>"
|
|
27
|
+
context['messages'] = output_messages
|
|
28
|
+
exit()
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
set_npcsh_config_value(key, value)
|
|
32
|
+
output_result = f"Configuration value '{key}' set."
|
|
33
|
+
except NameError:
|
|
34
|
+
output_result = "Set function (set_npcsh_config_value) not available."
|
|
35
|
+
except Exception as e:
|
|
36
|
+
traceback.print_exc()
|
|
37
|
+
output_result = f"Error setting configuration '{key}': {e}"
|
|
38
|
+
|
|
39
|
+
context['output'] = output_result
|
|
40
|
+
context['messages'] = output_messages
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
jinx_name: "sleep"
|
|
2
|
+
description: "Evolve knowledge graph. Use --dream to also run creative synthesis."
|
|
3
|
+
inputs:
|
|
4
|
+
- dream: False # Boolean flag to also run creative synthesis (dream process).
|
|
5
|
+
- ops: "" # Comma-separated list of operations to configure KG sleep process.
|
|
6
|
+
- model: "" # LLM model to use for KG evolution. Defaults to NPC's model.
|
|
7
|
+
- provider: "" # LLM provider to use for KG evolution. Defaults to NPC's provider.
|
|
8
|
+
steps:
|
|
9
|
+
- name: "evolve_knowledge_graph"
|
|
10
|
+
engine: "python"
|
|
11
|
+
code: |
|
|
12
|
+
import os
|
|
13
|
+
import traceback
|
|
14
|
+
from npcpy.memory.command_history import CommandHistory, load_kg_from_db, save_kg_to_db
|
|
15
|
+
from npcpy.memory.knowledge_graph import kg_sleep_process, kg_dream_process
|
|
16
|
+
# Assuming render_markdown is available if needed for logging progress
|
|
17
|
+
|
|
18
|
+
is_dreaming = context.get('dream')
|
|
19
|
+
operations_str = context.get('ops')
|
|
20
|
+
llm_model = context.get('model')
|
|
21
|
+
llm_provider = context.get('provider')
|
|
22
|
+
output_messages = context.get('messages', [])
|
|
23
|
+
current_npc = context.get('npc')
|
|
24
|
+
current_team = context.get('team')
|
|
25
|
+
|
|
26
|
+
operations_config = None
|
|
27
|
+
if operations_str and isinstance(operations_str, str):
|
|
28
|
+
operations_config = [op.strip() for op in operations_str.split(',')]
|
|
29
|
+
|
|
30
|
+
# Fallback for model/provider if not explicitly set in Jinx inputs
|
|
31
|
+
if not llm_model and current_npc and current_npc.model:
|
|
32
|
+
llm_model = current_npc.model
|
|
33
|
+
if not llm_provider and current_npc and current_npc.provider:
|
|
34
|
+
llm_provider = current_npc.provider
|
|
35
|
+
|
|
36
|
+
# Final fallbacks (these would ideally come from npcsh._state config)
|
|
37
|
+
if not llm_model: llm_model = "gemini-1.5-pro" # Example default
|
|
38
|
+
if not llm_provider: llm_provider = "gemini" # Example default
|
|
39
|
+
|
|
40
|
+
team_name = current_team.name if current_team else "__none__"
|
|
41
|
+
npc_name = current_npc.name if isinstance(current_npc, type(None).__class__) else "__none__"
|
|
42
|
+
current_path = os.getcwd()
|
|
43
|
+
scope_str = f"Team: '{team_name}', NPC: '{npc_name}', Path: '{current_path}'"
|
|
44
|
+
|
|
45
|
+
# Assume render_markdown exists
|
|
46
|
+
# render_markdown(f"- Checking knowledge graph for scope: {scope_str}")
|
|
47
|
+
|
|
48
|
+
command_history = None
|
|
49
|
+
try:
|
|
50
|
+
db_path = os.getenv("NPCSH_DB_PATH", os.path.expanduser("~/npcsh_history.db"))
|
|
51
|
+
command_history = CommandHistory(db_path)
|
|
52
|
+
engine = command_history.engine
|
|
53
|
+
except Exception as e:
|
|
54
|
+
context['output'] = f"Error connecting to history database for KG access: {e}"
|
|
55
|
+
context['messages'] = output_messages
|
|
56
|
+
exit()
|
|
57
|
+
|
|
58
|
+
output_result = ""
|
|
59
|
+
try:
|
|
60
|
+
current_kg = load_kg_from_db(engine, team_name, npc_name, current_path)
|
|
61
|
+
|
|
62
|
+
if not current_kg or not current_kg.get('facts'):
|
|
63
|
+
output_msg = f"Knowledge graph for the current scope is empty. Nothing to process.\n"
|
|
64
|
+
output_msg += f" - Scope Checked: {scope_str}\n\n"
|
|
65
|
+
output_msg += "**Hint:** Have a conversation or run some commands first to build up knowledge in this specific context. The KG is unique to each combination of Team, NPC, and directory."
|
|
66
|
+
context['output'] = output_msg
|
|
67
|
+
context['messages'] = output_messages
|
|
68
|
+
exit()
|
|
69
|
+
|
|
70
|
+
original_facts = len(current_kg.get('facts', []))
|
|
71
|
+
original_concepts = len(current_kg.get('concepts', []))
|
|
72
|
+
|
|
73
|
+
process_type = "Sleep"
|
|
74
|
+
ops_display = f"with operations: {operations_config}" if operations_config else "with random operations"
|
|
75
|
+
# render_markdown(f"- Initiating sleep process {ops_display}")
|
|
76
|
+
|
|
77
|
+
evolved_kg, _ = kg_sleep_process(
|
|
78
|
+
existing_kg=current_kg,
|
|
79
|
+
model=llm_model,
|
|
80
|
+
provider=llm_provider,
|
|
81
|
+
npc=current_npc,
|
|
82
|
+
operations_config=operations_config
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
if is_dreaming:
|
|
86
|
+
process_type += " & Dream"
|
|
87
|
+
# render_markdown(f"- Initiating dream process on the evolved KG...")
|
|
88
|
+
evolved_kg, _ = kg_dream_process(
|
|
89
|
+
existing_kg=evolved_kg,
|
|
90
|
+
model=llm_model,
|
|
91
|
+
provider=llm_provider,
|
|
92
|
+
npc=current_npc
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
save_kg_to_db(engine, evolved_kg, team_name, npc_name, current_path) # Changed conn to engine
|
|
96
|
+
|
|
97
|
+
new_facts = len(evolved_kg.get('facts', []))
|
|
98
|
+
new_concepts = len(evolved_kg.get('concepts', []))
|
|
99
|
+
|
|
100
|
+
output_result = f"{process_type} process complete.\n"
|
|
101
|
+
output_result += f"- Facts: {original_facts} -> {new_facts} ({new_facts - original_facts:+})\n"
|
|
102
|
+
output_result += f"- Concepts: {original_concepts} -> {new_concepts} ({new_concepts - original_concepts:+})"
|
|
103
|
+
|
|
104
|
+
print('Evolved facts:', evolved_kg.get('facts'))
|
|
105
|
+
print('Evolved concepts:', evolved_kg.get('concepts'))
|
|
106
|
+
|
|
107
|
+
context['output'] = output_result
|
|
108
|
+
context['messages'] = output_messages
|
|
109
|
+
|
|
110
|
+
except Exception as e:
|
|
111
|
+
traceback.print_exc()
|
|
112
|
+
context['output'] = f"Error during KG evolution process: {e}"
|
|
113
|
+
context['messages'] = output_messages
|
|
114
|
+
finally:
|
|
115
|
+
if command_history: # Check if it was successfully initialized
|
|
116
|
+
command_history.close()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
jinx_name: "spool"
|
|
2
|
+
description: "Enter interactive chat (spool) mode"
|
|
3
|
+
inputs: [] # Spool mode typically takes its parameters directly from the environment/kwargs
|
|
4
|
+
steps:
|
|
5
|
+
- name: "enter_spool"
|
|
6
|
+
engine: "python"
|
|
7
|
+
code: |
|
|
8
|
+
import traceback
|
|
9
|
+
from npcpy.npc_compiler import NPC, Team
|
|
10
|
+
from npcsh.spool import enter_spool_mode
|
|
11
|
+
|
|
12
|
+
output_messages = context.get('messages', [])
|
|
13
|
+
current_npc = context.get('npc')
|
|
14
|
+
current_team = context.get('team')
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
# Handle potential string NPC name if passed from CLI
|
|
18
|
+
if isinstance(current_npc, str) and current_team:
|
|
19
|
+
npc_name = current_npc
|
|
20
|
+
if npc_name in current_team.npcs:
|
|
21
|
+
current_npc = current_team.npcs[npc_name]
|
|
22
|
+
else:
|
|
23
|
+
context['output'] = f"Error: NPC '{npc_name}' not found in team. Available NPCs: {', '.join(current_team.npcs.keys())}"
|
|
24
|
+
context['messages'] = output_messages
|
|
25
|
+
exit()
|
|
26
|
+
context['npc'] = current_npc # Ensure the NPC object is updated in context
|
|
27
|
+
|
|
28
|
+
result = enter_spool_mode(**context) # Pass all context as kwargs
|
|
29
|
+
|
|
30
|
+
if isinstance(result, dict):
|
|
31
|
+
context['output'] = result.get('output', 'Exited Spool Mode.')
|
|
32
|
+
context['messages'] = result.get('messages', output_messages)
|
|
33
|
+
else:
|
|
34
|
+
context['output'] = str(result)
|
|
35
|
+
context['messages'] = output_messages
|
|
36
|
+
|
|
37
|
+
except Exception as e:
|
|
38
|
+
traceback.print_exc()
|
|
39
|
+
context['output'] = f"Error entering spool mode: {e}"
|
|
40
|
+
context['messages'] = output_messages
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
jinx_name: sql_executor
|
|
2
|
+
description: Execute queries on the ~/npcsh_history.db to pull data. The database
|
|
3
|
+
contains only information about conversations and other user-provided data. It does
|
|
4
|
+
not store any information about individual files. Avoid using percent signs unless absolutely necessary. Returns a LLM summary so no post-summary is required
|
|
5
|
+
inputs:
|
|
6
|
+
- sql_query
|
|
7
|
+
- user_query
|
|
8
|
+
- interpret: true
|
|
9
|
+
steps:
|
|
10
|
+
- engine: python
|
|
11
|
+
code: |
|
|
12
|
+
import pandas as pd
|
|
13
|
+
query = "{{ sql_query }}"
|
|
14
|
+
try:
|
|
15
|
+
df = pd.read_sql_query(query, npc.db_conn)
|
|
16
|
+
except Exception as e:
|
|
17
|
+
df = pd.DataFrame({'Error': [str(e)]})
|
|
18
|
+
output = df.to_string()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
jinx_name: "trigger"
|
|
2
|
+
description: "Execute a trigger command"
|
|
3
|
+
inputs:
|
|
4
|
+
- trigger_description: "" # Required description of the trigger to execute.
|
|
5
|
+
steps:
|
|
6
|
+
- name: "execute_trigger"
|
|
7
|
+
engine: "python"
|
|
8
|
+
code: |
|
|
9
|
+
import traceback
|
|
10
|
+
from npcpy.work.trigger import execute_trigger_command
|
|
11
|
+
|
|
12
|
+
trigger_description = context.get('trigger_description')
|
|
13
|
+
output_messages = context.get('messages', [])
|
|
14
|
+
|
|
15
|
+
if not trigger_description or not trigger_description.strip():
|
|
16
|
+
context['output'] = "Usage: /trigger <trigger_description>"
|
|
17
|
+
context['messages'] = output_messages
|
|
18
|
+
exit()
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
# Pass all current context as kwargs to execute_trigger_command
|
|
22
|
+
result = execute_trigger_command(command=trigger_description, **context)
|
|
23
|
+
|
|
24
|
+
if isinstance(result, dict):
|
|
25
|
+
context['output'] = result.get('output', 'Trigger executed.')
|
|
26
|
+
context['messages'] = result.get('messages', output_messages)
|
|
27
|
+
else:
|
|
28
|
+
context['output'] = str(result)
|
|
29
|
+
context['messages'] = output_messages
|
|
30
|
+
except NameError:
|
|
31
|
+
context['output'] = "Trigger function (execute_trigger_command) not available."
|
|
32
|
+
context['messages'] = output_messages
|
|
33
|
+
except Exception as e:
|
|
34
|
+
traceback.print_exc()
|
|
35
|
+
context['output'] = f"Error executing trigger: {e}"
|
|
36
|
+
context['messages'] = output_messages
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
jinx_name: "vixynt"
|
|
2
|
+
description: "Generates images from text descriptions or edits existing ones."
|
|
3
|
+
inputs:
|
|
4
|
+
- prompt # Required, the text description for image generation or editing.
|
|
5
|
+
- output_file_base: "" # Optional string, e.g., './my_image', used as base for output file name.
|
|
6
|
+
- attachments: "" # Optional string, comma-separated image paths for editing existing images.
|
|
7
|
+
- n_images: 1 # Optional integer, number of images to generate.
|
|
8
|
+
- height: 1024 # Optional integer, height of the generated image.
|
|
9
|
+
- width: 1024 # Optional integer, width of the generated image.
|
|
10
|
+
- model: "" # Optional string, specific model to use for image generation. Defaults to NPC's model or 'runwayml/stable-diffusion-v1-5'.
|
|
11
|
+
- provider: "" # Optional string, specific provider for image generation. Defaults to NPC's provider or 'diffusers'.
|
|
12
|
+
steps:
|
|
13
|
+
- name: "generate_or_edit_image"
|
|
14
|
+
engine: "python"
|
|
15
|
+
code: |
|
|
16
|
+
import os
|
|
17
|
+
import base64
|
|
18
|
+
from io import BytesIO
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from PIL import Image
|
|
21
|
+
from npcpy.llm_funcs import gen_image
|
|
22
|
+
|
|
23
|
+
# Extract inputs from context (Jinx execution environment passes them here)
|
|
24
|
+
image_prompt = context.get('prompt', '').strip()
|
|
25
|
+
output_file_base = context.get('output_file_base')
|
|
26
|
+
attachments_str = context.get('attachments')
|
|
27
|
+
n_images = int(context.get('n_images', 1)) # Ensure it's an integer
|
|
28
|
+
height = int(context.get('height', 1024)) # Ensure it's an integer
|
|
29
|
+
width = int(context.get('width', 1024)) # Ensure it's an integer
|
|
30
|
+
model = context.get('model')
|
|
31
|
+
provider = context.get('provider')
|
|
32
|
+
|
|
33
|
+
input_images = []
|
|
34
|
+
if attachments_str and attachments_str.strip():
|
|
35
|
+
input_images = [p.strip() for p in attachments_str.split(',')]
|
|
36
|
+
|
|
37
|
+
# Use NPC's model/provider as fallback if not explicitly provided in jinx inputs
|
|
38
|
+
if not model and npc and npc.model:
|
|
39
|
+
model = npc.model
|
|
40
|
+
if not provider and npc and npc.provider:
|
|
41
|
+
provider = npc.provider
|
|
42
|
+
|
|
43
|
+
# Final fallbacks if still not set
|
|
44
|
+
if not model:
|
|
45
|
+
model = "runwayml/stable-diffusion-v1-5"
|
|
46
|
+
if not provider:
|
|
47
|
+
provider = "diffusers"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
output_messages = context.get('messages', [])
|
|
51
|
+
|
|
52
|
+
if not image_prompt:
|
|
53
|
+
context['output'] = "Usage: /vixynt <prompt> [--output_file path] [--attachments path] [--n_images num]"
|
|
54
|
+
context['messages'] = output_messages
|
|
55
|
+
exit() # Exit the jinx execution early
|
|
56
|
+
|
|
57
|
+
try:
|
|
58
|
+
# Generate image(s) or edit
|
|
59
|
+
images_list = gen_image(
|
|
60
|
+
prompt=image_prompt,
|
|
61
|
+
model=model,
|
|
62
|
+
provider=provider,
|
|
63
|
+
npc=npc,
|
|
64
|
+
height=height,
|
|
65
|
+
width=width,
|
|
66
|
+
n_images=n_images,
|
|
67
|
+
input_images=input_images if input_images else None
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
saved_files = []
|
|
71
|
+
compressed_images = []
|
|
72
|
+
|
|
73
|
+
if not isinstance(images_list, list):
|
|
74
|
+
images_list = [images_list] if images_list is not None else []
|
|
75
|
+
|
|
76
|
+
for i, image in enumerate(images_list):
|
|
77
|
+
if image is None:
|
|
78
|
+
continue
|
|
79
|
+
|
|
80
|
+
# Determine output filename
|
|
81
|
+
if output_file_base and output_file_base.strip():
|
|
82
|
+
base_name, ext = os.path.splitext(os.path.expanduser(output_file_base))
|
|
83
|
+
if not ext: # No extension provided, default to .png
|
|
84
|
+
ext = ".png"
|
|
85
|
+
current_output_file = f"{base_name}_{i}{ext}" if len(images_list) > 1 else f"{base_name}{ext}"
|
|
86
|
+
else:
|
|
87
|
+
os.makedirs(os.path.expanduser("~/.npcsh/images/"), exist_ok=True)
|
|
88
|
+
current_output_file = (
|
|
89
|
+
os.path.expanduser("~/.npcsh/images/")
|
|
90
|
+
+ f"image_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{i}.png"
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Save image to file
|
|
94
|
+
image.save(current_output_file)
|
|
95
|
+
saved_files.append(current_output_file)
|
|
96
|
+
|
|
97
|
+
# Create compressed base64 image for HTML rendering
|
|
98
|
+
img_buffer = BytesIO()
|
|
99
|
+
img_copy = image.copy()
|
|
100
|
+
img_copy.thumbnail((800, 600), Image.Resampling.LANCZOS)
|
|
101
|
+
img_copy.save(img_buffer, format='PNG', optimize=True, quality=85)
|
|
102
|
+
img_buffer.seek(0)
|
|
103
|
+
|
|
104
|
+
img_base64 = base64.b64encode(img_buffer.getvalue()).decode('utf-8')
|
|
105
|
+
compressed_images.append(f"data:image/png;base64,{img_base64}")
|
|
106
|
+
|
|
107
|
+
if saved_files:
|
|
108
|
+
if input_images:
|
|
109
|
+
output = f"Image(s) edited and saved to: {', '.join(saved_files)}"
|
|
110
|
+
else:
|
|
111
|
+
output = f"Image(s) generated and saved to: {', '.join(saved_files)}"
|
|
112
|
+
|
|
113
|
+
html_images = ""
|
|
114
|
+
for img_b64 in compressed_images:
|
|
115
|
+
html_images += f'<img src="{img_b64}" style="max-width: 400px; margin: 10px;" /><br/>'
|
|
116
|
+
|
|
117
|
+
output += f"\n\nGenerated Images:\n{html_images}"
|
|
118
|
+
else:
|
|
119
|
+
output = "No images generated."
|
|
120
|
+
|
|
121
|
+
except Exception as e:
|
|
122
|
+
import traceback
|
|
123
|
+
traceback.print_exc()
|
|
124
|
+
output = f"Error {'editing' if input_images else 'generating'} image: {str(e)}"
|
|
125
|
+
|
|
126
|
+
context['output'] = output # Store output in context
|
|
127
|
+
context['messages'] = output_messages # Ensure messages are returned
|
|
128
|
+
context['model'] = model
|
|
129
|
+
context['provider'] = provider
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
jinx_name: "wander"
|
|
2
|
+
description: "Enter wander mode (experimental)"
|
|
3
|
+
inputs:
|
|
4
|
+
- problem: "" # The problem to wander about.
|
|
5
|
+
- environment: "" # Optional environment for wander mode.
|
|
6
|
+
- low_temp: 0.5 # Low temperature setting for LLM.
|
|
7
|
+
- high_temp: 1.9 # High temperature setting for LLM.
|
|
8
|
+
- interruption_likelihood: 1.0 # Likelihood of interruption.
|
|
9
|
+
- sample_rate: 0.4 # Sample rate.
|
|
10
|
+
- n_high_temp_streams: 5 # Number of high temperature streams.
|
|
11
|
+
- include_events: False # Whether to include events.
|
|
12
|
+
- num_events: 3 # Number of events to include.
|
|
13
|
+
steps:
|
|
14
|
+
- name: "enter_wander"
|
|
15
|
+
engine: "python"
|
|
16
|
+
code: |
|
|
17
|
+
import traceback
|
|
18
|
+
from npcsh.wander import enter_wander_mode
|
|
19
|
+
|
|
20
|
+
problem = context.get('problem')
|
|
21
|
+
environment = context.get('environment')
|
|
22
|
+
low_temp = float(context.get('low_temp', 0.5)) # Ensure float type
|
|
23
|
+
high_temp = float(context.get('high_temp', 1.9)) # Ensure float type
|
|
24
|
+
interruption_likelihood = float(context.get('interruption_likelihood', 1.0)) # Ensure float type
|
|
25
|
+
sample_rate = float(context.get('sample_rate', 0.4)) # Ensure float type
|
|
26
|
+
n_high_temp_streams = int(context.get('n_high_temp_streams', 5)) # Ensure int type
|
|
27
|
+
include_events = context.get('include_events', False) # Boolean type
|
|
28
|
+
num_events = int(context.get('num_events', 3)) # Ensure int type
|
|
29
|
+
|
|
30
|
+
current_npc = context.get('npc')
|
|
31
|
+
llm_model = context.get('model')
|
|
32
|
+
llm_provider = context.get('provider')
|
|
33
|
+
output_messages = context.get('messages', [])
|
|
34
|
+
|
|
35
|
+
if not problem or not problem.strip():
|
|
36
|
+
context['output'] = "Usage: /wander <problem> [key=value...]"
|
|
37
|
+
context['messages'] = output_messages
|
|
38
|
+
exit()
|
|
39
|
+
|
|
40
|
+
# Fallback for model/provider if not explicitly set in Jinx inputs
|
|
41
|
+
if not llm_model and current_npc and current_npc.model:
|
|
42
|
+
llm_model = current_npc.model
|
|
43
|
+
if not llm_provider and current_npc and current_npc.provider:
|
|
44
|
+
llm_provider = current_npc.provider
|
|
45
|
+
|
|
46
|
+
# Final fallbacks (these would ideally come from npcsh._state config)
|
|
47
|
+
if not llm_model: llm_model = "gemini-1.5-pro" # Example default
|
|
48
|
+
if not llm_provider: llm_provider = "gemini" # Example default
|
|
49
|
+
|
|
50
|
+
try:
|
|
51
|
+
mode_args = {
|
|
52
|
+
'problem': problem,
|
|
53
|
+
'npc': current_npc,
|
|
54
|
+
'model': llm_model,
|
|
55
|
+
'provider': llm_provider,
|
|
56
|
+
'environment': environment,
|
|
57
|
+
'low_temp': low_temp,
|
|
58
|
+
'high_temp': high_temp,
|
|
59
|
+
'interruption_likelihood': interruption_likelihood,
|
|
60
|
+
'sample_rate': sample_rate,
|
|
61
|
+
'n_high_temp_streams': n_high_temp_streams,
|
|
62
|
+
'include_events': include_events,
|
|
63
|
+
'num_events': num_events
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
result = enter_wander_mode(**mode_args)
|
|
67
|
+
|
|
68
|
+
output_result = ""
|
|
69
|
+
if isinstance(result, list) and result:
|
|
70
|
+
output_result = result[-1].get("insight", "Wander mode session complete.")
|
|
71
|
+
else:
|
|
72
|
+
output_result = str(result) if result else "Wander mode session complete."
|
|
73
|
+
|
|
74
|
+
output_messages.append({"role": "assistant", "content": output_result})
|
|
75
|
+
context['output'] = output_result
|
|
76
|
+
context['messages'] = output_messages
|
|
77
|
+
|
|
78
|
+
except Exception as e:
|
|
79
|
+
traceback.print_exc()
|
|
80
|
+
context['output'] = f"Error during wander mode: {e}"
|
|
81
|
+
context['messages'] = output_messages
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
jinx_name: "yap"
|
|
2
|
+
description: "Enter voice chat (yap) mode"
|
|
3
|
+
inputs: [] # Yap mode takes its parameters directly from the environment/kwargs
|
|
4
|
+
steps:
|
|
5
|
+
- name: "enter_yap"
|
|
6
|
+
engine: "python"
|
|
7
|
+
code: |
|
|
8
|
+
import traceback
|
|
9
|
+
from npcsh.yap import enter_yap_mode
|
|
10
|
+
|
|
11
|
+
output_messages = context.get('messages', [])
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
result = enter_yap_mode(**context) # Pass all context as kwargs
|
|
15
|
+
|
|
16
|
+
if isinstance(result, dict):
|
|
17
|
+
context['output'] = result.get('output', 'Exited Yap Mode.')
|
|
18
|
+
context['messages'] = result.get('messages', output_messages)
|
|
19
|
+
else:
|
|
20
|
+
context['output'] = str(result)
|
|
21
|
+
context['messages'] = output_messages
|
|
22
|
+
except Exception as e:
|
|
23
|
+
traceback.print_exc()
|
|
24
|
+
context['output'] = f"Error entering yap mode: {e}"
|
|
25
|
+
context['messages'] = output_messages
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
npcsh/_state.py,sha256=cwuyzgYt1Rg5HsLPuRHeuPjK73bNliAsJhCiTogn-AI,98930
|
|
3
|
+
npcsh/alicanto.py,sha256=QCuTtMOgjFkjfrwZZdZBhfp-ETbimlOrXJQiZhClzT0,42160
|
|
4
|
+
npcsh/build.py,sha256=UuId0_rQml40A4U1KuvMekRyfB30s8HiLsXFJjqrBmM,7692
|
|
5
|
+
npcsh/corca.py,sha256=bhEzGlmnq_-VXksuQm6yEdDBgd_-x5WKlt27hw7YVcQ,60698
|
|
6
|
+
npcsh/guac.py,sha256=sVdLYVkzkQw6TE7crtLUX0QJZFkzQthWZTe1p7IfAQE,80412
|
|
7
|
+
npcsh/mcp_helpers.py,sha256=9TsCfcquGu_vX4WaKlY3J3P13-uxruQKrXng-jJ5YyY,11176
|
|
8
|
+
npcsh/mcp_server.py,sha256=Lfpabnwi_xu0UudJxQ_YNyyCn2f0_JjzorhWmIeclwY,8777
|
|
9
|
+
npcsh/npc.py,sha256=yqgqZDLwqniIbbDu-vaJf31fWVbOrtgNnFXfjDBk-D8,9853
|
|
10
|
+
npcsh/npcsh.py,sha256=T6iE_tAV_yWYkxFB1Z0qhYrQxrE-eyh1RmaIQA-3xDQ,9383
|
|
11
|
+
npcsh/plonk.py,sha256=IfOuiE5FBvk-EIsrWFjGy0SrNywDpn4a49E7seBtEmY,14246
|
|
12
|
+
npcsh/pti.py,sha256=UciiiH2Kz4ERQFy0-FX6BQEU2VxYQEUril-_Cvj76Y0,7853
|
|
13
|
+
npcsh/routes.py,sha256=97gMh_mk2Ec1ge1BApCdIX7L8_jT5XElylOSONyVPxY,4229
|
|
14
|
+
npcsh/spool.py,sha256=oCive2dbn1o3UGUJnFMzfON6g4bOnauuzyyQBgul6RI,9839
|
|
15
|
+
npcsh/wander.py,sha256=8WOX8az8BXjizXGraEvu-ZVphi6PECKZzo9alTK4gmA,21730
|
|
16
|
+
npcsh/yap.py,sha256=QU-j9eg8zixXG6nyjoIYXsanJ4FjPnzhS4aJ241HLxw,18467
|
|
17
|
+
npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
18
|
+
npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
19
|
+
npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
|
|
20
|
+
npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
21
|
+
npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
|
|
22
|
+
npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
23
|
+
npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
24
|
+
npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
25
|
+
npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
26
|
+
npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
27
|
+
npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
28
|
+
npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
29
|
+
npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
30
|
+
npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
31
|
+
npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
32
|
+
npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
33
|
+
npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
34
|
+
npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
35
|
+
npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
36
|
+
npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
37
|
+
npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
38
|
+
npcsh/npc_team/jinxs/code/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
|
|
39
|
+
npcsh/npc_team/jinxs/code/sh.jinx,sha256=r-pS_B51PxND7SFdZIGDLr2Ln6kA3FOqv4Vv1KYBThY,681
|
|
40
|
+
npcsh/npc_team/jinxs/code/sql.jinx,sha256=FHbyGb9WHwzx0CbZis7oJxFMYy8fvOaFtb2kLXj_gCM,666
|
|
41
|
+
npcsh/npc_team/jinxs/modes/alicanto.jinx,sha256=MknpYUX0eIvi5vG9gkoTkJvF_LcFbAp_hQ0qkYEBr3c,4014
|
|
42
|
+
npcsh/npc_team/jinxs/modes/corca.jinx,sha256=OFzxSHoBJ2Yoc34mtTpd9B_CtGdqbpgcCN3Qt39YJeA,1028
|
|
43
|
+
npcsh/npc_team/jinxs/modes/guac.jinx,sha256=UIVXw8c-m-lh10bxL2yl2n94TQ_SjZSwLP3sLFGv0k4,1616
|
|
44
|
+
npcsh/npc_team/jinxs/modes/plonk.jinx,sha256=3f5MvkYBFh5Z3iDhs5vFxPT6acgw7OZLqVA-Mxtm_vc,2559
|
|
45
|
+
npcsh/npc_team/jinxs/modes/pti.jinx,sha256=Yw32GQS9LvYkukEfjq6R1GLAL6fWACYBz9JuVecZJEo,1126
|
|
46
|
+
npcsh/npc_team/jinxs/modes/spool.jinx,sha256=A4upAI4LnXxYUjY0Rz1_kAhRCDpz08XWPTgisiH06A4,1664
|
|
47
|
+
npcsh/npc_team/jinxs/modes/wander.jinx,sha256=Svc6zjmoXr4BbDg5SN4DB1Byhh75AmIeAItcJCBIlcc,3513
|
|
48
|
+
npcsh/npc_team/jinxs/modes/yap.jinx,sha256=eaI665zjaLH2FUwHoO3iC1Uzo9bGA-a1UMtBRBTEHC0,898
|
|
49
|
+
npcsh/npc_team/jinxs/utils/breathe.jinx,sha256=WDw13P3Q0M03HdZu-vqhbOhefLjaMZ5oUcct_W4kUsY,739
|
|
50
|
+
npcsh/npc_team/jinxs/utils/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
|
|
51
|
+
npcsh/npc_team/jinxs/utils/flush.jinx,sha256=ngzFu4-dnKkqqL0QM9iX9XBxyWOmQdVcJTFb1GhajVo,1422
|
|
52
|
+
npcsh/npc_team/jinxs/utils/npc-studio.jinx,sha256=eWXtvQfRG8CFOG0Ut_Sqh0h1Tlm4-a1qKVO1G5vmMAY,2744
|
|
53
|
+
npcsh/npc_team/jinxs/utils/ots.jinx,sha256=5zUaD5b1J1LiU2YmH2HjVjCOxpDUNfZ-PQZiaWENdFw,4111
|
|
54
|
+
npcsh/npc_team/jinxs/utils/plan.jinx,sha256=hCIG9nGI56C1SeGuGAUcR3XnJ25kHaDnUn1VCv8vszY,1234
|
|
55
|
+
npcsh/npc_team/jinxs/utils/roll.jinx,sha256=FHoqXXqFgucaW7UJW_14DcRcRlVPBgFeaPJPoATx5BY,2882
|
|
56
|
+
npcsh/npc_team/jinxs/utils/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
|
|
57
|
+
npcsh/npc_team/jinxs/utils/serve.jinx,sha256=qly_3MThU3TRyJI2grHlhYOqEY1VT-XxubPIuWdZrpU,1056
|
|
58
|
+
npcsh/npc_team/jinxs/utils/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
|
|
59
|
+
npcsh/npc_team/jinxs/utils/trigger.jinx,sha256=rS913e2qJzNBC0wmmecgzN3f4v8o1os8AZQOPjnW8ho,1456
|
|
60
|
+
npcsh/npc_team/jinxs/utils/vixynt.jinx,sha256=ekdKXMQWafAGXgqs83OLNrfrlvXRT1RiaazNCFkumtw,5609
|
|
61
|
+
npcsh/npc_team/jinxs/utils/core/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
|
|
62
|
+
npcsh/npc_team/jinxs/utils/core/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
|
|
63
|
+
npcsh/npc_team/jinxs/utils/core/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
|
|
64
|
+
npcsh/npc_team/jinxs/utils/core/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
|
|
65
|
+
npcsh/npc_team/jinxs/utils/core/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
|
|
66
|
+
npcsh/npc_team/jinxs/utils/core/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
|
|
67
|
+
npcsh/npc_team/jinxs/utils/search/brainblast.jinx,sha256=VvGbl6V5OdPHE8CFWLUXy78iEpHyBJbXogMY_l4Otgg,2279
|
|
68
|
+
npcsh/npc_team/jinxs/utils/search/kg_search.jinx,sha256=zZiXLWtu9MwLn_HDEGmYfYF3ntfqbVqjM6IjhHyu634,1250
|
|
69
|
+
npcsh/npc_team/jinxs/utils/search/memory_search.jinx,sha256=KoHA-FvZ325UQiBNnvnKboz2uIy4i1J6q55frybWPEM,1040
|
|
70
|
+
npcsh/npc_team/jinxs/utils/search/rag.jinx,sha256=hKnjDo6pvtyfqGOcxQGZqfLPOWh0f-NoUzE61nX_bA4,3276
|
|
71
|
+
npcsh/npc_team/jinxs/utils/search/search.jinx,sha256=bh53tVgsvP5mONF5e6X2vj40qRo4iA8NB1jUkwIBn8I,8687
|
|
72
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/alicanto.jinx,sha256=MknpYUX0eIvi5vG9gkoTkJvF_LcFbAp_hQ0qkYEBr3c,4014
|
|
73
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
74
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
75
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/brainblast.jinx,sha256=VvGbl6V5OdPHE8CFWLUXy78iEpHyBJbXogMY_l4Otgg,2279
|
|
76
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/breathe.jinx,sha256=WDw13P3Q0M03HdZu-vqhbOhefLjaMZ5oUcct_W4kUsY,739
|
|
77
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
|
|
78
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
|
|
79
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/corca.jinx,sha256=OFzxSHoBJ2Yoc34mtTpd9B_CtGdqbpgcCN3Qt39YJeA,1028
|
|
80
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
|
|
81
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
82
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
|
|
83
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
|
|
84
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/flush.jinx,sha256=ngzFu4-dnKkqqL0QM9iX9XBxyWOmQdVcJTFb1GhajVo,1422
|
|
85
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
86
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
87
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
88
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/guac.jinx,sha256=UIVXw8c-m-lh10bxL2yl2n94TQ_SjZSwLP3sLFGv0k4,1616
|
|
89
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
90
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
|
|
91
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
|
|
92
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
|
|
93
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
94
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
95
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/kg_search.jinx,sha256=zZiXLWtu9MwLn_HDEGmYfYF3ntfqbVqjM6IjhHyu634,1250
|
|
96
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/memory_search.jinx,sha256=KoHA-FvZ325UQiBNnvnKboz2uIy4i1J6q55frybWPEM,1040
|
|
97
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/npc-studio.jinx,sha256=eWXtvQfRG8CFOG0Ut_Sqh0h1Tlm4-a1qKVO1G5vmMAY,2744
|
|
98
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
99
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
100
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/ots.jinx,sha256=5zUaD5b1J1LiU2YmH2HjVjCOxpDUNfZ-PQZiaWENdFw,4111
|
|
101
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plan.jinx,sha256=hCIG9nGI56C1SeGuGAUcR3XnJ25kHaDnUn1VCv8vszY,1234
|
|
102
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plonk.jinx,sha256=3f5MvkYBFh5Z3iDhs5vFxPT6acgw7OZLqVA-Mxtm_vc,2559
|
|
103
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
104
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
105
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
106
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
107
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/pti.jinx,sha256=Yw32GQS9LvYkukEfjq6R1GLAL6fWACYBz9JuVecZJEo,1126
|
|
108
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
|
|
109
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/rag.jinx,sha256=hKnjDo6pvtyfqGOcxQGZqfLPOWh0f-NoUzE61nX_bA4,3276
|
|
110
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/roll.jinx,sha256=FHoqXXqFgucaW7UJW_14DcRcRlVPBgFeaPJPoATx5BY,2882
|
|
111
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
|
|
112
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/search.jinx,sha256=bh53tVgsvP5mONF5e6X2vj40qRo4iA8NB1jUkwIBn8I,8687
|
|
113
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/serve.jinx,sha256=qly_3MThU3TRyJI2grHlhYOqEY1VT-XxubPIuWdZrpU,1056
|
|
114
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
|
|
115
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sh.jinx,sha256=r-pS_B51PxND7SFdZIGDLr2Ln6kA3FOqv4Vv1KYBThY,681
|
|
116
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
117
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
118
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
|
|
119
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/spool.jinx,sha256=A4upAI4LnXxYUjY0Rz1_kAhRCDpz08XWPTgisiH06A4,1664
|
|
120
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
121
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/sql.jinx,sha256=FHbyGb9WHwzx0CbZis7oJxFMYy8fvOaFtb2kLXj_gCM,666
|
|
122
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/trigger.jinx,sha256=rS913e2qJzNBC0wmmecgzN3f4v8o1os8AZQOPjnW8ho,1456
|
|
123
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/vixynt.jinx,sha256=ekdKXMQWafAGXgqs83OLNrfrlvXRT1RiaazNCFkumtw,5609
|
|
124
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/wander.jinx,sha256=Svc6zjmoXr4BbDg5SN4DB1Byhh75AmIeAItcJCBIlcc,3513
|
|
125
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/yap.jinx,sha256=eaI665zjaLH2FUwHoO3iC1Uzo9bGA-a1UMtBRBTEHC0,898
|
|
126
|
+
npcsh-1.1.5.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
127
|
+
npcsh-1.1.5.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
|
|
128
|
+
npcsh-1.1.5.dist-info/METADATA,sha256=j6DiStTuCDO45E5KuL5uGeMLg5kz_kjNXKZivVvBGdk,25841
|
|
129
|
+
npcsh-1.1.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
130
|
+
npcsh-1.1.5.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
|
|
131
|
+
npcsh-1.1.5.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
|
|
132
|
+
npcsh-1.1.5.dist-info/RECORD,,
|