arkaos 2.70.0 → 2.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.71.0
|
|
Binary file
|
|
@@ -38,6 +38,15 @@ class ScheduleConfig:
|
|
|
38
38
|
timeout_minutes: int = 60
|
|
39
39
|
python_module: str | None = None
|
|
40
40
|
module_args: list[str] = field(default_factory=list)
|
|
41
|
+
# PR54 v2.71.0 — opt-in Claude Code v2.1.139 /goal primitive.
|
|
42
|
+
# When goal_condition is set the scheduler appends
|
|
43
|
+
# `--goal <condition> --task-budget <N>` to the claude argv, so the
|
|
44
|
+
# model keeps running until it decides the condition is met (instead
|
|
45
|
+
# of stopping when the prompt's hardcoded phases run out). NEVER
|
|
46
|
+
# pair --goal without --task-budget — KB caveat: sharp edges around
|
|
47
|
+
# the model overcommitting to ambiguous goals (infinite-loop risk).
|
|
48
|
+
goal_condition: str | None = None
|
|
49
|
+
task_budget: int | None = None
|
|
41
50
|
|
|
42
51
|
@classmethod
|
|
43
52
|
def load(cls, config_path: str) -> "list[ScheduleConfig]":
|
|
@@ -62,6 +71,8 @@ class ScheduleConfig:
|
|
|
62
71
|
timeout_minutes=cfg.get("timeout_minutes", 60),
|
|
63
72
|
python_module=cfg.get("python_module"),
|
|
64
73
|
module_args=list(cfg.get("module_args") or []),
|
|
74
|
+
goal_condition=cfg.get("goal_condition"),
|
|
75
|
+
task_budget=cfg.get("task_budget"),
|
|
65
76
|
)
|
|
66
77
|
)
|
|
67
78
|
return schedules
|
|
@@ -170,7 +181,32 @@ class ArkaScheduler:
|
|
|
170
181
|
prompt_content = resolve(prompt_content)
|
|
171
182
|
except Exception:
|
|
172
183
|
pass # fall back to raw template if profile unavailable
|
|
173
|
-
|
|
184
|
+
argv = [claude_bin, "-p", prompt_content, "--dangerously-skip-permissions"]
|
|
185
|
+
argv.extend(self._goal_argv(schedule))
|
|
186
|
+
return argv
|
|
187
|
+
|
|
188
|
+
@staticmethod
|
|
189
|
+
def _goal_argv(schedule: ScheduleConfig) -> list[str]:
|
|
190
|
+
"""Build the --goal/--task-budget argv suffix when configured.
|
|
191
|
+
|
|
192
|
+
Returns an empty list when goal_condition is unset (legacy
|
|
193
|
+
single-shot behaviour). Raises ValueError when --goal is set
|
|
194
|
+
without --task-budget — pairing the two is mandatory per the
|
|
195
|
+
Claude Code v2.1.139 KB caveat (sharp edges around the model
|
|
196
|
+
overcommitting to ambiguous goals → infinite-loop risk).
|
|
197
|
+
"""
|
|
198
|
+
if not schedule.goal_condition:
|
|
199
|
+
return []
|
|
200
|
+
if not schedule.task_budget or schedule.task_budget <= 0:
|
|
201
|
+
raise ValueError(
|
|
202
|
+
f"schedule '{schedule.command}' sets goal_condition without "
|
|
203
|
+
"a positive task_budget — pairing is mandatory to bound the "
|
|
204
|
+
"metered burn (Claude Code v2.1.139 KB caveat)."
|
|
205
|
+
)
|
|
206
|
+
return [
|
|
207
|
+
"--goal", str(schedule.goal_condition),
|
|
208
|
+
"--task-budget", str(int(schedule.task_budget)),
|
|
209
|
+
]
|
|
174
210
|
|
|
175
211
|
@staticmethod
|
|
176
212
|
def _warn_metered_billing_cutover(schedule: ScheduleConfig) -> None:
|
|
Binary file
|
package/package.json
CHANGED