chainlesschain 0.166.128 → 0.166.130
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 +24 -4
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-BmGA5zXX.js → AIOps-o-rFKEYL.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-B7WXwoF0.js → ActionButton-Dzv1ReHF.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-IvJG43B5.js → Analytics-Bt7H_jrh.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DWY017_e.js → AppLayout-CgynsRFP.js} +5 -5
- package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +1 -0
- package/src/assets/web-panel/assets/{Audit-CD9sTnBN.js → Audit-DBXn-AZ6.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-J6gg5z0U.js → BackgroundAgents--dxPftKa.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D7ik3lse.js → Backup-D9Zf_2tH.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-MrDd5zcz.js → BaseInput-DDTOjovq.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DbxRqGiK.js → Chat-2ETqdBLn.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CditB77B.js → Checkbox-B5uzaLLP.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Ds0UZWZG.js → Codegen-4ieEEIwt.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CZlj1XI2.js → Col-D3I2kUGu.js} +1 -1
- package/src/assets/web-panel/assets/{Community-j4B2SoT6.js → Community-DeYxFMJb.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BuKQutaO.js → Compact-5GigOmb8.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DAgDyS-p.js → Compliance-DLVjbVUh.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DX2-I6V3.js → Cowork-DfUKa0T5.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-dJpc-FxX.js → Cron-_RpktpO5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-7m8euM3v.js → Crosschain-7x6xdbwH.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CLoYoCe1.js → DID-ccVhToC1.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DR1rRMb7.js → Dashboard-DhygcaoK.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BsKhCfvH.js → Dropdown-DFplwXK7.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BAGexzJu.js → EmailListRenderer-Bm01soCN.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BIpueefy.js → FamilyGuardDashboard-ChQXDBA3.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BluNep6d.js → Federation-C0yomE-M.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CerdM3am.js → FormItemContext-DtT3ZEZK.js} +1 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +1 -0
- package/src/assets/web-panel/assets/{Git-CEE0cGmf.js → Git-CCY42R8S.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Bc-XNDhM.js → Governance-N66Bwvqg.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CiBzXyZ-.js → Inference-BkbPuR_2.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CV2IiyuN.js → KnowledgeGraph-B3PibXdA.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-fbQYKuSz.js → Logs-CUtNB_N6.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-B73ZyMRI.js → MarkdownRenderer-D-V4dOe3.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-C5utdpxZ.js → Marketplace-DLNJb6Nr.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CPE4SaF3.js → McpTools-2zGjJb5K.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-DTFDszzk.js → Memory-9rNZ1EvR.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DxqPmTzP.js → MobileBridge-Cw7sAAgn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CwcK8l2y.js → MobileProjects-8XACrqqy.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DrjECLGO.js → Mtc-mg02JNy-.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-4IURCa-3.js → MtcAudit-B1Vkhj2l.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CggLV1Cp.js → Multisig-BQEeA7GG.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DkOQJT73.js → NLProgramming-BIbkjZV3.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Dodcva6s.js → Notes-DIwhkZNY.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CQ3HeTs6.js → NotificationSettings-Cj9175ce.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-pT2nzmIO.js → OrderTableRenderer-IfNpXT2R.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-B6HFsIfU.js → Organization-DPFp6G9o.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-G9dju55N.js → Overflow-ky9UfGv4.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-C1BCE155.js → P2P-tXck8GLq.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BFAxXn5D.js → PdhVaultBrowser-DSvpQl9k.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DWg7cw9Q.js → Permissions-CKPkdLj-.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BQxuOQOO.js → PersonalDataHub-DnqXc12l.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-C3Gse9Ne.js → Pipeline-BKjFU_kd.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Dcsjx6Oi.js → Privacy-ChC-J5Tn.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DeYlnXJQ.js → ProjectInit-ByFZG9sY.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-D7kbZ_K7.js → ProjectSettings-Bbv1Kiw-.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-C5m3NGzM.js → Projects-QYyGW31-.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-oT6jy83z.js → Providers-CJLnWw0r.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-NZ11GEBa.js → QrScannerModal-er_HkLCI.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CtQU4Tx0.js → QuickAsk-DoXU0np9.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-3CoXYu3O.js → Recommend-DCo_vuaf.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C2d4LzBM.js → RemoteSession-CLuL925Z.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-WZQHrGwl.js → Reputation-CNNCA_-M.js} +1 -1
- package/src/assets/web-panel/assets/{Row-ChiqY7Hg.js → Row-Vu4j631i.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cjwl2Kum.js → RssFeed-C18B4xiy.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DRDMZxTF.js → Search-DxiqccE2.js} +1 -1
- package/src/assets/web-panel/assets/{Security-D0y4LlQ4.js → Security-Droe_hHI.js} +3 -3
- package/src/assets/web-panel/assets/{Services-ChpkqWm0.js → Services-CwmmyXzq.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-D3WGZ8yO.js → Skeleton-CrFs6rUL.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Bv_7HaUW.js → Skills-Dp-d2miK.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-crZMKyX0.js → Sla-2DFXVbK4.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-ByWn5XDZ.js → SpeechSettings-Cdd9lCoy.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings--R55vxvj.js → SyncSettings-CxQhcYSk.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BZA_Via_.js → Tasks-BHWVRfXx.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-9eJ9yY8Q.js → Templates-DNFk3a5_.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CfWX2jqj.js → Tenant-B6X6dPo8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CUXUF4kL.js → Terminal-BuUNoLGM.js} +2 -2
- package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +1 -0
- package/src/assets/web-panel/assets/{Tokens-CvyrdLH6.js → Tokens-CA_u4Blu.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-MNRl_YNr.js → Trigger-CXrW4Nry.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BHOXK-Mp.js → Trust-DHcLpNy3.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Bz1oZNyQ.js → UkeySign-B_fni4C2.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DlqmXyZv.js → VideoEditing-g9nf2EhS.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dg1rnqEG.js → Wallet-C8pOjIve.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DJtGeaOk.js → WebAuthn-BaKNjxZt.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-DJPubjX5.js → WorkflowEditor-CX030Wb1.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BWweDuIV.js → chat-BpJsXlTK.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BX5ViADF.js → colors-CUNg0-fh.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Df8MLbXp.js → compact-item-C3tFHnhu.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-C0FDTwdV.js → createContext-B8rTvO61.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-PpL6GdNk.js → hasIn-CU6RIciB.js} +1 -1
- package/src/assets/web-panel/assets/index--6BUI55w.js +1 -0
- package/src/assets/web-panel/assets/{index-DGLbojjx.js → index-111hR8WZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BF0ERucU.js → index-1L0tt7G2.js} +1 -1
- package/src/assets/web-panel/assets/index-5Q1bepcM.js +1 -0
- package/src/assets/web-panel/assets/{index-DwZkBGXd.js → index-6EwPIfXu.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0PqPK-8.js → index-B10Ia2KL.js} +1 -1
- package/src/assets/web-panel/assets/{index-FAZH69my.js → index-B1SLBLli.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWSCphaT.js → index-B8_VQAav.js} +1 -1
- package/src/assets/web-panel/assets/{index-itNn6pW1.js → index-BG4zuFf0.js} +1 -1
- package/src/assets/web-panel/assets/{index-iif2A1eL.js → index-BJjEAoDb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFtzEEYe.js → index-BMuPJra-.js} +1 -1
- package/src/assets/web-panel/assets/{index-B982oUKN.js → index-BOCjph-k.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8-pSyP7.js → index-BOlAutGy.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8wl7Ica.js → index-BPWJw4Ji.js} +1 -1
- package/src/assets/web-panel/assets/{index-UXM5vpt4.js → index-BpBaOWmV.js} +1 -1
- package/src/assets/web-panel/assets/{index-7VyVOEf7.js → index-BzhobTgZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-R0LQ3fgq.js → index-CDlHvQtw.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChV82mzs.js → index-CEIoRm_c.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3K1uZ7R.js → index-CLQjdKmE.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4UxFB2N.js → index-CPF7Vqri.js} +1 -1
- package/src/assets/web-panel/assets/{index-DddQd0_V.js → index-CPmgKQcl.js} +1 -1
- package/src/assets/web-panel/assets/{index-CxY_U5RT.js → index-CcpMHPWd.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5Ei75Wt.js → index-Cyksnofp.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxJqyIP8.js → index-CyyhilXV.js} +1 -1
- package/src/assets/web-panel/assets/{index-P1ERNJla.js → index-D4njcYFw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cj00JSqq.js → index-Dc9pcin6.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf86RSQk.js → index-DfAC55QA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBzaRg4E.js → index-DgNCfwvg.js} +1 -1
- package/src/assets/web-panel/assets/{index-NdEUFm32.js → index-DvfhIBNZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Beh1kLwx.js → index-Hbzd9WeI.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_6XIMVV.js → index-IiS7WoUl.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2JU-gdS.js → index-K2Uqqkr1.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dy8K2laU.js → index-KgR1f2Gq.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9FOwTgX.js → index-X6e0cGRU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeFhy4BX.js → index-Xa6TlaD7.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cm7vZvA3.js → index-YczWc2_0.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMIEWinN.js → index-h_ANnbR8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmMzB4C-.js → index-k7QsBwyo.js} +3 -3
- package/src/assets/web-panel/assets/{index-C9N1u8jV.js → index-lo9rgpyj.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DeMthvi4.js → initDefaultProps-FI8D7E2x.js} +1 -1
- package/src/assets/web-panel/assets/{motion-_7kbkzE0.js → motion-B1hpJYSD.js} +1 -1
- package/src/assets/web-panel/assets/{move-gCI04pLw.js → move-Vl1vUReW.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-D5UWHv2U.js → mtc-parser-6Cu2aFME.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CDCZcqeS.js → omit-VRKL8iSO.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DGMDLi3S.js → pickAttrs-DZfWsOe0.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-C-3vC1Vh.js → placementArrow-qmcOUc4W.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-vdoYucvi.js → responsiveObserve-BLB6SsSw.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B62FhgyZ.js → slide-41jdYeSH.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DCLlfnym.js → statusUtils-Yn8OQ5ey.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CGvQ4LRR.js → styleChecker-4CEwz9Zd.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BqkGoKwe.js → useFlexGapSupport-BClv53kR.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Bkr_nU3q.js → useFs-Bugo8HuF.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CYxMIUEq.js → usePersonalDataHub-B-q2ElB0.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-sAbcY1FX.js → vnode-ejVeFJ0x.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dm2pLrXi.js → zoom-DM1y_KKP.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/constants.js +1 -1
- package/src/data/changelog.json +26 -0
- package/src/lib/codex-app-server-adapter.js +36 -22
- package/src/lib/codex-app-server-support.js +91 -0
- package/src/lib/coding-change-review-context.js +258 -0
- package/src/lib/coding-task-guidance.js +3 -0
- package/src/lib/context-memory-kernel/provider-context.js +22 -12
- package/src/lib/goal-assess.js +4 -1
- package/src/lib/goal-check-evidence.js +77 -9
- package/src/lib/goal-model-call.js +107 -0
- package/src/lib/goal-workspace-evidence.js +299 -0
- package/src/lib/llm-onboarding-catalog.json +1 -1
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/task-model-selector.js +1 -1
- package/src/runtime/agent-core.js +152 -41
- package/src/runtime/headless-runner.js +201 -107
- package/src/assets/web-panel/assets/Artifacts-BOyohM_-.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DbeJAwMg.js +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-BqYYmC01.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-DXh4tOjU.js +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-77y9bkYN.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BgM5vq1s.js +0 -1
- package/src/assets/web-panel/assets/index-Bl-HTXWn.js +0 -1
- package/src/assets/web-panel/assets/index-Cxf0YfM5.js +0 -1
|
@@ -245,7 +245,11 @@ import {
|
|
|
245
245
|
runtimeUsageEventType,
|
|
246
246
|
runtimeToolCallId,
|
|
247
247
|
} from "../lib/runtime-usage-ledger.js";
|
|
248
|
-
import {
|
|
248
|
+
import {
|
|
249
|
+
goalModelCallError,
|
|
250
|
+
runGoalModelCall,
|
|
251
|
+
} from "../lib/goal-model-call.js";
|
|
252
|
+
import { captureGoalWorkspace } from "../lib/goal-workspace-evidence.js";
|
|
249
253
|
import {
|
|
250
254
|
GoalCheckEvidence,
|
|
251
255
|
buildGoalJudgePrompt,
|
|
@@ -3380,6 +3384,52 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3380
3384
|
};
|
|
3381
3385
|
};
|
|
3382
3386
|
|
|
3387
|
+
const recordRunUsage = (event) => {
|
|
3388
|
+
if (!event.attribution) {
|
|
3389
|
+
usage.input_tokens += event.usage?.input_tokens || 0;
|
|
3390
|
+
usage.output_tokens += event.usage?.output_tokens || 0;
|
|
3391
|
+
// Carry prompt-cache tokens into accumulated usage (cost accuracy).
|
|
3392
|
+
usage.cache_read_input_tokens +=
|
|
3393
|
+
event.usage?.cache_read_input_tokens || 0;
|
|
3394
|
+
usage.cache_creation_input_tokens +=
|
|
3395
|
+
event.usage?.cache_creation_input_tokens || 0;
|
|
3396
|
+
}
|
|
3397
|
+
emitStream({
|
|
3398
|
+
type: "token_usage",
|
|
3399
|
+
provider: event.provider,
|
|
3400
|
+
model: event.model,
|
|
3401
|
+
usage: event.usage,
|
|
3402
|
+
...(event.contextWindow ? { contextWindow: event.contextWindow } : {}),
|
|
3403
|
+
...(event.attribution ? { attribution: event.attribution } : {}),
|
|
3404
|
+
...(event.source ? { source: event.source } : {}),
|
|
3405
|
+
});
|
|
3406
|
+
if (costBudget) {
|
|
3407
|
+
costBudget.add({
|
|
3408
|
+
provider: event.provider,
|
|
3409
|
+
model: event.model,
|
|
3410
|
+
usage: event.usage,
|
|
3411
|
+
});
|
|
3412
|
+
if (costBudget.shouldWarnInactive()) {
|
|
3413
|
+
const m = `cost cap $${options.maxCostUsd} set but model "${event.model}" is unpriced/free — cap inactive`;
|
|
3414
|
+
if (isText) writeErr(` ${m}\n`);
|
|
3415
|
+
emitStream({ type: "cost_warning", message: m });
|
|
3416
|
+
}
|
|
3417
|
+
if (costBudget.exceeded()) {
|
|
3418
|
+
endReason = "cost-budget-exhausted";
|
|
3419
|
+
stopForCost = true;
|
|
3420
|
+
if (isText)
|
|
3421
|
+
writeErr(
|
|
3422
|
+
` ⛔ cost budget $${options.maxCostUsd} reached (spent ≈$${costBudget.spentUsd}) — stopping\n`,
|
|
3423
|
+
);
|
|
3424
|
+
emitStream({
|
|
3425
|
+
type: "cost_budget_exhausted",
|
|
3426
|
+
limit_usd: options.maxCostUsd,
|
|
3427
|
+
spent_usd: costBudget.spentUsd,
|
|
3428
|
+
});
|
|
3429
|
+
}
|
|
3430
|
+
}
|
|
3431
|
+
};
|
|
3432
|
+
|
|
3383
3433
|
// --goal-condition: session-level completion-condition engine (P1). After each
|
|
3384
3434
|
// outer turn an independent checker judges a completion CONDITION; if unmet and
|
|
3385
3435
|
// budget remains, a follow-up user turn re-drives the agent — until met
|
|
@@ -3390,6 +3440,51 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3390
3440
|
let _goalHelpers = null;
|
|
3391
3441
|
let _goalTokensSeen = 0; // per-turn usage deltas (engine totals == run total)
|
|
3392
3442
|
let _goalCostSeen = 0;
|
|
3443
|
+
const recordGoalUsage = () => {
|
|
3444
|
+
if (!goalEngine) return;
|
|
3445
|
+
const tokens =
|
|
3446
|
+
usage.input_tokens +
|
|
3447
|
+
usage.output_tokens +
|
|
3448
|
+
usage.cache_read_input_tokens +
|
|
3449
|
+
usage.cache_creation_input_tokens;
|
|
3450
|
+
goalEngine.recordTurnUsage({
|
|
3451
|
+
tokens: tokens - _goalTokensSeen,
|
|
3452
|
+
costUsd: costBudget.spentUsd - _goalCostSeen,
|
|
3453
|
+
});
|
|
3454
|
+
_goalTokensSeen = tokens;
|
|
3455
|
+
_goalCostSeen = costBudget.spentUsd;
|
|
3456
|
+
};
|
|
3457
|
+
const callGoalModel = async (prompt, operationId) => {
|
|
3458
|
+
const { chatWithTools } = await import("./agent-core.js");
|
|
3459
|
+
try {
|
|
3460
|
+
return await runGoalModelCall({
|
|
3461
|
+
sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
|
|
3462
|
+
persist: persist
|
|
3463
|
+
? (type, data) => store.appendEvent(sessionId, type, data)
|
|
3464
|
+
: null,
|
|
3465
|
+
sessionBudget: options.sessionBudget || null,
|
|
3466
|
+
iterationBudget: budget,
|
|
3467
|
+
costBudget,
|
|
3468
|
+
signal: options.signal,
|
|
3469
|
+
operationId,
|
|
3470
|
+
prompt,
|
|
3471
|
+
chat: chatWithTools,
|
|
3472
|
+
chatOptions: {
|
|
3473
|
+
...(evolutionIngress === null ? {} : { evolutionIngress }),
|
|
3474
|
+
model,
|
|
3475
|
+
provider,
|
|
3476
|
+
baseUrl,
|
|
3477
|
+
apiKey,
|
|
3478
|
+
serviceTier: options.serviceTier,
|
|
3479
|
+
maxOutputTokens: options.maxOutputTokens,
|
|
3480
|
+
},
|
|
3481
|
+
onUsage: recordRunUsage,
|
|
3482
|
+
});
|
|
3483
|
+
} finally {
|
|
3484
|
+
// Include auxiliary usage before the completion decision and checkpoint.
|
|
3485
|
+
recordGoalUsage();
|
|
3486
|
+
}
|
|
3487
|
+
};
|
|
3393
3488
|
let goalSetupFailure = null;
|
|
3394
3489
|
let goalRecoveryReviewed = false;
|
|
3395
3490
|
const goalEvidence = options.goalCondition
|
|
@@ -3398,36 +3493,47 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3398
3493
|
// Model-judged conditions reuse the run's own model as an independent
|
|
3399
3494
|
// evaluator (mirrors --goal-assess). Overridable via deps for tests.
|
|
3400
3495
|
const _defaultGoalJudge = async (cond, transcript) => {
|
|
3496
|
+
const checkCancellation = () => {
|
|
3497
|
+
if (options.signal?.aborted || options.sessionBudget?.signal?.aborted)
|
|
3498
|
+
throw goalModelCallError("cancelled");
|
|
3499
|
+
};
|
|
3500
|
+
checkCancellation();
|
|
3501
|
+
const goalBudget = goalEngine?.budget;
|
|
3502
|
+
const goalState = goalEngine?.state;
|
|
3503
|
+
if (
|
|
3504
|
+
goalBudget &&
|
|
3505
|
+
((goalBudget.maxTokens != null &&
|
|
3506
|
+
goalState.tokens >= goalBudget.maxTokens) ||
|
|
3507
|
+
(goalBudget.maxCostUsd != null &&
|
|
3508
|
+
goalState.costUsd >= goalBudget.maxCostUsd) ||
|
|
3509
|
+
(goalBudget.maxTimeMs != null &&
|
|
3510
|
+
(deps.now ? deps.now() : Date.now()) - goalState.startedAtMs >=
|
|
3511
|
+
goalBudget.maxTimeMs))
|
|
3512
|
+
) {
|
|
3513
|
+
return {
|
|
3514
|
+
met: false,
|
|
3515
|
+
reason: "Goal budget exhausted before model evaluation",
|
|
3516
|
+
};
|
|
3517
|
+
}
|
|
3401
3518
|
if (!usableGoalEvidence(transcript.goalEvidence).length) {
|
|
3519
|
+
const bindingReasons = [
|
|
3520
|
+
...new Set(
|
|
3521
|
+
(transcript.goalEvidence?.tools || [])
|
|
3522
|
+
.map((record) => record.workspace?.reason)
|
|
3523
|
+
.filter(Boolean),
|
|
3524
|
+
),
|
|
3525
|
+
];
|
|
3402
3526
|
return {
|
|
3403
3527
|
met: false,
|
|
3404
|
-
reason:
|
|
3405
|
-
|
|
3528
|
+
reason: bindingReasons.length
|
|
3529
|
+
? `Goal workspace evidence unavailable (${bindingReasons.join(", ")}); run a fresh artifact read or explicit check`
|
|
3530
|
+
: "No current successful tool evidence; run an explicit check for the goal condition",
|
|
3406
3531
|
evidence: { kind: "model", source: "current-turn-tools", toolIds: [] },
|
|
3407
3532
|
};
|
|
3408
3533
|
}
|
|
3409
|
-
const { chatWithTools } = await import("./agent-core.js");
|
|
3410
3534
|
const { firstBalancedJson } = await import("../lib/json-schema-output.js");
|
|
3411
3535
|
const judgePrompt = buildGoalJudgePrompt(cond, transcript);
|
|
3412
|
-
const r = await
|
|
3413
|
-
sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
|
|
3414
|
-
persist: persist
|
|
3415
|
-
? (type, data) => store.appendEvent(sessionId, type, data)
|
|
3416
|
-
: null,
|
|
3417
|
-
provider,
|
|
3418
|
-
model,
|
|
3419
|
-
source: "model",
|
|
3420
|
-
sessionBudget: options.sessionBudget || null,
|
|
3421
|
-
call: () =>
|
|
3422
|
-
chatWithTools([{ role: "user", content: judgePrompt }], {
|
|
3423
|
-
...(evolutionIngress === null ? {} : { evolutionIngress }),
|
|
3424
|
-
model,
|
|
3425
|
-
provider,
|
|
3426
|
-
baseUrl,
|
|
3427
|
-
apiKey,
|
|
3428
|
-
enabledToolNames: [],
|
|
3429
|
-
}),
|
|
3430
|
-
});
|
|
3536
|
+
const r = await callGoalModel(judgePrompt, "goal-condition");
|
|
3431
3537
|
const text = r?.message?.content || "";
|
|
3432
3538
|
let verdict = null;
|
|
3433
3539
|
const block = firstBalancedJson(text, "{");
|
|
@@ -3438,16 +3544,25 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3438
3544
|
/* tolerant: a non-JSON verdict stays unmet */
|
|
3439
3545
|
}
|
|
3440
3546
|
}
|
|
3441
|
-
|
|
3547
|
+
// A user or background writer can change files while the model evaluates.
|
|
3548
|
+
// Re-read the bound inputs before accepting its cited observations.
|
|
3549
|
+
await goalEvidence.refreshWorkspace();
|
|
3550
|
+
checkCancellation();
|
|
3551
|
+
return validateGoalJudgeVerdict(verdict, goalEvidence.snapshot());
|
|
3442
3552
|
};
|
|
3443
3553
|
// A running checkpoint precedes model/tool effects; an evaluated checkpoint
|
|
3444
3554
|
// precedes publishing the decision. An interrupted running phase requires
|
|
3445
3555
|
// reconciliation on resume instead of silently replaying the old goal state.
|
|
3446
|
-
const persistGoalSnapshot = (
|
|
3556
|
+
const persistGoalSnapshot = (
|
|
3557
|
+
phase,
|
|
3558
|
+
failurePhase = "after-model",
|
|
3559
|
+
evaluation = null,
|
|
3560
|
+
) => {
|
|
3447
3561
|
if (!persist || !goalEngine) return;
|
|
3448
3562
|
try {
|
|
3449
3563
|
store.appendEvent(sessionId, "goal_snapshot", {
|
|
3450
3564
|
...goalEngine.snapshot(),
|
|
3565
|
+
...(evaluation ? { evaluation } : {}),
|
|
3451
3566
|
checkpoint: {
|
|
3452
3567
|
schema: "chainlesschain.goal-checkpoint/v1",
|
|
3453
3568
|
phase,
|
|
@@ -3520,6 +3635,15 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3520
3635
|
now: goalNow,
|
|
3521
3636
|
});
|
|
3522
3637
|
}
|
|
3638
|
+
if (goalEngine.condition.kind === "model" && !deps.goalConditionJudge) {
|
|
3639
|
+
const signals = [options.signal, options.sessionBudget?.signal].filter(
|
|
3640
|
+
Boolean,
|
|
3641
|
+
);
|
|
3642
|
+
const signal =
|
|
3643
|
+
signals.length > 1 ? AbortSignal.any(signals) : signals[0];
|
|
3644
|
+
goalEvidence.captureWorkspace = (call) =>
|
|
3645
|
+
captureGoalWorkspace(cwd, call, { signal });
|
|
3646
|
+
}
|
|
3523
3647
|
_goalHelpers = {
|
|
3524
3648
|
isDeterministicCondition: eng.isDeterministicCondition,
|
|
3525
3649
|
runDeterministicCheck: eng.runDeterministicCheck,
|
|
@@ -3650,7 +3774,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3650
3774
|
args: event.args,
|
|
3651
3775
|
};
|
|
3652
3776
|
toolCalls.push(toolCall);
|
|
3653
|
-
goalEvidence?.started(toolCall);
|
|
3777
|
+
await goalEvidence?.started(toolCall);
|
|
3654
3778
|
toolStartedAt.set(
|
|
3655
3779
|
telemetryToolId,
|
|
3656
3780
|
deps.now ? deps.now() : Date.now(),
|
|
@@ -3778,7 +3902,11 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3778
3902
|
if (policyEvent) emitStream(policyEvent);
|
|
3779
3903
|
}
|
|
3780
3904
|
if (settledCall) {
|
|
3781
|
-
goalEvidence?.settled(
|
|
3905
|
+
await goalEvidence?.settled(
|
|
3906
|
+
settledCall,
|
|
3907
|
+
event.result,
|
|
3908
|
+
Boolean(err),
|
|
3909
|
+
);
|
|
3782
3910
|
settledCall.is_error = Boolean(err);
|
|
3783
3911
|
settledCall.durationMs =
|
|
3784
3912
|
event.result?.toolTelemetryRecord?.durationMs ??
|
|
@@ -3921,51 +4049,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
3921
4049
|
event,
|
|
3922
4050
|
"headless usage settlement",
|
|
3923
4051
|
);
|
|
3924
|
-
|
|
3925
|
-
usage.input_tokens += event.usage?.input_tokens || 0;
|
|
3926
|
-
usage.output_tokens += event.usage?.output_tokens || 0;
|
|
3927
|
-
// Carry prompt-cache tokens into accumulated usage (cost accuracy).
|
|
3928
|
-
usage.cache_read_input_tokens +=
|
|
3929
|
-
event.usage?.cache_read_input_tokens || 0;
|
|
3930
|
-
usage.cache_creation_input_tokens +=
|
|
3931
|
-
event.usage?.cache_creation_input_tokens || 0;
|
|
3932
|
-
}
|
|
3933
|
-
emitStream({
|
|
3934
|
-
type: "token_usage",
|
|
3935
|
-
provider: event.provider,
|
|
3936
|
-
model: event.model,
|
|
3937
|
-
usage: event.usage,
|
|
3938
|
-
...(event.contextWindow
|
|
3939
|
-
? { contextWindow: event.contextWindow }
|
|
3940
|
-
: {}),
|
|
3941
|
-
...(event.attribution ? { attribution: event.attribution } : {}),
|
|
3942
|
-
...(event.source ? { source: event.source } : {}),
|
|
3943
|
-
});
|
|
3944
|
-
if (costBudget) {
|
|
3945
|
-
costBudget.add({
|
|
3946
|
-
provider: event.provider,
|
|
3947
|
-
model: event.model,
|
|
3948
|
-
usage: event.usage,
|
|
3949
|
-
});
|
|
3950
|
-
if (costBudget.shouldWarnInactive()) {
|
|
3951
|
-
const m = `cost cap $${options.maxCostUsd} set but model "${event.model}" is unpriced/free — cap inactive`;
|
|
3952
|
-
if (isText) writeErr(` ${m}\n`);
|
|
3953
|
-
emitStream({ type: "cost_warning", message: m });
|
|
3954
|
-
}
|
|
3955
|
-
if (costBudget.exceeded()) {
|
|
3956
|
-
endReason = "cost-budget-exhausted";
|
|
3957
|
-
stopForCost = true;
|
|
3958
|
-
if (isText)
|
|
3959
|
-
writeErr(
|
|
3960
|
-
` ⛔ cost budget $${options.maxCostUsd} reached (spent ≈$${costBudget.spentUsd}) — stopping\n`,
|
|
3961
|
-
);
|
|
3962
|
-
emitStream({
|
|
3963
|
-
type: "cost_budget_exhausted",
|
|
3964
|
-
limit_usd: options.maxCostUsd,
|
|
3965
|
-
spent_usd: costBudget.spentUsd,
|
|
3966
|
-
});
|
|
3967
|
-
}
|
|
3968
|
-
}
|
|
4052
|
+
recordRunUsage(event);
|
|
3969
4053
|
break;
|
|
3970
4054
|
}
|
|
3971
4055
|
case "iteration-warning": {
|
|
@@ -4095,18 +4179,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4095
4179
|
) {
|
|
4096
4180
|
// Feed this turn's usage DELTA so the engine's totals equal the run's
|
|
4097
4181
|
// cumulative usage (recordTurnUsage accumulates).
|
|
4098
|
-
|
|
4099
|
-
usage.input_tokens +
|
|
4100
|
-
usage.output_tokens +
|
|
4101
|
-
usage.cache_read_input_tokens +
|
|
4102
|
-
usage.cache_creation_input_tokens;
|
|
4103
|
-
const curCost = costBudget ? Number(costBudget.spentUsd) || 0 : 0;
|
|
4104
|
-
goalEngine.recordTurnUsage({
|
|
4105
|
-
tokens: curTokens - _goalTokensSeen,
|
|
4106
|
-
costUsd: curCost - _goalCostSeen,
|
|
4107
|
-
});
|
|
4108
|
-
_goalTokensSeen = curTokens;
|
|
4109
|
-
_goalCostSeen = curCost;
|
|
4182
|
+
recordGoalUsage();
|
|
4110
4183
|
|
|
4111
4184
|
const cond = goalEngine.condition;
|
|
4112
4185
|
let evaluation;
|
|
@@ -4131,6 +4204,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4131
4204
|
throw error;
|
|
4132
4205
|
}
|
|
4133
4206
|
const judge = deps.goalConditionJudge || _defaultGoalJudge;
|
|
4207
|
+
await goalEvidence.refreshWorkspace();
|
|
4134
4208
|
evaluation = await judge(cond, {
|
|
4135
4209
|
prompt: options.prompt,
|
|
4136
4210
|
finalText,
|
|
@@ -4140,6 +4214,12 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4140
4214
|
}
|
|
4141
4215
|
} catch (err) {
|
|
4142
4216
|
if (err?.runtimeLedgerPersistence === true) throw err;
|
|
4217
|
+
if (
|
|
4218
|
+
err?.goalModelFailure ||
|
|
4219
|
+
(typeof err?.code === "string" &&
|
|
4220
|
+
err.code.startsWith("CC_SESSION_BUDGET_"))
|
|
4221
|
+
)
|
|
4222
|
+
throw err;
|
|
4143
4223
|
if (err?.code === "CC_AGENT_EVOLUTION_INGRESS_FAILED") throw err;
|
|
4144
4224
|
evaluation = {
|
|
4145
4225
|
met: false,
|
|
@@ -4150,7 +4230,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4150
4230
|
|
|
4151
4231
|
const { decision, events } = goalEngine.evaluate(evaluation);
|
|
4152
4232
|
// Publish only after the decision and accumulated usage are durable.
|
|
4153
|
-
persistGoalSnapshot("evaluated");
|
|
4233
|
+
persistGoalSnapshot("evaluated", "after-model", evaluation);
|
|
4154
4234
|
for (const ev of events) {
|
|
4155
4235
|
emitStream(ev);
|
|
4156
4236
|
if (isText) {
|
|
@@ -4167,6 +4247,10 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4167
4247
|
}
|
|
4168
4248
|
}
|
|
4169
4249
|
if (decision === _goalHelpers.GOAL_DECISION.CONTINUE) {
|
|
4250
|
+
if (budget.isExhausted()) {
|
|
4251
|
+
endReason = "max_turns";
|
|
4252
|
+
break;
|
|
4253
|
+
}
|
|
4170
4254
|
messages.push(
|
|
4171
4255
|
markRuntimeOnlySessionMessage({
|
|
4172
4256
|
role: "user",
|
|
@@ -4232,7 +4316,9 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4232
4316
|
? "error_persistence"
|
|
4233
4317
|
: sessionBudgetFailed
|
|
4234
4318
|
? "error_session_budget"
|
|
4235
|
-
:
|
|
4319
|
+
: err?.goalModelFailure
|
|
4320
|
+
? err.subtype
|
|
4321
|
+
: "error";
|
|
4236
4322
|
const transportDetails =
|
|
4237
4323
|
errorSubtype === "error" ? transportErrorDetails(err) : undefined;
|
|
4238
4324
|
const diagnosticFields = transportDetails
|
|
@@ -4247,6 +4333,13 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4247
4333
|
subtype: errorSubtype,
|
|
4248
4334
|
is_error: true,
|
|
4249
4335
|
error: message,
|
|
4336
|
+
...(err?.goalModelFailure
|
|
4337
|
+
? {
|
|
4338
|
+
usage,
|
|
4339
|
+
total_cost_usd: costBudget.spentUsd,
|
|
4340
|
+
num_turns: budget.consumed,
|
|
4341
|
+
}
|
|
4342
|
+
: {}),
|
|
4250
4343
|
...diagnosticFields,
|
|
4251
4344
|
});
|
|
4252
4345
|
} else if (isJson) {
|
|
@@ -4259,6 +4352,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4259
4352
|
sessionId,
|
|
4260
4353
|
toolCalls,
|
|
4261
4354
|
usage,
|
|
4355
|
+
totalCostUsd: costBudget.spentUsd,
|
|
4262
4356
|
numTurns: budget.consumed,
|
|
4263
4357
|
durationMs: (deps.now ? deps.now() : Date.now()) - startedAt,
|
|
4264
4358
|
denials,
|
|
@@ -4274,7 +4368,11 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4274
4368
|
// "the model call failed" from "the run itself errored" (1).
|
|
4275
4369
|
loopFailureOutcome = {
|
|
4276
4370
|
exitCode:
|
|
4277
|
-
persistenceFailed || sessionBudgetFailed
|
|
4371
|
+
persistenceFailed || sessionBudgetFailed
|
|
4372
|
+
? 1
|
|
4373
|
+
: err?.goalModelFailure
|
|
4374
|
+
? exitCodeForEndReason(err.endReason, true)
|
|
4375
|
+
: classifyLoopError(err),
|
|
4278
4376
|
result: message,
|
|
4279
4377
|
isError: true,
|
|
4280
4378
|
...(persistence ? { persistence } : {}),
|
|
@@ -4538,26 +4636,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4538
4636
|
const assessChat =
|
|
4539
4637
|
deps.assessChat ||
|
|
4540
4638
|
(async (assessPrompt) => {
|
|
4541
|
-
const
|
|
4542
|
-
const r = await runMeteredDirectModelCall({
|
|
4543
|
-
sessionId: resolveHeadlessMeteredSessionId(persist, sessionId),
|
|
4544
|
-
persist: persist
|
|
4545
|
-
? (type, data) => store.appendEvent(sessionId, type, data)
|
|
4546
|
-
: null,
|
|
4547
|
-
provider,
|
|
4548
|
-
model,
|
|
4549
|
-
source: "model",
|
|
4550
|
-
sessionBudget: options.sessionBudget || null,
|
|
4551
|
-
call: () =>
|
|
4552
|
-
chatWithTools([{ role: "user", content: assessPrompt }], {
|
|
4553
|
-
...(evolutionIngress === null ? {} : { evolutionIngress }),
|
|
4554
|
-
model,
|
|
4555
|
-
provider,
|
|
4556
|
-
baseUrl,
|
|
4557
|
-
apiKey,
|
|
4558
|
-
enabledToolNames: [],
|
|
4559
|
-
}),
|
|
4560
|
-
});
|
|
4639
|
+
const r = await callGoalModel(assessPrompt, "goal-assessment");
|
|
4561
4640
|
return r?.message?.content || "";
|
|
4562
4641
|
});
|
|
4563
4642
|
const { assessment } = await doAssess({
|
|
@@ -4585,6 +4664,21 @@ async function runAgentHeadlessInWorkspace(
|
|
|
4585
4664
|
}
|
|
4586
4665
|
}
|
|
4587
4666
|
} catch (error) {
|
|
4667
|
+
if (error?.goalModelFailure) {
|
|
4668
|
+
isError = true;
|
|
4669
|
+
subtype = error.subtype;
|
|
4670
|
+
endReason = error.endReason;
|
|
4671
|
+
finalText = error.message;
|
|
4672
|
+
}
|
|
4673
|
+
if (
|
|
4674
|
+
typeof error?.code === "string" &&
|
|
4675
|
+
error.code.startsWith("CC_SESSION_BUDGET_")
|
|
4676
|
+
) {
|
|
4677
|
+
isError = true;
|
|
4678
|
+
subtype = "error_session_budget";
|
|
4679
|
+
endReason = "session-budget-exhausted";
|
|
4680
|
+
finalText = error.message;
|
|
4681
|
+
}
|
|
4588
4682
|
if (error?.runtimeLedgerPersistence === true) {
|
|
4589
4683
|
isError = true;
|
|
4590
4684
|
subtype = "error_persistence";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as J,b as z,r as C,I as k,J as y,U as _,c as r,K as o,S,V as B,o as V,f as D,P as d,Q as f,R as p,F as j}from"./vendor-Bn1JzzAn.js";import{M as Q}from"./MarkdownRenderer-B73ZyMRI.js";import{u as F,_ as W,d as I}from"./index-CmMzB4C-.js";import{R as q}from"./icons-DG5UD-6K.js";import"./markdown-Bq2x0XsR.js";import"./markdown-DUKxbhE4.js";const K=J("artifacts",()=>{const h=C([]),t=C(!1),u=C(""),e=C(""),v=C(null),b=C(!1),A=z(()=>[...new Set(h.value.map(a=>a.kind).filter(Boolean))].sort());async function l(){const n=F();t.value=!0;try{const a={type:"artifact-list"};u.value&&(a.kind=u.value),e.value&&(a.session=e.value);const s=await n.sendRaw(a);s&&Array.isArray(s.artifacts)&&(h.value=[...s.artifacts].reverse())}catch{}finally{t.value=!1}}async function g(n){const a=F();b.value=!0,v.value={entry:n,previewable:!1};try{const s=await a.sendRaw({type:"artifact-content",artifactId:n.id});v.value={entry:n,previewable:s?.previewable===!0,encoding:s?.encoding||null,content:s?.content||"",truncated:s?.truncated===!0,reason:s?.reason||null}}catch(s){v.value={entry:n,previewable:!1,reason:s?.message||"preview failed"}}finally{b.value=!1}}function i(){v.value=null}const m=z(()=>{const n=v.value;return!n?.previewable||n.encoding!=="base64"?null:`data:${n.entry?.mime||"image/png"};base64,${n.content}`}),O=z(()=>{const n=v.value;return n?.previewable===!0&&n.encoding==="utf8"&&String(n.entry?.mime||"").toLowerCase()==="text/markdown"});async function M(n,a={}){if(!n?.id)return!1;const s=a.fetch||globalThis.fetch,T=a.document||globalThis.document,L=a.URL||globalThis.URL,N=(a.config||globalThis.window?.__CC_CONFIG__)??{};try{const U=await s(`/api/artifacts/${n.id}/download`,{headers:N.wsToken?{Authorization:`Bearer ${N.wsToken}`}:{}});if(!U.ok)return!1;const G=await U.blob(),E=L.createObjectURL(G),R=T.createElement("a");return R.href=E,R.download=n.title||n.id,T.body.appendChild(R),R.click(),R.remove(),L.revokeObjectURL(E),!0}catch{return!1}}async function P(n){const a=F();if(!n)return!1;try{const s=await a.sendRaw({type:"artifact-remove",artifactId:n});return v.value?.entry?.id===n&&(v.value=null),await l(),s?.found===!0}catch{return!1}}async function c(){const n=F();try{const a=await n.sendRaw({type:"artifact-clean"});return await l(),Number(a?.removed)||0}catch{return 0}}function w(n){const a=Number(n)||0;return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function x(n){switch(n){case"report":return"blue";case"patch":return"purple";case"screenshot":return"cyan";case"log":return"default";case"data":return"green";default:return"default"}}return{artifacts:h,loading:t,kindFilter:u,sessionFilter:e,kinds:A,preview:v,previewLoading:b,previewImageSrc:m,previewIsMarkdown:O,fetchArtifacts:l,openPreview:g,closePreview:i,removeArtifact:P,cleanExpired:c,downloadArtifact:M,formatSize:w,kindColor:x}}),H={__name:"Artifacts",setup(h,{expose:t}){t();const u=K(),e=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"类型",key:"kind",dataIndex:"kind",width:110},{title:"MIME",dataIndex:"mime",width:160,ellipsis:!0},{title:"大小",key:"size",dataIndex:"size",width:90},{title:"发布时间",key:"createdAt",dataIndex:"createdAt",width:170},{title:"会话",dataIndex:"sessionId",width:160,ellipsis:!0},{title:"操作",key:"actions",width:150}],v=z(()=>u.kinds.map(i=>({label:i,value:i})));async function b(i){await u.removeArtifact(i)?I.success("已删除"):I.error("删除失败")}async function A(){const i=await u.cleanExpired();I.info(i>0?`清理了 ${i} 个过期交付物`:"没有过期交付物")}async function l(i){await u.downloadArtifact(i)||I.error("下载失败")}V(()=>{u.fetchArtifacts()}),D(()=>{u.closePreview()});const g={store:u,columns:e,kindOptions:v,onRemove:b,onClean:A,onDownload:l,computed:z,onBeforeUnmount:D,onMounted:V,get ReloadOutlined(){return q},get message(){return I},MarkdownRenderer:Q,get useArtifactsStore(){return K}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},X={class:"page-header"},Y=["onClick"],Z=["src"],$={key:1,class:"preview-markdown"},ee={key:2,class:"preview-text"},te={class:"preview-meta"},ne={key:0};function ae(h,t,u,e,v,b){const A=k("a-select"),l=k("a-button"),g=k("a-popconfirm"),i=k("a-space"),m=k("a-tag"),O=k("a-table"),M=k("a-empty"),P=k("a-card");return d(),y("div",null,[_("div",X,[t[7]||(t[7]=_("div",null,[_("h2",{class:"page-title"},"交付物"),_("p",{class:"page-sub"}," agent 用 publish_artifact 发布的交付物(报告 / patch / 截图 / 日志),在这里预览与管理(cc artifacts 同源)。 ")],-1)),r(i,null,{default:o(()=>[r(A,{value:e.store.kindFilter,"onUpdate:value":t[0]||(t[0]=c=>e.store.kindFilter=c),style:{"min-width":"120px"},placeholder:"全部类型","allow-clear":"",options:e.kindOptions,onChange:t[1]||(t[1]=c=>e.store.fetchArtifacts())},null,8,["value","options"]),r(g,{title:"删除所有过期交付物?",onConfirm:e.onClean},{default:o(()=>[r(l,null,{default:o(()=>[...t[5]||(t[5]=[f("清理过期",-1)])]),_:1})]),_:1}),r(l,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=c=>e.store.fetchArtifacts())},{icon:o(()=>[r(e.ReloadOutlined)]),default:o(()=>[t[6]||(t[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),r(O,{"data-source":e.store.artifacts,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:10,hideOnSinglePage:!0}},{bodyCell:o(({column:c,record:w})=>[c.key==="title"?(d(),y("a",{key:0,onClick:x=>e.store.openPreview(w)},p(w.title),9,Y)):c.key==="kind"?(d(),S(m,{key:1,color:e.store.kindColor(w.kind)},{default:o(()=>[f(p(w.kind),1)]),_:2},1032,["color"])):c.key==="size"?(d(),y(j,{key:2},[f(p(e.store.formatSize(w.size)),1)],64)):c.key==="createdAt"?(d(),y(j,{key:3},[f(p((w.createdAt||"").replace("T"," ").slice(0,19)),1)],64)):c.key==="actions"?(d(),S(i,{key:4},{default:o(()=>[r(l,{size:"small",onClick:x=>e.store.openPreview(w)},{default:o(()=>[...t[8]||(t[8]=[f("预览",-1)])]),_:1},8,["onClick"]),r(l,{size:"small",onClick:x=>e.onDownload(w)},{default:o(()=>[...t[9]||(t[9]=[f("下载",-1)])]),_:1},8,["onClick"]),r(g,{title:"删除该交付物?",onConfirm:x=>e.onRemove(w.id)},{default:o(()=>[r(l,{size:"small",danger:""},{default:o(()=>[...t[10]||(t[10]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):B("v-if",!0)]),_:1},8,["data-source"]),e.store.preview?(d(),S(P,{key:0,size:"small",class:"preview-card",loading:e.store.previewLoading},{title:o(()=>[r(i,null,{default:o(()=>[_("span",null,p(e.store.preview.entry?.title),1),r(m,{color:e.store.kindColor(e.store.preview.entry?.kind)},{default:o(()=>[f(p(e.store.preview.entry?.kind),1)]),_:1},8,["color"]),r(m,{color:"default"},{default:o(()=>[f(p(e.store.preview.entry?.mime),1)]),_:1}),e.store.preview.truncated?(d(),S(m,{key:0,color:"warning"},{default:o(()=>[...t[11]||(t[11]=[f("已截断预览",-1)])]),_:1})):B("v-if",!0)]),_:1})]),extra:o(()=>[r(i,null,{default:o(()=>[r(l,{size:"small",onClick:t[3]||(t[3]=c=>e.onDownload(e.store.preview.entry))},{default:o(()=>[...t[12]||(t[12]=[f("下载",-1)])]),_:1}),r(l,{size:"small",onClick:t[4]||(t[4]=c=>e.store.closePreview())},{default:o(()=>[...t[13]||(t[13]=[f("关闭",-1)])]),_:1})]),_:1})]),default:o(()=>[e.store.previewImageSrc?(d(),y("img",{key:0,src:e.store.previewImageSrc,class:"preview-image",alt:"artifact preview"},null,8,Z)):e.store.previewIsMarkdown?(d(),y("div",$,[r(e.MarkdownRenderer,{content:e.store.preview.content||""},null,8,["content"])])):e.store.preview.previewable?(d(),y("pre",ee,p(e.store.preview.content||"(空文件)"),1)):(d(),S(M,{key:3,description:e.store.preview.reason||"该类型不支持在线预览,可在本机用 cc artifacts open <id> 打开"},null,8,["description"])),_("div",te,[_("span",null,p(e.store.preview.entry?.id),1),e.store.preview.entry?.sessionId?(d(),y("span",ne," · session "+p(e.store.preview.entry.sessionId),1)):B("v-if",!0),_("span",null," · sha256 "+p((e.store.preview.entry?.sha256||"").slice(0,12))+"…",1)])]),_:1},8,["loading"])):B("v-if",!0)])}const de=W(H,[["render",ae],["__scopeId","data-v-c8b48f8c"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/views/Artifacts.vue"]]);export{de as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as m,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-CmMzB4C-.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),u=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),b=String(e.getMonth()+1).padStart(2,"0"),f=String(e.getDate()).padStart(2,"0"),g=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${b}-${f} ${g}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:u,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},R={class:"bubble"},T={class:"meta"},M={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=v("a-tag");return m(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",R,[n("div",T,[n("span",M,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(m(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s,J as T,U as i,c as a,K as o,S as I,V as C,o as V,r as k,a as A,b as L,P as E,Q as c,R as v,F as z,Z as H}from"./vendor-Bn1JzzAn.js";import{_ as W,u as N,d}from"./index-CmMzB4C-.js";import{R as F}from"./icons-DG5UD-6K.js";function B(R){return["ask","agent"].map(t=>{const n=R?.readiness?.[t],e=n?.state==="admitted",m=n?.scope==="deployment-admission"&&n.runtimeVerification==="not_checked"&&Array.isArray(n.requiredCommands)&&n.requiredCommands.includes(t)&&(e?n.ready===!0&&n.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(n.state)&&n.ready===!1&&n.taskReady===!1);return{command:t,state:m?n.state:"unknown",summary:m?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:m&&typeof n.detail=="string"?n.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:m&&typeof n.remediation=="string"?n.remediation:""}})}function U(R,t){for(const n of Object.keys(R))delete R[n];Object.assign(R,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const J={__name:"EvolutionSettings",setup(R,{expose:t}){t();const n=N(),e=k(!1),m=k(!1),S=k(!1),_=k(!1),P=k(!1),y=k(""),f=k(""),p=k(""),u=A({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),x=L(()=>e.value||m.value||S.value||_.value||P.value),O=L(()=>B(u));function w(r){U(u,r),f.value=u.descriptorPath||"",p.value=u.trustRootPath||"",y.value=u.modulePath||y.value||""}async function g(r,q=3e4){return await n.waitConnected(8e3),(await n.sendRaw(r,q)).result}async function h(){e.value=!0;try{w(await g({type:"evolution.deployment.status"}))}catch(r){d.error("读取配置失败:"+r.message)}finally{e.value=!1}}async function b(){if(!f.value.trim()||!p.value.trim()){d.warning("请填写描述符和信任根公钥的绝对路径");return}m.value=!0;try{w(await g({type:"evolution.deployment.configure",descriptorPath:f.value.trim(),trustRootPath:p.value.trim()},6e4)),d.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(r){d.error("配置失败:"+r.message)}finally{m.value=!1}}async function D(){if(!y.value.trim()){d.warning("请填写测试部署宿主模块的服务器绝对路径");return}_.value=!0;try{w(await g({type:"evolution.deployment.init-test",modulePath:y.value.trim()},6e4)),d.success("TEST 测试开发环境已生成并启用;禁止用于生产")}catch(r){d.error("生成测试环境失败:"+r.message)}finally{_.value=!1}}async function j(){if(!f.value.trim()||!p.value.trim()){d.warning("请填写正式描述符和正式信任根公钥的绝对路径");return}P.value=!0;try{w(await g({type:"evolution.deployment.replace-test",descriptorPath:f.value.trim(),trustRootPath:p.value.trim()},6e4)),d.success("测试根已安全轮换为正式受管证书;请重启 cc ui、IDE 或 Desktop 长驻进程后做正式验证")}catch(r){d.error("替换失败:"+r.message)}finally{P.value=!1}}async function l(){S.value=!0;try{w(await g({type:"evolution.deployment.set-enabled",enabled:!u.profileEnabled})),d.success(u.profileEnabled?"已启用":"已停用")}catch(r){d.error("更新失败:"+r.message)}finally{S.value=!1}}V(h);const M={ws:n,loading:e,saving:m,toggling:S,initializingTest:_,replacingTest:P,modulePath:y,descriptorPath:f,trustRootPath:p,status:u,busy:x,readinessRows:O,apply:w,request:g,loadStatus:h,save:b,initTest:D,replaceTest:j,toggle:l,computed:L,onMounted:V,reactive:A,ref:k,get ReloadOutlined(){return F},get message(){return d},get useWsStore(){return N},get deploymentReadinessRows(){return B},get replaceDeploymentStatus(){return U}};return Object.defineProperty(M,"__isScriptSetup",{enumerable:!1,value:!0}),M}},Q={class:"page-head"},K={class:"mono"},Z={class:"mono"},G={class:"admission-status","aria-live":"polite"},X=["data-admission-command"],Y={class:"mono"},$={key:0,class:"mono"};function ee(R,t,n,e,m,S){const _=s("a-button"),P=s("a-switch"),y=s("a-card"),f=s("a-alert"),p=s("a-input"),u=s("a-form-item"),x=s("a-divider"),O=s("a-space"),w=s("a-form"),g=s("a-col"),h=s("a-tag"),b=s("a-descriptions-item"),D=s("a-descriptions"),j=s("a-row");return E(),T("div",null,[i("div",Q,[t[4]||(t[4]=i("div",null,[i("h2",{class:"page-title"},"Skill 自进化配置"),i("p",{class:"page-sub"}," 默认关闭;CLI、IDE 插件与 cc ui 共用 evolution.enabled 配置。 ")],-1)),a(_,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[3]||(t[3]=c("刷新 ",-1))]),_:1},8,["loading"])]),a(y,{title:"自进化开关",class:"notice"},{default:o(()=>[a(P,{checked:e.status.profileEnabled,loading:e.toggling,disabled:e.busy||e.loading,"checked-children":"已开启","un-checked-children":"已关闭",onChange:e.toggle},null,8,["checked","loading","disabled"]),t[5]||(t[5]=i("p",null," 关闭后仍可正常聊天和使用 Agent。首次开启会初始化本地运行时,也可使用下方配置的部署。 ",-1)),t[6]||(t[6]=i("p",null," Quick Ask 的下一次请求生效;正在运行的 Agent 会话请停止后重新启动。候选项发布仍需人工审核。 ",-1)),t[7]||(t[7]=i("p",{class:"mono"},'config.json:"evolution": { "enabled": false }',-1))]),_:1}),a(f,{message:"自进化与自动发布分别控制",description:"开启后使用经过签名的 Skill 自进化运行时;自动发布始终保持 HOLD。",type:"info","show-icon":"",class:"notice"}),e.status.deploymentMode==="test"?(E(),I(f,{key:0,message:"当前为 TEST 测试开发环境",description:"本机自动生成的测试密钥不能用于生产。正式 descriptor 和 trust root 到位后,请使用下方“一键替换测试证书并转正式”。",type:"error","show-icon":"",class:"notice"})):C("v-if",!0),a(j,{gutter:16},{default:o(()=>[a(g,{xs:24,xl:15},{default:o(()=>[a(y,{title:"上线前测试与正式部署",class:"panel-card"},{default:o(()=>[a(w,{layout:"vertical"},{default:o(()=>[a(u,{label:"测试部署宿主模块"},{extra:o(()=>[...t[8]||(t[8]=[c("首次填写后点击一次即可生成 Ed25519 测试密钥、签名描述符并启用;宿主模块修改后再次点击可刷新。",-1)])]),default:o(()=>[a(p,{value:e.modulePath,"onUpdate:value":t[0]||(t[0]=l=>e.modulePath=l),disabled:e.busy,placeholder:"运行 cc ui 的机器上 deployment host .mjs/.js 的绝对路径"},null,8,["value","disabled"])]),_:1}),a(_,{type:"primary",loading:e.initializingTest,onClick:e.initTest},{default:o(()=>[...t[9]||(t[9]=[c("一键生成/刷新测试环境",-1)])]),_:1},8,["loading"]),a(x),a(u,{label:"签名部署描述符"},{extra:o(()=>[...t[10]||(t[10]=[c("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(p,{value:e.descriptorPath,"onUpdate:value":t[1]||(t[1]=l=>e.descriptorPath=l),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(u,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(p,{value:e.trustRootPath,"onUpdate:value":t[2]||(t[2]=l=>e.trustRootPath=l),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(O,null,{default:o(()=>[a(_,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[11]||(t[11]=[c("校验、保存并启用",-1)])]),_:1},8,["loading"]),e.status.deploymentMode==="test"?(E(),I(_,{key:0,loading:e.replacingTest,onClick:e.replaceTest},{default:o(()=>[...t[12]||(t[12]=[c("一键替换测试证书并转正式",-1)])]),_:1},8,["loading"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1}),a(g,{xs:24,xl:9},{default:o(()=>[a(y,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(D,{column:1,size:"small"},{default:o(()=>[a(b,{label:"部署模式"},{default:o(()=>[a(h,{color:e.status.deploymentMode==="test"?"red":"blue"},{default:o(()=>[c(v(e.status.deploymentMode==="test"?"TEST(仅限上线前联调)":e.status.deploymentMode||"none"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"生效状态"},{default:o(()=>[a(h,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[c(v(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"生效来源"},{default:o(()=>[c(v(e.status.source||"none"),1)]),_:1}),a(b,{label:"签名校验"},{default:o(()=>[a(h,{color:e.status.verified?"green":"red"},{default:o(()=>[c(v(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(b,{label:"自动发布"},{default:o(()=>[a(h,{color:"orange"},{default:o(()=>[...t[13]||(t[13]=[c("HOLD",-1)])]),_:1})]),_:1}),a(b,{label:"配置文件"},{default:o(()=>[i("span",K,v(e.status.profilePath||"—"),1)]),_:1}),a(b,{label:"允许命令"},{default:o(()=>[i("span",Z,v((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),i("section",G,[t[14]||(t[14]=i("h3",null,"自进化部署准入",-1)),t[15]||(t[15]=i("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(E(!0),T(z,null,H(e.readinessRows,l=>(E(),T("div",{key:l.command,"data-admission-command":l.command},[i("strong",null,v(l.command)+":"+v(l.summary),1),i("p",Y,v(l.detail),1),l.remediation?(E(),T("p",$,v(l.remediation),1)):C("v-if",!0)],8,X))),128))]),e.status.error?(E(),I(f,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})])}const le=W(J,[["render",ee],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{le as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as x,P as s,J as i,U as l,R as n,c as g,K as u,Q as m,V as _,F as C,Z as N,S as T,b as p}from"./vendor-Bn1JzzAn.js";import{_ as R}from"./index-CmMzB4C-.js";import"./icons-DG5UD-6K.js";const V={__name:"GenericCardRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:f}){f();const t=v,o=p(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),c=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),k=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),S=String(e.getMinutes()).padStart(2,"0");return`${c}-${r}-${k} ${b}:${S}`}catch{return""}}),h=p(()=>{const e=t.event.content||{};return e.text||e.title||e.subject||e.name||e.prompt||JSON.stringify(e).slice(0,200)}),y=p(()=>{const e=t.event.content||{};return e.body||e.snippet||e.description||e.from||e.counterparty||null}),d=p(()=>{const e=t.event.content||{},c=t.event.extra||{},r=[];return e.amount!=null&&r.push({k:"金额",v:e.amount,color:"gold"}),c.merchant&&r.push({k:"商户",v:c.merchant,color:"green"}),c.orderNo&&r.push({k:"订单",v:c.orderNo,color:"purple"}),e.from&&e.to&&r.push({k:"路线",v:`${e.from} → ${e.to}`,color:"cyan"}),e.trainNo&&r.push({k:"车次",v:e.trainNo,color:"cyan"}),e.model&&r.push({k:"模型",v:e.model,color:"magenta"}),t.event.place&&r.push({k:"地点",v:t.event.place,color:"geekblue"}),r}),a={props:t,formattedTime:o,primaryText:h,secondaryText:y,metaChips:d,computed:p};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}},w={class:"event-card"},B={class:"card-head"},j={class:"time"},D={key:0,class:"actor"},F={class:"card-body"},G={class:"primary"},O={key:0,class:"secondary"},A={key:0,class:"card-meta"},I={class:"meta-k"};function J(v,f,t,o,h,y){const d=x("a-tag");return s(),i("div",w,[l("div",B,[l("span",j,n(o.formattedTime),1),g(d,{color:"blue",class:"adapter"},{default:u(()=>[m(n(t.event.source.adapter),1)]),_:1}),g(d,{class:"subtype"},{default:u(()=>[m(n(t.event.subtype),1)]),_:1}),t.event.actor?(s(),i("span",D,"@"+n(t.event.actor),1)):_("v-if",!0)]),l("div",F,[l("div",G,n(o.primaryText),1),o.secondaryText?(s(),i("div",O,n(o.secondaryText),1)):_("v-if",!0)]),o.metaChips.length>0?(s(),i("div",A,[(s(!0),i(C,null,N(o.metaChips,a=>(s(),T(d,{key:a.k,color:a.color},{default:u(()=>[l("span",I,n(a.k)+":",1),m(" "+n(a.v),1)]),_:2},1032,["color"]))),128))])):_("v-if",!0)])}const E=R(V,[["render",J],["__scopeId","data-v-c52d08ab"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/GenericCardRenderer.vue"]]);export{E as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as S,P as n,J as i,U as l,S as h,R as o,c,K as d,Q as u,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as b}from"./index-CmMzB4C-.js";import{aE as O,aI as C}from"./icons-DG5UD-6K.js";const D={__name:"TimelineRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:_}){_();const r=v,e=a(()=>r.event.content||{}),m=a(()=>{const t=r.event.source.adapter||"";return t.startsWith("travel-12306")||t.startsWith("travel-ctrip")}),p=a(()=>e.value.from&&e.value.to?`${e.value.from} → ${e.value.to}`:e.value.origin&&e.value.destination?`${e.value.origin} → ${e.value.destination}`:null),s=a(()=>r.event.place||e.value.placeName||e.value.poi),N=a(()=>e.value.trainNo),y=a(()=>e.value.flightNo),T=a(()=>e.value.title||e.value.text||e.value.description||"—"),k=a(()=>{const t=[];return e.value.departureTime&&t.push(`出发 ${e.value.departureTime}`),e.value.arrivalTime&&t.push(`到达 ${e.value.arrivalTime}`),e.value.duration&&t.push(`${e.value.duration}`),e.value.distance&&t.push(`${e.value.distance}`),t.length?t.join(" · "):null}),x=a(()=>{if(!r.event.occurredAt)return"";const t=new Date(r.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),f={props:r,c:e,isTravel:m,route:p,placeName:s,trainNo:N,flightNo:y,fallbackText:T,extraDetail:k,formattedTime:x,computed:a,get CarOutlined(){return C},get EnvironmentOutlined(){return O}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}},E={class:"timeline-event"},R={class:"dot"},V={class:"card"},w={class:"head"},B={class:"time"},j={class:"primary"},I={key:0},A={key:1},M={key:2},P={key:0,class:"trip-no"},W={key:1,class:"extra"};function q(v,_,r,e,m,p){const s=S("a-tag");return n(),i("div",E,[l("div",R,[e.isTravel?(n(),h(e.CarOutlined,{key:0})):(n(),h(e.EnvironmentOutlined,{key:1}))]),l("div",V,[l("div",w,[l("span",B,o(e.formattedTime),1),c(s,{color:"cyan"},{default:d(()=>[u(o(r.event.source.adapter),1)]),_:1}),c(s,null,{default:d(()=>[u(o(r.event.subtype),1)]),_:1})]),l("div",j,[e.route?(n(),i("span",I,o(e.route),1)):e.placeName?(n(),i("span",A,"📍 "+o(e.placeName),1)):(n(),i("span",M,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",P,[c(s,{color:"blue"},{default:d(()=>[u(o(e.trainNo||e.flightNo),1)]),_:1})])):g("v-if",!0),e.extraDetail?(n(),i("div",W,o(e.extraDetail),1)):g("v-if",!0)])])}const K=b(D,[["render",q],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-bSyR5m/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{K as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-CmMzB4C-.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-CZlj1XI2.js";import{a0 as t}from"./index-CmMzB4C-.js";import"./vendor-Bn1JzzAn.js";import"./index-C9FOwTgX.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-ChiqY7Hg.js";import{a0 as t}from"./index-CmMzB4C-.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-vdoYucvi.js";import"./useFlexGapSupport-BqkGoKwe.js";import"./styleChecker-CGvQ4LRR.js";import"./index-C9FOwTgX.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|