@keystrokehq/keystroke 0.1.24 → 0.1.25

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 (35) hide show
  1. package/dist/agent.cjs +47 -8
  2. package/dist/agent.cjs.map +1 -1
  3. package/dist/agent.d.cts +1 -1
  4. package/dist/agent.d.mts +1 -1
  5. package/dist/agent.mjs +47 -8
  6. package/dist/agent.mjs.map +1 -1
  7. package/dist/{dist-8lWsO4r8.cjs → dist-C8V-TQaa.cjs} +7 -4
  8. package/dist/{dist-8lWsO4r8.cjs.map → dist-C8V-TQaa.cjs.map} +1 -1
  9. package/dist/{dist-CkW_0ydn.mjs → dist-DXQ9dYvL.mjs} +7 -4
  10. package/dist/{dist-CkW_0ydn.mjs.map → dist-DXQ9dYvL.mjs.map} +1 -1
  11. package/dist/{index-D4OqVz9B.d.mts → index-BboH3db0.d.mts} +15 -4
  12. package/dist/index-BboH3db0.d.mts.map +1 -0
  13. package/dist/{index-DAbG7A9m.d.cts → index-DHCs9z3O.d.cts} +15 -4
  14. package/dist/index-DHCs9z3O.d.cts.map +1 -0
  15. package/dist/{index-CYrYmgtQ.d.cts → index-RQo-Cn3t.d.cts} +15 -2
  16. package/dist/index-RQo-Cn3t.d.cts.map +1 -0
  17. package/dist/{index-DPKSoH6A.d.mts → index-aos8ZlFk.d.mts} +15 -2
  18. package/dist/index-aos8ZlFk.d.mts.map +1 -0
  19. package/dist/{token-aMT15EKk.cjs → token-BgVDRLkZ.cjs} +2 -2
  20. package/dist/{token-aMT15EKk.cjs.map → token-BgVDRLkZ.cjs.map} +1 -1
  21. package/dist/{token-Basg5yOB.mjs → token-C_E59byl.mjs} +2 -2
  22. package/dist/{token-Basg5yOB.mjs.map → token-C_E59byl.mjs.map} +1 -1
  23. package/dist/trigger.cjs +1 -1
  24. package/dist/trigger.d.cts +2 -2
  25. package/dist/trigger.d.mts +2 -2
  26. package/dist/trigger.mjs +1 -1
  27. package/dist/workflow.cjs +1 -1
  28. package/dist/workflow.d.cts +2 -2
  29. package/dist/workflow.d.mts +2 -2
  30. package/dist/workflow.mjs +1 -1
  31. package/package.json +2 -2
  32. package/dist/index-CYrYmgtQ.d.cts.map +0 -1
  33. package/dist/index-D4OqVz9B.d.mts.map +0 -1
  34. package/dist/index-DAbG7A9m.d.cts.map +0 -1
  35. package/dist/index-DPKSoH6A.d.mts.map +0 -1
package/dist/agent.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { A as defineTool, M as modelSupportsMediaType, v as ModelCapabilities } from "./index-DHLs5qPc.cjs";
2
2
  import { n as AgentStreamEvent, r as ThinkingLevel, t as AgentMessage } from "./types-ZU829C7A.cjs";
