npcsh 1.1.22__py3-none-any.whl → 1.1.23__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 (172) hide show
  1. npcsh/_state.py +272 -120
  2. npcsh/benchmark/npcsh_agent.py +77 -240
  3. npcsh/benchmark/templates/install-npcsh.sh.j2 +12 -4
  4. npcsh/config.py +5 -2
  5. npcsh/npc_team/alicanto.npc +4 -8
  6. npcsh/npc_team/corca.npc +5 -11
  7. npcsh/npc_team/frederic.npc +4 -6
  8. npcsh/npc_team/guac.npc +4 -4
  9. npcsh/npc_team/jinxs/lib/core/delegate.jinx +1 -1
  10. npcsh/npc_team/jinxs/lib/core/edit_file.jinx +1 -1
  11. npcsh/npc_team/jinxs/lib/core/sh.jinx +1 -1
  12. npcsh/npc_team/jinxs/lib/core/skill.jinx +59 -0
  13. npcsh/npc_team/jinxs/lib/utils/help.jinx +194 -10
  14. npcsh/npc_team/jinxs/lib/utils/init.jinx +528 -37
  15. npcsh/npc_team/jinxs/lib/utils/jinxs.jinx +0 -1
  16. npcsh/npc_team/jinxs/lib/utils/serve.jinx +938 -21
  17. npcsh-1.1.22.data/data/npcsh/npc_team/config_tui.jinx → npcsh/npc_team/jinxs/modes/config.jinx +1 -1
  18. npcsh/npc_team/jinxs/modes/convene.jinx +76 -3
  19. npcsh/npc_team/jinxs/modes/crond.jinx +818 -0
  20. npcsh/npc_team/jinxs/modes/plonk.jinx +76 -14
  21. npcsh/npc_team/jinxs/modes/roll.jinx +368 -55
  22. npcsh/npc_team/jinxs/modes/skills.jinx +621 -0
  23. npcsh/npc_team/jinxs/modes/yap.jinx +504 -30
  24. npcsh/npc_team/jinxs/skills/code-review/SKILL.md +45 -0
  25. npcsh/npc_team/jinxs/skills/debugging/SKILL.md +44 -0
  26. npcsh/npc_team/jinxs/skills/git-workflow.jinx +44 -0
  27. npcsh/npc_team/kadiefa.npc +4 -5
  28. npcsh/npc_team/npcsh.ctx +16 -0
  29. npcsh/npc_team/plonk.npc +5 -9
  30. npcsh/npc_team/sibiji.npc +13 -5
  31. npcsh/npcsh.py +1 -0
  32. npcsh/routes.py +0 -4
  33. npcsh/yap.py +22 -4
  34. npcsh-1.1.23.data/data/npcsh/npc_team/SKILL.md +44 -0
  35. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/alicanto.npc +4 -8
  36. npcsh/npc_team/jinxs/modes/config_tui.jinx → npcsh-1.1.23.data/data/npcsh/npc_team/config.jinx +1 -1
  37. npcsh-1.1.23.data/data/npcsh/npc_team/convene.jinx +670 -0
  38. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/corca.npc +5 -11
  39. npcsh-1.1.23.data/data/npcsh/npc_team/crond.jinx +818 -0
  40. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/delegate.jinx +1 -1
  41. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/edit_file.jinx +1 -1
  42. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/frederic.npc +4 -6
  43. npcsh-1.1.23.data/data/npcsh/npc_team/git-workflow.jinx +44 -0
  44. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/guac.npc +4 -4
  45. npcsh-1.1.23.data/data/npcsh/npc_team/help.jinx +236 -0
  46. npcsh-1.1.23.data/data/npcsh/npc_team/init.jinx +532 -0
  47. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/jinxs.jinx +0 -1
  48. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/kadiefa.npc +4 -5
  49. npcsh-1.1.23.data/data/npcsh/npc_team/npcsh.ctx +34 -0
  50. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/plonk.jinx +76 -14
  51. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/plonk.npc +5 -9
  52. npcsh-1.1.23.data/data/npcsh/npc_team/roll.jinx +378 -0
  53. npcsh-1.1.23.data/data/npcsh/npc_team/serve.jinx +943 -0
  54. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sh.jinx +1 -1
  55. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sibiji.npc +13 -5
  56. npcsh-1.1.23.data/data/npcsh/npc_team/skill.jinx +59 -0
  57. npcsh-1.1.23.data/data/npcsh/npc_team/skills.jinx +621 -0
  58. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/yap.jinx +504 -30
  59. {npcsh-1.1.22.dist-info → npcsh-1.1.23.dist-info}/METADATA +168 -7
  60. npcsh-1.1.23.dist-info/RECORD +216 -0
  61. npcsh/npc_team/jinxs/incognide/add_tab.jinx +0 -11
  62. npcsh/npc_team/jinxs/incognide/close_pane.jinx +0 -9
  63. npcsh/npc_team/jinxs/incognide/close_tab.jinx +0 -10
  64. npcsh/npc_team/jinxs/incognide/confirm.jinx +0 -10
  65. npcsh/npc_team/jinxs/incognide/focus_pane.jinx +0 -9
  66. npcsh/npc_team/jinxs/incognide/list_panes.jinx +0 -8
  67. npcsh/npc_team/jinxs/incognide/navigate.jinx +0 -10
  68. npcsh/npc_team/jinxs/incognide/notify.jinx +0 -10
  69. npcsh/npc_team/jinxs/incognide/open_pane.jinx +0 -13
  70. npcsh/npc_team/jinxs/incognide/read_pane.jinx +0 -9
  71. npcsh/npc_team/jinxs/incognide/run_terminal.jinx +0 -10
  72. npcsh/npc_team/jinxs/incognide/send_message.jinx +0 -10
  73. npcsh/npc_team/jinxs/incognide/split_pane.jinx +0 -12
  74. npcsh/npc_team/jinxs/incognide/switch_npc.jinx +0 -10
  75. npcsh/npc_team/jinxs/incognide/switch_tab.jinx +0 -10
  76. npcsh/npc_team/jinxs/incognide/write_file.jinx +0 -11
  77. npcsh/npc_team/jinxs/incognide/zen_mode.jinx +0 -9
  78. npcsh/npc_team/jinxs/lib/core/convene.jinx +0 -232
  79. npcsh-1.1.22.data/data/npcsh/npc_team/add_tab.jinx +0 -11
  80. npcsh-1.1.22.data/data/npcsh/npc_team/close_pane.jinx +0 -9
  81. npcsh-1.1.22.data/data/npcsh/npc_team/close_tab.jinx +0 -10
  82. npcsh-1.1.22.data/data/npcsh/npc_team/confirm.jinx +0 -10
  83. npcsh-1.1.22.data/data/npcsh/npc_team/convene.jinx +0 -232
  84. npcsh-1.1.22.data/data/npcsh/npc_team/focus_pane.jinx +0 -9
  85. npcsh-1.1.22.data/data/npcsh/npc_team/help.jinx +0 -52
  86. npcsh-1.1.22.data/data/npcsh/npc_team/init.jinx +0 -41
  87. npcsh-1.1.22.data/data/npcsh/npc_team/list_panes.jinx +0 -8
  88. npcsh-1.1.22.data/data/npcsh/npc_team/navigate.jinx +0 -10
  89. npcsh-1.1.22.data/data/npcsh/npc_team/notify.jinx +0 -10
  90. npcsh-1.1.22.data/data/npcsh/npc_team/npcsh.ctx +0 -18
  91. npcsh-1.1.22.data/data/npcsh/npc_team/open_pane.jinx +0 -13
  92. npcsh-1.1.22.data/data/npcsh/npc_team/read_pane.jinx +0 -9
  93. npcsh-1.1.22.data/data/npcsh/npc_team/roll.jinx +0 -65
  94. npcsh-1.1.22.data/data/npcsh/npc_team/run_terminal.jinx +0 -10
  95. npcsh-1.1.22.data/data/npcsh/npc_team/send_message.jinx +0 -10
  96. npcsh-1.1.22.data/data/npcsh/npc_team/serve.jinx +0 -26
  97. npcsh-1.1.22.data/data/npcsh/npc_team/split_pane.jinx +0 -12
  98. npcsh-1.1.22.data/data/npcsh/npc_team/switch_npc.jinx +0 -10
  99. npcsh-1.1.22.data/data/npcsh/npc_team/switch_tab.jinx +0 -10
  100. npcsh-1.1.22.data/data/npcsh/npc_team/write_file.jinx +0 -11
  101. npcsh-1.1.22.data/data/npcsh/npc_team/zen_mode.jinx +0 -9
  102. npcsh-1.1.22.dist-info/RECORD +0 -240
  103. /npcsh/npc_team/jinxs/{incognide → lib/utils}/incognide.jinx +0 -0
  104. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/alicanto.jinx +0 -0
  105. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/alicanto.png +0 -0
  106. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/arxiv.jinx +0 -0
  107. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/benchmark.jinx +0 -0
  108. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/browser_action.jinx +0 -0
  109. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/browser_screenshot.jinx +0 -0
  110. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/build.jinx +0 -0
  111. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/chat.jinx +0 -0
  112. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/click.jinx +0 -0
  113. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/close_browser.jinx +0 -0
  114. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/cmd.jinx +0 -0
  115. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/compile.jinx +0 -0
  116. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/compress.jinx +0 -0
  117. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/corca.jinx +0 -0
  118. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/corca.png +0 -0
  119. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/corca_example.png +0 -0
  120. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/db_search.jinx +0 -0
  121. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/file_search.jinx +0 -0
  122. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/frederic4.png +0 -0
  123. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/git.jinx +0 -0
  124. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/guac.jinx +0 -0
  125. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/guac.png +0 -0
  126. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/incognide.jinx +0 -0
  127. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/kadiefa.png +0 -0
  128. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/key_press.jinx +0 -0
  129. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/kg.jinx +0 -0
  130. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/launch_app.jinx +0 -0
  131. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/load_file.jinx +0 -0
  132. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/memories.jinx +0 -0
  133. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/models.jinx +0 -0
  134. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
  135. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/nql.jinx +0 -0
  136. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/open_browser.jinx +0 -0
  137. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/ots.jinx +0 -0
  138. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/papers.jinx +0 -0
  139. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/paste.jinx +0 -0
  140. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/plonk.png +0 -0
  141. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/plonkjr.png +0 -0
  142. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/pti.jinx +0 -0
  143. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/python.jinx +0 -0
  144. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/reattach.jinx +0 -0
  145. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sample.jinx +0 -0
  146. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/screenshot.jinx +0 -0
  147. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/set.jinx +0 -0
  148. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/setup.jinx +0 -0
  149. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/shh.jinx +0 -0
  150. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sibiji.png +0 -0
  151. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sleep.jinx +0 -0
  152. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/spool.jinx +0 -0
  153. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/spool.png +0 -0
  154. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sql.jinx +0 -0
  155. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/switch.jinx +0 -0
  156. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/switches.jinx +0 -0
  157. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/sync.jinx +0 -0
  158. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/team.jinx +0 -0
  159. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/teamviz.jinx +0 -0
  160. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/trigger.jinx +0 -0
  161. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/type_text.jinx +0 -0
  162. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/usage.jinx +0 -0
  163. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/verbose.jinx +0 -0
  164. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/vixynt.jinx +0 -0
  165. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/wait.jinx +0 -0
  166. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/wander.jinx +0 -0
  167. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/web_search.jinx +0 -0
  168. {npcsh-1.1.22.data → npcsh-1.1.23.data}/data/npcsh/npc_team/yap.png +0 -0
  169. {npcsh-1.1.22.dist-info → npcsh-1.1.23.dist-info}/WHEEL +0 -0
  170. {npcsh-1.1.22.dist-info → npcsh-1.1.23.dist-info}/entry_points.txt +0 -0
  171. {npcsh-1.1.22.dist-info → npcsh-1.1.23.dist-info}/licenses/LICENSE +0 -0
  172. {npcsh-1.1.22.dist-info → npcsh-1.1.23.dist-info}/top_level.txt +0 -0
