80 lines
2.3 KiB
Python
Executable File
80 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env -S uv run --script
|
|
# /// script
|
|
# requires-python = ">=3.11"
|
|
# dependencies = []
|
|
# ///
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
from tasks_common import (
|
|
TASKS,
|
|
build_task_content,
|
|
build_task_filename,
|
|
ensure_queue_dirs,
|
|
load_preset_names,
|
|
log,
|
|
resolve_preset,
|
|
)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Create a detach task and drop it in inbox/")
|
|
parser.add_argument("--goal", required=True, help="Self-contained goal restatement")
|
|
parser.add_argument("--slug", required=True, help="Short kebab-case identifier")
|
|
parser.add_argument("--channel", required=True, help="Channel name (e.g. telegram, websocket)")
|
|
parser.add_argument("--chat-id", required=True, dest="chat_id", help="Chat ID string")
|
|
parser.add_argument("--constraint", action="append", default=[], dest="constraints",
|
|
help="Extra constraint bullet (repeatable)")
|
|
parser.add_argument("--model", default=None,
|
|
help="Model preset to run the task on (fuzzy-matched against config.json); "
|
|
"omit to use the agent default")
|
|
args = parser.parse_args()
|
|
|
|
model = None
|
|
if args.model:
|
|
try:
|
|
model = resolve_preset(args.model, load_preset_names())
|
|
except KeyError as e:
|
|
print(e.args[0], file=sys.stderr)
|
|
return 1
|
|
|
|
ensure_queue_dirs()
|
|
|
|
now = datetime.now().astimezone()
|
|
timestamp_str = now.strftime("%Y-%m-%d_%H_%M_%S_%f")
|
|
created_iso = now.isoformat()
|
|
|
|
filename = build_task_filename(timestamp_str, args.slug)
|
|
content = build_task_content(
|
|
created_iso=created_iso,
|
|
channel=args.channel,
|
|
chat_id=args.chat_id,
|
|
slug=args.slug,
|
|
goal=args.goal,
|
|
constraints=args.constraints,
|
|
model=model,
|
|
)
|
|
|
|
tmp_path = TASKS / "new" / filename
|
|
inbox_path = TASKS / "inbox" / filename
|
|
|
|
try:
|
|
tmp_path.write_text(content)
|
|
os.replace(tmp_path, inbox_path)
|
|
log(f"CREATE {filename} slug={args.slug}")
|
|
except Exception as e:
|
|
print(f"Error writing task: {e}", file=sys.stderr)
|
|
return 1
|
|
|
|
print(args.slug)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|