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
30 changes: 24 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
name: CI/CD Pipeline

on:
Expand Down Expand Up @@ -1689,15 +1689,24 @@

- name: "Run four-client + TUI E2E — local path discovery (issue #819)"
# Agent, OpenCode, Claude Code, and Codex execute the generated local
# `find` command in their own workspace. OpenCode is then replayed in a
# real PTY: command-stream feeds every chunk to xterm's renderer, the
# harness deduplicates frames, and the dialog log proves the complete
# user → tool call → tool result → final-answer sequence.
# `find` command in their own workspace. OpenCode, Claude Code, and
# Codex are then driven through real PTYs; their published adapter
# preserves scrollback, explicit resize input, asciicast, static SVG,
# and animation alongside the complete dialog sequence.
timeout-minutes: 5
env:
PORT: 8784
env: { PORT: 8784, ARTIFACT_DIR: /tmp/formal-ai-tui-artifacts/path-discovery }
run: experiments/agent_cli_e2e/run_issue_819.sh

- name: "Run OpenCode TUI E2E — report multiselect and issue body (issue #838)"
timeout-minutes: 3
env: { PORT: 8804, ARTIFACT_DIR: /tmp/formal-ai-tui-artifacts/report-flow }
run: experiments/agent_cli_e2e/run_issue_819_report_tui.sh

- name: "Run OpenCode TUI E2E — representative task-ladder node (issue #840)"
timeout-minutes: 3
env: { PORT: 8805, MODE: tui, ONLY: 838.L1, OUT: /tmp/formal-ai-tui-artifacts/task-ladder-results.json, TUI_ARTIFACT_DIR: /tmp/formal-ai-tui-artifacts/task-ladder, REQUIRE_ALL_PASS: 1 }
run: experiments/issue_840_task_ladder/run_ladder.sh

- name: "Run agent CLI E2E — auto-learning across two harnesses (issue #715)"
# The derived report names its own promotion gate
# `..._and_agent_cli_e2e_pass`, so the gate is only honest if a real
Expand Down Expand Up @@ -1777,6 +1786,15 @@
/tmp/agent-out-*.log
retention-days: 7

- name: Upload TUI transcripts and replay artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: agent-cli-tui-replays
path: /tmp/formal-ai-tui-artifacts
if-no-files-found: ignore
retention-days: 7

# === DEPLOY WEB APP ===
# Deploy the production web app from src/web/ to GitHub Pages after a successful build.
deploy-pages:
Expand Down
10 changes: 10 additions & 0 deletions changelog.d/20260725_004500_terminal_tui_capture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
bump: patch
---

### Added
- Capture real OpenCode, Claude Code, and Codex terminal sessions as lossless transcripts, frame data, asciicasts, snapshots, and animated SVG replays in agent CLI CI, preserving partial captures when a run fails.
- Exercise the report multiselect and a representative task-ladder node through the real OpenCode TUI.

