opalacoder 0.2.3.2__tar.gz → 0.2.3.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/PKG-INFO +1 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/backlog_register.md +41 -32
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/App.jsx +47 -3
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/BottomPanel.jsx +29 -2
- opalacoder-0.2.3.5/gui_src/src/components/ChatPanel.jsx +512 -0
- opalacoder-0.2.3.5/gui_src/src/components/TextContextMenu.jsx +29 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/EditProjectModal.jsx +10 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/SettingsModal.jsx +1 -1
- opalacoder-0.2.3.5/gui_src/src/hooks/useTextContextMenu.js +61 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/agent_stdin.py +2 -0
- opalacoder-0.2.3.5/opalacoder/gui/assets/index-CiJtgyqm.js +189 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/gui/index.html +1 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/ide_server.py +31 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/memgpt_runtime.py +9 -2
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/terminal_manager.py +1 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/tools.py +38 -0
- opalacoder-0.2.3.5/opalacoder/web_search_config.py +233 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/workflow_tools.py +2 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/pyproject.toml +1 -1
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/requirements.txt +1 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/chat-orchestrator/SKILL.md +10 -0
- opalacoder-0.2.3.5/skills/web-search/SKILL.md +34 -0
- opalacoder-0.2.3.5/skills.yaml +2 -0
- opalacoder-0.2.3.5/tests/test_web_search.py +288 -0
- opalacoder-0.2.3.2/gui_src/src/components/ChatPanel.jsx +0 -136
- opalacoder-0.2.3.2/opalacoder/gui/assets/index-CeO8snuy.js +0 -169
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/.claude/rules/RULES.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/.claude/settings.json +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/.github/workflows/publish.yml +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/.gitignore +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AGENTS.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/100.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/102.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/1024.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/108.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/114.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/120.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/128.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/144.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/152.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/16.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/167.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/172.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/180.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/196.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/20.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/216.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/234.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/256.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/258.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/29.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/32.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/40.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/48.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/50.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/512.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/55.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/57.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/58.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/60.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/64.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/66.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/72.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/76.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/80.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/87.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/88.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/92.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/android/mipmap-hdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/android/mipmap-mdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/android/mipmap-xhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/appstore.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/icon.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/opalaicon.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/AppIcons/playstore.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/CLAUDE.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/GEMINI.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/README.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/agents.yaml +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/config.yaml +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/debug/debug_litellm_callbacks.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/debug/scratch_tail.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/debug/test_thought_stream.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/guide/analysis_results.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/guide/figs/logotipo.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/guide/paper_memplan.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/guide/skills-plugin-system.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/01-arquitetura.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/02-memgpt-orquestrador.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/03-skill-implement-feature.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/04-memoria.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/05-vcs-sombra.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/06-skills-e-plugins.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/07-configuracao.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/08-ide.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/09-ide-projectcreationinterface.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/10-chat-meta-params.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/docs/specs/README.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/index.html +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/package-lock.json +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/package.json +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/ActivityBar.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/ContextMenu.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/EditorPanel.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/ExplorerSidebar.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/FileNode.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/GitSidebar.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/StatusBar.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/ConfirmModal.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/DirPickerModal.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/InstallDepsPrompt.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/components/modals/NewProjectModal.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/hooks/useResizing.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/hooks/useTerminal.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/index.css +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/main.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/utils/formatMessage.jsx +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/utils/language.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/src/utils/storage.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/gui_src/vite.config.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/icon.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/main.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/__init__.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/agents.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/api_keys.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/archival.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/modelconfigs/gpt_oss__latest.metadata +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/modelconfigs/gpt_oss__latest.zip +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/skills/skill_html_css_js.metadata +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/skills/skill_html_css_js.zip +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/skills/skill_implement_feature.metadata +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore/skills/skill_implement_feature.zip +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/assetstore.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/chat_meta_params.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/cli.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/cli_commands.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/code_index.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/config.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/embeddings.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/gui/assets/index-CD7_Sjss.css +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/gui/assets/vendor-monaco-BkbU5OES.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/gui/assets/vendor-react-B2vUwPEE.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/gui/assets/vendor-xterm-3VOAfa_q.js +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/i18n.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/icon.png +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/orchestrator.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/planner.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/plugins/__init__.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/plugins/html_css_js_tools.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/project.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/session.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/skills.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/structured.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/terminal.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/vcs.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/vector_index.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/opalacoder/workflow_orchestrator.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/pytest.ini +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/command-line/SKILL.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/command-line/scripts/command_executor.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/skills_store/html-css-js/SKILL.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/skills_store/html-css-js/scripts/check_contracts.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/skills_store/implement-feature/SKILL.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/skills_store/implement-feature/scripts/run_workflow.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/view-editor/SKILL.md +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/skills/view-editor/scripts/run_view_editor.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_agent_config.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_agent_stdin.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_chat_meta_params.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_code_index_integration.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_command_line_skill.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_complexity_evaluator.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_context_guard.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_file_delete.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_i18n_coverage.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_implement_feature_script.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_memgpt_runtime.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_model_commands.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_planner_oracle_live.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_planner_output.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_project_store.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_refinement_loop.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_search_bugs.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_skills_directory_loader.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_unhashable_dict_bug.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_verification_strategies.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_view_editor_skill.py +0 -0
- {opalacoder-0.2.3.2 → opalacoder-0.2.3.5}/tests/test_workflow_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opalacoder
|
|
3
|
-
Version: 0.2.3.
|
|
3
|
+
Version: 0.2.3.5
|
|
4
4
|
Summary: Autonomous coding agent with interactive planning and modular execution
|
|
5
5
|
Project-URL: Homepage, https://github.com/gilzamir/OpalaCoder
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/gilzamir/OpalaCoder/issues
|
|
@@ -2,48 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
## FROM CURRENT = 0.1.17 TO NEXT = 0.1.18
|
|
4
4
|
|
|
5
|
-
1. Terminal dont work, no obvious message in back terminal, but on IDE terminal we get the message "[OpalaCoder] Conexão com o terminal perdida. Reconectando...".
|
|
5
|
+
1. Terminal dont work, no obvious message in back terminal, but on IDE terminal we get the message "[OpalaCoder] Conexão com o terminal perdida. Reconectando...". ✅
|
|
6
6
|
|
|
7
|
-
2. A janela de criação de projeto somente deveria permitir confirmar criação de projeto se o diretório especificado for válido.
|
|
7
|
+
2. A janela de criação de projeto somente deveria permitir confirmar criação de projeto se o diretório especificado for válido. ✅
|
|
8
8
|
|
|
9
|
-
3. New feature: install optional modules must be on IDE startup.
|
|
9
|
+
3. New feature: install optional modules must be on IDE startup. ✅
|
|
10
10
|
|
|
11
11
|
## FROM CURRENT = 0.1.18 TO NEXT = 0.1.19
|
|
12
12
|
|
|
13
|
-
1. Projeto não mostra nenhum erro quando o backend de modelos falha, por exemplo, tenta-se rodar um modelo que o ollama não tem instalado.
|
|
13
|
+
1. Projeto não mostra nenhum erro quando o backend de modelos falha, por exemplo, tenta-se rodar um modelo que o ollama não tem instalado. ✅
|
|
14
14
|
|
|
15
|
-
2. Ao criar um novo arquivo, ficou congelado em carregando.
|
|
15
|
+
2. Ao criar um novo arquivo, ficou congelado em carregando. ✅
|
|
16
16
|
|
|
17
|
-
3. A aba de Problems nunca mostra nada errado, mesmo tendo.
|
|
17
|
+
3. A aba de Problems nunca mostra nada errado, mesmo tendo. ✅
|
|
18
18
|
|
|
19
|
-
4. Adicionar opção de renomear arquivo/diretório selecionado
|
|
19
|
+
4. Adicionar opção de renomear arquivo/diretório selecionado. ✅
|
|
20
20
|
|
|
21
|
-
5. Adicionar opção de limpar output e problems.
|
|
21
|
+
5. Adicionar opção de limpar output e problems. ✅
|
|
22
22
|
|
|
23
|
-
6. Abrir mais de uma aba no editor de arquivo (vários arquivos abertos ao mesmo tempo)
|
|
23
|
+
6. Abrir mais de uma aba no editor de arquivo (vários arquivos abertos ao mesmo tempo). ✅
|
|
24
24
|
|
|
25
|
-
7. Verificar se o agente de comunicação com o backend é um LLMAgentBlock e, se for, como está as configurações de limite de chamada de ferramentas e de reflexão e outras.
|
|
25
|
+
7. Verificar se o agente de comunicação com o backend é um LLMAgentBlock e, se for, como está as configurações de limite de chamada de ferramentas e de reflexão e outras. ✅
|
|
26
26
|
|
|
27
27
|
## FROM CURRENT = 0.1.19 TO NEXT = 0.1.20
|
|
28
28
|
|
|
29
|
-
1. Implementar a visualização do pensamento do agente em uma aba thinking do painel inferior Implementar em uma aba separada thinking
|
|
29
|
+
1. Implementar a visualização do pensamento do agente em uma aba thinking do painel inferior Implementar em uma aba separada thinking. ✅
|
|
30
|
+
|
|
30
31
|
2. Aumentar tamanho da fonte quando digitar ctrl+ no editor, ou diminuir quando digitar ctrl-.
|
|
31
|
-
3. Disponibilizar uma skill da ide que permite ao chat visualizar o conteúdo atual do editor e retornar o trecho selecionado.
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
3. Disponibilizar uma skill da ide que permite ao chat visualizar o conteúdo atual do editor e retornar o trecho selecionado. ✅
|
|
33
|
+
|
|
34
|
+
4. Colocar botão de interroper o agente. ✅
|
|
35
|
+
|
|
36
|
+
5. Descobrir porque o agente granite4:latest demora a responder. ✅
|
|
37
|
+
|
|
34
38
|
6. O erro ao criar um projeto em um diretório existente ou proibido deveria ser mostrado como mensagem na janela de criação de projeto e não no terminal (colocar mensagem correta, de acordo com exceção).
|
|
35
|
-
6.1 Se diretório já existe e der erro de permissão, mostrar erro de permissão, se diretório não existe, criar diretório com nome do projeto.
|
|
36
|
-
7. Colocar hint de completação de servidor ollama (já trazer preenchido com o valor que geralmente é).
|
|
37
|
-
8. Criar uma janela de configuração de modelo com parâmetros mais usados que são aceitos no agenticblocks. E criar um comando set-model-param param-name value que permite qualquer parâmetro geralmente permitido pro litellm/ollama. Cuidado para implementar controle de verdade (valores adequados de parâmetro, por example).
|
|
39
|
+
6.1 Se diretório já existe e der erro de permissão, mostrar erro de permissão, se diretório não existe, criar diretório com nome do projeto. ✅
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
7. Colocar hint de completação de servidor ollama (já trazer preenchido com o valor que geralmente é). ✅
|
|
42
|
+
|
|
43
|
+
8. Criar uma janela de configuração de modelo com parâmetros mais usados que são aceitos no agenticblocks. E criar um comando set-model-param param-name value que permite qualquer parâmetro geralmente permitido pro litellm/ollama. Cuidado para implementar controle de verdade (valores adequados de parâmetro, por example). ✅
|
|
44
|
+
|
|
45
|
+
9. Permitir que mensagens no chat não podem ser copiadas. ✅
|
|
40
46
|
|
|
41
47
|
## FROM CURRENT = 0.2.3 TO NEXT = 0.2.4
|
|
42
48
|
1. Revisar código. ✅
|
|
43
49
|
|
|
44
50
|
2. Adicionar botões de maximizar e de minimizar o editor de texto (e outros paineis?). ✅
|
|
45
51
|
|
|
46
|
-
3.
|
|
52
|
+
3. Adicionar o conceito de meta configurações de chat (configurações que somente são válidas naquele momento que se conversa com o agente - durante a vida de uma mensagem). Por enquanto, apenas os parâmetros max_tokens, system_prompt, temperature, top-k, top-p, min-p são permitidos. Exemplos:
|
|
47
53
|
3.1 User: Implemente uma função que calcula a série de fourier. <param max_tokens=3>.
|
|
48
54
|
3.2 Agent: ok ok
|
|
49
55
|
3.3 User: Ora, ora, o que é você? @system_prompt="seja irônico na resposta"@
|
|
@@ -56,24 +62,27 @@
|
|
|
56
62
|
Em 3.3, o system_prompt softre uma injeção, mas que dura somente enquanto o agente responde. Observe que, a partir de 3.3, max_tokens já volta para o seu valor padrão. E partir de 3.5, a injeção de system prompt perde o efeito (resetando-se o system prompt para sua versão original).
|
|
57
63
|
Por baixo dos panos, primeiro identifica se a mensagem tem params, que são substituições válidas que começam com @, remove os parmas, faz a alteração temporária, executa a chamada, espera o modelo responder, desfaz a alteração temporária. ✅
|
|
58
64
|
|
|
59
|
-
4.
|
|
60
|
-
|
|
65
|
+
4. Disponibilizar a ferramenta web_search para o agente. ✅
|
|
66
|
+
|
|
67
|
+
5. Terminal do windows 11. ✅
|
|
68
|
+
|
|
69
|
+
6. Menu contextual para copiar, cortar e colar no terminal. ✅
|
|
61
70
|
|
|
62
|
-
|
|
71
|
+
7. Adicionar mais opções de parâmetros na interface de configuração do projeto, como temperature, top_p, top_k, min_p, presence_penalty, repetition_penalty. ✅
|
|
63
72
|
|
|
64
|
-
|
|
73
|
+
8. Histórico na entrada do chat. ✅
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
## FROM CURRENT = 0.2.4 TO NEXT = 0.2.5 (RELEASE FINAL DESSA ETAPA)
|
|
67
76
|
|
|
68
|
-
|
|
77
|
+
1. Revisar a Internacionalização.
|
|
69
78
|
|
|
70
|
-
|
|
79
|
+
2. Implementar e disponibilizar uma skill specs (em que o agente é instruído para a leitura de das specs).
|
|
71
80
|
|
|
72
|
-
|
|
81
|
+
3. Implementar suporte a git.
|
|
82
|
+
|
|
83
|
+
4. Prover ferramentas/funções de selecionar e pedir para o agente redefinir o que está selecionado. Ou para o agente detectar um erro em uma função ou trecho de código selecionado. Possíveis formas de se fazer isso:
|
|
84
|
+
4.1 : o usuário seleciona o texto, e no menu contextual tem opções: refinar e corrigir se algo estiver selecionado. Também há a possibilidade do usuário selecionar algo ou deixar o cursor em alguma parte e executar CTRL+i e então abrir uma caixa em que o usuário pode pedir algo (o agente recebe o que foi selecionado, a linha inicial, a linha final e a posição do cursor. Uma interpretação é feita "se seleção vazia e linha inicial igual a linha final, focar na posição do cursor como o lugar onde posso começar a colocar algo.")
|
|
73
85
|
|
|
74
|
-
|
|
75
|
-
2. Focar na integração com ollama (funcionar com tudo o que o ollama oferece e suas peculiaridades).
|
|
76
|
-
3. Criar spects de programador e de programador react.
|
|
86
|
+
5. Focar na integração com ollama (funcionar com tudo o que o ollama oferece e suas peculiaridades).
|
|
77
87
|
|
|
78
|
-
|
|
79
|
-
1. ...
|
|
88
|
+
6. Instalador autocontido para linux e windows.
|
|
@@ -92,6 +92,7 @@ export default function App() {
|
|
|
92
92
|
const [editingProject, setEditingProject] = useState(null);
|
|
93
93
|
const [confirmRequest, setConfirmRequest] = useState(null);
|
|
94
94
|
const [isSettingsOpen, setIsSettingsOpen] = useState(false);
|
|
95
|
+
const [webSearchConfig, setWebSearchConfig] = useState({ enabled: true, mcp_url: '', mcp_tool: 'web_search' });
|
|
95
96
|
const [showInstallPrompt, setShowInstallPrompt] = useState(false);
|
|
96
97
|
|
|
97
98
|
// ── IDE settings ──────────────────────────────────────────────────────────
|
|
@@ -124,6 +125,13 @@ export default function App() {
|
|
|
124
125
|
// ── Effects ───────────────────────────────────────────────────────────────
|
|
125
126
|
useEffect(() => { fetchProjects(); }, []);
|
|
126
127
|
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
fetch('/api/settings/web-search')
|
|
130
|
+
.then(r => r.ok ? r.json() : null)
|
|
131
|
+
.then(cfg => { if (cfg) setWebSearchConfig(cfg); })
|
|
132
|
+
.catch(() => {});
|
|
133
|
+
}, []);
|
|
134
|
+
|
|
127
135
|
useEffect(() => {
|
|
128
136
|
if (!editingProject) setShowAdvancedParams(false);
|
|
129
137
|
}, [editingProject]);
|
|
@@ -212,7 +220,18 @@ export default function App() {
|
|
|
212
220
|
|
|
213
221
|
// ── Helpers ───────────────────────────────────────────────────────────────
|
|
214
222
|
const addLog = (type, message) =>
|
|
215
|
-
setTerminalLogs(prev =>
|
|
223
|
+
setTerminalLogs(prev => {
|
|
224
|
+
if (prev.length > 0) {
|
|
225
|
+
const last = prev[prev.length - 1];
|
|
226
|
+
if (last.type === type && (type === 'thought' || type === 'stdout' || type === 'stderr')) {
|
|
227
|
+
return [
|
|
228
|
+
...prev.slice(0, -1),
|
|
229
|
+
{ ...last, message: last.message + message }
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return [...prev, { type, message, timestamp: new Date().toLocaleTimeString() }];
|
|
234
|
+
});
|
|
216
235
|
|
|
217
236
|
// ── API calls ─────────────────────────────────────────────────────────────
|
|
218
237
|
const fetchProjects = async () => {
|
|
@@ -551,8 +570,30 @@ export default function App() {
|
|
|
551
570
|
switch (event) {
|
|
552
571
|
case 'server_ready': addLog('info', 'Agente pronto.'); break;
|
|
553
572
|
case 'agent_started': addLog('info', `Agente ${data.agent} iniciado.`); break;
|
|
554
|
-
case 'thought':
|
|
555
|
-
|
|
573
|
+
case 'thought':
|
|
574
|
+
addLog('thought', data.content);
|
|
575
|
+
setThinkingLogs(prev => {
|
|
576
|
+
if (prev.length > 0) {
|
|
577
|
+
const last = prev[prev.length - 1];
|
|
578
|
+
if (last.type === 'THINKING') {
|
|
579
|
+
return [...prev.slice(0, -1), { ...last, content: last.content + data.content }];
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return [...prev, { timestamp: new Date().toLocaleTimeString(), type: 'THINKING', content: data.content }];
|
|
583
|
+
});
|
|
584
|
+
break;
|
|
585
|
+
case 'reflection':
|
|
586
|
+
addLog('thought', data.content);
|
|
587
|
+
setThinkingLogs(prev => {
|
|
588
|
+
if (prev.length > 0) {
|
|
589
|
+
const last = prev[prev.length - 1];
|
|
590
|
+
if (last.type === 'REFLECTION') {
|
|
591
|
+
return [...prev.slice(0, -1), { ...last, content: last.content + data.content }];
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
return [...prev, { timestamp: new Date().toLocaleTimeString(), type: 'REFLECTION', content: data.content }];
|
|
595
|
+
});
|
|
596
|
+
break;
|
|
556
597
|
case 'cancelled': addLog('warning', data.message || 'Execução cancelada.'); setChatMessages(prev => [...prev, { role: 'assistant', content: `⚠️ Interrompido: ${data.message || 'A execução do agente foi parada.'}` }]); break;
|
|
557
598
|
case 'tool_call': addLog('tool_call', `Chamando: ${data.tool} (${JSON.stringify(data.arguments)})`); break;
|
|
558
599
|
case 'tool_result': addLog('tool_result', `Sucesso: ${data.tool}`); break;
|
|
@@ -771,6 +812,7 @@ export default function App() {
|
|
|
771
812
|
bottomPanelHeight={bottomPanelHeight}
|
|
772
813
|
activeProject={activeProject}
|
|
773
814
|
terminalRef={terminalRef}
|
|
815
|
+
terminalInstanceRef={terminalInstanceRef}
|
|
774
816
|
logEndRef={logEndRef}
|
|
775
817
|
startResizing={startResizing}
|
|
776
818
|
isBottomMaximized={isBottomMaximized}
|
|
@@ -804,6 +846,8 @@ export default function App() {
|
|
|
804
846
|
]);
|
|
805
847
|
}}
|
|
806
848
|
chatEndRef={chatEndRef}
|
|
849
|
+
webSearchConfig={webSearchConfig}
|
|
850
|
+
setWebSearchConfig={setWebSearchConfig}
|
|
807
851
|
/>
|
|
808
852
|
)}
|
|
809
853
|
</div>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useRef } from 'react';
|
|
2
2
|
import { AlertCircle, Trash, Maximize2, Minimize2, ChevronUp, ChevronDown } from 'lucide-react';
|
|
3
|
+
import { useTextContextMenu } from '../hooks/useTextContextMenu.js';
|
|
4
|
+
import TextContextMenu from './TextContextMenu.jsx';
|
|
3
5
|
|
|
4
6
|
// Bottom panel with Output / Problems / Thinking / Terminal tabs.
|
|
5
7
|
export default function BottomPanel({
|
|
@@ -16,11 +18,15 @@ export default function BottomPanel({
|
|
|
16
18
|
bottomPanelHeight,
|
|
17
19
|
activeProject,
|
|
18
20
|
terminalRef,
|
|
21
|
+
terminalInstanceRef,
|
|
19
22
|
logEndRef,
|
|
20
23
|
startResizing,
|
|
21
24
|
isBottomMaximized,
|
|
22
25
|
onToggleMaximizeBottom,
|
|
23
26
|
}) {
|
|
27
|
+
const contentRef = useRef(null);
|
|
28
|
+
const { menu, onContextMenu, handleCopy, handlePaste, handleSelectAll } = useTextContextMenu();
|
|
29
|
+
|
|
24
30
|
const selectTab = (tab) => {
|
|
25
31
|
setActiveBottomTab(tab);
|
|
26
32
|
if (isTerminalCollapsed) setIsTerminalCollapsed(false);
|
|
@@ -28,6 +34,23 @@ export default function BottomPanel({
|
|
|
28
34
|
|
|
29
35
|
return (
|
|
30
36
|
<>
|
|
37
|
+
<TextContextMenu
|
|
38
|
+
menu={menu}
|
|
39
|
+
onCopy={handleCopy}
|
|
40
|
+
onPaste={handlePaste}
|
|
41
|
+
onSelectAll={
|
|
42
|
+
activeBottomTab === 'terminal'
|
|
43
|
+
? () => {
|
|
44
|
+
const term = terminalInstanceRef?.current;
|
|
45
|
+
close();
|
|
46
|
+
if (term) {
|
|
47
|
+
term.selectAll();
|
|
48
|
+
setTimeout(() => term.focus(), 50);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
: () => handleSelectAll(contentRef)
|
|
52
|
+
}
|
|
53
|
+
/>
|
|
31
54
|
{/* Vertical resize handle */}
|
|
32
55
|
{!isTerminalCollapsed && !isBottomMaximized && (
|
|
33
56
|
<div
|
|
@@ -113,7 +136,11 @@ export default function BottomPanel({
|
|
|
113
136
|
|
|
114
137
|
{/* Panel content */}
|
|
115
138
|
{!isTerminalCollapsed && (
|
|
116
|
-
<div
|
|
139
|
+
<div
|
|
140
|
+
ref={contentRef}
|
|
141
|
+
style={{ height: 'calc(100% - 30px)', width: '100%' }}
|
|
142
|
+
onContextMenu={onContextMenu}
|
|
143
|
+
>
|
|
117
144
|
|
|
118
145
|
{/* Output tab */}
|
|
119
146
|
{activeBottomTab === 'output' && (
|