@alma-harness/batch 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,7 +20,8 @@ controls. Only the first durable dispatch:true response permits a provider attem
20
20
  Equal replay never loads input or submits again. The optional awaited onInputFile
21
21
  hook can retain upload references before create; without it no durable orphan-file
22
22
  inventory is claimed. Any ambiguous submission stays unresolved, even after expiry.
23
- No fallback, automatic resubmission, provider cancellation or lease takeover exists.
23
+ No fallback, automatic resubmission or lease takeover exists. Explicit provider
24
+ cancellation is separate from submission ownership and settlement.
24
25
 
25
26
  `collect({scope,key},{signal?})` resolves the stored handle and collects every
26
27
  terminal status, including failed/expired/cancelled. Every observation is journaled
@@ -63,3 +64,17 @@ results and audit before enabling this runner. PostgreSQL store deadlines still
63
64
  apply to read/reconcile. Routines and channel/business delivery require their own
64
65
  persistent claims; this runner never sends real messages or certifies delivery.
65
66
  See [spec](../../docs/specs/099-governed-batch-runner.md).
67
+
68
+ ## Status and cancellation (spec: governed-batch-cancellation-adoption)
69
+
70
+ `status({scope,key},{signal?})` and `cancel({scope,key},{signal?})` resolve the
71
+ original accepted handle under the runner's configuration. They reject missing
72
+ handles, foreign scope/configuration and unsupported cancellation before HTTP.
73
+ They remain available after the submission deadline, bounded by this invocation's
74
+ runTimeoutMs/signal. Neither loads input nor changes durable execution or finance.
75
+
76
+ Cancellation returns `{status:"requested",progress}`: one validated provider
77
+ acknowledgement, not terminal cancellation or a refund. A failed/ambiguous request
78
+ is never retried automatically; an explicit later call is another cancellation
79
+ request. Continue explicit status/collection to account for completed items and
80
+ retain unknown evidence. Closing a connection does not prove dependency termination.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { BatchSubmissionRecord, BatchFinancialSummary, BatchFinancialReceipt, BatchSubmissionStore, BatchUsageStore, BatchAccountingStore, GovernedCostSettlementStore, SingleDispatchBatchClient, BatchSubmissionInput, BatchUsageQuery } from '@alma-harness/execution';
1
+ import * as _alma_harness_core from '@alma-harness/core';
2
2
  import { Scope, ExecutionResultRecord, ExecutionResult, JobOutput, ExecutionResultStore, SpendStore, AuditLog, ProviderId, JobItem } from '@alma-harness/core';
3
+ import { BatchSubmissionRecord, BatchFinancialSummary, BatchFinancialReceipt, BatchSubmissionStore, BatchUsageStore, BatchAccountingStore, GovernedCostSettlementStore, SingleDispatchBatchClient, BatchSubmissionInput, BatchUsageQuery } from '@alma-harness/execution';
3
4
 
4
5
  interface BatchKey {
5
6
  scope: Scope;
@@ -66,6 +67,15 @@ declare function createGovernedBatchRunner(value: GovernedBatchConfig): {
66
67
  repaired: number;
67
68
  pending: number;
68
69
  } | null>;
70
+ status: (value: BatchKey, opts?: {
71
+ signal?: AbortSignal;
72
+ }) => Promise<_alma_harness_core.JobProgress>;
73
+ cancel: (value: BatchKey, opts?: {
74
+ signal?: AbortSignal;
75
+ }) => Promise<{
76
+ status: "requested";
77
+ progress: _alma_harness_core.JobProgress;
78
+ }>;
69
79
  };
70
80
 
71
81
  export { type BatchKey, type GovernedBatchCollection, type GovernedBatchConfig, type GovernedBatchItemView, type GovernedBatchOutput, type GovernedBatchSubmit, type GovernedBatchView, createGovernedBatchRunner };
package/dist/index.js CHANGED
@@ -334,6 +334,25 @@ function createGovernedBatchRunner(value) {
334
334
  }
335
335
  });
336
336
  }
337
+ function operation(value2, action, opts = {}) {
338
+ const k = key(value2);
339
+ return bounded(k, opts.signal, async (signal, check, stage) => {
340
+ check();
341
+ const record = await lookup(k);
342
+ check();
343
+ if (!record?.handle) throw new ExecutionStateError();
344
+ const transport = client(record), call = transport[action];
345
+ if (typeof call !== "function") throw new TypeError("Batch cancellation capability required");
346
+ stage(action);
347
+ const progress = await call.call(transport, structuredClone(record.handle), { signal });
348
+ check();
349
+ return progress;
350
+ });
351
+ }
352
+ const status = (value2, opts) => operation(value2, "status", opts);
353
+ async function cancel(value2, opts) {
354
+ return { status: "requested", progress: await operation(value2, "cancel", opts) };
355
+ }
337
356
  function collect(value2, opts = {}) {
338
357
  const k = key(value2);
339
358
  return bounded(k, opts.signal, async (signal, check, stage) => {
@@ -408,7 +427,7 @@ function createGovernedBatchRunner(value) {
408
427
  return { eof, reconciliationRequired: failed, view: await required(k) };
409
428
  });
410
429
  }
411
- return { submit, collect, read, reconcile };
430
+ return { submit, collect, read, reconcile, status, cancel };
412
431
  }
