chainlesschain 0.162.162 → 0.162.163
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/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-ClI2ALgv.js → AIOps-BQ0kgfA1.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BDjRcJaK.js → ActionButton-Dr1MDANe.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DikSRsaT.js → Analytics-CZ5vsaXW.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-9mLhMFmz.js → AppLayout-BIBga881.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-BSr88BrH.js → Artifacts-vpXHRU3u.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CdvyimOF.js → Audit-B8exuoub.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-D3_hCedh.js → BackgroundAgents-923evRRN.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Cyvv9RHf.js → Backup-sr_sswlQ.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BZM14kt8.js → BaseInput-CnW-4XKT.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DrQSokVz.js → Chat-FZCsTZIL.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DDPd9qT0.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-bFLYeWMV.js → Checkbox-DFrxB59H.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-7mN7xJXT.js → Codegen-_b6WEel8.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DAB5ZWm7.js → Col-CkbnnZ-K.js} +1 -1
- package/src/assets/web-panel/assets/{Community-B_1TymaK.js → Community-BxM_82zW.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Bq1uSWLJ.js → Compact-DYinP45R.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CyiE1jEe.js → Compliance-DyXp3sSP.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Cpk0D7vm.js → Cowork-BEr2DhW7.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-d_Lv3rdB.js → Cron-B-Vwo1hN.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DMqhHjMR.js → Crosschain-DbLxKddd.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Br-oPuBw.js → DID-BsQ_LFw9.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CfLW_RaP.js → Dashboard-lVlXQHu5.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DZnTOExV.js → Dropdown-Beo_foO7.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DHIUHDv1.js → EmailListRenderer-DszHIXED.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bw3t3myu.js → FamilyGuardDashboard-DcAwoh81.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-D9cpQPAY.js → Federation-CuJLa2eb.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Jdczr9Mr.js → FormItemContext-Cxd1lxhc.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BT8ZMpC5.js → GenericCardRenderer-BBvq5Jsw.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DjARip2b.js → Git-WqPKetx6.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BgWbSRcj.js → Governance-CWYtY3ke.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CfouJciM.js → Inference-BnX1iiNV.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-50l7mrAr.js → KnowledgeGraph-BJuM8GN5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-rq50H84B.js → Logs-DqLMNntm.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DUPIEdQH.js → MarkdownRenderer-BqYwEYou.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BYgPDmHU.js → Marketplace-_vGfmhNl.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-5DVgcFdx.js → McpTools-BeJDOkDj.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-B70LPk7f.js → Memory-Da0EEZDO.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-De8ssA5Y.js → MobileBridge-DSuzcCCy.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-D0RAk4e8.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-RJsOTsIA.js → Mtc-BE9YgdA0.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-Crh-6BEK.js → MtcAudit-fC2BpO5S.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-wuoR5l3x.js → Multisig-D24Xxqw3.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-U2Mji4fZ.js → NLProgramming-Bs3oGvS8.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CdTZAyDH.js → Notes-BFjmAA-3.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-C-FucWE7.js → NotificationSettings-BX_9Bhv0.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DCYFTeaI.js → OrderTableRenderer-wjkZwJXI.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-an3OF85L.js → Organization-DBcdsVEP.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C-1vmYFe.js → Overflow-DDyaF9vC.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Cwh47xKg.js → P2P-BB78L4he.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Dm38GT0k.js → PdhVaultBrowser-DqTiZFum.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DS2Y8awD.js → Permissions-INbnWv4j.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BQNziA0I.js → PersonalDataHub-BST-VmTq.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-DF85L1ue.js → Pipeline-CE7_tS2k.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BuLornF-.js → Privacy-hK5L8dOB.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C3Y31IwX.js → ProjectInit-BvkkUoDn.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BCPiI8aD.js → ProjectSettings-u7_EUtkm.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BZ6s4k6g.js → Projects-5Fmt_8Nw.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-D3Wp022X.js → Providers-B9eanarR.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CUJfQkH4.js → QrScannerModal-C0dX5N2f.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-UAc0EO8l.js → QuickAsk-CKTpG-PZ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BaxKupcs.js → Recommend-Px_w_XQM.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C75NNnXZ.js → RemoteSession-Di0fnYkM.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-BVXynZAk.js → Reputation-vesnWjXt.js} +1 -1
- package/src/assets/web-panel/assets/{Row-C5MRZ0bi.js → Row-exbY6LkT.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DAKkEYka.js → RssFeed-B3O3x70t.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DvWv9YOA.js → Search-uRA0DhNz.js} +1 -1
- package/src/assets/web-panel/assets/{Security-B5peafW1.js → Security-CViqdH6K.js} +4 -4
- package/src/assets/web-panel/assets/{Services-UQmvPEaG.js → Services-CkXS97WN.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-C3bhWpuF.js → Skeleton-DxW5WYnE.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DfkKf9_H.js → Skills-CLxmGFse.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DqMSjlBM.js → Sla-Cr5fziXq.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-C-WbxWUX.js → SpeechSettings-H0JSb3cp.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CYuHZ4N2.js → SyncSettings-DMYWMae7.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CyeAyB9d.js → Tasks-CbYyDdF4.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BTCeQnpq.js → Templates-Cpc8JjiK.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BifQuA9Y.js → Tenant-CRh77Jda.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Bx_9Bocf.js → Terminal-4D8tNBO5.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BX0RFCOm.js → TimelineRenderer-D41jzzbG.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CGHrCmUS.js → Tokens-C_jWEy6b.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DlqaY4SO.js → Trigger-Dk1ZUhsy.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DfOmj-ay.js → Trust-CLVy4l7m.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B72jH5fE.js → UkeySign-C-FeqFDj.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BT-63fqv.js → VideoEditing-CqVZzyMm.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Dsul3sHr.js → Wallet-DX9BW9pu.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-Izkwwdgy.js → WebAuthn-7hQDpWw_.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-D3FHSiH1.js → WorkflowEditor-6XqUAO0j.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CmVz5z3U.js → chat-5R_vkaJG.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CuLgyJBp.js → colors-huUPZdC-.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Ml1YkXpw.js → compact-item-CfJlgisE.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BvjJ48bs.js → createContext-jO8heofr.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DeIrCfH-.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DVC0157C.js → hasIn-DY8Vxqx7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJyN28Et.js → index-A48PtXw9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CudmwNBV.js → index-B300RPnT.js} +3 -3
- package/src/assets/web-panel/assets/{index-BbepULSc.js → index-B74OXFxC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYXHFr4r.js → index-BAON7TzU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzG-x9p4.js → index-BCqxyvqp.js} +1 -1
- package/src/assets/web-panel/assets/{index-wvb_FtaV.js → index-BHE8OIls.js} +1 -1
- package/src/assets/web-panel/assets/{index-QXzlT9KD.js → index-BQS-uPOK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DukDVXCv.js → index-BRXOP09X.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFYVQMvu.js → index-BYLBPpt8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BydjdZnl.js → index-BfCx4pFT.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmFNvNLZ.js → index-BliaT02i.js} +1 -1
- package/src/assets/web-panel/assets/{index-KMqhcF7l.js → index-BmqGerpC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ck_52dz_.js → index-BsBtRWbA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C229ABfy.js → index-BtEXSoPL.js} +1 -1
- package/src/assets/web-panel/assets/index-BxUKMRpP.js +1 -0
- package/src/assets/web-panel/assets/{index-C_H_S-DY.js → index-Bxax9vQ6.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0S8NzO6.js → index-C2iVSFpy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjHBpRYZ.js → index-CA6sO5VD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bzr0rB5T.js → index-CA90TZxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDGaOWBV.js → index-CLhBh-qE.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dt5KMjwJ.js → index-CRElRhyS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbPtzB8M.js → index-Cbe9G0V4.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_vRgTl9.js → index-ChvHubX3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpFJHiTv.js → index-Cis_Ip7H.js} +1 -1
- package/src/assets/web-panel/assets/{index-KjgKdZe-.js → index-Cjxbu68P.js} +1 -1
- package/src/assets/web-panel/assets/{index-vG4XSJ1d.js → index-CzKmteNS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUt8kTIB.js → index-D0pet5Uy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfuKP4qe.js → index-D1VLuww0.js} +1 -1
- package/src/assets/web-panel/assets/{index-4SBta3d7.js → index-DXBcvUnf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DC_OI9H2.js → index-Db1cLWir.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuGszaWY.js → index-DoI2sZm7.js} +1 -1
- package/src/assets/web-panel/assets/index-DscU9iPI.js +1 -0
- package/src/assets/web-panel/assets/{index-4wcgvPoF.js → index-KRHroryI.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3lD5qap.js → index-d1xkbtNz.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_EvG_GW.js → index-dKx57io7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXkJH-lK.js → index-j3O2EEJe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiC6dQZG.js → index-p85YaaKw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cw0Rjy87.js → index-v3pTaEQm.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_XuRgGn.js → index-vXs3B8GJ.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BDgd2YZ8.js → initDefaultProps-MCB7-raZ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-ErtrXdYe.js → motion-UWDF9swV.js} +1 -1
- package/src/assets/web-panel/assets/{move-_GPPNCgs.js → move-CsTmgXZU.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DRLL-8V2.js → mtc-parser-fQy6KGLg.js} +1 -1
- package/src/assets/web-panel/assets/{omit-p86sl023.js → omit-woPnEjd1.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BTu7cMLH.js → pickAttrs-Bs2dZ1gf.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BEKz6Isr.js → placementArrow-C7EVgPkg.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Ck42c9MP.js → responsiveObserve-BH2kYCTN.js} +1 -1
- package/src/assets/web-panel/assets/{slide-1CEvuPsB.js → slide-BFBP2V_e.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BDfdx1GJ.js → statusUtils-xdDxDYse.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-B4K46m5w.js → styleChecker-aAWgPPQf.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DoIVpJNq.js → useFlexGapSupport-DkGSAWoO.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DdAWi-ln.js → useFs-BrOih40N.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-iUu6k8dx.js → usePersonalDataHub-eIYrgMqO.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DZz4R6Tw.js → vnode-B8lutNSE.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DXlf9sA3.js → zoom-CffNre7V.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agenda.js +254 -23
- package/src/commands/agent.js +105 -11
- package/src/commands/context.js +125 -14
- package/src/commands/hook.js +181 -7
- package/src/commands/plugin.js +239 -1
- package/src/commands/review.js +347 -2
- package/src/data/changelog.json +9 -4
- package/src/gateways/ws/remote-session-protocol.js +39 -0
- package/src/gateways/ws/session-protocol.js +5 -2
- package/src/lib/agent-schedule-store.js +289 -10
- package/src/lib/channels/channel-manager.js +54 -2
- package/src/lib/cli-context-engineering.js +9 -2
- package/src/lib/context-breakdown.js +116 -0
- package/src/lib/doctor-checkup.js +52 -0
- package/src/lib/hook-event-log.cjs +193 -0
- package/src/lib/interaction-adapter.js +34 -4
- package/src/lib/json-schema-output.js +46 -12
- package/src/lib/json-schema-validate.js +143 -3
- package/src/lib/plugin-runtime/capability-consent.js +175 -0
- package/src/lib/plugin-runtime/policy.js +62 -0
- package/src/lib/plugin-runtime/scopes.js +20 -4
- package/src/lib/project-instructions.js +128 -0
- package/src/lib/repl-goal.js +132 -0
- package/src/lib/repl-rewind.js +52 -0
- package/src/lib/schedule-planner.js +17 -1
- package/src/lib/settings-hook-events.cjs +13 -0
- package/src/lib/settings-loader.cjs +42 -0
- package/src/lib/side-effect-ledger-store.js +88 -0
- package/src/lib/side-effect-ledger.js +296 -0
- package/src/lib/sub-agent-context.js +74 -5
- package/src/lib/subagent-inheritance.js +112 -0
- package/src/lib/turn-binding-store.js +119 -0
- package/src/repl/agent-repl.js +136 -0
- package/src/repl/permission-tier.js +28 -0
- package/src/runtime/agent-core.js +376 -10
- package/src/runtime/coding-agent-contract-shared.cjs +60 -1
- package/src/runtime/headless-runner.js +267 -0
- package/src/runtime/headless-stream.js +60 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-HwJR-C6B.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-D10VISps.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DhiGrbsh.js +0 -1
- package/src/assets/web-panel/assets/index-B7a1TrU6.js +0 -1
- package/src/assets/web-panel/assets/index-C2B1KRja.js +0 -1
|
@@ -44,6 +44,8 @@ import {
|
|
|
44
44
|
appendTokenUsage as jsonlAppendTokenUsage,
|
|
45
45
|
appendToolCallCompact as jsonlAppendToolCallCompact,
|
|
46
46
|
appendCompactEvent as jsonlAppendCompactEvent,
|
|
47
|
+
appendEvent as jsonlAppendEvent,
|
|
48
|
+
readEvents as jsonlReadEvents,
|
|
47
49
|
rebuildMessages as jsonlRebuildMessages,
|
|
48
50
|
sessionExists as jsonlSessionExists,
|
|
49
51
|
getLastSessionId as jsonlGetLastSessionId,
|
|
@@ -461,6 +463,8 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
461
463
|
appendToolCallCompact:
|
|
462
464
|
deps.appendToolCallCompact || jsonlAppendToolCallCompact,
|
|
463
465
|
appendCompactEvent: deps.appendCompactEvent || jsonlAppendCompactEvent,
|
|
466
|
+
appendEvent: deps.appendEvent || jsonlAppendEvent,
|
|
467
|
+
readEvents: deps.readEvents || jsonlReadEvents,
|
|
464
468
|
getLastSessionId: deps.getLastSessionId || jsonlGetLastSessionId,
|
|
465
469
|
verifySession: deps.verifySession || jsonlVerifySession,
|
|
466
470
|
};
|
|
@@ -744,12 +748,35 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
744
748
|
outputStyleBody = null;
|
|
745
749
|
}
|
|
746
750
|
|
|
751
|
+
// Large-monorepo context lever: `instructionExcludes` (settings.json or an
|
|
752
|
+
// explicit caller/SDK option) suppresses cc.md/CLAUDE.md/AGENTS.md, path-scoped
|
|
753
|
+
// rules, and @imports that resolve into legacy/vendor/generated subtrees.
|
|
754
|
+
// Explicit option wins; otherwise union across the layered settings files.
|
|
755
|
+
let instructionExcludes = Array.isArray(options.instructionExcludes)
|
|
756
|
+
? options.instructionExcludes
|
|
757
|
+
: null;
|
|
758
|
+
if (!instructionExcludes) {
|
|
759
|
+
try {
|
|
760
|
+
const { readStringArraySetting } =
|
|
761
|
+
await import("../lib/settings-loader.cjs");
|
|
762
|
+
const fromSettings = readStringArraySetting("instructionExcludes", {
|
|
763
|
+
cwd,
|
|
764
|
+
settingsFile: options.settingsFile,
|
|
765
|
+
});
|
|
766
|
+
if (fromSettings && fromSettings.length)
|
|
767
|
+
instructionExcludes = fromSettings;
|
|
768
|
+
} catch {
|
|
769
|
+
instructionExcludes = null; // fail-open
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
|
|
747
773
|
const systemContent = composeSystemPrompt(
|
|
748
774
|
buildSystemPrompt(cwd, { additionalDirectories }),
|
|
749
775
|
{
|
|
750
776
|
systemPrompt: options.systemPrompt,
|
|
751
777
|
appendSystemPrompt: options.appendSystemPrompt,
|
|
752
778
|
outputStyle: outputStyleBody,
|
|
779
|
+
instructionExcludes,
|
|
753
780
|
},
|
|
754
781
|
);
|
|
755
782
|
|
|
@@ -1068,6 +1095,10 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1068
1095
|
model,
|
|
1069
1096
|
provider,
|
|
1070
1097
|
recorder: _otlpRecorder,
|
|
1098
|
+
// --otlp-content: opt in to stamping prompt CONTENT onto --otlp spans. Off by
|
|
1099
|
+
// default → content stays redacted (agent-core omits it entirely, so default
|
|
1100
|
+
// OTLP output is byte-identical). Only meaningful when a recorder is attached.
|
|
1101
|
+
otlpIncludeContent: options.otlpContent === true,
|
|
1071
1102
|
hookSupervisor: _hookSupervisor,
|
|
1072
1103
|
// Extended thinking (Anthropic; opt-in via --think/--ultrathink). null/off
|
|
1073
1104
|
// → chatWithTools sends no thinking field. thinkingBudget (--thinking-budget)
|
|
@@ -1091,6 +1122,13 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1091
1122
|
approvalGate,
|
|
1092
1123
|
permissionRules,
|
|
1093
1124
|
settingsHooks,
|
|
1125
|
+
// Seed the subagent-contract CEILING with this run's permission mode so a
|
|
1126
|
+
// spawned sub-agent inherits/tightens from it (tighten-only): a
|
|
1127
|
+
// `--permission-mode bypassPermissions` run can hand a child bypass (→ allow
|
|
1128
|
+
// confirmer), a `--permission-mode plan` run clamps children to read-only,
|
|
1129
|
+
// while a "default" run resolves children to "default" exactly as before
|
|
1130
|
+
// (byte-identical — the previous null ceiling also yielded "default").
|
|
1131
|
+
subAgentContract: { permissionMode: options.permissionMode || "default" },
|
|
1094
1132
|
classifyAllShell,
|
|
1095
1133
|
enabledToolNames,
|
|
1096
1134
|
disabledTools,
|
|
@@ -1278,6 +1316,138 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1278
1316
|
};
|
|
1279
1317
|
};
|
|
1280
1318
|
|
|
1319
|
+
// --goal-condition: session-level completion-condition engine (P1). After each
|
|
1320
|
+
// outer turn an independent checker judges a completion CONDITION; if unmet and
|
|
1321
|
+
// budget remains, a follow-up user turn re-drives the agent — until met
|
|
1322
|
+
// (goal_completed) or a budget is exhausted (goal_exhausted). OPT-IN: when
|
|
1323
|
+
// unset, `goalEngine` is null and the outer loop runs exactly once, so one-shot
|
|
1324
|
+
// `cc agent -p` behavior is byte-for-byte unchanged.
|
|
1325
|
+
let goalEngine = null;
|
|
1326
|
+
let _goalHelpers = null;
|
|
1327
|
+
let _goalTokensSeen = 0; // per-turn usage deltas (engine totals == run total)
|
|
1328
|
+
let _goalCostSeen = 0;
|
|
1329
|
+
// Model-judged conditions reuse the run's own model as an independent
|
|
1330
|
+
// evaluator (mirrors --goal-assess). Overridable via deps for tests.
|
|
1331
|
+
const _defaultGoalJudge = async (cond, transcript) => {
|
|
1332
|
+
const { chatWithTools } = await import("./agent-core.js");
|
|
1333
|
+
const { firstBalancedJson } = await import("../lib/json-schema-output.js");
|
|
1334
|
+
const judgePrompt =
|
|
1335
|
+
`You are judging whether a coding session met a completion condition.\n` +
|
|
1336
|
+
`Condition: ${cond.text || cond.source}\n\n` +
|
|
1337
|
+
`Latest assistant output:\n${String(transcript.finalText || "").slice(0, 2000)}\n\n` +
|
|
1338
|
+
`Reply with STRICT JSON only: {"met": true|false, "reason": "<short>"}.`;
|
|
1339
|
+
const r = await chatWithTools([{ role: "user", content: judgePrompt }], {
|
|
1340
|
+
model,
|
|
1341
|
+
provider,
|
|
1342
|
+
baseUrl,
|
|
1343
|
+
apiKey,
|
|
1344
|
+
enabledToolNames: [],
|
|
1345
|
+
});
|
|
1346
|
+
const text = r?.message?.content || "";
|
|
1347
|
+
let met = false;
|
|
1348
|
+
let reason = "model judge returned no verdict";
|
|
1349
|
+
const block = firstBalancedJson(text, "{");
|
|
1350
|
+
if (block) {
|
|
1351
|
+
try {
|
|
1352
|
+
const parsed = JSON.parse(block);
|
|
1353
|
+
met = parsed.met === true;
|
|
1354
|
+
if (typeof parsed.reason === "string" && parsed.reason.trim())
|
|
1355
|
+
reason = parsed.reason.trim();
|
|
1356
|
+
else reason = met ? "condition met" : "condition not met";
|
|
1357
|
+
} catch {
|
|
1358
|
+
/* tolerant: a non-JSON verdict stays unmet */
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
return {
|
|
1362
|
+
met,
|
|
1363
|
+
reason,
|
|
1364
|
+
evidence: { kind: "model", raw: text.slice(0, 200) },
|
|
1365
|
+
};
|
|
1366
|
+
};
|
|
1367
|
+
// Persist the engine snapshot as a hash-chained `goal_snapshot` session event
|
|
1368
|
+
// (best-effort, only when persisting). Re-read on --resume so an unfinished
|
|
1369
|
+
// goal continues across processes with its outerTurns/tokens/cost/startedAtMs
|
|
1370
|
+
// intact. rebuildMessages ignores this event type, so it never pollutes model
|
|
1371
|
+
// context. Defined here so the outer loop can call it after each evaluate().
|
|
1372
|
+
const persistGoalSnapshot = () => {
|
|
1373
|
+
if (!persist || !goalEngine) return;
|
|
1374
|
+
try {
|
|
1375
|
+
store.appendEvent(sessionId, "goal_snapshot", goalEngine.snapshot());
|
|
1376
|
+
} catch {
|
|
1377
|
+
// best-effort — never fail the run over persistence
|
|
1378
|
+
}
|
|
1379
|
+
};
|
|
1380
|
+
if (options.goalCondition) {
|
|
1381
|
+
try {
|
|
1382
|
+
const eng = await import("../lib/goal-condition-engine.js");
|
|
1383
|
+
const goalNow = () => (deps.now ? deps.now() : Date.now());
|
|
1384
|
+
// Cross-process resume: if the resumed session persisted an UNFINISHED
|
|
1385
|
+
// goal, continue it (fromSnapshot keeps accumulated progress + startedAtMs)
|
|
1386
|
+
// rather than starting fresh. A finished (done) snapshot is ignored — the
|
|
1387
|
+
// prior goal already concluded, so --goal-condition begins a new cycle. On
|
|
1388
|
+
// restore the persisted condition/budget win over freshly-passed flags, so
|
|
1389
|
+
// a resume faithfully continues the same goal.
|
|
1390
|
+
let restoredSnap = null;
|
|
1391
|
+
if (resumeId) {
|
|
1392
|
+
try {
|
|
1393
|
+
const events = store.readEvents(resumeId) || [];
|
|
1394
|
+
for (let i = events.length - 1; i >= 0; i--) {
|
|
1395
|
+
const ev = events[i];
|
|
1396
|
+
if (ev && ev.type === "goal_snapshot") {
|
|
1397
|
+
const snap = ev.data;
|
|
1398
|
+
if (snap && snap.state && snap.state.done !== true)
|
|
1399
|
+
restoredSnap = snap;
|
|
1400
|
+
break; // only the latest goal_snapshot matters
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
} catch {
|
|
1404
|
+
restoredSnap = null; // unreadable transcript → start fresh
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
if (restoredSnap) {
|
|
1408
|
+
goalEngine = eng.GoalConditionEngine.fromSnapshot(restoredSnap, {
|
|
1409
|
+
now: goalNow,
|
|
1410
|
+
});
|
|
1411
|
+
} else {
|
|
1412
|
+
goalEngine = new eng.GoalConditionEngine({
|
|
1413
|
+
condition: options.goalCondition,
|
|
1414
|
+
budget: {
|
|
1415
|
+
maxOuterTurns: options.maxOuterTurns,
|
|
1416
|
+
maxTokens: options.goalMaxTokens,
|
|
1417
|
+
maxCostUsd: options.goalMaxCostUsd,
|
|
1418
|
+
maxTimeMs: options.goalMaxTimeMs,
|
|
1419
|
+
},
|
|
1420
|
+
now: goalNow,
|
|
1421
|
+
});
|
|
1422
|
+
}
|
|
1423
|
+
_goalHelpers = {
|
|
1424
|
+
isDeterministicCondition: eng.isDeterministicCondition,
|
|
1425
|
+
runDeterministicCheck: eng.runDeterministicCheck,
|
|
1426
|
+
GOAL_DECISION: eng.GOAL_DECISION,
|
|
1427
|
+
};
|
|
1428
|
+
const started = goalEngine.start();
|
|
1429
|
+
emitStream({
|
|
1430
|
+
type: started.type,
|
|
1431
|
+
condition: started.condition,
|
|
1432
|
+
budget: started.budget,
|
|
1433
|
+
resumed: Boolean(restoredSnap),
|
|
1434
|
+
});
|
|
1435
|
+
persistGoalSnapshot(); // checkpoint the starting/restored state
|
|
1436
|
+
if (isText)
|
|
1437
|
+
writeErr(
|
|
1438
|
+
` ◎ goal-condition ${restoredSnap ? "resumed" : "active"}: ` +
|
|
1439
|
+
`${goalEngine.condition.source} ` +
|
|
1440
|
+
`(outer turn ${goalEngine.state.outerTurns + 1}/` +
|
|
1441
|
+
`${goalEngine.budget.maxOuterTurns})\n`,
|
|
1442
|
+
);
|
|
1443
|
+
} catch (err) {
|
|
1444
|
+
// A bad spec should have been rejected at the command layer; fail-open so
|
|
1445
|
+
// a malformed condition never aborts an otherwise-valid run.
|
|
1446
|
+
goalEngine = null;
|
|
1447
|
+
if (isText) writeErr(` goal-condition ignored: ${err.message}\n`);
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1281
1451
|
// A Ctrl-C (SIGINT) / SIGTERM terminates Node WITHOUT unwinding the `finally`
|
|
1282
1452
|
// below, so its background-task reaper is bypassed — a backgrounded run_shell
|
|
1283
1453
|
// task (e.g. a dev server) this run spawned would be orphaned. Install a
|
|
@@ -1492,6 +1662,103 @@ export async function runAgentHeadless(options = {}, deps = {}) {
|
|
|
1492
1662
|
);
|
|
1493
1663
|
}
|
|
1494
1664
|
}
|
|
1665
|
+
// ── goal-condition re-drive (opt-in via --goal-condition) ─────────────
|
|
1666
|
+
// After the turn settles (and any auto-rewake fix), evaluate the session
|
|
1667
|
+
// completion condition. Unmet + budget remaining → append a follow-up user
|
|
1668
|
+
// turn and re-drive; met → goal_completed; budget spent → goal_exhausted.
|
|
1669
|
+
// Cost / max-turns exhaustion of the INNER loop stops here regardless.
|
|
1670
|
+
if (
|
|
1671
|
+
goalEngine &&
|
|
1672
|
+
_goalHelpers &&
|
|
1673
|
+
!goalEngine.done &&
|
|
1674
|
+
!stopForCost &&
|
|
1675
|
+
endReason !== "cost-budget-exhausted" &&
|
|
1676
|
+
endReason !== "max_turns"
|
|
1677
|
+
) {
|
|
1678
|
+
// Feed this turn's usage DELTA so the engine's totals equal the run's
|
|
1679
|
+
// cumulative usage (recordTurnUsage accumulates).
|
|
1680
|
+
const curTokens =
|
|
1681
|
+
usage.input_tokens +
|
|
1682
|
+
usage.output_tokens +
|
|
1683
|
+
usage.cache_read_input_tokens +
|
|
1684
|
+
usage.cache_creation_input_tokens;
|
|
1685
|
+
const curCost = costBudget ? Number(costBudget.spentUsd) || 0 : 0;
|
|
1686
|
+
goalEngine.recordTurnUsage({
|
|
1687
|
+
tokens: curTokens - _goalTokensSeen,
|
|
1688
|
+
costUsd: curCost - _goalCostSeen,
|
|
1689
|
+
});
|
|
1690
|
+
_goalTokensSeen = curTokens;
|
|
1691
|
+
_goalCostSeen = curCost;
|
|
1692
|
+
|
|
1693
|
+
const cond = goalEngine.condition;
|
|
1694
|
+
let evaluation;
|
|
1695
|
+
try {
|
|
1696
|
+
if (_goalHelpers.isDeterministicCondition(cond)) {
|
|
1697
|
+
const gc = deps.goalCheck || {};
|
|
1698
|
+
const spawnSync =
|
|
1699
|
+
gc.spawnSync || (await import("node:child_process")).spawnSync;
|
|
1700
|
+
const existsSync =
|
|
1701
|
+
gc.existsSync || (await import("node:fs")).existsSync;
|
|
1702
|
+
evaluation = _goalHelpers.runDeterministicCheck(cond, {
|
|
1703
|
+
spawnSync,
|
|
1704
|
+
existsSync,
|
|
1705
|
+
cwd,
|
|
1706
|
+
lastOutput: finalText,
|
|
1707
|
+
});
|
|
1708
|
+
} else {
|
|
1709
|
+
const judge = deps.goalConditionJudge || _defaultGoalJudge;
|
|
1710
|
+
evaluation = await judge(cond, {
|
|
1711
|
+
prompt: options.prompt,
|
|
1712
|
+
finalText,
|
|
1713
|
+
toolCalls,
|
|
1714
|
+
});
|
|
1715
|
+
}
|
|
1716
|
+
} catch (err) {
|
|
1717
|
+
evaluation = {
|
|
1718
|
+
met: false,
|
|
1719
|
+
reason: `goal check failed: ${err.message}`,
|
|
1720
|
+
evidence: { error: true },
|
|
1721
|
+
};
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
const { decision, events } = goalEngine.evaluate(evaluation);
|
|
1725
|
+
for (const ev of events) {
|
|
1726
|
+
emitStream(ev);
|
|
1727
|
+
if (isText) {
|
|
1728
|
+
if (ev.type === "goal_completed")
|
|
1729
|
+
writeErr(` ✔ goal-condition met: ${ev.reason}\n`);
|
|
1730
|
+
else if (ev.type === "goal_exhausted")
|
|
1731
|
+
writeErr(
|
|
1732
|
+
` ⛔ goal-condition unmet (${ev.limit}): ${ev.reason}\n`,
|
|
1733
|
+
);
|
|
1734
|
+
else if (ev.type === "goal_evaluated")
|
|
1735
|
+
writeErr(
|
|
1736
|
+
` ◎ goal-condition ${ev.met ? "met" : "not met"}: ${ev.reason}\n`,
|
|
1737
|
+
);
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
// Checkpoint the post-evaluate state (outerTurns incremented, and
|
|
1741
|
+
// done/outcome on a terminal decision) so a crash or Ctrl-C between here
|
|
1742
|
+
// and the next turn still resumes at the right point.
|
|
1743
|
+
persistGoalSnapshot();
|
|
1744
|
+
if (decision === _goalHelpers.GOAL_DECISION.CONTINUE) {
|
|
1745
|
+
messages.push({
|
|
1746
|
+
role: "user",
|
|
1747
|
+
content:
|
|
1748
|
+
`The completion condition is not yet met: ${evaluation.reason}.\n` +
|
|
1749
|
+
`Keep working toward: "${cond.source}". When you believe it is ` +
|
|
1750
|
+
`satisfied, make sure it actually passes.`,
|
|
1751
|
+
});
|
|
1752
|
+
finalText = "";
|
|
1753
|
+
endReason = "complete";
|
|
1754
|
+
if (isText)
|
|
1755
|
+
writeErr(
|
|
1756
|
+
` ↻ goal-condition re-drive — outer turn ${goalEngine.state.outerTurns + 1}\n`,
|
|
1757
|
+
);
|
|
1758
|
+
continue; // re-drive: run another outer turn
|
|
1759
|
+
}
|
|
1760
|
+
// complete | exhausted → fall through to the break below.
|
|
1761
|
+
}
|
|
1495
1762
|
break;
|
|
1496
1763
|
}
|
|
1497
1764
|
} catch (err) {
|
|
@@ -1035,12 +1035,55 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
1035
1035
|
} catch {
|
|
1036
1036
|
outputStyleBody = null;
|
|
1037
1037
|
}
|
|
1038
|
+
// Large-monorepo context lever: `instructionExcludes` (settings.json or an
|
|
1039
|
+
// explicit caller/SDK option) suppresses instruction/rule/@import files that
|
|
1040
|
+
// resolve into excluded subtrees. Explicit option wins; else union settings.
|
|
1041
|
+
let instructionExcludes = Array.isArray(options.instructionExcludes)
|
|
1042
|
+
? options.instructionExcludes
|
|
1043
|
+
: null;
|
|
1044
|
+
if (!instructionExcludes) {
|
|
1045
|
+
try {
|
|
1046
|
+
const { readStringArraySetting } =
|
|
1047
|
+
await import("../lib/settings-loader.cjs");
|
|
1048
|
+
const fromSettings = readStringArraySetting("instructionExcludes", {
|
|
1049
|
+
cwd,
|
|
1050
|
+
settingsFile: options.settingsFile,
|
|
1051
|
+
});
|
|
1052
|
+
if (fromSettings && fromSettings.length)
|
|
1053
|
+
instructionExcludes = fromSettings;
|
|
1054
|
+
} catch {
|
|
1055
|
+
instructionExcludes = null; // fail-open
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
// --json-schema (P2 §"JSON Schema 与流式结构化结果"): resolve + meta-validate
|
|
1059
|
+
// the schema up front (fail-fast on a broken contract, mirroring the
|
|
1060
|
+
// single-prompt path), then inject its output contract into the system prompt
|
|
1061
|
+
// so the model's final reply is JSON. A per-turn `structured_result` event is
|
|
1062
|
+
// emitted after each turn below. Off by default → nothing changes.
|
|
1063
|
+
let _jsonSchema = null;
|
|
1064
|
+
let _jso = null;
|
|
1065
|
+
if (options.jsonSchema) {
|
|
1066
|
+
try {
|
|
1067
|
+
_jso = await import("../lib/json-schema-output.js");
|
|
1068
|
+
_jsonSchema = _jso.loadSchemaFile(_jso._deps.fs, options.jsonSchema);
|
|
1069
|
+
} catch (err) {
|
|
1070
|
+
// Fail-fast, exactly like `cc agent -p --json-schema` on a bad schema.
|
|
1071
|
+
writeErr(`Error: ${err.message}\n`);
|
|
1072
|
+
return { exitCode: 1, turns: 0 };
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1038
1076
|
const systemContent = composeSystemPrompt(
|
|
1039
1077
|
buildSystemPrompt(cwd, { additionalDirectories }),
|
|
1040
1078
|
{
|
|
1041
1079
|
systemPrompt: options.systemPrompt,
|
|
1042
|
-
appendSystemPrompt:
|
|
1080
|
+
appendSystemPrompt: _jsonSchema
|
|
1081
|
+
? [options.appendSystemPrompt, _jso.buildSchemaInstruction(_jsonSchema)]
|
|
1082
|
+
.filter(Boolean)
|
|
1083
|
+
.join("\n\n")
|
|
1084
|
+
: options.appendSystemPrompt,
|
|
1043
1085
|
outputStyle: outputStyleBody,
|
|
1086
|
+
instructionExcludes,
|
|
1044
1087
|
},
|
|
1045
1088
|
);
|
|
1046
1089
|
const messages = [{ role: "system", content: systemContent }];
|
|
@@ -2041,6 +2084,22 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
|
|
|
2041
2084
|
usage: outcome.usage,
|
|
2042
2085
|
});
|
|
2043
2086
|
|
|
2087
|
+
// --json-schema (P2): emit this turn's structured verdict right after its
|
|
2088
|
+
// result — schema_digest + valid + value/errors from the turn's final text.
|
|
2089
|
+
// Never falls back to free text; an unparseable/invalid reply reports
|
|
2090
|
+
// valid:false with coded/pointered errors. Parity with single-prompt output.
|
|
2091
|
+
if (_jsonSchema) {
|
|
2092
|
+
const parsed = _jso.extractJsonPayload(String(outcome.finalText ?? ""));
|
|
2093
|
+
emit({
|
|
2094
|
+
..._jso.buildStructuredResult(
|
|
2095
|
+
_jsonSchema,
|
|
2096
|
+
parsed.ok ? parsed.value : null,
|
|
2097
|
+
),
|
|
2098
|
+
session_id: sessionId,
|
|
2099
|
+
turn: turns,
|
|
2100
|
+
});
|
|
2101
|
+
}
|
|
2102
|
+
|
|
2044
2103
|
// Session-wide cost cap reached → stop accepting further turns.
|
|
2045
2104
|
if (costStopped) break;
|
|
2046
2105
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,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-CudmwNBV.js";import"./icons-DG5UD-6K.js";const T={__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"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},M={class:"bubble"},N={class:"meta"},R={class:"actor"},D={class:"time"},V={class:"body"};function q(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",M,[n("div",N,[n("span",R,a(r.actorLabel),1),n("span",D,a(r.formattedTime),1)]),n("div",V,a(r.messageText),1),t.event.source.adapter?(u(),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 j=k(T,[["render",q],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-PMRrTD/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-CudmwNBV.js";import{a8 as M,M as y}from"./icons-DG5UD-6K.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return y},get FolderOutlined(){return M}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},T={class:"subtitle"},k={class:"explainer"};function w(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",T,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",k,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",w],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-PMRrTD/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-CudmwNBV.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-C5MRZ0bi.js";import{a0 as t}from"./index-CudmwNBV.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-Ck42c9MP.js";import"./useFlexGapSupport-DoIVpJNq.js";import"./styleChecker-B4K46m5w.js";import"./index-Ck_52dz_.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-DAB5ZWm7.js";import{a0 as t}from"./index-CudmwNBV.js";import"./vendor-Bn1JzzAn.js";import"./index-Ck_52dz_.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|