@tangle-network/sandbox-cli 0.22.132 → 0.22.133
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/dist/{account-K6n39T9G.mjs → account-BaGFNxyq.mjs} +1 -1
- package/dist/{clone-CqxGeiso.mjs → clone-CWY8dI5d.mjs} +1 -1
- package/dist/{credential-store-BglYxKnr.mjs → credential-store-Bpw_4ZTQ.mjs} +1 -1
- package/dist/{device-CYbYA3Ts.mjs → device-i0PzYisd.mjs} +1 -1
- package/dist/{dist-szenDGSN.mjs → dist-CzrZj_46.mjs} +1 -1
- package/dist/{graph-campaign-state-BLsk-81-.mjs → graph-campaign-state-YA-eORZN.mjs} +1 -1
- package/dist/{graph-dataset-V3HZEEry.mjs → graph-dataset-DL_Fx_EH.mjs} +1 -1
- package/dist/{graph-learning-CZixMhev.mjs → graph-learning-CWalyOHM.mjs} +1 -1
- package/dist/{graph-native-Bv5gSn4b.mjs → graph-native-BOIC8WzU.mjs} +1 -1
- package/dist/{graph-operating-evidence-CUiPxcmh.mjs → graph-operating-evidence-CGGxszAi.mjs} +2 -2
- package/dist/index.mjs +31 -31
- package/dist/{run-CEhYsWAB.mjs → run-BSXC2ytE.mjs} +1 -1
- package/dist/{solve-signer-CcAle-Dv.mjs → solve-signer--UaZcdFY.mjs} +1 -1
- package/dist/{submit--rl0SmXb.mjs → submit-D2jvFJtX.mjs} +1 -1
- package/dist/{workspace-C-JZvGpv.mjs → workspace-BOqrV945.mjs} +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,o as t}from"./output-BqCeTtw4.mjs";import{n,t as r}from"./solve-signer
|
|
1
|
+
import{a as e,o as t}from"./output-BqCeTtw4.mjs";import{n,t as r}from"./solve-signer--UaZcdFY.mjs";function i(i){let a=i.create?r():n();if(!a)throw Error("No Solve device signer found. Run `tangle solve account --create`");i.json?e({address:a.account.address,source:a.source}):t({Address:a.account.address,Source:a.source})}export{i as showSolveAccount};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,f as t,r as n,u as r}from"./output-BqCeTtw4.mjs";import{y as i}from"./index.mjs";import{f as a,g as o,i as s,p as c,r as l,t as u}from"./workspace-
|
|
1
|
+
import{a as e,f as t,r as n,u as r}from"./output-BqCeTtw4.mjs";import{y as i}from"./index.mjs";import{f as a,g as o,i as s,p as c,r as l,t as u}from"./workspace-BOqrV945.mjs";import{a as d}from"./api-COxVvwlJ.mjs";import*as f from"node:path";import{execFile as p}from"node:child_process";import{promisify as m}from"node:util";const h=m(p);function g(){return`Task source is '${u}'. Add your fork as 'origin', commit your candidate, push it, and open a pull request before submitting.`}async function _(p,m,_){try{let i=o(await d({path:`/v1/competitions/${encodeURIComponent(p)}`,apiUrl:_.apiUrl,profile:_.profile}),`competition response`),v=c(i.competition??i),y=f.resolve(m??v.slug),b=r(`Cloning ${v.slug}…`);_.json||b.start();try{await h(`git`,[`clone`,`--no-tags`,`--origin`,u,v.repository,y],{encoding:`utf8`,maxBuffer:1e6}),await l(y,[`checkout`,`--detach`,v.taskRevision]);let e=await l(y,[`rev-parse`,`HEAD`]);if(e.toLowerCase()!==v.taskRevision.toLowerCase())throw Error(`Pinned checkout resolved to ${e}, expected ${v.taskRevision}`);await a(f.join(y,`.tangle-solve.json`),v),await s(y)}finally{b.stop()}_.json?e({competition:v,directory:y}):(t(`Cloned ${v.slug} at ${v.taskRevision.slice(0,12)}`),v.provenance&&n(g()),n(`Run the pinned checker with: cd ${y} && tangle solve run`))}catch(e){i(e)}}export{_ as cloneCompetition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import*as e from"node:path";import{randomUUID as t}from"node:crypto";import*as n from"node:fs";import*as r from"node:os";import{execFileSync as i}from"node:child_process";import{lockSync as a}from"proper-lockfile";const o=e.join(r.homedir(),`.tangle`),s=e.join(o,`credentials.json`),c=`tangle-sandbox-cli`,l=new Int32Array(new SharedArrayBuffer(4));var u=class extends Error{constructor(e,t){super(`Credentials file at ${e} is corrupted and cannot be parsed. Inspect or remove it manually before retrying — refusing to overwrite it automatically.`),this.filePath=e,this.name=`CredentialsFileCorruptedError`,t&&(this.cause=t)}},d=class extends Error{constructor(e){super(`Credential storage preflight failed: ${e}`),this.name=`CredentialStorageProbeError`}},f=class extends Error{constructor(e){super(`Credential storage is busy. Wait a moment and retry.`),this.name=`CredentialsFileLockedError`,e&&(this.cause=e)}};function p(e){let t=v(e);if(t)return{value:t,source:`keychain`};let n=x(e);return n?{value:n,source:`file`}:{source:`none`}}function m(e,t){return y(e,t)?(C(e),`keychain`):(S(e,t),`file`)}function h(){let e=`credential-write-probe:${process.pid}:${t()}`,n=t();if(y(e,n)){let t=v(e);if(!b(e))throw new d(`the OS keychain accepted a test credential but the CLI could not remove it`);if(t!==n)throw new d(`the OS keychain accepted a test credential but the CLI could not read it back`);return`keychain`}return D(e),`file`}function g(e){b(e),C(e)}function _(e,t){let n=process.platform;if(n!==`darwin`&&n!==`linux`)return;let r=n===`darwin`?`security`:`secret-tool`;try{return i(r,e[n],{encoding:`utf8`,input:t,stdio:[t===void 0?`ignore`:`pipe`,`pipe`,`ignore`],timeout:n===`linux`?1e4:void 0}).trim()}catch{return}}function v(e){let t=k(e);return _({darwin:[`find-generic-password`,`-s`,c,`-a`,t,`-w`],linux:[`lookup`,`service`,c,`account`,t]})}function y(e,t){let n=k(e),r=[`add-generic-password`,`-U`,`-s`,c,`-a`],i=[`store`,`--label=Tangle Sandbox CLI`,`service`];return _({darwin:[...r,n,`-w`,t],linux:[...i,c,`account`,n]},process.platform===`linux`?t:void 0)!==void 0}function b(e){let t=k(e);return _({darwin:[`delete-generic-password`,`-s`,c,`-a`,t],linux:[`clear`,`service`,c,`account`,t]})!==void 0}function x(e){return T()[e]}function S(e,t){w(()=>{let n=T();n[e]=t,E(n)})}function C(e){return w(()=>{let t;try{t=T()}catch(e){if(e instanceof u)return!1;throw e}return e in t?(delete t[e],E(t),x(e)===void 0):!0})}function w(e){O();let t=Date.now()+2e3,n,r;for(;!n;)try{n=a(s,{realpath:!1,stale:5e3})}catch(e){if(r=e instanceof Error?e:void 0,!e||typeof e!=`object`||!(`code`in e)||e.code!==`ELOCKED`)throw e;if(Date.now()>=t)throw new f(r);Atomics.wait(l,0,0,20)}try{return e()}finally{n()}}function T(){let e;try{e=n.readFileSync(s,`utf8`)}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ENOENT`)return{};throw e}try{let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw new u(s);let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);return n}catch(e){throw e instanceof u?e:new u(s,e instanceof Error?e:void 0)}}function E(e){if(O(),Object.keys(e).length===0){n.existsSync(s)&&n.unlinkSync(s);return}let t=`${s}.${process.pid}.tmp`;n.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,{mode:384}),n.renameSync(t,s)}function D(e){let n=t(),r=!1,i;try{if(S(e,n),r=!0,x(e)!==n)throw new d(`the credentials file did not return the value just written`)}catch(e){i=e}finally{if(r)try{!C(e)&&!i&&(i=new d(`the credentials file accepted a test credential but the CLI could not remove it`))}catch(e){i??=e}}if(i)throw i}function O(){if(!n.existsSync(o)){n.mkdirSync(o,{mode:448,recursive:!0});return}if(process.platform!==`win32`)try{(n.statSync(o).mode&511)!=448&&n.chmodSync(o,448)}catch{}}function k(e){return`profile:${e}`}export{m as i,g as n,p as r,h as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,f as t,i as n,p as r,r as i}from"./output-BqCeTtw4.mjs";import{p as a,y as o}from"./index.mjs";import{n as s,r as c}from"./solve-signer
|
|
1
|
+
import{a as e,f as t,i as n,p as r,r as i}from"./output-BqCeTtw4.mjs";import{p as a,y as o}from"./index.mjs";import{n as s,r as c}from"./solve-signer--UaZcdFY.mjs";import{n as l,r as u,t as d}from"./api-COxVvwlJ.mjs";import{t as f}from"./deployment-t_Jhgj4Q.mjs";import{n as p,o as m,v as h,x as g}from"./transactions-C3dKwqB0.mjs";import{createPublicClient as _,getAddress as v,http as y,isAddress as b}from"viem";import{tempoModerato as x}from"viem/chains";const S={...f,chainName:`Tempo Moderato`,nativeSymbol:`TNT`},C={async read(e){let t=_({chain:x,transport:y(S.rpcUrl,{timeout:15e3})}),n=e=>e.catch(()=>null),r=await Promise.all(e.map(async e=>{let[r,i]=await Promise.all([n(t.readContract({address:S.tangleAddress,abi:g,functionName:`isPermittedCaller`,args:[S.serviceId,e]})),n(t.readContract({address:S.managerAddress,abi:h,functionName:`isDeviceRevoked`,args:[e]}))]);return[e.toLowerCase(),{permitted:r,revoked:i}]}));return new Map(r)},async revokeSelf(e){return p(await m(S,e),S)}},w={permitted:null,revoked:null};function T(e){return e.revoked?`revoked`:e.permitted===null?`unknown`:e.permitted?`permitted`:`not permitted`}async function E(t,r=C){try{let{devices:i}=await l({apiUrl:t.apiUrl,profile:t.profile}),a=s()?.account.address.toLowerCase(),o=i.map(e=>({...e,local:e.address===a,status:e.revokedAt?`revoked`:`active`}));a&&!o.some(e=>e.local)&&o.push({address:a,local:!0,status:`unbound`,boundAt:null,lastUsedAt:null,revokedAt:null,revocationMethod:null,revocationReason:null});let c=await r.read(o.map(e=>v(e.address))),u=o.map(e=>({...e,onChain:c.get(e.address)??w}));if(t.json){e({serviceId:S.serviceId.toString(),devices:u});return}n([`Address`,`Status`,`Local`,`Service ${S.serviceId}`,`Last used`,`Revoked`],u.map(e=>[e.address,e.status,e.local?`yes`:``,T(e.onChain),e.lastUsedAt??``,e.revokedAt?`${e.revokedAt} (${e.revocationMethod})`:``]))}catch(e){o(e,t.json)}}async function D(n,l,f=C){try{if(!b(n))throw Error(`${n} is not an EVM address`);let o=v(n),p=s(),m=p?.account.address===o;if(!l.yes){if(!process.stdin.isTTY)throw Error(`Revoking a device is permanent. Re-run with --yes to confirm`);if(!await a(`Permanently revoke Solve device ${o}${m?` (this machine's device)`:``}? [y/N] `,`--yes`)){i(`Revocation cancelled`);return}}let h;if(p&&m){let e=await d({deviceAddress:o,purpose:`revoke`,apiUrl:l.apiUrl,profile:l.profile});h={challengeId:e.challengeId,signature:await p.account.signMessage({message:e.message})}}let g=await u({deviceAddress:o,reason:l.reason,...h,apiUrl:l.apiUrl,profile:l.profile}),_=o.toLowerCase(),y=(await f.read([o])).get(_)??w,x;if(p&&m&&!y.revoked){try{x=await f.revokeSelf(p.account)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`The Solve API revoked ${o}, but the on-chain revocation failed and the local key was kept: ${t}. Run the command again to retry`)}y=(await f.read([o])).get(_)??w}let C=p&&m&&y.revoked?c(p):void 0;if(l.json){e({...g,serviceId:S.serviceId.toString(),onChain:y,...x?{revocationTransaction:x}:{},localKeyRetired:!!C});return}t(g.alreadyRevoked?`${o} was already revoked in the Solve API`:`Revoked ${o}; the Solve API refuses its signatures`),x&&t(`Revoked on Tempo in ${x}; service ${S.serviceId} refuses its jobs`),C&&i("The local device key was moved aside because its address may still hold stake or rewards. Run `tangle solve account --create` for a new device"),!m&&y.permitted&&r(`The device can still submit jobs to service ${S.serviceId}. Only its key, or the Solve blueprint owner, can revoke it on chain`)}catch(e){o(e,l.json)}}export{E as listSolveDevices,D as revokeSolveDevice};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{findPackageJSON as e}from"node:module";import{canonicalCandidateDigest as t}from"@tangle-network/agent-interface";import{isAbsolute as n,join as r,relative as i,resolve as a}from"node:path";import{z as o}from"zod";import{readFile as s,realpath as c}from"node:fs/promises";import{HubVectorSearchProvider as l,KnowledgeImprovementCandidateRefSchema as u,SourceRecordSchema as d,assertKnowledgeRetrievalMatchesVisibilityArtifact as f,buildKnowledgeBrief as p,chunkMarkdown as m,createKnowledgeRetrievalReceipt as h,createKnowledgeTools as g,createKnowledgeVisibilitySnapshot as _,createRunScopedStores as v,decodeKnowledgeVisibilitySnapshot as y,encodeKnowledgeVisibilitySnapshot as b,hashKnowledgeBase as x,knowledgeVisibilityArtifactRef as S,loadSourceRegistry as C,originatedPages as w,parseKnowledgeWriteBlocks as T,promoteKnowledgeCandidate as E,restoreKnowledgeCandidateBaseline as D,sha256 as O,textSourceAdapter as k,textSourceId as A,verifyKnowledgeRetrievalReceipt as j}from"@tangle-network/agent-knowledge";const M=o.strictObject({sourceId:o.string().min(1),generation:o.string().regex(/^kg_[a-f0-9]{64}$/)}),N=o.discriminatedUnion(`kind`,[o.strictObject({kind:o.literal(`local`),root:o.string().refine(n),sourceDigest:o.string().regex(/^sha256:[a-f0-9]{64}$/)}),o.strictObject({kind:o.literal(`hub`),references:o.array(M).min(1)})]);async function P(e){let t=await c(e);return{kind:`local`,root:t,sourceDigest:`sha256:${await x(t)}`}}function F(e){throw Object.assign(Error(e),{code:`KNOWLEDGE_BACKEND_UNSUPPORTED`})}const I=o.strictObject({question:o.string().trim().min(1).max(16e3),limit:o.number().int().min(1).max(20).default(5)}),L=o.object({results:o.array(o.object({sourceId:o.string().min(1),generation:o.string().regex(/^kg_[a-f0-9]{64}$/),hits:o.array(o.object({id:o.string(),snippet:o.string()}).passthrough()),evidence:o.object({receipt:o.unknown(),visibility:o.unknown(),sources:o.array(o.object({id:o.string(),uri:o.string(),contentHash:o.string()}))})}).passthrough()),failures:o.array(o.unknown()),partial:o.boolean()}).passthrough();let R;function z(){return R??=(async()=>{let t=e(`@tangle-network/agent-knowledge`,import.meta.url);if(!t)throw Error(`Cannot identify the installed Knowledge retriever`);return JSON.parse(await s(t,`utf8`)).version})(),R}async function B(e){let t=_(w(e.corpus.pages,`shared`)),n=b(t);return{receipt:h({runId:e.context.runId,actorId:e.context.nodeId,profileDigest:e.context.profileDigest,query:e.query,retriever:{id:e.retrieval.brief.retrieverId,version:await z(),configDigest:e.retrieval.brief.retrieverConfigDigest},visibility:t,visibilityArtifact:S({uri:`knowledge-generation://${e.sourceId}/${e.generation}/${t.snapshotDigest.slice(7)}.json`,bytes:n}),results:e.retrieval.brief.results,attributes:{sourceId:e.sourceId,generation:e.generation}}),visibility:t,sources:e.corpus.sources.map(({id:e,uri:t,contentHash:n})=>({id:e,uri:t,contentHash:n}))}}async function V(e){let r=N.parse(e.binding),l=Object.freeze({...e.context});if(r.kind===`hub`){let n=e.queryHub;return n||F(`This backend has no owner-authorized Hub knowledge query binding`),[{name:`knowledge_search`,description:`Search the graph's exact owner-authorized knowledge generations and retain retrieval evidence.`,inputSchema:I,inputSchemaJson:o.toJSONSchema(I),handler:async t=>{let i=I.parse(t),a=await n({query:i.question,limit:i.limit,expectedReferences:r.references,context:l},e.signal),o=L.parse(a);if(!o.partial&&(o.results.length!==r.references.length||r.references.some(e=>o.results.filter(t=>t.sourceId===e.sourceId&&t.generation===e.generation).length!==1)))throw Error(`Hub knowledge omitted or duplicated a selected source generation`);let s=[],c=[];for(let t of o.results){let n=j(t.evidence.receipt),a=t.evidence.visibility,o=b(a);if(n.runId!==l.runId||n.actorId!==l.nodeId||n.profileDigest!==l.profileDigest||n.query!==i.question)throw Error(`Hub knowledge receipt does not match the trusted graph invocation`);if(n.attributes.sourceId!==t.sourceId||n.attributes.generation!==t.generation||!r.references.some(e=>e.sourceId===t.sourceId&&e.generation===t.generation))throw Error(`Hub knowledge receipt does not match an exact selected source generation`);if(t.hits.length!==n.results.length||t.hits.some((e,t)=>e.id!==n.results[t]?.pageId||e.snippet!==n.results[t]?.snippet))throw Error(`Hub knowledge hits do not match their retrieval receipt`);await f(n,()=>o),s.push(await e.record({context:l,binding:r,receipt:n,visibility:a,sources:t.evidence.sources})),c.push({sourceId:t.sourceId,generation:t.generation,hits:t.hits,retrievalReceiptDigest:n.receiptDigest})}return{partial:o.partial,failures:o.failures,results:c,retainedEvidence:s}}},{name:`knowledge_record`,description:`Retain an isolated knowledge proposal; it does not alter published source generations.`,inputSchema:o.strictObject({proposal:o.string().min(1)}),inputSchemaJson:{type:`object`,properties:{proposal:{type:`string`}},required:[`proposal`],additionalProperties:!1},handler:async n=>{let{proposal:i}=o.strictObject({proposal:o.string().min(1)}).parse(n);return T(i),{isolated:!0,evaluated:!1,artifact:await e.recordProposal({context:l,binding:r,proposal:i,digest:t({context:l,binding:r,proposal:i})}),activation:`unsupported-for-hub-generations`}}}]}let u=async()=>{if(`sha256:${await x(r.root)}`!==r.sourceDigest)throw Error(`The graph's pinned local knowledge changed`)};if(await u(),!e.storeRoot)throw Error(`Local graph Knowledge needs its private run-store root`);let d=await c(r.root),p=a(e.storeRoot),m=(e,t)=>{let r=i(e,t);return r===``||!r.startsWith(`..`)&&!n(r)};if(m(d,p)||m(p,d))throw Error(`Knowledge run stores must be separate from the curated corpus`);let h=v({root:p,sharedRoot:d});await h.init(l.runId);let _=new Map;return g({stores:h,runId:l.runId,actorId:l.nodeId,retrieverVersion:await z(),retainHistory:!0,recordRetrieval:async t=>{if(await u(),!t.visibility.artifact)throw Error(`Knowledge did not retain the visibility snapshot`);let n=await s(new URL(t.visibility.artifact.uri));await f(t,()=>n);let i=y(n),a=await C(r.root),o=new Set(i.entries.flatMap(e=>e.sourceIds)),c=Object.values(a.sources).filter(e=>o.has(e.id)).map(({id:e,uri:t,contentHash:n,metadata:r})=>({id:e,uri:typeof r?.originalUri==`string`?r.originalUri:t,contentHash:n}));_.set(t.receiptDigest,await e.record({context:l,binding:r,receipt:t,visibility:i,sources:c}))}}).map(t=>({...t,handler:async(n,r)=>{e.signal?.throwIfAborted(),await u();let i=await t.handler(n,r);return await u(),i&&typeof i==`object`&&`retrievalReceiptDigest`in i?{...i,retainedEvidence:_.get(String(i.retrievalReceiptDigest))}:i}}))}function H(e){return async t=>{if(!Object.entries(t.profile.tools??{}).some(([e,t])=>t===!0&&/_knowledge_(search|read|record|resolve)$/.test(e)))return[];if(!t.identity.profileDigest)throw Error(`Knowledge tools require Runtime's exact profile identity`);return(await V({...e,...e.storeRoot?{storeRoot:r(e.storeRoot,t.nodeId)}:{},context:{runId:t.runId,nodeId:t.nodeId,profileDigest:t.identity.profileDigest}})).map(e=>{if(!e.inputSchemaJson)throw Error(`Knowledge tool lacks its wire input schema`);return{name:e.name,description:e.description,inputSchema:e.inputSchemaJson,handler:t=>e.handler(t,{})}})}}async function U(e,t,n){let r=N.parse(e);r.kind!==`local`&&F(`Measured file-backed Knowledge candidates cannot activate Hub generations; use the source generation owner's publication path`);let i=u.parse(t);if(`sha256:${i.baseHash}`!==r.sourceDigest)throw Error(`Knowledge candidate does not match the graph's pinned baseline`);return n===`promote`?E({root:r.root,candidate:i}):D({root:r.root,candidate:i})}async function W(e,t){let n=[],r=[];for(let i of[...e].sort((e,t)=>e.uri.localeCompare(t.uri))){let e=O(i.text),a=A(i.uri,e),o=await k.load({uri:i.uri,text:i.text}),s=d.parse({id:a,uri:i.uri,contentHash:e,title:i.title,mediaType:i.mediaType,text:i.text,createdAt:t,lastVerifiedAt:t,metadata:{revision:i.revision},anchors:o.anchors?.map(e=>({...e,sourceId:a}))});n.push(s);for(let e of m(i.text))r.push({id:`${a}:${e.index}`,path:`${i.uri}#chunk-${e.index}`,title:i.title,text:e.text,sourceIds:[a],frontmatter:{revision:i.revision},tags:[],outLinks:[]})}return{sources:n,pages:r}}function G(e,t,n){return K(e,t,n).hits}function K(e,t,n){let r=new Map(e.sources.map(e=>[e.id,e])),i=p(w(e.pages,`shared`),t,{limit:n,excludeInvalidated:!1});return{hits:i.results.map(e=>({id:e.page.id,title:e.page.title,snippet:e.snippet,score:e.score,citations:e.page.sourceIds.map(e=>{let t=r.get(e);if(!t)throw Error(`Knowledge generation has an unregistered source`);return{sourceId:e,sourceUri:t.uri,...typeof t.metadata?.revision==`string`?{revision:t.metadata.revision}:{}}})})),brief:i}}async function q(e){return(await new l({provider:e.provider,connectionId:e.connectionId,indexName:e.indexName,namespace:e.namespace,properties:[e.textField,e.sourceUriField],hubUrl:`https://knowledge-hub.invalid`,apiKey:`in-process-transport`,embed:e.embed,fetchImpl:async(t,n)=>{let r=JSON.parse(String(n?.body)),i=await e.execute(r.path,r.input);return Response.json({success:!0,data:{result:i}})}}).search(e.query,{limit:e.limit})).flatMap(t=>{let n=t.metadata?.payload;if(!n||typeof n!=`object`||Array.isArray(n))return[];let r=n[e.textField];if(typeof r!=`string`||!r.trim())return[];if(e.corpus){let i=e.corpus.pages.find(e=>e.id===n.pageId),a=e.corpus.sources.find(e=>e.id===n.sourceId);if(!i||!a||!i.sourceIds.includes(a.id)||r!==i.text||n.sourceUri!==a.uri||n.revision!==a.metadata?.revision)throw Error(`Managed vector result does not match its published source generation`);return[{id:i.id,title:i.title,snippet:i.text.slice(0,4e3),score:t.score,citations:[{sourceId:a.id,sourceUri:a.uri,revision:String(a.metadata.revision)}]}]}let i=n[e.sourceUriField],a=[];if(typeof i==`string`)try{let e=new URL(i);[`https:`,`s3:`].includes(e.protocol)&&!e.username&&!e.password&&!e.search&&!e.hash&&a.push({sourceId:t.pageId,sourceUri:e.href})}catch{}return[{id:t.pageId,title:t.title??t.pageId,snippet:r.slice(0,4e3),score:t.score,citations:a}]})}export{V as createGraphKnowledgeTools,N as graphKnowledgeBindingSchema,B as graphKnowledgeCorpusEvidence,H as graphKnowledgeResolver,P as pinLocalGraphKnowledge,W as prepareKnowledgeCorpus,q as queryConnectedVectors,G as queryKnowledgeCorpus,K as retrieveKnowledgeCorpus,U as transitionGraphKnowledge};
|
|
1
|
+
import{findPackageJSON as e}from"node:module";import{isAbsolute as t,join as n,relative as r,resolve as i}from"node:path";import{canonicalCandidateDigest as a}from"@tangle-network/agent-interface";import{z as o}from"zod";import{readFile as s,realpath as c}from"node:fs/promises";import{HubVectorSearchProvider as l,KnowledgeImprovementCandidateRefSchema as u,SourceRecordSchema as d,assertKnowledgeRetrievalMatchesVisibilityArtifact as f,buildKnowledgeBrief as p,chunkMarkdown as m,createKnowledgeRetrievalReceipt as h,createKnowledgeTools as g,createKnowledgeVisibilitySnapshot as _,createRunScopedStores as v,decodeKnowledgeVisibilitySnapshot as y,encodeKnowledgeVisibilitySnapshot as b,hashKnowledgeBase as x,knowledgeVisibilityArtifactRef as S,loadSourceRegistry as C,originatedPages as w,parseKnowledgeWriteBlocks as T,promoteKnowledgeCandidate as E,restoreKnowledgeCandidateBaseline as D,sha256 as O,textSourceAdapter as k,textSourceId as A,verifyKnowledgeRetrievalReceipt as j}from"@tangle-network/agent-knowledge";const M=o.strictObject({sourceId:o.string().min(1),generation:o.string().regex(/^kg_[a-f0-9]{64}$/)}),N=o.discriminatedUnion(`kind`,[o.strictObject({kind:o.literal(`local`),root:o.string().refine(t),sourceDigest:o.string().regex(/^sha256:[a-f0-9]{64}$/)}),o.strictObject({kind:o.literal(`hub`),references:o.array(M).min(1)})]);async function P(e){let t=await c(e);return{kind:`local`,root:t,sourceDigest:`sha256:${await x(t)}`}}function F(e){throw Object.assign(Error(e),{code:`KNOWLEDGE_BACKEND_UNSUPPORTED`})}const I=o.strictObject({question:o.string().trim().min(1).max(16e3),limit:o.number().int().min(1).max(20).default(5)}),L=o.object({results:o.array(o.object({sourceId:o.string().min(1),generation:o.string().regex(/^kg_[a-f0-9]{64}$/),hits:o.array(o.object({id:o.string(),snippet:o.string()}).passthrough()),evidence:o.object({receipt:o.unknown(),visibility:o.unknown(),sources:o.array(o.object({id:o.string(),uri:o.string(),contentHash:o.string()}))})}).passthrough()),failures:o.array(o.unknown()),partial:o.boolean()}).passthrough();let R;function z(){return R??=(async()=>{let t=e(`@tangle-network/agent-knowledge`,import.meta.url);if(!t)throw Error(`Cannot identify the installed Knowledge retriever`);return JSON.parse(await s(t,`utf8`)).version})(),R}async function B(e){let t=_(w(e.corpus.pages,`shared`)),n=b(t);return{receipt:h({runId:e.context.runId,actorId:e.context.nodeId,profileDigest:e.context.profileDigest,query:e.query,retriever:{id:e.retrieval.brief.retrieverId,version:await z(),configDigest:e.retrieval.brief.retrieverConfigDigest},visibility:t,visibilityArtifact:S({uri:`knowledge-generation://${e.sourceId}/${e.generation}/${t.snapshotDigest.slice(7)}.json`,bytes:n}),results:e.retrieval.brief.results,attributes:{sourceId:e.sourceId,generation:e.generation}}),visibility:t,sources:e.corpus.sources.map(({id:e,uri:t,contentHash:n})=>({id:e,uri:t,contentHash:n}))}}async function V(e){let n=N.parse(e.binding),l=Object.freeze({...e.context});if(n.kind===`hub`){let t=e.queryHub;return t||F(`This backend has no owner-authorized Hub knowledge query binding`),[{name:`knowledge_search`,description:`Search the graph's exact owner-authorized knowledge generations and retain retrieval evidence.`,inputSchema:I,inputSchemaJson:o.toJSONSchema(I),handler:async r=>{let i=I.parse(r),a=await t({query:i.question,limit:i.limit,expectedReferences:n.references,context:l},e.signal),o=L.parse(a);if(!o.partial&&(o.results.length!==n.references.length||n.references.some(e=>o.results.filter(t=>t.sourceId===e.sourceId&&t.generation===e.generation).length!==1)))throw Error(`Hub knowledge omitted or duplicated a selected source generation`);let s=[],c=[];for(let t of o.results){let r=j(t.evidence.receipt),a=t.evidence.visibility,o=b(a);if(r.runId!==l.runId||r.actorId!==l.nodeId||r.profileDigest!==l.profileDigest||r.query!==i.question)throw Error(`Hub knowledge receipt does not match the trusted graph invocation`);if(r.attributes.sourceId!==t.sourceId||r.attributes.generation!==t.generation||!n.references.some(e=>e.sourceId===t.sourceId&&e.generation===t.generation))throw Error(`Hub knowledge receipt does not match an exact selected source generation`);if(t.hits.length!==r.results.length||t.hits.some((e,t)=>e.id!==r.results[t]?.pageId||e.snippet!==r.results[t]?.snippet))throw Error(`Hub knowledge hits do not match their retrieval receipt`);await f(r,()=>o),s.push(await e.record({context:l,binding:n,receipt:r,visibility:a,sources:t.evidence.sources})),c.push({sourceId:t.sourceId,generation:t.generation,hits:t.hits,retrievalReceiptDigest:r.receiptDigest})}return{partial:o.partial,failures:o.failures,results:c,retainedEvidence:s}}},{name:`knowledge_record`,description:`Retain an isolated knowledge proposal; it does not alter published source generations.`,inputSchema:o.strictObject({proposal:o.string().min(1)}),inputSchemaJson:{type:`object`,properties:{proposal:{type:`string`}},required:[`proposal`],additionalProperties:!1},handler:async t=>{let{proposal:r}=o.strictObject({proposal:o.string().min(1)}).parse(t);return T(r),{isolated:!0,evaluated:!1,artifact:await e.recordProposal({context:l,binding:n,proposal:r,digest:a({context:l,binding:n,proposal:r})}),activation:`unsupported-for-hub-generations`}}}]}let u=async()=>{if(`sha256:${await x(n.root)}`!==n.sourceDigest)throw Error(`The graph's pinned local knowledge changed`)};if(await u(),!e.storeRoot)throw Error(`Local graph Knowledge needs its private run-store root`);let d=await c(n.root),p=i(e.storeRoot),m=(e,n)=>{let i=r(e,n);return i===``||!i.startsWith(`..`)&&!t(i)};if(m(d,p)||m(p,d))throw Error(`Knowledge run stores must be separate from the curated corpus`);let h=v({root:p,sharedRoot:d});await h.init(l.runId);let _=new Map;return g({stores:h,runId:l.runId,actorId:l.nodeId,retrieverVersion:await z(),retainHistory:!0,recordRetrieval:async t=>{if(await u(),!t.visibility.artifact)throw Error(`Knowledge did not retain the visibility snapshot`);let r=await s(new URL(t.visibility.artifact.uri));await f(t,()=>r);let i=y(r),a=await C(n.root),o=new Set(i.entries.flatMap(e=>e.sourceIds)),c=Object.values(a.sources).filter(e=>o.has(e.id)).map(({id:e,uri:t,contentHash:n,metadata:r})=>({id:e,uri:typeof r?.originalUri==`string`?r.originalUri:t,contentHash:n}));_.set(t.receiptDigest,await e.record({context:l,binding:n,receipt:t,visibility:i,sources:c}))}}).map(t=>({...t,handler:async(n,r)=>{e.signal?.throwIfAborted(),await u();let i=await t.handler(n,r);return await u(),i&&typeof i==`object`&&`retrievalReceiptDigest`in i?{...i,retainedEvidence:_.get(String(i.retrievalReceiptDigest))}:i}}))}function H(e){return async t=>{if(!Object.entries(t.profile.tools??{}).some(([e,t])=>t===!0&&/_knowledge_(search|read|record|resolve)$/.test(e)))return[];if(!t.identity.profileDigest)throw Error(`Knowledge tools require Runtime's exact profile identity`);return(await V({...e,...e.storeRoot?{storeRoot:n(e.storeRoot,t.nodeId)}:{},context:{runId:t.runId,nodeId:t.nodeId,profileDigest:t.identity.profileDigest}})).map(e=>{if(!e.inputSchemaJson)throw Error(`Knowledge tool lacks its wire input schema`);return{name:e.name,description:e.description,inputSchema:e.inputSchemaJson,handler:t=>e.handler(t,{})}})}}async function U(e,t,n){let r=N.parse(e);r.kind!==`local`&&F(`Measured file-backed Knowledge candidates cannot activate Hub generations; use the source generation owner's publication path`);let i=u.parse(t);if(`sha256:${i.baseHash}`!==r.sourceDigest)throw Error(`Knowledge candidate does not match the graph's pinned baseline`);return n===`promote`?E({root:r.root,candidate:i}):D({root:r.root,candidate:i})}async function W(e,t){let n=[],r=[];for(let i of[...e].sort((e,t)=>e.uri.localeCompare(t.uri))){let e=O(i.text),a=A(i.uri,e),o=await k.load({uri:i.uri,text:i.text}),s=d.parse({id:a,uri:i.uri,contentHash:e,title:i.title,mediaType:i.mediaType,text:i.text,createdAt:t,lastVerifiedAt:t,metadata:{revision:i.revision},anchors:o.anchors?.map(e=>({...e,sourceId:a}))});n.push(s);for(let e of m(i.text))r.push({id:`${a}:${e.index}`,path:`${i.uri}#chunk-${e.index}`,title:i.title,text:e.text,sourceIds:[a],frontmatter:{revision:i.revision},tags:[],outLinks:[]})}return{sources:n,pages:r}}function G(e,t,n){return K(e,t,n).hits}function K(e,t,n){let r=new Map(e.sources.map(e=>[e.id,e])),i=p(w(e.pages,`shared`),t,{limit:n,excludeInvalidated:!1});return{hits:i.results.map(e=>({id:e.page.id,title:e.page.title,snippet:e.snippet,score:e.score,citations:e.page.sourceIds.map(e=>{let t=r.get(e);if(!t)throw Error(`Knowledge generation has an unregistered source`);return{sourceId:e,sourceUri:t.uri,...typeof t.metadata?.revision==`string`?{revision:t.metadata.revision}:{}}})})),brief:i}}async function q(e){return(await new l({provider:e.provider,connectionId:e.connectionId,indexName:e.indexName,namespace:e.namespace,properties:[e.textField,e.sourceUriField],hubUrl:`https://knowledge-hub.invalid`,apiKey:`in-process-transport`,embed:e.embed,fetchImpl:async(t,n)=>{let r=JSON.parse(String(n?.body)),i=await e.execute(r.path,r.input);return Response.json({success:!0,data:{result:i}})}}).search(e.query,{limit:e.limit})).flatMap(t=>{let n=t.metadata?.payload;if(!n||typeof n!=`object`||Array.isArray(n))return[];let r=n[e.textField];if(typeof r!=`string`||!r.trim())return[];if(e.corpus){let i=e.corpus.pages.find(e=>e.id===n.pageId),a=e.corpus.sources.find(e=>e.id===n.sourceId);if(!i||!a||!i.sourceIds.includes(a.id)||r!==i.text||n.sourceUri!==a.uri||n.revision!==a.metadata?.revision)throw Error(`Managed vector result does not match its published source generation`);return[{id:i.id,title:i.title,snippet:i.text.slice(0,4e3),score:t.score,citations:[{sourceId:a.id,sourceUri:a.uri,revision:String(a.metadata.revision)}]}]}let i=n[e.sourceUriField],a=[];if(typeof i==`string`)try{let e=new URL(i);[`https:`,`s3:`].includes(e.protocol)&&!e.username&&!e.password&&!e.search&&!e.hash&&a.push({sourceId:t.pageId,sourceUri:e.href})}catch{}return[{id:t.pageId,title:t.title??t.pageId,snippet:r.slice(0,4e3),score:t.score,citations:a}]})}export{V as createGraphKnowledgeTools,N as graphKnowledgeBindingSchema,B as graphKnowledgeCorpusEvidence,H as graphKnowledgeResolver,P as pinLocalGraphKnowledge,W as prepareKnowledgeCorpus,q as queryConnectedVectors,G as queryKnowledgeCorpus,K as retrieveKnowledgeCorpus,U as transitionGraphKnowledge};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./index.mjs";import{
|
|
1
|
+
import{o as e}from"./index.mjs";import{dirname as t,join as n,resolve as r}from"node:path";import{randomBytes as i}from"node:crypto";import{canonicalCandidateDigest as a}from"@tangle-network/agent-interface";import{homedir as o}from"node:os";import{z as s}from"zod";import c,{readFile as l}from"node:fs/promises";import{SearchEnvironmentFault as u}from"@tangle-network/agent-runtime";import{readSettleRecord as d}from"@tangle-network/agent-runtime/durable";import{createBudgetPool as f}from"@tangle-network/agent-runtime/kernel";const p=e=>`${e}.tmp-${i(6).toString(`hex`)}`,m=new Map;function h(e){let t=r(e),n=m.get(t)??{};if(m.set(t,n),n.queued)return n.queued;let i=(n.running??Promise.resolve()).catch(()=>void 0).then(async()=>{n.running=i,n.queued=void 0;try{let e=await c.open(t,`r`);await e.sync().finally(()=>e.close())}finally{n.queued||m.delete(t)}});return n.queued=i,i}async function g(e,n,{mode:r=384,owner:i,directory:a}={}){if(a&&!/^(?!\.\.?$)[^/]+$/.test(e))throw Error(`Not an entry name in the open directory: ${e}`);let o=a?`/proc/self/fd/${a.fd}/${e}`:e,s=p(o);try{let e=await c.open(s,`wx`,r);try{i&&await e.chown(i.uid,i.gid),await e.chmod(r),await e.writeFile(n,`utf-8`),await e.sync()}finally{await e.close()}await c.rename(s,o)}catch(e){throw await c.rm(s,{force:!0}).catch(()=>void 0),e}await(a?a.sync():h(t(o)))}const _=s.number().int().positive(),v=async e=>JSON.parse(await l(e,`utf8`)),y=(e,t)=>g(e,JSON.stringify(t));function b(e,t){let n=e.readout(),r=n.tokensKnown?n.deadlineMs>0&&Date.now()>=n.deadlineMs?`Campaign deadline exhausted`:t.maxTokens!==void 0&&n.tokensCapped&&t.maxTokens>n.tokensLeft?`Campaign token ceiling cannot fund the next graph`:t.maxIterations!==void 0&&n.iterationsCapped&&t.maxIterations>n.iterationsLeft?`Campaign iteration ceiling cannot fund the next graph`:void 0:`Campaign token accounting is incomplete`;if(r)throw Object.assign(new u(r),{code:`GRAPH_CAMPAIGN_BUDGET_EXHAUSTED`})}const x=s.strictObject({runId:s.uuid(),budget:s.object({maxTokens:_,maxIterations:_,deadlineMs:_}).passthrough(),sourceDigest:s.string(),graphDigest:s.string()});async function S(t,r,i,c){let l=n(t,`budget.json`),p;try{p=await v(l)}catch(e){if(e.code!==`ENOENT`)throw e;p={identity:i,startedAt:Date.now()}}if(p.identity!==i)throw Error(`Campaign configuration changed; use a new campaign directory`);let m=p.readout;if(m?.reservedTokens)throw Error(`Campaign backing has unresolved historical reservations`);let h=async t=>{let r=await d(n(o(),`.tangle`,`runs`,t.runId));if(!r)return;let i=await e(t.runId);if(r.tree.root!==t.runId||t.sourceDigest!==void 0&&i.sourceDigest!==t.sourceDigest||t.graphDigest!==void 0&&i.graphDigest!==t.graphDigest)throw Error(`Campaign settlement does not match its exact admitted graph`);return{settled:r,digest:a({runId:t.runId,sourceDigest:i.sourceDigest,graphDigest:i.graphDigest,spend:r.spentTotal})}},g=f(r,p.startedAt),_=s.record(s.uuid(),s.string()).parse(p.settlements??{});for(let[e,t]of Object.entries(_)){let n=await h({runId:e});if(!n||n.digest!==t)throw Error(`Historical campaign settlement is missing or changed; accounting cannot resume`);g.observe(n.settled.spentTotal,{alreadySpent:!0}),c?.(e,n.settled.spentTotal)}if(m&&a(m)!==a(JSON.parse(JSON.stringify(g.readout()))))throw Error(`Historical campaign backing cannot be reconstructed from its retained settlements`);let S=p.pending===void 0?void 0:x.parse(p.pending),C=m??g.readout(),w,T=()=>y(l,{identity:i,startedAt:p.startedAt,readout:S?C:g.readout(),settlements:_,...S?{pending:S}:{}}),E=(e,t=!1)=>{t||b(g,e.budget),C=g.readout();let n=g.reserve(e.budget,{assignment:e.runId,stage:`executing`});if(!n.ok)throw new u(`Campaign cannot reserve the next graph's complete ceiling`);w=n.ticket,S=e},D=async()=>{if(!S||!w)return;let e=await h(S);if(!e)return;let t=w,n;try{g.reconcile(t,e.settled.spentTotal)}catch(e){if(g.openReservations().some(({ticketId:e})=>e===t.id))throw await T(),e;n=e}let r=S.runId;if(_[r]=e.digest,S=void 0,w=void 0,await T(),c?.(r,e.settled.spentTotal),n)throw n};if(S){let e=S;S=void 0,E(e,!0),await D()}return await T(),{pool:g,checkpoint:async e=>{if(e){if(_[e.runId]){let t=await h(e);if(!t||t.digest!==_[e.runId])throw Error(`An accounted campaign settlement changed`);c?.(e.runId,t.settled.spentTotal);return}if(S&&a(S)!==a(e))throw new u(`Campaign must reconcile its exact pending run ${S.runId} before admitting another graph`);S||E(e)}else{if(await D(),S)throw new u(`Campaign run ${S.runId} has no retained settlement; its reservation remains pending`);g.assertNoOpenTickets()}await T()},startedAt:p.startedAt,pendingAttempt:()=>S&&structuredClone(S)}}export{S as openGraphCampaignBudget,v as readCampaignJson,h as t,y as writeCampaignJson};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as e,o as t,r as n,s as r,u as i}from"./index.mjs";import{
|
|
1
|
+
import{f as e,o as t,r as n,s as r,u as i}from"./index.mjs";import{join as a,resolve as o}from"node:path";import{randomUUID as s}from"node:crypto";import{canonicalCandidateDigest as c}from"@tangle-network/agent-interface";import{homedir as l}from"node:os";import{z as u}from"zod";import{mkdir as d,readFile as f,realpath as p,rename as m,writeFile as h}from"node:fs/promises";import{readSettleRecord as g,runEvidence as _}from"@tangle-network/agent-runtime/durable";import{acquireSingleRunLock as v}from"@tangle-network/agent-eval/campaign";import{runtimeRunRolloutLines as y}from"@tangle-network/agent-eval/supervisor-run";const b=u.strictObject({id:u.string(),kind:u.literal(`retained-graph`),domain:u.string().min(1),unit:u.string().min(1),split:u.enum([`train`,`dev`,`test`]),run:u.string().min(1),origin:u.string(),sourceDigest:u.string().nullable(),graphDigest:u.string().nullable(),params:u.record(u.string(),u.unknown()),trigger:u.record(u.string(),u.unknown()).nullable().optional(),mcpPolicy:e.optional(),taskWorkspace:i.optional(),outcome:u.string(),gaps:u.array(u.string()),evidence:u.string(),quality:u.null()}),x=async e=>JSON.parse(await f(e,`utf8`)),S=e=>e.code===`ENOENT`;function C(e,{name:t,provenance:n}){let r={train:0,dev:0,test:0,holdout:0};for(let t of e)r[t.split]++;return{name:t,provenance:n,contentHash:c(e.map(e=>({id:e.id,split:e.split,payload:e})).sort((e,t)=>e.id<t.id?-1:+(e.id>t.id))).slice(7),scenarioCount:e.length,splitCounts:r}}async function w(e,t){let n=c(t),r=a(e,`objects`,`${n.slice(7)}.json`);await d(a(e,`objects`),{recursive:!0,mode:448});let i=JSON.stringify(t);try{await h(r,i,{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e;if(c(await x(r))!==n)throw Error(`Dataset evidence object changed`)}return n}async function T(e,t){if(!/^sha256:[a-f0-9]{64}$/.test(t))throw Error(`Invalid dataset object digest`);let n=await x(a(e,`objects`,`${t.slice(7)}.json`));if(c(n)!==t)throw Error(`Dataset evidence object changed`);return n}async function E(e,i){if(e.startsWith(`wfrun_`)){let t=await n(i),[r,a]=await Promise.all([t.workflows.getRun(e,{signal:i.signal}),t.workflows.getRunInput(e,{signal:i.signal})]),o=a.completeness===`complete`&&a.id===r.id&&a.workflowId===r.workflowId&&a.revUsed===r.revUsed&&c({definitionSnapshot:a.definitionSnapshot,execution:a.execution,triggerContext:a.triggerContext,revUsed:a.revUsed})===a.inputDigest?a:void 0,s=o?.execution,l=o?.triggerContext;return{origin:new URL(t.baseUrl).origin,sourceDigest:a.sourceSha,graphDigest:a.graphDigest,params:s?.params??{},...o?{trigger:l}:{},mcpPolicy:s?.deploy?.mcpPolicy,outcome:r.status,source:o?.definitionSnapshot??null,gaps:[`task-workspace-not-snapshotted`,`environment-and-toolchain-not-snapshotted`,...o?[]:[`retained-input-unavailable`,...a.gaps],...s?[]:[`graph-execution-missing`],...o?.definitionSnapshot?[]:[`source-snapshot-missing`],...r.runtime?[]:[`runtime-evidence-missing`],...r.runtime?.trace?.gaps.map(e=>e.reason)??[],...r.runtime?.blobs.filter(e=>!e.found).map(e=>`blob-missing:${e.ref}`)??[]],record:{run:r.id,workflowId:r.workflowId,revUsed:r.revUsed,execution:s??null,trigger:o?.triggerContext??null,retainedInput:{completeness:o?`complete`:a.completeness===`complete`?`invalid`:a.completeness,inputDigest:o?.inputDigest??null,gaps:o?[]:[...a.gaps,`retained-input-unavailable`]},...s?.deploy?.mcpPolicy&&{mcpPolicy:s.deploy?.mcpPolicy},status:r.status,error:r.error,graphResult:r.graphResult??null,runtime:r.runtime?{namespace:r.runtime.namespace??null,journal:r.runtime.journal,blobs:r.runtime.blobs,trace:r.runtime.trace??null}:null}}}if(!u.uuid().safeParse(e).success)throw Error(`Use a retained local UUID or cloud wfrun_ ID`);let o=a(l(),`.tangle`,`runs`,e),s=await t(e),[d,f,p,m]=await Promise.all([r(s),g(o),y(o,{capturedAt:s.startedAt,verdict:null}),_(o,{totalChars:48e3})]);return{origin:`local`,sourceDigest:s.sourceDigest,graphDigest:s.graphDigest,params:s.params,trigger:s.trigger??null,mcpPolicy:s.mcpPolicy,taskWorkspace:s.taskWorkspace,source:d,outcome:f?.kind??`interrupted`,gaps:[...s.taskWorkspace?.gaps??[`task-workspace-not-snapshotted`,`environment-and-toolchain-not-snapshotted`],...p.gaps.map(e=>e.code),...m.truncated?[`summary-truncated`]:[]],record:{run:e,sourceDigest:s.sourceDigest,graphDigest:s.graphDigest,params:s.params,trigger:s.trigger??null,...s.mcpPolicy&&{mcpPolicy:s.mcpPolicy},...s.taskWorkspace&&{taskWorkspace:s.taskWorkspace},settled:f??null,rollouts:p.lines,summary:m}}}async function D(e,t){let n=o(e),r=t??(await x(a(n,`latest.json`))).version;if(!/^[a-f0-9]{64}$/.test(r))throw Error(`Invalid graph dataset version`);let i=await x(a(n,`versions`,`${r}.json`)),s=u.array(b).parse(i.cases),l=C(s,i.manifest);if(l.contentHash!==r||c(l)!==c(i.manifest))throw Error(`Graph dataset manifest changed`);for(let e of s)if(s.some(t=>t.domain===e.domain&&t.unit===e.unit&&t.split!==e.split))throw Error(`An independent unit crosses dataset splits`);return{root:n,version:r,manifest:l,cases:s}}async function O(e,t,r){let i=r;if(t.some(e=>e.startsWith(`wfrun_`))){let e=await n(i);i={...i,baseUrl:e.baseUrl}}let l=o(e);await d(l,{recursive:!0,mode:448});let{release:u}=v({lockPath:`${await p(l)}.lock`});try{let e;try{e=await D(l)}catch(e){if(!S(e))throw e}let n=new Map((e?.cases??[]).map(e=>[e.id,e]));for(let e of t){i.signal?.throwIfAborted();let t;try{t=await E(e,i)}catch(n){i.signal?.throwIfAborted(),t={origin:e.startsWith(`wfrun_`)?new URL(i.baseUrl).origin:`local`,sourceDigest:null,graphDigest:null,params:{},source:null,outcome:`unavailable`,gaps:[`retained-attempt-unavailable`],record:{run:e,error:n.name}}}let r=c({origin:t.origin,run:e}),a=n.get(r);if(a&&[`domain`,`unit`,`split`].some(e=>a[e]!==i[e]))throw Error(`A retained attempt cannot change domain, unit or split; fork the dataset`);let o=await w(l,{...t.record,source:t.source});n.set(r,b.parse({id:r,kind:`retained-graph`,domain:i.domain,unit:i.unit,split:i.split,run:e,origin:t.origin,sourceDigest:t.sourceDigest,graphDigest:t.graphDigest,params:t.params,...t.trigger===void 0?{}:{trigger:t.trigger},...t.mcpPolicy===void 0?{}:{mcpPolicy:t.mcpPolicy},...`taskWorkspace`in t&&t.taskWorkspace?{taskWorkspace:t.taskWorkspace}:{},outcome:t.outcome,gaps:t.gaps,evidence:o,quality:null}))}let r=[...n.values()].sort((e,t)=>e.id.localeCompare(t.id));if(r.some(e=>r.some(t=>e.domain===t.domain&&e.unit===t.unit&&e.split!==t.split)))throw Error(`An independent unit crosses dataset splits`);let o=C(r,{name:e?.manifest.name??`graph-runs`,provenance:e?.manifest.provenance??{createdAt:new Date().toISOString(),version:`1`}});await d(a(l,`versions`),{recursive:!0});let u=a(l,`versions`,`${o.contentHash}.json`);try{await h(u,JSON.stringify({manifest:o,cases:r}),{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e}let f=a(l,`latest-${s()}.json`);return await h(f,JSON.stringify({version:o.contentHash}),{mode:384,flush:!0}),await m(f,a(l,`latest.json`)),D(l)}finally{await u()}}export{b as graphCase,w as graphDatasetObject,O as ingestGraphDataset,D as readGraphDataset,T as readGraphDatasetObject};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,d as t,f as n,h as r,i,l as a,n as o,o as s,s as c,t as l}from"./index.mjs";import{openGraphCampaignBudget as u,readCampaignJson as d,writeCampaignJson as f}from"./graph-campaign-state-BLsk-81-.mjs";import{graphDatasetObject as p,readGraphDataset as m,readGraphDatasetObject as h}from"./graph-dataset-V3HZEEry.mjs";import{a as g,graphOperatingCell as _,graphOperatingDecision as v,i as y,n as b,r as x,t as S}from"./graph-operating-evidence-CUiPxcmh.mjs";import{findPackageJSON as C}from"node:module";import{randomUUID as w}from"node:crypto";import{canonicalCandidateDigest as T}from"@tangle-network/agent-interface";import{join as E,resolve as D}from"node:path";import{homedir as O}from"node:os";import{z as k}from"zod";import{mkdir as A,readFile as j,readdir as M,realpath as N,writeFile as P}from"node:fs/promises";import{SearchEnvironmentFault as F,improve as I,reflectiveProfileProposer as L,searchMethod as R,subscriptionLane as z}from"@tangle-network/agent-runtime";import{readSettleRecord as B,runEvidence as V}from"@tangle-network/agent-runtime/durable";import{readGraphStrings as H,setGraphStrings as U}from"@tangle-network/agent-runtime/kernel";import{acquireSingleRunLock as W,incumbent as G,uniform as K}from"@tangle-network/agent-eval/campaign";async function q(e,t,n,i,a,o={}){let s=a===void 0?r().seat??null:null,c=D(i);await A(c,{recursive:!0,mode:448});let{release:u}=W({lockPath:`${await N(c)}.lock`});try{let r=await ne(e,t,n,c,a,s,o),{suite:i,dataset:u,profile:m,sourceForProfile:y,assertUnchanged:b,baselineDigest:x,optimizedCoordinate:S,evaluatorIdentity:C,calibration:T,hostBindings:D}=r,k=g({profile:m,budget:{maxTokens:i.budget.proposalTokens,maxIterations:i.budget.proposalIterations,deadlineMs:i.budget.proposalDeadlineMs},run:async(e,t,n)=>{let r=await z(e,t,{},n),i=await B(E(O(),`.tangle`,`runs`,r.runId));if(!i)throw Error(`Reflection has no retained settlement`);return{...r,settlement:i}}}),A=await J(r,k);try{let e=await d(E(c,`result.json`)),t=await h(c,e.record);if(t.identity!==A)throw Error(`Completed campaign configuration changed; use a new directory`);if(l(await j(t.candidate))!==t.candidateDigest)throw Error(`Measured candidate bytes changed`);return{...t,record:e.record}}catch(e){if(e.code!==`ENOENT`)throw e}let I=await Y(r,A),L=new Map;for(let e of u.cases)L.set(e.id,await h(u.root,e.evidence));let R=w(),z=X(r,I,R),V=Z(r,L,R),H=await te(r,k,A,{...I,run:z,judge:V});if(!H.searchHistory?.complete)throw await H.dispose(),new F(`Optimizer did not retain complete verified search history`);let U=y(H.candidate.profile),W=l(U);await b();let G=await v(c,u.cases.filter(e=>e.split===`test`),i,W,x,H.searchHistory),K=E(c,`${W}.graph.yaml`);await P(K,U,{mode:384,flush:!0});let q=await Promise.all((await M(E(c,`judgments`)).catch(e=>{if(e.code!==`ENOENT`)throw e;return[]})).filter(e=>e.endsWith(`.json`)).map(async e=>{let t=_.parse(await d(E(c,`judgments`,e)));if(t.sourceDigest!==W)return null;let n=await h(c,t.evidence);if(n.artifact.sourceDigest!==W||typeof n.artifact.graphDigest!=`string`)throw Error(`Candidate judgment has no exact measured execution identity`);return{runId:n.artifact.runId,scenario:t.scenario,graphDigest:n.artifact.graphDigest}})),{dispose:ee,...re}=H,Q={version:1,identity:A,optimizedCoordinate:S,baselineDigest:x,candidateDigest:W,candidate:K,sourcePath:await N(e),dataset:{root:u.root,version:u.version},workspaceGaps:[...new Set(u.cases.flatMap(e=>e.taskWorkspace?.gaps??[`task-workspace-not-snapshotted`,`environment-and-toolchain-not-snapshotted`]))],suite:await N(n),evaluatorIdentity:C,calibration:T,executionIdentities:q.filter(e=>e!==null),mcpPolicy:D.mcpPolicy,decision:H.decision===`ship`&&G.admissible?`promote`:`hold`,operational:G,measurement:re,operatingCost:{known:!1,reason:`subscription and environment allocation are not metered as incremental provider charges`},campaignBudget:{limits:i.budget,readout:I.pool.readout()}};await b();let $=await p(c,Q);return await f(E(c,`result.json`),{record:$}),await H.dispose(),{...Q,record:$}}finally{await u()}}async function J(e,t){let{seat:n,defaultSeat:r,optimizedCoordinate:i,suite:a,baselineDigest:o,dataset:s,evaluatorIdentity:c,hostBindings:u,loaded:f}=e,p=C(import.meta.url);if(!p)throw Error(`Cannot identify the CLI dependency manifest`);return T({consumer:`graph-learning-v1`,optimizedCoordinate:i,optimizer:y.parse(a.optimizer),reflection:t.callRef,consumerBytes:l(await j(new URL(import.meta.url))),consumerManifest:l(await j(p)),environment:{node:process.version,platform:process.platform,architecture:process.arch,packages:await Promise.all([`@tangle-network/agent-runtime`,`@tangle-network/agent-eval`,`cli-bridge`].map(async e=>{let t=C(e,import.meta.url);if(!t)throw Error(`Cannot identify ${e} for reproducible learning`);return{name:e,version:(await d(t)).version,entryDigest:l(await j(new URL(import.meta.resolve(e))))}}))},baselineDigest:o,dataset:s.version,evaluatorIdentity:c,seat:n??null,defaultSeat:r,mcpPolicy:u.mcpPolicy,graph:f.graph,budget:a.budget,reps:a.reps})}async function Y(e,t){let{root:n,suite:r,defaultSeat:i,bindings:a}=e,l=new AbortController,{pool:d,checkpoint:f,startedAt:p,pendingAttempt:m}=await u(n,r.budget,t,(e,t)=>{if(t.usd-(t.usdEstimated??0)>0){let t=new F(`Native subscription run ${e} reported positive provider billing; no further campaign work is admitted`);throw l.abort(t),t}}),h=AbortSignal.any([AbortSignal.timeout(Math.max(1,p+r.budget.deadlineMs-Date.now())),l.signal]);h.throwIfAborted();let g=m();if(g){let e=await s(g.runId);if(e.sourceDigest!==g.sourceDigest||e.graphDigest!==g.graphDigest)throw Error(`Pending native input changed its admitted execution identity`);try{await o(e.file,{param:[],resume:e.runId,json:!0,mcpPolicy:e.mcpPolicy,mcpSecret:a.mcpSecret},{defaultSeat:i,cwd:e.cwd,source:await c(e),runId:e.runId,graphDigest:e.graphDigest,signal:h,...e.trigger&&{trigger:e.trigger}})}catch(e){if(e.code!==`GRAPH_RUN_FAILED`)throw e}finally{await f()}}return{pool:d,checkpoint:f,startedAt:p,signal:h}}function X(n,r,u){let{root:f,hostBindings:p,seat:m,defaultSeat:h}=n,{signal:g,checkpoint:_}=r;return async(n,r,v,y,b=null,x)=>{await A(E(f,`attempts`),{recursive:!0,mode:448});let S=E(f,`attempts`,`${l(r)}.json`),C=!1;try{await P(S,JSON.stringify({runId:w(),startedAt:Date.now()}),{flag:`wx`,mode:384,flush:!0}),C=!0}catch(e){if(e.code!==`EEXIST`)throw e}let{runId:T,startedAt:D}=k.strictObject({runId:k.uuid(),startedAt:k.number().int().nonnegative()}).parse(await d(S)),M=E(f,`executions`,T);await A(M,{recursive:!0,mode:448});let N=E(M,`graph.yaml`);try{await P(N,n,{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e;if(l(await j(N))!==l(n))throw Error(`Attempt source identity changed`)}let I;try{await j(E(O(),`.tangle`,`runs`,T,`input.json`)),I=await s(T)}catch(e){if(e.code!==`ENOENT`)throw e}if(I&&l(await c(I))!==l(n))throw Error(`Attempt snapshot changed`);if(I&&(x?a(x):null)!==(I.taskWorkspace?a(I.taskWorkspace):null))throw Error(`Attempt task workspace identity changed`);let L=x?await e(x,{runId:T,resumeCwd:I?.cwd,signal:AbortSignal.any([g,y])}):void 0;try{let e=await o(N,{...p,param:i(v),dryRun:!0,...I&&{resume:T},...m&&{seat:m}},{defaultSeat:h,cwd:L?.cwd??M,signal:g,...b&&{trigger:b},...x&&{taskWorkspace:x}});if(!(`graph`in e))throw Error(`Attempt did not load locally`);if(!e.graph.budget?.maxTokens||!e.graph.budget.maxIterations||!e.graph.budget.deadlineMs)throw Error(`Every materialized case needs finite token, iteration and deadline budgets`);await _({runId:T,budget:e.graph.budget,sourceDigest:l(n),graphDigest:e.graph.digest});let r;try{await o(N,{...p,param:i(v),json:!0,...m&&{seat:m},...I&&{resume:T}},{defaultSeat:h,runId:T,cwd:L?.cwd??M,...x&&{taskWorkspace:x},graphDigest:e.graph.digest,signal:AbortSignal.any([g,y]),...b&&{trigger:b}})}catch(e){r=e}finally{await _()}let s=await B(E(O(),`.tangle`,`runs`,T));if(!s)throw new F(`Native graph attempt has no retained settlement`,{cause:r});return{...t(s),runId:T,sourceDigest:l(n),graphDigest:e.graph.digest,durationMs:Math.max(Date.now()-D,s.spentTotal.ms),latencyKnown:C,invocation:u,taskWorkspaceDigest:x?a(x):null}}finally{L?.release()}}}function Z(e,t,n){let{root:r,suite:i,evaluatorCwd:a,evaluatorIdentity:o,assertUnchanged:s}=e;return{name:`independent-domain-evaluator`,judgeVersion:o,dimensions:[{key:`quality`,description:i.objective}],score:async({artifact:e,scenario:c,signal:l})=>{let u=await S(i,a,{scenario:c,evidence:t.get(c.id),artifact:e},l,s),d=await p(r,{evaluatorIdentity:o,scenario:c.id,artifact:e,verdict:u});return await A(E(r,`judgments`),{recursive:!0,mode:448}),await f(E(r,`judgments`,`${e.runId}.json`),{evidence:d,sourceDigest:e.sourceDigest,scenario:c.id,unit:c.unit,split:c.split,quality:u.quality,tokens:e.tokenUsage.input===null||e.tokenUsage.output===null?null:e.tokenUsage.input+e.tokenUsage.output,durationMs:e.durationMs,latencyKnown:e.latencyKnown&&e.invocation===n,operatingCostUsd:null}),{dimensions:{quality:u.quality},composite:u.quality,notes:u.notes}}}}function ee(e,t){let{root:n,profile:r,suite:i,dataset:o}=e;return L({model:r.model?.default??`subscription-native`,pricing:{inputUsdPerMillion:0,outputUsdPerMillion:0},maxOutputTokens:i.budget.proposalTokens,frame:`Improve only the ${i.node} node's inline prompt. Domain: ${i.domain}. Objective: ${i.objective}. Preserve independent checks.`,evidence:async({trainCells:e})=>Promise.all(e.map(async e=>{let t=await d(E(n,`attempts`,`${l(`${e.cellId}:${e.attempt}`)}.json`)),r=await V(E(O(),`.tangle`,`runs`,t.runId),{totalChars:48e3});return JSON.stringify({cell:e,tasks:o.cases.filter(t=>t.split===`train`&&t.unit===e.unitId).map(e=>({id:e.id,params:e.params,trigger:e.trigger,taskWorkspace:e.taskWorkspace?a(e.taskWorkspace):null})),records:r})})),chat:async({messages:e,callId:n,signal:r})=>{let a=await t.call({callId:n,signal:r,request:{model:t.model,messages:e,maxTokens:i.budget.proposalTokens}});if(!a.succeeded)throw Error(a.error);return{content:a.response.content,usage:a.response.usage.captured===!1?null:{inputTokens:a.response.usage.promptTokens,outputTokens:a.response.usage.completionTokens}}}})}async function te(e,t,n,r){let{root:i,suite:a,dataset:o,profile:s,profileComponents:c,sourceForProfile:l}=e,{signal:u,startedAt:d,run:f,judge:p}=r,m=ee(e,t),h=x(a.optimizer,{subscriptionOnlyModel:t,runner:{},maxOutputTokens:a.budget.proposalTokens,timeoutMs:a.budget.proposalDeadlineMs,objective:a.objective,describeScenario:e=>({id:e.id,params:e.params,trigger:e.trigger}),describeArtifact:e=>({text:e.text,status:e.status})}),g={surface:`agent-profile`,profileComponents:c,executionRef:n,trainScenarios:o.cases.filter(e=>e.split===`train`),selectionScenarios:o.cases.filter(e=>e.split===`dev`),testScenarios:o.cases.filter(e=>e.split===`test`),judges:[p],costCeiling:0,runDir:E(i,`search`),signal:u,agent:async(e,t,n)=>{let r=l(e),i=await n.cost.runPaidCall({actor:`native-graph`,model:s.model?.default??`subscription-native`,maximumCharge:{externallyEnforcedMaximumUsd:0},signal:n.signal,execute:()=>f(r,`search`in n?n.search.runId:`${n.cellId}:${n.runAttemptId}`,t.params,n.signal,t.trigger??null,t.taskWorkspace),receipt:e=>({model:s.model?.default??`subscription-native`,...e.costUsd===null?{costUnknown:!0}:{actualCostUsd:e.costUsd},inputTokens:e.tokenUsage.input??0,outputTokens:e.tokenUsage.output??0,usageUnknown:e.tokenUsage.input===null||e.tokenUsage.output===null})});if(!i.succeeded)throw i.error;return i.value}};return h.kind===`official`?await I(s,{...g,method:h.method,minimumLift:a.minimumEffect,reps:a.reps,maxConcurrency:1,optimizationRunOptions:{reps:a.reps,maxConcurrency:1}}):await I(s,{...g,method:R({proposer:m,maxExpansions:a.budget.maxExpansions,policy:G(),allocation:K({reps:a.reps}),lanes:[z({seats:1,cellUsd:0})],deadline:new Date(d+a.budget.deadlineMs).toISOString(),maxAttempts:1}),claim:{use:`comparison`,population:{id:a.domain,description:a.objective},samplingFrame:`retained graph dataset ${o.version}`,independentUnit:`unit`,generalization:`new-units`,minimumEffect:a.minimumEffect},executionRunId:e=>e.runId})}async function ne(t,r,a,s,c,u,f){let{suite:p,cwd:h,identity:g,calibration:_,assertUnchanged:v}=await b(a),y=await j(t,`utf8`),x=H(y)[p.node];if(typeof x!=`string`)throw Error(`The selected node needs an unshared inline prompt`);let S=await m(r);if(S.cases.some(e=>e.domain!==p.domain))throw Error(`Dataset contains a different domain`);if(S.cases.some(e=>e.outcome===`unavailable`||!e.sourceDigest))throw Error(`Dataset retains unavailable attempts; reconcile them before freezing a learning cohort`);for(let e of[`train`,`dev`,`test`])if(!S.cases.some(t=>t.split===e))throw Error(`Dataset needs an independent ${e} partition`);if(S.cases.some(e=>e.trigger===void 0))throw Error(`Dataset lacks retained trigger context; reingest legacy runs before replay`);let C=[...new Set(S.cases.map(e=>JSON.stringify(n.parse(e.mcpPolicy??{}))))];if(!f.mcpPolicy&&C.length!==1)throw Error(`Retained MCP host policies differ; select an explicit --mcp-policy`);let T={...f,mcpPolicy:f.mcpPolicy??n.parse(JSON.parse(C[0]??`{}`))},D=S.cases.find(e=>e.split===`train`);if(!D)throw Error(`Dataset needs a train case`);let O=E(s,`baseline.graph.yaml`),A=l(y);try{await P(O,y,{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e;if(l(await j(O))!==A)throw Error(`Frozen baseline changed`)}let M;if(D.taskWorkspace){let t=E(s,`task-workspace-admission.json`);try{await P(t,JSON.stringify({runId:w()}),{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e}let n=k.strictObject({runId:k.uuid()}).parse(await d(t));M=await e(D.taskWorkspace,{...n,validationOnly:!0})}let N;try{N=await o(O,{...T,param:i(D.params),dryRun:!0,...c&&{seat:c}},{defaultSeat:u,...D.trigger&&{trigger:D.trigger},...M&&{cwd:M.cwd,taskWorkspace:D.taskWorkspace}})}finally{await M?.release()}if(!(`graph`in N))throw Error(`Baseline did not load locally`);if(!N.graph.budget?.maxTokens||!N.graph.budget.maxIterations||!N.graph.budget.deadlineMs)throw Error(`Graph needs finite token, iteration and deadline budgets for bounded improvement`);let F=N.graph.nodes.find(e=>e.id===p.node)?.profile;if(!F)throw Error(`Selected node was not materialized`);let I=typeof F.prompt?.systemPrompt==`string`?`systemPrompt`:`appendSystemPrompt`;if(typeof F.prompt?.[I]!=`string`)throw Error(`The selected source coordinate was not materialized`);let L=`prompt.${I}`,R={...F,prompt:{...F.prompt,[I]:x}},z=e=>{let t=e.prompt?.[I];if(typeof t!=`string`)throw Error(`Candidate lost its selected prompt coordinate`);return t},B={read:e=>({[L]:z(e)}),apply(e,t){if(Object.keys(t).length!==1||Object.keys(t)[0]!==L||typeof t[L]!=`string`)throw Error(`Candidate changed the selected prompt coordinate`);return{...e,prompt:{...e.prompt,[I]:t[L]}}}},V=e=>{let t=z(e);return t===x?y:U(y,{[p.node]:t})},W={node:p.node,profileField:L,binding:`authored-source-compiled-per-case`};return{root:s,seat:c,defaultSeat:u,bindings:f,suite:p,evaluatorCwd:h,evaluatorIdentity:g,calibration:_,assertUnchanged:v,baselineDigest:A,dataset:S,hostBindings:T,loaded:N,profile:R,profileComponents:B,sourceForProfile:V,optimizedCoordinate:W}}export{q as learnGraph};
|
|
1
|
+
import{c as e,d as t,f as n,h as r,i,l as a,n as o,o as s,s as c,t as l}from"./index.mjs";import{openGraphCampaignBudget as u,readCampaignJson as d,writeCampaignJson as f}from"./graph-campaign-state-YA-eORZN.mjs";import{graphDatasetObject as p,readGraphDataset as m,readGraphDatasetObject as h}from"./graph-dataset-DL_Fx_EH.mjs";import{a as g,graphOperatingCell as _,graphOperatingDecision as v,i as y,n as b,r as x,t as S}from"./graph-operating-evidence-CGGxszAi.mjs";import{findPackageJSON as C}from"node:module";import{join as w,resolve as T}from"node:path";import{randomUUID as E}from"node:crypto";import{canonicalCandidateDigest as D}from"@tangle-network/agent-interface";import{homedir as O}from"node:os";import{z as k}from"zod";import{mkdir as A,readFile as j,readdir as M,realpath as N,writeFile as P}from"node:fs/promises";import{SearchEnvironmentFault as F,improve as I,reflectiveProfileProposer as L,searchMethod as R,subscriptionLane as z}from"@tangle-network/agent-runtime";import{readSettleRecord as B,runEvidence as V}from"@tangle-network/agent-runtime/durable";import{readGraphStrings as H,setGraphStrings as U}from"@tangle-network/agent-runtime/kernel";import{acquireSingleRunLock as W,incumbent as G,uniform as K}from"@tangle-network/agent-eval/campaign";async function q(e,t,n,i,a,o={}){let s=a===void 0?r().seat??null:null,c=T(i);await A(c,{recursive:!0,mode:448});let{release:u}=W({lockPath:`${await N(c)}.lock`});try{let r=await ne(e,t,n,c,a,s,o),{suite:i,dataset:u,profile:m,sourceForProfile:y,assertUnchanged:b,baselineDigest:x,optimizedCoordinate:S,evaluatorIdentity:C,calibration:T,hostBindings:D}=r,k=g({profile:m,budget:{maxTokens:i.budget.proposalTokens,maxIterations:i.budget.proposalIterations,deadlineMs:i.budget.proposalDeadlineMs},run:async(e,t,n)=>{let r=await z(e,t,{},n),i=await B(w(O(),`.tangle`,`runs`,r.runId));if(!i)throw Error(`Reflection has no retained settlement`);return{...r,settlement:i}}}),A=await J(r,k);try{let e=await d(w(c,`result.json`)),t=await h(c,e.record);if(t.identity!==A)throw Error(`Completed campaign configuration changed; use a new directory`);if(l(await j(t.candidate))!==t.candidateDigest)throw Error(`Measured candidate bytes changed`);return{...t,record:e.record}}catch(e){if(e.code!==`ENOENT`)throw e}let I=await Y(r,A),L=new Map;for(let e of u.cases)L.set(e.id,await h(u.root,e.evidence));let R=E(),z=X(r,I,R),V=Z(r,L,R),H=await te(r,k,A,{...I,run:z,judge:V});if(!H.searchHistory?.complete)throw await H.dispose(),new F(`Optimizer did not retain complete verified search history`);let U=y(H.candidate.profile),W=l(U);await b();let G=await v(c,u.cases.filter(e=>e.split===`test`),i,W,x,H.searchHistory),K=w(c,`${W}.graph.yaml`);await P(K,U,{mode:384,flush:!0});let q=await Promise.all((await M(w(c,`judgments`)).catch(e=>{if(e.code!==`ENOENT`)throw e;return[]})).filter(e=>e.endsWith(`.json`)).map(async e=>{let t=_.parse(await d(w(c,`judgments`,e)));if(t.sourceDigest!==W)return null;let n=await h(c,t.evidence);if(n.artifact.sourceDigest!==W||typeof n.artifact.graphDigest!=`string`)throw Error(`Candidate judgment has no exact measured execution identity`);return{runId:n.artifact.runId,scenario:t.scenario,graphDigest:n.artifact.graphDigest}})),{dispose:ee,...re}=H,Q={version:1,identity:A,optimizedCoordinate:S,baselineDigest:x,candidateDigest:W,candidate:K,sourcePath:await N(e),dataset:{root:u.root,version:u.version},workspaceGaps:[...new Set(u.cases.flatMap(e=>e.taskWorkspace?.gaps??[`task-workspace-not-snapshotted`,`environment-and-toolchain-not-snapshotted`]))],suite:await N(n),evaluatorIdentity:C,calibration:T,executionIdentities:q.filter(e=>e!==null),mcpPolicy:D.mcpPolicy,decision:H.decision===`ship`&&G.admissible?`promote`:`hold`,operational:G,measurement:re,operatingCost:{known:!1,reason:`subscription and environment allocation are not metered as incremental provider charges`},campaignBudget:{limits:i.budget,readout:I.pool.readout()}};await b();let $=await p(c,Q);return await f(w(c,`result.json`),{record:$}),await H.dispose(),{...Q,record:$}}finally{await u()}}async function J(e,t){let{seat:n,defaultSeat:r,optimizedCoordinate:i,suite:a,baselineDigest:o,dataset:s,evaluatorIdentity:c,hostBindings:u,loaded:f}=e,p=C(import.meta.url);if(!p)throw Error(`Cannot identify the CLI dependency manifest`);return D({consumer:`graph-learning-v1`,optimizedCoordinate:i,optimizer:y.parse(a.optimizer),reflection:t.callRef,consumerBytes:l(await j(new URL(import.meta.url))),consumerManifest:l(await j(p)),environment:{node:process.version,platform:process.platform,architecture:process.arch,packages:await Promise.all([`@tangle-network/agent-runtime`,`@tangle-network/agent-eval`,`cli-bridge`].map(async e=>{let t=C(e,import.meta.url);if(!t)throw Error(`Cannot identify ${e} for reproducible learning`);return{name:e,version:(await d(t)).version,entryDigest:l(await j(new URL(import.meta.resolve(e))))}}))},baselineDigest:o,dataset:s.version,evaluatorIdentity:c,seat:n??null,defaultSeat:r,mcpPolicy:u.mcpPolicy,graph:f.graph,budget:a.budget,reps:a.reps})}async function Y(e,t){let{root:n,suite:r,defaultSeat:i,bindings:a}=e,l=new AbortController,{pool:d,checkpoint:f,startedAt:p,pendingAttempt:m}=await u(n,r.budget,t,(e,t)=>{if(t.usd-(t.usdEstimated??0)>0){let t=new F(`Native subscription run ${e} reported positive provider billing; no further campaign work is admitted`);throw l.abort(t),t}}),h=AbortSignal.any([AbortSignal.timeout(Math.max(1,p+r.budget.deadlineMs-Date.now())),l.signal]);h.throwIfAborted();let g=m();if(g){let e=await s(g.runId);if(e.sourceDigest!==g.sourceDigest||e.graphDigest!==g.graphDigest)throw Error(`Pending native input changed its admitted execution identity`);try{await o(e.file,{param:[],resume:e.runId,json:!0,mcpPolicy:e.mcpPolicy,mcpSecret:a.mcpSecret},{defaultSeat:i,cwd:e.cwd,source:await c(e),runId:e.runId,graphDigest:e.graphDigest,signal:h,...e.trigger&&{trigger:e.trigger}})}catch(e){if(e.code!==`GRAPH_RUN_FAILED`)throw e}finally{await f()}}return{pool:d,checkpoint:f,startedAt:p,signal:h}}function X(n,r,u){let{root:f,hostBindings:p,seat:m,defaultSeat:h}=n,{signal:g,checkpoint:_}=r;return async(n,r,v,y,b=null,x)=>{await A(w(f,`attempts`),{recursive:!0,mode:448});let S=w(f,`attempts`,`${l(r)}.json`),C=!1;try{await P(S,JSON.stringify({runId:E(),startedAt:Date.now()}),{flag:`wx`,mode:384,flush:!0}),C=!0}catch(e){if(e.code!==`EEXIST`)throw e}let{runId:T,startedAt:D}=k.strictObject({runId:k.uuid(),startedAt:k.number().int().nonnegative()}).parse(await d(S)),M=w(f,`executions`,T);await A(M,{recursive:!0,mode:448});let N=w(M,`graph.yaml`);try{await P(N,n,{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e;if(l(await j(N))!==l(n))throw Error(`Attempt source identity changed`)}let I;try{await j(w(O(),`.tangle`,`runs`,T,`input.json`)),I=await s(T)}catch(e){if(e.code!==`ENOENT`)throw e}if(I&&l(await c(I))!==l(n))throw Error(`Attempt snapshot changed`);if(I&&(x?a(x):null)!==(I.taskWorkspace?a(I.taskWorkspace):null))throw Error(`Attempt task workspace identity changed`);let L=x?await e(x,{runId:T,resumeCwd:I?.cwd,signal:AbortSignal.any([g,y])}):void 0;try{let e=await o(N,{...p,param:i(v),dryRun:!0,...I&&{resume:T},...m&&{seat:m}},{defaultSeat:h,cwd:L?.cwd??M,signal:g,...b&&{trigger:b},...x&&{taskWorkspace:x}});if(!(`graph`in e))throw Error(`Attempt did not load locally`);if(!e.graph.budget?.maxTokens||!e.graph.budget.maxIterations||!e.graph.budget.deadlineMs)throw Error(`Every materialized case needs finite token, iteration and deadline budgets`);await _({runId:T,budget:e.graph.budget,sourceDigest:l(n),graphDigest:e.graph.digest});let r;try{await o(N,{...p,param:i(v),json:!0,...m&&{seat:m},...I&&{resume:T}},{defaultSeat:h,runId:T,cwd:L?.cwd??M,...x&&{taskWorkspace:x},graphDigest:e.graph.digest,signal:AbortSignal.any([g,y]),...b&&{trigger:b}})}catch(e){r=e}finally{await _()}let s=await B(w(O(),`.tangle`,`runs`,T));if(!s)throw new F(`Native graph attempt has no retained settlement`,{cause:r});return{...t(s),runId:T,sourceDigest:l(n),graphDigest:e.graph.digest,durationMs:Math.max(Date.now()-D,s.spentTotal.ms),latencyKnown:C,invocation:u,taskWorkspaceDigest:x?a(x):null}}finally{L?.release()}}}function Z(e,t,n){let{root:r,suite:i,evaluatorCwd:a,evaluatorIdentity:o,assertUnchanged:s}=e;return{name:`independent-domain-evaluator`,judgeVersion:o,dimensions:[{key:`quality`,description:i.objective}],score:async({artifact:e,scenario:c,signal:l})=>{let u=await S(i,a,{scenario:c,evidence:t.get(c.id),artifact:e},l,s),d=await p(r,{evaluatorIdentity:o,scenario:c.id,artifact:e,verdict:u});return await A(w(r,`judgments`),{recursive:!0,mode:448}),await f(w(r,`judgments`,`${e.runId}.json`),{evidence:d,sourceDigest:e.sourceDigest,scenario:c.id,unit:c.unit,split:c.split,quality:u.quality,tokens:e.tokenUsage.input===null||e.tokenUsage.output===null?null:e.tokenUsage.input+e.tokenUsage.output,durationMs:e.durationMs,latencyKnown:e.latencyKnown&&e.invocation===n,operatingCostUsd:null}),{dimensions:{quality:u.quality},composite:u.quality,notes:u.notes}}}}function ee(e,t){let{root:n,profile:r,suite:i,dataset:o}=e;return L({model:r.model?.default??`subscription-native`,pricing:{inputUsdPerMillion:0,outputUsdPerMillion:0},maxOutputTokens:i.budget.proposalTokens,frame:`Improve only the ${i.node} node's inline prompt. Domain: ${i.domain}. Objective: ${i.objective}. Preserve independent checks.`,evidence:async({trainCells:e})=>Promise.all(e.map(async e=>{let t=await d(w(n,`attempts`,`${l(`${e.cellId}:${e.attempt}`)}.json`)),r=await V(w(O(),`.tangle`,`runs`,t.runId),{totalChars:48e3});return JSON.stringify({cell:e,tasks:o.cases.filter(t=>t.split===`train`&&t.unit===e.unitId).map(e=>({id:e.id,params:e.params,trigger:e.trigger,taskWorkspace:e.taskWorkspace?a(e.taskWorkspace):null})),records:r})})),chat:async({messages:e,callId:n,signal:r})=>{let a=await t.call({callId:n,signal:r,request:{model:t.model,messages:e,maxTokens:i.budget.proposalTokens}});if(!a.succeeded)throw Error(a.error);return{content:a.response.content,usage:a.response.usage.captured===!1?null:{inputTokens:a.response.usage.promptTokens,outputTokens:a.response.usage.completionTokens}}}})}async function te(e,t,n,r){let{root:i,suite:a,dataset:o,profile:s,profileComponents:c,sourceForProfile:l}=e,{signal:u,startedAt:d,run:f,judge:p}=r,m=ee(e,t),h=x(a.optimizer,{subscriptionOnlyModel:t,runner:{},maxOutputTokens:a.budget.proposalTokens,timeoutMs:a.budget.proposalDeadlineMs,objective:a.objective,describeScenario:e=>({id:e.id,params:e.params,trigger:e.trigger}),describeArtifact:e=>({text:e.text,status:e.status})}),g={surface:`agent-profile`,profileComponents:c,executionRef:n,trainScenarios:o.cases.filter(e=>e.split===`train`),selectionScenarios:o.cases.filter(e=>e.split===`dev`),testScenarios:o.cases.filter(e=>e.split===`test`),judges:[p],costCeiling:0,runDir:w(i,`search`),signal:u,agent:async(e,t,n)=>{let r=l(e),i=await n.cost.runPaidCall({actor:`native-graph`,model:s.model?.default??`subscription-native`,maximumCharge:{externallyEnforcedMaximumUsd:0},signal:n.signal,execute:()=>f(r,`search`in n?n.search.runId:`${n.cellId}:${n.runAttemptId}`,t.params,n.signal,t.trigger??null,t.taskWorkspace),receipt:e=>({model:s.model?.default??`subscription-native`,...e.costUsd===null?{costUnknown:!0}:{actualCostUsd:e.costUsd},inputTokens:e.tokenUsage.input??0,outputTokens:e.tokenUsage.output??0,usageUnknown:e.tokenUsage.input===null||e.tokenUsage.output===null})});if(!i.succeeded)throw i.error;return i.value}};return h.kind===`official`?await I(s,{...g,method:h.method,minimumLift:a.minimumEffect,reps:a.reps,maxConcurrency:1,optimizationRunOptions:{reps:a.reps,maxConcurrency:1}}):await I(s,{...g,method:R({proposer:m,maxExpansions:a.budget.maxExpansions,policy:G(),allocation:K({reps:a.reps}),lanes:[z({seats:1,cellUsd:0})],deadline:new Date(d+a.budget.deadlineMs).toISOString(),maxAttempts:1}),claim:{use:`comparison`,population:{id:a.domain,description:a.objective},samplingFrame:`retained graph dataset ${o.version}`,independentUnit:`unit`,generalization:`new-units`,minimumEffect:a.minimumEffect},executionRunId:e=>e.runId})}async function ne(t,r,a,s,c,u,f){let{suite:p,cwd:h,identity:g,calibration:_,assertUnchanged:v}=await b(a),y=await j(t,`utf8`),x=H(y)[p.node];if(typeof x!=`string`)throw Error(`The selected node needs an unshared inline prompt`);let S=await m(r);if(S.cases.some(e=>e.domain!==p.domain))throw Error(`Dataset contains a different domain`);if(S.cases.some(e=>e.outcome===`unavailable`||!e.sourceDigest))throw Error(`Dataset retains unavailable attempts; reconcile them before freezing a learning cohort`);for(let e of[`train`,`dev`,`test`])if(!S.cases.some(t=>t.split===e))throw Error(`Dataset needs an independent ${e} partition`);if(S.cases.some(e=>e.trigger===void 0))throw Error(`Dataset lacks retained trigger context; reingest legacy runs before replay`);let C=[...new Set(S.cases.map(e=>JSON.stringify(n.parse(e.mcpPolicy??{}))))];if(!f.mcpPolicy&&C.length!==1)throw Error(`Retained MCP host policies differ; select an explicit --mcp-policy`);let T={...f,mcpPolicy:f.mcpPolicy??n.parse(JSON.parse(C[0]??`{}`))},D=S.cases.find(e=>e.split===`train`);if(!D)throw Error(`Dataset needs a train case`);let O=w(s,`baseline.graph.yaml`),A=l(y);try{await P(O,y,{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e;if(l(await j(O))!==A)throw Error(`Frozen baseline changed`)}let M;if(D.taskWorkspace){let t=w(s,`task-workspace-admission.json`);try{await P(t,JSON.stringify({runId:E()}),{flag:`wx`,mode:384,flush:!0})}catch(e){if(e.code!==`EEXIST`)throw e}let n=k.strictObject({runId:k.uuid()}).parse(await d(t));M=await e(D.taskWorkspace,{...n,validationOnly:!0})}let N;try{N=await o(O,{...T,param:i(D.params),dryRun:!0,...c&&{seat:c}},{defaultSeat:u,...D.trigger&&{trigger:D.trigger},...M&&{cwd:M.cwd,taskWorkspace:D.taskWorkspace}})}finally{await M?.release()}if(!(`graph`in N))throw Error(`Baseline did not load locally`);if(!N.graph.budget?.maxTokens||!N.graph.budget.maxIterations||!N.graph.budget.deadlineMs)throw Error(`Graph needs finite token, iteration and deadline budgets for bounded improvement`);let F=N.graph.nodes.find(e=>e.id===p.node)?.profile;if(!F)throw Error(`Selected node was not materialized`);let I=typeof F.prompt?.systemPrompt==`string`?`systemPrompt`:`appendSystemPrompt`;if(typeof F.prompt?.[I]!=`string`)throw Error(`The selected source coordinate was not materialized`);let L=`prompt.${I}`,R={...F,prompt:{...F.prompt,[I]:x}},z=e=>{let t=e.prompt?.[I];if(typeof t!=`string`)throw Error(`Candidate lost its selected prompt coordinate`);return t},B={read:e=>({[L]:z(e)}),apply(e,t){if(Object.keys(t).length!==1||Object.keys(t)[0]!==L||typeof t[L]!=`string`)throw Error(`Candidate changed the selected prompt coordinate`);return{...e,prompt:{...e.prompt,[I]:t[L]}}}},V=e=>{let t=z(e);return t===x?y:U(y,{[p.node]:t})},W={node:p.node,profileField:L,binding:`authored-source-compiled-per-case`};return{root:s,seat:c,defaultSeat:u,bindings:f,suite:p,evaluatorCwd:h,evaluatorIdentity:g,calibration:_,assertUnchanged:v,baselineDigest:A,dataset:S,hostBindings:T,loaded:N,profile:R,profileComponents:B,sourceForProfile:V,optimizedCoordinate:W}}export{q as learnGraph};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{isAbsolute as e,join as t,relative as n}from"node:path";import{createHash as r}from"node:crypto";import{constants as i}from"node:fs";import{z as a}from"zod";import{open as o,opendir as s,realpath as c}from"node:fs/promises";import*as l from"@tangle-network/agent-runtime/kernel";import{CODEX_HOME_RULE as u,STORES as d,claudeCodeRefForFile as f,codexRefForFile as p,readSessionInput as m,storeGlob as h,withinPath as g}from"@tangle-network/harness-sessions";const _=a.object({harness:a.enum([`codex`,`claude-code`]),root:a.string().refine(e),basis:a.literal(`host-jail`),nativeSessionId:a.string().min(1),runId:a.string().min(1),requestDigest:a.string().regex(/^sha256:[a-f0-9]{64}$/)}),v=a.object({externalId:a.string(),internalId:a.string(),backend:a.enum([`codex`,`claude-code`]),cwd:a.string(),metadata:a.object({effective_native_store:_,agent_profile_binding:a.object({effectiveProfileDigest:a.string()})})});function y(){let e=new Map;return{observe(t){e.set(`${t.runId}:${t.requestDigest}`,t)},close(){e.clear()},redact(t,n){for(let n of t.runs){let r=e.get(`${n.runId}:${n.requestDigest}`);if(!r||r.sessionId!==t.sessionId||r.profileDigest!==t.profileDigest||r.cwd!==t.cwd)throw Error(`Exact native execution has no trusted redaction authority`)}if(!t.runs.length)throw Error(`Native redaction requires an exact execution binding`);let r=n;for(let n of e.values())n.sessionId===t.sessionId&&n.profileDigest===t.profileDigest&&n.cwd===t.cwd&&(r=n.redact(r));return r}}}function b(e,t){if(e===`codex`)return p(t);let n=t.split(`/`),r=n.indexOf(`subagents`,3);return f(t,r>0?n[r-1]??null:null)}async function x(e,r,i){let a=[],o=d[`claude-code.projects-jsonl`],f=t(r,...o.root.split(`/`).slice(1)),p=e===`codex`?u.sessionDirs.map(e=>t(r,e)):[f],m=e===`codex`?[h(u.rollout)]:o.files.map(e=>h(e)),_=0;for(;p.length;){i.throwIfAborted();let o=p.shift();if(o===void 0)break;let u;try{u=await c(o)}catch(e){if(e.code===`ENOENT`)continue;throw e}if(!g(u,r))throw Error(`Native inventory escaped its attested store`);let d=await s(u);for await(let o of d){if(i.throwIfAborted(),++_>l.HARNESS_TRANSCRIPT_READ_LIMITS.maxFiles)throw Error(`Native inventory exceeds the capture bound`);let s=t(d.path,o.name);o.isDirectory()?p.push(s):o.isFile()&&m.some(t=>t.test(e===`codex`?o.name:n(f,s)))&&a.push({path:n(r,s),nativeSessionId:b(e,n(r,s)).nativeSessionId})}}return a}function S(e){return async n=>{if(![`codex`,`claude-code`].includes(n.harness))return{status:`unavailable`,reason:`unknown-harness`,skipped:[{path:n.harness,reason:`Native transcript capture is not configured for this harness`}]};let s=await fetch(`${e.bridgeUrl}/v1/sessions?session_id=${encodeURIComponent(n.sessionId)}&backend=${n.harness}`,{headers:{authorization:`Bearer ${e.bridgeBearer}`},signal:n.signal});if(!s.ok)throw Error(`Bridge session lookup failed (HTTP ${s.status})`);let u=a.object({data:a.tuple([v])}).parse(await s.json()).data[0],d=u.metadata.effective_native_store,f=await c(d.root);if(u.backend!==n.harness||d.harness!==n.harness||u.externalId!==n.sessionId||u.internalId!==d.nativeSessionId||u.cwd!==e.cwd||n.cwd!==e.cwd||u.metadata.agent_profile_binding.effectiveProfileDigest!==n.profileDigest||f!==d.root||!g(f,t(e.cwd,`.agent-home`))||!n.runs.some(e=>e.runId===d.runId&&e.requestDigest===d.requestDigest))throw Error(`Bridge native binding does not match this execution`);let p=[],h=[...new Set(e.privateMcpSecrets?.()??[])].flatMap(e=>[e,JSON.stringify(e).slice(1,-1)]).filter(Boolean).sort((e,t)=>t.length-e.length),_=await l.captureBoundHarnessTranscript({harness:n.harness,binding:{kind:`bridge`,sessionId:n.sessionId,nativeSessionId:d.nativeSessionId,profileDigest:n.profileDigest,runs:n.runs,...n.node===void 0?{}:{node:n.node}},nativeSessionId:d.nativeSessionId,files:await x(n.harness,f,n.signal),signal:n.signal,parse:(e,t)=>m(n.harness,{text:e},{...b(n.harness,t.path),label:t.path},{corruption:`strict`}),read:async(a,s)=>{let u=await c(t(f,a.path));if(!g(u,f))throw Error(`Native session escaped its attested store`);let d=await o(u,i.O_RDONLY|i.O_NOFOLLOW);try{let t=await d.stat();if(!t.isFile()||t.size>l.HARNESS_TRANSCRIPT_READ_LIMITS.maxFileBytes)throw Error(`Native session is not a bounded regular file`);s?.throwIfAborted();let i=await d.readFile();if(s?.throwIfAborted(),!e.redact)throw Error(`The native host did not supply private redaction authority`);let o=e.redact(n,i),c=new TextDecoder(`utf-8`,{fatal:!0}).decode(o);for(let e of h)c=c.split(e).join(`[redacted:MCP]`);let u=Buffer.from(c,`utf8`);return u.equals(i)||p.push({path:a.path,reason:`Original bytes withheld for private MCP credential redaction; source sha256:${r(`sha256`).update(i).digest(`hex`)}; retained copy is redacted`}),u}finally{await d.close()}}});return _.status!==`captured`||!p.length?_:{..._,artifact:{..._.artifact,skipped:[..._.artifact.skipped,...p]},skippedCount:_.skippedCount+p.length,coverageComplete:!1,missing:[`private-mcp-secret-original-bytes`]}}}const C=async(e,t)=>{if(![`codex`,`claude-code`].includes(e.harness)||e.binding?.kind!==`bridge`)throw Error(`Native transcript reader is not configured for this capture`);return(await l.readBoundHarnessSessions({nativeSessionId:e.binding.nativeSessionId,files:e.files.map(t=>({path:t.path,nativeSessionId:b(e.harness,t.path).nativeSessionId,byteLength:t.bytes})),read:async t=>{let n=e.files.find(e=>e.path===t.path);if(!n)throw Error(`Retained native file is absent`);return Buffer.from(n.content,`utf8`)},parse:(t,n)=>m(e.harness,{text:t},{...b(e.harness,n.path),label:n.path},{corruption:`strict`}),signal:t})).sessions};export{S as graphNativeCapture,y as graphNativeRedaction,C as readGraphSessions};
|
package/dist/{graph-operating-evidence-CUiPxcmh.mjs → graph-operating-evidence-CGGxszAi.mjs}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e,d as t,f as n,i as r,l as i,n as a,o,s,t as c}from"./index.mjs";import{readCampaignJson as l,t as u,writeCampaignJson as d}from"./graph-campaign-state-
|
|
2
|
-
`).entries()){let{event:r}=I(n,a.runId,{path:a.ledger.uri,line:t+1});if(r.kind===`cell-settled`)try{let t=await l(
|
|
1
|
+
import{a as e,d as t,f as n,i as r,l as i,n as a,o,s,t as c}from"./index.mjs";import{readCampaignJson as l,t as u,writeCampaignJson as d}from"./graph-campaign-state-YA-eORZN.mjs";import{graphDatasetObject as f,readGraphDataset as p,readGraphDatasetObject as m}from"./graph-dataset-DL_Fx_EH.mjs";import{dirname as h,isAbsolute as g,join as _,resolve as v}from"node:path";import{createHash as y,randomUUID as b}from"node:crypto";import{canonicalCandidateDigest as x}from"@tangle-network/agent-interface";import{homedir as S}from"node:os";import{z as C}from"zod";import{execCli as w}from"@tangle-network/sdk-cli-runner";import{mkdir as T,readFile as E,readdir as D,realpath as O,rename as k,rm as A,writeFile as j}from"node:fs/promises";import{SearchEnvironmentFault as M,officialGepa as N}from"@tangle-network/agent-runtime";import{readSettleRecord as P}from"@tangle-network/agent-runtime/durable";import{acquireSingleRunLock as F,parseSearchLedgerLine as I,replaySearchLedgerText as L}from"@tangle-network/agent-eval/campaign";import{paretoFrontier as R}from"@tangle-network/agent-eval";const z=C.number().int().positive().max(2**53-1),B=C.strictObject({maxEvaluations:z,maxConcurrency:z.max(1,`Retained graph campaigns admit one pending graph`).default(1)}),V=C.discriminatedUnion(`kind`,[C.strictObject({kind:C.literal(`native`)}),C.strictObject({kind:C.literal(`gepa`),recipe:C.discriminatedUnion(`kind`,[C.strictObject({kind:C.literal(`engine`),run:B}),C.strictObject({kind:C.literal(`omni`),explore:C.array(B).min(1),continueWith:B,maxWorkers:z.max(1,`Retained graph campaigns admit one pending graph`).default(1)})]),maxModelRequests:z,maxRequestBytes:z,maxResponseBytes:z,maxCandidateChars:z,maxEvidenceChars:z,resume:C.enum([`never`,`if-compatible`,`required`]).default(`never`),trustLocalState:C.boolean().default(!1)})]);function H(e,t,n=`prompt`){if(n!==`prompt`)throw Error(`Graph learning currently materializes only the prompt surface`);let r=V.parse(e??{kind:`native`});if(r.kind===`native`)return{kind:`native`,identity:x(r)};if(!t)throw Error(`Official GEPA requires caller-owned subscription execution`);if(r.recipe.kind===`omni`&&r.resume!==`never`)throw Error(`Official Omni does not support resumable state; use resume=never`);if(r.resume!==`never`&&!r.trustLocalState)throw Error(`Resumable GEPA requires explicit trust in local pickle state`);z.parse(t.maxOutputTokens),C.number().int().positive().max(2147483647).parse(t.timeoutMs);let i=e=>({engine:`gepa`,...e,engineConfig:{engine:{capture_stdio:!1,max_workers:e.maxConcurrency,parallel:e.maxConcurrency>1,raise_on_exception:!0},reflection:{reflection_minibatch_size:1,skip_perfect_score:!1}}}),a=r.recipe.kind===`engine`?{kind:`engine`,run:i(r.recipe.run)}:{kind:`omni`,explore:r.recipe.explore.map(i),continueWith:i(r.recipe.continueWith),maxWorkers:r.recipe.maxWorkers},o=t.subscriptionOnlyModel,s={maxRequests:r.maxModelRequests,maxRequestBytes:r.maxRequestBytes,maxResponseBytes:r.maxResponseBytes,maxOutputTokensPerRequest:t.maxOutputTokens,requestTimeoutMs:t.timeoutMs,pricing:{inputUsdPerMillion:0,outputUsdPerMillion:0}};return{kind:`official`,identity:x({config:r,model:o.model,callRef:o.callRef,budget:s,objective:t.objective}),method:N({objective:t.objective,recipe:a,optimizer:{...o,budget:s,servedModelPolicy:`exact`},runner:t.runner,timeoutMs:t.timeoutMs,maxCandidateChars:r.maxCandidateChars,maxEvidenceChars:r.maxEvidenceChars,resume:r.resume,trustResumeState:r.trustLocalState,describeScenario:t.describeScenario,describeArtifact:t.describeArtifact})}}const U=`tangle-native-reflection-json-content-v1`,W=`You are a native-agent reflection adapter. The task contains the original ordered role/content messages as JSON. Follow those messages as the reflection request. Return exactly one JSON object {"content":string}; content is the complete text response to that request. Do not add usage, model, or other fields.`;function G(e){let{profile:t,budget:n}=structuredClone({profile:e.profile,budget:e.budget});for(let e of Object.values(n))z.parse(e);let r=t.model?.default;if(!r||!t.harness)throw Error(`Native reflection requires an exact admitted harness and model profile`);let i=`${U}:${x({profile:t,budget:n,reflectionInstruction:W,binding:`params.reflection:whole-json-value`})}`;return{model:r,call:async({request:a,callId:o,signal:s})=>{let c=C.strictObject({model:C.literal(r),messages:C.array(C.strictObject({role:C.enum([`system`,`user`,`assistant`]),content:C.union([C.string(),C.array(C.strictObject({type:C.literal(`text`),text:C.string()}))])})).min(1),maxTokens:C.literal(n.maxTokens).optional(),timeoutMs:z.max(n.deadlineMs).optional()}).parse(a),l=JSON.stringify({graph:U,workspace:`fresh`,params:{reflection:{type:`object`,default:{protocol:U,messages:c.messages}}},nodes:[{id:`proposal`,profile:{...t,connections:void 0,mcp:void 0,hooks:void 0,resources:void 0,subagents:void 0,tools:{websearch:!1,webfetch:!1},prompt:{systemPrompt:W}}}],entry:[{node:`proposal`,task:"${params.reflection}"}],edges:[],budget:{...n,...c.timeoutMs&&{deadlineMs:c.timeoutMs}},check:{node:`proposal`,pointer:`/content`,exists:!0}}),u=await e.run(l,o,s),d=u.settlement,f=d.spentTotal,p=u.sourceDigest===y(`sha256`).update(l).digest(`hex`)&&d.tree.root===u.runId,m=f.tokensKnown!==!1&&f.tokens.tokensKnown!==!1,h={model:r,inputTokens:f.tokens.input,outputTokens:f.tokens.output,usageUnknown:!p||!m,...!p||f.usdKnown===!1?{costUnknown:!0}:{actualCostUsd:f.usd}},g={kind:U,callRef:i,callId:o,runId:u.runId,sourceDigest:u.sourceDigest,graphDigest:u.graphDigest,providerModel:d.providerModel??null};if(!p)return{succeeded:!1,error:`Reflection source or settlement run identity mismatched`,receipt:h,execution:g};if(d.kind!==`winner`||d.providerModel?.status!==`known`||d.providerModel.models.length!==1||d.providerModel.models[0]!==r)return{succeeded:!1,error:`Reflection failed or served model identity is unavailable/mismatched`,receipt:h,execution:g};let _=d.out?.proposal,v=_&&typeof _==`object`&&`json`in _?_.json:_,b=C.strictObject({content:C.string()}).safeParse(v);return b.success?{succeeded:!0,receipt:h,execution:g,response:{content:b.data.content,model:r,servedModel:d.providerModel.models[0],usage:{promptTokens:f.tokens.input,completionTokens:f.tokens.output,totalTokens:f.tokens.input+f.tokens.output,captured:m},costUsd:f.usdKnown===!1?null:f.usd,durationMs:u.durationMs,raw:{runId:u.runId,sourceDigest:u.sourceDigest}}}:{succeeded:!1,error:`Reflection omitted its exact content envelope`,receipt:h,execution:g}},callRef:i}}const K=C.number().int().positive(),q=C.strictObject({quality:C.number().min(0).max(1),notes:C.string()}),J=C.strictObject({version:C.literal(1),optimizer:V.default({kind:`native`}),domain:C.string().min(1),node:C.string().min(1),objective:C.string().min(1),evaluator:C.strictObject({command:C.string().min(1).refine(g,`Use an absolute evaluator executable path`),args:C.array(C.string()),files:C.array(C.string().min(1)).min(1),timeoutMs:K}),calibration:C.array(C.strictObject({request:C.unknown(),quality:C.union([C.literal(0),C.literal(1)])})).min(2),budget:C.strictObject({maxTokens:K,maxIterations:K,deadlineMs:K,maxExpansions:K,proposalTokens:K,proposalIterations:K,proposalDeadlineMs:K}),minimumEffect:C.number().positive().max(1),reps:K,operatingConstraints:C.strictObject({maxMeanTokens:K,maxMeanDurationMs:K,requireKnownOperatingCost:C.boolean().default(!1)})});async function Y(e,t,n,r,i){await i?.();let a=await w({command:e.evaluator.command,args:e.evaluator.args,cwd:t,timeoutMs:e.evaluator.timeoutMs,signal:r,ownProcessGroup:!0},void 0,{stdin:`${JSON.stringify(n)}\n`,maxOutputBytes:1024*1024});if(await i?.(),!a.exit.success)throw new M(`Independent evaluator failed (exit ${a.exit.code??`unknown`})`);return q.parse(JSON.parse(a.stdout??``))}async function X(e,t){let n=await O(e),r=J.parse(await l(n)),i=async()=>x({suite:await l(n),files:await Promise.all([r.evaluator.command,...r.evaluator.files].map(async t=>{let n=await O(v(h(e),t));return{path:n,digest:c(await E(n))}}))}),a=await i(),o=async()=>{if(await i()!==a)throw Error(`Independent evaluator dependencies changed during use`)};if(!r.calibration.some(e=>e.quality===0)||!r.calibration.some(e=>e.quality===1))throw Error(`Evaluator calibration needs both accepted and rejected examples`);let s=[];for(let e of r.calibration){let i=await Y(r,h(n),e.request,t,o);if(i.quality!==e.quality)throw Error(`Independent evaluator failed its accepted/rejected calibration; no inference started`);s.push(i)}return{suite:r,cwd:h(n),identity:a,calibration:s,assertUnchanged:o}}const Z=C.strictObject({evidence:C.string(),sourceDigest:C.string(),scenario:C.string(),unit:C.string(),split:C.enum([`train`,`dev`,`test`]),quality:C.number().min(0).max(1),tokens:C.number().nonnegative().nullable(),durationMs:C.number().nonnegative(),latencyKnown:C.boolean().default(!1),operatingCostUsd:C.null()});async function Q(e,t,n,r,i,a){let o=await E(new URL(a.ledger.uri),`utf8`);if(`sha256:${c(o)}`!==a.ledger.sha256||Buffer.byteLength(o)!==a.ledger.byteLength)throw Error(`Closed search ledger bytes changed`);L(o,a.runId,a.ledger.uri);let s=new Map;for(let[t,n]of o.trim().split(`
|
|
2
|
+
`).entries()){let{event:r}=I(n,a.runId,{path:a.ledger.uri,line:t+1});if(r.kind===`cell-settled`)try{let t=await l(_(e,`attempts`,`${c(r.runId)}.json`));s.set(t.runId,r.wallMs===null||r.queueMs===null?null:r.wallMs+r.queueMs)}catch(e){if(e.code!==`ENOENT`)throw e}}let u=_(e,`judgments`),d=await D(u).catch(e=>{if(e.code!==`ENOENT`)throw e;return[]}),f=await Promise.all(d.filter(e=>e.endsWith(`.json`)).map(async e=>({...Z.parse(await l(_(u,e))),durationMs:s.get(e.slice(0,-5))??null}))),p=e=>e.reduce((e,t)=>e+t,0)/e.length,m=[...new Set(f.map(e=>e.sourceDigest))].sort().map(e=>{let r=f.filter(t=>t.sourceDigest===e&&t.split===`test`),i=r.length===t.length*n.reps&&t.every(e=>r.filter(t=>t.scenario===e.id).length===n.reps),a=[...new Set(t.map(e=>e.unit))],o=e=>p(a.map(t=>p(r.filter(e=>e.unit===t).map(e))));return{sourceDigest:e,complete:i,observations:r.length,independentUnits:a.length,quality:i?o(e=>e.quality):null,meanTokens:i&&r.every(e=>e.tokens!==null)?o(e=>e.tokens):null,meanDurationMs:i&&r.every(e=>e.durationMs!==null&&e.latencyKnown)?o(e=>e.durationMs):null,operatingCostUsd:null}}),h=R(m,[{name:`independent quality`,direction:`maximize`,value:e=>e.quality??NaN},{name:`reported input plus output tokens`,direction:`minimize`,value:e=>e.meanTokens??NaN},{name:`end-to-end graph milliseconds`,direction:`minimize`,value:e=>e.meanDurationMs??NaN}]),g=m.find(e=>e.sourceDigest===r),v=m.find(e=>e.sourceDigest===i),y=[...!v?.complete||v.meanTokens===null||v.meanDurationMs===null?[`baseline operational evidence is incomplete`]:[],...g?.complete?[]:[`candidate final-test cohort is incomplete`],...g?.meanTokens==null?[`candidate token usage is unknown`]:g.meanTokens>n.operatingConstraints.maxMeanTokens?[`candidate exceeds mean token ceiling`]:[],...g?.meanDurationMs==null?[`candidate latency is unknown`]:g.meanDurationMs>n.operatingConstraints.maxMeanDurationMs?[`candidate exceeds mean latency ceiling`]:[],...h.frontier.some(e=>e.sourceDigest===r)?[]:[`candidate is absent from the matched quality/token/latency frontier`],...n.operatingConstraints.requireKnownOperatingCost?[`operating dollar cost is unknown`]:[]];return{admissible:y.length===0,reasons:y,constraints:n.operatingConstraints,reports:m,frontier:h.frontier.map(e=>e.sourceDigest),dollarFrontierEstablished:!1}}async function $(t,i){let s=v(t),{release:f}=F({lockPath:`${await O(s)}.lock`}),g,y;try{let{record:t}=await l(_(s,`result.json`)),f=await m(s,t);if(f.decision!==`promote`)throw Error(`The independent comparison held this candidate`);let v=await O(i);if(v!==f.sourcePath)throw Error(`Activation target differs from the measured source path`);g=F({lockPath:`${v}.lock`}).release;let S=await E(f.candidate,`utf8`);if(c(S)!==f.candidateDigest)throw Error(`Measured candidate bytes changed`);let w=c(await E(v));if(w!==f.baselineDigest&&w!==f.candidateDigest)throw Error(`Activation baseline changed; evaluate the new baseline`);let T=async()=>{if(c(await E(v))!==w)throw Error(`Activation target changed while evidence was checked; the edit was preserved`)},{identity:D,assertUnchanged:A}=await X(f.suite);if(await T(),D!==f.evaluatorIdentity)throw Error(`Independent evaluator changed since measurement`);if(!f.operational.admissible)throw Error(`Measured operational constraints held this candidate`);let M=C.array(C.strictObject({runId:C.uuid(),scenario:C.string(),graphDigest:C.string()})).min(1).parse(f.executionIdentities),N=await p(f.dataset.root,f.dataset.version),P=new Set;for(let t of M){let i=N.cases.find(e=>e.id===t.scenario);if(!i||i.trigger===void 0)throw Error(`Measured execution inputs are unavailable`);let s=await o(t.runId);if(s.sourceDigest!==f.candidateDigest||s.graphDigest!==t.graphDigest||x(n.parse(s.mcpPolicy??{}))!==x(n.parse(f.mcpPolicy??{})))throw Error(`Measured execution configuration changed`);P.add(await e(s));let c=await a(v,{param:r(i.params),dryRun:!0,mcpPolicy:n.parse(f.mcpPolicy??{})},{source:S,...i.trigger&&{trigger:i.trigger}});if(!(`graph`in c)||c.graph.digest!==t.graphDigest)throw Error(`Ordinary execution differs from the measured configuration; express its seat through the maintained graph contract and reevaluate under the intended host policy`)}await A(),await T();let I=await l(_(s,`activation.json`)).catch(e=>{if(e.code!==`ENOENT`)throw e}),L={record:t,baselineDigest:f.baselineDigest,candidateDigest:f.candidateDigest,executionConfigurations:[...P].sort(),target:v,activatedAt:I?.record===t&&w===f.candidateDigest?I.activatedAt:new Date().toISOString()};return await d(_(s,`activation.pending.json`),L),w!==f.candidateDigest&&(y=_(h(v),`.${b()}.graph.yaml`),await j(y,S,{mode:384,flush:!0}),await T(),await k(y,v),y=void 0,await u(h(v))),await d(_(s,`activation.json`),L),L}finally{y&&await A(y,{force:!0}),await g?.(),await f()}}async function ee(n,r,a){let u=v(n),{release:h}=F({lockPath:`${await O(u)}.lock`});try{let n=await l(_(u,`activation.json`)),h=await m(u,n.record),g=await o(r);if(c(await s(g))!==h.candidateDigest)throw Error(`Observation did not execute the activated candidate`);if(!C.array(C.string().regex(/^sha256:[a-f0-9]{64}$/)).min(1).parse(n.executionConfigurations).includes(await e(g)))throw Error(`Observation execution configuration differs from the activated measurement`);if(!a.trim())throw Error(`Observation needs an independent task unit`);if(Date.parse(g.startedAt)<=Date.parse(C.iso.datetime().parse(n.activatedAt)))throw Error(`Observation must have started after this candidate was activated`);let v=await p(h.dataset.root,h.dataset.version),y=x({params:g.params,trigger:g.trigger??null,taskWorkspace:g.taskWorkspace?i(g.taskWorkspace):null});if((await Promise.all((await D(_(u,`attempts`))).filter(e=>e.endsWith(`.json`)).map(e=>l(_(u,`attempts`,e))))).some(e=>e.runId===r)||v.cases.some(e=>e.run===r||e.unit===a||x({params:e.params,trigger:e.trigger??null,taskWorkspace:e.taskWorkspace?i(e.taskWorkspace):null})===y))throw Error(`A learning execution or task is not a subsequent independent production observation`);let b=_(u,`observations`);await T(b,{recursive:!0,mode:448});for(let e of(await D(b)).filter(e=>e.endsWith(`.json`))){let t=await l(_(b,e)),i=await m(u,t.record);if(i.runId===r){if(i.unit!==a||i.taskDigest!==y||i.activation.record!==n.record)throw Error(`The retained observation identity changed`);return{record:t.record,runId:r,verdict:i.verdict}}if(i.unit===a||i.taskDigest===y)throw Error(`An independent observation unit or task cannot be counted twice`)}let{suite:w,cwd:E,identity:O,assertUnchanged:k}=await X(h.suite);if(O!==h.evaluatorIdentity)throw Error(`Observation evaluator changed`);let A=await P(_(S(),`.tangle`,`runs`,r));if(!A)throw Error(`Observation has not settled`);if(A.tree.root!==r)throw Error(`Observation settlement names another native run`);let j={...t(A),runId:r,sourceDigest:g.sourceDigest,graphDigest:g.graphDigest},M=await Y(w,E,{scenario:{params:g.params,trigger:g.trigger??null,unit:a,taskDigest:y},artifact:j},void 0,k),N=await f(u,{activation:n,runId:r,unit:a,taskDigest:y,activatedAt:n.activatedAt,artifact:j,verdict:M});return await d(_(u,`observations`,`${r}.json`),{record:N}),{record:N,runId:r,verdict:M}}finally{h()}}export{G as a,$ as activateGraph,Z as graphOperatingCell,Q as graphOperatingDecision,V as i,X as n,ee as observeGraph,H as r,Y as t};
|