@runtypelabs/cli 2.16.6 → 2.16.7

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 (2) hide show
  1. package/dist/index.js +300 -30
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -16591,6 +16591,173 @@ var promptConfigSchema = external_exports.object({
16591
16591
  mode: external_exports.string().optional()
16592
16592
  // UI mode (task, agent, etc.)
16593
16593
  });
16594
+ var conditionalConfigSchema = external_exports.object({
16595
+ condition: external_exports.string().min(1, "Condition is required"),
16596
+ trueSteps: external_exports.array(external_exports.lazy(() => contextStepSchema)),
16597
+ falseSteps: external_exports.array(external_exports.lazy(() => contextStepSchema)).optional()
16598
+ });
16599
+ var saveMemoryConfigSchema = external_exports.object({
16600
+ profileTemplate: external_exports.string().min(1, "Profile template is required"),
16601
+ contentVariable: external_exports.string().min(1, "Content variable is required"),
16602
+ sessionId: external_exports.string().nullable().optional(),
16603
+ outputVariable: external_exports.string().optional(),
16604
+ errorHandling: contextErrorHandlingConfigSchema.optional(),
16605
+ defaultValue: external_exports.any().optional()
16606
+ });
16607
+ var recallMemoryConfigSchema = external_exports.object({
16608
+ profileTemplate: external_exports.string().min(1, "Profile template is required"),
16609
+ queryTemplate: external_exports.string().min(1, "Query template is required"),
16610
+ thinkingLevel: external_exports.enum(["low", "medium", "high"]).optional(),
16611
+ responseLength: external_exports.enum(["short", "medium", "long"]).optional(),
16612
+ outputVariable: external_exports.string().min(1, "Output variable is required"),
16613
+ errorHandling: contextErrorHandlingConfigSchema.optional(),
16614
+ defaultValue: external_exports.any().optional()
16615
+ });
16616
+ var memorySummaryConfigSchema = external_exports.object({
16617
+ profileTemplate: external_exports.string().min(1, "Profile template is required"),
16618
+ sessionId: external_exports.string().nullable().optional(),
16619
+ outputVariable: external_exports.string().min(1, "Output variable is required"),
16620
+ errorHandling: contextErrorHandlingConfigSchema.optional(),
16621
+ defaultValue: external_exports.any().optional()
16622
+ });
16623
+ var sharedStepConfigSchemas = {
16624
+ "set-variable": setVariableConfigSchema,
16625
+ "send-stream": sendStreamConfigSchema,
16626
+ "fetch-github": fetchGithubConfigSchema,
16627
+ "api-call": apiCallConfigSchema,
16628
+ "execute-agent": executeAgentConfigSchema,
16629
+ "fetch-url": fetchUrlConfigSchema,
16630
+ crawl: crawlConfigSchema,
16631
+ search: searchConfigSchema,
16632
+ "send-text": sendTextConfigSchema,
16633
+ "send-event": sendEventConfigSchema,
16634
+ "store-asset": storeAssetConfigSchema,
16635
+ "generate-pdf": generatePdfConfigSchema,
16636
+ template: templateConfigSchema,
16637
+ "wait-until": waitUntilConfigSchema,
16638
+ "generate-embedding": generateEmbeddingConfigSchema,
16639
+ "vector-search": vectorSearchConfigSchema,
16640
+ "tool-call": toolCallConfigSchema,
16641
+ "store-vector": storeVectorConfigSchema,
16642
+ "upsert-record": upsertRecordConfigSchema,
16643
+ "send-email": sendEmailConfigSchema,
16644
+ "paginate-api": paginateApiConfigSchema,
16645
+ "retrieve-record": retrieveRecordConfigSchema,
16646
+ "update-record": updateRecordConfigSchema,
16647
+ "transform-data": transformDataConfigSchema,
16648
+ prompt: promptConfigSchema,
16649
+ conditional: conditionalConfigSchema,
16650
+ "save-memory": saveMemoryConfigSchema,
16651
+ "recall-memory": recallMemoryConfigSchema,
16652
+ "memory-summary": memorySummaryConfigSchema
16653
+ };
16654
+ var makeNestedStepEnvelope = (type, configSchema) => external_exports.object({
16655
+ type: external_exports.literal(type),
16656
+ config: configSchema,
16657
+ id: external_exports.string().optional(),
16658
+ name: external_exports.string().optional(),
16659
+ order: external_exports.number().optional(),
16660
+ enabled: external_exports.boolean().optional(),
16661
+ when: external_exports.string().optional()
16662
+ }).passthrough();
16663
+ var contextStepSchema = external_exports.discriminatedUnion(
16664
+ "type",
16665
+ Object.entries(sharedStepConfigSchemas).map(
16666
+ ([type, configSchema]) => makeNestedStepEnvelope(type, configSchema)
16667
+ )
16668
+ );
16669
+ var CONTEXT_STEP_TYPES = [
16670
+ "crawl",
16671
+ "fetch-url",
16672
+ "retrieve-record",
16673
+ "fetch-github",
16674
+ "api-call",
16675
+ "transform-data",
16676
+ "template",
16677
+ "conditional",
16678
+ "set-variable",
16679
+ "upsert-record",
16680
+ "send-email",
16681
+ "send-text",
16682
+ "send-event",
16683
+ "send-stream",
16684
+ "update-record",
16685
+ "search",
16686
+ "generate-embedding",
16687
+ "vector-search",
16688
+ "tool-call",
16689
+ "wait-until",
16690
+ "paginate-api",
16691
+ "store-vector",
16692
+ "execute-agent",
16693
+ "store-asset",
16694
+ "generate-pdf",
16695
+ "save-memory",
16696
+ "recall-memory",
16697
+ "memory-summary"
16698
+ ];
16699
+ var FLOW_STEP_TYPES = ["prompt", ...CONTEXT_STEP_TYPES];
16700
+ var flowStepValidationSchema = external_exports.object({
16701
+ // Optional stable client-supplied identifier. Preserved across saves so that
16702
+ // `flow_step_results.stepId` references stay valid and dashboard UI state
16703
+ // (test-step modal, deeplinks, in-flight requests) doesn't go stale after a
16704
+ // save. When omitted the server mints one.
16705
+ id: external_exports.string().min(1).max(128).regex(/^[A-Za-z0-9_\-:.]+$/, "Step id must be alphanumeric with _ - : . only").optional(),
16706
+ type: external_exports.enum(FLOW_STEP_TYPES),
16707
+ name: external_exports.string().min(1, "Step name is required"),
16708
+ order: external_exports.number().int().min(0).optional(),
16709
+ enabled: external_exports.boolean().default(true),
16710
+ when: external_exports.string().max(500).optional(),
16711
+ config: external_exports.any()
16712
+ });
16713
+ var createFlowValidationSchema = external_exports.object({
16714
+ name: external_exports.string().min(1, "Flow name is required"),
16715
+ flowSteps: external_exports.array(flowStepValidationSchema).optional(),
16716
+ // Backward compatibility: some clients still send `steps` instead of `flowSteps`.
16717
+ steps: external_exports.array(flowStepValidationSchema).optional()
16718
+ }).refine((data) => !(data.flowSteps && data.steps), {
16719
+ message: "Provide either 'flowSteps' or 'steps', not both.",
16720
+ path: ["flowSteps"]
16721
+ }).transform((data) => ({
16722
+ name: data.name,
16723
+ flowSteps: data.flowSteps ?? data.steps ?? []
16724
+ }));
16725
+ var updateFlowValidationSchema = external_exports.object({
16726
+ name: external_exports.string().min(1, "Flow name is required").optional(),
16727
+ flowSteps: external_exports.array(flowStepValidationSchema).optional()
16728
+ });
16729
+ var CAMEL_CASE_TOOL_KEYS = {
16730
+ toolIds: true,
16731
+ toolConfigs: true,
16732
+ runtimeTools: true,
16733
+ mcpServers: true,
16734
+ maxToolCalls: true,
16735
+ toolCallStrategy: true,
16736
+ parallelCalls: true,
16737
+ perToolLimits: true,
16738
+ approval: true,
16739
+ subagentConfig: true,
16740
+ codeModeConfig: true,
16741
+ toolSearch: true
16742
+ };
16743
+ var SNAKE_CASE_TOOL_KEYS = {
16744
+ tool_ids: true,
16745
+ tool_configs: true,
16746
+ runtime_tools: true,
16747
+ mcp_servers: true,
16748
+ max_tool_calls: true,
16749
+ tool_call_strategy: true,
16750
+ parallel_calls: true,
16751
+ per_tool_limits: true,
16752
+ approval: true,
16753
+ subagent_config: true,
16754
+ code_mode_config: true,
16755
+ tool_search: true
16756
+ };
16757
+ var KNOWN_TOOL_KEYS = /* @__PURE__ */ new Set([
16758
+ ...Object.keys(CAMEL_CASE_TOOL_KEYS),
16759
+ ...Object.keys(SNAKE_CASE_TOOL_KEYS)
16760
+ ]);
16594
16761
  var SERIALIZED_HELPERS_SOURCE = `
16595
16762
  // Transform helper functions (from packages/shared/src/transform-helpers.ts)
16596
16763
  const helpers = (function createHelpers() {
@@ -16860,34 +17027,6 @@ const helpers = (function createHelpers() {
16860
17027
  }
16861
17028
  })()
16862
17029
  `.trim();
