magic-agent 2.4.3 → 2.6.3
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.
- package/CLIENT-CONTRACT.md +467 -41
- package/README.md +15 -14
- package/client-ui/pc/app.css +74 -0
- package/client-ui/pc/js/04-task-list.js +5 -1
- package/client-ui/pc/js/07-chat-stream-render.js +3 -3
- package/client-ui/pc/js/90-glue.js +40 -2
- package/client-ui/pc/js/92-composer.js +19 -4
- package/client-ui/pc/js/93-rail.js +16 -5
- package/client-ui/shared/conv/02-media-kinds.js +2 -2
- package/client-ui/shared/conv/03-chat-message.js +247 -23
- package/client-ui/shared/conv/06-ask-answer.js +75 -1
- package/client-ui/shared/conv/09-stream-apply.js +72 -7
- package/client-ui/shared/conv/19-attachments.js +157 -6
- package/client-ui/shared/conv/27-conv-ledger.js +5 -2
- package/client-ui/shared/conv/29-msg-variants.js +217 -0
- package/client-ui/shared/conv/conv.css +329 -174
- package/client-ui/shared/conv/dom-map.md +1 -0
- package/client-ui/shared/conversation.css +13 -2
- package/client-ui/shared/conversation.js +373 -50
- package/client-ui/shared/transport-http.js +14 -0
- package/client-ui-mobile/apps.css +16 -0
- package/client-ui-mobile/apps.js +406 -0
- package/client-ui-mobile/index.html +5554 -639
- package/client-ui-mobile/reqs.css +110 -1
- package/client-ui-mobile/reqs.js +533 -74
- package/client-ui-mobile/reqshot.js +505 -0
- package/client-ui-mobile/scripts.css +67 -0
- package/client-ui-mobile/scripts.js +599 -0
- package/client-ui-mobile/vendor/cose-base.js +3214 -0
- package/client-ui-mobile/vendor/cytoscape-fcose.js +1549 -0
- package/client-ui-mobile/vendor/cytoscape.min.js +32 -0
- package/client-ui-mobile/vendor/layout-base.js +5230 -0
- package/cmd/magic-client/browsectl.go +199 -0
- package/cmd/magic-client/clientctl.go +69 -10
- package/cmd/magic-client/main.go +210 -32
- package/internal/agent/ask.go +45 -0
- package/internal/agent/ask_test.go +39 -0
- package/internal/agent/attachments_test.go +6 -2
- package/internal/agent/capability.go +7 -1
- package/internal/agent/claude.go +20 -15
- package/internal/agent/codebuddy.go +125 -34
- package/internal/agent/codebuddy_account_test.go +54 -0
- package/internal/agent/codebuddy_stream_test.go +103 -0
- package/internal/agent/credits.go +713 -0
- package/internal/agent/credits_minimax_test.go +97 -0
- package/internal/agent/credits_test.go +211 -0
- package/internal/agent/custom_models.go +155 -0
- package/internal/agent/custom_models_test.go +125 -0
- package/internal/agent/dsh.go +123 -49
- package/internal/agent/dsh_caps_cache_test.go +184 -0
- package/internal/agent/dsh_resume.go +157 -7
- package/internal/agent/dsh_test.go +108 -6
- package/internal/agent/engine.go +37 -1
- package/internal/agent/engine_base.go +21 -17
- package/internal/agent/engine_base_test.go +2 -2
- package/internal/agent/engine_test.go +47 -86
- package/internal/agent/env.go +173 -1
- package/internal/agent/env_test.go +114 -0
- package/internal/agent/fallback.go +313 -0
- package/internal/agent/fallback_test.go +340 -0
- package/internal/agent/launch.go +43 -1
- package/internal/agent/limitnotice.go +207 -1
- package/internal/agent/limitnotice_test.go +140 -0
- package/internal/agent/llmhttp.go +46 -4
- package/internal/agent/llmhttp_test.go +157 -0
- package/internal/agent/models.go +53 -1
- package/internal/agent/models_test.go +20 -5
- package/internal/agent/pidalive_windows_test.go +40 -0
- package/internal/agent/runcmd.go +26 -0
- package/internal/agent/runcmd_windows.go +36 -5
- package/internal/agent/stream.go +166 -6
- package/internal/agent/stream_test.go +25 -38
- package/internal/agent/stream_timeline_test.go +2 -37
- package/internal/agent/streamjson.go +119 -7
- package/internal/agent/tools_suffix_test.go +6 -3
- package/internal/agent/trae.go +50 -243
- package/internal/agent/trae_exec.go +433 -0
- package/internal/agent/trae_exec_test.go +181 -0
- package/internal/agent/wraplaunch_test.go +113 -0
- package/internal/cli/ask.go +168 -37
- package/internal/cli/ask_test.go +1 -1
- package/internal/cli/checkin.go +77 -0
- package/internal/cli/clientcmd.go +3 -2
- package/internal/cli/control.go +46 -5
- package/internal/cli/control_test.go +65 -0
- package/internal/cli/engines_test.go +103 -0
- package/internal/cli/events.go +15 -0
- package/internal/cli/events_test.go +50 -0
- package/internal/cli/judge.go +104 -0
- package/internal/cli/quotas.go +125 -0
- package/internal/cli/requirements.go +51 -0
- package/internal/cli/root.go +157 -11
- package/internal/cli/session.go +75 -3
- package/internal/cli/session_test.go +82 -3
- package/internal/cli/sessionlog.go +6 -0
- package/internal/cli/sessionlog_test.go +22 -2
- package/internal/cli/suggest.go +7 -5
- package/internal/cli/team.go +37 -9
- package/internal/cli/team_test.go +39 -0
- package/internal/client/ab.go +372 -0
- package/internal/client/ab_test.go +287 -0
- package/internal/client/apk.go +8 -0
- package/internal/client/apk_test.go +59 -0
- package/internal/client/apps.go +1078 -0
- package/internal/client/apps_test.go +516 -0
- package/internal/client/browse.go +84 -36
- package/internal/client/browse_test.go +107 -9
- package/internal/client/browseinput.go +481 -0
- package/internal/client/browseinput_test.go +216 -0
- package/internal/client/corecmd.go +23 -0
- package/internal/client/corecmd_other.go +8 -0
- package/internal/client/corecmd_windows.go +24 -0
- package/internal/client/coreexe.go +196 -0
- package/internal/client/coreexe_test.go +161 -0
- package/internal/client/coreupgrade.go +866 -0
- package/internal/client/coreupgrade_test.go +561 -0
- package/internal/client/daemon.go +297 -33
- package/internal/client/daemon_test.go +33 -0
- package/internal/client/engines_checkin_test.go +57 -0
- package/internal/client/fallback_flags_test.go +64 -0
- package/internal/client/feishu.go +1259 -0
- package/internal/client/feishu_test.go +649 -0
- package/internal/client/health_identity_test.go +84 -0
- package/internal/client/hostenv.go +68 -0
- package/internal/client/hostenv_test.go +37 -0
- package/internal/client/jobs.go +518 -24
- package/internal/client/jobs_auto.go +571 -0
- package/internal/client/jobs_auto_test.go +431 -0
- package/internal/client/jobs_test.go +299 -2
- package/internal/client/knowledge.go +854 -0
- package/internal/client/knowledge_test.go +510 -0
- package/internal/client/lan.go +3 -3
- package/internal/client/plugins.go +5 -1
- package/internal/client/prefs.go +67 -0
- package/internal/client/procstart_linux.go +59 -0
- package/internal/client/publicurl.go +82 -0
- package/internal/client/quotas_merge_test.go +107 -0
- package/internal/client/requirements.go +207 -2
- package/internal/client/requirements_shots_test.go +200 -0
- package/internal/client/requirements_test.go +103 -0
- package/internal/client/restart.go +288 -0
- package/internal/client/restart_handoff_test.go +230 -0
- package/internal/client/restart_test.go +290 -0
- package/internal/client/scripts.go +1047 -0
- package/internal/client/scripts_decode_implausible.go +38 -0
- package/internal/client/scripts_decode_other.go +31 -0
- package/internal/client/scripts_decode_test.go +130 -0
- package/internal/client/scripts_decode_windows.go +182 -0
- package/internal/client/scripts_test.go +739 -0
- package/internal/client/service.go +717 -97
- package/internal/client/service_test.go +217 -1
- package/internal/client/sessions_cache.go +148 -0
- package/internal/client/sessions_cache_test.go +163 -0
- package/internal/client/sessions_fold.go +165 -0
- package/internal/client/sessions_fold_test.go +204 -0
- package/internal/client/singleinstance.go +470 -0
- package/internal/client/singleinstance_test.go +607 -0
- package/internal/client/suggest.go +105 -2
- package/internal/client/suggest_test.go +86 -0
- package/internal/client/team_flags.go +25 -11
- package/internal/client/team_flags_test.go +39 -0
- package/internal/client/testmain_test.go +88 -0
- package/internal/client/workspace_default_test.go +158 -0
- package/internal/client/workspacelockenv_test.go +54 -0
- package/internal/config/config.go +48 -0
- package/internal/judge/judge.go +315 -0
- package/internal/requirements/bootstrap.go +16 -0
- package/internal/requirements/consolidate.go +100 -9
- package/internal/requirements/doc.go +154 -3
- package/internal/requirements/graph.go +138 -0
- package/internal/requirements/memory.go +7 -0
- package/internal/requirements/modules.go +312 -0
- package/internal/requirements/modules_test.go +373 -0
- package/internal/requirements/relations.go +155 -0
- package/internal/requirements/relations_test.go +231 -0
- package/internal/requirements/requirements.go +10 -0
- package/internal/requirements/shots.go +418 -0
- package/internal/requirements/shots_test.go +387 -0
- package/internal/session/multiclient_test.go +368 -0
- package/internal/session/session.go +175 -11
- package/internal/session/session_test.go +7 -0
- package/internal/session/status.go +21 -0
- package/internal/session/status_test.go +28 -0
- package/internal/session/title.go +16 -0
- package/internal/session/title_test.go +26 -0
- package/internal/session/workspace_lock.go +265 -28
- package/internal/suggest/suggest.go +23 -1
- package/internal/team/event.go +3 -1
- package/internal/team/execute.go +21 -6
- package/internal/team/fallback_route_test.go +80 -0
- package/internal/team/planner.go +15 -3
- package/internal/team/route.go +89 -17
- package/internal/team/team.go +18 -4
- package/npm/apk/magic-agent-mobile-release.apk +0 -0
- package/npm/apk/version.json +6 -3
- package/npm/dist/darwin-arm64/magic-agent +0 -0
- package/npm/dist/darwin-arm64/magic-client +0 -0
- package/npm/dist/darwin-x64/magic-agent +0 -0
- package/npm/dist/darwin-x64/magic-client +0 -0
- package/npm/dist/linux-arm64/magic-agent +0 -0
- package/npm/dist/linux-arm64/magic-client +0 -0
- package/npm/dist/linux-x64/magic-agent +0 -0
- package/npm/dist/linux-x64/magic-client +0 -0
- package/npm/dist/win32-x64/magic-agent.exe +0 -0
- package/npm/dist/win32-x64/magic-client.exe +0 -0
- package/npm/install.js +11 -0
- package/package.json +14 -3
|
@@ -17,8 +17,45 @@
|
|
|
17
17
|
.wsrow__sync:active{opacity:.7}
|
|
18
18
|
.wsrow__sync:disabled{color:var(--muted);opacity:.6}
|
|
19
19
|
/* 「未初始化」与「待整理」同形不同色:前者是「还没按目录生成过基线」,
|
|
20
|
-
后者是「有对话等着归纳」,两种提示不能混成一个数字。
|
|
20
|
+
后者是「有对话等着归纳」,两种提示不能混成一个数字。
|
|
21
|
+
深色下「待整理」那枚走 --badge-accent(警告琥珀,压在页面底上 5.8),别用 --warning 直接当字色:
|
|
22
|
+
它和排队金只差 1.08,11px 上分不出来(2026-10-25 第二轮)。 */
|
|
21
23
|
.wsrow__badge--init{color:var(--warning);background:var(--tint-wait)}
|
|
24
|
+
.wsrow__badge--pending{color:var(--badge-accent,var(--queued));background:var(--tint-queued)}
|
|
25
|
+
|
|
26
|
+
/* ══════════ 需求页:整理失败的提示卡 ══════════
|
|
27
|
+
服务端给的是引擎原始报错(`HTTP 402: {…JSON…}`,还常被截断),原样铺开会是一屏乱码。
|
|
28
|
+
卡片只露三层信息:**类别 + 一句原因 + 下一步**;原文折叠在「详情」里(排查时再看)。
|
|
29
|
+
配色走 warning(淡底 + 左侧竖条),与「待整理 / 未初始化」同一套语义色,不做大红报错块 ——
|
|
30
|
+
整理失败不损坏数据,它是「这次没跑成」,不是页面出错。 */
|
|
31
|
+
.reqerr{margin:2px 10px 10px;padding:9px 12px;border-radius:var(--r);text-align:left;
|
|
32
|
+
/* 底色走令牌 --warn-surface / --warn-badge(**必须按主题分给**,理由见 index.html 的 :root):
|
|
33
|
+
深色压 --canvas 20% 才保住琥珀族(H64),浅色仍压 --raised 9%(原样暖白)。 */
|
|
34
|
+
background:var(--warn-surface);
|
|
35
|
+
border:1px solid color-mix(in srgb,var(--warning) 26%,transparent);
|
|
36
|
+
border-left:3px solid var(--warning)}
|
|
37
|
+
.reqerr__head{display:flex;align-items:center;gap:6px}
|
|
38
|
+
.reqerr__ico{flex:0 0 auto;display:flex;color:var(--warning)}
|
|
39
|
+
.reqerr__t{flex:1;min-width:0;font-size:13px;font-weight:600;color:var(--ink);
|
|
40
|
+
overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
41
|
+
/* 类别徽标(额度不足 / 未授权 / 超时…):认不出类别时不出,不硬套标签。
|
|
42
|
+
文字色走 --warn-badge-text —— 黄字压黄底在暗色主题下几乎读不出来(实测)。
|
|
43
|
+
深色(2026-10-25 第二轮)底色提到实心琥珀、文字换成 --canvas 墨字(8.5+);
|
|
44
|
+
浅色钉住「--ink 压 24% 琥珀」(与改动前逐像素一致)。 */
|
|
45
|
+
.reqerr__badge{flex:0 0 auto;padding:1px 7px;border-radius:var(--r-full);font-size:11px;line-height:16px;
|
|
46
|
+
color:var(--warn-badge-text);background:var(--warn-badge)}
|
|
47
|
+
.reqerr__msg{margin-top:5px;font-size:13px;line-height:1.55;color:var(--ink-soft);word-break:break-word}
|
|
48
|
+
.reqerr__hint{margin-top:3px;font-size:12px;line-height:1.5;color:var(--muted)}
|
|
49
|
+
.reqerr__more{display:flex;align-items:center;gap:3px;margin-top:5px;padding:0;background:none;border:0;
|
|
50
|
+
font-size:12px;color:var(--muted)}
|
|
51
|
+
.reqerr__more:active{opacity:.7}
|
|
52
|
+
.reqerr__chev{display:flex;transition:transform .15s}
|
|
53
|
+
.reqerr__more.is-open .reqerr__chev{transform:rotate(180deg)}
|
|
54
|
+
/* 原文:等宽 + 可滚动,保留换行;高度封顶 —— 长 JSON 不能把下面的模块列表顶出屏幕。 */
|
|
55
|
+
.reqerr__raw{margin:6px 0 0;padding:8px 10px;max-height:180px;overflow:auto;border-radius:8px;
|
|
56
|
+
background:var(--raised);border:1px solid var(--border);color:var(--muted);
|
|
57
|
+
font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all;
|
|
58
|
+
-webkit-user-select:text;user-select:text}
|
|
22
59
|
|
|
23
60
|
/* ══════════ 需求页:两级(空间→模块 → 需求列表)══════════
|
|
24
61
|
一级是**目录**:空间是行,模块缩进挂在空间下(树形),功能点一律不画在这里 ——
|
|
@@ -37,3 +74,75 @@
|
|
|
37
74
|
/* 二级视图的分组小节:只画当前模块,故这一节恒为高亮态 */
|
|
38
75
|
.reqdetail__sec--cur .sechead{color:var(--primary-action)}
|
|
39
76
|
.reqdetail__sec--cur .sechead__t{font-weight:800}
|
|
77
|
+
|
|
78
|
+
/* ══════════ 需求页:页面改造截图(reqshot.js)══════════
|
|
79
|
+
功能点行上的相机徽标 + 标注浮层。
|
|
80
|
+
徽标:功能点**涉及页面改造**时出现(归纳时从对话里提取到了页面地址)。
|
|
81
|
+
「待截图」= 有页面地址但还没截过;「N 图」= 截过了。 */
|
|
82
|
+
.reqshot__badge{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;
|
|
83
|
+
height:24px;padding:0 8px;border-radius:var(--r-full);border:1px solid var(--border);
|
|
84
|
+
background:var(--subtle);color:var(--muted);font-size:11px;font-weight:500;white-space:nowrap}
|
|
85
|
+
.reqshot__badge:active{opacity:.7}
|
|
86
|
+
.reqshot__badge--todo{color:var(--primary-action);border-color:color-mix(in srgb,var(--primary-action) 40%,transparent)}
|
|
87
|
+
.reqshot__badge--has{color:var(--muted)}
|
|
88
|
+
.reqshot__badge svg{flex:0 0 auto}
|
|
89
|
+
|
|
90
|
+
/* 抽屉里的说明行:解释「打开页面 → 滚到完成状态 → 点截图」这条流程。 */
|
|
91
|
+
.reqshot__hint{margin-top:0;font-size:12px;line-height:18px;color:var(--muted)}
|
|
92
|
+
|
|
93
|
+
/* ── 标注浮层 ──
|
|
94
|
+
z-index 1200:高于共享抽屉(1000),低于扫码(400)?—— 不,扫码是 400,比抽屉低。
|
|
95
|
+
这里取 1200 —— 必须高于抽屉,否则「完成」后抽屉还在底下压着标注。 */
|
|
96
|
+
.reqshot-anno{position:fixed;inset:0;z-index:1200;display:flex;flex-direction:column;
|
|
97
|
+
background:rgba(4,10,8,.92)}
|
|
98
|
+
.reqshot-anno__bar{flex:0 0 auto;display:flex;align-items:center;gap:6px;flex-wrap:wrap;
|
|
99
|
+
padding:calc(8px + env(safe-area-inset-top)) 10px 8px;
|
|
100
|
+
background:var(--raised);border-bottom:1px solid var(--border)}
|
|
101
|
+
.reqshot-anno__tbtn{height:30px;padding:0 10px;border-radius:8px;border:1px solid var(--border);
|
|
102
|
+
background:var(--subtle);color:var(--ink);font-size:13px;font-weight:500}
|
|
103
|
+
.reqshot-anno__tbtn:active{opacity:.7}
|
|
104
|
+
.reqshot-anno__tbtn:disabled{opacity:.45}
|
|
105
|
+
.reqshot-anno__tbtn.is-on{border-color:var(--primary-action);color:var(--primary-action)}
|
|
106
|
+
.reqshot-anno__tbtn--mute{color:var(--muted)}
|
|
107
|
+
.reqshot-anno__tbtn--ok{background:var(--primary-action);color:var(--on-primary-action);border-color:transparent}
|
|
108
|
+
.reqshot-anno__colors{display:flex;align-items:center;gap:5px;margin-left:2px}
|
|
109
|
+
.reqshot-anno__c{width:24px;height:24px;border-radius:50%;border:2px solid transparent;padding:0}
|
|
110
|
+
.reqshot-anno__c.is-on{border-color:var(--ink)}
|
|
111
|
+
.reqshot-anno__acts{display:flex;gap:6px;margin-left:auto}
|
|
112
|
+
/* 舞台:截图按原图分辨率画在里面(显示时缩放),手势坐标按显示尺寸换算回画布。 */
|
|
113
|
+
.reqshot-anno__stage{flex:1;min-height:0;position:relative;display:flex;
|
|
114
|
+
align-items:center;justify-content:center;overflow:auto;padding:8px}
|
|
115
|
+
.reqshot-anno__cv{max-width:100%;height:auto;touch-action:none;background:#fff;
|
|
116
|
+
box-shadow:0 8px 32px rgba(0,0,0,.5)}
|
|
117
|
+
.reqshot-anno__hint{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);
|
|
118
|
+
text-align:center;color:var(--muted);font-size:14px}
|
|
119
|
+
/* 文字工具的输入条:不用 window.prompt(Android WebView 与 Electron 小窗都没实现它)。 */
|
|
120
|
+
.reqshot-anno__textbox{position:absolute;left:12px;right:12px;bottom:calc(16px + env(safe-area-inset-bottom));
|
|
121
|
+
display:flex;gap:8px;align-items:center;padding:8px;border-radius:12px;
|
|
122
|
+
background:var(--raised);border:1px solid var(--border)}
|
|
123
|
+
.reqshot-anno__textbox input{flex:1;min-width:0;height:36px;padding:0 10px;border-radius:8px;
|
|
124
|
+
border:1px solid var(--border);background:var(--subtle);color:var(--ink);font-size:14px;outline:none}
|
|
125
|
+
.reqshot-anno__textbox .reqshot-anno__tbtn{height:36px}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
/* ══════════ 会话↔需求关系图谱(2026-10-25,reqs.js 的 REQ_GRAPH_WS 第三态)══════════ */
|
|
129
|
+
/* 顶栏两枚动作按钮并排(图谱 / 全部整理)。 */
|
|
130
|
+
.history__topacts{display:flex;align-items:center;gap:8px;margin-left:auto}
|
|
131
|
+
.reqs__graphbtn{min-width:0}
|
|
132
|
+
/* 空间切换 chips:多空间时选画哪个(默认需求最多的那个)。 */
|
|
133
|
+
.reqgraph__pick{display:flex;gap:6px;overflow-x:auto;padding:8px 12px 4px;flex:none}
|
|
134
|
+
.reqgraph__chip{flex:none;padding:5px 12px;border-radius:var(--r-full);border:1px solid var(--border);
|
|
135
|
+
background:var(--subtle);color:var(--muted);font-size:13px}
|
|
136
|
+
.reqgraph__chip.is-on{background:var(--primary-action);color:var(--on-primary-action);border-color:transparent}
|
|
137
|
+
/* 舞台:cytoscape 用 canvas 自绘,容器铺满剩余高度即可(缩放/平移由库管,不溢出)。 */
|
|
138
|
+
.reqgraph__stage{flex:1;min-height:0;overflow:hidden;position:relative;display:flex;flex-direction:column}
|
|
139
|
+
.reqgraph__stage canvas{display:block}
|
|
140
|
+
.reqgraph__edge{stroke:var(--border);stroke-width:1.5;opacity:.9}
|
|
141
|
+
.reqgraph__node{cursor:pointer}
|
|
142
|
+
.reqgraph__sess{fill:var(--muted);stroke:var(--raised);stroke-width:2}
|
|
143
|
+
.reqgraph__feat{stroke:var(--raised);stroke-width:2}
|
|
144
|
+
.reqgraph__node text{fill:var(--ink);font-size:11px;pointer-events:none}
|
|
145
|
+
/* 图例:会话 + 模块配色(颜色由 JS 按模块 hash 给,这里只排版)。 */
|
|
146
|
+
.reqgraph__legend{flex:none;display:flex;flex-wrap:wrap;gap:4px 12px;padding:8px 12px calc(10px + env(safe-area-inset-bottom))}
|
|
147
|
+
.reqgraph__lg{font-size:12px;color:var(--muted)}
|
|
148
|
+
.reqgraph__lg--sess{color:var(--muted)}
|