@hunter-harness/workflow-harness 0.2.65 → 0.2.67
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/harness/bundles/general/claude-code/.harness-build.json +1 -1
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/claude-code/harness-plan/reference.md +34 -0
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/codebuddy/harness-plan/reference.md +34 -0
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/codex/harness-plan/reference.md +34 -0
- package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/codex/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/cursor/harness-plan/reference.md +34 -0
- package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/general/cursor/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/claude-code/harness-plan/reference.md +34 -0
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/codebuddy/harness-plan/reference.md +34 -0
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/codex/harness-plan/reference.md +34 -0
- package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/codex/scripts/harness_events_sync.py +213 -4
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/cursor/harness-plan/reference.md +34 -0
- package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
- package/harness/bundles/java/cursor/scripts/harness_events_sync.py +213 -4
- package/harness/manifests/general/claude-code.json +15 -15
- package/harness/manifests/general/codebuddy.json +15 -15
- package/harness/manifests/general/codex.json +15 -15
- package/harness/manifests/general/cursor.json +15 -15
- package/harness/manifests/java/claude-code.json +17 -17
- package/harness/manifests/java/codebuddy.json +17 -17
- package/harness/manifests/java/codex.json +17 -17
- package/harness/manifests/java/cursor.json +17 -17
- package/hunter-workflow-family.json +5 -5
- package/package.json +1 -1
|
@@ -533,6 +533,187 @@ def run_id_for(change_dir: Path) -> str:
|
|
|
533
533
|
return "run_" + digest
|
|
534
534
|
|
|
535
535
|
|
|
536
|
+
PLAN_EVENTS_STREAM_NAME = "plan-events.ndjson"
|
|
537
|
+
PLAN_EVENTS_CURSOR_NAME = "plan-events-sync-cursor.json"
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def _plan_events_path(change_dir: Path) -> Path:
|
|
541
|
+
return _state_dir(change_dir) / "meta" / PLAN_EVENTS_STREAM_NAME
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
def _plan_events_cursor_path(change_dir: Path) -> Path:
|
|
545
|
+
return _state_dir(change_dir) / "meta" / PLAN_EVENTS_CURSOR_NAME
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
def _load_plan_cursor(change_dir: Path, *, initial_base: int) -> tuple[int, int]:
|
|
549
|
+
path = _plan_events_cursor_path(change_dir)
|
|
550
|
+
if not path.is_file():
|
|
551
|
+
return 0, initial_base
|
|
552
|
+
try:
|
|
553
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
554
|
+
except (OSError, json.JSONDecodeError):
|
|
555
|
+
return 0, initial_base
|
|
556
|
+
acked = data.get("acked_lines") if isinstance(data, dict) else None
|
|
557
|
+
base = data.get("producer_seq_base") if isinstance(data, dict) else None
|
|
558
|
+
if not isinstance(acked, int) or isinstance(acked, bool) or acked < 0:
|
|
559
|
+
acked = 0
|
|
560
|
+
if not isinstance(base, int) or isinstance(base, bool) or base < 0:
|
|
561
|
+
base = initial_base
|
|
562
|
+
return acked, base
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
def _save_plan_cursor(change_dir: Path, *, acked: int, base: int) -> None:
|
|
566
|
+
path = _plan_events_cursor_path(change_dir)
|
|
567
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
568
|
+
payload = {
|
|
569
|
+
"schema_version": 1,
|
|
570
|
+
"acked_lines": acked,
|
|
571
|
+
"producer_seq_base": base,
|
|
572
|
+
"updated_at": datetime.now(timezone.utc).isoformat(),
|
|
573
|
+
}
|
|
574
|
+
tmp = path.with_suffix(path.suffix + ".tmp")
|
|
575
|
+
tmp.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
576
|
+
os.replace(tmp, path)
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
def _sync_plan_events_stream(
|
|
580
|
+
change_dir: Path,
|
|
581
|
+
*,
|
|
582
|
+
endpoint: dict[str, str],
|
|
583
|
+
rid: str,
|
|
584
|
+
resolved_key: str,
|
|
585
|
+
display_title: str,
|
|
586
|
+
main_stream_total_lines: int,
|
|
587
|
+
) -> dict[str, Any]:
|
|
588
|
+
"""Upload the TS PlanEvent stream (meta/plan-events.ndjson) with its own ACK cursor.
|
|
589
|
+
|
|
590
|
+
producer_seq base starts after the Python stream's total line count, so the two
|
|
591
|
+
streams never collide in (run_id, producer_seq) space. 事件语义与转换边界见
|
|
592
|
+
12-M3 文档:TS 事件按 hunter-progress-sync/v1 线上格式投影,event_type 保留
|
|
593
|
+
TS 原值(artifact_published 等)。
|
|
594
|
+
"""
|
|
595
|
+
project_id = endpoint["project_id"]
|
|
596
|
+
plan_file = _plan_events_path(change_dir)
|
|
597
|
+
if not plan_file.is_file():
|
|
598
|
+
return {"ok": True, "uploaded": 0, "quarantined": 0, "reason": "no plan-events.ndjson"}
|
|
599
|
+
lines = _event_lines_snapshot(plan_file)
|
|
600
|
+
acked, base = _load_plan_cursor(change_dir, initial_base=main_stream_total_lines)
|
|
601
|
+
if acked > len(lines):
|
|
602
|
+
# 文件被截断重建:从头重放(event_id 服务端幂等去重)
|
|
603
|
+
acked = 0
|
|
604
|
+
pending = lines[acked:]
|
|
605
|
+
uploaded = 0
|
|
606
|
+
quarantined = 0
|
|
607
|
+
client_time = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
608
|
+
for chunk_start in range(0, len(pending), MAX_BATCH_SIZE):
|
|
609
|
+
raw_chunk = pending[chunk_start:chunk_start + MAX_BATCH_SIZE]
|
|
610
|
+
batch: list[dict[str, Any]] = []
|
|
611
|
+
line_by_event_id: dict[str, int] = {}
|
|
612
|
+
local_invalid: list[tuple[str, int, str]] = []
|
|
613
|
+
for offset, raw_line in enumerate(raw_chunk, start=1):
|
|
614
|
+
line_number = acked + chunk_start + offset
|
|
615
|
+
line = raw_line.strip()
|
|
616
|
+
if not line:
|
|
617
|
+
local_invalid.append((f"{resolved_key}:plan:{line_number}", line_number, "EMPTY_LINE"))
|
|
618
|
+
continue
|
|
619
|
+
try:
|
|
620
|
+
event = json.loads(line)
|
|
621
|
+
except json.JSONDecodeError:
|
|
622
|
+
local_invalid.append((f"{resolved_key}:plan:{line_number}", line_number, "INVALID_JSON"))
|
|
623
|
+
continue
|
|
624
|
+
if not isinstance(event, dict):
|
|
625
|
+
local_invalid.append((f"{resolved_key}:plan:{line_number}", line_number, "INVALID_EVENT"))
|
|
626
|
+
continue
|
|
627
|
+
event_id = str(event.get("event_id") or f"{resolved_key}:plan:{line_number}")
|
|
628
|
+
item: dict[str, Any] = {
|
|
629
|
+
"event_id": event_id,
|
|
630
|
+
"producer_seq": base + line_number,
|
|
631
|
+
"event_type": str(event.get("type") or "unknown"),
|
|
632
|
+
"occurred_at": str(event.get("occurred_at") or client_time),
|
|
633
|
+
"payload": sanitize(event),
|
|
634
|
+
}
|
|
635
|
+
if event.get("phase") is not None:
|
|
636
|
+
item["phase"] = event.get("phase")
|
|
637
|
+
batch.append(item)
|
|
638
|
+
line_by_event_id[event_id] = line_number
|
|
639
|
+
|
|
640
|
+
if batch:
|
|
641
|
+
try:
|
|
642
|
+
result = post_json(
|
|
643
|
+
endpoint,
|
|
644
|
+
f"/api/v1/projects/{project_id}/runs/events:batch",
|
|
645
|
+
{
|
|
646
|
+
"protocol_version": "hunter-progress-sync/v1",
|
|
647
|
+
"run_id": rid,
|
|
648
|
+
"change_key": resolved_key,
|
|
649
|
+
"title": display_title,
|
|
650
|
+
"events": batch,
|
|
651
|
+
},
|
|
652
|
+
)
|
|
653
|
+
except (urllib.error.HTTPError, urllib.error.URLError, TimeoutError, OSError, json.JSONDecodeError) as exc:
|
|
654
|
+
return {
|
|
655
|
+
"ok": False,
|
|
656
|
+
"error": f"plan-events batch failed: {exc}",
|
|
657
|
+
"uploaded": uploaded,
|
|
658
|
+
"quarantined": quarantined,
|
|
659
|
+
}
|
|
660
|
+
items = result.get("items") if isinstance(result, dict) else None
|
|
661
|
+
if not isinstance(items, list) or len(items) != len(batch):
|
|
662
|
+
return {
|
|
663
|
+
"ok": False,
|
|
664
|
+
"error": "plan-events batch response did not acknowledge every event",
|
|
665
|
+
"uploaded": uploaded,
|
|
666
|
+
"quarantined": quarantined,
|
|
667
|
+
}
|
|
668
|
+
response_by_id = {
|
|
669
|
+
str(item.get("id") or item.get("event_id") or ""): item
|
|
670
|
+
for item in items if isinstance(item, dict)
|
|
671
|
+
}
|
|
672
|
+
for event in batch:
|
|
673
|
+
event_id = str(event["event_id"])
|
|
674
|
+
item = response_by_id.get(event_id)
|
|
675
|
+
status = str((item or {}).get("status") or "")
|
|
676
|
+
if status in ACCEPTED_STATUSES:
|
|
677
|
+
uploaded += 1
|
|
678
|
+
continue
|
|
679
|
+
if status in QUARANTINE_STATUSES:
|
|
680
|
+
append_quarantine(
|
|
681
|
+
change_dir,
|
|
682
|
+
event_id=event_id,
|
|
683
|
+
line_number=line_by_event_id[event_id],
|
|
684
|
+
error_code=str((item or {}).get("error_code") or status.upper()),
|
|
685
|
+
status=status,
|
|
686
|
+
)
|
|
687
|
+
quarantined += 1
|
|
688
|
+
continue
|
|
689
|
+
return {
|
|
690
|
+
"ok": False,
|
|
691
|
+
"error": f"plan event {event_id} was not durably acknowledged",
|
|
692
|
+
"uploaded": uploaded,
|
|
693
|
+
"quarantined": quarantined,
|
|
694
|
+
"server": result,
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
for event_id, line_number, error_code in local_invalid:
|
|
698
|
+
append_quarantine(
|
|
699
|
+
change_dir,
|
|
700
|
+
event_id=event_id,
|
|
701
|
+
line_number=line_number,
|
|
702
|
+
error_code=error_code,
|
|
703
|
+
status="local_invalid",
|
|
704
|
+
)
|
|
705
|
+
quarantined += 1
|
|
706
|
+
_save_plan_cursor(change_dir, acked=acked + chunk_start + len(raw_chunk), base=base)
|
|
707
|
+
|
|
708
|
+
return {
|
|
709
|
+
"ok": True,
|
|
710
|
+
"uploaded": uploaded,
|
|
711
|
+
"quarantined": quarantined,
|
|
712
|
+
"acked_lines": len(lines),
|
|
713
|
+
"producer_seq_base": base,
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
|
|
536
717
|
def post_json(endpoint: dict[str, str], path: str, body: dict[str, Any]) -> dict[str, Any]:
|
|
537
718
|
url = endpoint["server_url"] + path
|
|
538
719
|
data = json.dumps(body, ensure_ascii=False, separators=(",", ":")).encode("utf-8")
|
|
@@ -685,13 +866,26 @@ def sync_change(
|
|
|
685
866
|
_migrate_pending_legacy_stream(change_dir)
|
|
686
867
|
events_file = _state_dir(change_dir) / "events.ndjson"
|
|
687
868
|
if not events_file.is_file():
|
|
688
|
-
|
|
689
|
-
|
|
869
|
+
plan_result = _sync_plan_events_stream(
|
|
870
|
+
change_dir,
|
|
871
|
+
endpoint=endpoint,
|
|
872
|
+
rid=rid,
|
|
873
|
+
resolved_key=resolved_key,
|
|
874
|
+
display_title=display_title,
|
|
875
|
+
main_stream_total_lines=0,
|
|
876
|
+
)
|
|
877
|
+
result: dict[str, Any] = {
|
|
878
|
+
"ok": bool(plan_result.get("ok")),
|
|
690
879
|
"run_id": rid,
|
|
691
880
|
"change_key": resolved_key,
|
|
692
|
-
"uploaded": 0,
|
|
881
|
+
"uploaded": int(plan_result.get("uploaded") or 0),
|
|
882
|
+
"quarantined": int(plan_result.get("quarantined") or 0),
|
|
693
883
|
"reason": "no events.ndjson",
|
|
884
|
+
"plan_events": {key: value for key, value in plan_result.items() if key != "ok"},
|
|
694
885
|
}
|
|
886
|
+
if not plan_result.get("ok"):
|
|
887
|
+
result["error"] = plan_result.get("error")
|
|
888
|
+
return result
|
|
695
889
|
|
|
696
890
|
lines = _event_lines_snapshot(events_file)
|
|
697
891
|
cursor = load_cursor_state(
|
|
@@ -830,7 +1024,7 @@ def sync_change(
|
|
|
830
1024
|
producer_seq_base=producer_seq_base,
|
|
831
1025
|
)
|
|
832
1026
|
|
|
833
|
-
|
|
1027
|
+
main_result: dict[str, Any] = {
|
|
834
1028
|
"ok": True,
|
|
835
1029
|
"run_id": rid,
|
|
836
1030
|
"change_key": resolved_key,
|
|
@@ -841,6 +1035,21 @@ def sync_change(
|
|
|
841
1035
|
"producer_seq_base": producer_seq_base,
|
|
842
1036
|
"server": last_result,
|
|
843
1037
|
}
|
|
1038
|
+
plan_result = _sync_plan_events_stream(
|
|
1039
|
+
change_dir,
|
|
1040
|
+
endpoint=endpoint,
|
|
1041
|
+
rid=rid,
|
|
1042
|
+
resolved_key=resolved_key,
|
|
1043
|
+
display_title=display_title,
|
|
1044
|
+
main_stream_total_lines=len(lines),
|
|
1045
|
+
)
|
|
1046
|
+
main_result["uploaded"] += int(plan_result.get("uploaded") or 0)
|
|
1047
|
+
main_result["quarantined"] += int(plan_result.get("quarantined") or 0)
|
|
1048
|
+
main_result["plan_events"] = {key: value for key, value in plan_result.items() if key != "ok"}
|
|
1049
|
+
if not plan_result.get("ok"):
|
|
1050
|
+
main_result["ok"] = False
|
|
1051
|
+
main_result["error"] = plan_result.get("error")
|
|
1052
|
+
return main_result
|
|
844
1053
|
|
|
845
1054
|
|
|
846
1055
|
def auto_events_sync(
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": 2,
|
|
3
3
|
"profile": "general",
|
|
4
4
|
"adapter": "claude-code",
|
|
5
|
-
"bundle_version": "0.2.
|
|
5
|
+
"bundle_version": "0.2.56",
|
|
6
6
|
"requires": {
|
|
7
|
-
"minimumCliVersion": "0.2.
|
|
7
|
+
"minimumCliVersion": "0.2.76",
|
|
8
8
|
"capabilities": [
|
|
9
9
|
"sync@2",
|
|
10
10
|
"rules-sync@1",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
{
|
|
25
25
|
"path": ".harness-build.json",
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "61bf764d2974e9cf2c308f2115600d5cac748746e0eafd8e3eb033bb11925bb1"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"path": "agents/harness-evaluator.md",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"path": "harness-archive/SKILL.md",
|
|
98
|
-
"sha256": "
|
|
98
|
+
"sha256": "f4183871f5a87496262a6ad3a3bfcbd2b0263a137afa0b1c72a794cfd77421cd"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"path": "harness-codebase-map/SKILL.md",
|
|
114
|
-
"sha256": "
|
|
114
|
+
"sha256": "dfb222b4240e009575809f7f769528a48ce41e7189b17d286691cc03ae4a1c84"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -151,11 +151,11 @@
|
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
154
|
-
"sha256": "
|
|
154
|
+
"sha256": "16935e62cd8f17fc07fad8795b69cde8a17e1ccf7a11490767b63b98c6ffbb1f"
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
"path": "harness-knowledge-query/SKILL.md",
|
|
158
|
-
"sha256": "
|
|
158
|
+
"sha256": "55b8b54fcfeb13b90f8719d40186a29a7d844a97251ea8be719e68b4de7f6669"
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"path": "harness-plan/checklist.md",
|
|
@@ -167,11 +167,11 @@
|
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
"path": "harness-plan/reference.md",
|
|
170
|
-
"sha256": "
|
|
170
|
+
"sha256": "25aa50db1667d8cebd63e566ebd7fa764f4e0c42f211666069f42835e75ee5b9"
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
"path": "harness-plan/SKILL.md",
|
|
174
|
-
"sha256": "
|
|
174
|
+
"sha256": "632f0d8bcb43dd53bbe25090b03a2aee6016f607d83ee4b5aa9ae7e2a21af1b5"
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
"path": "harness-review/checklist.md",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"path": "harness-review/SKILL.md",
|
|
190
|
-
"sha256": "
|
|
190
|
+
"sha256": "7c8422bb30842da316954542ff0f43f0d62fa5f22bf13678ce6e5c19f6fbee83"
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
"path": "harness-run/checklist.md",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
205
|
"path": "harness-run/SKILL.md",
|
|
206
|
-
"sha256": "
|
|
206
|
+
"sha256": "4df1af3efc8b58a19296f043fe86d71419262efd521df2334e3bace9b84620b8"
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
"path": "harness-submit/checklist.md",
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"path": "harness-submit/SKILL.md",
|
|
218
|
-
"sha256": "
|
|
218
|
+
"sha256": "afcf6d8515397d1beb5b439b32b1d475e3cafd13957517e4649c318527ce568b"
|
|
219
219
|
},
|
|
220
220
|
{
|
|
221
221
|
"path": "harness-sync/reference.md",
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
},
|
|
224
224
|
{
|
|
225
225
|
"path": "harness-sync/SKILL.md",
|
|
226
|
-
"sha256": "
|
|
226
|
+
"sha256": "284e32beb780883baada6f6ea7db19f765c9380381012723541bcf06e93ec4a8"
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
229
|
"path": "harness-test/checklist.md",
|
|
@@ -247,7 +247,7 @@
|
|
|
247
247
|
},
|
|
248
248
|
{
|
|
249
249
|
"path": "harness-test/SKILL.md",
|
|
250
|
-
"sha256": "
|
|
250
|
+
"sha256": "6e63e8fbf0c2c4c27283b0f0f66f959472e39996d8cda8baf0cb00c90c2422cc"
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
253
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
},
|
|
348
348
|
{
|
|
349
349
|
"path": "scripts/harness_events_sync.py",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "4d003e3d918ec6b18cf186a96def4cba10b0d4f756a0881451635e8e7cf968ec"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "scripts/harness_events.py",
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": 2,
|
|
3
3
|
"profile": "general",
|
|
4
4
|
"adapter": "codebuddy",
|
|
5
|
-
"bundle_version": "0.2.
|
|
5
|
+
"bundle_version": "0.2.56",
|
|
6
6
|
"requires": {
|
|
7
|
-
"minimumCliVersion": "0.2.
|
|
7
|
+
"minimumCliVersion": "0.2.76",
|
|
8
8
|
"capabilities": [
|
|
9
9
|
"sync@2",
|
|
10
10
|
"rules-sync@1",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
{
|
|
25
25
|
"path": ".harness-build.json",
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "e397c212489b4d9ef555669a3e98d5736551921551559b2b471669b074386a15"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"path": "agents/harness-evaluator.md",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"path": "harness-archive/SKILL.md",
|
|
98
|
-
"sha256": "
|
|
98
|
+
"sha256": "c03ed56c938ae49e46ff5b8514a88dd26015a13bebc6c692fc32955264826794"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"path": "harness-codebase-map/SKILL.md",
|
|
114
|
-
"sha256": "
|
|
114
|
+
"sha256": "0cc5671a0fc37085a0b00a9d6bc04d114f32052f381c3d082e73946bbcb51552"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -151,11 +151,11 @@
|
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
154
|
-
"sha256": "
|
|
154
|
+
"sha256": "7f0dc5ed7c18b63afb5c85798cfc86efdfe67f64e3c13793ddfe6abfecde048f"
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
"path": "harness-knowledge-query/SKILL.md",
|
|
158
|
-
"sha256": "
|
|
158
|
+
"sha256": "b8334155de3d86b17e2ed6686751d1591dd3f59869376585fdd20fdf269332f3"
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"path": "harness-plan/checklist.md",
|
|
@@ -167,11 +167,11 @@
|
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
169
|
"path": "harness-plan/reference.md",
|
|
170
|
-
"sha256": "
|
|
170
|
+
"sha256": "25aa50db1667d8cebd63e566ebd7fa764f4e0c42f211666069f42835e75ee5b9"
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
"path": "harness-plan/SKILL.md",
|
|
174
|
-
"sha256": "
|
|
174
|
+
"sha256": "be3ea45291719e5ecae39aa491e8bc8f93db5874a834d7e86534c5fffa5ccd55"
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
"path": "harness-review/checklist.md",
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"path": "harness-review/SKILL.md",
|
|
190
|
-
"sha256": "
|
|
190
|
+
"sha256": "e5064ff7cf3917aefecd2e3bdb712934a4d8f4ed8f7a863a61a7e369df8601db"
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
"path": "harness-run/checklist.md",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
205
|
"path": "harness-run/SKILL.md",
|
|
206
|
-
"sha256": "
|
|
206
|
+
"sha256": "422b084248cbf8431790b419e7c70806ab44931258141a3d1c2312cb81c8550f"
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
"path": "harness-submit/checklist.md",
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"path": "harness-submit/SKILL.md",
|
|
218
|
-
"sha256": "
|
|
218
|
+
"sha256": "5edf0a0ee975a5e4cb59b41ef7719037c266b7a382a3e1ea4e771fc7ad5f9cd9"
|
|
219
219
|
},
|
|
220
220
|
{
|
|
221
221
|
"path": "harness-sync/reference.md",
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
},
|
|
224
224
|
{
|
|
225
225
|
"path": "harness-sync/SKILL.md",
|
|
226
|
-
"sha256": "
|
|
226
|
+
"sha256": "fb93a6a4028b062a27c89853d3e5779ea00816b947c8f31484851bbf56aa766b"
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
229
|
"path": "harness-test/checklist.md",
|
|
@@ -247,7 +247,7 @@
|
|
|
247
247
|
},
|
|
248
248
|
{
|
|
249
249
|
"path": "harness-test/SKILL.md",
|
|
250
|
-
"sha256": "
|
|
250
|
+
"sha256": "b06cda2654354ca9ba014c66719fb2009739cec72ccd4e25e41f98e2df626d14"
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
253
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
},
|
|
348
348
|
{
|
|
349
349
|
"path": "scripts/harness_events_sync.py",
|
|
350
|
-
"sha256": "
|
|
350
|
+
"sha256": "4d003e3d918ec6b18cf186a96def4cba10b0d4f756a0881451635e8e7cf968ec"
|
|
351
351
|
},
|
|
352
352
|
{
|
|
353
353
|
"path": "scripts/harness_events.py",
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schema_version": 2,
|
|
3
3
|
"profile": "general",
|
|
4
4
|
"adapter": "codex",
|
|
5
|
-
"bundle_version": "0.2.
|
|
5
|
+
"bundle_version": "0.2.56",
|
|
6
6
|
"requires": {
|
|
7
|
-
"minimumCliVersion": "0.2.
|
|
7
|
+
"minimumCliVersion": "0.2.76",
|
|
8
8
|
"capabilities": [
|
|
9
9
|
"sync@2",
|
|
10
10
|
"rules-sync@1",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
{
|
|
25
25
|
"path": ".harness-build.json",
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "5b87cf9356dfd568ef8fe9692ec3cc6634c82c3e660ecc70ed093f4d95f9aece"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"path": "CONTEXT.md",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"path": "harness-archive/SKILL.md",
|
|
86
|
-
"sha256": "
|
|
86
|
+
"sha256": "21c1b5beccb00d3267aa873d6d8747c37b43af79d44ef448298048625b74e414"
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
"path": "harness-archive/templates/summary-data-template.json",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"path": "harness-codebase-map/SKILL.md",
|
|
102
|
-
"sha256": "
|
|
102
|
+
"sha256": "72ca1e0179ee83c45e1131d71c48a66459d4f09cf80091daeef627bfab272995"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"path": "harness-codebase-map/templates/ARCHITECTURE.md",
|
|
@@ -139,11 +139,11 @@
|
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
"path": "harness-knowledge-ingest/SKILL.md",
|
|
142
|
-
"sha256": "
|
|
142
|
+
"sha256": "ad97f238e512cc0f6e934c52136485b7847b21c91d73037be03cb9ae0c87b941"
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
"path": "harness-knowledge-query/SKILL.md",
|
|
146
|
-
"sha256": "
|
|
146
|
+
"sha256": "12a3e4e9a21adc20b50c54f5cf7b98ca15aff7a96b0ff0d0d31b5dd113e44488"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
"path": "harness-plan/checklist.md",
|
|
@@ -155,11 +155,11 @@
|
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
157
|
"path": "harness-plan/reference.md",
|
|
158
|
-
"sha256": "
|
|
158
|
+
"sha256": "25aa50db1667d8cebd63e566ebd7fa764f4e0c42f211666069f42835e75ee5b9"
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"path": "harness-plan/SKILL.md",
|
|
162
|
-
"sha256": "
|
|
162
|
+
"sha256": "08222a13383da2c04e8ce415c851742e78146b786069f97d808aa256e3fcd866"
|
|
163
163
|
},
|
|
164
164
|
{
|
|
165
165
|
"path": "harness-review/checklist.md",
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
177
|
"path": "harness-review/SKILL.md",
|
|
178
|
-
"sha256": "
|
|
178
|
+
"sha256": "2d3ce3c7891b87f53ee113022dc0787426c49a80cd7d009dd72183d901a520ae"
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
181
|
"path": "harness-run/checklist.md",
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
"path": "harness-run/SKILL.md",
|
|
194
|
-
"sha256": "
|
|
194
|
+
"sha256": "1c03ebd5a99c8a510c612eb090995f8e58b018f5def8a8a6f0fd6b37ed56fe0f"
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
"path": "harness-submit/checklist.md",
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
205
|
"path": "harness-submit/SKILL.md",
|
|
206
|
-
"sha256": "
|
|
206
|
+
"sha256": "82902f6083988aae6b414b9cc65c4a6cfb01fb684ad3bc6ba8ca144edafc8b99"
|
|
207
207
|
},
|
|
208
208
|
{
|
|
209
209
|
"path": "harness-sync/reference.md",
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
},
|
|
212
212
|
{
|
|
213
213
|
"path": "harness-sync/SKILL.md",
|
|
214
|
-
"sha256": "
|
|
214
|
+
"sha256": "0ae191ef5ac8bd104ae0e722bf7ed36290249654e592d38644fca5af86346644"
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"path": "harness-test/checklist.md",
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
},
|
|
236
236
|
{
|
|
237
237
|
"path": "harness-test/SKILL.md",
|
|
238
|
-
"sha256": "
|
|
238
|
+
"sha256": "ccadc29db541ed97c26e68482d47bd918d25084784b3c4a95fde800a0dd47fe9"
|
|
239
239
|
},
|
|
240
240
|
{
|
|
241
241
|
"path": "protocols/archive-report-protocol.md",
|
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
337
|
"path": "scripts/harness_events_sync.py",
|
|
338
|
-
"sha256": "
|
|
338
|
+
"sha256": "4d003e3d918ec6b18cf186a96def4cba10b0d4f756a0881451635e8e7cf968ec"
|
|
339
339
|
},
|
|
340
340
|
{
|
|
341
341
|
"path": "scripts/harness_events.py",
|