ymq
6b7487d736
feat: switch cockpit UI to v2 agent endpoint
2026-08-11 13:36:58 +08:00
ymq
2ca5b5a808
AgentIO + hook in project_form.changed with full console.log
...
Hook intercepts AgentIO.inputw.inputed, replaces native handler with XHR.
Logs: HOOK install, inputed params, onprogress line count, parsed content.
Backend: 0x0a delimiters (unchanged).
2026-08-08 22:29:50 +08:00
ymq
78c3a926d1
frontend: replace AgentIO with TextArea+Button+XHR streaming
...
Simple controlled approach: TextArea input, Button click handler does
XHR POST with url-encoded body, onprogress splits 0x0a, JSON.parse
each line, appends Text widget to chat. No AgentIO interference.
2026-08-08 22:17:07 +08:00
ymq
e2291b7735
frontend: intercept AgentIO.inputw in project_form.changed, XHR splits on 0x0a
...
Backend: untouched (sends 0x0a newlines)
Frontend: on project_form.changed, unbind AgentIO's native inputed, rebind with custom XHR that sends url-encoded body and parses 0x0a-separated NDJSON
2026-08-08 22:08:55 +08:00
ymq
e470fdaf20
fix: send literal \\n (0x5c 0x6e) delimiter — matches HttpResponseStream split('\\n')
...
Confirmed via xxd on bricks.js: split('\\n') splits on backslash-n literal.
Backend now yields json + '\\n', matching LmmIO streaming pattern.
Frontend: clean AgentIO with url, no ready bind.
2026-08-08 22:06:24 +08:00
ymq
0b03b310f0
diag: ready bind on root VBox to inspect AgentIO widget state
2026-08-08 21:57:22 +08:00
ymq
3399e10b4a
diag: add global script to inspect AgentIO widget + inputed event params
2026-08-08 21:55:09 +08:00
ymq
62e7aea8b6
fix: widgettype AgentInput→AgentIO (registered class), add console.log
2026-08-08 21:45:14 +08:00
ymq
aeb865b02a
v3.2: AgentInput native handler — {content:...} format + url option
...
Backend: yields {content: 'text'} | {error: 'text'} chunks (AgentOut compatible)
Frontend: AgentInput.url set, native HttpResponseStream splits \n + JSON.parse
Bind script: just creates chat bubbles, no custom XHR
2026-08-08 21:41:45 +08:00
ymq
5ff3c35a91
v3.1: clean NDJSON streaming — no SSE prefix, no [DONE], content-type text/plain
...
Backend: yields raw JSON+\n, stream_response with text/plain
Frontend: XHR.onprogress splits on \n, parses each line as JSON
2026-08-08 21:32:04 +08:00
ymq
9822d18eeb
frontend: SSE parser - split on 'data: ', extract JSON before \n\n, handle [DONE]
2026-08-08 21:28:39 +08:00
ymq
883b87c0bb
streaming v3.1: XHR+onprogress frontend + stream_response backend
...
Backend: stream_response with NDJSON (restored)
Frontend: XMLHttpRequest.onprogress replaces fetch.getReader()
- more compatible, no ReadableStream API dependency
- incrementally parses NDJSON lines as they arrive
2026-08-08 17:15:50 +08:00
ymq
0d2f6da261
frontend: revert to .json() response handler (detect streaming is removed)
...
Backend returns {success, agent_reply, widgets}. Frontend uses r.json()
and renders widgets array if present. No streaming/NDJSON.
2026-08-08 17:14:29 +08:00
ymq
1f352b5f8e
fix: _makeWidget deep-clone opts; stronger LLM prompt for tool_call format
2026-08-08 16:23:26 +08:00
ymq
406e441c75
frontend: fix split('\n') escaping + bricks.Factory.get for widget creation
2026-08-08 16:04:08 +08:00
ymq
1144a33e28
frontend: streaming NDJSON response + file name display + file click toggle
...
- Replace r.json() with streaming reader (body.getReader())
- Parse NDJSON lines, bricks.buildWidget() each widget, append to chat
- File names shown as 📎 tags in user bubble
- Agent text updates on first widget, then stays
- Global click handler: .file-name → toggle sibling .file-content
2026-08-08 16:00:00 +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
64cd5564de
fix: index_cockpit 迭代按钮 popup-window -> pw.content_w
2026-08-07 15:48:07 +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
fe15f4861b
fix: 文件传输改用file_names数组(避免File对象序列化丢失)
2026-08-06 17:45:39 +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
289ccb1656
feat: add cockpit index page + DDL reference for SDLC module
2026-08-03 10:46:32 +08:00