@keystrokehq/keystroke 0.1.20 → 0.1.23

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 (45) hide show
  1. package/dist/agent.cjs +72 -54
  2. package/dist/agent.cjs.map +1 -1
  3. package/dist/agent.d.cts +2 -2
  4. package/dist/agent.d.mts +2 -2
  5. package/dist/agent.mjs +71 -52
  6. package/dist/agent.mjs.map +1 -1
  7. package/dist/config.d.cts +3 -1
  8. package/dist/config.d.cts.map +1 -1
  9. package/dist/config.d.mts +3 -1
  10. package/dist/config.d.mts.map +1 -1
  11. package/dist/{dist-KpQEao0i.mjs → dist-B1Pjv-cM.mjs} +666 -21
  12. package/dist/dist-B1Pjv-cM.mjs.map +1 -0
  13. package/dist/{dist-BFCT4aiu.cjs → dist-D69ocJ7u.cjs} +728 -23
  14. package/dist/dist-D69ocJ7u.cjs.map +1 -0
  15. package/dist/{index-Dlu1kaci.d.cts → index-BQOZkLWG.d.cts} +10 -34
  16. package/dist/index-BQOZkLWG.d.cts.map +1 -0
  17. package/dist/{index-I9DneAMW.d.mts → index-CGf1NwA4.d.mts} +10 -34
  18. package/dist/index-CGf1NwA4.d.mts.map +1 -0
  19. package/dist/{index-BUYoOHa1.d.mts → index-WHR4qX4x.d.mts} +10 -3
  20. package/dist/index-WHR4qX4x.d.mts.map +1 -0
  21. package/dist/{index-Dzm0OSN4.d.cts → index-wpyFrBvl.d.cts} +10 -3
  22. package/dist/index-wpyFrBvl.d.cts.map +1 -0
  23. package/dist/{token-dA7JRmgB.cjs → token-DZEJHEnH.cjs} +2 -2
  24. package/dist/{token-dA7JRmgB.cjs.map → token-DZEJHEnH.cjs.map} +1 -1
  25. package/dist/{token-shJjdG3B.mjs → token-D_x8iwF8.mjs} +2 -2
  26. package/dist/{token-shJjdG3B.mjs.map → token-D_x8iwF8.mjs.map} +1 -1
  27. package/dist/trigger.cjs +1 -1
  28. package/dist/trigger.d.cts +2 -2
  29. package/dist/trigger.d.mts +2 -2
  30. package/dist/trigger.mjs +1 -1
  31. package/dist/workflow.cjs +3 -1
  32. package/dist/workflow.d.cts +2 -2
  33. package/dist/workflow.d.mts +2 -2
  34. package/dist/workflow.mjs +2 -2
  35. package/package.json +1 -1
  36. package/dist/dist-BFCT4aiu.cjs.map +0 -1
  37. package/dist/dist-BekOBuw8.cjs +0 -665
  38. package/dist/dist-BekOBuw8.cjs.map +0 -1
  39. package/dist/dist-C-1uJk5f.mjs +0 -612
  40. package/dist/dist-C-1uJk5f.mjs.map +0 -1
  41. package/dist/dist-KpQEao0i.mjs.map +0 -1
  42. package/dist/index-BUYoOHa1.d.mts.map +0 -1
  43. package/dist/index-Dlu1kaci.d.cts.map +0 -1
  44. package/dist/index-Dzm0OSN4.d.cts.map +0 -1
  45. package/dist/index-I9DneAMW.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-wVbZ-JO2.cjs";
2
2
  import { n as AgentStreamEvent, r as ThinkingLevel, t as AgentMessage } from "./types-ZU829C7A.cjs";
3
- import { A as normalizeAgentDefinition, B as AgentCreateInput, C as SubagentToolMetadata, D as defineAgent, E as buildAgentRuntime, F as resolveAgentWorkspaceRoot, G as ThinkingLevelSchema, H as AgentModelId, I as runAgentPrompt, J as resolveModelCapabilities, K as parseAgentCreateInput, L as runLlm, M as resolveAgentAssets, N as resolveAgentId, O as defineSubagentTool, P as resolveAgentTools, R as streamAgentPrompt, S as SubagentToolInherit, T as agentModelIdsFromStoredManifest, U as AgentModelIdSchema, V as AgentCreateInputSchema, W as DEFAULT_THINKING_LEVEL, Y as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentExperimentalDownload, b as SubagentTool, c as DefineSubagentToolInput, d as ResolvedAgentAssets, f as RunAgentPromptOptions, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinitionInput, j as prepareAgentSession, k as getSubagentToolMetadata, l as PromptInput, m as SandboxedAgentRuntime, n as AgentAssetInput, o as AgentRunConfig, p as SUBAGENT_TOOL, q as resolveAgentModel, r as AgentDefinition, s as BuildAgentRuntimeContext, t as Agent, u as PromptResponse, v as StreamAgentPromptOptions, w as WebToolsOptions, x as SubagentToolDetails, y as StreamAgentPromptResult, z as validateAgentModelIds } from "./index-Dlu1kaci.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-BQOZkLWG.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-CeRtE5Gn.cjs";
5
5
  import { R as loadAssetManifest } from "./index-VAVKlXkw.cjs";
