@@ -890,69 +890,75 @@ function ConfigForm(props: {
890890 { /* Left column: Compaction Markers + User Memories */ }
891891 < div class = "config-card-content" >
892892 < div class = "config-field" >
893- < label class = "field-label" >
894- < span > Compaction Markers</ span >
895- < span class = "field-hint" > Inject boundary into OpenCode's DB so transform only processes the live tail</ span >
896- </ label >
897- < label class = "toggle" >
893+ < div class = "config-field-header" >
894+ < label class = "config-field-label" > Compaction Markers</ label >
895+ < span class = "config-field-key" > experimental.compaction_markers</ span >
896+ </ div >
897+ < span class = "config-field-desc" > Inject boundary into OpenCode's DB so transform only processes the live tail</ span >
898+ < label class = "toggle-switch" >
898899 < input type = "checkbox" checked = { compactionMarkers ( ) } onChange = { ( e ) => updateExp ( "compaction_markers" , e . currentTarget . checked ) } />
899900 < span class = "toggle-slider" />
900901 < span class = "toggle-label" > { compactionMarkers ( ) ? "Enabled" : "Disabled" } </ span >
901902 </ label >
902903 </ div >
903904
904- < div class = "config-field" style = { { "margin-top" : "16px" } } >
905- < label class = "field-label" >
906- < span > User Memories</ span >
907- < span class = "field-hint" > Extract behavioral observations from historian runs, promote recurring patterns to stable user memories. Requires dreamer.</ span >
908- </ label >
909- < label class = "toggle" >
905+ < div class = "config-field" >
906+ < div class = "config-field-header" >
907+ < label class = "config-field-label" > User Memories</ label >
908+ < span class = "config-field-key" > experimental.user_memories.enabled</ span >
909+ </ div >
910+ < span class = "config-field-desc" > Extract behavioral observations from historian runs, promote recurring patterns to stable user memories. Requires dreamer.</ span >
911+ < label class = "toggle-switch" >
910912 < input type = "checkbox" checked = { userMemEnabled ( ) } onChange = { ( e ) => updateExp ( "user_memories.enabled" , e . currentTarget . checked ) } />
911913 < span class = "toggle-slider" />
912914 < span class = "toggle-label" > { userMemEnabled ( ) ? "Enabled" : "Disabled" } </ span >
913915 </ label >
914916 </ div >
915917
916918 < Show when = { userMemEnabled ( ) } >
917- < div class = "config-field" style = { { "margin-top" : "8px" , "padding-left" : "12px" } } >
918- < label class = "field-label" >
919- < span > Promotion Threshold</ span >
920- < span class = "field-hint" > Minimum candidate observations before dreamer promotes to stable (2–20)</ span >
921- </ label >
922- < input type = "number" class = "field-input" min = { 2 } max = { 20 } value = { userMemThreshold ( ) } onInput = { ( e ) => updateExp ( "user_memories.promotion_threshold" , Number ( e . currentTarget . value ) ) } style = { { width : "80px" } } />
919+ < div class = "config-field" >
920+ < div class = "config-field-header" >
921+ < label class = "config-field-label" > Promotion Threshold</ label >
922+ < span class = "config-field-key" > experimental.user_memories.promotion_threshold</ span >
923+ </ div >
924+ < span class = "config-field-desc" > Minimum candidate observations before dreamer promotes to stable (2–20)</ span >
925+ < input class = "config-input" type = "number" min = { 2 } max = { 20 } value = { userMemThreshold ( ) } onInput = { ( e ) => updateExp ( "user_memories.promotion_threshold" , Number ( e . currentTarget . value ) ) } />
923926 </ div >
924927 </ Show >
925928 </ div >
926929
927930 { /* Right column: Key File Pinning */ }
928931 < div class = "config-card-content" >
929932 < div class = "config-field" >
930- < label class = "field-label" >
931- < span > Key File Pinning</ span >
932- < span class = "field-hint" > Pin frequently-read files into the system prompt so the agent doesn't need to re-read them after drops. Requires dreamer.</ span >
933- </ label >
934- < label class = "toggle" >
933+ < div class = "config-field-header" >
934+ < label class = "config-field-label" > Key File Pinning</ label >
935+ < span class = "config-field-key" > experimental.pin_key_files.enabled</ span >
936+ </ div >
937+ < span class = "config-field-desc" > Pin frequently-read files into the system prompt so the agent doesn't need to re-read them after drops. Requires dreamer.</ span >
938+ < label class = "toggle-switch" >
935939 < input type = "checkbox" checked = { pinEnabled ( ) } onChange = { ( e ) => updateExp ( "pin_key_files.enabled" , e . currentTarget . checked ) } />
936940 < span class = "toggle-slider" />
937941 < span class = "toggle-label" > { pinEnabled ( ) ? "Enabled" : "Disabled" } </ span >
938942 </ label >
939943 </ div >
940944
941945 < Show when = { pinEnabled ( ) } >
942- < div class = "config-field" style = { { "margin-top" : "8px" , "padding-left" : "12px" } } >
943- < label class = "field-label" >
944- < span > Token Budget</ span >
945- < span class = "field-hint" > Total tokens for all pinned key files (2,000–30,000)</ span >
946- </ label >
947- < input type = "number" class = "field-input" min = { 2000 } max = { 30000 } step = { 1000 } value = { pinBudget ( ) } onInput = { ( e ) => updateExp ( "pin_key_files.token_budget" , Number ( e . currentTarget . value ) ) } style = { { width : "100px" } } />
946+ < div class = "config-field" >
947+ < div class = "config-field-header" >
948+ < label class = "config-field-label" > Token Budget</ label >
949+ < span class = "config-field-key" > experimental.pin_key_files.token_budget</ span >
950+ </ div >
951+ < span class = "config-field-desc" > Total tokens for all pinned key files (2,000–30,000)</ span >
952+ < input class = "config-input" type = "number" min = { 2000 } max = { 30000 } step = { 1000 } value = { pinBudget ( ) } onInput = { ( e ) => updateExp ( "pin_key_files.token_budget" , Number ( e . currentTarget . value ) ) } />
948953 </ div >
949954
950- < div class = "config-field" style = { { "margin-top" : "8px" , "padding-left" : "12px" } } >
951- < label class = "field-label" >
952- < span > Min Reads</ span >
953- < span class = "field-hint" > Minimum full-read count before a file is eligible for pinning (2–20)</ span >
954- </ label >
955- < input type = "number" class = "field-input" min = { 2 } max = { 20 } value = { pinMinReads ( ) } onInput = { ( e ) => updateExp ( "pin_key_files.min_reads" , Number ( e . currentTarget . value ) ) } style = { { width : "80px" } } />
955+ < div class = "config-field" >
956+ < div class = "config-field-header" >
957+ < label class = "config-field-label" > Min Reads</ label >
958+ < span class = "config-field-key" > experimental.pin_key_files.min_reads</ span >
959+ </ div >
960+ < span class = "config-field-desc" > Minimum full-read count before a file is eligible for pinning (2–20)</ span >
961+ < input class = "config-input" type = "number" min = { 2 } max = { 20 } value = { pinMinReads ( ) } onInput = { ( e ) => updateExp ( "pin_key_files.min_reads" , Number ( e . currentTarget . value ) ) } />
956962 </ div >
957963 </ Show >
958964 </ div >
0 commit comments