@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/action.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_dist = require("./dist-DFXV_Io5.cjs");
2
+ const require_dist = require("./dist-lWDTuftA.cjs");
3
3
  exports.CREDENTIAL_SCOPE_LEVELS = require_dist.CREDENTIAL_SCOPE_LEVELS;
4
4
  exports.DEFAULT_CREDENTIAL_RESOLUTION_CHAIN = require_dist.DEFAULT_CREDENTIAL_RESOLUTION_CHAIN;
5
5
  exports.actionCoreSchema = require_dist.actionCoreSchema;
package/dist/action.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { C as normalizeCredentialList, S as isCredentialInput, a as getActionCredentialRequirements, b as credentialInputSchema, c as isAction, d as registerWorkflowRunGetter, f as resolveActionTool, g as CREDENTIAL_SCOPE_LEVELS, h as runWithinActionExecution, i as executeAction, l as isStepInvocation, m as runWithRunSignal, n as createStepInvocation, o as getRunSignal, p as runOutsideActionExecution, r as defineAction, s as getWorkflowRunHandle, t as actionCoreSchema, u as isWithinActionExecution, v as DEFAULT_CREDENTIAL_RESOLUTION_CHAIN, w as toCredentialRequirement, x as defineCredential, y as credential } from "./dist-DM1Na5CA.mjs";
1
+ import { C as normalizeCredentialList, S as isCredentialInput, a as getActionCredentialRequirements, b as credentialInputSchema, c as isAction, d as registerWorkflowRunGetter, f as resolveActionTool, g as CREDENTIAL_SCOPE_LEVELS, h as runWithinActionExecution, i as executeAction, l as isStepInvocation, m as runWithRunSignal, n as createStepInvocation, o as getRunSignal, p as runOutsideActionExecution, r as defineAction, s as getWorkflowRunHandle, t as actionCoreSchema, u as isWithinActionExecution, v as DEFAULT_CREDENTIAL_RESOLUTION_CHAIN, w as toCredentialRequirement, x as defineCredential, y as credential } from "./dist-BIbZjRd7.mjs";
2
2
  export { CREDENTIAL_SCOPE_LEVELS, DEFAULT_CREDENTIAL_RESOLUTION_CHAIN, actionCoreSchema, createStepInvocation, credential, credentialInputSchema, defineAction, defineCredential, executeAction, getActionCredentialRequirements, getRunSignal, getWorkflowRunHandle, isAction, isCredentialInput, isStepInvocation, isWithinActionExecution, normalizeCredentialList, registerWorkflowRunGetter, resolveActionTool, runOutsideActionExecution, runWithRunSignal, runWithinActionExecution, toCredentialRequirement };
package/dist/agent.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_dist$1 = require("./dist-DnGkWV6x.cjs");
3
- const require_dist$2 = require("./dist-DFXV_Io5.cjs");
3
+ const require_dist$2 = require("./dist-lWDTuftA.cjs");
4
4
  require("./env-api-keys-BFptfIIs.cjs");
5
5
  const require_event_stream = require("./event-stream-CS-ls7wC.cjs");
6
6
  require("./json-parse-CwSaKHrs.cjs");
7
- const require_dist$3 = require("./dist-BkkOal_e.cjs");
7
+ const require_dist$3 = require("./dist-DiqTL3ZF.cjs");
8
8
  let zod = require("zod");
9
9
  let node_async_hooks = require("node:async_hooks");
10
10
  let node_fs = require("node:fs");
@@ -901,7 +901,7 @@ function loadGoogleVertexProviderModule() {
901
901
  return googleVertexProviderModulePromise;
902
902
  }
