chainlesschain 0.166.68 → 0.166.70
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 -5
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-CXkSNOGY.js → AIOps-BBxGVjAo.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-ysMR6gTs.js → ActionButton-SrT9X1LG.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-WGZ0sWuw.js → Analytics-D0MPWFct.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Cs2iRlQG.js → AppLayout-DlmlYhUp.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-5IdfxWz0.js → Artifacts-BzLV8tLT.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-U9V434QX.js → Audit-BWfARNeo.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BvFwxPlC.js → BackgroundAgents-AT_lu-OI.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-C9yTr9hO.js → Backup-6pH5UJRI.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BdsSwUgE.js → BaseInput-CccGGr8I.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BB_2oBgH.js → Chat-B6aQ-lXU.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-cKmA5EAa.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-v6M5m7dK.js → Checkbox-Dc_dMjlV.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CtouWSIz.js → Codegen-CHm0YK-0.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CqQJ4ORW.js → Col-IaBwOtml.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BO__QCOy.js → Community-U5N0EakJ.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-D0Kq4xlH.js → Compact-D6bK2hw-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BSLKKBjA.js → Compliance-B0G1zA62.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-VsujXW5o.js → Cowork-BvJxGzAT.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-j8DbLGi5.js → Cron-N5JOZWe9.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DWpYH1yN.js → Crosschain-CgnzS-_7.js} +1 -1
- package/src/assets/web-panel/assets/{DID-mLaRxLQh.js → DID-BTMEilVf.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Cff033Jr.js → Dashboard-Bc-1wTPH.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-B1Upt6fP.js → Dropdown-DfJLRkz2.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CPtb8joV.js → EmailListRenderer-DOkzpgap.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-CVh4Uv4g.js → EvolutionSettings-23ZdCcyg.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CrD1PhbF.js → FamilyGuardDashboard-mBhA1oWh.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-ftxrvqW5.js → Federation-C9Kmj_hs.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-9O80slC1.js → FormItemContext-CeU7fnW_.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DaYvYIj9.js → GenericCardRenderer-s-QOculU.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BKZh0YE5.js → Git-BbePEFdx.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-vWbN873j.js → Governance-PnVQJUn7.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BN6RR-l8.js → Inference-sCcd1Foj.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-x49x9m7Q.js → KnowledgeGraph-DdM6cJOh.js} +1 -1
- package/src/assets/web-panel/assets/Logs-Dznmdibo.js +2 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-nFgRqRUW.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DpPu6XQp.js → Marketplace-DQ76qwhE.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BR0ksiax.js → McpTools-CZqTYtmV.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BXznJ5-C.js → Memory-CWtnaJCd.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BHSOpfv7.js → MobileBridge-C3Ngpr63.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DdWmgIup.js → MobileProjects-CpJPlABd.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-D9Rk_IGT.js → Mtc-CKL_fDu2.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit--i8q1lKc.js → MtcAudit-CIDSj87F.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BHnNG7R9.js → Multisig-BoLpIo5g.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Duo1ij2_.js → NLProgramming-CWJX8SH5.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-B44Le73p.js → Notes-CdGvaOEe.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-C3oy_7Gf.js → NotificationSettings-C067lOY0.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Da_73SI5.js → OrderTableRenderer-Bkdj8JZF.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-ChsSwKxT.js → Organization-CwhP3jqH.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DR5G_cCn.js → Overflow-Ks7pF8mI.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-yfaobqow.js → P2P-BytzAo-_.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-f7PUa-As.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-DhinFvtE.js → Permissions-DYgQYc6c.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CfeNVic1.js → PersonalDataHub-xa4C85B5.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-CGKO26Nk.js → Pipeline-Ci4P4D_9.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CxxfYEJh.js → Privacy-Bc0i4kUv.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CZsaAab9.js → ProjectInit-BNQNNbq1.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BUm_6clQ.js → ProjectSettings-C9a52UVV.js} +2 -2
- package/src/assets/web-panel/assets/Projects-DoqbdOhN.js +1 -0
- package/src/assets/web-panel/assets/{Providers-D28VqPja.js → Providers-aqNSVXqu.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Cj200vUb.js → QrScannerModal-BhiK-alo.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BGpnEiam.js → QuickAsk-DqiqZt1A.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Ix79Tpni.js → Recommend-c0WOkaCq.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BdGAFbIk.js → RemoteSession-Cf_4L-X3.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-B1Lis0Wk.js → Reputation-BVFrZQ_z.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Ba_okwOW.js → Row-CZ1AwkDl.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DDbEuI-m.js → RssFeed--WyTTgfC.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D89wAkMy.js → Search-BgxZ24St.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CJKCKAU-.js → Security-DVkmHsXI.js} +2 -2
- package/src/assets/web-panel/assets/{Services-mitEc1XV.js → Services-CTZQQWlI.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CnBjLDfX.js → Skeleton-DWwUMTlS.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DSzDYvH3.js → Skills-D6iyc72U.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CglJ_4p3.js → Sla-ChMCfgKV.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-CtwWxhK7.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-Cq7o6fmr.js → SyncSettings-DAbLxMOM.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-Dvm355ug.js +1 -0
- package/src/assets/web-panel/assets/{Templates-bY0wSbQM.js → Templates-Dig8IEP-.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BAyyl0qX.js → Tenant-DeR5U47w.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BGBhSpqc.js → Terminal-CHXg-gsD.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BvW5lXYz.js → TimelineRenderer-Bi4GJgwI.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Ua_LIx8-.js → Tokens-D6ubE4ut.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BGwb2KL1.js → Trigger-CUQI4HlL.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CD2IEHvj.js → Trust-CgTAWXd7.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D5LetK6P.js → UkeySign-R2bAawIX.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-oP7ehFgR.js → VideoEditing-46u-3sdP.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BBtu4-xa.js → Wallet-DdrACErK.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-iSPRU4Ht.js → WebAuthn-Cq266Ihg.js} +2 -2
- package/src/assets/web-panel/assets/{WorkflowEditor-DuEDhQmB.js → WorkflowEditor-DV0ES1wc.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DGDgqvvm.js → chat-D5xy9-vl.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DGQMWa1-.js → colors-BBs5Knx_.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-COVznBL4.js → compact-item-BuFzMOeP.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DIxVeHXI.js → createContext-D6gC8UX1.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-jGzCD1Og.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DkxZO3E9.js → hasIn-kBeod51t.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV0H83eS.js → index-43tYtngc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAL2p7YC.js → index-8LcW9fNg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgM-3a1w.js → index-AVkVBAgT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQm7ntcn.js → index-B9sYKnfE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOTshZNx.js → index-BEipvyo3.js} +1 -1
- package/src/assets/web-panel/assets/{index-CV0KnNqR.js → index-BJtaYRSM.js} +1 -1
- package/src/assets/web-panel/assets/{index-b2_M6o20.js → index-BNgGahh_.js} +1 -1
- package/src/assets/web-panel/assets/{index-jo7DbU0w.js → index-BPfLeT9D.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpZxDiVK.js → index-BrmMhNQe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBw2MLIe.js → index-C61TSHk7.js} +1 -1
- package/src/assets/web-panel/assets/{index-usmG13jq.js → index-C9RbA1u6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaWQSp5a.js → index-CDc8ZBhw.js} +1 -1
- package/src/assets/web-panel/assets/{index-b_0qTo8O.js → index-CSR6G5y_.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci34vbh0.js → index-Cc0nr-mJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-vXrktF3e.js → index-CdXTYNGI.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3bN6751.js → index-CoF4d2sR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DU1ArKl5.js → index-Cy8WOPIM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BY6MSbWT.js → index-D5w7mVUz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcNGQWum.js → index-D8i4RtvF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDwPBGdA.js → index-D8vRjV35.js} +1 -1
- package/src/assets/web-panel/assets/{index-BY9Ossof.js → index-DLO3EJ28.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHH95jcm.js → index-DP74sxrD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bv0_u0ze.js → index-DT8dVo6h.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNRRrP3-.js → index-DVY9bZaC.js} +1 -1
- package/src/assets/web-panel/assets/index-DVuuRGW6.js +1 -0
- package/src/assets/web-panel/assets/{index-BAlrovUm.js → index-DWpwO1tg.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZcqTvPnt.js → index-Db_4IGgr.js} +1 -1
- package/src/assets/web-panel/assets/{index-dfYkGovV.js → index-DiEf8pdZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3XeNS82.js → index-DjJD0ItG.js} +3 -3
- package/src/assets/web-panel/assets/index-DjkHUbjO.js +1 -0
- package/src/assets/web-panel/assets/{index-BUqwlzc8.js → index-DkcAtMWM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyMHF2Bi.js → index-Dn4FQfDW.js} +1 -1
- package/src/assets/web-panel/assets/{index-2JZizEPc.js → index-DuFsuweQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmduvOYT.js → index-WMRvzqet.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cligb-Dl.js → index-Xmeq1989.js} +1 -1
- package/src/assets/web-panel/assets/{index-ECoDhyH3.js → index-ZMxLi0bZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CokrhbY2.js → index-_j1YrDlh.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClQVcrFt.js → index-qXVSh34h.js} +1 -1
- package/src/assets/web-panel/assets/{index-0ToBFsvW.js → index-slOdrjUJ.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CkSeiBwL.js → initDefaultProps-CdcTIUHj.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CSzhDP0s.js → motion-DMIDKmqt.js} +1 -1
- package/src/assets/web-panel/assets/{move-mgCt4iC6.js → move-DRq4Pk0-.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BEZBLcKt.js → mtc-parser-SYFo5WKx.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BsHctMEr.js → omit-B_X6VxfU.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-1BHamnGW.js → pickAttrs-DnuDKnw_.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow--Vb4Bd7l.js → placementArrow-DBFRmoTN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DD33SqCm.js → responsiveObserve-BaUVjf33.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DfrLtxgK.js → slide-rLCDXDVC.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-D9Pe_gXW.js → statusUtils-CzNprwdC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-0NY5iMun.js → styleChecker-DsaDdSa9.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DSsZstwg.js → useFlexGapSupport-BKHgNy2p.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BU8HyH59.js → useFs-C_OQYo_E.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D_xttink.js → usePersonalDataHub-CiGRKQ5k.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-39VhX2lM.js → vnode-C9-ch6HP.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D5KQ8Pks.js → zoom-HoUcoyA4.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 +84 -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/runtime.js +238 -0
- package/src/lib/decision-layer/typesafe-provider.js +74 -0
- package/src/lib/evolution/evolution-deployment-loader.js +39 -0
- package/src/lib/evolution/skill-writer-inventory-manifest.js +0 -39
- package/src/lib/evolution/volcengine-function-execution-authority.js +2949 -0
- package/src/lib/evolution/volcengine-function-process-executor.js +615 -0
- package/src/lib/evolution/volcengine-function-replay-store.js +836 -0
- package/src/lib/evolution/volcengine-function-revocation-status-floor-store.js +480 -0
- package/src/runtime/agent-core.js +49 -0
- package/src/runtime/headless-runner.js +79 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpf1hDUl.js +0 -1
- package/src/assets/web-panel/assets/Logs-Co2EPLsJ.js +0 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-D7wIB-c7.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-DgimH6Jp.js +0 -7
- package/src/assets/web-panel/assets/Projects-Capr8bVq.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BicWJS7f.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DOxFOBpU.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CjR9h-Z_.js +0 -1
- package/src/assets/web-panel/assets/index-D_nxBMX5.js +0 -1
- package/src/assets/web-panel/assets/index-z_cTUMX-.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,74 @@
|
|
|
1
|
+
import { openDecisionProviderAuthority } from "./provider-authority.js";
|
|
2
|
+
|
|
3
|
+
const DEFAULT_BASE_URL = "https://api.typesafe.ai";
|
|
4
|
+
|
|
5
|
+
function endpointFor(baseUrl) {
|
|
6
|
+
const parsed = new URL(baseUrl || DEFAULT_BASE_URL);
|
|
7
|
+
if (
|
|
8
|
+
parsed.protocol !== "https:" &&
|
|
9
|
+
parsed.hostname !== "127.0.0.1" &&
|
|
10
|
+
parsed.hostname !== "localhost"
|
|
11
|
+
) {
|
|
12
|
+
throw new TypeError("decision provider URL must use HTTPS or loopback");
|
|
13
|
+
}
|
|
14
|
+
parsed.pathname = `${parsed.pathname.replace(/\/$/u, "")}/v1/systemone`;
|
|
15
|
+
parsed.search = "";
|
|
16
|
+
parsed.hash = "";
|
|
17
|
+
return parsed.toString();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function boundedSecret(value) {
|
|
21
|
+
if (typeof value !== "string" || value.length < 1 || value.length > 8192) {
|
|
22
|
+
throw new TypeError("TypeSafe API key is required");
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function providerError(status) {
|
|
28
|
+
const error = new Error(
|
|
29
|
+
`TypeSafe decision request failed with status ${status}`,
|
|
30
|
+
);
|
|
31
|
+
error.code = "CC_DECISION_PROVIDER_HTTP_ERROR";
|
|
32
|
+
error.status = status;
|
|
33
|
+
return error;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function createTypeSafeDecisionProvider({
|
|
37
|
+
apiKey,
|
|
38
|
+
baseUrl = DEFAULT_BASE_URL,
|
|
39
|
+
model = "jev-latest",
|
|
40
|
+
fetchImpl = globalThis.fetch,
|
|
41
|
+
} = {}) {
|
|
42
|
+
const secret = boundedSecret(apiKey);
|
|
43
|
+
if (typeof fetchImpl !== "function") {
|
|
44
|
+
throw new TypeError("decision provider fetch implementation is required");
|
|
45
|
+
}
|
|
46
|
+
const endpoint = endpointFor(baseUrl);
|
|
47
|
+
return openDecisionProviderAuthority({
|
|
48
|
+
provider: "typesafe",
|
|
49
|
+
model,
|
|
50
|
+
decide: async (request, { signal } = {}) => {
|
|
51
|
+
const response = await fetchImpl(endpoint, {
|
|
52
|
+
method: "POST",
|
|
53
|
+
headers: {
|
|
54
|
+
authorization: `Bearer ${secret}`,
|
|
55
|
+
"content-type": "application/json",
|
|
56
|
+
},
|
|
57
|
+
body: JSON.stringify({
|
|
58
|
+
model,
|
|
59
|
+
state: request.payload.state,
|
|
60
|
+
questions: request.payload.questions,
|
|
61
|
+
}),
|
|
62
|
+
signal,
|
|
63
|
+
});
|
|
64
|
+
if (!response?.ok) throw providerError(response?.status ?? 0);
|
|
65
|
+
const body = await response.json();
|
|
66
|
+
return {
|
|
67
|
+
provider: "typesafe",
|
|
68
|
+
model: typeof body?.model === "string" ? body.model : model,
|
|
69
|
+
answers: body?.answers,
|
|
70
|
+
usage: body?.usage,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
@@ -281,6 +281,10 @@ async function loadBuiltInFactories(commandName) {
|
|
|
281
281
|
browserQuarantineOperatorRevocation,
|
|
282
282
|
browserQuarantineLockMaintenance,
|
|
283
283
|
browserDownloadArtifactDisposal,
|
|
284
|
+
volcengineFunctionExecution,
|
|
285
|
+
volcengineFunctionProcessExecutor,
|
|
286
|
+
volcengineFunctionReplay,
|
|
287
|
+
volcengineFunctionRevocationStatusFloor,
|
|
284
288
|
ledgerPorts,
|
|
285
289
|
artifactPorts,
|
|
286
290
|
ledgerBackend,
|
|
@@ -313,6 +317,10 @@ async function loadBuiltInFactories(commandName) {
|
|
|
313
317
|
import("./browser-quarantine-operator-revocation-authority.js"),
|
|
314
318
|
import("./browser-quarantine-lock-maintenance-authority.js"),
|
|
315
319
|
import("./browser-download-artifact-disposal-authority.js"),
|
|
320
|
+
import("./volcengine-function-execution-authority.js"),
|
|
321
|
+
import("./volcengine-function-process-executor.js"),
|
|
322
|
+
import("./volcengine-function-replay-store.js"),
|
|
323
|
+
import("./volcengine-function-revocation-status-floor-store.js"),
|
|
316
324
|
import("./evolution-ledger-ports.js"),
|
|
317
325
|
import("./evolution-artifact-ports.js"),
|
|
318
326
|
import("./evolution-ledger-file-backend.js"),
|
|
@@ -443,6 +451,22 @@ async function loadBuiltInFactories(commandName) {
|
|
|
443
451
|
browserQuarantineLockMaintenance.createBrowserQuarantineLockMaintenanceAuthority,
|
|
444
452
|
createBrowserDownloadArtifactDisposalAuthority:
|
|
445
453
|
browserDownloadArtifactDisposal.createBrowserDownloadArtifactDisposalAuthority,
|
|
454
|
+
createVolcengineFunctionExecutionAuthority:
|
|
455
|
+
volcengineFunctionExecution.createVolcengineFunctionExecutionAuthority,
|
|
456
|
+
createVolcengineFunctionProcessExecutionAuthority:
|
|
457
|
+
volcengineFunctionExecution.createVolcengineFunctionProcessExecutionAuthority,
|
|
458
|
+
revokeVolcengineFunctionExecutionAuthority:
|
|
459
|
+
volcengineFunctionExecution.revokeVolcengineFunctionExecutionAuthority,
|
|
460
|
+
createVolcengineFunctionRevocationAuthority:
|
|
461
|
+
volcengineFunctionExecution.createVolcengineFunctionRevocationAuthority,
|
|
462
|
+
createVolcengineFunctionRevocationEvidenceResolver:
|
|
463
|
+
volcengineFunctionExecution.createVolcengineFunctionRevocationEvidenceResolver,
|
|
464
|
+
createVolcengineFunctionProcessExecutor:
|
|
465
|
+
volcengineFunctionProcessExecutor.createVolcengineFunctionProcessExecutor,
|
|
466
|
+
createVolcengineFunctionReplayStore:
|
|
467
|
+
volcengineFunctionReplay.createVolcengineFunctionReplayStore,
|
|
468
|
+
createVolcengineFunctionRevocationStatusFloorStore:
|
|
469
|
+
volcengineFunctionRevocationStatusFloor.createVolcengineFunctionRevocationStatusFloorStore,
|
|
446
470
|
createEvolutionLedgerDurableArtifactResolver:
|
|
447
471
|
ledgerPorts.createEvolutionLedgerDurableArtifactResolver,
|
|
448
472
|
createEvolutionArtifactPorts: (options) =>
|
|
@@ -799,6 +823,12 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
799
823
|
"createBrowserQuarantineOperatorRevocationAuthority",
|
|
800
824
|
"createBrowserQuarantineLockMaintenanceAuthority",
|
|
801
825
|
"createBrowserDownloadArtifactDisposalAuthority",
|
|
826
|
+
"createVolcengineFunctionExecutionAuthority",
|
|
827
|
+
"createVolcengineFunctionProcessExecutionAuthority",
|
|
828
|
+
"createVolcengineFunctionRevocationAuthority",
|
|
829
|
+
"createVolcengineFunctionRevocationEvidenceResolver",
|
|
830
|
+
"createVolcengineFunctionReplayStore",
|
|
831
|
+
"createVolcengineFunctionRevocationStatusFloorStore",
|
|
802
832
|
];
|
|
803
833
|
for (const name of providerFactories) {
|
|
804
834
|
if (typeof factories[name] !== "function") continue;
|
|
@@ -912,6 +942,15 @@ function bindFactoriesToModule(factories, moduleDigest) {
|
|
|
912
942
|
return factories.createEvolutionEvalProcessSupervisor(options);
|
|
913
943
|
};
|
|
914
944
|
}
|
|
945
|
+
if (typeof factories.createVolcengineFunctionProcessExecutor === "function") {
|
|
946
|
+
result.createVolcengineFunctionProcessExecutor = (options = {}) => {
|
|
947
|
+
if (options?.target?.handlerArtifactDigest !== moduleDigest)
|
|
948
|
+
throw new Error(
|
|
949
|
+
"Volcengine function process target handlerArtifactDigest must equal the authenticated deployment module digest",
|
|
950
|
+
);
|
|
951
|
+
return factories.createVolcengineFunctionProcessExecutor(options);
|
|
952
|
+
};
|
|
953
|
+
}
|
|
915
954
|
return Object.freeze(result);
|
|
916
955
|
}
|
|
917
956
|
|
|
@@ -604,45 +604,6 @@ export const SKILL_WRITER_INVENTORY = Object.freeze({
|
|
|
604
604
|
],
|
|
605
605
|
},
|
|
606
606
|
}),
|
|
607
|
-
writer({
|
|
608
|
-
id: "desktop-skills-create-ipc",
|
|
609
|
-
surface: "desktop",
|
|
610
|
-
triggerClass: "manual",
|
|
611
|
-
targetAuthority: "legacy-active",
|
|
612
|
-
mutationType: "skill-bytes",
|
|
613
|
-
discoverySymbol: "ipc:skills:create",
|
|
614
|
-
entrypoint: {
|
|
615
|
-
file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
|
|
616
|
-
symbol: "ipc:skills:create",
|
|
617
|
-
evidence: ['ipcMain.handle("skills:create"'],
|
|
618
|
-
},
|
|
619
|
-
mutation: {
|
|
620
|
-
file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
|
|
621
|
-
symbol: "ipc:skills:create",
|
|
622
|
-
evidence: [
|
|
623
|
-
'path.join(targetDir, "SKILL.md")',
|
|
624
|
-
"await fs.writeFile(skillMdPath, content",
|
|
625
|
-
],
|
|
626
|
-
},
|
|
627
|
-
}),
|
|
628
|
-
writer({
|
|
629
|
-
id: "desktop-skills-enabled-ipc",
|
|
630
|
-
surface: "desktop",
|
|
631
|
-
triggerClass: "manual",
|
|
632
|
-
targetAuthority: "legacy-active",
|
|
633
|
-
mutationType: "active-selection",
|
|
634
|
-
discoverySymbol: null,
|
|
635
|
-
entrypoint: {
|
|
636
|
-
file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
|
|
637
|
-
symbol: "ipc:skills:set-enabled",
|
|
638
|
-
evidence: ['ipcMain.handle("skills:set-enabled"'],
|
|
639
|
-
},
|
|
640
|
-
mutation: {
|
|
641
|
-
file: "desktop-app-vue/src/main/ai-engine/cowork/skills/skills-ipc.js",
|
|
642
|
-
symbol: "ipc:skills:set-enabled",
|
|
643
|
-
evidence: ["skill.config.enabled = enabled"],
|
|
644
|
-
},
|
|
645
|
-
}),
|
|
646
607
|
writer({
|
|
647
608
|
id: "desktop-skill-creator-create",
|
|
648
609
|
surface: "desktop",
|