@keystrokehq/keystroke 0.0.160 → 0.0.161

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 (47) hide show
  1. package/dist/action.cjs +1 -1
  2. package/dist/action.mjs +1 -1
  3. package/dist/agent.cjs +115 -42
  4. package/dist/agent.cjs.map +1 -1
  5. package/dist/agent.d.cts +1 -1
  6. package/dist/agent.d.mts +1 -1
  7. package/dist/agent.mjs +115 -42
  8. package/dist/agent.mjs.map +1 -1
  9. package/dist/credentials.cjs +1 -1
  10. package/dist/credentials.mjs +1 -1
  11. package/dist/{dist-DM1Na5CA.mjs → dist-BIbZjRd7.mjs} +3 -1
  12. package/dist/dist-BIbZjRd7.mjs.map +1 -0
  13. package/dist/{dist-C8t_Snfd.mjs → dist-CQH7Ircq.mjs} +3 -3
  14. package/dist/{dist-C8t_Snfd.mjs.map → dist-CQH7Ircq.mjs.map} +1 -1
  15. package/dist/{dist-BAzfOMfz.mjs → dist-DXzvN8aq.mjs} +210 -6
  16. package/dist/{dist-BAzfOMfz.mjs.map → dist-DXzvN8aq.mjs.map} +1 -1
  17. package/dist/{dist-BkkOal_e.cjs → dist-DiqTL3ZF.cjs} +233 -5
  18. package/dist/{dist-BkkOal_e.cjs.map → dist-DiqTL3ZF.cjs.map} +1 -1
  19. package/dist/{dist-DFXV_Io5.cjs → dist-lWDTuftA.cjs} +3 -1
  20. package/dist/dist-lWDTuftA.cjs.map +1 -0
  21. package/dist/{dist-fqWJTm0u.cjs → dist-mblcM3Bv.cjs} +3 -3
  22. package/dist/{dist-fqWJTm0u.cjs.map → dist-mblcM3Bv.cjs.map} +1 -1
  23. package/dist/index-CaW3JRFU.d.cts.map +1 -1
  24. package/dist/index-CaW3JRFU.d.mts.map +1 -1
  25. package/dist/{index-DaxRr-x9.d.cts → index-DIm3_7or.d.cts} +14 -2
  26. package/dist/index-DIm3_7or.d.cts.map +1 -0
  27. package/dist/{index-BbwuSuxl.d.mts → index-IVnunyAF.d.mts} +14 -2
  28. package/dist/index-IVnunyAF.d.mts.map +1 -0
  29. package/dist/{mistral-BRIv8KXE.mjs → mistral-CDuUHkpO.mjs} +2 -2
  30. package/dist/{mistral-BRIv8KXE.mjs.map → mistral-CDuUHkpO.mjs.map} +1 -1
  31. package/dist/{mistral-DUKMgFL1.cjs → mistral-DuG294d1.cjs} +2 -2
  32. package/dist/{mistral-DUKMgFL1.cjs.map → mistral-DuG294d1.cjs.map} +1 -1
  33. package/dist/{sse-Ba5sWI6l.mjs → sse-BBd2aLiw.mjs} +2 -2
  34. package/dist/{sse-Ba5sWI6l.mjs.map → sse-BBd2aLiw.mjs.map} +1 -1
  35. package/dist/{sse-jvB09Ct-.cjs → sse-DCsg_ELF.cjs} +2 -2
  36. package/dist/{sse-jvB09Ct-.cjs.map → sse-DCsg_ELF.cjs.map} +1 -1
  37. package/dist/trigger.cjs +1 -1
  38. package/dist/trigger.d.cts +1 -1
  39. package/dist/trigger.d.mts +1 -1
  40. package/dist/trigger.mjs +1 -1
  41. package/dist/workflow.cjs +1 -1
  42. package/dist/workflow.mjs +1 -1
  43. package/package.json +1 -1
  44. package/dist/dist-DFXV_Io5.cjs.map +0 -1
  45. package/dist/dist-DM1Na5CA.mjs.map +0 -1
  46. package/dist/index-BbwuSuxl.d.mts.map +0 -1
  47. package/dist/index-DaxRr-x9.d.cts.map +0 -1
