npcsh 1.1.15__tar.gz → 1.1.16__tar.gz
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-1.1.16/MANIFEST.in +2 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/PKG-INFO +1 -1
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/_state.py +45 -3
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/PKG-INFO +1 -1
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/SOURCES.txt +1 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/setup.py +23 -2
- {npcsh-1.1.15 → npcsh-1.1.16}/LICENSE +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/README.md +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/__init__.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/alicanto.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/build.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/completion.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/config.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/corca.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/execution.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/guac.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/mcp_helpers.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/mcp_server.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/corca_example.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/guac.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/nql.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/roll.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/sample.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/spool.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/sync.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/vixynt.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/wander.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/bin/yap.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/browser/browser_action.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/browser/browser_screenshot.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/browser/close_browser.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/browser/open_browser.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/click.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/key_press.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/launch_app.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/screenshot.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/trigger.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/type_text.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/computer_use/wait.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/chat.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/cmd.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/compress.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/edit_file.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/load_file.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/ots.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/paste.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/python.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/search.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/sh.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/sleep.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/core/sql.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/orchestration/convene.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/orchestration/delegate.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/research/arxiv.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/research/paper_search.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/research/semantic_scholar.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/build.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/compile.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/help.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/init.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/jinxs.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/serve.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/set.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/shh.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/switch.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/switches.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/teamviz.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/usage.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/lib/utils/verbose.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/jinxs/npc_studio/npc-studio.jinx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/npcsh.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/parsing.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/plonk.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/pti.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/routes.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/spool.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/ui.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/wander.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh/yap.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/dependency_links.txt +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/entry_points.txt +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/requires.txt +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/npcsh.egg-info/top_level.txt +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/project/__init__.py +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/setup.cfg +0 -0
- {npcsh-1.1.15 → npcsh-1.1.16}/tests/test_tool_routing.py +0 -0
npcsh-1.1.16/MANIFEST.in
ADDED
|
@@ -368,10 +368,27 @@ def initialize_base_npcs_if_needed(db_path: str) -> None:
|
|
|
368
368
|
"""
|
|
369
369
|
)
|
|
370
370
|
|
|
371
|
-
# Package directories
|
|
372
|
-
package_dir =
|
|
371
|
+
# Package directories - use helper that handles PyInstaller bundles
|
|
372
|
+
package_dir = get_package_dir()
|
|
373
373
|
package_npc_team_dir = os.path.join(package_dir, "npc_team")
|
|
374
374
|
|
|
375
|
+
# Debug logging for package path resolution
|
|
376
|
+
if os.environ.get("NPCSH_DEBUG", "0") == "1":
|
|
377
|
+
print(f"[DEBUG] Package dir: {package_dir}")
|
|
378
|
+
print(f"[DEBUG] Package npc_team dir: {package_npc_team_dir}")
|
|
379
|
+
print(f"[DEBUG] npc_team exists: {os.path.exists(package_npc_team_dir)}")
|
|
380
|
+
if os.path.exists(package_npc_team_dir):
|
|
381
|
+
print(f"[DEBUG] npc_team contents: {os.listdir(package_npc_team_dir)}")
|
|
382
|
+
|
|
383
|
+
if not os.path.exists(package_npc_team_dir):
|
|
384
|
+
print(f"Warning: Package npc_team directory not found at {package_npc_team_dir}")
|
|
385
|
+
# For bundled executables, try to find it
|
|
386
|
+
if getattr(sys, 'frozen', False):
|
|
387
|
+
print(f"Running as frozen executable, _MEIPASS: {getattr(sys, '_MEIPASS', 'N/A')}")
|
|
388
|
+
if hasattr(sys, '_MEIPASS'):
|
|
389
|
+
print(f"Contents of _MEIPASS: {os.listdir(sys._MEIPASS)}")
|
|
390
|
+
return
|
|
391
|
+
|
|
375
392
|
user_npc_team_dir = os.path.expanduser("~/.npcsh/npc_team")
|
|
376
393
|
|
|
377
394
|
user_jinxs_dir = os.path.join(user_npc_team_dir, "jinxs")
|
|
@@ -1121,6 +1138,31 @@ def set_npcsh_initialized() -> None:
|
|
|
1121
1138
|
|
|
1122
1139
|
|
|
1123
1140
|
|
|
1141
|
+
def get_package_dir() -> str:
|
|
1142
|
+
"""
|
|
1143
|
+
Get the package directory, handling both normal Python and PyInstaller executables.
|
|
1144
|
+
|
|
1145
|
+
For normal Python: returns os.path.dirname(__file__)
|
|
1146
|
+
For PyInstaller: returns the bundled data directory (sys._MEIPASS/npcsh)
|
|
1147
|
+
"""
|
|
1148
|
+
# Check if running as a PyInstaller bundle
|
|
1149
|
+
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
|
|
1150
|
+
# Running as PyInstaller bundle - look for npcsh folder in _MEIPASS
|
|
1151
|
+
meipass = sys._MEIPASS
|
|
1152
|
+
# The package data should be at _MEIPASS/npcsh (based on PyInstaller config)
|
|
1153
|
+
bundled_path = os.path.join(meipass, 'npcsh')
|
|
1154
|
+
if os.path.exists(bundled_path):
|
|
1155
|
+
return bundled_path
|
|
1156
|
+
# Fallback: check if npc_team is directly in _MEIPASS
|
|
1157
|
+
if os.path.exists(os.path.join(meipass, 'npc_team')):
|
|
1158
|
+
return meipass
|
|
1159
|
+
# Last resort: return meipass and let caller handle
|
|
1160
|
+
return meipass
|
|
1161
|
+
else:
|
|
1162
|
+
# Normal Python execution
|
|
1163
|
+
return os.path.dirname(__file__)
|
|
1164
|
+
|
|
1165
|
+
|
|
1124
1166
|
def file_has_changed(source_path: str, destination_path: str) -> bool:
|
|
1125
1167
|
"""
|
|
1126
1168
|
Function Description:
|
|
@@ -1134,7 +1176,7 @@ def file_has_changed(source_path: str, destination_path: str) -> bool:
|
|
|
1134
1176
|
A boolean indicating whether the files are different
|
|
1135
1177
|
"""
|
|
1136
1178
|
|
|
1137
|
-
|
|
1179
|
+
|
|
1138
1180
|
return not filecmp.cmp(source_path, destination_path, shallow=False)
|
|
1139
1181
|
|
|
1140
1182
|
|
|
@@ -92,16 +92,28 @@ voice_requirements = [
|
|
|
92
92
|
|
|
93
93
|
extra_files = package_files("npcsh/npc_team/")
|
|
94
94
|
|
|
95
|
+
# Build package_data dict for npc_team files
|
|
96
|
+
def get_package_data_patterns():
|
|
97
|
+
"""Get patterns for all files in npc_team directory."""
|
|
98
|
+
patterns = []
|
|
99
|
+
npc_team_path = Path(__file__).parent / "npcsh" / "npc_team"
|
|
100
|
+
if npc_team_path.exists():
|
|
101
|
+
for root, dirs, files in os.walk(npc_team_path):
|
|
102
|
+
rel_root = os.path.relpath(root, Path(__file__).parent / "npcsh")
|
|
103
|
+
for f in files:
|
|
104
|
+
patterns.append(os.path.join(rel_root, f))
|
|
105
|
+
return patterns
|
|
106
|
+
|
|
95
107
|
setup(
|
|
96
108
|
name="npcsh",
|
|
97
|
-
version="1.1.
|
|
109
|
+
version="1.1.16",
|
|
98
110
|
packages=find_packages(exclude=["tests*"]),
|
|
99
111
|
install_requires=base_requirements, # Only install base requirements by default
|
|
100
112
|
extras_require={
|
|
101
113
|
"lite": api_requirements,
|
|
102
114
|
"local": local_requirements,
|
|
103
115
|
"yap": voice_requirements,
|
|
104
|
-
"all": api_requirements + local_requirements + voice_requirements ,
|
|
116
|
+
"all": api_requirements + local_requirements + voice_requirements ,
|
|
105
117
|
},
|
|
106
118
|
entry_points={
|
|
107
119
|
"console_scripts": [
|
|
@@ -122,6 +134,15 @@ setup(
|
|
|
122
134
|
"License :: OSI Approved :: MIT License",
|
|
123
135
|
],
|
|
124
136
|
include_package_data=True,
|
|
137
|
+
package_data={
|
|
138
|
+
"npcsh": [
|
|
139
|
+
"npc_team/*.npc",
|
|
140
|
+
"npc_team/*.ctx",
|
|
141
|
+
"npc_team/jinxs/**/*.jinx",
|
|
142
|
+
"npc_team/jinxs/**/*",
|
|
143
|
+
"npc_team/templates/*",
|
|
144
|
+
],
|
|
145
|
+
},
|
|
125
146
|
data_files=[("npcsh/npc_team", extra_files)],
|
|
126
147
|
python_requires=">=3.10",
|
|
127
148
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|