@bolloon/bolloon-agent 0.4.14 → 0.4.16
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/README.md +127 -127
- package/bin/bolloon-cli.cjs +183 -183
- package/bin/bolloon-daemon.sh +207 -0
- package/bin/bolloon.cjs +0 -0
- package/dist/agents/constraint-layer.js +19 -19
- package/dist/agents/judgment-protocol.js +14 -14
- package/dist/agents/pi-sdk-types.js +12 -12
- package/dist/agents/pi-sdk.js +101 -101
- package/dist/agents/skill-organizer.js +19 -19
- package/dist/agents/workflow-pivot-loop.js +2 -2
- package/dist/agents/x402/x402Pay.js +4 -0
- package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
- package/dist/bollharness-integration/context-router-judgment.js +4 -4
- package/dist/bollharness-integration/context-router.js +292 -292
- package/dist/bollharness-integration/gate-state-machine.js +13 -13
- package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
- package/dist/bollharness-integration/skill-adapter.js +21 -21
- package/dist/bootstrap/chat-archiver.js +14 -14
- package/dist/bootstrap/context-os.js +24 -24
- package/dist/bootstrap/memory-compressor.js +13 -13
- package/dist/cli-entry.js +36 -36
- package/dist/constraint-runtime/reference_data/archive_surface_snapshot.json +63 -0
- package/dist/constraint-runtime/reference_data/commands_snapshot.json +1037 -0
- package/dist/constraint-runtime/reference_data/subsystems/assistant.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/bootstrap.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/bridge.json +32 -0
- package/dist/constraint-runtime/reference_data/subsystems/buddy.json +13 -0
- package/dist/constraint-runtime/reference_data/subsystems/cli.json +26 -0
- package/dist/constraint-runtime/reference_data/subsystems/components.json +32 -0
- package/dist/constraint-runtime/reference_data/subsystems/constants.json +28 -0
- package/dist/constraint-runtime/reference_data/subsystems/coordinator.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/entrypoints.json +15 -0
- package/dist/constraint-runtime/reference_data/subsystems/hooks.json +32 -0
- package/dist/constraint-runtime/reference_data/subsystems/keybindings.json +21 -0
- package/dist/constraint-runtime/reference_data/subsystems/memdir.json +15 -0
- package/dist/constraint-runtime/reference_data/subsystems/migrations.json +18 -0
- package/dist/constraint-runtime/reference_data/subsystems/moreright.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/native_ts.json +11 -0
- package/dist/constraint-runtime/reference_data/subsystems/outputStyles.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/plugins.json +9 -0
- package/dist/constraint-runtime/reference_data/subsystems/remote.json +11 -0
- package/dist/constraint-runtime/reference_data/subsystems/schemas.json +8 -0
- package/dist/constraint-runtime/reference_data/subsystems/screens.json +10 -0
- package/dist/constraint-runtime/reference_data/subsystems/server.json +10 -0
- package/dist/constraint-runtime/reference_data/subsystems/services.json +32 -0
- package/dist/constraint-runtime/reference_data/subsystems/skills.json +27 -0
- package/dist/constraint-runtime/reference_data/subsystems/state.json +13 -0
- package/dist/constraint-runtime/reference_data/subsystems/types.json +18 -0
- package/dist/constraint-runtime/reference_data/subsystems/upstreamproxy.json +9 -0
- package/dist/constraint-runtime/reference_data/subsystems/utils.json +32 -0
- package/dist/constraint-runtime/reference_data/subsystems/vim.json +12 -0
- package/dist/constraint-runtime/reference_data/subsystems/voice.json +8 -0
- package/dist/constraint-runtime/reference_data/tools_snapshot.json +922 -0
- package/dist/context-compaction/auto-compact.js +7 -7
- package/dist/electron/config.js.map +1 -0
- package/dist/electron/dialogs.js.map +1 -0
- package/dist/electron/first-run.js +54 -54
- package/dist/electron/first-run.js.map +1 -0
- package/dist/electron/ipc.js.map +1 -0
- package/dist/electron/logger.js.map +1 -0
- package/dist/electron/main.js.map +1 -0
- package/dist/electron/menu.js.map +1 -0
- package/dist/electron/paths.js.map +1 -0
- package/dist/electron/server.js.map +1 -0
- package/dist/electron/tray.js.map +1 -0
- package/dist/electron/window.js.map +1 -0
- package/dist/electron-build/electron/first-run.js +54 -54
- package/dist/electron-preload.js.map +1 -1
- package/dist/electron.js.map +1 -1
- package/dist/index.js +112 -112
- package/dist/llm/llm-judgment-client.js +102 -102
- package/dist/llm/pi-ai.js +48 -48
- package/dist/llm/system-prompt/layers/channel/human-async.md +41 -41
- package/dist/llm/system-prompt/layers/channel/local.md +14 -14
- package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
- package/dist/llm/system-prompt/layers/channel/p2p-peer-sync.md +51 -51
- package/dist/llm/system-prompt/layers/channel/p2p-proactive.md +43 -43
- package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
- package/dist/llm/system-prompt/layers/channel/session-handoff.md +61 -61
- package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
- package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
- package/dist/llm/system-prompt/layers/core/external-engagement.md +73 -73
- package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
- package/dist/llm/system-prompt/layers/core/identity.md +48 -48
- package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
- package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
- package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
- package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
- package/dist/llm/system-prompt/layers/core/tone.md +31 -31
- package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
- package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
- package/dist/llm/system-prompt/layers/role/architect.md +20 -20
- package/dist/llm/system-prompt/layers/role/expert.md +19 -19
- package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
- package/dist/llm/system-prompt/layers/role/security.md +15 -15
- package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
- package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
- package/dist/llm/system-prompt/layers/tool/goal_handoff.md +77 -77
- package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
- package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
- package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
- package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
- package/dist/llm/system-prompt/layers/tool/p2p_request.md +61 -61
- package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
- package/dist/llm/tool-manifest/ask_user_input.js +1 -1
- package/dist/llm/tool-manifest/bash.js +3 -3
- package/dist/llm/tool-manifest/create_file.js +4 -4
- package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
- package/dist/llm/tool-manifest/image_search.js +2 -2
- package/dist/llm/tool-manifest/index.js +59 -0
- package/dist/llm/tool-manifest/mcp.js +2 -2
- package/dist/llm/tool-manifest/message_compose.js +3 -3
- package/dist/llm/tool-manifest/places.js +2 -2
- package/dist/llm/tool-manifest/present_files.js +1 -1
- package/dist/llm/tool-manifest/recipe.js +2 -2
- package/dist/llm/tool-manifest/str_replace.js +5 -5
- package/dist/llm/tool-manifest/view.js +3 -3
- package/dist/llm/tool-manifest/weather.js +4 -4
- package/dist/llm/tool-manifest/web.js +4 -4
- package/dist/network/p2p.js +78 -4
- package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
- package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
- package/dist/pi-ecosystem-judgment/distillation.js +14 -14
- package/dist/pi-ecosystem-judgment/index.js +1 -1
- package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
- package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
- package/dist/security/context-router-tool.js +15 -15
- package/dist/utils/auto-update.js.map +1 -0
- package/dist/web/a2ui-client.js +1594 -223
- package/dist/web/api-config.html +779 -779
- package/dist/web/client-hearth.js +10 -10
- package/dist/web/client.js.map +7 -0
- package/dist/web/components/wallet-viem.mjs +118 -118
- package/dist/web/index.html +502 -502
- package/dist/web/manifest.json +20 -20
- package/dist/web/mobile-agent.js +397 -0
- package/dist/web/mobile-core.js +86235 -0
- package/dist/web/mobile-data.js +346 -0
- package/dist/web/mobile-http-api.js +71 -0
- package/dist/web/mobile-p2p.js +250 -0
- package/dist/web/mobile-payments.js +80 -0
- package/dist/web/mobile-wallet.js +226 -0
- package/dist/web/mobile.css +483 -6
- package/dist/web/mobile.html +99 -50
- package/dist/web/mobile.js +1040 -187
- package/dist/web/server.js +13 -13
- package/dist/web/style.css +4946 -4946
- package/package.json +186 -198
- package/scripts/build-cli.js +215 -215
- package/scripts/build-web.ts +162 -149
- package/scripts/postinstall.js +152 -152
- package/bin/bolloon.js +0 -157
- package/dist/agents/python-exec.js +0 -115
- package/dist/pi-ecosystem-colony/index.js +0 -365
- package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
- package/dist/social/ant-colony/PheromoneEngine.js +0 -227
- package/dist/social/ant-colony/index.js +0 -6
- package/dist/social/ant-colony/types.js +0 -24
- package/dist/storage/trajectory.js +0 -101
- package/dist/test/ai-judgment-test.js +0 -80
- package/dist/test/bollharness-integration.test.js +0 -318
- package/dist/test/channel-agent-multi-dialogue.js +0 -205
- package/dist/test/channel-heartbeat-agent-test.js +0 -201
- package/dist/test/constraint-layer.test.js +0 -164
- package/dist/test/diap-identity-test.js +0 -172
- package/dist/test/diap-quick-test.js +0 -62
- package/dist/test/global-shared-context.test.js +0 -315
- package/dist/test/harness-judgment-injection.test.js +0 -246
- package/dist/test/harness-workflow-integrator-test.js +0 -228
- package/dist/test/human-value-store.test.js +0 -243
- package/dist/test/hybrid-integration-test.js +0 -118
- package/dist/test/hybrid-messenger-verify.js +0 -55
- package/dist/test/iroh-bistream-debug.js +0 -38
- package/dist/test/iroh-communication.test.js +0 -66
- package/dist/test/iroh-debug-test.js +0 -57
- package/dist/test/iroh-diap-test.js +0 -71
- package/dist/test/iroh-direct-connect.js +0 -55
- package/dist/test/iroh-e2e-fixed.js +0 -89
- package/dist/test/iroh-e2e-same-process.js +0 -63
- package/dist/test/iroh-e2e.js +0 -66
- package/dist/test/iroh-final-e2e.js +0 -72
- package/dist/test/iroh-relay-test.js +0 -37
- package/dist/test/iroh-simple-test.js +0 -41
- package/dist/test/iroh-transport-verify.js +0 -54
- package/dist/test/iroh-transport.test.js +0 -37
- package/dist/test/iroh-two-nodes.js +0 -70
- package/dist/test/iroh-verify.js +0 -44
- package/dist/test/judgment-decision.test.js +0 -219
- package/dist/test/llm-judgment-integration.test.js +0 -220
- package/dist/test/p2p-agent-complex-dialogue.js +0 -385
- package/dist/test/p2p-agent-dialogue.js +0 -341
- package/dist/test/p2p-agent-full-bidirectional.js +0 -510
- package/dist/test/p2p-agent-harness-flow.js +0 -437
- package/dist/test/p2p-agent-harness-single.js +0 -143
- package/dist/test/p2p-ai-dialogue-test.js +0 -318
- package/dist/test/p2p-cid-connect-test.js +0 -195
- package/dist/test/p2p-connect-receiver.js +0 -69
- package/dist/test/p2p-doc-transfer.js +0 -110
- package/dist/test/p2p-identity-page-test.js +0 -77
- package/dist/test/p2p-iroh-test.js +0 -171
- package/dist/test/p2p-minimal-test.js +0 -241
- package/dist/test/p2p-node-1.js +0 -148
- package/dist/test/p2p-node-2.js +0 -148
- package/dist/test/p2p-server.js +0 -281
- package/dist/test/p2p-two-nodes-test.js +0 -438
- package/dist/test/pi-sdk.test.js +0 -44
- package/dist/test/set-persona.js +0 -40
- package/dist/test/simple.test.js +0 -9
- package/dist/test/storage-integration.test.js +0 -150
- package/dist/test/subagent-manager.test.js +0 -276
- package/dist/test/test-gate-flow.test.js +0 -81
- package/dist/test/workflow-engine.test.js +0 -87
- package/dist/test/workflow-pivot-loop.test.js +0 -246
package/dist/web/mobile.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* 手机端 UI —
|
|
1
|
+
/* 手机端 UI — bolloon 品牌风格 (暗色 + 品牌绿) */
|
|
2
2
|
:root {
|
|
3
3
|
--bg: #1a1a18;
|
|
4
4
|
--bg-card: #222220;
|
|
@@ -19,7 +19,7 @@ html, body { height: 100%; }
|
|
|
19
19
|
body {
|
|
20
20
|
background: var(--bg);
|
|
21
21
|
color: var(--text);
|
|
22
|
-
font-family: -apple-system,
|
|
22
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
|
23
23
|
overflow: hidden;
|
|
24
24
|
touch-action: manipulation;
|
|
25
25
|
}
|
|
@@ -53,8 +53,8 @@ body {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
/* 页面容器 */
|
|
56
|
-
.page-container { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }
|
|
57
|
-
.page { min-height:
|
|
56
|
+
.page-container { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
|
|
57
|
+
.page { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; }
|
|
58
58
|
|
|
59
59
|
/* 列表 */
|
|
60
60
|
.list { padding: 8px 0; }
|
|
@@ -98,21 +98,49 @@ body {
|
|
|
98
98
|
.conv-name { font-size: 16px; color: var(--text); }
|
|
99
99
|
.conv-preview { font-size: 13px; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
100
100
|
|
|
101
|
-
/* 我 tab 卡片 */
|
|
101
|
+
/* 我 tab 卡片 → 顶部身份栏 */
|
|
102
102
|
.profile-card {
|
|
103
103
|
display: flex; align-items: center; gap: 14px;
|
|
104
104
|
padding: 20px 16px;
|
|
105
105
|
background: var(--bg-card);
|
|
106
106
|
border-bottom: 1px solid var(--border);
|
|
107
|
+
cursor: pointer;
|
|
107
108
|
}
|
|
108
109
|
.avatar {
|
|
109
|
-
width:
|
|
110
|
+
width: 60px; height: 60px; border-radius: 50%;
|
|
110
111
|
background: var(--accent); color: var(--bg);
|
|
111
112
|
display: flex; align-items: center; justify-content: center;
|
|
112
113
|
font-size: 24px; font-weight: 700;
|
|
114
|
+
background-size: cover; background-position: center;
|
|
115
|
+
flex-shrink: 0; cursor: pointer;
|
|
113
116
|
}
|
|
117
|
+
.profile-info { flex: 1; min-width: 0; }
|
|
114
118
|
.profile-name { font-size: 18px; font-weight: 600; }
|
|
115
119
|
.profile-did { font-size: 12px; color: var(--text-muted); word-break: break-all; margin-top: 4px; }
|
|
120
|
+
.profile-p2p { font-size: 11px; color: var(--text-secondary); word-break: break-all; margin-top: 2px; font-family: 'JetBrains Mono', monospace; }
|
|
121
|
+
.profile-chevron { color: var(--text-muted); font-size: 22px; }
|
|
122
|
+
|
|
123
|
+
/* 身份介绍页 */
|
|
124
|
+
.identity-page { position: fixed; inset: 0; z-index: 70; display: flex; flex-direction: column; background: var(--bg); }
|
|
125
|
+
.identity-page[hidden] { display: none !important; }
|
|
126
|
+
.identity-header { height: var(--topbar-h); display: flex; align-items: center; padding: 0 12px; padding-top: env(safe-area-inset-top); border-bottom: 1px solid var(--border); gap: 8px; background: var(--bg-card); }
|
|
127
|
+
.identity-body { flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 16px; }
|
|
128
|
+
.identity-row { display: flex; flex-direction: column; gap: 4px; padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-card); }
|
|
129
|
+
.identity-row .k { font-size: 12px; color: var(--text-secondary); }
|
|
130
|
+
.identity-row .v { font-size: 14px; color: var(--text); word-break: break-all; }
|
|
131
|
+
|
|
132
|
+
/* 头像裁剪 */
|
|
133
|
+
.crop-modal { position: fixed; inset: 0; z-index: 90; display: flex; flex-direction: column; background: rgba(0,0,0,0.92); }
|
|
134
|
+
.crop-modal[hidden] { display: none !important; }
|
|
135
|
+
.crop-stage { flex: 1; position: relative; overflow: hidden; touch-action: none; }
|
|
136
|
+
.crop-img { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); max-width: none; user-select: none; -webkit-user-select: none; }
|
|
137
|
+
.crop-box { position: absolute; width: 70vw; height: 70vw; max-width: 340px; max-height: 340px; top: 50%; left: 50%; transform: translate(-50%,-50%); border: 2px dashed var(--accent); box-shadow: 0 0 0 100vmax rgba(0,0,0,0.55); }
|
|
138
|
+
.crop-zoom-row { padding: 14px 20px calc(14px + env(safe-area-inset-bottom)); display: flex; align-items: center; gap: 14px; background: rgba(0,0,0,0.6); }
|
|
139
|
+
.crop-zoom-row input[type=range] { flex: 1; }
|
|
140
|
+
.crop-actions { display: flex; gap: 10px; padding: 0 20px 20px; background: rgba(0,0,0,0.6); }
|
|
141
|
+
.crop-actions button { flex: 1; padding: 13px; border: none; border-radius: 10px; font-weight: 700; }
|
|
142
|
+
.crop-cancel { background: rgba(255,255,255,0.15); color: #fff; }
|
|
143
|
+
.crop-confirm { background: var(--accent); color: var(--bg); }
|
|
116
144
|
|
|
117
145
|
/* 底部 tab */
|
|
118
146
|
.tabbar {
|
|
@@ -134,6 +162,74 @@ body {
|
|
|
134
162
|
.tab.active { color: var(--accent); }
|
|
135
163
|
.tab-icon { font-size: 20px; }
|
|
136
164
|
|
|
165
|
+
/* 首页创建新会话栏 (底部中央, tab 上方, 悬浮) */
|
|
166
|
+
.create-session-btn {
|
|
167
|
+
position: fixed;
|
|
168
|
+
bottom: calc(var(--tabbar-h) + 14px + env(safe-area-inset-bottom));
|
|
169
|
+
left: 50%; transform: translateX(-50%);
|
|
170
|
+
z-index: 20;
|
|
171
|
+
padding: 12px 22px;
|
|
172
|
+
border: none; border-radius: 30px;
|
|
173
|
+
background: var(--accent); color: var(--bg);
|
|
174
|
+
font-size: 15px; font-weight: 700;
|
|
175
|
+
box-shadow: 0 4px 18px rgba(0,0,0,0.35);
|
|
176
|
+
cursor: pointer;
|
|
177
|
+
}
|
|
178
|
+
.create-session-btn:active { transform: translateX(-50%) scale(0.97); }
|
|
179
|
+
|
|
180
|
+
/* 底部滑入/滑出 sheet */
|
|
181
|
+
.sheet {
|
|
182
|
+
position: fixed; inset: 0;
|
|
183
|
+
z-index: 80;
|
|
184
|
+
display: flex; align-items: flex-end; justify-content: center;
|
|
185
|
+
background: rgba(0,0,0,0.45);
|
|
186
|
+
transition: opacity .25s;
|
|
187
|
+
}
|
|
188
|
+
.sheet[hidden] { display: none !important; }
|
|
189
|
+
.sheet-inner {
|
|
190
|
+
width: 100%; max-width: 480px;
|
|
191
|
+
background: var(--bg-card);
|
|
192
|
+
border-top-left-radius: 18px; border-top-right-radius: 18px;
|
|
193
|
+
border: 1px solid var(--border); border-bottom: none;
|
|
194
|
+
padding: 20px 20px calc(20px + env(safe-area-inset-bottom));
|
|
195
|
+
display: flex; flex-direction: column; align-items: center; gap: 14px;
|
|
196
|
+
animation: sheetUp .28s ease;
|
|
197
|
+
}
|
|
198
|
+
@keyframes sheetUp { from { transform: translateY(100%); } to { transform: translateY(0); } }
|
|
199
|
+
.sheet-title { font-size: 16px; font-weight: 600; color: var(--text); }
|
|
200
|
+
.sheet-text { font-size: 14px; color: var(--text-secondary); }
|
|
201
|
+
.spinner {
|
|
202
|
+
width: 44px; height: 44px;
|
|
203
|
+
border: 4px solid var(--border);
|
|
204
|
+
border-top-color: var(--accent);
|
|
205
|
+
border-radius: 50%;
|
|
206
|
+
animation: spin .8s linear infinite;
|
|
207
|
+
}
|
|
208
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
209
|
+
.sheet-choice {
|
|
210
|
+
width: 100%; padding: 14px;
|
|
211
|
+
border: none; border-radius: 12px;
|
|
212
|
+
background: var(--bg-hover); color: var(--text);
|
|
213
|
+
font-size: 15px; font-weight: 600;
|
|
214
|
+
text-align: center; cursor: pointer;
|
|
215
|
+
}
|
|
216
|
+
.sheet-choice:active { background: var(--border); }
|
|
217
|
+
.sheet-choice.sheet-cancel { background: transparent; color: var(--text-secondary); }
|
|
218
|
+
.sheet-inner-choices { gap: 10px; }
|
|
219
|
+
|
|
220
|
+
/* 钱包 */
|
|
221
|
+
.wallet-addr {
|
|
222
|
+
text-align: center;
|
|
223
|
+
font-size: 13px;
|
|
224
|
+
color: var(--text-secondary);
|
|
225
|
+
word-break: break-all;
|
|
226
|
+
padding: 10px;
|
|
227
|
+
background: var(--bg-hover);
|
|
228
|
+
border: 1px solid var(--border);
|
|
229
|
+
border-radius: 10px;
|
|
230
|
+
font-family: 'JetBrains Mono', monospace;
|
|
231
|
+
}
|
|
232
|
+
|
|
137
233
|
/* 聊天页 */
|
|
138
234
|
.chat-page {
|
|
139
235
|
position: fixed; inset: 0;
|
|
@@ -149,6 +245,7 @@ body {
|
|
|
149
245
|
border-bottom: 1px solid var(--border);
|
|
150
246
|
gap: 8px;
|
|
151
247
|
}
|
|
248
|
+
.chat-topbar .icon-btn { position: relative; z-index: 5; }
|
|
152
249
|
.chat-messages { flex: 1; overflow-y: auto; padding: 12px; }
|
|
153
250
|
.chat-input-bar {
|
|
154
251
|
display: flex; gap: 8px; padding: 8px 12px;
|
|
@@ -171,3 +268,383 @@ body {
|
|
|
171
268
|
.bubble { max-width: 75%; padding: 8px 12px; border-radius: 10px; margin: 4px 0; word-break: break-word; }
|
|
172
269
|
.bubble.user { margin-left: auto; background: var(--accent); color: var(--bg); }
|
|
173
270
|
.bubble.ai { background: var(--bg-card); color: var(--text); }
|
|
271
|
+
|
|
272
|
+
/* ============ 回复气泡操作栏 (复制/点踩/分享/刷新/分支) ============ */
|
|
273
|
+
.reply-actions {
|
|
274
|
+
display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap;
|
|
275
|
+
}
|
|
276
|
+
.reply-actions .ra-btn {
|
|
277
|
+
font-size: 12px;
|
|
278
|
+
padding: 3px 9px;
|
|
279
|
+
border: 1px solid var(--border);
|
|
280
|
+
border-radius: 14px;
|
|
281
|
+
background: var(--bg);
|
|
282
|
+
color: var(--text-secondary);
|
|
283
|
+
cursor: pointer;
|
|
284
|
+
line-height: 1.2;
|
|
285
|
+
}
|
|
286
|
+
.reply-actions .ra-btn:active { background: var(--bg-card); }
|
|
287
|
+
.reply-actions .ra-vote-like { color: #4caf50; border-color: #4caf50; }
|
|
288
|
+
.reply-actions .ra-vote-dis { color: #e5484d; border-color: #e5484d; }
|
|
289
|
+
|
|
290
|
+
/* ============ Agent Loop 循环状态 ============ */
|
|
291
|
+
.loop-status-bar {
|
|
292
|
+
display: flex;
|
|
293
|
+
align-items: center;
|
|
294
|
+
gap: 10px;
|
|
295
|
+
padding: 10px 16px;
|
|
296
|
+
background: linear-gradient(180deg, var(--accent-glow) 0%, transparent 100%);
|
|
297
|
+
border-bottom: 1px solid var(--border);
|
|
298
|
+
font-size: 13px;
|
|
299
|
+
color: var(--text-secondary);
|
|
300
|
+
font-family: 'JetBrains Mono', monospace;
|
|
301
|
+
animation: loopStatusFadeIn 0.3s ease-out;
|
|
302
|
+
}
|
|
303
|
+
.loop-status-bar[hidden] { display: none !important; }
|
|
304
|
+
@keyframes loopStatusFadeIn {
|
|
305
|
+
from { opacity: 0; transform: translateY(-4px); }
|
|
306
|
+
to { opacity: 1; transform: translateY(0); }
|
|
307
|
+
}
|
|
308
|
+
.loop-status-spinner {
|
|
309
|
+
width: 16px; height: 16px;
|
|
310
|
+
border: 2px solid var(--border);
|
|
311
|
+
border-top-color: var(--accent);
|
|
312
|
+
border-right-color: var(--accent-hover);
|
|
313
|
+
border-radius: 50%;
|
|
314
|
+
animation: loopStatusSpin 0.9s cubic-bezier(0.4, 0, 0.2, 1) infinite;
|
|
315
|
+
flex-shrink: 0;
|
|
316
|
+
}
|
|
317
|
+
@keyframes loopStatusSpin {
|
|
318
|
+
to { transform: rotate(360deg); }
|
|
319
|
+
}
|
|
320
|
+
.loop-status-text {
|
|
321
|
+
flex: 1;
|
|
322
|
+
background: linear-gradient(90deg, var(--text-secondary) 0%, var(--accent) 50%, var(--text-secondary) 100%);
|
|
323
|
+
background-size: 200% 100%;
|
|
324
|
+
-webkit-background-clip: text;
|
|
325
|
+
background-clip: text;
|
|
326
|
+
color: transparent;
|
|
327
|
+
-webkit-text-fill-color: transparent;
|
|
328
|
+
animation: loopStatusTextShimmer 2.4s linear infinite;
|
|
329
|
+
}
|
|
330
|
+
@keyframes loopStatusTextShimmer {
|
|
331
|
+
0% { background-position: 200% 0; }
|
|
332
|
+
100% { background-position: -200% 0; }
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/* ============ Agent 工作记录 = 执行轨迹 (放在回复区, 不折叠) ============ */
|
|
336
|
+
.agent-trace {
|
|
337
|
+
margin: 6px 0 6px 4px;
|
|
338
|
+
padding: 8px 10px;
|
|
339
|
+
border-left: 2px solid var(--accent);
|
|
340
|
+
background: var(--bg-card);
|
|
341
|
+
border-radius: 8px;
|
|
342
|
+
max-height: 34vh;
|
|
343
|
+
overflow-y: auto;
|
|
344
|
+
}
|
|
345
|
+
.agent-trace-line {
|
|
346
|
+
font-family: 'JetBrains Mono', monospace;
|
|
347
|
+
font-size: 12px;
|
|
348
|
+
color: var(--text-secondary);
|
|
349
|
+
line-height: 1.5;
|
|
350
|
+
word-break: break-word;
|
|
351
|
+
white-space: pre-wrap;
|
|
352
|
+
padding: 1px 0;
|
|
353
|
+
}
|
|
354
|
+
.agent-trace-line:first-child { color: var(--text); }
|
|
355
|
+
|
|
356
|
+
/* ============ 双频滑动卡片 (主页面) ============ */
|
|
357
|
+
|
|
358
|
+
.card-carousel {
|
|
359
|
+
flex: 1;
|
|
360
|
+
overflow: hidden;
|
|
361
|
+
position: relative;
|
|
362
|
+
touch-action: pan-x pan-y;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.card-track {
|
|
366
|
+
display: flex;
|
|
367
|
+
flex-direction: column; /* 上下翻卡 */
|
|
368
|
+
gap: 16px;
|
|
369
|
+
padding: 16px;
|
|
370
|
+
overflow-y: auto;
|
|
371
|
+
overflow-x: hidden;
|
|
372
|
+
scroll-snap-type: y mandatory;
|
|
373
|
+
-webkit-overflow-scrolling: touch;
|
|
374
|
+
scroll-behavior: smooth;
|
|
375
|
+
height: 100%;
|
|
376
|
+
align-items: stretch;
|
|
377
|
+
touch-action: pan-y; /* 垂直交给原生滚动翻卡, 水平交给 JS 做删除 reveal */
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.card-track::-webkit-scrollbar { display: none; }
|
|
381
|
+
|
|
382
|
+
/* 每张卡片外层: 纵向单元 + 删除位 */
|
|
383
|
+
.card-wrap {
|
|
384
|
+
flex: 0 0 100%;
|
|
385
|
+
scroll-snap-align: center;
|
|
386
|
+
position: relative;
|
|
387
|
+
border-radius: 16px;
|
|
388
|
+
overflow: hidden;
|
|
389
|
+
min-height: 0;
|
|
390
|
+
}
|
|
391
|
+
.card-delete {
|
|
392
|
+
position: absolute; right: 0; top: 0; bottom: 0;
|
|
393
|
+
width: 88px;
|
|
394
|
+
background: #e5484d; color: #fff;
|
|
395
|
+
border: none; font-size: 15px; font-weight: 700;
|
|
396
|
+
z-index: 3;
|
|
397
|
+
display: flex; align-items: center; justify-content: center;
|
|
398
|
+
cursor: pointer;
|
|
399
|
+
opacity: 0; pointer-events: none; /* 未 reveal 时隐藏且不可点, 避免遮挡 */
|
|
400
|
+
transition: opacity 0.15s;
|
|
401
|
+
}
|
|
402
|
+
.card-wrap.reveal-delete .card-delete { opacity: 1; pointer-events: auto; }
|
|
403
|
+
.card-wrap.reveal-delete .agent-card { transform: translateX(-24px); }
|
|
404
|
+
|
|
405
|
+
.agent-card {
|
|
406
|
+
position: relative; z-index: 2;
|
|
407
|
+
flex: none; width: 100%; height: 100%;
|
|
408
|
+
background: var(--bg-card);
|
|
409
|
+
border: 1px solid var(--border);
|
|
410
|
+
border-radius: 16px;
|
|
411
|
+
overflow: hidden;
|
|
412
|
+
cursor: grab;
|
|
413
|
+
touch-action: pan-y; /* 横向交给 JS */
|
|
414
|
+
display: flex;
|
|
415
|
+
flex-direction: column;
|
|
416
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
417
|
+
user-select: none;
|
|
418
|
+
-webkit-user-select: none;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.agent-card:active { cursor: grabbing; }
|
|
422
|
+
.agent-card:hover { transform: translateY(-2px); box-shadow: 0 4px 20px rgba(0,0,0,0.3); }
|
|
423
|
+
|
|
424
|
+
.agent-card.active-card {
|
|
425
|
+
border-color: var(--accent);
|
|
426
|
+
box-shadow: 0 0 0 1px var(--accent), 0 4px 24px rgba(196, 214, 64, 0.15);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* 卡片封面区域 (水平频) */
|
|
430
|
+
.card-cover {
|
|
431
|
+
position: relative;
|
|
432
|
+
height: 40vh;
|
|
433
|
+
min-height: 200px;
|
|
434
|
+
display: flex;
|
|
435
|
+
align-items: center;
|
|
436
|
+
justify-content: center;
|
|
437
|
+
overflow: hidden;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.card-cover img {
|
|
441
|
+
width: 100%;
|
|
442
|
+
height: 100%;
|
|
443
|
+
object-fit: cover;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.card-cover-placeholder {
|
|
447
|
+
width: 100%;
|
|
448
|
+
height: 100%;
|
|
449
|
+
display: flex;
|
|
450
|
+
align-items: center;
|
|
451
|
+
justify-content: center;
|
|
452
|
+
font-size: 48px;
|
|
453
|
+
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-dark) 100%);
|
|
454
|
+
color: var(--bg);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
.card-cover-info {
|
|
458
|
+
position: absolute;
|
|
459
|
+
bottom: 0;
|
|
460
|
+
left: 0;
|
|
461
|
+
right: 0;
|
|
462
|
+
padding: 16px;
|
|
463
|
+
background: linear-gradient(transparent, rgba(0,0,0,0.8));
|
|
464
|
+
color: #fff;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.card-cover-name {
|
|
468
|
+
font-size: 20px;
|
|
469
|
+
font-weight: 700;
|
|
470
|
+
margin-bottom: 4px;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.card-cover-desc {
|
|
474
|
+
font-size: 13px;
|
|
475
|
+
opacity: 0.8;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/* 卡片详情区域 (垂直频) */
|
|
479
|
+
.card-body {
|
|
480
|
+
flex: 1;
|
|
481
|
+
overflow-y: auto;
|
|
482
|
+
-webkit-overflow-scrolling: touch;
|
|
483
|
+
padding: 16px;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.card-body-row {
|
|
487
|
+
display: flex;
|
|
488
|
+
align-items: center;
|
|
489
|
+
gap: 10px;
|
|
490
|
+
padding: 10px 0;
|
|
491
|
+
border-bottom: 1px solid var(--border);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.card-body-row:last-child { border-bottom: none; }
|
|
495
|
+
|
|
496
|
+
.card-body-label {
|
|
497
|
+
font-size: 12px;
|
|
498
|
+
color: var(--text-muted);
|
|
499
|
+
min-width: 60px;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.card-body-value {
|
|
503
|
+
font-size: 14px;
|
|
504
|
+
color: var(--text);
|
|
505
|
+
flex: 1;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
.card-action-btn {
|
|
509
|
+
width: 100%;
|
|
510
|
+
padding: 12px;
|
|
511
|
+
border: 1px solid var(--accent);
|
|
512
|
+
border-radius: 10px;
|
|
513
|
+
background: transparent;
|
|
514
|
+
color: var(--accent);
|
|
515
|
+
font-size: 14px;
|
|
516
|
+
font-weight: 600;
|
|
517
|
+
cursor: pointer;
|
|
518
|
+
margin-top: 12px;
|
|
519
|
+
transition: background 0.2s;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.card-action-btn:active {
|
|
523
|
+
background: var(--accent);
|
|
524
|
+
color: var(--bg);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/* 卡片指示器 */
|
|
528
|
+
.card-indicator {
|
|
529
|
+
display: flex;
|
|
530
|
+
justify-content: center;
|
|
531
|
+
gap: 8px;
|
|
532
|
+
padding: 12px;
|
|
533
|
+
background: var(--bg-card);
|
|
534
|
+
border-top: 1px solid var(--border);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.card-dot {
|
|
538
|
+
width: 8px;
|
|
539
|
+
height: 8px;
|
|
540
|
+
border-radius: 50%;
|
|
541
|
+
background: var(--border);
|
|
542
|
+
transition: all 0.2s;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
.card-dot.active {
|
|
546
|
+
background: var(--accent);
|
|
547
|
+
width: 24px;
|
|
548
|
+
border-radius: 4px;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/* 卡片详情浮层 */
|
|
552
|
+
.card-detail {
|
|
553
|
+
position: fixed;
|
|
554
|
+
inset: 0;
|
|
555
|
+
background: var(--bg);
|
|
556
|
+
z-index: 50;
|
|
557
|
+
display: flex;
|
|
558
|
+
flex-direction: column;
|
|
559
|
+
overflow: hidden;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
.card-detail[hidden] { display: none !important; }
|
|
563
|
+
|
|
564
|
+
.detail-header {
|
|
565
|
+
height: var(--topbar-h);
|
|
566
|
+
display: flex;
|
|
567
|
+
align-items: center;
|
|
568
|
+
padding: 0 16px;
|
|
569
|
+
gap: 12px;
|
|
570
|
+
background: var(--bg-card);
|
|
571
|
+
border-bottom: 1px solid var(--border);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.detail-header h2 {
|
|
575
|
+
font-size: 18px;
|
|
576
|
+
font-weight: 600;
|
|
577
|
+
flex: 1;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.detail-body {
|
|
581
|
+
flex: 1;
|
|
582
|
+
overflow-y: auto;
|
|
583
|
+
-webkit-overflow-scrolling: touch;
|
|
584
|
+
padding: 16px;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.detail-section {
|
|
588
|
+
margin-bottom: 20px;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
.detail-section-title {
|
|
592
|
+
font-size: 12px;
|
|
593
|
+
color: var(--text-muted);
|
|
594
|
+
text-transform: uppercase;
|
|
595
|
+
letter-spacing: 0.5px;
|
|
596
|
+
margin-bottom: 8px;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.detail-meta {
|
|
600
|
+
display: grid;
|
|
601
|
+
grid-template-columns: 1fr 1fr;
|
|
602
|
+
gap: 8px;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
.detail-meta-item {
|
|
606
|
+
background: var(--bg-card);
|
|
607
|
+
border: 1px solid var(--border);
|
|
608
|
+
border-radius: 8px;
|
|
609
|
+
padding: 12px;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
.detail-meta-item .label {
|
|
613
|
+
font-size: 11px;
|
|
614
|
+
color: var(--text-muted);
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.detail-meta-item .value {
|
|
618
|
+
font-size: 14px;
|
|
619
|
+
color: var(--text);
|
|
620
|
+
margin-top: 4px;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/* 聊天页 (在详情浮层内) */
|
|
624
|
+
.chat-page {
|
|
625
|
+
position: fixed; inset: 0;
|
|
626
|
+
display: flex; flex-direction: column;
|
|
627
|
+
background: var(--bg);
|
|
628
|
+
z-index: 60;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/* 加载状态 */
|
|
632
|
+
.card-loading {
|
|
633
|
+
display: flex;
|
|
634
|
+
align-items: center;
|
|
635
|
+
justify-content: center;
|
|
636
|
+
height: 100%;
|
|
637
|
+
color: var(--text-muted);
|
|
638
|
+
font-size: 14px;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
.card-empty {
|
|
642
|
+
display: flex;
|
|
643
|
+
align-items: center;
|
|
644
|
+
justify-content: center;
|
|
645
|
+
height: 100%;
|
|
646
|
+
color: var(--text-muted);
|
|
647
|
+
font-size: 14px;
|
|
648
|
+
flex-direction: column;
|
|
649
|
+
gap: 8px;
|
|
650
|
+
}
|