3
- import { A as resolveAgentWorkspaceRoot, B as ThinkingLevelSchema, C as defineAgent, D as resolveAgentAssets, E as prepareAgentSession, F as AgentCreateInput, H as resolveAgentModel, I as AgentCreateInputSchema, L as AgentModelId, M as runLlm, N as streamAgentPrompt, O as resolveAgentId, P as validateAgentModelIds, R as AgentModelIdSchema, S as buildAgentRuntime, T as normalizeAgentDefinition, U as resolveModelCapabilities, V as parseAgentCreateInput, W as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentDefinitionInput, b as WebToolsOptions, c as AgentToolInput, d as PromptResponse, f as ResolvedAgentAssets, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinition, j as runAgentPrompt, k as resolveAgentTools, l as BuildAgentRuntimeContext, m as SandboxedAgentRuntime, n as Agent, o as AgentExperimentalDownload, p as RunAgentPromptOptions, r as AgentAssetInput, s as AgentRunConfig, t as AGENT, u as PromptInput, v as StreamAgentPromptOptions, w as isAgent, x as agentModelIdsFromStoredManifest, y as StreamAgentPromptResult, z as DEFAULT_THINKING_LEVEL } from "./index-CYrYmgtQ.cjs";
3
+ import { A as resolveAgentWorkspaceRoot, B as ThinkingLevelSchema, C as defineAgent, D as resolveAgentAssets, E as prepareAgentSession, F as AgentCreateInput, H as resolveAgentModel, I as AgentCreateInputSchema, L as AgentModelId, M as runLlm, N as streamAgentPrompt, O as resolveAgentId, P as validateAgentModelIds, R as AgentModelIdSchema, S as buildAgentRuntime, T as normalizeAgentDefinition, U as resolveModelCapabilities, V as parseAgentCreateInput, W as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentDefinitionInput, b as WebToolsOptions, c as AgentToolInput, d as PromptResponse, f as ResolvedAgentAssets, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinition, j as runAgentPrompt, k as resolveAgentTools, l as BuildAgentRuntimeContext, m as SandboxedAgentRuntime, n as Agent, o as AgentExperimentalDownload, p as RunAgentPromptOptions, r as AgentAssetInput, s as AgentRunConfig, t as AGENT, u as PromptInput, v as StreamAgentPromptOptions, w as isAgent, x as agentModelIdsFromStoredManifest, y as StreamAgentPromptResult, z as DEFAULT_THINKING_LEVEL } from "./index-RQo-Cn3t.cjs";
4
4
  import { a as McpDefinitionInput, c as McpStdioOptions, d as McpTransport, f as connectMcpDefinition, g as isMcp, h as defineMcp, i as McpDefinition, l as McpStdioTransport, m as connectMcpStdio, n as McpAuthOptions, o as McpHttpTransport, p as connectMcpServer, r as McpClient, s as McpServerOptions, t as ToolCredentialResolver, u as McpToolConnection } from "./index-JFo1zRHh.cjs";
5
5
  import { R as loadAssetManifest } from "./index-BSerz4I0.cjs";
6
6
  export { AGENT, type Agent, type AgentAssetInput, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentExperimentalDownload, type AgentMessage, type AgentModelId, AgentModelIdSchema, type AgentRunConfig, type AgentStreamEvent, type AgentToolInput, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type McpAuthOptions, type McpClient, type McpDefinition, type McpDefinitionInput, type McpHttpTransport, type McpServerOptions, type McpStdioOptions, type McpStdioTransport, type McpToolConnection, type McpTransport, type ModelCapabilities, type PromptInput, type PromptResponse, type ResolvedAgentAssets, type RunAgentPromptOptions, type SandboxedAgentRuntime, SessionAgentMismatchError, type SessionLifecycle, type SessionLifecycleContext, type StreamAgentPromptOptions, type StreamAgentPromptResult, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, type WebToolsOptions, agentModelIdsFromStoredManifest, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, defineAgent, defineMcp, defineTool, isAgent, isMcp, loadAssetManifest, modelSupportsMediaType, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveModelCapabilities, resolveThinkingLevel, runAgentPrompt, runLlm, streamAgentPrompt, validateAgentModelIds };
package/dist/agent.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { A as defineTool, M as modelSupportsMediaType, v as ModelCapabilities } from "./index-DHLs5qPc.mjs";
2
2
  import { n as AgentStreamEvent, r as ThinkingLevel, t as AgentMessage } from "./types-DpYxSJ5x.mjs";
