npcsh 1.1.7__py3-none-any.whl → 1.1.9__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 (66) hide show
  1. npcsh/_state.py +29 -5
  2. npcsh/corca.py +97 -38
  3. npcsh/npc_team/jinxs/modes/corca.jinx +18 -18
  4. npcsh/npc_team/jinxs/modes/plonk.jinx +0 -4
  5. npcsh/npc_team/jinxs/utils/ots.jinx +2 -2
  6. npcsh/npc_team/jinxs/utils/roll.jinx +6 -4
  7. npcsh/npc_team/jinxs/utils/search.jinx +1 -1
  8. npcsh/npcsh.py +18 -17
  9. npcsh-1.1.9.data/data/npcsh/npc_team/corca.jinx +28 -0
  10. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/ots.jinx +2 -2
  11. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plonk.jinx +0 -4
  12. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/roll.jinx +6 -4
  13. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/search.jinx +1 -1
  14. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/METADATA +52 -24
  15. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/RECORD +65 -65
  16. npcsh-1.1.7.data/data/npcsh/npc_team/corca.jinx +0 -28
  17. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/alicanto.jinx +0 -0
  18. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/alicanto.npc +0 -0
  19. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/alicanto.png +0 -0
  20. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/breathe.jinx +0 -0
  21. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/build.jinx +0 -0
  22. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/compile.jinx +0 -0
  23. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/corca.npc +0 -0
  24. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/corca.png +0 -0
  25. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/corca_example.png +0 -0
  26. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
  27. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/flush.jinx +0 -0
  28. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/foreman.npc +0 -0
  29. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/frederic.npc +0 -0
  30. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/frederic4.png +0 -0
  31. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/guac.jinx +0 -0
  32. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/guac.png +0 -0
  33. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/help.jinx +0 -0
  34. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/init.jinx +0 -0
  35. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/jinxs.jinx +0 -0
  36. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
  37. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/kadiefa.png +0 -0
  38. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/npc-studio.jinx +0 -0
  39. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
  40. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
  41. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plan.jinx +0 -0
  42. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plonk.npc +0 -0
  43. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plonk.png +0 -0
  44. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
  45. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/plonkjr.png +0 -0
  46. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/pti.jinx +0 -0
  47. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/python.jinx +0 -0
  48. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sample.jinx +0 -0
  49. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/serve.jinx +0 -0
  50. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/set.jinx +0 -0
  51. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sh.jinx +0 -0
  52. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sibiji.npc +0 -0
  53. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sibiji.png +0 -0
  54. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sleep.jinx +0 -0
  55. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/spool.jinx +0 -0
  56. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/spool.png +0 -0
  57. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/sql.jinx +0 -0
  58. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/trigger.jinx +0 -0
  59. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/vixynt.jinx +0 -0
  60. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/wander.jinx +0 -0
  61. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/yap.jinx +0 -0
  62. {npcsh-1.1.7.data → npcsh-1.1.9.data}/data/npcsh/npc_team/yap.png +0 -0
  63. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/WHEEL +0 -0
  64. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/entry_points.txt +0 -0
  65. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/licenses/LICENSE +0 -0
  66. {npcsh-1.1.7.dist-info → npcsh-1.1.9.dist-info}/top_level.txt +0 -0