6
- export { type Agent, type AgentAssetInput, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentExperimentalDownload, type AgentMessage, type AgentModelId, AgentModelIdSchema, type AgentRunConfig, type AgentStreamEvent, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type DefineSubagentToolInput, 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, SUBAGENT_TOOL, type SandboxedAgentRuntime, SessionAgentMismatchError, type SessionLifecycle, type SessionLifecycleContext, type StreamAgentPromptOptions, type StreamAgentPromptResult, type SubagentTool, type SubagentToolDetails, type SubagentToolInherit, type SubagentToolMetadata, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, type WebToolsOptions, agentModelIdsFromStoredManifest, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, defineAgent, defineMcp, defineSubagentTool, defineTool, getSubagentToolMetadata, isMcp, loadAssetManifest, modelSupportsMediaType, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveModelCapabilities, resolveThinkingLevel, runAgentPrompt, runLlm, streamAgentPrompt, validateAgentModelIds };
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-wVbZ-JO2.mjs";
2
2
  import { n as AgentStreamEvent, r as ThinkingLevel, t as AgentMessage } from "./types-DpYxSJ5x.mjs";
3
- import { A as normalizeAgentDefinition, B as AgentCreateInput, C as SubagentToolMetadata, D as defineAgent, E as buildAgentRuntime, F as resolveAgentWorkspaceRoot, G as ThinkingLevelSchema, H as AgentModelId, I as runAgentPrompt, J as resolveModelCapabilities, K as parseAgentCreateInput, L as runLlm, M as resolveAgentAssets, N as resolveAgentId, O as defineSubagentTool, P as resolveAgentTools, R as streamAgentPrompt, S as SubagentToolInherit, T as agentModelIdsFromStoredManifest, U as AgentModelIdSchema, V as AgentCreateInputSchema, W as DEFAULT_THINKING_LEVEL, Y as resolveThinkingLevel, _ as SessionLifecycleContext, a as AgentExperimentalDownload, b as SubagentTool, c as DefineSubagentToolInput, d as ResolvedAgentAssets, f as RunAgentPromptOptions, g as SessionLifecycle, h as SessionAgentMismatchError, i as AgentDefinitionInput, j as prepareAgentSession, k as getSubagentToolMetadata, l as PromptInput, m as SandboxedAgentRuntime, n as AgentAssetInput, o as AgentRunConfig, p as SUBAGENT_TOOL, q as resolveAgentModel, r as AgentDefinition, s as BuildAgentRuntimeContext, t as Agent, u as PromptResponse, v as StreamAgentPromptOptions, w as WebToolsOptions, x as SubagentToolDetails, y as StreamAgentPromptResult, z as validateAgentModelIds } from "./index-I9DneAMW.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-CGf1NwA4.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-w8mrqxo3.mjs";
5
5
  import { R as loadAssetManifest } from "./index-gsMwXaZA.mjs";
6
- export { type Agent, type AgentAssetInput, type AgentCreateInput, AgentCreateInputSchema, type AgentDefinition, type AgentDefinitionInput, type AgentExperimentalDownload, type AgentMessage, type AgentModelId, AgentModelIdSchema, type AgentRunConfig, type AgentStreamEvent, type BuildAgentRuntimeContext, DEFAULT_THINKING_LEVEL, type DefineSubagentToolInput, 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, SUBAGENT_TOOL, type SandboxedAgentRuntime, SessionAgentMismatchError, type SessionLifecycle, type SessionLifecycleContext, type StreamAgentPromptOptions, type StreamAgentPromptResult, type SubagentTool, type SubagentToolDetails, type SubagentToolInherit, type SubagentToolMetadata, type ThinkingLevel, ThinkingLevelSchema, type ToolCredentialResolver, type WebToolsOptions, agentModelIdsFromStoredManifest, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, defineAgent, defineMcp, defineSubagentTool, defineTool, getSubagentToolMetadata, isMcp, loadAssetManifest, modelSupportsMediaType, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveModelCapabilities, resolveThinkingLevel, runAgentPrompt, runLlm, streamAgentPrompt, validateAgentModelIds };
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 } from "./dist-_i6Rguqn.mjs";
2
2
  import { c as getRunSignal, f as isWithinActionExecution, h as resolveActionTool, l as getWorkflowRunHandle, u as isAction } from "./dist-CAZlfg_P.mjs";
