chainlesschain 0.163.0 → 0.163.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-CSy9BB6Z.js → AIOps-DnGsmsqJ.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CFyrEVfq.js → ActionButton-CrO6fcQ7.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-8419vb47.js → Analytics-DsBdOaP2.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CHu3Hkdx.js → AppLayout-DmQslKUB.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-DJnt57Fs.js → Artifacts-BvyrT_QQ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CHMq9ajE.js → Audit-prndoLiC.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Cyfa4ub2.js → BackgroundAgents-DOTFyA55.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ACXUrUv7.js → Backup-9zOnPp_8.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DjC-3qRE.js → BaseInput-C4PC6sAG.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-7_VDQ851.js → Chat-BBAF-W9v.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-B4zct0dY.js → ChatBubbleRenderer-CWhvvloO.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DxbDl_rk.js → Checkbox-BI9iculd.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BvZa5854.js → Codegen-3DP9BCKb.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CX5Ow2Zl.js → Col-df-2TnJX.js} +1 -1
- package/src/assets/web-panel/assets/{Community-wFun-jSg.js → Community-CHs8gG_A.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-C6vJDuSn.js → Compact-CDfF6q7V.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Cm4sBytH.js → Compliance-CthrDnO7.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DiEcMwE8.js → Cowork-HjIqsWJw.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-RbeexsSQ.js → Cron-BKc196fb.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BBsyCKOp.js → Crosschain-CJnjdc8W.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DE36g7Hz.js → DID-BHUy-8Q2.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CdfLSTz1.js → Dashboard-QDB7sKeY.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CyaT6SyW.js → Dropdown-DStcVK11.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-Nv_66bkM.js → EmailListRenderer-BwSUskMJ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-Di-Sb-Ad.js → FamilyGuardDashboard-DgF_kurT.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B3mdht-U.js → Federation-k8wvv-wN.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BeP93u4f.js → FormItemContext-C11qoq2r.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CETLayUr.js → GenericCardRenderer-BIIpr9kg.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Bsat6hgI.js → Git-BlA1exTe.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-YVmA7SwN.js → Governance-CYa1ZYM4.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DCa94nGl.js → Inference-6_kKVIt6.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CIKEU7T0.js → KnowledgeGraph-CB4AwxYy.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DUxP0MnS.js → Logs-xf7nHFAe.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-Bf3DEqP6.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-BU0X2lqu.js → Marketplace-aPg8e4Jt.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BSsg58nZ.js → McpTools-C-TNlVUf.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-CjqNIXlO.js → Memory-DMTPIpGa.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DSsa4doG.js → MobileBridge-BxyvveRq.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DyPCrAyQ.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-Du080G7t.js → Mtc-BdhqNXp6.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-JzQk-arw.js → MtcAudit-Cz-HFxzW.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-BMVT5Uln.js → Multisig-CIUaFNsx.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D_38QYjs.js → NLProgramming-CWe6-J17.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DvbdjNm5.js → Notes-vYAKeviU.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DVHCW6ii.js → NotificationSettings-DQL9-2d7.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DmMBFD3g.js → OrderTableRenderer-DnXj1jBn.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DC-9pAmP.js → Organization-B3spU8AN.js} +2 -2
- package/src/assets/web-panel/assets/{Overflow-BRxWq0Qq.js → Overflow-DgEwo7vm.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CUdzhyLH.js → P2P-hujMRH8X.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CwG21s9P.js → PdhVaultBrowser-C_qhdg9h.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-6bHd4zgK.js → Permissions-vp7LMcSf.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BXgTDCba.js → PersonalDataHub-Dxr5Hgnq.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BFhKCBNj.js → Pipeline-DEPZqqH4.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Byz9IqUF.js → Privacy-DTpDiKPe.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B9LNoyoN.js → ProjectInit-jDJsRWmF.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DEj4eVdl.js → ProjectSettings-Dhor5RWH.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BAAvus06.js → Projects-08xUDZGt.js} +1 -1
- package/src/assets/web-panel/assets/Providers-BGs47s1a.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-CeDey0SJ.js → QrScannerModal-CjIw-wIb.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-exUvRIgX.js → QuickAsk-DX6jcqoi.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-4hJWmtSI.js → Recommend-DopXkhar.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BmYUpl0m.js → RemoteSession-BLvqJE9c.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-B_txYAyY.js → Reputation-DhRj2Me7.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BPtqOqGh.js → Row-DQ53vuPq.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CyWTxmq0.js → RssFeed-BslvwiBD.js} +3 -3
- package/src/assets/web-panel/assets/{Search-cItU1tmC.js → Search-DJKBDNKZ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-B0Z9_BUt.js → Security-COhpxHER.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Dzpz2uFp.js → Services-dbulD6cI.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CBtoylP8.js → Skeleton-ciIVNfhC.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Cw9RJiVn.js → Skills-AiRTkTCk.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-D2vLfvgl.js → Sla-DDMcWYBc.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-I9dKbcOU.js → SpeechSettings-BPxWbpXO.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BOju53RT.js → SyncSettings-BoEOXCyg.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-CEYFJwmr.js +1 -0
- package/src/assets/web-panel/assets/{Templates-C2ttpPql.js → Templates-UowY8Ixe.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-XQ6Qg8-Q.js → Tenant-DauSLQXN.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DYB9dUnS.js → Terminal-DBj7Jneq.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-gShtO4I8.js → TimelineRenderer-UMrPwoZC.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BvoJTCJg.js → Tokens-4ea96-bn.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BwYRTMY_.js → Trigger--ISCqt4b.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-C5rt6fCF.js → Trust-D4GVimRJ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DPBrHUgL.js → UkeySign-Ci-nXRQc.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BcxywO_K.js → VideoEditing-Cjk7mKPw.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CZvTpsPz.js → Wallet-BgOLOO3Z.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-LI_jAuOx.js → WebAuthn-CCX0K29i.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-B2a6bANB.js → WorkflowEditor-Ch3zgIsE.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B6DPMfRB.js → chat-DKOU_2Vb.js} +1 -1
- package/src/assets/web-panel/assets/{colors-IpLhw9T8.js → colors-6OVo4u3C.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BzodimsI.js → compact-item-BH78Hlsq.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DL2jaWH5.js → createContext-CFRpSbbC.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DEMblAIm.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-C4Geudre.js → hasIn-DNQhgcVi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVFXYmUe.js → index--rq90rL9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CaKKxqCI.js → index-7TC3S8SN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaTvPxY0.js → index-AuBhLqOm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcgoKNXN.js → index-BDSR7ecX.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3LzRvkw.js → index-BHa4WyTZ.js} +1 -1
- package/src/assets/web-panel/assets/index-BTvq-36D.js +1 -0
- package/src/assets/web-panel/assets/{index-DvEnrn8M.js → index-BYrnm5Ob.js} +1 -1
- package/src/assets/web-panel/assets/{index-F-SCUTee.js → index-B_Z-YoxX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAjyUjZl.js → index-BaVE6E8y.js} +25 -25
- package/src/assets/web-panel/assets/{index-CQPOCB4h.js → index-Bb6kDrUx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZtKnnTW.js → index-BepBTpa8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BX4pKudW.js → index-BkN3iTTp.js} +1 -1
- package/src/assets/web-panel/assets/{index-COxGCo8v.js → index-BnnXQot_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeUnSSEP.js → index-BujsOZfc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlABpgCv.js → index-BxRy5LPR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQBPhJlk.js → index-CFPJ8yzF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dl_QAtzq.js → index-CNuCHHQT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbWRxWM2.js → index-CaYqY35Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGBRBg3D.js → index-CkNEMANR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvOzjf2F.js → index-CkqHgG-b.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHdD0Y7h.js → index-CrcLHN2F.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5Sn7CtW.js → index-Cu3L4r5l.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnBybYhx.js → index-D3RtTT4K.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnwHp5Oi.js → index-D84id2Y4.js} +1 -1
- package/src/assets/web-panel/assets/{index-EjW1R_a7.js → index-DKN2noIF.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_SxaIPI.js → index-DaDgdJYj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi6Zkv5M.js → index-Du0rnksC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CczBR6Du.js → index-DvHGtNnF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTlmw_cr.js → index-Eag8e_mA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DREx4gaS.js → index-HNGGVF6o.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRj6YKuI.js → index-Y9MJv28e.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZU7Y67X.js → index-bKm3TUDp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvKoSvko.js → index-caye7AOE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXQ2OtXt.js → index-cdf7fd7d.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMY1waPC.js → index-dDkoL4Pe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeZhISVl.js → index-hPY0fFrd.js} +1 -1
- package/src/assets/web-panel/assets/index-hUpvk6Jl.js +1 -0
- package/src/assets/web-panel/assets/{index-DoyIjk6r.js → index-nbfHl1oV.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6w4fpSI.js → index-sm7W8AXy.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CW5mTl3w.js → initDefaultProps-BZ9w6jPL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BtjIT9np.js → motion-BnwUiOho.js} +1 -1
- package/src/assets/web-panel/assets/{move-DZv4fZAV.js → move-ByUKJnNm.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BwCix1O-.js → mtc-parser-V7yK1KEl.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BW72HDUD.js → omit-BEXBBt4j.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DBW2jcMc.js → pickAttrs-qDm_46Gi.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-D3YmWlIS.js → placementArrow-BIbhEo_0.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CL4-a-9Q.js → responsiveObserve-NbPbDgA_.js} +1 -1
- package/src/assets/web-panel/assets/{slide-Cw9zIbXQ.js → slide-BnUWglZ0.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-mMLVioo-.js → statusUtils-BX8_wZI5.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BK8857AH.js → styleChecker-BV4OycQX.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C1iSaJij.js → useFlexGapSupport-Od_H5llY.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-D3riGOaP.js → useFs-BWI-PyiX.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Bwqvmz4X.js → usePersonalDataHub-BqMuhG3g.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Byk4zzkf.js → vnode-DNd23z6f.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D7INFTp2.js → zoom-Cjaxnm7l.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/mcp.js +29 -1
- package/src/commands/pack.js +4 -4
- package/src/data/changelog.json +27 -1
- package/src/harness/mcp-client.js +15 -2
- package/src/harness/prompt-compressor.js +22 -4
- package/src/lib/cowork-mcp-tools.js +1 -0
- package/src/lib/cowork-task-templates.js +1 -0
- package/src/lib/mcp-stdio-executable-identity.js +75 -11
- package/src/lib/mcp-stdio-execution-authority.js +5 -0
- package/src/lib/packer/index.js +1 -1
- package/src/lib/packer/native-prebuild-collector.js +3 -3
- package/src/lib/packer/pack-update-checker.js +2 -2
- package/src/lib/packer/pkg-config-generator.js +12 -11
- package/src/lib/packer/web-panel-builder.js +6 -3
- package/src/lib/process-execution-broker/index.js +321 -23
- package/src/lib/process-execution-broker/platform-sandbox.js +494 -21
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +5 -4
- package/src/lib/session-tail.js +56 -24
- package/src/lib/skill-mcp.js +10 -0
- package/src/runtime/mcp-config.js +3 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-Mw5o3e7M.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-DLl1qzid.js +0 -1
- package/src/assets/web-panel/assets/Providers-Bu_pQsk6.js +0 -1
- package/src/assets/web-panel/assets/Tasks-C3LBy_7x.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CZB0EDsa.js +0 -1
- package/src/assets/web-panel/assets/index-CI7k8Sk9.js +0 -1
- package/src/assets/web-panel/assets/index-DPTHBSR8.js +0 -1
|
@@ -13,6 +13,7 @@ import { createHash } from "node:crypto";
|
|
|
13
13
|
import { feature, featureVariant } from "../lib/feature-flags.js";
|
|
14
14
|
import {
|
|
15
15
|
DURABLE_SYSTEM_MESSAGE_KINDS,
|
|
16
|
+
getDurableSystemMessageProvenance,
|
|
16
17
|
markDurableSystemMessage,
|
|
17
18
|
} from "../lib/session-message-provenance.js";
|
|
18
19
|
import {
|
|
@@ -34,6 +35,14 @@ export const SUMMARY_INPUT_DEFAULT_MAX_CHARS = 24000;
|
|
|
34
35
|
export const SUMMARY_INPUT_HARD_MAX_CHARS = 32000;
|
|
35
36
|
const SUMMARY_INPUT_MIN_CHARS = 1024;
|
|
36
37
|
|
|
38
|
+
function isCompactionArtifact(message) {
|
|
39
|
+
const kind = getDurableSystemMessageProvenance(message)?.kind;
|
|
40
|
+
return (
|
|
41
|
+
kind === DURABLE_SYSTEM_MESSAGE_KINDS.COMPACT_SUMMARY ||
|
|
42
|
+
kind === DURABLE_SYSTEM_MESSAGE_KINDS.COMPACT_TOOL_COLLAPSE
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
37
46
|
function boundedPositiveInteger(value, fallback, minimum, maximum) {
|
|
38
47
|
const number = Math.floor(Number(value));
|
|
39
48
|
if (!Number.isFinite(number) || number <= 0) return fallback;
|
|
@@ -508,9 +517,13 @@ export class PromptCompressor {
|
|
|
508
517
|
}
|
|
509
518
|
|
|
510
519
|
_truncate(messages) {
|
|
511
|
-
const system = messages.filter(
|
|
520
|
+
const system = messages.filter(
|
|
521
|
+
(m) => m.role === "system" && !isCompactionArtifact(m),
|
|
522
|
+
);
|
|
512
523
|
const last = [...messages].reverse().find((m) => m.role === "user");
|
|
513
|
-
const rest = messages.filter(
|
|
524
|
+
const rest = messages.filter(
|
|
525
|
+
(m) => (m.role !== "system" || isCompactionArtifact(m)) && m !== last,
|
|
526
|
+
);
|
|
514
527
|
|
|
515
528
|
let slots = this.maxMessages - system.length;
|
|
516
529
|
if (last) slots -= 1;
|
|
@@ -522,10 +535,15 @@ export class PromptCompressor {
|
|
|
522
535
|
}
|
|
523
536
|
|
|
524
537
|
async _summarize(messages) {
|
|
525
|
-
|
|
538
|
+
// Compaction summaries and collapsed tool groups are derived history, not
|
|
539
|
+
// immutable host instructions. Fold them into the next summary so a long
|
|
540
|
+
// session cannot retain one additional durable system message per cycle.
|
|
541
|
+
const system = messages.filter(
|
|
542
|
+
(m) => m.role === "system" && !isCompactionArtifact(m),
|
|
543
|
+
);
|
|
526
544
|
const last = [...messages].reverse().find((m) => m.role === "user");
|
|
527
545
|
const toSummarize = messages.filter(
|
|
528
|
-
(m) => m.role !== "system" && m !== last,
|
|
546
|
+
(m) => (m.role !== "system" || isCompactionArtifact(m)) && m !== last,
|
|
529
547
|
);
|
|
530
548
|
|
|
531
549
|
if (toSummarize.length < 3) {
|
|
@@ -138,6 +138,7 @@ export async function mountTemplateMcpTools(template, opts = {}) {
|
|
|
138
138
|
serverName: server.name,
|
|
139
139
|
command: server.command,
|
|
140
140
|
args: [...server.args],
|
|
141
|
+
runtimeKind: server.runtimeKind || null,
|
|
141
142
|
cwd: server.cwd || null,
|
|
142
143
|
envKeys: Object.keys(server.env || {}).sort(),
|
|
143
144
|
})) === true;
|
|
@@ -41,6 +41,10 @@ export const MCP_STDIO_EXECUTABLE_AUTHORITY_REPLAYED_CODE =
|
|
|
41
41
|
"CC_MCP_STDIO_EXECUTABLE_AUTHORITY_REPLAYED";
|
|
42
42
|
export const MCP_STDIO_EXECUTABLE_IDENTITY_ROLLBACK_CODE =
|
|
43
43
|
"CC_MCP_STDIO_EXECUTABLE_IDENTITY_ROLLBACK";
|
|
44
|
+
export const MCP_STDIO_RUNTIME_KIND_REQUIRED_CODE =
|
|
45
|
+
"CC_MCP_STDIO_RUNTIME_KIND_REQUIRED";
|
|
46
|
+
export const MCP_STDIO_RUNTIME_KIND_INVALID_CODE =
|
|
47
|
+
"CC_MCP_STDIO_RUNTIME_KIND_INVALID";
|
|
44
48
|
export const MCP_STDIO_CAPSULE_SANDBOX_CONTRACT_KIND =
|
|
45
49
|
"strict-mcp-node-capsule";
|
|
46
50
|
export const MCP_STDIO_CAPSULE_CODE_SNAPSHOT_BOUNDARY = "code-snapshot";
|
|
@@ -54,6 +58,17 @@ const HASH_CHUNK_BYTES = 1024 * 1024;
|
|
|
54
58
|
const issuedLaunchAuthorities = new WeakMap();
|
|
55
59
|
const issuedCapsuleSandboxContracts = new WeakMap();
|
|
56
60
|
|
|
61
|
+
export const MCP_STDIO_RUNTIME_KINDS = Object.freeze([
|
|
62
|
+
"native",
|
|
63
|
+
"node",
|
|
64
|
+
"python",
|
|
65
|
+
"posix-shell",
|
|
66
|
+
"powershell",
|
|
67
|
+
"java",
|
|
68
|
+
"dotnet",
|
|
69
|
+
]);
|
|
70
|
+
const MCP_STDIO_RUNTIME_KIND_SET = new Set(MCP_STDIO_RUNTIME_KINDS);
|
|
71
|
+
|
|
57
72
|
const DYNAMIC_LAUNCHERS = new Set([
|
|
58
73
|
"bunx",
|
|
59
74
|
"corepack",
|
|
@@ -391,6 +406,46 @@ function executableBasename(value) {
|
|
|
391
406
|
.toLowerCase();
|
|
392
407
|
}
|
|
393
408
|
|
|
409
|
+
function inferredRuntimeKind(commandPath) {
|
|
410
|
+
const name = executableBasename(commandPath);
|
|
411
|
+
if (["node", "nodejs"].includes(name)) return "node";
|
|
412
|
+
if (/^python(?:w)?(?:\d+(?:\.\d+)*)?$/.test(name)) return "python";
|
|
413
|
+
if (["bash", "dash", "ksh", "sh", "zsh"].includes(name)) {
|
|
414
|
+
return "posix-shell";
|
|
415
|
+
}
|
|
416
|
+
if (["powershell", "pwsh"].includes(name)) return "powershell";
|
|
417
|
+
if (name === "java") return "java";
|
|
418
|
+
if (name === "dotnet") return "dotnet";
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export function resolveMcpStdioRuntimeKind(commandPath, requestedKind = null) {
|
|
423
|
+
const inferred = inferredRuntimeKind(commandPath);
|
|
424
|
+
if (requestedKind != null) {
|
|
425
|
+
if (
|
|
426
|
+
typeof requestedKind !== "string" ||
|
|
427
|
+
!MCP_STDIO_RUNTIME_KIND_SET.has(requestedKind)
|
|
428
|
+
) {
|
|
429
|
+
throw identityError(
|
|
430
|
+
MCP_STDIO_RUNTIME_KIND_INVALID_CODE,
|
|
431
|
+
`MCP stdio runtimeKind must be one of: ${MCP_STDIO_RUNTIME_KINDS.join(", ")}`,
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
if (inferred && requestedKind !== inferred) {
|
|
435
|
+
throw identityError(
|
|
436
|
+
MCP_STDIO_RUNTIME_KIND_INVALID_CODE,
|
|
437
|
+
`MCP stdio runtimeKind "${requestedKind}" conflicts with recognized ${inferred} executable "${executableBasename(commandPath)}"`,
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
return requestedKind;
|
|
441
|
+
}
|
|
442
|
+
if (inferred) return inferred;
|
|
443
|
+
throw identityError(
|
|
444
|
+
MCP_STDIO_RUNTIME_KIND_REQUIRED_CODE,
|
|
445
|
+
`MCP stdio executable "${executableBasename(commandPath)}" has no recognized runtime semantics; set runtimeKind explicitly before trusting it`,
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
|
|
394
449
|
function materializeLaunchEnvironment(hostEnv, configEnv) {
|
|
395
450
|
const launch = sanitizeMcpStdioHostEnvironment(hostEnv);
|
|
396
451
|
for (const [key, value] of Object.entries(configEnv || {})) {
|
|
@@ -617,8 +672,7 @@ function localEntrypoint(value, cwd, label) {
|
|
|
617
672
|
: path.resolve(cwd, value);
|
|
618
673
|
}
|
|
619
674
|
|
|
620
|
-
function interpreterEntrypoints(
|
|
621
|
-
const name = executableBasename(commandPath);
|
|
675
|
+
function interpreterEntrypoints(runtimeKind, args, cwd) {
|
|
622
676
|
const values = [...args];
|
|
623
677
|
const entry = (index, role = "entrypoint") => [
|
|
624
678
|
{
|
|
@@ -627,7 +681,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
627
681
|
role,
|
|
628
682
|
},
|
|
629
683
|
];
|
|
630
|
-
if (
|
|
684
|
+
if (runtimeKind === "node") {
|
|
631
685
|
for (let index = 0; index < values.length; index += 1) {
|
|
632
686
|
const value = values[index];
|
|
633
687
|
if (["-e", "--eval", "-p", "--print"].includes(value)) return [];
|
|
@@ -655,7 +709,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
655
709
|
"MCP stdio Node launch must provide a script or inline program",
|
|
656
710
|
);
|
|
657
711
|
}
|
|
658
|
-
if (
|
|
712
|
+
if (runtimeKind === "python") {
|
|
659
713
|
for (let index = 0; index < values.length; index += 1) {
|
|
660
714
|
const value = values[index];
|
|
661
715
|
if (value === "-c") return [];
|
|
@@ -673,7 +727,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
673
727
|
"MCP stdio Python launch must provide a script or inline program",
|
|
674
728
|
);
|
|
675
729
|
}
|
|
676
|
-
if (
|
|
730
|
+
if (runtimeKind === "posix-shell") {
|
|
677
731
|
const inline = values.findIndex((value) => value === "-c");
|
|
678
732
|
if (inline >= 0) return [];
|
|
679
733
|
const index = values.findIndex((value) => !value.startsWith("-"));
|
|
@@ -683,7 +737,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
683
737
|
"MCP stdio shell launch must provide a script or inline command",
|
|
684
738
|
);
|
|
685
739
|
}
|
|
686
|
-
if (
|
|
740
|
+
if (runtimeKind === "powershell") {
|
|
687
741
|
const fileIndex = values.findIndex((value) => /^-file$/i.test(value));
|
|
688
742
|
if (fileIndex >= 0) return entry(fileIndex + 1, "powershell-script");
|
|
689
743
|
if (values.some((value) => /^-(?:command|encodedcommand)$/i.test(value))) {
|
|
@@ -694,7 +748,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
694
748
|
"MCP stdio PowerShell launch must use -File or an inline command",
|
|
695
749
|
);
|
|
696
750
|
}
|
|
697
|
-
if (
|
|
751
|
+
if (runtimeKind === "java") {
|
|
698
752
|
const jarIndex = values.findIndex((value) => value === "-jar");
|
|
699
753
|
if (jarIndex >= 0) return entry(jarIndex + 1, "java-jar");
|
|
700
754
|
throw identityError(
|
|
@@ -702,7 +756,7 @@ function interpreterEntrypoints(commandPath, args, cwd) {
|
|
|
702
756
|
"MCP stdio Java classpath launches are not bound to one entrypoint file",
|
|
703
757
|
);
|
|
704
758
|
}
|
|
705
|
-
if (
|
|
759
|
+
if (runtimeKind === "dotnet") {
|
|
706
760
|
const index = values.findIndex((value) => !value.startsWith("-"));
|
|
707
761
|
if (index >= 0 && /\.dll$/i.test(values[index])) {
|
|
708
762
|
return entry(index, "dotnet-assembly");
|
|
@@ -844,6 +898,7 @@ export function attestMcpStdioExecutableIdentity({
|
|
|
844
898
|
env = {},
|
|
845
899
|
cwd = process.cwd(),
|
|
846
900
|
platform = process.platform,
|
|
901
|
+
runtimeKind: requestedRuntimeKind = null,
|
|
847
902
|
}) {
|
|
848
903
|
const name = executableBasename(command);
|
|
849
904
|
if (DYNAMIC_LAUNCHERS.has(name)) {
|
|
@@ -868,8 +923,12 @@ export function attestMcpStdioExecutableIdentity({
|
|
|
868
923
|
"MCP stdio direct shebang commands do not bind the interpreter bytes; configure the interpreter and script as command + args",
|
|
869
924
|
);
|
|
870
925
|
}
|
|
926
|
+
const runtimeKind = resolveMcpStdioRuntimeKind(
|
|
927
|
+
commandIdentity.realPath,
|
|
928
|
+
requestedRuntimeKind,
|
|
929
|
+
);
|
|
871
930
|
const launchArgs = [...args];
|
|
872
|
-
const entrypoints = interpreterEntrypoints(
|
|
931
|
+
const entrypoints = interpreterEntrypoints(runtimeKind, launchArgs, cwd).map(
|
|
873
932
|
({ argIndex, path: entryPath, role }) => {
|
|
874
933
|
const identity = attestFile(
|
|
875
934
|
entryPath,
|
|
@@ -882,7 +941,8 @@ export function attestMcpStdioExecutableIdentity({
|
|
|
882
941
|
},
|
|
883
942
|
);
|
|
884
943
|
const identity = Object.freeze({
|
|
885
|
-
version:
|
|
944
|
+
version: 2,
|
|
945
|
+
runtimeKind,
|
|
886
946
|
command: commandIdentity,
|
|
887
947
|
entrypoints: Object.freeze(entrypoints),
|
|
888
948
|
});
|
|
@@ -919,7 +979,8 @@ function trustMessage(serverName, attestation, status) {
|
|
|
919
979
|
function materializedAttestation(attestation, materialization) {
|
|
920
980
|
if (!materialization) return attestation;
|
|
921
981
|
const identity = Object.freeze({
|
|
922
|
-
version:
|
|
982
|
+
version: 3,
|
|
983
|
+
runtimeKind: attestation.identity.runtimeKind,
|
|
923
984
|
command: attestation.identity.command,
|
|
924
985
|
entrypoints: attestation.identity.entrypoints,
|
|
925
986
|
materialization: materialization.identity,
|
|
@@ -1038,6 +1099,7 @@ export function prepareMcpStdioExecutableIdentity({
|
|
|
1038
1099
|
args: effectiveArgs,
|
|
1039
1100
|
env: config.env || {},
|
|
1040
1101
|
cwd,
|
|
1102
|
+
runtimeKind: materialization ? "node" : config.runtimeKind,
|
|
1041
1103
|
}),
|
|
1042
1104
|
materialization,
|
|
1043
1105
|
);
|
|
@@ -1063,6 +1125,7 @@ export function prepareMcpStdioExecutableIdentity({
|
|
|
1063
1125
|
identity: attestation.identity,
|
|
1064
1126
|
identityDigest: attestation.identityDigest,
|
|
1065
1127
|
materialization,
|
|
1128
|
+
runtimeKind: attestation.identity.runtimeKind,
|
|
1066
1129
|
}),
|
|
1067
1130
|
);
|
|
1068
1131
|
return Object.freeze({
|
|
@@ -1107,6 +1170,7 @@ export function consumeMcpStdioExecutableIdentityAuthority(
|
|
|
1107
1170
|
command,
|
|
1108
1171
|
args,
|
|
1109
1172
|
cwd: process.cwd(),
|
|
1173
|
+
runtimeKind: issued.runtimeKind,
|
|
1110
1174
|
});
|
|
1111
1175
|
if (issued.materialization) {
|
|
1112
1176
|
const verified = reattestMcpStdioPackageMaterialization(
|
|
@@ -155,6 +155,10 @@ function invocationSnapshot(serverName, config) {
|
|
|
155
155
|
command,
|
|
156
156
|
args: Object.freeze(args),
|
|
157
157
|
env: Object.freeze(env.map((entry) => Object.freeze(entry))),
|
|
158
|
+
runtimeKind: scalar(
|
|
159
|
+
dataProperty(config, "runtimeKind", null),
|
|
160
|
+
"runtimeKind",
|
|
161
|
+
),
|
|
158
162
|
transport: scalar(dataProperty(config, "transport", null), "transport"),
|
|
159
163
|
origin: scalar(dataProperty(config, "origin", null), "origin"),
|
|
160
164
|
policy: scalar(dataProperty(config, "policy", null), "policy"),
|
|
@@ -225,6 +229,7 @@ function materializeSnapshot(snapshot) {
|
|
|
225
229
|
command: snapshot.command,
|
|
226
230
|
args: [...snapshot.args],
|
|
227
231
|
env: Object.fromEntries(snapshot.env),
|
|
232
|
+
runtimeKind: snapshot.runtimeKind,
|
|
228
233
|
transport: snapshot.transport,
|
|
229
234
|
origin: snapshot.origin,
|
|
230
235
|
policy: snapshot.policy,
|
package/src/lib/packer/index.js
CHANGED
|
@@ -46,7 +46,7 @@ export async function runPack(cliOpts, deps = {}) {
|
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
const projectRoot = path.resolve(cliOpts.cwd || process.cwd());
|
|
49
|
-
const targets = (cliOpts.targets || "
|
|
49
|
+
const targets = (cliOpts.targets || "node22-win-x64")
|
|
50
50
|
.split(",")
|
|
51
51
|
.map((s) => s.trim())
|
|
52
52
|
.filter(Boolean);
|
|
@@ -35,7 +35,7 @@ const TARGET_MODULES = [
|
|
|
35
35
|
/**
|
|
36
36
|
* @param {object} ctx
|
|
37
37
|
* @param {string} ctx.cliRoot
|
|
38
|
-
* @param {string[]} ctx.targets e.g. ["
|
|
38
|
+
* @param {string[]} ctx.targets e.g. ["node22-win-x64"]
|
|
39
39
|
* @param {string} ctx.tempDir build temp dir
|
|
40
40
|
* @returns {{ prebuildsDir: string|null, collected: Array, missing: Array }}
|
|
41
41
|
*/
|
|
@@ -117,11 +117,11 @@ function collectSqlJsAssets(cliRoot, prebuildsDir) {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
|
-
* Map "
|
|
120
|
+
* Map "node22-win-x64" -> "win32-x64".
|
|
121
121
|
* Returns null for unrecognized targets.
|
|
122
122
|
*/
|
|
123
123
|
export function pkgTargetToPlatformKey(target) {
|
|
124
|
-
//
|
|
124
|
+
// node22-win-x64
|
|
125
125
|
const m = /^node\d+-([a-z]+)-([a-z0-9]+)$/.exec(target);
|
|
126
126
|
if (!m) return null;
|
|
127
127
|
const osMap = {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* }
|
|
22
22
|
* }
|
|
23
23
|
*
|
|
24
|
-
* `target` matches pkg's `
|
|
24
|
+
* `target` matches pkg's `node22-<os>-<arch>` convention.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import semver from "semver";
|
|
@@ -36,7 +36,7 @@ const DEFAULT_TIMEOUT_MS = 10_000;
|
|
|
36
36
|
* @param {object} ctx
|
|
37
37
|
* @param {string} ctx.manifestUrl absolute http(s) URL
|
|
38
38
|
* @param {string} ctx.currentVersion e.g. BAKED.packedCliVersion or VERSION
|
|
39
|
-
* @param {string} [ctx.target] e.g. "
|
|
39
|
+
* @param {string} [ctx.target] e.g. "node22-win-x64"; if set, the
|
|
40
40
|
* returned artifact matches it
|
|
41
41
|
* @param {number} [ctx.timeoutMs=10000]
|
|
42
42
|
* @param {typeof fetch} [ctx.fetchImpl] injected for tests
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* {
|
|
9
9
|
* "scripts": ["src/**\/*.js"],
|
|
10
10
|
* "assets": ["src/assets/web-panel/**\/*", "templates/**\/*", "prebuilds/**\/*"],
|
|
11
|
-
* "targets": ["
|
|
11
|
+
* "targets": ["node22-win-x64"],
|
|
12
12
|
* "outputPath": "dist"
|
|
13
13
|
* }
|
|
14
14
|
*
|
|
@@ -160,15 +160,16 @@ export function generatePkgConfig(ctx) {
|
|
|
160
160
|
...(projectBaked || {}),
|
|
161
161
|
};
|
|
162
162
|
|
|
163
|
-
// Inline the real bin's logic directly.
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
// imports compile fine via yao-pkg's ESM mode.
|
|
163
|
+
// Inline the real bin's logic directly. Import the phase-0 lazy dispatcher,
|
|
164
|
+
// not src/index.js: that eager compatibility module uses top-level await and
|
|
165
|
+
// cannot be loaded by pkg's CommonJS bootstrap on Node 22.
|
|
167
166
|
const entryScript = path.join(pkgConfigDir, "pack-entry.js");
|
|
168
167
|
const ensureUtf8Path = posixify(
|
|
169
168
|
path.join(cliRoot, "src", "lib", "ensure-utf8.js"),
|
|
170
169
|
);
|
|
171
|
-
const
|
|
170
|
+
const lazyDispatchPath = posixify(
|
|
171
|
+
path.join(cliRoot, "src", "lazy-dispatch.js"),
|
|
172
|
+
);
|
|
172
173
|
fs.writeFileSync(
|
|
173
174
|
entryScript,
|
|
174
175
|
[
|
|
@@ -181,7 +182,7 @@ export function generatePkgConfig(ctx) {
|
|
|
181
182
|
"import os from 'node:os';",
|
|
182
183
|
"import path from 'node:path';",
|
|
183
184
|
`import { ensureUtf8 } from '${ensureUtf8Path}';`,
|
|
184
|
-
`import {
|
|
185
|
+
`import { runCli } from '${lazyDispatchPath}';`,
|
|
185
186
|
"ensureUtf8();",
|
|
186
187
|
"// Build-time defaults baked by the packer. Each is overridable at",
|
|
187
188
|
"// runtime either via the matching env var or by passing the flag.",
|
|
@@ -374,15 +375,15 @@ export function generatePkgConfig(ctx) {
|
|
|
374
375
|
"// When launched from Explorer, Node exits as soon as the event loop",
|
|
375
376
|
"// drains. If something throws before the UI server starts listening,",
|
|
376
377
|
"// we want the user to see the error — pause on fatal errors.",
|
|
377
|
-
"
|
|
378
|
+
"function _handleFatal(err) {",
|
|
378
379
|
" console.error('\\n[cc-pack] Fatal error:', err && err.stack || err);",
|
|
379
380
|
" if (process.stdin.isTTY) {",
|
|
380
381
|
" console.error('\\nPress any key to exit...');",
|
|
381
382
|
" try { process.stdin.setRawMode(true); process.stdin.resume(); process.stdin.once('data', () => process.exit(1)); } catch { process.exit(1); }",
|
|
382
383
|
" } else { process.exit(1); }",
|
|
383
|
-
"}
|
|
384
|
-
"
|
|
385
|
-
"
|
|
384
|
+
"}",
|
|
385
|
+
"process.on('uncaughtException', _handleFatal);",
|
|
386
|
+
"runCli(process.argv).catch(_handleFatal);",
|
|
386
387
|
"",
|
|
387
388
|
].join("\n"),
|
|
388
389
|
"utf-8",
|
|
@@ -37,10 +37,13 @@ export function ensureWebPanel(ctx) {
|
|
|
37
37
|
fs.existsSync(path.join(d, "index.html")),
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// A clean source checkout intentionally contains only the tracked
|
|
41
|
+
// index.html placeholder; the generated asset tree is gitignored. Treat
|
|
42
|
+
// that placeholder as missing output so native/package builds actually run
|
|
43
|
+
// build:web-panel instead of failing the asset-count guard below.
|
|
41
44
|
let rebuilt = false;
|
|
42
|
-
let needsBuild = !distDir;
|
|
43
|
-
if (distDir && !skipBuild) {
|
|
45
|
+
let needsBuild = !distDir || countAssets(distDir) < 2;
|
|
46
|
+
if (!needsBuild && distDir && !skipBuild) {
|
|
44
47
|
needsBuild = isDistStale(distDir);
|
|
45
48
|
}
|
|
46
49
|
|