npcsh/_state.py CHANGED
@@ -2108,10 +2108,23 @@ def process_pipeline_command(
2108
2108
  exec_provider = provider_override or npc_provider or state.chat_provider
2109
2109
 
2110
2110
  if cmd_to_process.startswith("/"):
2111
- with SpinnerContext(
2112
- f"Routing to {cmd_to_process.split()[0]}",
2113
- style="arrow"
2114
- ):
2111
+ command_name = cmd_to_process.split()[0].lstrip('/')
2112
+
2113
+ # Check if this is an interactive mode by looking for the jinx file in modes/
2114
+ is_interactive_mode = False
2115
+
2116
+ # Check global modes
2117
+ global_modes_jinx = os.path.expanduser(f'~/.npcsh/npc_team/jinxs/modes/{command_name}.jinx')
2118
+ if os.path.exists(global_modes_jinx):
2119
+ is_interactive_mode = True
2120
+
2121
+ # Check team modes
2122
+ if not is_interactive_mode and state.team and state.team.team_path:
2123
+ team_modes_jinx = os.path.join(state.team.team_path, 'jinxs', 'modes', f'{command_name}.jinx')
2124
+ if os.path.exists(team_modes_jinx):
2125
+ is_interactive_mode = True
2126
+
2127
+ if is_interactive_mode:
2115
2128
  result = execute_slash_command(
2116
2129
  cmd_to_process,
2117
2130
  stdin_input,
@@ -2119,8 +2132,19 @@ def process_pipeline_command(
2119
2132
  stream_final,
2120
2133
  router
2121
2134
  )
2135
+ else:
2136
+ with SpinnerContext(
2137
+ f"Routing to {cmd_to_process.split()[0]}",
2138
+ style="arrow"
2139
+ ):
2140
+ result = execute_slash_command(
2141
+ cmd_to_process,
2142
+ stdin_input,
2143
+ state,
2144
+ stream_final,
2145
+ router
2146
+ )
2122
2147
  return result
2123
-
2124
2148
  cmd_parts = parse_command_safely(cmd_to_process)
2125
2149
  if not cmd_parts:
2126
2150
  return state, stdin_input
npcsh/corca.py CHANGED
@@ -1235,68 +1235,98 @@ def create_corca_state_and_mcp_client(conversation_id,
1235
1235
 
1236
1236
  return state
1237
1237
 
1238
-
1239
- def enter_corca_mode(command: str, **kwargs):
1240
- state: ShellState = kwargs.get('shell_state')
1241
- command_history: CommandHistory = kwargs.get('command_history')
1242
-
1243
- if not state or not command_history:
1244
- return {"output": "Error: Corca mode requires shell state and history.", "messages": kwargs.get('messages', [])}
1245
-
1246
- all_command_parts = shlex.split(command)
1247
- parser = argparse.ArgumentParser(prog="/corca", description="Enter Corca MCP-powered mode.")
1248
- parser.add_argument("--mcp-server-path", type=str, help="Path to an MCP server script.")
1249
- parser.add_argument("-g", "--global", dest="force_global", action="store_true", help="Force use of global MCP server.")
1238
+ def corca_session(
1239
+ command_history: CommandHistory,
1240
+ state: Optional[ShellState] = None,
1241
+ mcp_server_path: Optional[str] = None,
1242
+ force_global: bool = False,
1243
+ initial_command: Optional[str] = None
1244
+ ) -> Dict[str, Any]:
1245
+ """
1246
+ Clean programmatic entry to Corca mode.
1250
1247
 
1251
- try:
1252
- known_args, remaining_args = parser.parse_known_args(all_command_parts[1:])
1253
- except SystemExit:
1254
- return {"output": "Invalid arguments for /corca. See /help corca.", "messages": state.messages}
1248
+ Args:
1249
+ command_history: CommandHistory instance
1250
+ state: Optional existing ShellState, will create if None
1251
+ mcp_server_path: Optional explicit path to MCP server
1252
+ force_global: Force use of global MCP server
1253
+ initial_command: Optional command to execute before entering loop
1254
+
1255
+ Returns:
1256
+ Dict with 'output' and 'messages' keys
1257
+ """
1258
+ # Setup state if not provided
1259
+ if state is None:
1260
+ _, team, default_npc = setup_shell()
1261
+
1262
+ # Load corca.npc if available
1263
+ project_corca_path = os.path.join('./npc_team/', "corca.npc")
1264
+ global_corca_path = os.path.expanduser('~/.npcsh/npc_team/corca.npc')
1265
+
1266
+ if os.path.exists(project_corca_path):
1267
+ default_npc = NPC(file=project_corca_path, db_conn=command_history.engine)
1268
+ elif os.path.exists(global_corca_path):
1269
+ default_npc = NPC(file=global_corca_path, db_conn=command_history.engine)
1270
+
1271
+ # Set defaults
1272
+ if default_npc.model is None:
1273
+ default_npc.model = team.model or NPCSH_CHAT_MODEL
1274
+ if default_npc.provider is None:
1275
+ default_npc.provider = team.provider or NPCSH_CHAT_PROVIDER
1276
+
1277
+ from npcsh._state import initial_state
1278
+ state = initial_state
1279
+ state.team = team
1280
+ state.npc = default_npc
1281
+ state.command_history = command_history
1255
1282
 
1256
1283
  print_corca_welcome_message()
1257
1284
 
1285
+ # Resolve MCP server path
1258
1286
  auto_copy_bypass = os.getenv("NPCSH_CORCA_AUTO_COPY_MCP_SERVER", "false").lower() == "true"
1259
-
1287
+
1260
1288
  resolved_server_path = _resolve_and_copy_mcp_server_path(
1261
- explicit_path=known_args.mcp_server_path,
1289
+ explicit_path=mcp_server_path,
1262
1290
  current_path=state.current_path,
1263
1291
  team_ctx_mcp_servers=state.team.team_ctx.get('mcp_servers', []) if state.team and hasattr(state.team, 'team_ctx') else None,
1264
1292
  interactive=True,
1265
1293
  auto_copy_bypass=auto_copy_bypass,
1266
- force_global=known_args.force_global
1294
+ force_global=force_global
1267
1295
  )
1268
1296
 
1269
- mcp_client = None
1297
+ # Connect to MCP server
1270
1298
  if resolved_server_path:
1271
1299
  try:
1272
1300
  mcp_client = MCPClientNPC()
1273
1301
  if mcp_client.connect_sync(resolved_server_path):
1274
1302
  state.mcp_client = mcp_client
1275
1303
  else:
1276
- cprint(f"Failed to connect to MCP server at {resolved_server_path}. Corca mode will have limited agent functionality.", "yellow")
1304
+ cprint(f"Failed to connect to MCP server. Limited functionality.", "yellow")
1277
1305
  state.mcp_client = None
1278
1306
  except Exception as e:
1279
- cprint(f"Error connecting to MCP server: {e}. Corca mode will have limited agent functionality.", "red")
1307
+ cprint(f"Error connecting to MCP server: {e}", "red")
1280
1308
  traceback.print_exc()
1281
1309
  state.mcp_client = None
1282
1310
  else:
1283
- cprint("No MCP server path provided or found. Corca mode will have limited agent functionality.", "yellow")
1311
+ cprint("No MCP server path found. Limited functionality.", "yellow")
1284
1312
  state.mcp_client = None
1285
1313
 
1314
+ # Execute initial command if provided
1315
+ if initial_command:
1316
+ try:
1317
+ state, output = execute_command_corca(initial_command, state, command_history)
1318
+ if not (isinstance(output, dict) and output.get('interrupted')):
1319
+ process_corca_result(initial_command, state, output, command_history)
1320
+ except Exception as e:
1321
+ print(colored(f'Error executing initial command: {e}', "red"))
1322
+
1323
+ # Main loop
1286
1324
  while True:
1287
1325
  try:
1288
- prompt_npc_name = "npc"
1289
- if state.npc:
1290
- prompt_npc_name = state.npc.name
1291
-
1326
+ prompt_npc_name = state.npc.name if state.npc else "npc"
1292
1327
  prompt_str = f"{colored(os.path.basename(state.current_path), 'blue')}:{prompt_npc_name}🦌> "
1293
1328
  prompt = readline_safe_prompt(prompt_str)
1294
-
1295
- if remaining_args:
1296
- user_input = " ".join(remaining_args)
1297
- remaining_args = []
1298
- else:
1299
- user_input = get_multiline_input(prompt).strip()
1329
+ user_input = get_multiline_input(prompt).strip()
1300
1330
 
1301
1331
  if user_input.lower() in ["exit", "quit", "done"]:
1302
1332
  break
@@ -1311,11 +1341,7 @@ def enter_corca_mode(command: str, **kwargs):
1311
1341
  print(colored("\n⚠️ Command interrupted. MCP session maintained.", "yellow"))
1312
1342
  continue
1313
1343
 
1314
- process_corca_result(user_input,
1315
- state,
1316
- output,
1317
- command_history,
1318
- )
1344
+ process_corca_result(user_input, state, output, command_history)
1319
1345
  except KeyboardInterrupt:
1320
1346
  print(colored("\n⚠️ Interrupted. Type 'exit' to quit Corca mode.", "yellow"))
1321
1347
  continue
@@ -1330,12 +1356,45 @@ def enter_corca_mode(command: str, **kwargs):
1330
1356
  print("\nExiting Corca Mode.")
1331
1357
  break
1332
1358
 
1359
+ # Cleanup
1333
1360
  if state.mcp_client:
1334
1361
  state.mcp_client.disconnect_sync()
1335
1362
  state.mcp_client = None
1336
1363
 
1337
1364
  render_markdown("\n# Exiting Corca Mode")
1338
1365
  return {"output": "", "messages": state.messages}
1366
+ def enter_corca_mode(command: str, **kwargs):
1367
+ """Legacy wrapper for command-line entry"""
1368
+ state: ShellState = kwargs.get('shell_state')
1369
+ command_history: CommandHistory = kwargs.get('command_history')
1370
+
1371
+ if not state or not command_history:
1372
+ return {"output": "Error: Corca mode requires shell state and history.", "messages": kwargs.get('messages', [])}
1373
+
1374
+ # Parse command arguments
1375
+ all_command_parts = shlex.split(command)
1376
+ parser = argparse.ArgumentParser(prog="/corca", description="Enter Corca MCP-powered mode.")
1377
+ parser.add_argument("--mcp-server-path", type=str, help="Path to an MCP server script.")
1378
+ parser.add_argument("-g", "--global", dest="force_global", action="store_true", help="Force use of global MCP server.")
1379
+
1380
+ try:
1381
+ known_args, remaining_args = parser.parse_known_args(all_command_parts[1:])
1382
+ except SystemExit:
1383
+ return {"output": "Invalid arguments for /corca. See /help corca.", "messages": state.messages}
1384
+
1385
+ # Get initial command from remaining args
1386
+ initial_command = " ".join(remaining_args) if remaining_args else None
1387
+
1388
+ # Call the clean entry point
1389
+ return corca_session(
1390
+ command_history=command_history,
1391
+ state=state,
1392
+ mcp_server_path=known_args.mcp_server_path,
1393
+ force_global=known_args.force_global,
1394
+ initial_command=initial_command
1395
+ )
1396
+
1397
+
1339
1398
  def main():
1340
1399
  parser = argparse.ArgumentParser(description="Corca - An MCP-powered npcsh shell.")
1341
1400
  parser.add_argument("--mcp-server-path", type=str, help="Path to an MCP server script to connect to.")
@@ -1,28 +1,28 @@
1
1
  jinx_name: "corca"
2
- description: "Enter the Corca MCP-powered agentic shell. Usage: /corca [--mcp-server-path path]"
2
+ description: "Enter the Corca MCP-powered agentic shell"
3
3
  inputs:
4
- - command: "/corca" # The full command string, e.g., "/corca --mcp-server-path /tmp/mcp"
4
+ - mcp_server_path: '~/.npcsh/npc_team/mcp_server.py'
5
+ - force_global: false
6
+ - initial_command: null
5
7
  steps:
6
8
  - name: "enter_corca"
7
9
  engine: "python"
8
10
  code: |
9
- # Assume npcsh._state and enter_corca_mode are accessible in the environment
10
-
11
- from npcsh._state import initial_state, setup_shell
12
- from npcsh.corca import enter_corca_mode
13
-
14
-
15
- full_command_str = context.get('command')
16
- output_messages = context.get('messages', [])
11
+ from npcsh._state import setup_shell
12
+ from npcsh.corca import corca_session
17
13
 
18
- command_history, team, default_npc = setup_shell()
14
+ mcp_server_path = context.get('mcp_server_path')
15
+ force_global = context.get('force_global', False)
16
+ initial_command = context.get('initial_command')
19
17
 
20
- result = enter_corca_mode(
21
- command=full_command_str,
22
- command_history=command_history,
23
- shell_state=initial_state,
24
- **context # Pass all context as kwargs to enter_corca_mode as it expects
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
25
  )
26
26
 
27
- context['output'] = result.get('output', 'Entered Corca mode.')
28
- context['messages'] = result.get('messages', output_messages)
27
+ context['output'] = result.get('output', 'Exited Corca mode.')
28
+ context['messages'] = result.get('messages', [])
@@ -30,10 +30,6 @@ steps:
30
30
  if not vision_provider and current_npc and current_npc.provider:
31
31
  vision_provider = current_npc.provider
32
32
 
33
- # Final fallbacks (these would ideally come from npcsh._state config)
34
- if not vision_model: vision_model = "gemini-1.5-pro-vision" # Example default
35
- if not vision_provider: vision_provider = "gemini" # Example default
36
-
37
33
  try:
38
34
  summary_data = execute_plonk_command(
39
35
  request=task_description,
@@ -38,10 +38,10 @@ steps:
38
38
  print(f"📸 Screenshot captured: {screenshot_info.get('filename', os.path.basename(screenshot_info['file_path']))}")
39
39
 
40
40
  if not vision_model:
41
- vision_model = getattr(current_npc, 'model', 'gpt-4o-mini')
41
+ vision_model = getattr(current_npc, 'model', 'gemma3:4b')
42
42
 
43
43
  if not vision_provider:
44
- vision_provider = getattr(current_npc, 'provider', 'openai')
44
+ vision_provider = getattr(current_npc, 'provider', 'ollama')
45
45
 
46
46
  response_data = get_llm_response(
47
47
  prompt=user_prompt,
@@ -2,12 +2,12 @@ jinx_name: "roll"
2
2
  description: "Generate a video from a text prompt."
3
3
  inputs:
4
4
  - prompt: "" # Required text prompt for video generation.
5
+ - vgmodel: "" # Video generation model to use. Defaults to NPCSH_VIDEO_GEN_MODEL or NPC's model.
6
+ - vgprovider: "" # Video generation provider to use. Defaults to NPCSH_VIDEO_GEN_PROVIDER or NPC's provider.
5
7
  - num_frames: 125 # Number of frames for the video.
6
8
  - width: 256 # Width of the video.
7
9
  - height: 256 # Height of the video.
8
10
  - output_path: "output.mp4" # Output file path for the video.
9
- - vgmodel: "" # Video generation model to use. Defaults to NPCSH_VIDEO_GEN_MODEL or NPC's model.
10
- - vgprovider: "" # Video generation provider to use. Defaults to NPCSH_VIDEO_GEN_PROVIDER or NPC's provider.
11
11
  steps:
12
12
  - name: "generate_video"
13
13
  engine: "python"
@@ -38,8 +38,10 @@ steps:
38
38
  video_gen_provider = current_npc.provider
39
39
 
40
40
  # Final fallbacks (these would ideally come from npcsh._state config)
41
- if not video_gen_model: video_gen_model = "stable-video-diffusion" # Example default
42
- if not video_gen_provider: video_gen_provider = "diffusers" # Example default
41
+ if not video_gen_model:
42
+ video_gen_model = "stable-video-diffusion" # Example default
43
+ if not video_gen_provider:
44
+ video_gen_provider = "diffusers" # Example default
43
45
 
44
46
  try:
45
47
  result = gen_video(
@@ -9,6 +9,7 @@ description: >
9
9
  /search --brainblast <query> (Advanced history search)
10
10
  inputs:
11
11
  - query: ""
12
+ - sprovider: ""
12
13
  - memory: false
13
14
  - kg: false
14
15
  - rag: false
@@ -16,7 +17,6 @@ inputs:
16
17
  - file_paths: ""
17
18
  - history_db_path: "~/npcsh_history.db"
18
19
  - vector_db_path: "~/npcsh_chroma.db"
19
- - sprovider: ""
20
20
  - emodel: ""
21
21
  - eprovider: ""
22
22
  steps:
npcsh/npcsh.py CHANGED
@@ -140,23 +140,24 @@ def run_repl(command_history: CommandHistory, initial_state: ShellState, router)
140
140
 
141
141
  while True:
142
142
  try:
143
- if len(state.messages) > 20:
144
- planning_state = {
145
- "goal": "ongoing npcsh session",
146
- "facts": [f"Working in {state.current_path}", f"Current mode: {state.current_mode}"],
147
- "successes": [],
148
- "mistakes": [],
149
- "todos": [],
150
- "constraints": ["Follow user requests", "Use appropriate mode for tasks"]
151
- }
152
- compressed_state = state.npc.compress_planning_state(planning_state)
153
- state.messages = [{"role": "system", "content": f"Session context: {compressed_state}"}]
154
-
155
- try:
156
- completer = make_completer(state, router)
157
- readline.set_completer(completer)
158
- except:
159
- pass
143
+ if state.messages is not None:
144
+ if len(state.messages) > 20:
145
+ planning_state = {
146
+ "goal": "ongoing npcsh session",
147
+ "facts": [f"Working in {state.current_path}", f"Current mode: {state.current_mode}"],
148
+ "successes": [],
149
+ "mistakes": [],
150
+ "todos": [],
151
+ "constraints": ["Follow user requests", "Use appropriate mode for tasks"]
152
+ }
153
+ compressed_state = state.npc.compress_planning_state(planning_state)
154
+ state.messages = [{"role": "system", "content": f"Session context: {compressed_state}"}]
155
+
156
+ try:
157
+ completer = make_completer(state, router)
158
+ readline.set_completer(completer)
159
+ except:
160
+ pass
160
161
 
161
162
  display_model = state.chat_model
162
163
  if isinstance(state.npc, NPC) and state.npc.model:
@@ -0,0 +1,28 @@
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', [])
@@ -38,10 +38,10 @@ steps:
38
38
  print(f"📸 Screenshot captured: {screenshot_info.get('filename', os.path.basename(screenshot_info['file_path']))}")
39
39
 
40
40
  if not vision_model:
41
- vision_model = getattr(current_npc, 'model', 'gpt-4o-mini')
41
+ vision_model = getattr(current_npc, 'model', 'gemma3:4b')
42
42
 
43
43
  if not vision_provider:
44
- vision_provider = getattr(current_npc, 'provider', 'openai')
44
+ vision_provider = getattr(current_npc, 'provider', 'ollama')
45
45
 
46
46
  response_data = get_llm_response(
47
47
  prompt=user_prompt,
@@ -30,10 +30,6 @@ steps:
30
30
  if not vision_provider and current_npc and current_npc.provider:
31
31
  vision_provider = current_npc.provider
32
32
 
33
- # Final fallbacks (these would ideally come from npcsh._state config)
34
- if not vision_model: vision_model = "gemini-1.5-pro-vision" # Example default
35
- if not vision_provider: vision_provider = "gemini" # Example default
36
-
37
33
  try:
38
34
  summary_data = execute_plonk_command(
39
35
  request=task_description,
@@ -2,12 +2,12 @@ jinx_name: "roll"
2
2
  description: "Generate a video from a text prompt."
3
3
  inputs:
4
4
  - prompt: "" # Required text prompt for video generation.
5
+ - vgmodel: "" # Video generation model to use. Defaults to NPCSH_VIDEO_GEN_MODEL or NPC's model.
6
+ - vgprovider: "" # Video generation provider to use. Defaults to NPCSH_VIDEO_GEN_PROVIDER or NPC's provider.
5
7
  - num_frames: 125 # Number of frames for the video.
6
8
  - width: 256 # Width of the video.
7
9
  - height: 256 # Height of the video.
8
10
  - output_path: "output.mp4" # Output file path for the video.
9
- - vgmodel: "" # Video generation model to use. Defaults to NPCSH_VIDEO_GEN_MODEL or NPC's model.
10
- - vgprovider: "" # Video generation provider to use. Defaults to NPCSH_VIDEO_GEN_PROVIDER or NPC's provider.
11
11
  steps:
12
12
  - name: "generate_video"
13
13
  engine: "python"
@@ -38,8 +38,10 @@ steps:
38
38
  video_gen_provider = current_npc.provider
39
39
 
40
40
  # Final fallbacks (these would ideally come from npcsh._state config)
41
- if not video_gen_model: video_gen_model = "stable-video-diffusion" # Example default
42
- if not video_gen_provider: video_gen_provider = "diffusers" # Example default
41
+ if not video_gen_model:
42
+ video_gen_model = "stable-video-diffusion" # Example default
43
+ if not video_gen_provider:
44
+ video_gen_provider = "diffusers" # Example default
43
45
 
44
46
  try:
45
47
  result = gen_video(
@@ -9,6 +9,7 @@ description: >
9
9
  /search --brainblast <query> (Advanced history search)
10
10
  inputs:
11
11
  - query: ""
12
+ - sprovider: ""
12
13
  - memory: false
13
14
  - kg: false
14
15
  - rag: false
@@ -16,7 +17,6 @@ inputs:
16
17
  - file_paths: ""
17
18
  - history_db_path: "~/npcsh_history.db"
18
19
  - vector_db_path: "~/npcsh_chroma.db"
19
- - sprovider: ""
20
20
  - emodel: ""
21
21
  - eprovider: ""
22
22
  steps:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: npcsh
3
- Version: 1.1.7
3
+ Version: 1.1.9
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
@@ -143,17 +143,49 @@ and you will enter the NPC shell. Additionally, the pip installation includes th
143
143
  ```
144
144
 
145
145
 
146
- - **Search the Web**
146
+ - **Search**
147
+ - search the web
147
148
  ```bash
148
- /search "cal golden bears football schedule" -sp perplexity
149
+ /search "cerulean city" perplexity
150
+
149
151
  ```
150
152
  <p align="center">
151
- <img src="https://raw.githubusercontent.com/npc-worldwide/npcsh/main/test_data/search_example.png" alt="example of search results", width=600>
152
- </p>
153
+ <img src="https://raw.githubusercontent.com/npc-worldwide/npcsh/main/test_data/search.gif" alt="example of search results", width=600>
154
+ </p>
155
+
156
+ - search approved memories
157
+ ```bash
158
+ /search query="how to deploy python apps" memory=true
159
+ ```
160
+
161
+ - search the knowledge graph
162
+
163
+ ```bash
164
+ /search query="user preferences for database" kg=true
165
+ ```
166
+
167
+ - execute a RAG search across files
168
+
169
+ ```bash
170
+ /search --rag -f ~/docs/api.md,~/docs/config.yaml "authentication setup"
171
+ ```
172
+
173
+ - brainblast search (searches many keyword combinations)
174
+
175
+ ```bash
176
+ /search query="git commands" brainblast=true
177
+ ```
178
+
179
+ - web search with specific provider
180
+
181
+ ```bash
182
+ /search query="family vacations" sprovider="perplexity"
183
+ ```
153
184
 
154
185
  - **Computer Use**
186
+
155
187
  ```bash
156
- /plonk 'find out the latest news on cnn'
188
+ /plonk 'find out the latest news on cnn' gemma3:12b ollama
157
189
  ```
158
190
 
159
191
  - **Generate Image**
@@ -165,12 +197,12 @@ and you will enter the NPC shell. Additionally, the pip installation includes th
165
197
  </p>
166
198
  - **Generate Video**
167
199
  ```bash
168
- /roll 'generate a video of a hat riding a dog'
200
+ /roll 'generate a video of a hat riding a dog' veo-3.1-fast-generate-preview gemini
169
201
  ```
170
- <!--
202
+
171
203
  <p align="center">
172
- <img src="https://raw.githubusercontent.com/npc-worldwide/npcsh/main/test_data/hat_video.mp4" alt="video of a hat riding a dog", width=250>
173
- </p> -->
204
+ <img src="https://raw.githubusercontent.com/NPC-Worldwide/npcsh/main/test_data/hatridingdog.gif" alt="video of a hat riding a dog", width=250>
205
+ </p>
174
206
 
175
207
  - **Serve an NPC Team**
176
208
  ```bash
@@ -212,16 +244,13 @@ This architecture enables users to build complex AI workflows while maintaining
212
244
 
213
245
  Importantly, users can switch easily between the NPCs they are chatting with by typing `/n npc_name` within the NPC shell. Likewise, they can create Jinxs and then use them from within the NPC shell by invoking the jinx name and the arguments required for the Jinx; `/<jinx_name> arg1 arg2`
214
246
 
215
- # Macros
216
- - activated by invoking `/<command> ...` in `npcsh`, macros can be called in bash or through the `npc` CLI. In our examples, we provide both `npcsh` calls as well as bash calls with the `npc` cli where relevant. For converting any `/<command>` in `npcsh` to a bash version, replace the `/` with `npc ` and the macro command will be invoked as a positional argument. Some, like breathe, flush,
217
-
247
+ # Jinx as macros
248
+ - activated by invoking `/<jinx_name> ...` in `npcsh`, jinxs can be called in bash or through the `npc` CLI. In our examples, we provide both `npcsh` calls as well as bash calls with the `npc` cli where relevant. For converting any `/<command>` in `npcsh` to a bash version, replace the `/` with `npc ` and the macro command will be invoked as a positional argument.
218
249
  - `/alicanto` - Conduct deep research with multiple perspectives, identifying gold insights and cliff warnings. Usage: `/alicanto 'query to be researched' --num-npcs <int> --depth <int>`
219
250
  - `/build` - Builds the current npc team to an executable format . Usage: `/build <output[flask,docker,cli,static]> --options`
220
- - `/brainblast` - Execute an advanced chunked search on command history. Usage: `/brainblast 'query' --top_k 10`
221
251
  - `/breathe` - Condense context on a regular cadence. Usage: `/breathe -p <provider: NPCSH_CHAT_PROVIDER> -m <model: NPCSH_CHAT_MODEL>`
222
252
  - `/compile` - Compile NPC profiles. Usage: `/compile <path_to_npc> `
223
253
  - `/corca` - Enter the Corca MCP-powered agentic shell. Usage: `/corca [--mcp-server-path path]`
224
- - `/flush` - Flush the last N messages. Usage: `/flush N=10`
225
254
  - `/guac` - Enter guac mode. Usage: `/guac`
226
255
  - `/help` - Show help for commands, NPCs, or Jinxs. Usage: `/help`
227
256
  - `/init` - Initialize NPC project. Usage: `/init`
@@ -229,13 +258,11 @@ Importantly, users can switch easily between the NPCs they are chatting with by
229
258
  - `/<jinx_name>` - Run a jinx with specified command line arguments. `/<jinx_name> jinx_arg1 jinx_arg2`
230
259
  - `/npc-studio` - Start npc studio. Pulls NPC Studio github to `~/.npcsh/npc-studio` and launches it in development mode after installing necessary NPM dependencies.Usage: `/npc-studio`
231
260
  - `/ots` - Take screenshot and analyze with vision model. Usage: `/ots filename=<output_file_name_for_screenshot>` then select an area, and you will be prompted for your request.
232
- - `/plan` - Execute a plan command. Usage: `/plan 'idea for a cron job to be set up to accomplish'`
233
261
  - `/plonk` - Use vision model to interact with GUI. Usage: `/plonk '<task description>' `
234
262
  - `/pti` - Use pardon-the-interruption mode to interact with reasoning model LLM. Usage: `/pti`
235
- - `/rag` - Execute a RAG command using ChromaDB embeddings with optional file input (-f/--file). Usage: `/rag '<query_to_rag>' --emodel <NPCSH_EMBEDDING_MODEL> --eprovider <NPCSH_EMBEDDING_PROVIDER>`
236
263
  - `/roll` - generate a video with video generation model. Usage: `/roll '<description_for_a_movie>' --vgmodel <NPCSH_VIDEO_GEN_MODEL> --vgprovider <NPCSH_VIDEO_GEN_PROVIDER>`
237
264
  - `/sample` - Send a context-free prompt to an LLM, letting you get fresh answers without needing to start a separate conversation/shell. Usage: `/sample -m <NPCSH_CHAT_MODEL> 'question to sample --temp <float> --top_k int`
238
- - `/search` - Execute a web search command. Usage: `/search 'search query' --sprovider <provider>` where provider is currently limited to DuckDuckGo and Perplexity. Wikipedia integration ongoing.
265
+ - `/search` - Execute a search command on the web, in your memories, in the knowledge graph, or in documents with rag. Usage: `/search 'search query' --sprovider <provider>` where provider is currently limited to DuckDuckGo, Perplexity, and Exa with more coming soon through litellm. Wikipedia integration ongoing. See above for more search specific examples.
239
266
  - `/serve` - Serve an NPC Team server.
240
267
  - `/set` - Set configuration values.
241
268
  - Usage:
@@ -249,7 +276,6 @@ Importantly, users can switch easily between the NPCs they are chatting with by
249
276
  - Usage:
250
277
  - Gen Image: `/vixynt -igp <NPCSH_IMAGE_GEN_PROVIDER> --igmodel <NPCSH_IMAGE_GEN_MODEL> --output_file <path_to_file> width=<int:1024> height =<int:1024> 'description of image`
251
278
  - Edit Image: `/vixynt 'edit this....' --attachments '/path/to/image.png,/path/to/image.jpeg'`
252
-
253
279
  - `/wander` - A method for LLMs to think on a problem by switching between states of high temperature and low temperature. Usage: `/wander 'query to wander about' --provider "ollama" --model "deepseek-r1:32b" environment="a vast dark ocean" interruption-likelihood=.1`
254
280
  - `/yap` - Enter voice chat (yap) mode. Usage: `/yap -n <npc_to_chat_with>`
255
281
 
@@ -271,24 +297,26 @@ Importantly, users can switch easily between the NPCs they are chatting with by
271
297
  '
272
298
 
273
299
  ## Read the Docs
274
- To see more about how to use the macros and modes in the NPC Shell, read the docs at [npc-shell.readthedocs.io](https://npc-shell.readthedocs.io/en/latest/)
300
+ To see more about how to use the jinxs and modes in the NPC Shell, read the docs at [npc-shell.readthedocs.io](https://npc-shell.readthedocs.io/en/latest/)
275
301
 
276
302
 
277
303
  ## Inference Capabilities
278
304
  - `npcsh` works with local and enterprise LLM providers through its LiteLLM integration, allowing users to run inference from Ollama, LMStudio, vLLM, MLX, OpenAI, Anthropic, Gemini, and Deepseek, making it a versatile tool for both simple commands and sophisticated AI-driven tasks.
279
305
 
280
306
  ## NPC Studio
281
- There is a graphical user interface that makes use of the NPC Toolkit through the NPC Studio. See the source code for NPC Studio [here](https://github.com/npc-worldwide/npc-studio). Download the executables at [our website](https://enpisi.com/npc-studio). For the most up to date version, you can use NPC Studio by invoking it in npcsh
307
+ There is a graphical user interface that makes use of the NPC Toolkit through the NPC Studio. See the source code for NPC Studio [here](https://github.com/npc-worldwide/npc-studio). Download the executables at [our website](https://enpisi.com/downloads). For the most up to date development version, you can use NPC Studio by invoking it in npcsh
308
+
282
309
  ```
283
310
  /npc-studio
284
311
  ```
285
- which will download and set up and serve the NPC Studio application within your `~/.npcsh` folder. It requires `npm` and `node` to work.
312
+ which will download and set up and serve the NPC Studio application within your `~/.npcsh` folder. It requires `npm` and `node` to work, and of course npcpy !
286
313
 
287
- ## Mailing List
314
+ ## Mailing List and Community
288
315
  Interested to stay in the loop and to hear the latest and greatest about `npcpy`, `npcsh`, and NPC Studio? Be sure to sign up for the [newsletter](https://forms.gle/n1NzQmwjsV4xv1B2A)!
289
316
 
317
+ [Join the discord to discuss ideas for npc tools](https://discord.gg/VvYVT5YC)
290
318
  ## Support
291
- If you appreciate the work here, [consider supporting NPC Worldwide with a monthly donation](https://buymeacoffee.com/npcworldwide), [buying NPC-WW themed merch](https://enpisi.com/shop), or hiring us to help you explore how to use the NPC Toolkit and AI tools to help your business or research team, please reach out to info@npcworldwi.de .
319
+ If you appreciate the work here, [consider supporting NPC Worldwide with a monthly donation](https://buymeacoffee.com/npcworldwide), [buying NPC-WW themed merch](https://enpisi.com/shop), [using and subscribing to Lavanzaro](lavanzaro.com),s or hiring us to help you explore how to use the NPC Toolkit and AI tools to help your business or research team, please reach out to info@npcworldwi.de .
292
320
 
293
321
 
294
322
  ## Installation
@@ -1,13 +1,13 @@
1
1
  npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- npcsh/_state.py,sha256=VZs5snF-jWNXO5S8ALdiqdeQ9Ytw0q8qlBTEojtLtcI,101688
2
+ npcsh/_state.py,sha256=tMdabNn1-HcFWsF5YYkzBhLzcC27bXGJORoIJ-dsjsw,102707
3
3
  npcsh/alicanto.py,sha256=QCuTtMOgjFkjfrwZZdZBhfp-ETbimlOrXJQiZhClzT0,42160
4
4
  npcsh/build.py,sha256=UuId0_rQml40A4U1KuvMekRyfB30s8HiLsXFJjqrBmM,7692
5
- npcsh/corca.py,sha256=bhEzGlmnq_-VXksuQm6yEdDBgd_-x5WKlt27hw7YVcQ,60698
5
+ npcsh/corca.py,sha256=Z2j5z1TNBhtKpShDrPSWKQ1uZ205bqo2dSWenc08gFA,62853
6
6
  npcsh/guac.py,sha256=sVdLYVkzkQw6TE7crtLUX0QJZFkzQthWZTe1p7IfAQE,80412
7
7
  npcsh/mcp_helpers.py,sha256=9TsCfcquGu_vX4WaKlY3J3P13-uxruQKrXng-jJ5YyY,11176
8
8
  npcsh/mcp_server.py,sha256=Lfpabnwi_xu0UudJxQ_YNyyCn2f0_JjzorhWmIeclwY,8777
9
9
  npcsh/npc.py,sha256=yqgqZDLwqniIbbDu-vaJf31fWVbOrtgNnFXfjDBk-D8,9853
10
- npcsh/npcsh.py,sha256=T6iE_tAV_yWYkxFB1Z0qhYrQxrE-eyh1RmaIQA-3xDQ,9383
10
+ npcsh/npcsh.py,sha256=mHvLVz_NbJUvnTU3ktOcg5NnxliAtRuTBbmp7Ky028A,9490
11
11
  npcsh/plonk.py,sha256=IfOuiE5FBvk-EIsrWFjGy0SrNywDpn4a49E7seBtEmY,14246
12
12
  npcsh/pti.py,sha256=UciiiH2Kz4ERQFy0-FX6BQEU2VxYQEUril-_Cvj76Y0,7853
13
13
  npcsh/routes.py,sha256=nlp_rd8eDyg2vTuXom9JMtmkWSzISu9u6Oc0lJjxKsQ,5024
@@ -39,9 +39,9 @@ npcsh/npc_team/jinxs/code/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9C
39
39
  npcsh/npc_team/jinxs/code/sh.jinx,sha256=Z_Cuok4FDUxuZGPCuqWS9D3TPI9SdkaZY4U_TCnie2g,666
40
40
  npcsh/npc_team/jinxs/code/sql.jinx,sha256=U3scchBO3tqCQRIErC-W87eLtiCv-YGmN7ftqyIvcVc,582
41
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
42
+ npcsh/npc_team/jinxs/modes/corca.jinx,sha256=HTSyjoR2Hc4zEyQudapddOyP3paLcpxhWld5R4XipCk,905
43
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
44
+ npcsh/npc_team/jinxs/modes/plonk.jinx,sha256=teHS1A2Ov5imAWp9oHW1RNUVV2k4cfFQo-ro30mxuS8,2323
45
45
  npcsh/npc_team/jinxs/modes/pti.jinx,sha256=Yw32GQS9LvYkukEfjq6R1GLAL6fWACYBz9JuVecZJEo,1126
46
46
  npcsh/npc_team/jinxs/modes/spool.jinx,sha256=A4upAI4LnXxYUjY0Rz1_kAhRCDpz08XWPTgisiH06A4,1664
47
47
  npcsh/npc_team/jinxs/modes/wander.jinx,sha256=Svc6zjmoXr4BbDg5SN4DB1Byhh75AmIeAItcJCBIlcc,3513
@@ -50,11 +50,11 @@ npcsh/npc_team/jinxs/utils/breathe.jinx,sha256=WDw13P3Q0M03HdZu-vqhbOhefLjaMZ5oU
50
50
  npcsh/npc_team/jinxs/utils/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
51
51
  npcsh/npc_team/jinxs/utils/flush.jinx,sha256=ngzFu4-dnKkqqL0QM9iX9XBxyWOmQdVcJTFb1GhajVo,1422
52
52
  npcsh/npc_team/jinxs/utils/npc-studio.jinx,sha256=0aY-z399BRIXIL3TLMTcYDiHjDm-krZy0CnYfiskQUo,2234
53
- npcsh/npc_team/jinxs/utils/ots.jinx,sha256=5Dpsyf0h2M80mkdZnouMp1PSK9S0TCPrINRLoP_1tOc,2303
53
+ npcsh/npc_team/jinxs/utils/ots.jinx,sha256=DKoSVgH_ZcmOaZ2-R-Yn80KyCiYgqG25JG6e4wQwP64,2301
54
54
  npcsh/npc_team/jinxs/utils/plan.jinx,sha256=hCIG9nGI56C1SeGuGAUcR3XnJ25kHaDnUn1VCv8vszY,1234
55
- npcsh/npc_team/jinxs/utils/roll.jinx,sha256=FHoqXXqFgucaW7UJW_14DcRcRlVPBgFeaPJPoATx5BY,2882
55
+ npcsh/npc_team/jinxs/utils/roll.jinx,sha256=RhYhDDdyKcWjVhVSU7dX_DMn5s4rz-nY6pXmtr6tytM,2908
56
56
  npcsh/npc_team/jinxs/utils/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
57
- npcsh/npc_team/jinxs/utils/search.jinx,sha256=7R37sElFo-XooRNKYqHaouQ-lOxmAxew_8uSXQfNP_Q,5421
57
+ npcsh/npc_team/jinxs/utils/search.jinx,sha256=qTICVdk1QrbQ_ulCOaAnbXnGCKk9MgO0MI4MKbDbbRI,5421
58
58
  npcsh/npc_team/jinxs/utils/serve.jinx,sha256=qly_3MThU3TRyJI2grHlhYOqEY1VT-XxubPIuWdZrpU,1056
59
59
  npcsh/npc_team/jinxs/utils/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
60
60
  npcsh/npc_team/jinxs/utils/trigger.jinx,sha256=rS913e2qJzNBC0wmmecgzN3f4v8o1os8AZQOPjnW8ho,1456
@@ -65,60 +65,60 @@ npcsh/npc_team/jinxs/utils/core/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96R
65
65
  npcsh/npc_team/jinxs/utils/core/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
66
66
  npcsh/npc_team/jinxs/utils/core/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
67
67
  npcsh/npc_team/jinxs/utils/core/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
68
- npcsh-1.1.7.data/data/npcsh/npc_team/alicanto.jinx,sha256=MknpYUX0eIvi5vG9gkoTkJvF_LcFbAp_hQ0qkYEBr3c,4014
69
- npcsh-1.1.7.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
70
- npcsh-1.1.7.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
71
- npcsh-1.1.7.data/data/npcsh/npc_team/breathe.jinx,sha256=WDw13P3Q0M03HdZu-vqhbOhefLjaMZ5oUcct_W4kUsY,739
72
- npcsh-1.1.7.data/data/npcsh/npc_team/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
73
- npcsh-1.1.7.data/data/npcsh/npc_team/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
74
- npcsh-1.1.7.data/data/npcsh/npc_team/corca.jinx,sha256=OFzxSHoBJ2Yoc34mtTpd9B_CtGdqbpgcCN3Qt39YJeA,1028
75
- npcsh-1.1.7.data/data/npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
76
- npcsh-1.1.7.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
77
- npcsh-1.1.7.data/data/npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
78
- npcsh-1.1.7.data/data/npcsh/npc_team/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
79
- npcsh-1.1.7.data/data/npcsh/npc_team/flush.jinx,sha256=ngzFu4-dnKkqqL0QM9iX9XBxyWOmQdVcJTFb1GhajVo,1422
80
- npcsh-1.1.7.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
81
- npcsh-1.1.7.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
82
- npcsh-1.1.7.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
83
- npcsh-1.1.7.data/data/npcsh/npc_team/guac.jinx,sha256=UIVXw8c-m-lh10bxL2yl2n94TQ_SjZSwLP3sLFGv0k4,1616
84
- npcsh-1.1.7.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
85
- npcsh-1.1.7.data/data/npcsh/npc_team/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
86
- npcsh-1.1.7.data/data/npcsh/npc_team/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
87
- npcsh-1.1.7.data/data/npcsh/npc_team/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
88
- npcsh-1.1.7.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
89
- npcsh-1.1.7.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
90
- npcsh-1.1.7.data/data/npcsh/npc_team/npc-studio.jinx,sha256=0aY-z399BRIXIL3TLMTcYDiHjDm-krZy0CnYfiskQUo,2234
91
- npcsh-1.1.7.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
92
- npcsh-1.1.7.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
93
- npcsh-1.1.7.data/data/npcsh/npc_team/ots.jinx,sha256=5Dpsyf0h2M80mkdZnouMp1PSK9S0TCPrINRLoP_1tOc,2303
94
- npcsh-1.1.7.data/data/npcsh/npc_team/plan.jinx,sha256=hCIG9nGI56C1SeGuGAUcR3XnJ25kHaDnUn1VCv8vszY,1234
95
- npcsh-1.1.7.data/data/npcsh/npc_team/plonk.jinx,sha256=3f5MvkYBFh5Z3iDhs5vFxPT6acgw7OZLqVA-Mxtm_vc,2559
96
- npcsh-1.1.7.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
97
- npcsh-1.1.7.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
98
- npcsh-1.1.7.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
99
- npcsh-1.1.7.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
100
- npcsh-1.1.7.data/data/npcsh/npc_team/pti.jinx,sha256=Yw32GQS9LvYkukEfjq6R1GLAL6fWACYBz9JuVecZJEo,1126
101
- npcsh-1.1.7.data/data/npcsh/npc_team/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
102
- npcsh-1.1.7.data/data/npcsh/npc_team/roll.jinx,sha256=FHoqXXqFgucaW7UJW_14DcRcRlVPBgFeaPJPoATx5BY,2882
103
- npcsh-1.1.7.data/data/npcsh/npc_team/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
104
- npcsh-1.1.7.data/data/npcsh/npc_team/search.jinx,sha256=7R37sElFo-XooRNKYqHaouQ-lOxmAxew_8uSXQfNP_Q,5421
105
- npcsh-1.1.7.data/data/npcsh/npc_team/serve.jinx,sha256=qly_3MThU3TRyJI2grHlhYOqEY1VT-XxubPIuWdZrpU,1056
106
- npcsh-1.1.7.data/data/npcsh/npc_team/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
107
- npcsh-1.1.7.data/data/npcsh/npc_team/sh.jinx,sha256=Z_Cuok4FDUxuZGPCuqWS9D3TPI9SdkaZY4U_TCnie2g,666
108
- npcsh-1.1.7.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
109
- npcsh-1.1.7.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
110
- npcsh-1.1.7.data/data/npcsh/npc_team/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
111
- npcsh-1.1.7.data/data/npcsh/npc_team/spool.jinx,sha256=A4upAI4LnXxYUjY0Rz1_kAhRCDpz08XWPTgisiH06A4,1664
112
- npcsh-1.1.7.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
113
- npcsh-1.1.7.data/data/npcsh/npc_team/sql.jinx,sha256=U3scchBO3tqCQRIErC-W87eLtiCv-YGmN7ftqyIvcVc,582
114
- npcsh-1.1.7.data/data/npcsh/npc_team/trigger.jinx,sha256=rS913e2qJzNBC0wmmecgzN3f4v8o1os8AZQOPjnW8ho,1456
115
- npcsh-1.1.7.data/data/npcsh/npc_team/vixynt.jinx,sha256=ECNE02omzgvJ2B8ZO8K6OylMa3lLGBNEEeFZ-oXiKC0,4070
116
- npcsh-1.1.7.data/data/npcsh/npc_team/wander.jinx,sha256=Svc6zjmoXr4BbDg5SN4DB1Byhh75AmIeAItcJCBIlcc,3513
117
- npcsh-1.1.7.data/data/npcsh/npc_team/yap.jinx,sha256=eaI665zjaLH2FUwHoO3iC1Uzo9bGA-a1UMtBRBTEHC0,898
118
- npcsh-1.1.7.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
119
- npcsh-1.1.7.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
120
- npcsh-1.1.7.dist-info/METADATA,sha256=GARFW0KJF_Se51zHQvaB1QCcCICBFUikwCRVGdA2sC4,25292
121
- npcsh-1.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
- npcsh-1.1.7.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
123
- npcsh-1.1.7.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
124
- npcsh-1.1.7.dist-info/RECORD,,
68
+ npcsh-1.1.9.data/data/npcsh/npc_team/alicanto.jinx,sha256=MknpYUX0eIvi5vG9gkoTkJvF_LcFbAp_hQ0qkYEBr3c,4014
69
+ npcsh-1.1.9.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
70
+ npcsh-1.1.9.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
71
+ npcsh-1.1.9.data/data/npcsh/npc_team/breathe.jinx,sha256=WDw13P3Q0M03HdZu-vqhbOhefLjaMZ5oUcct_W4kUsY,739
72
+ npcsh-1.1.9.data/data/npcsh/npc_team/build.jinx,sha256=QrShGspHwP1z073334vhUIIJZ_3pMJWN_DX_DPPVslU,2771
73
+ npcsh-1.1.9.data/data/npcsh/npc_team/compile.jinx,sha256=Rjdm5jf3ech1E3cnpLz-o2tbJuVvEoQGAp0FQRAU7qo,2526
74
+ npcsh-1.1.9.data/data/npcsh/npc_team/corca.jinx,sha256=HTSyjoR2Hc4zEyQudapddOyP3paLcpxhWld5R4XipCk,905
75
+ npcsh-1.1.9.data/data/npcsh/npc_team/corca.npc,sha256=NtZW1mQ_AMOHlfMCfl8A3uA00UMuHuO95FzRg6kUixo,631
76
+ npcsh-1.1.9.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
77
+ npcsh-1.1.9.data/data/npcsh/npc_team/corca_example.png,sha256=p0lVTuwaps4-F-3k4wgp9d897YPyn6FGZugtXMUQjj8,28777
78
+ npcsh-1.1.9.data/data/npcsh/npc_team/edit_file.jinx,sha256=jExsHctvapG2xlze6E7ZR3oSLS9hJTYKKd41dQwgOLw,3488
79
+ npcsh-1.1.9.data/data/npcsh/npc_team/flush.jinx,sha256=ngzFu4-dnKkqqL0QM9iX9XBxyWOmQdVcJTFb1GhajVo,1422
80
+ npcsh-1.1.9.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
81
+ npcsh-1.1.9.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
82
+ npcsh-1.1.9.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
83
+ npcsh-1.1.9.data/data/npcsh/npc_team/guac.jinx,sha256=UIVXw8c-m-lh10bxL2yl2n94TQ_SjZSwLP3sLFGv0k4,1616
84
+ npcsh-1.1.9.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
85
+ npcsh-1.1.9.data/data/npcsh/npc_team/help.jinx,sha256=OquhUEgcYZp-gu5Wgl3pOZnswxGQ96RoNG08tHjC9-4,2091
86
+ npcsh-1.1.9.data/data/npcsh/npc_team/init.jinx,sha256=QBb1uOTvMlD-x3S7zPASH5TBZRwNhMQvK6t3DdC2mVw,1596
87
+ npcsh-1.1.9.data/data/npcsh/npc_team/jinxs.jinx,sha256=rF432zHrVeccbGKm5tHxd_bZ7OQk355xB6LTlEIXiuI,1269
88
+ npcsh-1.1.9.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
89
+ npcsh-1.1.9.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
90
+ npcsh-1.1.9.data/data/npcsh/npc_team/npc-studio.jinx,sha256=0aY-z399BRIXIL3TLMTcYDiHjDm-krZy0CnYfiskQUo,2234
91
+ npcsh-1.1.9.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
92
+ npcsh-1.1.9.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
93
+ npcsh-1.1.9.data/data/npcsh/npc_team/ots.jinx,sha256=DKoSVgH_ZcmOaZ2-R-Yn80KyCiYgqG25JG6e4wQwP64,2301
94
+ npcsh-1.1.9.data/data/npcsh/npc_team/plan.jinx,sha256=hCIG9nGI56C1SeGuGAUcR3XnJ25kHaDnUn1VCv8vszY,1234
95
+ npcsh-1.1.9.data/data/npcsh/npc_team/plonk.jinx,sha256=teHS1A2Ov5imAWp9oHW1RNUVV2k4cfFQo-ro30mxuS8,2323
96
+ npcsh-1.1.9.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
97
+ npcsh-1.1.9.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
98
+ npcsh-1.1.9.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
99
+ npcsh-1.1.9.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
100
+ npcsh-1.1.9.data/data/npcsh/npc_team/pti.jinx,sha256=Yw32GQS9LvYkukEfjq6R1GLAL6fWACYBz9JuVecZJEo,1126
101
+ npcsh-1.1.9.data/data/npcsh/npc_team/python.jinx,sha256=lFJubdPVlGxSuUKCxsxjYG4_dnX2ATn8U9ChYKRmL5Q,389
102
+ npcsh-1.1.9.data/data/npcsh/npc_team/roll.jinx,sha256=RhYhDDdyKcWjVhVSU7dX_DMn5s4rz-nY6pXmtr6tytM,2908
103
+ npcsh-1.1.9.data/data/npcsh/npc_team/sample.jinx,sha256=7cWwfAZFgWxaTkIL1gpFFryQ3mjvVjoWYAov-zOFn_E,2237
104
+ npcsh-1.1.9.data/data/npcsh/npc_team/search.jinx,sha256=qTICVdk1QrbQ_ulCOaAnbXnGCKk9MgO0MI4MKbDbbRI,5421
105
+ npcsh-1.1.9.data/data/npcsh/npc_team/serve.jinx,sha256=qly_3MThU3TRyJI2grHlhYOqEY1VT-XxubPIuWdZrpU,1056
106
+ npcsh-1.1.9.data/data/npcsh/npc_team/set.jinx,sha256=hQY_0muEtnWtfXsdK9cPwSvIevCimiJJn1-yhGC_VxM,1381
107
+ npcsh-1.1.9.data/data/npcsh/npc_team/sh.jinx,sha256=Z_Cuok4FDUxuZGPCuqWS9D3TPI9SdkaZY4U_TCnie2g,666
108
+ npcsh-1.1.9.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
109
+ npcsh-1.1.9.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
110
+ npcsh-1.1.9.data/data/npcsh/npc_team/sleep.jinx,sha256=c-7Dn4aLuX7WyBVcvuk3sqcbIutqKIz1N9sBfPNzhck,5301
111
+ npcsh-1.1.9.data/data/npcsh/npc_team/spool.jinx,sha256=A4upAI4LnXxYUjY0Rz1_kAhRCDpz08XWPTgisiH06A4,1664
112
+ npcsh-1.1.9.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
113
+ npcsh-1.1.9.data/data/npcsh/npc_team/sql.jinx,sha256=U3scchBO3tqCQRIErC-W87eLtiCv-YGmN7ftqyIvcVc,582
114
+ npcsh-1.1.9.data/data/npcsh/npc_team/trigger.jinx,sha256=rS913e2qJzNBC0wmmecgzN3f4v8o1os8AZQOPjnW8ho,1456
115
+ npcsh-1.1.9.data/data/npcsh/npc_team/vixynt.jinx,sha256=ECNE02omzgvJ2B8ZO8K6OylMa3lLGBNEEeFZ-oXiKC0,4070
116
+ npcsh-1.1.9.data/data/npcsh/npc_team/wander.jinx,sha256=Svc6zjmoXr4BbDg5SN4DB1Byhh75AmIeAItcJCBIlcc,3513
117
+ npcsh-1.1.9.data/data/npcsh/npc_team/yap.jinx,sha256=eaI665zjaLH2FUwHoO3iC1Uzo9bGA-a1UMtBRBTEHC0,898
118
+ npcsh-1.1.9.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
119
+ npcsh-1.1.9.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
120
+ npcsh-1.1.9.dist-info/METADATA,sha256=RpubZxgUGkUwN9UDP8vGdP8CdrDtZ_vFrmtY2jHF-xU,25804
121
+ npcsh-1.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
+ npcsh-1.1.9.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
123
+ npcsh-1.1.9.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
124
+ npcsh-1.1.9.dist-info/RECORD,,
@@ -1,28 +0,0 @@
1
- jinx_name: "corca"
2
- description: "Enter the Corca MCP-powered agentic shell. Usage: /corca [--mcp-server-path path]"
3
- inputs:
4
- - command: "/corca" # The full command string, e.g., "/corca --mcp-server-path /tmp/mcp"
5
- steps:
6
- - name: "enter_corca"
7
- engine: "python"
8
- code: |
9
- # Assume npcsh._state and enter_corca_mode are accessible in the environment
10
-
11
- from npcsh._state import initial_state, setup_shell
12
- from npcsh.corca import enter_corca_mode
13
-
14
-
15
- full_command_str = context.get('command')
16
- output_messages = context.get('messages', [])
17
-
18
- command_history, team, default_npc = setup_shell()
19
-
20
- result = enter_corca_mode(
21
- command=full_command_str,
22
- command_history=command_history,
23
- shell_state=initial_state,
24
- **context # Pass all context as kwargs to enter_corca_mode as it expects
25
- )
26
-
27
- context['output'] = result.get('output', 'Entered Corca mode.')
28
- context['messages'] = result.get('messages', output_messages)
File without changes