@keystrokehq/keystroke 1.0.12 → 1.0.14

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.
package/dist/agent.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { l as ThinkingLevel, u as getModel } from "./index-BByNfhJU.cjs";
2
- import { A as forceToolChoice, B as runAgentPrompt, C as SubagentToolMetadata, D as defineSubagentTool, E as defineAgent, F as prompt, G as AgentModelId, H as snapshot, I as resolveAgentAssets, J as ThinkingLevelSchema, K as AgentModelIdSchema, L as resolveAgentId, M as messages, N as normalizeAgentDefinition, O as defineTool, P as prepareAgentSession, R as resolveAgentTools, S as SubagentToolInherit, T as createAgent, U as AgentCreateInput, V as runLlm, W as AgentCreateInputSchema, X as resolveAgentModel, Y as parseAgentCreateInput, Z as resolveThinkingLevel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentTool, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as getSubagentToolMetadata, k as errorMessage, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as DEFAULT_THINKING_LEVEL, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SessionLifecycle, w as buildAgentRuntime, x as SubagentToolDetails, y as SessionLifecycleContext, z as resolveAgentWorkspaceRoot } from "./index-Ohwnfidc.cjs";
2
+ import { A as forceToolChoice, B as runAgentPrompt, C as SubagentToolMetadata, D as defineSubagentTool, E as defineAgent, F as prompt, G as AgentModelId, H as snapshot, I as resolveAgentAssets, J as ThinkingLevelSchema, K as AgentModelIdSchema, L as resolveAgentId, M as messages, N as normalizeAgentDefinition, O as defineTool, P as prepareAgentSession, R as resolveAgentTools, S as SubagentToolInherit, T as createAgent, U as AgentCreateInput, V as runLlm, W as AgentCreateInputSchema, X as resolveAgentModel, Y as parseAgentCreateInput, Z as resolveThinkingLevel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentTool, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as getSubagentToolMetadata, k as errorMessage, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as DEFAULT_THINKING_LEVEL, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SessionLifecycle, w as buildAgentRuntime, x as SubagentToolDetails, y as SessionLifecycleContext, z as resolveAgentWorkspaceRoot } from "./index-BQEzTb7P.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-BTz2OMAM.cjs";
4
4
  import { z as loadAssetManifest } from "./index-DstR-eGs.cjs";
5
5
  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 SessionLifecycle, type SessionLifecycleContext, 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,5 +1,5 @@
1
1
  import { l as ThinkingLevel, u as getModel } from "./index-ClGiGBy7.mjs";
2
- import { A as forceToolChoice, B as runAgentPrompt, C as SubagentToolMetadata, D as defineSubagentTool, E as defineAgent, F as prompt, G as AgentModelId, H as snapshot, I as resolveAgentAssets, J as ThinkingLevelSchema, K as AgentModelIdSchema, L as resolveAgentId, M as messages, N as normalizeAgentDefinition, O as defineTool, P as prepareAgentSession, R as resolveAgentTools, S as SubagentToolInherit, T as createAgent, U as AgentCreateInput, V as runLlm, W as AgentCreateInputSchema, X as resolveAgentModel, Y as parseAgentCreateInput, Z as resolveThinkingLevel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentTool, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as getSubagentToolMetadata, k as errorMessage, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as DEFAULT_THINKING_LEVEL, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SessionLifecycle, w as buildAgentRuntime, x as SubagentToolDetails, y as SessionLifecycleContext, z as resolveAgentWorkspaceRoot } from "./index-DdAOmbQc.mjs";
2
+ import { A as forceToolChoice, B as runAgentPrompt, C as SubagentToolMetadata, D as defineSubagentTool, E as defineAgent, F as prompt, G as AgentModelId, H as snapshot, I as resolveAgentAssets, J as ThinkingLevelSchema, K as AgentModelIdSchema, L as resolveAgentId, M as messages, N as normalizeAgentDefinition, O as defineTool, P as prepareAgentSession, R as resolveAgentTools, S as SubagentToolInherit, T as createAgent, U as AgentCreateInput, V as runLlm, W as AgentCreateInputSchema, X as resolveAgentModel, Y as parseAgentCreateInput, Z as resolveThinkingLevel, _ as SessionAgentMismatchError, a as AgentDefinitionInput, b as SubagentTool, c as BuildAgentRuntimeContext, d as PromptInput, f as PromptResponse, g as SandboxedAgentRuntime, h as SUBAGENT_TOOL, i as AgentDefinition, j as getSubagentToolMetadata, k as errorMessage, l as DefineSubagentToolInput, m as RunAgentPromptOptions, n as AgentAssetInput, o as AgentRuntime, p as ResolvedAgentAssets, q as DEFAULT_THINKING_LEVEL, r as AgentConfig, s as AgentSnapshot, t as Agent, u as ForcedToolChoice, v as SessionLifecycle, w as buildAgentRuntime, x as SubagentToolDetails, y as SessionLifecycleContext, z as resolveAgentWorkspaceRoot } from "./index-ub0OqZXh.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-Cq2F2XdS.mjs";
4
4
  import { z as loadAssetManifest } from "./index-B3iWqXUd.mjs";
