57 Commits

Author SHA1 Message Date
pipeline
3cf1d04e36 fix: workspace popup - use HBox+buildWidget pattern like task btn 2026-08-12 14:07:22 +08:00
pipeline
16a51e2c83 fix: workspace popup render - use resizebox instead of content_w 2026-08-12 14:03:15 +08:00
ymq
8908112a65 feat: Tree+dataurl workspace (RAG pattern); shortcut files 2026-08-12 12:40:05 +08:00
ymq
fa9fc76bef fix: replace Tree widget with VScrollPanel dir listing 2026-08-12 12:37:49 +08:00
ymq
c8e597764d feat: workspace browser with tree+file list+Wterm editor 2026-08-12 10:47:58 +08:00
ymq
6b7487d736 feat: switch cockpit UI to v2 agent endpoint 2026-08-11 13:36:58 +08:00
ymq
9bef8e131a fix: AgentIO as main chat area with url+model_dataurl+model_cwidth+placeholder 2026-08-08 23:27:39 +08:00
ymq
b4c9e5dd4c agent_input.js → bricks, AgentIO uses AgentInput internally, index.ui clean AgentIO 2026-08-08 23:23:10 +08:00
ymq
6426e1aa65 fix: AgentInput inputed bind — stream NDJSON via body.getReader() instead of r.json() 2026-08-08 23:18:51 +08:00
ymq
e3148bde6f clean: AgentIO native, no hooks, no patches 2026-08-08 23:14:40 +08:00
ymq
81a6126896 fix: monkey-patch handle_chunk to split on 0x0a — no AgentIO changes 2026-08-08 23:11:06 +08:00
ymq
f4c3ee0d56 fix: clean AgentIO inputed bind, no project_form hook 2026-08-08 23:05:19 +08:00
ymq
acc84707e3 fix: index.ui AgentInput→AgentIO + url + hook in project_form.changed 2026-08-08 22:56:38 +08:00
dbaf2f7b28 refactor: context_bar改为UiCode项目选择器+任务按钮 2026-08-07 17:57:02 +08:00
78e9d6a903 fix: 用Html+script替代失效的datawidget,页面加载时fetch context更新按钮 2026-08-07 17:47:49 +08:00
ba454f84cc fix: context_bar添加render事件,页面加载时fetch context更新按钮标签 2026-08-07 17:46:16 +08:00
64ba5daf92 fix: 先fetch context再判断,避免datawidget返回null 2026-08-07 17:24:45 +08:00
c812e827ea fix: 移除无效的 new bricks.urlwidget,只用 fetch 渲染任务列表 2026-08-07 17:18:26 +08:00
bcd160d38e feat: 当前项目弹窗显示任务列表,点击任务查看详情 2026-08-07 17:11:36 +08:00
ca26bde685 fix: 当前项目按钮始终显示选择器,去掉详情弹窗 2026-08-07 17:04:26 +08:00
7841c3b26c fix: Button用 text_w.set_text 而非 set_text 2026-08-07 16:55:16 +08:00
6efd5d007a fix: setText -> set_text (Bricks snake_case API) 2026-08-07 16:51:11 +08:00
073140d8de fix: fetch回调直接更新按钮标签+setValue,替代无效的datawidget.render() 2026-08-07 16:47:05 +08:00
c07ba94552 fix: 补漏 iteration 按钮的 popup-window -> pw.content_w 2026-08-07 15:47:48 +08:00
c2c9374c1d fix: document.querySelector('.popup-window') -> pw.content_w.dom_element.querySelector('select') 2026-08-07 15:47:34 +08:00
0f39febf94 fix: 删掉确定按钮,下拉选择后自动提交 2026-08-07 15:44:09 +08:00
4ee00bf9cc fix: 按钮触发form.submit(),Form bind用urlwidget提交 2026-08-07 15:40:35 +08:00
e1ac09542a fix: Form submit + urlwidget 替代确定按钮,context_update 返回 widget 自关闭弹窗 2026-08-07 15:26:55 +08:00
82f9fb6764 fix: 当前项目/迭代按钮改为选择器弹窗,无选中时显示列表供选择
- 当前项目按钮:无项目时弹出选择器,有项目时显示详情
- 当前迭代按钮:无迭代时弹出选择器(按项目过滤),有迭代时显示详情
- 新增 cockpit_project_picker.dspy:返回项目列表
- 新增 cockpit_iteration_picker.dspy:返回迭代列表(支持project_id过滤)
- 新增 cockpit_context_update.dspy:保存选择到 pipeline_agent_settings
2026-08-07 15:06:17 +08:00
3f91752d06 fix: bricks.showError -> bricks.show_error (snake_case API)
bricks.js only exposes show_error(), not showError().
Affected: index.ui / index_cockpit.ui — project & iteration
detail popup guards that show error when no context selected.
2026-08-07 13:47:20 +08:00
32bb085b6e fix: FormData用file_names字符串数组传文件路径(避免Blob类型报错)+加catch兜底 2026-08-07 13:31:30 +08:00
ba2d7eca11 fix: fetch改用FormData(multipart)——ahserver自动保存文件到params_kw 2026-08-06 18:50:15 +08:00
523adc5303 fix: AgentInput提交数据修复——model_id容错、file_paths序列化、iteration_id/project_id从context读取 2026-08-06 16:04:51 +08:00
0a6baa0d52 feat: AgentInput控件 — TextFiles+UiCode模型选择一体化
- 新增 agent_input.js: bricks.AgentInput extends VBox
  - 内部结构: UiFile + DynamicColumn + UiText + [add_btn | model_selector(UiCode) | filler | submit_btn]
  - options: model_dataurl(模型列表API), model_cwidth, placeholder
  - event inputed: {prompt, add_files, model_id}
  - 自动注册 bricks.Factory.register('AgentInput', ...)
