@harness-kernel/core 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/agent/context.d.ts +2 -3
  2. package/dist/agent/context.js +1 -1
  3. package/dist/agent/event.d.ts +3 -2
  4. package/dist/agent/event.js +6 -2
  5. package/dist/agent/hook.d.ts +3 -4
  6. package/dist/agent/hook.js +1 -1
  7. package/dist/agent/mode.d.ts +2 -3
  8. package/dist/agent/mode.js +1 -1
  9. package/dist/agent/role.js +1 -1
  10. package/dist/agent/session.d.ts +3 -4
  11. package/dist/agent/session.js +8 -2
  12. package/dist/agent/tool.d.ts +39 -3
  13. package/dist/agent/tool.js +8 -2
  14. package/dist/agent.d.ts +6 -6
  15. package/dist/{approval-D_G2w-fW.d.ts → approval-7e8HD-35.d.ts} +20 -15
  16. package/dist/chunk-2NQ3JL7K.js +502 -0
  17. package/dist/chunk-2NQ3JL7K.js.map +1 -0
  18. package/dist/{chunk-JIJHGB6H.js → chunk-3QOAFCCZ.js} +24 -2
  19. package/dist/chunk-3QOAFCCZ.js.map +1 -0
  20. package/dist/{chunk-QEVKKJ7N.js → chunk-BLLQSHQI.js} +391 -151
  21. package/dist/chunk-BLLQSHQI.js.map +1 -0
  22. package/dist/{chunk-ZU6ADDET.js → chunk-IWHCNKHK.js} +1 -1
  23. package/dist/chunk-IWHCNKHK.js.map +1 -0
  24. package/dist/chunk-NCSQEUQC.js +37 -0
  25. package/dist/chunk-NCSQEUQC.js.map +1 -0
  26. package/dist/{chunk-B4Q6CPYO.js → chunk-TCHZYK5Y.js} +3 -1
  27. package/dist/{chunk-B4Q6CPYO.js.map → chunk-TCHZYK5Y.js.map} +1 -1
  28. package/dist/{context-BfpLqV11.d.ts → context-Bz9C_rL9.d.ts} +88 -3
  29. package/dist/errors-DHHy8V3O.d.ts +6 -0
  30. package/dist/errors-hpkW3tfR.d.ts +112 -0
  31. package/dist/{event-CKV4EeZ3.d.ts → event-DMBY-R6h.d.ts} +33 -4
  32. package/dist/{hook-CfBbhUQf.d.ts → hook-DD7uuzE3.d.ts} +2 -2
  33. package/dist/index.d.ts +25 -18
  34. package/dist/index.js +20 -7
  35. package/dist/metrics-DMN8bfY6.d.ts +23 -0
  36. package/dist/{model-provider-Ch7tzk1x.d.ts → model-provider-DGkLQJWP.d.ts} +6 -4
  37. package/dist/runner/approval.d.ts +7 -7
  38. package/dist/runner/event.d.ts +3 -2
  39. package/dist/runner/event.js +6 -2
  40. package/dist/runner/logging.d.ts +7 -3
  41. package/dist/runner/logging.js +11 -1
  42. package/dist/runner/model-provider.d.ts +6 -6
  43. package/dist/runner/sandbox.d.ts +12 -2
  44. package/dist/runner/sandbox.js +1 -1
  45. package/dist/runner/storage.d.ts +181 -4
  46. package/dist/{runner-B41JEovO.d.ts → runner-BYG9ARAV.d.ts} +11 -6
  47. package/dist/runner.d.ts +9 -8
  48. package/dist/runner.js +12 -6
  49. package/package.json +2 -2
  50. package/dist/chunk-JIJHGB6H.js.map +0 -1
  51. package/dist/chunk-Q44U2CMM.js +0 -239
  52. package/dist/chunk-Q44U2CMM.js.map +0 -1
  53. package/dist/chunk-QEVKKJ7N.js.map +0 -1
  54. package/dist/chunk-ZU6ADDET.js.map +0 -1
  55. package/dist/events-D4xcDi53.d.ts +0 -69
  56. package/dist/storage-DCZE_hES.d.ts +0 -200
  57. package/dist/tool-errors-CygY1Nba.d.ts +0 -27
  58. package/dist/types-BPmsw-mF.d.ts +0 -80
@@ -34,4 +34,4 @@ export {
34
34
  NoopSandbox,
35
35
  NoopSandboxSession
36
36
  };
