94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
![]() |
"""
|
|||
|
为workflow命令提供上下文信息
|
|||
|
|
|||
|
编写工作流实现代码需要的上下文:
|
|||
|
1. IDE Service接口定义
|
|||
|
2. ChatMark接口定义;
|
|||
|
3. 工作流命令列表;
|
|||
|
4. 工作流命令组织、实现规范;
|
|||
|
5. 基础可用的函数信息;
|
|||
|
"""
|
|||
|
|
|||
|
import os
|
|||
|
from typing import List
|
|||
|
|
|||
|
def load_file_in_user_scripts(filename: str) -> str:
|
|||
|
"""
|
|||
|
从用户脚本目录中加载文件内容
|
|||
|
"""
|
|||
|
user_path = os.path.expanduser("~/.chat/scripts")
|
|||
|
file_path = os.path.join(user_path, filename)
|
|||
|
with open(file_path, "r") as f:
|
|||
|
return f.read()
|
|||
|
|
|||
|
def load_local_file(filename: str) -> str:
|
|||
|
"""
|
|||
|
从当前脚本所在目录的相对目录加载文件内容
|
|||
|
"""
|
|||
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|||
|
file_path = os.path.join(script_dir, filename)
|
|||
|
with open(file_path, "r") as f:
|
|||
|
return f.read()
|
|||
|
|
|||
|
def load_existing_workflow_defines() -> str:
|
|||
|
""" 从user scripts目录遍历找到所有command.yml文件,并加载其内容 """
|
|||
|
merico_path = os.path.expanduser("~/.chat/scripts/merico")
|
|||
|
community_path = os.path.expanduser("~/.chat/scripts/community")
|
|||
|
custom_path = os.path.expanduser("~/.chat/scripts/custom")
|
|||
|
|
|||
|
root_paths = [merico_path]
|
|||
|
# 遍历community_path、custom_path下直接子目录,将其添加到root_paths作为下一步的根目录
|
|||
|
for path in [community_path, custom_path]:
|
|||
|
for root, dirs, files in os.walk(path):
|
|||
|
if root == path:
|
|||
|
root_paths.extend([os.path.join(root, d) for d in dirs])
|
|||
|
break
|
|||
|
|
|||
|
wrkflow_defines = []
|
|||
|
# 遍历所有根目录,对每个根目录进行递归遍历,找到所有command.yml文件,并加载其内容
|
|||
|
# 将目录名称与command.yml内容拼接成一个字符串,添加到wrkflow_defines列表中
|
|||
|
# 例如:~/.chat/scripts/merico/github/commit/command.yml被找到,那么拼接的字符串为:
|
|||
|
# 工作流命令/github.commit的定义:\n<command.yml内容>\n\n
|
|||
|
for root_path in root_paths:
|
|||
|
for root, dirs, files in os.walk(root_path):
|
|||
|
if "command.yml" in files:
|
|||
|
with open(os.path.join(root, "command.yml"), "r") as f:
|
|||
|
wrkflow_defines.append(f"工作流命令/{root[len(root_path)+1:].replace(os.sep, '.')}的定义:\n{f.read()}\n\n")
|
|||
|
return "\n".join(wrkflow_defines)
|
|||
|
|
|||
|
|
|||
|
CONTEXTS = f"""
|
|||
|
工作流开发需要的上下文信息:
|
|||
|
|
|||
|
|
|||
|
# IDE Service接口定义及使用示例
|
|||
|
IDE Service用于在工作流命令中访问与IDE相关的数据,以及调用IDE提供的功能。
|
|||
|
## IDEService接口定义
|
|||
|
接口定义:
|
|||
|
{load_file_in_user_scripts("lib/ide_service/service.py")}
|
|||
|
涉及类型定义:
|
|||
|
{load_file_in_user_scripts("lib/ide_service/types.py")}
|
|||
|
|
|||
|
## IDEService接口示例
|
|||
|
{load_local_file("ide_service_demo.py")}
|
|||
|
|
|||
|
|
|||
|
# ChatMark接口使用示例
|
|||
|
ChatMark用于在工作流命令中与用户交互,展示信息,获取用户输入。
|
|||
|
{load_file_in_user_scripts("lib/chatmark/chatmark_example/main.py")}
|
|||
|
ChatMark Form组件类似于HTML表单,用于组合多个组件,获取相关设置结果。
|
|||
|
|
|||
|
|
|||
|
# 工作流命令规范
|
|||
|
{load_local_file("workflow_guide.md")}
|
|||
|
|
|||
|
|
|||
|
# 已有工作流命令定义
|
|||
|
{load_existing_workflow_defines()}
|
|||
|
|
|||
|
|
|||
|
# 工作流内部函数定义
|
|||
|
{load_local_file("base_functions_guide.md")}
|
|||
|
|
|||
|
"""
|