stable-harness 0.0.44 → 0.0.45
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/stream-events.d.ts +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/dist/src/types.d.ts +1 -1
- package/node_modules/@stable-harness/adapter-deepagents/package.json +3 -3
- package/package.json +4 -4
- package/packages/adapter-deepagents/dist/src/adapter.js +1 -1
- package/packages/adapter-deepagents/dist/src/internal/stream-events.d.ts +1 -1
- package/packages/adapter-deepagents/dist/src/internal/stream-events.js +1 -1
- package/packages/adapter-deepagents/dist/src/types.d.ts +1 -1
- package/packages/adapter-deepagents/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
import{realpathSync as e}from"node:fs";import t from"node:path";import{buildRuntimeSystemPrompt as r}from"@stable-harness/core";import{createBuiltinToolPolicyMiddleware as n,createObserverMiddleware as o}from"./internal/builtin-tool-policy.js";import{resolveFilesystemPermissions as s}from"./internal/builtin/permissions.js";import{createToolRepeatState as a}from"@stable-harness/core";import{buildGatewayTools as i,stringifyDeepAgentResult as p}from"./internal/gateway-tools.js";import{resolveDeepAgentsNativeMemories as c}from"./memory.js";import{buildDeepAgentRequest as d}from"./internal/messages.js";import{createRawToolCallParserMiddleware as l}from"./internal/raw-tool-call-parser.js";import{createBackendModel as u}from"./model-providers.js";import{createDeepAgentsRetryMiddleware as m}from"./retry-policy.js";import{streamDeepAgentResult as g}from"./internal/stream-events.js";export function createDeepAgentsAdapter(e={}){return{name:"deepagents",canRun:e=>"deepagents"===e.backend,async run(t){if(t.emit({type:"runtime.adapter.event",requestId:t.requestId,sessionId:t.sessionId,agentId:t.agent.id,event:{adapter:"deepagents",phase:"agent.handoff",modelRef:t.agent.modelRef,tools:t.agent.tools,subagents:t.agent.subagents}}),e.runner)return e.runner(t);const r=e.createDeepAgent?void 0:await async function loadDeepAgentsModule(){try{return await async function importOptionalPackage(e){return import(e)}("deepagents")}catch(e){throw new Error(`DeepAgents package is required for the default adapter path: ${function formatError(e){return e instanceof Error?e.message:String(e)}(e)}`)}}(),n=e.createDeepAgent??function readCreateDeepAgent(e){const t=e?.createDeepAgent;if("function"==typeof t)return t;throw new Error("DeepAgents package does not export createDeepAgent.")}(r),o=n(function buildDeepAgentParams(e,t,r){const n={...readDeepAgentsConfig(t),...readDeepAgentsConfig(e.agent.config.deepagents)},o=resolveDeepAgentsSkills(e,e.agent),a=n.permissions??s(e,e.agent),p=requestScopedRepeatState(e,e.agent.id);return pruneUndefined({name:e.agent.id,model:n.model??resolveAgentModel(e,e.agent),systemPrompt:buildSystemPrompt(e,e.agent),backend:n.backend??resolveDeepAgentsBackend(e,r,o),checkpointer:n.checkpointer,store:n.store,middleware:mergeMiddleware(e,e.agent,n.middleware,p),responseFormat:n.responseFormat,contextSchema:n.contextSchema,interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:a,tools:i(e,e.agent.id,e.agent.tools,resolveAgentRepairModel(e,e.agent,n),p),subagents:e.agent.subagents.map(t=>{const r=e.workspace.agents.get(t),n=readDeepAgentsConfig(r?.config.deepagents),o=n.permissions??s(e,r),a=scopedInput(e,r),p=requestScopedRepeatState(e,t);return pruneUndefined({name:t,description:r?.description??readString(r?.config.description)??r?.id,systemPrompt:buildSystemPrompt(e,r),model:n.model??(r?resolveAgentModel(e,r):void 0),middleware:mergeMiddleware(a,r,n.middleware,p),interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:o,responseFormat:n.responseFormat,tools:i(e,t,r?.tools??[],resolveAgentRepairModel(a,r,n),p),memory:resolveDeepAgentsMemory(e,r),skills:resolveDeepAgentsSkills(e,r)})}),memory:resolveDeepAgentsMemory(e,e.agent),skills:o})}(t,e.config,r)),a=d(t),c=function buildDeepAgentInvokeConfig(e){return pruneUndefined({recursionLimit:readNumber(readDeepAgentsConfig(e.config.deepagents).recursionLimit)??readNumber(e.config.recursionLimit)})}(t.agent);if(!0===t.request.metadata?.openaiStream&&o.streamEvents)
|
|
1
|
+
import{realpathSync as e}from"node:fs";import t from"node:path";import{buildRuntimeSystemPrompt as r}from"@stable-harness/core";import{createBuiltinToolPolicyMiddleware as n,createObserverMiddleware as o}from"./internal/builtin-tool-policy.js";import{resolveFilesystemPermissions as s}from"./internal/builtin/permissions.js";import{createToolRepeatState as a}from"@stable-harness/core";import{buildGatewayTools as i,stringifyDeepAgentResult as p}from"./internal/gateway-tools.js";import{resolveDeepAgentsNativeMemories as c}from"./memory.js";import{buildDeepAgentRequest as d}from"./internal/messages.js";import{createRawToolCallParserMiddleware as l}from"./internal/raw-tool-call-parser.js";import{createBackendModel as u}from"./model-providers.js";import{createDeepAgentsRetryMiddleware as m}from"./retry-policy.js";import{streamDeepAgentResult as g}from"./internal/stream-events.js";export function createDeepAgentsAdapter(e={}){return{name:"deepagents",canRun:e=>"deepagents"===e.backend,async run(t){if(t.emit({type:"runtime.adapter.event",requestId:t.requestId,sessionId:t.sessionId,agentId:t.agent.id,event:{adapter:"deepagents",phase:"agent.handoff",modelRef:t.agent.modelRef,tools:t.agent.tools,subagents:t.agent.subagents}}),e.runner)return e.runner(t);const r=e.createDeepAgent?void 0:await async function loadDeepAgentsModule(){try{return await async function importOptionalPackage(e){return import(e)}("deepagents")}catch(e){throw new Error(`DeepAgents package is required for the default adapter path: ${function formatError(e){return e instanceof Error?e.message:String(e)}(e)}`)}}(),n=e.createDeepAgent??function readCreateDeepAgent(e){const t=e?.createDeepAgent;if("function"==typeof t)return t;throw new Error("DeepAgents package does not export createDeepAgent.")}(r),o=n(function buildDeepAgentParams(e,t,r){const n={...readDeepAgentsConfig(t),...readDeepAgentsConfig(e.agent.config.deepagents)},o=resolveDeepAgentsSkills(e,e.agent),a=n.permissions??s(e,e.agent),p=requestScopedRepeatState(e,e.agent.id);return pruneUndefined({name:e.agent.id,model:n.model??resolveAgentModel(e,e.agent),systemPrompt:buildSystemPrompt(e,e.agent),backend:n.backend??resolveDeepAgentsBackend(e,r,o),checkpointer:n.checkpointer,store:n.store,middleware:mergeMiddleware(e,e.agent,n.middleware,p),responseFormat:n.responseFormat,contextSchema:n.contextSchema,interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:a,tools:i(e,e.agent.id,e.agent.tools,resolveAgentRepairModel(e,e.agent,n),p),subagents:e.agent.subagents.map(t=>{const r=e.workspace.agents.get(t),n=readDeepAgentsConfig(r?.config.deepagents),o=n.permissions??s(e,r),a=scopedInput(e,r),p=requestScopedRepeatState(e,t);return pruneUndefined({name:t,description:r?.description??readString(r?.config.description)??r?.id,systemPrompt:buildSystemPrompt(e,r),model:n.model??(r?resolveAgentModel(e,r):void 0),middleware:mergeMiddleware(a,r,n.middleware,p),interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:o,responseFormat:n.responseFormat,tools:i(e,t,r?.tools??[],resolveAgentRepairModel(a,r,n),p),memory:resolveDeepAgentsMemory(e,r),skills:resolveDeepAgentsSkills(e,r)})}),memory:resolveDeepAgentsMemory(e,e.agent),skills:o})}(t,e.config,r)),a=d(t),c=function buildDeepAgentInvokeConfig(e){return pruneUndefined({recursionLimit:readNumber(readDeepAgentsConfig(e.config.deepagents).recursionLimit)??readNumber(e.config.recursionLimit)})}(t.agent);if(!0===t.request.metadata?.openaiStream&&o.streamEvents){const e=await o.streamEvents(a,{version:"v3",...c});return g(t,e,p)}const l=await o.invoke(a,c);return p(l)}}}function buildSystemPrompt(e,t){const n=t?.systemPrompt??readString(t?.config.systemPrompt);return r({workspace:e.workspace,request:e.request,agent:t},n)}function resolveDeepAgentsMemory(e,t){const r=readDeepAgentsStringArray(t?.config,"memory");if(r)return r;const n=[...readAgentMemorySources(e.workspace.root,t),...c(e.workspace).map(e=>`/memories/${e.id}.md`)],o=[...new Set(n)];return o.length>0?o:void 0}function readAgentMemorySources(e,t){return(t?.memory??[]).flatMap(t=>"string"==typeof t&&t.trim()?[backendMemorySourcePath(e,t.trim())]:isRecord(t)&&"string"==typeof t.path&&t.path.trim()?[backendMemorySourcePath(e,t.path.trim())]:[])}function backendMemorySourcePath(e,r){if(r.startsWith("/"))return r;if(t.isAbsolute(r)){const n=t.relative(e,r);return n&&!n.startsWith("..")?`/${n.split(t.sep).join("/")}`:canonicalPath(r)}const n=r.split(t.sep).join("/");return n.startsWith("/")?n:`/${n}`}function resolveDeepAgentsSkills(e,r){const n=readDeepAgentsStringArray(r?.config,"skills");if(n)return n;const o=[...new Set((r?.skills??[]).map(t=>e.workspace.skills.get(t)?.path).filter(e=>"string"==typeof e&&e.trim().length>0).map(r=>function backendSkillSourcePath(e,r){const n=t.dirname(t.dirname(r)),o=t.relative(e,n);return!o||o.startsWith("..")||t.isAbsolute(o)?""===o?"/":canonicalPath(n):`/${o.split(t.sep).join("/")}`}(e.workspace.root,r)))];return o.length>0?o:void 0}function resolveDeepAgentsBackend(e,t,r){if(t?.FilesystemBackend&&r&&0!==r.length)return()=>new t.FilesystemBackend({rootDir:e.workspace.root})}function mergeMiddleware(e,t,r,s=a(e.workspace.runtime.toolGateway)){const i=Array.isArray(r)?r:[],p=scopedInput(e,t),c=new Set;return[o(p,{observedToolIds:c,repeatState:s}),n(p,{repeatState:s}),...m(e.workspace.runtime.retry),...i,l(p)]}function requestScopedRepeatState(e,t){const r=`deepagents.repeat.${t}`,n=e.requestState?.get(r);if(n)return n;const o=a(e.workspace.runtime.toolGateway);return e.requestState&&o&&e.requestState.set(r,o),o}function scopedInput(e,t){return t?{...e,agent:t}:e}function resolveAgentModel(e,t){const r=t.modelRef?e.workspace.models.get(t.modelRef):void 0;return r?u(r):void 0}function resolveAgentRepairModel(e,t,r){const n=r.model;if(isRepairModel(n))return n;if(!t)return;const o=resolveAgentModel(e,t);return isRepairModel(o)?o:void 0}function readDeepAgentsConfig(e){return isRecord(e)?e:{}}function readDeepAgentsStringArray(e,t){const r=isRecord(e)?e:{},n=readDeepAgentsConfig(r.deepagents),o="memory"===t?["memory","memorySources"]:["skills","skillSources"];for(const e of o){const t=readStringArray(n[e]);if(t)return t}return readStringArray(r[t])}function pruneUndefined(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}function readString(e){return"string"==typeof e&&e.trim()?e:void 0}function readNumber(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function readBoolean(e){return"boolean"==typeof e?e:void 0}function readStringArray(e){return Array.isArray(e)?e.filter(e=>"string"==typeof e):void 0}function canonicalPath(t){try{return e.native(t)}catch{return t}}function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function isRepairModel(e){return"object"==typeof e&&null!==e&&"invoke"in e&&"function"==typeof e.invoke}
|
package/node_modules/@stable-harness/adapter-deepagents/dist/src/internal/stream-events.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { RuntimeAdapter } from "@stable-harness/core";
|
|
2
|
-
export declare function streamDeepAgentResult(input: Parameters<RuntimeAdapter["run"]>[0],
|
|
2
|
+
export declare function streamDeepAgentResult(input: Parameters<RuntimeAdapter["run"]>[0], run: unknown, stringify: (value: unknown) => string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function streamDeepAgentResult(t,e,
|
|
1
|
+
export async function streamDeepAgentResult(e,t,a){const n=function readRunProjection(e){const t=readRecord(e);if(!t)return;const a={messages:readAsyncIterable(t.messages),toolCalls:readAsyncIterable(t.toolCalls??t.tool_calls),subagents:readAsyncIterable(t.subagents),output:t.output};return a.messages||a.toolCalls||a.subagents||a.output?a:void 0}(t);if(!n)throw new Error("DeepAgents streamEvents(version: v3) did not expose v3 projections.");let r,s="";return await Promise.all([consumeMessages(e,n.messages,e.agent.id,e=>{s+=e}),consumeToolCalls(e,n.toolCalls,e.agent.id),consumeSubagents(e,n.subagents),readFinalOutput(n.output,a).then(e=>{r=e})]),r??s}async function consumeMessages(e,t,a,n){if(t)for await(const r of t){const t=await readMessageText(r);t&&(emitAdapterEvent(e,{phase:"agent.message",sourceAgentId:a,text:t}),a===e.agent.id&&(n?.(t),emitAdapterEvent(e,{phase:"agent.output.delta",text:t})))}}async function consumeToolCalls(e,t,a){if(!t)return;let n=0;for await(const r of t){n+=1;const t=readRecord(r)??{},s=readString(t.name)??readString(t.toolId)??`tool-${n}`,o=readString(t.callId)??readString(t.id)??`${a}:${s}:${n}`;emitAdapterEvent(e,{phase:"agent.tool.start",sourceAgentId:a,toolId:s,toolCallId:o,args:await resolveValue(t.input??t.args)}),await emitToolResult(e,t,a,s,o)}}async function consumeSubagents(e,t){if(!t)return;const a=[];let n=0;for await(const r of t)n+=1,a.push(consumeSubagent(e,r,n));await Promise.all(a)}async function consumeSubagent(e,t,a){const n=readRecord(t)??{},r=readString(n.name)??`subagent-${a}`,s=readString(n.callId)??readString(n.id)??`${r}:${a}`;emitAdapterEvent(e,{phase:"agent.subagent.start",subagentId:r,callId:s,taskInput:await resolveValue(n.taskInput),namespace:n.namespace});try{await Promise.all([consumeMessages(e,readAsyncIterable(n.messages),r),consumeToolCalls(e,readAsyncIterable(n.toolCalls??n.tool_calls),r),consumeSubagents(e,readAsyncIterable(n.subagents)),resolveValue(n.output)]),emitAdapterEvent(e,{phase:"agent.subagent.result",subagentId:r,callId:s,status:"completed"})}catch(t){emitAdapterEvent(e,{phase:"agent.subagent.result",subagentId:r,callId:s,status:"failed",error:formatError(t)})}}async function emitToolResult(e,t,a,n,r){try{emitAdapterEvent(e,{phase:"agent.tool.result",sourceAgentId:a,toolId:n,toolCallId:r,status:await resolveValue(t.status),output:await resolveValue(t.output),error:await resolveValue(t.error)})}catch(t){emitAdapterEvent(e,{phase:"agent.tool.result",sourceAgentId:a,toolId:n,toolCallId:r,status:"failed",error:formatError(t)})}}async function readFinalOutput(e,t){const a=await resolveValue(e);if(void 0!==a)return t(a)||void 0}async function readMessageText(e){const t=readRecord(e);if(!t)return"string"==typeof e&&e?e:void 0;const a=await resolveValue(t.text);return"string"==typeof a&&a?a:function readContentText(e){return"string"==typeof e?e||void 0:Array.isArray(e)&&e.map(e=>readString(readRecord(e)?.text)??("string"==typeof e?e:"")).join("")||void 0}(await resolveValue(t.output??t.content))}function emitAdapterEvent(e,t){e.emit({type:"runtime.adapter.event",requestId:e.requestId,sessionId:e.sessionId,agentId:e.agent.id,event:{adapter:"deepagents",...t}})}async function resolveValue(e){return await e}function readAsyncIterable(e){return function isAsyncIterable(e){return isRecord(e)&&"function"==typeof e[Symbol.asyncIterator]}(e)?e:void 0}function readRecord(e){return isRecord(e)?e:void 0}function readString(e){return"string"==typeof e&&e.trim()?e:void 0}function formatError(e){return e instanceof Error?e.message:String(e)}function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuntimeAdapterContext, RuntimeAdapterResult } from "@stable-harness/core";
|
|
2
2
|
export type DeepAgentFactory = (params?: Record<string, unknown>) => {
|
|
3
3
|
invoke(input: Record<string, unknown>, options?: Record<string, unknown>): Promise<unknown>;
|
|
4
|
-
streamEvents?(input: Record<string, unknown>, options?: Record<string, unknown>):
|
|
4
|
+
streamEvents?(input: Record<string, unknown>, options?: Record<string, unknown>): unknown;
|
|
5
5
|
};
|
|
6
6
|
export type DeepAgentsModule = {
|
|
7
7
|
createDeepAgent?: unknown;
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"types": "dist/src/index.d.ts",
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@easynet/better-call": "^0.1.60",
|
|
14
|
-
"@langchain/core": "^1.1.
|
|
14
|
+
"@langchain/core": "^1.1.46",
|
|
15
15
|
"@langchain/ollama": "^1.2.7",
|
|
16
16
|
"@langchain/openai": "^1.4.5",
|
|
17
17
|
"@stable-harness/core": "0.0.1",
|
|
18
|
-
"deepagents": "^1.
|
|
19
|
-
"langchain": "^1.
|
|
18
|
+
"deepagents": "^1.10.1",
|
|
19
|
+
"langchain": "^1.4.0"
|
|
20
20
|
},
|
|
21
21
|
"peerDependenciesMeta": {
|
|
22
22
|
"deepagents": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stable-harness",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Stable application runtime and operator control plane for agent workspaces.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
],
|
|
80
80
|
"dependencies": {
|
|
81
81
|
"@easynet/better-call": "^0.1.60",
|
|
82
|
-
"@langchain/core": "^1.1.
|
|
82
|
+
"@langchain/core": "^1.1.46",
|
|
83
83
|
"@langchain/langgraph": "^1.3.0",
|
|
84
84
|
"@langchain/langgraph-api": "^1.2.1",
|
|
85
85
|
"@langchain/ollama": "^1.2.7",
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
"@stable-harness/protocols": "0.0.1",
|
|
93
93
|
"@stable-harness/tool-gateway": "0.0.1",
|
|
94
94
|
"@stable-harness/workspace-yaml": "0.0.1",
|
|
95
|
-
"deepagents": "^1.
|
|
96
|
-
"langchain": "^1.
|
|
95
|
+
"deepagents": "^1.10.1",
|
|
96
|
+
"langchain": "^1.4.0",
|
|
97
97
|
"yaml": "^2.8.2",
|
|
98
98
|
"zod": "^4.1.13"
|
|
99
99
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{realpathSync as e}from"node:fs";import t from"node:path";import{buildRuntimeSystemPrompt as r}from"@stable-harness/core";import{createBuiltinToolPolicyMiddleware as n,createObserverMiddleware as o}from"./internal/builtin-tool-policy.js";import{resolveFilesystemPermissions as s}from"./internal/builtin/permissions.js";import{createToolRepeatState as a}from"@stable-harness/core";import{buildGatewayTools as i,stringifyDeepAgentResult as p}from"./internal/gateway-tools.js";import{resolveDeepAgentsNativeMemories as c}from"./memory.js";import{buildDeepAgentRequest as d}from"./internal/messages.js";import{createRawToolCallParserMiddleware as l}from"./internal/raw-tool-call-parser.js";import{createBackendModel as u}from"./model-providers.js";import{createDeepAgentsRetryMiddleware as m}from"./retry-policy.js";import{streamDeepAgentResult as g}from"./internal/stream-events.js";export function createDeepAgentsAdapter(e={}){return{name:"deepagents",canRun:e=>"deepagents"===e.backend,async run(t){if(t.emit({type:"runtime.adapter.event",requestId:t.requestId,sessionId:t.sessionId,agentId:t.agent.id,event:{adapter:"deepagents",phase:"agent.handoff",modelRef:t.agent.modelRef,tools:t.agent.tools,subagents:t.agent.subagents}}),e.runner)return e.runner(t);const r=e.createDeepAgent?void 0:await async function loadDeepAgentsModule(){try{return await async function importOptionalPackage(e){return import(e)}("deepagents")}catch(e){throw new Error(`DeepAgents package is required for the default adapter path: ${function formatError(e){return e instanceof Error?e.message:String(e)}(e)}`)}}(),n=e.createDeepAgent??function readCreateDeepAgent(e){const t=e?.createDeepAgent;if("function"==typeof t)return t;throw new Error("DeepAgents package does not export createDeepAgent.")}(r),o=n(function buildDeepAgentParams(e,t,r){const n={...readDeepAgentsConfig(t),...readDeepAgentsConfig(e.agent.config.deepagents)},o=resolveDeepAgentsSkills(e,e.agent),a=n.permissions??s(e,e.agent),p=requestScopedRepeatState(e,e.agent.id);return pruneUndefined({name:e.agent.id,model:n.model??resolveAgentModel(e,e.agent),systemPrompt:buildSystemPrompt(e,e.agent),backend:n.backend??resolveDeepAgentsBackend(e,r,o),checkpointer:n.checkpointer,store:n.store,middleware:mergeMiddleware(e,e.agent,n.middleware,p),responseFormat:n.responseFormat,contextSchema:n.contextSchema,interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:a,tools:i(e,e.agent.id,e.agent.tools,resolveAgentRepairModel(e,e.agent,n),p),subagents:e.agent.subagents.map(t=>{const r=e.workspace.agents.get(t),n=readDeepAgentsConfig(r?.config.deepagents),o=n.permissions??s(e,r),a=scopedInput(e,r),p=requestScopedRepeatState(e,t);return pruneUndefined({name:t,description:r?.description??readString(r?.config.description)??r?.id,systemPrompt:buildSystemPrompt(e,r),model:n.model??(r?resolveAgentModel(e,r):void 0),middleware:mergeMiddleware(a,r,n.middleware,p),interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:o,responseFormat:n.responseFormat,tools:i(e,t,r?.tools??[],resolveAgentRepairModel(a,r,n),p),memory:resolveDeepAgentsMemory(e,r),skills:resolveDeepAgentsSkills(e,r)})}),memory:resolveDeepAgentsMemory(e,e.agent),skills:o})}(t,e.config,r)),a=d(t),c=function buildDeepAgentInvokeConfig(e){return pruneUndefined({recursionLimit:readNumber(readDeepAgentsConfig(e.config.deepagents).recursionLimit)??readNumber(e.config.recursionLimit)})}(t.agent);if(!0===t.request.metadata?.openaiStream&&o.streamEvents)
|
|
1
|
+
import{realpathSync as e}from"node:fs";import t from"node:path";import{buildRuntimeSystemPrompt as r}from"@stable-harness/core";import{createBuiltinToolPolicyMiddleware as n,createObserverMiddleware as o}from"./internal/builtin-tool-policy.js";import{resolveFilesystemPermissions as s}from"./internal/builtin/permissions.js";import{createToolRepeatState as a}from"@stable-harness/core";import{buildGatewayTools as i,stringifyDeepAgentResult as p}from"./internal/gateway-tools.js";import{resolveDeepAgentsNativeMemories as c}from"./memory.js";import{buildDeepAgentRequest as d}from"./internal/messages.js";import{createRawToolCallParserMiddleware as l}from"./internal/raw-tool-call-parser.js";import{createBackendModel as u}from"./model-providers.js";import{createDeepAgentsRetryMiddleware as m}from"./retry-policy.js";import{streamDeepAgentResult as g}from"./internal/stream-events.js";export function createDeepAgentsAdapter(e={}){return{name:"deepagents",canRun:e=>"deepagents"===e.backend,async run(t){if(t.emit({type:"runtime.adapter.event",requestId:t.requestId,sessionId:t.sessionId,agentId:t.agent.id,event:{adapter:"deepagents",phase:"agent.handoff",modelRef:t.agent.modelRef,tools:t.agent.tools,subagents:t.agent.subagents}}),e.runner)return e.runner(t);const r=e.createDeepAgent?void 0:await async function loadDeepAgentsModule(){try{return await async function importOptionalPackage(e){return import(e)}("deepagents")}catch(e){throw new Error(`DeepAgents package is required for the default adapter path: ${function formatError(e){return e instanceof Error?e.message:String(e)}(e)}`)}}(),n=e.createDeepAgent??function readCreateDeepAgent(e){const t=e?.createDeepAgent;if("function"==typeof t)return t;throw new Error("DeepAgents package does not export createDeepAgent.")}(r),o=n(function buildDeepAgentParams(e,t,r){const n={...readDeepAgentsConfig(t),...readDeepAgentsConfig(e.agent.config.deepagents)},o=resolveDeepAgentsSkills(e,e.agent),a=n.permissions??s(e,e.agent),p=requestScopedRepeatState(e,e.agent.id);return pruneUndefined({name:e.agent.id,model:n.model??resolveAgentModel(e,e.agent),systemPrompt:buildSystemPrompt(e,e.agent),backend:n.backend??resolveDeepAgentsBackend(e,r,o),checkpointer:n.checkpointer,store:n.store,middleware:mergeMiddleware(e,e.agent,n.middleware,p),responseFormat:n.responseFormat,contextSchema:n.contextSchema,interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:a,tools:i(e,e.agent.id,e.agent.tools,resolveAgentRepairModel(e,e.agent,n),p),subagents:e.agent.subagents.map(t=>{const r=e.workspace.agents.get(t),n=readDeepAgentsConfig(r?.config.deepagents),o=n.permissions??s(e,r),a=scopedInput(e,r),p=requestScopedRepeatState(e,t);return pruneUndefined({name:t,description:r?.description??readString(r?.config.description)??r?.id,systemPrompt:buildSystemPrompt(e,r),model:n.model??(r?resolveAgentModel(e,r):void 0),middleware:mergeMiddleware(a,r,n.middleware,p),interruptOn:n.interruptOn,generalPurposeAgent:readBoolean(n.generalPurposeAgent),taskDescription:readString(n.taskDescription),permissions:o,responseFormat:n.responseFormat,tools:i(e,t,r?.tools??[],resolveAgentRepairModel(a,r,n),p),memory:resolveDeepAgentsMemory(e,r),skills:resolveDeepAgentsSkills(e,r)})}),memory:resolveDeepAgentsMemory(e,e.agent),skills:o})}(t,e.config,r)),a=d(t),c=function buildDeepAgentInvokeConfig(e){return pruneUndefined({recursionLimit:readNumber(readDeepAgentsConfig(e.config.deepagents).recursionLimit)??readNumber(e.config.recursionLimit)})}(t.agent);if(!0===t.request.metadata?.openaiStream&&o.streamEvents){const e=await o.streamEvents(a,{version:"v3",...c});return g(t,e,p)}const l=await o.invoke(a,c);return p(l)}}}function buildSystemPrompt(e,t){const n=t?.systemPrompt??readString(t?.config.systemPrompt);return r({workspace:e.workspace,request:e.request,agent:t},n)}function resolveDeepAgentsMemory(e,t){const r=readDeepAgentsStringArray(t?.config,"memory");if(r)return r;const n=[...readAgentMemorySources(e.workspace.root,t),...c(e.workspace).map(e=>`/memories/${e.id}.md`)],o=[...new Set(n)];return o.length>0?o:void 0}function readAgentMemorySources(e,t){return(t?.memory??[]).flatMap(t=>"string"==typeof t&&t.trim()?[backendMemorySourcePath(e,t.trim())]:isRecord(t)&&"string"==typeof t.path&&t.path.trim()?[backendMemorySourcePath(e,t.path.trim())]:[])}function backendMemorySourcePath(e,r){if(r.startsWith("/"))return r;if(t.isAbsolute(r)){const n=t.relative(e,r);return n&&!n.startsWith("..")?`/${n.split(t.sep).join("/")}`:canonicalPath(r)}const n=r.split(t.sep).join("/");return n.startsWith("/")?n:`/${n}`}function resolveDeepAgentsSkills(e,r){const n=readDeepAgentsStringArray(r?.config,"skills");if(n)return n;const o=[...new Set((r?.skills??[]).map(t=>e.workspace.skills.get(t)?.path).filter(e=>"string"==typeof e&&e.trim().length>0).map(r=>function backendSkillSourcePath(e,r){const n=t.dirname(t.dirname(r)),o=t.relative(e,n);return!o||o.startsWith("..")||t.isAbsolute(o)?""===o?"/":canonicalPath(n):`/${o.split(t.sep).join("/")}`}(e.workspace.root,r)))];return o.length>0?o:void 0}function resolveDeepAgentsBackend(e,t,r){if(t?.FilesystemBackend&&r&&0!==r.length)return()=>new t.FilesystemBackend({rootDir:e.workspace.root})}function mergeMiddleware(e,t,r,s=a(e.workspace.runtime.toolGateway)){const i=Array.isArray(r)?r:[],p=scopedInput(e,t),c=new Set;return[o(p,{observedToolIds:c,repeatState:s}),n(p,{repeatState:s}),...m(e.workspace.runtime.retry),...i,l(p)]}function requestScopedRepeatState(e,t){const r=`deepagents.repeat.${t}`,n=e.requestState?.get(r);if(n)return n;const o=a(e.workspace.runtime.toolGateway);return e.requestState&&o&&e.requestState.set(r,o),o}function scopedInput(e,t){return t?{...e,agent:t}:e}function resolveAgentModel(e,t){const r=t.modelRef?e.workspace.models.get(t.modelRef):void 0;return r?u(r):void 0}function resolveAgentRepairModel(e,t,r){const n=r.model;if(isRepairModel(n))return n;if(!t)return;const o=resolveAgentModel(e,t);return isRepairModel(o)?o:void 0}function readDeepAgentsConfig(e){return isRecord(e)?e:{}}function readDeepAgentsStringArray(e,t){const r=isRecord(e)?e:{},n=readDeepAgentsConfig(r.deepagents),o="memory"===t?["memory","memorySources"]:["skills","skillSources"];for(const e of o){const t=readStringArray(n[e]);if(t)return t}return readStringArray(r[t])}function pruneUndefined(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}function readString(e){return"string"==typeof e&&e.trim()?e:void 0}function readNumber(e){return"number"==typeof e&&Number.isFinite(e)?e:void 0}function readBoolean(e){return"boolean"==typeof e?e:void 0}function readStringArray(e){return Array.isArray(e)?e.filter(e=>"string"==typeof e):void 0}function canonicalPath(t){try{return e.native(t)}catch{return t}}function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function isRepairModel(e){return"object"==typeof e&&null!==e&&"invoke"in e&&"function"==typeof e.invoke}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { RuntimeAdapter } from "@stable-harness/core";
|
|
2
|
-
export declare function streamDeepAgentResult(input: Parameters<RuntimeAdapter["run"]>[0],
|
|
2
|
+
export declare function streamDeepAgentResult(input: Parameters<RuntimeAdapter["run"]>[0], run: unknown, stringify: (value: unknown) => string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function streamDeepAgentResult(t,e,
|
|
1
|
+
export async function streamDeepAgentResult(e,t,a){const n=function readRunProjection(e){const t=readRecord(e);if(!t)return;const a={messages:readAsyncIterable(t.messages),toolCalls:readAsyncIterable(t.toolCalls??t.tool_calls),subagents:readAsyncIterable(t.subagents),output:t.output};return a.messages||a.toolCalls||a.subagents||a.output?a:void 0}(t);if(!n)throw new Error("DeepAgents streamEvents(version: v3) did not expose v3 projections.");let r,s="";return await Promise.all([consumeMessages(e,n.messages,e.agent.id,e=>{s+=e}),consumeToolCalls(e,n.toolCalls,e.agent.id),consumeSubagents(e,n.subagents),readFinalOutput(n.output,a).then(e=>{r=e})]),r??s}async function consumeMessages(e,t,a,n){if(t)for await(const r of t){const t=await readMessageText(r);t&&(emitAdapterEvent(e,{phase:"agent.message",sourceAgentId:a,text:t}),a===e.agent.id&&(n?.(t),emitAdapterEvent(e,{phase:"agent.output.delta",text:t})))}}async function consumeToolCalls(e,t,a){if(!t)return;let n=0;for await(const r of t){n+=1;const t=readRecord(r)??{},s=readString(t.name)??readString(t.toolId)??`tool-${n}`,o=readString(t.callId)??readString(t.id)??`${a}:${s}:${n}`;emitAdapterEvent(e,{phase:"agent.tool.start",sourceAgentId:a,toolId:s,toolCallId:o,args:await resolveValue(t.input??t.args)}),await emitToolResult(e,t,a,s,o)}}async function consumeSubagents(e,t){if(!t)return;const a=[];let n=0;for await(const r of t)n+=1,a.push(consumeSubagent(e,r,n));await Promise.all(a)}async function consumeSubagent(e,t,a){const n=readRecord(t)??{},r=readString(n.name)??`subagent-${a}`,s=readString(n.callId)??readString(n.id)??`${r}:${a}`;emitAdapterEvent(e,{phase:"agent.subagent.start",subagentId:r,callId:s,taskInput:await resolveValue(n.taskInput),namespace:n.namespace});try{await Promise.all([consumeMessages(e,readAsyncIterable(n.messages),r),consumeToolCalls(e,readAsyncIterable(n.toolCalls??n.tool_calls),r),consumeSubagents(e,readAsyncIterable(n.subagents)),resolveValue(n.output)]),emitAdapterEvent(e,{phase:"agent.subagent.result",subagentId:r,callId:s,status:"completed"})}catch(t){emitAdapterEvent(e,{phase:"agent.subagent.result",subagentId:r,callId:s,status:"failed",error:formatError(t)})}}async function emitToolResult(e,t,a,n,r){try{emitAdapterEvent(e,{phase:"agent.tool.result",sourceAgentId:a,toolId:n,toolCallId:r,status:await resolveValue(t.status),output:await resolveValue(t.output),error:await resolveValue(t.error)})}catch(t){emitAdapterEvent(e,{phase:"agent.tool.result",sourceAgentId:a,toolId:n,toolCallId:r,status:"failed",error:formatError(t)})}}async function readFinalOutput(e,t){const a=await resolveValue(e);if(void 0!==a)return t(a)||void 0}async function readMessageText(e){const t=readRecord(e);if(!t)return"string"==typeof e&&e?e:void 0;const a=await resolveValue(t.text);return"string"==typeof a&&a?a:function readContentText(e){return"string"==typeof e?e||void 0:Array.isArray(e)&&e.map(e=>readString(readRecord(e)?.text)??("string"==typeof e?e:"")).join("")||void 0}(await resolveValue(t.output??t.content))}function emitAdapterEvent(e,t){e.emit({type:"runtime.adapter.event",requestId:e.requestId,sessionId:e.sessionId,agentId:e.agent.id,event:{adapter:"deepagents",...t}})}async function resolveValue(e){return await e}function readAsyncIterable(e){return function isAsyncIterable(e){return isRecord(e)&&"function"==typeof e[Symbol.asyncIterator]}(e)?e:void 0}function readRecord(e){return isRecord(e)?e:void 0}function readString(e){return"string"==typeof e&&e.trim()?e:void 0}function formatError(e){return e instanceof Error?e.message:String(e)}function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuntimeAdapterContext, RuntimeAdapterResult } from "@stable-harness/core";
|
|
2
2
|
export type DeepAgentFactory = (params?: Record<string, unknown>) => {
|
|
3
3
|
invoke(input: Record<string, unknown>, options?: Record<string, unknown>): Promise<unknown>;
|
|
4
|
-
streamEvents?(input: Record<string, unknown>, options?: Record<string, unknown>):
|
|
4
|
+
streamEvents?(input: Record<string, unknown>, options?: Record<string, unknown>): unknown;
|
|
5
5
|
};
|
|
6
6
|
export type DeepAgentsModule = {
|
|
7
7
|
createDeepAgent?: unknown;
|
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
"types": "dist/src/index.d.ts",
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@easynet/better-call": "^0.1.60",
|
|
14
|
-
"@langchain/core": "^1.1.
|
|
14
|
+
"@langchain/core": "^1.1.46",
|
|
15
15
|
"@langchain/ollama": "^1.2.7",
|
|
16
16
|
"@langchain/openai": "^1.4.5",
|
|
17
17
|
"@stable-harness/core": "0.0.1",
|
|
18
|
-
"deepagents": "^1.
|
|
19
|
-
"langchain": "^1.
|
|
18
|
+
"deepagents": "^1.10.1",
|
|
19
|
+
"langchain": "^1.4.0"
|
|
20
20
|
},
|
|
21
21
|
"peerDependenciesMeta": {
|
|
22
22
|
"deepagents": {
|