Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
ced97a6
Add GPTRequirementWriter browser operator
lisihao Jun 3, 2026
b655283
Integrate GPTRequirementWriter into intent pipeline
lisihao Jun 3, 2026
108653c
Refine GPTRequirementWriter trigger config and compile segments
lisihao Jun 3, 2026
7abb90f
Map enhanced requirement sections into DAG semantic hints
lisihao Jun 3, 2026
d4080de
Apply semantic node template overrides for requirement sections
lisihao Jun 3, 2026
c36f19d
Upgrade DAG structure for heavy semantic requirement families
lisihao Jun 3, 2026
dcd669c
Upgrade research DAG for heavy semantic requirement families
lisihao Jun 3, 2026
b838e6d
Fix ChatGPT project navigation through sidebar projects
lisihao Jun 4, 2026
e147caa
Fix browser agent headless defaults and wrapper cleanup
lisihao Jun 4, 2026
496b66b
Add browser session reuse broker for lineage flows
lisihao Jun 4, 2026
823f976
Fix browser agent headless defaults and session lineage wiring
lisihao Jun 4, 2026
8dcc4d9
Unify browser operator submit path
lisihao Jun 4, 2026
97154d0
Align DeepResearchBrowser with logical bindings
lisihao Jun 4, 2026
1669445
Add browser_agent_session actor worker
lisihao Jun 4, 2026
8564610
Add browser agent session slot pool
lisihao Jun 4, 2026
9a8159d
Implement browser agent async submit collect loop
lisihao Jun 4, 2026
b47099a
Add browser agent session supervisor loop
lisihao Jun 4, 2026
c59079f
Add browser agent session control CLI
lisihao Jun 4, 2026
00d669c
Route ChatGPT operators through session control
lisihao Jun 4, 2026
fe811d3
Use explicit session task polling in tech hotspot radar
lisihao Jun 4, 2026
996a20f
Unify Gemini and YouTube browser submit helpers
lisihao Jun 4, 2026
fbabff0
Route Gemini deep research through session control
lisihao Jun 4, 2026
bc17b2e
Add production browser agent provider for YouTube report
lisihao Jun 4, 2026
3b2ecd7
Wire YouTube digest into browser agent report runtime
lisihao Jun 4, 2026
8cf0aff
Add YouTube browser agent report config and smoke
lisihao Jun 4, 2026
925b565
Fix browser agent live smoke collect flow
lisihao Jun 4, 2026
f11aed2
Fix Gemini browser agent session routing and wrapper exit
lisihao Jun 4, 2026
e1960ee
Force browser agents to use Chrome only
lisihao Jun 4, 2026
6f8a47a
Design figure-stage report integration for YouTube and HF
lisihao Jun 5, 2026
e9ed038
Add figure-stage report rendering for YouTube insights
lisihao Jun 5, 2026
2978019
Add HF figure-stage report integration
lisihao Jun 5, 2026
dfc23ff
Stabilize HF figure-stage browser agent flow
lisihao Jun 5, 2026
76e6381
Stabilize YouTube browser agent collect polling
lisihao Jun 5, 2026
7f77f72
Harden technology diagram painter capture polling
lisihao Jun 5, 2026
23500fc
Unify ChatGPT wrapper capture timeouts
lisihao Jun 5, 2026
4ad23ec
Batch ChatGPT report chapter and section calls
lisihao Jun 5, 2026
09be898
Back off ChatGPT session polling
lisihao Jun 5, 2026
3401dc1
Add ChatGPT completion sentinel notifications
lisihao Jun 5, 2026
092a7a9
Improve browser session slot affinity and backoff
lisihao Jun 5, 2026
d088e1e
Backfill request artifacts from ChatGPT report results
lisihao Jun 5, 2026
ea90d86
Pass harness root through YouTube report provider
lisihao Jun 5, 2026
a922e64
Ignore harness actor runtime artifacts
lisihao Jun 5, 2026
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
1 change: 1 addition & 0 deletions harness/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ usage/
monitor-drafts/
_raw_mirror/
_state_mirror/
actors/
scripts/__pycache__/
google-cse-token.json
google-cse-client_secret.json
Expand Down
117 changes: 117 additions & 0 deletions harness/config/agent-actors.json
Original file line number Diff line number Diff line change
Expand Up @@ -2460,6 +2460,123 @@
}
]
},
"mini-chatgpt-requirement-writer": {
"actor_id": "mini-chatgpt-requirement-writer",
"host_id": "mini",
"operator_alias": "mini-chatgpt-requirement-writer",
"aliases": [
"mini-chatgpt-requirement-writer"
],
"role": "planner",
"display_meta": {
"display_name": "GPT Requirement Writer",
"tmux_session": "solar-harness-multi-task",
"tmux_window": null,
"tmux_pane_index": null
},
"lease": {
"acquired_at": null,
"expires_at": null,
"renewable": true,
"preemptible": true,
"heartbeat_timeout_sec": 120,
"lease_id": null,
"holder_sprint": null
},
"mailbox": {
"inbox": "actors/mini-chatgpt-requirement-writer/inbox",
"outbox": "actors/mini-chatgpt-requirement-writer/outbox",
"logs": "actors/mini-chatgpt-requirement-writer/logs",
"state_json": "actors/mini-chatgpt-requirement-writer/state.json",
"heartbeat_json": "actors/mini-chatgpt-requirement-writer/heartbeat.json"
},
"context_packet_ref": {
"path": null,
"packet_id": null
},
"evidence_ledger_ref": {
"path": "actors/mini-chatgpt-requirement-writer/evidence"
},
"capability": {
"research": 5,
"browser": 2,
"multimodal": 2,
"reliability": 4
},
"capability_profile": {
"architecture_reasoning": 4,
"code_impl": 1,
"root_cause_debug": 2,
"test_generation": 1,
"test_execution": 1,
"research_synthesis": 4,
"academic_critique": 3,
"browser_use": 2,
"gui_use": 1,
"long_context": 5,
"multi_agent_coordination": 2,
"speed": 2
},
"risk_profile": {
"allowed_write_scope": "project",
"allowed_shell_scope": "denied",
"allowed_network": "allowed",
"allowed_secrets": "secret_ref_only",
"destructive_actions": "denied",
"git_commit": "denied",
"git_push": "denied",
"payment_or_external_action": "denied",
"requires_human_for": [
"payment_or_external_action"
]
},
"cost_profile": {
"cost_tier": "high",
"token_budget_class": "large",
"quota_period": "monthly",
"reserve_ratio": 0.2,
"effort": "heavy",
"prefer_for": [
"requirement-design",
"spec-authoring",
"chaptered-prd"
],
"avoid_for": [
"code-implementation"
]
},
"quota": {
"quota_type": "webapp-account",
"period": "unknown",
"on_exhausted": "disable_and_fallback"
},
"policy": {
"write_files": "artifact_dir_only",
"run_shell": "denied",
"network": "allowed",
"secrets_access": "secret_ref_only",
"git_commit": "denied"
},
"evidence": {
"last_smoke_at": null,
"last_smoke_result": null,
"last_task_at": null,
"last_task_id": null,
"last_task_result": null,
"provenance": "generated from physical-operators.json:mini-chatgpt-requirement-writer at 2026-06-03T19:55:00Z for raw-requirement requirement writer routing"
},
"persona_binding": {
"persona_id": "builder",
"persona_file": "personas/builder.md",
"knobs_override": {}
},
"fallback_ladder": [
{
"actor_id": "mini-claude-opus-planner",
"condition": "quota_exhausted"
}
]
},
"mini-youtube-transcript-extractor": {
"actor_id": "mini-youtube-transcript-extractor",
"host_id": "mini",
Expand Down
41 changes: 39 additions & 2 deletions harness/config/logical-operators.json
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,21 @@
"singleton": false
}
},
"GPTRequirementWriter": {
"operator_type": "GPTRequirementWriter",
"description": "Routes raw user requirements to a ChatGPT Thinking High browser agent that expands them into chaptered requirement designs for downstream requirement compilation.",
"primary_role": "planner",
"required_capabilities": {
"research_synthesis": 4,
"long_context": 5,
"browser_use": 2
},
"cost_hint": "high",
"concurrency": {
"max_parallel": 2,
"singleton": false
}
},
"WebwrightPlaywright": {
"operator_type": "WebwrightPlaywright",
"description": "Runs deterministic Playwright/Webwright browser automation for browser research, UI inspection, and web artifact collection.",
Expand Down Expand Up @@ -1084,12 +1099,12 @@
"operator_type": "DeepResearchGemini",
"candidates": [
{
"actor_id": "mini-gemini-deep-research",
"actor_id": "browser_agent_session",
"priority": 1,
"condition": "always"
},
{
"actor_id": "browser_agent_session",
"actor_id": "mini-gemini-deep-research",
"priority": 2,
"condition": "quota_ok"
},
Expand All @@ -1105,8 +1120,30 @@
"DeepResearchChatGPT": {
"operator_type": "DeepResearchChatGPT",
"candidates": [
{
"actor_id": "browser_agent_session",
"priority": 1,
"condition": "always"
},
{
"actor_id": "mini-chatgpt-deep-research",
"priority": 2,
"condition": "quota_ok"
},
{
"actor_id": "mini-claude-opus-planner",
"priority": 3,
"condition": "always"
}
],
"selection_policy": "priority_first",
"fallback_policy": "queue"
},
"GPTRequirementWriter": {
"operator_type": "GPTRequirementWriter",
"candidates": [
{
"actor_id": "mini-chatgpt-requirement-writer",
"priority": 1,
"condition": "always"
},
Expand Down
3 changes: 2 additions & 1 deletion harness/config/logical-operators.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://solar.local/schemas/logical-operators.schema.json",
"title": "Solar Logical Operator Registry",
"description": "Routing abstraction layer between DAG nodes and physical actor assignments. Defines the 16 P0 logical operator types, their bindings to candidate actor_ids, and the DAG node constraint that prevents direct physical id use.",
"description": "Routing abstraction layer between DAG nodes and physical actor assignments. Defines the P0 logical operator types, their bindings to candidate actor_ids, and the DAG node constraint that prevents direct physical id use.",
"type": "object",
"required": ["version", "logical_operators", "bindings"],
"additionalProperties": false,
Expand Down Expand Up @@ -53,6 +53,7 @@
"DeepResearchBrowser",
"DeepResearchGemini",
"DeepResearchChatGPT",
"GPTRequirementWriter",
"WebwrightPlaywright",
"BrowserUseMcp",
"YoutubeTranscriptExtractor",
Expand Down
9 changes: 9 additions & 0 deletions harness/config/operator_registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@
"schedule": "on_demand",
"output_dir": "reports/chatgpt-report-chapters/"
},
"chatgpt_requirement_writer": {
"primary": "tools/chatgpt_requirement_writer_operator.py",
"executors": [
"scripts/browser_agent_chatgpt_wrapper.py"
],
"fallback": [],
"schedule": "on_demand",
"output_dir": "reports/chatgpt-requirement-writer/"
},
"technology_diagram": {
"primary": "tools/technology_diagram_painter_operator.py",
"executors": [
Expand Down
7 changes: 7 additions & 0 deletions harness/config/operator_schedules.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@
"type": "manual",
"cron": null
},
"chatgpt_requirement_writer": {
"line": "chatgpt_requirement_writer",
"primary": "tools/chatgpt_requirement_writer_operator.py",
"source_schedule": "on_demand",
"type": "manual",
"cron": null
},
"technology_diagram": {
"line": "technology_diagram",
"primary": "tools/technology_diagram_painter_operator.py",
Expand Down
78 changes: 78 additions & 0 deletions harness/config/physical-operators.json
Original file line number Diff line number Diff line change
Expand Up @@ -1837,6 +1837,84 @@
},
"deprecated": true
},
"mini-chatgpt-requirement-writer": {
"display_name": "GPT Requirement Writer Browser Agent",
"plane": "interactive_browser",
"owner_host": "lisihao@100.122.223.55",
"pane": "solar-harness-multi-task:*",
"profile": "browser-agent",
"role": "planner",
"persona": "builder",
"provider": "openai",
"vendor": "OpenAI",
"backend": "command",
"model": "chatgpt-5.5",
"model_config": "ChatGPT Web UI Thinking high requirement writer; raw requirement first; project=杂项",
"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-03T00:00:00Z",
"available": true,
"health_status": "ok",
"roles": [
"planner",
"knowledge-extractor"
],
"task_classes": [
"requirement-design",
"prd-planning",
"spec-authoring",
"browser-research"
],
"strengths": [
"chatgpt-thinking-high",
"chaptered-requirements",
"raw-requirement-grounding",
"browser-agent"
],
"preferred_for": [
"raw-requirement-expansion",
"requirement-design",
"chaptered-prd"
],
"avoid_for": [
"direct-code-edit",
"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_REQUIREMENT_WRITER_MODEL=\"${CHATGPT_REQUIREMENT_WRITER_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:-杂项}\" BROWSER_AGENT_PROFILE_DIRECTORY=\"${BROWSER_AGENT_PROFILE_DIRECTORY:-Profile 1}\" BROWSER_AGENT_PROFILE_STRATEGY=\"${BROWSER_AGENT_PROFILE_STRATEGY:-persistent}\" BROWSER_AGENT_CHATGPT_PROFILE_STRATEGY=\"${BROWSER_AGENT_CHATGPT_PROFILE_STRATEGY:-persistent}\" BROWSER_AGENT_TARGET_ACCOUNT_EMAIL=\"${BROWSER_AGENT_TARGET_ACCOUNT_EMAIL:-browser-agent@example.com}\" BROWSER_AGENT_CHATGPT_ACCOUNT_EMAIL=\"${BROWSER_AGENT_CHATGPT_ACCOUNT_EMAIL:-browser-agent@example.com}\" BROWSER_AGENT_USER_DATA_DIR=\"${BROWSER_AGENT_USER_DATA_DIR:-/Users/lisihao/Library/Application Support/Google/Chrome}\" BROWSER_AGENT_CHATGPT_PROFILE_POLICY_FILE=\"${BROWSER_AGENT_CHATGPT_PROFILE_POLICY_FILE:-/Users/lisihao/.solar/harness/browser-agent-chatgpt-local.json}\" python3 \"$HARNESS_DIR/tools/chatgpt_requirement_writer_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
9 changes: 7 additions & 2 deletions harness/config/tech-hotspot-radar.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ youtube:
operator: browser_agent
chatgpt_project: 杂项
profile_directory: Profile 1
target_account_email: browser-agent@example.com
target_account_email: haogege1977@gmail.com
headless: false
scrub_client_state: true
open_project_first: true
Expand Down Expand Up @@ -1226,13 +1226,18 @@ hf_paper_insight:
merge_daily_hotspots: true
core_paper_limit: 12
supporting_paper_limit: 24
grouped_report_section_batch_size: 2
figure_bundle:
enabled: true
max_figures: 3
timeout_seconds: 900
high_reasoning:
mode: browser_agent
model: chatgpt-5.5
reasoning_effort: high
operator_kind: chapter_writer
profile_directory: Profile 1
target_account_email: browser-agent@example.com
target_account_email: haogege1977@gmail.com
headless: true
scrub_client_state: false
open_project_first: false
Expand Down
10 changes: 10 additions & 0 deletions harness/config/youtube-influence-digest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ output:
lookback_hours: 72
keep_seen_days: 45
transcript_max_chars: 60000
browser_agent_report:
enabled: false
requested_model: chatgpt-5.5-thinking-high
phase2_batch_size: 2
title_prefix: AI Influence YouTube Report
lineage_prefix: ai-influence-youtube-report
project_name: 杂项
headless: true
session_reuse: true
timeout_seconds: 1800
fetch:
timeout_seconds: 15
sleep_between_channels_seconds: 3.0
Expand Down
Loading