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.
Files changed (177) hide show
  1. package/README.md +24 -5
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-CXkSNOGY.js → AIOps-BBxGVjAo.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-ysMR6gTs.js → ActionButton-SrT9X1LG.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-WGZ0sWuw.js → Analytics-D0MPWFct.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-Cs2iRlQG.js → AppLayout-DlmlYhUp.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-5IdfxWz0.js → Artifacts-BzLV8tLT.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-U9V434QX.js → Audit-BWfARNeo.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-BvFwxPlC.js → BackgroundAgents-AT_lu-OI.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-C9yTr9hO.js → Backup-6pH5UJRI.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-BdsSwUgE.js → BaseInput-CccGGr8I.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-BB_2oBgH.js → Chat-B6aQ-lXU.js} +6 -6
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-cKmA5EAa.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-v6M5m7dK.js → Checkbox-Dc_dMjlV.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-CtouWSIz.js → Codegen-CHm0YK-0.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-CqQJ4ORW.js → Col-IaBwOtml.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-BO__QCOy.js → Community-U5N0EakJ.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-D0Kq4xlH.js → Compact-D6bK2hw-.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BSLKKBjA.js → Compliance-B0G1zA62.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-VsujXW5o.js → Cowork-BvJxGzAT.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-j8DbLGi5.js → Cron-N5JOZWe9.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-DWpYH1yN.js → Crosschain-CgnzS-_7.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-mLaRxLQh.js → DID-BTMEilVf.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-Cff033Jr.js → Dashboard-Bc-1wTPH.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-B1Upt6fP.js → Dropdown-DfJLRkz2.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-CPtb8joV.js → EmailListRenderer-DOkzpgap.js} +1 -1
  27. package/src/assets/web-panel/assets/{EvolutionSettings-CVh4Uv4g.js → EvolutionSettings-23ZdCcyg.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CrD1PhbF.js → FamilyGuardDashboard-mBhA1oWh.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-ftxrvqW5.js → Federation-C9Kmj_hs.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-9O80slC1.js → FormItemContext-CeU7fnW_.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DaYvYIj9.js → GenericCardRenderer-s-QOculU.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-BKZh0YE5.js → Git-BbePEFdx.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-vWbN873j.js → Governance-PnVQJUn7.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-BN6RR-l8.js → Inference-sCcd1Foj.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-x49x9m7Q.js → KnowledgeGraph-DdM6cJOh.js} +1 -1
  36. package/src/assets/web-panel/assets/Logs-Dznmdibo.js +2 -0
  37. package/src/assets/web-panel/assets/MarkdownRenderer-nFgRqRUW.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-DpPu6XQp.js → Marketplace-DQ76qwhE.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-BR0ksiax.js → McpTools-CZqTYtmV.js} +3 -3
  40. package/src/assets/web-panel/assets/{Memory-BXznJ5-C.js → Memory-CWtnaJCd.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BHSOpfv7.js → MobileBridge-C3Ngpr63.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-DdWmgIup.js → MobileProjects-CpJPlABd.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-D9Rk_IGT.js → Mtc-CKL_fDu2.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit--i8q1lKc.js → MtcAudit-CIDSj87F.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-BHnNG7R9.js → Multisig-BoLpIo5g.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Duo1ij2_.js → NLProgramming-CWJX8SH5.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-B44Le73p.js → Notes-CdGvaOEe.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-C3oy_7Gf.js → NotificationSettings-C067lOY0.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-Da_73SI5.js → OrderTableRenderer-Bkdj8JZF.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-ChsSwKxT.js → Organization-CwhP3jqH.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-DR5G_cCn.js → Overflow-Ks7pF8mI.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-yfaobqow.js → P2P-BytzAo-_.js} +2 -2
  53. package/src/assets/web-panel/assets/PdhVaultBrowser-f7PUa-As.js +7 -0
  54. package/src/assets/web-panel/assets/{Permissions-DhinFvtE.js → Permissions-DYgQYc6c.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-CfeNVic1.js → PersonalDataHub-xa4C85B5.js} +3 -3
  56. package/src/assets/web-panel/assets/{Pipeline-CGKO26Nk.js → Pipeline-Ci4P4D_9.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-CxxfYEJh.js → Privacy-Bc0i4kUv.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-CZsaAab9.js → ProjectInit-BNQNNbq1.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-BUm_6clQ.js → ProjectSettings-C9a52UVV.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-DoqbdOhN.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-D28VqPja.js → Providers-aqNSVXqu.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-Cj200vUb.js → QrScannerModal-BhiK-alo.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-BGpnEiam.js → QuickAsk-DqiqZt1A.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-Ix79Tpni.js → Recommend-c0WOkaCq.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-BdGAFbIk.js → RemoteSession-Cf_4L-X3.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-B1Lis0Wk.js → Reputation-BVFrZQ_z.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-Ba_okwOW.js → Row-CZ1AwkDl.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-DDbEuI-m.js → RssFeed--WyTTgfC.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-D89wAkMy.js → Search-BgxZ24St.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-CJKCKAU-.js → Security-DVkmHsXI.js} +2 -2
  71. package/src/assets/web-panel/assets/{Services-mitEc1XV.js → Services-CTZQQWlI.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-CnBjLDfX.js → Skeleton-DWwUMTlS.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-DSzDYvH3.js → Skills-D6iyc72U.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-CglJ_4p3.js → Sla-ChMCfgKV.js} +1 -1
  75. package/src/assets/web-panel/assets/SpeechSettings-CtwWxhK7.js +1 -0
  76. package/src/assets/web-panel/assets/{SyncSettings-Cq7o6fmr.js → SyncSettings-DAbLxMOM.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-Dvm355ug.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-bY0wSbQM.js → Templates-Dig8IEP-.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-BAyyl0qX.js → Tenant-DeR5U47w.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-BGBhSpqc.js → Terminal-CHXg-gsD.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-BvW5lXYz.js → TimelineRenderer-Bi4GJgwI.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-Ua_LIx8-.js → Tokens-D6ubE4ut.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-BGwb2KL1.js → Trigger-CUQI4HlL.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-CD2IEHvj.js → Trust-CgTAWXd7.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-D5LetK6P.js → UkeySign-R2bAawIX.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-oP7ehFgR.js → VideoEditing-46u-3sdP.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-BBtu4-xa.js → Wallet-DdrACErK.js} +2 -2
  88. package/src/assets/web-panel/assets/{WebAuthn-iSPRU4Ht.js → WebAuthn-Cq266Ihg.js} +2 -2
  89. package/src/assets/web-panel/assets/{WorkflowEditor-DuEDhQmB.js → WorkflowEditor-DV0ES1wc.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-DGDgqvvm.js → chat-D5xy9-vl.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-DGQMWa1-.js → colors-BBs5Knx_.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-COVznBL4.js → compact-item-BuFzMOeP.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-DIxVeHXI.js → createContext-D6gC8UX1.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-jGzCD1Og.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DkxZO3E9.js → hasIn-kBeod51t.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DV0H83eS.js → index-43tYtngc.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BAL2p7YC.js → index-8LcW9fNg.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BgM-3a1w.js → index-AVkVBAgT.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BQm7ntcn.js → index-B9sYKnfE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BOTshZNx.js → index-BEipvyo3.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CV0KnNqR.js → index-BJtaYRSM.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-b2_M6o20.js → index-BNgGahh_.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-jo7DbU0w.js → index-BPfLeT9D.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CpZxDiVK.js → index-BrmMhNQe.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BBw2MLIe.js → index-C61TSHk7.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-usmG13jq.js → index-C9RbA1u6.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DaWQSp5a.js → index-CDc8ZBhw.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-b_0qTo8O.js → index-CSR6G5y_.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Ci34vbh0.js → index-Cc0nr-mJ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-vXrktF3e.js → index-CdXTYNGI.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C3bN6751.js → index-CoF4d2sR.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DU1ArKl5.js → index-Cy8WOPIM.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BY6MSbWT.js → index-D5w7mVUz.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CcNGQWum.js → index-D8i4RtvF.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DDwPBGdA.js → index-D8vRjV35.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BY9Ossof.js → index-DLO3EJ28.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BHH95jcm.js → index-DP74sxrD.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Bv0_u0ze.js → index-DT8dVo6h.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CNRRrP3-.js → index-DVY9bZaC.js} +1 -1
  120. package/src/assets/web-panel/assets/index-DVuuRGW6.js +1 -0
  121. package/src/assets/web-panel/assets/{index-BAlrovUm.js → index-DWpwO1tg.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-ZcqTvPnt.js → index-Db_4IGgr.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-dfYkGovV.js → index-DiEf8pdZ.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C3XeNS82.js → index-DjJD0ItG.js} +3 -3
  125. package/src/assets/web-panel/assets/index-DjkHUbjO.js +1 -0
  126. package/src/assets/web-panel/assets/{index-BUqwlzc8.js → index-DkcAtMWM.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CyMHF2Bi.js → index-Dn4FQfDW.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-2JZizEPc.js → index-DuFsuweQ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DmduvOYT.js → index-WMRvzqet.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Cligb-Dl.js → index-Xmeq1989.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-ECoDhyH3.js → index-ZMxLi0bZ.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CokrhbY2.js → index-_j1YrDlh.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-ClQVcrFt.js → index-qXVSh34h.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-0ToBFsvW.js → index-slOdrjUJ.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-CkSeiBwL.js → initDefaultProps-CdcTIUHj.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-CSzhDP0s.js → motion-DMIDKmqt.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-mgCt4iC6.js → move-DRq4Pk0-.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-BEZBLcKt.js → mtc-parser-SYFo5WKx.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-BsHctMEr.js → omit-B_X6VxfU.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-1BHamnGW.js → pickAttrs-DnuDKnw_.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow--Vb4Bd7l.js → placementArrow-DBFRmoTN.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-DD33SqCm.js → responsiveObserve-BaUVjf33.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-DfrLtxgK.js → slide-rLCDXDVC.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-D9Pe_gXW.js → statusUtils-CzNprwdC.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-0NY5iMun.js → styleChecker-DsaDdSa9.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-DSsZstwg.js → useFlexGapSupport-BKHgNy2p.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-BU8HyH59.js → useFs-C_OQYo_E.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-D_xttink.js → usePersonalDataHub-CiGRKQ5k.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-39VhX2lM.js → vnode-C9-ch6HP.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-D5KQ8Pks.js → zoom-HoUcoyA4.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +1 -1
  153. package/src/commands/agent.js +84 -0
  154. package/src/data/changelog.json +26 -0
  155. package/src/lib/decision-layer/benchmark.js +164 -0
  156. package/src/lib/decision-layer/contracts.js +377 -0
  157. package/src/lib/decision-layer/provider-authority.js +44 -0
  158. package/src/lib/decision-layer/runtime.js +238 -0
  159. package/src/lib/decision-layer/typesafe-provider.js +74 -0
  160. package/src/lib/evolution/evolution-deployment-loader.js +39 -0
  161. package/src/lib/evolution/skill-writer-inventory-manifest.js +0 -39
  162. package/src/lib/evolution/volcengine-function-execution-authority.js +2949 -0
  163. package/src/lib/evolution/volcengine-function-process-executor.js +615 -0
  164. package/src/lib/evolution/volcengine-function-replay-store.js +836 -0
  165. package/src/lib/evolution/volcengine-function-revocation-status-floor-store.js +480 -0
  166. package/src/runtime/agent-core.js +49 -0
  167. package/src/runtime/headless-runner.js +79 -0
  168. package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpf1hDUl.js +0 -1
  169. package/src/assets/web-panel/assets/Logs-Co2EPLsJ.js +0 -2
  170. package/src/assets/web-panel/assets/MarkdownRenderer-D7wIB-c7.js +0 -1
  171. package/src/assets/web-panel/assets/PdhVaultBrowser-DgimH6Jp.js +0 -7
  172. package/src/assets/web-panel/assets/Projects-Capr8bVq.js +0 -1
  173. package/src/assets/web-panel/assets/SpeechSettings-BicWJS7f.js +0 -1
  174. package/src/assets/web-panel/assets/Tasks-DOxFOBpU.js +0 -1
  175. package/src/assets/web-panel/assets/devWarning-CjR9h-Z_.js +0 -1
  176. package/src/assets/web-panel/assets/index-D_nxBMX5.js +0 -1
  177. 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",