- index.ui/index_cockpit.ui: chat_input 改用 widgettype=AgentInput
- 利用 bricks 的 jsfiles() 机制自动加载 agent_input.js
2026-08-06 13:43:11 +08:00
d2542f1768 refactor: AgentInput复合控件 — TextFiles + UiCode模型选择整合
- 新建 agent_input VBox: 内嵌模型选择行(HBox) + TextFiles输入区,统一为一个输入控件
- 顶部移除 model_selector,底部模型选择作为 UiCode 嵌在输入框内
- index.ui & index_cockpit.ui 同步更新
2026-08-05 19:42:02 +08:00
0aad9561b0 refactor: 模型选择器移到输入区上方 — 去顶部model_selector
- index_cockpit.ui & index.ui: 移除顶部 HBox 中的 model_selector Form + 模型配置 Button
- 在 TextFiles 输入区上方新增模型选择行:🤖 下拉 + 模型配置按钮
- chat_input 脚本改为从 input_model_selector 读取 model_id (getValue)
- 修复脚本中 Unicode 转义损坏
2026-08-05 19:20:05 +08:00
4e374117e9 fix: context_bar弹窗改为inline展示data(不依赖外部页面) 2026-08-05 18:19:08 +08:00
8d158dcc86 feat: cockpit_context端点 + UI context_bar动态化
- 新增 cockpit_context.dspy API(读 pipeline_agent_settings,返回项目/迭代/workspace)
- index_cockpit.ui & index.ui context_bar:
  - 静态'当前项目/迭代:--' → Button(link样式)+datawidget自动加载
  - 点击项目/迭代弹出 PopupWindow 查看详情
2026-08-05 18:10:56 +08:00
fff34b04b3 fix: whiteSpace pre-wrap for agent messages, content preview in deliverables 2026-08-02 23:37:14 +08:00
40afce18e7 fix: remove duplicate stats_row, keep only quick_cards 2026-08-02 17:01:20 +08:00
97e2c6b2f4 feat: Phase 1 — intent recognition, guided conversation, context bar 2026-08-01 23:36:29 +08:00
84df91d9eb fix: model_id form reading fallback to select element 2026-08-01 21:57:04 +08:00
0d6266b088 fix: add model selector to root cockpit index.ui (was only in sd_cockpit) 2026-08-01 16:16:21 +08:00
c310754d57 fix: limit model config popup size (36x26 grid) 2026-08-01 11:33:07 +08:00
c0a31d60df fix: change cockpit refresh button to model config popup in index.ui 2026-08-01 11:18:34 +08:00
72cd262cdb feat(cockpit): product-grade LLM integration with context + model mgmt
Backend:
- cockpit_chat.dspy: real LLM calls via llm table config, Hermes-style
  context (system prompt + project/iteration + history), auto model
  selection (multimodal if files, text otherwise)
- cockpit_model_options.dspy: returns active models with capabilities
- llm table: added capabilities column (text/vision/multimodal)

Frontend:
- inputed script: no page reload, updates agent bubble with LLM reply
- stats_row refreshed on success, error shown in bubble

DB:
- sd_agent_settings table for per-user agent preferences
2026-07-31 18:06:27 +08:00
d7bace21db fix: setText -> set_text (bricks API is snake_case) 2026-07-31 17:14:33 +08:00
ef37e492c9 fix(cockpit): AgentIO-style UX — show user+agent bubbles immediately before POST
Follow bricks/agent.js AgentIO pattern:
- On inputed: instant user bubble + '正在分析需求...' agent placeholder in chat_scroll
- POST to cockpit_chat.dspy
- On success: reload to show complete conversation
- On error: show error text in the placeholder bubble

Previously crashed on VScrollPanel.render() — VScrollPanel has no render method.
Now uses add_widget() to append message bubbles dynamically, matching AgentIO.
2026-07-31 16:59:38 +08:00
b2314fd3b2 fix: add bricks.app as second arg to getWidgetById calls in cockpit scripts
The new bricks.js getWidgetById (line 2680) no longer has a default from_widget fallback.
When called without a second argument, from_widget is undefined and get_by_id crashes at
line 2691: Cannot read properties of undefined (reading 'dom_element').

Fixed both in refresh button click handler and TextFiles inputed handler.
2026-07-31 16:14:19 +08:00
163824870b fix: wrap getWidgetById in try-catch for missing current_iteration_id widget 2026-07-31 15:47:51 +08:00