Merge ls, pwd and cd into a single 'filesystem' file
This commit is contained in:
@@ -1,27 +0,0 @@
|
|||||||
import os, strutils, base64, winim, strformat, sequtils
|
|
||||||
import ../types
|
|
||||||
|
|
||||||
proc taskCd*(task: Task): TaskResult =
|
|
||||||
|
|
||||||
let targetDirectory = task.args.join(" ").replace("\"", "").replace("'", "")
|
|
||||||
echo fmt"Changing current working directory to {targetDirectory}."
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get current working directory using GetCurrentDirectory
|
|
||||||
if SetCurrentDirectoryW(targetDirectory) == FALSE:
|
|
||||||
raise newException(OSError, fmt"Failed to change working directory ({GetLastError()}).")
|
|
||||||
|
|
||||||
return TaskResult(
|
|
||||||
task: task.id,
|
|
||||||
agent: task.agent,
|
|
||||||
data: encode(""),
|
|
||||||
status: Completed
|
|
||||||
)
|
|
||||||
|
|
||||||
except CatchableError as err:
|
|
||||||
return TaskResult(
|
|
||||||
task: task.id,
|
|
||||||
agent: task.agent,
|
|
||||||
data: encode(fmt"An error occured: {err.msg}" & "\n"),
|
|
||||||
status: Failed
|
|
||||||
)
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
import ./[shell, sleep, pwd, cd, ls]
|
import ./[shell, sleep, filesystem]
|
||||||
|
|
||||||
export shell, sleep, pwd, cd, ls
|
export shell, sleep, filesystem
|
||||||
@@ -2,9 +2,66 @@ import os, strutils, strformat, base64, winim, times, algorithm
|
|||||||
|
|
||||||
import ../types
|
import ../types
|
||||||
|
|
||||||
|
# Retrieve current working directory
|
||||||
|
proc taskPwd*(task: Task): TaskResult =
|
||||||
|
|
||||||
|
echo fmt"Retrieving current working directory."
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# Get current working directory using GetCurrentDirectory
|
||||||
|
let
|
||||||
|
buffer = newWString(MAX_PATH + 1)
|
||||||
|
length = GetCurrentDirectoryW(MAX_PATH, &buffer)
|
||||||
|
|
||||||
|
if length == 0:
|
||||||
|
raise newException(OSError, fmt"Failed to get working directory ({GetLastError()}).")
|
||||||
|
|
||||||
|
return TaskResult(
|
||||||
|
task: task.id,
|
||||||
|
agent: task.agent,
|
||||||
|
data: encode($buffer[0 ..< (int)length] & "\n"),
|
||||||
|
status: Completed
|
||||||
|
)
|
||||||
|
|
||||||
|
except CatchableError as err:
|
||||||
|
return TaskResult(
|
||||||
|
task: task.id,
|
||||||
|
agent: task.agent,
|
||||||
|
data: encode(fmt"An error occured: {err.msg}" & "\n"),
|
||||||
|
status: Failed
|
||||||
|
)
|
||||||
|
|
||||||
|
# Change working directory
|
||||||
|
proc taskCd*(task: Task): TaskResult =
|
||||||
|
|
||||||
|
let targetDirectory = task.args.join(" ").replace("\"", "").replace("'", "")
|
||||||
|
echo fmt"Changing current working directory to {targetDirectory}."
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Get current working directory using GetCurrentDirectory
|
||||||
|
if SetCurrentDirectoryW(targetDirectory) == FALSE:
|
||||||
|
raise newException(OSError, fmt"Failed to change working directory ({GetLastError()}).")
|
||||||
|
|
||||||
|
return TaskResult(
|
||||||
|
task: task.id,
|
||||||
|
agent: task.agent,
|
||||||
|
data: encode(""),
|
||||||
|
status: Completed
|
||||||
|
)
|
||||||
|
|
||||||
|
except CatchableError as err:
|
||||||
|
return TaskResult(
|
||||||
|
task: task.id,
|
||||||
|
agent: task.agent,
|
||||||
|
data: encode(fmt"An error occured: {err.msg}" & "\n"),
|
||||||
|
status: Failed
|
||||||
|
)
|
||||||
|
|
||||||
|
# List files and directories at a specific or at the current path
|
||||||
proc taskDir*(task: Task): TaskResult =
|
proc taskDir*(task: Task): TaskResult =
|
||||||
|
|
||||||
echo fmt"Listing files and directories in current working directory."
|
echo fmt"Listing files and directories."
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Check if users wants to list files in the current working directory or at another path
|
# Check if users wants to list files in the current working directory or at another path
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
import os, strutils, strformat, base64, winim
|
|
||||||
|
|
||||||
import ../types
|
|
||||||
|
|
||||||
proc taskPwd*(task: Task): TaskResult =
|
|
||||||
|
|
||||||
echo fmt"Retrieving current working directory."
|
|
||||||
|
|
||||||
try:
|
|
||||||
|
|
||||||
# Get current working directory using GetCurrentDirectory
|
|
||||||
let
|
|
||||||
buffer = newWString(MAX_PATH + 1)
|
|
||||||
length = GetCurrentDirectoryW(MAX_PATH, &buffer)
|
|
||||||
|
|
||||||
if length == 0:
|
|
||||||
raise newException(OSError, fmt"Failed to get working directory ({GetLastError()}).")
|
|
||||||
|
|
||||||
return TaskResult(
|
|
||||||
task: task.id,
|
|
||||||
agent: task.agent,
|
|
||||||
data: encode($buffer[0 ..< (int)length] & "\n"),
|
|
||||||
status: Completed
|
|
||||||
)
|
|
||||||
|
|
||||||
except CatchableError as err:
|
|
||||||
return TaskResult(
|
|
||||||
task: task.id,
|
|
||||||
agent: task.agent,
|
|
||||||
data: encode(fmt"An error occured: {err.msg}" & "\n"),
|
|
||||||
status: Failed
|
|
||||||
)
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import nanoid, sequtils, strutils, strformat, terminal, times
|
|
||||||
import ../../types
|
|
||||||
|
|
||||||
proc taskSetWorkingDirectory*(cq: Conquest, arguments: seq[string]) =
|
|
||||||
|
|
||||||
# Create a new task
|
|
||||||
let
|
|
||||||
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
|
||||||
task = Task(
|
|
||||||
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
|
||||||
agent: cq.interactAgent.name,
|
|
||||||
command: SetWorkingDirectory,
|
|
||||||
args: arguments,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Add new task to the agent's task queue
|
|
||||||
cq.interactAgent.tasks.add(task)
|
|
||||||
|
|
||||||
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, fmt"Tasked agent to change current working directory.")
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import ./[shell, sleep, pwd, cd, ls]
|
import ./[shell, sleep, filesystem]
|
||||||
export shell, sleep, pwd, cd, ls
|
export shell, sleep, filesystem
|
||||||
|
|
||||||
#[
|
#[
|
||||||
"Monarch" Agent commands:
|
"Monarch" Agent commands:
|
||||||
|
|||||||
54
server/agent/commands/filesystem.nim
Normal file
54
server/agent/commands/filesystem.nim
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import nanoid, sequtils, strutils, strformat, terminal, times
|
||||||
|
import ../../types
|
||||||
|
|
||||||
|
proc taskGetWorkingDirectory*(cq: Conquest) =
|
||||||
|
|
||||||
|
# Create a new task
|
||||||
|
let
|
||||||
|
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
task = Task(
|
||||||
|
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
||||||
|
agent: cq.interactAgent.name,
|
||||||
|
command: GetWorkingDirectory,
|
||||||
|
args: @[],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add new task to the agent's task queue
|
||||||
|
cq.interactAgent.tasks.add(task)
|
||||||
|
|
||||||
|
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, "Tasked agent to get current working directory.")
|
||||||
|
|
||||||
|
proc taskSetWorkingDirectory*(cq: Conquest, arguments: seq[string]) =
|
||||||
|
|
||||||
|
# Create a new task
|
||||||
|
let
|
||||||
|
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
task = Task(
|
||||||
|
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
||||||
|
agent: cq.interactAgent.name,
|
||||||
|
command: SetWorkingDirectory,
|
||||||
|
args: arguments,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add new task to the agent's task queue
|
||||||
|
cq.interactAgent.tasks.add(task)
|
||||||
|
|
||||||
|
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, fmt"Tasked agent to change current working directory.")
|
||||||
|
|
||||||
|
proc taskListDirectory*(cq: Conquest, arguments: seq[string]) =
|
||||||
|
|
||||||
|
# Create a new task
|
||||||
|
let
|
||||||
|
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
||||||
|
task = Task(
|
||||||
|
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
||||||
|
agent: cq.interactAgent.name,
|
||||||
|
command: ListDirectory,
|
||||||
|
args: arguments,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add new task to the agent's task queue
|
||||||
|
cq.interactAgent.tasks.add(task)
|
||||||
|
|
||||||
|
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, fmt"Tasked agent to list files and directories.")
|
||||||
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import nanoid, sequtils, strutils, strformat, terminal, times
|
|
||||||
import ../../types
|
|
||||||
|
|
||||||
proc taskListDirectory*(cq: Conquest, arguments: seq[string]) =
|
|
||||||
|
|
||||||
# Create a new task
|
|
||||||
let
|
|
||||||
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
|
||||||
task = Task(
|
|
||||||
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
|
||||||
agent: cq.interactAgent.name,
|
|
||||||
command: ListDirectory,
|
|
||||||
args: arguments,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Add new task to the agent's task queue
|
|
||||||
cq.interactAgent.tasks.add(task)
|
|
||||||
|
|
||||||
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, fmt"Tasked agent to list files and directories.")
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
import nanoid, sequtils, strutils, strformat, terminal, times
|
|
||||||
import ../../types
|
|
||||||
|
|
||||||
proc taskGetWorkingDirectory*(cq: Conquest) =
|
|
||||||
|
|
||||||
# Create a new task
|
|
||||||
let
|
|
||||||
date: string = now().format("dd-MM-yyyy HH:mm:ss")
|
|
||||||
task = Task(
|
|
||||||
id: generate(alphabet=join(toSeq('A'..'Z'), ""), size=8),
|
|
||||||
agent: cq.interactAgent.name,
|
|
||||||
command: GetWorkingDirectory,
|
|
||||||
args: @[],
|
|
||||||
)
|
|
||||||
|
|
||||||
# Add new task to the agent's task queue
|
|
||||||
cq.interactAgent.tasks.add(task)
|
|
||||||
|
|
||||||
cq.writeLine(fgBlack, styleBright, fmt"[{date}] [*] ", resetStyle, "Tasked agent to get current working directory.")
|
|
||||||
Reference in New Issue
Block a user