@inkeep/agents-cli 0.58.9 ā 0.58.12
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/agents-cli/package.js +3 -2
- package/dist/agents-cli/package.js.map +1 -0
- package/dist/api.js +7 -11
- package/dist/api.js.map +1 -0
- package/dist/commands/add-ui.js +2 -1
- package/dist/commands/add-ui.js.map +1 -0
- package/dist/commands/add.js +2 -1
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/config.js +2 -1
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.js +2 -1
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list-agents.js +2 -1
- package/dist/commands/list-agents.js.map +1 -0
- package/dist/commands/login.js +2 -1
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +2 -1
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/profile.js +2 -1
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/pull-v4/component-parser.js +2 -1
- package/dist/commands/pull-v4/component-parser.js.map +1 -0
- package/dist/commands/pull-v4/component-registry.js +2 -1
- package/dist/commands/pull-v4/component-registry.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js +186 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.js +70 -209
- package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +13 -16
- package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/context-config-generator.js +38 -24
- package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/credential-generator.js +14 -10
- package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/data-component-generator.js +10 -12
- package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/environment-generator.js +11 -91
- package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +22 -39
- package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/function-tool-generator.js +19 -31
- package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +30 -71
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/project-generator.js +64 -31
- package/dist/commands/pull-v4/generators/project-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/skill-generator.js +4 -1
- package/dist/commands/pull-v4/generators/skill-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/status-component-generator.js +19 -19
- package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +84 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +82 -113
- package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/trigger-generator.js +21 -30
- package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/introspect/demo-project.js +1616 -0
- package/dist/commands/pull-v4/introspect/demo-project.js.map +1 -0
- package/dist/commands/pull-v4/introspect/index.js +17 -16
- package/dist/commands/pull-v4/introspect/index.js.map +1 -0
- package/dist/commands/pull-v4/introspect/test-helpers.js +5 -3
- package/dist/commands/pull-v4/introspect/test-helpers.js.map +1 -0
- package/dist/commands/pull-v4/introspect-generator.js +606 -93
- package/dist/commands/pull-v4/introspect-generator.js.map +1 -0
- package/dist/commands/pull-v4/module-merge.js +2 -1
- package/dist/commands/pull-v4/module-merge.js.map +1 -0
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +16 -17
- package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/utils.js +90 -28
- package/dist/commands/pull-v4/utils.js.map +1 -0
- package/dist/commands/push.js +2 -1
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.js +2 -1
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -0
- package/dist/env.js +2 -1
- package/dist/env.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.js +2 -1
- package/dist/instrumentation.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js.map +1 -0
- package/dist/utils/background-version-check.js +2 -1
- package/dist/utils/background-version-check.js.map +1 -0
- package/dist/utils/ci-environment.js +2 -1
- package/dist/utils/ci-environment.js.map +1 -0
- package/dist/utils/cli-pipeline.js +2 -1
- package/dist/utils/cli-pipeline.js.map +1 -0
- package/dist/utils/config.js +2 -1
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.js +2 -1
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/environment-loader.js +2 -1
- package/dist/utils/environment-loader.js.map +1 -0
- package/dist/utils/file-finder.js +2 -1
- package/dist/utils/file-finder.js.map +1 -0
- package/dist/utils/json-comparator.js +2 -1
- package/dist/utils/json-comparator.js.map +1 -0
- package/dist/utils/json-comparison.js +2 -1
- package/dist/utils/json-comparison.js.map +1 -0
- package/dist/utils/mcp-runner.js +2 -1
- package/dist/utils/mcp-runner.js.map +1 -0
- package/dist/utils/model-config.js +2 -1
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/package-manager.js +2 -1
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/profile-config.js +2 -1
- package/dist/utils/profile-config.js.map +1 -0
- package/dist/utils/profiles/profile-manager.js +2 -1
- package/dist/utils/profiles/profile-manager.js.map +1 -0
- package/dist/utils/profiles/types.js +2 -1
- package/dist/utils/profiles/types.js.map +1 -0
- package/dist/utils/project-directory.js +2 -1
- package/dist/utils/project-directory.js.map +1 -0
- package/dist/utils/project-loader.js +2 -1
- package/dist/utils/project-loader.js.map +1 -0
- package/dist/utils/schema-introspection.js +2 -1
- package/dist/utils/schema-introspection.js.map +1 -0
- package/dist/utils/templates.js +2 -1
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tsx-loader.js +2 -1
- package/dist/utils/tsx-loader.js.map +1 -0
- package/dist/utils/version-check.js +2 -1
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-project.js","names":[],"sources":["../../../../src/commands/pull-v4/introspect/demo-project.ts"],"sourcesContent":["export const demoProject = {\n id: 'demo-project',\n name: 'demo-project',\n description: 'To demo how to build an agent',\n models: {\n base: { model: 'anthropic/claude-sonnet-4-5' },\n summarizer: { model: 'anthropic/claude-sonnet-4-5' },\n structuredOutput: { model: 'anthropic/claude-sonnet-4-5' },\n },\n stopWhen: {},\n agents: {\n 'advanced-meeting-prep-agent': {\n id: 'advanced-meeting-prep-agent',\n name: 'Advanced Meeting Prep Agent',\n description: null,\n defaultSubAgentId: null,\n subAgents: {},\n tools: {},\n functionTools: {},\n },\n custodial: {\n id: 'custodial',\n name: 'Custodial',\n description: null,\n defaultSubAgentId: null,\n subAgents: {},\n tools: {},\n functionTools: {},\n },\n 'kevin-mira-gong-transcripts': {\n id: 'kevin-mira-gong-transcripts',\n name: 'Kevin Mira - Gong Transcripts',\n description: null,\n defaultSubAgentId: 'inkeepgong',\n subAgents: {\n inkeepgong: {\n id: 'inkeepgong',\n name: 'InkeepGong',\n description:\n 'This agent is responsible for reviewing customer calls/transcripts from Gong to create messaging based on customer language - challenges, terms, etc. ',\n prompt: '',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {},\n functionTools: {},\n },\n 'ashby-role-descriptions': {\n id: 'ashby-role-descriptions',\n name: 'Ashby-role-descriptions',\n description: null,\n defaultSubAgentId: 'role-description-generator',\n subAgents: {\n 'role-description-generator': {\n id: 'role-description-generator',\n name: 'Role Description Generator',\n description:\n 'Fetches open roles from Ashby and generates updated role descriptions using Inkeep knowledge base',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'vq890ku1bmwop8wz6bnf9',\n toolId: 'c7kdb6dt92nyb80ub2rng',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n tools: {\n c7kdb6dt92nyb80ub2rng: {\n id: 'c7kdb6dt92nyb80ub2rng',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'customer-support': {\n id: 'customer-support',\n name: 'Customer Support',\n description:\n 'Comprehensive customer support system with knowledge base and Zendesk integration',\n defaultSubAgentId: 'customer-support-coordinator',\n subAgents: {\n 'customer-support-coordinator': {\n id: 'customer-support-coordinator',\n name: 'Customer Support Coordinator',\n description: 'Coordinates between knowledge base and Zendesk support',\n prompt: 'test',\n models: { base: { model: 'openai/gpt-5.2' } },\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['knowledge-base-agent', 'zendesk-support-agent'],\n skills: [],\n dataComponents: ['zendeskticketcard'],\n artifactComponents: [],\n canUse: [],\n },\n 'knowledge-base-agent': {\n id: 'knowledge-base-agent',\n name: 'Knowledge Base Agent',\n description: 'Answers questions using the internal knowledge base',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '78hfc4m1891z270qtdaye',\n toolId: 'c7kdb6dt92nyb80ub2rng',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'zendesk-support-agent': {\n id: 'zendesk-support-agent',\n name: 'Zendesk Support Agent',\n description: 'Handles customer support inquiries using Zendesk',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '08rw7pfv33irvimi1oc2k',\n toolId: 'rjziaq0tono242cg91cvx',\n toolSelection: ['create_zendesk_ticket'],\n toolPolicies: {},\n },\n {\n agentToolRelationId: 'cab9sam632xyiy2zdw3rt',\n toolId: 'svclt7yv8fg0dgtku6wm2',\n toolSelection: ['notion-update-page'],\n headers: null,\n toolPolicies: {},\n },\n ],\n },\n },\n models: { base: { model: 'openai/gpt-5.2' } },\n statusUpdates: { numEvents: 10, timeInSeconds: 30 },\n stopWhen: { transferCountIs: 10 },\n tools: {\n svclt7yv8fg0dgtku6wm2: {\n id: 'svclt7yv8fg0dgtku6wm2',\n name: 'Notion',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n rjziaq0tono242cg91cvx: {\n id: 'rjziaq0tono242cg91cvx',\n name: 'Zendesk',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n c7kdb6dt92nyb80ub2rng: {\n id: 'c7kdb6dt92nyb80ub2rng',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'data-analyst': {\n id: 'data-analyst',\n name: 'Data analyst',\n description: null,\n defaultSubAgentId: 'data-analyst',\n subAgents: {\n 'data-analyst': {\n id: 'data-analyst',\n name: 'Data analyst',\n description: '',\n prompt: 'test',\n models: { base: { model: 'openai/gpt-5' } },\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: ['scatterplot', 'bar-chart-of-happiness-scores'],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'gt4inccv91xepjlozg5qy',\n toolId: 'wtftp4mk9hk7c1zd5rdi3',\n toolSelection: ['execute_sql'],\n headers: null,\n toolPolicies: {},\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n wtftp4mk9hk7c1zd5rdi3: {\n id: 'wtftp4mk9hk7c1zd5rdi3',\n name: 'Supabase (Gaurav Varma)',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: 'l3e51vzt5atfwymmu4ur5',\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'knowledge-agent': {\n id: 'knowledge-agent',\n name: 'Knowledge agent',\n description: null,\n defaultSubAgentId: 'knowledge-search-agent',\n subAgents: {\n 'knowledge-search-agent': {\n id: 'knowledge-search-agent',\n name: 'Knowledge Search Agent',\n description: 'Searches the knowledge base and provides answers to user questions',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['web-search-agent'],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'acwjzxg2iacobkwjnt6o7',\n toolId: 'c7kdb6dt92nyb80ub2rng',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'web-search-agent': {\n id: 'web-search-agent',\n name: 'Web search agent',\n description: 'Responsible for searching the web',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'ausq8a0nyyyg5r14b8hzg',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: ['basic-search'],\n headers: null,\n toolPolicies: {},\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n c7kdb6dt92nyb80ub2rng: {\n id: 'c7kdb6dt92nyb80ub2rng',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'matt-meeting-prep-agent': {\n id: 'matt-meeting-prep-agent',\n name: 'Matt - Meeting Prep Agent',\n description: null,\n defaultSubAgentId: 'meeting-prep-agent',\n subAgents: {\n 'meeting-prep-agent': {\n id: 'meeting-prep-agent',\n name: 'Meeting Prep Coordinator',\n description:\n 'Helps users prepare for meetings by finding them in Google Calendar and conducting relevant research',\n prompt: 'test',\n models: { base: { model: 'openai/gpt-4o' } },\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '23k0iczq6eoxznb6yxm2p',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n {\n agentToolRelationId: 'xg116sakzz6joe6eo4ljy',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'meeting-prep-agent': {\n id: 'meeting-prep-agent',\n name: 'Meeting prep agent',\n description: null,\n defaultSubAgentId: 'meeting-prep-coordinator',\n subAgents: {\n 'company-research': {\n id: 'company-research',\n name: 'Company research',\n description: 'Research the company to understand what they do.\\n',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'f26mbzettj2hpxr9177bi',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'meeting-finder': {\n id: 'meeting-finder',\n name: 'Meeting finder',\n description: 'Find the external meeting to prep for using Google Calendar.\\n',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n 'meeting-prep-coordinator': {\n id: 'meeting-prep-coordinator',\n name: 'Meeting prep coordinator',\n description: 'Orchestrate specialized agents to prepare for a meeting.\\n',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['company-research', 'meeting-finder'],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'meeting-prep-agent-gaurav': {\n id: 'meeting-prep-agent-gaurav',\n name: 'meeting-prep-agent-gaurav',\n description: null,\n defaultSubAgentId: 'meeting-coordinator',\n subAgents: {\n 'meeting-coordinator': {\n id: 'meeting-coordinator',\n name: 'Meeting Prep Coordinator',\n description:\n 'Orchestrates meeting preparation by coordinating calendar search and research tasks',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['meeting-finder', 'research-agent'],\n skills: [],\n dataComponents: ['meeting-tips-card'],\n artifactComponents: [],\n canUse: [],\n },\n 'meeting-finder': {\n id: 'meeting-finder',\n name: 'Meeting Finder',\n description: 'Searches Google Calendar to find meetings based on user queries',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'i7s3inpktrx4a6oowruky',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'research-agent': {\n id: 'research-agent',\n name: 'Research Agent',\n description: 'Conducts web research to gather information for meeting preparation',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'txc3yxepqz7e67yjhbcrs',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'meeting-prep-agent-heegun': {\n id: 'meeting-prep-agent-heegun',\n name: 'meeting-prep-agent-heegun',\n description: null,\n defaultSubAgentId: 'meeting-prep-coordinator',\n subAgents: {\n 'meeting-finder': {\n id: 'meeting-finder',\n name: 'Meeting Finder',\n description: 'Finds upcoming meetings from Google Calendar',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '7bssh9oqtuuxmn5t1fet6',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'meeting-prep-coordinator': {\n id: 'meeting-prep-coordinator',\n name: 'Meeting Prep Coordinator',\n description:\n 'Coordinates the meeting preparation workflow by delegating to meeting finder and web researcher',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['meeting-finder', 'web-researcher'],\n skills: [],\n dataComponents: ['meeting-tips-card'],\n artifactComponents: [],\n canUse: [],\n },\n 'web-researcher': {\n id: 'web-researcher',\n name: 'Web Researcher',\n description: 'Conducts web research to gather information for meeting preparation',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'd9y1szl02jactyxrzmiaz',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n meetingprepagenkevinmira: {\n id: 'meetingprepagenkevinmira',\n name: 'MeetingPrepAgenKevinMira',\n description: null,\n defaultSubAgentId: 'meeting-prep-coordinator',\n subAgents: {\n 'meeting-finder': {\n id: 'meeting-finder',\n name: 'Meeting Finder',\n description: 'Searches Google Calendar to find meetings based on user queries',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'nw1p2tjs0m9nt63xapndf',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'meeting-prep-coordinator': {\n id: 'meeting-prep-coordinator',\n name: 'Meeting Prep Coordinator',\n description:\n 'Orchestrates meeting preparation by coordinating calendar search and research',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['web-researcher', 'meeting-finder'],\n skills: [],\n dataComponents: ['meeting-tips-card'],\n artifactComponents: [],\n canUse: [],\n },\n 'web-researcher': {\n id: 'web-researcher',\n name: 'Web Researcher',\n description: 'Conducts web research to gather information for meeting preparation',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'nghrxcf8nl6mybrhlptc6',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'omar-nasser-agent': {\n id: 'omar-nasser-agent',\n name: 'Omar-Nasser-agent',\n description: null,\n defaultSubAgentId: 'meeting-prep-coordinator',\n subAgents: {\n 'calendar-finder': {\n id: 'calendar-finder',\n name: 'Calendar Finder',\n description: 'Searches Google Calendar to find meetings',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'ya1tgflt65nf859wiglja',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'meeting-prep-coordinator': {\n id: 'meeting-prep-coordinator',\n name: 'Meeting Prep Coordinator',\n description: 'Orchestrates the meeting preparation workflow',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['web-researcher', 'calendar-finder'],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n 'web-researcher': {\n id: 'web-researcher',\n name: 'Web Researcher',\n description: 'Conducts web research to help prepare for meetings',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '7fn697dfkqyz0rai8g3nh',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n models: { base: { model: 'anthropic/claude-sonnet-4-5' } },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'qa-agent': {\n id: 'qa-agent',\n name: 'Q&A Agent',\n description: null,\n defaultSubAgentId: 'qa-sub-agent',\n subAgents: {\n 'qa-sub-agent': {\n id: 'qa-sub-agent',\n name: 'Q&A sub agent',\n description: 'Responsible for search knowledge base and answering question',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'wlowjsep89o8muyg0k6i7',\n toolId: 'rjziaq0tono242cg91cvx',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n rjziaq0tono242cg91cvx: {\n id: 'rjziaq0tono242cg91cvx',\n name: 'Zendesk',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'sales-agent': {\n id: 'sales-agent',\n name: 'Sales agent',\n description: null,\n defaultSubAgentId: 'sales-coordinator',\n subAgents: {\n 'company-researcher': {\n id: 'company-researcher',\n name: 'Company Researcher',\n description: 'Researches company basics and relevant signals using web search',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '1ipqdo8f8wxklhnqz91wr',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'competitor-analyst': {\n id: 'competitor-analyst',\n name: 'Competitor Analyst',\n description: 'Identifies competitors and common gaps using web search',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '8idbgpfskdfro53t73wsl',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'inkeep-positioning': {\n id: 'inkeep-positioning',\n name: 'Inkeep Positioning Specialist',\n description: 'Retrieves Inkeep positioning and differentiators from documentation',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'faykfch5jdrvuc7cgz9y4',\n toolId: 'c7kdb6dt92nyb80ub2rng',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'sales-coordinator': {\n id: 'sales-coordinator',\n name: 'Sales Coordinator',\n description: 'Orchestrates the sales research workflow and synthesizes insights',\n prompt: 'test',\n models: { base: { model: 'openai/gpt-5.2' } },\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['company-researcher', 'inkeep-positioning', 'competitor-analyst'],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n },\n stopWhen: { transferCountIs: 10 },\n tools: {\n c7kdb6dt92nyb80ub2rng: {\n id: 'c7kdb6dt92nyb80ub2rng',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'sales-intelligence-agent': {\n id: 'sales-intelligence-agent',\n name: 'Sales Intelligence Agent',\n description: null,\n defaultSubAgentId: 'sales-brief-coordinator',\n subAgents: {\n '4cp6qs8le8zq4ppiw40a8': {\n id: '4cp6qs8le8zq4ppiw40a8',\n name: 'Notion Writer SubAgent',\n description: '',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'owessnxnhq01389y2ipb2',\n toolId: 'svclt7yv8fg0dgtku6wm2',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'company-researcher': {\n id: 'company-researcher',\n name: 'Company Researcher',\n description:\n 'Researches company basics and relevant signals using web search (max 2 searches)',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'y5jiotm88ijsa42fgl5ko',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'competitor-analyst': {\n id: 'competitor-analyst',\n name: 'Competitor Analyst',\n description:\n 'Identifies competitors/alternatives and common gaps using web search (max 2 searches)',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '9829l3gbh956pjurpuqbr',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'inkeep-positioning': {\n id: 'inkeep-positioning',\n name: 'Inkeep Positioning Specialist',\n description:\n 'Retrieves Inkeep positioning and differentiators from documentation (max 2 searches)',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '1zvzsgyz4d9r40wsytrz9',\n toolId: 'c7kdb6dt92nyb80ub2rng',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n {\n agentToolRelationId: '2xtjjb9hronyjah7amhp3',\n toolId: 'svclt7yv8fg0dgtku6wm2',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'sales-brief-coordinator': {\n id: 'sales-brief-coordinator',\n name: 'Sales Brief Coordinator',\n description:\n 'Orchestrates research workflow and synthesizes insights into a comprehensive sales brief',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [\n 'company-researcher',\n 'inkeep-positioning',\n 'competitor-analyst',\n '4cp6qs8le8zq4ppiw40a8',\n ],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n },\n models: { base: { model: 'openai/gpt-5.2' } },\n stopWhen: { transferCountIs: 10 },\n tools: {\n svclt7yv8fg0dgtku6wm2: {\n id: 'svclt7yv8fg0dgtku6wm2',\n name: 'Notion',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n c7kdb6dt92nyb80ub2rng: {\n id: 'c7kdb6dt92nyb80ub2rng',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'sales-meeting-prep-agent': {\n id: 'sales-meeting-prep-agent',\n name: 'Sales Meeting Prep Agent',\n description: null,\n defaultSubAgentId: 'prep-coordinator',\n subAgents: {\n 'calendar-finder': {\n id: 'calendar-finder',\n name: 'Calendar Finder',\n description: 'Finds upcoming sales meetings from Google Calendar',\n prompt: 'test',\n models: { base: { model: 'anthropic/claude-opus-4-5' } },\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: '70mqw509rummhjm20d4j7',\n toolId: '6bb1ve7v75qokhqcp7p1r',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n 'prep-coordinator': {\n id: 'prep-coordinator',\n name: 'Sales Prep Coordinator',\n description: 'Orchestrates the meeting prep workflow',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: ['sales-researcher', 'calendar-finder'],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [],\n },\n 'sales-researcher': {\n id: 'sales-researcher',\n name: 'Sales Researcher',\n description: 'Conducts comprehensive web research for sales meeting preparation',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'l3b60nyixu8dhh5p0rnph',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n models: { base: { model: 'openai/gpt-5.2' } },\n stopWhen: { transferCountIs: 10 },\n tools: {\n '6bb1ve7v75qokhqcp7p1r': {\n id: '6bb1ve7v75qokhqcp7p1r',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n 'web-search-agent': {\n id: 'web-search-agent',\n name: 'Web search agent',\n description: null,\n defaultSubAgentId: 'web-search-subagent',\n subAgents: {\n 'web-search-subagent': {\n id: 'web-search-subagent',\n name: 'Web Search Sub Agent',\n description: 'Performs web searches and returns relevant results',\n prompt: 'test',\n models: null,\n stopWhen: null,\n canTransferTo: [],\n canDelegateTo: [],\n skills: [],\n dataComponents: [],\n artifactComponents: [],\n canUse: [\n {\n agentToolRelationId: 'edx1gs30zh50pk4wjozd5',\n toolId: 'tdrfknro54h4b0lwklhig',\n toolSelection: null,\n headers: null,\n toolPolicies: null,\n },\n ],\n },\n },\n tools: {\n tdrfknro54h4b0lwklhig: {\n id: 'tdrfknro54h4b0lwklhig',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n imageUrl: 'https://test.png',\n },\n },\n functionTools: {},\n },\n },\n tools: {\n mkb40x7c6vz5720dp6bgx: {\n tenantId: 'default',\n id: 'mkb40x7c6vz5720dp6bgx',\n projectId: 'demo-project',\n name: 'Exa Web Search',\n description: null,\n config: {\n mcp: {\n prompt: '',\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n toolOverrides: {},\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n '6bb1ve7v75qokhqcp7p1r': {\n tenantId: 'default',\n id: '6bb1ve7v75qokhqcp7p1r',\n projectId: 'demo-project',\n name: 'Google Calendar MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'user',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n svclt7yv8fg0dgtku6wm2: {\n tenantId: 'default',\n id: 'svclt7yv8fg0dgtku6wm2',\n projectId: 'demo-project',\n name: 'Notion',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'user',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n xsg3x642jcx5jmwmaenar: {\n tenantId: 'default',\n id: 'xsg3x642jcx5jmwmaenar',\n projectId: 'demo-project',\n name: 'Ashby MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n wtftp4mk9hk7c1zd5rdi3: {\n tenantId: 'default',\n id: 'wtftp4mk9hk7c1zd5rdi3',\n projectId: 'demo-project',\n name: 'Supabase (Gaurav Varma)',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: 'l3e51vzt5atfwymmu4ur5',\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n i6xrgvko43d61kwg1j0di: {\n tenantId: 'default',\n id: 'i6xrgvko43d61kwg1j0di',\n projectId: 'demo-project',\n name: 'Globalping (Justin Chavez)',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n rjziaq0tono242cg91cvx: {\n tenantId: 'default',\n id: 'rjziaq0tono242cg91cvx',\n projectId: 'demo-project',\n name: 'Zendesk',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n c7kdb6dt92nyb80ub2rng: {\n tenantId: 'default',\n id: 'c7kdb6dt92nyb80ub2rng',\n projectId: 'demo-project',\n name: 'Inkeep Enterprise Search MCP',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n '4cpdsk4n40c2423jmiocs': {\n tenantId: 'default',\n id: '4cpdsk4n40c2423jmiocs',\n projectId: 'demo-project',\n name: 'Gmail MCP',\n description: null,\n config: {\n mcp: {\n server: {\n url: 'https://test.com',\n },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n tdrfknro54h4b0lwklhig: {\n tenantId: 'default',\n id: 'tdrfknro54h4b0lwklhig',\n projectId: 'demo-project',\n name: 'Web search tool',\n description: null,\n config: {\n mcp: {\n server: { url: 'https://test.com' },\n transport: { type: 'streamable_http' },\n },\n type: 'mcp',\n },\n credentialReferenceId: null,\n credentialScope: 'project',\n headers: null,\n imageUrl: 'https://test.png',\n capabilities: null,\n isWorkApp: false,\n },\n },\n functions: null,\n externalAgents: null,\n dataComponents: null,\n artifactComponents: null,\n credentialReferences: {\n p2w6mieaqrfinek5imqx4: {\n tenantId: 'default',\n id: 'p2w6mieaqrfinek5imqx4',\n projectId: 'demo-project',\n name: 'Notion',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: 'svclt7yv8fg0dgtku6wm2',\n },\n '8samfrliooeknlbf7gn9z': {\n tenantId: 'default',\n id: '8samfrliooeknlbf7gn9z',\n projectId: 'demo-project',\n name: 'Notion',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: 'svclt7yv8fg0dgtku6wm2',\n },\n wve281sig4881brnyn63c: {\n tenantId: 'default',\n id: 'wve281sig4881brnyn63c',\n projectId: 'demo-project',\n name: 'Notion',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: 'svclt7yv8fg0dgtku6wm2',\n },\n rq6z45owo49eux0v8ms63: {\n tenantId: 'default',\n id: 'rq6z45owo49eux0v8ms63',\n projectId: 'demo-project',\n name: 'Notion',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: null,\n userId: null,\n },\n l3e51vzt5atfwymmu4ur5: {\n tenantId: 'default',\n id: 'l3e51vzt5atfwymmu4ur5',\n projectId: 'demo-project',\n name: 'Supabase (Gaurav Varma)',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: null,\n userId: null,\n },\n wof2nm307suqtj909z36n: {\n tenantId: 'default',\n id: 'wof2nm307suqtj909z36n',\n projectId: 'demo-project',\n name: 'Neon',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: null,\n userId: null,\n },\n ajkw9zmio8zj7jl423hv2: {\n tenantId: 'default',\n id: 'ajkw9zmio8zj7jl423hv2',\n projectId: 'demo-project',\n name: 'Notion OAuth Credential',\n type: 'nango',\n credentialStoreId: 'nango-default',\n retrievalParams: {\n authMode: 'OAUTH2',\n provider: 'mcp-generic',\n },\n toolId: null,\n userId: null,\n },\n },\n statusUpdates: null,\n functionTools: null,\n};\n"],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { ManagementApiClient } from "../../../api.js";
|
|
|
2
2
|
import { initializeCommand } from "../../../utils/cli-pipeline.js";
|
|
3
3
|
import { performBackgroundVersionCheck } from "../../../utils/background-version-check.js";
|
|
4
4
|
import { loadProject } from "../../../utils/project-loader.js";
|
|
5
|
-
import { extractSubAgents } from "../component-registry.js";
|
|
6
5
|
import { introspectGenerate } from "../introspect-generator.js";
|
|
7
6
|
import { join, resolve } from "node:path";
|
|
8
7
|
import * as p from "@clack/prompts";
|
|
@@ -44,8 +43,9 @@ function createProjectStructure(projectRoot) {
|
|
|
44
43
|
* Enrich canDelegateTo references with component type information
|
|
45
44
|
*/
|
|
46
45
|
function enrichCanDelegateToWithTypes(project) {
|
|
47
|
-
const
|
|
48
|
-
const
|
|
46
|
+
const { agents } = project;
|
|
47
|
+
const agentsIdSet = new Set(Object.keys(agents));
|
|
48
|
+
const subAgentsIdSet = new Set(Object.values(agents).flatMap((agentData) => Object.keys(agentData.subAgents)));
|
|
49
49
|
const externalAgentsIdSet = new Set(project.externalAgents ? Object.keys(project.externalAgents) : []);
|
|
50
50
|
function enrichCanDelegateToArray(canDelegateTo) {
|
|
51
51
|
return canDelegateTo.map((item) => {
|
|
@@ -56,11 +56,7 @@ function enrichCanDelegateToWithTypes(project) {
|
|
|
56
56
|
return item;
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
for (const agentData of Object.values(project.agents)) if (agentData.subAgents) {
|
|
61
|
-
for (const subAgentData of Object.values(agentData.subAgents)) if (subAgentData.canDelegateTo) subAgentData.canDelegateTo = enrichCanDelegateToArray(subAgentData.canDelegateTo);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
59
|
+
for (const { subAgents } of Object.values(project.agents)) for (const subAgentData of Object.values(subAgents)) if (Array.isArray(subAgentData.canDelegateTo)) subAgentData.canDelegateTo = enrichCanDelegateToArray(subAgentData.canDelegateTo);
|
|
64
60
|
}
|
|
65
61
|
/**
|
|
66
62
|
* Main pull v4 command
|
|
@@ -165,13 +161,16 @@ async function pullV4Command(options) {
|
|
|
165
161
|
if (options.debug) console.log(styleText("gray", ` Hoisted functionTools from agent ${agentId}: ${Object.keys(agentData.functionTools).join(", ")}`));
|
|
166
162
|
}
|
|
167
163
|
if (agentData.functions) {
|
|
168
|
-
remoteProject.functions
|
|
164
|
+
remoteProject.functions ||= {};
|
|
165
|
+
const { functions } = remoteProject;
|
|
169
166
|
Object.entries(agentData.functions).forEach(([funcId, funcData]) => {
|
|
170
|
-
|
|
167
|
+
functions[funcId] ||= {
|
|
171
168
|
id: funcData.id,
|
|
172
169
|
inputSchema: funcData.inputSchema,
|
|
173
170
|
executeCode: funcData.executeCode,
|
|
174
|
-
dependencies: funcData.dependencies
|
|
171
|
+
dependencies: funcData.dependencies,
|
|
172
|
+
createdAt: "",
|
|
173
|
+
updatedAt: ""
|
|
175
174
|
};
|
|
176
175
|
});
|
|
177
176
|
}
|
|
@@ -192,9 +191,10 @@ async function pullV4Command(options) {
|
|
|
192
191
|
return;
|
|
193
192
|
}
|
|
194
193
|
const paths = createProjectStructure(projectDir);
|
|
195
|
-
|
|
194
|
+
const skills = remoteProject.skills;
|
|
195
|
+
if (skills && Object.keys(skills).length) {
|
|
196
196
|
const { generateSkills } = await import("../generators/skill-generator.js");
|
|
197
|
-
await generateSkills(
|
|
197
|
+
await generateSkills(skills, paths.skillsDir);
|
|
198
198
|
}
|
|
199
199
|
s.start("Starting generating files...");
|
|
200
200
|
await introspectGenerate({
|
|
@@ -229,7 +229,7 @@ async function pullV4Command(options) {
|
|
|
229
229
|
*/
|
|
230
230
|
async function pullAllProjects(options) {
|
|
231
231
|
console.log(styleText("blue", "\nš Batch Pull: Sequential processing with smart comparison\n"));
|
|
232
|
-
console.log(styleText("gray", " ⢠Existing projects: Smart comparison +
|
|
232
|
+
console.log(styleText("gray", " ⢠Existing projects: Smart comparison + AST merging + confirmation prompts"));
|
|
233
233
|
console.log(styleText("gray", " ⢠New projects: Fresh generation with introspect mode\n"));
|
|
234
234
|
performBackgroundVersionCheck();
|
|
235
235
|
const { config, isCI } = await initializeCommand({
|
|
@@ -331,7 +331,7 @@ async function pullSingleProject(projectId, projectName, options, config, isCI)
|
|
|
331
331
|
throw error;
|
|
332
332
|
}
|
|
333
333
|
}
|
|
334
|
-
console.log(styleText("gray",
|
|
334
|
+
console.log(styleText("gray", " New project"));
|
|
335
335
|
const originalLogLevel = process.env.LOG_LEVEL;
|
|
336
336
|
process.env.LOG_LEVEL = "silent";
|
|
337
337
|
const restoreLogLevel = () => {
|
|
@@ -362,4 +362,5 @@ async function pullSingleProject(projectId, projectName, options, config, isCI)
|
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
//#endregion
|
|
365
|
-
export { createProjectStructure, enrichCanDelegateToWithTypes, pullV4Command };
|
|
365
|
+
export { createProjectStructure, enrichCanDelegateToWithTypes, pullV4Command };
|
|
366
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/commands/pull-v4/introspect/index.ts"],"sourcesContent":["/**\n * Pull v3 - Clean, efficient project generation\n *\n * Step 1: Validate and compile existing code\n * Step 2: Compare project with DB to detect ALL changes\n * Step 3: Classify changes as new vs modified components\n * Step 4: Generate new components deterministically\n * Step 5: Use LLM to correct modified components\n */\n\nimport { EventEmitter } from 'node:events';\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { styleText } from 'node:util';\nimport * as p from '@clack/prompts';\nimport type { FullProjectDefinition } from '@inkeep/agents-core';\n\n// Increase max listeners to prevent warnings during complex CLI flows\n// This is needed because @clack/prompts + multiple interactive prompts + spinners all add listeners\nEventEmitter.defaultMaxListeners = 20;\n\nimport { ManagementApiClient } from '../../../api';\nimport { performBackgroundVersionCheck } from '../../../utils/background-version-check';\nimport { initializeCommand } from '../../../utils/cli-pipeline';\nimport { loadProject } from '../../../utils/project-loader';\nimport { introspectGenerate } from '../introspect-generator';\n\nexport interface PullV3Options {\n project?: string;\n config?: string;\n profile?: string;\n env?: string;\n json?: boolean;\n debug?: boolean;\n verbose?: boolean;\n force?: boolean;\n introspect?: boolean;\n all?: boolean;\n tag?: string;\n quiet?: boolean;\n /** Internal: used for batch operations to return results instead of calling process.exit() */\n _batchMode?: boolean;\n}\n\nexport interface PullResult {\n success: boolean;\n skipped?: boolean;\n upToDate?: boolean;\n error?: string;\n}\n\ninterface BatchPullResult {\n projectId: string;\n projectName?: string;\n targetDir: string;\n success: boolean;\n error?: string;\n}\n\ninterface ProjectPaths {\n projectRoot: string;\n agentsDir: string;\n toolsDir: string;\n dataComponentsDir: string;\n artifactComponentsDir: string;\n statusComponentsDir: string;\n environmentsDir: string;\n credentialsDir: string;\n contextConfigsDir: string;\n externalAgentsDir: string;\n skillsDir: string;\n}\n\n/**\n * Create project directory structure\n */\nexport function createProjectStructure(projectRoot: string): ProjectPaths {\n mkdirSync(projectRoot, { recursive: true });\n return {\n projectRoot,\n agentsDir: join(projectRoot, 'agents'),\n toolsDir: join(projectRoot, 'tools'),\n dataComponentsDir: join(projectRoot, 'data-components'),\n artifactComponentsDir: join(projectRoot, 'artifact-components'),\n statusComponentsDir: join(projectRoot, 'status-components'),\n environmentsDir: join(projectRoot, 'environments'),\n credentialsDir: join(projectRoot, 'credentials'),\n contextConfigsDir: join(projectRoot, 'context-configs'),\n externalAgentsDir: join(projectRoot, 'external-agents'),\n skillsDir: join(projectRoot, 'skills'),\n };\n}\n\n/**\n * Enrich canDelegateTo references with component type information\n */\nexport function enrichCanDelegateToWithTypes(project: FullProjectDefinition): void {\n const { agents } = project;\n // Get all available component IDs by type\n const agentsIdSet = new Set(Object.keys(agents));\n const subAgentsIdSet = new Set(\n Object.values(agents).flatMap((agentData) => Object.keys(agentData.subAgents))\n );\n const externalAgentsIdSet = new Set(\n project.externalAgents ? Object.keys(project.externalAgents) : []\n );\n\n // Function to enrich a canDelegateTo array\n\n function enrichCanDelegateToArray(canDelegateTo: unknown[]): unknown[] {\n return canDelegateTo.map((item) => {\n // Skip if it's already an object (already has type info)\n if (typeof item !== 'string') return item;\n if (agentsIdSet.has(item)) return { agentId: item };\n if (subAgentsIdSet.has(item)) return { subAgentId: item };\n if (externalAgentsIdSet.has(item)) return { externalAgentId: item };\n return item;\n });\n }\n\n // Process all agents\n for (const { subAgents } of Object.values(project.agents)) {\n // Process subAgents within agents\n for (const subAgentData of Object.values(subAgents)) {\n if (Array.isArray(subAgentData.canDelegateTo)) {\n // @ts-expect-error\n subAgentData.canDelegateTo = enrichCanDelegateToArray(subAgentData.canDelegateTo);\n }\n }\n }\n}\n\n/**\n * Main pull v4 command\n * @returns PullResult when in batch mode, otherwise void (exits process)\n */\nexport async function pullV4Command(options: PullV3Options): Promise<PullResult | undefined> {\n // Handle --all flag for batch operations\n if (options.all) {\n await pullAllProjects(options);\n return;\n }\n\n const batchMode = options._batchMode ?? false;\n\n // Suppress SDK logging for cleaner output\n const originalLogLevel = process.env.LOG_LEVEL;\n process.env.LOG_LEVEL = 'silent';\n\n const restoreLogLevel = () => {\n if (originalLogLevel !== undefined) {\n process.env.LOG_LEVEL = originalLogLevel;\n } else {\n delete process.env.LOG_LEVEL;\n }\n };\n\n // Background version check (skip in batch mode - already done)\n if (!batchMode) {\n performBackgroundVersionCheck();\n }\n\n console.log(styleText('blue', '\\nInkeep Pull:'));\n if (options.introspect) {\n console.log(\n styleText('gray', ' Introspect mode ⢠Complete regeneration ⢠No comparison needed')\n );\n } else {\n console.log(styleText('gray', ' Smart comparison ⢠Detect all changes ⢠Targeted updates'));\n }\n\n const s = p.spinner();\n\n try {\n // Step 1: Load configuration (same as push command)\n const { config, isCI } = await initializeCommand({\n configPath: options.config,\n profileName: options.profile,\n tag: options.tag,\n showSpinner: true,\n spinnerText: 'Loading configuration...',\n logConfig: true,\n quiet: options.quiet,\n });\n\n // Step 2: Determine project directory and ID\n s.start('Detecting project...');\n let projectDir: string;\n let projectId: string;\n let localProjectForId: any = null;\n\n const currentDir = process.cwd();\n const hasIndexInCurrent = existsSync(join(currentDir, 'index.ts'));\n\n if (hasIndexInCurrent) {\n // We're in a project directory\n projectDir = currentDir;\n\n s.start('Loading local project...');\n try {\n localProjectForId = await loadProject(projectDir);\n const localProjectId = localProjectForId.getId();\n\n if (options.project) {\n // Validate that --project matches local project ID\n if (localProjectId !== options.project) {\n s.stop('Project ID mismatch');\n console.error(\n styleText(\n 'red',\n `Local project ID \"${localProjectId}\" doesn't match --project \"${options.project}\"`\n )\n );\n console.error(\n styleText(\n 'yellow',\n 'Either remove --project flag or ensure it matches the local project ID'\n )\n );\n if (batchMode) {\n return { success: false, error: 'Project ID mismatch' };\n }\n process.exit(1);\n }\n }\n\n projectId = localProjectId;\n s.stop(`Using local project: ${projectId}`);\n } catch (error) {\n s.stop('Failed to load local project');\n throw new Error(\n `Could not load local project: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else {\n // No index.ts in current directory\n if (!options.project) {\n s.stop('No index.ts found in current directory');\n console.error(\n styleText(\n 'yellow',\n 'Please run this command from a directory containing index.ts or use --project <project-id>'\n )\n );\n if (batchMode) {\n return { success: false, error: 'No index.ts found and no --project specified' };\n }\n process.exit(1);\n }\n\n // Try --project as directory path first\n const projectPath = resolve(currentDir, options.project);\n const hasIndexInPath = existsSync(join(projectPath, 'index.ts'));\n\n if (hasIndexInPath) {\n // --project is a valid directory path\n projectDir = projectPath;\n s.start('Loading project from specified path...');\n try {\n localProjectForId = await loadProject(projectDir);\n projectId = localProjectForId.getId();\n s.stop(`Using project from path: ${projectId}`);\n } catch (error) {\n s.stop('Failed to load project from path');\n throw new Error(\n `Could not load project from ${projectPath}: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else {\n // Treat --project as project ID, create subdirectory\n projectId = options.project;\n projectDir = join(currentDir, projectId);\n s.stop(`Creating new project directory: ${projectDir}`);\n }\n }\n\n // Step 4: Fetch project data from API\n s.start(`Fetching project: ${projectId}`);\n\n const apiClient = await ManagementApiClient.create(\n config.agentsApiUrl,\n options.config,\n config.tenantId,\n projectId,\n isCI,\n config.agentsApiKey\n );\n\n const remoteProject = await apiClient.getFullProject(projectId);\n\n if (options.debug && remoteProject.functions) {\n console.log(\n styleText('gray', ' š Project-level functions from API:'),\n Object.keys(remoteProject.functions)\n );\n Object.entries(remoteProject.functions).forEach(([id, data]: [string, any]) => {\n console.log(\n styleText(\n 'gray',\n ` ${id}: has name=${!!data.name}, has description=${!!data.description}`\n )\n );\n });\n }\n\n // Normalize remote project (same as pull-v2 - hoist agent-level functionTools)\n if (remoteProject.agents) {\n for (const [agentId, agentData] of Object.entries(remoteProject.agents) as any[]) {\n if (agentData.functionTools) {\n remoteProject.functionTools = remoteProject.functionTools || {};\n Object.assign(remoteProject.functionTools, agentData.functionTools);\n if (options.debug) {\n console.log(\n styleText(\n 'gray',\n ` Hoisted functionTools from agent ${agentId}: ${Object.keys(agentData.functionTools).join(', ')}`\n )\n );\n }\n }\n if (agentData.functions) {\n remoteProject.functions ||= {};\n const { functions } = remoteProject;\n // Only hoist agent functions if project-level functions don't already exist (clean function data)\n Object.entries(agentData.functions).forEach(([funcId, funcData]: [string, any]) => {\n // Clean function data - remove functionTool metadata that shouldn't be in functions collection\n functions[funcId] ||= {\n id: funcData.id,\n inputSchema: funcData.inputSchema,\n executeCode: funcData.executeCode,\n dependencies: funcData.dependencies,\n createdAt: '',\n updatedAt: '',\n };\n });\n }\n }\n }\n\n // Filter out project-level tools from individual agents\n // The API includes project-level tools in each agent's tools field, but our generated\n // code structure keeps tools separate and imports them via canUse relationships\n if (remoteProject.agents && remoteProject.tools) {\n const projectToolIds = Object.keys(remoteProject.tools);\n\n for (const agentData of Object.values(remoteProject.agents) as any[]) {\n if (agentData.tools) {\n // Filter out any tools that are defined at project level\n const agentSpecificTools = Object.fromEntries(\n Object.entries(agentData.tools).filter(([toolId]) => !projectToolIds.includes(toolId))\n );\n\n // Only keep tools field if there are agent-specific tools remaining\n if (Object.keys(agentSpecificTools).length > 0) {\n agentData.tools = agentSpecificTools;\n } else {\n // Remove the tools field entirely if all tools were project-level\n delete agentData.tools;\n }\n }\n }\n }\n\n // Enrich canDelegateTo references with component type information\n // @ts-expect-error -- fixme Types of property `models` are incompatible.\n enrichCanDelegateToWithTypes(remoteProject);\n\n s.message('Project data fetched');\n\n if (options.json) {\n console.log(JSON.stringify(remoteProject, null, 2));\n restoreLogLevel();\n return;\n }\n\n // Step 5: Set up project structure\n const paths = createProjectStructure(projectDir);\n\n // @ts-expect-error -- fix types\n const skills = remoteProject.skills;\n\n if (skills && Object.keys(skills).length) {\n const { generateSkills } = await import('../generators/skill-generator');\n await generateSkills(skills, paths.skillsDir);\n }\n\n s.start('Starting generating files...');\n await introspectGenerate({\n // @ts-expect-error -- ignore Types of property 'models' are incompatible.\n project: remoteProject,\n paths,\n debug: options.debug,\n });\n s.stop('All files generated');\n\n console.log(styleText('green', '\\nProject synced successfully!'));\n console.log(styleText('gray', ` Location: ${paths.projectRoot}`));\n console.log(styleText('gray', ` Environment: ${options.env || 'development'}`));\n console.log(\n styleText(\n 'yellow',\n 'ā ļø If you encounter broken code after running `inkeep pull`, please report it at https://github.com/inkeep/agents/issues.'\n )\n );\n\n restoreLogLevel();\n if (batchMode) {\n return { success: true };\n }\n process.exit(0);\n } catch (error) {\n const message = error instanceof Error ? error.stack : String(error);\n s.stop();\n console.error(styleText('red', `\\nError: ${message}`));\n if (options.debug && error instanceof Error) {\n console.error(styleText('red', error.stack || ''));\n }\n restoreLogLevel();\n if (batchMode) {\n return { success: false, error: message };\n }\n process.exit(1);\n }\n}\n\n/**\n * Pull all projects for the current tenant\n * Uses smart comparison with LLM merging for existing projects, introspect for new projects\n */\nasync function pullAllProjects(options: PullV3Options): Promise<void> {\n console.log(styleText('blue', '\\nš Batch Pull: Sequential processing with smart comparison\\n'));\n console.log(\n styleText(\n 'gray',\n ' ⢠Existing projects: Smart comparison + AST merging + confirmation prompts'\n )\n );\n console.log(styleText('gray', ' ⢠New projects: Fresh generation with introspect mode\\n'));\n\n // Background version check (only once for batch)\n performBackgroundVersionCheck();\n\n // Load configuration first\n const { config, isCI } = await initializeCommand({\n configPath: options.config,\n profileName: options.profile,\n tag: options.tag,\n showSpinner: true,\n spinnerText: 'Loading configuration...',\n logConfig: true,\n quiet: options.quiet,\n });\n\n const s = p.spinner();\n\n try {\n // Fetch all projects from the API\n s.start('Fetching project list from API...');\n const apiClient = await ManagementApiClient.create(\n config.agentsApiUrl,\n options.config,\n config.tenantId,\n undefined,\n isCI,\n config.agentsApiKey\n );\n\n const projects = await apiClient.listAllProjects();\n s.stop(`Found ${projects.length} project(s)`);\n\n if (!projects.length) {\n console.log(styleText('yellow', 'No projects found for this tenant.'));\n process.exit(0);\n }\n\n // Categorize projects\n const existingProjects: typeof projects = [];\n const newProjects: typeof projects = [];\n\n for (const project of projects) {\n const targetDir = join(process.cwd(), project.id);\n if (existsSync(join(targetDir, 'index.ts'))) {\n existingProjects.push(project);\n } else {\n newProjects.push(project);\n }\n }\n\n console.log(styleText('gray', '\\nProjects to pull:\\n'));\n if (existingProjects.length > 0) {\n console.log(styleText('cyan', ' Existing (smart comparison):'));\n for (const project of existingProjects) {\n console.log(styleText('gray', ` ⢠${project.name || project.id} (${project.id})`));\n }\n }\n if (newProjects.length > 0) {\n console.log(styleText('cyan', ' New (introspect):'));\n for (const project of newProjects) {\n console.log(styleText('gray', ` ⢠${project.name || project.id} (${project.id})`));\n }\n }\n console.log();\n\n const results: BatchPullResult[] = [];\n const total = projects.length;\n\n for (let i = 0; i < projects.length; i++) {\n const project = projects[i];\n const progress = `[${i + 1}/${total}]`;\n\n console.log(styleText('cyan', `\\n${'ā'.repeat(60)}`));\n console.log(styleText('cyan', `${progress} Pulling ${project.name || project.id}...`));\n\n const result = await pullSingleProject(project.id, project.name, options, config, isCI);\n results.push(result);\n\n if (result.success) {\n console.log(\n styleText(\n 'green',\n `\\n ā ${result.projectName || result.projectId} ā ${result.targetDir}`\n )\n );\n } else {\n console.log(\n styleText('red', `\\n ā ${result.projectName || result.projectId}: ${result.error}`)\n );\n }\n }\n\n // Print summary\n const succeeded = results.filter((r) => r.success).length;\n const failed = results.filter((r) => !r.success).length;\n\n console.log(styleText('cyan', `\\n${'ā'.repeat(60)}`));\n console.log(styleText('cyan', 'š Batch Pull Summary:'));\n console.log(styleText('green', ` ā Succeeded: ${succeeded}`));\n if (failed > 0) {\n console.log(styleText('red', ` ā Failed: ${failed}`));\n\n console.log(styleText('red', '\\nFailed projects:'));\n for (const result of results) {\n if (!result.success) {\n console.log(styleText('red', ` ⢠${result.projectId}: ${result.error}`));\n }\n }\n }\n\n process.exit(failed > 0 ? 1 : 0);\n } catch (error) {\n s.stop();\n console.error(\n styleText('red', `\\nError: ${error instanceof Error ? error.message : String(error)}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Pull a single project (used by batch operations)\n * Uses smart comparison flow for existing projects, introspect for new projects\n */\nasync function pullSingleProject(\n projectId: string,\n projectName: string | undefined,\n options: PullV3Options,\n config: any,\n isCI?: boolean\n): Promise<BatchPullResult> {\n const targetDir = join(process.cwd(), projectId);\n const hasExistingProject = existsSync(join(targetDir, 'index.ts'));\n\n try {\n if (hasExistingProject) {\n // Project exists locally - use smart comparison flow with LLM merging and user prompts\n console.log(styleText('gray', ` š Existing project found - using smart comparison mode`));\n\n // Save current directory and change to project directory\n const originalDir = process.cwd();\n process.chdir(targetDir);\n\n try {\n // Call the main pull command in batch mode (returns results instead of exiting)\n const result = await pullV4Command({\n ...options,\n project: projectId,\n all: false, // Don't recurse into batch mode\n _batchMode: true,\n });\n\n // Restore original directory\n process.chdir(originalDir);\n\n if (result && typeof result === 'object') {\n return {\n projectId,\n projectName,\n targetDir,\n success: result.success,\n error: result.error,\n };\n }\n\n return {\n projectId,\n projectName,\n targetDir,\n success: true,\n };\n } catch (error) {\n // Restore original directory even on error\n process.chdir(originalDir);\n throw error;\n }\n }\n console.log(styleText('gray', ' New project'));\n\n // Suppress SDK logging\n const originalLogLevel = process.env.LOG_LEVEL;\n process.env.LOG_LEVEL = 'silent';\n\n const restoreLogLevel = () => {\n if (originalLogLevel !== undefined) {\n process.env.LOG_LEVEL = originalLogLevel;\n } else {\n delete process.env.LOG_LEVEL;\n }\n };\n\n // Fetch project data from API\n const apiClient = await ManagementApiClient.create(\n config.agentsApiUrl,\n options.config,\n config.tenantId,\n projectId,\n isCI,\n config.agentsApiKey\n );\n\n const remoteProject = await apiClient.getFullProject(projectId);\n // Create project structure\n const paths = createProjectStructure(targetDir);\n\n // Generate all files using introspect mode for new projects\n await introspectGenerate({\n // @ts-expect-error -- ignore Types of property 'models' are incompatible.\n project: remoteProject,\n paths,\n });\n\n restoreLogLevel();\n\n return {\n projectId,\n projectName: projectName || remoteProject.name,\n targetDir,\n success: true,\n };\n } catch (error) {\n return {\n projectId,\n projectName,\n targetDir,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,aAAa,sBAAsB;;;;AAyDnC,SAAgB,uBAAuB,aAAmC;AACxE,WAAU,aAAa,EAAE,WAAW,MAAM,CAAC;AAC3C,QAAO;EACL;EACA,WAAW,KAAK,aAAa,SAAS;EACtC,UAAU,KAAK,aAAa,QAAQ;EACpC,mBAAmB,KAAK,aAAa,kBAAkB;EACvD,uBAAuB,KAAK,aAAa,sBAAsB;EAC/D,qBAAqB,KAAK,aAAa,oBAAoB;EAC3D,iBAAiB,KAAK,aAAa,eAAe;EAClD,gBAAgB,KAAK,aAAa,cAAc;EAChD,mBAAmB,KAAK,aAAa,kBAAkB;EACvD,mBAAmB,KAAK,aAAa,kBAAkB;EACvD,WAAW,KAAK,aAAa,SAAS;EACvC;;;;;AAMH,SAAgB,6BAA6B,SAAsC;CACjF,MAAM,EAAE,WAAW;CAEnB,MAAM,cAAc,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC;CAChD,MAAM,iBAAiB,IAAI,IACzB,OAAO,OAAO,OAAO,CAAC,SAAS,cAAc,OAAO,KAAK,UAAU,UAAU,CAAC,CAC/E;CACD,MAAM,sBAAsB,IAAI,IAC9B,QAAQ,iBAAiB,OAAO,KAAK,QAAQ,eAAe,GAAG,EAAE,CAClE;CAID,SAAS,yBAAyB,eAAqC;AACrE,SAAO,cAAc,KAAK,SAAS;AAEjC,OAAI,OAAO,SAAS,SAAU,QAAO;AACrC,OAAI,YAAY,IAAI,KAAK,CAAE,QAAO,EAAE,SAAS,MAAM;AACnD,OAAI,eAAe,IAAI,KAAK,CAAE,QAAO,EAAE,YAAY,MAAM;AACzD,OAAI,oBAAoB,IAAI,KAAK,CAAE,QAAO,EAAE,iBAAiB,MAAM;AACnE,UAAO;IACP;;AAIJ,MAAK,MAAM,EAAE,eAAe,OAAO,OAAO,QAAQ,OAAO,CAEvD,MAAK,MAAM,gBAAgB,OAAO,OAAO,UAAU,CACjD,KAAI,MAAM,QAAQ,aAAa,cAAc,CAE3C,cAAa,gBAAgB,yBAAyB,aAAa,cAAc;;;;;;AAUzF,eAAsB,cAAc,SAAyD;AAE3F,KAAI,QAAQ,KAAK;AACf,QAAM,gBAAgB,QAAQ;AAC9B;;CAGF,MAAM,YAAY,QAAQ,cAAc;CAGxC,MAAM,mBAAmB,QAAQ,IAAI;AACrC,SAAQ,IAAI,YAAY;CAExB,MAAM,wBAAwB;AAC5B,MAAI,qBAAqB,OACvB,SAAQ,IAAI,YAAY;MAExB,QAAO,QAAQ,IAAI;;AAKvB,KAAI,CAAC,UACH,gCAA+B;AAGjC,SAAQ,IAAI,UAAU,QAAQ,iBAAiB,CAAC;AAChD,KAAI,QAAQ,WACV,SAAQ,IACN,UAAU,QAAQ,mEAAmE,CACtF;KAED,SAAQ,IAAI,UAAU,QAAQ,6DAA6D,CAAC;CAG9F,MAAM,IAAI,EAAE,SAAS;AAErB,KAAI;EAEF,MAAM,EAAE,QAAQ,SAAS,MAAM,kBAAkB;GAC/C,YAAY,QAAQ;GACpB,aAAa,QAAQ;GACrB,KAAK,QAAQ;GACb,aAAa;GACb,aAAa;GACb,WAAW;GACX,OAAO,QAAQ;GAChB,CAAC;AAGF,IAAE,MAAM,uBAAuB;EAC/B,IAAI;EACJ,IAAI;EACJ,IAAI,oBAAyB;EAE7B,MAAM,aAAa,QAAQ,KAAK;AAGhC,MAF0B,WAAW,KAAK,YAAY,WAAW,CAAC,EAE3C;AAErB,gBAAa;AAEb,KAAE,MAAM,2BAA2B;AACnC,OAAI;AACF,wBAAoB,MAAM,YAAY,WAAW;IACjD,MAAM,iBAAiB,kBAAkB,OAAO;AAEhD,QAAI,QAAQ,SAEV;SAAI,mBAAmB,QAAQ,SAAS;AACtC,QAAE,KAAK,sBAAsB;AAC7B,cAAQ,MACN,UACE,OACA,qBAAqB,eAAe,6BAA6B,QAAQ,QAAQ,GAClF,CACF;AACD,cAAQ,MACN,UACE,UACA,yEACD,CACF;AACD,UAAI,UACF,QAAO;OAAE,SAAS;OAAO,OAAO;OAAuB;AAEzD,cAAQ,KAAK,EAAE;;;AAInB,gBAAY;AACZ,MAAE,KAAK,wBAAwB,YAAY;YACpC,OAAO;AACd,MAAE,KAAK,+BAA+B;AACtC,UAAM,IAAI,MACR,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACxF;;SAEE;AAEL,OAAI,CAAC,QAAQ,SAAS;AACpB,MAAE,KAAK,yCAAyC;AAChD,YAAQ,MACN,UACE,UACA,6FACD,CACF;AACD,QAAI,UACF,QAAO;KAAE,SAAS;KAAO,OAAO;KAAgD;AAElF,YAAQ,KAAK,EAAE;;GAIjB,MAAM,cAAc,QAAQ,YAAY,QAAQ,QAAQ;AAGxD,OAFuB,WAAW,KAAK,aAAa,WAAW,CAAC,EAE5C;AAElB,iBAAa;AACb,MAAE,MAAM,yCAAyC;AACjD,QAAI;AACF,yBAAoB,MAAM,YAAY,WAAW;AACjD,iBAAY,kBAAkB,OAAO;AACrC,OAAE,KAAK,4BAA4B,YAAY;aACxC,OAAO;AACd,OAAE,KAAK,mCAAmC;AAC1C,WAAM,IAAI,MACR,+BAA+B,YAAY,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACtG;;UAEE;AAEL,gBAAY,QAAQ;AACpB,iBAAa,KAAK,YAAY,UAAU;AACxC,MAAE,KAAK,mCAAmC,aAAa;;;AAK3D,IAAE,MAAM,qBAAqB,YAAY;EAWzC,MAAM,gBAAgB,OATJ,MAAM,oBAAoB,OAC1C,OAAO,cACP,QAAQ,QACR,OAAO,UACP,WACA,MACA,OAAO,aACR,EAEqC,eAAe,UAAU;AAE/D,MAAI,QAAQ,SAAS,cAAc,WAAW;AAC5C,WAAQ,IACN,UAAU,QAAQ,0CAA0C,EAC5D,OAAO,KAAK,cAAc,UAAU,CACrC;AACD,UAAO,QAAQ,cAAc,UAAU,CAAC,SAAS,CAAC,IAAI,UAAyB;AAC7E,YAAQ,IACN,UACE,QACA,SAAS,GAAG,aAAa,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,CAAC,KAAK,cACjE,CACF;KACD;;AAIJ,MAAI,cAAc,OAChB,MAAK,MAAM,CAAC,SAAS,cAAc,OAAO,QAAQ,cAAc,OAAO,EAAW;AAChF,OAAI,UAAU,eAAe;AAC3B,kBAAc,gBAAgB,cAAc,iBAAiB,EAAE;AAC/D,WAAO,OAAO,cAAc,eAAe,UAAU,cAAc;AACnE,QAAI,QAAQ,MACV,SAAQ,IACN,UACE,QACA,uCAAuC,QAAQ,IAAI,OAAO,KAAK,UAAU,cAAc,CAAC,KAAK,KAAK,GACnG,CACF;;AAGL,OAAI,UAAU,WAAW;AACvB,kBAAc,cAAc,EAAE;IAC9B,MAAM,EAAE,cAAc;AAEtB,WAAO,QAAQ,UAAU,UAAU,CAAC,SAAS,CAAC,QAAQ,cAA6B;AAEjF,eAAU,YAAY;MACpB,IAAI,SAAS;MACb,aAAa,SAAS;MACtB,aAAa,SAAS;MACtB,cAAc,SAAS;MACvB,WAAW;MACX,WAAW;MACZ;MACD;;;AAQR,MAAI,cAAc,UAAU,cAAc,OAAO;GAC/C,MAAM,iBAAiB,OAAO,KAAK,cAAc,MAAM;AAEvD,QAAK,MAAM,aAAa,OAAO,OAAO,cAAc,OAAO,CACzD,KAAI,UAAU,OAAO;IAEnB,MAAM,qBAAqB,OAAO,YAChC,OAAO,QAAQ,UAAU,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,SAAS,OAAO,CAAC,CACvF;AAGD,QAAI,OAAO,KAAK,mBAAmB,CAAC,SAAS,EAC3C,WAAU,QAAQ;QAGlB,QAAO,UAAU;;;AAQzB,+BAA6B,cAAc;AAE3C,IAAE,QAAQ,uBAAuB;AAEjC,MAAI,QAAQ,MAAM;AAChB,WAAQ,IAAI,KAAK,UAAU,eAAe,MAAM,EAAE,CAAC;AACnD,oBAAiB;AACjB;;EAIF,MAAM,QAAQ,uBAAuB,WAAW;EAGhD,MAAM,SAAS,cAAc;AAE7B,MAAI,UAAU,OAAO,KAAK,OAAO,CAAC,QAAQ;GACxC,MAAM,EAAE,mBAAmB,MAAM,OAAO;AACxC,SAAM,eAAe,QAAQ,MAAM,UAAU;;AAG/C,IAAE,MAAM,+BAA+B;AACvC,QAAM,mBAAmB;GAEvB,SAAS;GACT;GACA,OAAO,QAAQ;GAChB,CAAC;AACF,IAAE,KAAK,sBAAsB;AAE7B,UAAQ,IAAI,UAAU,SAAS,iCAAiC,CAAC;AACjE,UAAQ,IAAI,UAAU,QAAQ,gBAAgB,MAAM,cAAc,CAAC;AACnE,UAAQ,IAAI,UAAU,QAAQ,mBAAmB,QAAQ,OAAO,gBAAgB,CAAC;AACjF,UAAQ,IACN,UACE,UACA,6HACD,CACF;AAED,mBAAiB;AACjB,MAAI,UACF,QAAO,EAAE,SAAS,MAAM;AAE1B,UAAQ,KAAK,EAAE;UACR,OAAO;EACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,QAAQ,OAAO,MAAM;AACpE,IAAE,MAAM;AACR,UAAQ,MAAM,UAAU,OAAO,YAAY,UAAU,CAAC;AACtD,MAAI,QAAQ,SAAS,iBAAiB,MACpC,SAAQ,MAAM,UAAU,OAAO,MAAM,SAAS,GAAG,CAAC;AAEpD,mBAAiB;AACjB,MAAI,UACF,QAAO;GAAE,SAAS;GAAO,OAAO;GAAS;AAE3C,UAAQ,KAAK,EAAE;;;;;;;AAQnB,eAAe,gBAAgB,SAAuC;AACpE,SAAQ,IAAI,UAAU,QAAQ,iEAAiE,CAAC;AAChG,SAAQ,IACN,UACE,QACA,+EACD,CACF;AACD,SAAQ,IAAI,UAAU,QAAQ,4DAA4D,CAAC;AAG3F,gCAA+B;CAG/B,MAAM,EAAE,QAAQ,SAAS,MAAM,kBAAkB;EAC/C,YAAY,QAAQ;EACpB,aAAa,QAAQ;EACrB,KAAK,QAAQ;EACb,aAAa;EACb,aAAa;EACb,WAAW;EACX,OAAO,QAAQ;EAChB,CAAC;CAEF,MAAM,IAAI,EAAE,SAAS;AAErB,KAAI;AAEF,IAAE,MAAM,oCAAoC;EAU5C,MAAM,WAAW,OATC,MAAM,oBAAoB,OAC1C,OAAO,cACP,QAAQ,QACR,OAAO,UACP,QACA,MACA,OAAO,aACR,EAEgC,iBAAiB;AAClD,IAAE,KAAK,SAAS,SAAS,OAAO,aAAa;AAE7C,MAAI,CAAC,SAAS,QAAQ;AACpB,WAAQ,IAAI,UAAU,UAAU,qCAAqC,CAAC;AACtE,WAAQ,KAAK,EAAE;;EAIjB,MAAM,mBAAoC,EAAE;EAC5C,MAAM,cAA+B,EAAE;AAEvC,OAAK,MAAM,WAAW,SAEpB,KAAI,WAAW,KADG,KAAK,QAAQ,KAAK,EAAE,QAAQ,GAAG,EAClB,WAAW,CAAC,CACzC,kBAAiB,KAAK,QAAQ;MAE9B,aAAY,KAAK,QAAQ;AAI7B,UAAQ,IAAI,UAAU,QAAQ,wBAAwB,CAAC;AACvD,MAAI,iBAAiB,SAAS,GAAG;AAC/B,WAAQ,IAAI,UAAU,QAAQ,iCAAiC,CAAC;AAChE,QAAK,MAAM,WAAW,iBACpB,SAAQ,IAAI,UAAU,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,GAAG,IAAI,QAAQ,GAAG,GAAG,CAAC;;AAGzF,MAAI,YAAY,SAAS,GAAG;AAC1B,WAAQ,IAAI,UAAU,QAAQ,sBAAsB,CAAC;AACrD,QAAK,MAAM,WAAW,YACpB,SAAQ,IAAI,UAAU,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,GAAG,IAAI,QAAQ,GAAG,GAAG,CAAC;;AAGzF,UAAQ,KAAK;EAEb,MAAM,UAA6B,EAAE;EACrC,MAAM,QAAQ,SAAS;AAEvB,OAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;GACxC,MAAM,UAAU,SAAS;GACzB,MAAM,WAAW,IAAI,IAAI,EAAE,GAAG,MAAM;AAEpC,WAAQ,IAAI,UAAU,QAAQ,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC;AACrD,WAAQ,IAAI,UAAU,QAAQ,GAAG,SAAS,WAAW,QAAQ,QAAQ,QAAQ,GAAG,KAAK,CAAC;GAEtF,MAAM,SAAS,MAAM,kBAAkB,QAAQ,IAAI,QAAQ,MAAM,SAAS,QAAQ,KAAK;AACvF,WAAQ,KAAK,OAAO;AAEpB,OAAI,OAAO,QACT,SAAQ,IACN,UACE,SACA,SAAS,OAAO,eAAe,OAAO,UAAU,KAAK,OAAO,YAC7D,CACF;OAED,SAAQ,IACN,UAAU,OAAO,SAAS,OAAO,eAAe,OAAO,UAAU,IAAI,OAAO,QAAQ,CACrF;;EAKL,MAAM,YAAY,QAAQ,QAAQ,MAAM,EAAE,QAAQ,CAAC;EACnD,MAAM,SAAS,QAAQ,QAAQ,MAAM,CAAC,EAAE,QAAQ,CAAC;AAEjD,UAAQ,IAAI,UAAU,QAAQ,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC;AACrD,UAAQ,IAAI,UAAU,QAAQ,yBAAyB,CAAC;AACxD,UAAQ,IAAI,UAAU,SAAS,kBAAkB,YAAY,CAAC;AAC9D,MAAI,SAAS,GAAG;AACd,WAAQ,IAAI,UAAU,OAAO,eAAe,SAAS,CAAC;AAEtD,WAAQ,IAAI,UAAU,OAAO,qBAAqB,CAAC;AACnD,QAAK,MAAM,UAAU,QACnB,KAAI,CAAC,OAAO,QACV,SAAQ,IAAI,UAAU,OAAO,OAAO,OAAO,UAAU,IAAI,OAAO,QAAQ,CAAC;;AAK/E,UAAQ,KAAK,SAAS,IAAI,IAAI,EAAE;UACzB,OAAO;AACd,IAAE,MAAM;AACR,UAAQ,MACN,UAAU,OAAO,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAAG,CACvF;AACD,UAAQ,KAAK,EAAE;;;;;;;AAQnB,eAAe,kBACb,WACA,aACA,SACA,QACA,MAC0B;CAC1B,MAAM,YAAY,KAAK,QAAQ,KAAK,EAAE,UAAU;CAChD,MAAM,qBAAqB,WAAW,KAAK,WAAW,WAAW,CAAC;AAElE,KAAI;AACF,MAAI,oBAAoB;AAEtB,WAAQ,IAAI,UAAU,QAAQ,6DAA6D,CAAC;GAG5F,MAAM,cAAc,QAAQ,KAAK;AACjC,WAAQ,MAAM,UAAU;AAExB,OAAI;IAEF,MAAM,SAAS,MAAM,cAAc;KACjC,GAAG;KACH,SAAS;KACT,KAAK;KACL,YAAY;KACb,CAAC;AAGF,YAAQ,MAAM,YAAY;AAE1B,QAAI,UAAU,OAAO,WAAW,SAC9B,QAAO;KACL;KACA;KACA;KACA,SAAS,OAAO;KAChB,OAAO,OAAO;KACf;AAGH,WAAO;KACL;KACA;KACA;KACA,SAAS;KACV;YACM,OAAO;AAEd,YAAQ,MAAM,YAAY;AAC1B,UAAM;;;AAGV,UAAQ,IAAI,UAAU,QAAQ,iBAAiB,CAAC;EAGhD,MAAM,mBAAmB,QAAQ,IAAI;AACrC,UAAQ,IAAI,YAAY;EAExB,MAAM,wBAAwB;AAC5B,OAAI,qBAAqB,OACvB,SAAQ,IAAI,YAAY;OAExB,QAAO,QAAQ,IAAI;;EAcvB,MAAM,gBAAgB,OATJ,MAAM,oBAAoB,OAC1C,OAAO,cACP,QAAQ,QACR,OAAO,UACP,WACA,MACA,OAAO,aACR,EAEqC,eAAe,UAAU;AAK/D,QAAM,mBAAmB;GAEvB,SAAS;GACT,OANY,uBAAuB,UAAU;GAO9C,CAAC;AAEF,mBAAiB;AAEjB,SAAO;GACL;GACA,aAAa,eAAe,cAAc;GAC1C;GACA,SAAS;GACV;UACM,OAAO;AACd,SAAO;GACL;GACA;GACA;GACA,SAAS;GACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GAC9D"}
|
|
@@ -53,7 +53,7 @@ function createProjectFixture() {
|
|
|
53
53
|
credentialReferences: { "api-credentials": {
|
|
54
54
|
id: "api-credentials",
|
|
55
55
|
name: "API Credentials",
|
|
56
|
-
type: "
|
|
56
|
+
type: "memory",
|
|
57
57
|
credentialStoreId: "main-store",
|
|
58
58
|
retrievalParams: { key: "token" }
|
|
59
59
|
} },
|
|
@@ -90,7 +90,8 @@ function createProjectFixture() {
|
|
|
90
90
|
defaultSubAgentId: "tier-one",
|
|
91
91
|
subAgents: { "tier-one": {
|
|
92
92
|
id: "tier-one",
|
|
93
|
-
name: "Tier One"
|
|
93
|
+
name: "Tier One",
|
|
94
|
+
canUse: []
|
|
94
95
|
} },
|
|
95
96
|
contextConfig: {
|
|
96
97
|
id: "support-context",
|
|
@@ -140,4 +141,5 @@ async function createUnifiedDiff(filePath, before, after) {
|
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
//#endregion
|
|
143
|
-
export { beforeCredentialContent, cleanupTestEnvironment, createProjectFixture, createTestEnvironment, createUnifiedDiff, getTestPath };
|
|
144
|
+
export { beforeCredentialContent, cleanupTestEnvironment, createProjectFixture, createTestEnvironment, createUnifiedDiff, getTestPath };
|
|
145
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","names":[],"sources":["../../../../src/commands/pull-v4/introspect/test-helpers.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport type { FullProjectDefinition } from '@inkeep/agents-core';\nimport { createTwoFilesPatch } from 'diff';\nimport type { ProjectPaths } from '../introspect-generator';\n\nexport const beforeCredentialContent = `import { credential } from '@inkeep/agents-sdk';\n\nconst keepMe = () => 'keep-me';\n\nexport const apiCredentials = credential({\n id: 'api-credentials',\n name: 'Old API Credentials',\n type: 'bearer',\n credentialStoreId: 'main-store'\n});\n`.trimStart();\n\nexport function createTestEnvironment(): { testDir: string; projectPaths: ProjectPaths } {\n const testDir = join(\n tmpdir(),\n `introspect-v4-test-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n );\n fs.mkdirSync(testDir, { recursive: true });\n\n return {\n testDir,\n projectPaths: {\n projectRoot: testDir,\n agentsDir: join(testDir, 'agents'),\n toolsDir: join(testDir, 'tools'),\n dataComponentsDir: join(testDir, 'data-components'),\n artifactComponentsDir: join(testDir, 'artifact-components'),\n statusComponentsDir: join(testDir, 'status-components'),\n environmentsDir: join(testDir, 'environments'),\n credentialsDir: join(testDir, 'credentials'),\n contextConfigsDir: join(testDir, 'context-configs'),\n externalAgentsDir: join(testDir, 'external-agents'),\n },\n };\n}\n\nexport function cleanupTestEnvironment(testDir: string): void {\n fs.rmSync(testDir, { recursive: true, force: true });\n}\n\nexport function getTestPath(): string {\n return `../__tests__/__snapshots__/introspect/${expect.getState().currentTestName?.split(' > ').at(-1)}`;\n}\n\nexport function createProjectFixture(): FullProjectDefinition {\n return {\n id: 'support-project',\n name: 'Support Project',\n description: 'Support project for introspect v4 tests',\n models: {\n base: {\n model: 'gpt-4o-mini',\n },\n },\n credentialReferences: {\n 'api-credentials': {\n id: 'api-credentials',\n name: 'API Credentials',\n type: 'memory',\n credentialStoreId: 'main-store',\n retrievalParams: {\n key: 'token',\n },\n },\n },\n dataComponents: {\n 'customer-profile': {\n id: 'customer-profile',\n name: 'Customer Profile',\n description: 'Customer profile data component',\n props: {\n type: 'object',\n properties: {\n // @ts-expect-error -- fixme\n fullName: { type: 'string' },\n // @ts-expect-error -- fixme\n avatarUrl: { type: 'string' },\n },\n },\n render: {\n component: '<img src=\"{{avatarUrl}}\" alt=\"{{fullName}}\" />',\n mockData: {\n fullName: 'Ada Lovelace',\n avatarUrl: 'https://example.com/avatar.png',\n },\n },\n },\n },\n artifactComponents: {\n 'ticket-summary': {\n id: 'ticket-summary',\n name: 'Ticket Summary',\n props: {\n type: 'object',\n properties: {\n // @ts-expect-error -- fixme\n title: { type: 'string' },\n },\n },\n },\n },\n agents: {\n 'support-agent': {\n id: 'support-agent',\n name: 'Support Agent',\n defaultSubAgentId: 'tier-one',\n subAgents: {\n // @ts-expect-error -- fixme\n 'tier-one': {\n id: 'tier-one',\n name: 'Tier One',\n canUse: [],\n },\n },\n contextConfig: {\n id: 'support-context',\n headersSchema: {\n type: 'object',\n properties: {\n user_id: {\n type: 'string',\n },\n },\n },\n contextVariables: {\n userInfo: {\n id: 'user-info',\n name: 'User Information',\n trigger: 'initialization',\n fetchConfig: {\n // biome-ignore lint/suspicious/noTemplateCurlyInString: snapshot should produce template string\n url: 'https://api.example.com/users/${headersSchema.toTemplate(\"user_id\")}',\n method: 'GET',\n },\n responseSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n },\n },\n defaultValue: 'Unable to fetch user information',\n },\n },\n },\n triggers: {\n 'github-webhook': {\n id: 'github-webhook',\n name: 'GitHub Webhook',\n messageTemplate: 'New webhook event',\n },\n },\n statusUpdates: {\n numEvents: 1,\n statusComponents: [\n {\n // @ts-expect-error -- fixme\n id: 'tool-summary',\n type: 'tool_summary',\n description: 'Tool summary status component',\n detailsSchema: {\n type: 'object',\n properties: {\n tool_name: {\n type: 'string',\n },\n },\n },\n },\n ],\n },\n },\n },\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n}\n\nexport async function createUnifiedDiff(\n filePath: string,\n before: string,\n after: string\n): Promise<string> {\n return createTwoFilesPatch(filePath, filePath, before, after, 'before', 'after', {\n context: 3,\n });\n}\n"],"mappings":"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"}
|