stable-harness 0.0.124 → 0.0.125
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/docs/guides/operator-runbook.md +42 -0
- package/docs/product/harness-engineering-roadmap.md +137 -0
- package/docs/product/market-positioning.md +12 -0
- 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/index.d.ts +1 -0
- package/node_modules/@stable-harness/core/dist/index.js +1 -1
- package/node_modules/@stable-harness/core/dist/recovery/raw-args.d.ts +9 -0
- package/node_modules/@stable-harness/core/dist/recovery/raw-args.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime/events.d.ts +61 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/admin.d.ts +15 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/admin.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/evidence-admin.d.ts +11 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/evidence-admin.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/store.d.ts +2 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/store.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/types.d.ts +120 -0
- package/node_modules/@stable-harness/core/dist/runtime/improvement/types.js +1 -0
- package/node_modules/@stable-harness/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/node_modules/@stable-harness/core/dist/runtime.d.ts +2 -1
- package/node_modules/@stable-harness/core/dist/runtime.js +1 -1
- package/node_modules/@stable-harness/core/dist/trace.d.ts +1 -1
- package/node_modules/@stable-harness/core/dist/trace.js +1 -1
- package/node_modules/@stable-harness/core/dist/types.d.ts +12 -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/in-process-client.js +1 -1
- package/node_modules/@stable-harness/protocols/package.json +2 -2
- 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/package.json +2 -2
- package/packages/adapter-langgraph/package.json +2 -2
- package/packages/cli/package.json +8 -8
- package/packages/core/dist/index.d.ts +1 -0
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/recovery/raw-args.d.ts +9 -0
- package/packages/core/dist/recovery/raw-args.js +1 -1
- package/packages/core/dist/runtime/events.d.ts +61 -0
- package/packages/core/dist/runtime/improvement/admin.d.ts +15 -0
- package/packages/core/dist/runtime/improvement/admin.js +1 -0
- package/packages/core/dist/runtime/improvement/evidence-admin.d.ts +11 -0
- package/packages/core/dist/runtime/improvement/evidence-admin.js +1 -0
- package/packages/core/dist/runtime/improvement/store.d.ts +2 -0
- package/packages/core/dist/runtime/improvement/store.js +1 -0
- package/packages/core/dist/runtime/improvement/types.d.ts +120 -0
- package/packages/core/dist/runtime/improvement/types.js +1 -0
- package/packages/core/dist/runtime/recovery/adapter-result.js +1 -1
- package/packages/core/dist/runtime.d.ts +2 -1
- package/packages/core/dist/runtime.js +1 -1
- package/packages/core/dist/trace.d.ts +1 -1
- package/packages/core/dist/trace.js +1 -1
- package/packages/core/dist/types.d.ts +12 -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/in-process-client.js +1 -1
- package/packages/protocols/package.json +2 -2
- package/packages/tool-gateway/package.json +1 -1
- package/packages/workspace-yaml/package.json +2 -2
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { RuntimeFailureClassification, RuntimeFailureEvidenceReference } from "../events.js";
|
|
2
|
+
export type RuntimeImprovementTarget = "policy" | "memory" | "workspace_config" | "verification_hook" | "context_management" | "adapter_passthrough" | "protocol_projection" | "downstream_application" | "no_change";
|
|
3
|
+
export type RuntimeImprovementStatus = "proposed" | "accepted" | "rejected" | "applied" | "superseded";
|
|
4
|
+
export type RuntimeImprovementOwner = "upstream_backend" | "stable_runtime" | "protocol_adapter" | "governance_policy" | "workspace_config" | "downstream_application" | "operator";
|
|
5
|
+
export type RuntimePolicyImprovement = {
|
|
6
|
+
capability: "approval" | "sandbox" | "resource_limit" | "audit" | "completion_gate";
|
|
7
|
+
action: "require_approval" | "deny" | "limit" | "record" | "fail_closed";
|
|
8
|
+
configPath?: string;
|
|
9
|
+
preview: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export type RuntimeMemoryImprovement = {
|
|
12
|
+
namespace: string;
|
|
13
|
+
content: string;
|
|
14
|
+
scope?: "session" | "agent" | "workspace" | "user" | "project";
|
|
15
|
+
kind?: "semantic" | "episodic" | "procedural";
|
|
16
|
+
tags?: string[];
|
|
17
|
+
};
|
|
18
|
+
export type RuntimeVerificationImprovement = {
|
|
19
|
+
lifecycle: "after_tool_call" | "after_file_edit" | "before_completion" | "before_publish";
|
|
20
|
+
commandId?: string;
|
|
21
|
+
expectedEvidence?: string[];
|
|
22
|
+
failureMode: "block" | "continue" | "warn";
|
|
23
|
+
};
|
|
24
|
+
export type RuntimeContextImprovement = {
|
|
25
|
+
action: "offload_output" | "compact_history" | "create_handoff" | "retain_context";
|
|
26
|
+
artifactId?: string;
|
|
27
|
+
previewTokenLimit?: number;
|
|
28
|
+
rationale: string;
|
|
29
|
+
};
|
|
30
|
+
export type RuntimeImprovementApplication = {
|
|
31
|
+
target: "policy";
|
|
32
|
+
policy: RuntimePolicyImprovement;
|
|
33
|
+
} | {
|
|
34
|
+
target: "memory";
|
|
35
|
+
memory: RuntimeMemoryImprovement;
|
|
36
|
+
} | {
|
|
37
|
+
target: "verification_hook";
|
|
38
|
+
verification: RuntimeVerificationImprovement;
|
|
39
|
+
} | {
|
|
40
|
+
target: "context_management";
|
|
41
|
+
context: RuntimeContextImprovement;
|
|
42
|
+
} | {
|
|
43
|
+
target: Exclude<RuntimeImprovementTarget, "policy" | "memory" | "verification_hook" | "context_management">;
|
|
44
|
+
note: string;
|
|
45
|
+
};
|
|
46
|
+
export type RuntimeImprovementProposal = {
|
|
47
|
+
id: string;
|
|
48
|
+
sourceRunId?: string;
|
|
49
|
+
requestId?: string;
|
|
50
|
+
sessionId?: string;
|
|
51
|
+
agentId?: string;
|
|
52
|
+
status: RuntimeImprovementStatus;
|
|
53
|
+
target: RuntimeImprovementTarget;
|
|
54
|
+
owner: RuntimeImprovementOwner;
|
|
55
|
+
title: string;
|
|
56
|
+
rationale: string;
|
|
57
|
+
classification?: RuntimeFailureClassification;
|
|
58
|
+
evidence: RuntimeFailureEvidenceReference[];
|
|
59
|
+
application: RuntimeImprovementApplication;
|
|
60
|
+
createdAt: string;
|
|
61
|
+
updatedAt: string;
|
|
62
|
+
reviewedAt?: string;
|
|
63
|
+
reviewReason?: string;
|
|
64
|
+
appliedAt?: string;
|
|
65
|
+
supersededBy?: string;
|
|
66
|
+
metadata?: Record<string, unknown>;
|
|
67
|
+
};
|
|
68
|
+
export type RuntimeImprovementProposalInput = Omit<RuntimeImprovementProposal, "id" | "status" | "createdAt" | "updatedAt" | "reviewedAt" | "appliedAt"> & {
|
|
69
|
+
id?: string;
|
|
70
|
+
status?: RuntimeImprovementStatus;
|
|
71
|
+
createdAt?: string;
|
|
72
|
+
updatedAt?: string;
|
|
73
|
+
};
|
|
74
|
+
export type RuntimeImprovementProposalFilter = {
|
|
75
|
+
status?: RuntimeImprovementStatus;
|
|
76
|
+
target?: RuntimeImprovementTarget;
|
|
77
|
+
owner?: RuntimeImprovementOwner;
|
|
78
|
+
requestId?: string;
|
|
79
|
+
sessionId?: string;
|
|
80
|
+
agentId?: string;
|
|
81
|
+
};
|
|
82
|
+
export type RuntimeImprovementReviewInput = {
|
|
83
|
+
id: string;
|
|
84
|
+
status: Extract<RuntimeImprovementStatus, "accepted" | "rejected" | "superseded">;
|
|
85
|
+
reason?: string;
|
|
86
|
+
supersededBy?: string;
|
|
87
|
+
};
|
|
88
|
+
export type RuntimeFailureClassificationInput = {
|
|
89
|
+
requestId: string;
|
|
90
|
+
classification: RuntimeFailureClassification;
|
|
91
|
+
proposal?: RuntimeImprovementProposalInput;
|
|
92
|
+
};
|
|
93
|
+
export type RuntimeVerificationHookResultInput = {
|
|
94
|
+
requestId: string;
|
|
95
|
+
hookId: string;
|
|
96
|
+
status: "passed" | "failed" | "blocked";
|
|
97
|
+
evidence?: RuntimeFailureEvidenceReference[];
|
|
98
|
+
};
|
|
99
|
+
export type RuntimeContextOffloadInput = {
|
|
100
|
+
requestId: string;
|
|
101
|
+
artifactId: string;
|
|
102
|
+
kind: string;
|
|
103
|
+
uri?: string;
|
|
104
|
+
retainedPreview?: string;
|
|
105
|
+
metadata?: Record<string, unknown>;
|
|
106
|
+
};
|
|
107
|
+
export type RuntimeContextCompactionInput = {
|
|
108
|
+
requestId: string;
|
|
109
|
+
summary: string;
|
|
110
|
+
artifactId?: string;
|
|
111
|
+
kind?: string;
|
|
112
|
+
uri?: string;
|
|
113
|
+
metadata?: Record<string, unknown>;
|
|
114
|
+
};
|
|
115
|
+
export type RuntimeImprovementStore = {
|
|
116
|
+
createProposal(input: RuntimeImprovementProposalInput): RuntimeImprovementProposal;
|
|
117
|
+
listProposals(filter?: RuntimeImprovementProposalFilter): RuntimeImprovementProposal[];
|
|
118
|
+
getProposal(id: string): RuntimeImprovementProposal | undefined;
|
|
119
|
+
updateProposal(id: string, patch: Partial<RuntimeImprovementProposal>): RuntimeImprovementProposal | undefined;
|
|
120
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{assertNoDeclaredActionOmissionOutput as e}from"../../recovery/control-omission.js";import{containsProgressOnlyToolIntent as t}from"../../recovery/progress-intent.js";import{buildRawArgsRecoveryRequest as o,buildRawArgsToolEvidenceRecoveryRequest as r,
|
|
1
|
+
import{assertNoDeclaredActionOmissionOutput as e}from"../../recovery/control-omission.js";import{containsProgressOnlyToolIntent as t}from"../../recovery/progress-intent.js";import{buildRawArgsRecoveryRequest as o,buildRawArgsToolEvidenceRecoveryRequest as r,buildRawArgsToolSequenceEvidenceRecoveryRequest as a,hasUniqueRawArgsTool as s,matchRawArgsToolSequence as n,matchUniqueRawArgsTool as l}from"../../recovery/raw-args.js";import{assertNoProgressOnlyToolIntentOutput as u,assertNoRawToolCallOutput as c,assertNoRawToolResultOutput as i,assertNoStructurallyIncompleteFinalOutput as d,assertNoToolExecutionErrorOutput as y,buildEvidenceSynthesisOutput as p,buildResultRecoveryRequest as v,containsRawToolCallOutput as g,rawToolCallFailureMessage as m,rawToolCallOutputPreview as w,toolCallRecoveryEnabled as f}from"../../recovery/tool-call.js";import{controlGaps as R}from"../../quality/event-evidence.js";export async function recoverAdapterResultOutput(t){let r=t.result,a=t.request;const n=function resultRecoveryAttempts(e){const t="object"!=typeof e||null===e||Array.isArray(e)?void 0:e.recovery,o="object"!=typeof t||null===t||Array.isArray(t)?void 0:t.toolCall,r="object"!=typeof o||null===o||Array.isArray(o)?void 0:o.maxResultRecoveryAttempts;return"number"==typeof r&&Number.isInteger(r)&&r>0?r:3}(t.recoveryPolicy),R=new Set,_=new Set;for(let e=0;;e+=1){const s=t.store.getRun(t.requestId)?.events??[],u=effectiveRecoveryToolIds(a,t.agent.tools);assertNoNonFocusedRecoveryIntent(r.text,t.recoveryPolicy,t.agent.tools,u);const c=await recoverRawArgsSequenceByToolGateway(t,a,r,_,e+1,u);if(c){a=c.request,r=c.result;continue}const i=l({output:r.text,agent:t.agent,workspace:t.workspace,toolGateway:t.toolGateway,events:s,candidateToolIds:u,policy:t.recoveryPolicy}),d=i?rawArgsToolKey(i):void 0;if(i&&d&&_.size>0&&!_.has(d)){const o=await recoverRawArgsByToolGateway(t,a,r,i,_,e+1);if(o){a=o.request,r=o.result;continue}}const y=d&&!R.has(d)?o({request:a,output:r.text,agent:t.agent,workspace:t.workspace,toolGateway:t.toolGateway,events:s,candidateToolIds:u,policy:t.recoveryPolicy}):void 0,p=e<n?v({request:a,output:r.text,events:s,availableToolIds:u,policy:t.recoveryPolicy}):void 0,g=y??p;if(!g)break;if(g===y&&R.add(d),a=g,emitRepair(t,"runtime.repair.started","result_output",e+1,"recoverable_result_output",void 0,repairDiagnostics(r.text,u)),r=await t.runAdapter(g),emitRepair(t,"runtime.repair.completed","result_output",e+1,"recoverable_result_output","retried",repairDiagnostics(r.text,u)),g===y){const o=await recoverRepeatedRawArgsByToolGateway(t,a,r,R,_,e+1);o&&(a=o.request,r=o.result)}}return function finalizeRecoveredOutput(t,o){if(!f(t.recoveryPolicy))return o;let r=!1;if(g(o.text,t.recoveryPolicy)&&function rawToolCallFailureReturnsMessage(e){return"message"===("object"!=typeof e?.toolCallRecovery||null===e.toolCallRecovery||Array.isArray(e.toolCallRecovery)?{}:e.toolCallRecovery).onFailure}(t.request.metadata)){const e=o.text;o={...o,text:m(),metadata:{...o.metadata,toolCallRecovery:{failed:!0,reason:"raw_tool_call_output"}}},emitRepair(t,"runtime.repair.completed","result_output",void 0,"raw_tool_call_output","blocked",repairDiagnostics(e,t.agent.tools))}const a=p({request:t.request,output:o.text,events:t.store.getRun(t.requestId)?.events??[],policy:t.recoveryPolicy});return a&&(r=!0,o={...o,text:a,metadata:{...o.metadata,toolCallRecovery:{synthesized:!0,reason:"raw_tool_call_output_with_evidence"}}},emitRepair(t,"runtime.repair.completed","evidence_synthesis",void 0,"raw_tool_call_output_with_evidence","synthesized")),r||(g(o.text,t.recoveryPolicy)&&emitRepair(t,"runtime.repair.completed","result_output",void 0,"raw_tool_call_output","blocked",repairDiagnostics(o.text,t.agent.tools)),c(o.text,t.recoveryPolicy),function assertNoRawArgsToolOutput(e,t){if(s({output:t,agent:e.agent,workspace:e.workspace,toolGateway:e.toolGateway,events:e.store.getRun(e.requestId)?.events??[],candidateToolIds:effectiveRecoveryToolIds(e.request,e.agent.tools),policy:e.recoveryPolicy}))throw new Error(`Adapter returned raw tool argument JSON as the final answer after recovery. The backend must execute the matching tool instead. Output preview: ${w(t)}`)}(t,o.text),u(o.text,t.agent.tools,t.recoveryPolicy),i(o.text,t.store.getRun(t.requestId)?.events??[],t.recoveryPolicy),y(o.text,t.recoveryPolicy),d(o.text,t.recoveryPolicy),e({output:o.text,events:t.store.getRun(t.requestId)?.events??[],availableToolIds:t.agent.tools})),o}(t,r)}async function recoverRawArgsSequenceByToolGateway(e,t,o,r,s,l){if(!e.runRecoveredToolCall)return;const u=n({output:o.text,agent:e.agent,workspace:e.workspace,toolGateway:e.toolGateway,events:e.store.getRun(e.requestId)?.events??[],candidateToolIds:l,policy:e.recoveryPolicy});if(u.length<2||u.some(e=>r.has(rawArgsToolKey(e))))return;emitRepair(e,"runtime.repair.started","result_output",s,"raw_args_tool_sequence_gateway_recovery",void 0,repairDiagnostics(o.text,l));const c=[];for(const t of u){r.add(rawArgsToolKey(t));const o=await e.runRecoveredToolCall(t.toolId,t.args);c.push({match:t,toolOutput:visibleRecoveredToolOutput(o)})}const i=a({request:t,evidences:c}),d=await e.runAdapter(i),y=d.text.trim()?d:{...d,text:buildEmptyRecoveredToolSequenceBlocker({evidences:c,events:e.store.getRun(e.requestId)?.events??[]}),metadata:{...d.metadata,toolCallRecovery:{blocked:!0,reason:"empty_output_after_recovered_tool_sequence"}}};return emitRepair(e,"runtime.repair.completed","result_output",s,"raw_args_tool_sequence_gateway_recovery","retried",repairDiagnostics(y.text,l)),{request:i,result:y}}async function recoverRepeatedRawArgsByToolGateway(e,t,o,r,a,s){const n=l({output:o.text,agent:e.agent,workspace:e.workspace,toolGateway:e.toolGateway,events:e.store.getRun(e.requestId)?.events??[],candidateToolIds:effectiveRecoveryToolIds(t,e.agent.tools),policy:e.recoveryPolicy});if(!n||!e.runRecoveredToolCall)return;const u=rawArgsToolKey(n);return r.has(u)&&!a.has(u)?recoverRawArgsByToolGateway(e,t,o,n,a,s):void 0}async function recoverRawArgsByToolGateway(e,t,o,a,s,n){if(!e.runRecoveredToolCall)return;const l=rawArgsToolKey(a);if(s.has(l))return;s.add(l),emitRepair(e,"runtime.repair.started","result_output",n,"raw_args_tool_gateway_recovery",void 0,repairDiagnostics(o.text,e.agent.tools));const u=visibleRecoveredToolOutput(await e.runRecoveredToolCall(a.toolId,a.args)),c=r({request:t,match:a,toolOutput:u}),i=await e.runAdapter(c),d=i.text.trim()?i:{...i,text:buildEmptyRecoveredToolBlocker({match:a,toolOutput:u,events:e.store.getRun(e.requestId)?.events??[]}),metadata:{...i.metadata,toolCallRecovery:{blocked:!0,reason:"empty_output_after_recovered_tool"}}};return emitRepair(e,"runtime.repair.completed","result_output",n,"raw_args_tool_gateway_recovery","retried",repairDiagnostics(d.text,e.agent.tools)),{request:c,result:d}}function assertNoNonFocusedRecoveryIntent(e,o,r,a){if(0===a.length||a.length===r.length)return;const s=new Set(a),n=visibleToolCandidates(e,r).filter(e=>!s.has(e)),l=g(e,o)||t(e,r)||function containsJsonToolEnvelope(e){const t=e.trim(),o=t.match(/^```(?:json)?\s*\n([\s\S]*?)\n```$/iu)?.[1]?.trim(),r=o??t;if(!r.startsWith("{")||!r.endsWith("}")||r.length>6e3)return!1;try{const e=JSON.parse(r);if(!function isRecord(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}(e))return!1;const t=["tool","tool_name","name","type","subagent_type"].some(t=>"string"==typeof e[t]),o=["args","arguments","parameters","kwargs"].some(t=>t in e);return t&&o}catch{return!1}}(e);if(n.length>0&&l)throw new Error(`Focused recovery output referenced non-focused tool(s): ${n.join(", ")}. The backend must call one of the focused gateway tools: ${a.join(", ")}.`)}function emitRepair(e,t,o,r,a,s,n){const l={requestId:e.requestId,sessionId:e.sessionId,agentId:e.agent.id,layer:o,attempt:r,reason:a,...n?{diagnostics:n}:{}};e.emit("runtime.repair.started"===t?{type:t,...l}:{type:t,...l,outcome:s??"retried"})}function repairDiagnostics(e,t){return{outputPreview:w(e),toolCandidateIds:visibleToolCandidates(e,t)}}function visibleToolCandidates(e,t){const o=new Set;for(const r of t??[])new RegExp(`(?:^|[^A-Za-z0-9_-])${escapeRegexp(r)}(?:$|[^A-Za-z0-9_-])`,"u").test(e)&&o.add(r);return[...o]}function escapeRegexp(e){return e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function effectiveRecoveryToolIds(e,t){const o=function readStringArray(e){return Array.isArray(e)?e.filter(e=>"string"==typeof e&&e.length>0):[]}(e.metadata?.stableHarnessRequiredEvidenceTools).filter(e=>t.includes(e));return o.length>0?o:t}function rawArgsToolKey(e){return`${e.toolId}:${JSON.stringify(e.args)}`}function visibleRecoveredToolOutput(e){return("string"==typeof e.text?e.text.trim():"")||"The recovered tool completed successfully but returned no user-visible output."}function buildEmptyRecoveredToolBlocker(e){const t=R(e.events);return["Stable runtime recovery executed the matched declared tool, but the backend returned no user-facing output after receiving the executed evidence.","",`Executed tool: ${e.match.toolId}`,"","Executed JSON arguments:",JSON.stringify(e.match.args),"","Executed tool evidence:",e.toolOutput,...t.length>0?["","Unresolved control gaps:",...t.map(e=>`- ${e}`)]:[]].join("\n")}function buildEmptyRecoveredToolSequenceBlocker(e){const t=R(e.events);return["Stable runtime recovery executed matched declared tools, but the backend returned no user-facing output after receiving the executed evidence.","",...e.evidences.flatMap((e,t)=>[`Executed tool ${t+1}: ${e.match.toolId}`,"Executed JSON arguments:",JSON.stringify(e.match.args),"Executed tool evidence:",e.toolOutput,""]),...t.length>0?["Unresolved control gaps:",...t.map(e=>`- ${e}`)]:[]].join("\n")}
|
|
@@ -3,7 +3,7 @@ import type { MemoryProvider, RuntimeMemoryStore } from "@stable-harness/memory"
|
|
|
3
3
|
import type { ExecutionEvaluatorRule, QualityReviewModel } from "./quality/index.js";
|
|
4
4
|
import type { ToolGuardrail } from "./runtime/policy/tool-invocation.js";
|
|
5
5
|
import { createLangSmithTracingCapability } from "./runtime/tracing/langsmith.js";
|
|
6
|
-
import type { CompiledWorkspace, RuntimeCapabilityModule, RuntimeToolGateway, RuntimeAdapter, RuntimeArtifactStore, RuntimeSandboxPolicy, RuntimeStore, RuntimeProgressNarrationOptions, RuntimeWorkflowAdapter, StableHarnessRuntime } from "./types.js";
|
|
6
|
+
import type { CompiledWorkspace, RuntimeCapabilityModule, RuntimeToolGateway, RuntimeAdapter, RuntimeArtifactStore, RuntimeImprovementStore, RuntimeSandboxPolicy, RuntimeStore, RuntimeProgressNarrationOptions, RuntimeWorkflowAdapter, StableHarnessRuntime } from "./types.js";
|
|
7
7
|
export type RuntimeFactoryInput = {
|
|
8
8
|
workspace: CompiledWorkspace;
|
|
9
9
|
adapters: RuntimeAdapter[];
|
|
@@ -15,6 +15,7 @@ export type RuntimeFactoryInput = {
|
|
|
15
15
|
sandbox?: RuntimeSandboxPolicy | false;
|
|
16
16
|
store?: RuntimeStore;
|
|
17
17
|
artifacts?: RuntimeArtifactStore;
|
|
18
|
+
improvements?: RuntimeImprovementStore;
|
|
18
19
|
progressNarration?: RuntimeProgressNarrationOptions | false;
|
|
19
20
|
qualityReviewModel?: QualityReviewModel;
|
|
20
21
|
toolGuardrails?: readonly ToolGuardrail[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomUUID as e}from"node:crypto";import{assertExecutionContract as t}from"./execution-contract.js";import{buildExecutionContractRecoveryRequest as r}from"./recovery/execution-contract.js";import{buildAdapterErrorRecoveryPrompt as a,isRecoverableAdapterError as o}from"./recovery/tool-call.js";import{recoverQualityReview as s,resolveQualityPolicy as n}from"./quality/index.js";import{recoverAdapterResultOutput as i}from"./runtime/recovery/adapter-result.js";import{completeRun as u,failRun as c}from"./runtime/completion.js";import{createRuntimeAdministrationMethods as p}from"./runtime/admin/administration.js";import{runDirectToolCall as
|
|
1
|
+
import{randomUUID as e}from"node:crypto";import{assertExecutionContract as t}from"./execution-contract.js";import{buildExecutionContractRecoveryRequest as r}from"./recovery/execution-contract.js";import{buildAdapterErrorRecoveryPrompt as a,isRecoverableAdapterError as o}from"./recovery/tool-call.js";import{recoverQualityReview as s,resolveQualityPolicy as n}from"./quality/index.js";import{recoverAdapterResultOutput as i}from"./runtime/recovery/adapter-result.js";import{completeRun as u,failRun as c}from"./runtime/completion.js";import{createRuntimeAdministrationMethods as p}from"./runtime/admin/administration.js";import{runDirectToolCall as m}from"./runtime/direct-tool-call.js";import{createApprovalGatedToolGateway as d}from"./runtime/governance/approval-gate.js";import{createSandboxedToolGateway as l}from"./runtime/governance/sandbox.js";import{createRuntimeImprovementAdministration as w}from"./runtime/improvement/admin.js";import{createRuntimeEvidenceAdministration as y}from"./runtime/improvement/evidence-admin.js";import{createInMemoryRuntimeImprovementStore as g}from"./runtime/improvement/store.js";import{createRuntimeInspectionMethods as I}from"./runtime/inspection/methods.js";import{createRuntimeCapabilityRegistry as f,normalizeAdapterResult as q}from"./runtime/capabilities.js";import{createMemoryRuntimeCapability as v}from"./runtime/memory.js";import{resolveToolCallRecoveryPolicy as R}from"./runtime/recovery/tool-call-policy.js";import{createRuntimeMemoryAdministration as k}from"./runtime/admin/memory.js";import{createInMemoryRuntimeStore as A}from"./runtime/persistence/stores.js";import{createProgressNarrationCapability as b}from"./runtime/progress-narration.js";import{repairRuntimeSelection as C}from"./runtime/selection-repair.js";import{createLangSmithTracingCapability as j}from"./runtime/tracing/langsmith.js";import{createToolFailureTracker as x}from"./runtime/tool-failure.js";import{runWorkflowRequest as E}from"./workflows/runtime.js";export function createStableHarnessRuntime(t){const q=new Set,G=t.store??A(),S=t.improvements??g(),T=f([v(t),b({options:t.progressNarration,policy:t.workspace.runtime}),j({policy:t.workspace.runtime,store:G,options:t.langSmithTracing}),...t.capabilities??[]]),emitBase=t=>{const r=function enrichRuntimeEvent(t){return{...t,eventId:t.eventId??e(),emittedAt:t.emittedAt??(new Date).toISOString()}}(t);G.appendEvent(r);for(const e of q)e(r)},emit=e=>{emitBase(e),T.emitSideEffects(e,emitBase)},h=l({gateway:d({gateway:t.toolGateway,approvals:t.approvals,workspace:t.workspace,emit:emit}),workspace:t.workspace,sandbox:t.sandbox,emit:emit}),M={...t,toolGateway:h},O=x(function readToolFailurePolicy(e){if("object"!=typeof e||null===e||Array.isArray(e))return;const t=e.failurePolicy;return"object"!=typeof t||null===t||Array.isArray(t)?void 0:t}(t.workspace.runtime.toolGateway));return{request:async t=>async function runRuntimeRequest(t){const p=t.request.requestId??e(),d=t.request.sessionId??e(),l=[],{agent:w,adapter:y}=await async function resolveExecution(e,t,r){const a=t.agentId?await async function resolveRequestedAgentId(e,t,r){if(e.agents.has(t))return t;const a=await C({id:t,candidates:[...e.agents.values()].map(e=>({id:e.id,description:e.description})),trace:{...r,agentId:t,layer:"agent",owner:"stable_runtime_policy"}});return a.ok?a.id:t}(e.workspace,t.agentId,r):e.workspace.runtime.defaultAgentId,o=e.workspace.agents.get(a);if(!o)throw new Error(`Agent ${a} is not defined in the workspace`);if(t.toolCall||t.workflow)return{agent:o,adapter:void 0};const s=e.adapters.find(e=>e.canRun(o));if(!s)throw new Error(`No runtime adapter can run backend ${o.backend} for agent ${o.id}`);return{agent:o,adapter:s}}(t.input,t.request,{requestId:p,sessionId:d,emit:e=>l.push(e)});t.store.createRun(function createRunRecord(e,t,r,a){return{requestId:t,sessionId:r,agentId:a.id,input:e.input,state:"running",parentRunId:e.parentRunId,metadata:e.metadata,artifacts:[],startedAt:(new Date).toISOString(),events:[]}}(t.request,p,d,w)),l.forEach(t.emit),t.emit({type:"runtime.request.started",requestId:p,sessionId:d,agentId:w.id,input:t.request.input});try{if(t.request.workflow){const e=await E({workspace:t.input.workspace,adapters:t.input.workflowAdapters??[],toolGateway:t.input.toolGateway,request:{input:t.request.input,...t.request.workflow},requestId:p,sessionId:d,agentId:w.id,emit:t.emit});return u({store:t.store,emit:t.emit,requestId:p,sessionId:d,agent:w,result:e,artifacts:t.input.artifacts})}if(t.request.toolCall){const e=await m({gateway:t.input.toolGateway,workspace:t.input.workspace,emit:t.emit,request:t.request,requestId:p,sessionId:d,agent:w,toolFailureTracker:t.toolFailureTracker,toolGuardrails:t.input.toolGuardrails,events:t.store.getRun(p)?.events??[]});return u({store:t.store,emit:t.emit,requestId:p,sessionId:d,agent:w,result:e,artifacts:t.input.artifacts})}return await async function runAdapterRequest(e){if(!e.adapter)throw new Error(`No runtime adapter can run backend ${e.agent.backend} for agent ${e.agent.id}`);const t=e.adapter,c=await e.capabilities.beforeAdapterRun(createCapabilityContext(e)),p=c.memory,m=c.pluginMemories??[],d=R({workspace:e.input.workspace,agent:e.agent}),l=n(e.input.workspace.runtime,e.agent),w=new Map;let y;try{y=await runAdapterOnce(e,t,e.request,p,m,w,d)}catch(r){if(!o(r,d))throw r;e.emit(repairStarted(e,"adapter_error",1,errorMessage(r))),y=await runAdapterOnce(e,t,a(e.request,r,d),p,m,w,d),e.emit(repairCompleted(e,"adapter_error","retried",1,errorMessage(r)))}y=await i({...e,request:e.request,result:y,recoveryPolicy:d,workspace:e.input.workspace,toolGateway:e.input.toolGateway,runAdapter:r=>runAdapterOnce(e,t,r,p,m,w,d),runRecoveredToolCall:(t,r)=>runRecoveredToolCall(e,t,r)}),y=await s(createQualityRuntimeInput(e,p,m,w,d),e.request,y,l),await e.capabilities.beforeAdapterResultContract({...createCapabilityContext(e),result:y});try{assertRequestExecutionContract(e,y)}catch(a){const o=r({request:e.request,events:e.store.getRun(e.requestId)?.events??[],policy:d});if(!o)throw a;e.emit(repairStarted(e,"execution_contract",1,errorMessage(a))),y=await runAdapterOnce(e,t,o,p,m,w,d),y=await i({...e,request:o,result:y,recoveryPolicy:d,workspace:e.input.workspace,toolGateway:e.input.toolGateway,runAdapter:r=>runAdapterOnce(e,t,r,p,m,w,d),runRecoveredToolCall:(t,r)=>runRecoveredToolCall(e,t,r)}),y=await s(createQualityRuntimeInput(e,p,m,w,d),o,y,l),assertRequestExecutionContract(e,y),e.emit(repairCompleted(e,"execution_contract","retried",1,errorMessage(a)))}const g=u({store:e.store,emit:e.emit,requestId:e.requestId,sessionId:e.sessionId,agent:e.agent,result:y,artifacts:e.input.artifacts});return await e.capabilities.afterAdapterResponse({...createCapabilityContext(e),result:y,response:g}),g}({...t,adapter:y,requestId:p,sessionId:d,agent:w})}catch(e){return c({store:t.store,emit:t.emit,requestId:p,sessionId:d,agent:w,error:e})}}({input:M,capabilities:T,store:G,emit:emit,request:t,toolFailureTracker:O}),subscribe:e=>(q.add(e),()=>q.delete(e)),...I({workspace:t.workspace,store:G,artifacts:t.artifacts,approvals:t.approvals,emit:emit}),...p({store:G,emit:emit}),...w({runtimeStore:G,store:S,emit:emit}),...y({runtimeStore:G,emit:emit}),...k({memory:t.memory}),cancel(e,t){const r=G.getRun(e);r&&"running"===r.state&&(G.updateRun(e,{state:"cancelled",completedAt:(new Date).toISOString()}),emit({type:"runtime.request.cancelled",requestId:e,sessionId:r.sessionId,agentId:r.agentId,reason:t}))},async stop(){await T.stop(),q.clear()}}}function runRecoveredToolCall(e,t,r){return m({gateway:e.input.toolGateway,workspace:e.input.workspace,emit:e.emit,request:{...e.request,toolCall:{toolId:t,args:r}},requestId:e.requestId,sessionId:e.sessionId,agent:e.agent,toolFailureTracker:e.input.toolFailureTracker,toolGuardrails:e.input.toolGuardrails,events:e.store.getRun(e.requestId)?.events??[]})}function createCapabilityContext(e){return{workspace:e.input.workspace,store:e.store,emit:e.emit,request:e.request,requestId:e.requestId,sessionId:e.sessionId,agent:e.agent}}function createQualityRuntimeInput(e,t,r,a,o){return{workspace:e.input.workspace,agent:e.agent,request:e.request,requestId:e.requestId,sessionId:e.sessionId,events:e.store.getRun(e.requestId)?.events??[],emit:e.emit,getEvents:()=>e.store.getRun(e.requestId)?.events??[],runAdapter:s=>runAdapterOnce(e,e.adapter,s,t,r,a,o),reviewModel:e.input.qualityReviewModel,executionEvaluatorRules:e.input.executionEvaluatorRules,memory:t,pluginMemories:r}}function assertRequestExecutionContract(e,r){t({store:e.store,emit:e.emit,requestId:e.requestId,sessionId:e.sessionId,agent:e.agent,output:r.text,metadata:e.request.metadata})}async function runAdapterOnce(e,t,r,a,o,s,n){return q(await t.run({workspace:{...e.input.workspace,runtime:n},agent:e.agent,request:r,requestId:e.requestId,sessionId:e.sessionId,memory:a,pluginMemories:o,toolGateway:e.input.toolGateway,toolFailureTracker:e.input.toolFailureTracker,toolGuardrails:e.input.toolGuardrails,executionEvaluatorRules:e.input.executionEvaluatorRules,requestState:s,getEvents:()=>e.store.getRun(e.requestId)?.events??[],emit:e.emit}))}function repairStarted(e,t,r,a){return{type:"runtime.repair.started",requestId:e.requestId,sessionId:e.sessionId,agentId:e.agent.id,layer:t,attempt:r,reason:a}}function repairCompleted(e,t,r,a,o){return{type:"runtime.repair.completed",requestId:e.requestId,sessionId:e.sessionId,agentId:e.agent.id,layer:t,outcome:r,attempt:a,reason:o}}function errorMessage(e){return e instanceof Error?e.message:String(e)}
|
|
@@ -4,7 +4,7 @@ export type PlanTodoItem = {
|
|
|
4
4
|
status: string;
|
|
5
5
|
};
|
|
6
6
|
export type RuntimeTraceEntry = {
|
|
7
|
-
type: "request" | "tool" | "workflow" | "spec" | "adapter" | "memory" | "artifact" | "progress" | "plan" | "delegation";
|
|
7
|
+
type: "request" | "tool" | "workflow" | "spec" | "adapter" | "memory" | "artifact" | "progress" | "plan" | "delegation" | "quality";
|
|
8
8
|
label: string;
|
|
9
9
|
agentId: string;
|
|
10
10
|
requestId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function createDelegationTraceProjection(t,e={}){return{traceType:"delegation",traceLabel:t,...e}}export function createPlanTraceProjection(t,e={}){return{traceType:"plan",traceLabel:t,...e}}export function projectRuntimeTrace(t){return t.events.map(projectEvent).filter(isTraceEntry)}export function projectRuntimeTraceSpans(t){const e=function createSpanBuilder(t){const e=`run:${t.requestId}`,r=[],o=new Map;return{ensureRoot(){if(o.has(e))return;const n={spanId:e,requestId:t.requestId,sessionId:t.sessionId,agentId:t.agentId,kind:"run",name:t.agentId,status:(a=t.state,"completed"===a?"completed":"failed"===a?"failed":"cancelled"===a?"blocked":"running"),startedAt:t.startedAt,completedAt:t.completedAt,startEventIndex:0,...t.parentRunId?{parentSpanId:`run:${t.parentRunId}`}:{},events:[]};var a;r.push(n),o.set(e,n)},markRoot(t,r,n,a){const i=o.get(e);i&&(addEvent(i,t,r),i.status=n,i.attributes=merge(i.attributes,a),"running"!==n&&close(i,t,r))},start(t,n,a,i,s,d){const p=createSpan(`${e}/${t}:${s}`,e,n,a,i,s,d);r.push(p),o.set(t,p)},complete(t,n,a,i){const s=o.get(t)??createSpan(`${e}/${t}:${a}`,e,"adapter",t,n,a);return o.has(t)||r.push(s),addEvent(s,n,a),s.attributes=merge(s.attributes,i),close(s,n,a),o.delete(t),s},fail(t,e,r,o){this.complete(t,e,r,o).status="failed"},event(t,o,n,a,i){const s=createSpan(`${e}/event:${a}`,e,t,o,n,a,i);s.status=function readBlockedStatus(t){return t.type.endsWith(".blocked")||t.type.includes(".approval.")?"blocked":void 0}(n)??"event",close(s,n,a),r.push(s)},closeRoot(){const r=o.get(e);r&&t.completedAt&&(r.completedAt=t.completedAt)},spans:()=>r}}(t);return e.ensureRoot(),t.events.forEach((t,r)=>function projectSpanEvent(t,e,r){return e.type.startsWith("runtime.request.")?function projectRequestSpanEvent(t,e,r){return"runtime.request.started"===e.type?t.markRoot(e,r,"running",{input:e.input}):"runtime.request.completed"===e.type?t.markRoot(e,r,"completed",{output:e.output}):"runtime.request.failed"===e.type?t.markRoot(e,r,"failed",{error:e.error}):"runtime.request.cancelled"===e.type?t.markRoot(e,r,"blocked",{reason:e.reason}):"runtime.execution.contract.failed"===e.type?projectSingleSpan(t,e,r,"quality",e.type,{reason:e.reason,missingEvidenceTools:e.missingEvidenceTools}):void 0}(t,e,r):"runtime.tool.direct.started"===e.type?t.start(`tool:${e.toolId}`,"tool",e.toolId,e,r,{toolId:e.toolId}):"runtime.tool.direct.completed"===e.type?t.complete(`tool:${e.toolId}`,e,r,{toolId:e.toolId,output:e.output}):"runtime.workflow.started"===e.type?t.start(`workflow:${e.workflowId}`,"workflow",e.workflowId,e,r,{workflowId:e.workflowId,adapter:e.adapter}):"runtime.workflow.completed"===e.type?t.complete(`workflow:${e.workflowId}`,e,r,{workflowId:e.workflowId,adapter:e.adapter}):e.type.startsWith("runtime.approval.")||e.type.startsWith("runtime.memory.approval.")?projectSingleSpan(t,e,r,"approval",e.type):e.type.startsWith("runtime.specDriven.phase.")?projectSingleSpan(t,e,r,"spec",function readPhaseName(t,e){return"phaseId"in t&&"string"==typeof t.phaseId?t.phaseId:e}(e,"phase")):e.type.startsWith("runtime.memory.")?projectSingleSpan(t,e,r,"memory",e.type):e.type.startsWith("runtime.quality.")?projectSingleSpan(t,e,r,"quality",e.type):e.type.startsWith("runtime.repair.")?projectSingleSpan(t,e,r,"adapter",e.type):"runtime.artifact.created"===e.type?projectSingleSpan(t,e,r,"artifact",e.artifact.id,{artifact:e.artifact}):"runtime.progress.narration"===e.type?projectSingleSpan(t,e,r,"progress",e.message,{provider:e.provider}):"runtime.adapter.event"===e.type?function projectAdapterSpanEvent(t,e,r){const o=isRecord(e.event)?e.event:void 0,n=readString(o?.phase)??"runtime.adapter.event",a=readTraceType(o?.traceType),i=readString(o?.traceLabel);return"delegation"===a&&i?.endsWith(".start")?t.start(delegationKey(o),"delegation",readString(o?.subagentType)??i,e,r,o):"delegation"===a&&i?.endsWith(".completed")?t.complete(delegationKey(o),e,r,o):"plan"===a&&i?projectSingleSpan(t,e,r,"plan",i,o):function isToolStartEvent(t){return"deepagents.tool_execution.start"===t?.eventType||"agent.tool.start"===t?.phase}(o)?t.start(`agent-tool:${readString(o?.toolId)??"unknown"}`,"tool",readString(o?.toolId)??n,e,r,o):function isToolResultEvent(t){return"deepagents.tool_execution.result"===t?.eventType||"agent.tool.result"===t?.phase}(o)?t.complete(`agent-tool:${readString(o?.toolId)??"unknown"}`,e,r,o):projectSingleSpan(t,e,r,"adapter",n,o)}(t,e,r):"runtime.inventory.repair"===e.type?projectSingleSpan(t,e,r,"adapter","runtime.inventory.repair",{status:e.status,...e.diagnostic}):"runtime.sandbox.decision"===e.type?projectSingleSpan(t,e,r,"tool",`sandbox:${e.toolId}`,{toolId:e.toolId,...e.decision}):"runtime.tool.failure"===e.type?t.fail(`tool:${e.toolId}`,e,r,{toolId:e.toolId,...e.failure}):"runtime.tool.circuit.opened"===e.type?projectSingleSpan(t,e,r,"tool",`circuit:${e.toolId}`,{toolId:e.toolId,reason:e.reason}):void 0}(e,t,r)),e.closeRoot(),e.spans()}export function projectEvent(t){return"runtime.request.started"===t.type||"runtime.request.completed"===t.type||"runtime.request.failed"===t.type?base(t,"request",t.type):"runtime.request.cancelled"===t.type?base(t,"request",t.type,{reason:t.reason}):"runtime.execution.contract.failed"===t.type?base(t,"request",t.type,{reason:t.reason,missingEvidenceTools:t.missingEvidenceTools}):"runtime.inventory.repair"===t.type?base(t,"adapter","runtime.inventory.repair",{status:t.status,...t.diagnostic}):"runtime.repair.started"===t.type||"runtime.repair.completed"===t.type?base(t,"adapter",t.type,{layer:t.layer,..."outcome"in t?{outcome:t.outcome}:{},..."attempt"in t?{attempt:t.attempt}:{},..."reason"in t?{reason:t.reason}:{},...t.diagnostics?{diagnostics:t.diagnostics}:{}}):"runtime.tool.direct.started"===t.type?base(t,"tool","runtime.tool.direct.started",{toolId:t.toolId}):"runtime.tool.direct.completed"===t.type?base(t,"tool","runtime.tool.direct.completed",{toolId:t.toolId,...outputTraceDetail(t.output)}):"runtime.sandbox.decision"===t.type?base(t,"tool","runtime.sandbox.decision",{toolId:t.toolId,...t.decision}):"runtime.tool.failure"===t.type?base(t,"tool","runtime.tool.failure",{toolId:t.toolId,...t.failure}):"runtime.tool.circuit.opened"===t.type?base(t,"tool","runtime.tool.circuit.opened",{toolId:t.toolId,reason:t.reason}):"runtime.workflow.started"===t.type||"runtime.workflow.completed"===t.type?base(t,"workflow",t.type,{workflowId:t.workflowId,adapter:t.adapter}):function isSpecDrivenPhaseEvent(t){return t.type.startsWith("runtime.specDriven.phase.")}(t)?base(t,"spec",t.type,{phaseId:t.phaseId,..."workflowId"in t&&t.workflowId?{workflowId:t.workflowId}:{},..."reason"in t?{reason:t.reason}:{},..."artifact"in t&&t.artifact?{artifact:t.artifact}:{}}):"runtime.adapter.event"===t.type?function adapterTrace(t){const e=t.event;if(isRecord(e)&&"string"==typeof e.phase){const r=function semanticAdapterTrace(t,e){if("inventory.repair"===e.phase)return base(t,"adapter","runtime.inventory.repair",{status:e.status,...isRecord(e.diagnostic)?e.diagnostic:{}});const r=readTraceType(e.traceType),o=readString(e.traceLabel);return r&&o?base(t,r,o,e):void 0}(t,e);return r||base(t,"adapter",e.phase.startsWith("agent.")?e.phase:`adapter.${e.phase}`,e)}return base(t,"adapter","runtime.adapter.event",{event:e})}(t):"runtime.artifact.created"===t.type?base(t,"artifact","runtime.artifact.created",{artifact:t.artifact}):t.type.startsWith("runtime.memory.")?base(t,"memory",t.type):"runtime.progress.narration"===t.type?base(t,"progress",t.type,{message:t.message,provider:t.provider,sourceEventTypes:t.sourceEventTypes}):void 0}export function readPlanTodos(t){const e=function readPlanRecord(t){if(isRecord(t))return t;if("string"==typeof t)try{const e=JSON.parse(t);return isRecord(e)?e:void 0}catch{return}}(t),r=function readTodosArray(t){const e=isRecord(t?.args)?t.args:void 0;return Array.isArray(t?.todos)?t.todos:Array.isArray(e?.todos)?e.todos:[]}(e);return r.map(readTodo).filter(isPlanTodoItem)}function readTodo(t){if(isRecord(t)&&"string"==typeof t.content)return{content:t.content,status:"string"==typeof t.status?t.status:"pending"}}function isPlanTodoItem(t){return void 0!==t}function base(t,e,r,o){return{type:e,label:r,agentId:t.agentId,requestId:t.requestId,detail:o}}function isTraceEntry(t){return void 0!==t}function outputTraceDetail(t){const e="string"==typeof t?t:function serializeOutput(t){try{return void 0===t?"":JSON.stringify(t)}catch{return String(t)}}(t),r=e.slice(0,1200);return{outputType:Array.isArray(t)?"array":null===t?"null":typeof t,outputLength:e.length,outputPreview:r,...e.length>r.length?{outputTail:e.slice(-1200)}:{}}}function projectSingleSpan(t,e,r,o,n,a){return t.event(o,n,e,r,a)}function delegationKey(t){return`delegation:${readString(t?.subagentType)??readString(t?.toolId)??"task"}`}function createSpan(t,e,r,o,n,a,i){const s={spanId:t,parentSpanId:e,requestId:n.requestId,sessionId:n.sessionId,agentId:n.agentId,kind:r,name:o,status:"running",startedAt:n.emittedAt,startEventIndex:a,attributes:i,events:[]};return addEvent(s,n,a),s}function addEvent(t,e,r){t.events.push({index:r,eventId:e.eventId??`${e.requestId}:${r}`,type:e.type,emittedAt:e.emittedAt})}function close(t,e,r){t.status="failed"===t.status||"blocked"===t.status?t.status:"completed",t.completedAt=e.emittedAt,t.endEventIndex=r,t.durationMs=function durationMs(t,e){if(!t||!e)return;const r=Date.parse(e)-Date.parse(t);return Number.isFinite(r)&&r>=0?r:void 0}(t.startedAt,t.completedAt)}function merge(t,e){return e?{...t,...e}:t}function isRecord(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function readTraceType(t){const e=readString(t);return"request"===e||"tool"===e||"workflow"===e||"spec"===e||"adapter"===e||"memory"===e||"artifact"===e||"progress"===e||"plan"===e||"delegation"===e?e:void 0}function readString(t){return"string"==typeof t&&t.trim()?t:void 0}
|
|
1
|
+
export function createDelegationTraceProjection(t,e={}){return{traceType:"delegation",traceLabel:t,...e}}export function createPlanTraceProjection(t,e={}){return{traceType:"plan",traceLabel:t,...e}}export function projectRuntimeTrace(t){return t.events.map(projectEvent).filter(isTraceEntry)}export function projectRuntimeTraceSpans(t){const e=function createSpanBuilder(t){const e=`run:${t.requestId}`,r=[],n=new Map;return{ensureRoot(){if(n.has(e))return;const o={spanId:e,requestId:t.requestId,sessionId:t.sessionId,agentId:t.agentId,kind:"run",name:t.agentId,status:(a=t.state,"completed"===a?"completed":"failed"===a?"failed":"cancelled"===a?"blocked":"running"),startedAt:t.startedAt,completedAt:t.completedAt,startEventIndex:0,...t.parentRunId?{parentSpanId:`run:${t.parentRunId}`}:{},events:[]};var a;r.push(o),n.set(e,o)},markRoot(t,r,o,a){const i=n.get(e);i&&(addEvent(i,t,r),i.status=o,i.attributes=merge(i.attributes,a),"running"!==o&&close(i,t,r))},start(t,o,a,i,s,p){const d=createSpan(`${e}/${t}:${s}`,e,o,a,i,s,p);r.push(d),n.set(t,d)},complete(t,o,a,i){const s=n.get(t)??createSpan(`${e}/${t}:${a}`,e,"adapter",t,o,a);return n.has(t)||r.push(s),addEvent(s,o,a),s.attributes=merge(s.attributes,i),close(s,o,a),n.delete(t),s},fail(t,e,r,n){this.complete(t,e,r,n).status="failed"},event(t,n,o,a,i){const s=createSpan(`${e}/event:${a}`,e,t,n,o,a,i);s.status=function readBlockedStatus(t){return t.type.endsWith(".blocked")||t.type.includes(".approval.")?"blocked":void 0}(o)??"event",close(s,o,a),r.push(s)},closeRoot(){const r=n.get(e);r&&t.completedAt&&(r.completedAt=t.completedAt)},spans:()=>r}}(t);return e.ensureRoot(),t.events.forEach((t,r)=>function projectSpanEvent(t,e,r){return e.type.startsWith("runtime.request.")?function projectRequestSpanEvent(t,e,r){return"runtime.request.started"===e.type?t.markRoot(e,r,"running",{input:e.input}):"runtime.request.completed"===e.type?t.markRoot(e,r,"completed",{output:e.output}):"runtime.request.failed"===e.type?t.markRoot(e,r,"failed",{error:e.error}):"runtime.request.cancelled"===e.type?t.markRoot(e,r,"blocked",{reason:e.reason}):"runtime.execution.contract.failed"===e.type?projectSingleSpan(t,e,r,"quality",e.type,{reason:e.reason,missingEvidenceTools:e.missingEvidenceTools}):void 0}(t,e,r):"runtime.tool.direct.started"===e.type?t.start(`tool:${e.toolId}`,"tool",e.toolId,e,r,{toolId:e.toolId}):"runtime.tool.direct.completed"===e.type?t.complete(`tool:${e.toolId}`,e,r,{toolId:e.toolId,output:e.output}):"runtime.workflow.started"===e.type?t.start(`workflow:${e.workflowId}`,"workflow",e.workflowId,e,r,{workflowId:e.workflowId,adapter:e.adapter}):"runtime.workflow.completed"===e.type?t.complete(`workflow:${e.workflowId}`,e,r,{workflowId:e.workflowId,adapter:e.adapter}):e.type.startsWith("runtime.approval.")||e.type.startsWith("runtime.memory.approval.")?projectSingleSpan(t,e,r,"approval",e.type):e.type.startsWith("runtime.specDriven.phase.")?projectSingleSpan(t,e,r,"spec",function readPhaseName(t,e){return"phaseId"in t&&"string"==typeof t.phaseId?t.phaseId:e}(e,"phase")):e.type.startsWith("runtime.memory.")?projectSingleSpan(t,e,r,"memory",e.type):e.type.startsWith("runtime.quality.")?projectSingleSpan(t,e,r,"quality",e.type):"runtime.failure.classified"===e.type?projectSingleSpan(t,e,r,"quality",e.type,e.classification):e.type.startsWith("runtime.improvement.")||e.type.startsWith("runtime.verification.")?projectSingleSpan(t,e,r,"quality",e.type):e.type.startsWith("runtime.context.")?projectSingleSpan(t,e,r,"artifact",e.type):e.type.startsWith("runtime.repair.")?projectSingleSpan(t,e,r,"adapter",e.type):"runtime.artifact.created"===e.type?projectSingleSpan(t,e,r,"artifact",e.artifact.id,{artifact:e.artifact}):"runtime.progress.narration"===e.type?projectSingleSpan(t,e,r,"progress",e.message,{provider:e.provider}):"runtime.adapter.event"===e.type?function projectAdapterSpanEvent(t,e,r){const n=isRecord(e.event)?e.event:void 0,o=readString(n?.phase)??"runtime.adapter.event",a=readTraceType(n?.traceType),i=readString(n?.traceLabel);return"delegation"===a&&i?.endsWith(".start")?t.start(delegationKey(n),"delegation",readString(n?.subagentType)??i,e,r,n):"delegation"===a&&i?.endsWith(".completed")?t.complete(delegationKey(n),e,r,n):"plan"===a&&i?projectSingleSpan(t,e,r,"plan",i,n):function isToolStartEvent(t){return"deepagents.tool_execution.start"===t?.eventType||"agent.tool.start"===t?.phase}(n)?t.start(`agent-tool:${readString(n?.toolId)??"unknown"}`,"tool",readString(n?.toolId)??o,e,r,n):function isToolResultEvent(t){return"deepagents.tool_execution.result"===t?.eventType||"agent.tool.result"===t?.phase}(n)?t.complete(`agent-tool:${readString(n?.toolId)??"unknown"}`,e,r,n):projectSingleSpan(t,e,r,"adapter",o,n)}(t,e,r):"runtime.inventory.repair"===e.type?projectSingleSpan(t,e,r,"adapter","runtime.inventory.repair",{status:e.status,...e.diagnostic}):"runtime.sandbox.decision"===e.type?projectSingleSpan(t,e,r,"tool",`sandbox:${e.toolId}`,{toolId:e.toolId,...e.decision}):"runtime.tool.failure"===e.type?t.fail(`tool:${e.toolId}`,e,r,{toolId:e.toolId,...e.failure}):"runtime.tool.circuit.opened"===e.type?projectSingleSpan(t,e,r,"tool",`circuit:${e.toolId}`,{toolId:e.toolId,reason:e.reason}):void 0}(e,t,r)),e.closeRoot(),e.spans()}export function projectEvent(t){return"runtime.request.started"===t.type||"runtime.request.completed"===t.type||"runtime.request.failed"===t.type?base(t,"request",t.type):"runtime.request.cancelled"===t.type?base(t,"request",t.type,{reason:t.reason}):"runtime.failure.classified"===t.type?base(t,"quality",t.type,t.classification):"runtime.execution.contract.failed"===t.type?base(t,"request",t.type,{reason:t.reason,missingEvidenceTools:t.missingEvidenceTools}):"runtime.inventory.repair"===t.type?base(t,"adapter","runtime.inventory.repair",{status:t.status,...t.diagnostic}):"runtime.repair.started"===t.type||"runtime.repair.completed"===t.type?base(t,"adapter",t.type,{layer:t.layer,..."outcome"in t?{outcome:t.outcome}:{},..."attempt"in t?{attempt:t.attempt}:{},..."reason"in t?{reason:t.reason}:{},...t.diagnostics?{diagnostics:t.diagnostics}:{}}):"runtime.tool.direct.started"===t.type?base(t,"tool","runtime.tool.direct.started",{toolId:t.toolId}):"runtime.tool.direct.completed"===t.type?base(t,"tool","runtime.tool.direct.completed",{toolId:t.toolId,...outputTraceDetail(t.output)}):"runtime.sandbox.decision"===t.type?base(t,"tool","runtime.sandbox.decision",{toolId:t.toolId,...t.decision}):"runtime.tool.failure"===t.type?base(t,"tool","runtime.tool.failure",{toolId:t.toolId,...t.failure}):"runtime.tool.circuit.opened"===t.type?base(t,"tool","runtime.tool.circuit.opened",{toolId:t.toolId,reason:t.reason}):"runtime.workflow.started"===t.type||"runtime.workflow.completed"===t.type?base(t,"workflow",t.type,{workflowId:t.workflowId,adapter:t.adapter}):function isSpecDrivenPhaseEvent(t){return t.type.startsWith("runtime.specDriven.phase.")}(t)?base(t,"spec",t.type,{phaseId:t.phaseId,..."workflowId"in t&&t.workflowId?{workflowId:t.workflowId}:{},..."reason"in t?{reason:t.reason}:{},..."artifact"in t&&t.artifact?{artifact:t.artifact}:{}}):"runtime.adapter.event"===t.type?function adapterTrace(t){const e=t.event;if(isRecord(e)&&"string"==typeof e.phase){const r=function semanticAdapterTrace(t,e){if("inventory.repair"===e.phase)return base(t,"adapter","runtime.inventory.repair",{status:e.status,...isRecord(e.diagnostic)?e.diagnostic:{}});const r=readTraceType(e.traceType),n=readString(e.traceLabel);return r&&n?base(t,r,n,e):void 0}(t,e);return r||base(t,"adapter",e.phase.startsWith("agent.")?e.phase:`adapter.${e.phase}`,e)}return base(t,"adapter","runtime.adapter.event",{event:e})}(t):"runtime.artifact.created"===t.type?base(t,"artifact","runtime.artifact.created",{artifact:t.artifact}):t.type.startsWith("runtime.memory.")?base(t,"memory",t.type):t.type.startsWith("runtime.improvement.")||t.type.startsWith("runtime.verification.")?base(t,"quality",t.type):t.type.startsWith("runtime.context.")?base(t,"artifact",t.type):"runtime.progress.narration"===t.type?base(t,"progress",t.type,{message:t.message,provider:t.provider,sourceEventTypes:t.sourceEventTypes}):void 0}export function readPlanTodos(t){const e=function readPlanRecord(t){if(isRecord(t))return t;if("string"==typeof t)try{const e=JSON.parse(t);return isRecord(e)?e:void 0}catch{return}}(t),r=function readTodosArray(t){const e=isRecord(t?.args)?t.args:void 0;return Array.isArray(t?.todos)?t.todos:Array.isArray(e?.todos)?e.todos:[]}(e);return r.map(readTodo).filter(isPlanTodoItem)}function readTodo(t){if(isRecord(t)&&"string"==typeof t.content)return{content:t.content,status:"string"==typeof t.status?t.status:"pending"}}function isPlanTodoItem(t){return void 0!==t}function base(t,e,r,n){return{type:e,label:r,agentId:t.agentId,requestId:t.requestId,detail:n}}function isTraceEntry(t){return void 0!==t}function outputTraceDetail(t){const e="string"==typeof t?t:function serializeOutput(t){try{return void 0===t?"":JSON.stringify(t)}catch{return String(t)}}(t),r=e.slice(0,1200);return{outputType:Array.isArray(t)?"array":null===t?"null":typeof t,outputLength:e.length,outputPreview:r,...e.length>r.length?{outputTail:e.slice(-1200)}:{}}}function projectSingleSpan(t,e,r,n,o,a){return t.event(n,o,e,r,a)}function delegationKey(t){return`delegation:${readString(t?.subagentType)??readString(t?.toolId)??"task"}`}function createSpan(t,e,r,n,o,a,i){const s={spanId:t,parentSpanId:e,requestId:o.requestId,sessionId:o.sessionId,agentId:o.agentId,kind:r,name:n,status:"running",startedAt:o.emittedAt,startEventIndex:a,attributes:i,events:[]};return addEvent(s,o,a),s}function addEvent(t,e,r){t.events.push({index:r,eventId:e.eventId??`${e.requestId}:${r}`,type:e.type,emittedAt:e.emittedAt})}function close(t,e,r){t.status="failed"===t.status||"blocked"===t.status?t.status:"completed",t.completedAt=e.emittedAt,t.endEventIndex=r,t.durationMs=function durationMs(t,e){if(!t||!e)return;const r=Date.parse(e)-Date.parse(t);return Number.isFinite(r)&&r>=0?r:void 0}(t.startedAt,t.completedAt)}function merge(t,e){return e?{...t,...e}:t}function isRecord(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function readTraceType(t){const e=readString(t);return"request"===e||"tool"===e||"workflow"===e||"spec"===e||"adapter"===e||"memory"===e||"artifact"===e||"progress"===e||"plan"===e||"delegation"===e?e:void 0}function readString(t){return"string"==typeof t&&t.trim()?t:void 0}
|
|
@@ -6,10 +6,11 @@ import type { RuntimeEvent, RuntimeEventListener, RuntimeEmit } from "./runtime/
|
|
|
6
6
|
import type { RuntimeToolFailureTracker } from "./runtime/tool-failure.js";
|
|
7
7
|
import type { ToolGuardrail } from "./runtime/policy/tool-invocation.js";
|
|
8
8
|
import type { ExecutionEvaluatorRule } from "./quality/execution-review.js";
|
|
9
|
+
import type { RuntimeImprovementProposal, RuntimeImprovementProposalFilter, RuntimeImprovementProposalInput, RuntimeImprovementReviewInput, RuntimeFailureClassificationInput, RuntimeVerificationHookResultInput, RuntimeContextOffloadInput, RuntimeContextCompactionInput } from "./runtime/improvement/types.js";
|
|
9
10
|
import type { RuntimeArtifact, RuntimeArtifactFilter, RuntimeArtifactImportInput, RuntimeArtifactRecord, RuntimeOutput, RuntimeRecordState, RuntimeRequest, RuntimeResponse, RuntimeReplayBundle, RuntimeDeletionResult, RuntimeRunFilter, RuntimeRunRecord } from "./runtime/types.js";
|
|
10
11
|
import type { RuntimeToolGateway } from "./runtime/tool-gateway.js";
|
|
11
12
|
import type { CompiledWorkspace, WorkspaceAgent, WorkspaceRuntimePolicy } from "./workspace/types.js";
|
|
12
|
-
export type {
|
|
13
|
+
export type { RuntimeEmit, RuntimeEvent, RuntimeEventListener, RuntimeFailureCategory, RuntimeFailureClassification, RuntimeFailureEvidenceReference, RuntimeMemoryHook, } from "./runtime/events.js";
|
|
13
14
|
export type { BoundaryScanFinding, BoundaryScanLayer, BoundaryScanLayerResult, BoundaryScanResource, BoundaryScanResult } from "./boundary-scan.js";
|
|
14
15
|
export type { RuntimeCapabilityContext, RuntimeCapabilityModule, RuntimeCapabilityRegistry, RuntimeCapabilityState } from "./runtime/capabilities.js";
|
|
15
16
|
export type { RuntimeProgressNarrationOptions, RuntimeProgressNarrationProvider } from "./runtime/progress-narration.js";
|
|
@@ -20,6 +21,7 @@ export type { WorkspaceEvaluation, WorkspaceEvaluationCase, } from "./evaluation
|
|
|
20
21
|
export type { SpecDrivenPhaseId, SpecDrivenPhaseRecord, SpecDrivenPhaseStatus, SpecDrivenPhaseTransition, SpecDrivenWorkflowState, WorkspaceSpecDrivenPhase, WorkspaceSpecDrivenWorkflowPolicy, } from "./spec-driven/index.js";
|
|
21
22
|
export type { RuntimeToolCallRequest, RuntimeToolGateway, RuntimeToolGatewayContext, RuntimeToolRepairModel, RuntimeToolGatewayTool, RuntimeSandboxDecision, RuntimeSandboxPolicy, RuntimeSandboxPolicyInput, } from "./runtime/tool-gateway.js";
|
|
22
23
|
export type { RuntimeToolFailureClassification, RuntimeToolFailureKind, RuntimeToolFailurePolicy, RuntimeToolFailureReason, RuntimeToolFailureTracker, } from "./runtime/tool-failure.js";
|
|
24
|
+
export type { RuntimeContextImprovement, RuntimeContextCompactionInput, RuntimeContextOffloadInput, RuntimeFailureClassificationInput, RuntimeImprovementApplication, RuntimeImprovementOwner, RuntimeImprovementProposal, RuntimeImprovementProposalFilter, RuntimeImprovementProposalInput, RuntimeImprovementReviewInput, RuntimeImprovementStatus, RuntimeImprovementStore, RuntimeImprovementTarget, RuntimeMemoryImprovement, RuntimePolicyImprovement, RuntimeVerificationImprovement, RuntimeVerificationHookResultInput, } from "./runtime/improvement/types.js";
|
|
23
25
|
export type RuntimeAdapterContext = {
|
|
24
26
|
workspace: CompiledWorkspace;
|
|
25
27
|
agent: WorkspaceAgent;
|
|
@@ -142,6 +144,15 @@ export type RuntimeInspector = {
|
|
|
142
144
|
listApprovals(status?: ApprovalRequestStatus): Promise<ApprovalRequest[]>;
|
|
143
145
|
getApproval(id: string): Promise<ApprovalRequest | undefined>;
|
|
144
146
|
resolveApproval(id: string, status: Exclude<ApprovalRequestStatus, "pending">): Promise<ApprovalRequest | undefined>;
|
|
147
|
+
classifyRunFailure(input: RuntimeFailureClassificationInput): RuntimeImprovementProposal | undefined;
|
|
148
|
+
createImprovementProposal(input: RuntimeImprovementProposalInput): RuntimeImprovementProposal;
|
|
149
|
+
listImprovementProposals(filter?: RuntimeImprovementProposalFilter): RuntimeImprovementProposal[];
|
|
150
|
+
getImprovementProposal(id: string): RuntimeImprovementProposal | undefined;
|
|
151
|
+
reviewImprovementProposal(input: RuntimeImprovementReviewInput): RuntimeImprovementProposal | undefined;
|
|
152
|
+
applyImprovementProposal(id: string): RuntimeImprovementProposal | undefined;
|
|
153
|
+
recordVerificationHookResult(input: RuntimeVerificationHookResultInput): boolean;
|
|
154
|
+
recordContextOffload(input: RuntimeContextOffloadInput): boolean;
|
|
155
|
+
recordContextCompaction(input: RuntimeContextCompactionInput): boolean;
|
|
145
156
|
};
|
|
146
157
|
export type RuntimeLifecycle = {
|
|
147
158
|
cancel(requestId: string, reason?: string): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.125",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
".": "./dist/index.js"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"@stable-harness/governance": "0.0.
|
|
16
|
-
"@stable-harness/memory": "0.0.
|
|
15
|
+
"@stable-harness/governance": "0.0.125",
|
|
16
|
+
"@stable-harness/memory": "0.0.125"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/evaluation",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.125",
|
|
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.125"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export function createInProcessClient(e){return{request:t=>e.request(t),subscribe:t=>e.subscribe(t),inspect:()=>e.inspect(),getRuntimePolicy:()=>e.getRuntimePolicy(),getWorkflow:t=>e.getWorkflow(t),getRun:t=>e.getRun(t),listArtifacts:t=>e.listArtifacts(t),getArtifact:t=>e.getArtifact(t),readArtifact:t=>e.readArtifact(t),importArtifact:t=>e.importArtifact(t),exportReplayBundle:t=>e.exportReplayBundle(t),listRequests:t=>e.listRequests(t),listSessions:()=>e.listSessions(),inspectRequest:t=>e.inspectRequest(t),memorize:t=>e.memorize(t),recallMemories:t=>e.recallMemories(t),listMemories:t=>e.listMemories(t),updateMemory:t=>e.updateMemory(t),archiveMemory:(t,
|
|
1
|
+
export function createInProcessClient(e){return{request:t=>e.request(t),subscribe:t=>e.subscribe(t),inspect:()=>e.inspect(),getRuntimePolicy:()=>e.getRuntimePolicy(),getWorkflow:t=>e.getWorkflow(t),getRun:t=>e.getRun(t),listArtifacts:t=>e.listArtifacts(t),getArtifact:t=>e.getArtifact(t),readArtifact:t=>e.readArtifact(t),importArtifact:t=>e.importArtifact(t),exportReplayBundle:t=>e.exportReplayBundle(t),listRequests:t=>e.listRequests(t),listSessions:()=>e.listSessions(),inspectRequest:t=>e.inspectRequest(t),memorize:t=>e.memorize(t),recallMemories:t=>e.recallMemories(t),listMemories:t=>e.listMemories(t),updateMemory:t=>e.updateMemory(t),archiveMemory:(t,r)=>e.archiveMemory(t,r),listApprovals:t=>e.listApprovals(t),getApproval:t=>e.getApproval(t),resolveApproval:(t,r)=>e.resolveApproval(t,r),...createImprovementClient(e),cancel:(t,r)=>e.cancel(t,r),deleteRequest:t=>e.deleteRequest(t),deleteSession:t=>e.deleteSession(t),stop:()=>e.stop()}}function createImprovementClient(e){return{classifyRunFailure:t=>e.classifyRunFailure(t),createImprovementProposal:t=>e.createImprovementProposal(t),listImprovementProposals:t=>e.listImprovementProposals(t),getImprovementProposal:t=>e.getImprovementProposal(t),reviewImprovementProposal:t=>e.reviewImprovementProposal(t),applyImprovementProposal:t=>e.applyImprovementProposal(t),recordVerificationHookResult:t=>e.recordVerificationHookResult(t),recordContextOffload:t=>e.recordContextOffload(t),recordContextCompaction:t=>e.recordContextCompaction(t)}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/protocols",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.125",
|
|
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.125"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stable-harness/workspace-yaml",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.125",
|
|
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.125"
|
|
16
16
|
}
|
|
17
17
|
}
|