agentworkshop 0.7.22 → 0.7.24
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/0jKrzLuM.js +19 -0
- package/.output/public/_nuxt/{Cor9siSf.js → 6PZPfFcO.js} +1 -1
- package/.output/public/_nuxt/BAfp6tmu.js +14 -0
- package/.output/public/_nuxt/{B-xskWta.js → BCJFMBQ6.js} +1 -1
- package/.output/public/_nuxt/{DNxVTfhe.js → BMb80_tm.js} +1 -1
- package/.output/public/_nuxt/{n3vMFfrv.js → Bc-_IsBP.js} +3 -3
- package/.output/public/_nuxt/BvNJUu3s.js +1 -0
- package/.output/public/_nuxt/C1CSiSBN.js +1 -0
- package/.output/public/_nuxt/CAGL7TNK.js +1 -0
- package/.output/public/_nuxt/{ed5qX-x5.js → CDLv-n51.js} +1 -1
- package/.output/public/_nuxt/CJviSvm-.js +1 -0
- package/.output/public/_nuxt/CLZWFhZC.js +1 -0
- package/.output/public/_nuxt/{Cr9DkD1d.js → CYzpZzB_.js} +1 -1
- package/.output/public/_nuxt/Cb3SnTM8.js +1 -0
- package/.output/public/_nuxt/CjXIpPMR.js +1 -0
- package/.output/public/_nuxt/CmHzfVc5.js +3 -0
- package/.output/public/_nuxt/Cn3J3NXR.js +23 -0
- package/.output/public/_nuxt/Coik560n.js +1 -0
- package/.output/public/_nuxt/{DA4lxCWC2.js → Ct68Z0232.js} +1 -1
- package/.output/public/_nuxt/CuVGPuP1.js +1 -0
- package/.output/public/_nuxt/CxY6LfeN.js +1 -0
- package/.output/public/_nuxt/{CfVAr2nf.js → Cz9gD2Yo.js} +1 -1
- package/.output/public/_nuxt/D6HDb-vN2.js +1 -0
- package/.output/public/_nuxt/{E88a-JCG.js → DGAOugLt.js} +1 -1
- package/.output/public/_nuxt/DKHcFE1i.js +1 -0
- package/.output/public/_nuxt/{BxtpDtzC.js → DNQF_TXX.js} +1 -1
- package/.output/public/_nuxt/DSa2O56y.js +1 -0
- package/.output/public/_nuxt/DUToq-k_.js +1 -0
- package/.output/public/_nuxt/Dfe8vXdG.js +1 -0
- package/.output/public/_nuxt/{0exC4jVL.js → Djir5rSD.js} +2 -2
- package/.output/public/_nuxt/DjtE7AYt.js +1 -0
- package/.output/public/_nuxt/{BBwMH_hG.js → DoAlYsiF.js} +1 -1
- package/.output/public/_nuxt/{DWcEk1ur2.js → DvgKXPgu2.js} +1 -1
- package/.output/public/_nuxt/JOwsShod.js +2 -0
- package/.output/public/_nuxt/X6IraCTB.js +1 -0
- package/.output/public/_nuxt/_id_.C-YXjn8Q.css +1 -0
- package/.output/public/_nuxt/_id_.MbzdFygI.css +1 -0
- package/.output/public/_nuxt/_wsId_.BqWBlY7X.css +1 -0
- package/.output/public/_nuxt/{CYBq3kS7.js → b50gYVZl.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/024de5f7-6a10-4f53-82ab-bc65f3ec9e35.json +1 -0
- package/.output/public/_nuxt/daq.3OKj58HH.css +1 -0
- package/.output/public/_nuxt/dcw.rXH2fc2Z.css +1 -0
- package/.output/public/_nuxt/entry.AZM1Culo.css +1 -0
- package/.output/public/_nuxt/logs.DMOM-iHe.css +1 -0
- package/.output/public/_nuxt/monitor.B--1dPzs.css +1 -0
- package/.output/public/_nuxt/permissions.B1pjGChZ.css +1 -0
- package/.output/public/_nuxt/plugins.DpCuwaJt.css +1 -0
- package/.output/public/_nuxt/tokens.xRb1fSPU.css +1 -0
- package/.output/public/_nuxt/users.DuAt_Zwf.css +1 -0
- package/.output/public/_nuxt/workshop.BJg84pOK.css +1 -0
- package/.output/server/chunks/_/nitro.mjs +777 -798
- package/.output/server/chunks/build/{OmpTerminalPanel-Ban3yJZ4.mjs → OmpTerminalPanel-Cw_Vw9oO.mjs} +3 -3
- package/.output/server/chunks/build/{OmpTerminalPanel-Ban3yJZ4.mjs.map → OmpTerminalPanel-Cw_Vw9oO.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-B9RvEQFC.mjs → _id_-DQDqj-cZ.mjs} +31 -31
- package/.output/server/chunks/build/{_id_-B9RvEQFC.mjs.map → _id_-DQDqj-cZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-CqF0R5W5.mjs → _id_-DY6v6sqB.mjs} +135 -135
- package/.output/server/chunks/build/{_id_-CqF0R5W5.mjs.map → _id_-DY6v6sqB.mjs.map} +1 -1
- package/.output/server/chunks/build/{_wsId_-YC2t_fRt.mjs → _wsId_-D38Vx6Ky.mjs} +11 -13
- package/.output/server/chunks/build/{_wsId_-YC2t_fRt.mjs.map → _wsId_-D38Vx6Ky.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents--6bzGtES.mjs → agents-GnmUGZir.mjs} +6 -8
- package/.output/server/chunks/build/agents-GnmUGZir.mjs.map +1 -0
- package/.output/server/chunks/build/button-DEcZFcqN.mjs +1 -1
- package/.output/server/chunks/build/{card-CCPQoKlh.mjs → card-Dipvaykh.mjs} +4 -4
- package/.output/server/chunks/build/{card-CCPQoKlh.mjs.map → card-Dipvaykh.mjs.map} +1 -1
- package/.output/server/chunks/build/{channel-templates-C1Bb-U75.mjs → channel-templates-B4z6v8Z5.mjs} +4 -6
- package/.output/server/chunks/build/channel-templates-B4z6v8Z5.mjs.map +1 -0
- package/.output/server/chunks/build/{checkbox-Dv1kjaUZ.mjs → checkbox-dzcpU_Cd.mjs} +2 -2
- package/.output/server/chunks/build/{checkbox-Dv1kjaUZ.mjs.map → checkbox-dzcpU_Cd.mjs.map} +1 -1
- package/.output/server/chunks/build/{daq-Bhwwz9vp.mjs → daq-B-3xCp_2.mjs} +103 -103
- package/.output/server/chunks/build/{daq-Bhwwz9vp.mjs.map → daq-B-3xCp_2.mjs.map} +1 -1
- package/.output/server/chunks/build/{dcw-CBPaFj2f.mjs → dcw-BL2dhuz7.mjs} +43 -43
- package/.output/server/chunks/build/{dcw-CBPaFj2f.mjs.map → dcw-BL2dhuz7.mjs.map} +1 -1
- package/.output/server/chunks/build/{default-DdV642BY.mjs → default-CLf5m0NE.mjs} +2 -3
- package/.output/server/chunks/build/{default-DdV642BY.mjs.map → default-CLf5m0NE.mjs.map} +1 -1
- package/.output/server/chunks/build/dropdown-vhn1NPFs.mjs +1 -1
- package/.output/server/chunks/build/{input-number-CZ3ZrCsy.mjs → input-number-Bd55elNN.mjs} +3 -3
- package/.output/server/chunks/build/{input-number-CZ3ZrCsy.mjs.map → input-number-Bd55elNN.mjs.map} +1 -1
- package/.output/server/chunks/build/{input-DxDqeyQW.mjs → input-sf_BT6o6.mjs} +553 -5
- package/.output/server/chunks/build/input-sf_BT6o6.mjs.map +1 -0
- package/.output/server/chunks/build/{logs-Bz1p6x_5.mjs → logs-Dto_umFY.mjs} +44 -38
- package/.output/server/chunks/build/logs-Dto_umFY.mjs.map +1 -0
- package/.output/server/chunks/build/menu-WCrlpYVh.mjs +2 -2
- package/.output/server/chunks/build/modal-yvUquPj5.mjs +2 -2
- package/.output/server/chunks/build/{monitor-miqq9xHB.mjs → monitor-Cp4V-H2n.mjs} +70 -192
- package/.output/server/chunks/build/monitor-Cp4V-H2n.mjs.map +1 -0
- package/.output/server/chunks/build/{pages-D9tOoJsf.mjs → pages-Dc2H1QFu.mjs} +2 -3
- package/.output/server/chunks/build/pages-Dc2H1QFu.mjs.map +1 -0
- package/.output/server/chunks/build/{permissions-CxEgXic0.mjs → permissions-BTRW2CVd.mjs} +288 -194
- package/.output/server/chunks/build/permissions-BTRW2CVd.mjs.map +1 -0
- package/.output/server/chunks/build/{plugins-wLIKHcIE.mjs → plugins-DZR0T4Mh.mjs} +17 -17
- package/.output/server/chunks/build/{plugins-wLIKHcIE.mjs.map → plugins-DZR0T4Mh.mjs.map} +1 -1
- package/.output/server/chunks/build/popconfirm-CRaHcz5O.mjs +1 -1
- package/.output/server/chunks/build/{segmented-ChmQZwz6.mjs → segmented-LPPREMtZ.mjs} +336 -5
- package/.output/server/chunks/build/{segmented-ChmQZwz6.mjs.map → segmented-LPPREMtZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-BPBll_7K.mjs → settings-UfGyDgM7.mjs} +6 -8
- package/.output/server/chunks/build/settings-UfGyDgM7.mjs.map +1 -0
- package/.output/server/chunks/build/space-CCBYAkXt.mjs +1 -1
- package/.output/server/chunks/build/switch-CelRXpcy.mjs +1 -1
- package/.output/server/chunks/build/{table-BtksyDlQ.mjs → table-Cswq-l2r.mjs} +5 -5
- package/.output/server/chunks/build/{table-BtksyDlQ.mjs.map → table-Cswq-l2r.mjs.map} +1 -1
- package/.output/server/chunks/build/{tabs-DQv-_-R6.mjs → tabs-BM3tAh_J.mjs} +2 -2
- package/.output/server/chunks/build/{tabs-DQv-_-R6.mjs.map → tabs-BM3tAh_J.mjs.map} +1 -1
- package/.output/server/chunks/build/{tag-A0tZ2Ouq.mjs → tag-NO9jEqKy.mjs} +3 -3
- package/.output/server/chunks/build/{tag-A0tZ2Ouq.mjs.map → tag-NO9jEqKy.mjs.map} +1 -1
- package/.output/server/chunks/build/{teams-DD8ZXTKL.mjs → teams-Cbg27MWW.mjs} +4 -6
- package/.output/server/chunks/build/teams-Cbg27MWW.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-Dxnuw96_.mjs → tokens-Bmm6rDfj.mjs} +296 -200
- package/.output/server/chunks/build/tokens-Bmm6rDfj.mjs.map +1 -0
- package/.output/server/chunks/build/{users-D6RNylrW.mjs → users-B50HHrfi.mjs} +12 -13
- package/.output/server/chunks/build/users-B50HHrfi.mjs.map +1 -0
- package/.output/server/chunks/build/{workshop-CTcYDq2i.mjs → workshop-81xhz368.mjs} +21 -22
- package/.output/server/chunks/build/workshop-81xhz368.mjs.map +1 -0
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/virtual/entry.mjs +53 -21
- package/.output/server/chunks/virtual/entry.mjs.map +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/app/app.vue +7 -0
- package/app/assets/css/main.css +318 -162
- package/app/components/workshop/blocks/ClusterArtifact.vue +0 -16
- package/app/pages/daq/[id].vue +919 -938
- package/app/pages/daq/index.vue +1 -22
- package/app/pages/dcw/[id].vue +1 -4
- package/app/pages/dcw/index.vue +1 -30
- package/app/pages/logs/index.vue +99 -87
- package/app/pages/monitor.vue +56 -68
- package/app/pages/permissions/index.vue +86 -82
- package/app/pages/plugins/index.vue +12 -7
- package/app/pages/tokens.vue +94 -96
- package/app/pages/users.vue +10 -18
- package/app/pages/workshop/index.vue +34 -5
- package/i18n/locales/en.ts +4 -1
- package/i18n/locales/zh-CN.ts +6 -1
- package/package.json +1 -1
- package/scripts/_dbg-logs-ui-e2e.py +126 -0
- package/scripts/_dbg-ui-survey.py +52 -0
- package/server/data/daqs.json +101 -101
- package/server/data/dcw-lines.json +7 -0
- package/server/data/dcw-products.json +7 -0
- package/server/data/dcw-recipes.json +22 -0
- package/server/data/dcw-rollback.json +84 -10
- package/server/data/dcw-runs.json +52 -54
- package/server/data/dcw-writes.json +36 -0
- package/server/data/dcws.json +533 -216
- package/server/data/line-runs.json +18 -18
- package/.output/public/_nuxt/BAbAEW0D.js +0 -1
- package/.output/public/_nuxt/BWC4HQHQ.js +0 -1
- package/.output/public/_nuxt/BbZAzXjZ2.js +0 -1
- package/.output/public/_nuxt/BgOhoDTI.js +0 -1
- package/.output/public/_nuxt/BuiGDfMB.js +0 -1
- package/.output/public/_nuxt/BxPPAkGA.js +0 -3
- package/.output/public/_nuxt/C_2bTK0C.js +0 -1
- package/.output/public/_nuxt/CcwJ2mrD2.js +0 -1
- package/.output/public/_nuxt/Ci0uX4c4.js +0 -1
- package/.output/public/_nuxt/D6B0xnjk.js +0 -1
- package/.output/public/_nuxt/DTYBfjRY.js +0 -1
- package/.output/public/_nuxt/DVoWWlUW.js +0 -1
- package/.output/public/_nuxt/Dhqra7NB.js +0 -1
- package/.output/public/_nuxt/DlRO_q5L.js +0 -1
- package/.output/public/_nuxt/DsUUYP292.js +0 -1
- package/.output/public/_nuxt/Dsdy4Ua-.js +0 -1
- package/.output/public/_nuxt/QT54MQV9.js +0 -1
- package/.output/public/_nuxt/RzXYI9FM.js +0 -23
- package/.output/public/_nuxt/UtviM1bg.js +0 -1
- package/.output/public/_nuxt/_id_.C2VHq_vT.css +0 -1
- package/.output/public/_nuxt/_id_.Dswy2p0I.css +0 -1
- package/.output/public/_nuxt/_wsId_.BFyCuUwS.css +0 -1
- package/.output/public/_nuxt/bAFueD6a.js +0 -1
- package/.output/public/_nuxt/builds/meta/e2341fc0-6f3f-4680-abf8-935a7c9fb912.json +0 -1
- package/.output/public/_nuxt/c3mwkHWP.js +0 -14
- package/.output/public/_nuxt/daq.BTdEun-8.css +0 -1
- package/.output/public/_nuxt/dbi5bHkY.js +0 -2
- package/.output/public/_nuxt/dcw.rpqpOYQ8.css +0 -1
- package/.output/public/_nuxt/eHYnGew0.js +0 -19
- package/.output/public/_nuxt/entry.DRUzDwmX.css +0 -1
- package/.output/public/_nuxt/jyQyulh-.js +0 -1
- package/.output/public/_nuxt/logs.BarkrvUp.css +0 -1
- package/.output/public/_nuxt/monitor.CmwpEUCI.css +0 -1
- package/.output/public/_nuxt/permissions.DTRtZeTw.css +0 -1
- package/.output/public/_nuxt/plugins.BcSEwwGb.css +0 -1
- package/.output/public/_nuxt/tokens.BVXU1jOK.css +0 -1
- package/.output/public/_nuxt/users.D8lcLE62.css +0 -1
- package/.output/public/_nuxt/workshop.CbymC2LY.css +0 -1
- package/.output/public/_nuxt/zVkqCZ78.js +0 -1
- package/.output/server/chunks/build/Col-biaNnEPf.mjs +0 -338
- package/.output/server/chunks/build/Col-biaNnEPf.mjs.map +0 -1
- package/.output/server/chunks/build/agents--6bzGtES.mjs.map +0 -1
- package/.output/server/chunks/build/channel-templates-C1Bb-U75.mjs.map +0 -1
- package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs +0 -554
- package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs.map +0 -1
- package/.output/server/chunks/build/input-DxDqeyQW.mjs.map +0 -1
- package/.output/server/chunks/build/logs-Bz1p6x_5.mjs.map +0 -1
- package/.output/server/chunks/build/monitor-miqq9xHB.mjs.map +0 -1
- package/.output/server/chunks/build/pages-D9tOoJsf.mjs.map +0 -1
- package/.output/server/chunks/build/permissions-CxEgXic0.mjs.map +0 -1
- package/.output/server/chunks/build/settings-BPBll_7K.mjs.map +0 -1
- package/.output/server/chunks/build/teams-DD8ZXTKL.mjs.map +0 -1
- package/.output/server/chunks/build/tokens-Dxnuw96_.mjs.map +0 -1
- package/.output/server/chunks/build/useSiteConfig-DJe_KMVr.mjs +0 -27
- package/.output/server/chunks/build/useSiteConfig-DJe_KMVr.mjs.map +0 -1
- package/.output/server/chunks/build/users-D6RNylrW.mjs.map +0 -1
- package/.output/server/chunks/build/workshop-CTcYDq2i.mjs.map +0 -1
- /package/.output/public/_nuxt/{CNs_Ozdc.js → CNs_Ozdc2.js} +0 -0
- /package/.output/public/_nuxt/{Cno6kYiO.js → Cno6kYiO2.js} +0 -0
- /package/.output/public/_nuxt/{DAR70Lf5.js → DAR70Lf52.js} +0 -0
- /package/.output/public/_nuxt/{ORt9oDIy2.js → ORt9oDIy.js} +0 -0
package/app/pages/daq/index.vue
CHANGED
|
@@ -2225,7 +2225,7 @@ tr.row-recipe-alarm td:first-child { box-shadow: inset 3px 0 0 var(--tone-danger
|
|
|
2225
2225
|
.infra-banner .txt a { color: var(--accent); text-decoration: underline; }
|
|
2226
2226
|
.infra-banner .txt b { font-weight: 600; }
|
|
2227
2227
|
.infra-banner .txt small { margin-left: 8px; font-size: 10.5px; opacity: 0.75; }
|
|
2228
|
-
.infra-banner .pill-btn { flex: 0 0 auto;
|
|
2228
|
+
.infra-banner .pill-btn { flex: 0 0 auto; }
|
|
2229
2229
|
|
|
2230
2230
|
/* ---------- 未确认报警条(S5) ---------- */
|
|
2231
2231
|
.alarm-bar {
|
|
@@ -2351,16 +2351,6 @@ tr.row-recipe-alarm td:first-child { box-shadow: inset 3px 0 0 var(--tone-danger
|
|
|
2351
2351
|
}
|
|
2352
2352
|
.hint { font-size: 10px; color: var(--ink-fainter); }
|
|
2353
2353
|
.test-row { display: flex; gap: 10px; align-items: center; margin: 6px 0 4px; }
|
|
2354
|
-
.pill-btn {
|
|
2355
|
-
padding: 7px 14px;
|
|
2356
|
-
font-size: 12.5px;
|
|
2357
|
-
cursor: pointer;
|
|
2358
|
-
color: var(--paper-raised);
|
|
2359
|
-
background: var(--accent);
|
|
2360
|
-
border: 1px solid var(--accent);
|
|
2361
|
-
border-radius: var(--radius-pill);
|
|
2362
|
-
}
|
|
2363
|
-
.pill-btn:disabled { opacity: 0.5; cursor: default; }
|
|
2364
2354
|
.test-result { font-family: var(--font-mono); font-size: 11px; }
|
|
2365
2355
|
.test-result.ok { color: var(--tone-success-dot); }
|
|
2366
2356
|
.test-result.bad { color: var(--tone-danger-dot); }
|
|
@@ -2383,17 +2373,6 @@ tr.row-recipe-alarm td:first-child { box-shadow: inset 3px 0 0 var(--tone-danger
|
|
|
2383
2373
|
.tpl-table .range { font-size: 11.5px; color: var(--ink-soft); }
|
|
2384
2374
|
.tpl-table .empty { color: var(--ink-fainter); font-size: 12px; text-align: center; padding: 14px 0; }
|
|
2385
2375
|
.tpl-table .actions { white-space: nowrap; }
|
|
2386
|
-
.mini-btn {
|
|
2387
|
-
padding: 3px 10px;
|
|
2388
|
-
font-size: 11.5px;
|
|
2389
|
-
cursor: pointer;
|
|
2390
|
-
color: var(--ink-soft);
|
|
2391
|
-
background: var(--paper-deep);
|
|
2392
|
-
border: 1px solid var(--line-strong);
|
|
2393
|
-
border-radius: var(--radius-chip);
|
|
2394
|
-
}
|
|
2395
|
-
.mini-btn.danger { color: var(--tone-danger-dot); }
|
|
2396
|
-
.mini-btn:hover { border-color: var(--accent); color: var(--accent); }
|
|
2397
2376
|
|
|
2398
2377
|
/* ---------- 节点筛选工具条 ---------- */
|
|
2399
2378
|
.tbl-toolbar {
|
package/app/pages/dcw/[id].vue
CHANGED
|
@@ -2443,7 +2443,7 @@ h1 { margin: 2px 0 4px; font-size: 30px; font-weight: 400; letter-spacing: -0.01
|
|
|
2443
2443
|
.write-row { display: flex; gap: 6px; align-items: center; }
|
|
2444
2444
|
.write-inp { width: 92px; padding: 4px 8px; }
|
|
2445
2445
|
.write-btn { padding: 5px 12px; }
|
|
2446
|
-
.mini-btn {
|
|
2446
|
+
.mini-btn { margin-right: 4px; }
|
|
2447
2447
|
.mini-btn.danger { color: var(--tone-danger-dot); }
|
|
2448
2448
|
.mini-btn:hover { border-color: var(--accent); color: var(--accent); }
|
|
2449
2449
|
.inp { padding: 5px 9px; font-size: 12.5px; color: var(--ink); background: var(--paper-deep); border: 1px solid var(--line-strong); border-radius: var(--radius-chip); }
|
|
@@ -2497,9 +2497,6 @@ h1 { margin: 2px 0 4px; font-size: 30px; font-weight: 400; letter-spacing: -0.01
|
|
|
2497
2497
|
.ver-diff { margin: 4px 0 0; font-size: 11px; color: var(--ink-faint); }
|
|
2498
2498
|
.sec-label { margin: 14px 0 6px; font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-faint); }
|
|
2499
2499
|
.runs { margin-top: 6px; }
|
|
2500
|
-
.pill-btn { padding: 6px 14px; font-size: 12.5px; cursor: pointer; color: var(--paper-raised); background: var(--accent); border: 1px solid var(--accent); border-radius: var(--radius-pill); }
|
|
2501
|
-
.pill-btn.outline { color: var(--ink); background: var(--paper-raised); border-color: var(--line-strong); }
|
|
2502
|
-
.pill-btn:disabled { opacity: 0.5; cursor: default; }
|
|
2503
2500
|
|
|
2504
2501
|
.modal-mask { position: fixed; z-index: 50; inset: 0; display: flex; align-items: center; justify-content: center; background: var(--scrim); backdrop-filter: blur(2px); }
|
|
2505
2502
|
.modal { width: 680px; max-width: 94vw; max-height: 88vh; overflow-y: auto; padding: 22px 24px; background: var(--surface-glass-strong); backdrop-filter: var(--aurora-blur); -webkit-backdrop-filter: var(--aurora-blur); border: 1px solid var(--glass-line); border-radius: var(--radius-panel); box-shadow: var(--glass-edge), var(--shadow-float); }
|
package/app/pages/dcw/index.vue
CHANGED
|
@@ -925,25 +925,7 @@ const builtinCount = computed(() => dcw.templates.filter(t => t.builtin).length)
|
|
|
925
925
|
border-radius: var(--radius-panel-sm);
|
|
926
926
|
}
|
|
927
927
|
.lc-ctl .inp:focus { outline: none; border-color: var(--tone-success-dot); box-shadow: 0 0 0 3px var(--accent-soft); }
|
|
928
|
-
.pill-btn {
|
|
929
|
-
flex: none;
|
|
930
|
-
height: 30px;
|
|
931
|
-
padding: 0 14px;
|
|
932
|
-
font-size: 11.5px;
|
|
933
|
-
font-weight: 600;
|
|
934
|
-
color: var(--on-accent);
|
|
935
|
-
background: var(--accent);
|
|
936
|
-
border: 0;
|
|
937
|
-
border-radius: var(--radius-panel-sm);
|
|
938
|
-
cursor: pointer;
|
|
939
|
-
transition: background 0.15s, box-shadow 0.15s;
|
|
940
|
-
}
|
|
941
|
-
.pill-btn:hover:not(:disabled) { background: var(--accent-strong); box-shadow: 0 0 14px var(--accent-soft); }
|
|
942
|
-
.pill-btn:disabled { opacity: 0.4; cursor: default; }
|
|
943
|
-
.pill-btn.danger,
|
|
944
|
-
.pill-btn.stop { background: var(--tone-danger-bg); color: var(--tone-danger-dot); }
|
|
945
|
-
.pill-btn.danger:hover:not(:disabled),
|
|
946
|
-
.pill-btn.stop:hover:not(:disabled) { background: color-mix(in srgb, var(--tone-danger-dot) 26%, transparent); box-shadow: none; }
|
|
928
|
+
.lc-ctl .pill-btn { flex: none; }
|
|
947
929
|
.lc-manage {
|
|
948
930
|
font-size: 11.5px;
|
|
949
931
|
font-weight: 600;
|
|
@@ -1065,15 +1047,4 @@ const builtinCount = computed(() => dcw.templates.filter(t => t.builtin).length)
|
|
|
1065
1047
|
.tpl-form { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
|
|
1066
1048
|
.tpl-sem { flex: 1; color: var(--ink-faint); }
|
|
1067
1049
|
textarea.inp { height: auto; padding: 6px 9px; font-size: 11.5px; resize: vertical; }
|
|
1068
|
-
.mini-btn {
|
|
1069
|
-
padding: 4px 10px;
|
|
1070
|
-
font-size: 10.5px;
|
|
1071
|
-
color: var(--ink-faint);
|
|
1072
|
-
background: var(--paper-deep);
|
|
1073
|
-
border: 1px solid var(--line-strong);
|
|
1074
|
-
border-radius: 7px;
|
|
1075
|
-
cursor: pointer;
|
|
1076
|
-
}
|
|
1077
|
-
.mini-btn:hover { border-color: var(--ink-faint); color: var(--ink); }
|
|
1078
|
-
.mini-btn.danger { color: var(--tone-danger-dot); }
|
|
1079
1050
|
</style>
|
package/app/pages/logs/index.vue
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="page">
|
|
3
|
-
<!--
|
|
4
|
-
<header class="head">
|
|
3
|
+
<!-- 页头(aw-page-head 规范:kicker + 大标题 + 描述)+ 手动记录入口 -->
|
|
4
|
+
<header class="aw-page-head">
|
|
5
5
|
<div>
|
|
6
6
|
<p class="aw-kicker">
|
|
7
7
|
agentworkshop / audit log
|
|
8
8
|
</p>
|
|
9
|
-
<h1
|
|
10
|
-
{{ $t('logs.title') }}
|
|
11
|
-
</h1>
|
|
9
|
+
<h1>{{ $t('logs.title') }}</h1>
|
|
12
10
|
<p class="sub">
|
|
13
11
|
{{ $t('logs.sub') }}
|
|
14
12
|
</p>
|
|
@@ -182,67 +180,78 @@
|
|
|
182
180
|
</tr>
|
|
183
181
|
</thead>
|
|
184
182
|
<tbody>
|
|
185
|
-
<
|
|
183
|
+
<template
|
|
186
184
|
v-for="row in opsLog.results"
|
|
187
|
-
:key="
|
|
185
|
+
:key="row.id"
|
|
188
186
|
>
|
|
189
|
-
<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
<
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
<
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
<
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
<
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
187
|
+
<tr>
|
|
188
|
+
<td class="mono dim">
|
|
189
|
+
{{ fmtTime(row.at) }}
|
|
190
|
+
</td>
|
|
191
|
+
<td>
|
|
192
|
+
<span
|
|
193
|
+
class="src-badge"
|
|
194
|
+
:class="row.actorKind"
|
|
195
|
+
>{{ srcLabel(row.actorKind) }}</span>
|
|
196
|
+
</td>
|
|
197
|
+
<td class="actor">
|
|
198
|
+
{{ row.actorName || row.actor || '—' }}
|
|
199
|
+
</td>
|
|
200
|
+
<td>
|
|
201
|
+
<span
|
|
202
|
+
class="kind-chip"
|
|
203
|
+
:class="row.kind"
|
|
204
|
+
>{{ kindLabel(row.kind) }}</span>
|
|
205
|
+
</td>
|
|
206
|
+
<td class="summary">
|
|
207
|
+
{{ row.summary }}
|
|
208
|
+
<small class="mono dim action">{{ row.action }}</small>
|
|
209
|
+
</td>
|
|
210
|
+
<td class="scope">
|
|
211
|
+
<span
|
|
212
|
+
v-if="lineName(row.lineId)"
|
|
213
|
+
class="scope-chip"
|
|
214
|
+
:title="$t('logs.fLine')"
|
|
215
|
+
>{{ lineName(row.lineId) }}</span>
|
|
216
|
+
<span
|
|
217
|
+
v-if="productName(row.productId)"
|
|
218
|
+
class="scope-chip"
|
|
219
|
+
:title="$t('logs.fProduct')"
|
|
220
|
+
>{{ productName(row.productId) }}</span>
|
|
221
|
+
<span
|
|
222
|
+
v-if="recipeName(row.recipeId)"
|
|
223
|
+
class="scope-chip"
|
|
224
|
+
:title="'Recipe'"
|
|
225
|
+
>{{ recipeName(row.recipeId) }}</span>
|
|
226
|
+
<span
|
|
227
|
+
v-if="!row.lineId && !row.productId && !row.recipeId"
|
|
228
|
+
class="dim"
|
|
229
|
+
>—</span>
|
|
230
|
+
</td>
|
|
231
|
+
<td class="detail-cell">
|
|
232
|
+
<button
|
|
233
|
+
v-if="hasDetail(row)"
|
|
234
|
+
class="mini-btn"
|
|
235
|
+
@click="toggle(row)"
|
|
236
|
+
>
|
|
237
|
+
{{ expandedId === row.id ? $t('logs.fold') : $t('logs.expand') }}
|
|
238
|
+
</button>
|
|
239
|
+
<span
|
|
240
|
+
v-else
|
|
241
|
+
class="dim"
|
|
242
|
+
>{{ $t('logs.noDetail') }}</span>
|
|
243
|
+
</td>
|
|
244
|
+
</tr>
|
|
245
|
+
<!-- 详情行内展开:紧贴事件行,点击即见(不再沉到表尾) -->
|
|
246
|
+
<tr v-if="expandedId === row.id">
|
|
247
|
+
<td
|
|
248
|
+
colspan="7"
|
|
249
|
+
class="detail-td"
|
|
237
250
|
>
|
|
238
|
-
{{
|
|
239
|
-
</
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
class="dim"
|
|
243
|
-
>—</span>
|
|
244
|
-
</td>
|
|
245
|
-
</tr>
|
|
251
|
+
<pre class="detail-box mono">{{ pretty(row.detailJson) }}</pre>
|
|
252
|
+
</td>
|
|
253
|
+
</tr>
|
|
254
|
+
</template>
|
|
246
255
|
<tr>
|
|
247
256
|
<td
|
|
248
257
|
v-if="opsLog.results.length === 0"
|
|
@@ -259,10 +268,6 @@
|
|
|
259
268
|
</tr>
|
|
260
269
|
</tbody>
|
|
261
270
|
</table>
|
|
262
|
-
<pre
|
|
263
|
-
v-if="expanded"
|
|
264
|
-
class="detail-box mono"
|
|
265
|
-
>{{ pretty(expanded.detailJson) }}</pre>
|
|
266
271
|
</section>
|
|
267
272
|
|
|
268
273
|
<!-- 人工记录弹窗 -->
|
|
@@ -284,6 +289,14 @@
|
|
|
284
289
|
:placeholder="$t('logs.mSummaryPh')"
|
|
285
290
|
/>
|
|
286
291
|
</label>
|
|
292
|
+
<label class="m-f">
|
|
293
|
+
<span>{{ $t('logs.mDetail') }}</span>
|
|
294
|
+
<textarea
|
|
295
|
+
v-model="manual.detail"
|
|
296
|
+
rows="2"
|
|
297
|
+
:placeholder="$t('logs.mDetailPh')"
|
|
298
|
+
/>
|
|
299
|
+
</label>
|
|
287
300
|
<div class="m-grid">
|
|
288
301
|
<label class="m-f">
|
|
289
302
|
<span>{{ $t('logs.fLine') }}</span>
|
|
@@ -385,9 +398,10 @@ const opsLog = useOpsLog()
|
|
|
385
398
|
const KINDS = ['write', 'manual', 'alarm', 'line', 'recipe', 'rollback', 'daq', 'system'] as const
|
|
386
399
|
|
|
387
400
|
const q = reactive({ lineId: '', productId: '', recipeId: '', actorKind: '', kind: '', text: '' })
|
|
388
|
-
|
|
401
|
+
/** 当前展开详情的行(audit_log 行 id;null = 全部收起) */
|
|
402
|
+
const expandedId = ref<number | null>(null)
|
|
389
403
|
const manualOpen = ref(false)
|
|
390
|
-
const manual = reactive({ summary: '', lineId: '', productId: '', recipeId: '' })
|
|
404
|
+
const manual = reactive({ summary: '', detail: '', lineId: '', productId: '', recipeId: '' })
|
|
391
405
|
|
|
392
406
|
const hasFilter = computed(() => !!(q.lineId || q.productId || q.recipeId || q.actorKind || q.kind || q.text.trim()))
|
|
393
407
|
const productsOfLine = computed(() => dcw.products.filter(p => !q.lineId || p.lineId === q.lineId))
|
|
@@ -404,7 +418,7 @@ function doQuery(): void {
|
|
|
404
418
|
q: q.text.trim(),
|
|
405
419
|
limit: 300,
|
|
406
420
|
})
|
|
407
|
-
|
|
421
|
+
expandedId.value = null
|
|
408
422
|
}
|
|
409
423
|
|
|
410
424
|
function resetFilters(): void {
|
|
@@ -419,6 +433,7 @@ function resetFilters(): void {
|
|
|
419
433
|
|
|
420
434
|
function openManual(): void {
|
|
421
435
|
manual.summary = ''
|
|
436
|
+
manual.detail = ''
|
|
422
437
|
manual.lineId = q.lineId
|
|
423
438
|
manual.productId = q.productId
|
|
424
439
|
manual.recipeId = q.recipeId
|
|
@@ -427,11 +442,13 @@ function openManual(): void {
|
|
|
427
442
|
|
|
428
443
|
async function submitManual(): Promise<void> {
|
|
429
444
|
try {
|
|
445
|
+
const note = manual.detail.trim()
|
|
430
446
|
await opsLog.postManual({
|
|
431
447
|
summary: manual.summary.trim(),
|
|
432
448
|
lineId: manual.lineId,
|
|
433
449
|
productId: manual.productId,
|
|
434
450
|
recipeId: manual.recipeId,
|
|
451
|
+
...(note ? { detail: { note } } : {}),
|
|
435
452
|
})
|
|
436
453
|
message.success(tt('logs.mOk'))
|
|
437
454
|
manualOpen.value = false
|
|
@@ -442,8 +459,13 @@ async function submitManual(): Promise<void> {
|
|
|
442
459
|
}
|
|
443
460
|
}
|
|
444
461
|
|
|
462
|
+
/** 该行是否带结构化详情(空对象 = 无) */
|
|
463
|
+
function hasDetail(row: OpsLogRow): boolean {
|
|
464
|
+
return !!row.detailJson && row.detailJson !== '{}'
|
|
465
|
+
}
|
|
466
|
+
|
|
445
467
|
function toggle(row: OpsLogRow): void {
|
|
446
|
-
|
|
468
|
+
expandedId.value = expandedId.value === row.id ? null : row.id
|
|
447
469
|
}
|
|
448
470
|
|
|
449
471
|
function pretty(json: string): string {
|
|
@@ -496,10 +518,8 @@ export default { name: 'OpsLogsPage' }
|
|
|
496
518
|
|
|
497
519
|
<style scoped>
|
|
498
520
|
.page { display: flex; flex-direction: column; gap: 12px; }
|
|
499
|
-
.head { display: flex;
|
|
500
|
-
.
|
|
501
|
-
.sub { margin: 4px 0 0; font-size: 12.5px; color: var(--ink-faint); }
|
|
502
|
-
.head-actions { display: flex; gap: 10px; align-items: center; }
|
|
521
|
+
.head-actions { display: flex; gap: 10px; align-items: center; padding-bottom: 4px; }
|
|
522
|
+
.sub { margin: 8px 0 0; font-size: 12.5px; color: var(--ink-faint); }
|
|
503
523
|
.live-dot {
|
|
504
524
|
width: 8px; height: 8px; border-radius: 50%;
|
|
505
525
|
background: var(--tone-success-dot);
|
|
@@ -530,12 +550,6 @@ export default { name: 'OpsLogsPage' }
|
|
|
530
550
|
border: 1px solid var(--glass-line); border-radius: 7px; outline: none;
|
|
531
551
|
}
|
|
532
552
|
.inp-sel:focus { border-color: color-mix(in srgb, var(--tone-info-dot) 55%, transparent); }
|
|
533
|
-
.mini-btn {
|
|
534
|
-
padding: 6px 11px; font-size: 12px; color: var(--ink-soft);
|
|
535
|
-
background: var(--frost-bg); border: 1px solid var(--glass-line); border-radius: 7px;
|
|
536
|
-
cursor: pointer;
|
|
537
|
-
}
|
|
538
|
-
.mini-btn:hover { border-color: color-mix(in srgb, var(--tone-info-dot) 45%, transparent); }
|
|
539
553
|
|
|
540
554
|
.table-card {
|
|
541
555
|
background: var(--surface-glass);
|
|
@@ -569,10 +583,12 @@ export default { name: 'OpsLogsPage' }
|
|
|
569
583
|
}
|
|
570
584
|
.detail-cell { white-space: nowrap; }
|
|
571
585
|
.empty { padding: 22px 0 !important; color: var(--ink-faint); text-align: center; }
|
|
586
|
+
/* 详情行内展开:紧贴事件行的整行 pre 面板 */
|
|
587
|
+
.detail-td { padding: 0 !important; }
|
|
572
588
|
.detail-box {
|
|
573
589
|
max-height: 260px; margin: 0; padding: 10px 14px; overflow: auto;
|
|
574
|
-
font-size: 11.5px; color: var(--ink-soft);
|
|
575
|
-
background: var(--
|
|
590
|
+
font-size: 11.5px; color: var(--ink-soft); white-space: pre-wrap; word-break: break-word;
|
|
591
|
+
background: var(--paper-deep); border-top: 1px solid var(--glass-line);
|
|
576
592
|
}
|
|
577
593
|
.src-badge {
|
|
578
594
|
display: inline-block; padding: 1px 8px; font-size: 10.5px;
|
|
@@ -616,8 +632,4 @@ export default { name: 'OpsLogsPage' }
|
|
|
616
632
|
.m-f textarea:focus, .m-f .inp-sel:focus { border-color: color-mix(in srgb, var(--tone-info-dot) 55%, transparent); }
|
|
617
633
|
.m-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 8px; }
|
|
618
634
|
.m-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 12px; }
|
|
619
|
-
.ghost-btn {
|
|
620
|
-
padding: 7px 14px; font-size: 12.5px; color: var(--ink-soft);
|
|
621
|
-
background: transparent; border: 1px solid var(--glass-line); border-radius: 8px; cursor: pointer;
|
|
622
|
-
}
|
|
623
635
|
</style>
|
package/app/pages/monitor.vue
CHANGED
|
@@ -293,73 +293,50 @@ const processColumns = computed(() => [
|
|
|
293
293
|
</a-card>
|
|
294
294
|
|
|
295
295
|
<template v-else>
|
|
296
|
-
<!-- 概要统计 -->
|
|
297
|
-
<
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
</
|
|
313
|
-
</a-
|
|
314
|
-
<a-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
<
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
>
|
|
341
|
-
+{{ snapshot?.counts.orphanProcesses }} {{ t('monitor.orphan') }}
|
|
342
|
-
</span>
|
|
343
|
-
</p>
|
|
344
|
-
</a-card>
|
|
345
|
-
</a-col>
|
|
346
|
-
<a-col
|
|
347
|
-
:xs="12"
|
|
348
|
-
:md="6"
|
|
349
|
-
>
|
|
350
|
-
<a-card class="aw-panel stat">
|
|
351
|
-
<p class="stat-label">
|
|
352
|
-
{{ t('monitor.server') }}
|
|
353
|
-
</p>
|
|
354
|
-
<p class="stat-value aw-mono small">
|
|
355
|
-
PID {{ snapshot?.serverPid ?? '–' }} · {{ snapshot ? uptimeText(snapshot.uptimeMs) : '' }}
|
|
356
|
-
</p>
|
|
357
|
-
<p class="stat-updated">
|
|
358
|
-
{{ lastUpdated }} · {{ t('monitor.updated') }} {{ snapshot?.generatedAt ?? '' }}
|
|
359
|
-
</p>
|
|
360
|
-
</a-card>
|
|
361
|
-
</a-col>
|
|
362
|
-
</a-row>
|
|
296
|
+
<!-- 概要统计(CSS grid:antd Grid 样式在部分构建下缺失,col 会退化 100% 宽) -->
|
|
297
|
+
<div class="stat-grid">
|
|
298
|
+
<a-card class="aw-panel stat">
|
|
299
|
+
<p class="stat-label">
|
|
300
|
+
{{ t('monitor.channels') }}
|
|
301
|
+
</p>
|
|
302
|
+
<p class="stat-value aw-mono">
|
|
303
|
+
{{ snapshot?.counts.channels ?? '–' }}
|
|
304
|
+
</p>
|
|
305
|
+
</a-card>
|
|
306
|
+
<a-card class="aw-panel stat">
|
|
307
|
+
<p class="stat-label">
|
|
308
|
+
{{ t('monitor.agents') }}
|
|
309
|
+
</p>
|
|
310
|
+
<p class="stat-value aw-mono">
|
|
311
|
+
{{ snapshot?.counts.agents ?? '–' }}
|
|
312
|
+
</p>
|
|
313
|
+
</a-card>
|
|
314
|
+
<a-card class="aw-panel stat">
|
|
315
|
+
<p class="stat-label">
|
|
316
|
+
{{ t('monitor.aliveProcesses') }}
|
|
317
|
+
</p>
|
|
318
|
+
<p class="stat-value aw-mono">
|
|
319
|
+
{{ snapshot?.counts.aliveProcesses ?? '–' }}
|
|
320
|
+
<span
|
|
321
|
+
v-if="(snapshot?.counts.orphanProcesses ?? 0) > 0"
|
|
322
|
+
class="orphan-badge"
|
|
323
|
+
>
|
|
324
|
+
+{{ snapshot?.counts.orphanProcesses }} {{ t('monitor.orphan') }}
|
|
325
|
+
</span>
|
|
326
|
+
</p>
|
|
327
|
+
</a-card>
|
|
328
|
+
<a-card class="aw-panel stat">
|
|
329
|
+
<p class="stat-label">
|
|
330
|
+
{{ t('monitor.server') }}
|
|
331
|
+
</p>
|
|
332
|
+
<p class="stat-value aw-mono small">
|
|
333
|
+
PID {{ snapshot?.serverPid ?? '–' }} · {{ snapshot ? uptimeText(snapshot.uptimeMs) : '' }}
|
|
334
|
+
</p>
|
|
335
|
+
<p class="stat-updated">
|
|
336
|
+
{{ lastUpdated }} · {{ t('monitor.updated') }} {{ snapshot?.generatedAt ?? '' }}
|
|
337
|
+
</p>
|
|
338
|
+
</a-card>
|
|
339
|
+
</div>
|
|
363
340
|
|
|
364
341
|
<!-- ChannelRuntime 表 -->
|
|
365
342
|
<a-card
|
|
@@ -603,10 +580,21 @@ const processColumns = computed(() => [
|
|
|
603
580
|
align-items: center;
|
|
604
581
|
}
|
|
605
582
|
|
|
606
|
-
.
|
|
583
|
+
.stat-grid {
|
|
584
|
+
display: grid;
|
|
585
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
586
|
+
gap: 14px;
|
|
607
587
|
margin-bottom: 16px;
|
|
608
588
|
}
|
|
609
589
|
|
|
590
|
+
@media (max-width: 1100px) {
|
|
591
|
+
.stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
@media (max-width: 640px) {
|
|
595
|
+
.stat-grid { grid-template-columns: 1fr; }
|
|
596
|
+
}
|
|
597
|
+
|
|
610
598
|
.stat {
|
|
611
599
|
height: 100%;
|
|
612
600
|
}
|