@@ -7,34 +7,218 @@ steps:
7
7
  engine: python
8
8
  code: |
9
9
  import json
10
+ import random
10
11
  from npcsh._state import CANONICAL_ARGS, get_argument_help
11
-
12
+
13
+ USAGE_EXAMPLES = [
14
+ # ── Basic chat & modes ──
15
+ "what is the capital of France?",
16
+ "explain quantum entanglement in simple terms",
17
+ "summarize this paragraph: <paste text>",
18
+ "translate 'hello world' to Japanese",
19
+ "/chat # switch to chat mode for back-and-forth conversation",
20
+ "/agent # switch to agent mode (default, with tool use)",
21
+ "/cmd # switch to command mode for direct shell interaction",
22
+ "compare Python and Rust for CLI tools",
23
+ "what are the SOLID principles?",
24
+ "explain the difference between threads and processes",
25
+ # ── Delegation with @npc ──
26
+ "@sibiji plan out a REST API for a todo app",
27
+ "@corca refactor this function to use async/await",
28
+ "@guac analyze this CSV and plot the trend",
29
+ "@plonk take a screenshot and describe what you see",
30
+ "@kadiefa review my git diff for security issues",
31
+ "@sibiji what NPCs are on this team and what do they do?",
32
+ "@guac run a quick linear regression on sales.csv",
33
+ "@corca write unit tests for the auth module",
34
+ "@plonk click the submit button on the form",
35
+ "@sibiji delegate a code review to the best NPC for the job",
36
+ # ── Pipelines ──
37
+ "list all python files | summarize what each one does",
38
+ "git diff | review this for bugs",
39
+ "cat README.md | rewrite this for a technical audience",
40
+ "ls -la | explain these file permissions",
41
+ "git log --oneline -20 | summarize recent changes",
42
+ "df -h | which disk is running low?",
43
+ "ps aux | find memory-heavy processes",
44
+ "cat requirements.txt | are there any outdated packages?",
45
+ "history | what have I been working on today?",
46
+ "env | which API keys are set?",
47
+ # ── Shell / system commands ──
48
+ "list all files in the current directory",
49
+ "find all TODO comments in this project",
50
+ "how much disk space is free?",
51
+ "what process is using port 8080?",
52
+ "create a new directory called 'experiments'",
53
+ "show me the last 50 lines of app.log",
54
+ "count lines of code in this project by language",
55
+ "check if docker is running",
56
+ "what's my current git branch?",
57
+ "show system memory usage",
58
+ # ── Code generation & editing ──
59
+ "write a Python script that downloads a webpage and extracts all links",
60
+ "create a bash script to back up my home directory",
61
+ "write a Dockerfile for a Flask app",
62
+ "generate a .gitignore for a Node.js project",
63
+ "write a regex to validate email addresses",
64
+ "create a Makefile for this C project",
65
+ "write a GitHub Actions workflow for CI",
66
+ "scaffold a FastAPI app with SQLAlchemy",
67
+ "write a Python decorator that retries on failure",
68
+ "create a shell script that monitors CPU usage",
69
+ # ── Slash commands: research & papers ──
70
+ "/arxiv search for recent papers on LLM agents",
71
+ "/papers analyze the methodology in this PDF",
72
+ "/alicanto deep-dive into transformer attention mechanisms",
73
+ "/arxiv find papers about retrieval augmented generation",
74
+ "/papers compare these two papers on reinforcement learning",
75
+ "/alicanto investigate multi-agent coordination strategies",
76
+ "/arxiv latest papers on code generation with LLMs",
77
+ "/papers summarize key findings from this conference proceedings",
78
+ "/alicanto explore the landscape of AI safety research",
79
+ "/arxiv search for graph neural network applications in biology",
80
+ # ── Slash commands: interactive modes ──
81
+ "/guac # open interactive Python REPL with data tools",
82
+ "/wander # creative exploration and brainstorming mode",
83
+ "/convene # multi-NPC discussion on a topic",
84
+ "/plonk # vision-based GUI automation",
85
+ "/git # interactive git TUI for staging, diffs, commits",
86
+ "/spool # isolated chat session with specific model",
87
+ "/pti # reasoning REPL with interruptions",
88
+ "/yap # voice-controlled agent loop",
89
+ "/vixynt # image generation and editing",
90
+ "/roll # video generation studio",
91
+ "/crond # system task manager (cron, daemons, processes)",
92
+ # ── Slash commands: data & knowledge ──
93
+ "/kg # browse the knowledge graph",
94
+ "/memories # manage stored memories",
95
+ "/nql # interactive database viewer",
96
+ "/sql SELECT * FROM messages LIMIT 10",
97
+ "/db_search find entries about authentication",
98
+ "/file_search *.py # search for Python files",
99
+ "/web_search latest news on AI regulation",
100
+ "/kg # explore facts, concepts, and relationships",
101
+ "/memories # review and approve pending memories",
102
+ "/nql # query and browse your conversation data",
103
+ # ── Slash commands: config & management ──
104
+ "/set model=claude-3-5-sonnet # change the active model",
105
+ "/set provider=openai # switch provider",
106
+ "/set mode=chat # change default mode",
107
+ "/models # list available models",
108
+ "/jinxs # list available jinxs",
109
+ "/team # manage your NPC team",
110
+ "/reattach # rejoin a previous conversation",
111
+ "/usage # check token usage and costs",
112
+ "/verbose # enable verbose output",
113
+ "/shh # quiet mode, less output",
114
+ # ── Browser & computer use ──
115
+ "/open_browser https://example.com",
116
+ "/browser_screenshot # capture the current browser page",
117
+ "/browser_action click the login button",
118
+ "/screenshot # take a screenshot of the desktop",
119
+ "/click 500 300 # click at screen coordinates",
120
+ "/type_text Hello World # type text into focused app",
121
+ "/key_press enter # press a key",
122
+ "/launch_app Terminal",
123
+ "/open_browser https://github.com # open a URL",
124
+ "/browser_action scroll down and find the pricing section",
125
+ # ── File operations ──
126
+ "/load_file data.csv # load a file into context",
127
+ "/edit_file app.py # edit a file with AI assistance",
128
+ "/compress output.tar.gz src/ # compress files",
129
+ "/write_file notes.md # write content to a file",
130
+ "read config.yaml and explain each setting",
131
+ "compare these two files and list the differences",
132
+ "refactor utils.py to use dataclasses instead of dicts",
133
+ "add type hints to all functions in this file",
134
+ "find and fix the bug in parser.py",
135
+ "add error handling to the database connection code",
136
+ # ── Building & deployment ──
137
+ "/build # interactive build TUI",
138
+ "/compile # compile NPC profiles",
139
+ "/serve # server dashboard TUI (start, stop, logs, endpoints)",
140
+ "/init # initialize a new NPC project",
141
+ "/setup # run setup wizard",
142
+ "/config # open configuration interface",
143
+ "/corca # MCP-powered development agent",
144
+ "/build # create deployment artifacts from your team",
145
+ "/compile sibiji # compile a specific NPC profile",
146
+ "/sync # synchronize team data",
147
+ # ── Conversation management ──
148
+ "/reattach # browse and rejoin previous conversations",
149
+ "/set conversation_id=abc123 # switch to a specific conversation",
150
+ "/clear # clear the screen",
151
+ "/exit # quit npcsh",
152
+ "/help arxiv # get detailed help on a specific command",
153
+ "/reattach # pick up where you left off in a prior session",
154
+ "/spool -m gpt-4o # isolated chat with a specific model",
155
+ "/convene discuss the pros and cons of microservices",
156
+ "/wander # let the AI explore ideas freely",
157
+ "/team # see and manage your NPC team members",
158
+ # ── Multi-step workflows ──
159
+ "analyze my codebase and suggest improvements",
160
+ "read all test files and identify gaps in coverage",
161
+ "review the git history and summarize what changed this week",
162
+ "find all API endpoints and document them",
163
+ "scan for security vulnerabilities in this project",
164
+ "profile this Python script and suggest optimizations",
165
+ "generate a changelog from the last 20 commits",
166
+ "create a project README based on the codebase",
167
+ "audit package.json for known CVEs",
168
+ "explain the architecture of this project to a new developer",
169
+ # ── Fun & creative ──
170
+ "write a haiku about programming",
171
+ "tell me a programming joke",
172
+ "explain recursion like I'm five",
173
+ "write a commit message for: fixed the thing that was broken",
174
+ "roast my code (paste code)",
175
+ "explain this error message: (paste error)",
176
+ "what's the most Pythonic way to flatten a nested list?",
177
+ "write ASCII art of a robot",
178
+ "create a fun loading message for a CLI tool",
179
+ "design a color scheme for a terminal app",
180
+ ]
181
+
12
182
  topic = context.get('topic')