package/dist/agent.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { l as ThinkingLevel, u as getModel } from "./index-Dr-3nl0A.cjs";
2
- import { A as loadAssetManifest, B as runLlm, C as createAgent, D as errorMessage, E as defineTool, F as resolveAgentAssets, G as AgentModelIdSchema, H as AgentCreateInput, I as resolveAgentId, J as parseAgentCreateInput, K as DEFAULT_THINKING_LEVEL, L as resolveAgentTools, M as normalizeAgentDefinition, N as prepareAgentSession, O as forceToolChoice, P as prompt, R as resolveAgentWorkspaceRoot, S as buildAgentRuntime, T as defineSubagentTool, U as AgentCreateInputSchema, V as snapshot, W as AgentModelId, X as resolveThinkingLevel, Y as resolveAgentModel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentToolInherit, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as messages, k as getSubagentToolMetadata, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as ThinkingLevelSchema, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SubagentTool, w as defineAgent, x as SubagentToolMetadata, y as SubagentToolDetails, z as runAgentPrompt } from "./index-DaxRr-x9.cjs";
2
+ import { A as loadAssetManifest, B as runLlm, C as createAgent, D as errorMessage, E as defineTool, F as resolveAgentAssets, G as AgentModelIdSchema, H as AgentCreateInput, I as resolveAgentId, J as parseAgentCreateInput, K as DEFAULT_THINKING_LEVEL, L as resolveAgentTools, M as normalizeAgentDefinition, N as prepareAgentSession, O as forceToolChoice, P as prompt, R as resolveAgentWorkspaceRoot, S as buildAgentRuntime, T as defineSubagentTool, U as AgentCreateInputSchema, V as snapshot, W as AgentModelId, X as resolveThinkingLevel, Y as resolveAgentModel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentToolInherit, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as messages, k as getSubagentToolMetadata, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as ThinkingLevelSchema, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SubagentTool, w as defineAgent, x as SubagentToolMetadata, y as SubagentToolDetails, z as runAgentPrompt } from "./index-DIm3_7or.cjs";
3
3
  import { a as McpDefinition, c as McpServerOptions, d as McpTransport, f as connectMcpDefinition, g as isMcp, h as defineMcp, i as McpConnection, l as McpStdioOptions, m as connectMcpStdio, n as McpAuthOptions, o as McpDefinitionInput, p as connectMcpServer, r as McpCallToolOptions, s as McpHttpTransport, t as ToolCredentialResolver, u as McpStdioTransport } from "./index-CsGfxjDx.cjs";
4
4
  export { type Agent, type AgentAssetInput, type AgentConfig, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentModelId, AgentModelIdSchema, type AgentRuntime, type AgentSnapshot, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type DefineSubagentToolInput, type ForcedToolChoice, type McpAuthOptions, type McpCallToolOptions, type McpConnection, type McpDefinition, type McpDefinitionInput, type McpHttpTransport, type McpServerOptions, type McpStdioOptions, type McpStdioTransport, type McpTransport, type PromptInput, type PromptResponse, type ResolvedAgentAssets, type RunAgentPromptOptions, SUBAGENT_TOOL, type SandboxedAgentRuntime, SessionAgentMismatchError, type SubagentTool, type SubagentToolDetails, type SubagentToolInherit, type SubagentToolMetadata, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, createAgent, defineAgent, defineMcp, defineSubagentTool, defineTool, errorMessage, forceToolChoice, getModel, getSubagentToolMetadata, isMcp, loadAssetManifest, messages, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, prompt, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveThinkingLevel, runAgentPrompt, runLlm, snapshot };
