chainlesschain 0.166.69 → 0.166.71
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 +42 -5
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-FhevRfL6.js → AIOps-6n6RPfD2.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-rOeOykx5.js → ActionButton-BRlz1g77.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BK_wYlfz.js → Analytics-BFx6_nNR.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-_2cCtZKV.js → AppLayout-CcbKe_m4.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-D5MSvVzk.js → Artifacts-DlBMxBaf.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-yd-Ah-A3.js → Audit-aqQRi1IW.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-yCaw_Gu_.js → BackgroundAgents-tzAQeiAS.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-G3ADD4N-.js → Backup-C3sLPZvj.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-ByDhkLbF.js → BaseInput-BdqG7xax.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BMrc7qjz.js → Chat-DXjdkR-r.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-B-3SVP-4.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BHYgyZWA.js → Checkbox-CACOSDhS.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DJfcy0jC.js → Codegen-ZY0zbHvS.js} +1 -1
- package/src/assets/web-panel/assets/{Col-C27zROxc.js → Col-C511kzpa.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CuS5tq_1.js → Community-CIM5EtmR.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BrYJNe7Q.js → Compact-DpTxu8E7.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-8hfahYHT.js → Compliance-Cu42ksf-.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DdE0n2lp.js → Cowork-BqUbCW9U.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CUq3aSiX.js → Cron-OXYE4gRs.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BM4XSPWG.js → Crosschain-DPqmhSi6.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CdaBY57N.js → DID-CPp_yj85.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cwtd52So.js → Dashboard-pki3T5PE.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BvlObh6U.js → Dropdown-IyL1RsjP.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-e3fLhjnX.js → EmailListRenderer-6Kbwb4Ux.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-CTtk1Zo8.js → EvolutionSettings-DGBMs24I.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BpPJUnCU.js → FamilyGuardDashboard-CLz3KJvw.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-vzjZ6_nQ.js → Federation-gMDCbNjS.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DEDNLhkE.js → FormItemContext-bSzQnHE6.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DEl2Te5f.js → GenericCardRenderer-DCyBnm6B.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BzsYQnCq.js → Git-BKqZtZMD.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-zxJs6Y8s.js → Governance-nZDU4Gz2.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-5JUsrmF1.js → Inference-VodzHgdz.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Br8b5Htz.js → KnowledgeGraph-DHjlnyh4.js} +1 -1
- package/src/assets/web-panel/assets/Logs-CPsAssGM.js +2 -0
- package/src/assets/web-panel/assets/{MarkdownRenderer-In4itZX2.js → MarkdownRenderer-ChogLgLv.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-s8MmWkS9.js → Marketplace-Df7Cr8cW.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Wu-WRg4M.js → McpTools-Dy_V6M2q.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-B_i-eX9w.js → Memory-DjYWvH5O.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Ca64kjVx.js → MobileBridge-qYw4QwQh.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DDA7pzJd.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-DKvGmG3y.js → Mtc-BQ2fg2aQ.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-BVvWx8pF.js → MtcAudit-CaBVA8Cu.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-wqeJ2O9x.js → Multisig-DsTt5nuM.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DX87ysYu.js → NLProgramming-CqpsGgiz.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-ChenGdu0.js → Notes-DpRTGRs9.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BZRa68-x.js → NotificationSettings-CmHeyjUS.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DZ6xG1M6.js → OrderTableRenderer-D-JBdzGf.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BWJp4VPX.js → Organization-QL01Gu7d.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BoM4bYt5.js → Overflow-DjUeTZ69.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Cvi8YV09.js → P2P-DuM6UaEh.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CNVC1NIj.js → PdhVaultBrowser-BsL5CbMs.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DNd1MRjW.js → Permissions-Cfu4vMf9.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DGSBYZ5-.js → PersonalDataHub-HvEGAMl5.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-DkcoGMBo.js → Pipeline-_CZIYXJs.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DltwvMAW.js → Privacy-C6bTNjwi.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-ChYbpHg8.js → ProjectInit-D64UJRfZ.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B8FWiHTJ.js → ProjectSettings-CSTAzKVe.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DuyhtSm4.js → Projects-BudNMgcm.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Bo18Tx_6.js → Providers-C7ddN75H.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-6W85KlsG.js → QrScannerModal-CtsMC0eH.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DznRUedP.js → QuickAsk-iE7xKI4P.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CQDN3_p-.js → Recommend-5FCqoy3g.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-CiJgokEj.js → RemoteSession-DtX0VARB.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DexzGH7E.js → Reputation-Hd4dH5ci.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BgZOIvSi.js → Row-CnLRjeGC.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BWIZJ_Jr.js → RssFeed-Ds43ubF9.js} +3 -3
- package/src/assets/web-panel/assets/{Search-B376EwWJ.js → Search-BmXOdvpt.js} +1 -1
- package/src/assets/web-panel/assets/{Security-92mUR5OD.js → Security--yQqv9yt.js} +4 -4
- package/src/assets/web-panel/assets/{Services-ClSEAOHk.js → Services-CNNPxlyA.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DVhLbv99.js → Skeleton-DPmZAdDN.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-JTcXs_xI.js → Skills-Va_WxW7s.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DnKY9zy9.js → Sla-BZoRsy3v.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-GO1JefAH.js → SpeechSettings-XgRV95VE.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-jX5tB2St.js → SyncSettings-Dr7NXCEw.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BxRBzhUc.js → Tasks-j-xRo5_-.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CAVkbTG1.js → Templates-BJSqGQuB.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-5Y7sHBkz.js → Tenant-zuVl_JY7.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CbbLShYb.js → Terminal-B-xNbgfG.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-2HptWihL.js → TimelineRenderer-BtZQpa0b.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-B-jGxzHl.js → Tokens-CXGqGXWd.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-9DGa90DT.js → Trigger-CtDmejyH.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BSJEkEOO.js → Trust-BfDvBu2B.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C807So5R.js → UkeySign-CgHq72xW.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-ByiieAv-.js → VideoEditing-pRBMqiGT.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BixbIOUv.js → Wallet-DHhZSHFo.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-z7akhor4.js → WebAuthn-C-PDGO1-.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-KvijuUuR.js → WorkflowEditor-Dqrh4ooE.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BYKoh0YG.js → chat-Du4rhkgo.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CLT8IYBt.js → colors-CVVon0Yw.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DlBIyYHF.js → compact-item-zcQv_R_9.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-5XmAnNLr.js → createContext-UfW2PpZM.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CoA1apwL.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-rPdRhm7K.js → hasIn-Dko6kq4D.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChlzaTV3.js → index-0d3V2fKV.js} +1 -1
- package/src/assets/web-panel/assets/{index-8un-eUDI.js → index-4YoVVwaY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZiSMYoD.js → index-5UfwyzQV.js} +3 -3
- package/src/assets/web-panel/assets/{index-Bve7Wsgf.js → index-7aNfa1q3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1VfBUPB.js → index-B8nu6_LV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DI_tYFBe.js → index-BEOOJevs.js} +1 -1
- package/src/assets/web-panel/assets/{index-kx6zDWew.js → index-BHq5RTAk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIVrVGvf.js → index-BPE8w-x1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DW8vozBS.js → index-BPTQ-SUp.js} +1 -1
- package/src/assets/web-panel/assets/{index-DPS4mWnI.js → index-BR5eNU_w.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZjGcIGU.js → index-BXqsNksk.js} +1 -1
- package/src/assets/web-panel/assets/{index-b-rQCMkx.js → index-BoQJIWkq.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3-NL-x-.js → index-BolCTH1Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-akwXS-FF.js → index-BwcE8uKT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIRl2Ii5.js → index-CJ72HeXg.js} +1 -1
- package/src/assets/web-panel/assets/{index-Djd7uqwM.js → index-CPqtDZE1.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2sFDVb_.js → index-CV8kORgq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bzd0sFkp.js → index-CoXowCMA.js} +1 -1
- package/src/assets/web-panel/assets/{index-rRuCGdKW.js → index-CrURt95p.js} +1 -1
- package/src/assets/web-panel/assets/{index-CY6TMc2m.js → index-CrbxgYRx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuvweiCz.js → index-Cs4qAz6z.js} +1 -1
- package/src/assets/web-panel/assets/index-CsR4S29Z.js +1 -0
- package/src/assets/web-panel/assets/{index-eHbr3f5I.js → index-D4-E1s34.js} +1 -1
- package/src/assets/web-panel/assets/{index-LKT-Ol0A.js → index-DIFh_pNy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgevTkUv.js → index-DKAB6MRs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDtlwjSr.js → index-DMdBtncl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzExCCLS.js → index-DMxhURG4.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3f9Jzx2.js → index-Dgu3vko5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBt2CSAx.js → index-Dh1USRx7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqZU4_7J.js → index-DhYE_jVw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dea32nOK.js → index-Dkc1L9vQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsnbOKdI.js → index-DqQhty7h.js} +1 -1
- package/src/assets/web-panel/assets/index-DvcAyRFh.js +1 -0
- package/src/assets/web-panel/assets/{index-DTslLzPJ.js → index-Dviw8PsD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dntid6oj.js → index-DwXm_6Df.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM_a9spK.js → index-UzXoeYbz.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-0nAxf5.js → index-ija7mc1b.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCDSycWo.js → index-jjgfplWj.js} +1 -1
- package/src/assets/web-panel/assets/{index-CErvHCDe.js → index-ubMuGX5r.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-a8411LiK.js → initDefaultProps-DvSMOW2m.js} +1 -1
- package/src/assets/web-panel/assets/{motion-oVcQdpCm.js → motion-C7PjuFda.js} +1 -1
- package/src/assets/web-panel/assets/{move-B-eyzzzL.js → move-qsgDmMqu.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BCYIxuG7.js → mtc-parser-D7qHulCC.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DuFtWiYh.js → omit-g_tGmcIM.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CVAoJhGu.js → pickAttrs-DGs-br4p.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Y2iub2bO.js → placementArrow-A1KZT5yH.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BHenWIVD.js → responsiveObserve-B98U6Yi5.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CKrMaL29.js → slide-Y5Q6ixV9.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-w8eb_1da.js → statusUtils-CVC7D579.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CCVi_Ww3.js → styleChecker-CDWAgZKa.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BsmR_q0r.js → useFlexGapSupport-C0UFofSm.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-a8GMBjnc.js → useFs-BHEf6SSo.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BMUYSPn-.js → usePersonalDataHub-Bb2M_BPj.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DL2pI31V.js → vnode-DENyLaXR.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Cbi8fISi.js → zoom-BUOUP8-I.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +97 -0
- package/src/data/changelog.json +26 -0
- package/src/lib/decision-layer/benchmark.js +164 -0
- package/src/lib/decision-layer/contracts.js +377 -0
- package/src/lib/decision-layer/provider-authority.js +44 -0
- package/src/lib/decision-layer/providers.js +150 -0
- package/src/lib/decision-layer/runtime.js +238 -0
- package/src/lib/decision-layer/typesafe-provider.js +16 -0
- package/src/runtime/agent-core.js +49 -0
- package/src/runtime/headless-runner.js +88 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-nA7n0I6S.js +0 -1
- package/src/assets/web-panel/assets/Logs-D-tubDMJ.js +0 -2
- package/src/assets/web-panel/assets/MobileProjects-Cq9AFiO4.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BmcCIHwY.js +0 -1
- package/src/assets/web-panel/assets/index-DY8rmd6x.js +0 -1
- package/src/assets/web-panel/assets/index-sbwcUeRS.js +0 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
import { runMeteredDirectModelCall } from "../direct-model-usage.js";
|
|
4
|
+
import { isTerminalModelFailure } from "../model-failure-policy.js";
|
|
5
|
+
import { markRuntimeLedgerPersistenceError } from "../runtime-usage-ledger.js";
|
|
6
|
+
import {
|
|
7
|
+
createSkillDecisionRequest,
|
|
8
|
+
decisionDigest,
|
|
9
|
+
normalizeDecisionMode,
|
|
10
|
+
normalizeSkillDecisionProviderResult,
|
|
11
|
+
resolveSkillDecision,
|
|
12
|
+
SKILL_DECISION_OBSERVATION_SCHEMA,
|
|
13
|
+
} from "./contracts.js";
|
|
14
|
+
import { captureDecisionProviderAuthority } from "./provider-authority.js";
|
|
15
|
+
|
|
16
|
+
export const SKILL_DECISION_RUNTIME_SCHEMA =
|
|
17
|
+
"chainlesschain.skill-decision-runtime/v1";
|
|
18
|
+
|
|
19
|
+
const RUNTIMES = new WeakSet();
|
|
20
|
+
const DEFAULT_TIMEOUT_MS = 800;
|
|
21
|
+
|
|
22
|
+
function requiredText(value, label, maximum = 256) {
|
|
23
|
+
if (
|
|
24
|
+
typeof value !== "string" ||
|
|
25
|
+
value.trim() === "" ||
|
|
26
|
+
value.length > maximum ||
|
|
27
|
+
/\p{Cc}/u.test(value)
|
|
28
|
+
) {
|
|
29
|
+
throw new TypeError(`${label} is required and bounded`);
|
|
30
|
+
}
|
|
31
|
+
return value.trim();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function timeoutSignal(signal, timeoutMs) {
|
|
35
|
+
const deadline = AbortSignal.timeout(timeoutMs);
|
|
36
|
+
return signal ? AbortSignal.any([signal, deadline]) : deadline;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function projectUnavailable(error) {
|
|
40
|
+
if (error?.name === "TimeoutError") return "provider-timeout";
|
|
41
|
+
if (error?.code === "CC_DECISION_PROVIDER_HTTP_ERROR") {
|
|
42
|
+
return "provider-http-error";
|
|
43
|
+
}
|
|
44
|
+
return "provider-unavailable";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function asPersistenceError(error) {
|
|
48
|
+
if (error?.runtimeLedgerPersistence === true) return error;
|
|
49
|
+
try {
|
|
50
|
+
return markRuntimeLedgerPersistenceError(error);
|
|
51
|
+
} catch {
|
|
52
|
+
return markRuntimeLedgerPersistenceError(
|
|
53
|
+
new Error("decision observation persistence failed", { cause: error }),
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function createSkillDecisionRuntime({
|
|
59
|
+
mode = "off",
|
|
60
|
+
tenantId = null,
|
|
61
|
+
sessionId = null,
|
|
62
|
+
provider = null,
|
|
63
|
+
persist = null,
|
|
64
|
+
observe = null,
|
|
65
|
+
sessionBudget = null,
|
|
66
|
+
thresholds = {},
|
|
67
|
+
timeoutMs = DEFAULT_TIMEOUT_MS,
|
|
68
|
+
idGenerator = () => randomUUID(),
|
|
69
|
+
now = () => new Date(),
|
|
70
|
+
} = {}) {
|
|
71
|
+
const normalizedMode = normalizeDecisionMode(mode);
|
|
72
|
+
if (
|
|
73
|
+
!Number.isSafeInteger(timeoutMs) ||
|
|
74
|
+
timeoutMs < 50 ||
|
|
75
|
+
timeoutMs > 30_000
|
|
76
|
+
) {
|
|
77
|
+
throw new TypeError(
|
|
78
|
+
"decision timeout must be an integer from 50 to 30000 ms",
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
if (typeof idGenerator !== "function" || typeof now !== "function") {
|
|
82
|
+
throw new TypeError("decision runtime generators must be functions");
|
|
83
|
+
}
|
|
84
|
+
let providerAuthority = null;
|
|
85
|
+
let boundTenantId = null;
|
|
86
|
+
let boundSessionId = null;
|
|
87
|
+
if (normalizedMode !== "off") {
|
|
88
|
+
providerAuthority = captureDecisionProviderAuthority(provider);
|
|
89
|
+
boundTenantId = requiredText(tenantId, "tenantId");
|
|
90
|
+
boundSessionId = requiredText(sessionId, "sessionId");
|
|
91
|
+
if (typeof persist !== "function" || typeof observe !== "function") {
|
|
92
|
+
throw new TypeError(
|
|
93
|
+
"enabled decision runtime requires usage and observation persistence",
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const writeObservation = async (observation) => {
|
|
99
|
+
if (normalizedMode === "off") return;
|
|
100
|
+
try {
|
|
101
|
+
await observe(observation);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
throw asPersistenceError(error);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const runtime = Object.freeze({
|
|
108
|
+
schema: SKILL_DECISION_RUNTIME_SCHEMA,
|
|
109
|
+
mode: normalizedMode,
|
|
110
|
+
tenantId: boundTenantId,
|
|
111
|
+
sessionId: boundSessionId,
|
|
112
|
+
suggest: async ({
|
|
113
|
+
query,
|
|
114
|
+
candidates,
|
|
115
|
+
turnId,
|
|
116
|
+
contextRevision,
|
|
117
|
+
signal,
|
|
118
|
+
} = {}) => {
|
|
119
|
+
if (normalizedMode === "off") {
|
|
120
|
+
return Object.freeze({
|
|
121
|
+
schema: SKILL_DECISION_OBSERVATION_SCHEMA,
|
|
122
|
+
mode: normalizedMode,
|
|
123
|
+
status: "disabled",
|
|
124
|
+
visible: false,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (signal?.aborted) throw signal.reason;
|
|
128
|
+
const decisionId = `skill-${requiredText(idGenerator(), "decisionId")}`;
|
|
129
|
+
const request = createSkillDecisionRequest({
|
|
130
|
+
decisionId,
|
|
131
|
+
tenantId: boundTenantId,
|
|
132
|
+
sessionId: boundSessionId,
|
|
133
|
+
turnId,
|
|
134
|
+
query,
|
|
135
|
+
candidates,
|
|
136
|
+
contextRevision,
|
|
137
|
+
});
|
|
138
|
+
const startedAt = now();
|
|
139
|
+
if (
|
|
140
|
+
!(startedAt instanceof Date) ||
|
|
141
|
+
!Number.isFinite(startedAt.getTime())
|
|
142
|
+
) {
|
|
143
|
+
throw new TypeError("decision runtime clock returned an invalid date");
|
|
144
|
+
}
|
|
145
|
+
let outcome;
|
|
146
|
+
try {
|
|
147
|
+
const raw = await runMeteredDirectModelCall({
|
|
148
|
+
sessionId: boundSessionId,
|
|
149
|
+
persist,
|
|
150
|
+
provider: providerAuthority.provider,
|
|
151
|
+
model: providerAuthority.model,
|
|
152
|
+
source: "model",
|
|
153
|
+
operationId: `decision:${decisionId}`,
|
|
154
|
+
sessionBudget,
|
|
155
|
+
call: () =>
|
|
156
|
+
providerAuthority.decide(request, {
|
|
157
|
+
signal: timeoutSignal(signal, timeoutMs),
|
|
158
|
+
}),
|
|
159
|
+
});
|
|
160
|
+
const normalized = normalizeSkillDecisionProviderResult(request, raw);
|
|
161
|
+
const resolved = resolveSkillDecision(request, normalized, thresholds);
|
|
162
|
+
outcome = {
|
|
163
|
+
status: resolved.status,
|
|
164
|
+
reasonCode: resolved.reasonCode,
|
|
165
|
+
selectedCandidateId: resolved.selectedCandidateId,
|
|
166
|
+
selectedDigest: resolved.selectedDigest,
|
|
167
|
+
selectedSkillId: resolved.selectedSkillId,
|
|
168
|
+
needsSkillProbability: resolved.needsSkillProbability,
|
|
169
|
+
choiceConfidence: resolved.choiceConfidence,
|
|
170
|
+
resultDigest: resolved.resultDigest,
|
|
171
|
+
};
|
|
172
|
+
} catch (error) {
|
|
173
|
+
if (signal?.aborted || isTerminalModelFailure(error)) throw error;
|
|
174
|
+
outcome = {
|
|
175
|
+
status: "unavailable",
|
|
176
|
+
reasonCode: projectUnavailable(error),
|
|
177
|
+
selectedCandidateId: null,
|
|
178
|
+
selectedDigest: null,
|
|
179
|
+
selectedSkillId: null,
|
|
180
|
+
needsSkillProbability: null,
|
|
181
|
+
choiceConfidence: null,
|
|
182
|
+
resultDigest: null,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const finishedAt = now();
|
|
186
|
+
if (
|
|
187
|
+
!(finishedAt instanceof Date) ||
|
|
188
|
+
!Number.isFinite(finishedAt.getTime())
|
|
189
|
+
) {
|
|
190
|
+
throw new TypeError("decision runtime clock returned an invalid date");
|
|
191
|
+
}
|
|
192
|
+
const observationCore = {
|
|
193
|
+
schema: SKILL_DECISION_OBSERVATION_SCHEMA,
|
|
194
|
+
decisionId,
|
|
195
|
+
mode: normalizedMode,
|
|
196
|
+
tenantId: boundTenantId,
|
|
197
|
+
sessionId: boundSessionId,
|
|
198
|
+
turnId: request.binding.turnId,
|
|
199
|
+
requestDigest: request.requestDigest,
|
|
200
|
+
candidateSetDigest: request.candidateSetDigest,
|
|
201
|
+
provider: providerAuthority.provider,
|
|
202
|
+
model: providerAuthority.model,
|
|
203
|
+
status: outcome.status,
|
|
204
|
+
reasonCode: outcome.reasonCode,
|
|
205
|
+
selectedDigest: outcome.selectedDigest,
|
|
206
|
+
resultDigest: outcome.resultDigest,
|
|
207
|
+
startedAt: startedAt.toISOString(),
|
|
208
|
+
finishedAt: finishedAt.toISOString(),
|
|
209
|
+
latencyMs: Math.max(0, finishedAt.getTime() - startedAt.getTime()),
|
|
210
|
+
};
|
|
211
|
+
const observation = Object.freeze({
|
|
212
|
+
...observationCore,
|
|
213
|
+
observationDigest: decisionDigest(
|
|
214
|
+
SKILL_DECISION_OBSERVATION_SCHEMA,
|
|
215
|
+
observationCore,
|
|
216
|
+
),
|
|
217
|
+
});
|
|
218
|
+
await writeObservation(observation);
|
|
219
|
+
return Object.freeze({
|
|
220
|
+
schema: SKILL_DECISION_OBSERVATION_SCHEMA,
|
|
221
|
+
decisionId,
|
|
222
|
+
mode: normalizedMode,
|
|
223
|
+
visible: normalizedMode === "suggest",
|
|
224
|
+
receiptRef: observation.observationDigest,
|
|
225
|
+
...outcome,
|
|
226
|
+
});
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
RUNTIMES.add(runtime);
|
|
230
|
+
return runtime;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export function captureSkillDecisionRuntime(value) {
|
|
234
|
+
if (!RUNTIMES.has(value)) {
|
|
235
|
+
throw new TypeError("a branded Skill decision runtime is required");
|
|
236
|
+
}
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createDecisionProvider } from "./providers.js";
|
|
2
|
+
|
|
3
|
+
export function createTypeSafeDecisionProvider({
|
|
4
|
+
apiKey,
|
|
5
|
+
baseUrl,
|
|
6
|
+
model,
|
|
7
|
+
fetchImpl,
|
|
8
|
+
} = {}) {
|
|
9
|
+
return createDecisionProvider({
|
|
10
|
+
provider: "typesafe",
|
|
11
|
+
apiKey,
|
|
12
|
+
baseUrl,
|
|
13
|
+
model,
|
|
14
|
+
fetchImpl,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
@@ -86,6 +86,7 @@ import {
|
|
|
86
86
|
import { getPlanModeManager } from "../lib/plan-mode.js";
|
|
87
87
|
import { CLISkillLoader } from "../lib/skill-loader.js";
|
|
88
88
|
import { routeSkillDescriptors } from "../lib/skill-retrieval-router.js";
|
|
89
|
+
import { captureSkillDecisionRuntime } from "../lib/decision-layer/runtime.js";
|
|
89
90
|
import { resolveSkillOutcomeAuthority } from "../lib/skill-outcome-authority.js";
|
|
90
91
|
import {
|
|
91
92
|
captureSkillVectorAuthority,
|
|
@@ -3629,6 +3630,7 @@ export async function executeTool(name, args, context = {}) {
|
|
|
3629
3630
|
skillAllowlist: context.skillAllowlist ?? null,
|
|
3630
3631
|
skillOutcomeIndex: context.skillOutcomeIndex,
|
|
3631
3632
|
skillVectorAuthority: context.skillVectorAuthority,
|
|
3633
|
+
skillDecisionRuntime: context.skillDecisionRuntime,
|
|
3632
3634
|
skillRuntimeAdmission: context.skillRuntimeAdmission,
|
|
3633
3635
|
skillRuntimeAdmissionRequired: context.skillRuntimeAdmissionRequired,
|
|
3634
3636
|
skillRetrievalRevocationReader: context.skillRetrievalRevocationReader,
|
|
@@ -5184,6 +5186,7 @@ async function executeToolInner(
|
|
|
5184
5186
|
skillAllowlist = null,
|
|
5185
5187
|
skillOutcomeIndex,
|
|
5186
5188
|
skillVectorAuthority,
|
|
5189
|
+
skillDecisionRuntime,
|
|
5187
5190
|
skillRuntimeAdmission,
|
|
5188
5191
|
skillRuntimeAdmissionRequired = false,
|
|
5189
5192
|
skillRetrievalRevocationReader,
|
|
@@ -8622,6 +8625,45 @@ async function executeToolInner(
|
|
|
8622
8625
|
skills = routing.candidates
|
|
8623
8626
|
.map(({ digest }) => byDigest.get(digest))
|
|
8624
8627
|
.filter(Boolean);
|
|
8628
|
+
const decisionRuntime =
|
|
8629
|
+
skillDecisionRuntime == null
|
|
8630
|
+
? null
|
|
8631
|
+
: captureSkillDecisionRuntime(skillDecisionRuntime);
|
|
8632
|
+
if (decisionRuntime !== null && routing.candidates.length > 0) {
|
|
8633
|
+
const decision = await decisionRuntime.suggest({
|
|
8634
|
+
query: args.query,
|
|
8635
|
+
candidates: routing.candidates.slice(0, 5).map((candidate) => {
|
|
8636
|
+
const descriptor = byDigest.get(candidate.digest);
|
|
8637
|
+
return {
|
|
8638
|
+
id: candidate.id,
|
|
8639
|
+
displayName: candidate.displayName,
|
|
8640
|
+
description: descriptor?.description || candidate.displayName,
|
|
8641
|
+
category: candidate.category,
|
|
8642
|
+
digest: candidate.digest,
|
|
8643
|
+
tags: Array.isArray(descriptor?.tags) ? descriptor.tags : [],
|
|
8644
|
+
};
|
|
8645
|
+
}),
|
|
8646
|
+
turnId: turnId || toolCallId || "list-skills",
|
|
8647
|
+
contextRevision: "skill-routing-v1",
|
|
8648
|
+
signal,
|
|
8649
|
+
});
|
|
8650
|
+
if (decision.visible) {
|
|
8651
|
+
routing = Object.freeze({
|
|
8652
|
+
...routing,
|
|
8653
|
+
decisionSuggestion: Object.freeze({
|
|
8654
|
+
schema: decision.schema,
|
|
8655
|
+
decisionId: decision.decisionId,
|
|
8656
|
+
status: decision.status,
|
|
8657
|
+
reasonCode: decision.reasonCode,
|
|
8658
|
+
selectedDigest: decision.selectedDigest,
|
|
8659
|
+
selectedSkillId: decision.selectedSkillId,
|
|
8660
|
+
needsSkillProbability: decision.needsSkillProbability,
|
|
8661
|
+
choiceConfidence: decision.choiceConfidence,
|
|
8662
|
+
receiptRef: decision.receiptRef,
|
|
8663
|
+
}),
|
|
8664
|
+
});
|
|
8665
|
+
}
|
|
8666
|
+
}
|
|
8625
8667
|
}
|
|
8626
8668
|
skillLoader.recordDescriptorUse?.(skills, {
|
|
8627
8669
|
sessionId,
|
|
@@ -8641,6 +8683,9 @@ async function executeToolInner(
|
|
|
8641
8683
|
vectorAuthority:
|
|
8642
8684
|
vector?.evidence ?? unavailableSkillVectorEvidence(),
|
|
8643
8685
|
outcomeAuthority: outcomeAuthority.evidence,
|
|
8686
|
+
...(routing.decisionSuggestion
|
|
8687
|
+
? { decisionSuggestion: routing.decisionSuggestion }
|
|
8688
|
+
: {}),
|
|
8644
8689
|
},
|
|
8645
8690
|
}
|
|
8646
8691
|
: {}),
|
|
@@ -14029,6 +14074,10 @@ export async function* agentLoop(messages, options) {
|
|
|
14029
14074
|
: _defaultSkillLoader),
|
|
14030
14075
|
skillOutcomeIndex: options.skillOutcomeIndex,
|
|
14031
14076
|
skillVectorAuthority: options.skillVectorAuthority,
|
|
14077
|
+
skillDecisionRuntime:
|
|
14078
|
+
options.skillDecisionRuntime == null
|
|
14079
|
+
? null
|
|
14080
|
+
: captureSkillDecisionRuntime(options.skillDecisionRuntime),
|
|
14032
14081
|
skillRuntimeAdmission: options.skillRuntimeAdmission,
|
|
14033
14082
|
skillRuntimeAdmissionRequired: options.skillRuntimeAdmissionRequired,
|
|
14034
14083
|
skillRetrievalRevocationReader: options.skillRetrievalRevocationReader,
|
|
@@ -217,6 +217,12 @@ import {
|
|
|
217
217
|
} from "../lib/runtime-usage-ledger.js";
|
|
218
218
|
import { runMeteredDirectModelCall } from "../lib/direct-model-usage.js";
|
|
219
219
|
import { resolveTeamMessageToolBundle } from "../lib/agent-team/team-message-tools.js";
|
|
220
|
+
import { normalizeDecisionMode } from "../lib/decision-layer/contracts.js";
|
|
221
|
+
import { createSkillDecisionRuntime } from "../lib/decision-layer/runtime.js";
|
|
222
|
+
import {
|
|
223
|
+
createDecisionProvider,
|
|
224
|
+
resolveDecisionProviderOptions,
|
|
225
|
+
} from "../lib/decision-layer/providers.js";
|
|
220
226
|
|
|
221
227
|
/**
|
|
222
228
|
* Normalize a public --permission-mode spelling to the canonical internal mode.
|
|
@@ -248,6 +254,37 @@ export function validateHeadlessInvocationOptions(options = {}) {
|
|
|
248
254
|
);
|
|
249
255
|
}
|
|
250
256
|
normalizePermissionMode(options.permissionMode);
|
|
257
|
+
resolveHeadlessSkillDecisionOptions(options);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** Normalize the opt-in typed Skill-routing experiment without acquiring egress. */
|
|
261
|
+
export function resolveHeadlessSkillDecisionOptions(options = {}) {
|
|
262
|
+
let mode;
|
|
263
|
+
try {
|
|
264
|
+
mode = normalizeDecisionMode(options.decisionMode || "off");
|
|
265
|
+
} catch {
|
|
266
|
+
throw new Error(
|
|
267
|
+
`Invalid --decision-mode "${options.decisionMode}". Expected one of: off, shadow, suggest`,
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
const timeoutMs =
|
|
271
|
+
options.decisionTimeoutMs === undefined
|
|
272
|
+
? 800
|
|
273
|
+
: Number(options.decisionTimeoutMs);
|
|
274
|
+
if (
|
|
275
|
+
!Number.isSafeInteger(timeoutMs) ||
|
|
276
|
+
timeoutMs < 50 ||
|
|
277
|
+
timeoutMs > 30_000
|
|
278
|
+
) {
|
|
279
|
+
throw new Error(
|
|
280
|
+
"Invalid --decision-timeout-ms. Expected an integer from 50 to 30000",
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
return Object.freeze({
|
|
284
|
+
mode,
|
|
285
|
+
...resolveDecisionProviderOptions(options),
|
|
286
|
+
timeoutMs,
|
|
287
|
+
});
|
|
251
288
|
}
|
|
252
289
|
|
|
253
290
|
/**
|
|
@@ -488,6 +525,7 @@ async function withHeadlessSessionHostLease(options, deps, task) {
|
|
|
488
525
|
`Invalid --output-format "${outputFormat}". Expected one of: ${VALID_OUTPUT_FORMATS.join(", ")}`,
|
|
489
526
|
);
|
|
490
527
|
}
|
|
528
|
+
const skillDecision = resolveHeadlessSkillDecisionOptions(options);
|
|
491
529
|
let resolution = null;
|
|
492
530
|
let lease = null;
|
|
493
531
|
let budgetRoot = null;
|
|
@@ -518,6 +556,22 @@ async function withHeadlessSessionHostLease(options, deps, task) {
|
|
|
518
556
|
},
|
|
519
557
|
`headless-${Date.now()}-${process.pid}`,
|
|
520
558
|
);
|
|
559
|
+
if (skillDecision.mode !== "off" && !resolution.persist) {
|
|
560
|
+
throw new Error(
|
|
561
|
+
"--decision-mode shadow/suggest requires a durable session; use --session/--resume/--continue and do not use --ephemeral",
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
if (
|
|
565
|
+
skillDecision.mode !== "off" &&
|
|
566
|
+
skillDecision.provider === "typesafe" &&
|
|
567
|
+
!deps.decisionProvider &&
|
|
568
|
+
!options.decisionApiKey &&
|
|
569
|
+
!process.env.TYPESAFE_API_KEY
|
|
570
|
+
) {
|
|
571
|
+
throw new Error(
|
|
572
|
+
"TYPESAFE_API_KEY is required when --decision-mode is shadow or suggest",
|
|
573
|
+
);
|
|
574
|
+
}
|
|
521
575
|
const authoritySessionId =
|
|
522
576
|
resolution.resumeId ||
|
|
523
577
|
(resolution.persist ? resolution.sessionId : null);
|
|
@@ -2386,6 +2440,39 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2386
2440
|
}
|
|
2387
2441
|
};
|
|
2388
2442
|
|
|
2443
|
+
const skillDecisionOptions = resolveHeadlessSkillDecisionOptions(options);
|
|
2444
|
+
let skillDecisionRuntime = null;
|
|
2445
|
+
if (skillDecisionOptions.mode !== "off") {
|
|
2446
|
+
const decisionProvider =
|
|
2447
|
+
deps.decisionProvider ||
|
|
2448
|
+
createDecisionProvider({
|
|
2449
|
+
provider: skillDecisionOptions.provider,
|
|
2450
|
+
apiKey:
|
|
2451
|
+
options.decisionApiKey ||
|
|
2452
|
+
(skillDecisionOptions.provider === "typesafe"
|
|
2453
|
+
? process.env.TYPESAFE_API_KEY
|
|
2454
|
+
: process.env.DECISION_API_KEY) ||
|
|
2455
|
+
undefined,
|
|
2456
|
+
baseUrl: skillDecisionOptions.baseUrl,
|
|
2457
|
+
model: skillDecisionOptions.model,
|
|
2458
|
+
...(deps.decisionFetch ? { fetchImpl: deps.decisionFetch } : {}),
|
|
2459
|
+
});
|
|
2460
|
+
const persistDecisionEvent = (type, data) =>
|
|
2461
|
+
persistRuntimeLedgerWrite(() => store.appendEvent(sessionId, type, data));
|
|
2462
|
+
skillDecisionRuntime = createSkillDecisionRuntime({
|
|
2463
|
+
mode: skillDecisionOptions.mode,
|
|
2464
|
+
tenantId:
|
|
2465
|
+
options.decisionTenantId || evolutionIngress?.tenantId || "cli-local",
|
|
2466
|
+
sessionId,
|
|
2467
|
+
provider: decisionProvider,
|
|
2468
|
+
persist: persistDecisionEvent,
|
|
2469
|
+
observe: (observation) =>
|
|
2470
|
+
persistDecisionEvent("skill_decision_observation", observation),
|
|
2471
|
+
sessionBudget: options.sessionBudget || null,
|
|
2472
|
+
timeoutMs: skillDecisionOptions.timeoutMs,
|
|
2473
|
+
});
|
|
2474
|
+
}
|
|
2475
|
+
|
|
2389
2476
|
// Subagent internals may contain prompts and tool results. The public
|
|
2390
2477
|
// stream exposes only stable lifecycle/progress metadata, and only with the
|
|
2391
2478
|
// explicit --include-hook-events opt-in.
|
|
@@ -2513,6 +2600,7 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2513
2600
|
apiKey,
|
|
2514
2601
|
cwd,
|
|
2515
2602
|
skillLoader: _runtimeSkillLoader,
|
|
2603
|
+
...(skillDecisionRuntime === null ? {} : { skillDecisionRuntime }),
|
|
2516
2604
|
...captureSkillRuntimeDependencies(options, evolutionIngress?.tenantId),
|
|
2517
2605
|
...(skillOutcomeIndex === null ? {} : { skillOutcomeIndex }),
|
|
2518
2606
|
...(skillVectorAuthority === null ? {} : { skillVectorAuthority }),
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as s,R as a,S as y,K as C,Q as x,V as w,_ as B,b as n}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-DZiSMYoD.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=n(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=n(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=n(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=n(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=n(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),g=String(e.getMonth()+1).padStart(2,"0"),f=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${g}-${f} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:n};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},q={class:"meta"},D={class:"actor"},M={class:"time"},R={class:"body"};function V(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[s("div",T,[s("div",q,[s("span",D,a(r.actorLabel),1),s("span",M,a(r.formattedTime),1)]),s("div",R,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 z=k(N,[["render",V],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-Dnqztg/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{z as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{I as s,J as g,U as d,c as o,K as _,V as k,S as W,R as S,F as K,Z as Q,w as M,n as C,o as R,b as T,r,P as p,Q as O,_ as U}from"./vendor-Bn1JzzAn.js";import{_ as q,u as N}from"./index-DZiSMYoD.js";import{R as z}from"./icons-DG5UD-6K.js";const D={__name:"Logs",setup(V,{expose:a}){a();const x=N(),e=r("status"),y=r(!1),v=r(""),i=r(""),c=r(""),f=r(!0),n=r(null),h={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},m=T(()=>i.value.split(`
|
|
2
|
-
`)),b=T(()=>{if(!c.value)return m.value;const t=c.value.toLowerCase();return m.value.filter(u=>u.toLowerCase().includes(t))});function L(t){return t.includes("✖")||t.includes("error")||t.includes("Error")||t.includes("failed")?"line-error":t.includes("✔")||t.includes("✓")||t.includes("success")||t.includes("running")?"line-success":t.includes("warn")||t.includes("Warn")||t.includes("○")?"line-warn":t.startsWith(" ")||t.startsWith(" ")?"line-indent":""}function l(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function w(t){if(!c.value)return t;const u=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`(${u})`,"gi"),"<mark>$1</mark>")}async function B(){y.value=!0,v.value="",i.value="";const t=h[e.value]||"status";try{const{output:u}=await x.execute(t,3e4);i.value=u,f.value&&(await C(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}catch(u){v.value=`执行失败: ${u.message}`,i.value=v.value}finally{y.value=!1}}M(b,async()=>{f.value&&(await C(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}),R(B);const H={ws:x,activeTab:e,loading:y,error:v,rawOutput:i,searchQuery:c,autoScroll:f,logContainer:n,TAB_COMMANDS:h,allLines:m,filteredLines:b,lineClass:L,escapeHtml:l,highlightSearch:w,loadLog:B,ref:r,computed:T,watch:M,nextTick:C,onMounted:R,get ReloadOutlined(){return z},get useWsStore(){return N}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},E={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},j={style:{display:"flex",gap:"10px",margin:"12px 0"}},A={ref:"logContainer",class:"log-box"},F={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},I={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},P={key:2},J=["innerHTML"];function Z(V,a,x,e,y,v){const i=s("a-checkbox"),c=s("a-button"),f=s("a-space"),n=s("a-tab-pane"),h=s("a-tabs"),m=s("a-input-search"),b=s("a-tag"),L=s("a-spin");return p(),g("div",null,[d("div",E,[a[5]||(a[5]=d("div",null,[d("h2",{class:"page-title"},"日志查看"),d("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),o(f,null,{default:_(()=>[o(i,{checked:e.autoScroll,"onUpdate:checked":a[0]||(a[0]=l=>e.autoScroll=l)},{default:_(()=>[...a[3]||(a[3]=[O("自动滚动",-1)])]),_:1},8,["checked"]),o(c,{type:"primary",ghost:"",loading:e.loading,onClick:e.loadLog},{icon:_(()=>[o(e.ReloadOutlined)]),default:_(()=>[a[4]||(a[4]=O(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),k(" Tab Selector "),o(h,{activeKey:e.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>e.activeTab=l),onChange:e.loadLog,style:{"margin-bottom":"0"}},{default:_(()=>[o(n,{key:"status",tab:"系统状态"}),o(n,{key:"doctor",tab:"环境诊断"}),o(n,{key:"skill-sources",tab:"技能来源"}),o(n,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),k(" Search Bar "),d("div",j,[o(m,{value:e.searchQuery,"onUpdate:value":a[2]||(a[2]=l=>e.searchQuery=l),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),e.filteredLines.length!==e.allLines.length?(p(),W(b,{key:0,color:"blue"},{default:_(()=>[O(S(e.filteredLines.length)+" / "+S(e.allLines.length)+" 行 ",1)]),_:1})):k("v-if",!0)]),k(" Log Output "),d("div",A,[e.loading?(p(),g("div",F,[o(L,{size:"large"}),a[6]||(a[6]=d("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):e.filteredLines.length?(p(),g("div",P,[(p(!0),g(K,null,Q(e.filteredLines,(l,w)=>(p(),g("div",{key:w,class:U(["log-line",e.lineClass(l)]),innerHTML:e.highlightSearch(e.escapeHtml(l))},null,10,J))),128))])):(p(),g("div",I,S(e.error||"暂无日志内容,点击刷新加载"),1))],512)])}const $=q(D,[["render",Z],["__scopeId","data-v-8c2906e0"],["__file","/tmp/cc-web-panel-Dnqztg/repo/packages/web-panel/src/views/Logs.vue"]]);export{$ 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-DZiSMYoD.js";import{a8 as y,M}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 M},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function D(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",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[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",D],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-Dnqztg/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DZiSMYoD.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-BgZOIvSi.js";import{a0 as t}from"./index-DZiSMYoD.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-BHenWIVD.js";import"./useFlexGapSupport-BsmR_q0r.js";import"./styleChecker-CCVi_Ww3.js";import"./index-DuvweiCz.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-C27zROxc.js";import{a0 as t}from"./index-DZiSMYoD.js";import"./vendor-Bn1JzzAn.js";import"./index-DuvweiCz.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|