5
5
  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 SessionLifecycle, type SessionLifecycleContext, 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
@@ -5314,10 +5314,29 @@ function validateToolArguments(tool, toolCall) {
5314
5314
  throw new Error(errorMessage);
5315
5315
  }
5316
5316
  //#endregion
5317
- //#region ../agent/dist/schemas-DCBOj0XY.mjs
5317
+ //#region ../agent/dist/schemas-T2usEGaN.mjs
5318
5318
  const getModelLoose = getModel;
5319
+ const DEFAULT_GATEWAY_ORIGIN = "https://ai-gateway.vercel.sh";
5319
5320
  const AGENT_MODEL_ID_PATTERN = /^[a-z0-9-]+\/.+/;
5320
5321
  const AgentModelIdSchema = z.custom((value) => typeof value === "string" && AGENT_MODEL_ID_PATTERN.test(value), "model must be vendor/model-id");
5322
+ const GatewayModelPricingSchema = z.object({
5323
+ input: z.string().optional(),
5324
+ output: z.string().optional(),
5325
+ input_cache_read: z.string().optional()
5326
+ });
5327
+ const GatewayModelResponseSchema = z.object({
5328
+ id: z.string().min(1),
5329
+ name: z.string().optional(),
5330
+ type: z.string().optional(),
5331
+ context_window: z.number().int().positive().optional(),
5332
+ max_tokens: z.number().int().positive().optional(),
5333
+ tags: z.array(z.string()).optional(),
5334
+ pricing: GatewayModelPricingSchema.optional()
5335
+ });
5336
+ function parseGatewayModelResponse(body) {
5337
+ const parsed = GatewayModelResponseSchema.safeParse(body);
5338
+ return parsed.success ? parsed.data : void 0;
5339
+ }
5321
5340
  function splitAgentModelId(modelId) {
5322
5341
  const slash = modelId.indexOf("/");
5323
5342
  return {
@@ -5348,11 +5367,95 @@ function resolveGatewayBaseUrl() {
5348
5367
  const projectId = getProjectScopeId();
5349
5368
  return `${platformUrl.replace(/\/$/, "")}/internal/projects/${encodeURIComponent(projectId)}/llm`;
5350
5369
  }
5351
- function resolveGatewayModel(modelId) {
5370
+ function resolveGatewayOrigin(baseUrl) {
5371
+ return baseUrl ?? DEFAULT_GATEWAY_ORIGIN;
5372
+ }
5373
+ function pricePerMillion(value) {
5374
+ if (!value) return 0;
5375
+ const perToken = Number(value);
5376
+ if (!Number.isFinite(perToken) || perToken <= 0) return 0;
5377
+ return perToken * 1e6;
5378
+ }
5379
+ function buildGatewayModel(raw, baseUrl) {
5380
+ if (raw.type && raw.type !== "language") return;
5381
+ const tags = raw.tags ?? [];
5382
+ return {
5383
+ id: raw.id,
5384
+ name: raw.name ?? raw.id,
5385
+ api: "anthropic-messages",
5386
+ provider: "vercel-ai-gateway",
5387
+ baseUrl: resolveGatewayOrigin(baseUrl),
5388
+ reasoning: tags.includes("reasoning"),
5389
+ input: tags.includes("vision") ? ["text", "image"] : ["text"],
5390
+ cost: {
5391
+ input: pricePerMillion(raw.pricing?.input),
5392
+ output: pricePerMillion(raw.pricing?.output),
5393
+ cacheRead: pricePerMillion(raw.pricing?.input_cache_read),
5394
+ cacheWrite: 0
5395
+ },
5396
+ contextWindow: raw.context_window ?? 128e3,
5397
+ maxTokens: raw.max_tokens ?? 8192
5398
+ };
5399
+ }
5400
+ const gatewayModelCache = /* @__PURE__ */ new Map();
5401
+ const gatewayModelPending = /* @__PURE__ */ new Map();
5402
+ function gatewayModelCacheKey(modelId, baseUrl) {
5403
+ return `${resolveGatewayOrigin(baseUrl)}::${modelId}`;
5404
+ }
5405
+ function readCachedGatewayModel(cacheKey) {
5406
+ const entry = gatewayModelCache.get(cacheKey);
5407
+ if (!entry) return { cached: false };
5408
+ return {
5409
+ cached: true,
5410
+ model: entry.status === "found" ? entry.model : void 0
5411
+ };
5412
+ }
5413
+ function writeCachedGatewayModel(cacheKey, model) {
5414
+ gatewayModelCache.set(cacheKey, model ? {
5415
+ status: "found",
5416
+ model
5417
+ } : { status: "missing" });
5418
+ }
5419
+ async function fetchGatewayModel(modelId, baseUrl) {
5420
+ const cacheKey = gatewayModelCacheKey(modelId, baseUrl);
5421
+ const cached = readCachedGatewayModel(cacheKey);
5422
+ if (cached.cached) return cached.model;
5423
+ const pending = gatewayModelPending.get(cacheKey);
5424
+ if (pending) return pending;
5425
+ const request = (async () => {
5426
+ const gatewayApiKey = process.env.AI_GATEWAY_API_KEY?.trim();
5427
+ const headers = {};
5428
+ if (gatewayApiKey) headers.authorization = `Bearer ${gatewayApiKey}`;
5429
+ const url = `${resolveGatewayOrigin(baseUrl)}/v1/models/${modelId}`;
5430
+ try {
5431
+ const response = await fetch(url, { headers });
5432
+ if (!response.ok) {
5433
+ writeCachedGatewayModel(cacheKey, void 0);
5434
+ return;
5435
+ }
5436
+ const raw = parseGatewayModelResponse(await response.json());
5437
+ if (!raw) {
5438
+ writeCachedGatewayModel(cacheKey, void 0);
5439
+ return;
5440
+ }
5441
+ const model = buildGatewayModel(raw, baseUrl);
5442
+ writeCachedGatewayModel(cacheKey, model);
5443
+ return model;
5444
+ } catch {
5445
+ writeCachedGatewayModel(cacheKey, void 0);
5446
+ return;
5447
+ } finally {
5448
+ gatewayModelPending.delete(cacheKey);
5449
+ }
5450
+ })();
5451
+ gatewayModelPending.set(cacheKey, request);
5452
+ return request;
5453
+ }
5454
+ async function resolveGatewayModel(modelId) {
5455
+ const baseUrl = resolveGatewayBaseUrl();
5352
5456
  for (const candidate of agentModelIdCandidates(modelId)) {
5353
5457
  const registered = getModelLoose("vercel-ai-gateway", candidate);
5354
5458
  if (registered) {
5355
- const baseUrl = resolveGatewayBaseUrl();
5356
5459
  if (!baseUrl) return registered;
5357
5460
  return {
5358
5461
  ...registered,
@@ -5360,6 +5463,10 @@ function resolveGatewayModel(modelId) {
5360
5463
  };
5361
5464
  }
5362
5465
  }
5466
+ for (const candidate of agentModelIdCandidates(modelId)) {
5467
+ const fetched = await fetchGatewayModel(candidate, baseUrl);
5468
+ if (fetched) return fetched;
5469
+ }
5363
5470
  throw new Error(`Unknown gateway model: ${modelId}`);
5364
5471
  }
5365
5472
  function resolveDirectModel(modelId) {
@@ -5371,7 +5478,7 @@ function resolveDirectModel(modelId) {
5371
5478
  throw new Error(`Unknown model: ${modelId}`);
5372
5479
  }
5373
5480
  /** Resolve a user-authored model id to a pi-ai {@link Model} for the current runtime env. */
5374
- function resolveAgentModel(modelId) {
5481
+ async function resolveAgentModel(modelId) {
5375
5482
  if (shouldUseGatewayTransport()) return resolveGatewayModel(modelId);
5376
5483
  return resolveDirectModel(modelId);
5377
5484
  }
@@ -13929,7 +14036,7 @@ function normalizeTitle(raw) {
13929
14036
  async function generateSessionTitle(message) {
13930
14037
  const input = message.trim();
13931
14038
  if (!input) return null;
13932
- return normalizeTitle((await completeSimple(resolveAgentModel(TITLE_MODEL_ID), {
14039
+ return normalizeTitle((await completeSimple(await resolveAgentModel(TITLE_MODEL_ID), {
13933
14040
  systemPrompt: TITLE_SYSTEM_PROMPT,
13934
14041
  messages: [{
13935
14042
  role: "user",
@@ -14340,7 +14447,7 @@ async function buildAgentRuntime(def, ctx, runPrompt = {}, agentSlug) {
14340
14447
  return {
14341
14448
  ...createAgent({
14342
14449
  systemPrompt,
14343
- model: resolveAgentModel(def.model),
14450
+ model: await resolveAgentModel(def.model),
14344
14451
  thinkingLevel,
14345
14452
  messages: ctx.messages,
14346
14453
  tools
@@ -14518,7 +14625,7 @@ const RESPOND_TOOL_NAME = "respond";
14518
14625
  const STRUCTURED_OUTPUT_INSTRUCTION = "Respond only by calling `respond` with arguments matching the schema; do not answer in plain text.";
14519
14626
  const MAX_OBJECT_ATTEMPTS = 3;
14520
14627
  /** Same validation as `defineAgent` — format check before catalog lookup. */
14521
- function resolvePromptModel(model) {
14628
+ async function resolvePromptModel(model) {
14522
14629
  return resolveAgentModel(AgentModelIdSchema.parse(model));
14523
14630
  }
14524
14631
  /**
@@ -14569,7 +14676,7 @@ async function recordUsageFromMessage(message, hooks) {
14569
14676
  if (usage) await hooks?.onUsage?.(usage);
14570
14677
  }
14571
14678
  async function runPromptText(opts, hooks) {
14572
- const model = resolvePromptModel(opts.model);
14679
+ const model = await resolvePromptModel(opts.model);
14573
14680
  const reasoning = resolvePromptReasoning(opts.thinkingLevel);
14574
14681
  const message = await completeSimple(model, {
14575
14682
  systemPrompt: opts.system,
@@ -14590,7 +14697,7 @@ async function runPromptText(opts, hooks) {
14590
14697
  async function runPromptObject(opts, hooks) {
14591
14698
  const schema = opts.outputSchema;
14592
14699
  if (!schema) throw new Error("outputSchema is required for structured LLM output");
14593
- const model = resolvePromptModel(opts.model);
14700
+ const model = await resolvePromptModel(opts.model);
14594
14701
  const reasoning = resolvePromptReasoning(opts.thinkingLevel);
14595
14702
  const { toolSchema, unwrap } = wrapSchemaForTool(schema);
14596
14703
  const tool = buildRespondTool(toolSchema);