413
432
  export {
414
433
  createGovernedBatchRunner
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/output.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { AuditSinkError, BudgetExceededError, equalExecution, ExecutionConflictError, ExecutionResultPolicyError, ExecutionStateError, normalizeSpendTotals, normalizeBudgetCaps, settlementIdentifier, settlementScope, type ExecutionResult, type Scope } from '@alma-harness/core';\nimport { batchUsageQuery, batchUsageSettlement, normalizeBatchRecord, normalizeBatchSubmission, normalizeBatchUsage, type BatchFinancialReceipt, type BatchSubmissionRecord, type BatchUsageQuery, type BatchUsageRecord } from '@alma-harness/execution';\nimport { binding, decode, encode, unavailable } from './output';\nimport type { BatchKey, GovernedBatchCollection, GovernedBatchConfig, GovernedBatchItemView, GovernedBatchSubmit, GovernedBatchView } from './types';\nexport type * from './types';\nconst abortError=()=>new DOMException('Batch operation interrupted','AbortError');\nfunction canonical(v:unknown):string {if(v===null||typeof v!=='object')return JSON.stringify(v);if(Array.isArray(v))return `[${v.map(canonical).join(',')}]`;return `{${Object.keys(v).sort().map(k=>JSON.stringify(k)+':'+canonical((v as Record<string,unknown>)[k])).join(',')}}`;}\nexport function createGovernedBatchRunner(value:GovernedBatchConfig) {\n for(const [key,max] of [['runTimeoutMs',300_000],['maxRequestChars',64_000_000],['maxOutputChars',1_000_000],['maxBatchOutputChars',64_000_000]] as const)\n if(!Number.isSafeInteger(value[key])||value[key]<1||value[key]>max)throw new TypeError('Invalid batch limits');\n if(typeof value.onBackgroundError!=='function')throw new TypeError('Missing background observer');\n const c={...value,configRevision:settlementIdentifier(value.configRevision),clients:{...value.clients}};\n const key=(v:BatchKey):BatchKey=>({scope:settlementScope(v.scope),key:settlementIdentifier(v.key)});\n function config(r:BatchSubmissionRecord):void {if(r.input.configRevision!==c.configRevision)throw new ExecutionConflictError();}\n function client(r:BatchSubmissionRecord){config(r);const v=c.clients[r.input.items[0]!.execution.model.provider];if(!v||v.dispatchPolicy!=='single'||typeof v.validate!=='function')throw new TypeError('Single-dispatch batch client required');return v;}\n async function lookup(k:BatchKey){const raw=await c.batches.get(k.scope,k.key);if(!raw)return null;const r=normalizeBatchRecord(raw);if(!equalExecution(r.input.scope,k.scope)||r.input.key!==k.key)throw new ExecutionConflictError();config(r);return r;}\n async function receipts(k:BatchKey){const all:BatchFinancialReceipt[]=[];for(let afterOrdinal=0;afterOrdinal<512;){const page=await c.accounting.list(k.scope,k.key,{afterOrdinal,limit:100});all.push(...page);if(page.length<100)break;afterOrdinal=page.at(-1)!.accountingOrdinal;}return all;}\n async function read(value:BatchKey):Promise<GovernedBatchView|null> {\n const k=key(value),record=await lookup(k);if(!record)return null;\n const financial=await c.accounting.get(k.scope,k.key),rows=await receipts(k),items:GovernedBatchItemView[]=[];\n const incompleteBlock=Object.values(normalizeBudgetCaps(record.input.items[0]!.execution.governance!.caps)).some(cap=>cap.onExceeded==='block')&&rows.length!==record.input.items.length;\n const block=rows.some(r=>r.decisions.some(d=>d.exceeded&&d.onExceeded==='block'));let chars=0;\n for(const member of record.input.items){const e=member.execution,receipt=rows.find(r=>r.itemId===member.id);\n if(receipt&&(receipt.batchId!==record.input.id||receipt.callId!==e.callId||receipt.settlementId!==e.settlementId))throw new ExecutionConflictError();\n let saved;try{saved=await c.results.get(k.scope,e.callId);}catch(err){if(!(err instanceof ExecutionResultPolicyError))throw err;}\n if(saved&&!equalExecution(saved.binding,binding(e)))throw new ExecutionConflictError();\n let result=saved?.state==='available'&&receipt&&saved.result?saved.result:unavailable(),output;\n if(result.outcome==='success'){\n try{if(result.output.format!=='json')throw new TypeError();output=decode(result.output.text,c.maxOutputChars);if(output.stop!==result.stopReason)throw new TypeError();chars+=result.output.text.length;if(chars>c.maxBatchOutputChars)throw new TypeError();}\n catch{result=unavailable();output=undefined;}\n if(incompleteBlock){result=unavailable();output=undefined;}else if(block){result={outcome:'blocked',stopReason:result.stopReason};output=undefined;}\n }\n items.push({id:member.id,state:saved?.state??'unavailable',result,...(receipt?{receipt}:{}),...(output?{output}:{})});\n }\n return {record,financial,items};\n }\n async function required(k:BatchKey){const view=await read(k);if(!view)throw new ExecutionStateError();return view;}\n async function repair(k:BatchKey,row:BatchUsageRecord):Promise<boolean>{\n const request=batchUsageSettlement(row);if(!request)return false;\n await c.settlements.settleGoverned(request);\n const adopted=await c.usage.recordSettlement(k.scope,k.key,row.input.id);if(adopted.status==='pending')return false;\n return (await c.accounting.record(k.scope,k.key,row.input.id)).status!=='pending';\n }\n async function reconcile(value:BatchKey,query?:BatchUsageQuery){const k=key(value),record=await lookup(k);if(!record)return null;\n const rows=await c.usage.list(k.scope,k.key,batchUsageQuery(query));let repaired=0,pending=0;\n for(const row of rows){try{if(await repair(k,row))repaired++;else pending++;}catch{pending++;}}\n return {scanned:rows.length,repaired,pending,...(rows.length?{afterId:rows.at(-1)!.input.id}:{})};\n }\n function bounded<T>(k:BatchKey,external:AbortSignal|undefined,work:(signal:AbortSignal,check:()=>void,stage:(v:string)=>void,deadline:(at:string)=>void)=>Promise<T>):Promise<T>{\n const controller=new AbortController();let stage='lookup',interrupted=false;let deadlineTimer:ReturnType<typeof setTimeout>|undefined;\n const abort=()=>controller.abort();const timer=setTimeout(abort,c.runTimeoutMs);\n const rejected=new Promise<never>((_,reject)=>controller.signal.addEventListener('abort',()=>{interrupted=true;reject(abortError());},{once:true}));\n external?.addEventListener('abort',abort,{once:true});if(external?.aborted)abort();\n const check=()=>{if(controller.signal.aborted)throw abortError();};\n const active=work(controller.signal,check,v=>{stage=v;},at=>{deadlineTimer=setTimeout(abort,Math.max(1,Date.parse(at)-Date.now()));});\n void active.catch(()=>{if(interrupted)try{void Promise.resolve(c.onBackgroundError({...structuredClone(k),stage})).catch(()=>{});}catch{/* Monitoring cannot create an unhandled rejection. */}});\n return Promise.race([active,rejected]).finally(()=>{clearTimeout(timer);clearTimeout(deadlineTimer);external?.removeEventListener('abort',abort);});\n }\n function submit(value:GovernedBatchSubmit):Promise<GovernedBatchView>{\n const input=normalizeBatchSubmission(value.input),k=key(input),load=value.loadItems,rationale=value.rationale;\n if(input.configRevision!==c.configRevision||typeof load!=='function'||typeof rationale!=='string'||rationale.length>1000||input.items.some(i=>! /^[A-Za-z0-9_-]{1,64}$/.test(i.id)))throw new TypeError('Invalid batch submission');\n return bounded(k,value.signal,async(signal,check,stage,armDeadline)=>{\n check();const old=await lookup(k);check();if(old){if(!equalExecution(old.input,input))throw new ExecutionConflictError();return required(k);}\n const active=()=>{check();if(Date.now()>=Date.parse(input.submitDeadlineAt))throw abortError();};active();armDeadline(input.submitDeadlineAt);\n const transport=c.clients[input.items[0]!.execution.model.provider];if(!transport||transport.dispatchPolicy!=='single')throw new TypeError('Single-dispatch batch client required');\n // Each item's original UTC day may differ, so check each relevant projection.\n for(const {execution:e} of input.items){const blocked=Object.entries(e.governance!.caps).filter(([,cap])=>cap.onExceeded==='block');\n const totals=blocked.some(([name])=>name!=='perTurnUsd')?normalizeSpendTotals(await c.spend.peek({scope:k.scope,sessionId:e.sessionId,at:e.occurredAt})):{sessionUsd:0,tenantDayUsd:0};active();\n for(const [name,cap] of blocked){const spent=name==='perTurnUsd'?0:name==='perSessionUsd'?totals.sessionUsd:totals.tenantDayUsd;if(spent>cap.usd)throw new BudgetExceededError(name as 'perTurnUsd',cap.usd,spent);}}\n stage('claim');const claim=await c.batches.claim(input);active();if(claim.status!=='claimed')return required(k);\n try{\n stage('reservation');for(const {execution:e} of input.items){const p=await c.results.prepare(binding(e));active();if(p.state!=='pending'||!equalExecution(p.binding,binding(e)))throw new ExecutionStateError();}\n stage('audit');for(const {execution:e} of input.items){const correlation={scope:k.scope,at:e.occurredAt,sessionId:e.sessionId,operationId:e.operationId,attemptId:e.attemptId,callId:e.callId};\n try{await c.audit.routing({...correlation,...e.intent,model:e.model,rationale,serviceTier:'batch',...(e.controls.reasoning?{reasoning:e.controls.reasoning.effort}:{}),...(e.controls.cache?{cacheTtl:e.controls.cache.ttl}:{})});}catch(err){throw new AuditSinkError('routing',err);}active();\n try{await c.audit.access({...correlation,tool:'governed_batch_input',action:'read',resource:e.inputRevision});}catch(err){throw new AuditSinkError('access',err);}active();}\n stage('input');const items=structuredClone(await load());active();\n if(!Array.isArray(items)||items.length!==input.items.length||JSON.stringify(items).length>c.maxRequestChars)throw new ExecutionConflictError();\n for(let n=0;n<items.length;n++){const item=items[n]!,member=input.items[n]!,r=item.request,e=member.execution;\n const controls={maxTokens:r.maxTokens,...(r.temperature!==undefined?{temperature:r.temperature}:{}),...(r.reasoning!==undefined?{reasoning:r.reasoning}:{}),...(r.cache!==undefined?{cache:r.cache}:{})};\n if(item.id!==member.id||!equalExecution(r.model,e.model)||r.serviceTier!=='batch'||!equalExecution(controls,e.controls))throw new ExecutionConflictError();}\n transport.validate(structuredClone(items));active();\n for(const {execution:e} of input.items){const p=await c.results.get(k.scope,e.callId);active();if(p?.state!=='pending'||!equalExecution(p.binding,binding(e)))throw new ExecutionStateError();}\n stage('dispatch');const dispatched=await c.batches.beginDispatch(claim.fence);active();if(!dispatched.dispatch)return required(k);\n let accepted=false;stage('submission');\n for await(const event of transport.submitEvidence(items,{signal})){\n if(event.type==='accepted'){await c.batches.accept(claim.fence,event.handle);accepted=true;}\n else if(event.type==='input_file'){active();await c.onInputFile?.({...structuredClone(k),fileId:settlementIdentifier(event.fileId)});active();}\n else throw new ExecutionStateError();\n }\n if(!accepted)throw new ExecutionStateError();return required(k);\n }catch(err){try{await c.batches.markUncertain(claim.fence);}catch{/* Original record never grants dispatch again. */}throw err;}\n });\n }\n function collect(value:BatchKey,opts:{signal?:AbortSignal}={}):Promise<GovernedBatchCollection>{\n const k=key(value);\n return bounded(k,opts.signal,async(signal,check,stage)=>{\n check();const record=await lookup(k);check();if(!record)throw new ExecutionStateError();\n if(!record.handle)return {eof:false,reconciliationRequired:true,view:await required(k)};\n const transport=client(record);stage('status');const progress=await transport.status(record.handle,{signal});check();\n if(!['done','failed','expired','cancelled'].includes(progress.status))return {eof:false,reconciliationRequired:false,view:await required(k)};\n const expected=record.input.items.map(i=>i.id),seen=new Set<string>(),outputs=new Map<string,ExecutionResult>();let failed=false,eof=false,chars=0;\n stage('evidence');try{\n for await(const raw of transport.resultsEvidence(record.handle,expected,{signal})){\n // Persist a yielded observation even when cancellation races its arrival.\n if(!expected.includes(raw.id)||seen.has(raw.id))throw new ExecutionConflictError();seen.add(raw.id);\n const normalized=normalizeBatchUsage({id:'observation',itemId:raw.id,handle:record.handle,evidence:raw.evidence,outcome:raw.content.outcome,...(raw.providerRequestId===undefined?{}:{providerRequestId:raw.providerRequestId})});\n normalized.id=createHash('sha256').update(canonical(normalized)).digest('hex');\n const itemId=normalized.itemId;let result:ExecutionResult;try{result=encode(structuredClone(raw.content),c.maxOutputChars);}catch{result={outcome:'invalid',stopReason:null};}\n let accounted=false;try{const row=await c.usage.append(k.scope,k.key,normalized);accounted=await repair(k,row);if(!accounted)failed=true;}catch{failed=true;}\n // Content failure cannot terminate the financial drain.\n try{const size=result.outcome==='success'?result.output.text.length:0;chars+=size;\n if(chars>c.maxBatchOutputChars){failed=true;}else if(accounted)outputs.set(itemId,result);\n }catch{failed=true;}\n check();\n }\n check();eof=seen.size===expected.length;if(!eof)failed=true;\n }catch{failed=true;}\n if(eof){stage('results');for(const member of record.input.items){check();const result=outputs.get(member.id);if(!result)continue;\n try{const p=await c.results.get(k.scope,member.execution.callId);check();if(!p||!equalExecution(p.binding,binding(member.execution)))throw new ExecutionConflictError();\n if(p.state==='pending'||p.state==='available')await c.results.put(k.scope,member.execution.callId,result);\n }catch{failed=true;}\n }}\n check();return {eof,reconciliationRequired:failed,view:await required(k)};\n });\n }\n return {submit,collect,read,reconcile};\n}\n","import type { ExecutionInput, ExecutionResult, ExecutionResultBinding } from '@alma-harness/core';\nimport type { BatchContent } from '@alma-harness/execution';\nimport type { GovernedBatchOutput } from './types';\nexport const unavailable = ():ExecutionResult => ({outcome:'unavailable',stopReason:null});\nexport const binding = (e:ExecutionInput):ExecutionResultBinding => ({scope:e.scope,callId:e.callId,sessionId:e.sessionId,sensitivity:e.intent.sensitivity,retentionMs:e.governance!.resultRetentionMs});\nfunction json(value:unknown,depth=0):void {\n if(depth>100)throw new TypeError('Invalid batch output');\n if(value===null||typeof value==='boolean')return;\n if(typeof value==='string'){if(!value.isWellFormed()||value.includes('\\0'))throw new TypeError('Invalid batch output');return;}\n if(typeof value==='number'&&Number.isFinite(value))return;\n if(!value||typeof value!=='object'||(!Array.isArray(value)&&Object.getPrototypeOf(value)!==Object.prototype))throw new TypeError('Invalid batch output');\n if(Array.isArray(value)&&Object.keys(value).length!==value.length)throw new TypeError('Sparse batch output');\n for(const k of Reflect.ownKeys(value)){if(k==='length'&&Array.isArray(value))continue;if(typeof k!=='string')throw new TypeError('Invalid batch output');json(k,depth+1);json((value as Record<string,unknown>)[k],depth+1);}\n}\nexport function decode(text:string,max:number):GovernedBatchOutput {\n if(text.length>max)throw new TypeError('Oversized batch output');const v=JSON.parse(text);json(v);\n if(!v||Object.keys(v).sort().join()!=='blocks,stop,version'||v.version!=='governed-batch-v1'||!Array.isArray(v.blocks)||!['end_turn','tool_use','pause'].includes(v.stop))throw new TypeError('Invalid batch output');\n const ids=new Map<string,string>(),results=new Set<string>();\n const bad=():never=>{throw new TypeError('Invalid batch block');};\n const string=(v:unknown):v is string=>typeof v==='string'&&v.length>0&&v.length<=200;\n const provider=(v:unknown)=>['anthropic','openai','openrouter'].includes(v as string);\n const closed=(b:Record<string,unknown>,keys:string[])=>{if(Object.keys(b).some(k=>!keys.includes(k)))bad();};\n for(const b of v.blocks){\n if(!b||typeof b!=='object'||Array.isArray(b))bad();\n switch(b.type){\n case 'text':closed(b,['type','text','origin']);if(typeof b.text!=='string'||(b.origin!==undefined&&b.origin!=='harness'))bad();break;\n case 'reasoning':closed(b,['type','provider','text','opaque']);if(!provider(b.provider)||(b.text!==undefined&&typeof b.text!=='string'))bad();break;\n case 'tool_call':case 'provider_tool_call':{\n const remote=b.type==='provider_tool_call';closed(b,remote?['type','id','name','provider','input']:['type','id','name','input']);\n if(!string(b.id)||!string(b.name)||!Object.hasOwn(b,'input')||ids.has(b.id)||(remote&&(!provider(b.provider)||b.name!=='web_search')))bad();\n ids.set(b.id,remote?`provider:${b.provider}:${b.name}`:'local');break;\n }\n case 'tool_result':case 'provider_tool_result':{\n const remote=b.type==='provider_tool_result';closed(b,remote?['type','callId','name','provider','results','error','opaque']:['type','callId','output','isError']);\n if(!string(b.callId)||results.has(b.callId)||ids.get(b.callId)!==(remote?`provider:${b.provider}:${b.name}`:'local'))bad();\n results.add(b.callId);\n if(remote){if(!provider(b.provider)||b.name!=='web_search'||!Array.isArray(b.results)||(b.error!==undefined&&typeof b.error!=='string'))bad();\n for(const r of b.results){if(!r||typeof r!=='object'||Array.isArray(r))bad();closed(r,['url','title','pageAge']);if(typeof r.url!=='string'||(r.title!==undefined&&typeof r.title!=='string')||(r.pageAge!==undefined&&typeof r.pageAge!=='string'))bad();}\n }else if(!Object.hasOwn(b,'output')||(b.isError!==undefined&&typeof b.isError!=='boolean'))bad();break;\n }\n default:bad();\n }\n }\n return v;\n}\nexport function encode(content:BatchContent,max:number):ExecutionResult {\n if(content.outcome!=='succeeded')return {outcome:content.outcome==='unusable'?'invalid':content.outcome==='cancelled'?'cancelled':'unavailable',stopReason:null};\n const {stop,blocks}=content.output;\n if(stop==='refusal')return {outcome:'refusal',stopReason:stop};\n if(stop==='max_tokens'||stop==='context_window_exceeded')return {outcome:'truncated',stopReason:stop};\n try{const value={version:'governed-batch-v1',blocks,stop};json(value);const text=JSON.stringify(value);decode(text,max);return {outcome:'success',stopReason:stop,output:{format:'json',text}};}\n catch{return {outcome:'invalid',stopReason:['end_turn','tool_use','pause'].includes(stop)?stop:null};}\n}\n"],"mappings":"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","names":["v","key","value"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/output.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { AuditSinkError, BudgetExceededError, equalExecution, ExecutionConflictError, ExecutionResultPolicyError, ExecutionStateError, normalizeSpendTotals, normalizeBudgetCaps, settlementIdentifier, settlementScope, type ExecutionResult, type Scope } from '@alma-harness/core';\nimport { batchUsageQuery, batchUsageSettlement, normalizeBatchRecord, normalizeBatchSubmission, normalizeBatchUsage, type BatchFinancialReceipt, type BatchSubmissionRecord, type BatchUsageQuery, type BatchUsageRecord } from '@alma-harness/execution';\nimport { binding, decode, encode, unavailable } from './output';\nimport type { BatchKey, GovernedBatchCollection, GovernedBatchConfig, GovernedBatchItemView, GovernedBatchSubmit, GovernedBatchView } from './types';\nexport type * from './types';\nconst abortError=()=>new DOMException('Batch operation interrupted','AbortError');\nfunction canonical(v:unknown):string {if(v===null||typeof v!=='object')return JSON.stringify(v);if(Array.isArray(v))return `[${v.map(canonical).join(',')}]`;return `{${Object.keys(v).sort().map(k=>JSON.stringify(k)+':'+canonical((v as Record<string,unknown>)[k])).join(',')}}`;}\nexport function createGovernedBatchRunner(value:GovernedBatchConfig) {\n for(const [key,max] of [['runTimeoutMs',300_000],['maxRequestChars',64_000_000],['maxOutputChars',1_000_000],['maxBatchOutputChars',64_000_000]] as const)\n if(!Number.isSafeInteger(value[key])||value[key]<1||value[key]>max)throw new TypeError('Invalid batch limits');\n if(typeof value.onBackgroundError!=='function')throw new TypeError('Missing background observer');\n const c={...value,configRevision:settlementIdentifier(value.configRevision),clients:{...value.clients}};\n const key=(v:BatchKey):BatchKey=>({scope:settlementScope(v.scope),key:settlementIdentifier(v.key)});\n function config(r:BatchSubmissionRecord):void {if(r.input.configRevision!==c.configRevision)throw new ExecutionConflictError();}\n function client(r:BatchSubmissionRecord){config(r);const v=c.clients[r.input.items[0]!.execution.model.provider];if(!v||v.dispatchPolicy!=='single'||typeof v.validate!=='function')throw new TypeError('Single-dispatch batch client required');return v;}\n async function lookup(k:BatchKey){const raw=await c.batches.get(k.scope,k.key);if(!raw)return null;const r=normalizeBatchRecord(raw);if(!equalExecution(r.input.scope,k.scope)||r.input.key!==k.key)throw new ExecutionConflictError();config(r);return r;}\n async function receipts(k:BatchKey){const all:BatchFinancialReceipt[]=[];for(let afterOrdinal=0;afterOrdinal<512;){const page=await c.accounting.list(k.scope,k.key,{afterOrdinal,limit:100});all.push(...page);if(page.length<100)break;afterOrdinal=page.at(-1)!.accountingOrdinal;}return all;}\n async function read(value:BatchKey):Promise<GovernedBatchView|null> {\n const k=key(value),record=await lookup(k);if(!record)return null;\n const financial=await c.accounting.get(k.scope,k.key),rows=await receipts(k),items:GovernedBatchItemView[]=[];\n const incompleteBlock=Object.values(normalizeBudgetCaps(record.input.items[0]!.execution.governance!.caps)).some(cap=>cap.onExceeded==='block')&&rows.length!==record.input.items.length;\n const block=rows.some(r=>r.decisions.some(d=>d.exceeded&&d.onExceeded==='block'));let chars=0;\n for(const member of record.input.items){const e=member.execution,receipt=rows.find(r=>r.itemId===member.id);\n if(receipt&&(receipt.batchId!==record.input.id||receipt.callId!==e.callId||receipt.settlementId!==e.settlementId))throw new ExecutionConflictError();\n let saved;try{saved=await c.results.get(k.scope,e.callId);}catch(err){if(!(err instanceof ExecutionResultPolicyError))throw err;}\n if(saved&&!equalExecution(saved.binding,binding(e)))throw new ExecutionConflictError();\n let result=saved?.state==='available'&&receipt&&saved.result?saved.result:unavailable(),output;\n if(result.outcome==='success'){\n try{if(result.output.format!=='json')throw new TypeError();output=decode(result.output.text,c.maxOutputChars);if(output.stop!==result.stopReason)throw new TypeError();chars+=result.output.text.length;if(chars>c.maxBatchOutputChars)throw new TypeError();}\n catch{result=unavailable();output=undefined;}\n if(incompleteBlock){result=unavailable();output=undefined;}else if(block){result={outcome:'blocked',stopReason:result.stopReason};output=undefined;}\n }\n items.push({id:member.id,state:saved?.state??'unavailable',result,...(receipt?{receipt}:{}),...(output?{output}:{})});\n }\n return {record,financial,items};\n }\n async function required(k:BatchKey){const view=await read(k);if(!view)throw new ExecutionStateError();return view;}\n async function repair(k:BatchKey,row:BatchUsageRecord):Promise<boolean>{\n const request=batchUsageSettlement(row);if(!request)return false;\n await c.settlements.settleGoverned(request);\n const adopted=await c.usage.recordSettlement(k.scope,k.key,row.input.id);if(adopted.status==='pending')return false;\n return (await c.accounting.record(k.scope,k.key,row.input.id)).status!=='pending';\n }\n async function reconcile(value:BatchKey,query?:BatchUsageQuery){const k=key(value),record=await lookup(k);if(!record)return null;\n const rows=await c.usage.list(k.scope,k.key,batchUsageQuery(query));let repaired=0,pending=0;\n for(const row of rows){try{if(await repair(k,row))repaired++;else pending++;}catch{pending++;}}\n return {scanned:rows.length,repaired,pending,...(rows.length?{afterId:rows.at(-1)!.input.id}:{})};\n }\n function bounded<T>(k:BatchKey,external:AbortSignal|undefined,work:(signal:AbortSignal,check:()=>void,stage:(v:string)=>void,deadline:(at:string)=>void)=>Promise<T>):Promise<T>{\n const controller=new AbortController();let stage='lookup',interrupted=false;let deadlineTimer:ReturnType<typeof setTimeout>|undefined;\n const abort=()=>controller.abort();const timer=setTimeout(abort,c.runTimeoutMs);\n const rejected=new Promise<never>((_,reject)=>controller.signal.addEventListener('abort',()=>{interrupted=true;reject(abortError());},{once:true}));\n external?.addEventListener('abort',abort,{once:true});if(external?.aborted)abort();\n const check=()=>{if(controller.signal.aborted)throw abortError();};\n const active=work(controller.signal,check,v=>{stage=v;},at=>{deadlineTimer=setTimeout(abort,Math.max(1,Date.parse(at)-Date.now()));});\n void active.catch(()=>{if(interrupted)try{void Promise.resolve(c.onBackgroundError({...structuredClone(k),stage})).catch(()=>{});}catch{/* Monitoring cannot create an unhandled rejection. */}});\n return Promise.race([active,rejected]).finally(()=>{clearTimeout(timer);clearTimeout(deadlineTimer);external?.removeEventListener('abort',abort);});\n }\n function submit(value:GovernedBatchSubmit):Promise<GovernedBatchView>{\n const input=normalizeBatchSubmission(value.input),k=key(input),load=value.loadItems,rationale=value.rationale;\n if(input.configRevision!==c.configRevision||typeof load!=='function'||typeof rationale!=='string'||rationale.length>1000||input.items.some(i=>! /^[A-Za-z0-9_-]{1,64}$/.test(i.id)))throw new TypeError('Invalid batch submission');\n return bounded(k,value.signal,async(signal,check,stage,armDeadline)=>{\n check();const old=await lookup(k);check();if(old){if(!equalExecution(old.input,input))throw new ExecutionConflictError();return required(k);}\n const active=()=>{check();if(Date.now()>=Date.parse(input.submitDeadlineAt))throw abortError();};active();armDeadline(input.submitDeadlineAt);\n const transport=c.clients[input.items[0]!.execution.model.provider];if(!transport||transport.dispatchPolicy!=='single')throw new TypeError('Single-dispatch batch client required');\n // Each item's original UTC day may differ, so check each relevant projection.\n for(const {execution:e} of input.items){const blocked=Object.entries(e.governance!.caps).filter(([,cap])=>cap.onExceeded==='block');\n const totals=blocked.some(([name])=>name!=='perTurnUsd')?normalizeSpendTotals(await c.spend.peek({scope:k.scope,sessionId:e.sessionId,at:e.occurredAt})):{sessionUsd:0,tenantDayUsd:0};active();\n for(const [name,cap] of blocked){const spent=name==='perTurnUsd'?0:name==='perSessionUsd'?totals.sessionUsd:totals.tenantDayUsd;if(spent>cap.usd)throw new BudgetExceededError(name as 'perTurnUsd',cap.usd,spent);}}\n stage('claim');const claim=await c.batches.claim(input);active();if(claim.status!=='claimed')return required(k);\n try{\n stage('reservation');for(const {execution:e} of input.items){const p=await c.results.prepare(binding(e));active();if(p.state!=='pending'||!equalExecution(p.binding,binding(e)))throw new ExecutionStateError();}\n stage('audit');for(const {execution:e} of input.items){const correlation={scope:k.scope,at:e.occurredAt,sessionId:e.sessionId,operationId:e.operationId,attemptId:e.attemptId,callId:e.callId};\n try{await c.audit.routing({...correlation,...e.intent,model:e.model,rationale,serviceTier:'batch',...(e.controls.reasoning?{reasoning:e.controls.reasoning.effort}:{}),...(e.controls.cache?{cacheTtl:e.controls.cache.ttl}:{})});}catch(err){throw new AuditSinkError('routing',err);}active();\n try{await c.audit.access({...correlation,tool:'governed_batch_input',action:'read',resource:e.inputRevision});}catch(err){throw new AuditSinkError('access',err);}active();}\n stage('input');const items=structuredClone(await load());active();\n if(!Array.isArray(items)||items.length!==input.items.length||JSON.stringify(items).length>c.maxRequestChars)throw new ExecutionConflictError();\n for(let n=0;n<items.length;n++){const item=items[n]!,member=input.items[n]!,r=item.request,e=member.execution;\n const controls={maxTokens:r.maxTokens,...(r.temperature!==undefined?{temperature:r.temperature}:{}),...(r.reasoning!==undefined?{reasoning:r.reasoning}:{}),...(r.cache!==undefined?{cache:r.cache}:{})};\n if(item.id!==member.id||!equalExecution(r.model,e.model)||r.serviceTier!=='batch'||!equalExecution(controls,e.controls))throw new ExecutionConflictError();}\n transport.validate(structuredClone(items));active();\n for(const {execution:e} of input.items){const p=await c.results.get(k.scope,e.callId);active();if(p?.state!=='pending'||!equalExecution(p.binding,binding(e)))throw new ExecutionStateError();}\n stage('dispatch');const dispatched=await c.batches.beginDispatch(claim.fence);active();if(!dispatched.dispatch)return required(k);\n let accepted=false;stage('submission');\n for await(const event of transport.submitEvidence(items,{signal})){\n if(event.type==='accepted'){await c.batches.accept(claim.fence,event.handle);accepted=true;}\n else if(event.type==='input_file'){active();await c.onInputFile?.({...structuredClone(k),fileId:settlementIdentifier(event.fileId)});active();}\n else throw new ExecutionStateError();\n }\n if(!accepted)throw new ExecutionStateError();return required(k);\n }catch(err){try{await c.batches.markUncertain(claim.fence);}catch{/* Original record never grants dispatch again. */}throw err;}\n });\n }\n function operation(value:BatchKey,action:'status'|'cancel',opts:{signal?:AbortSignal}={}) {\n const k=key(value);\n return bounded(k,opts.signal,async(signal,check,stage)=>{\n check();const record=await lookup(k);check();if(!record?.handle)throw new ExecutionStateError();\n const transport=client(record),call=transport[action];\n if(typeof call!=='function')throw new TypeError('Batch cancellation capability required');\n stage(action);const progress=await call.call(transport,structuredClone(record.handle),{signal});check();return progress;\n });\n }\n const status=(value:BatchKey,opts?:{signal?:AbortSignal})=>operation(value,'status',opts);\n async function cancel(value:BatchKey,opts?:{signal?:AbortSignal}) {return {status:'requested' as const,progress:await operation(value,'cancel',opts)};}\n function collect(value:BatchKey,opts:{signal?:AbortSignal}={}):Promise<GovernedBatchCollection>{\n const k=key(value);\n return bounded(k,opts.signal,async(signal,check,stage)=>{\n check();const record=await lookup(k);check();if(!record)throw new ExecutionStateError();\n if(!record.handle)return {eof:false,reconciliationRequired:true,view:await required(k)};\n const transport=client(record);stage('status');const progress=await transport.status(record.handle,{signal});check();\n if(!['done','failed','expired','cancelled'].includes(progress.status))return {eof:false,reconciliationRequired:false,view:await required(k)};\n const expected=record.input.items.map(i=>i.id),seen=new Set<string>(),outputs=new Map<string,ExecutionResult>();let failed=false,eof=false,chars=0;\n stage('evidence');try{\n for await(const raw of transport.resultsEvidence(record.handle,expected,{signal})){\n // Persist a yielded observation even when cancellation races its arrival.\n if(!expected.includes(raw.id)||seen.has(raw.id))throw new ExecutionConflictError();seen.add(raw.id);\n const normalized=normalizeBatchUsage({id:'observation',itemId:raw.id,handle:record.handle,evidence:raw.evidence,outcome:raw.content.outcome,...(raw.providerRequestId===undefined?{}:{providerRequestId:raw.providerRequestId})});\n normalized.id=createHash('sha256').update(canonical(normalized)).digest('hex');\n const itemId=normalized.itemId;let result:ExecutionResult;try{result=encode(structuredClone(raw.content),c.maxOutputChars);}catch{result={outcome:'invalid',stopReason:null};}\n let accounted=false;try{const row=await c.usage.append(k.scope,k.key,normalized);accounted=await repair(k,row);if(!accounted)failed=true;}catch{failed=true;}\n // Content failure cannot terminate the financial drain.\n try{const size=result.outcome==='success'?result.output.text.length:0;chars+=size;\n if(chars>c.maxBatchOutputChars){failed=true;}else if(accounted)outputs.set(itemId,result);\n }catch{failed=true;}\n check();\n }\n check();eof=seen.size===expected.length;if(!eof)failed=true;\n }catch{failed=true;}\n if(eof){stage('results');for(const member of record.input.items){check();const result=outputs.get(member.id);if(!result)continue;\n try{const p=await c.results.get(k.scope,member.execution.callId);check();if(!p||!equalExecution(p.binding,binding(member.execution)))throw new ExecutionConflictError();\n if(p.state==='pending'||p.state==='available')await c.results.put(k.scope,member.execution.callId,result);\n }catch{failed=true;}\n }}\n check();return {eof,reconciliationRequired:failed,view:await required(k)};\n });\n }\n return {submit,collect,read,reconcile,status,cancel};\n}\n","import type { ExecutionInput, ExecutionResult, ExecutionResultBinding } from '@alma-harness/core';\nimport type { BatchContent } from '@alma-harness/execution';\nimport type { GovernedBatchOutput } from './types';\nexport const unavailable = ():ExecutionResult => ({outcome:'unavailable',stopReason:null});\nexport const binding = (e:ExecutionInput):ExecutionResultBinding => ({scope:e.scope,callId:e.callId,sessionId:e.sessionId,sensitivity:e.intent.sensitivity,retentionMs:e.governance!.resultRetentionMs});\nfunction json(value:unknown,depth=0):void {\n if(depth>100)throw new TypeError('Invalid batch output');\n if(value===null||typeof value==='boolean')return;\n if(typeof value==='string'){if(!value.isWellFormed()||value.includes('\\0'))throw new TypeError('Invalid batch output');return;}\n if(typeof value==='number'&&Number.isFinite(value))return;\n if(!value||typeof value!=='object'||(!Array.isArray(value)&&Object.getPrototypeOf(value)!==Object.prototype))throw new TypeError('Invalid batch output');\n if(Array.isArray(value)&&Object.keys(value).length!==value.length)throw new TypeError('Sparse batch output');\n for(const k of Reflect.ownKeys(value)){if(k==='length'&&Array.isArray(value))continue;if(typeof k!=='string')throw new TypeError('Invalid batch output');json(k,depth+1);json((value as Record<string,unknown>)[k],depth+1);}\n}\nexport function decode(text:string,max:number):GovernedBatchOutput {\n if(text.length>max)throw new TypeError('Oversized batch output');const v=JSON.parse(text);json(v);\n if(!v||Object.keys(v).sort().join()!=='blocks,stop,version'||v.version!=='governed-batch-v1'||!Array.isArray(v.blocks)||!['end_turn','tool_use','pause'].includes(v.stop))throw new TypeError('Invalid batch output');\n const ids=new Map<string,string>(),results=new Set<string>();\n const bad=():never=>{throw new TypeError('Invalid batch block');};\n const string=(v:unknown):v is string=>typeof v==='string'&&v.length>0&&v.length<=200;\n const provider=(v:unknown)=>['anthropic','openai','openrouter'].includes(v as string);\n const closed=(b:Record<string,unknown>,keys:string[])=>{if(Object.keys(b).some(k=>!keys.includes(k)))bad();};\n for(const b of v.blocks){\n if(!b||typeof b!=='object'||Array.isArray(b))bad();\n switch(b.type){\n case 'text':closed(b,['type','text','origin']);if(typeof b.text!=='string'||(b.origin!==undefined&&b.origin!=='harness'))bad();break;\n case 'reasoning':closed(b,['type','provider','text','opaque']);if(!provider(b.provider)||(b.text!==undefined&&typeof b.text!=='string'))bad();break;\n case 'tool_call':case 'provider_tool_call':{\n const remote=b.type==='provider_tool_call';closed(b,remote?['type','id','name','provider','input']:['type','id','name','input']);\n if(!string(b.id)||!string(b.name)||!Object.hasOwn(b,'input')||ids.has(b.id)||(remote&&(!provider(b.provider)||b.name!=='web_search')))bad();\n ids.set(b.id,remote?`provider:${b.provider}:${b.name}`:'local');break;\n }\n case 'tool_result':case 'provider_tool_result':{\n const remote=b.type==='provider_tool_result';closed(b,remote?['type','callId','name','provider','results','error','opaque']:['type','callId','output','isError']);\n if(!string(b.callId)||results.has(b.callId)||ids.get(b.callId)!==(remote?`provider:${b.provider}:${b.name}`:'local'))bad();\n results.add(b.callId);\n if(remote){if(!provider(b.provider)||b.name!=='web_search'||!Array.isArray(b.results)||(b.error!==undefined&&typeof b.error!=='string'))bad();\n for(const r of b.results){if(!r||typeof r!=='object'||Array.isArray(r))bad();closed(r,['url','title','pageAge']);if(typeof r.url!=='string'||(r.title!==undefined&&typeof r.title!=='string')||(r.pageAge!==undefined&&typeof r.pageAge!=='string'))bad();}\n }else if(!Object.hasOwn(b,'output')||(b.isError!==undefined&&typeof b.isError!=='boolean'))bad();break;\n }\n default:bad();\n }\n }\n return v;\n}\nexport function encode(content:BatchContent,max:number):ExecutionResult {\n if(content.outcome!=='succeeded')return {outcome:content.outcome==='unusable'?'invalid':content.outcome==='cancelled'?'cancelled':'unavailable',stopReason:null};\n const {stop,blocks}=content.output;\n if(stop==='refusal')return {outcome:'refusal',stopReason:stop};\n if(stop==='max_tokens'||stop==='context_window_exceeded')return {outcome:'truncated',stopReason:stop};\n try{const value={version:'governed-batch-v1',blocks,stop};json(value);const text=JSON.stringify(value);decode(text,max);return {outcome:'success',stopReason:stop,output:{format:'json',text}};}\n catch{return {outcome:'invalid',stopReason:['end_turn','tool_use','pause'].includes(stop)?stop:null};}\n}\n"],"mappings":"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","names":["v","key","value"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alma-harness/batch",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "Governed single-dispatch batch execution for Alma.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -19,8 +19,8 @@
19
19
  "directory": "packages/batch"
20
20
  },
21
21
  "peerDependencies": {
22
- "@alma-harness/core": "^0.6.1",
23
- "@alma-harness/execution": "^0.6.1"
22
+ "@alma-harness/core": "^0.7.0",
23
+ "@alma-harness/execution": "^0.7.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^24.1.0",
@@ -28,11 +28,11 @@
28
28
  "vitest": "^3.2.4",
29
29
  "pg": "^8.16.3",
30
30
  "@types/pg": "^8.15.4",
31
- "@alma-harness/core": "^0.6.1",
32
- "@alma-harness/memory": "^0.6.1",
33
- "@alma-harness/execution": "^0.6.1",
34
- "@alma-harness/postgres-execution": "^0.6.1",
35
- "@alma-harness/postgres": "^0.6.1"
31
+ "@alma-harness/core": "^0.7.0",
32
+ "@alma-harness/execution": "^0.7.0",
33
+ "@alma-harness/memory": "^0.7.0",
34
+ "@alma-harness/postgres": "^0.7.0",
35
+ "@alma-harness/postgres-execution": "^0.7.0"
36
36
  },
37
37
  "files": [
38
38
  "dist"