@huajiwuyan/hello 3.0.0

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 (117) hide show
  1. package/README.md +68 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +448 -0
  4. package/package.json +38 -0
  5. package/templates/claude/commands/hello.md +760 -0
  6. package/templates/claude/skills/SKILL.md +90 -0
  7. package/templates/claude/skills/SKILL.toml +7 -0
  8. package/templates/claude/skills/assets/icon-large.svg +12 -0
  9. package/templates/claude/skills/assets/icon-small-400px.svg +12 -0
  10. package/templates/claude/skills/assets/templates/CHANGELOG.md +24 -0
  11. package/templates/claude/skills/assets/templates/CHANGELOG_{YYYY}.md +25 -0
  12. package/templates/claude/skills/assets/templates/INDEX.md +36 -0
  13. package/templates/claude/skills/assets/templates/archive/_index.md +22 -0
  14. package/templates/claude/skills/assets/templates/context.md +82 -0
  15. package/templates/claude/skills/assets/templates/modules/_index.md +22 -0
  16. package/templates/claude/skills/assets/templates/modules/module.md +35 -0
  17. package/templates/claude/skills/assets/templates/plan/proposal.md +104 -0
  18. package/templates/claude/skills/assets/templates/plan/tasks.md +49 -0
  19. package/templates/claude/skills/references/functions/auto.md +217 -0
  20. package/templates/claude/skills/references/functions/clean.md +167 -0
  21. package/templates/claude/skills/references/functions/commit.md +374 -0
  22. package/templates/claude/skills/references/functions/exec.md +178 -0
  23. package/templates/claude/skills/references/functions/help.md +105 -0
  24. package/templates/claude/skills/references/functions/init.md +228 -0
  25. package/templates/claude/skills/references/functions/plan.md +219 -0
  26. package/templates/claude/skills/references/functions/review.md +146 -0
  27. package/templates/claude/skills/references/functions/rollback.md +208 -0
  28. package/templates/claude/skills/references/functions/test.md +153 -0
  29. package/templates/claude/skills/references/functions/upgrade.md +371 -0
  30. package/templates/claude/skills/references/functions/validate.md +147 -0
  31. package/templates/claude/skills/references/rules/package.md +212 -0
  32. package/templates/claude/skills/references/rules/scaling.md +150 -0
  33. package/templates/claude/skills/references/rules/state.md +318 -0
  34. package/templates/claude/skills/references/rules/tools.md +371 -0
  35. package/templates/claude/skills/references/services/knowledge.md +408 -0
  36. package/templates/claude/skills/references/services/templates.md +344 -0
  37. package/templates/claude/skills/references/stages/analyze.md +201 -0
  38. package/templates/claude/skills/references/stages/design.md +379 -0
  39. package/templates/claude/skills/references/stages/develop.md +497 -0
  40. package/templates/claude/skills/references/stages/evaluate.md +286 -0
  41. package/templates/claude/skills/references/stages/tweak.md +244 -0
  42. package/templates/claude/skills/scripts/create_package.py +260 -0
  43. package/templates/claude/skills/scripts/list_packages.py +145 -0
  44. package/templates/claude/skills/scripts/migrate_package.py +399 -0
  45. package/templates/claude/skills/scripts/project_stats.py +438 -0
  46. package/templates/claude/skills/scripts/upgradewiki.py +321 -0
  47. package/templates/claude/skills/scripts/utils.py +596 -0
  48. package/templates/claude/skills/scripts/validate_package.py +309 -0
  49. package/templates/codex/prompts/hello.md +757 -0
  50. package/templates/codex/skills/SKILL.md +74 -0
  51. package/templates/codex/skills/SKILL.toml +7 -0
  52. package/templates/codex/skills/assets/icon-large.svg +12 -0
  53. package/templates/codex/skills/assets/icon-small-400px.svg +12 -0
  54. package/templates/codex/skills/assets/templates/CHANGELOG.md +24 -0
  55. package/templates/codex/skills/assets/templates/CHANGELOG_{YYYY}.md +25 -0
  56. package/templates/codex/skills/assets/templates/INDEX.md +36 -0
  57. package/templates/codex/skills/assets/templates/archive/_index.md +22 -0
  58. package/templates/codex/skills/assets/templates/context.md +82 -0
  59. package/templates/codex/skills/assets/templates/modules/_index.md +22 -0
  60. package/templates/codex/skills/assets/templates/modules/module.md +35 -0
  61. package/templates/codex/skills/assets/templates/plan/proposal.md +104 -0
  62. package/templates/codex/skills/assets/templates/plan/tasks.md +29 -0
  63. package/templates/codex/skills/references/functions/auto.md +181 -0
  64. package/templates/codex/skills/references/functions/brain.md +275 -0
  65. package/templates/codex/skills/references/functions/clean.md +154 -0
  66. package/templates/codex/skills/references/functions/commit.md +265 -0
  67. package/templates/codex/skills/references/functions/debug/condition-based-waiting.md +151 -0
  68. package/templates/codex/skills/references/functions/debug/defense-in-depth.md +147 -0
  69. package/templates/codex/skills/references/functions/debug/root-cause-tracing.md +168 -0
  70. package/templates/codex/skills/references/functions/debug.md +389 -0
  71. package/templates/codex/skills/references/functions/exec.md +153 -0
  72. package/templates/codex/skills/references/functions/help.md +101 -0
  73. package/templates/codex/skills/references/functions/init.md +221 -0
  74. package/templates/codex/skills/references/functions/plan.md +178 -0
  75. package/templates/codex/skills/references/functions/review.md +135 -0
  76. package/templates/codex/skills/references/functions/rlm.md +864 -0
  77. package/templates/codex/skills/references/functions/rollback.md +190 -0
  78. package/templates/codex/skills/references/functions/test.md +140 -0
  79. package/templates/codex/skills/references/functions/upgrade.md +363 -0
  80. package/templates/codex/skills/references/functions/validate.md +135 -0
  81. package/templates/codex/skills/references/rules/cache.md +136 -0
  82. package/templates/codex/skills/references/rules/scaling.md +124 -0
  83. package/templates/codex/skills/references/rules/state.md +201 -0
  84. package/templates/codex/skills/references/rules/tools.md +301 -0
  85. package/templates/codex/skills/references/services/attention.md +53 -0
  86. package/templates/codex/skills/references/services/knowledge.md +559 -0
  87. package/templates/codex/skills/references/services/package.md +383 -0
  88. package/templates/codex/skills/references/services/templates.md +390 -0
  89. package/templates/codex/skills/references/stages/analyze.md +191 -0
  90. package/templates/codex/skills/references/stages/design.md +355 -0
  91. package/templates/codex/skills/references/stages/develop.md +520 -0
  92. package/templates/codex/skills/references/stages/tweak.md +239 -0
  93. package/templates/codex/skills/rlm/__init__.py +39 -0
  94. package/templates/codex/skills/rlm/agent_orchestrator.py +422 -0
  95. package/templates/codex/skills/rlm/context_manager.py +366 -0
  96. package/templates/codex/skills/rlm/engine.py +915 -0
  97. package/templates/codex/skills/rlm/folding.py +391 -0
  98. package/templates/codex/skills/rlm/repl.py +452 -0
  99. package/templates/codex/skills/rlm/roles/analyzer.md +66 -0
  100. package/templates/codex/skills/rlm/roles/designer.md +94 -0
  101. package/templates/codex/skills/rlm/roles/explorer.md +43 -0
  102. package/templates/codex/skills/rlm/roles/implementer.md +62 -0
  103. package/templates/codex/skills/rlm/roles/kb_keeper.md +138 -0
  104. package/templates/codex/skills/rlm/roles/pkg_keeper.md +163 -0
  105. package/templates/codex/skills/rlm/roles/reviewer.md +74 -0
  106. package/templates/codex/skills/rlm/roles/synthesizer.md +90 -0
  107. package/templates/codex/skills/rlm/roles/tester.md +83 -0
  108. package/templates/codex/skills/rlm/schemas/agent_result.json +174 -0
  109. package/templates/codex/skills/rlm/session.py +376 -0
  110. package/templates/codex/skills/rlm/shared_tasks.py +370 -0
  111. package/templates/codex/skills/scripts/create_package.py +260 -0
  112. package/templates/codex/skills/scripts/list_packages.py +145 -0
  113. package/templates/codex/skills/scripts/migrate_package.py +399 -0
  114. package/templates/codex/skills/scripts/project_stats.py +438 -0
  115. package/templates/codex/skills/scripts/upgradewiki.py +321 -0
  116. package/templates/codex/skills/scripts/utils.py +596 -0
  117. package/templates/codex/skills/scripts/validate_package.py +309 -0