### Fixed
- Seed Claude's ephemeral configuration with the correct JSON onboarding value so interactive sessions do not repeat setup prompts.
6 changes: 3 additions & 3 deletions data/meta/self-ast/index.lino
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ self_ast_census_index
module_count 293
full_ast_module_count 43
signature_module_count 250
symbol_count 6034
content_id self_ast_census_index_c5c4821521d6bf92
symbol_count 6037
content_id self_ast_census_index_2705e927fc4b0207
modules
src/agent.rs signature 50 source_module_d6dc0c5386fb1128
src/agentic_coding/associative_learning.rs full_ast 7 source_module_926e3e97b31fa30a
Expand Down Expand Up @@ -69,7 +69,7 @@ self_ast_census_index
src/cli_memory.rs signature 5 source_module_d10c6067fc63e984
src/cli_shared_dialog.rs signature 5 source_module_db14f3ca2c903557
src/cli_statement_audit.rs signature 5 source_module_374652e87d6c3b7b
src/client_integrations.rs signature 39 source_module_0329dca2be85319f
src/client_integrations.rs signature 42 source_module_e1b224659d98b13c
src/client_integrations/command.rs signature 5 source_module_708767cb4cfa58dd
src/client_integrations/server.rs signature 9 source_module_3f888a869002c4ed
src/client_integrations/session_files.rs signature 15 source_module_95e0d5b8ee2dac03
Expand Down
77 changes: 40 additions & 37 deletions data/meta/self-ast/src/client_integrations.lino
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,50 @@ self_ast_census
target src/client_integrations.rs
language rust
fidelity signature
byte_len 30225
line_count 898
content_id source_module_0329dca2be85319f
symbol_count 39
byte_len 30984
line_count 914
content_id source_module_e1b224659d98b13c
symbol_count 42
symbols
module command 18 18
module server 19 19
module session_files 20 20
module url 21 21
const DEFAULT_BASE_URL 30 30
const EMPTY_BACKUP_SENTINEL 31 31
enum ClientProtocol 34 39
function as_str 42 49
struct WithFormalAiArgs 55 120
struct RenderContext 123 137
function run_with_formal_ai 139 180
function select_integrations 182 194
function find_integration 196 216
function render_context 218 287
function run_ephemeral 289 411
function temp_scoped_path 413 427
function build_invocation_args 429 509
function contains_model_arg 511 514
function write_global_config 516 553
function undo_global_config 555 591
function restore_backup 593 609
function ensure_backup 611 624
function render_toml_settings 626 644
function set_toml_string 646 662
function table_at_path_mut 664 675
function merge_json_config 677 690
function render_json_settings 692 700
function json_settings_value 702 711
function set_json_string 713 743
function merge_json_value 745 759
function merge_shell_env_config 761 781
function remove_managed_block 783 803
function shell_double_quote 805 808
function render_template 810 830
function codex_model_catalog 832 866
function global_config_path 868 877
function backup_path 879 883
function write_file 885 891
function ensure_trailing_newline 893 898
const RENDERED_PLACEHOLDER 32 32
const ERROR_PLACEHOLDER 33 33
enum ClientProtocol 36 41
function as_str 44 51
struct WithFormalAiArgs 57 122
struct RenderContext 125 139
function run_with_formal_ai 141 182
function select_integrations 184 196
function find_integration 198 218
function render_context 220 289
function run_ephemeral 291 413
function temp_scoped_path 415 429
function build_invocation_args 431 511
function contains_model_arg 513 516
function write_global_config 518 555
function undo_global_config 557 593
function restore_backup 595 611
function ensure_backup 613 626
function render_toml_settings 628 646
function set_toml_string 648 664
function table_at_path_mut 666 677
function merge_json_config 679 692
function render_json_settings 694 702
function json_settings_value 704 713
function set_json_setting 715 752
function invalid_typed_json_setting_error 754 759
function merge_json_value 761 775
function merge_shell_env_config 777 797
function remove_managed_block 799 819
function shell_double_quote 821 824
function render_template 826 846
function codex_model_catalog 848 882
function global_config_path 884 893
function backup_path 895 899
function write_file 901 907
function ensure_trailing_newline 909 914
2 changes: 2 additions & 0 deletions data/seed/client-integrations.lino
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,8 @@ client_integrations
ephemeral
non_interactive_arg "--print"
temp_home_env "CLAUDE_CONFIG_DIR"
temp_home_config_path ".claude.json"
temp_home_json_set "hasCompletedOnboarding=json:true"
env "ANTHROPIC_AUTH_TOKEN={api_key}"
env "ANTHROPIC_API_KEY="
env "ANTHROPIC_BASE_URL={endpoint_base_url}"
Expand Down
10 changes: 5 additions & 5 deletions data/seed/closure-generated-01.lino
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,11 @@ meanings
lexeme en
surface
text "cli to cli"
client_integration_invalid_typed_json_setting
defined-by intent
lexeme en
surface
text "client integration invalid typed json setting"
client_server_did_not_listen
defined-by field
lexeme en
Expand Down Expand Up @@ -1389,8 +1394,3 @@ meanings
lexeme en
surface
text "knowledge representation"
kubaturit
defined-by term
lexeme en
surface
text "kubaturit"
10 changes: 5 additions & 5 deletions data/seed/closure-generated-02.lino
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
meanings
kubaturit
defined-by term
lexeme en
surface
text "kubaturit"
kubectl
defined-by token
lexeme en
Expand Down Expand Up @@ -1389,8 +1394,3 @@ meanings
lexeme en
surface
text "pattern test status phrase vy zdes ru"
pattern_test_status_phrase_wo_zai_zheli_zh
defined-by prompt_pattern
lexeme en
surface
text "pattern test status phrase wo zai zheli zh"
50 changes: 25 additions & 25 deletions data/seed/closure-generated-03.lino
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
meanings
pattern_test_status_phrase_wo_zai_zheli_zh
defined-by prompt_pattern
lexeme en
surface
text "pattern test status phrase wo zai zheli zh"
pattern_test_status_phrase_ya_zdes_ru
defined-by prompt_pattern
lexeme en
Expand Down Expand Up @@ -869,6 +874,26 @@ meanings
lexeme en
surface
text "response clarification zh"
response_client_integration_invalid_typed_json_setting_en
defined-by response_template
lexeme en
surface
text "response client integration invalid typed json setting en"
response_client_integration_invalid_typed_json_setting_hi
defined-by response_template
lexeme en
surface
text "response client integration invalid typed json setting hi"
response_client_integration_invalid_typed_json_setting_ru
defined-by response_template
lexeme en
surface
text "response client integration invalid typed json setting ru"
response_client_integration_invalid_typed_json_setting_zh
defined-by response_template
lexeme en
surface
text "response client integration invalid typed json setting zh"
response_concept_lookup_in_context_en
defined-by response_template
lexeme en
Expand Down Expand Up @@ -1369,28 +1394,3 @@ meanings
lexeme en
surface
text "response lexeme import cannot write lino zh"
response_lexeme_import_denotation_lost_en
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost en"
response_lexeme_import_denotation_lost_hi
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost hi"
response_lexeme_import_denotation_lost_ru
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost ru"
response_lexeme_import_denotation_lost_zh
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost zh"
response_lexeme_import_duplicate_qid_en
defined-by response_template
lexeme en
surface
text "response lexeme import duplicate qid en"
50 changes: 25 additions & 25 deletions data/seed/closure-generated-04.lino
Original file line number Diff line number Diff line change
@@ -1,4 +1,29 @@
meanings
response_lexeme_import_denotation_lost_en
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost en"
response_lexeme_import_denotation_lost_hi
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost hi"
response_lexeme_import_denotation_lost_ru
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost ru"
response_lexeme_import_denotation_lost_zh
defined-by response_template
lexeme en
surface
text "response lexeme import denotation lost zh"
response_lexeme_import_duplicate_qid_en
defined-by response_template
lexeme en
surface
text "response lexeme import duplicate qid en"
response_lexeme_import_duplicate_qid_hi
defined-by response_template
lexeme en
Expand Down Expand Up @@ -1369,28 +1394,3 @@ meanings
lexeme en
surface
text "tool import memory"
tool_intent_routing
defined-by tool
lexeme en
surface
text "tool intent routing"
tool_read_local_file
defined-by tool
lexeme en
surface
text "tool read local file"
tool_result_completed
defined-by intent
lexeme en
surface
text "tool result completed"
tool_result_empty_generic
defined-by intent
lexeme en
surface
text "tool result empty generic"
tool_result_empty_list
defined-by intent
lexeme en
surface
text "tool result empty list"
25 changes: 25 additions & 0 deletions data/seed/closure-generated-05.lino
Original file line number Diff line number Diff line change
@@ -1,4 +1,29 @@
meanings
tool_intent_routing
defined-by tool
lexeme en
surface
text "tool intent routing"
tool_read_local_file
defined-by tool
lexeme en
surface
text "tool read local file"
tool_result_completed
defined-by intent
lexeme en
surface
text "tool result completed"
tool_result_empty_generic
defined-by intent
lexeme en
surface
text "tool result empty generic"
tool_result_empty_list
defined-by intent
lexeme en
surface
text "tool result empty list"
tool_result_empty_local_path_search
defined-by intent
lexeme en
Expand Down
16 changes: 16 additions & 0 deletions data/seed/multilingual-responses.lino
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
multilingual_responses
response response_client_integration_invalid_typed_json_setting_en
intent client_integration_invalid_typed_json_setting
language en
text "invalid typed JSON setting `{rendered}`: {error}"
response response_client_integration_invalid_typed_json_setting_ru
intent client_integration_invalid_typed_json_setting
language ru
text "недопустимая типизированная настройка JSON `{rendered}`: {error}"
response response_client_integration_invalid_typed_json_setting_hi
intent client_integration_invalid_typed_json_setting
language hi
text "अमान्य टाइप की गई JSON सेटिंग `{rendered}`: {error}"
response response_client_integration_invalid_typed_json_setting_zh
intent client_integration_invalid_typed_json_setting
language zh
text "无效的带类型 JSON 设置 `{rendered}`:{error}"
response response_agentic_report_target_question_en
intent agentic_report_target_question
language en
Expand Down
Loading
Loading