3
- import { A as getSession, B as withSpan, C as addAgentSessionDuration, D as failAgentSession, E as createSession, F as setSessionTitle, G as jsonSchema, I as touchSession, K as tool, L as captureConsole, M as recordLlmUsageFromAssistantMessage, N as resolveRunSourceFromTraceContext, O as getAgentByRoute, P as setSessionLiveMessage, R as getTraceContext, S as MESSAGE_EVENT_TYPE, T as clearLiveMessage, V as createGateway, W as generateId, _ as generateText, a as isCredentialError, b as readUIMessageStream, c as withCredentialAssignments, d as connectMcpStdio, f as defineMcp, g as generateObject, h as convertToModelMessages, i as enrichCredentialError, j as listMessageEvents, k as getProjectScopeId, l as connectMcpDefinition, m as ToolLoopAgent, n as captureCredentialToolErrors, o as resolveActionCredentials, p as isMcp, r as createCredentialResolver, s as resolveMcpTools, t as buildCredentialRunContext, u as connectMcpServer, v as isFileUIPart, w as appendEvent, x as toUIMessageStream, y as output_exports } from "./dist-KpQEao0i.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-B1Pjv-cM.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-HnnN0a2e.mjs";
5
5
  import { z } from "zod";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -1608,8 +1608,53 @@ async function resolveAgentWorkspaceRoot(agentId, sessionId, options) {
1608
1608
  sessionRoot
1609
1609
  };
1610
1610
  }
1611
+ const subagentParameters = z.object({ message: z.string().describe("Task or question for the subagent") });
1612
+ function defaultToMessage(params) {
1613
+ if (typeof params === "object" && params !== null && "message" in params) {
1614
+ const message = params.message;
1615
+ if (typeof message === "string" && message.length > 0) return message;
1616
+ }
1617
+ throw new Error("Subagent tool params must include a non-empty \"message\" string.");
1618
+ }
1619
+ function toSubagentTool(agent) {
1620
+ const name = agent.slug;
1621
+ return defineTool({
1622
+ name,
1623
+ label: name,
1624
+ description: agent.description ?? name,
1625
+ parameters: subagentParameters,
1626
+ async execute(toolCallId, params, signal) {
1627
+ if (signal?.aborted) throw new Error("Operation aborted");
1628
+ const result = await withSpan({
1629
+ kind: "tool_call",
1630
+ name,
1631
+ refId: toolCallId,
1632
+ metadata: {
1633
+ tool: name,
1634
+ type: "subagent"
1635
+ }
1636
+ }, async () => runDirectAgentPrompt(agent, agent.slug, { message: defaultToMessage(params) }, { tracing: { trigger: "subagent" } }));
1637
+ if (result.error) throw new Error(result.error);
1638
+ return {
1639
+ content: [{
1640
+ type: "text",
1641
+ text: result.text
1642
+ }],
1643
+ details: {
1644
+ sessionId: result.sessionId,
1645
+ error: result.error
1646
+ }
1647
+ };
1648
+ }
1649
+ });
1650
+ }
1651
+ function assertUniqueToolName(seen, tool) {
1652
+ if (seen.has(tool.name)) throw new Error(`Duplicate agent tool name "${tool.name}" in tools[]`);
1653
+ seen.add(tool.name);
1654
+ }
1611
1655
  async function resolveAgentTools(tools, resolver, options) {
1612
1656
  const prepared = [];
1657
+ const seenNames = /* @__PURE__ */ new Set();
1613
1658
  const mcpToolSet = {};
1614
1659
  const mcpConnections = [];
1615
1660
  for (const item of tools) {
@@ -1620,7 +1665,7 @@ async function resolveAgentTools(tools, resolver, options) {
1620
1665
  continue;
1621
1666
  }
1622
1667
  if (isAction(item)) {
1623
- prepared.push(resolveActionTool(item, {
1668
+ const tool = resolveActionTool(item, {
1624
1669
  resolveCredentials: (requirements, consumer, contextOverride) => resolveActionCredentials(requirements, {
1625
1670
  resolveCredentials: resolver.resolve.bind(resolver),
1626
1671
  consumer,
@@ -1632,9 +1677,24 @@ async function resolveAgentTools(tools, resolver, options) {
1632
1677
  id: item.slug
1633
1678
  },
1634
1679
  mcpCredentialContext: options?.mcpCredentialContext
1635
- }));
1680
+ });
1681
+ assertUniqueToolName(seenNames, tool);
1682
+ prepared.push(tool);
1683
+ continue;
1684
+ }
1685
+ if (isWorkflow(item)) {
1686
+ const tool = resolveWorkflowTool(item);
1687
+ assertUniqueToolName(seenNames, tool);
1688
+ prepared.push(tool);
1636
1689
  continue;
1637
1690
  }
1691
+ if (isAgent(item)) {
1692
+ const tool = toSubagentTool(item);
1693
+ assertUniqueToolName(seenNames, tool);
1694
+ prepared.push(tool);
1695
+ continue;
1696
+ }
1697
+ assertUniqueToolName(seenNames, item);
1638
1698
  prepared.push(item);
1639
1699
  }
1640
1700
  return {
@@ -1790,6 +1850,11 @@ function normalizeAgentDefinition(input, options = {}) {
1790
1850
  ...input.web !== void 0 ? { web: input.web } : {}
1791
1851
  };
1792
1852
  }
1853
+ const AGENT = Symbol.for("keystroke.agent");
1854
+ function isAgent(value) {
1855
+ if (typeof value !== "object" || value === null) return false;
1856
+ return value[AGENT] === true;
1857
+ }
1793
1858
  /**
1794
1859
  * Define an agent: normalized config plus a pipeline that builds sandbox + pi runtime on demand.
1795
1860
  */
@@ -1813,57 +1878,11 @@ function defineAgent(input) {
1813
1878
  });
1814
1879
  }
1815
1880
  return runDirectAgentPrompt(agent, slug, promptInput, runPrompt);
1816
- })
1881
+ }),
1882
+ [AGENT]: true
1817
1883
  };