37
- //# sourceMappingURL=chunk-ZU6ADDET.js.map
37
+ //# sourceMappingURL=chunk-IWHCNKHK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/sandbox.ts"],"sourcesContent":["export interface HarnessSandboxOpenInput {\n sessionId: string;\n runId: string;\n agentKey: string;\n workDir: string;\n outputDir?: string;\n resources: Record<string, unknown>;\n}\n\nexport interface SandboxExecInput {\n command: string;\n cwd?: string;\n timeoutMs?: number;\n env?: Record<string, string>;\n stdin?: string;\n}\n\nexport interface SandboxExecResult {\n stdout: string;\n stderr: string;\n exitCode: number | null;\n signal?: string;\n durationMs: number;\n timedOut?: boolean;\n}\n\nexport type SandboxCloseReason = \"close\" | \"delete\";\n\nexport interface SandboxCloseInput {\n reason: SandboxCloseReason;\n}\n\nexport interface SandboxDestroyInput {\n sessionId: string;\n agentKey?: string;\n workDir?: string;\n}\n\nexport abstract class HarnessSandbox {\n abstract readonly id: string;\n label?: string;\n\n abstract open(input: HarnessSandboxOpenInput): Promise<HarnessSandboxSession> | HarnessSandboxSession;\n\n destroy?(input: SandboxDestroyInput): Promise<void> | void;\n}\n\nexport abstract class HarnessSandboxSession {\n abstract readonly id: string;\n abstract readonly workDir: string;\n\n abstract exec(input: SandboxExecInput): Promise<SandboxExecResult>;\n\n close?(input?: SandboxCloseInput): Promise<void> | void;\n}\n\nexport class NoopSandbox extends HarnessSandbox {\n readonly id = \"noop\";\n label = \"Noop\";\n\n open(input: HarnessSandboxOpenInput): HarnessSandboxSession {\n return new NoopSandboxSession(input.workDir);\n }\n}\n\nexport class NoopSandboxSession extends HarnessSandboxSession {\n readonly id = \"noop\";\n\n constructor(readonly workDir: string) {\n super();\n }\n\n async exec(input: SandboxExecInput): Promise<SandboxExecResult> {\n return {\n stdout: \"\",\n stderr: `No sandbox is configured; cannot execute: ${input.command}`,\n exitCode: 1,\n durationMs: 0,\n };\n }\n}\n"],"mappings":";AAsCO,IAAe,iBAAf,MAA8B;AAAA,EAEnC;AAKF;AAEO,IAAe,wBAAf,MAAqC;AAO5C;AAEO,IAAM,cAAN,cAA0B,eAAe;AAAA,EACrC,KAAK;AAAA,EACd,QAAQ;AAAA,EAER,KAAK,OAAuD;AAC1D,WAAO,IAAI,mBAAmB,MAAM,OAAO;AAAA,EAC7C;AACF;AAEO,IAAM,qBAAN,cAAiC,sBAAsB;AAAA,EAG5D,YAAqB,SAAiB;AACpC,UAAM;AADa;AAAA,EAErB;AAAA,EAFqB;AAAA,EAFZ,KAAK;AAAA,EAMd,MAAM,KAAK,OAAqD;AAC9D,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ,6CAA6C,MAAM,OAAO;AAAA,MAClE,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,37 @@
1
+ // src/logging/tool-errors.ts
2
+ function createToolErrorPayload(input) {
3
+ return {
4
+ ok: false,
5
+ error: {
6
+ code: input.code,
7
+ message: input.message,
8
+ toolName: input.toolName,
9
+ invalidFields: input.invalidFields,
10
+ metadata: input.metadata
11
+ }
12
+ };
13
+ }
14
+ function createToolErrorResult(input) {
15
+ return {
16
+ content: input.content ?? input.message,
17
+ data: createToolErrorPayload({
18
+ code: input.code,
19
+ message: input.message,
20
+ toolName: input.toolName,
21
+ invalidFields: input.invalidFields,
22
+ metadata: input.metadata
23
+ }),
24
+ isError: true,
25
+ metadata: {
26
+ errorCode: input.code,
27
+ ...input.invalidFields ? { invalidFields: input.invalidFields } : {},
28
+ ...input.metadata ?? {}
29
+ }
30
+ };
31
+ }
32
+
33
+ export {
34
+ createToolErrorPayload,
35
+ createToolErrorResult
36
+ };
37
+ //# sourceMappingURL=chunk-NCSQEUQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/logging/tool-errors.ts"],"sourcesContent":["import type { AgentToolResult } from \"../runtime/types/tools.js\";\nimport type { HarnessErrorCode } from \"../runtime/types/errors.js\";\n\nexport type ToolErrorCode =\n Extract<HarnessErrorCode,\n | \"tool.args.invalid_schema\"\n | \"tool.approval.denied\"\n | \"sandbox.exec.failed\"\n | \"tool.failed\">;\n\nexport interface ToolInvalidField {\n path: string;\n code?: string;\n expected?: string;\n received?: string;\n message: string;\n}\n\nexport interface ToolErrorPayload {\n ok: false;\n error: {\n code: ToolErrorCode;\n message: string;\n toolName: string;\n invalidFields?: ToolInvalidField[];\n metadata?: Record<string, unknown>;\n };\n}\n\nexport function createToolErrorPayload(input: {\n code: ToolErrorCode;\n message: string;\n toolName: string;\n invalidFields?: ToolInvalidField[];\n metadata?: Record<string, unknown>;\n}): ToolErrorPayload {\n return {\n ok: false,\n error: {\n code: input.code,\n message: input.message,\n toolName: input.toolName,\n invalidFields: input.invalidFields,\n metadata: input.metadata,\n },\n };\n}\n\nexport function createToolErrorResult(input: {\n code: ToolErrorCode;\n message: string;\n toolName: string;\n content?: string;\n invalidFields?: ToolInvalidField[];\n metadata?: Record<string, unknown>;\n}): AgentToolResult<ToolErrorPayload> {\n return {\n content: input.content ?? input.message,\n data: createToolErrorPayload({\n code: input.code,\n message: input.message,\n toolName: input.toolName,\n invalidFields: input.invalidFields,\n metadata: input.metadata,\n }),\n isError: true,\n metadata: {\n errorCode: input.code,\n ...(input.invalidFields ? { invalidFields: input.invalidFields } : {}),\n ...(input.metadata ?? {}),\n },\n };\n}\n"],"mappings":";AA6BO,SAAS,uBAAuB,OAMlB;AACnB,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,eAAe,MAAM;AAAA,MACrB,UAAU,MAAM;AAAA,IAClB;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,OAOA;AACpC,SAAO;AAAA,IACL,SAAS,MAAM,WAAW,MAAM;AAAA,IAChC,MAAM,uBAAuB;AAAA,MAC3B,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,MAChB,eAAe,MAAM;AAAA,MACrB,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IACD,SAAS;AAAA,IACT,UAAU;AAAA,MACR,WAAW,MAAM;AAAA,MACjB,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,MACpE,GAAI,MAAM,YAAY,CAAC;AAAA,IACzB;AAAA,EACF;AACF;","names":[]}
@@ -119,6 +119,7 @@ var HarnessContextProvider = class {
119
119
  label;
120
120
  priority;
121
121
  role;
122
+ required;
122
123
  get type() {
123
124
  return constructTypeOf(this);
124
125
  }
@@ -137,6 +138,7 @@ var HarnessMode = class {
137
138
  tools;
138
139
  maxTurns;
139
140
  toolApproval;
141
+ contextFailure;
140
142
  get type() {
141
143
  return constructTypeOf(this);
142
144
  }
@@ -177,4 +179,4 @@ export {
177
179
  HarnessMode,
178
180
  HarnessHook
179
181
  };
180
- //# sourceMappingURL=chunk-B4Q6CPYO.js.map
182
+ //# sourceMappingURL=chunk-TCHZYK5Y.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/types/events.ts","../src/runtime/types/naming.ts","../src/runtime/types/roles.ts","../src/runtime/types/tools.ts","../src/runtime/types/context.ts","../src/runtime/types/modes.ts","../src/runtime/types/hooks.ts"],"sourcesContent":["import type { JsonObject } from \"./json.js\";\n\nexport interface HarnessEventMetadata extends JsonObject {\n label?: string;\n}\n\nexport interface HarnessEventSource {\n kind: \"runtime\" | \"model_provider\" | \"tool\" | \"hook\" | \"context_provider\" | \"mode\" | \"user\" | \"custom\";\n id?: string;\n name?: string;\n}\n\nexport interface HarnessEventRecord<TPayload = unknown> {\n id: string;\n seq: number;\n branchId: string;\n type: string;\n eventClassId: string;\n at: string;\n source: HarnessEventSource;\n payload: TPayload;\n runId: string;\n turnId?: string;\n modeId?: string;\n correlationId?: string;\n causationId?: string;\n hidden: true;\n metadata?: HarnessEventMetadata;\n}\n\nexport abstract class HarnessEvent<TPayload = unknown> {\n static type?: string;\n static schema?: unknown;\n\n constructor(readonly record: HarnessEventRecord<TPayload>) {}\n\n get id(): string {\n return this.record.id;\n }\n\n get type(): string {\n return this.record.type;\n }\n\n get payload(): TPayload {\n return this.record.payload;\n }\n\n get at(): string {\n return this.record.at;\n }\n}\n\nexport type HarnessEventClass<\n TPayload = unknown,\n TEvent extends HarnessEvent<TPayload> = HarnessEvent<TPayload>,\n> = {\n readonly type?: string;\n readonly schema?: unknown;\n new (record: HarnessEventRecord<any>): TEvent;\n};\n\nexport interface HarnessEventEmitOptions {\n source?: HarnessEventSource;\n correlationId?: string;\n causationId?: string;\n metadata?: HarnessEventMetadata;\n hiddenTranscript?: boolean;\n skipHooks?: boolean;\n}\n\nexport interface HarnessEventQuery<TPayload = unknown> {\n event?: HarnessEventClass<TPayload>;\n type?: string;\n sourceKind?: HarnessEventSource[\"kind\"];\n limit?: number;\n since?: string;\n until?: string;\n includeInactive?: boolean;\n}\n\nexport interface EventCursor {\n id: string;\n branchId: string;\n headEventId?: string;\n seq: number;\n updatedAt: string;\n}\n\nexport type RunnerEventListener = (event: HarnessEventRecord) => void | Promise<void>;\n","function constructorOf(value: object): { readonly type?: string; readonly label?: string; readonly name?: string } {\n return value.constructor as { readonly type?: string; readonly label?: string; readonly name?: string };\n}\n\nexport function constructTypeOf(value: object): string {\n const ctor = constructorOf(value);\n return ctor.type ?? ctor.name ?? \"AnonymousConstruct\";\n}\n\nfunction stripConstructSuffix(name: string): string {\n return name.replace(/(Tool|Mode|Provider|ContextProvider|Hook|Role|Event)$/u, \"\");\n}\n\nfunction wordsFromName(name: string): string[] {\n const spaced = name\n .replace(/[_:-]+/gu, \" \")\n .replace(/([a-z0-9])([A-Z])/gu, \"$1 $2\")\n .replace(/([A-Z]+)([A-Z][a-z])/gu, \"$1 $2\")\n .trim();\n return spaced ? spaced.split(/\\s+/u) : [name];\n}\n\nexport function labelFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function snakeFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.toLowerCase())\n .join(\"_\");\n}\n","import { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessRoleSummary {\n type: string;\n name: string;\n label?: string;\n target: string;\n nativeRole?: string;\n default?: boolean;\n description?: string;\n}\n\nexport enum RoleTargets {\n System = \"system\",\n Messages = \"messages\",\n Hidden = \"hidden\",\n}\n\nexport enum NativeRoles {\n System = \"system\",\n User = \"user\",\n Assistant = \"assistant\",\n Tool = \"tool\",\n}\n\nexport abstract class HarnessRole {\n protected declare readonly __harnessRoleBrand: true;\n\n label?: string;\n name?: string;\n abstract target: RoleTargets | (string & {});\n nativeRole?: NativeRoles | (string & {});\n default?: boolean;\n description?: string;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n}\n\nexport type HarnessRoleClass<TRole extends HarnessRole = HarnessRole> = abstract new (...args: any[]) => TRole;\nexport type HarnessRoleDefinition = HarnessRole;\nexport type HarnessRoleSelector<TRole extends HarnessRole = HarnessRole> = TRole | HarnessRoleClass<TRole>;\n\nexport class SystemRole extends HarnessRole {\n static type = \"system\";\n label = \"System\";\n name = \"system\";\n target = RoleTargets.System;\n nativeRole = NativeRoles.System;\n default = true;\n}\n\nexport class UserRole extends HarnessRole {\n static type = \"user\";\n label = \"User\";\n name = \"user\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.User;\n}\n\nexport class AssistantRole extends HarnessRole {\n static type = \"assistant\";\n label = \"Assistant\";\n name = \"assistant\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.Assistant;\n}\n\nexport class ToolRole extends HarnessRole {\n static type = \"tool\";\n label = \"Tool\";\n name = \"tool\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.Tool;\n}\n\nexport const systemRole = new SystemRole();\nexport const userRole = new UserRole();\nexport const assistantRole = new AssistantRole();\nexport const toolRole = new ToolRole();\n","import type { AgentActionSession } from \"./sessions.js\";\nimport type { JsonObject } from \"./json.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport type ToolApprovalMode = \"auto\" | \"ask\" | \"deny\" | \"tool-default\";\nexport type ToolApprovalDecision = \"approved\" | \"denied\";\nexport type ToolRisk = \"safe\" | \"read\" | \"write\" | \"execute\" | \"network\" | \"destructive\";\n\nexport interface ToolPermission {\n kind: \"filesystem\" | \"shell\" | \"network\" | \"custom\";\n access?: \"read\" | \"write\" | \"execute\";\n path?: string;\n description?: string;\n}\n\nexport type ToolRef =\n | { kind: \"file\"; path: string; role?: \"created\" | \"modified\" | \"read\" | \"evidence\" }\n | { kind: \"url\"; url: string; role?: string }\n | { kind: \"command\"; command: string; exitCode?: number; role?: string }\n | { kind: \"tool_call\"; toolName: string; callId?: string; role?: string }\n | { kind: \"session\"; sessionId: string; role?: string }\n | { kind: \"external\"; label: string; uri?: string; role?: string };\n\nexport interface ToolCatalogEntry {\n name: string;\n description: string;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n requiresApproval?: boolean;\n}\n\nexport type ToolApprovalResolver = (\n args: unknown,\n session: AgentActionSession,\n) => boolean | Promise<boolean>;\n\nexport interface AgentToolResult<TData = unknown> {\n content: string;\n data?: TData;\n refs?: ToolRef[];\n metadata?: JsonObject;\n isError?: boolean;\n}\n\nexport abstract class HarnessTool<TInput = unknown, TData = unknown> {\n protected declare readonly __harnessToolBrand: true;\n\n label?: string;\n abstract name: string;\n abstract description: string;\n schema?: unknown;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n requiresApproval?: boolean | ToolApprovalResolver;\n approvalTimeoutMs?: number;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n get inputSchema(): unknown {\n return this.schema;\n }\n\n abstract execute(args: TInput, session: AgentActionSession): AgentToolResult<TData> | Promise<AgentToolResult<TData>>;\n}\n\nexport type HarnessToolClass<TTool extends HarnessTool = HarnessTool> = abstract new (...args: any[]) => TTool;\nexport type HarnessToolSelector<TTool extends HarnessTool = HarnessTool> = TTool | HarnessToolClass<TTool>;\nexport type AgentToolDefinition<TInput = unknown, TData = unknown> = HarnessTool<TInput, TData>;\nexport type AgentToolSource = HarnessTool;\n\nexport interface ToolApprovalRequest {\n id: string;\n name: string;\n args: unknown;\n modeId: string;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n approvalTimeoutMs?: number;\n}\n","import type { AgentReadSession } from \"./sessions.js\";\nimport type { AgentMessage } from \"./messages.js\";\nimport type { HarnessEventClass } from \"./events.js\";\nimport type { HarnessRoleSelector } from \"./roles.js\";\nimport type { JsonObject } from \"./json.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport type HarnessContextProviderClass<\n TProvider extends HarnessContextProvider = HarnessContextProvider,\n> = abstract new (...args: any[]) => TProvider;\n\nexport type HarnessContextProviderSelector<TOptions extends JsonObject = JsonObject> =\n | HarnessContextProvider<TOptions>\n | HarnessContextProviderClass<HarnessContextProvider<TOptions>>;\n\nexport interface ContextProviderBinding<TOptions extends JsonObject = JsonObject> {\n provider: HarnessContextProviderSelector<TOptions>;\n options?: TOptions;\n}\n\nexport type ContextProviderReference<TOptions extends JsonObject = JsonObject> =\n | HarnessContextProviderSelector<TOptions>\n | ContextProviderBinding<TOptions>;\n\nexport interface ContextProviderSummary {\n type: string;\n label?: string;\n options?: JsonObject;\n}\n\nexport interface ContextContribution {\n providerId?: string;\n providerLabel?: string;\n role: string;\n authorRole?: string;\n roleType?: string;\n content: unknown;\n metadata?: JsonObject;\n}\n\nexport enum ContextScopes {\n Turn = \"turn\",\n Run = \"run\",\n Session = \"session\",\n}\n\nexport enum ContextConsume {\n Once = \"once\",\n WhileActive = \"while_active\",\n}\n\nexport interface ContextRegistrationOptions {\n scope?: ContextScopes;\n on?: HarnessEventClass;\n consume?: ContextConsume;\n id?: string;\n replace?: boolean;\n metadata?: JsonObject;\n}\n\nexport interface ContextEntry {\n id: string;\n scope: ContextScopes;\n on: string;\n consume: ContextConsume;\n createdAt: string;\n activatedAt?: string;\n activatedByEventId?: string;\n activatedByEventType?: string;\n runId: string;\n turnId?: string;\n modeId: string;\n contribution: ContextContribution;\n metadata?: JsonObject;\n}\n\nexport interface ContextEntryFilter {\n id?: string;\n scope?: ContextScopes;\n consume?: ContextConsume;\n providerId?: string;\n role?: string;\n on?: HarnessEventClass;\n}\n\nexport type ContextProviderOutput =\n | string\n | ContextContributionInput\n | Array<string | ContextContributionInput>\n | null\n | undefined;\n\nexport interface ContextContributionInput {\n role?: HarnessRoleSelector;\n content: unknown;\n metadata?: JsonObject;\n}\n\nexport interface ContextProviderRenderResult {\n providerId: string;\n providerLabel?: string;\n binding: ContextProviderSummary;\n contributions: ContextContribution[];\n}\n\nexport interface ContextSnapshot {\n id: string;\n turnId?: string;\n modeId: string;\n createdAt: string;\n providers: ContextProviderRenderResult[];\n contributions: ContextContribution[];\n systemPrompt: string;\n messages: AgentMessage[];\n}\n\nexport abstract class HarnessContextProvider<TOptions extends JsonObject = JsonObject> {\n protected declare readonly __harnessContextProviderBrand: true;\n\n label?: string;\n priority?: number;\n role?: HarnessRoleSelector;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n with(options: TOptions): ContextProviderBinding<TOptions> {\n return { provider: this, options };\n }\n\n abstract render(session: AgentReadSession, options?: TOptions): ContextProviderOutput | Promise<ContextProviderOutput>;\n}\n\nexport type AgentContextProvider<TOptions extends JsonObject = JsonObject> = HarnessContextProvider<TOptions>;\n","import type { AgentActionSession, AgentReadSession } from \"./sessions.js\";\nimport type { AgentToolSource, ToolApprovalMode } from \"./tools.js\";\nimport type { ContextProviderReference } from \"./context.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessModeSummary {\n type: string;\n label: string;\n}\n\nexport abstract class HarnessMode {\n protected declare readonly __harnessModeBrand: true;\n\n label?: string;\n model?: string;\n prompt?: string | ((session: AgentReadSession) => string | Promise<string>);\n providers?: \"all\" | ContextProviderReference[];\n excludeProviders?: string[];\n tools?: AgentToolSource[];\n maxTurns?: number;\n toolApproval?: ToolApprovalMode;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n getPrompt?(session: AgentReadSession): string | Promise<string>;\n onEnter?(session: AgentActionSession, input?: unknown): void | Promise<void>;\n onExit?(session: AgentActionSession, nextMode: HarnessModeSummary): void | Promise<void>;\n}\n\nexport type HarnessModeClass<TMode extends HarnessMode = HarnessMode> = abstract new (...args: any[]) => TMode;\nexport type HarnessModeSelector<TMode extends HarnessMode = HarnessMode> = TMode | HarnessModeClass<TMode>;\nexport type AgentModeDefinition = HarnessMode;\n","import type { AgentActionSession } from \"./sessions.js\";\nimport type { HarnessEvent, HarnessEventClass } from \"./events.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessHookSummary {\n type: string;\n label: string;\n eventType: string;\n eventClassId: string;\n}\n\nexport abstract class HarnessHook<TEvent extends HarnessEvent = HarnessEvent> {\n protected declare readonly __harnessHookBrand: true;\n\n label?: string;\n readonly eventClass?: HarnessEventClass<any, TEvent>;\n\n static for<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n ): abstract new () => HarnessHook<TEvent> {\n abstract class BoundHarnessHook extends HarnessHook<TEvent> {\n override readonly eventClass: HarnessEventClass<any, TEvent> = eventClass;\n }\n return BoundHarnessHook;\n }\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n abstract onActive(session: AgentActionSession, event: TEvent): void | Promise<void>;\n}\n\nexport type HarnessHookEventClass<TEvent extends HarnessEvent = HarnessEvent> = abstract new () => HarnessHook<TEvent>;\n"],"mappings":"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","names":["RoleTargets","NativeRoles","ContextScopes","ContextConsume"]}
1
+ {"version":3,"sources":["../src/runtime/types/events.ts","../src/runtime/types/naming.ts","../src/runtime/types/roles.ts","../src/runtime/types/tools.ts","../src/runtime/types/context.ts","../src/runtime/types/modes.ts","../src/runtime/types/hooks.ts"],"sourcesContent":["import type { JsonObject } from \"./json.js\";\n\nexport interface HarnessEventMetadata extends JsonObject {\n label?: string;\n}\n\nexport interface HarnessEventSource {\n kind: \"runtime\" | \"model_provider\" | \"tool\" | \"hook\" | \"context_provider\" | \"mode\" | \"user\" | \"custom\";\n id?: string;\n name?: string;\n}\n\nexport interface HarnessEventRecord<TPayload = unknown> {\n id: string;\n seq: number;\n branchId: string;\n type: string;\n eventClassId: string;\n at: string;\n source: HarnessEventSource;\n payload: TPayload;\n runId: string;\n turnId?: string;\n modeId?: string;\n correlationId?: string;\n causationId?: string;\n hidden: true;\n metadata?: HarnessEventMetadata;\n}\n\nexport abstract class HarnessEvent<TPayload = unknown> {\n static type?: string;\n static schema?: unknown;\n\n constructor(readonly record: HarnessEventRecord<TPayload>) {}\n\n get id(): string {\n return this.record.id;\n }\n\n get type(): string {\n return this.record.type;\n }\n\n get payload(): TPayload {\n return this.record.payload;\n }\n\n get at(): string {\n return this.record.at;\n }\n}\n\nexport type HarnessEventClass<\n TPayload = unknown,\n TEvent extends HarnessEvent<TPayload> = HarnessEvent<TPayload>,\n> = {\n readonly type?: string;\n readonly schema?: unknown;\n new (record: HarnessEventRecord<any>): TEvent;\n};\n\nexport interface HarnessEventEmitOptions {\n source?: HarnessEventSource;\n correlationId?: string;\n causationId?: string;\n metadata?: HarnessEventMetadata;\n hiddenTranscript?: boolean;\n skipHooks?: boolean;\n}\n\nexport interface HarnessEventQuery<TPayload = unknown> {\n event?: HarnessEventClass<TPayload>;\n type?: string;\n sourceKind?: HarnessEventSource[\"kind\"];\n limit?: number;\n since?: string;\n until?: string;\n includeInactive?: boolean;\n}\n\nexport interface EventCursor {\n id: string;\n branchId: string;\n headEventId?: string;\n seq: number;\n updatedAt: string;\n}\n\nexport type RunnerEventListener = (event: HarnessEventRecord) => void | Promise<void>;\n","function constructorOf(value: object): { readonly type?: string; readonly label?: string; readonly name?: string } {\n return value.constructor as { readonly type?: string; readonly label?: string; readonly name?: string };\n}\n\nexport function constructTypeOf(value: object): string {\n const ctor = constructorOf(value);\n return ctor.type ?? ctor.name ?? \"AnonymousConstruct\";\n}\n\nfunction stripConstructSuffix(name: string): string {\n return name.replace(/(Tool|Mode|Provider|ContextProvider|Hook|Role|Event)$/u, \"\");\n}\n\nfunction wordsFromName(name: string): string[] {\n const spaced = name\n .replace(/[_:-]+/gu, \" \")\n .replace(/([a-z0-9])([A-Z])/gu, \"$1 $2\")\n .replace(/([A-Z]+)([A-Z][a-z])/gu, \"$1 $2\")\n .trim();\n return spaced ? spaced.split(/\\s+/u) : [name];\n}\n\nexport function labelFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n}\n\nexport function snakeFromType(type: string): string {\n return wordsFromName(stripConstructSuffix(type))\n .map((word) => word.toLowerCase())\n .join(\"_\");\n}\n","import { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessRoleSummary {\n type: string;\n name: string;\n label?: string;\n target: string;\n nativeRole?: string;\n default?: boolean;\n description?: string;\n}\n\nexport enum RoleTargets {\n System = \"system\",\n Messages = \"messages\",\n Hidden = \"hidden\",\n}\n\nexport enum NativeRoles {\n System = \"system\",\n User = \"user\",\n Assistant = \"assistant\",\n Tool = \"tool\",\n}\n\nexport abstract class HarnessRole {\n protected declare readonly __harnessRoleBrand: true;\n\n label?: string;\n name?: string;\n abstract target: RoleTargets | (string & {});\n nativeRole?: NativeRoles | (string & {});\n default?: boolean;\n description?: string;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n}\n\nexport type HarnessRoleClass<TRole extends HarnessRole = HarnessRole> = abstract new (...args: any[]) => TRole;\nexport type HarnessRoleDefinition = HarnessRole;\nexport type HarnessRoleSelector<TRole extends HarnessRole = HarnessRole> = TRole | HarnessRoleClass<TRole>;\n\nexport class SystemRole extends HarnessRole {\n static type = \"system\";\n label = \"System\";\n name = \"system\";\n target = RoleTargets.System;\n nativeRole = NativeRoles.System;\n default = true;\n}\n\nexport class UserRole extends HarnessRole {\n static type = \"user\";\n label = \"User\";\n name = \"user\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.User;\n}\n\nexport class AssistantRole extends HarnessRole {\n static type = \"assistant\";\n label = \"Assistant\";\n name = \"assistant\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.Assistant;\n}\n\nexport class ToolRole extends HarnessRole {\n static type = \"tool\";\n label = \"Tool\";\n name = \"tool\";\n target = RoleTargets.Messages;\n nativeRole = NativeRoles.Tool;\n}\n\nexport const systemRole = new SystemRole();\nexport const userRole = new UserRole();\nexport const assistantRole = new AssistantRole();\nexport const toolRole = new ToolRole();\n","import type { AgentActionSession } from \"./sessions.js\";\nimport type { JsonObject } from \"./json.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport type ToolApprovalMode = \"auto\" | \"ask\" | \"deny\" | \"tool-default\";\nexport type ToolApprovalDecision = \"approved\" | \"denied\";\nexport type ToolRisk = \"safe\" | \"read\" | \"write\" | \"execute\" | \"network\" | \"destructive\";\n\nexport interface ToolPermission {\n kind: \"filesystem\" | \"shell\" | \"network\" | \"custom\";\n access?: \"read\" | \"write\" | \"execute\";\n path?: string;\n description?: string;\n}\n\nexport type ToolRef =\n | { kind: \"file\"; path: string; role?: \"created\" | \"modified\" | \"read\" | \"evidence\" }\n | { kind: \"url\"; url: string; role?: string }\n | { kind: \"command\"; command: string; exitCode?: number; role?: string }\n | { kind: \"tool_call\"; toolName: string; callId?: string; role?: string }\n | { kind: \"session\"; sessionId: string; role?: string }\n | { kind: \"external\"; label: string; uri?: string; role?: string };\n\nexport interface ToolCatalogEntry {\n name: string;\n description: string;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n requiresApproval?: boolean;\n}\n\nexport type ToolApprovalResolver = (\n args: unknown,\n session: AgentActionSession,\n) => boolean | Promise<boolean>;\n\nexport interface AgentToolResult<TData = unknown> {\n content: string;\n data?: TData;\n refs?: ToolRef[];\n metadata?: JsonObject;\n isError?: boolean;\n}\n\nexport abstract class HarnessTool<TInput = unknown, TData = unknown> {\n protected declare readonly __harnessToolBrand: true;\n\n label?: string;\n abstract name: string;\n abstract description: string;\n schema?: unknown;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n requiresApproval?: boolean | ToolApprovalResolver;\n approvalTimeoutMs?: number;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n get inputSchema(): unknown {\n return this.schema;\n }\n\n abstract execute(args: TInput, session: AgentActionSession): AgentToolResult<TData> | Promise<AgentToolResult<TData>>;\n}\n\nexport type HarnessToolClass<TTool extends HarnessTool = HarnessTool> = abstract new (...args: any[]) => TTool;\nexport type HarnessToolSelector<TTool extends HarnessTool = HarnessTool> = TTool | HarnessToolClass<TTool>;\nexport type AgentToolDefinition<TInput = unknown, TData = unknown> = HarnessTool<TInput, TData>;\nexport type AgentToolSource = HarnessTool;\n\nexport interface ToolApprovalRequest {\n id: string;\n name: string;\n args: unknown;\n modeId: string;\n risk?: ToolRisk;\n permissions?: ToolPermission[];\n approvalTimeoutMs?: number;\n}\n","import type { AgentReadSession } from \"./sessions.js\";\nimport type { AgentMessage } from \"./messages.js\";\nimport type { HarnessEventClass } from \"./events.js\";\nimport type { HarnessRoleSelector } from \"./roles.js\";\nimport type { JsonObject } from \"./json.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport type HarnessContextProviderClass<\n TProvider extends HarnessContextProvider = HarnessContextProvider,\n> = abstract new (...args: any[]) => TProvider;\n\nexport type HarnessContextProviderSelector<TOptions extends JsonObject = JsonObject> =\n | HarnessContextProvider<TOptions>\n | HarnessContextProviderClass<HarnessContextProvider<TOptions>>;\n\nexport interface ContextProviderBinding<TOptions extends JsonObject = JsonObject> {\n provider: HarnessContextProviderSelector<TOptions>;\n options?: TOptions;\n required?: boolean;\n}\n\nexport type ContextProviderReference<TOptions extends JsonObject = JsonObject> =\n | HarnessContextProviderSelector<TOptions>\n | ContextProviderBinding<TOptions>;\n\nexport interface ContextProviderSummary {\n type: string;\n label?: string;\n options?: JsonObject;\n}\n\nexport interface ContextContribution {\n providerId?: string;\n providerLabel?: string;\n role: string;\n authorRole?: string;\n roleType?: string;\n content: unknown;\n metadata?: JsonObject;\n}\n\nexport enum ContextScopes {\n Turn = \"turn\",\n Run = \"run\",\n Session = \"session\",\n}\n\nexport enum ContextConsume {\n Once = \"once\",\n WhileActive = \"while_active\",\n}\n\nexport interface ContextRegistrationOptions {\n scope?: ContextScopes;\n on?: HarnessEventClass;\n consume?: ContextConsume;\n id?: string;\n replace?: boolean;\n metadata?: JsonObject;\n}\n\nexport interface ContextEntry {\n id: string;\n scope: ContextScopes;\n on: string;\n consume: ContextConsume;\n createdAt: string;\n activatedAt?: string;\n activatedByEventId?: string;\n activatedByEventType?: string;\n runId: string;\n turnId?: string;\n modeId: string;\n contribution: ContextContribution;\n metadata?: JsonObject;\n}\n\nexport interface ContextEntryFilter {\n id?: string;\n scope?: ContextScopes;\n consume?: ContextConsume;\n providerId?: string;\n role?: string;\n on?: HarnessEventClass;\n}\n\nexport type ContextProviderOutput =\n | string\n | ContextContributionInput\n | Array<string | ContextContributionInput>\n | null\n | undefined;\n\nexport interface ContextContributionInput {\n role?: HarnessRoleSelector;\n content: unknown;\n metadata?: JsonObject;\n}\n\nexport interface ContextProviderRenderResult {\n providerId: string;\n providerLabel?: string;\n binding: ContextProviderSummary;\n contributions: ContextContribution[];\n}\n\nexport interface ContextSnapshot {\n id: string;\n turnId?: string;\n modeId: string;\n createdAt: string;\n providers: ContextProviderRenderResult[];\n contributions: ContextContribution[];\n systemPrompt: string;\n messages: AgentMessage[];\n}\n\nexport abstract class HarnessContextProvider<TOptions extends JsonObject = JsonObject> {\n protected declare readonly __harnessContextProviderBrand: true;\n\n label?: string;\n priority?: number;\n role?: HarnessRoleSelector;\n required?: boolean;\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n with(options: TOptions): ContextProviderBinding<TOptions> {\n return { provider: this, options };\n }\n\n abstract render(session: AgentReadSession, options?: TOptions): ContextProviderOutput | Promise<ContextProviderOutput>;\n}\n\nexport type AgentContextProvider<TOptions extends JsonObject = JsonObject> = HarnessContextProvider<TOptions>;\n","import type { AgentActionSession, AgentReadSession } from \"./sessions.js\";\nimport type { AgentToolSource, ToolApprovalMode } from \"./tools.js\";\nimport type { ContextProviderReference } from \"./context.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessModeSummary {\n type: string;\n label: string;\n}\n\nexport abstract class HarnessMode {\n protected declare readonly __harnessModeBrand: true;\n\n label?: string;\n model?: string;\n prompt?: string | ((session: AgentReadSession) => string | Promise<string>);\n providers?: \"all\" | ContextProviderReference[];\n excludeProviders?: string[];\n tools?: AgentToolSource[];\n maxTurns?: number;\n toolApproval?: ToolApprovalMode;\n contextFailure?: \"fail\" | \"warn-and-skip\";\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n getPrompt?(session: AgentReadSession): string | Promise<string>;\n onEnter?(session: AgentActionSession, input?: unknown): void | Promise<void>;\n onExit?(session: AgentActionSession, nextMode: HarnessModeSummary): void | Promise<void>;\n}\n\nexport type HarnessModeClass<TMode extends HarnessMode = HarnessMode> = abstract new (...args: any[]) => TMode;\nexport type HarnessModeSelector<TMode extends HarnessMode = HarnessMode> = TMode | HarnessModeClass<TMode>;\nexport type AgentModeDefinition = HarnessMode;\n","import type { AgentActionSession } from \"./sessions.js\";\nimport type { HarnessEvent, HarnessEventClass } from \"./events.js\";\nimport { constructTypeOf } from \"./naming.js\";\n\nexport interface HarnessHookSummary {\n type: string;\n label: string;\n eventType: string;\n eventClassId: string;\n}\n\nexport abstract class HarnessHook<TEvent extends HarnessEvent = HarnessEvent> {\n protected declare readonly __harnessHookBrand: true;\n\n label?: string;\n readonly eventClass?: HarnessEventClass<any, TEvent>;\n\n static for<TPayload, TEvent extends HarnessEvent<TPayload>>(\n eventClass: HarnessEventClass<TPayload, TEvent>,\n ): abstract new () => HarnessHook<TEvent> {\n abstract class BoundHarnessHook extends HarnessHook<TEvent> {\n override readonly eventClass: HarnessEventClass<any, TEvent> = eventClass;\n }\n return BoundHarnessHook;\n }\n\n get type(): string {\n return constructTypeOf(this);\n }\n\n abstract onActive(session: AgentActionSession, event: TEvent): void | Promise<void>;\n}\n\nexport type HarnessHookEventClass<TEvent extends HarnessEvent = HarnessEvent> = abstract new () => HarnessHook<TEvent>;\n"],"mappings":"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","names":["RoleTargets","NativeRoles","ContextScopes","ContextConsume"]}
@@ -1,6 +1,5 @@
1
1
  import { c as HarnessRoleSelector } from './role-BN6KhQxx.js';
2
- import { E as EventCursor, J as JsonObject, a as HarnessEventClass, d as HarnessEventQuery, e as HarnessEventRecord, H as HarnessEvent, b as HarnessEventEmitOptions } from './events-D4xcDi53.js';
3
- import { b as HarnessLogClass, c as HarnessLogContext } from './types-BPmsw-mF.js';
2
+ import { E as EventCursor, J as JsonObject, a as HarnessErrorCode, H as HarnessErrorCategory, d as HarnessErrorSeverity, g as HarnessEventClass, j as HarnessEventQuery, k as HarnessEventRecord, f as HarnessEvent, h as HarnessEventEmitOptions } from './errors-hpkW3tfR.js';
4
3
  import { HarnessSandboxSession } from './runner/sandbox.js';
5
4
 
6
5
  type AgentMessageRole = "system" | "user" | "assistant" | "tool" | "event" | (string & {});
@@ -51,11 +50,95 @@ interface TranscriptBranch {
51
50
  metadata?: JsonObject;
52
51
  }
53
52
 
53
+ type HarnessLogLevel = "debug" | "info" | "warn" | "error";
54
+ type HarnessLoggingLevel = "silent" | HarnessLogLevel;
55
+ type HarnessLogCategory = "session" | "run" | "turn" | "context" | "model" | "tool" | "approval" | "snapshot" | "transcript" | "storage" | "agent";
56
+ type HarnessLogSourceKind = "runtime" | "model_provider" | "tool" | "hook" | "context_provider" | "mode" | "user" | "custom";
57
+ interface HarnessLogSource {
58
+ kind: HarnessLogSourceKind;
59
+ id?: string;
60
+ type?: string;
61
+ name?: string;
62
+ label?: string;
63
+ }
64
+ interface HarnessLogError {
65
+ code?: HarnessErrorCode;
66
+ category?: HarnessErrorCategory;
67
+ severity?: HarnessErrorSeverity;
68
+ recoverable?: boolean;
69
+ name?: string;
70
+ message: string;
71
+ stack?: string;
72
+ }
73
+ interface HarnessLogRecord {
74
+ id: string;
75
+ at: string;
76
+ level: HarnessLogLevel;
77
+ category: HarnessLogCategory;
78
+ type: string;
79
+ message: string;
80
+ sessionId?: string;
81
+ runId?: string;
82
+ turnId?: string;
83
+ modeId?: string;
84
+ branchId?: string;
85
+ source: HarnessLogSource;
86
+ correlationId?: string;
87
+ causationId?: string;
88
+ spanId?: string;
89
+ parentSpanId?: string;
90
+ durationMs?: number;
91
+ fields?: Record<string, unknown>;
92
+ error?: HarnessLogError;
93
+ }
94
+ declare abstract class HarnessLog<TFields = Record<string, unknown>> {
95
+ abstract level: HarnessLogLevel;
96
+ abstract category: HarnessLogCategory;
97
+ abstract message(fields: TFields): string;
98
+ levelFor?(fields: TFields): HarnessLogLevel;
99
+ redact?(fields: TFields): TFields;
100
+ }
101
+ type HarnessLogClass<TFields = Record<string, unknown>> = new () => HarnessLog<TFields>;
102
+ declare abstract class HarnessLogSink {
103
+ abstract write(record: HarnessLogRecord): void | Promise<void>;
104
+ flush?(): void | Promise<void>;
105
+ close?(): void | Promise<void>;
106
+ }
107
+ interface HarnessLoggingConfig {
108
+ level?: HarnessLoggingLevel;
109
+ sinks?: HarnessLogSink[];
110
+ format?: "pretty" | "json";
111
+ modelDeltas?: "none" | "summary" | "full" | boolean;
112
+ events?: boolean;
113
+ redact?: {
114
+ keys?: string[];
115
+ replacement?: string;
116
+ };
117
+ }
118
+ interface HarnessRedactionConfig {
119
+ keys?: string[];
120
+ replacement?: string;
121
+ }
122
+ interface HarnessLogContext {
123
+ sessionId?: string;
124
+ runId?: string;
125
+ turnId?: string;
126
+ modeId?: string;
127
+ branchId?: string;
128
+ source?: HarnessLogSource;
129
+ correlationId?: string;
130
+ causationId?: string;
131
+ spanId?: string;
132
+ parentSpanId?: string;
133
+ durationMs?: number;
134
+ }
135
+
54
136
  type HarnessContextProviderClass<TProvider extends HarnessContextProvider = HarnessContextProvider> = abstract new (...args: any[]) => TProvider;
55
137
  type HarnessContextProviderSelector<TOptions extends JsonObject = JsonObject> = HarnessContextProvider<TOptions> | HarnessContextProviderClass<HarnessContextProvider<TOptions>>;
56
138
  interface ContextProviderBinding<TOptions extends JsonObject = JsonObject> {
57
139
  provider: HarnessContextProviderSelector<TOptions>;
58
140
  options?: TOptions;
141
+ required?: boolean;
59
142
  }
60
143
  type ContextProviderReference<TOptions extends JsonObject = JsonObject> = HarnessContextProviderSelector<TOptions> | ContextProviderBinding<TOptions>;
61
144
  interface ContextProviderSummary {
@@ -139,6 +222,7 @@ declare abstract class HarnessContextProvider<TOptions extends JsonObject = Json
139
222
  label?: string;
140
223
  priority?: number;
141
224
  role?: HarnessRoleSelector;
225
+ required?: boolean;
142
226
  get type(): string;
143
227
  with(options: TOptions): ContextProviderBinding<TOptions>;
144
228
  abstract render(session: AgentReadSession, options?: TOptions): ContextProviderOutput | Promise<ContextProviderOutput>;
@@ -159,6 +243,7 @@ declare abstract class HarnessMode {
159
243
  tools?: AgentToolSource[];
160
244
  maxTurns?: number;
161
245
  toolApproval?: ToolApprovalMode;
246
+ contextFailure?: "fail" | "warn-and-skip";
162
247
  get type(): string;
163
248
  getPrompt?(session: AgentReadSession): string | Promise<string>;
164
249
  onEnter?(session: AgentActionSession, input?: unknown): void | Promise<void>;
@@ -393,4 +478,4 @@ interface ToolApprovalRequest {
393
478
  approvalTimeoutMs?: number;
394
479
  }
395
480
 
396
- export { type HarnessToolSelector as $, type AgentActionSession as A, type ContextContributionInput as B, ContextConsume as C, type ContextEntry as D, type ContextEntryFilter as E, type ContextProviderBinding as F, type ContextProviderOutput as G, type ContextProviderReference as H, type ContextProviderRenderResult as I, type ContextProviderSummary as J, type ContextRegistrationOptions as K, ContextScopes as L, type ContextSnapshot as M, HarnessContextProvider as N, type HarnessContextProviderClass as O, type HarnessContextProviderSelector as P, HarnessMode as Q, type HarnessModeClass as R, type HarnessModeSelector as S, type HarnessModeSummary as T, type HarnessSnapshot as U, type HarnessSnapshotCreator as V, type HarnessSnapshotInput as W, type HarnessSnapshotSession as X, type HarnessSnapshotSummary as Y, HarnessTool as Z, type HarnessToolClass as _, type AgentContextProvider as a, type HarnessTranscriptSession as a0, type RunInfo as a1, type ToolApprovalDecision as a2, type ToolApprovalMode as a3, type ToolApprovalRequest as a4, type ToolApprovalResolver as a5, type ToolCatalogEntry as a6, type ToolPermission as a7, type ToolRef as a8, type ToolRisk as a9, type TranscriptBranch as aa, type TranscriptCursor as ab, type TranscriptQuery as ac, type TranscriptSeekTarget as ad, type TurnInfo as ae, type AgentContextReader as b, type AgentContextSession as c, type AgentEventReader as d, type AgentEventSession as e, type AgentHistorySession as f, type AgentLogSession as g, type AgentMessage as h, type AgentMessageEnqueueOptions as i, type AgentMessageInput as j, type AgentMessageRole as k, type AgentMessageSession as l, type AgentModeDefinition as m, type AgentModeReader as n, type AgentModeSession as o, type AgentReadSession as p, type AgentRuntimeLogger as q, type AgentSharedState as r, type AgentSharedStateDefinition as s, type AgentStateReader as t, type AgentStateSession as u, type AgentToolDefinition as v, type AgentToolResult as w, type AgentToolSession as x, type AgentToolSource as y, type ContextContribution as z };
481
+ export { type HarnessLoggingLevel as $, type AgentActionSession as A, type ContextContributionInput as B, ContextConsume as C, type ContextEntry as D, type ContextEntryFilter as E, type ContextProviderBinding as F, type ContextProviderOutput as G, type ContextProviderReference as H, type ContextProviderRenderResult as I, type ContextProviderSummary as J, type ContextRegistrationOptions as K, ContextScopes as L, type ContextSnapshot as M, HarnessContextProvider as N, type HarnessContextProviderClass as O, type HarnessContextProviderSelector as P, HarnessLog as Q, type HarnessLogCategory as R, type HarnessLogClass as S, type HarnessLogContext as T, type HarnessLogError as U, type HarnessLogLevel as V, type HarnessLogRecord as W, HarnessLogSink as X, type HarnessLogSource as Y, type HarnessLogSourceKind as Z, type HarnessLoggingConfig as _, type AgentContextProvider as a, HarnessMode as a0, type HarnessModeClass as a1, type HarnessModeSelector as a2, type HarnessModeSummary as a3, type HarnessRedactionConfig as a4, type HarnessSnapshot as a5, type HarnessSnapshotCreator as a6, type HarnessSnapshotInput as a7, type HarnessSnapshotSession as a8, type HarnessSnapshotSummary as a9, HarnessTool as aa, type HarnessToolClass as ab, type HarnessToolSelector as ac, type HarnessTranscriptSession as ad, type RunInfo as ae, type ToolApprovalDecision as af, type ToolApprovalMode as ag, type ToolApprovalRequest as ah, type ToolApprovalResolver as ai, type ToolCatalogEntry as aj, type ToolPermission as ak, type ToolRef as al, type ToolRisk as am, type TranscriptBranch as an, type TranscriptCursor as ao, type TranscriptQuery as ap, type TranscriptSeekTarget as aq, type TurnInfo as ar, type AgentContextReader as b, type AgentContextSession as c, type AgentEventReader as d, type AgentEventSession as e, type AgentHistorySession as f, type AgentLogSession as g, type AgentMessage as h, type AgentMessageEnqueueOptions as i, type AgentMessageInput as j, type AgentMessageRole as k, type AgentMessageSession as l, type AgentModeDefinition as m, type AgentModeReader as n, type AgentModeSession as o, type AgentReadSession as p, type AgentRuntimeLogger as q, type AgentSharedState as r, type AgentSharedStateDefinition as s, type AgentStateReader as t, type AgentStateSession as u, type AgentToolDefinition as v, type AgentToolResult as w, type AgentToolSession as x, type AgentToolSource as y, type ContextContribution as z };
@@ -0,0 +1,6 @@
1
+ import { b as HarnessErrorContext, c as HarnessErrorPolicy, e as HarnessErrorShape } from './errors-hpkW3tfR.js';
2
+
3
+ declare function normalizeHarnessError(error: unknown, context?: HarnessErrorContext, policy?: HarnessErrorPolicy): HarnessErrorShape;
4
+ declare function sanitizeHarnessError(error: HarnessErrorShape, policy?: HarnessErrorPolicy): HarnessErrorShape;
5
+
6
+ export { normalizeHarnessError as n, sanitizeHarnessError as s };
@@ -0,0 +1,112 @@
1
+ type JsonObject = Record<string, unknown>;
2
+
3
+ interface HarnessEventMetadata extends JsonObject {
4
+ label?: string;
5
+ }
6
+ interface HarnessEventSource {
7
+ kind: "runtime" | "model_provider" | "tool" | "hook" | "context_provider" | "mode" | "user" | "custom";
8
+ id?: string;
9
+ name?: string;
10
+ }
11
+ interface HarnessEventRecord<TPayload = unknown> {
12
+ id: string;
13
+ seq: number;
14
+ branchId: string;
15
+ type: string;
16
+ eventClassId: string;
17
+ at: string;
18
+ source: HarnessEventSource;
19
+ payload: TPayload;
20
+ runId: string;
21
+ turnId?: string;
22
+ modeId?: string;
23
+ correlationId?: string;
24
+ causationId?: string;
25
+ hidden: true;
26
+ metadata?: HarnessEventMetadata;
27
+ }
28
+ declare abstract class HarnessEvent<TPayload = unknown> {
29
+ readonly record: HarnessEventRecord<TPayload>;
30
+ static type?: string;
31
+ static schema?: unknown;
32
+ constructor(record: HarnessEventRecord<TPayload>);
33
+ get id(): string;
34
+ get type(): string;
35
+ get payload(): TPayload;
36
+ get at(): string;
37
+ }
38
+ type HarnessEventClass<TPayload = unknown, TEvent extends HarnessEvent<TPayload> = HarnessEvent<TPayload>> = {
39
+ readonly type?: string;
40
+ readonly schema?: unknown;
41
+ new (record: HarnessEventRecord<any>): TEvent;
42
+ };
43
+ interface HarnessEventEmitOptions {
44
+ source?: HarnessEventSource;
45
+ correlationId?: string;
46
+ causationId?: string;
47
+ metadata?: HarnessEventMetadata;
48
+ hiddenTranscript?: boolean;
49
+ skipHooks?: boolean;
50
+ }
51
+ interface HarnessEventQuery<TPayload = unknown> {
52
+ event?: HarnessEventClass<TPayload>;
53
+ type?: string;
54
+ sourceKind?: HarnessEventSource["kind"];
55
+ limit?: number;
56
+ since?: string;
57
+ until?: string;
58
+ includeInactive?: boolean;
59
+ }
60
+ interface EventCursor {
61
+ id: string;
62
+ branchId: string;
63
+ headEventId?: string;
64
+ seq: number;
65
+ updatedAt: string;
66
+ }
67
+ type RunnerEventListener = (event: HarnessEventRecord) => void | Promise<void>;
68
+
69
+ type HarnessErrorCategory = "run" | "model" | "tool" | "context" | "storage" | "sandbox" | "approval" | "runtime";
70
+ type HarnessErrorSeverity = "warn" | "error" | "fatal";
71
+ type HarnessErrorCode = "run.failed" | "run.aborted" | "model.failed" | "model.rate_limited" | "model.timeout" | "tool.failed" | "tool.args.invalid_schema" | "tool.approval.denied" | "context.provider.failed" | "storage.write_failed" | "sandbox.exec.failed" | "runtime.failed";
72
+ interface HarnessErrorShape {
73
+ code: HarnessErrorCode;
74
+ message: string;
75
+ publicMessage?: string;
76
+ category: HarnessErrorCategory;
77
+ severity: HarnessErrorSeverity;
78
+ recoverable: boolean;
79
+ source?: HarnessEventSource;
80
+ name?: string;
81
+ stack?: string;
82
+ cause?: unknown;
83
+ details?: unknown;
84
+ }
85
+ interface HarnessRetryPolicy {
86
+ attempts?: number;
87
+ backoffMs?: number;
88
+ maxBackoffMs?: number;
89
+ }
90
+ interface HarnessErrorPolicy {
91
+ exposeInternalErrors?: boolean;
92
+ includeStackInStatus?: boolean;
93
+ closeSessionOnFatal?: boolean;
94
+ contextFailure?: "fail" | "warn-and-skip";
95
+ retry?: {
96
+ model?: HarnessRetryPolicy;
97
+ storage?: HarnessRetryPolicy;
98
+ };
99
+ classify?(error: unknown, context: HarnessErrorContext): Partial<HarnessErrorShape> | undefined;
100
+ }
101
+ interface HarnessErrorContext {
102
+ code?: HarnessErrorCode;
103
+ category?: HarnessErrorCategory;
104
+ severity?: HarnessErrorSeverity;
105
+ recoverable?: boolean;
106
+ source?: HarnessEventSource;
107
+ message?: string;
108
+ publicMessage?: string;
109
+ details?: unknown;
110
+ }
111
+
112
+ export { type EventCursor as E, type HarnessErrorCategory as H, type JsonObject as J, type RunnerEventListener as R, type HarnessErrorCode as a, type HarnessErrorContext as b, type HarnessErrorPolicy as c, type HarnessErrorSeverity as d, type HarnessErrorShape as e, HarnessEvent as f, type HarnessEventClass as g, type HarnessEventEmitOptions as h, type HarnessEventMetadata as i, type HarnessEventQuery as j, type HarnessEventRecord as k, type HarnessEventSource as l, type HarnessRetryPolicy as m };
@@ -1,5 +1,6 @@
1
- import { H as HarnessEvent } from './events-D4xcDi53.js';
2
- import { ObjectSchema, StringSchema, NumberSchema, OptionalSchema, LiteralSchema, UnknownSchema, EnumSchema } from './schema.js';
1
+ import { f as HarnessEvent, e as HarnessErrorShape, a as HarnessErrorCode } from './errors-hpkW3tfR.js';
2
+ import { R as RunMetrics } from './metrics-DMN8bfY6.js';
3
+ import { ObjectSchema, StringSchema, NumberSchema, UnknownSchema, OptionalSchema, LiteralSchema, EnumSchema } from './schema.js';
3
4
 
4
5
  declare class RunStartEvent extends HarnessEvent<{
5
6
  agentKey: string;
@@ -107,14 +108,42 @@ declare class RunEndEvent extends HarnessEvent<{
107
108
  finalAnswer: StringSchema;
108
109
  }>;
109
110
  }
111
+ declare class RunFailedEvent extends HarnessEvent<{
112
+ error: HarnessErrorShape;
113
+ metrics: RunMetrics;
114
+ finalAnswer?: string;
115
+ }> {
116
+ static type: string;
117
+ static schema: ObjectSchema<{
118
+ error: UnknownSchema;
119
+ metrics: UnknownSchema;
120
+ finalAnswer: OptionalSchema<unknown, string | undefined>;
121
+ }>;
122
+ }
123
+ declare class RunAbortedEvent extends HarnessEvent<{
124
+ error: HarnessErrorShape;
125
+ metrics: RunMetrics;
126
+ finalAnswer?: string;
127
+ }> {
128
+ static type: string;
129
+ static schema: ObjectSchema<{
130
+ error: UnknownSchema;
131
+ metrics: UnknownSchema;
132
+ finalAnswer: OptionalSchema<unknown, string | undefined>;
133
+ }>;
134
+ }
110
135
  declare class ErrorEvent extends HarnessEvent<{
136
+ error: HarnessErrorShape;
111
137
  message: string;
138
+ code?: HarnessErrorCode;
112
139
  recoverable?: boolean;
113
140
  details?: unknown;
114
141
  }> {
115
142
  static type: string;
116
143
  static schema: ObjectSchema<{
144
+ error: UnknownSchema;
117
145
  message: StringSchema;
146
+ code: OptionalSchema<unknown, string | undefined>;
118
147
  recoverable: OptionalSchema<unknown, boolean | undefined>;
119
148
  details: OptionalSchema<unknown, unknown>;
120
149
  }>;
@@ -225,6 +254,6 @@ declare class TranscriptCursorChangedEvent extends HarnessEvent<{
225
254
  cursor: UnknownSchema;
226
255
  }>;
227
256
  }
228
- declare const runtimeEventClasses: (typeof RunStartEvent | typeof TurnStartEvent | typeof ContextReadyEvent | typeof ModelBeforeEvent | typeof ModelAfterEvent | typeof ToolStartEvent | typeof ToolEndEvent | typeof TurnEndEvent | typeof RunEndEvent | typeof MessageStartEvent | typeof MessageDeltaEvent | typeof MessageEndEvent | typeof ModeChangedEvent | typeof SnapshotCreatedEvent | typeof TranscriptCursorChangedEvent)[];
257
+ declare const runtimeEventClasses: (typeof RunStartEvent | typeof TurnStartEvent | typeof ContextReadyEvent | typeof ModelBeforeEvent | typeof ModelAfterEvent | typeof ToolStartEvent | typeof ToolEndEvent | typeof TurnEndEvent | typeof RunEndEvent | typeof RunFailedEvent | typeof MessageStartEvent | typeof MessageDeltaEvent | typeof MessageEndEvent | typeof ModeChangedEvent | typeof SnapshotCreatedEvent | typeof TranscriptCursorChangedEvent)[];
229
258
 
230
- export { ContextReadyEvent as C, ErrorEvent as E, MessageDeltaEvent as M, RunEndEvent as R, SnapshotCreatedEvent as S, ToolApprovalRequestedEvent as T, MessageEndEvent as a, MessageStartEvent as b, ModeChangedEvent as c, ModelAfterEvent as d, ModelBeforeEvent as e, RunStartEvent as f, SnapshotDeletedEvent as g, SnapshotRestoredEvent as h, ToolApprovalResolvedEvent as i, ToolEndEvent as j, ToolStartEvent as k, TranscriptCursorChangedEvent as l, TurnEndEvent as m, TurnStartEvent as n, runtimeEventClasses as r };
259
+ export { ContextReadyEvent as C, ErrorEvent as E, MessageDeltaEvent as M, RunAbortedEvent as R, SnapshotCreatedEvent as S, ToolApprovalRequestedEvent as T, MessageEndEvent as a, MessageStartEvent as b, ModeChangedEvent as c, ModelAfterEvent as d, ModelBeforeEvent as e, RunEndEvent as f, RunFailedEvent as g, RunStartEvent as h, SnapshotDeletedEvent as i, SnapshotRestoredEvent as j, ToolApprovalResolvedEvent as k, ToolEndEvent as l, ToolStartEvent as m, TranscriptCursorChangedEvent as n, TurnEndEvent as o, TurnStartEvent as p, runtimeEventClasses as r };
@@ -1,5 +1,5 @@
1
- import { H as HarnessEvent, a as HarnessEventClass } from './events-D4xcDi53.js';
2
- import { A as AgentActionSession } from './context-BfpLqV11.js';
1
+ import { f as HarnessEvent, g as HarnessEventClass } from './errors-hpkW3tfR.js';
2
+ import { A as AgentActionSession } from './context-Bz9C_rL9.js';
3
3
 
4
4
  interface HarnessHookSummary {
5
5
  type: string;
package/dist/index.d.ts CHANGED
@@ -1,22 +1,24 @@
1
- import { R as RunnerEventListener, J as JsonObject, d as HarnessEventQuery, e as HarnessEventRecord, b as HarnessEventEmitOptions } from './events-D4xcDi53.js';
2
- export { E as EventCursor, H as HarnessEvent, a as HarnessEventClass, c as HarnessEventMetadata, f as HarnessEventSource } from './events-D4xcDi53.js';
3
- import { a as HarnessAgentManifest } from './approval-D_G2w-fW.js';
4
- export { H as HarnessAgentInput, b as HarnessAppConfig, c as HarnessErrorShape, d as HarnessEventSummary, e as HarnessRunStream, f as HarnessSession, g as HarnessSessionEventListener, h as HarnessSessionListener, i as HarnessSessionPhase, j as HarnessSessionStatus, k as HarnessSessionStore, l as HarnessSessionStoreEvent, m as HarnessSessionStoreListener, n as HarnessStorageConfig, o as HarnessStreamEvent, p as HarnessUserInput, S as SendOptions, q as SendResult, r as StreamOptions, T as ToolApprovalHandle, W as WaitForEventOptions } from './approval-D_G2w-fW.js';
5
- import { ac as TranscriptQuery, h as AgentMessage, ab as TranscriptCursor, ad as TranscriptSeekTarget, r as AgentSharedState, W as HarnessSnapshotInput, U as HarnessSnapshot, Y as HarnessSnapshotSummary, M as ContextSnapshot, E as ContextEntryFilter, D as ContextEntry, S as HarnessModeSelector } from './context-BfpLqV11.js';
6
- export { A as AgentActionSession, a as AgentContextProvider, b as AgentContextReader, c as AgentContextSession, d as AgentEventReader, e as AgentEventSession, f as AgentHistorySession, g as AgentLogSession, i as AgentMessageEnqueueOptions, j as AgentMessageInput, k as AgentMessageRole, l as AgentMessageSession, m as AgentModeDefinition, n as AgentModeReader, o as AgentModeSession, p as AgentReadSession, q as AgentRuntimeLogger, s as AgentSharedStateDefinition, t as AgentStateReader, u as AgentStateSession, v as AgentToolDefinition, w as AgentToolResult, x as AgentToolSession, y as AgentToolSource, C as ContextConsume, z as ContextContribution, B as ContextContributionInput, F as ContextProviderBinding, G as ContextProviderOutput, H as ContextProviderReference, I as ContextProviderRenderResult, J as ContextProviderSummary, K as ContextRegistrationOptions, L as ContextScopes, N as HarnessContextProvider, O as HarnessContextProviderClass, P as HarnessContextProviderSelector, Q as HarnessMode, R as HarnessModeClass, T as HarnessModeSummary, V as HarnessSnapshotCreator, X as HarnessSnapshotSession, Z as HarnessTool, _ as HarnessToolClass, $ as HarnessToolSelector, a0 as HarnessTranscriptSession, a1 as RunInfo, a2 as ToolApprovalDecision, a3 as ToolApprovalMode, a4 as ToolApprovalRequest, a5 as ToolApprovalResolver, a6 as ToolCatalogEntry, a7 as ToolPermission, a8 as ToolRef, a9 as ToolRisk, aa as TranscriptBranch, ae as TurnInfo } from './context-BfpLqV11.js';
1
+ import { R as RunnerEventListener, J as JsonObject, j as HarnessEventQuery, k as HarnessEventRecord, h as HarnessEventEmitOptions } from './errors-hpkW3tfR.js';
2
+ export { E as EventCursor, H as HarnessErrorCategory, a as HarnessErrorCode, b as HarnessErrorContext, c as HarnessErrorPolicy, d as HarnessErrorSeverity, e as HarnessErrorShape, f as HarnessEvent, g as HarnessEventClass, i as HarnessEventMetadata, l as HarnessEventSource, m as HarnessRetryPolicy } from './errors-hpkW3tfR.js';
3
+ import { a as HarnessAgentManifest } from './approval-7e8HD-35.js';
4
+ export { H as HarnessAgentInput, b as HarnessAppConfig, c as HarnessEventSummary, d as HarnessRunStream, e as HarnessSession, f as HarnessSessionEventListener, g as HarnessSessionListener, h as HarnessSessionPhase, i as HarnessSessionStatus, j as HarnessSessionStore, k as HarnessSessionStoreEvent, l as HarnessSessionStoreListener, m as HarnessStorageConfig, n as HarnessStreamEvent, o as HarnessUserInput, S as SendOptions, p as SendResult, q as StreamOptions, T as ToolApprovalHandle, W as WaitForEventOptions } from './approval-7e8HD-35.js';
5
+ import { ap as TranscriptQuery, h as AgentMessage, ao as TranscriptCursor, aq as TranscriptSeekTarget, r as AgentSharedState, a7 as HarnessSnapshotInput, a5 as HarnessSnapshot, a9 as HarnessSnapshotSummary, M as ContextSnapshot, E as ContextEntryFilter, D as ContextEntry, a2 as HarnessModeSelector } from './context-Bz9C_rL9.js';
6
+ export { A as AgentActionSession, a as AgentContextProvider, b as AgentContextReader, c as AgentContextSession, d as AgentEventReader, e as AgentEventSession, f as AgentHistorySession, g as AgentLogSession, i as AgentMessageEnqueueOptions, j as AgentMessageInput, k as AgentMessageRole, l as AgentMessageSession, m as AgentModeDefinition, n as AgentModeReader, o as AgentModeSession, p as AgentReadSession, q as AgentRuntimeLogger, s as AgentSharedStateDefinition, t as AgentStateReader, u as AgentStateSession, v as AgentToolDefinition, w as AgentToolResult, x as AgentToolSession, y as AgentToolSource, C as ContextConsume, z as ContextContribution, B as ContextContributionInput, F as ContextProviderBinding, G as ContextProviderOutput, H as ContextProviderReference, I as ContextProviderRenderResult, J as ContextProviderSummary, K as ContextRegistrationOptions, L as ContextScopes, N as HarnessContextProvider, O as HarnessContextProviderClass, P as HarnessContextProviderSelector, a0 as HarnessMode, a1 as HarnessModeClass, a3 as HarnessModeSummary, a6 as HarnessSnapshotCreator, a8 as HarnessSnapshotSession, aa as HarnessTool, ab as HarnessToolClass, ac as HarnessToolSelector, ad as HarnessTranscriptSession, ae as RunInfo, af as ToolApprovalDecision, ag as ToolApprovalMode, ah as ToolApprovalRequest, ai as ToolApprovalResolver, aj as ToolCatalogEntry, ak as ToolPermission, al as ToolRef, am as ToolRisk, an as TranscriptBranch, ar as TurnInfo } from './context-Bz9C_rL9.js';
7
7
  export { A as AssistantRole, H as HarnessRole, a as HarnessRoleClass, b as HarnessRoleDefinition, c as HarnessRoleSelector, d as HarnessRoleSummary, N as NativeRoles, R as RoleTargets, S as SystemRole, T as ToolRole, U as UserRole, e as assistantRole, s as systemRole, t as toolRole, u as userRole } from './role-BN6KhQxx.js';
8
- export { H as HarnessHook, a as HarnessHookEventClass, b as HarnessHookSummary } from './hook-CfBbhUQf.js';
9
- import { h as RunMetrics } from './storage-DCZE_hES.js';
10
- export { C as CreateStoredRunInput, a as CreateStoredSessionInput, H as HarnessRunStorage, b as HarnessRunStore, c as HarnessSessionStorage, d as HarnessSessionSummary, M as MemoryRunStorage, e as MemoryRunStore, f as MemorySessionStorage, N as NoopRunStorage, g as NoopRunStore, O as OpenRunStoreInput, R as RunCursorState, S as SessionListQuery, i as SessionListResult, j as StoredRunSummary, T as ToolCallMetric, k as TouchStoredSessionInput } from './storage-DCZE_hES.js';
11
- import { N as NormalizedAgentDefinition, c as AgentSessionRunnerOptions, b as AgentRunnerRunOptions, a as AgentRunResult, e as ModelProviderInfo } from './model-provider-Ch7tzk1x.js';
12
- export { A as AgentDefinition, H as HarnessModelProvider, d as HarnessModelProviderRegistry, M as ModelInfo, f as ModelProviderPreparedContext, g as ModelProviderRunInput, h as ModelProviderRunResult, R as ResolvedModelProvider, m as modelProviderId, p as parseModelRef } from './model-provider-Ch7tzk1x.js';
13
- export { C as ContextReadyEvent, E as ErrorEvent, M as MessageDeltaEvent, a as MessageEndEvent, b as MessageStartEvent, c as ModeChangedEvent, d as ModelAfterEvent, e as ModelBeforeEvent, R as RunEndEvent, f as RunStartEvent, S as SnapshotCreatedEvent, g as SnapshotDeletedEvent, h as SnapshotRestoredEvent, T as ToolApprovalRequestedEvent, i as ToolApprovalResolvedEvent, j as ToolEndEvent, k as ToolStartEvent, l as TranscriptCursorChangedEvent, m as TurnEndEvent, n as TurnStartEvent, r as runtimeEventClasses } from './event-CKV4EeZ3.js';
8
+ export { H as HarnessHook, a as HarnessHookEventClass, b as HarnessHookSummary } from './hook-DD7uuzE3.js';
9
+ import { R as RunMetrics } from './metrics-DMN8bfY6.js';
10
+ export { T as ToolCallMetric } from './metrics-DMN8bfY6.js';
11
+ import { N as NormalizedAgentDefinition, c as AgentSessionRunnerOptions, b as AgentRunnerRunOptions, a as AgentRunResult, e as ModelProviderInfo } from './model-provider-DGkLQJWP.js';
12
+ export { A as AgentDefinition, H as HarnessModelProvider, d as HarnessModelProviderRegistry, M as ModelInfo, f as ModelProviderPreparedContext, g as ModelProviderRunInput, h as ModelProviderRunResult, R as ResolvedModelProvider, m as modelProviderId, p as parseModelRef } from './model-provider-DGkLQJWP.js';
13
+ export { C as ContextReadyEvent, E as ErrorEvent, M as MessageDeltaEvent, a as MessageEndEvent, b as MessageStartEvent, c as ModeChangedEvent, d as ModelAfterEvent, e as ModelBeforeEvent, R as RunAbortedEvent, f as RunEndEvent, g as RunFailedEvent, h as RunStartEvent, S as SnapshotCreatedEvent, i as SnapshotDeletedEvent, j as SnapshotRestoredEvent, T as ToolApprovalRequestedEvent, k as ToolApprovalResolvedEvent, l as ToolEndEvent, m as ToolStartEvent, n as TranscriptCursorChangedEvent, o as TurnEndEvent, p as TurnStartEvent, r as runtimeEventClasses } from './event-DMBY-R6h.js';
14
+ export { n as normalizeHarnessError, s as sanitizeHarnessError } from './errors-DHHy8V3O.js';
14
15
  export { defineAgent } from './agent.js';
15
- export { HarnessSandbox, HarnessSandboxOpenInput, HarnessSandboxSession, NoopSandbox, NoopSandboxSession, SandboxExecInput, SandboxExecResult } from './runner/sandbox.js';
16
- export { C as CreateHarnessSessionInternalOptions, H as HarnessSessionImpl, a as HarnessSessionStoreImpl, c as createHarnessSession, b as createHarnessSessionStore } from './runner-B41JEovO.js';
16
+ import { SandboxCloseInput } from './runner/sandbox.js';
17
+ export { HarnessSandbox, HarnessSandboxOpenInput, HarnessSandboxSession, NoopSandbox, NoopSandboxSession, SandboxCloseReason, SandboxDestroyInput, SandboxExecInput, SandboxExecResult } from './runner/sandbox.js';
18
+ export { CreateStoredRunInput, CreateStoredSessionInput, HarnessRunStorage, HarnessRunStore, HarnessSessionStorage, HarnessSessionSummary, MemoryRunStorage, MemoryRunStore, MemorySessionStorage, NoopRunStorage, NoopRunStore, OpenRunStoreInput, RunCursorState, SessionListQuery, SessionListResult, StoredRunSummary, TouchStoredSessionInput } from './runner/storage.js';
19
+ export { C as CreateHarnessSessionInternalOptions, H as HarnessSessionImpl, a as HarnessSessionStoreImpl, c as createHarnessSession, b as createHarnessSessionStore } from './runner-BYG9ARAV.js';
17
20
  export { ArraySchema, BooleanSchema, DefaultSchema, EnumSchema, InferInput, InferOutput, JsonSchema, LiteralSchema, NormalizedSchema, NumberSchema, ObjectSchema, OptionalSchema, RecordSchema, SafeParseResult, Schema, SchemaError, SchemaIssue, SchemaIssueCode, SchemaSource, StringSchema, UnknownSchema, formatSchemaPath, normalizeSchema, s, schemaIssuesFromError } from './schema.js';
18
- export { T as ToolErrorCode, a as ToolErrorPayload, b as ToolInvalidField, c as createToolErrorPayload } from './tool-errors-CygY1Nba.js';
19
- import './types-BPmsw-mF.js';
21
+ export { ToolErrorCode, ToolErrorPayload, ToolInvalidField, createToolErrorPayload, createToolErrorResult } from './agent/tool.js';
20
22
 
21
23
  declare class AgentSessionRunner {
22
24
  private readonly options;
@@ -53,6 +55,8 @@ declare class AgentSessionRunner {
53
55
  private turnHandoffRequested;
54
56
  private restoredFromRun;
55
57
  constructor(options: AgentSessionRunnerOptions);
58
+ private normalizeError;
59
+ private publicError;
56
60
  private logSource;
57
61
  private logContext;
58
62
  private log;
@@ -71,8 +75,10 @@ declare class AgentSessionRunner {
71
75
  private beginNewRun;
72
76
  run(message: string, options?: AgentRunnerRunOptions): Promise<AgentRunResult>;
73
77
  prompt(message: string, options?: AgentRunnerRunOptions): Promise<AgentRunResult>;
78
+ private finalizeMetrics;
79
+ private tryFailureWrite;
74
80
  hydrate(): Promise<void>;
75
- close(): Promise<void>;
81
+ close(input?: SandboxCloseInput): Promise<void>;
76
82
  getTranscript(options?: TranscriptQuery): AgentMessage[];
77
83
  getMetrics(): RunMetrics;
78
84
  getRunInfo(): {
@@ -142,6 +148,7 @@ declare class AgentSessionRunner {
142
148
  private clearDynamicContext;
143
149
  private buildContextSnapshot;
144
150
  private loadContextProvider;
151
+ private handleContextProviderFailure;
145
152
  private normalizeContextContribution;
146
153
  private normalizeContextOutput;
147
154
  private resolveRole;
@@ -163,4 +170,4 @@ declare class AgentSessionRunner {
163
170
  private dispatchHooks;
164
171
  }
165
172
 
166
- export { AgentMessage, AgentRunResult, AgentRunnerRunOptions, AgentSessionRunner, AgentSessionRunnerOptions, AgentSharedState, ContextEntry, ContextEntryFilter, ContextSnapshot, HarnessAgentManifest, HarnessEventEmitOptions, HarnessEventQuery, HarnessEventRecord, HarnessModeSelector, HarnessSnapshot, HarnessSnapshotInput, HarnessSnapshotSummary, JsonObject, ModelProviderInfo, NormalizedAgentDefinition, RunMetrics, RunnerEventListener, TranscriptCursor, TranscriptQuery, TranscriptSeekTarget };
173
+ export { AgentMessage, AgentRunResult, AgentRunnerRunOptions, AgentSessionRunner, AgentSessionRunnerOptions, AgentSharedState, ContextEntry, ContextEntryFilter, ContextSnapshot, HarnessAgentManifest, HarnessEventEmitOptions, HarnessEventQuery, HarnessEventRecord, HarnessModeSelector, HarnessSnapshot, HarnessSnapshotInput, HarnessSnapshotSummary, JsonObject, ModelProviderInfo, NormalizedAgentDefinition, RunMetrics, RunnerEventListener, SandboxCloseInput, TranscriptCursor, TranscriptQuery, TranscriptSeekTarget };