@tea-agent/loop-agent 0.39.0-next.9 → 0.39.1
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/AGENTS.md +4 -1
- package/CHANGELOG.md +269 -69
- package/README.md +11 -5
- package/bin/loop-agent.js +7 -3
- package/dist/application/dag/generate-task-dag.js +9 -0
- package/dist/application/task-lifecycle/advance.js +16 -0
- package/dist/build-stamp.json +3 -3
- package/dist/cli/command-definitions.js +16 -5
- package/dist/cli/program.js +16 -2
- package/dist/cli/update/notifier.js +2 -2
- package/dist/cli/update/runtime-activity.js +1 -29
- package/dist/cli.js +2 -1
- package/dist/commands/dag-rerun.js +55 -1
- package/dist/commands/init-model-catalog.js +464 -0
- package/dist/commands/init-upgrade.js +265 -97
- package/dist/commands/init.js +428 -27
- package/dist/commands/inspect-next.js +8 -0
- package/dist/commands/task-advance.js +31 -0
- package/dist/executors/dag-pi-executor.js +124 -18
- package/dist/executors/pi-event-serializer.js +42 -1
- package/dist/executors/pi-executor.js +51 -0
- package/dist/executors/pi-extension-resolver.js +233 -0
- package/dist/executors/pi-playwright-cli-tool.js +74 -28
- package/dist/executors/pi-sdk-executor.js +187 -59
- package/dist/executors/shell-executor.js +555 -34
- package/dist/executors/shell-write-guard.js +7 -0
- package/dist/shared/dag-failure-category.js +138 -0
- package/dist/shared/dag-prompt-override.js +27 -0
- package/dist/shared/operator/capabilities.js +181 -27
- package/dist/shared/playwright-cli-command-policy.js +15 -0
- package/dist/shared/update/console-notifier.js +100 -0
- package/dist/{cli → shared}/update/npm-client.js +70 -15
- package/dist/{cli → shared}/update/state.js +41 -13
- package/dist/task/config-types.js +28 -0
- package/dist/task/contract/apply.js +11 -1
- package/dist/task/contract/constants.js +3 -0
- package/dist/task/contract/diff.js +26 -0
- package/dist/task/contract/hash.js +3 -0
- package/dist/task/contract/observe.js +25 -4
- package/dist/task/contract/paths.js +2 -1
- package/dist/task/contract/project.js +20 -1
- package/dist/task/contract/schema.js +8 -1
- package/dist/task/contract/transaction.js +12 -0
- package/dist/task/source-prepare/build-draft.js +15 -0
- package/dist/task/source-prepare/completeness.js +188 -0
- package/dist/task/source-prepare/fragment-inventory.js +474 -0
- package/dist/task/source-prepare/index.js +3 -0
- package/dist/task/source-prepare/ledger-reconciliation.js +127 -0
- package/dist/task/source-prepare/ledger-review.js +214 -0
- package/dist/task/source-prepare/ledger.js +545 -0
- package/dist/task/source-prepare/parse-intent.js +24 -4
- package/dist/task/source-prepare/prepare.js +262 -1
- package/dist/task/source-prepare/semantic-intake.js +19 -3
- package/dist/task/source-prepare/source-fidelity-pi.js +384 -0
- package/dist/task/source-prepare/types.js +22 -0
- package/dist/worker/cli.js +18 -2
- package/dist/worker/console/chat/deferred-turn.js +91 -0
- package/dist/worker/console/chat/mcp-inventory.js +221 -0
- package/dist/worker/console/chat/operation-card.js +8 -1
- package/dist/worker/console/chat/pi-console-config.js +81 -10
- package/dist/worker/console/chat/pi-runtime.js +165 -83
- package/dist/worker/console/chat/repo-walk.js +10 -1
- package/dist/worker/console/chat/routes.js +480 -55
- package/dist/worker/console/chat/semantic-activity.js +20 -8
- package/dist/worker/console/chat/session-store.js +146 -2
- package/dist/worker/console/chat/turn-process.js +10 -10
- package/dist/worker/console/console-handoff.js +82 -0
- package/dist/worker/console/console-update-and-init.js +115 -0
- package/dist/worker/console/console-update-runtime.js +84 -0
- package/dist/worker/console/dag-execution-receipt.js +33 -0
- package/dist/worker/console/draft-store.js +49 -0
- package/dist/worker/console/inspect-split.js +18 -0
- package/dist/worker/console/operation-run-facts.js +19 -3
- package/dist/worker/console/operation-store.js +1 -1
- package/dist/worker/console/operator-actions.js +320 -4
- package/dist/worker/console/operator-surface-health.js +1 -0
- package/dist/worker/console/operator-user-error.js +2 -2
- package/dist/worker/console/pi-readiness.js +5 -4
- package/dist/worker/console/prd-intake-bridge.js +13 -0
- package/dist/worker/console/recovery-cta.js +4 -4
- package/dist/worker/console/recovery-error-copy.js +4 -4
- package/dist/worker/console/routes.js +46 -2
- package/dist/worker/console/security.js +63 -9
- package/dist/worker/console/server.js +111 -7
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BLXFe4qI.js → abnfDiagram-N423BO3Z-CTx1TrNa.js} +1 -1
- package/dist/worker/console/static/assets/{arc-7iOJeqho.js → arc-B4i9cVxX.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CYoyj5K7.js → architectureDiagram-T3A2C74G-BAXE8_Rl.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-fK01JNlR.js → blockDiagram-VBNYF7ZC-C5Xh59at.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-bzbw5D_Z.js → c4Diagram-5PPSVZJV-B_asOzAu.js} +1 -1
- package/dist/worker/console/static/assets/channel-Dj_4Moei.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-Cf6hJFFG.js → chunk-2GRJ4B5K-wRO_iRNc.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-DSFXR-et.js → chunk-2Q5K7J3B-ByOaSh_G.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BagJechl.js → chunk-5RXB4S5H-DjLzudan.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-E7QNMFaW.js → chunk-5VM5RSS4-JCNGkXYT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BG_eOBrC.js → chunk-6Q2QTUOP-BhrPXXMZ.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-Bo42dqol.js → chunk-GF5L2VYU-TJ5JuEBT.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-dibM-87v.js → chunk-JWPE2WC7-VVthn_mD.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-Bytrp3Oe.js → chunk-KBJHAD2P-D60-Mny4.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DBABILrr.js → chunk-RYQCIY6F-zXv7aVye.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DCUk5Pf9.js → chunk-XXDRQBXY-By9VQoi1.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0YYAyCa.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-BlGE9v6E.js → cose-bilkent-JH36ORCC-C4zQLe-M.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DGl5ewph.js → cynefin-VYW2F7L2-wh5N2ReN.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-DsJ_SVH_.js → cynefinDiagram-MW4NZA55-Dlu5wIqs.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-BIhjFdzv.js → dagre-VZM6K2ZE-CrDgthc6.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Dmy1ctTb.js → diagram-7IWD3JNH-zN1clg27.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-DYCtWUF3.js → diagram-B4RE2ZJO-BN-o7J7-.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BMZFHVd2.js → diagram-LBJQPF4R-C8SuPt0d.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-b_U8gfaO.js → diagram-Q27KOJAE-BoizuHbZ.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-Dzy_bn-I.js → diagram-UB23O5K3-BzUzXixG.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-DJCiMNEI.js → ebnfDiagram-BXEA7PRR-Ev3lA4Cf.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-28lD016B.js → erDiagram-JOGREHBK-GALUzRbs.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DGyHJmIw.js → flowDiagram-UKHOOZJN-CZJN65Sb.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CzdwUjrO.js → ganttDiagram-PKOTCBZU-JLB9OESl.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-D9bGwuo8.js → gitGraphDiagram-DS77QQ5N-CcvCr4GD.js} +1 -1
- package/dist/worker/console/static/assets/index-CW88Fjbw.js +406 -0
- package/dist/worker/console/static/assets/index-DP0ZJl39.css +1 -0
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-LJgJUQFC.js → infoDiagram-6WML65LV-HG5z7aVg.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-98LaB8zb.js → ishikawaDiagram-WSZJBQD7-BHEu9chR.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-D-ISzwlQ.js → journeyDiagram-NVQOT4AX-Cp_Up8-a.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-gfYOI-EL.js → kanban-definition-27J2QSJJ-DvVeY-em.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CyntZgKV.js → linear-aGmcjgTn.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-BBOR7dg0.js → mermaid.core-Biyo-tqA.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CQAgwPMk.js → mindmap-definition-FAOFIHXS-DyxY2pIb.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DkMiZFuV.js → pegDiagram-VL7TDLO6-CkdGuc50.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-DLNXa_0J.js → pieDiagram-7S7Q4E2Y-NNQI9xVR.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-Dc7bdzjm.js → quadrantDiagram-CIZ2JOQS-PAJkuz_G.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BxMB0QqW.js → railroadDiagram-AXF67PYL-ZwrQod0O.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-FjumoKn4.js → requirementDiagram-LRYGKXZP-D3ZfrzM2.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-CkhKc_E3.js → sankeyDiagram-W5VNT64P-DDGFmWk5.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-DoBWqTTH.js → sequenceDiagram-SI44F4Z6-DO6mmXTA.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CQeh_YeE.js → sizeCapture-X5ZJPWSS-DMbCQiJt.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-LuHmFW-I.js → stateDiagram-OKZ733FA-Di_YUEfC.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DrdDvela.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-CHwbDctY.js → swimlanes-SLNWSIFB-Bn2PphNJ.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-DPkEAULl.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CoMngk0X.js → timeline-definition-Z64GVDOM-DPh8pRsp.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CURYbtbO.js → vennDiagram-T6HMQDX7-GMfl26pW.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-BdqSECjU.js → wardleyDiagram-T6FBY63Y-DTlmVrmF.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DbMUYuAg.js → xychartDiagram-ELKLHX3M-YGBjKAS5.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/app/console-types.js +40 -1
- package/dist/worker/console/static-src/app/useOperatorActions.js +6 -1
- package/dist/worker/console/static-src/app/useRecoveryActions.js +2 -2
- package/dist/worker/console/static-src/app/useRecoveryConsole.js +38 -2
- package/dist/worker/console/static-src/app/useRunProgress.js +46 -0
- package/dist/worker/console/static-src/app/useTaskWizard.js +73 -1
- package/dist/worker/console/static-src/operator-chat/cards/failure-category-advice.js +25 -0
- package/dist/worker/console/static-src/operator-chat/chat-sse-events.js +74 -26
- package/dist/worker/console/static-src/operator-chat/input-history.js +76 -0
- package/dist/worker/console/static-src/operator-chat/mutation-gate.js +1 -1
- package/dist/worker/console/static-src/operator-chat/open-preview-in-browser.js +328 -0
- package/dist/worker/console/static-src/operator-chat/resource-diagnostics.js +204 -0
- package/dist/worker/console/static-src/operator-chat/turn-stream-controller.js +8 -1
- package/dist/worker/console/static-src/operator-chat/turn-submission.js +54 -0
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +3 -0
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +237 -11
- package/dist/worker/console/static-src/operator-chat/useChatThread.js +50 -22
- package/dist/worker/console/static-src/operator-chat/useComposer.js +32 -0
- package/dist/worker/console/static-src/operator-chat/useRepoBrowser.js +26 -1
- package/dist/worker/console/static-src/pages/tasks/run-id-resolution.js +79 -0
- package/dist/worker/console/static-src/pages/tasks/run-ownership-verify.js +23 -0
- package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +110 -0
- package/dist/worker/loop-agent/loop-agent-client.js +7 -3
- package/dist/worker/materialize/harness-task-lineage.js +5 -2
- package/dist/worker/observability/init-runtime-activity.js +26 -0
- package/dist/worker/observability/read-model.js +22 -0
- package/dist/worker/observe/node-input.js +160 -3
- package/dist/worker/observe/node-process.js +377 -0
- package/dist/worker/observe/routes.js +224 -3
- package/dist/worker/observe/shell-handler-keys.js +34 -0
- package/dist/worker/observe/static/api.js +67 -1
- package/dist/worker/observe/static/constants.js +8 -1
- package/dist/worker/observe/static/dag-history-labels.js +4 -0
- package/dist/worker/observe/static/format.js +60 -0
- package/dist/worker/observe/static/index.html +5 -0
- package/dist/worker/observe/static/markdown-render.js +20 -1
- package/dist/worker/observe/static/operator-chrome.js +4 -0
- package/dist/worker/observe/static/prompt-restart-candidates.d.ts +18 -0
- package/dist/worker/observe/static/prompt-restart-candidates.js +36 -0
- package/dist/worker/observe/static/state.js +13 -2
- package/dist/worker/observe/static/styles.css +85 -0
- package/dist/worker/observe/static/views/dag-inspector.js +912 -8
- package/dist/worker/observe/static/views/dag.js +8 -1
- package/dist/worker/observe/static/views/failures.js +5 -2
- package/dist/worker/observe/static/views/session-timeline.js +78 -9
- package/dist/worker/observe/static/views/task.js +55 -0
- package/dist/workflows/dag/backend-test-case-coverage-analysis.js +856 -54
- package/dist/workflows/dag/backend-test-case-manifest.js +4 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +18 -9
- package/dist/workflows/dag/backend-test-gap-fill.js +205 -0
- package/dist/workflows/dag/backend-test-intake-context.js +32 -0
- package/dist/workflows/dag/backend-test-layout.js +133 -0
- package/dist/workflows/dag/backend-test-markdown-workflow.js +343 -33
- package/dist/workflows/dag/backend-test-module-stem.js +5 -0
- package/dist/workflows/dag/backend-test-pytest-collection.js +454 -36
- package/dist/workflows/dag/backend-test-result-contract.js +1 -1
- package/dist/workflows/dag/backend-test-scenario-param.js +884 -140
- package/dist/workflows/dag/backend-test-scenario-partitions.js +321 -0
- package/dist/workflows/dag/backend-test-writer-completeness.js +110 -61
- package/dist/workflows/dag/contract-output-registry.js +15 -0
- package/dist/workflows/dag/contract-validator-registrations.js +3 -1
- package/dist/workflows/dag/convergence/controller.js +141 -0
- package/dist/workflows/dag/dynamic-runtime/loop-until.js +1 -1
- package/dist/workflows/dag/dynamic-runtime/map.js +25 -9
- package/dist/workflows/dag/dynamic-runtime/shared.js +1 -1
- package/dist/workflows/dag/failure-category.js +7 -116
- package/dist/workflows/dag/frontend-implementation-contract.js +465 -6
- package/dist/workflows/dag/frontend-plan-render.js +24 -0
- package/dist/workflows/dag/frontend-prewrite-gate.js +293 -84
- package/dist/workflows/dag/frontend-repair.js +14 -0
- package/dist/workflows/dag/frontend-review-context.js +92 -10
- package/dist/workflows/dag/frontend-risk.js +15 -2
- package/dist/workflows/dag/frontend-test-case-checklist.js +30 -4
- package/dist/workflows/dag/frontend-test-case-manifest.js +11 -4
- package/dist/workflows/dag/frontend-test-case-quality.js +11 -16
- package/dist/workflows/dag/frontend-test-environment-probe.js +230 -0
- package/dist/workflows/dag/frontend-test-html-report.js +3 -1
- package/dist/workflows/dag/frontend-test-l5-report.js +3 -1
- package/dist/workflows/dag/frontend-test-layout.js +159 -0
- package/dist/workflows/dag/frontend-test-markdown.js +61 -0
- package/dist/workflows/dag/frontend-test-result-contract.js +188 -42
- package/dist/workflows/dag/frontend-test-standard-scenarios.js +70 -0
- package/dist/workflows/dag/frontend-verification-trace.js +29 -4
- package/dist/workflows/dag/init-hybrid.js +1019 -209
- package/dist/workflows/dag/node-execution.js +228 -15
- package/dist/workflows/dag/prompt.js +60 -1
- package/dist/workflows/dag/rerun-feedback.js +212 -0
- package/dist/workflows/dag/rerun-plan.js +224 -27
- package/dist/workflows/dag/rerun-run.js +61 -6
- package/dist/workflows/dag/rerun-task.js +61 -2
- package/dist/workflows/dag/retry-policy.js +109 -0
- package/dist/workflows/dag/structured-output-repair.js +712 -0
- package/dist/workflows/dag/types.js +185 -12
- package/dist/workflows/dag/validate.js +64 -20
- package/docs/README.md +1 -0
- package/docs/architecture/evolution.md +45 -0
- package/docs/init-surface.manifest.json +6 -0
- package/docs/operations/README.md +1 -1
- package/docs/operations/local-development-environment.md +1 -5
- package/docs/skills/vetted-skill-registry.md +14 -0
- package/docs/templates/README.md +2 -2
- package/docs/templates/agent-dag.schema.json +44 -0
- package/docs/templates/backend-test-dag.json +60 -35
- package/docs/templates/frontend-implementation-contract.schema.json +681 -24
- package/docs/templates/frontend-test-case-checklist.md +2 -2
- package/docs/templates/frontend-test-dag.json +8 -10
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +1 -1
- package/docs/templates/init-managed-agents.md +13 -3
- package/harness.json +6 -4
- package/package.json +12 -4
- package/scripts/next-info.mjs +356 -0
- package/scripts/next-publish-gate.mjs +238 -0
- package/scripts/release-source-binding.mjs +251 -0
- package/skills/analyze-product-requirements/SKILL.md +8 -5
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +1 -1
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +10 -6
- package/skills/analyze-product-requirements/references/example.md +50 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +11 -7
- package/skills/analyze-product-requirements/references/kb-integration.md +5 -5
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +8 -4
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +2 -2
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +1 -1
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +11 -1
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +20 -1
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +9 -0
- package/skills/codebase-scout/SKILL.md +1 -1
- package/skills/fe-test-ui-scout/SKILL.md +65 -0
- package/skills/fe-test-ui-scout/references/ledger-schema.md +62 -0
- package/skills/fe-test-ui-scout/references/recon-protocol.md +54 -0
- package/skills/frontend-implementation/references/node-contracts.md +2 -2
- package/skills/improve-codebase-architecture/SKILL.md +81 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/html-report.md +123 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/loop-agent/references/command-reference.md +11 -4
- package/skills/loop-agent/references/hybrid-dag.md +7 -0
- package/skills/playwright-cli/SKILL.md +23 -1
- package/skills/playwright-cli-case-generator/SKILL.md +29 -8
- package/dist/worker/console/static/assets/channel-BBOTJHvD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Cm8Yf8tD.js +0 -1
- package/dist/worker/console/static/assets/index-B-qWGThd.js +0 -325
- package/dist/worker/console/static/assets/index-C-xRgY_0.css +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-DZihfdKc.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CKnXCjHX.js +0 -8
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allowlist of in-process shell handlers (preset/gate flags on task.shell).
|
|
3
|
+
* Observe projects these names; the executor writes process receipts for them.
|
|
4
|
+
*/
|
|
5
|
+
export const SHELL_NAMED_HANDLER_KEYS = [
|
|
6
|
+
"verdictGate",
|
|
7
|
+
"projectGovernanceGate",
|
|
8
|
+
"requirementCoverageGate",
|
|
9
|
+
"jsonArtifactGate",
|
|
10
|
+
"frontendPrewriteGate",
|
|
11
|
+
"frontendLintBaseline",
|
|
12
|
+
"frontendVerificationBundle",
|
|
13
|
+
"frontendReviewContext",
|
|
14
|
+
"frontendTestCaseChecklist",
|
|
15
|
+
"frontendBrowserToolPreflight",
|
|
16
|
+
"frontendTestStandardScenarios",
|
|
17
|
+
"frontendTestEnvironmentProbe",
|
|
18
|
+
"frontendTestEvidenceValidation",
|
|
19
|
+
"finalWriteSetApprovalGate",
|
|
20
|
+
"frontendTestL5Report",
|
|
21
|
+
"frontendTestHtmlReport",
|
|
22
|
+
"frontendTestCaseManifest",
|
|
23
|
+
"frontendTestResultFinalize",
|
|
24
|
+
"frontendTestReports",
|
|
25
|
+
"backendTestPipeline",
|
|
26
|
+
"jacocoCoverage",
|
|
27
|
+
"verifyEvidence",
|
|
28
|
+
"repairArtifactGate",
|
|
29
|
+
];
|
|
30
|
+
export function namedShellHandlers(shell) {
|
|
31
|
+
if (!shell)
|
|
32
|
+
return [];
|
|
33
|
+
return SHELL_NAMED_HANDLER_KEYS.filter((key) => shell[key] != null);
|
|
34
|
+
}
|
|
@@ -77,6 +77,14 @@ export async function fetchDagNodeInput(runId, nodeId) {
|
|
|
77
77
|
return fetchJsonResult(url);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
export async function fetchDagNodeProcess(runId, nodeId, key) {
|
|
81
|
+
const params = new URLSearchParams();
|
|
82
|
+
if (key) params.set("key", String(key));
|
|
83
|
+
const qs = params.toString();
|
|
84
|
+
const url = `/api/dag-runs/${encodeURIComponent(runId)}/nodes/${encodeURIComponent(nodeId)}/process${qs ? `?${qs}` : ""}`;
|
|
85
|
+
return fetchJsonResult(url);
|
|
86
|
+
}
|
|
87
|
+
|
|
80
88
|
/**
|
|
81
89
|
* Fetch a spec-evidence file preview (binding source or successful read).
|
|
82
90
|
* Resolves to the parsed JSON body, or throws an Error carrying the HTTP
|
|
@@ -104,6 +112,65 @@ export function artifactUrl(artifactPath) {
|
|
|
104
112
|
return `/api/artifacts?path=${encodeURIComponent(artifactPath)}&tail=200`;
|
|
105
113
|
}
|
|
106
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Experimental (prompt-override rerun only): POST one allowlisted operator
|
|
117
|
+
* action through the Console mutation gate using the SCOPED inspect token
|
|
118
|
+
* (window.__INSPECT_MUTATION_TOKEN__). The server injects it into /inspect
|
|
119
|
+
* HTML by default; HARNESS_DAG_RERUN_PROMPT_OVERRIDE=0|false|off disables
|
|
120
|
+
* injection. The token only authorizes dagRerunPlan / dagRerun — never general
|
|
121
|
+
* Console mutations.
|
|
122
|
+
* Absent token → the call is not attempted.
|
|
123
|
+
*/
|
|
124
|
+
export async function postOperatorAction(action, actionParams = {}) {
|
|
125
|
+
const token = globalThis.__INSPECT_MUTATION_TOKEN__;
|
|
126
|
+
if (!token) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
status: 0,
|
|
130
|
+
body: { error: { code: "PROMPT_OVERRIDE_DISABLED", message: "提示词重启未启用(服务端未注入确认 token)" } },
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const res = await fetch("/api/operator/v1/operations", {
|
|
135
|
+
method: "POST",
|
|
136
|
+
credentials: "same-origin",
|
|
137
|
+
headers: {
|
|
138
|
+
"Content-Type": "application/json",
|
|
139
|
+
"x-loop-console-confirmation": token,
|
|
140
|
+
},
|
|
141
|
+
body: JSON.stringify({ action, actionParams }),
|
|
142
|
+
});
|
|
143
|
+
let body = null;
|
|
144
|
+
try {
|
|
145
|
+
body = await res.json();
|
|
146
|
+
} catch {
|
|
147
|
+
body = null;
|
|
148
|
+
}
|
|
149
|
+
return { ok: res.ok, status: res.status, body };
|
|
150
|
+
} catch {
|
|
151
|
+
return { ok: false, status: 0, body: null };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** Poll a Console operation snapshot (read-only GET). */
|
|
156
|
+
export async function fetchOperatorOperation(operationId) {
|
|
157
|
+
try {
|
|
158
|
+
const res = await fetch(
|
|
159
|
+
`/api/operator/v1/operations/${encodeURIComponent(operationId)}`,
|
|
160
|
+
{ credentials: "same-origin" },
|
|
161
|
+
);
|
|
162
|
+
let body = null;
|
|
163
|
+
try {
|
|
164
|
+
body = await res.json();
|
|
165
|
+
} catch {
|
|
166
|
+
body = null;
|
|
167
|
+
}
|
|
168
|
+
return { ok: res.ok, status: res.status, body };
|
|
169
|
+
} catch {
|
|
170
|
+
return { ok: false, status: 0, body: null };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
107
174
|
export function parseArtifactPreviewResponse(text) {
|
|
108
175
|
const parsed = JSON.parse(text);
|
|
109
176
|
if (!parsed || typeof parsed.content !== "string") {
|
|
@@ -114,4 +181,3 @@ export function parseArtifactPreviewResponse(text) {
|
|
|
114
181
|
truncated: parsed.truncated === true,
|
|
115
182
|
};
|
|
116
183
|
}
|
|
117
|
-
|
|
@@ -53,7 +53,14 @@ export const UI_TEXT = {
|
|
|
53
53
|
inputError: "加载节点输入失败。",
|
|
54
54
|
inputFrozenLabel: "冻结 DAG 节点定义",
|
|
55
55
|
inputFingerprintNote: "仅保存 assembled prompt 指纹,全文未持久化",
|
|
56
|
-
noSessionEvents: "
|
|
56
|
+
noSessionEvents: "该 Pi 节点暂无过程日志(可能尚未执行、走 CLI 路径,或为历史 run)",
|
|
57
|
+
noShellProcess: "该 shell 节点尚未留下命令回执。",
|
|
58
|
+
noPresetProcess: "该内部处理器尚未留下过程回执。",
|
|
59
|
+
staticNoProcess: "静态节点没有逐步执行过程,请查看节点输出。",
|
|
60
|
+
processLoading: "正在加载执行过程…",
|
|
61
|
+
processError: "加载执行过程失败。",
|
|
62
|
+
shellCommandsHeading: "Shell 命令",
|
|
63
|
+
shellPresetHeading: "内部处理器",
|
|
57
64
|
noArtifacts: "暂无产物记录。",
|
|
58
65
|
noActiveCommand: "当前没有正在执行的命令。",
|
|
59
66
|
noFailures: "当前没有异常 Task。",
|
|
@@ -14,6 +14,10 @@ const ATTEMPT_FAILURE_LABELS = {
|
|
|
14
14
|
timeout: "执行超时",
|
|
15
15
|
"nonzero-exit": "命令执行失败",
|
|
16
16
|
"invalid-output": "输出格式无效",
|
|
17
|
+
"structured-output-truncated": "结构化输出被截断",
|
|
18
|
+
"output-too-large": "输出超出体积上限",
|
|
19
|
+
"structured-repair-exhausted": "结构化修复耗尽",
|
|
20
|
+
"governance-blocked": "治理规则阻断",
|
|
17
21
|
"empty-output": "输出为空",
|
|
18
22
|
auth: "认证失败",
|
|
19
23
|
quota: "额度或限流",
|
|
@@ -345,3 +345,63 @@ export function formatRepoPathDisplay(repoRoot) {
|
|
|
345
345
|
.replace(/^\/Users\/[^/]+/, "~")
|
|
346
346
|
.replace(/^\/home\/[^/]+/, "~");
|
|
347
347
|
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* If `text` is a complete JSON object or array, return pretty-printed JSON.
|
|
351
|
+
* Primitives, JSONL, truncated/invalid JSON, and markdown return null so
|
|
352
|
+
* callers can fall back to Markdown rendering.
|
|
353
|
+
*/
|
|
354
|
+
export function prettyJsonBlock(text) {
|
|
355
|
+
if (typeof text !== "string") return null;
|
|
356
|
+
const trimmed = text.trim();
|
|
357
|
+
if (trimmed.length < 2) return null;
|
|
358
|
+
const start = trimmed[0];
|
|
359
|
+
const end = trimmed[trimmed.length - 1];
|
|
360
|
+
if (!((start === "{" && end === "}") || (start === "[" && end === "]"))) {
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
try {
|
|
364
|
+
const value = JSON.parse(trimmed);
|
|
365
|
+
if (value === null || typeof value !== "object") return null;
|
|
366
|
+
return JSON.stringify(value, null, 2);
|
|
367
|
+
} catch {
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Source fidelity ledger 安全摘要渲染(AC-009/AC-010/AC-HARD-004):计数/状态/
|
|
374
|
+
* failure code + v2 binding 语义(binding=v2 + ledger sha256/inputDigest,仅真实
|
|
375
|
+
* DagSourceBindingV2 时展示;inputDigest ≠ 当前 expectedInputDigest 时标记 stale)+
|
|
376
|
+
* 有界排除理由(fragmentId + 截断 reason),绝不渲染未截断原文。输入即安全摘要对象。
|
|
377
|
+
*/
|
|
378
|
+
export function formatLedgerSummary(summary) {
|
|
379
|
+
if (!summary || summary.present !== true) {
|
|
380
|
+
return "无 source fidelity ledger(任务无引用或 ledger 缺失,不伪造计数)";
|
|
381
|
+
}
|
|
382
|
+
const lines = [
|
|
383
|
+
`fragments=${summary.fragmentCount ?? 0}`,
|
|
384
|
+
`canonical requirements=${summary.canonicalRequirementCount ?? 0}`,
|
|
385
|
+
`context-only=${summary.contextOnlyCount ?? 0}`,
|
|
386
|
+
`duplicate=${summary.duplicateCount ?? 0}`,
|
|
387
|
+
`unresolved=${summary.unresolvedCount ?? 0}`,
|
|
388
|
+
`conflict=${summary.conflictCount ?? 0}`,
|
|
389
|
+
`gate=${summary.gateStatus ?? "unknown"}`,
|
|
390
|
+
];
|
|
391
|
+
if (summary.bindingSchemaVersion === 2) {
|
|
392
|
+
lines.push(
|
|
393
|
+
`binding=v2(受管 ledger 绑定)${summary.stale ? " · STALE(输入漂移)" : ""}`,
|
|
394
|
+
);
|
|
395
|
+
if (summary.ledgerSha256) lines.push(`ledgerSha256=${summary.ledgerSha256}`);
|
|
396
|
+
if (summary.inputDigest) lines.push(`inputDigest=${summary.inputDigest}`);
|
|
397
|
+
}
|
|
398
|
+
if (summary.failureCode) lines.push(`failureCode=${summary.failureCode}`);
|
|
399
|
+
const exclusions = Array.isArray(summary.exclusions) ? summary.exclusions : [];
|
|
400
|
+
if (exclusions.length > 0) {
|
|
401
|
+
lines.push("排除理由(有界摘要):");
|
|
402
|
+
for (const entry of exclusions.slice(0, 20)) {
|
|
403
|
+
lines.push(`- ${entry.fragmentId}: ${truncateText(entry.reason ?? "", 120)}`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return lines.join("\n");
|
|
407
|
+
}
|
|
@@ -352,6 +352,11 @@
|
|
|
352
352
|
class="panel panel-table"
|
|
353
353
|
aria-label="运行历史"
|
|
354
354
|
></section>
|
|
355
|
+
<section
|
|
356
|
+
id="task-ledger"
|
|
357
|
+
class="panel panel-table"
|
|
358
|
+
aria-label="Source fidelity ledger"
|
|
359
|
+
></section>
|
|
355
360
|
</section>
|
|
356
361
|
|
|
357
362
|
<section data-view="feature" id="view-feature" class="view" hidden>
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/** Shared safe Markdown → DOM rendering for Observe UI. */
|
|
2
2
|
import { el } from "./dom.js";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
parseMarkdownBlocks,
|
|
5
|
+
markdownLinkHref,
|
|
6
|
+
prettyJsonBlock,
|
|
7
|
+
} from "./format.js";
|
|
4
8
|
|
|
5
9
|
export function appendInlineMarkdown(target, text) {
|
|
6
10
|
const tokenPattern = /(`[^`]*`|\*\*[^*]+\*\*|\*[^*]+\*|\[[^\]]+\]\([^)]+\))/g;
|
|
@@ -49,6 +53,21 @@ export function appendParagraphMarkdown(target, text) {
|
|
|
49
53
|
}
|
|
50
54
|
}
|
|
51
55
|
|
|
56
|
+
export function renderInspectorDocument(content) {
|
|
57
|
+
const pretty = prettyJsonBlock(content);
|
|
58
|
+
if (pretty != null) {
|
|
59
|
+
const article = el("article", "markdown-output json-output");
|
|
60
|
+
const pre = document.createElement("pre");
|
|
61
|
+
const code = document.createElement("code");
|
|
62
|
+
code.dataset.language = "json";
|
|
63
|
+
code.textContent = pretty;
|
|
64
|
+
pre.appendChild(code);
|
|
65
|
+
article.appendChild(pre);
|
|
66
|
+
return article;
|
|
67
|
+
}
|
|
68
|
+
return renderMarkdown(content);
|
|
69
|
+
}
|
|
70
|
+
|
|
52
71
|
export function renderMarkdown(content) {
|
|
53
72
|
const article = el("article", "markdown-output");
|
|
54
73
|
for (const block of parseMarkdownBlocks(content)) {
|
|
@@ -436,6 +436,10 @@ export function mountOperatorChrome(root, config = {}) {
|
|
|
436
436
|
const a = el("a", `och-mode-btn${btn.active ? " och-on" : ""}`);
|
|
437
437
|
a.href = btn.href;
|
|
438
438
|
a.dataset.mode = btn.id;
|
|
439
|
+
// 2026-08-22: inline-flex 布局下裸文本节点不参与 name-from-content,
|
|
440
|
+
// a11y snapshot 序列化为无名 link;显式 aria-label 保证「操作/观测」
|
|
441
|
+
// 对 find/读屏稳定可断言(frontend-test passed 权威依赖可见 find)。
|
|
442
|
+
a.setAttribute("aria-label", btn.label);
|
|
439
443
|
if (btn.active) a.setAttribute("aria-current", "page");
|
|
440
444
|
a.appendChild(makeIcon(btn.id === "operate" ? "zap" : "eye"));
|
|
441
445
|
a.appendChild(document.createTextNode(btn.label));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type PromptRestartFailedCandidate = {
|
|
2
|
+
attempt?: number;
|
|
3
|
+
failureCategory?: string;
|
|
4
|
+
prompt?: string;
|
|
5
|
+
truncated?: boolean;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type PromptRestartCandidateOption = {
|
|
9
|
+
key: string;
|
|
10
|
+
label: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
truncated: boolean;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export function buildPromptRestartCandidateOptions(
|
|
16
|
+
frozenPrompt: string | null | undefined,
|
|
17
|
+
failedCandidates: PromptRestartFailedCandidate[] | null | undefined,
|
|
18
|
+
): PromptRestartCandidateOption[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function buildPromptRestartCandidateOptions(
|
|
2
|
+
frozenPrompt,
|
|
3
|
+
failedCandidates,
|
|
4
|
+
) {
|
|
5
|
+
const options = [
|
|
6
|
+
{
|
|
7
|
+
key: "frozen",
|
|
8
|
+
label: "冻结原始提示词",
|
|
9
|
+
prompt: String(frozenPrompt ?? ""),
|
|
10
|
+
truncated: false,
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
const seen = new Set();
|
|
14
|
+
for (const candidate of [...(failedCandidates ?? [])].sort(
|
|
15
|
+
(a, b) => Number(a?.attempt ?? 0) - Number(b?.attempt ?? 0),
|
|
16
|
+
)) {
|
|
17
|
+
const attempt = Number(candidate?.attempt);
|
|
18
|
+
if (!Number.isSafeInteger(attempt) || attempt < 1 || seen.has(attempt)) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (typeof candidate?.prompt !== "string") continue;
|
|
22
|
+
seen.add(attempt);
|
|
23
|
+
const failureCategory =
|
|
24
|
+
typeof candidate.failureCategory === "string" &&
|
|
25
|
+
candidate.failureCategory.trim()
|
|
26
|
+
? candidate.failureCategory.trim()
|
|
27
|
+
: "unknown";
|
|
28
|
+
options.push({
|
|
29
|
+
key: `attempt-${attempt}`,
|
|
30
|
+
label: `第 ${attempt} 次失败 · ${failureCategory}`,
|
|
31
|
+
prompt: candidate.prompt,
|
|
32
|
+
truncated: candidate.truncated === true,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return options;
|
|
36
|
+
}
|
|
@@ -61,6 +61,12 @@ export const uiState = {
|
|
|
61
61
|
dagNodeInputData: null,
|
|
62
62
|
dagNodeInputError: null,
|
|
63
63
|
dagNodeInputLoading: false,
|
|
64
|
+
/** Node-process request identity ("<dagRunId>:<nodeId>:<key>#<seq>"). */
|
|
65
|
+
dagNodeProcessIdentity: null,
|
|
66
|
+
dagNodeProcessRequestSeq: 0,
|
|
67
|
+
dagNodeProcessData: null,
|
|
68
|
+
dagNodeProcessError: null,
|
|
69
|
+
dagNodeProcessLoading: false,
|
|
64
70
|
/**
|
|
65
71
|
* Execution-output request identity ("<dagRunId>:<nodeId>:<key>#<seq>").
|
|
66
72
|
* Stale async responses are rejected when this no longer matches.
|
|
@@ -76,8 +82,8 @@ export const uiState = {
|
|
|
76
82
|
dagNodeExecutionOutputLoading: false,
|
|
77
83
|
dagNodeExecutionOutputError: null,
|
|
78
84
|
dagNodeExecutionOutputKey: null,
|
|
79
|
-
/** When true,「执行过程」展开 message_start/end
|
|
80
|
-
sessionTimelineShowProtocol:
|
|
85
|
+
/** When true,「执行过程」展开 message_start/end 原始协议事件。默认展开,用户可点选隐藏。 */
|
|
86
|
+
sessionTimelineShowProtocol: true,
|
|
81
87
|
/** Open <details> keys restored across timeline re-renders. */
|
|
82
88
|
sessionTimelineOpenDetails: null,
|
|
83
89
|
lastSnapshot: null,
|
|
@@ -222,6 +228,11 @@ export function makeDagNodeInputIdentity(dagRunId, nodeId) {
|
|
|
222
228
|
return `${dagRunId}:${nodeId}#${uiState.dagNodeInputRequestSeq}`;
|
|
223
229
|
}
|
|
224
230
|
|
|
231
|
+
export function makeDagNodeProcessIdentity(dagRunId, nodeId, key) {
|
|
232
|
+
uiState.dagNodeProcessRequestSeq += 1;
|
|
233
|
+
return `${dagRunId}:${nodeId}:${key ?? "latest"}#${uiState.dagNodeProcessRequestSeq}`;
|
|
234
|
+
}
|
|
235
|
+
|
|
225
236
|
/** Build a fresh execution-output identity token (includes key). */
|
|
226
237
|
export function makeDagNodeExecutionOutputIdentity(dagRunId, nodeId, key) {
|
|
227
238
|
uiState.dagNodeExecutionOutputRequestSeq += 1;
|
|
@@ -2111,6 +2111,9 @@ body.is-resizing-dag-graph {
|
|
|
2111
2111
|
background: transparent;
|
|
2112
2112
|
color: inherit;
|
|
2113
2113
|
}
|
|
2114
|
+
.markdown-output.json-output pre {
|
|
2115
|
+
white-space: pre;
|
|
2116
|
+
}
|
|
2114
2117
|
.markdown-output a {
|
|
2115
2118
|
color: var(--orange-active);
|
|
2116
2119
|
text-decoration-color: var(--orange);
|
|
@@ -3565,3 +3568,85 @@ button.copy-command:focus-visible {
|
|
|
3565
3568
|
.custom-select-option.is-selected .custom-select-option-check {
|
|
3566
3569
|
opacity: 1;
|
|
3567
3570
|
}
|
|
3571
|
+
|
|
3572
|
+
/* Experimental prompt-override rerun tab (only rendered with the mutation token). */
|
|
3573
|
+
.prompt-restart-box {
|
|
3574
|
+
display: flex;
|
|
3575
|
+
flex-direction: column;
|
|
3576
|
+
gap: 0.75rem;
|
|
3577
|
+
padding: 0.5rem 0.25rem;
|
|
3578
|
+
}
|
|
3579
|
+
.prompt-restart-field {
|
|
3580
|
+
display: flex;
|
|
3581
|
+
flex-direction: column;
|
|
3582
|
+
gap: 0.35rem;
|
|
3583
|
+
}
|
|
3584
|
+
.prompt-restart-prompt-card {
|
|
3585
|
+
position: relative;
|
|
3586
|
+
}
|
|
3587
|
+
.prompt-restart-prompt-head {
|
|
3588
|
+
display: flex;
|
|
3589
|
+
align-items: center;
|
|
3590
|
+
justify-content: space-between;
|
|
3591
|
+
gap: 0.5rem;
|
|
3592
|
+
}
|
|
3593
|
+
.prompt-restart-copy-icon {
|
|
3594
|
+
flex: 0 0 auto;
|
|
3595
|
+
}
|
|
3596
|
+
.prompt-restart-textarea {
|
|
3597
|
+
width: 100%;
|
|
3598
|
+
min-height: 8rem;
|
|
3599
|
+
resize: vertical;
|
|
3600
|
+
box-sizing: border-box;
|
|
3601
|
+
font-family: var(--mono-font, ui-monospace, SFMono-Regular, Menlo, monospace);
|
|
3602
|
+
font-size: 12.5px;
|
|
3603
|
+
line-height: 1.5;
|
|
3604
|
+
white-space: pre;
|
|
3605
|
+
overflow-wrap: normal;
|
|
3606
|
+
overflow-x: auto;
|
|
3607
|
+
}
|
|
3608
|
+
.prompt-restart-actions {
|
|
3609
|
+
display: flex;
|
|
3610
|
+
gap: 0.5rem;
|
|
3611
|
+
align-items: center;
|
|
3612
|
+
}
|
|
3613
|
+
.prompt-restart-submit {
|
|
3614
|
+
padding: 0.35rem 0.9rem;
|
|
3615
|
+
font-size: 13.5px;
|
|
3616
|
+
cursor: pointer;
|
|
3617
|
+
}
|
|
3618
|
+
.prompt-restart-submit:disabled {
|
|
3619
|
+
opacity: 0.55;
|
|
3620
|
+
cursor: wait;
|
|
3621
|
+
}
|
|
3622
|
+
.prompt-restart-status {
|
|
3623
|
+
margin: 0;
|
|
3624
|
+
font-size: 13px;
|
|
3625
|
+
min-height: 1.2em;
|
|
3626
|
+
white-space: pre-wrap;
|
|
3627
|
+
word-break: break-word;
|
|
3628
|
+
}
|
|
3629
|
+
.prompt-restart-status.prompt-restart-error {
|
|
3630
|
+
color: var(--red, #c0392b);
|
|
3631
|
+
}
|
|
3632
|
+
.prompt-restart-readonly {
|
|
3633
|
+
margin: 0;
|
|
3634
|
+
padding: 0.5rem 0.6rem;
|
|
3635
|
+
font-family: var(--mono-font, ui-monospace, SFMono-Regular, Menlo, monospace);
|
|
3636
|
+
font-size: 12.5px;
|
|
3637
|
+
line-height: 1.5;
|
|
3638
|
+
white-space: pre;
|
|
3639
|
+
overflow: auto;
|
|
3640
|
+
border: 1px solid var(--border-color, rgba(125, 125, 125, 0.35));
|
|
3641
|
+
border-radius: 6px;
|
|
3642
|
+
max-height: 60vh;
|
|
3643
|
+
}
|
|
3644
|
+
.prompt-restart-mode {
|
|
3645
|
+
display: flex;
|
|
3646
|
+
align-items: center;
|
|
3647
|
+
gap: 0.5rem;
|
|
3648
|
+
}
|
|
3649
|
+
.prompt-restart-mode-select {
|
|
3650
|
+
max-width: 100%;
|
|
3651
|
+
font-size: 13px;
|
|
3652
|
+
}
|