chainlesschain 0.166.139 → 0.166.141
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 +36 -8
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-CHItp4vg.js → AIOps-BefmcZw2.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-nhMNWW_d.js → ActionButton-BBlS9rmj.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DRc81BBI.js → Analytics-DfNjXT9e.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-CVt7HMkp.js → AppLayout-CIBZPPMS.js} +2 -2
- package/src/assets/web-panel/assets/{Artifacts-BuJgG5jf.js → Artifacts-CE66rTTZ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-msNg0aH-.js → Audit-DOC8Lt8U.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BpcV8yWC.js → BackgroundAgents-9TMG041Q.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-P53DADwG.js → Backup-us3KWb9F.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DFxT2yWN.js → BaseInput-D6Q95Wr5.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BXoHisHW.js → Chat-BPrM5ARp.js} +1 -1
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DMGtSdDx.js → ChatBubbleRenderer-Drs9vSc4.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-B4g_ckJq.js → Checkbox-DqZGMV0o.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-C6SSSOfp.js → Codegen-CmolL6wr.js} +1 -1
- package/src/assets/web-panel/assets/{Col-IO1NEUYL.js → Col-BwHSmoYQ.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CdEBl93F.js → Community-DGWqobpd.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DYs0a9k7.js → Compact-t_yy09-r.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BPnk7948.js → Compliance-D0S8-EsN.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-VLOTGbza.js → Cowork-Y1LiuRwP.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-_9GgQLJo.js → Cron-FTqEw7QV.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-B21yn0qy.js → Crosschain-C3rPZ4Qu.js} +1 -1
- package/src/assets/web-panel/assets/{DID-mBeDgRZ7.js → DID-Ba2zySM-.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-BckYYzhP.js → Dashboard-D6xyN2ND.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DEedqFiE.js → Dropdown-BF4QuXJw.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CMs0k9TB.js → EmailListRenderer-s9dUxq14.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-B00Qd0fN.js → EvolutionSettings-CoAKOfqZ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DxMTAMa8.js → FamilyGuardDashboard-CEznwH1c.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B-UZw0LO.js → Federation-rIzOt8-a.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CkafazEw.js → FormItemContext-BARFiExr.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DEUG25ZJ.js → GenericCardRenderer-DI0A4swS.js} +1 -1
- package/src/assets/web-panel/assets/{Git-D7dr9oz9.js → Git-DdmysND4.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-DKlUJ1wg.js → Governance-DrdhwUz2.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BJKqplap.js → Inference-Scm8tumd.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-B78fB-bz.js → KnowledgeGraph-_6bgPs4W.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DJGcHYH_.js → Logs-DW_v7bSo.js} +1 -1
- package/src/assets/web-panel/assets/{MarkdownRenderer-DkcG_MxW.js → MarkdownRenderer-7JABuv1j.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-ucTbwByD.js → Marketplace-0h3YSvME.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Cu1xZYYk.js → McpTools-Byrg0Y3e.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-DCGpXmi-.js → Memory-Cyoq-o29.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-BnKr0aAS.js → MobileBridge-ISIlploU.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-C5UvYJTP.js → MobileProjects-04EncaRx.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-D1UUl4WH.js → Mtc-BMzkpyOF.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-D3aa8XP4.js → MtcAudit-Cx7BR5sz.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-DiXdfJjO.js → Multisig-D4pmkSX4.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-DbWABgSE.js → NLProgramming-CCfaaWNu.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BP1DPl-R.js → Notes-Mq-1ZyaH.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-xaB6ONe7.js → NotificationSettings-rzf5V1TR.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-D1uNcz3b.js → OrderTableRenderer-OREUs5ue.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DMLDGaf1.js → Organization-BQfOATgw.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-DH4QPEoI.js → Overflow-D7Pa6aaA.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Bl4OS10o.js → P2P-CaJ79ZsC.js} +1 -1
- package/src/assets/web-panel/assets/{PdhVaultBrowser-D9XSE2YI.js → PdhVaultBrowser-CtimQQN3.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-CUaPlr6d.js → Permissions-AzmmkLZ0.js} +1 -1
- package/src/assets/web-panel/assets/{PersonalDataHub-Ba92dZk-.js → PersonalDataHub-BRU8ME7z.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-Bh2okm-8.js → Pipeline-BnNqutXh.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bmq3p4gC.js → Privacy-gMyZcxsz.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BPu2fdKR.js → ProjectInit-CkK-Fvr0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-D6ABLpmt.js → ProjectSettings-CGY_uiIX.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-qWHEve0z.js → Projects-DBNC7xXG.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-D9DI-2hc.js → Providers-BVgWawtE.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CxifoeD5.js → QrScannerModal-DZILESCa.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DC1BvwR7.js → QuickAsk-DwRBzFWW.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CKqbMB5o.js → Recommend-B3VxvUih.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BGGzPdS5.js → RemoteSession-DM74lufU.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DH90O9-5.js → Reputation-DOOEuGHh.js} +1 -1
- package/src/assets/web-panel/assets/{Row-h7ovueJc.js → Row-BZJYAo0S.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DaHxXTZg.js → RssFeed-CYw44jcD.js} +1 -1
- package/src/assets/web-panel/assets/{Search-Bn6Nqpn4.js → Search-CbypjDNG.js} +1 -1
- package/src/assets/web-panel/assets/{Security-ClbBmPJi.js → Security-0rSBDrXh.js} +1 -1
- package/src/assets/web-panel/assets/{Services-ChHLQwRn.js → Services-kqP79CBD.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-DfN6BFzt.js → Skeleton-BjxvGVfI.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C926wDev.js → Skills-SOoWyPCO.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DJzi1l1M.js → Sla-kdRVAT19.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-_GSyVjm_.js → SpeechSettings-DILtcMaJ.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B67xnERe.js → SyncSettings-C98Jauc4.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-BaYZadcG.js → Tasks-Bw-KaQAs.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Bu8kN1Xt.js → Templates-CDJ027Hd.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BM9qufw1.js → Tenant-BqNV62UA.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-MEdd5DjB.js → Terminal-B8aQ3GLO.js} +1 -1
- package/src/assets/web-panel/assets/{TimelineRenderer-C27kL2oU.js → TimelineRenderer-BSpccq11.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Cvjd98VC.js → Tokens-BbGMoFO6.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CLym84HI.js → Trigger-D75Mawa_.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Bv2JTaNN.js → Trust-BiK_Pk05.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CSCkNbtm.js → UkeySign-Dv2xX_b9.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BFDXB4xh.js → VideoEditing-CdBWfeEE.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CMEFrG_b.js → Wallet-Cvrp4agg.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-x4eO_Q4y.js → WebAuthn-D0Htlf3v.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-ClWEPgV1.js → WorkflowEditor-nuUBOHIF.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BdYOI4gM.js → chat-C6MLShIo.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DcTBrGvS.js → colors-9G5FqFOC.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Dn2ktVuj.js → compact-item-0M49EurU.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-XTreuyqp.js → createContext-CiDDLED_.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-CFRNsYQd.js → hasIn-wZvUczmn.js} +1 -1
- package/src/assets/web-panel/assets/{index-ir2ZwWz5.js → index-8jz-X3xg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFl_a0n5.js → index-B0JZ_ccM.js} +1 -1
- package/src/assets/web-panel/assets/{index-kzyCd8a0.js → index-B6TAOS4G.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsnYp4qF.js → index-BCfxxScC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbaPXyNc.js → index-BTCIIdoS.js} +1 -1
- package/src/assets/web-panel/assets/{index-ma-rJkfE.js → index-BVV2mBbo.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQEu7uW0.js → index-BWTcG128.js} +1 -1
- package/src/assets/web-panel/assets/{index-DW9XncMy.js → index-BXIY2BIN.js} +1 -1
- package/src/assets/web-panel/assets/{index-D45vulkq.js → index-B_XOMujL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DNdiAymC.js → index-BfwJm0DU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjHA_Q7s.js → index-BlcOkfzz.js} +1 -1
- package/src/assets/web-panel/assets/{index-Daa1yCt_.js → index-BmS2P_eX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdVpoNEQ.js → index-BzeA3eRQ.js} +1 -1
- package/src/assets/web-panel/assets/index-C101Sec6.js +1 -0
- package/src/assets/web-panel/assets/{index-BBd64wj8.js → index-C63qiwQz.js} +1 -1
- package/src/assets/web-panel/assets/{index-lnTt0Jps.js → index-CTy9gD3m.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRW3AWdS.js → index-CdUmgLxP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Vo7A4aiN.js → index-CdaLWIz-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUT4h5JB.js → index-CoxzvhoN.js} +1 -1
- package/src/assets/web-panel/assets/{index-3RqDry-K.js → index-Cs66y4oC.js} +3 -3
- package/src/assets/web-panel/assets/{index-BMLpP8QQ.js → index-CtbFv3Et.js} +1 -1
- package/src/assets/web-panel/assets/{index-CG9YLDmI.js → index-Cz1SAgnb.js} +1 -1
- package/src/assets/web-panel/assets/index-D23TaGOp.js +1 -0
- package/src/assets/web-panel/assets/{index-Brc0BF-k.js → index-D2wN6VIq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSqydcDa.js → index-D51V5vmz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXMa7Z-S.js → index-D9J_tLGk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BV6LojRv.js → index-DN9t1qjW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNHWMMDX.js → index-DOxTmc3k.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEyVNbNE.js → index-DcZxOXd8.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9kPBEqD.js → index-Dclwd_lj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDTSgpXz.js → index-DeHSwWVG.js} +1 -1
- package/src/assets/web-panel/assets/{index-XdlYkgCa.js → index-DvWRS-s7.js} +1 -1
- package/src/assets/web-panel/assets/{index-r5sNECM5.js → index-DwUOiN8M.js} +1 -1
- package/src/assets/web-panel/assets/{index-8METW_Wr.js → index-DwX9cOL6.js} +1 -1
- package/src/assets/web-panel/assets/{index-uT4fRDzU.js → index-JhfNEldK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbMWvjLZ.js → index-dJ_V_Fqy.js} +1 -1
- package/src/assets/web-panel/assets/{index-COuEJdmr.js → index-k0BVfcwQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dhi4Oybt.js → index-qJcOtd8J.js} +1 -1
- package/src/assets/web-panel/assets/{index-oE4jTpHK.js → index-sBsJaBmM.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-mdL0oeZa.js → initDefaultProps-DyIyjurJ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-ZgVCKcEX.js → motion-B2D0PuTM.js} +1 -1
- package/src/assets/web-panel/assets/{move-A_28O5T2.js → move-B22T5MnN.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-0zlMjabo.js → mtc-parser-i4b7HNzF.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DF7mU3yG.js → omit-ByNIr_gz.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Cmt8liJP.js → pickAttrs-_xP2RvxA.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DaMDC57b.js → placementArrow-CVDvzK0z.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CHw_f2d3.js → responsiveObserve-CI1toXJ_.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DJS9fFQq.js → slide-2_VosSRQ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bk3XdZwh.js → statusUtils-CMiWWrZC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DMybAFsA.js → styleChecker-DY8wTVCe.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-_tbIIFMu.js → useFlexGapSupport-DkdcgIyl.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-KPklVptS.js → useFs-gpl11PEF.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-C7FrKDhD.js → usePersonalDataHub-DqnQ0H9y.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DB3JBusp.js → vnode-CgY9xUvr.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-C8rAdf81.js → zoom-Ch0jan5_.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +27 -1
- package/src/lib/evolution/agent-model-projection.js +17 -0
- package/src/lib/evolution/evolution-artifact-ports.js +64 -1
- package/src/lib/evolution/evolution-evidence-projector.js +85 -8
- package/src/lib/read-file-loop-guard.js +46 -11
- package/src/lib/tool-result-preview.js +1 -0
- package/src/runtime/agent-core.js +99 -18
- package/src/runtime/tool-argument-recovery.js +111 -0
- package/src/assets/web-panel/assets/index-DoVoNjtJ.js +0 -1
- package/src/assets/web-panel/assets/index-xlS8pDS2.js +0 -1
|
@@ -7,6 +7,12 @@ import {
|
|
|
7
7
|
requireUnscopedToolExecution,
|
|
8
8
|
} from "../lib/formal-budget-provider-scope.js";
|
|
9
9
|
import { isFormalBudgetError } from "../lib/formal-budget-errors.js";
|
|
10
|
+
import {
|
|
11
|
+
FORMAL_QUALITY_ALLOWED_FILES_ENV,
|
|
12
|
+
FORMAL_QUALITY_FILE_TOOLS,
|
|
13
|
+
formalQualityAllowedFiles,
|
|
14
|
+
isFormalQualityHermeticRuntime,
|
|
15
|
+
} from "../lib/formal-quality-eval-runtime.js";
|
|
10
16
|
import { normalizeOllamaBaseUrl } from "../lib/ollama-base-url.js";
|
|
11
17
|
import { ollamaProviderFetch } from "../lib/ollama-provider-fetch.js";
|
|
12
18
|
import {
|
|
@@ -64,6 +70,11 @@ import {
|
|
|
64
70
|
import { ReadFileLoopGuard } from "../lib/read-file-loop-guard.js";
|
|
65
71
|
const READ_FILE_REQUEST_CONTEXT = Symbol("read-file-request-context");
|
|
66
72
|
import { gitToolInputError } from "../lib/git-tool-input.js";
|
|
73
|
+
import {
|
|
74
|
+
parseToolArguments,
|
|
75
|
+
projectRejectedToolArguments,
|
|
76
|
+
TOOL_ARGUMENTS_INVALID_CODE,
|
|
77
|
+
} from "./tool-argument-recovery.js";
|
|
67
78
|
import { shellOutputPage, shellOutputPreview } from "../lib/shell-output.js";
|
|
68
79
|
import {
|
|
69
80
|
boundedToolResultText,
|
|
@@ -12262,6 +12273,7 @@ function _openAIProviderRequestReceipt(response, data, clientRequestId) {
|
|
|
12262
12273
|
* @returns {Promise<object>} response with .message
|
|
12263
12274
|
*/
|
|
12264
12275
|
export async function chatWithTools(rawMessages, options) {
|
|
12276
|
+
rawMessages = projectRejectedToolArguments(rawMessages);
|
|
12265
12277
|
if (options.serviceTier != null) {
|
|
12266
12278
|
resolveModelServiceTier(
|
|
12267
12279
|
resolveModelCapabilityProfile(options),
|
|
@@ -14981,7 +14993,59 @@ function permissionDecision(callId, tool, result) {
|
|
|
14981
14993
|
});
|
|
14982
14994
|
}
|
|
14983
14995
|
|
|
14996
|
+
function bindFormalQualityLoopOptions(options) {
|
|
14997
|
+
// The launcher owns this binding. Apply it at the shared loop so direct
|
|
14998
|
+
// gateway/IDE callers receive the same schema and execution guard as CLI.
|
|
14999
|
+
// Legacy hermetic callers without a file binding retain their own boundary.
|
|
15000
|
+
if (
|
|
15001
|
+
!isFormalQualityHermeticRuntime(process.env) ||
|
|
15002
|
+
!Object.hasOwn(process.env, FORMAL_QUALITY_ALLOWED_FILES_ENV)
|
|
15003
|
+
) {
|
|
15004
|
+
return options;
|
|
15005
|
+
}
|
|
15006
|
+
const allowedPaths = formalQualityAllowedFiles(process.env);
|
|
15007
|
+
const cwd = options.cwd || process.cwd();
|
|
15008
|
+
const launcherScope = normalizeExactFileMutationScope(
|
|
15009
|
+
{ exact: true, worktreeRoot: canonicalRealpath(cwd), allowedPaths },
|
|
15010
|
+
{ cwd },
|
|
15011
|
+
);
|
|
15012
|
+
const callerScope = normalizeExactFileMutationScope(
|
|
15013
|
+
options.fileMutationScope,
|
|
15014
|
+
{
|
|
15015
|
+
cwd,
|
|
15016
|
+
},
|
|
15017
|
+
);
|
|
15018
|
+
if (
|
|
15019
|
+
callerScope &&
|
|
15020
|
+
callerScope.allowedPaths.some((file) => !allowedPaths.includes(file))
|
|
15021
|
+
) {
|
|
15022
|
+
throw new Error("mutation scope widens the formal quality file binding");
|
|
15023
|
+
}
|
|
15024
|
+
if (
|
|
15025
|
+
options.enabledToolNames != null &&
|
|
15026
|
+
!Array.isArray(options.enabledToolNames)
|
|
15027
|
+
) {
|
|
15028
|
+
throw new Error("formal quality enabled tool names must be an array");
|
|
15029
|
+
}
|
|
15030
|
+
return {
|
|
15031
|
+
...options,
|
|
15032
|
+
fileMutationScope: callerScope || launcherScope,
|
|
15033
|
+
hermeticExecution: true,
|
|
15034
|
+
exactToolNames: true,
|
|
15035
|
+
// Hermetic execution ignores host executors. Match that on the provider
|
|
15036
|
+
// side too: a same-named host executor must not suppress the path enum
|
|
15037
|
+
// for the built-in mutation tool that will actually execute.
|
|
15038
|
+
externalToolExecutors: null,
|
|
15039
|
+
enabledToolNames: Object.freeze(
|
|
15040
|
+
(options.enabledToolNames ?? FORMAL_QUALITY_FILE_TOOLS).filter((name) =>
|
|
15041
|
+
FORMAL_QUALITY_FILE_TOOLS.includes(name),
|
|
15042
|
+
),
|
|
15043
|
+
),
|
|
15044
|
+
};
|
|
15045
|
+
}
|
|
15046
|
+
|
|
14984
15047
|
export async function* agentLoop(messages, options) {
|
|
15048
|
+
options = bindFormalQualityLoopOptions(options);
|
|
14985
15049
|
// Bind the actual task before compaction, runtime nudges or provider projection.
|
|
14986
15050
|
// A new host-admitted user turn starts a new loop and receives its own binding.
|
|
14987
15051
|
const currentUserTask = messages.findLast(
|
|
@@ -17477,6 +17541,7 @@ export async function* agentLoop(messages, options) {
|
|
|
17477
17541
|
toolCalls.every(
|
|
17478
17542
|
(c) =>
|
|
17479
17543
|
typeof c?.function?.name === "string" &&
|
|
17544
|
+
parseToolArguments(c.function.arguments) !== null &&
|
|
17480
17545
|
!pausedTools.has(c.function.name) &&
|
|
17481
17546
|
_CHECKPOINT_READ_ONLY.has(c.function.name),
|
|
17482
17547
|
);
|
|
@@ -17485,15 +17550,7 @@ export async function* agentLoop(messages, options) {
|
|
|
17485
17550
|
const turnId = `${runId}:t${budget.consumed}`;
|
|
17486
17551
|
const toolBatchRecords = [];
|
|
17487
17552
|
const prepared = toolCalls.map((call) => {
|
|
17488
|
-
|
|
17489
|
-
try {
|
|
17490
|
-
toolArgs =
|
|
17491
|
-
typeof call.function.arguments === "string"
|
|
17492
|
-
? JSON.parse(call.function.arguments)
|
|
17493
|
-
: call.function.arguments;
|
|
17494
|
-
} catch {
|
|
17495
|
-
toolArgs = {};
|
|
17496
|
-
}
|
|
17553
|
+
const toolArgs = parseToolArguments(call.function.arguments);
|
|
17497
17554
|
const workflowBinding = _workflowToolEffectBinding(
|
|
17498
17555
|
workflowEffectId,
|
|
17499
17556
|
workflowEffectId ? (workflowChildEffectSequence += 1) : 0,
|
|
@@ -17698,15 +17755,39 @@ export async function* agentLoop(messages, options) {
|
|
|
17698
17755
|
});
|
|
17699
17756
|
continue;
|
|
17700
17757
|
}
|
|
17701
|
-
|
|
17702
|
-
|
|
17703
|
-
|
|
17704
|
-
|
|
17705
|
-
|
|
17706
|
-
|
|
17707
|
-
|
|
17708
|
-
|
|
17709
|
-
|
|
17758
|
+
const toolArgs = parseToolArguments(fn.arguments);
|
|
17759
|
+
if (toolArgs === null) {
|
|
17760
|
+
const result = {
|
|
17761
|
+
code: TOOL_ARGUMENTS_INVALID_CODE,
|
|
17762
|
+
execution_started: false,
|
|
17763
|
+
error:
|
|
17764
|
+
"Tool arguments must be a valid JSON object. No tool was executed. " +
|
|
17765
|
+
"Issue a new call with valid arguments if still appropriate.",
|
|
17766
|
+
};
|
|
17767
|
+
yield {
|
|
17768
|
+
type: "tool-pre-execution-denied",
|
|
17769
|
+
tool: toolName,
|
|
17770
|
+
tool_use_id: call.id,
|
|
17771
|
+
turn_id: turnId,
|
|
17772
|
+
preExecutionDenied: true,
|
|
17773
|
+
execution_started: false,
|
|
17774
|
+
};
|
|
17775
|
+
yield {
|
|
17776
|
+
type: "tool-result",
|
|
17777
|
+
tool: toolName,
|
|
17778
|
+
result,
|
|
17779
|
+
error: result.error,
|
|
17780
|
+
tool_use_id: call.id,
|
|
17781
|
+
turn_id: turnId,
|
|
17782
|
+
preExecutionDenied: true,
|
|
17783
|
+
execution_started: false,
|
|
17784
|
+
};
|
|
17785
|
+
appendMessages({
|
|
17786
|
+
role: "tool",
|
|
17787
|
+
content: JSON.stringify(result),
|
|
17788
|
+
tool_call_id: call.id,
|
|
17789
|
+
});
|
|
17790
|
+
continue;
|
|
17710
17791
|
}
|
|
17711
17792
|
|
|
17712
17793
|
// Capability and exact-path authority must settle before any checkpoint,
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export const TOOL_ARGUMENTS_INVALID_CODE = "CC_TOOL_ARGUMENTS_INVALID";
|
|
2
|
+
|
|
3
|
+
// Never infer executable arguments from a partial provider response. In
|
|
4
|
+
// particular, a parse failure must not become an executable empty object.
|
|
5
|
+
export function parseToolArguments(value) {
|
|
6
|
+
try {
|
|
7
|
+
const args = typeof value === "string" ? JSON.parse(value) : value;
|
|
8
|
+
if (!args || typeof args !== "object" || Array.isArray(args)) return null;
|
|
9
|
+
const prototype = Object.getPrototypeOf(args);
|
|
10
|
+
return prototype === Object.prototype || prototype === null ? args : null;
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function isUnexecutedArgumentRejection(result) {
|
|
17
|
+
return (
|
|
18
|
+
(result?.code === TOOL_ARGUMENTS_INVALID_CODE &&
|
|
19
|
+
result.execution_started === false) ||
|
|
20
|
+
(result?.policy?.code === "CC_RUN_CODE_EXECUTION_SNAPSHOT_INVALID" &&
|
|
21
|
+
result.policy.via === "run-code-execution-snapshot" &&
|
|
22
|
+
result.policy.decision === "blocked")
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Old sessions can contain a malformed provider call paired with a dispatch
|
|
27
|
+
// rejection. Keep the durable transcript intact; derive a model-only copy so
|
|
28
|
+
// that strict JSON projection and strict providers can admit the next turn.
|
|
29
|
+
// This grants no execution authority and never repairs or forwards the bad text.
|
|
30
|
+
export function projectRejectedToolArguments(messages) {
|
|
31
|
+
const callCounts = new Map();
|
|
32
|
+
const resultCounts = new Map();
|
|
33
|
+
for (const message of messages) {
|
|
34
|
+
if (message.role === "assistant" && Array.isArray(message.tool_calls)) {
|
|
35
|
+
for (const call of message.tool_calls) {
|
|
36
|
+
callCounts.set(call?.id, (callCounts.get(call?.id) || 0) + 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (message.role === "tool") {
|
|
40
|
+
const id = message.tool_call_id;
|
|
41
|
+
resultCounts.set(id, (resultCounts.get(id) || 0) + 1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let output = messages;
|
|
45
|
+
for (let index = 0; index < messages.length; index++) {
|
|
46
|
+
const message = messages[index];
|
|
47
|
+
if (message.role !== "assistant" || !Array.isArray(message.tool_calls))
|
|
48
|
+
continue;
|
|
49
|
+
for (
|
|
50
|
+
let callIndex = 0;
|
|
51
|
+
callIndex < message.tool_calls.length;
|
|
52
|
+
callIndex++
|
|
53
|
+
) {
|
|
54
|
+
const call = message.tool_calls[callIndex];
|
|
55
|
+
if (
|
|
56
|
+
typeof call?.id !== "string" ||
|
|
57
|
+
!call.id ||
|
|
58
|
+
callCounts.get(call.id) !== 1 ||
|
|
59
|
+
resultCounts.get(call.id) !== 1 ||
|
|
60
|
+
!call.function ||
|
|
61
|
+
(call.function.arguments !== null &&
|
|
62
|
+
typeof call.function.arguments === "object" &&
|
|
63
|
+
!Array.isArray(call.function.arguments)) ||
|
|
64
|
+
["function", "symbol", "bigint"].includes(
|
|
65
|
+
typeof call.function.arguments,
|
|
66
|
+
) ||
|
|
67
|
+
parseToolArguments(call.function.arguments) !== null
|
|
68
|
+
)
|
|
69
|
+
continue;
|
|
70
|
+
let resultIndex = index + 1;
|
|
71
|
+
while (
|
|
72
|
+
resultIndex < messages.length &&
|
|
73
|
+
messages[resultIndex].role === "tool" &&
|
|
74
|
+
messages[resultIndex].tool_call_id !== call.id
|
|
75
|
+
)
|
|
76
|
+
resultIndex++;
|
|
77
|
+
const result = messages[resultIndex];
|
|
78
|
+
if (result?.role !== "tool" || result.tool_call_id !== call.id) continue;
|
|
79
|
+
let content;
|
|
80
|
+
try {
|
|
81
|
+
content = JSON.parse(result.content);
|
|
82
|
+
} catch {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (!isUnexecutedArgumentRejection(content)) continue;
|
|
86
|
+
// The legacy dispatch code belongs only to run_code.
|
|
87
|
+
if (
|
|
88
|
+
content.code !== TOOL_ARGUMENTS_INVALID_CODE &&
|
|
89
|
+
call.function.name !== "run_code"
|
|
90
|
+
)
|
|
91
|
+
continue;
|
|
92
|
+
if (output === messages) output = [...messages];
|
|
93
|
+
const calls = [...output[index].tool_calls];
|
|
94
|
+
calls[callIndex] = {
|
|
95
|
+
...call,
|
|
96
|
+
function: { ...call.function, arguments: "{}" },
|
|
97
|
+
};
|
|
98
|
+
output[index] = { ...output[index], tool_calls: calls };
|
|
99
|
+
output[resultIndex] = {
|
|
100
|
+
...result,
|
|
101
|
+
content: JSON.stringify({
|
|
102
|
+
...content,
|
|
103
|
+
argumentRecovery:
|
|
104
|
+
"Malformed original arguments were omitted from this model request. " +
|
|
105
|
+
"The call was rejected before execution. Issue a new call with a valid JSON object if still appropriate.",
|
|
106
|
+
}),
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return output;
|
|
111
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-h7ovueJc.js";import{$ as t}from"./index-3RqDry-K.js";import"./responsiveObserve-CHw_f2d3.js";import"./vendor-BXcBOG8b.js";import"./useFlexGapSupport-_tbIIFMu.js";import"./styleChecker-DMybAFsA.js";import"./index-CjHA_Q7s.js";import"./icons-DlxlFL4g.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-IO1NEUYL.js";import{$ as t}from"./index-3RqDry-K.js";import"./index-CjHA_Q7s.js";import"./vendor-BXcBOG8b.js";import"./icons-DlxlFL4g.js";const s=t(o);export{s as default};
|