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.70.0
1
+ 2.71.0
@@ -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
- return [claude_bin, "-p", prompt_content, "--dangerously-skip-permissions"]
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:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "2.70.0",
3
+ "version": "2.71.0",
4
4
  "description": "The Operating System for AI Agent Teams",
5
5
  "type": "module",
6
6
  "bin": {
package/pyproject.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arkaos-core"
3
- version = "2.70.0"
3
+ version = "2.71.0"
4
4
  description = "Core engine for ArkaOS — The Operating System for AI Agent Teams"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}