@qqbrowser/openclaw-qbot 0.0.106 โ†’ 0.0.107

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 (101) hide show
  1. package/package.json +1 -1
  2. package/preset-config.json +2 -2
  3. package/skills/srt-sandbox/SKILL.md +126 -0
  4. package/extensions/acpx/skills/acp-router/SKILL.md +0 -219
  5. package/extensions/diffs/skills/diffs/SKILL.md +0 -22
  6. package/extensions/lobster/SKILL.md +0 -97
  7. package/extensions/open-prose/skills/prose/LICENSE +0 -21
  8. package/extensions/open-prose/skills/prose/SKILL.md +0 -323
  9. package/extensions/open-prose/skills/prose/alt-borges.md +0 -141
  10. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -358
  11. package/extensions/open-prose/skills/prose/alts/borges.md +0 -360
  12. package/extensions/open-prose/skills/prose/alts/folk.md +0 -322
  13. package/extensions/open-prose/skills/prose/alts/homer.md +0 -346
  14. package/extensions/open-prose/skills/prose/alts/kafka.md +0 -373
  15. package/extensions/open-prose/skills/prose/compiler.md +0 -2971
  16. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -4
  17. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -6
  18. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -17
  19. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -14
  20. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -20
  21. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -17
  22. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -20
  23. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -20
  24. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -25
  25. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -32
  26. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -27
  27. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -43
  28. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -51
  29. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -48
  30. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -23
  31. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -19
  32. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -19
  33. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -36
  34. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -71
  35. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -20
  36. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -35
  37. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -51
  38. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -63
  39. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -86
  40. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -114
  41. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -100
  42. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -105
  43. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -37
  44. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -1572
  45. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -218
  46. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -42
  47. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -145
  48. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -168
  49. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -204
  50. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -296
  51. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -237
  52. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -1474
  53. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -455
  54. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -277
  55. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -32
  56. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -38
  57. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -46
  58. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -50
  59. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -261
  60. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -159
  61. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -637
  62. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -148
  63. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -225
  64. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -356
  65. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -445
  66. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -210
  67. package/extensions/open-prose/skills/prose/examples/README.md +0 -391
  68. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -22
  69. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -20
  70. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -18
  71. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -17
  72. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -223
  73. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -951
  74. package/extensions/open-prose/skills/prose/guidance/patterns.md +0 -700
  75. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -180
  76. package/extensions/open-prose/skills/prose/help.md +0 -144
  77. package/extensions/open-prose/skills/prose/lib/README.md +0 -108
  78. package/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -215
  79. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -174
  80. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -250
  81. package/extensions/open-prose/skills/prose/lib/inspector.prose +0 -196
  82. package/extensions/open-prose/skills/prose/lib/profiler.prose +0 -460
  83. package/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -275
  84. package/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -118
  85. package/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -93
  86. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -243
  87. package/extensions/open-prose/skills/prose/primitives/session.md +0 -593
  88. package/extensions/open-prose/skills/prose/prose.md +0 -1237
  89. package/extensions/open-prose/skills/prose/state/filesystem.md +0 -498
  90. package/extensions/open-prose/skills/prose/state/in-context.md +0 -384
  91. package/extensions/open-prose/skills/prose/state/postgres.md +0 -880
  92. package/extensions/open-prose/skills/prose/state/sqlite.md +0 -574
  93. package/skills/model-usage/SKILL.md +0 -69
  94. package/skills/model-usage/references/codexbar-cli.md +0 -33
  95. package/skills/model-usage/scripts/model_usage.py +0 -320
  96. package/skills/model-usage/scripts/test_model_usage.py +0 -40
  97. package/skills/study-habits/SKILL.md +0 -72
  98. package/skills/study-habits/_meta.json +0 -6
  99. package/skills/xiaohongshu-mcp/SKILL.md +0 -95
  100. package/skills/xiaohongshu-mcp/_meta.json +0 -6
  101. package/skills/xiaohongshu-mcp/scripts/xhs_client.py +0 -264
