codexspec 0.4.0__tar.gz → 0.4.2__tar.gz
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.
- {codexspec-0.4.0 → codexspec-0.4.2}/PKG-INFO +1 -1
- {codexspec-0.4.0 → codexspec-0.4.2}/pyproject.toml +1 -1
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/python/README.md +12 -4
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/python/claude_monitor.py +147 -16
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/python/notify_telegram.py +53 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/__init__.py +1 -1
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/translator.py +14 -6
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/de.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/es.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/fr.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/ja.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/ko.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/pt-BR.json +25 -13
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/translations/zh-CN.json +24 -12
- {codexspec-0.4.0 → codexspec-0.4.2}/.gitignore +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/LICENSE +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/README.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/bash/check-i18n-completeness.sh +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/bash/check-i18n-structure.sh +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/bash/check-prerequisites.sh +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/bash/common.sh +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/bash/create-new-feature.sh +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/powershell/common.ps1 +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/scripts/powershell/create-new-feature.ps1 +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/commands/__init__.py +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/commands/installer.py +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/i18n.py +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/src/codexspec/idea.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/analyze.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/check-i18n-semantics.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/checklist.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/clarify.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/commit-staged.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/commit.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/constitution.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/generate-spec.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/implement-tasks.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/plan-to-tasks.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/pr.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/review-plan.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/review-spec.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/review-tasks.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/spec-to-plan.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/specify.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/tasks-to-issues.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/commands/translate-docs.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/checklist-template.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/constitution-template.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/plan-template-detailed.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/plan-template-simple.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/spec-template-detailed.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/spec-template-simple.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/tasks-template-detailed.md +0 -0
- {codexspec-0.4.0 → codexspec-0.4.2}/templates/docs/tasks-template-simple.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codexspec
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: CodexSpec - A Spec-Driven Development (SDD) toolkit for Claude Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/Zts0hg/codexspec
|
|
6
6
|
Project-URL: Repository, https://github.com/Zts0hg/codexspec
|
|
@@ -14,20 +14,26 @@
|
|
|
14
14
|
### 1. 安装依赖
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
pip install watchdog
|
|
17
|
+
pip install watchdog python-dotenv
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
或使用 uv:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uv sync
|
|
18
24
|
```
|
|
19
25
|
|
|
20
26
|
### 2. 启动监控
|
|
21
27
|
|
|
22
28
|
```bash
|
|
23
29
|
# 监控最近活跃的项目
|
|
24
|
-
python claude_monitor.py --json | python notify_telegram.py
|
|
30
|
+
uv run python claude_monitor.py --json | uv run python notify_telegram.py
|
|
25
31
|
|
|
26
32
|
# 监控指定项目
|
|
27
|
-
python claude_monitor.py --json -p ~/.claude/projects/-your-project | python notify_telegram.py
|
|
33
|
+
uv run python claude_monitor.py --json -p ~/.claude/projects/-your-project | uv run python notify_telegram.py
|
|
28
34
|
|
|
29
35
|
# 列出所有可用项目
|
|
30
|
-
python claude_monitor.py --list
|
|
36
|
+
uv run python claude_monitor.py --list
|
|
31
37
|
```
|
|
32
38
|
|
|
33
39
|
### 3. 后台运行
|
|
@@ -48,6 +54,7 @@ pkill -f claude_monitor.py
|
|
|
48
54
|
|------|------|------------|
|
|
49
55
|
| `TASK_COMPLETE` | 任务执行完成 | ✅ |
|
|
50
56
|
| `USER_QUESTION` | Claude 需要用户输入 | ❓ |
|
|
57
|
+
| `PENDING_PERMISSION` | Claude 等待工具权限确认 | ⏳ |
|
|
51
58
|
| `ERROR_STOP` | 执行出错停止 | ❌ |
|
|
52
59
|
|
|
53
60
|
## 配置
|
|
@@ -65,6 +72,7 @@ export TELEGRAM_PROXY="http://127.0.0.1:7890" # 可选
|
|
|
65
72
|
# 通知开关
|
|
66
73
|
export NOTIFY_ON_COMPLETE="true" # 任务完成时通知
|
|
67
74
|
export NOTIFY_ON_USER_QUESTION="true" # 需要输入时通知
|
|
75
|
+
export NOTIFY_ON_PENDING_PERMISSION="true" # 等待权限确认时通知
|
|
68
76
|
export NOTIFY_ON_ERROR="true" # 出错时通知
|
|
69
77
|
```
|
|
70
78
|
|
|
@@ -30,6 +30,7 @@ class SessionStatus(Enum):
|
|
|
30
30
|
|
|
31
31
|
STREAMING = "STREAMING" # 流式输出中
|
|
32
32
|
TOOL_USE = "TOOL_USE" # 工具调用中
|
|
33
|
+
PENDING_PERMISSION = "PENDING_PERMISSION" # 等待权限确认
|
|
33
34
|
USER_QUESTION = "USER_QUESTION" # 等待用户回答
|
|
34
35
|
ERROR_STOP = "ERROR_STOP" # 出错停止
|
|
35
36
|
TASK_COMPLETE = "TASK_COMPLETE" # 任务完成
|
|
@@ -44,6 +45,16 @@ class QuestionOption:
|
|
|
44
45
|
description: str
|
|
45
46
|
|
|
46
47
|
|
|
48
|
+
@dataclass
|
|
49
|
+
class ToolUseInfo:
|
|
50
|
+
"""工具调用信息"""
|
|
51
|
+
|
|
52
|
+
tool_name: str
|
|
53
|
+
tool_id: str
|
|
54
|
+
tool_input: dict[str, Any]
|
|
55
|
+
description: Optional[str] = None
|
|
56
|
+
|
|
57
|
+
|
|
47
58
|
@dataclass
|
|
48
59
|
class QuestionInfo:
|
|
49
60
|
"""用户询问的详细信息"""
|
|
@@ -74,6 +85,7 @@ class SessionState:
|
|
|
74
85
|
last_output: Optional[str] = None
|
|
75
86
|
is_executing: bool = False
|
|
76
87
|
questions: list[QuestionInfo] = field(default_factory=list)
|
|
88
|
+
pending_tools: list[ToolUseInfo] = field(default_factory=list)
|
|
77
89
|
error_info: Optional[ErrorInfo] = None
|
|
78
90
|
|
|
79
91
|
|
|
@@ -91,7 +103,7 @@ class StateDetector:
|
|
|
91
103
|
@staticmethod
|
|
92
104
|
def detect(
|
|
93
105
|
message: dict,
|
|
94
|
-
) -> tuple[SessionStatus, Optional[QuestionInfo], Optional[ErrorInfo]]:
|
|
106
|
+
) -> tuple[SessionStatus, Optional[QuestionInfo], list[ToolUseInfo], Optional[ErrorInfo]]:
|
|
95
107
|
"""
|
|
96
108
|
检测消息状态
|
|
97
109
|
|
|
@@ -99,35 +111,76 @@ class StateDetector:
|
|
|
99
111
|
message: Claude API 响应消息
|
|
100
112
|
|
|
101
113
|
Returns:
|
|
102
|
-
tuple: (状态, 问题信息, 错误信息)
|
|
114
|
+
tuple: (状态, 问题信息, 工具调用列表, 错误信息)
|
|
103
115
|
"""
|
|
104
116
|
stop_reason = message.get("stop_reason")
|
|
105
117
|
content = message.get("content", [])
|
|
106
118
|
|
|
107
119
|
# 1. 流式输出中 (stop_reason=null)
|
|
108
120
|
if stop_reason is None:
|
|
109
|
-
return SessionStatus.STREAMING, None, None
|
|
121
|
+
return SessionStatus.STREAMING, None, [], None
|
|
110
122
|
|
|
111
|
-
# 2. 检查是否为用户询问
|
|
123
|
+
# 2. 检查是否为用户询问 (AskUserQuestion 工具)
|
|
112
124
|
question_info = StateDetector._extract_question(content)
|
|
113
125
|
if question_info:
|
|
114
|
-
return SessionStatus.USER_QUESTION, question_info, None
|
|
126
|
+
return SessionStatus.USER_QUESTION, question_info, [], None
|
|
115
127
|
|
|
116
|
-
# 3.
|
|
128
|
+
# 3. 检查是否为工具调用等待权限确认
|
|
129
|
+
if stop_reason == "tool_use":
|
|
130
|
+
# 提取所有工具调用信息
|
|
131
|
+
tool_infos = StateDetector._extract_tool_uses(content)
|
|
132
|
+
if tool_infos:
|
|
133
|
+
return SessionStatus.PENDING_PERMISSION, None, tool_infos, None
|
|
134
|
+
return SessionStatus.TOOL_USE, None, [], None
|
|
135
|
+
|
|
136
|
+
# 4. 检查是否出错
|
|
117
137
|
error_info = StateDetector._extract_error(message)
|
|
118
138
|
if error_info and stop_reason not in StateDetector.STOP_REASONS_COMPLETE:
|
|
119
139
|
# 有错误且不是正常完成
|
|
120
140
|
if stop_reason in ("refusal", "error") or (
|
|
121
|
-
stop_reason not in StateDetector.STOP_REASONS_COMPLETE
|
|
141
|
+
stop_reason not in StateDetector.STOP_REASONS_COMPLETE
|
|
122
142
|
):
|
|
123
|
-
return SessionStatus.ERROR_STOP, None, error_info
|
|
124
|
-
|
|
125
|
-
# 4. 工具调用(非 AskUserQuestion)
|
|
126
|
-
if stop_reason == "tool_use":
|
|
127
|
-
return SessionStatus.TOOL_USE, None, None
|
|
143
|
+
return SessionStatus.ERROR_STOP, None, [], error_info
|
|
128
144
|
|
|
129
145
|
# 5. 任务完成
|
|
130
|
-
return SessionStatus.TASK_COMPLETE, None, None
|
|
146
|
+
return SessionStatus.TASK_COMPLETE, None, [], None
|
|
147
|
+
|
|
148
|
+
@staticmethod
|
|
149
|
+
def _extract_tool_uses(content: list) -> list[ToolUseInfo]:
|
|
150
|
+
"""
|
|
151
|
+
从 content 中提取所有 tool_use 信息
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
content: 消息内容列表
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
ToolUseInfo 列表
|
|
158
|
+
"""
|
|
159
|
+
tool_infos = []
|
|
160
|
+
if not content:
|
|
161
|
+
return tool_infos
|
|
162
|
+
|
|
163
|
+
for item in content:
|
|
164
|
+
if item.get("type") != "tool_use":
|
|
165
|
+
continue
|
|
166
|
+
|
|
167
|
+
tool_name = item.get("name", "")
|
|
168
|
+
tool_id = item.get("id", "")
|
|
169
|
+
tool_input = item.get("input", {})
|
|
170
|
+
|
|
171
|
+
# 提取描述(如果存在)
|
|
172
|
+
description = tool_input.get("description") if isinstance(tool_input, dict) else None
|
|
173
|
+
|
|
174
|
+
tool_infos.append(
|
|
175
|
+
ToolUseInfo(
|
|
176
|
+
tool_name=tool_name,
|
|
177
|
+
tool_id=tool_id,
|
|
178
|
+
tool_input=tool_input,
|
|
179
|
+
description=description,
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
return tool_infos
|
|
131
184
|
|
|
132
185
|
@staticmethod
|
|
133
186
|
def _extract_question(content: list) -> Optional[QuestionInfo]:
|
|
@@ -237,6 +290,42 @@ class OutputFormatter:
|
|
|
237
290
|
|
|
238
291
|
SEPARATOR = "=" * 60
|
|
239
292
|
|
|
293
|
+
@staticmethod
|
|
294
|
+
def format_pending_permission(session_id: str, tools: list[ToolUseInfo]) -> str:
|
|
295
|
+
"""
|
|
296
|
+
格式化等待权限确认的输出
|
|
297
|
+
|
|
298
|
+
Args:
|
|
299
|
+
session_id: Session ID
|
|
300
|
+
tools: 工具调用列表
|
|
301
|
+
|
|
302
|
+
Returns:
|
|
303
|
+
格式化的输出字符串
|
|
304
|
+
"""
|
|
305
|
+
lines = [
|
|
306
|
+
"",
|
|
307
|
+
OutputFormatter.SEPARATOR,
|
|
308
|
+
f"[Session: {session_id[:8]}] Status: PENDING_PERMISSION",
|
|
309
|
+
OutputFormatter.SEPARATOR,
|
|
310
|
+
"Tools waiting for permission:",
|
|
311
|
+
]
|
|
312
|
+
|
|
313
|
+
for i, tool in enumerate(tools, 1):
|
|
314
|
+
lines.append(f" [{i}] {tool.tool_name}")
|
|
315
|
+
if tool.description:
|
|
316
|
+
lines.append(f" Description: {tool.description}")
|
|
317
|
+
# 显示工具输入参数
|
|
318
|
+
if tool.tool_input:
|
|
319
|
+
lines.append(" Input:")
|
|
320
|
+
for key, value in tool.tool_input.items():
|
|
321
|
+
value_str = str(value)
|
|
322
|
+
if len(value_str) > 200:
|
|
323
|
+
value_str = value_str[:200] + "..."
|
|
324
|
+
lines.append(f" {key}: {value_str}")
|
|
325
|
+
|
|
326
|
+
lines.append(OutputFormatter.SEPARATOR)
|
|
327
|
+
return "\n".join(lines)
|
|
328
|
+
|
|
240
329
|
@staticmethod
|
|
241
330
|
def format_user_question(session_id: str, questions: list[QuestionInfo]) -> str:
|
|
242
331
|
"""
|
|
@@ -351,12 +440,14 @@ class ClaudeSessionMonitor(FileSystemEventHandler):
|
|
|
351
440
|
on_complete: Optional[callable] = None,
|
|
352
441
|
on_user_question: Optional[callable] = None,
|
|
353
442
|
on_error_stop: Optional[callable] = None,
|
|
443
|
+
on_pending_permission: Optional[callable] = None,
|
|
354
444
|
):
|
|
355
445
|
self.project_dir = project_dir or self._detect_current_project()
|
|
356
446
|
self.quiet = quiet
|
|
357
447
|
self.on_complete = on_complete
|
|
358
448
|
self.on_user_question = on_user_question
|
|
359
449
|
self.on_error_stop = on_error_stop
|
|
450
|
+
self.on_pending_permission = on_pending_permission
|
|
360
451
|
self.sessions: dict[str, SessionState] = {}
|
|
361
452
|
self._file_positions: dict[str, int] = {} # 记录每个文件的读取位置
|
|
362
453
|
self._observer: Optional[Observer] = None
|
|
@@ -473,7 +564,7 @@ class ClaudeSessionMonitor(FileSystemEventHandler):
|
|
|
473
564
|
text_content = self._extract_text(content)
|
|
474
565
|
|
|
475
566
|
# 使用 StateDetector 检测状态
|
|
476
|
-
detected_status, question_info, error_info = StateDetector.detect(message)
|
|
567
|
+
detected_status, question_info, tool_infos, error_info = StateDetector.detect(message)
|
|
477
568
|
|
|
478
569
|
# 更新 session 状态
|
|
479
570
|
if session_id not in self.sessions:
|
|
@@ -487,12 +578,13 @@ class ClaudeSessionMonitor(FileSystemEventHandler):
|
|
|
487
578
|
state.last_output = text_content
|
|
488
579
|
state.status = detected_status
|
|
489
580
|
|
|
490
|
-
#
|
|
581
|
+
# 根据检测结果更新问题/错误/工具信息
|
|
491
582
|
if question_info:
|
|
492
583
|
state.questions = [question_info]
|
|
493
584
|
else:
|
|
494
585
|
state.questions = []
|
|
495
586
|
|
|
587
|
+
state.pending_tools = tool_infos
|
|
496
588
|
state.error_info = error_info
|
|
497
589
|
|
|
498
590
|
# 判断是否正在执行
|
|
@@ -509,8 +601,12 @@ class ClaudeSessionMonitor(FileSystemEventHandler):
|
|
|
509
601
|
|
|
510
602
|
# 触发状态变化回调
|
|
511
603
|
if not silent:
|
|
604
|
+
# 检测等待权限确认状态
|
|
605
|
+
if detected_status == SessionStatus.PENDING_PERMISSION:
|
|
606
|
+
self._on_pending_permission(session_id, state.pending_tools)
|
|
607
|
+
|
|
512
608
|
# 检测用户询问状态
|
|
513
|
-
|
|
609
|
+
elif detected_status == SessionStatus.USER_QUESTION:
|
|
514
610
|
self._on_user_question(session_id, state.questions)
|
|
515
611
|
|
|
516
612
|
# 检测错误停止状态
|
|
@@ -595,6 +691,21 @@ class ClaudeSessionMonitor(FileSystemEventHandler):
|
|
|
595
691
|
output = OutputFormatter.format_error_stop(session_id, error_info)
|
|
596
692
|
print(output)
|
|
597
693
|
|
|
694
|
+
def _on_pending_permission(self, session_id: str, tools: list[ToolUseInfo]):
|
|
695
|
+
"""等待权限确认时的回调"""
|
|
696
|
+
# 调用自定义回调(即使在 quiet 模式下也调用)
|
|
697
|
+
if self.on_pending_permission:
|
|
698
|
+
self.on_pending_permission(session_id, tools)
|
|
699
|
+
return
|
|
700
|
+
|
|
701
|
+
# quiet 模式下不输出默认格式
|
|
702
|
+
if self.quiet:
|
|
703
|
+
return
|
|
704
|
+
|
|
705
|
+
# 默认输出格式
|
|
706
|
+
output = OutputFormatter.format_pending_permission(session_id, tools)
|
|
707
|
+
print(output)
|
|
708
|
+
|
|
598
709
|
def _print_completion(self, session_id: str, state: SessionState):
|
|
599
710
|
"""打印完成信息"""
|
|
600
711
|
print(f"\n{'=' * 60}")
|
|
@@ -786,6 +897,7 @@ Examples:
|
|
|
786
897
|
on_complete = None
|
|
787
898
|
on_user_question = None
|
|
788
899
|
on_error_stop = None
|
|
900
|
+
on_pending_permission = None
|
|
789
901
|
|
|
790
902
|
if args.json:
|
|
791
903
|
|
|
@@ -830,9 +942,27 @@ Examples:
|
|
|
830
942
|
}
|
|
831
943
|
print(json.dumps(output, ensure_ascii=False), flush=True)
|
|
832
944
|
|
|
945
|
+
def json_pending_permission_callback(session_id: str, tools: list[ToolUseInfo]):
|
|
946
|
+
output = {
|
|
947
|
+
"session_id": session_id,
|
|
948
|
+
"status": SessionStatus.PENDING_PERMISSION.value,
|
|
949
|
+
"timestamp": time.time(),
|
|
950
|
+
"tools": [
|
|
951
|
+
{
|
|
952
|
+
"name": t.tool_name,
|
|
953
|
+
"id": t.tool_id,
|
|
954
|
+
"input": t.tool_input,
|
|
955
|
+
"description": t.description,
|
|
956
|
+
}
|
|
957
|
+
for t in tools
|
|
958
|
+
],
|
|
959
|
+
}
|
|
960
|
+
print(json.dumps(output, ensure_ascii=False), flush=True)
|
|
961
|
+
|
|
833
962
|
on_complete = json_complete_callback
|
|
834
963
|
on_user_question = json_user_question_callback
|
|
835
964
|
on_error_stop = json_error_stop_callback
|
|
965
|
+
on_pending_permission = json_pending_permission_callback
|
|
836
966
|
|
|
837
967
|
try:
|
|
838
968
|
monitor = ClaudeSessionMonitor(
|
|
@@ -841,6 +971,7 @@ Examples:
|
|
|
841
971
|
on_complete=on_complete,
|
|
842
972
|
on_user_question=on_user_question,
|
|
843
973
|
on_error_stop=on_error_stop,
|
|
974
|
+
on_pending_permission=on_pending_permission,
|
|
844
975
|
)
|
|
845
976
|
monitor.start(json_mode=args.json)
|
|
846
977
|
except FileNotFoundError as e:
|
|
@@ -14,6 +14,11 @@ import urllib.error
|
|
|
14
14
|
import urllib.request
|
|
15
15
|
from typing import Optional
|
|
16
16
|
|
|
17
|
+
from dotenv import load_dotenv
|
|
18
|
+
|
|
19
|
+
# 从 .env 文件加载环境变量
|
|
20
|
+
load_dotenv()
|
|
21
|
+
|
|
17
22
|
# ============================================================================
|
|
18
23
|
# 配置 (可从环境变量覆盖)
|
|
19
24
|
# ============================================================================
|
|
@@ -26,6 +31,7 @@ PROXY = os.environ.get("TELEGRAM_PROXY", "http://127.0.0.1:7890")
|
|
|
26
31
|
NOTIFY_ON_COMPLETE = os.environ.get("NOTIFY_ON_COMPLETE", "true").lower() == "true"
|
|
27
32
|
NOTIFY_ON_USER_QUESTION = os.environ.get("NOTIFY_ON_USER_QUESTION", "true").lower() == "true"
|
|
28
33
|
NOTIFY_ON_ERROR = os.environ.get("NOTIFY_ON_ERROR", "true").lower() == "true"
|
|
34
|
+
NOTIFY_ON_PENDING_PERMISSION = os.environ.get("NOTIFY_ON_PENDING_PERMISSION", "true").lower() == "true"
|
|
29
35
|
|
|
30
36
|
|
|
31
37
|
# ============================================================================
|
|
@@ -173,6 +179,39 @@ def format_error(data: dict) -> str:
|
|
|
173
179
|
return "\n".join(lines)
|
|
174
180
|
|
|
175
181
|
|
|
182
|
+
def format_pending_permission(data: dict) -> str:
|
|
183
|
+
"""格式化工具权限询问通知"""
|
|
184
|
+
session_id = data.get("session_id", "unknown")[:8]
|
|
185
|
+
tools = data.get("tools", [])
|
|
186
|
+
|
|
187
|
+
lines = [
|
|
188
|
+
"⏳ <b>Claude Code 等待权限确认</b>",
|
|
189
|
+
"",
|
|
190
|
+
f"📌 Session: <code>{session_id}</code>",
|
|
191
|
+
]
|
|
192
|
+
|
|
193
|
+
for i, tool in enumerate(tools, 1):
|
|
194
|
+
name = tool.get("name", "unknown")
|
|
195
|
+
description = tool.get("description", "")
|
|
196
|
+
tool_input = tool.get("input", {})
|
|
197
|
+
|
|
198
|
+
lines.append("")
|
|
199
|
+
lines.append(f"🔧 <b>工具 {i}:</b> {escape_html(name)}")
|
|
200
|
+
|
|
201
|
+
if description:
|
|
202
|
+
lines.append(f"📝 {escape_html(description)}")
|
|
203
|
+
|
|
204
|
+
if tool_input:
|
|
205
|
+
lines.append("<b>参数:</b>")
|
|
206
|
+
for key, value in tool_input.items():
|
|
207
|
+
value_str = str(value)
|
|
208
|
+
if len(value_str) > 100:
|
|
209
|
+
value_str = value_str[:100] + "..."
|
|
210
|
+
lines.append(f" • {key}: {escape_html(value_str)}")
|
|
211
|
+
|
|
212
|
+
return "\n".join(lines)
|
|
213
|
+
|
|
214
|
+
|
|
176
215
|
# ============================================================================
|
|
177
216
|
# 主循环
|
|
178
217
|
# ============================================================================
|
|
@@ -201,12 +240,26 @@ def process_event(line: str) -> Optional[str]:
|
|
|
201
240
|
return format_user_question(data)
|
|
202
241
|
elif status == "ERROR_STOP" and NOTIFY_ON_ERROR:
|
|
203
242
|
return format_error(data)
|
|
243
|
+
elif status == "PENDING_PERMISSION" and NOTIFY_ON_PENDING_PERMISSION:
|
|
244
|
+
return format_pending_permission(data)
|
|
204
245
|
|
|
205
246
|
return None
|
|
206
247
|
|
|
207
248
|
|
|
208
249
|
def main():
|
|
209
250
|
"""主循环 - 从 stdin 读取 JSON 行并发送通知"""
|
|
251
|
+
# 检查必需的凭证
|
|
252
|
+
missing = []
|
|
253
|
+
if not BOT_TOKEN:
|
|
254
|
+
missing.append("TELEGRAM_BOT_TOKEN")
|
|
255
|
+
if not CHAT_ID:
|
|
256
|
+
missing.append("TELEGRAM_CHAT_ID")
|
|
257
|
+
|
|
258
|
+
if missing:
|
|
259
|
+
print(f"[ERROR] Missing required environment variables: {', '.join(missing)}", file=sys.stderr)
|
|
260
|
+
print("[ERROR] Please set these in your .env file or environment", file=sys.stderr)
|
|
261
|
+
sys.exit(1)
|
|
262
|
+
|
|
210
263
|
print("[INFO] Telegram Notifier started", file=sys.stderr)
|
|
211
264
|
print(f"[INFO] Chat ID: {CHAT_ID}", file=sys.stderr)
|
|
212
265
|
print(f"[INFO] Proxy: {PROXY}", file=sys.stderr)
|
|
@@ -21,12 +21,20 @@ def get_translations_dir() -> Path:
|
|
|
21
21
|
Returns:
|
|
22
22
|
Path to templates/translations directory
|
|
23
23
|
"""
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
# Path 1: Wheel install - templates packaged inside codexspec package
|
|
25
|
+
# __file__ = site-packages/codexspec/translator.py
|
|
26
|
+
# parent / "templates" / "translations" = site-packages/codexspec/templates/translations
|
|
27
|
+
installed_translations = Path(__file__).parent / "templates" / "translations"
|
|
28
|
+
if installed_translations.exists():
|
|
29
|
+
return installed_translations
|
|
30
|
+
|
|
31
|
+
# Path 2: Development/editable install - templates in project root
|
|
32
|
+
dev_translations = Path(__file__).parent.parent.parent / "templates" / "translations"
|
|
33
|
+
if dev_translations.exists():
|
|
34
|
+
return dev_translations
|
|
35
|
+
|
|
36
|
+
# Path 3: Fallback - return the installed path (for error messages)
|
|
37
|
+
return installed_translations
|
|
30
38
|
|
|
31
39
|
|
|
32
40
|
def get_translation_cache_path(language: str) -> Path:
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "Projektverfassung aus interaktiven oder bereitgestellten Prinzipien erstellen oder aktualisieren und sicherstellen, dass alle abhängigen Vorlagen synchronisiert bleiben.",
|
|
4
|
-
"argument-hint": "[quick|deep | Projektprinzipien] (optional)\n\nDieser Befehl erstellt/aktualisiert die Projektverfassung unter .codexspec/memory/constitution.md.\n\nDrei Verwendungsmöglichkeiten:\n1. Ohne Argumente → Interaktiver Modus: Explorationstiefe wählen (quick/deep)\n2. quick → Leichte Exploration: Konfigurationsdateien + README + Haupteinstiegspunkte (~5-10 Dateien)\n3. deep → Vollständige Exploration: alles oben + Quellcode-Analyse + Architektur-Patterns\n4. <Beschreibung> → Exploration überspringen, Prinzipien direkt verwenden"
|
|
4
|
+
"argument-hint": "[quick|deep | Projektprinzipien] (optional)\n\nDieser Befehl erstellt/aktualisiert die Projektverfassung unter .codexspec/memory/constitution.md.\n\nDrei Verwendungsmöglichkeiten:\n1. Ohne Argumente → Interaktiver Modus: Explorationstiefe wählen (quick/deep)\n2. quick → Leichte Exploration: Konfigurationsdateien + README + Haupteinstiegspunkte (~5-10 Dateien)\n3. deep → Vollständige Exploration: alles oben + Quellcode-Analyse + Architektur-Patterns\n4. <Beschreibung> → Exploration überspringen, Prinzipien direkt verwenden\n\nBeispiele:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI Backend mit pytest, Fokus auf Typsicherheit"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "Anforderungen durch interaktives Q&A klären und erste Ideen erkunden und verfeinern"
|
|
7
|
+
"description": "Anforderungen durch interaktives Q&A klären und erste Ideen erkunden und verfeinern",
|
|
8
|
+
"argument-hint": "Beschreiben Sie Ihre ursprüngliche Idee oder Anforderung"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "Unklare Bereiche in der Funktionsspezifikation durch gezielte Fragen vor der technischen Planung identifizieren"
|
|
11
|
+
"description": "Unklare Bereiche in der Funktionsspezifikation durch gezielte Fragen vor der technischen Planung identifizieren",
|
|
12
|
+
"argument-hint": "[pfad_zu_spec.md] (optional, standardmäßig .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "Nicht-destruktive Konsistenz- und Qualitätsanalyse zwischen Artefakten spec.md, plan.md und tasks.md durchführen"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "spec.md-Dokument generieren nachdem Anforderungen geklärt sind"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "Funktionsspezifikation in technischen Implementierungsplan umwandeln"
|
|
24
|
+
"description": "Funktionsspezifikation in technischen Implementierungsplan umwandeln",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "Technischen Implementierungsplan in ausführbare Aufgaben zerlegen"
|
|
28
|
+
"description": "Technischen Implementierungsplan in ausführbare Aufgaben zerlegen",
|
|
29
|
+
"argument-hint": "[spec.md_pfad plan.md_pfad] (optional, standardmäßig .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "Vollständigkeit, Klarheit und Qualität der Funktionsspezifikation überprüfen und validieren"
|
|
32
|
+
"description": "Vollständigkeit, Klarheit und Qualität der Funktionsspezifikation überprüfen und validieren",
|
|
33
|
+
"argument-hint": "[spec.md_pfad] (optional, standardmäßig .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "Machbarkeit und Konsistenz des technischen Implementierungsplans überprüfen und validieren"
|
|
36
|
+
"description": "Machbarkeit und Konsistenz des technischen Implementierungsplans überprüfen und validieren",
|
|
37
|
+
"argument-hint": "[plan.md_pfad] (optional, standardmäßig .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "Vollständigkeit, Reihenfolge und TDD-Konformität der Aufgabenaufschlüsselung überprüfen und validieren"
|
|
40
|
+
"description": "Vollständigkeit, Reihenfolge und TDD-Konformität der Aufgabenaufschlüsselung überprüfen und validieren",
|
|
41
|
+
"argument-hint": "[tasks.md_pfad] (optional, standardmäßig .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "Implementierungsaufgaben mit bedingtem TDD-Workflow ausführen (TDD für Code, direkte Implementierung für Docs/Config)"
|
|
44
|
+
"description": "Implementierungsaufgaben mit bedingtem TDD-Workflow ausführen (TDD für Code, direkte Implementierung für Docs/Config)",
|
|
45
|
+
"argument-hint": "[tasks_pfad] | [spec_pfad plan_pfad tasks_pfad]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "Bestehende Aufgaben in umsetzbare GitHub Issues für diese Funktionalität umwandeln"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "Conventional Commits konforme Commit-Nachrichten basierend auf Git-Status und Sitzungskontext generieren und ausführen"
|
|
51
|
+
"description": "Conventional Commits konforme Commit-Nachrichten basierend auf Git-Status und Sitzungskontext generieren und ausführen",
|
|
52
|
+
"argument-hint": "[-p] -p verwenden um nur die Nachricht ohne Commit voranzuzeigen"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "Gestagte Git-Änderungen analysieren und Conventional Commits konforme Commit-Nachricht generieren"
|
|
55
|
+
"description": "Gestagte Git-Änderungen analysieren und Conventional Commits konforme Commit-Nachricht generieren",
|
|
56
|
+
"argument-hint": "[-p] -p verwenden um nur die Nachricht ohne Commit voranzuzeigen"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "Strukturierte Pull Request (GitHub) oder Merge Request (GitLab) Beschreibung basierend auf git diff und optionaler spec.md-Integration generieren"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "Semantische Konsistenz und Qualität mehrsprachiger Dokumentation prüfen"
|
|
62
|
+
"description": "Semantische Konsistenz und Qualität mehrsprachiger Dokumentation prüfen",
|
|
63
|
+
"argument-hint": "[quelldatei] [--lang <sprache>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "Projektdokumentation in die angegebene Sprache übersetzen"
|
|
66
|
+
"description": "Projektdokumentation in die angegebene Sprache übersetzen",
|
|
67
|
+
"argument-hint": "--lang <sprachcodes> (z.B. 'zh,ja,ko') oder 'all' für alle Sprachen"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "Crear o actualizar la constitución del proyecto a partir de entradas interactivas o principios proporcionados, asegurando que todas las plantillas dependientes permanezcan sincronizadas.",
|
|
4
|
-
"argument-hint": "[quick|deep | principios del proyecto] (opcional)\n\nEste comando crea/actualiza la constitución del proyecto en .codexspec/memory/constitution.md.\n\nTres formas de uso:\n1. Sin argumentos → Modo interactivo: elegir profundidad de exploración (quick/deep)\n2. quick → Exploración ligera: archivos de configuración + README + puntos de entrada principales (~5-10 archivos)\n3. deep → Exploración completa: todo lo anterior + análisis de código fuente + patrones de arquitectura\n4. <descripción> → Omitir exploración, usar tus principios directamente"
|
|
4
|
+
"argument-hint": "[quick|deep | principios del proyecto] (opcional)\n\nEste comando crea/actualiza la constitución del proyecto en .codexspec/memory/constitution.md.\n\nTres formas de uso:\n1. Sin argumentos → Modo interactivo: elegir profundidad de exploración (quick/deep)\n2. quick → Exploración ligera: archivos de configuración + README + puntos de entrada principales (~5-10 archivos)\n3. deep → Exploración completa: todo lo anterior + análisis de código fuente + patrones de arquitectura\n4. <descripción> → Omitir exploración, usar tus principios directamente\n\nEjemplos:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI backend con pytest, enfocado en seguridad de tipos"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "Aclarar requisitos mediante Q&A interactivo para explorar y refinar ideas iniciales"
|
|
7
|
+
"description": "Aclarar requisitos mediante Q&A interactivo para explorar y refinar ideas iniciales",
|
|
8
|
+
"argument-hint": "Describe tu idea inicial o requisito"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "Identificar áreas poco claras en la especificación funcional mediante preguntas dirigidas antes de la planificación técnica"
|
|
11
|
+
"description": "Identificar áreas poco claras en la especificación funcional mediante preguntas dirigidas antes de la planificación técnica",
|
|
12
|
+
"argument-hint": "[ruta_a_spec.md] (opcional, por defecto .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "Realizar análisis no destructivo de consistencia y calidad entre artefactos spec.md, plan.md y tasks.md"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "Generar documento spec.md después de que los requisitos estén claros"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "Convertir especificación funcional en plan de implementación técnica"
|
|
24
|
+
"description": "Convertir especificación funcional en plan de implementación técnica",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "Descomponer plan de implementación técnica en tareas ejecutables"
|
|
28
|
+
"description": "Descomponer plan de implementación técnica en tareas ejecutables",
|
|
29
|
+
"argument-hint": "[ruta_a_spec.md ruta_a_plan.md] (opcional, por defecto .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "Revisar y validar completitud, claridad y calidad de la especificación funcional"
|
|
32
|
+
"description": "Revisar y validar completitud, claridad y calidad de la especificación funcional",
|
|
33
|
+
"argument-hint": "[ruta_a_spec.md] (opcional, por defecto .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "Revisar y validar viabilidad y consistencia del plan de implementación técnica"
|
|
36
|
+
"description": "Revisar y validar viabilidad y consistencia del plan de implementación técnica",
|
|
37
|
+
"argument-hint": "[ruta_a_plan.md] (opcional, por defecto .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "Revisar y validar completitud, orden y cumplimiento TDD de la descomposición de tareas"
|
|
40
|
+
"description": "Revisar y validar completitud, orden y cumplimiento TDD de la descomposición de tareas",
|
|
41
|
+
"argument-hint": "[ruta_a_tasks.md] (opcional, por defecto .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "Ejecutar tareas de implementación con flujo de trabajo TDD condicional (TDD para código, implementación directa para docs/config)"
|
|
44
|
+
"description": "Ejecutar tareas de implementación con flujo de trabajo TDD condicional (TDD para código, implementación directa para docs/config)",
|
|
45
|
+
"argument-hint": "[ruta_tasks] | [ruta_spec ruta_plan ruta_tasks]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "Convertir tareas existentes en GitHub Issues accionables para esta funcionalidad"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "Generar y ejecutar mensajes de commit conformes a Conventional Commits basados en estado git y contexto de sesión"
|
|
51
|
+
"description": "Generar y ejecutar mensajes de commit conformes a Conventional Commits basados en estado git y contexto de sesión",
|
|
52
|
+
"argument-hint": "[-p] Usa -p para solo previsualizar el mensaje sin hacer commit"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "Analizar cambios git preparados y generar mensaje de commit conforme a Conventional Commits"
|
|
55
|
+
"description": "Analizar cambios git preparados y generar mensaje de commit conforme a Conventional Commits",
|
|
56
|
+
"argument-hint": "[-p] Usa -p para solo previsualizar el mensaje sin hacer commit"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "Generar descripción estructurada de Pull Request (GitHub) o Merge Request (GitLab) basada en git diff e integración opcional de spec.md"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "Verificar consistencia semántica y calidad de documentación multilingüe"
|
|
62
|
+
"description": "Verificar consistencia semántica y calidad de documentación multilingüe",
|
|
63
|
+
"argument-hint": "[archivo_fuente] [--lang <idioma>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "Traducir documentación del proyecto al idioma especificado"
|
|
66
|
+
"description": "Traducir documentación del proyecto al idioma especificado",
|
|
67
|
+
"argument-hint": "--lang <códigos_idioma> (ej: 'zh,ja,ko') o 'all' para todos los idiomas"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "Créer ou mettre à jour la constitution du projet à partir d'entrées interactives ou de principes fournis, en garantissant la synchronisation de tous les modèles dépendants.",
|
|
4
|
-
"argument-hint": "[quick|deep | principes du projet] (optionnel)\n\nCette commande crée/met à jour la constitution du projet dans .codexspec/memory/constitution.md.\n\nTrois modes d'utilisation :\n1. Sans arguments → Mode interactif : choisir la profondeur d'exploration (quick/deep)\n2. quick → Exploration légère : fichiers de configuration + README + points d'entrée principaux (~5-10 fichiers)\n3. deep → Exploration complète : tout ce qui précède + analyse du code source + patterns d'architecture\n4. <description> → Ignorer l'exploration, utiliser vos principes directement"
|
|
4
|
+
"argument-hint": "[quick|deep | principes du projet] (optionnel)\n\nCette commande crée/met à jour la constitution du projet dans .codexspec/memory/constitution.md.\n\nTrois modes d'utilisation :\n1. Sans arguments → Mode interactif : choisir la profondeur d'exploration (quick/deep)\n2. quick → Exploration légère : fichiers de configuration + README + points d'entrée principaux (~5-10 fichiers)\n3. deep → Exploration complète : tout ce qui précède + analyse du code source + patterns d'architecture\n4. <description> → Ignorer l'exploration, utiliser vos principes directement\n\nExemples :\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI backend avec pytest, axé sur la sécurité des types"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "Clarifier les exigences via Q&R interactif pour explorer et affiner les idées initiales"
|
|
7
|
+
"description": "Clarifier les exigences via Q&R interactif pour explorer et affiner les idées initiales",
|
|
8
|
+
"argument-hint": "Décrivez votre idée initiale ou vos exigences"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "Identifier les zones floues dans la spécification fonctionnelle via des questions ciblées avant la planification technique"
|
|
11
|
+
"description": "Identifier les zones floues dans la spécification fonctionnelle via des questions ciblées avant la planification technique",
|
|
12
|
+
"argument-hint": "[chemin_vers_spec.md] (optionnel, par défaut .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "Effectuer une analyse non destructive de cohérence et qualité entre artefacts spec.md, plan.md et tasks.md"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "Générer le document spec.md une fois les exigences clarifiées"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "Convertir la spécification fonctionnelle en plan d'implémentation technique"
|
|
24
|
+
"description": "Convertir la spécification fonctionnelle en plan d'implémentation technique",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "Décomposer le plan d'implémentation technique en tâches exécutables"
|
|
28
|
+
"description": "Décomposer le plan d'implémentation technique en tâches exécutables",
|
|
29
|
+
"argument-hint": "[chemin_spec.md chemin_plan.md] (optionnel, par défaut .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "Réviser et valider complétude, clarté et qualité de la spécification fonctionnelle"
|
|
32
|
+
"description": "Réviser et valider complétude, clarté et qualité de la spécification fonctionnelle",
|
|
33
|
+
"argument-hint": "[chemin_spec.md] (optionnel, par défaut .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "Réviser et valider faisabilité et cohérence du plan d'implémentation technique"
|
|
36
|
+
"description": "Réviser et valider faisabilité et cohérence du plan d'implémentation technique",
|
|
37
|
+
"argument-hint": "[chemin_plan.md] (optionnel, par défaut .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "Réviser et valider complétude, ordonnancement et conformité TDD de la décomposition des tâches"
|
|
40
|
+
"description": "Réviser et valider complétude, ordonnancement et conformité TDD de la décomposition des tâches",
|
|
41
|
+
"argument-hint": "[chemin_tasks.md] (optionnel, par défaut .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "Exécuter les tâches d'implémentation avec workflow TDD conditionnel (TDD pour code, implémentation directe pour docs/config)"
|
|
44
|
+
"description": "Exécuter les tâches d'implémentation avec workflow TDD conditionnel (TDD pour code, implémentation directe pour docs/config)",
|
|
45
|
+
"argument-hint": "[chemin_tasks] | [chemin_spec chemin_plan chemin_tasks]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "Convertir les tâches existantes en GitHub Issues actionnables pour cette fonctionnalité"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "Générer et exécuter des messages de commit conformes à Conventional Commits basés sur l'état git et le contexte de session"
|
|
51
|
+
"description": "Générer et exécuter des messages de commit conformes à Conventional Commits basés sur l'état git et le contexte de session",
|
|
52
|
+
"argument-hint": "[-p] Utilisez -p pour seulement prévisualiser le message sans commettre"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "Analyser les changements git stagés et générer un message de commit conforme à Conventional Commits"
|
|
55
|
+
"description": "Analyser les changements git stagés et générer un message de commit conforme à Conventional Commits",
|
|
56
|
+
"argument-hint": "[-p] Utilisez -p pour seulement prévisualiser le message sans commettre"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "Générer une description structurée de Pull Request (GitHub) ou Merge Request (GitLab) basée sur git diff et intégration optionnelle de spec.md"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "Vérifier la cohérence sémantique et la qualité de la documentation multilingue"
|
|
62
|
+
"description": "Vérifier la cohérence sémantique et la qualité de la documentation multilingue",
|
|
63
|
+
"argument-hint": "[fichier_source] [--lang <langue>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "Traduire la documentation du projet dans la langue spécifiée"
|
|
66
|
+
"description": "Traduire la documentation du projet dans la langue spécifiée",
|
|
67
|
+
"argument-hint": "--lang <codes_langue> (ex: 'zh,ja,ko') ou 'all' pour toutes les langues"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "対話型または提供された原則入力からプロジェクト憲法を作成または更新し、依存テンプレートの同期を保ちます。",
|
|
4
|
-
"argument-hint": "[quick|deep | プロジェクト原則] (オプション)\n\nこのコマンドは .codexspec/memory/constitution.md にプロジェクト憲法を作成/更新します。\n\n3つの使用方法:\n1. 引数なし → 対話モード:探索深度を選択 (quick/deep)\n2. quick → 軽量探索:設定ファイル + README + コアエントリーポイント (~5-10ファイル)\n3. deep → 完全探索:上記 + ソースコード分析 + アーキテクチャパターン\n4. <説明> →
|
|
4
|
+
"argument-hint": "[quick|deep | プロジェクト原則] (オプション)\n\nこのコマンドは .codexspec/memory/constitution.md にプロジェクト憲法を作成/更新します。\n\n3つの使用方法:\n1. 引数なし → 対話モード:探索深度を選択 (quick/deep)\n2. quick → 軽量探索:設定ファイル + README + コアエントリーポイント (~5-10ファイル)\n3. deep → 完全探索:上記 + ソースコード分析 + アーキテクチャパターン\n4. <説明> → 探索をスキップし、あなたの原則を直接使用\n\n例:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI バックエンドで pytest 使用、型安全性重視"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "対話型Q&Aを通じて要件を明確化し、初期アイデアを探索・洗練"
|
|
7
|
+
"description": "対話型Q&Aを通じて要件を明確化し、初期アイデアを探索・洗練",
|
|
8
|
+
"argument-hint": "初期アイデアや要件を記述してください"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "技術計画前にターゲットを絞った質問で機能仕様の不明確な領域を特定"
|
|
11
|
+
"description": "技術計画前にターゲットを絞った質問で機能仕様の不明確な領域を特定",
|
|
12
|
+
"argument-hint": "[spec.md へのパス] (オプション、デフォルトは .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "spec.md、plan.md、tasks.md間の整合性と品質を非破壊的に分析"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "要件が明確になった後にspec.mdドキュメントを生成"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "機能仕様を技術実装計画に変換"
|
|
24
|
+
"description": "機能仕様を技術実装計画に変換",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "技術実装計画を実行可能なタスクに分解"
|
|
28
|
+
"description": "技術実装計画を実行可能なタスクに分解",
|
|
29
|
+
"argument-hint": "[spec.md へのパス plan.md へのパス] (オプション、デフォルトは .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "機能仕様の完全性、明確性、品質をレビュー・検証"
|
|
32
|
+
"description": "機能仕様の完全性、明確性、品質をレビュー・検証",
|
|
33
|
+
"argument-hint": "[spec.md へのパス] (オプション、デフォルトは .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "技術実装計画の実現可能性と整合性をレビュー・検証"
|
|
36
|
+
"description": "技術実装計画の実現可能性と整合性をレビュー・検証",
|
|
37
|
+
"argument-hint": "[plan.md へのパス] (オプション、デフォルトは .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "タスク分解の完全性、順序、TDD準拠をレビュー・検証"
|
|
40
|
+
"description": "タスク分解の完全性、順序、TDD準拠をレビュー・検証",
|
|
41
|
+
"argument-hint": "[tasks.md へのパス] (オプション、デフォルトは .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "条件付きTDDワークフローで実装タスクを実行(コードはTDD、ドキュメント/設定は直接実装)"
|
|
44
|
+
"description": "条件付きTDDワークフローで実装タスクを実行(コードはTDD、ドキュメント/設定は直接実装)",
|
|
45
|
+
"argument-hint": "[tasks へのパス] | [spec へのパス plan へのパス tasks へのパス]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "既存のタスクをこの機能の実行可能なGitHub Issuesに変換"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "gitステータスとセッションコンテキストに基づいてConventional Commits準拠のコミットメッセージを生成・実行"
|
|
51
|
+
"description": "gitステータスとセッションコンテキストに基づいてConventional Commits準拠のコミットメッセージを生成・実行",
|
|
52
|
+
"argument-hint": "[-p] -p を使用するとコミットせずにメッセージをプレビューのみ"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "ステージングされたgit変更を分析し、Conventional Commits準拠のコミットメッセージを生成"
|
|
55
|
+
"description": "ステージングされたgit変更を分析し、Conventional Commits準拠のコミットメッセージを生成",
|
|
56
|
+
"argument-hint": "[-p] -p を使用するとコミットせずにメッセージをプレビューのみ"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "git diffとオプションのspec.md統合に基づいて構造化されたPull Request (GitHub) またはMerge Request (GitLab) 説明を生成"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "多言語ドキュメントの意味的一貫性と品質をチェック"
|
|
62
|
+
"description": "多言語ドキュメントの意味的一貫性と品質をチェック",
|
|
63
|
+
"argument-hint": "[ソースファイル] [--lang <言語>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "プロジェクトドキュメントを指定言語に翻訳"
|
|
66
|
+
"description": "プロジェクトドキュメントを指定言語に翻訳",
|
|
67
|
+
"argument-hint": "--lang <言語コード> (例: 'zh,ja,ko') または 'all' ですべての言語"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "대화형 또는 제공된 원칙 입력에서 프로젝트 헌법을 생성하거나 업데이트하며, 모든 종속 템플릿의 동기화를 유지합니다.",
|
|
4
|
-
"argument-hint": "[quick|deep | 프로젝트 원칙] (선택사항)\n\n이 명령은 .codexspec/memory/constitution.md에 프로젝트 헌법을 생성/업데이트합니다.\n\n세 가지 사용 방법:\n1. 인수 없음 → 대화형 모드: 탐색 깊이 선택 (quick/deep)\n2. quick → 가벼운 탐색: 설정 파일 + README + 핵심 진입점 (~5-10개 파일)\n3. deep → 전체 탐색: 위 내용 + 소스 코드 분석 + 아키텍처 패턴\n4. <설명> → 탐색 건너뛰기, 원칙 직접
|
|
4
|
+
"argument-hint": "[quick|deep | 프로젝트 원칙] (선택사항)\n\n이 명령은 .codexspec/memory/constitution.md에 프로젝트 헌법을 생성/업데이트합니다.\n\n세 가지 사용 방법:\n1. 인수 없음 → 대화형 모드: 탐색 깊이 선택 (quick/deep)\n2. quick → 가벼운 탐색: 설정 파일 + README + 핵심 진입점 (~5-10개 파일)\n3. deep → 전체 탐색: 위 내용 + 소스 코드 분석 + 아키텍처 패턴\n4. <설명> → 탐색 건너뛰기, 원칙 직접 사용\n\n예시:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI 백엔드에서 pytest 사용, 타입 안전성 중시"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "대화형 Q&A를 통해 요구사항을 명확히 하고 초기 아이디어를 탐색 및 정제"
|
|
7
|
+
"description": "대화형 Q&A를 통해 요구사항을 명확히 하고 초기 아이디어를 탐색 및 정제",
|
|
8
|
+
"argument-hint": "초기 아이디어나 요구사항을 설명해 주세요"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "기술 계획 전에 대상화된 질문으로 기능 사양의 불명확한 영역 식별"
|
|
11
|
+
"description": "기술 계획 전에 대상화된 질문으로 기능 사양의 불명확한 영역 식별",
|
|
12
|
+
"argument-hint": "[spec.md 경로] (선택사항, 기본값 .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "spec.md, plan.md, tasks.md 간의 일관성과 품질을 비파괴적으로 분석"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "요구사항이 명확해진 후 spec.md 문서 생성"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "기능 사양을 기술 구현 계획으로 변환"
|
|
24
|
+
"description": "기능 사양을 기술 구현 계획으로 변환",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "기술 구현 계획을 실행 가능한 작업으로 분해"
|
|
28
|
+
"description": "기술 구현 계획을 실행 가능한 작업으로 분해",
|
|
29
|
+
"argument-hint": "[spec.md 경로 plan.md 경로] (선택사항, 기본값 .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "기능 사양의 완전성, 명확성, 품질 검토 및 검증"
|
|
32
|
+
"description": "기능 사양의 완전성, 명확성, 품질 검토 및 검증",
|
|
33
|
+
"argument-hint": "[spec.md 경로] (선택사항, 기본값 .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "기술 구현 계획의 실현 가능성과 일관성 검토 및 검증"
|
|
36
|
+
"description": "기술 구현 계획의 실현 가능성과 일관성 검토 및 검증",
|
|
37
|
+
"argument-hint": "[plan.md 경로] (선택사항, 기본값 .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "작업 분해의 완전성, 순서, TDD 준수 검토 및 검증"
|
|
40
|
+
"description": "작업 분해의 완전성, 순서, TDD 준수 검토 및 검증",
|
|
41
|
+
"argument-hint": "[tasks.md 경로] (선택사항, 기본값 .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "조건부 TDD 워크플로로 구현 작업 실행 (코드는 TDD, 문서/구성은 직접 구현)"
|
|
44
|
+
"description": "조건부 TDD 워크플로로 구현 작업 실행 (코드는 TDD, 문서/구성은 직접 구현)",
|
|
45
|
+
"argument-hint": "[tasks 경로] | [spec 경로 plan 경로 tasks 경로]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "기존 작업을 이 기능에 대한 실행 가능한 GitHub Issues로 변환"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "git 상태와 세션 컨텍스트를 기반으로 Conventional Commits 준수 커밋 메시지 생성 및 실행"
|
|
51
|
+
"description": "git 상태와 세션 컨텍스트를 기반으로 Conventional Commits 준수 커밋 메시지 생성 및 실행",
|
|
52
|
+
"argument-hint": "[-p] -p를 사용하면 커밋하지 않고 메시지만 미리보기"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "스테이징된 git 변경 사항을 분석하고 Conventional Commits 준수 커밋 메시지 생성"
|
|
55
|
+
"description": "스테이징된 git 변경 사항을 분석하고 Conventional Commits 준수 커밋 메시지 생성",
|
|
56
|
+
"argument-hint": "[-p] -p를 사용하면 커밋하지 않고 메시지만 미리보기"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "git diff와 선택적 spec.md 통합을 기반으로 구조화된 Pull Request (GitHub) 또는 Merge Request (GitLab) 설명 생성"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "다국어 문서의 의미적 일관성과 품질 검사"
|
|
62
|
+
"description": "다국어 문서의 의미적 일관성과 품질 검사",
|
|
63
|
+
"argument-hint": "[소스_파일] [--lang <언어>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "프로젝트 문서를 지정된 언어로 번역"
|
|
66
|
+
"description": "프로젝트 문서를 지정된 언어로 번역",
|
|
67
|
+
"argument-hint": "--lang <언어_코드> (예: 'zh,ja,ko') 또는 'all'로 모든 언어"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"constitution": {
|
|
3
3
|
"description": "Criar ou atualizar a constituição do projeto a partir de entradas interativas ou princípios fornecidos, garantindo que todos os modelos dependentes permaneçam sincronizados.",
|
|
4
|
-
"argument-hint": "[quick|deep | princípios do projeto] (opcional)\n\nEste comando cria/atualiza a constituição do projeto em .codexspec/memory/constitution.md.\n\nTrês formas de uso:\n1. Sem argumentos → Modo interativo: escolher profundidade de exploração (quick/deep)\n2. quick → Exploração leve: arquivos de configuração + README + pontos de entrada principais (~5-10 arquivos)\n3. deep → Exploração completa: tudo acima + análise de código fonte + padrões de arquitetura\n4. <descrição> → Pular exploração, usar seus princípios diretamente"
|
|
4
|
+
"argument-hint": "[quick|deep | princípios do projeto] (opcional)\n\nEste comando cria/atualiza a constituição do projeto em .codexspec/memory/constitution.md.\n\nTrês formas de uso:\n1. Sem argumentos → Modo interativo: escolher profundidade de exploração (quick/deep)\n2. quick → Exploração leve: arquivos de configuração + README + pontos de entrada principais (~5-10 arquivos)\n3. deep → Exploração completa: tudo acima + análise de código fonte + padrões de arquitetura\n4. <descrição> → Pular exploração, usar seus princípios diretamente\n\nExemplos:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI backend com pytest, focado em segurança de tipos"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "Esclarecer requisitos através de Q&A interativo para explorar e refinar ideias iniciais"
|
|
7
|
+
"description": "Esclarecer requisitos através de Q&A interativo para explorar e refinar ideias iniciais",
|
|
8
|
+
"argument-hint": "Descreva sua ideia inicial ou requisito"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "Identificar áreas pouco claras na especificação funcional através de perguntas direcionadas antes do planejamento técnico"
|
|
11
|
+
"description": "Identificar áreas pouco claras na especificação funcional através de perguntas direcionadas antes do planejamento técnico",
|
|
12
|
+
"argument-hint": "[caminho_para_spec.md] (opcional, padrão .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "Realizar análise não destrutiva de consistência e qualidade entre artefatos spec.md, plan.md e tasks.md"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "Gerar documento spec.md após os requisitos estarem claros"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "Converter especificação funcional em plano de implementação técnica"
|
|
24
|
+
"description": "Converter especificação funcional em plano de implementação técnica",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "Decompor plano de implementação técnica em tarefas executáveis"
|
|
28
|
+
"description": "Decompor plano de implementação técnica em tarefas executáveis",
|
|
29
|
+
"argument-hint": "[caminho_spec.md caminho_plan.md] (opcional, padrão .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "Revisar e validar completude, clareza e qualidade da especificação funcional"
|
|
32
|
+
"description": "Revisar e validar completude, clareza e qualidade da especificação funcional",
|
|
33
|
+
"argument-hint": "[caminho_spec.md] (opcional, padrão .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "Revisar e validar viabilidade e consistência do plano de implementação técnica"
|
|
36
|
+
"description": "Revisar e validar viabilidade e consistência do plano de implementação técnica",
|
|
37
|
+
"argument-hint": "[caminho_plan.md] (opcional, padrão .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "Revisar e validar completude, ordenação e conformidade TDD da decomposição de tarefas"
|
|
40
|
+
"description": "Revisar e validar completude, ordenação e conformidade TDD da decomposição de tarefas",
|
|
41
|
+
"argument-hint": "[caminho_tasks.md] (opcional, padrão .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "Executar tarefas de implementação com workflow TDD condicional (TDD para código, implementação direta para docs/config)"
|
|
44
|
+
"description": "Executar tarefas de implementação com workflow TDD condicional (TDD para código, implementação direta para docs/config)",
|
|
45
|
+
"argument-hint": "[caminho_tasks] | [caminho_spec caminho_plan caminho_tasks]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "Converter tarefas existentes em GitHub Issues acionáveis para esta funcionalidade"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "Gerar e executar mensagens de commit em conformidade com Conventional Commits baseadas no estado git e contexto de sessão"
|
|
51
|
+
"description": "Gerar e executar mensagens de commit em conformidade com Conventional Commits baseadas no estado git e contexto de sessão",
|
|
52
|
+
"argument-hint": "[-p] Use -p para apenas visualizar a mensagem sem fazer commit"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "Analisar mudanças git preparadas e gerar mensagem de commit em conformidade com Conventional Commits"
|
|
55
|
+
"description": "Analisar mudanças git preparadas e gerar mensagem de commit em conformidade com Conventional Commits",
|
|
56
|
+
"argument-hint": "[-p] Use -p para apenas visualizar a mensagem sem fazer commit"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "Gerar descrição estruturada de Pull Request (GitHub) ou Merge Request (GitLab) baseada em git diff e integração opcional de spec.md"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "Verificar consistência semântica e qualidade de documentação multilíngue"
|
|
62
|
+
"description": "Verificar consistência semântica e qualidade de documentação multilíngue",
|
|
63
|
+
"argument-hint": "[arquivo_origem] [--lang <idioma>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "Traduzir documentação do projeto para o idioma especificado"
|
|
66
|
+
"description": "Traduzir documentação do projeto para o idioma especificado",
|
|
67
|
+
"argument-hint": "--lang <códigos_idioma> (ex: 'zh,ja,ko') ou 'all' para todos os idiomas"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
"argument-hint": "[quick|deep | 项目原则] (可选)\n\n此命令创建/更新位于 .codexspec/memory/constitution.md 的项目宪法。\n\n三种使用方式:\n1. 无参数 → 交互模式:选择探索深度 (quick/deep)\n2. quick → 轻量探索:配置文件 + README + 核心入口点 (~5-10 个文件)\n3. deep → 完整探索:以上内容 + 源代码分析 + 架构模式\n4. <描述> → 跳过探索,直接使用你的原则\n\n示例:\n /codexspec.constitution\n /codexspec.constitution quick\n /codexspec.constitution deep\n /codexspec.constitution Python FastAPI 后端使用 pytest,注重类型安全"
|
|
5
5
|
},
|
|
6
6
|
"specify": {
|
|
7
|
-
"description": "通过交互式问答澄清需求,探索和完善初始想法"
|
|
7
|
+
"description": "通过交互式问答澄清需求,探索和完善初始想法",
|
|
8
|
+
"argument-hint": "描述你的初始想法或需求"
|
|
8
9
|
},
|
|
9
10
|
"clarify": {
|
|
10
|
-
"description": "在技术规划前通过定向澄清问题识别功能规格中的不明确区域"
|
|
11
|
+
"description": "在技术规划前通过定向澄清问题识别功能规格中的不明确区域",
|
|
12
|
+
"argument-hint": "[spec.md 路径] (可选,默认为 .codexspec/specs/{feature-id}/)"
|
|
11
13
|
},
|
|
12
14
|
"analyze": {
|
|
13
15
|
"description": "对 spec.md、plan.md 和 tasks.md 执行非破坏性的跨工件一致性和质量分析"
|
|
@@ -19,39 +21,49 @@
|
|
|
19
21
|
"description": "需求明确后生成 spec.md 文档"
|
|
20
22
|
},
|
|
21
23
|
"spec-to-plan": {
|
|
22
|
-
"description": "将功能规格转换为技术实现计划"
|
|
24
|
+
"description": "将功能规格转换为技术实现计划",
|
|
25
|
+
"argument-hint": ".codexspec/specs/{feature-id}/spec.md"
|
|
23
26
|
},
|
|
24
27
|
"plan-to-tasks": {
|
|
25
|
-
"description": "将技术实现计划分解为可执行的任务"
|
|
28
|
+
"description": "将技术实现计划分解为可执行的任务",
|
|
29
|
+
"argument-hint": "[spec.md 路径 plan.md 路径] (可选,默认为 .codexspec/specs/{feature-id}/)"
|
|
26
30
|
},
|
|
27
31
|
"review-spec": {
|
|
28
|
-
"description": "审查和验证功能规格的完整性、清晰度和质量"
|
|
32
|
+
"description": "审查和验证功能规格的完整性、清晰度和质量",
|
|
33
|
+
"argument-hint": "[spec.md 路径] (可选,默认为 .codexspec/specs/{feature-id}/)"
|
|
29
34
|
},
|
|
30
35
|
"review-plan": {
|
|
31
|
-
"description": "审查和验证技术实现计划的可行性和一致性"
|
|
36
|
+
"description": "审查和验证技术实现计划的可行性和一致性",
|
|
37
|
+
"argument-hint": "[plan.md 路径] (可选,默认为 .codexspec/specs/{feature-id}/)"
|
|
32
38
|
},
|
|
33
39
|
"review-tasks": {
|
|
34
|
-
"description": "审查和验证任务分解的完整性、排序和 TDD 合规性"
|
|
40
|
+
"description": "审查和验证任务分解的完整性、排序和 TDD 合规性",
|
|
41
|
+
"argument-hint": "[tasks.md 路径] (可选,默认为 .codexspec/specs/{feature-id}/)"
|
|
35
42
|
},
|
|
36
43
|
"implement-tasks": {
|
|
37
|
-
"description": "执行实现任务,支持条件 TDD 工作流(代码使用 TDD,文档/配置直接实现)"
|
|
44
|
+
"description": "执行实现任务,支持条件 TDD 工作流(代码使用 TDD,文档/配置直接实现)",
|
|
45
|
+
"argument-hint": "[tasks 路径] | [spec 路径 plan 路径 tasks 路径]"
|
|
38
46
|
},
|
|
39
47
|
"tasks-to-issues": {
|
|
40
48
|
"description": "将现有任务转换为该功能的可操作 GitHub Issues"
|
|
41
49
|
},
|
|
42
50
|
"commit": {
|
|
43
|
-
"description": "基于 git 状态和会话上下文生成并执行符合 Conventional Commits 规范的提交信息"
|
|
51
|
+
"description": "基于 git 状态和会话上下文生成并执行符合 Conventional Commits 规范的提交信息",
|
|
52
|
+
"argument-hint": "[-p] 使用 -p 仅预览提交信息而不执行提交"
|
|
44
53
|
},
|
|
45
54
|
"commit-staged": {
|
|
46
|
-
"description": "分析暂存的 git 更改并生成符合 Conventional Commits 规范的提交信息"
|
|
55
|
+
"description": "分析暂存的 git 更改并生成符合 Conventional Commits 规范的提交信息",
|
|
56
|
+
"argument-hint": "[-p] 使用 -p 仅预览提交信息而不执行提交"
|
|
47
57
|
},
|
|
48
58
|
"pr": {
|
|
49
59
|
"description": "基于 git diff 和可选的 spec.md 集成生成结构化的 Pull Request (GitHub) 或 Merge Request (GitLab) 描述"
|
|
50
60
|
},
|
|
51
61
|
"check-i18n-semantics": {
|
|
52
|
-
"description": "检查多语言文档的语义一致性和质量"
|
|
62
|
+
"description": "检查多语言文档的语义一致性和质量",
|
|
63
|
+
"argument-hint": "[源文件] [--lang <语言>] [--strict]"
|
|
53
64
|
},
|
|
54
65
|
"translate-docs": {
|
|
55
|
-
"description": "翻译项目文档到指定语言"
|
|
66
|
+
"description": "翻译项目文档到指定语言",
|
|
67
|
+
"argument-hint": "--lang <语言代码> (如 'zh,ja,ko') 或 'all' 翻译所有语言"
|
|
56
68
|
}
|
|
57
69
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|