package/dist/agent.d.mts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { l as ThinkingLevel, u as getModel } from "./index-0KyTNuR1.mjs";
2
- import { A as loadAssetManifest, B as runLlm, C as createAgent, D as errorMessage, E as defineTool, F as resolveAgentAssets, G as AgentModelIdSchema, H as AgentCreateInput, I as resolveAgentId, J as parseAgentCreateInput, K as DEFAULT_THINKING_LEVEL, L as resolveAgentTools, M as normalizeAgentDefinition, N as prepareAgentSession, O as forceToolChoice, P as prompt, R as resolveAgentWorkspaceRoot, S as buildAgentRuntime, T as defineSubagentTool, U as AgentCreateInputSchema, V as snapshot, W as AgentModelId, X as resolveThinkingLevel, Y as resolveAgentModel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentToolInherit, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as messages, k as getSubagentToolMetadata, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as ThinkingLevelSchema, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SubagentTool, w as defineAgent, x as SubagentToolMetadata, y as SubagentToolDetails, z as runAgentPrompt } from "./index-BbwuSuxl.mjs";
2
+ import { A as loadAssetManifest, B as runLlm, C as createAgent, D as errorMessage, E as defineTool, F as resolveAgentAssets, G as AgentModelIdSchema, H as AgentCreateInput, I as resolveAgentId, J as parseAgentCreateInput, K as DEFAULT_THINKING_LEVEL, L as resolveAgentTools, M as normalizeAgentDefinition, N as prepareAgentSession, O as forceToolChoice, P as prompt, R as resolveAgentWorkspaceRoot, S as buildAgentRuntime, T as defineSubagentTool, U as AgentCreateInputSchema, V as snapshot, W as AgentModelId, X as resolveThinkingLevel, Y as resolveAgentModel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentToolInherit, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as messages, k as getSubagentToolMetadata, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as ThinkingLevelSchema, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SubagentTool, w as defineAgent, x as SubagentToolMetadata, y as SubagentToolDetails, z as runAgentPrompt } from "./index-IVnunyAF.mjs";
3
3
  import { a as McpDefinition, c as McpServerOptions, d as McpTransport, f as connectMcpDefinition, g as isMcp, h as defineMcp, i as McpConnection, l as McpStdioOptions, m as connectMcpStdio, n as McpAuthOptions, o as McpDefinitionInput, p as connectMcpServer, r as McpCallToolOptions, s as McpHttpTransport, t as ToolCredentialResolver, u as McpStdioTransport } from "./index-BAIg1_V_.mjs";
4
4
  export { type Agent, type AgentAssetInput, type AgentConfig, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentModelId, AgentModelIdSchema, type AgentRuntime, type AgentSnapshot, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type DefineSubagentToolInput, type ForcedToolChoice, type McpAuthOptions, type McpCallToolOptions, type McpConnection, type McpDefinition, type McpDefinitionInput, type McpHttpTransport, type McpServerOptions, type McpStdioOptions, type McpStdioTransport, type McpTransport, type PromptInput, type PromptResponse, type ResolvedAgentAssets, type RunAgentPromptOptions, SUBAGENT_TOOL, type SandboxedAgentRuntime, SessionAgentMismatchError, type SubagentTool, type SubagentToolDetails, type SubagentToolInherit, type SubagentToolMetadata, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, createAgent, defineAgent, defineMcp, defineSubagentTool, defineTool, errorMessage, forceToolChoice, getModel, getSubagentToolMetadata, isMcp, loadAssetManifest, messages, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, prompt, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveThinkingLevel, runAgentPrompt, runLlm, snapshot };