3
- import { A as resolveAgentWorkspaceRoot, B as ThinkingLevelSchema, C as defineAgent, D as resolveAgentAssets, E as prepareAgentSession, F as AgentCreateInput, H as resolveAgentModel, I as AgentCreateInputSchema, L as AgentModelId, M as runLlm, N as streamAgentPrompt, O as resolveAgentId, P as validateAgentModelIds, R as AgentModelIdSchema, S as buildAgentRuntime, T as normalizeAgentDefinition, U as resolveModelCapabilities, V as parseAgentCreateInput, W as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentDefinitionInput, b as WebToolsOptions, c as AgentToolInput, d as PromptResponse, f as ResolvedAgentAssets, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinition, j as runAgentPrompt, k as resolveAgentTools, l as BuildAgentRuntimeContext, m as SandboxedAgentRuntime, n as Agent, o as AgentExperimentalDownload, p as RunAgentPromptOptions, r as AgentAssetInput, s as AgentRunConfig, t as AGENT, u as PromptInput, v as StreamAgentPromptOptions, w as isAgent, x as agentModelIdsFromStoredManifest, y as StreamAgentPromptResult, z as DEFAULT_THINKING_LEVEL } from "./index-DPKSoH6A.mjs";
3
+ import { A as resolveAgentWorkspaceRoot, B as ThinkingLevelSchema, C as defineAgent, D as resolveAgentAssets, E as prepareAgentSession, F as AgentCreateInput, H as resolveAgentModel, I as AgentCreateInputSchema, L as AgentModelId, M as runLlm, N as streamAgentPrompt, O as resolveAgentId, P as validateAgentModelIds, R as AgentModelIdSchema, S as buildAgentRuntime, T as normalizeAgentDefinition, U as resolveModelCapabilities, V as parseAgentCreateInput, W as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentDefinitionInput, b as WebToolsOptions, c as AgentToolInput, d as PromptResponse, f as ResolvedAgentAssets, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinition, j as runAgentPrompt, k as resolveAgentTools, l as BuildAgentRuntimeContext, m as SandboxedAgentRuntime, n as Agent, o as AgentExperimentalDownload, p as RunAgentPromptOptions, r as AgentAssetInput, s as AgentRunConfig, t as AGENT, u as PromptInput, v as StreamAgentPromptOptions, w as isAgent, x as agentModelIdsFromStoredManifest, y as StreamAgentPromptResult, z as DEFAULT_THINKING_LEVEL } from "./index-aos8ZlFk.mjs";
4
4
  import { a as McpDefinitionInput, c as McpStdioOptions, d as McpTransport, f as connectMcpDefinition, g as isMcp, h as defineMcp, i as McpDefinition, l as McpStdioTransport, m as connectMcpStdio, n as McpAuthOptions, o as McpHttpTransport, p as connectMcpServer, r as McpClient, s as McpServerOptions, t as ToolCredentialResolver, u as McpToolConnection } from "./index-BWOPtMGc.mjs";
5
5
  import { R as loadAssetManifest } from "./index-CuX_PFQi.mjs";
6
6
  export { AGENT, type Agent, type AgentAssetInput, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentExperimentalDownload, type AgentMessage, type AgentModelId, AgentModelIdSchema, type AgentRunConfig, type AgentStreamEvent, type AgentToolInput, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type McpAuthOptions, type McpClient, type McpDefinition, type McpDefinitionInput, type McpHttpTransport, type McpServerOptions, type McpStdioOptions, type McpStdioTransport, type McpToolConnection, type McpTransport, type ModelCapabilities, type PromptInput, type PromptResponse, type ResolvedAgentAssets, type RunAgentPromptOptions, type SandboxedAgentRuntime, SessionAgentMismatchError, type SessionLifecycle, type SessionLifecycleContext, type StreamAgentPromptOptions, type StreamAgentPromptResult, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, type WebToolsOptions, agentModelIdsFromStoredManifest, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, defineAgent, defineMcp, defineTool, isAgent, isMcp, loadAssetManifest, modelSupportsMediaType, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveModelCapabilities, resolveThinkingLevel, runAgentPrompt, runLlm, streamAgentPrompt, validateAgentModelIds };
package/dist/agent.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { f as isRedundantMcpJsonText, g as modelSupportsMediaType, i as PublicModelsResponseSchema, l as defineTool, m as mcpContentBlocksToAiSdkParts, n as DEFAULT_CLOUD_PLATFORM_ORIGIN, p as mcpContentBlocksFromToolOutput, v as parseChatAttachmentServePath, y as requiredDisplayTextSchema } from "./dist-DpOqlEKr.mjs";
2
2
  import { c as getRunSignal, f as isWithinActionExecution, h as resolveActionTool, l as getWorkflowRunHandle, u as isAction } from "./dist-ShPO38SW.mjs";
