Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions harness/brain/lessons.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -302,3 +302,6 @@
{"ts": "2026-05-30T14:31:35Z", "sprint_id": "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release", "lesson": "| V4_regression_aggregation | PASS | 1 JSON (44 records) | 44/44 PASS, 0 FAIL |", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release"]}
{"ts": "2026-05-30T15:36:05Z", "sprint_id": "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release", "lesson": "| V4_regression_aggregation | PASS | 1 JSON (44 records) | 44/44 PASS, 0 FAIL |", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release"]}
{"ts": "2026-05-30T16:41:27Z", "sprint_id": "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release", "lesson": "| V4_regression_aggregation | PASS | 1 JSON (44 records) | 44/44 PASS, 0 FAIL |", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260527-p0-solar-harness-tui-pane-recover-与-clean-pane-生命周期治理-s05-verification-release"]}
{"ts": "2026-05-31T21:46:09Z", "sprint_id": "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime", "lesson": "workflow_guard.py 的所有三分面调用均包裹在 `try/except` fail-open 逻辑中", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime"]}
{"ts": "2026-05-31T21:46:09Z", "sprint_id": "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime", "lesson": "graph_scheduler.py 的 state 写入为 best-effort,失败不影响 legacy `save_graph()` 调用", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime"]}
{"ts": "2026-05-31T21:46:09Z", "sprint_id": "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime", "lesson": "回归测试** (排除预存在失败):", "source": "auto_eval", "confidence": 0.8, "tags": ["FAIL", "eval", "sprint-20260531-请为-solar-harness-开一个新的-p0-p1-架构升级单-主题是-把-task-graph-从现网单文件主读-s03-core-runtime"]}
2 changes: 1 addition & 1 deletion harness/config/agent-actors.json
Original file line number Diff line number Diff line change
Expand Up @@ -1922,7 +1922,7 @@
"mini-chatgpt-deep-research": {
"actor_id": "mini-chatgpt-deep-research",
"host_id": "mini",
"operator_alias": "mini-claude-opus-planner",
"operator_alias": "mini-chatgpt-deep-research",
"aliases": ["mini-chatgpt-deep-research"],
"role": "knowledge-extractor",
"display_meta": {
Expand Down
2 changes: 0 additions & 2 deletions harness/config/ai-influence-daily-digest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ mac_mini_only: true
allowed_hostnames:
- lisihaodeMac-mini-3.local
- lisihaodeMac-mini-3
- lisihaodeMini-3.local
- lisihaodeMini-3

timezone: America/Toronto
schedule:
Expand Down
92 changes: 92 additions & 0 deletions harness/config/cmux-workspace-sample.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Sample: cmux monitoring workspace (solar-harness)
# Usage:
# render-cmux-workspace config/cmux-workspace-sample.yaml
# cmux-monitor-up config/cmux-workspace-sample.yaml
# cmux-monitor-doctor config/cmux-workspace-sample.yaml
# cmux-monitor-down config/cmux-workspace-sample.yaml

workspace_name: "solar-runtime"

ssh_profiles:
mini:
host: "mini"
user: "lisihao"
control_master: true

tabs:
# Tab 1: quad 2x2 default — 4 panes monitoring solar harness
- id: "solar-quad"
title: "Solar Harness (quad)"
layout: "quad"
panes:
- title: "planner"
source: "local"
tmux_target: "solar-harness:0.0"
mode: "capture"
lines: 60
interval_sec: 2

- title: "builder"
source: "local"
tmux_target: "solar-harness:0.1"
mode: "capture"
lines: 60
interval_sec: 2

- title: "evaluator"
source: "local"
tmux_target: "solar-harness:0.2"
mode: "capture"
lines: 60
interval_sec: 2

- title: "architect"
source: "local"
tmux_target: "solar-harness:0.3"
mode: "capture"
lines: 60
interval_sec: 2

# Tab 2: logs (tail mode)
- id: "solar-logs"
title: "Build Logs (tail)"
layout: "split"
panes:
- title: "harness-log"
source: "local"
tmux_target: "solar-harness:0.0"
mode: "tail"
log_path: "~/.solar/harness/.chain-watcher.log"

- title: "sprint-log"
source: "local"
tmux_target: "solar-harness:0.1"
mode: "tail"
log_path: "~/.solar/session-state.jsonl"

# Tab 3: remote mini (capture) — enable when remote is available
# - id: "mini-remote"
# title: "Mac Mini Remote"
# layout: "quad"
# panes:
# - title: "planner-remote"
# source: "remote"
# ssh_profile: "mini"
# tmux_target: "solar:0.0"
# mode: "capture"
# - title: "builder-remote"
# source: "remote"
# ssh_profile: "mini"
# tmux_target: "solar:0.1"
# mode: "capture"
# - title: "evaluator-remote"
# source: "remote"
# ssh_profile: "mini"
# tmux_target: "solar:0.2"
# mode: "capture"
# - title: "logs-remote"
# source: "remote"
# ssh_profile: "mini"
# tmux_target: "solar:0.2"
# mode: "tail"
# log_path: "~/.tmux-pane-logs/solar-0-2.log"
9 changes: 0 additions & 9 deletions harness/config/github-trends.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,6 @@ output:
retention_days: 100
fetch:
timeout_seconds: 20
retry_attempts: 3
retry_backoff_seconds: 3
retry_statuses:
- 408
- 429
- 500
- 502
- 503
- 504
sleep_between_requests_seconds: 8
min_source_interval_hours: 6
user_agent: Solar-GitHub-Trends/1.0 (+local research digest)
Expand Down
28 changes: 28 additions & 0 deletions harness/config/operator_registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,34 @@
"schedule": "on_demand",
"output_dir": "reports/gemini/"
},
"chatgpt_thinking_high": {
"primary": "tools/chatgpt_browser_agent_task_operator.py",
"executors": [
"scripts/browser_agent_chatgpt_wrapper.py",
"tools/chatgpt_report_operator.py"
],
"fallback": [],
"schedule": "on_demand",
"output_dir": "reports/chatgpt-thinking-high/"
},
"chatgpt_report_chapter_writer": {
"primary": "tools/chatgpt_report_operator.py",
"executors": [
"scripts/browser_agent_chatgpt_wrapper.py"
],
"fallback": [],
"schedule": "on_demand",
"output_dir": "reports/chatgpt-report-chapters/"
},
"technology_diagram": {
"primary": "tools/technology_diagram_painter_operator.py",
"executors": [
"scripts/browser_agent_technology_diagram_painter_wrapper.py"
],
"fallback": [],
"schedule": "on_demand",
"output_dir": "reports/technology-diagrams/"
},
"youtube": {
"primary": "scripts/youtube_influence_digest.py",
"executors": [
Expand Down
21 changes: 21 additions & 0 deletions harness/config/operator_schedules.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,27 @@
"type": "manual",
"cron": null
},
"chatgpt_thinking_high": {
"line": "chatgpt_thinking_high",
"primary": "tools/chatgpt_browser_agent_task_operator.py",
"source_schedule": "on_demand",
"type": "manual",
"cron": null
},
"chatgpt_report_chapter_writer": {
"line": "chatgpt_report_chapter_writer",
"primary": "tools/chatgpt_report_operator.py",
"source_schedule": "on_demand",
"type": "manual",
"cron": null
},
"technology_diagram": {
"line": "technology_diagram",
"primary": "tools/technology_diagram_painter_operator.py",
"source_schedule": "on_demand",
"type": "manual",
"cron": null
},
"youtube": {
"line": "youtube",
"primary": "scripts/youtube_influence_digest.py",
Expand Down
82 changes: 82 additions & 0 deletions harness/config/physical-operators.json
Original file line number Diff line number Diff line change
Expand Up @@ -1398,6 +1398,88 @@
"last_error": null
}
},
"mini-chatgpt-deep-research": {
"display_name": "ChatGPT Thinking High Browser Agent",
"plane": "interactive_browser",
"owner_host": "lisihao@100.122.223.55",
"pane": "solar-harness-multi-task:*",
"profile": "browser-agent",
"role": "knowledge-extractor",
"persona": "builder",
"provider": "openai",
"vendor": "OpenAI",
"backend": "command",
"model": "chatgpt-5.5",
"model_config": "ChatGPT Web UI Thinking high wrapper; project=杂项; no local fallback",
"base_url": "https://chatgpt.com",
"auth_mode": "oauth",
"key_ref": "chatgpt_browser_profile",
"quota_cycle": "webapp-account",
"quota_refresh_at": "unknown",
"quota_guard_state": "ok",
"enabled": true,
"disabled_reason": "",
"enabled_at": "2026-06-01T00:00:00Z",
"available": true,
"health_status": "ok",
"roles": [
"knowledge-extractor"
],
"task_classes": [
"browser-research",
"deep-research",
"research-synthesis",
"ai-influence-report",
"trend-judgment"
],
"strengths": [
"chatgpt-thinking-high",
"longform-synthesis",
"high-judgment",
"browser-agent",
"report-planning"
],
"preferred_for": [
"deep-research-chatgpt",
"ai-influence-report",
"trend-synthesis",
"longform-report",
"strategic-insight"
],
"avoid_for": [
"direct-code-edit",
"bulk-extraction",
"cheap-background"
],
"cost_tier": "high",
"latency_tier": "high",
"context_tier": "high",
"max_concurrency": 1,
"fallback_profile": "builder",
"command": "PATH=\"/opt/homebrew/bin:/usr/local/bin:$PATH\" CHATGPT_MODEL=\"${CHATGPT_MODEL:-chatgpt-5.5}\" CHATGPT_REASONING_EFFORT=\"${CHATGPT_REASONING_EFFORT:-high}\" BROWSER_AGENT_CHATGPT_MODEL_MODE=\"${BROWSER_AGENT_CHATGPT_MODEL_MODE:-thinking}\" BROWSER_AGENT_CHATGPT_REQUIRE_UI_MODE=\"${BROWSER_AGENT_CHATGPT_REQUIRE_UI_MODE:-true}\" BROWSER_AGENT_CHATGPT_PROJECT_NAME=\"${BROWSER_AGENT_CHATGPT_PROJECT_NAME:-杂项}\" python3 \"$HARNESS_DIR/tools/chatgpt_browser_agent_task_operator.py\"",
"policy": {
"write_files": "artifact_dir_only",
"run_shell": "restricted_operator_command",
"network": "allowed",
"secrets_access": "secret_ref_only",
"git_commit": "denied"
},
"flow_control": {
"success_cooldown_seconds": 180,
"rate_limit_cooldown_seconds": 3600,
"auth_cooldown_seconds": 21600,
"defer_on_cooldown": true,
"defer_on_auth": true
},
"state": {
"availability": "enabled",
"runtime_state": "idle",
"cooldown_until": null,
"last_heartbeat_at": null,
"last_success_at": null,
"last_error": null
}
},
"mini-youtube-transcript-extractor": {
"display_name": "YouTube Transcript Extractor Browser Agent",
"plane": "interactive_browser",
Expand Down
7 changes: 4 additions & 3 deletions harness/config/tech-hotspot-radar.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ fetch:
sleep_between_requests_seconds: 3
min_source_interval_hours: 6
user_agent: Solar-Tech-Hotspot-Radar/1.0 (+local knowledge capture)
github_token_env: GITHUB_TOKEN

# ── YouTube source ──────────────────────────────────────────────────
youtube:
Expand All @@ -49,7 +50,7 @@ youtube:
backfill_per_channel_limit: 100 # yt-dlp playlist cap per channel
keep_seen_days: 45
transcript_max_chars: 60000
min_transcript_duration_seconds: 600 # do not spend transcript/ASR budget on videos under 10 minutes
min_transcript_duration_seconds: 600 # do not spend transcript/browser-capture budget on videos under 10 minutes
phase_report_reasoner:
provider: browser_agent_chatgpt
model: chatgpt-5.5
Expand Down Expand Up @@ -79,8 +80,8 @@ youtube:
notebook_name: ""
timeout_seconds: 1800
asr:
enabled: true
max_per_run: 2
enabled: false
max_per_run: 0
backend: mlx-whisper
whisper_model: mlx-community/whisper-small-mlx
openai_whisper_model: small
Expand Down
8 changes: 4 additions & 4 deletions harness/config/youtube-influence-digest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ fetch:
max_consecutive_transcript_failures: 8
user_agent: Solar-YouTube-Influence-Digest/1.0 (+local transcript capture)
asr:
enabled: true
# ASR is a fallback path. Browser-agent transcript capture is the primary path,
# so ASR backlog must not block /knowledge/progress health by default.
enabled: false
# Local/premium ASR is disabled. Browser-agent transcript capture is the only
# allowed no-caption fallback; failures must become metadata-only, not ASR jobs.
blocking_for_knowledge_progress: false
queue_health_policy: fallback_non_blocking
max_per_run: 1
max_per_run: 0
queue_dir: /Users/lisihao/.solar/harness/state/youtube-influence-digest/asr-queue
done_dir: /Users/lisihao/.solar/harness/state/youtube-influence-digest/asr-done
audio_dir: /Users/lisihao/.solar/harness/state/youtube-influence-digest/asr-audio
Expand Down
Loading