package/dist/agent.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { $ as Options, $t as IsMap, An as IsSymbol$1, At as Unreachable, Bn as __require, Bt as IsRef$1, Cn as IsMinLength$2, Ct as IsInteger$2, Dn as IsObject$1, Dt as IsCodec, En as IsNumber$1, Et as IsBigInt$2, Fn as Symbols, Ft as IsUnion, G as ensureWorkspaceDir, Gt as IsArray$2, Ht as IsFunction$2, In as guard_exports, It as Union, Jt as IsOptional, K as materializeSandbox, Kt as Base, Ln as __commonJSMin, Lt as IsObject$2, Mn as IsUnsafePropertyKey, Mt as IsEnum$1, Nn as IsValueLike, Nt as IsCyclic, On as IsObjectNotArray$1, Ot as Hash, Pn as Keys$1, Pt as Unknown, Q as Instantiate, Qt as Get$3, Rt as _Object_, Sn as IsMaxLength$2, St as IsIterator$2, Tn as IsNull$1, Tt as IsBoolean$2, Ut as IsConstructor$2, Vt as Ref$1, W as defineSandbox, Wt as IsAsyncIterator$2, X as resolveSandboxRoot, Xt as IsPromise, Yt as Optional, Z as Evaluate$1, Zt as IsSchema$1, _n as IsGreaterThan$1, _t as IsLiteralBigInt, a as createSandbox, an as EveryAll, at as RecordPattern, bn as IsLessEqualThan$1, bt as IsLiteralString, c as defineTool$1, cn as IsAsyncIterator$1, ct as EnumToUnion, d as resolveRunProvider, dn as IsClassInstance, dt as String$1, en as IsSet, et as Compare, fn as IsConstructor$1, ft as IsSymbol$2, gn as IsGreaterEqualThan$1, gt as IsLiteral, hn as IsFunction$1, ht as IsNull$2, i as createJustBashProvider, in as Every$1, it as IsRecord, jn as IsUndefined$1, jt as IsIntersect, kn as IsString$1, kt as hash_exports, ln as IsBigInt$1, lt as TemplateLiteralDecode, mn as IsEqual$1, mt as Number$1, nn as Entries$2, nt as IsVoid, o as defaultWorkspacesRoot, on as HasPropertyKey$1, ot as RecordValue, pn as IsDeepEqual$1, pt as IsNumber$2, q as packAssetDirs, qt as IsBase, r as createInvokeToolBridge, rn as EntriesRegExp, rt as IsUndefined$2, s as defineSkill, sn as IsArray$1, st as IsTuple, tn as IsTypeArray, tt as IsTemplateLiteral, u as materializeSkills, un as IsBoolean$1, ut as IsString$2, vn as IsInteger$1, vt as IsLiteralBoolean, wn as IsMultipleOf$1, wt as Boolean$1, xn as IsLessThan$1, xt as Literal, yn as IsIterator$1, yt as IsLiteralNumber, zn as __exportAll, zt as IsNever } from "./dist-Dv44b9V1.mjs";
2
- import { T as toolParameters, c as isAction, f as resolveActionTool, o as getRunSignal, s as getWorkflowRunHandle, u as isWithinActionExecution } from "./dist-DM1Na5CA.mjs";
2
+ import { T as toolParameters, c as isAction, f as resolveActionTool, o as getRunSignal, s as getWorkflowRunHandle, u as isWithinActionExecution } from "./dist-BIbZjRd7.mjs";
3
3
  import "./env-api-keys-mjSaOeuP.mjs";
4
4
  import { i as getModel, t as AssistantMessageEventStream } from "./event-stream-C7YBbzsc.mjs";
5
5
  import "./json-parse-Drlv-g_X.mjs";
6
- import { C as isMcp, S as defineMcp, a as resolveActionCredentials, b as connectMcpServer, c as appendEvent, d as getSession, f as listMessageEvents, g as getTraceContext, h as captureConsole, i as isCredentialError, l as createSession, m as touchSession, n as captureCredentialToolErrors, o as resolveMcpTools, p as resolveRunSourceFromTraceContext, r as createCredentialResolver, s as MESSAGE_EVENT_TYPE$1, t as buildCredentialRunContext, u as getAgentByRoute, v as withSpan, x as connectMcpStdio, y as connectMcpDefinition } from "./dist-BAzfOMfz.mjs";
6
+ import { C as connectMcpDefinition, D as isMcp, E as defineMcp, S as withSpan, T as connectMcpStdio, _ as resolveRunSourceFromTraceContext, a as resolveActionCredentials, b as getTraceContext, c as appendEvent, d as finalizeAgentRunFromPrompt, f as getAgentByRoute, g as resolveAgentRunSourceFromSession, h as recordLlmUsageFromAssistantMessage, i as isCredentialError, l as createAgentRun, m as listMessageEvents, n as captureCredentialToolErrors, o as resolveMcpTools, p as getSession, r as createCredentialResolver, s as MESSAGE_EVENT_TYPE$1, t as buildCredentialRunContext, u as createSession, v as touchSession, w as connectMcpServer, y as captureConsole } from "./dist-DXzvN8aq.mjs";
7
7
  import { createRequire } from "node:module";