3
- import { A as output_exports, B as getProjectScopeId, C as defineMcp, D as generateObject, E as convertToModelMessages, F as appendEvent, G as setSessionLiveMessage, H as listMessageEvents, I as clearLiveMessage, J as captureConsole, K as setSessionTitle, L as createSession, M as toUIMessageStream, N as MESSAGE_EVENT_TYPE, O as generateText, P as addAgentSessionDuration, R as failAgentSession, S as connectMcpStdio, T as ToolLoopAgent, U as recordLlmUsageFromAssistantMessage, V as getSession, W as resolveRunSourceFromTraceContext, X as withSpan, Y as getTraceContext, Z as createGateway, _ as resolveActionCredentials, b as connectMcpDefinition, et as generateId, f as buildCredentialRunContext, g as isCredentialError, h as enrichCredentialError, j as readUIMessageStream, k as isFileUIPart, m as createCredentialResolver, nt as tool, p as captureCredentialToolErrors, q as touchSession, s as isWorkflow, tt as jsonSchema, u as resolveWorkflowTool, v as resolveMcpTools, w as isMcp, x as connectMcpServer, y as withCredentialAssignments, z as getAgentByRoute } from "./dist-CkW_0ydn.mjs";
3
+ import { A as output_exports, B as getProjectScopeId, C as defineMcp, D as generateObject, E as convertToModelMessages, F as appendEvent, G as setSessionLiveMessage, H as listMessageEvents, I as clearLiveMessage, J as captureConsole, K as setSessionTitle, L as createSession, M as toUIMessageStream, N as MESSAGE_EVENT_TYPE, O as generateText, P as addAgentSessionDuration, R as failAgentSession, S as connectMcpStdio, T as ToolLoopAgent, U as recordLlmUsageFromAssistantMessage, V as getSession, W as resolveRunSourceFromTraceContext, X as withSpan, Y as getTraceContext, Z as createGateway, _ as resolveActionCredentials, b as connectMcpDefinition, et as generateId, f as buildCredentialRunContext, g as isCredentialError, h as enrichCredentialError, j as readUIMessageStream, k as isFileUIPart, m as createCredentialResolver, nt as tool, p as captureCredentialToolErrors, q as touchSession, s as isWorkflow, tt as jsonSchema, u as resolveWorkflowTool, v as resolveMcpTools, w as isMcp, x as connectMcpServer, y as withCredentialAssignments, z as getAgentByRoute } from "./dist-DXQ9dYvL.mjs";
4
4
  import { J as getBoundAppRoot, X as materializeSandbox, Y as loadAssetManifest, a as defaultWorkspacesRoot, ct as resolveAgentRoot, i as createSandbox, l as materializeSkills, n as createInvokeToolBridge, o as defineSkill, p as sandboxSystemPromptInjection, st as ensureWorkspaceDir, tt as resolveSandboxDefinition, ut as resolveSessionRoot } from "./dist-BhRN0eMQ.mjs";
5
5
  import { z } from "zod";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -1122,6 +1122,25 @@ function llmUsageFromLanguageModelUsage(usage, resolved) {
1122
1122
  }
1123
1123
  };
1124
1124
  }
