fix(issue-36): registry and wrapper accept --prompt-file; the wrapper hands the same path on
One argv string is capped at MAX_ARG_STRLEN (131,072 bytes on Linux), so a prompt passed as --prompt could not reach the registry once it carried a large diff. submit now takes --prompt-file and passes the same path to `registry.py register --prompt-file`; the loop type's per-iteration update goes by file too. --prompt keeps working unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1debc7d924
commit
68a5d31381
3 files changed
+46
-11
No files matched your search
@@ -323,7 +323,11 @@ def _build_parser() -> argparse.ArgumentParser:
|
||||
sub = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
p_reg = sub.add_parser("register", help="create a pending job; prints the job id")
|
||||
p_reg.add_argument("--prompt", required=True)
|
||||
# Issue #36: a long prompt goes by file - one argv string is capped at
|
||||
# MAX_ARG_STRLEN (131,072 bytes on Linux).
|
||||
reg_prompt = p_reg.add_mutually_exclusive_group(required=True)
|
||||
reg_prompt.add_argument("--prompt")
|
||||
reg_prompt.add_argument("--prompt-file", help="read the prompt from this file (utf-8)")
|
||||
p_reg.add_argument("--agent", default="claude-code")
|
||||
p_reg.add_argument("--agent-session", default="herdr:claude")
|
||||
p_reg.add_argument("--role", default="Worker", help="logical role for the delegated agent (e.g. Worker, Planner, Reviewer)")
|
||||
@@ -365,7 +369,9 @@ def _build_parser() -> argparse.ArgumentParser:
|
||||
p_update.add_argument("--job", required=True)
|
||||
p_update.add_argument("--status", default=None)
|
||||
p_update.add_argument("--agent-session", default=None)
|
||||
p_update.add_argument("--prompt", default=None)
|
||||
upd_prompt = p_update.add_mutually_exclusive_group()
|
||||
upd_prompt.add_argument("--prompt", default=None)
|
||||
upd_prompt.add_argument("--prompt-file", default=None, help="read the prompt from this file (utf-8)")
|
||||
p_update.add_argument("--iteration", type=int, default=None)
|
||||
p_update.add_argument("--attempt-id", type=int, default=None)
|
||||
p_update.add_argument("--role", default=None)
|
||||
@@ -473,15 +479,26 @@ def _operator_write(job_id: str, registry_dir: str, **fields) -> int:
|
||||
return 4
|
||||
|
||||
|
||||
def _prompt_from_args(parser: argparse.ArgumentParser, args: argparse.Namespace) -> Optional[str]:
|
||||
"""The prompt text: from --prompt-file (read verbatim) or from --prompt."""
|
||||
if getattr(args, "prompt_file", None) is None:
|
||||
return args.prompt
|
||||
try:
|
||||
return Path(args.prompt_file).read_text(encoding="utf-8")
|
||||
except (OSError, UnicodeDecodeError) as exc:
|
||||
parser.error(f"cannot read --prompt-file {args.prompt_file}: {exc}")
|
||||
|
||||
|
||||
def main(argv: Optional[List[str]] = None) -> int:
|
||||
mqtt_common.ensure_env_loaded()
|
||||
mqtt_common.setup_logging(logging.INFO)
|
||||
args = _build_parser().parse_args(argv)
|
||||
parser = _build_parser()
|
||||
args = parser.parse_args(argv)
|
||||
rd = args.registry_dir
|
||||
|
||||
if args.command == "register":
|
||||
job_id = register_job(
|
||||
prompt=args.prompt,
|
||||
prompt=_prompt_from_args(parser, args),
|
||||
agent=args.agent,
|
||||
agent_session=args.agent_session,
|
||||
role=args.role,
|
||||
@@ -540,8 +557,9 @@ def main(argv: Optional[List[str]] = None) -> int:
|
||||
fields["status"] = args.status
|
||||
if args.agent_session is not None:
|
||||
fields["agent_session"] = args.agent_session
|
||||
if args.prompt is not None:
|
||||
fields["prompt"] = args.prompt
|
||||
prompt = _prompt_from_args(parser, args)
|
||||
if prompt is not None:
|
||||
fields["prompt"] = prompt
|
||||
if args.iteration is not None:
|
||||
fields["iteration"] = args.iteration
|
||||
if args.attempt_id is not None:
|
||||
|
||||
Reference in new issue
Block a user