chainlesschain 0.166.106 → 0.166.108
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 +187 -8
- package/package.json +2 -2
- 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-CKwEku2e.js → AIOps-B5HWUFaS.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BSUOuTpW.js → ActionButton-DCIKpxoQ.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CGxvL_FI.js → Analytics-dsgvjCEQ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-bCPwz-5w.js → AppLayout-DWDH5Qbm.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-2_BOWo6e.js → Artifacts-BD8S8kzU.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CBOruzgW.js → Audit-CDXv4Aoj.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-lg0IU5HN.js → BackgroundAgents-BLAQ5Uy0.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-OspCi452.js → Backup-moPac6tF.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BMkliqlz.js → BaseInput-C_6nzsLU.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BfoiUZwp.js → Chat-cYuslkFG.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BjnfMwep.js → ChatBubbleRenderer-Ceh3MG6M.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-jTMlkNQZ.js → Checkbox-Qjb-XOX_.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CycyJcnU.js → Codegen-IYRWXlMA.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BVWlReQj.js → Col-CsQ9jv8M.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CKRHl4xK.js → Community-BbNmfTwe.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BtpfMdhT.js → Compact-SShDx-nr.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DtHB1Ct1.js → Compliance-CLWhKIJp.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-D_8X7-RK.js → Cowork-D4tK9_s3.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DMCOyvEa.js → Cron-D7GnfQ1z.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CeHdsu7m.js → Crosschain-TG86SH3X.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CL6mR6zX.js → DID-6pue0NCO.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-oz9n6DC7.js → Dashboard-BwkJ29du.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CbWm8mWu.js → Dropdown-DEvpYDof.js} +1 -1
- package/src/assets/web-panel/assets/EmailListRenderer-CQj7UlKJ.js +1 -0
- package/src/assets/web-panel/assets/{EvolutionSettings-DPwqgRYm.js → EvolutionSettings-tpvPMM9W.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DkV4YMFj.js → FamilyGuardDashboard-CWYFW75O.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CpUKHIOH.js → Federation-gRIi96rM.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-C6KXRgjR.js → FormItemContext-B7Nr3YkV.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-C5Y4L5E3.js → GenericCardRenderer-b1BgGgLT.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CBwKdF8s.js → Git-Dis1jjO7.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Dt-OR7Aa.js → Governance-C4Yg99Am.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Czkl-Lhl.js → Inference-D4UQRbGu.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C7NE4949.js → KnowledgeGraph-Co_kLMAq.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CoAuZiMG.js → Logs-D4BRp7bg.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DTkjTwGI.js → MarkdownRenderer-Dgy8arQI.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-IzrV-7zH.js → Marketplace-ys0j1vr9.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DYEea7aS.js → McpTools-B3ZvRZe_.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-Uqe7ZrV6.js → Memory-BOa0jbr-.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D092EGyM.js → MobileBridge-CWJRmUbj.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-7ty8vTpj.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-gg4jzfB-.js → Mtc-CCcOk5m5.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BibGfs71.js → MtcAudit-vlrrScbQ.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BmB5yRXP.js → Multisig-C8K59S_8.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BBSlPDyY.js → NLProgramming-oTpFYVme.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Bui3-KiC.js → Notes-BhqAJWiz.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-ovXtbHe5.js → NotificationSettings-DCnV1CJM.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Bq-qD7eG.js → OrderTableRenderer-CZGnsrVW.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DacIY9oJ.js → Organization-DX1LuQlJ.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CX8osheZ.js → Overflow-CbfKrFdT.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-1lnikqVp.js → P2P-BEwYZuHL.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DCrU-V6A.js → PdhVaultBrowser-YNmWbwd7.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Dfcb6kM2.js → Permissions-DyZ18LiA.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-dvgai4hf.js → PersonalDataHub-B2J3aw2g.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-nymAEtnK.js → Pipeline-CXl2ZlhQ.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-D0Vd91oM.js → Privacy-I5SDmgAp.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BpUBcu7o.js → ProjectInit-Crl9tXw3.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DIzwTT-M.js → ProjectSettings-DCFtFlSK.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Den4RUw6.js → Projects-Do5BQq1i.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Cq8p-M0d.js → Providers-Cb7OWa3y.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DSmqOfYk.js → QrScannerModal-CJmhAU-s.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BDHCeSnA.js → QuickAsk-Cu6lEWou.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B_9M8oF4.js → Recommend-Crip3jLB.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-5ot4leHy.js → RemoteSession-KxYY-2CB.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-B3F013PY.js → Reputation-D0vN-htI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BMyBJnZw.js → Row-wqzd_xCD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-WmV0l52g.js → RssFeed-8lsPfb0a.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Wl80yXnR.js → Search-C-e8qAeU.js} +1 -1
- package/src/assets/web-panel/assets/{Security-gbDMKb5m.js → Security-CMM9WgFy.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Bx2Bjhah.js → Services-CZdxjN2B.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BvJNybjV.js → Skeleton-BI3XNk35.js} +1 -1
- package/src/assets/web-panel/assets/Skills-DMlsh9It.js +1 -0
- package/src/assets/web-panel/assets/{Sla-BM9gyZwc.js → Sla-HQruznKY.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Bu9FL9Tz.js → SpeechSettings-Dl-MFq3w.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D8ICJsMt.js → SyncSettings-BU224vDm.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-DESg3yCs.js +1 -0
- package/src/assets/web-panel/assets/{Templates-BJzpTD0W.js → Templates-Jb3TPz4Q.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BN8eX4R2.js → Tenant-CQ-GTrfa.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-CjtP9bpq.js → Terminal-BbMl3Rue.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CpNRa4XW.js → TimelineRenderer-CS_vstKF.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-2lNNvNAH.js → Tokens-BaopVl1f.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DxtxXyPg.js → Trigger-DtnD4WUN.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CakzGeF9.js → Trust-CsvG4Tmf.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CvJeRXwV.js → UkeySign-C1-A-cOV.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D80pMzcO.js → VideoEditing-CNgJPdSL.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BF-VOBmZ.js → Wallet-CdF41501.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DXyoAzE_.js → WebAuthn-D-JmxD5g.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-X6CDxzrF.js → WorkflowEditor-C0XunR13.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BcUhqjeA.js → chat-BBAZpD_G.js} +1 -1
- package/src/assets/web-panel/assets/{colors-Dw4bKaCm.js → colors-BxSxO5BX.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BWhu5Eri.js → compact-item-BoxL8pg5.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BLJ9JKoN.js → createContext-W5JAyZmY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BI5TZ7EX.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DIkCiJbt.js → hasIn-HpiKDPVC.js} +1 -1
- package/src/assets/web-panel/assets/index-9-JLDK5n.js +1 -0
- package/src/assets/web-panel/assets/{index-BAwcMKaD.js → index-9caMEwQ-.js} +1 -1
- package/src/assets/web-panel/assets/{index-0mHbawfQ.js → index-B05_YRHZ.js} +1 -1
- package/src/assets/web-panel/assets/index-B7m8ioaQ.js +1 -0
- package/src/assets/web-panel/assets/{index-D3wp_jgy.js → index-B9VxE1C-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BotMuGS2.js → index-BA3WWQAT.js} +1 -1
- package/src/assets/web-panel/assets/{index-LOsZYbic.js → index-BSJ0cAle.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5qms36i.js → index-BW4PP5GN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDfB6hWf.js → index-BZAbaY64.js} +1 -1
- package/src/assets/web-panel/assets/{index-BipG-tDs.js → index-Ba4usRFM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgsVg5Up.js → index-BgMViZIY.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTPoBbIR.js → index-BtFAEG08.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKzG3kBM.js → index-Bwn6k_qw.js} +1 -1
- package/src/assets/web-panel/assets/{index-PRYboDFm.js → index-C4uI7WCB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQbWGvE4.js → index-C5kqii-G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1fufz1A.js → index-C7GIUWWF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjEP26Te.js → index-CM_gdohF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcTch6Fp.js → index-CRg3aOoj.js} +1 -1
- package/src/assets/web-panel/assets/{index-04SKBH8l.js → index-CcyzZloJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHLW27Je.js → index-CehxfRUR.js} +1 -1
- package/src/assets/web-panel/assets/{index-5vzPcr1g.js → index-D6m6B4Wy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV4FSjmI.js → index-DSyfxxQS.js} +3 -3
- package/src/assets/web-panel/assets/{index-D5vFJmmX.js → index-DaJk9U9V.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxLDNxEQ.js → index-DcmAiq_Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-Erv8A9.js → index-DdEcQ1rp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqGqoID5.js → index-DinY7IQa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGMzh2oj.js → index-DkSnlgK_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxfimJOH.js → index-DlPvZgv8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DOjQi7oU.js → index-DuM9I1If.js} +1 -1
- package/src/assets/web-panel/assets/{index-uMtx6e3D.js → index-DwidpDEE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXJ8t1hK.js → index-IO2I7nzu.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cmc7qH2C.js → index-JrMBRi62.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaStonJm.js → index-QzlEbtRL.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cr05twNa.js → index-V6VIJe2N.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGFqk1-E.js → index-_38IJqoP.js} +1 -1
- package/src/assets/web-panel/assets/{index-u0tqS0iq.js → index-_p4e3KfB.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1r2R4a-.js → index-gvfIRZxJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFGOV-YT.js → index-ooP1pQCt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUC4TZWg.js → index-p6rNtYud.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Bx6Hj_FG.js → initDefaultProps-Dfn6M05J.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BSWivB70.js → motion-BRRwFqGO.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dv1Pg9R7.js → move-DpDPN6zR.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bqtl8fsk.js → mtc-parser-BHlSE87F.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DpOBjOSQ.js → omit-CEOri_L5.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D-M-dz48.js → pickAttrs-DqICh-ad.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DsTLAifk.js → placementArrow-DQizFFiV.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BVTetMpc.js → responsiveObserve-DmFHPdvC.js} +1 -1
- package/src/assets/web-panel/assets/{slide-abEcz-Cv.js → slide-s2s1XS3T.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CBhrdU2G.js → statusUtils-IwEIbBan.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CFq8ZCKa.js → styleChecker-CIFLlbXH.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-o4eE7fDV.js → useFlexGapSupport-CFkN2Cgh.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Hs9W8ihi.js → useFs-BSY6O48s.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Bnet5Jho.js → usePersonalDataHub-iJl3VnU0.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DJfN4kWs.js → vnode-vu8ReMs7.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BzV-2e7X.js → zoom-CeSrYAHp.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +2 -2
- package/src/commands/agent.js +20 -20
- package/src/commands/goal.js +299 -1
- package/src/commands/plugin.js +129 -68
- package/src/constants.js +2 -2
- package/src/data/changelog.json +29 -3
- package/src/harness/jsonl-session-store.js +128 -5
- package/src/harness/prompt-compressor.js +18 -10
- package/src/harness/structured-handoff.js +151 -13
- package/src/lib/agent-session-export.js +20 -0
- package/src/lib/background-agent-supervisor.js +54 -0
- package/src/lib/cli-goal-catalog.js +129 -0
- package/src/lib/cli-goal-source.js +119 -0
- package/src/lib/coding-task-guidance.js +2 -1
- package/src/lib/config-schema.js +1 -1
- package/src/lib/context-memory-kernel/live-compaction.js +75 -12
- package/src/lib/eval/stream-terminal.js +27 -2
- package/src/lib/evolution/evolution-artifact-ports.js +22 -11
- package/src/lib/evolution/evolution-file-witness.js +86 -63
- package/src/lib/evolution/evolution-ledger-file-backend.js +22 -0
- package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +34 -35
- package/src/lib/evolution/evolution-ledger-file-manifest-head-store.js +32 -39
- package/src/lib/evolution/evolution-ledger.js +367 -169
- package/src/lib/evolution/evolution-manifest-state-reader.js +58 -0
- package/src/lib/evolution/evolution-physical-state-reader.js +308 -0
- package/src/lib/evolution/evolution-witness-segments.js +12 -13
- package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +82 -56
- package/src/lib/evolution/rrsi-observed-text-index.js +17 -1
- package/src/lib/evolution/rrsi-tenant-index-anchor-history.js +5 -0
- package/src/lib/execution-location-failure-site.js +20 -3
- package/src/lib/goal-store.js +8 -1
- package/src/lib/image-input.js +43 -14
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/plugin-runtime/capabilities.js +10 -0
- package/src/lib/plugin-runtime/cli-goal-draft-request.js +138 -0
- package/src/lib/plugin-runtime/cli-goal-drafts.js +413 -0
- package/src/lib/plugin-runtime/cli-goal-extension-host.js +234 -0
- package/src/lib/plugin-runtime/examples/goal-description-drafter/plugin.json +17 -0
- package/src/lib/plugin-runtime/examples/goal-evidence-viewer/plugin.json +25 -0
- package/src/lib/plugin-runtime/examples/goal-progress-viewer/plugin.json +21 -0
- package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +38 -0
- package/src/lib/plugin-runtime/goal-extension-contract.js +190 -0
- package/src/lib/plugin-runtime/goal-extensions.js +277 -0
- package/src/lib/plugin-runtime/install.js +40 -40
- package/src/lib/plugin-runtime/manifest.js +12 -0
- package/src/lib/plugin-runtime/policy.js +1 -0
- package/src/lib/project-goal-connection.js +225 -0
- package/src/lib/project-goal-draft-connection.js +217 -0
- package/src/lib/read-file-loop-guard.js +124 -8
- package/src/lib/session-host-snapshot.js +3 -0
- package/src/lib/session-message-provenance.js +24 -5
- package/src/lib/session-tool-round.js +39 -0
- package/src/lib/session-transcript-history.js +2 -0
- package/src/lib/session-transcript-page.js +4 -1
- package/src/lib/session-transcript-structure.js +4 -0
- package/src/lib/task-model-selector.js +1 -1
- package/src/repl/agent-repl.js +14 -7
- package/src/repl/config-summary.js +1 -1
- package/src/runtime/__tests__/message-roles.test.js +29 -0
- package/src/runtime/agent-core.js +116 -44
- package/src/runtime/headless-runner.js +191 -34
- package/src/runtime/headless-stream.js +144 -48
- package/src/runtime/message-roles.js +43 -0
- package/src/runtime/policies/agent-policy.js +1 -0
- package/src/workers/background-agent-worker.js +146 -47
- package/src/assets/web-panel/assets/EmailListRenderer-DXlmbC45.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-CwA1VoVJ.js +0 -1
- package/src/assets/web-panel/assets/Skills-Tz4rQcDp.js +0 -1
- package/src/assets/web-panel/assets/Tasks-B6MowBDo.js +0 -1
- package/src/assets/web-panel/assets/devWarning-D_MJgDGJ.js +0 -1
- package/src/assets/web-panel/assets/index-BP8log78.js +0 -1
- package/src/assets/web-panel/assets/index-PexF9zYf.js +0 -1
|
@@ -133,6 +133,10 @@ export function verifyRrsiTenantIndexAnchorHistory(input) {
|
|
|
133
133
|
snapshot.artifactStoreDirectoryBoundaryDigest,
|
|
134
134
|
artifactStoreDirectoryBoundaryRechecked: true,
|
|
135
135
|
artifactStoreBoundaryScope: "root-and-files-directories",
|
|
136
|
+
sourceJournalDirectoryBoundaryDigest:
|
|
137
|
+
snapshot.sourceJournalDirectoryBoundaryDigest,
|
|
138
|
+
sourceJournalDirectoryBoundaryRechecked: true,
|
|
139
|
+
sourceJournalBoundaryScope: "source-journal-four-directories",
|
|
136
140
|
previous: snapshot.prefixes[0],
|
|
137
141
|
current: snapshot.current,
|
|
138
142
|
signaturesVerifiedRelativeToExplicitKey: true,
|
|
@@ -141,6 +145,7 @@ export function verifyRrsiTenantIndexAnchorHistory(input) {
|
|
|
141
145
|
localRetainedHistoryReplayed: true,
|
|
142
146
|
selectedContextOnly: true,
|
|
143
147
|
storageGraphDigestVerified: false,
|
|
148
|
+
fullPhysicalStorageGraphVerified: false,
|
|
144
149
|
rootAuthorityVerified: false,
|
|
145
150
|
installationBindingSignatureVerified: false,
|
|
146
151
|
routingPinVerified: false,
|
|
@@ -22,7 +22,7 @@ export function readExecutionLocationStorageFailure(stderr) {
|
|
|
22
22
|
const match = String(stderr || "")
|
|
23
23
|
.slice(0, MAX_DIAGNOSTIC_CHARS)
|
|
24
24
|
.match(
|
|
25
|
-
/\[windows-acl:(initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify|timeout(?:-(?:startup|initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify))?|spawn|output)(:0x[0-9a-f]{8})?\]/u,
|
|
25
|
+
/\[windows-acl:(initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify|verify-read|verify-rules|serialize|output-complete|timeout(?:-(?:startup|initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify|verify-read|verify-rules|serialize|output-complete))?|spawn|output)(:0x[0-9a-f]{8})?\]/u,
|
|
26
26
|
);
|
|
27
27
|
return match ? `${match[1]}${match[2] || ""}` : null;
|
|
28
28
|
}
|
|
@@ -31,7 +31,7 @@ export function readExecutionLocationStorageLaunchFailure(stderr) {
|
|
|
31
31
|
const match = String(stderr || "")
|
|
32
32
|
.slice(0, MAX_DIAGNOSTIC_CHARS)
|
|
33
33
|
.match(
|
|
34
|
-
/\[windows-acl-launch:(inspect|repair|preflight):(spawn|timeout):(startup|initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify):(EACCES|EPERM|ENOENT|ETIMEDOUT|EINVAL|ENOSYS|ENOMEM|EMFILE|ENFILE|ENOBUFS|EBUSY|UNKNOWN):(unknown|-?(?:0|[1-9][0-9]{0,4})):(spawnSync|spawn|unknown)\]/u,
|
|
34
|
+
/\[windows-acl-launch:(inspect|repair|preflight):(spawn|timeout):(startup|initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify|verify-read|verify-rules|serialize|output-complete):(EACCES|EPERM|ENOENT|ETIMEDOUT|EINVAL|ENOSYS|ENOMEM|EMFILE|ENFILE|ENOBUFS|EBUSY|UNKNOWN):(unknown|-?(?:0|[1-9][0-9]{0,4})):(spawnSync|spawn|unknown)\]/u,
|
|
35
35
|
);
|
|
36
36
|
if (!match) return null;
|
|
37
37
|
const [, operation, failureStage, progressStage, code, rawErrno, syscall] =
|
|
@@ -42,7 +42,24 @@ export function readExecutionLocationStorageLaunchFailure(stderr) {
|
|
|
42
42
|
(failureStage === "timeout") !== (code === "ETIMEDOUT")
|
|
43
43
|
)
|
|
44
44
|
return null;
|
|
45
|
-
|
|
45
|
+
const timing = String(stderr || "")
|
|
46
|
+
.slice(0, MAX_DIAGNOSTIC_CHARS)
|
|
47
|
+
.match(
|
|
48
|
+
/\[windows-acl-elapsed:(initialize|traversal|lookup|repair-lock|repair-inspect|repair-write|verify|verify-read|verify-rules|serialize|output-complete):(0|[1-9][0-9]{0,5})\]/u,
|
|
49
|
+
);
|
|
50
|
+
const elapsedMs =
|
|
51
|
+
timing?.[1] === progressStage && Number(timing[2]) <= 300000
|
|
52
|
+
? Number(timing[2])
|
|
53
|
+
: null;
|
|
54
|
+
return {
|
|
55
|
+
operation,
|
|
56
|
+
failureStage,
|
|
57
|
+
progressStage,
|
|
58
|
+
code,
|
|
59
|
+
errno,
|
|
60
|
+
syscall,
|
|
61
|
+
...(elapsedMs === null ? {} : { elapsedMs }),
|
|
62
|
+
};
|
|
46
63
|
}
|
|
47
64
|
|
|
48
65
|
export function executionLocationFailureSite(error) {
|
package/src/lib/goal-store.js
CHANGED
|
@@ -51,6 +51,8 @@ export function goalFileStoreId(root = defaultRoot()) {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function fileRecord(value, root) {
|
|
54
|
+
if (value?.ownerRef != null || value?.projectRef != null)
|
|
55
|
+
throw goalError("GOAL_PROJECT_STORE_REQUIRED");
|
|
54
56
|
const record = upgradeLegacyGoal(value, goalFileStoreId(root));
|
|
55
57
|
if (record.storeId !== goalFileStoreId(root))
|
|
56
58
|
throw goalError("GOAL_STORE_MISMATCH");
|
|
@@ -537,13 +539,18 @@ export function resolveActiveGoal(sel = {}, opts = {}) {
|
|
|
537
539
|
export function createGoalFileAdapter(opts = {}) {
|
|
538
540
|
const root = opts.root || defaultRoot();
|
|
539
541
|
const storeId = goalFileStoreId(root);
|
|
542
|
+
const readJson =
|
|
543
|
+
opts.readJson === undefined
|
|
544
|
+
? (file) => JSON.parse(fs.readFileSync(file, "utf8"))
|
|
545
|
+
: opts.readJson;
|
|
546
|
+
if (typeof readJson !== "function") throw goalError("GOAL_INVALID_ADAPTER");
|
|
540
547
|
function read(id) {
|
|
541
548
|
if (isUnsafeGoalId(id)) throw goalError("GOAL_INVALID_ID");
|
|
542
549
|
const file = goalFile(root, id);
|
|
543
550
|
if (!fs.existsSync(file)) return null;
|
|
544
551
|
let value;
|
|
545
552
|
try {
|
|
546
|
-
value =
|
|
553
|
+
value = readJson(file);
|
|
547
554
|
} catch {
|
|
548
555
|
throw goalError("GOAL_RECORD_CORRUPT");
|
|
549
556
|
}
|
package/src/lib/image-input.js
CHANGED
|
@@ -174,14 +174,15 @@ export function detectImagePaths(text, deps = {}) {
|
|
|
174
174
|
* (the REPL itself forces a terminal and can't be driven headlessly).
|
|
175
175
|
*
|
|
176
176
|
* @param {string} text the user's typed message
|
|
177
|
-
* @param {object} llm { provider, baseUrl, apiKey, visionModel } current LLM
|
|
177
|
+
* @param {object} llm { provider, model, baseUrl, apiKey, visionModel } current LLM
|
|
178
178
|
* @param {object} deps { existsSync, fs } injected for tests
|
|
179
|
+
* @param {object} flags explicit per-run model overrides
|
|
179
180
|
* @returns {{ content, images: string[], visionLlm: object|null, text: string }}
|
|
180
181
|
* content is a plain string when no image is detected, else a multimodal
|
|
181
182
|
* array; visionLlm is the per-turn provider/model/baseUrl/apiKey override
|
|
182
183
|
* (null when there are no images); text is the path-stripped prompt.
|
|
183
184
|
*/
|
|
184
|
-
export function prepareVisionTurn(text, llm = {}, deps = {}) {
|
|
185
|
+
export function prepareVisionTurn(text, llm = {}, deps = {}, flags = {}) {
|
|
185
186
|
const detected = detectImagePaths(text, deps);
|
|
186
187
|
if (!detected.images.length) {
|
|
187
188
|
return { content: text, images: [], visionLlm: null, text };
|
|
@@ -191,7 +192,7 @@ export function prepareVisionTurn(text, llm = {}, deps = {}) {
|
|
|
191
192
|
return {
|
|
192
193
|
content: buildUserContent(finalText, resolved),
|
|
193
194
|
images: detected.images,
|
|
194
|
-
visionLlm: resolveVisionLlm({ hasImage: true, flags
|
|
195
|
+
visionLlm: resolveVisionLlm({ hasImage: true, flags, llm }),
|
|
195
196
|
text: finalText,
|
|
196
197
|
};
|
|
197
198
|
}
|
|
@@ -276,13 +277,38 @@ export function imageUrlBlockToAnthropic(block) {
|
|
|
276
277
|
*/
|
|
277
278
|
export const DEFAULT_VISION_MODEL = "doubao-seed-2-0-lite-260215";
|
|
278
279
|
|
|
280
|
+
// Recognize image-input families, including dated snapshots and local tags.
|
|
281
|
+
// Unknown models keep using the configured vision fallback. Do not infer
|
|
282
|
+
// vision from the provider alone or from text-only siblings (e.g. o1-mini,
|
|
283
|
+
// DeepSeek V3/V4, MiniMax-Text, Qwen Coder, or GPT audio/transcription SKUs).
|
|
284
|
+
const VISION_MODEL_PATTERNS = [
|
|
285
|
+
/^deepseek-v4[.-]1-(?:flash|pro)(?:-\d{6})?$/i,
|
|
286
|
+
/^gpt-(?:4o(?:-mini)?|4\.1(?:-mini|-nano)?|[56](?:\.\d+)?(?:-(?:sol|astra|luna|mini|nano|pro|chat|codex)(?:-(?:mini|max))?)*)(?:-(?:\d{4}-\d{2}-\d{2}|latest))?$/i,
|
|
287
|
+
/^gpt-4-(?:turbo(?:-\d{4}-\d{2}-\d{2})?|vision-preview)$/i,
|
|
288
|
+
/^(?:o1|o3(?:-pro)?|o4-mini)(?:-\d{4}-\d{2}-\d{2})?$/i,
|
|
289
|
+
/^claude-(?:3(?:[.-][57])?-(?:opus|sonnet|haiku)|(?:opus|sonnet|haiku)-[345](?:[.-]\d+)?)(?:-\d{8}|-latest)?$/i,
|
|
290
|
+
/^gemini-(?:(?:1\.5|[23](?:\.\d+)?)-(?:pro|flash)(?!.*(?:tts|audio))[\w.-]*|pro-vision)$/i,
|
|
291
|
+
/^doubao-(?:seed-(?:1[.-][68]|2[.-][01])(?:-(?:pro|lite|flash|thinking))?(?:-\d{6})?|(?:1[.-]5-)?vision[\w.-]*)$/i,
|
|
292
|
+
/^(?:qwen-vl-(?:max|plus)|qwen(?:2(?:[.-]5)?|3)[.-]?vl|qwen[23](?:[.-]5)?-omni|qvq)(?:[-:.][\w.-]+)?$/i,
|
|
293
|
+
/^qwen3[.-]5(?:[-:.][\w.-]+)?$/i,
|
|
294
|
+
/^glm-4(?:[.-]\d+)?v(?:-[\w.-]+)?$/i,
|
|
295
|
+
/^(?:kimi-k2[.-]5|moonshot-v1-(?:8k|32k|128k)-vision)(?:-[\w.-]+)?$/i,
|
|
296
|
+
/^(?:pixtral-(?:12b|large)|mistral-small-(?:3[.-][12]|250[36])|minimax-vl-01)(?:[-:.][\w.-]+)?$/i,
|
|
297
|
+
/^(?:llava|bakllava|llama3\.2-vision|minicpm-v|moondream)(?:[-:.][\w.-]+)?$/i,
|
|
298
|
+
/^gemma3(?::(?:4b|12b|27b)(?:-[\w.-]+)?)?$/i,
|
|
299
|
+
];
|
|
300
|
+
|
|
301
|
+
export function supportsVisionModel(model) {
|
|
302
|
+
if (typeof model !== "string") return false;
|
|
303
|
+
const id = model.trim().split("/").at(-1);
|
|
304
|
+
return VISION_MODEL_PATTERNS.some((pattern) => pattern.test(id));
|
|
305
|
+
}
|
|
306
|
+
|
|
279
307
|
/**
|
|
280
|
-
* Resolve
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
* Explicit flags always win; with no image, behaviour is unchanged (vision config
|
|
285
|
-
* is ignored). `--vision-model` overrides the configured/default vision model.
|
|
308
|
+
* Resolve image input using the main model when it supports vision. Only
|
|
309
|
+
* text-only/unknown main models use llm.visionModel or DEFAULT_VISION_MODEL.
|
|
310
|
+
* Explicit --model/--vision-model choices take precedence over saved settings.
|
|
311
|
+
* Without an image, no override is applied.
|
|
286
312
|
*
|
|
287
313
|
* @param {object} p
|
|
288
314
|
* @param {boolean} p.hasImage true when the run carries an attached image
|
|
@@ -301,13 +327,16 @@ export function resolveVisionLlm({ hasImage, flags = {}, llm = {} } = {}) {
|
|
|
301
327
|
apiKey: undefined,
|
|
302
328
|
};
|
|
303
329
|
}
|
|
304
|
-
const
|
|
305
|
-
flags.
|
|
306
|
-
|
|
307
|
-
|
|
330
|
+
const mainModel =
|
|
331
|
+
!flags.provider || !llm.provider || flags.provider === llm.provider
|
|
332
|
+
? llm.model
|
|
333
|
+
: undefined;
|
|
334
|
+
const visionModel = supportsVisionModel(mainModel)
|
|
335
|
+
? mainModel
|
|
336
|
+
: llm.visionModel || DEFAULT_VISION_MODEL;
|
|
308
337
|
return {
|
|
309
338
|
provider: flags.provider || llm.provider,
|
|
310
|
-
model: flags.model || visionModel,
|
|
339
|
+
model: flags.model || flags.visionModel || visionModel,
|
|
311
340
|
baseUrl: flags.baseUrl || llm.baseUrl,
|
|
312
341
|
apiKey: flags.apiKey || llm.apiKey,
|
|
313
342
|
};
|
package/src/lib/llm-providers.js
CHANGED
|
@@ -86,6 +86,7 @@ export const BUILT_IN_PROVIDERS = {
|
|
|
86
86
|
baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
|
|
87
87
|
apiKeyEnv: "VOLCENGINE_API_KEY",
|
|
88
88
|
models: [
|
|
89
|
+
"deepseek-v4-1-flash-260910",
|
|
89
90
|
"deepseek-v4-flash-ga-260731",
|
|
90
91
|
"deepseek-v4-flash-260425",
|
|
91
92
|
"doubao-seed-2-1-pro-260628",
|
|
@@ -32,6 +32,7 @@ export const CAPABILITY_KINDS = Object.freeze([
|
|
|
32
32
|
"mcp",
|
|
33
33
|
"monitor",
|
|
34
34
|
"credential",
|
|
35
|
+
"goalExtension",
|
|
35
36
|
]);
|
|
36
37
|
|
|
37
38
|
function toBool(v) {
|
|
@@ -92,6 +93,10 @@ export function normalizeCapabilities(raw) {
|
|
|
92
93
|
mcp: toBool(r.mcp),
|
|
93
94
|
monitor: toBool(r.monitor ?? r.monitors),
|
|
94
95
|
credential: { names: toList(r.credential ?? r.credentials) },
|
|
96
|
+
// Keep old normalized records unchanged; missing goal grants are deny-all.
|
|
97
|
+
...(Object.hasOwn(r, "goalExtension")
|
|
98
|
+
? { goalExtension: toList(r.goalExtension) }
|
|
99
|
+
: {}),
|
|
95
100
|
};
|
|
96
101
|
}
|
|
97
102
|
|
|
@@ -137,6 +142,7 @@ export function diffCapabilities(prev, next) {
|
|
|
137
142
|
};
|
|
138
143
|
listCap("filesystem", "filesystem", (c) => c.filesystem.roots);
|
|
139
144
|
listCap("credential", "credential", (c) => c.credential.names);
|
|
145
|
+
listCap("goalExtension", "goalExtension", (c) => c.goalExtension || []);
|
|
140
146
|
|
|
141
147
|
return { added, removed, widened: added.length > 0 };
|
|
142
148
|
}
|
|
@@ -168,6 +174,10 @@ export function describeCapabilities(caps) {
|
|
|
168
174
|
if (c.monitor) lines.push("monitor: may run background monitors");
|
|
169
175
|
if (c.credential.names.length)
|
|
170
176
|
lines.push(`credential: ${c.credential.names.join(", ")}`);
|
|
177
|
+
if (c.goalExtension?.length)
|
|
178
|
+
lines.push(
|
|
179
|
+
`goalExtension: ${c.goalExtension.join(", ")} (host authorization required)`,
|
|
180
|
+
);
|
|
171
181
|
return lines;
|
|
172
182
|
}
|
|
173
183
|
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { VERSION } from "../../constants.js";
|
|
4
|
+
import { createProjectGoalConnection } from "../project-goal-connection.js";
|
|
5
|
+
import { collectGoalExtensions } from "./goal-extensions.js";
|
|
6
|
+
import { createGoalDraftRequest } from "@chainlesschain/session-core/goal-draft-request-contract";
|
|
7
|
+
import { digestBusinessObjectContent as digest } from "@chainlesschain/session-core/business-object-contract";
|
|
8
|
+
const HOST = Object.freeze({
|
|
9
|
+
id: "cli",
|
|
10
|
+
version: VERSION,
|
|
11
|
+
capabilities: Object.freeze(["proposal:task.description.update"]),
|
|
12
|
+
});
|
|
13
|
+
function fail(code) {
|
|
14
|
+
throw new Error(code);
|
|
15
|
+
}
|
|
16
|
+
export function readGoalDraftDescription(file) {
|
|
17
|
+
const target = path.resolve(file),
|
|
18
|
+
before = fs.lstatSync(target);
|
|
19
|
+
if (
|
|
20
|
+
!before.isFile() ||
|
|
21
|
+
before.isSymbolicLink() ||
|
|
22
|
+
before.size > 8192 ||
|
|
23
|
+
before.nlink !== 1
|
|
24
|
+
)
|
|
25
|
+
fail("GOAL_DRAFT_DESCRIPTION_INVALID");
|
|
26
|
+
const fd = fs.openSync(
|
|
27
|
+
target,
|
|
28
|
+
fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW || 0),
|
|
29
|
+
);
|
|
30
|
+
try {
|
|
31
|
+
const opened = fs.fstatSync(fd),
|
|
32
|
+
raw = Buffer.alloc(8193),
|
|
33
|
+
length = fs.readSync(fd, raw, 0, raw.length, 0),
|
|
34
|
+
after = fs.fstatSync(fd),
|
|
35
|
+
current = fs.lstatSync(target);
|
|
36
|
+
if (
|
|
37
|
+
length > 8192 ||
|
|
38
|
+
[opened, after, current].some(
|
|
39
|
+
(stat) =>
|
|
40
|
+
stat.dev !== before.dev ||
|
|
41
|
+
stat.ino !== before.ino ||
|
|
42
|
+
stat.size !== before.size ||
|
|
43
|
+
stat.mtimeMs !== before.mtimeMs ||
|
|
44
|
+
stat.ctimeMs !== before.ctimeMs,
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
fail("GOAL_DRAFT_DESCRIPTION_INVALID");
|
|
48
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(
|
|
49
|
+
raw.subarray(0, length),
|
|
50
|
+
);
|
|
51
|
+
} finally {
|
|
52
|
+
fs.closeSync(fd);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export async function exportCliGoalDraftRequest(id, options = {}) {
|
|
56
|
+
options = Object.freeze({
|
|
57
|
+
...options,
|
|
58
|
+
env: Object.freeze({ ...(options.env || process.env) }),
|
|
59
|
+
});
|
|
60
|
+
const cwd = path.resolve(options.cwd || process.cwd()),
|
|
61
|
+
env = Object.freeze({ ...(options.env || process.env) });
|
|
62
|
+
if (
|
|
63
|
+
!options.connection ||
|
|
64
|
+
!options.plugin ||
|
|
65
|
+
!["user", "project", "local"].includes(options.scope) ||
|
|
66
|
+
!options.descriptionFile ||
|
|
67
|
+
!options.out
|
|
68
|
+
)
|
|
69
|
+
fail("GOAL_DRAFT_EXPORT_ARGUMENTS_REQUIRED");
|
|
70
|
+
const connection = createProjectGoalConnection(options.connection),
|
|
71
|
+
snapshot = await connection.read(id);
|
|
72
|
+
if (
|
|
73
|
+
options.expectedStore !== undefined &&
|
|
74
|
+
options.expectedStore !== snapshot.goalRef.storeId
|
|
75
|
+
)
|
|
76
|
+
fail("CLI_GOAL_STORE_MISMATCH");
|
|
77
|
+
const hostOptions = {
|
|
78
|
+
cwd,
|
|
79
|
+
env,
|
|
80
|
+
host: HOST,
|
|
81
|
+
managedSettingsFile: options.managedSettingsFile,
|
|
82
|
+
};
|
|
83
|
+
const admitted = () =>
|
|
84
|
+
collectGoalExtensions(hostOptions).extensions.find(
|
|
85
|
+
(entry) => entry.name === options.plugin && entry.scope === options.scope,
|
|
86
|
+
);
|
|
87
|
+
const plugin = admitted();
|
|
88
|
+
if (
|
|
89
|
+
!plugin ||
|
|
90
|
+
!plugin.declaration.proposals.includes("task.description.update")
|
|
91
|
+
)
|
|
92
|
+
fail("GOAL_DRAFT_PLUGIN_NOT_ADMITTED");
|
|
93
|
+
const request = createGoalDraftRequest({
|
|
94
|
+
declaredPlugin: {
|
|
95
|
+
name: plugin.name,
|
|
96
|
+
scope: plugin.scope,
|
|
97
|
+
version: plugin.version,
|
|
98
|
+
},
|
|
99
|
+
declarationDigest: digest(plugin.declaration),
|
|
100
|
+
proposal: {
|
|
101
|
+
type: "task.description.update",
|
|
102
|
+
goalRef: snapshot.goalRef,
|
|
103
|
+
sourceRef: options.source,
|
|
104
|
+
requestId: options.requestId,
|
|
105
|
+
title: options.title,
|
|
106
|
+
description: readGoalDraftDescription(
|
|
107
|
+
path.resolve(cwd, options.descriptionFile),
|
|
108
|
+
),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
const latest = await connection.read(id),
|
|
112
|
+
current = admitted();
|
|
113
|
+
if (
|
|
114
|
+
!current ||
|
|
115
|
+
digest(current) !== digest(plugin) ||
|
|
116
|
+
latest.objective !== snapshot.objective ||
|
|
117
|
+
latest.status !== snapshot.status ||
|
|
118
|
+
digest(latest.goalRef) !== digest(snapshot.goalRef)
|
|
119
|
+
)
|
|
120
|
+
fail("GOAL_DRAFT_EXPORT_SOURCE_CHANGED");
|
|
121
|
+
const file = path.resolve(cwd, options.out),
|
|
122
|
+
fd = fs.openSync(file, "wx", 0o600);
|
|
123
|
+
try {
|
|
124
|
+
fs.writeFileSync(fd, JSON.stringify(request));
|
|
125
|
+
fs.fsyncSync(fd);
|
|
126
|
+
} finally {
|
|
127
|
+
fs.closeSync(fd);
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
schema: "chainlesschain.goal-draft-export/v1",
|
|
131
|
+
state: "request-exported",
|
|
132
|
+
goalRef: request.proposal.goalRef,
|
|
133
|
+
declaredPlugin: request.declaredPlugin,
|
|
134
|
+
requestId: request.proposal.requestId,
|
|
135
|
+
contentDigest: request.contentDigest,
|
|
136
|
+
file,
|
|
137
|
+
};
|
|
138
|
+
}
|