1818
1884
  return agent;
1819
1885
  }
1820
- const SUBAGENT_TOOL = Symbol.for("keystroke.subagent.tool");
1821
- function getSubagentToolMetadata(tool) {
1822
- return tool[SUBAGENT_TOOL];
1823
- }
1824
- function defaultToMessage(params) {
1825
- if (typeof params === "object" && params !== null && "message" in params) {
1826
- const message = params.message;
1827
- if (typeof message === "string" && message.length > 0) return message;
1828
- }
1829
- throw new Error("Subagent tool params must include a \"message\" string, or pass toMessage to defineSubagentTool.");
1830
- }
1831
- function defineSubagentTool(input) {
1832
- const { agent, inherit, toMessage = defaultToMessage, ...toolDef } = input;
1833
- const metadata = {
1834
- agent,
1835
- inherit
1836
- };
1837
- const subagentTool = defineTool({
1838
- ...toolDef,
1839
- description: toolDef.description ?? toolDef.label,
1840
- async execute(toolCallId, params, signal) {
1841
- if (signal?.aborted) throw new Error("Operation aborted");
1842
- const result = await withSpan({
1843
- kind: "tool_call",
1844
- name: toolDef.name,
1845
- refId: toolCallId,
1846
- metadata: {
1847
- tool: toolDef.name,
1848
- type: "subagent"
1849
- }
1850
- }, async () => runDirectAgentPrompt(agent, agent.slug, { message: toMessage(params) }, { tracing: { trigger: "subagent" } }));
1851
- if (result.error) throw new Error(result.error);
1852
- return {
1853
- content: [{
1854
- type: "text",
1855
- text: result.text
1856
- }],
1857
- details: {
1858
- sessionId: result.sessionId,
1859
- error: result.error
1860
- }
1861
- };
1862
- }
1863
- });
1864
- subagentTool[SUBAGENT_TOOL] = metadata;
1865
- return subagentTool;
1866
- }
1867
1886
  const STATIC_MODEL_IDS = new Set([
1868
1887
  "alibaba/qwen-3-14b",
1869
1888
  "alibaba/qwen-3-235b",
@@ -2261,6 +2280,6 @@ async function runLlm(opts, hooks) {
2261
2280
  return runPromptText(opts, hooks);
2262
2281
  }
2263
2282
  //#endregion
2264
- export { AgentCreateInputSchema, AgentModelIdSchema, DEFAULT_THINKING_LEVEL, SUBAGENT_TOOL, SessionAgentMismatchError, ThinkingLevelSchema, agentModelIdsFromStoredManifest, buildAgentRuntime, connectMcpDefinition, connectMcpServer, connectMcpStdio, defineAgent, defineMcp, defineSubagentTool, defineTool, getSubagentToolMetadata, isMcp, loadAssetManifest, modelSupportsMediaType, normalizeAgentDefinition, parseAgentCreateInput, prepareAgentSession, resolveAgentAssets, resolveAgentId, resolveAgentModel, resolveAgentTools, resolveAgentWorkspaceRoot, resolveModelCapabilities, resolveThinkingLevel, runAgentPrompt, runLlm, streamAgentPrompt, validateAgentModelIds };
2283
+ export { AGENT, AgentCreateInputSchema, AgentModelIdSchema, DEFAULT_THINKING_LEVEL, SessionAgentMismatchError, ThinkingLevelSchema, 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 };
2265
2284
 
2266
2285
  //# sourceMappingURL=agent.mjs.map