arkaos 2.69.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.69.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:
@@ -193,7 +193,16 @@ PHASE_RE = re.compile(r"\[arka:phase:\d+\]", re.IGNORECASE)
193
193
  SAFE_SESSION_ID_RE = _safe_session_id_module.SAFE_SESSION_ID_RE
194
194
  _safe_session_id = _safe_session_id_module.safe_session_id
195
195
 
196
- ASSISTANT_WINDOW = 6
196
+ # PR53 v2.70.0 — widened from 6 to 20. The 6-message window was too
197
+ # tight for long multi-PR sessions: after a single PR's worth of test
198
+ # runs / commits / npm publishes (each producing a substantive assistant
199
+ # message), the [arka:routing] line aged out and the enforcer blocked
200
+ # subsequent Edit/Write calls even though the operator was clearly mid-
201
+ # scope. 20 covers ~2-3 PRs of tool work without re-emitting the
202
+ # routing line. Transcript remains the authoritative source per
203
+ # docs/adr/2026-04-17-binding-flow-enforcement.md — this just widens
204
+ # how far back we look before declaring the marker absent.
205
+ ASSISTANT_WINDOW = 20
197
206
  CONFIG_PATH = Path.home() / ".arkaos" / "config.json"
198
207
  BYPASS_AUDIT_PATH = Path.home() / ".arkaos" / "audit" / "bypass.log"
199
208
  TELEMETRY_PATH = Path.home() / ".arkaos" / "telemetry" / "enforcement.jsonl"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "2.69.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.69.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"}