Add new actions and settings for auto_command workflow
- Add new_file action for creating or replacing files. - Add run_shell action for running shell scripts. - Add run_shell_file action for running shell script files. - Add update_file action for replacing file content. - Add default command action settings for auto pattern.
This commit is contained in:
parent
63ea89387b
commit
2be4e52a0a
28
workflows/auto_command/action/new_document/_setting_.json
Normal file
28
workflows/auto_command/action/new_document/_setting_.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": "new_file",
|
||||
"description": "create new file or replace file with specified content",
|
||||
"type": [
|
||||
"*"
|
||||
],
|
||||
"args": [
|
||||
{
|
||||
"name": "fileName",
|
||||
"description": "target file name to create",
|
||||
"type": "string",
|
||||
"from": "content.fileName"
|
||||
},
|
||||
{
|
||||
"name": "content",
|
||||
"description": "content to write to file",
|
||||
"type": "string",
|
||||
"as": "file",
|
||||
"from": "content.content"
|
||||
}
|
||||
],
|
||||
"action": "new_file",
|
||||
"handler": [
|
||||
"cp",
|
||||
"${content}",
|
||||
"${fileName}"
|
||||
]
|
||||
}
|
19
workflows/auto_command/action/run_shell/_setting_.json
Normal file
19
workflows/auto_command/action/run_shell/_setting_.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "run_shell",
|
||||
"description": "run shell script",
|
||||
"type": [
|
||||
"shell-singleline"
|
||||
],
|
||||
"args": [
|
||||
{
|
||||
"name": "script",
|
||||
"description": "shell command to run, for example: [\"ls\", \"/tmp\"]",
|
||||
"type": "string",
|
||||
"from": "content.content"
|
||||
}
|
||||
],
|
||||
"action": "run_shell",
|
||||
"handler": [
|
||||
"${script}"
|
||||
]
|
||||
}
|
21
workflows/auto_command/action/run_shell_file/_setting_.json
Normal file
21
workflows/auto_command/action/run_shell_file/_setting_.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "run_shell",
|
||||
"description": "run shell script",
|
||||
"type": [
|
||||
"shell"
|
||||
],
|
||||
"args": [
|
||||
{
|
||||
"name": "script",
|
||||
"description": "shell script file to run",
|
||||
"type": "string",
|
||||
"as": "file",
|
||||
"from": "content.content"
|
||||
}
|
||||
],
|
||||
"action": "run_shell",
|
||||
"handler": [
|
||||
"bash",
|
||||
"${script}"
|
||||
]
|
||||
}
|
23
workflows/auto_command/action/update_file/_setting_.json
Normal file
23
workflows/auto_command/action/update_file/_setting_.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "update_file",
|
||||
"description": "replace selections of file with specified content",
|
||||
"type": ["update"],
|
||||
"args": [{
|
||||
"name": "fileName",
|
||||
"description": "target file name to update",
|
||||
"type": "string",
|
||||
"from": "content.fileName"
|
||||
}, {
|
||||
"name": "old_content",
|
||||
"description": "old content to replaced",
|
||||
"type": "string",
|
||||
"from": "content.content.old"
|
||||
}, {
|
||||
"name": "content",
|
||||
"description": "content to write to file",
|
||||
"type": "string",
|
||||
"from": "content.content.new"
|
||||
}],
|
||||
"action": "update_file",
|
||||
"handler": ["python", "${CurDir}/handler.py", "${fileName}", "${old_content}", "${content}"]
|
||||
}
|
40
workflows/auto_command/action/update_file/handler.py
Normal file
40
workflows/auto_command/action/update_file/handler.py
Normal file
@ -0,0 +1,40 @@
|
||||
import sys
|
||||
|
||||
def replace_text_in_file(fileName: str, old_content: str, newContent: str) -> None:
|
||||
"""
|
||||
Replace text in a file within the specified range with new content.
|
||||
|
||||
:param fileName: The name of the file to modify.
|
||||
:param startPos: The starting position of the range to replace.
|
||||
:param endPos: The ending position of the range to replace.
|
||||
:param newContent: The new content to replace the specified range with.
|
||||
"""
|
||||
with open(fileName, 'r') as file:
|
||||
content = file.read()
|
||||
|
||||
# how many times old_content occurs in content
|
||||
count = content.count(old_content)
|
||||
# if count is not 1, then we can't replace the text
|
||||
if count != 1:
|
||||
# output error message to stderr and exit
|
||||
print(f"Error: {old_content} occurs {count} times in {fileName}.", file=sys.stderr)
|
||||
exit(-1)
|
||||
|
||||
# replace old_content with new_content
|
||||
modified_content = content.replace(old_content, new_content)
|
||||
|
||||
with open(fileName, 'w') as file:
|
||||
file.write(modified_content)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
file_name = sys.argv[1]
|
||||
old_content = sys.argv[2]
|
||||
new_content = sys.argv[3]
|
||||
|
||||
replace_text_in_file(file_name, old_content, new_content)
|
||||
except Exception as e:
|
||||
print(e, file=sys.stderr)
|
||||
exit(-1)
|
||||
exit(0)
|
7
workflows/default/command/action/_setting_.json
Normal file
7
workflows/default/command/action/_setting_.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"pattern": "auto",
|
||||
"description": "Generate commands for the bot to execute",
|
||||
"message": "",
|
||||
"default": false,
|
||||
"instructions": ["./chat/action.instr"]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user