1125
+ /**
1126
+ * Baked-in AI SDK `providerOptions` a model needs for structured output.
1127
+ *
1128
+ * Anthropic-only today: the AI SDK default (`structuredOutputMode: "auto"`) falls back to a
1129
+ * forced `json` tool, which Anthropic rejects while extended thinking is enabled
1130
+ * ("Thinking may not be enabled when tool_choice forces tool use"). Since our agents default to
1131
+ * `thinkingLevel: "medium"`, every structured `agent.prompt`/`promptLlm` call hits that conflict
1132
+ * and stalls. Forcing `"outputFormat"` uses Anthropic's native JSON-schema output (no forced
1133
+ * tool), which is reasoning-compatible. The AI SDK provider docs do not warn about this, so the
1134
+ * rationale lives here. See vercel/ai#7220, #9351. Origin: changeset `8eaf54a` shipped
1135
+ * `Output.object` + always-on `reasoning` together with no guard.
1136
+ *
1137
+ * OpenAI/Google/xAI use native, reasoning-compatible structured output and need nothing here.
1138
+ */
1139
+ function resolveProviderOptions(args) {
1140
+ if (!args.structuredOutput) return;
1141
+ const { vendor } = splitAgentModelId(args.modelId);
1142
+ if (vendor === "anthropic") return { anthropic: { structuredOutputMode: "outputFormat" } };
1143
+ }
1125
1144
  function buildUserMessageParts(text, files) {
1126
1145
  const parts = [];
1127
1146
  const trimmed = text.trim();
@@ -1159,13 +1178,18 @@ async function streamAgentPrompt(config, input, options) {
1159
1178
  let messagesForModel = await applyCapabilityPlaceholderToMessages(priorMessages, config.resolvedModel.capabilities);
1160
1179
  if (config.experimentalDownload) messagesForModel = await hydrateChatAttachmentMessages(messagesForModel, config.experimentalDownload);
1161
1180
  const modelMessages = await convertToModelMessages(messagesForModel);
1181
+ const providerOptions = resolveProviderOptions({
1182
+ modelId: config.resolvedModel.modelId,
1183
+ structuredOutput: Boolean(options.outputSchema)
1184
+ });
1162
1185
  const streamResult = await new ToolLoopAgent({
1163
1186
  model: config.resolvedModel.languageModel,
1164
1187
  instructions: config.systemPrompt,
1165
1188
  tools: aiTools,
1166
1189
  reasoning: config.thinkingLevel,
1167
1190
  ...config.experimentalDownload ? { experimental_download: config.experimentalDownload } : {},
1168
- ...options.outputSchema ? { output: output_exports.object({ schema: options.outputSchema }) } : {}
1191
+ ...options.outputSchema ? { output: output_exports.object({ schema: options.outputSchema }) } : {},
1192
+ ...providerOptions ? { providerOptions } : {}
1169
1193
  }).stream({
1170
1194
  messages: modelMessages,
1171
1195
  abortSignal: options.signal,
@@ -1616,7 +1640,7 @@ function defaultToMessage(params) {
1616
1640
  }
1617
1641
  throw new Error("Subagent tool params must include a non-empty \"message\" string.");
1618
1642
  }
1619
- function toSubagentTool(agent) {
1643
+ function toSubagentTool(agent, context = {}) {
1620
1644
  const name = agent.slug;
1621
1645
  return defineTool({
1622
1646
  name,
@@ -1633,7 +1657,11 @@ function toSubagentTool(agent) {
1633
1657
  tool: name,
1634
1658
  type: "subagent"
1635
1659
  }
1636
- }, async () => runDirectAgentPrompt(agent, agent.slug, { message: defaultToMessage(params) }, { tracing: { trigger: "subagent" } }));
1660
+ }, async () => runDirectAgentPrompt(agent, agent.slug, { message: defaultToMessage(params) }, {
1661
+ tracing: { trigger: "subagent" },
1662
+ ...context.credentials ? { credentials: context.credentials } : {},
1663
+ ...context.oauthAdapter ? { oauthAdapter: context.oauthAdapter } : {}
1664
+ }));
1637
1665
  if (result.error) throw new Error(result.error);
1638
1666
  return {
1639
1667
  content: [{
@@ -1683,13 +1711,13 @@ async function resolveAgentTools(tools, resolver, options) {
1683
1711
  continue;
1684
1712
  }
1685
1713
  if (isWorkflow(item)) {
1686
- const tool = resolveWorkflowTool(item);
1714
+ const tool = resolveWorkflowTool(item, options?.childContext);
1687
1715
  assertUniqueToolName(seenNames, tool);
1688
1716
  prepared.push(tool);
1689
1717
  continue;
1690
1718
  }
1691
1719
  if (isAgent(item)) {
1692
- const tool = toSubagentTool(item);
1720
+ const tool = toSubagentTool(item, options?.childContext);
1693
1721
  assertUniqueToolName(seenNames, tool);
1694
1722
  prepared.push(tool);
1695
1723
  continue;
@@ -1745,7 +1773,13 @@ async function buildAgentRuntime(def, ctx, runPrompt = {}, agentSlug) {
1745
1773
  type: "agent",
1746
1774
  key: assignmentTargetKey
1747
1775
  } } : void 0;
1748
- const resolved = await resolveAgentTools(def.tools ?? [], resolver, { mcpCredentialContext });
1776
+ const resolved = await resolveAgentTools(def.tools ?? [], resolver, {
1777
+ mcpCredentialContext,
1778
+ childContext: {
1779
+ credentials: runPrompt.credentials,
1780
+ oauthAdapter: runPrompt.oauthAdapter
1781
+ }
1782
+ });
1749
1783
  const captured = captureCredentialToolErrors([
1750
1784
  ...memoryTools,
1751
1785
  ...resolved.tools,
@@ -2271,6 +2305,10 @@ async function runPromptObject(opts, hooks) {
2271
2305
  const schema = opts.outputSchema;
2272
2306
  if (!schema) throw new Error("outputSchema is required for structured LLM output");
2273
2307
  const resolved = await resolvePromptModel(opts.model);
2308
+ const providerOptions = resolveProviderOptions({
2309
+ modelId: resolved.modelId,
2310
+ structuredOutput: true
2311
+ });
2274
2312
  const result = await generateObject({
2275
2313
  model: resolved.languageModel,
2276
2314
  system: opts.system,
@@ -2278,7 +2316,8 @@ async function runPromptObject(opts, hooks) {
2278
2316
  schema,
2279
2317
  ...opts.temperature !== void 0 ? { temperature: opts.temperature } : {},
2280
2318
  ...opts.maxTokens !== void 0 ? { maxOutputTokens: opts.maxTokens } : {},
2281
- ...reasoningCallOption(opts.thinkingLevel)
2319
+ ...reasoningCallOption(opts.thinkingLevel),
2320
+ ...providerOptions ? { providerOptions } : {}
2282
2321
  });
2283
2322
  await recordUsage(resolved, result.usage, hooks);
2284
2323
  return result.object;