stable-harness 0.0.133 → 0.0.134
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/node_modules/@stable-harness/adapter-deepagents/dist/src/adapter.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/package.json +2 -2
- package/node_modules/@stable-harness/adapter-langgraph/package.json +2 -2
- package/node_modules/@stable-harness/core/dist/recovery/execution-contract.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/raw-args.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/tool-call.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/recovery/adapter-result.d.ts +4 -2
- package/node_modules/@stable-harness/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/recovery/execution-contract-runtime.d.ts +18 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/execution-contract-runtime.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/focused-text-recovery.d.ts +18 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/focused-text-recovery.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/non-focused-recovery.d.ts +13 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/non-focused-recovery.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/recovery-policy.d.ts +3 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/recovery-policy.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime.js +1 -1
- package/node_modules/@stable-harness/core/package.json +3 -3
- package/node_modules/@stable-harness/governance/package.json +1 -1
- package/node_modules/@stable-harness/memory/package.json +1 -1
- package/node_modules/@stable-harness/protocols/dist/src/openai-payload.js +1 -1
- package/node_modules/@stable-harness/protocols/package.json +2 -2
- package/node_modules/@stable-harness/tool-gateway/dist/src/argument-guard.js +1 -1
- package/node_modules/@stable-harness/tool-gateway/package.json +1 -1
- package/node_modules/@stable-harness/workspace-yaml/package.json +2 -2
- package/package.json +9 -9
- package/packages/adapter-deepagents/dist/src/adapter.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/builtin-tool-policy.js +1 -1
- package/packages/adapter-deepagents/package.json +2 -2
- package/packages/adapter-langgraph/package.json +2 -2
- package/packages/cli/package.json +8 -8
- package/packages/core/dist/recovery/execution-contract.js +1 -1
- package/packages/core/dist/recovery/raw-args.js +1 -1
- package/packages/core/dist/recovery/tool-call.js +1 -1
- package/packages/core/dist/runtime/recovery/adapter-result.d.ts +4 -2
- package/packages/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/packages/core/dist/runtime/recovery/execution-contract-runtime.d.ts +18 -0
- package/packages/core/dist/runtime/recovery/execution-contract-runtime.js +1 -0
- package/packages/core/dist/runtime/recovery/focused-text-recovery.d.ts +18 -0
- package/packages/core/dist/runtime/recovery/focused-text-recovery.js +1 -0
- package/packages/core/dist/runtime/recovery/non-focused-recovery.d.ts +13 -0
- package/packages/core/dist/runtime/recovery/non-focused-recovery.js +1 -0
- package/packages/core/dist/runtime/recovery/recovery-policy.d.ts +3 -0
- package/packages/core/dist/runtime/recovery/recovery-policy.js +1 -0
- package/packages/core/dist/runtime.js +1 -1
- package/packages/core/package.json +3 -3
- package/packages/evaluation/package.json +2 -2
- package/packages/governance/package.json +1 -1
- package/packages/memory/package.json +1 -1
- package/packages/protocols/dist/src/openai-payload.js +1 -1
- package/packages/protocols/package.json +2 -2
- package/packages/tool-gateway/dist/src/argument-guard.js +1 -1
- package/packages/tool-gateway/package.json +1 -1
- package/packages/workspace-yaml/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomUUID as e}from"node:crypto";export function toRuntimeRequest(t,n,s,
|
|
1
|
+
import{randomUUID as e}from"node:crypto";export function toRuntimeRequest(t,n,s,r={}){const o=function messagesToInput(e){if(!Array.isArray(e)||0===e.length)throw new Error("messages must be a non-empty array");return e.map(e=>`${e.role??"user"}: ${contentToText(e.content)}`).join("\n\n")}(t.messages),a=function readRequestId(e){const t=e?.requestId??e?.request_id;return"string"==typeof t&&t.trim()?t:void 0}(t.metadata)??`chatcmpl-${e()}`,i=r.sessionId??function readSessionId(e){const t=e?.sessionId??e?.session_id??e?.conversationId??e?.conversation_id;return"string"==typeof t&&t.trim()?t:void 0}(t.metadata),c=normalizeOpenAiMessages(t.messages),u=i?function prependSessionMessages(e,t,n){if(function hasClientHistory(e){return e.some(e=>"assistant"===e.role)||e.filter(e=>"user"===e.role).length>1}(n))return n;const s=e.listRequests({sessionId:t,state:"completed"}).flatMap(t=>function inspectSessionTurn(e,t){const n=e.inspectRequest(t),s=n?.output?.trim(),r=function lastUserMessage(e){return normalizeOpenAiMessages(Array.isArray(e)?e:void 0).filter(e=>"user"===e.role&&e.content.trim()).at(-1)}(n?.metadata?.openaiMessages)?.content;return r&&s?[{role:"user",content:r},{role:"assistant",content:s}]:[]}(e,t.requestId)).slice(-12);return s.length>0?[...s,...n]:n}(n,i,c):c;return{input:o,requestId:a,agentId:resolveAgentId(t.model,n,s),...i?{sessionId:i}:{},metadata:{protocol:"openai-compatible",openaiStream:!0===t.stream,openaiMessages:u,openaiSessionHistory:u.length>c.length,model:t.model,user:t.user,clientMetadata:t.metadata}}}export function resolveAgentId(e,t,n){if(!e)return;const s=n.modelAgentMap?.[e];return s||(t.inspect().agents.includes(e)?e:void 0)}export function createModelsResponse(e,t){const n=Object.keys(t.modelAgentMap??{});return{object:"list",data:[...new Set([...e.inspect().agents,...n])].sort().map(e=>({id:e,object:"model",created:0,owned_by:"stable-harness"}))}}export function createCapabilitiesResponse(){return{object:"stable_harness.capabilities",endpoints:["/v1/models","/v1/chat/completions","/v1/capabilities","/metrics","/v1/stable-harness/runs/{request_id}/trace"],streaming:!0,toolProgressEvents:!0,runtimeTrace:!0}}export function toChatCompletion(e,t){return{id:t.requestId,object:"chat.completion",created:Math.floor(Date.now()/1e3),model:e.model??t.agentId,choices:[{index:0,message:{role:"assistant",content:t.output},finish_reason:"stop"}],usage:estimateUsage(e.messages,t.output),metadata:{sessionId:t.sessionId,agentId:t.agentId,state:t.state}}}export function toRuntimeErrorResponse(e){const t="cancelled"===e.state;return{error:{message:e.output||(t?"Runtime request was cancelled.":"Runtime request failed."),type:t?"request_cancelled":"server_error",code:t?"runtime_cancelled":"runtime_failed",param:null},metadata:{requestId:e.requestId,sessionId:e.sessionId,agentId:e.agentId,state:e.state}}}function normalizeOpenAiMessages(e){return Array.isArray(e)?e.map(e=>({role:e.role??"user",content:contentToText(e.content)})):[]}function contentToText(e){if("string"==typeof e)return e;if(!Array.isArray(e))throw new Error("message content must be a string or content part array");return e.map(contentPartToText).join("\n")}function contentPartToText(e){if("object"!=typeof e||null===e)throw new Error("message content parts must be objects");const t=e;if("text"===t.type&&"string"==typeof t.text)return t.text;const n=t.image_url;if("image_url"===t.type&&"string"==typeof n?.url)return`[image:${n.url}]`;throw new Error("unsupported_content_type")}function estimateUsage(e,t){const n=estimateTokens(Array.isArray(e)?e.map(e=>contentToText(e.content)).join("\n"):""),s=estimateTokens(t);return{prompt_tokens:n,completion_tokens:s,total_tokens:n+s}}function estimateTokens(e){return e.trim()?Math.ceil(1.3*e.trim().split(/\s+/u).length):0}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/protocols",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.134",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"main": "dist/src/index.js",
|
|
12
12
|
"types": "dist/src/index.d.ts",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@stable-harness/core": "0.0.
|
|
14
|
+
"@stable-harness/core": "0.0.134"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BetterToolValidationError as o,betterTools as t,defaultRepair as a,reliableToolCalls as r,repairCallSelection as e}from"@easynet/better-call";import{isRecord as
|
|
1
|
+
import{BetterToolValidationError as o,betterTools as t,defaultRepair as a,reliableToolCalls as r,repairCallSelection as e}from"@easynet/better-call";import{isRecord as i,validateWithZodSchema as l}from"./schema-validation.js";export class ToolArgumentValidationError extends Error{toolId;issues;constructor(o,t){super(`Tool argument validation failed for ${o}: ${t.map(o=>`${o.path} ${o.message}`).join("; ")}`),this.toolId=o,this.issues=t,this.name="ToolArgumentValidationError"}}export function createDefaultArgumentGuard(t={}){return{async validate(a){const r=a.tool.validateArgs?await a.tool.validateArgs({args:a.args,context:a.context}):{action:"allow",args:a.args};if("reject"===r.action)return r;const e=await async function validateWithBetterCall(t,a,r){const e=l(t.schema,a);if(void 0===t.schema)return e??{action:"allow",args:a};if("allow"===e?.action&&function serializedLength(o){try{return JSON.stringify(o).length}catch{return 0}}(e.args)>1e4)return e;const i=await async function invokeBetterCallValidation(t,a,r){try{return{action:"allow",args:await createBetterCallValidationTool(t,r).invoke(a)}}catch(t){if(t instanceof o)return{action:"reject",reason:"BetterCall validation failed",issues:t.issues.map(toToolArgumentIssue)};throw t}}(t,"allow"===e?.action?e.args:a,r);return e?"allow"===e.action?i:"reject"===i.action?e:l(t.schema,i.args)||i:i}(a.tool,r.args,t.betterCall);return"reject"===e.action?e:"repair"===r.action?{...r,args:e.args}:e}}}export function assertToolArguments(o,t,a,r){return Promise.resolve(r.validate({tool:o,args:t,context:a})).then(t=>{if("reject"===t.action)throw new ToolArgumentValidationError(o.id,t.issues);return t.args})}export function prepareBetterCallTools(o,a){const r=t(o.map(toBetterCallTool),toBetterToolsOptions(a));return o.map((o,t)=>({...o,validationTool:r[t]}))}export async function repairBetterCallToolSelection(o){if(0===o.tools.length)return;const t=function resolveRepair(o){return o?.repair??(o?.repairModel?a(o.repairModel):void 0)}(o.options);if(t){const a=await r({userInput:JSON.stringify({tool:o.toolId,args:o.args}),tools:o.tools.map(toToolDefinition),calls:[{tool:o.toolId,args:toToolCallArgs(o.args)}],repair:t,repairPolicy:o.options?.repairPolicy??{allowCoercion:!0,allowClamp:!0,allowArrayStringSplit:!0,allowModelRepair:!0},mode:o.options?.mode??"repair"}),e=a.ok?a.calls.find(t=>o.tools.some(o=>o.id===t.tool)):void 0;return e?{toolId:e.tool,args:e.args}:void 0}const i=await e({userInput:JSON.stringify({tool:o.toolId,args:o.args}),call:{name:o.toolId,args:toToolCallArgs(o.args)},candidates:o.tools.map(toCallCandidate),repair:o.options?.repair,repairModel:o.options?.repairModel,repairPolicy:o.options?.repairPolicy??{allowCoercion:!0,allowClamp:!0,allowArrayStringSplit:!0,allowModelRepair:!0},mode:o.options?.mode??"repair"});return i.ok?{toolId:i.candidateId,args:i.args}:void 0}function createBetterCallValidationTool(o,a){return o.validationTool??t([toBetterCallTool(o)],toBetterToolsOptions(a))[0]}function toBetterCallTool(o){return{name:o.id,description:o.description,schema:o.schema,invoke:o=>o}}function toToolDefinition(o){return{name:o.id,description:o.description,schema:o.schema}}function toCallCandidate(o){return{id:o.id,description:o.description,schema:o.schema}}function toToolArgumentIssue(o){return{path:o.path.replace(/^\$\.calls\[\d+\]\.args/u,"$"),message:o.message,expected:void 0===o.expected?void 0:String(o.expected),actual:o.actual}}function toBetterToolsOptions(o){const t=Boolean(o?.repair||o?.repairModel);return{mode:o?.mode??(t?"repair":"guard"),repair:o?.repair,repairModel:o?.repairModel,repairPolicy:o?.repairPolicy??(t?{allowCoercion:!0,allowClamp:!0,allowArrayStringSplit:!0,allowModelRepair:!0}:{allowCoercion:!1,allowClamp:!1,allowArrayStringSplit:!1,allowModelRepair:!1})}}function toToolCallArgs(o){return i(o)?o:{input:o}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/workspace-yaml",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.134",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
".": "./dist/index.js"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@stable-harness/core": "0.0.
|
|
15
|
+
"@stable-harness/core": "0.0.134"
|
|
16
16
|
}
|
|
17
17
|
}
|