8
8
  import { z } from "zod";
9
9
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -900,7 +900,7 @@ function loadGoogleVertexProviderModule() {
900
900
  return googleVertexProviderModulePromise;
901
901
  }
902
902
  function loadMistralProviderModule() {
903
- mistralProviderModulePromise ||= import("./mistral-BRIv8KXE.mjs").then((module) => {
903
+ mistralProviderModulePromise ||= import("./mistral-CDuUHkpO.mjs").then((module) => {
904
904
  const provider = module;
905
905
  return {
906
906
  stream: provider.streamMistral,
@@ -13733,13 +13733,32 @@ function runWithinAgentPromptExecution(fn) {
13733
13733
  function isWithinAgentPromptExecution() {
13734
13734
  return executingAgentPrompt.getStore() === true;
13735
13735
  }
13736
+ function llmUsageFromAssistantMessage(message) {
13737
+ const usage = message.usage;
13738
+ if (!usage) return null;
13739
+ return {
13740
+ label: message.responseModel ?? message.model ?? "unknown-model",
13741
+ quantity: usage.totalTokens,
13742
+ amount: usage.cost.total,
13743
+ metadata: {
13744
+ provider: message.provider,
13745
+ model: message.model,
13746
+ responseModel: message.responseModel ?? null,
13747
+ input: usage.input,
13748
+ output: usage.output,
13749
+ cacheRead: usage.cacheRead,
13750
+ cacheWrite: usage.cacheWrite,
13751
+ cost: usage.cost
13752
+ }
13753
+ };
13754
+ }
13736
13755
  const SKIPPED_EVENT_TYPES = new Set(["message_update", "tool_execution_update"]);
13737
13756
  function shouldPersistAgentEvent(event) {
13738
13757
  return !SKIPPED_EVENT_TYPES.has(event.type);
13739
13758
  }
13740
13759
  async function persistSessionEvent(options) {
13741
- const { sessionId, memoryConfig, eventType, payload } = options;
13742
- const seq = await appendEvent(sessionId, eventType, payload);
13760
+ const { sessionId, runId, memoryConfig, eventType, payload } = options;
13761
+ const seq = await appendEvent(sessionId, eventType, payload, { runId });
13743
13762
  if (memoryConfig) try {
13744
13763
  await appendSessionLine(memoryConfig, sessionId, {
13745
13764
  seq,
@@ -13752,15 +13771,19 @@ async function persistSessionEvent(options) {
13752
13771
  }
13753
13772
  return seq;
13754
13773
  }
13755
- async function persistAgentEvent(sessionId, event, memoryConfig) {
13774
+ async function persistAgentEvent(sessionId, event, options) {
13775
+ const runId = options?.runId ?? null;
13776
+ const memoryConfig = options?.memoryConfig;
13756
13777
  await persistSessionEvent({
13757
13778
  sessionId,
13779
+ runId,
13758
13780
  memoryConfig,
13759
13781
  eventType: event.type,
13760
13782
  payload: event
13761
13783
  });
13762
13784
  if (event.type === "message_end") await persistSessionEvent({
13763
13785
  sessionId,
13786
+ runId,
13764
13787
  memoryConfig,
13765
13788
  eventType: MESSAGE_EVENT_TYPE$1,
13766
13789
  payload: event.message
@@ -13778,49 +13801,93 @@ async function prepareAgentSession(agentId, sessionId, options) {
13778
13801
  async function runAgentPrompt(agent, agentId, input, options = {}) {
13779
13802
  const { sessionId } = await prepareAgentSession(agentId, input.sessionId);
13780
13803
  const priorMessages = await listMessageEvents(sessionId);
13804
+ const runSource = await resolveAgentRunSourceFromSession(sessionId);
13805
+ const runId = await createAgentRun({
13806
+ sessionId,
13807
+ agentId,
13808
+ sourceKind: runSource.sourceKind,
13809
+ sourceId: runSource.sourceId,
13810
+ ranByUserId: runSource.ranByUserId
13811
+ });
13781
13812
  const runPrompt = async () => {
13782
- const runtime = await agent.buildRuntime({
13783
- agentId,
13784
- sessionId,
13785
- messages: priorMessages
13786
- }, {
13787
- ...options,
13788
- credentials: buildCredentialRunContext({ request: {
13789
- ...options.credentials,
13790
- ...input.context
13791
- } })
13792
- });
13793
- const memoryConfig = runtime.memory?.config;
13794
- const unsubscribe = runtime.pi.subscribe(async (event) => {
13795
- if (!shouldPersistAgentEvent(event)) return;
13796
- await persistAgentEvent(sessionId, event, memoryConfig);
13797
- });
13813
+ let promptError = null;
13814
+ let runtime;
13815
+ let unsubscribe;
13816
+ let onAbort;
13817
+ const pendingHandlers = /* @__PURE__ */ new Set();
13798
13818
  const signal = getRunSignal();
13799
- const onAbort = () => runtime.pi.abort();
13800
- if (signal.aborted) onAbort();
13801
- else signal.addEventListener("abort", onAbort, { once: true });
13802
13819
  try {
13803
- const snapshot = await captureConsole(async () => prompt(runtime, input.message));
13804
- const credentialError = runtime.takeCredentialError?.();
13820
+ runtime = await agent.buildRuntime({
13821
+ agentId,
13822
+ sessionId,
13823
+ messages: priorMessages
13824
+ }, {
13825
+ ...options,
13826
+ credentials: buildCredentialRunContext({ request: {
13827
+ ...options.credentials,
13828
+ ...input.context
13829
+ } })
13830
+ });
13831
+ const activeRuntime = runtime;
13832
+ const memoryConfig = activeRuntime.memory?.config;
13833
+ unsubscribe = activeRuntime.pi.subscribe((event) => {
13834
+ if (!shouldPersistAgentEvent(event)) return;
13835
+ const tracked = (async () => {
13836
+ await persistAgentEvent(sessionId, event, {
13837
+ runId,
13838
+ memoryConfig
13839
+ });
13840
+ if (event.type === "message_end" && event.message.role === "assistant") {
13841
+ const usage = llmUsageFromAssistantMessage(event.message);
13842
+ if (usage) await recordLlmUsageFromAssistantMessage({
13843
+ runId,
13844
+ usage
13845
+ });
13846
+ }
13847
+ })().finally(() => {
13848
+ pendingHandlers.delete(tracked);
13849
+ });
13850
+ pendingHandlers.add(tracked);
13851
+ return tracked;
13852
+ });
13853
+ onAbort = () => activeRuntime.pi.abort();
13854
+ if (signal.aborted) onAbort();
13855
+ else signal.addEventListener("abort", onAbort, { once: true });
13856
+ const snapshot = await captureConsole(async () => prompt(activeRuntime, input.message));
13857
+ const credentialError = activeRuntime.takeCredentialError?.();
13805
13858
  if (credentialError && isCredentialError(credentialError)) throw credentialError;
13806
13859
  await touchSession(sessionId);
13807
13860
  return {
13808
13861
  sessionId,
13862
+ runId,
13809
13863
  messages: messages(snapshot),
13810
13864
  error: errorMessage(snapshot) ?? null,
13811
13865
  canceled: signal.aborted
13812
13866
  };
13867
+ } catch (error) {
13868
+ promptError = error;
13869
+ throw error;
13813
13870
  } finally {
13814
- signal.removeEventListener("abort", onAbort);
13815
- unsubscribe();
13816
- try {
13817
- runtime.memory?.reindexSessions();
13818
- } catch (err) {
13819
- console.error("[memory] session reindex failed:", err);
13820
- }
13821
- runtime.memory?.close();
13822
- await Promise.all(runtime.mcpConnections.map((connection) => connection.close()));
13823
- await runtime.sandbox.dispose();
13871
+ if (onAbort) signal.removeEventListener("abort", onAbort);
13872
+ unsubscribe?.();
13873
+ await Promise.allSettled([...pendingHandlers]);
13874
+ if (runtime) {
13875
+ try {
13876
+ runtime.memory?.reindexSessions();
13877
+ } catch (err) {
13878
+ console.error("[memory] session reindex failed:", err);
13879
+ }
13880
+ runtime.memory?.close();
13881
+ await Promise.all(runtime.mcpConnections.map((connection) => connection.close()));
13882
+ await runtime.sandbox.dispose();
13883
+ }
13884
+ const finishedAt = /* @__PURE__ */ new Date();
13885
+ await finalizeAgentRunFromPrompt({
13886
+ runId,
13887
+ status: promptError ? "failed" : signal.aborted ? "canceled" : "completed",
13888
+ error: promptError,
13889
+ finishedAt
13890
+ });
13824
13891
  }
13825
13892
  };
13826
13893
  if (options.skipAgentSessionSpan) return runWithinAgentPromptExecution(runPrompt);
@@ -14236,7 +14303,11 @@ function resolvePromptReasoning(thinkingLevel) {
14236
14303
  function formatValidationError(error) {
14237
14304
  return error instanceof Error ? error.message : String(error);
14238
14305
  }
14239
- async function runPromptText(opts) {
14306
+ async function recordUsageFromMessage(message, hooks) {
14307
+ const usage = llmUsageFromAssistantMessage(message);
14308
+ if (usage) await hooks?.onUsage?.(usage);
14309
+ }
14310
+ async function runPromptText(opts, hooks) {
14240
14311
  const model = resolvePromptModel(opts.model);
14241
14312
  const reasoning = resolvePromptReasoning(opts.thinkingLevel);
14242
14313
  const message = await completeSimple(model, {
@@ -14252,9 +14323,10 @@ async function runPromptText(opts) {
14252
14323
  ...opts.maxTokens !== void 0 ? { maxTokens: opts.maxTokens } : {}
14253
14324
  });
14254
14325
  if (message.stopReason === "error") throw new Error(message.errorMessage ?? "LLM request failed");
14326
+ await recordUsageFromMessage(message, hooks);
14255
14327
  return extractText(message);
14256
14328
  }
14257
- async function runPromptObject(opts) {
14329
+ async function runPromptObject(opts, hooks) {
14258
14330
  const schema = opts.outputSchema;
14259
14331
  if (!schema) throw new Error("outputSchema is required for structured LLM output");
14260
14332
  const model = resolvePromptModel(opts.model);
@@ -14284,6 +14356,7 @@ async function runPromptObject(opts) {
14284
14356
  ...toolChoice !== void 0 ? { toolChoice } : {}
14285
14357
  });
14286
14358
  if (message.stopReason === "error") throw new Error(message.errorMessage ?? "LLM request failed");
14359
+ await recordUsageFromMessage(message, hooks);
14287
14360
  toolCall = extractToolCall(message);
14288
14361
  if (!toolCall) throw new Error("Model did not return a tool call");
14289
14362
  return schema.parse(unwrap(toolCall.arguments));
@@ -14312,9 +14385,9 @@ async function runPromptObject(opts) {
14312
14385
  throw lastError instanceof Error ? lastError : new Error(String(lastError));
14313
14386
  }
14314
14387
  /** One-shot LLM generation for workflow `promptLlm` steps (pi-ai transport). */
14315
- async function runLlm(opts) {
14316
- if (opts.outputSchema) return runPromptObject(opts);
14317
- return runPromptText(opts);
14388
+ async function runLlm(opts, hooks) {
14389
+ if (opts.outputSchema) return runPromptObject(opts, hooks);
14390
+ return runPromptText(opts, hooks);
14318
14391
  }
14319
14392
  //#endregion
14320
14393
  export { AgentCreateInputSchema, AgentModelIdSchema, DEFAULT_THINKING_LEVEL, SUBAGENT_TOOL, SessionAgentMismatchError, ThinkingLevelSchema, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, createAgent, defineAgent, defineMcp, defineSubagentTool, defineTool, errorMessage, forceToolChoice, getModel, getSubagentToolMetadata, isMcp, loadAssetManifest, messages, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, prompt, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveThinkingLevel, runAgentPrompt, runLlm, snapshot };