16863
- var CONTEXT_STEP_TYPES = [
16864
- "crawl",
16865
- "fetch-url",
16866
- "retrieve-record",
16867
- "fetch-github",
16868
- "api-call",
16869
- "transform-data",
16870
- "template",
16871
- "conditional",
16872
- "set-variable",
16873
- "upsert-record",
16874
- "send-email",
16875
- "send-text",
16876
- "send-event",
16877
- "send-stream",
16878
- "update-record",
16879
- "search",
16880
- "generate-embedding",
16881
- "vector-search",
16882
- "tool-call",
16883
- "wait-until",
16884
- "paginate-api",
16885
- "store-vector",
16886
- "execute-agent",
16887
- "store-asset",
16888
- "generate-pdf"
16889
- ];
16890
- var FLOW_STEP_TYPES = ["prompt", ...CONTEXT_STEP_TYPES];
16891
17030
  var PROVIDER_SECRET_SPECS = [
16892
17031
  // ----- Explicit-prefix providers -----
16893
17032
  {
@@ -31165,6 +31304,87 @@ var CORE_BUILTIN_TOOLS_REGISTRY = [
31165
31304
  requiresApiKey: false,
31166
31305
  executionHint: "platform",
31167
31306
  platformKeySupport: true
31307
+ },
31308
+ // -----------------------------------------------------------------------
31309
+ // Memory tools — require agent.config.memory.enabled (resolved per turn by
31310
+ // the agent loop; absent until then, so these fail closed with
31311
+ // `memory_not_enabled`). Semantics mirror the non-destructive session API:
31312
+ // save, recall, and summary only — no destructive per-memory delete.
31313
+ // -----------------------------------------------------------------------
31314
+ {
31315
+ id: "save_memory",
31316
+ name: "Save to Memory",
31317
+ description: "Save a fact, preference, or observation to long-term memory. Use when the user tells you something worth remembering across sessions \u2014 preferences, names, decisions, rules they want enforced. Pass the information as a plain sentence. Returns { success, memoryId, type, summary }.",
31318
+ category: BuiltInToolCategory.DATA_MANAGEMENT,
31319
+ providers: [BuiltInToolProvider.MULTI],
31320
+ parametersSchema: {
31321
+ type: "object",
31322
+ properties: {
31323
+ content: {
31324
+ type: "string",
31325
+ description: 'Natural-language statement to remember. Example: "User prefers dark mode" or "Meeting with Acme is rescheduled to Friday."',
31326
+ minLength: 1
31327
+ },
31328
+ sessionId: {
31329
+ type: "string",
31330
+ description: "Optional session scope for the memory. Omit to store against the profile default."
31331
+ }
31332
+ },
31333
+ required: ["content"]
31334
+ },
31335
+ executionHint: "platform",
31336
+ requiresApiKey: false,
31337
+ platformKeySupport: false
31338
+ },
31339
+ {
31340
+ id: "recall_memory",
31341
+ name: "Recall from Memory",
31342
+ description: "Search long-term memory for information relevant to a query. Returns a synthesized answer plus scored candidate memories with IDs. Call this whenever the user refers to past conversations, prior decisions, or things you should already know. Returns { answer, count, candidates: [{ id, summary, score }] }.",
31343
+ category: BuiltInToolCategory.DATA_MANAGEMENT,
31344
+ providers: [BuiltInToolProvider.MULTI],
31345
+ parametersSchema: {
31346
+ type: "object",
31347
+ properties: {
31348
+ query: {
31349
+ type: "string",
31350
+ description: 'Natural-language query. Example: "What are the user preferences?"',
31351
+ minLength: 1
31352
+ },
31353
+ thinkingLevel: {
31354
+ type: "string",
31355
+ enum: ["low", "medium", "high"],
31356
+ description: 'Controls search breadth. Default "low" is usually sufficient; raise to "medium" or "high" for ambiguous questions.'
31357
+ },
31358
+ responseLength: {
31359
+ type: "string",
31360
+ enum: ["short", "medium", "long"],
31361
+ description: 'Controls how detailed the synthesized answer is. Default "medium"; use "short" for a quick fact lookup or "long" for a thorough recall.'
31362
+ }
31363
+ },
31364
+ required: ["query"]
31365
+ },
31366
+ executionHint: "platform",
31367
+ requiresApiKey: false,
31368
+ platformKeySupport: false
31369
+ },
31370
+ {
31371
+ id: "memory_summary",
31372
+ name: "Get Memory Summary",
31373
+ description: "Fetch a Markdown summary of what you know \u2014 key facts, recent events, active tasks, last session, and standing instructions. Useful at the start of a session to orient yourself. Returns { summary }.",
31374
+ category: BuiltInToolCategory.DATA_MANAGEMENT,
31375
+ providers: [BuiltInToolProvider.MULTI],
31376
+ parametersSchema: {
31377
+ type: "object",
31378
+ properties: {
31379
+ sessionId: {
31380
+ type: "string",
31381
+ description: "Optional session scope. When provided, the summary covers that session; omit for a profile-wide summary."
31382
+ }
31383
+ }
31384
+ },
31385
+ executionHint: "platform",
31386
+ requiresApiKey: false,
31387
+ platformKeySupport: false
31168
31388
  }
31169
31389
  ];
31170
31390
  var BUILTIN_TOOLS_REGISTRY = [
@@ -34740,6 +34960,18 @@ var temporalConfigSchema = external_exports.object({
34740
34960
  groundNow: external_exports.boolean().optional(),
34741
34961
  timezone: external_exports.string().optional()
34742
34962
  });
34963
+ var memoryConfigSchema = external_exports.object({
34964
+ enabled: external_exports.boolean(),
34965
+ profileTemplate: external_exports.string().optional(),
34966
+ // When omitted and `enabled` is true, treated as `true` (smart default): a
34967
+ // Markdown memory summary is woven into the agent's system prompt on each
34968
+ // turn so the agent always has the user in context — without the model having
34969
+ // to call `recall_memory` first. (The summary is cached per profile so the
34970
+ // synthesis cost is paid once, not on every turn.) Set false to skip
34971
+ // injection (focused task agents that don't benefit from a profile overview).
34972
+ // Resolved via `shouldInjectMemorySummary` so the default lives in one place.
34973
+ injectSummary: external_exports.boolean().optional()
34974
+ });
34743
34975
  var agentRuntimeConfigSchema = external_exports.object({
34744
34976
  model: external_exports.string().optional(),
34745
34977
  systemPrompt: external_exports.string().optional(),
@@ -34854,7 +35086,12 @@ var agentRuntimeConfigSchema = external_exports.object({
34854
35086
  // `elapsedThresholdSeconds`). `groundNow` additionally surfaces the current
34855
35087
  // datetime in that block. `timezone` is the agent's DEFAULT IANA zone —
34856
35088
  // the layered tool/decorator resolution overrides it per-conversation.
34857
- temporal: temporalConfigSchema.optional()
35089
+ temporal: temporalConfigSchema.optional(),
35090
+ // Long-term memory (Cloudflare Agent Memory). Single-sourced as
35091
+ // `memoryConfigSchema` (below) and reused by the update-agent, dispatch
35092
+ // inline-agent, and FPO agent schemas so the four surfaces never drift —
35093
+ // mirroring how `temporalConfigSchema` is shared.
35094
+ memory: memoryConfigSchema.optional()
34858
35095
  });
34859
35096
  var SECRET_REF_PATTERN = /\{\{secret:([A-Z][A-Z0-9_]*[A-Z0-9])\}\}/g;
34860
35097
  function extractSecretReferences(template) {
@@ -35067,6 +35304,7 @@ var agentDefinitionSchema = external_exports.object({
35067
35304
  // External / managed agent configs
35068
35305
  externalConfig: agentExternalConfigSchema.optional(),
35069
35306
  claudeManagedConfig: agentClaudeManagedConfigSchema.optional(),
35307
+ memory: memoryConfigSchema.optional(),
35070
35308
  createPolicy: createPolicySchema
35071
35309
  });
35072
35310
  var agentDefinitionSchemaV2 = external_exports.object({
@@ -35277,6 +35515,18 @@ var fullProductObjectSchema = external_exports.object({
35277
35515
  }
35278
35516
  }
35279
35517
  });
35518
+ var FLAT_ADVANCED_CONFIG_KEYS = {
35519
+ loopConfig: true,
35520
+ reasoning: true,
35521
+ voice: true,
35522
+ errorHandling: true,
35523
+ artifacts: true,
35524
+ advisor: true,
35525
+ memory: true
35526
+ };
35527
+ var FLAT_ADVANCED_CONFIG_KEY_LIST = Object.keys(
35528
+ FLAT_ADVANCED_CONFIG_KEYS
35529
+ );
35280
35530
  function createIssue(severity, code, message, path16, suggestedFix) {
35281
35531
  return { code, message, path: path16, severity, ...suggestedFix ? { suggestedFix } : {} };
35282
35532
  }
@@ -36453,6 +36703,24 @@ var FLOW_STEP_TYPE_METADATA = {
36453
36703
  category: "document",
36454
36704
  isPrompt: false,
36455
36705
  configHints: "html OR markdown, filename, visibility (public|private), pdfOptions (format, landscape, margin), outputVariable"
36706
+ },
36707
+ "save-memory": {
36708
+ description: "Ingest text from a variable into a Cloudflare Agent Memory profile so future recall-memory / memory-summary steps can synthesize from it.",
36709
+ category: "integration",
36710
+ isPrompt: false,
36711
+ configHints: "profileTemplate (template), contentVariable (variable path), sessionId (optional), outputVariable (optional), errorHandling"
36712
+ },
36713
+ "recall-memory": {
36714
+ description: "Recall a synthesized natural-language answer from a Cloudflare Agent Memory profile, given a query.",
36715
+ category: "integration",
36716
+ isPrompt: false,
36717
+ configHints: "profileTemplate (template), queryTemplate (template), outputVariable, thinkingLevel (low|medium|high), responseLength (short|medium|long), errorHandling"
36718
+ },
36719
+ "memory-summary": {
36720
+ description: "Fetch a markdown summary (Key Facts / Recent Events / Active Tasks) of a Cloudflare Agent Memory profile.",
36721
+ category: "integration",
36722
+ isPrompt: false,
36723
+ configHints: "profileTemplate (template), outputVariable, sessionId (optional), errorHandling"
36456
36724
  }
36457
36725
  };
36458
36726
  var platformCatalogSchema = external_exports.object({
@@ -37063,6 +37331,7 @@ ${orthogonalLines.join("\n")}
37063
37331
  - **Speech-to-text** \u2192 \`builtin:elevenlabs-stt\`
37064
37332
  - **Emit rich content** \u2192 \`builtin:emit_artifact_markdown\`, \`builtin:emit_artifact_component\`
37065
37333
  - **Record CRUD** \u2192 \`builtin:runtype_record_upsert\`, \`builtin:runtype_record_get\`, \`builtin:runtype_record_list\`, \`builtin:runtype_record_delete\`
37334
+ - **Agent memory (persist facts and recall them across sessions)** \u2192 \`builtin:save_memory\`, \`builtin:recall_memory\`, \`builtin:memory_summary\` \u2014 the memory bundle, attached together when memory is enabled on the agent
37066
37335
  - **E-commerce checkout** \u2192 \`builtin:ucp_discover\`, \`builtin:ucp_search_catalog\`, \`builtin:ucp_create_checkout\`
37067
37336
 
37068
37337
  ### Custom MCP Servers (saved by the user)
@@ -37788,7 +38057,8 @@ var AgentInputSchema = external_exports.object({
37788
38057
  advisor: external_exports.object({
37789
38058
  model: external_exports.string(),
37790
38059
  systemPrompt: external_exports.string().optional()
37791
- }).optional().nullable()
38060
+ }).optional().nullable(),
38061
+ memory: memoryConfigSchema.optional()
37792
38062
  });
37793
38063
  var TextContentPartSchema = external_exports.object({
37794
38064
  type: external_exports.literal("text"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runtypelabs/cli",
3
- "version": "2.16.6",
3
+ "version": "2.16.7",
4
4
  "description": "Command-line interface for Runtype AI platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "rosie-skills": "0.8.1",
23
23
  "yaml": "^2.9.0",
24
24
  "@runtypelabs/ink-components": "0.3.2",
25
- "@runtypelabs/sdk": "4.0.4",
25
+ "@runtypelabs/sdk": "4.1.0",
26
26
  "@runtypelabs/terminal-animations": "0.2.1"
27
27
  },
28
28
  "devDependencies": {
@@ -36,7 +36,7 @@
36
36
  "tsx": "^4.7.1",
37
37
  "typescript": "^5.3.3",
38
38
  "vitest": "^4.1.0",
39
- "@runtypelabs/shared": "1.10.2"
39
+ "@runtypelabs/shared": "1.12.0"
40
40
  },
41
41
  "engines": {
42
42
  "node": ">=22.0.0"