@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,391 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ HelloAGENTS-RLM Context Folding
5
+ 上下文折叠实现
6
+
7
+ 基于OpenReview论文 "Scaling Long-Horizon Agent via Context Folding":
8
+ - 子轨迹分支
9
+ - 完成后折叠
10
+ - 保留摘要
11
+ """
12
+
13
+ from dataclasses import dataclass, field
14
+ from datetime import datetime
15
+ from enum import Enum
16
+ from typing import Any, Callable, Dict, List, Optional
17
+ import re
18
+
19
+
20
+ class FoldingStrategy(Enum):
21
+ """折叠策略"""
22
+ AGGRESSIVE = "aggressive" # 激进: 仅保留关键结论
23
+ BALANCED = "balanced" # 平衡: 保留结论和关键步骤 (默认)
24
+ CONSERVATIVE = "conservative" # 保守: 保留更多细节
25
+
26
+
27
+ @dataclass
28
+ class Trajectory:
29
+ """轨迹"""
30
+ trajectory_id: str
31
+ content: str
32
+ trajectory_type: str = "general" # general | exploration | implementation | review
33
+ created_at: str = ""
34
+ artifacts: List[str] = field(default_factory=list)
35
+ metadata: Dict[str, Any] = field(default_factory=dict)
36
+
37
+ def __post_init__(self):
38
+ if not self.created_at:
39
+ self.created_at = datetime.now().isoformat()
40
+
41
+
42
+ @dataclass
43
+ class FoldedResult:
44
+ """折叠结果"""
45
+ original_id: str
46
+ summary: str
47
+ key_artifacts: List[str]
48
+ compression_ratio: float
49
+ strategy_used: FoldingStrategy
50
+ folded_at: str = ""
51
+
52
+ def __post_init__(self):
53
+ if not self.folded_at:
54
+ self.folded_at = datetime.now().isoformat()
55
+
56
+
57
+ class ContextFolder:
58
+ """
59
+ 上下文折叠器
60
+
61
+ 核心功能:
62
+ 1. 识别可折叠的子轨迹
63
+ 2. 生成高质量摘要
64
+ 3. 保留关键产物引用
65
+ 4. 支持多种折叠策略
66
+ """
67
+
68
+ # 关键标记词
69
+ KEY_MARKERS = [
70
+ # 结构标记
71
+ r'^#{1,3}\s+', # 标题
72
+ r'^\*\*.*\*\*', # 粗体
73
+ # 状态标记
74
+ r'✅|❌|⚠️|🔵|🟣|💡',
75
+ r'\[completed\]|\[failed\]|\[success\]|\[error\]',
76
+ # 代码标记
77
+ r'```\w*',
78
+ r'def\s+\w+|class\s+\w+|function\s+\w+',
79
+ # 文件操作
80
+ r'created?|modified?|deleted?|updated?',
81
+ r'file:|path:',
82
+ ]
83
+
84
+ # 可省略内容模式
85
+ OMIT_PATTERNS = [
86
+ r'^\s*$', # 空行
87
+ r'^[-=]{3,}$', # 分隔线
88
+ r'^\s*#.*$', # 注释 (某些场景)
89
+ r'^\s*\.\.\.\s*$', # 省略标记
90
+ ]
91
+
92
+ def __init__(
93
+ self,
94
+ default_strategy: FoldingStrategy = FoldingStrategy.BALANCED,
95
+ max_summary_length: int = 500,
96
+ preserve_code_blocks: bool = True,
97
+ ):
98
+ self.default_strategy = default_strategy
99
+ self.max_summary_length = max_summary_length
100
+ self.preserve_code_blocks = preserve_code_blocks
101
+
102
+ # 编译正则
103
+ self.key_patterns = [re.compile(p, re.IGNORECASE) for p in self.KEY_MARKERS]
104
+ self.omit_patterns = [re.compile(p) for p in self.OMIT_PATTERNS]
105
+
106
+ def fold(
107
+ self,
108
+ trajectory: Trajectory,
109
+ strategy: Optional[FoldingStrategy] = None,
110
+ custom_prompt: Optional[str] = None,
111
+ ) -> FoldedResult:
112
+ """
113
+ 折叠轨迹
114
+
115
+ Args:
116
+ trajectory: 要折叠的轨迹
117
+ strategy: 折叠策略 (None使用默认)
118
+ custom_prompt: 自定义摘要提示
119
+
120
+ Returns:
121
+ 折叠结果
122
+ """
123
+ strategy = strategy or self.default_strategy
124
+
125
+ # 提取关键内容
126
+ key_lines = self._extract_key_content(trajectory.content, strategy)
127
+
128
+ # 提取产物
129
+ artifacts = self._extract_artifacts(trajectory.content)
130
+ artifacts.extend(trajectory.artifacts)
131
+ artifacts = list(dict.fromkeys(artifacts)) # 去重
132
+
133
+ # 生成摘要
134
+ summary = self._generate_summary(
135
+ key_lines=key_lines,
136
+ trajectory_type=trajectory.trajectory_type,
137
+ strategy=strategy,
138
+ custom_prompt=custom_prompt,
139
+ )
140
+
141
+ # 计算压缩率
142
+ original_len = len(trajectory.content)
143
+ summary_len = len(summary)
144
+ compression_ratio = summary_len / original_len if original_len > 0 else 0
145
+
146
+ return FoldedResult(
147
+ original_id=trajectory.trajectory_id,
148
+ summary=summary,
149
+ key_artifacts=artifacts,
150
+ compression_ratio=compression_ratio,
151
+ strategy_used=strategy,
152
+ )
153
+
154
+ def fold_multiple(
155
+ self,
156
+ trajectories: List[Trajectory],
157
+ strategy: Optional[FoldingStrategy] = None,
158
+ ) -> FoldedResult:
159
+ """
160
+ 折叠多个轨迹为一个摘要
161
+
162
+ Args:
163
+ trajectories: 轨迹列表
164
+ strategy: 折叠策略
165
+
166
+ Returns:
167
+ 合并后的折叠结果
168
+ """
169
+ strategy = strategy or self.default_strategy
170
+
171
+ all_key_lines = []
172
+ all_artifacts = []
173
+
174
+ for traj in trajectories:
175
+ key_lines = self._extract_key_content(traj.content, strategy)
176
+ all_key_lines.extend(key_lines)
177
+
178
+ artifacts = self._extract_artifacts(traj.content)
179
+ all_artifacts.extend(artifacts)
180
+
181
+ # 去重
182
+ all_artifacts = list(dict.fromkeys(all_artifacts))
183
+
184
+ # 生成合并摘要
185
+ summary = self._generate_summary(
186
+ key_lines=all_key_lines,
187
+ trajectory_type="merged",
188
+ strategy=strategy,
189
+ )
190
+
191
+ total_len = sum(len(t.content) for t in trajectories)
192
+ compression_ratio = len(summary) / total_len if total_len > 0 else 0
193
+
194
+ return FoldedResult(
195
+ original_id=f"merged_{len(trajectories)}",
196
+ summary=summary,
197
+ key_artifacts=all_artifacts,
198
+ compression_ratio=compression_ratio,
199
+ strategy_used=strategy,
200
+ )
201
+
202
+ def should_fold(
203
+ self,
204
+ content: str,
205
+ threshold_tokens: int = 2000,
206
+ ) -> bool:
207
+ """
208
+ 判断是否应该折叠
209
+
210
+ Args:
211
+ content: 内容
212
+ threshold_tokens: token阈值
213
+
214
+ Returns:
215
+ 是否应该折叠
216
+ """
217
+ estimated_tokens = len(content) // 4 # 简单估算
218
+ return estimated_tokens > threshold_tokens
219
+
220
+ def estimate_savings(
221
+ self,
222
+ content: str,
223
+ strategy: Optional[FoldingStrategy] = None,
224
+ ) -> Dict[str, Any]:
225
+ """
226
+ 估算折叠节省
227
+
228
+ Returns:
229
+ {original_tokens, estimated_tokens, savings_percent}
230
+ """
231
+ strategy = strategy or self.default_strategy
232
+
233
+ original_tokens = len(content) // 4
234
+ key_lines = self._extract_key_content(content, strategy)
235
+ estimated_summary_len = min(
236
+ sum(len(line) for line in key_lines),
237
+ self.max_summary_length,
238
+ )
239
+ estimated_tokens = estimated_summary_len // 4
240
+
241
+ savings_percent = (1 - estimated_tokens / original_tokens) * 100 if original_tokens > 0 else 0
242
+
243
+ return {
244
+ "original_tokens": original_tokens,
245
+ "estimated_tokens": estimated_tokens,
246
+ "savings_percent": round(savings_percent, 1),
247
+ }
248
+
249
+ # ==================== 内部方法 ====================
250
+
251
+ def _extract_key_content(
252
+ self,
253
+ content: str,
254
+ strategy: FoldingStrategy,
255
+ ) -> List[str]:
256
+ """提取关键内容行"""
257
+ lines = content.split('\n')
258
+ key_lines = []
259
+
260
+ # 根据策略设置保留比例
261
+ retention_limits = {
262
+ FoldingStrategy.AGGRESSIVE: 0.1, # 保留10%
263
+ FoldingStrategy.BALANCED: 0.25, # 保留25%
264
+ FoldingStrategy.CONSERVATIVE: 0.5, # 保留50%
265
+ }
266
+ max_lines = int(len(lines) * retention_limits.get(strategy, 0.25))
267
+ max_lines = max(max_lines, 5) # 至少保留5行
268
+
269
+ in_code_block = False
270
+ code_block_lines = []
271
+
272
+ for line in lines:
273
+ # 跟踪代码块
274
+ if line.strip().startswith('```'):
275
+ in_code_block = not in_code_block
276
+ if self.preserve_code_blocks:
277
+ if in_code_block:
278
+ code_block_lines = [line]
279
+ else:
280
+ code_block_lines.append(line)
281
+ # 只保留短代码块
282
+ if len(code_block_lines) <= 10:
283
+ key_lines.extend(code_block_lines)
284
+ code_block_lines = []
285
+ continue
286
+
287
+ if in_code_block:
288
+ if self.preserve_code_blocks:
289
+ code_block_lines.append(line)
290
+ continue
291
+
292
+ # 检查是否应该省略
293
+ if any(p.match(line) for p in self.omit_patterns):
294
+ continue
295
+
296
+ # 检查是否是关键行
297
+ is_key = any(p.search(line) for p in self.key_patterns)
298
+
299
+ if is_key:
300
+ key_lines.append(line)
301
+
302
+ # 限制行数
303
+ if len(key_lines) > max_lines:
304
+ # 优先保留开头和结尾
305
+ head = key_lines[:max_lines // 2]
306
+ tail = key_lines[-(max_lines // 2):]
307
+ key_lines = head + ['...'] + tail
308
+
309
+ return key_lines
310
+
311
+ def _extract_artifacts(self, content: str) -> List[str]:
312
+ """提取关键产物"""
313
+ artifacts = []
314
+
315
+ # 文件路径
316
+ paths = re.findall(r'[\w./\\-]+\.\w{1,10}', content)
317
+ artifacts.extend(paths[:10])
318
+
319
+ # 函数/类名
320
+ funcs = re.findall(r'(?:def|class|function)\s+(\w+)', content)
321
+ artifacts.extend(funcs[:5])
322
+
323
+ # URL
324
+ urls = re.findall(r'https?://[^\s<>"{}|\\^`\[\]]+', content)
325
+ artifacts.extend(urls[:3])
326
+
327
+ return artifacts
328
+
329
+ def _generate_summary(
330
+ self,
331
+ key_lines: List[str],
332
+ trajectory_type: str,
333
+ strategy: FoldingStrategy,
334
+ custom_prompt: Optional[str] = None,
335
+ ) -> str:
336
+ """
337
+ 生成摘要
338
+
339
+ 注意: 这是简化实现,实际应调用LLM
340
+ """
341
+ if not key_lines:
342
+ return "[无关键内容]"
343
+
344
+ # 类型前缀
345
+ type_prefixes = {
346
+ "exploration": "📂 探索",
347
+ "implementation": "💻 实现",
348
+ "review": "🔍 审查",
349
+ "merged": "📋 综合",
350
+ "general": "📝 记录",
351
+ }
352
+ prefix = type_prefixes.get(trajectory_type, "📝")
353
+
354
+ # 组装摘要
355
+ summary_parts = [f"{prefix}摘要:"]
356
+ summary_parts.extend(key_lines)
357
+
358
+ summary = '\n'.join(summary_parts)
359
+
360
+ # 截断
361
+ if len(summary) > self.max_summary_length:
362
+ summary = summary[:self.max_summary_length - 3] + '...'
363
+
364
+ return summary
365
+
366
+
367
+ # ==================== 便捷函数 ====================
368
+
369
+ def quick_fold(
370
+ content: str,
371
+ strategy: str = "balanced",
372
+ ) -> str:
373
+ """快速折叠内容"""
374
+ strategy_map = {
375
+ "aggressive": FoldingStrategy.AGGRESSIVE,
376
+ "balanced": FoldingStrategy.BALANCED,
377
+ "conservative": FoldingStrategy.CONSERVATIVE,
378
+ }
379
+ folder = ContextFolder(default_strategy=strategy_map.get(strategy, FoldingStrategy.BALANCED))
380
+ trajectory = Trajectory(
381
+ trajectory_id="quick_fold",
382
+ content=content,
383
+ )
384
+ result = folder.fold(trajectory)
385
+ return result.summary
386
+
387
+
388
+ def estimate_fold_savings(content: str) -> Dict[str, Any]:
389
+ """估算折叠节省"""
390
+ folder = ContextFolder()
391
+ return folder.estimate_savings(content)