Pre production2 - #831
Open
charles-ramos wants to merge 22 commits into
Open
Conversation
Fase A do porte production1 -> production2:
- src/dashboard/Data/Agent/ (Agent.react.js, Agent.scss, AgentConfigDialog.react.js)
e src/lib/AgentService.js
- Empty state com B4aEmptyState + botao Configure; dialog com B4aFormModal (padrao
visual do production2)
- Form "Configure" (localStorage, provider OpenAI) para o usuario informar a apiKey
pela UI, sem editar o config.json
- Rota /agent no Dashboard.js + secao Agent na sidebar (DashboardView)
- Parse-Dashboard/app.js: porta a rota POST /apps/:appId/agent + makeOpenAIRequest +
database tools + conversas; adiciona require('parse/node'); usa fetch global (Node 18,
sem node-fetch); express.json() escopado so na rota (production2 nao tem body-parser global)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
O package.json declarava core-js em 3.28.0 (dependencies) e 3.6.5 (devDependencies). Sem lockfile, o npm install deixava o 3.6.5 no topo, que nao tem modulos como es.error.cause.js/es.array.at.js/etc. O babel usa corejs '3.28' (useBuiltIns 'entry'), entao o `npm run dashboard` (webpack build.config.js) quebrava com ~40 erros "Can't resolve 'core-js/modules/...'". Alinhado ambos para 3.28.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sem lockfile, o npm resolvia um tslib antigo (sem __spreadArray) no topo. O @amplitude/analytics-core chama tslib.__spreadArray em runtime -> TypeError -> tela branca no dashboard. tslib e transitivo (nao esta no package.json), entao forcei via "overrides" para 2.6.2 (tem __spreadArray, retrocompativel). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…uction2 - Agent.scss convertido do tema claro (production1) para o dark do production2: fundo #0f1c32, superficies/bolhas/input escuros, texto claro, acento azul. Layout/estrutura mantidos. - Toolbar: section "Core" -> "Agent" (breadcrumb correto). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Porta da production1 os constraints que faltavam no production2: - matches (regex, String) -> query.matches(field, str, modifiers) - onOrBefore (Date) -> query.lessThanOrEqualTo - onOrAfter (Date) -> query.greaterThanOrEqualTo Definicoes em Constraints + FieldConstraints (String/Date) em src/lib/Filters.js, e os cases correspondentes em src/lib/queryFromFilters.js. O production2 ja tinha neq/keyNeq/stringContainsString. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…que) O BrowserCell do production2 importa B4aBrowserCell.scss, que NAO tinha as classes .selected/.leftBorder/.rightBorder/.topBorder/.bottomBorder. A logica de selecao (handleCellClick + selectedCells) ja funcionava, mas classes.push(styles.selected) empurrava undefined -> celula selecionava internamente mas nao pintava (nenhum erro no console). Copiadas as 5 regras do BrowserCell.scss normal. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…curo - Cmd/Ctrl+C agora copia o INTERVALO de celulas selecionadas (tab/newline), nao so a celula focada. No production2 o range faz setCurrent(null) -> copyableValue undefined -> o case 67 existente nao copiava nada. Adicionado o copy multi-celula no topo do handleKey (guard >= 0 pra nao quebrar no estado inicial). - .selected: de #e3effd (claro) para rgba(22,105,252,.3) e bordas #1669fc — legivel no Data Browser escuro do production2 (antes o texto claro sumia no fundo azul-claro). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Portado da production1: no handleKey, case 32 (Space) faz toggle do selectRow da linha "current" (quando nao esta editando). production2 nao tinha esse case. Guards para this.props.selectRow/selection/data existirem. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lique pegar
O checkbox usava checked={selection['*'] || selection[obj.id]} sem coercao — quando
selection[id] era undefined, o input virava NAO-controlado, e a transicao
nao-controlado->controlado no clique fazia o React nao registrar a marcacao. Coercao
com !! (igual production1) mantem o input sempre controlado. O espaco ja funcionava
porque ia direto no selectRow.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(upstream) Porta a feature drag-to-select da production1: mousedown num checkbox inicia o arrasto, cada checkbox que o mouse passa por cima marca/desmarca, mouseup encerra. - Browser.react: estado rowCheckboxDragging/draggedRowSelection, metodos onMouseDownRowCheckBox/onMouseUpRowCheckBox/onMouseOverRowCheckBox, listener global de mouseup, e passa os handlers pro DataBrowser (fluem via ...other ao BrowserTable). - BrowserTable: repassa onMouseDown/OverRowCheckBox aos 3 <BrowserRow>. - BrowserRow: checkbox com onMouseDown, checkCell com onMouseOver. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…orage Agora que o pre-production2 tem getEnvVars/updateEnvVars (feature do production2): - Configure -> Save: grava a apiKey na env var OPENAI_API_KEY do app (merge com as existentes via getEnvVars); dispara rebuild do app (comportamento da feature). - Agent carrega: le a apiKey via getEnvVars; partes nao-secretas (name/provider/model) ficam em localStorage. A chave nunca persiste no disco do browser. - Dialog: onSubmit retorna a promise -> modal mostra "Saving..." durante o rebuild e surface erros. Descricao do campo API Key atualizada. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- icon 'collaborate-solid' (nao existia no sprite -> item sem icone) trocado por 'b4a-agent' (icone dedicado que ja existe em src/icons). - Remove subsections: [] -> o Sidebar renderizava um submenu VAZIO (bloco grande em branco abaixo de "Agent"). Sem a chave subsections, o item fica compacto como o "Overview". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rtilhada
- AgentConfigDialog vira gerenciador de lista: 1 API Key compartilhada + N modelos
(Display name + model), com "+ Add model" e "Remove" por modelo.
- saveAgentConfig({apiKey, models}): grava a chave no env var OPENAI_API_KEY (uma so)
e a lista de modelos (nao-secreta) no localStorage; monta em memoria cada modelo
com a chave compartilhada.
- loadAgentConfig: le a lista do localStorage + a chave do env var.
- O seletor "Model" no toolbar do Agent ja itera models -> troca entre eles.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Troca os icones dos menus do toolbar do Agent (que vieram do upstream) pelos B4a: - Model: gear-solid -> b4a-app-settings-icon - Permissions: locked-solid -> b4a-lock-icon - Chat: collaborate-solid -> b4a-agent Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- B4aSidebarSection.getIconContent nao tinha case pro 'b4a-agent' -> no estado ATIVO caia no default (null) e o icone sumia. Add case que renderiza o sprite b4a-agent. - AgentConfigDialog: "+ Add model" (link no rodape) vira um botao "+" (b4a-add-outline-circle) no topo da secao Models, seguindo o padrao de "adicionar row". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Layout (offsets eram da production1): - left 300px -> 280px ($b4aSidebarWidth) no emptyStateOverlay e chatForm - top/padding-top 116px -> 127px (header 63 + toolbar 64 do production2) - sidebar colapsada: $sidebarCollapsedWidth -> 88px ($b4aSidebarCollapsedWidth) - agentContainer: removido o background navy de 100vh que vazava ACIMA do toolbar cinza (a region do header). O navy agora vem do chatWindow/emptyStateOverlay, abaixo do toolbar. Tooltips (title do BrowserMenu = tooltip nativo) mais descritivos: - Model -> "Select AI model" - Permissions -> "Permissions — what the agent can do in your database" - Chat -> "Chat options (clear conversation)" Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…at" vago Remove o menu "Chat" (que juntava Configure + Clear num icone so, pouco intuitivo) e coloca dois botoes diretos no toolbar: - "+" (b4a-add-outline-circle) -> abre o Configure (add/editar/remover modelos). tooltip "Add / configure models". - Clear (b4a-trash-icon) -> limpa a conversa. tooltip "Clear conversation". Estilo .toolbarAction (icone com padding + hover). clearChat ja guardava o browserMenuRef. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ixeira) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
lixeira parecia deletar dados, refresh parecia recarregar. O padrao de chat moderno para recomecar e o icone de compor/lapis = nova conversa. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Lixeira parecia deletar dados, refresh parecia recarregar, lapis parecia editar/voltar. Texto "Clear" e inequivoco. Tooltip "Clear conversation". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
O upgradePrompt (newFeaturesInLatestVersion) aparecia na pagina /apps sugerindo atualizar o dashboard. Removido o bloco; upgradePrompt fica sempre null. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Rotulo no toolbar com o nome do modelo selecionado (title mostra o model id, ex. gpt-4o) — dá pra ver qual está ativo sem abrir o menu. - selectedAgentModel deixa de ser global e passa a ser por-app (selectedAgentModel_<slug>); setDefaultModel respeita a escolha salva do app ou cai no primeiro modelo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
New Pull Request Checklist
Issue Description
Closes: FILL_THIS_OUT
Approach
TODOs before merging