13
-
183
+
14
184
  if not topic:
15
- output_lines = ["# Available Commands\n\n"]
16
-
185
+ output_lines = ["# npcsh - Available Commands\n\n"]
186
+
187
+ output_lines.append("## Quick Start\n\n")
188
+ output_lines.append("- Type naturally to talk to your NPC\n")
189
+ output_lines.append("- Use `/command` for slash commands\n")
190
+ output_lines.append("- Use `@npc_name` to delegate to a specific NPC\n")
191
+ output_lines.append("- Use `|` to pipe output between stages\n")
192
+ output_lines.append("- Use `/reattach` to rejoin a previous conversation\n")
193
+ output_lines.append("- Press **Tab** to autocomplete commands and NPC names\n\n")
194
+
17
195
  all_jinxs = {}
18
196
  if hasattr(npc, 'team') and npc.team and hasattr(npc.team, 'jinxs_dict'):
19
197
  all_jinxs.update(npc.team.jinxs_dict)
20
198
  if hasattr(npc, 'jinxs_dict') and npc.jinxs_dict:
21
199
  all_jinxs.update(npc.jinxs_dict)
22
-
200
+
23
201
  for cmd in sorted(all_jinxs.keys()):
24
202
  jinx_obj = all_jinxs[cmd]
25
203
  desc = getattr(jinx_obj, 'description', 'No description')