@@ -1,264 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Xiaohongshu MCP Client - A Python client for xiaohongshu-mcp HTTP API.
4
-
5
- Usage:
6
- python xhs_client.py <command> [options]
7
-
8
- Commands:
9
- status Check login status
10
- search <keyword> Search notes by keyword
11
- detail <feed_id> <xsec_token> Get note details
12
- feeds Get recommended feed list
13
- publish <title> <content> <images> Publish a note
14
-
15
- Examples:
16
- python xhs_client.py status
17
- python xhs_client.py search "ๅ’–ๅ•กๆŽจ่"
18
- python xhs_client.py detail "abc123" "token456"
19
- python xhs_client.py feeds
20
- """
21
-
22
- import argparse
23
- import json
24
- import sys
25
- import requests
26
-
27
- BASE_URL = "http://localhost:18060"
28
- TIMEOUT = 60
29
-
30
-
31
- def check_status():
32
- """Check login status."""
33
- try:
34
- resp = requests.get(f"{BASE_URL}/api/v1/login/status", timeout=TIMEOUT)
35
- data = resp.json()
36
- if data.get("success"):
37
- login_info = data.get("data", {})
38
- if login_info.get("is_logged_in"):
39
- print(f"โœ… Logged in as: {login_info.get('username', 'Unknown')}")
40
- else:
41
- print("โŒ Not logged in. Please run the login tool first.")
42
- else:
43
- print(f"โŒ Error: {data.get('error', 'Unknown error')}")
44
- return data
45
- except requests.exceptions.ConnectionError:
46
- print("โŒ Cannot connect to MCP server. Make sure xiaohongshu-mcp is running on localhost:18060")
47
- sys.exit(1)
48
-
49
-
50
- def search_notes(keyword, sort_by="็ปผๅˆ", note_type="ไธ้™", publish_time="ไธ้™"):
51
- """Search notes by keyword with optional filters."""
52
- try:
53
- payload = {
54
- "keyword": keyword,
55
- "filters": {
56
- "sort_by": sort_by,
57
- "note_type": note_type,
58
- "publish_time": publish_time
59
- }
60
- }
61
- resp = requests.post(
62
- f"{BASE_URL}/api/v1/feeds/search",
63
- json=payload,
64
- timeout=TIMEOUT
65
- )
66
- data = resp.json()
67
-
68
- if data.get("success"):
69
- feeds = data.get("data", {}).get("feeds", [])
70
- print(f"๐Ÿ” Found {len(feeds)} notes for '{keyword}':\n")
71
-
72
- for i, feed in enumerate(feeds, 1):
73
- note_card = feed.get("noteCard", {})
74
- user = note_card.get("user", {})
75
- interact = note_card.get("interactInfo", {})
76
-
77
- print(f"[{i}] {note_card.get('displayTitle', 'No title')}")
78
- print(f" Author: {user.get('nickname', 'Unknown')}")
79
- print(f" Likes: {interact.get('likedCount', '0')} | Collects: {interact.get('collectedCount', '0')} | Comments: {interact.get('commentCount', '0')}")
80
- print(f" feed_id: {feed.get('id')}")
81
- print(f" xsec_token: {feed.get('xsecToken')}")
82
- print()
83
- else:
84
- print(f"โŒ Search failed: {data.get('error', 'Unknown error')}")
85
-
86
- return data
87
- except requests.exceptions.ConnectionError:
88
- print("โŒ Cannot connect to MCP server.")
89
- sys.exit(1)
90
-
91
-
92
- def get_note_detail(feed_id, xsec_token, load_comments=False):
93
- """Get detailed information about a specific note."""
94
- try:
95
- payload = {
96
- "feed_id": feed_id,
97
- "xsec_token": xsec_token,
98
- "load_all_comments": load_comments
99
- }
100
- resp = requests.post(
101
- f"{BASE_URL}/api/v1/feeds/detail",
102
- json=payload,
103
- timeout=TIMEOUT
104
- )
105
- data = resp.json()
106
-
107
- if data.get("success"):
108
- note_data = data.get("data", {}).get("data", {})
109
- note = note_data.get("note", {})
110
- comments = note_data.get("comments", {})
111
-
112
- print(f"๐Ÿ“ Note Details:\n")
113
- print(f"Title: {note.get('title', 'No title')}")
114
- print(f"Author: {note.get('user', {}).get('nickname', 'Unknown')}")
115
- print(f"Location: {note.get('ipLocation', 'Unknown')}")
116
- print(f"\nContent:\n{note.get('desc', 'No content')}\n")
117
-
118
- interact = note.get("interactInfo", {})
119
- print(f"Likes: {interact.get('likedCount', '0')} | Collects: {interact.get('collectedCount', '0')} | Comments: {interact.get('commentCount', '0')}")
120
-
121
- comment_list = comments.get("list", [])
122
- if comment_list:
123
- print(f"\n๐Ÿ’ฌ Top Comments ({len(comment_list)}):")
124
- for c in comment_list[:5]:
125
- user_info = c.get("userInfo", {})
126
- print(f" - {user_info.get('nickname', 'Anonymous')}: {c.get('content', '')}")
127
- else:
128
- print(f"โŒ Failed to get details: {data.get('error', 'Unknown error')}")
129
-
130
- return data
131
- except requests.exceptions.ConnectionError:
132
- print("โŒ Cannot connect to MCP server.")
133
- sys.exit(1)
134
-
135
-
136
- def get_feeds():
137
- """Get recommended feed list."""
138
- try:
139
- resp = requests.get(f"{BASE_URL}/api/v1/feeds/list", timeout=TIMEOUT)
140
- data = resp.json()
141
-
142
- if data.get("success"):
143
- feeds = data.get("data", {}).get("feeds", [])
144
- print(f"๐Ÿ“‹ Recommended Feeds ({len(feeds)} notes):\n")
145
-
146
- for i, feed in enumerate(feeds, 1):
147
- note_card = feed.get("noteCard", {})
148
- user = note_card.get("user", {})
149
- interact = note_card.get("interactInfo", {})
150
-
151
- print(f"[{i}] {note_card.get('displayTitle', 'No title')}")
152
- print(f" Author: {user.get('nickname', 'Unknown')}")
153
- print(f" Likes: {interact.get('likedCount', '0')}")
154
- print()
155
- else:
156
- print(f"โŒ Failed to get feeds: {data.get('error', 'Unknown error')}")
157
-
158
- return data
159
- except requests.exceptions.ConnectionError:
160
- print("โŒ Cannot connect to MCP server.")
161
- sys.exit(1)
162
-
163
-
164
- def publish_note(title, content, images, tags=None):
165
- """Publish a new note."""
166
- try:
167
- payload = {
168
- "title": title,
169
- "content": content,
170
- "images": images if isinstance(images, list) else [images]
171
- }
172
- if tags:
173
- payload["tags"] = tags if isinstance(tags, list) else [tags]
174
-
175
- resp = requests.post(
176
- f"{BASE_URL}/api/v1/publish",
177
- json=payload,
178
- timeout=120
179
- )
180
- data = resp.json()
181
-
182
- if data.get("success"):
183
- print(f"โœ… Note published successfully!")
184
- print(f" Post ID: {data.get('data', {}).get('post_id', 'Unknown')}")
185
- else:
186
- print(f"โŒ Publish failed: {data.get('error', 'Unknown error')}")
187
-
188
- return data
189
- except requests.exceptions.ConnectionError:
190
- print("โŒ Cannot connect to MCP server.")
191
- sys.exit(1)
192
-
193
-
194
- def main():
195
- parser = argparse.ArgumentParser(
196
- description="Xiaohongshu MCP Client",
197
- formatter_class=argparse.RawDescriptionHelpFormatter,
198
- epilog=__doc__
199
- )
200
- subparsers = parser.add_subparsers(dest="command", help="Available commands")
201
-
202
- # status command
203
- subparsers.add_parser("status", help="Check login status")
204
-
205
- # search command
206
- search_parser = subparsers.add_parser("search", help="Search notes")
207
- search_parser.add_argument("keyword", help="Search keyword")
208
- search_parser.add_argument("--sort", default="็ปผๅˆ",
209
- choices=["็ปผๅˆ", "ๆœ€ๆ–ฐ", "ๆœ€ๅคš็‚น่ตž", "ๆœ€ๅคš่ฏ„่ฎบ", "ๆœ€ๅคšๆ”ถ่—"],
210
- help="Sort by")
211
- search_parser.add_argument("--type", default="ไธ้™",
212
- choices=["ไธ้™", "่ง†้ข‘", "ๅ›พๆ–‡"],
213
- help="Note type")
214
- search_parser.add_argument("--time", default="ไธ้™",
215
- choices=["ไธ้™", "ไธ€ๅคฉๅ†…", "ไธ€ๅ‘จๅ†…", "ๅŠๅนดๅ†…"],
216
- help="Publish time")
217
- search_parser.add_argument("--json", action="store_true", help="Output raw JSON")
218
-
219
- # detail command
220
- detail_parser = subparsers.add_parser("detail", help="Get note details")
221
- detail_parser.add_argument("feed_id", help="Feed ID")
222
- detail_parser.add_argument("xsec_token", help="Security token")
223
- detail_parser.add_argument("--comments", action="store_true", help="Load all comments")
224
- detail_parser.add_argument("--json", action="store_true", help="Output raw JSON")
225
-
226
- # feeds command
227
- feeds_parser = subparsers.add_parser("feeds", help="Get recommended feeds")
228
- feeds_parser.add_argument("--json", action="store_true", help="Output raw JSON")
229
-
230
- # publish command
231
- publish_parser = subparsers.add_parser("publish", help="Publish a note")
232
- publish_parser.add_argument("title", help="Note title")
233
- publish_parser.add_argument("content", help="Note content")
234
- publish_parser.add_argument("images", help="Image URLs (comma-separated)")
235
- publish_parser.add_argument("--tags", help="Tags (comma-separated)")
236
-
237
- args = parser.parse_args()
238
-
239
- if not args.command:
240
- parser.print_help()
241
- sys.exit(1)
242
-
243
- if args.command == "status":
244
- result = check_status()
245
- elif args.command == "search":
246
- result = search_notes(args.keyword, args.sort, args.type, args.time)
247
- if hasattr(args, 'json') and args.json:
248
- print(json.dumps(result, ensure_ascii=False, indent=2))
249
- elif args.command == "detail":
250
- result = get_note_detail(args.feed_id, args.xsec_token, args.comments)
251
- if hasattr(args, 'json') and args.json:
252
- print(json.dumps(result, ensure_ascii=False, indent=2))
253
- elif args.command == "feeds":
254
- result = get_feeds()
255
- if hasattr(args, 'json') and args.json:
256
- print(json.dumps(result, ensure_ascii=False, indent=2))
257
- elif args.command == "publish":
258
- images = args.images.split(",")
259
- tags = args.tags.split(",") if args.tags else None
260
- result = publish_note(args.title, args.content, images, tags)
261
-
262
-
263
- if __name__ == "__main__":
264
- main()