@@ -0,0 +1,321 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ HelloAGENTS 知识库工具(纯文件操作)
5
+
6
+ 本脚本仅负责文件系统操作,不做任何内容分析和转换。
7
+ 内容分析由 AI 通过 ~upgrade 命令执行。
8
+
9
+ Usage:
10
+ python upgradewiki.py --scan [--path <base-path>]
11
+ python upgradewiki.py --init [--path <base-path>]
12
+ python upgradewiki.py --backup [--path <base-path>]
13
+ python upgradewiki.py --write <json-file> [--path <base-path>]
14
+
15
+ Examples:
16
+ python upgradewiki.py --scan # 扫描知识库目录,返回文件列表
17
+ python upgradewiki.py --init # 创建标准目录结构
18
+ python upgradewiki.py --backup # 备份现有知识库
19
+ python upgradewiki.py --write plan.json # 按计划写入文件
20
+ """
21
+
22
+ import argparse
23
+ import json
24
+ import shutil
25
+ import sys
26
+ from pathlib import Path
27
+ from datetime import datetime
28
+ from typing import Dict, List, Optional
29
+
30
+ # 确保能找到同目录下的 utils 模块
31
+ sys.path.insert(0, str(Path(__file__).parent))
32
+ from utils import get_workspace_path, setup_encoding, print_error, print_success, validate_base_path
33
+
34
+
35
+ # V3 标准目录结构
36
+ V3_DIRECTORIES = ['modules', 'archive', 'plan']
37
+ V3_ROOT_FILES = ['INDEX.md', 'context.md', 'CHANGELOG.md']
38
+
39
+
40
+ def scan_workspace(workspace: Path) -> Dict:
41
+ """
42
+ 扫描知识库目录,返回文件列表(不做任何内容分析)
43
+
44
+ Returns:
45
+ {
46
+ "workspace": str,
47
+ "exists": bool,
48
+ "files": [{"path": str, "type": "file"|"directory", "size": int}],
49
+ "structure": {
50
+ "directories": [str],
51
+ "root_files": [str]
52
+ }
53
+ }
54
+ """
55
+ result = {
56
+ "workspace": str(workspace),
57
+ "exists": workspace.exists(),
58
+ "files": [],
59
+ "structure": {
60
+ "directories": [],
61
+ "root_files": []
62
+ }
63
+ }
64
+
65
+ if not workspace.exists():
66
+ return result
67
+
68
+ # 扫描所有文件和目录
69
+ for item in sorted(workspace.rglob("*")):
70
+ if item.name.startswith('.'):
71
+ continue
72
+
73
+ rel_path = item.relative_to(workspace)
74
+ file_info = {
75
+ "path": str(rel_path).replace("\\", "/"),
76
+ "type": "directory" if item.is_dir() else "file"
77
+ }
78
+
79
+ if item.is_file():
80
+ file_info["size"] = item.stat().st_size
81
+
82
+ result["files"].append(file_info)
83
+
84
+ # 分析顶层结构
85
+ for item in workspace.iterdir():
86
+ if item.name.startswith('.'):
87
+ continue
88
+ if item.is_dir():
89
+ result["structure"]["directories"].append(item.name)
90
+ else:
91
+ result["structure"]["root_files"].append(item.name)
92
+
93
+ return result
94
+
95
+
96
+ def init_structure(workspace: Path) -> Dict:
97
+ """
98
+ 创建标准目录结构(仅创建目录,不创建文件)
99
+
100
+ Returns:
101
+ {"created": [str], "existed": [str]}
102
+ """
103
+ result = {
104
+ "created": [],
105
+ "existed": []
106
+ }
107
+
108
+ # 创建 helloagents 根目录
109
+ if not workspace.exists():
110
+ workspace.mkdir(parents=True)
111
+ result["created"].append(str(workspace))
112
+ else:
113
+ result["existed"].append(str(workspace))
114
+
115
+ # 创建子目录
116
+ for dir_name in V3_DIRECTORIES:
117
+ dir_path = workspace / dir_name
118
+ if not dir_path.exists():
119
+ dir_path.mkdir(parents=True)
120
+ result["created"].append(dir_name)
121
+ else:
122
+ result["existed"].append(dir_name)
123
+
124
+ return result
125
+
126
+
127
+ def create_backup(workspace: Path) -> Dict:
128
+ """
129
+ 备份现有知识库
130
+
131
+ Returns:
132
+ {"success": bool, "backup_path": str|None, "error": str|None}
133
+ """
134
+ result = {
135
+ "success": False,
136
+ "backup_path": None,
137
+ "error": None
138
+ }
139
+
140
+ if not workspace.exists():
141
+ result["error"] = f"知识库目录不存在: {workspace}"
142
+ return result
143
+
144
+ # 生成备份目录名
145
+ timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
146
+ base_backup_path = workspace.parent / f"helloagents_backup_{timestamp}"
147
+
148
+ # 确保备份目录不存在(添加序号避免冲突)
149
+ backup_path = base_backup_path
150
+ counter = 1
151
+ while backup_path.exists():
152
+ backup_path = workspace.parent / f"helloagents_backup_{timestamp}_{counter}"
153
+ counter += 1
154
+
155
+ try:
156
+ shutil.copytree(workspace, backup_path)
157
+ result["success"] = True
158
+ result["backup_path"] = str(backup_path)
159
+ except Exception as e:
160
+ result["error"] = str(e)
161
+
162
+ return result
163
+
164
+
165
+ def write_files(workspace: Path, plan_file: Path) -> Dict:
166
+ """
167
+ 按计划写入文件(由 AI 生成的写入计划)
168
+
169
+ 计划文件格式 (JSON):
170
+ {
171
+ "operations": [
172
+ {"action": "write", "path": "context.md", "content": "..."},
173
+ {"action": "rename", "from": "old.md", "to": "new.md"},
174
+ {"action": "delete", "path": "obsolete.md"},
175
+ {"action": "mkdir", "path": "subdir"}
176
+ ]
177
+ }
178
+
179
+ Returns:
180
+ {"success": bool, "executed": [str], "errors": [str]}
181
+ """
182
+ result = {
183
+ "success": True,
184
+ "executed": [],
185
+ "errors": []
186
+ }
187
+
188
+ if not plan_file.exists():
189
+ result["success"] = False
190
+ result["errors"].append(f"计划文件不存在: {plan_file}")
191
+ return result
192
+
193
+ try:
194
+ plan = json.loads(plan_file.read_text(encoding='utf-8'))
195
+ except json.JSONDecodeError as e:
196
+ result["success"] = False
197
+ result["errors"].append(f"JSON解析错误: {e}")
198
+ return result
199
+
200
+ operations = plan.get("operations", [])
201
+
202
+ for op in operations:
203
+ action = op.get("action")
204
+ try:
205
+ if action == "write":
206
+ file_path = workspace / op["path"]
207
+ file_path.parent.mkdir(parents=True, exist_ok=True)
208
+ file_path.write_text(op["content"], encoding='utf-8')
209
+ result["executed"].append(f"write: {op['path']}")
210
+
211
+ elif action == "rename":
212
+ from_path = workspace / op["from"]
213
+ to_path = workspace / op["to"]
214
+ if from_path.exists():
215
+ to_path.parent.mkdir(parents=True, exist_ok=True)
216
+ shutil.move(str(from_path), str(to_path))
217
+ result["executed"].append(f"rename: {op['from']} → {op['to']}")
218
+ else:
219
+ result["errors"].append(f"源文件不存在: {op['from']}")
220
+
221
+ elif action == "delete":
222
+ file_path = workspace / op["path"]
223
+ if file_path.exists():
224
+ if file_path.is_dir():
225
+ shutil.rmtree(file_path)
226
+ else:
227
+ file_path.unlink()
228
+ result["executed"].append(f"delete: {op['path']}")
229
+
230
+ elif action == "mkdir":
231
+ dir_path = workspace / op["path"]
232
+ dir_path.mkdir(parents=True, exist_ok=True)
233
+ result["executed"].append(f"mkdir: {op['path']}")
234
+
235
+ else:
236
+ result["errors"].append(f"未知操作: {action}")
237
+
238
+ except Exception as e:
239
+ result["success"] = False
240
+ result["errors"].append(f"{action} {op.get('path', '')}: {e}")
241
+
242
+ if result["errors"]:
243
+ result["success"] = False
244
+
245
+ return result
246
+
247
+
248
+ def main():
249
+ setup_encoding()
250
+ parser = argparse.ArgumentParser(
251
+ description="HelloAGENTS 知识库工具(纯文件操作)"
252
+ )
253
+
254
+ # 互斥的操作模式
255
+ group = parser.add_mutually_exclusive_group(required=True)
256
+ group.add_argument(
257
+ "--scan",
258
+ action="store_true",
259
+ help="扫描知识库目录,返回文件列表(JSON)"
260
+ )
261
+ group.add_argument(
262
+ "--init",
263
+ action="store_true",
264
+ help="创建标准目录结构"
265
+ )
266
+ group.add_argument(
267
+ "--backup",
268
+ action="store_true",
269
+ help="备份现有知识库"
270
+ )
271
+ group.add_argument(
272
+ "--write",
273
+ metavar="JSON_FILE",
274
+ help="按计划写入文件(JSON格式的操作计划)"
275
+ )
276
+
277
+ parser.add_argument(
278
+ "--path",
279
+ default=None,
280
+ help="项目根目录(默认: 当前目录)"
281
+ )
282
+
283
+ args = parser.parse_args()
284
+
285
+ # 验证基础路径
286
+ try:
287
+ validate_base_path(args.path)
288
+ except ValueError as e:
289
+ print(json.dumps({"error": str(e)}, ensure_ascii=False))
290
+ sys.exit(1)
291
+
292
+ workspace = get_workspace_path(args.path)
293
+
294
+ # 执行操作
295
+ if args.scan:
296
+ result = scan_workspace(workspace)
297
+ print(json.dumps(result, ensure_ascii=False, indent=2))
298
+ sys.exit(0)
299
+
300
+ elif args.init:
301
+ result = init_structure(workspace)
302
+ print(json.dumps(result, ensure_ascii=False, indent=2))
303
+ if result["created"]:
304
+ sys.exit(0)
305
+ else:
306
+ sys.exit(0) # 目录已存在也是成功
307
+
308
+ elif args.backup:
309
+ result = create_backup(workspace)
310
+ print(json.dumps(result, ensure_ascii=False, indent=2))
311
+ sys.exit(0 if result["success"] else 1)
312
+
313
+ elif args.write:
314
+ plan_file = Path(args.write)
315
+ result = write_files(workspace, plan_file)
316
+ print(json.dumps(result, ensure_ascii=False, indent=2))
317
+ sys.exit(0 if result["success"] else 1)
318
+
319
+
320
+ if __name__ == "__main__":
321
+ main()