26
204
  output_lines.append(f"/{cmd} - {desc}\n\n")
27
-
205
+
28
206
  arg_help_map = get_argument_help()
29
207
  if arg_help_map:
30
208
  output_lines.append("## Common Command-Line Flags\n\n")
31
209
  output_lines.append("The shortest unambiguous prefix works.\n")
32
-
210
+
33
211
  for arg in sorted(CANONICAL_ARGS):
34
212
  aliases = arg_help_map.get(arg, [])
35
213
  alias_str = f"(-{min(aliases, key=len)})" if aliases else ""
36
214
  output_lines.append(f"--{arg:<20} {alias_str}\n")
37
-
215
+
216
+ output_lines.append("\n## Things to Try\n\n")
217
+ samples = random.sample(USAGE_EXAMPLES, min(3, len(USAGE_EXAMPLES)))
218
+ for i, example in enumerate(samples, 1):
219
+ output_lines.append(f"{i}. `{example}`\n")
220
+ output_lines.append(f"\n*Showing 3 of {len(USAGE_EXAMPLES)} examples — run `/help` again to see more.*\n")
221
+
38
222
  output = "".join(output_lines)
39
223
  else:
40
224
  jinx_obj = None
@@ -42,11 +226,11 @@ steps:
42
226
  jinx_obj = npc.team.jinxs_dict.get(topic)
43
227
  if not jinx_obj and hasattr(npc, 'jinxs_dict'):
44
228
  jinx_obj = npc.jinxs_dict.get(topic)
45
-
229
+
46
230
  if jinx_obj:
47
231
  output = f"## Help for Jinx: `/{topic}`\n\n"
48
232
  output += f"- **Description**: {jinx_obj.description}\n"
49
233
  if hasattr(jinx_obj, 'inputs') and jinx_obj.inputs:
50
234
  output += f"- **Inputs**: {json.dumps(jinx_obj.inputs, indent=2)}\n"
51
235
  else:
52
- output = f"No help topic found for `{topic}`."
236
+ output = f"No help topic found for `{topic}`."