903
903
  function loadMistralProviderModule() {
904
- mistralProviderModulePromise ||= Promise.resolve().then(() => require("./mistral-DUKMgFL1.cjs")).then((module) => {
904
+ mistralProviderModulePromise ||= Promise.resolve().then(() => require("./mistral-DuG294d1.cjs")).then((module) => {
905
905
  const provider = module;
906
906
  return {
907
907
  stream: provider.streamMistral,
@@ -13744,13 +13744,32 @@ function runWithinAgentPromptExecution(fn) {
13744
13744
  function isWithinAgentPromptExecution() {
13745
13745
  return executingAgentPrompt.getStore() === true;
13746
13746
  }
13747
+ function llmUsageFromAssistantMessage(message) {
13748
+ const usage = message.usage;
13749
+ if (!usage) return null;
13750
+ return {
13751
+ label: message.responseModel ?? message.model ?? "unknown-model",
13752
+ quantity: usage.totalTokens,
13753
+ amount: usage.cost.total,
13754
+ metadata: {
13755
+ provider: message.provider,
13756
+ model: message.model,
13757
+ responseModel: message.responseModel ?? null,
13758
+ input: usage.input,
13759
+ output: usage.output,
13760
+ cacheRead: usage.cacheRead,
13761
+ cacheWrite: usage.cacheWrite,
13762
+ cost: usage.cost
13763
+ }
13764
+ };
13765
+ }
13747
13766
  const SKIPPED_EVENT_TYPES = new Set(["message_update", "tool_execution_update"]);
13748
13767
  function shouldPersistAgentEvent(event) {
13749
13768
  return !SKIPPED_EVENT_TYPES.has(event.type);
13750
13769
  }
13751
13770
  async function persistSessionEvent(options) {
13752
- const { sessionId, memoryConfig, eventType, payload } = options;
13753
- const seq = await require_dist$3.appendEvent(sessionId, eventType, payload);
13771
+ const { sessionId, runId, memoryConfig, eventType, payload } = options;
13772
+ const seq = await require_dist$3.appendEvent(sessionId, eventType, payload, { runId });
13754
13773
  if (memoryConfig) try {
13755
13774
  await appendSessionLine(memoryConfig, sessionId, {
13756
13775
  seq,
@@ -13763,15 +13782,19 @@ async function persistSessionEvent(options) {
13763
13782
  }
13764
13783
  return seq;
13765
13784
  }
13766
- async function persistAgentEvent(sessionId, event, memoryConfig) {
13785
+ async function persistAgentEvent(sessionId, event, options) {
13786
+ const runId = options?.runId ?? null;
13787
+ const memoryConfig = options?.memoryConfig;
13767
13788
  await persistSessionEvent({
13768
13789
  sessionId,
13790
+ runId,
13769
13791
  memoryConfig,
13770
13792
  eventType: event.type,
13771
13793
  payload: event
13772
13794
  });
13773
13795
  if (event.type === "message_end") await persistSessionEvent({
13774
13796
  sessionId,
13797
+ runId,
13775
13798
  memoryConfig,
13776
13799
  eventType: require_dist$3.MESSAGE_EVENT_TYPE,
13777
13800
  payload: event.message
@@ -13789,49 +13812,93 @@ async function prepareAgentSession(agentId, sessionId, options) {
13789
13812
  async function runAgentPrompt(agent, agentId, input, options = {}) {
13790
13813
  const { sessionId } = await prepareAgentSession(agentId, input.sessionId);
13791
13814
  const priorMessages = await require_dist$3.listMessageEvents(sessionId);
13815
+ const runSource = await require_dist$3.resolveAgentRunSourceFromSession(sessionId);
13816
+ const runId = await require_dist$3.createAgentRun({
13817
+ sessionId,
13818
+ agentId,
13819
+ sourceKind: runSource.sourceKind,
13820
+ sourceId: runSource.sourceId,
13821
+ ranByUserId: runSource.ranByUserId
13822
+ });
13792
13823
  const runPrompt = async () => {
13793
- const runtime = await agent.buildRuntime({
13794
- agentId,
13795
- sessionId,
13796
- messages: priorMessages
13797
- }, {
13798
- ...options,
13799
- credentials: require_dist$3.buildCredentialRunContext({ request: {
13800
- ...options.credentials,
13801
- ...input.context
13802
- } })
13803
- });
13804
- const memoryConfig = runtime.memory?.config;
13805
- const unsubscribe = runtime.pi.subscribe(async (event) => {
13806
- if (!shouldPersistAgentEvent(event)) return;
13807
- await persistAgentEvent(sessionId, event, memoryConfig);
13808
- });
13824
+ let promptError = null;
13825
+ let runtime;
13826
+ let unsubscribe;
13827
+ let onAbort;
13828
+ const pendingHandlers = /* @__PURE__ */ new Set();
13809
13829
  const signal = require_dist$2.getRunSignal();
13810
- const onAbort = () => runtime.pi.abort();
13811
- if (signal.aborted) onAbort();
13812
- else signal.addEventListener("abort", onAbort, { once: true });
13813
13830
  try {
13814
- const snapshot = await require_dist$3.captureConsole(async () => prompt(runtime, input.message));
13815
- const credentialError = runtime.takeCredentialError?.();
13831
+ runtime = await agent.buildRuntime({
13832
+ agentId,
13833
+ sessionId,
13834
+ messages: priorMessages
13835
+ }, {
13836
+ ...options,
13837
+ credentials: require_dist$3.buildCredentialRunContext({ request: {
13838
+ ...options.credentials,
13839
+ ...input.context
13840
+ } })
13841
+ });
13842
+ const activeRuntime = runtime;
13843
+ const memoryConfig = activeRuntime.memory?.config;
13844
+ unsubscribe = activeRuntime.pi.subscribe((event) => {
13845
+ if (!shouldPersistAgentEvent(event)) return;
13846
+ const tracked = (async () => {
13847
+ await persistAgentEvent(sessionId, event, {
13848
+ runId,
13849
+ memoryConfig
13850
+ });
13851
+ if (event.type === "message_end" && event.message.role === "assistant") {
13852
+ const usage = llmUsageFromAssistantMessage(event.message);
13853
+ if (usage) await require_dist$3.recordLlmUsageFromAssistantMessage({
13854
+ runId,
13855
+ usage
13856
+ });
13857
+ }
13858
+ })().finally(() => {
13859
+ pendingHandlers.delete(tracked);
13860
+ });
13861
+ pendingHandlers.add(tracked);
13862
+ return tracked;
13863
+ });
13864
+ onAbort = () => activeRuntime.pi.abort();
13865
+ if (signal.aborted) onAbort();
13866
+ else signal.addEventListener("abort", onAbort, { once: true });
13867
+ const snapshot = await require_dist$3.captureConsole(async () => prompt(activeRuntime, input.message));
13868
+ const credentialError = activeRuntime.takeCredentialError?.();
13816
13869
  if (credentialError && require_dist$3.isCredentialError(credentialError)) throw credentialError;
13817
13870
  await require_dist$3.touchSession(sessionId);
13818
13871
  return {
13819
13872
  sessionId,
13873
+ runId,
13820
13874
  messages: messages(snapshot),
13821
13875
  error: errorMessage(snapshot) ?? null,
13822
13876
  canceled: signal.aborted
13823
13877
  };
13878
+ } catch (error) {
13879
+ promptError = error;
13880
+ throw error;
13824
13881
  } finally {
13825
- signal.removeEventListener("abort", onAbort);
13826
- unsubscribe();
13827
- try {
13828
- runtime.memory?.reindexSessions();
13829
- } catch (err) {
13830
- console.error("[memory] session reindex failed:", err);
13831
- }
13832
- runtime.memory?.close();
13833
- await Promise.all(runtime.mcpConnections.map((connection) => connection.close()));
13834
- await runtime.sandbox.dispose();
13882
+ if (onAbort) signal.removeEventListener("abort", onAbort);
13883
+ unsubscribe?.();
13884
+ await Promise.allSettled([...pendingHandlers]);
13885
+ if (runtime) {
13886
+ try {
13887
+ runtime.memory?.reindexSessions();
13888
+ } catch (err) {
13889
+ console.error("[memory] session reindex failed:", err);
13890
+ }
13891
+ runtime.memory?.close();
13892
+ await Promise.all(runtime.mcpConnections.map((connection) => connection.close()));
13893
+ await runtime.sandbox.dispose();
13894
+ }
13895
+ const finishedAt = /* @__PURE__ */ new Date();
13896
+ await require_dist$3.finalizeAgentRunFromPrompt({
13897
+ runId,
13898
+ status: promptError ? "failed" : signal.aborted ? "canceled" : "completed",
13899
+ error: promptError,
13900
+ finishedAt
13901
+ });
13835
13902
  }
13836
13903
  };
13837
13904
  if (options.skipAgentSessionSpan) return runWithinAgentPromptExecution(runPrompt);
@@ -14247,7 +14314,11 @@ function resolvePromptReasoning(thinkingLevel) {
14247
14314
  function formatValidationError(error) {
14248
14315
  return error instanceof Error ? error.message : String(error);
14249
14316
  }
14250
- async function runPromptText(opts) {
14317
+ async function recordUsageFromMessage(message, hooks) {
14318
+ const usage = llmUsageFromAssistantMessage(message);
14319
+ if (usage) await hooks?.onUsage?.(usage);
14320
+ }
14321
+ async function runPromptText(opts, hooks) {
14251
14322
  const model = resolvePromptModel(opts.model);
14252
14323
  const reasoning = resolvePromptReasoning(opts.thinkingLevel);
14253
14324
  const message = await completeSimple(model, {
@@ -14263,9 +14334,10 @@ async function runPromptText(opts) {
14263
14334
  ...opts.maxTokens !== void 0 ? { maxTokens: opts.maxTokens } : {}
14264
14335
  });
14265
14336
  if (message.stopReason === "error") throw new Error(message.errorMessage ?? "LLM request failed");
14337
+ await recordUsageFromMessage(message, hooks);
14266
14338
  return extractText(message);
14267
14339
  }
14268
- async function runPromptObject(opts) {
14340
+ async function runPromptObject(opts, hooks) {
14269
14341
  const schema = opts.outputSchema;
14270
14342
  if (!schema) throw new Error("outputSchema is required for structured LLM output");
14271
14343
  const model = resolvePromptModel(opts.model);
@@ -14295,6 +14367,7 @@ async function runPromptObject(opts) {
14295
14367
  ...toolChoice !== void 0 ? { toolChoice } : {}
14296
14368
  });
14297
14369
  if (message.stopReason === "error") throw new Error(message.errorMessage ?? "LLM request failed");
14370
+ await recordUsageFromMessage(message, hooks);
14298
14371
  toolCall = extractToolCall(message);
14299
14372
  if (!toolCall) throw new Error("Model did not return a tool call");
14300
14373
  return schema.parse(unwrap(toolCall.arguments));
@@ -14323,9 +14396,9 @@ async function runPromptObject(opts) {
14323
14396
  throw lastError instanceof Error ? lastError : new Error(String(lastError));
14324
14397
  }
14325
14398
  /** One-shot LLM generation for workflow `promptLlm` steps (pi-ai transport). */
14326
- async function runLlm(opts) {
14327
- if (opts.outputSchema) return runPromptObject(opts);
14328
- return runPromptText(opts);
14399
+ async function runLlm(opts, hooks) {
14400
+ if (opts.outputSchema) return runPromptObject(opts, hooks);
14401
+ return runPromptText(opts, hooks);
14329
14402
  }
14330
14403
  //#endregion
14331
14404
  exports.AgentCreateInputSchema = AgentCreateInputSchema;