@inkeep/agents-cli 0.21.1 → 0.22.1
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/index.js +402 -132
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1620,7 +1620,6 @@ var init_schema = __esm({
|
|
|
1620
1620
|
...uiProperties,
|
|
1621
1621
|
models: text("models", { mode: "json" }).$type(),
|
|
1622
1622
|
stopWhen: text("stop_when", { mode: "json" }).$type(),
|
|
1623
|
-
sandboxConfig: text("sandbox_config", { mode: "json" }).$type(),
|
|
1624
1623
|
...timestamps
|
|
1625
1624
|
},
|
|
1626
1625
|
(table) => [primaryKey({ columns: [table.tenantId, table.id] })]
|
|
@@ -2452,7 +2451,7 @@ var init_utility = __esm({
|
|
|
2452
2451
|
});
|
|
2453
2452
|
|
|
2454
2453
|
// ../packages/agents-core/src/validation/schemas.ts
|
|
2455
|
-
var StopWhenSchema, AgentStopWhenSchema, SubAgentStopWhenSchema, MIN_ID_LENGTH, MAX_ID_LENGTH, URL_SAFE_ID_PATTERN, resourceIdSchema, ModelSettingsSchema, ModelSchema, ProjectModelSchema,
|
|
2454
|
+
var StopWhenSchema, AgentStopWhenSchema, SubAgentStopWhenSchema, MIN_ID_LENGTH, MAX_ID_LENGTH, URL_SAFE_ID_PATTERN, resourceIdSchema, ModelSettingsSchema, ModelSchema, ProjectModelSchema, FunctionToolConfigSchema, createApiSchema, createApiInsertSchema, createApiUpdateSchema, createAgentScopedApiSchema, createAgentScopedApiInsertSchema, createAgentScopedApiUpdateSchema, SubAgentSelectSchema, SubAgentInsertSchema, SubAgentUpdateSchema, SubAgentApiSelectSchema, SubAgentApiInsertSchema, SubAgentApiUpdateSchema, SubAgentRelationSelectSchema, SubAgentRelationInsertSchema, SubAgentRelationUpdateSchema, SubAgentRelationApiSelectSchema, SubAgentRelationApiInsertSchema, SubAgentRelationApiUpdateSchema, SubAgentRelationQuerySchema, ExternalSubAgentRelationInsertSchema, ExternalSubAgentRelationApiInsertSchema, AgentSelectSchema, AgentInsertSchema, AgentUpdateSchema, AgentApiSelectSchema, AgentApiInsertSchema, AgentApiUpdateSchema, TaskSelectSchema, TaskInsertSchema, TaskUpdateSchema, TaskApiSelectSchema, TaskApiInsertSchema, TaskApiUpdateSchema, TaskRelationSelectSchema, TaskRelationInsertSchema, TaskRelationUpdateSchema, TaskRelationApiSelectSchema, TaskRelationApiInsertSchema, TaskRelationApiUpdateSchema, imageUrlSchema, McpTransportConfigSchema, ToolStatusSchema, McpToolDefinitionSchema, ToolSelectSchema, ToolInsertSchema, ConversationSelectSchema, ConversationInsertSchema, ConversationUpdateSchema, ConversationApiSelectSchema, ConversationApiInsertSchema, ConversationApiUpdateSchema, MessageSelectSchema, MessageInsertSchema, MessageUpdateSchema, MessageApiSelectSchema, MessageApiInsertSchema, MessageApiUpdateSchema, ContextCacheSelectSchema, ContextCacheInsertSchema, ContextCacheUpdateSchema, ContextCacheApiSelectSchema, ContextCacheApiInsertSchema, ContextCacheApiUpdateSchema, DataComponentSelectSchema, DataComponentInsertSchema, DataComponentBaseSchema, DataComponentUpdateSchema, DataComponentApiSelectSchema, DataComponentApiInsertSchema, DataComponentApiUpdateSchema, SubAgentDataComponentSelectSchema, SubAgentDataComponentInsertSchema, SubAgentDataComponentUpdateSchema, SubAgentDataComponentApiSelectSchema, SubAgentDataComponentApiInsertSchema, SubAgentDataComponentApiUpdateSchema, ArtifactComponentSelectSchema, ArtifactComponentInsertSchema, ArtifactComponentUpdateSchema, ArtifactComponentApiSelectSchema, ArtifactComponentApiInsertSchema, ArtifactComponentApiUpdateSchema, SubAgentArtifactComponentSelectSchema, SubAgentArtifactComponentInsertSchema, SubAgentArtifactComponentUpdateSchema, SubAgentArtifactComponentApiSelectSchema, SubAgentArtifactComponentApiInsertSchema, SubAgentArtifactComponentApiUpdateSchema, ExternalAgentSelectSchema, ExternalAgentInsertSchema, ExternalAgentUpdateSchema, ExternalAgentApiSelectSchema, ExternalAgentApiInsertSchema, ExternalAgentApiUpdateSchema, AllAgentSchema, ApiKeySelectSchema, ApiKeyInsertSchema, ApiKeyUpdateSchema, ApiKeyApiSelectSchema, ApiKeyApiCreationResponseSchema, ApiKeyApiInsertSchema, ApiKeyApiUpdateSchema, CredentialReferenceSelectSchema, CredentialReferenceInsertSchema, CredentialReferenceUpdateSchema, CredentialReferenceApiSelectSchema, CredentialReferenceApiInsertSchema, CredentialReferenceApiUpdateSchema, McpToolSchema, MCPToolConfigSchema, ToolUpdateSchema, ToolApiSelectSchema, ToolApiInsertSchema, ToolApiUpdateSchema, FunctionToolSelectSchema, FunctionToolInsertSchema, FunctionToolUpdateSchema, FunctionToolApiSelectSchema, FunctionToolApiInsertSchema, FunctionToolApiUpdateSchema, FunctionSelectSchema, FunctionInsertSchema, FunctionUpdateSchema, FunctionApiSelectSchema, FunctionApiInsertSchema, FunctionApiUpdateSchema, FetchConfigSchema, FetchDefinitionSchema, ContextConfigSelectSchema, ContextConfigInsertSchema, ContextConfigUpdateSchema, ContextConfigApiSelectSchema, ContextConfigApiInsertSchema, ContextConfigApiUpdateSchema, SubAgentToolRelationSelectSchema, SubAgentToolRelationInsertSchema, SubAgentToolRelationUpdateSchema, SubAgentToolRelationApiSelectSchema, SubAgentToolRelationApiInsertSchema, SubAgentToolRelationApiUpdateSchema, LedgerArtifactSelectSchema, LedgerArtifactInsertSchema, LedgerArtifactUpdateSchema, LedgerArtifactApiSelectSchema, LedgerArtifactApiInsertSchema, LedgerArtifactApiUpdateSchema, StatusComponentSchema, StatusUpdateSchema, CanUseItemSchema, FullAgentAgentInsertSchema, AgentWithinContextOfProjectSchema, PaginationSchema, ErrorResponseSchema, ExistsResponseSchema, RemovedResponseSchema, ProjectSelectSchema, ProjectInsertSchema, ProjectUpdateSchema, ProjectApiSelectSchema, ProjectApiInsertSchema, ProjectApiUpdateSchema, FullProjectDefinitionSchema, ProjectResponse, SubAgentResponse, AgentResponse, ToolResponse, ExternalAgentResponse, ContextConfigResponse, ApiKeyResponse, CredentialReferenceResponse, FunctionResponse, FunctionToolResponse, DataComponentResponse, ArtifactComponentResponse, SubAgentRelationResponse, SubAgentToolRelationResponse, ConversationResponse, MessageResponse, ProjectListResponse, SubAgentListResponse, AgentListResponse, ToolListResponse, ExternalAgentListResponse, ContextConfigListResponse, ApiKeyListResponse, CredentialReferenceListResponse, FunctionListResponse, FunctionToolListResponse, DataComponentListResponse, ArtifactComponentListResponse, SubAgentRelationListResponse, SubAgentToolRelationListResponse, ConversationListResponse, MessageListResponse, SubAgentDataComponentResponse, SubAgentArtifactComponentResponse, SubAgentDataComponentListResponse, SubAgentArtifactComponentListResponse, HeadersScopeSchema, TenantId, ProjectId, AgentId, SubAgentId, TenantParamsSchema, TenantIdParamsSchema, TenantProjectParamsSchema, TenantProjectIdParamsSchema, TenantProjectAgentParamsSchema, TenantProjectAgentIdParamsSchema, TenantProjectAgentSubAgentParamsSchema, TenantProjectAgentSubAgentIdParamsSchema, PaginationQueryParamsSchema;
|
|
2456
2455
|
var init_schemas = __esm({
|
|
2457
2456
|
"../packages/agents-core/src/validation/schemas.ts"() {
|
|
2458
2457
|
"use strict";
|
|
@@ -2494,12 +2493,6 @@ var init_schemas = __esm({
|
|
|
2494
2493
|
structuredOutput: ModelSettingsSchema.optional(),
|
|
2495
2494
|
summarizer: ModelSettingsSchema.optional()
|
|
2496
2495
|
}).openapi("ProjectModel");
|
|
2497
|
-
SandboxConfigSchema = z2.object({
|
|
2498
|
-
provider: z2.enum(["vercel", "local"]),
|
|
2499
|
-
runtime: z2.enum(["node22", "typescript"]),
|
|
2500
|
-
timeout: z2.number().min(1e3).max(3e5).optional(),
|
|
2501
|
-
vcpus: z2.number().min(1).max(8).optional()
|
|
2502
|
-
}).openapi("SandboxConfig");
|
|
2503
2496
|
FunctionToolConfigSchema = z2.object({
|
|
2504
2497
|
name: z2.string(),
|
|
2505
2498
|
description: z2.string(),
|
|
@@ -2519,15 +2512,9 @@ var init_schemas = __esm({
|
|
|
2519
2512
|
models: ModelSchema.optional()
|
|
2520
2513
|
});
|
|
2521
2514
|
SubAgentUpdateSchema = SubAgentInsertSchema.partial();
|
|
2522
|
-
SubAgentApiSelectSchema = createAgentScopedApiSchema(SubAgentSelectSchema).openapi(
|
|
2523
|
-
|
|
2524
|
-
);
|
|
2525
|
-
SubAgentApiInsertSchema = createAgentScopedApiInsertSchema(
|
|
2526
|
-
SubAgentInsertSchema
|
|
2527
|
-
).openapi("SubAgentCreate");
|
|
2528
|
-
SubAgentApiUpdateSchema = createAgentScopedApiUpdateSchema(
|
|
2529
|
-
SubAgentUpdateSchema
|
|
2530
|
-
).openapi("SubAgentUpdate");
|
|
2515
|
+
SubAgentApiSelectSchema = createAgentScopedApiSchema(SubAgentSelectSchema).openapi("SubAgent");
|
|
2516
|
+
SubAgentApiInsertSchema = createAgentScopedApiInsertSchema(SubAgentInsertSchema).openapi("SubAgentCreate");
|
|
2517
|
+
SubAgentApiUpdateSchema = createAgentScopedApiUpdateSchema(SubAgentUpdateSchema).openapi("SubAgentUpdate");
|
|
2531
2518
|
SubAgentRelationSelectSchema = createSelectSchema(subAgentRelations);
|
|
2532
2519
|
SubAgentRelationInsertSchema = createInsertSchema(subAgentRelations).extend({
|
|
2533
2520
|
id: resourceIdSchema,
|
|
@@ -2596,9 +2583,7 @@ var init_schemas = __esm({
|
|
|
2596
2583
|
AgentApiInsertSchema = createApiInsertSchema(AgentInsertSchema).extend({
|
|
2597
2584
|
id: resourceIdSchema
|
|
2598
2585
|
}).openapi("AgentCreate");
|
|
2599
|
-
AgentApiUpdateSchema = createApiUpdateSchema(AgentUpdateSchema).openapi(
|
|
2600
|
-
"AgentUpdate"
|
|
2601
|
-
);
|
|
2586
|
+
AgentApiUpdateSchema = createApiUpdateSchema(AgentUpdateSchema).openapi("AgentUpdate");
|
|
2602
2587
|
TaskSelectSchema = createSelectSchema(tasks);
|
|
2603
2588
|
TaskInsertSchema = createInsertSchema(tasks).extend({
|
|
2604
2589
|
id: resourceIdSchema,
|
|
@@ -2683,15 +2668,9 @@ var init_schemas = __esm({
|
|
|
2683
2668
|
contextConfigId: resourceIdSchema.optional()
|
|
2684
2669
|
});
|
|
2685
2670
|
ConversationUpdateSchema = ConversationInsertSchema.partial();
|
|
2686
|
-
ConversationApiSelectSchema = createApiSchema(ConversationSelectSchema).openapi(
|
|
2687
|
-
|
|
2688
|
-
);
|
|
2689
|
-
ConversationApiInsertSchema = createApiInsertSchema(ConversationInsertSchema).openapi(
|
|
2690
|
-
"ConversationCreate"
|
|
2691
|
-
);
|
|
2692
|
-
ConversationApiUpdateSchema = createApiUpdateSchema(ConversationUpdateSchema).openapi(
|
|
2693
|
-
"ConversationUpdate"
|
|
2694
|
-
);
|
|
2671
|
+
ConversationApiSelectSchema = createApiSchema(ConversationSelectSchema).openapi("Conversation");
|
|
2672
|
+
ConversationApiInsertSchema = createApiInsertSchema(ConversationInsertSchema).openapi("ConversationCreate");
|
|
2673
|
+
ConversationApiUpdateSchema = createApiUpdateSchema(ConversationUpdateSchema).openapi("ConversationUpdate");
|
|
2695
2674
|
MessageSelectSchema = createSelectSchema(messages);
|
|
2696
2675
|
MessageInsertSchema = createInsertSchema(messages).extend({
|
|
2697
2676
|
id: resourceIdSchema,
|
|
@@ -2700,12 +2679,8 @@ var init_schemas = __esm({
|
|
|
2700
2679
|
});
|
|
2701
2680
|
MessageUpdateSchema = MessageInsertSchema.partial();
|
|
2702
2681
|
MessageApiSelectSchema = createApiSchema(MessageSelectSchema).openapi("Message");
|
|
2703
|
-
MessageApiInsertSchema = createApiInsertSchema(MessageInsertSchema).openapi(
|
|
2704
|
-
|
|
2705
|
-
);
|
|
2706
|
-
MessageApiUpdateSchema = createApiUpdateSchema(MessageUpdateSchema).openapi(
|
|
2707
|
-
"MessageUpdate"
|
|
2708
|
-
);
|
|
2682
|
+
MessageApiInsertSchema = createApiInsertSchema(MessageInsertSchema).openapi("MessageCreate");
|
|
2683
|
+
MessageApiUpdateSchema = createApiUpdateSchema(MessageUpdateSchema).openapi("MessageUpdate");
|
|
2709
2684
|
ContextCacheSelectSchema = createSelectSchema(contextCache);
|
|
2710
2685
|
ContextCacheInsertSchema = createInsertSchema(contextCache);
|
|
2711
2686
|
ContextCacheUpdateSchema = ContextCacheInsertSchema.partial();
|
|
@@ -2721,15 +2696,9 @@ var init_schemas = __esm({
|
|
|
2721
2696
|
updatedAt: true
|
|
2722
2697
|
});
|
|
2723
2698
|
DataComponentUpdateSchema = DataComponentInsertSchema.partial();
|
|
2724
|
-
DataComponentApiSelectSchema = createApiSchema(
|
|
2725
|
-
|
|
2726
|
-
).openapi("
|
|
2727
|
-
DataComponentApiInsertSchema = createApiInsertSchema(
|
|
2728
|
-
DataComponentInsertSchema
|
|
2729
|
-
).openapi("DataComponentCreate");
|
|
2730
|
-
DataComponentApiUpdateSchema = createApiUpdateSchema(
|
|
2731
|
-
DataComponentUpdateSchema
|
|
2732
|
-
).openapi("DataComponentUpdate");
|
|
2699
|
+
DataComponentApiSelectSchema = createApiSchema(DataComponentSelectSchema).openapi("DataComponent");
|
|
2700
|
+
DataComponentApiInsertSchema = createApiInsertSchema(DataComponentInsertSchema).openapi("DataComponentCreate");
|
|
2701
|
+
DataComponentApiUpdateSchema = createApiUpdateSchema(DataComponentUpdateSchema).openapi("DataComponentUpdate");
|
|
2733
2702
|
SubAgentDataComponentSelectSchema = createSelectSchema(subAgentDataComponents);
|
|
2734
2703
|
SubAgentDataComponentInsertSchema = createInsertSchema(subAgentDataComponents);
|
|
2735
2704
|
SubAgentDataComponentUpdateSchema = SubAgentDataComponentInsertSchema.partial();
|
|
@@ -2791,15 +2760,9 @@ var init_schemas = __esm({
|
|
|
2791
2760
|
id: resourceIdSchema
|
|
2792
2761
|
});
|
|
2793
2762
|
ExternalAgentUpdateSchema = ExternalAgentInsertSchema.partial();
|
|
2794
|
-
ExternalAgentApiSelectSchema = createAgentScopedApiSchema(
|
|
2795
|
-
|
|
2796
|
-
).openapi("
|
|
2797
|
-
ExternalAgentApiInsertSchema = createAgentScopedApiInsertSchema(
|
|
2798
|
-
ExternalAgentInsertSchema
|
|
2799
|
-
).openapi("ExternalAgentCreate");
|
|
2800
|
-
ExternalAgentApiUpdateSchema = createAgentScopedApiUpdateSchema(
|
|
2801
|
-
ExternalAgentUpdateSchema
|
|
2802
|
-
).openapi("ExternalAgentUpdate");
|
|
2763
|
+
ExternalAgentApiSelectSchema = createAgentScopedApiSchema(ExternalAgentSelectSchema).openapi("ExternalAgent");
|
|
2764
|
+
ExternalAgentApiInsertSchema = createAgentScopedApiInsertSchema(ExternalAgentInsertSchema).openapi("ExternalAgentCreate");
|
|
2765
|
+
ExternalAgentApiUpdateSchema = createAgentScopedApiUpdateSchema(ExternalAgentUpdateSchema).openapi("ExternalAgentUpdate");
|
|
2803
2766
|
AllAgentSchema = z2.discriminatedUnion("type", [
|
|
2804
2767
|
SubAgentApiSelectSchema.extend({ type: z2.literal("internal") }),
|
|
2805
2768
|
ExternalAgentApiSelectSchema.extend({ type: z2.literal("external") })
|
|
@@ -2862,9 +2825,7 @@ var init_schemas = __esm({
|
|
|
2862
2825
|
retrievalParams: z2.record(z2.string(), z2.unknown()).nullish()
|
|
2863
2826
|
});
|
|
2864
2827
|
CredentialReferenceUpdateSchema = CredentialReferenceInsertSchema.partial();
|
|
2865
|
-
CredentialReferenceApiSelectSchema = createApiSchema(
|
|
2866
|
-
CredentialReferenceSelectSchema
|
|
2867
|
-
).extend({
|
|
2828
|
+
CredentialReferenceApiSelectSchema = createApiSchema(CredentialReferenceSelectSchema).extend({
|
|
2868
2829
|
type: z2.enum(CredentialStoreType),
|
|
2869
2830
|
tools: z2.array(ToolSelectSchema).optional()
|
|
2870
2831
|
}).openapi("CredentialReference");
|
|
@@ -2914,27 +2875,17 @@ var init_schemas = __esm({
|
|
|
2914
2875
|
id: resourceIdSchema
|
|
2915
2876
|
});
|
|
2916
2877
|
FunctionToolUpdateSchema = FunctionToolInsertSchema.partial();
|
|
2917
|
-
FunctionToolApiSelectSchema = createApiSchema(FunctionToolSelectSchema).openapi(
|
|
2918
|
-
|
|
2919
|
-
);
|
|
2920
|
-
FunctionToolApiInsertSchema = createAgentScopedApiInsertSchema(
|
|
2921
|
-
FunctionToolInsertSchema
|
|
2922
|
-
).openapi("FunctionToolCreate");
|
|
2923
|
-
FunctionToolApiUpdateSchema = createApiUpdateSchema(
|
|
2924
|
-
FunctionToolUpdateSchema
|
|
2925
|
-
).openapi("FunctionToolUpdate");
|
|
2878
|
+
FunctionToolApiSelectSchema = createApiSchema(FunctionToolSelectSchema).openapi("FunctionTool");
|
|
2879
|
+
FunctionToolApiInsertSchema = createAgentScopedApiInsertSchema(FunctionToolInsertSchema).openapi("FunctionToolCreate");
|
|
2880
|
+
FunctionToolApiUpdateSchema = createApiUpdateSchema(FunctionToolUpdateSchema).openapi("FunctionToolUpdate");
|
|
2926
2881
|
FunctionSelectSchema = createSelectSchema(functions);
|
|
2927
2882
|
FunctionInsertSchema = createInsertSchema(functions).extend({
|
|
2928
2883
|
id: resourceIdSchema
|
|
2929
2884
|
});
|
|
2930
2885
|
FunctionUpdateSchema = FunctionInsertSchema.partial();
|
|
2931
2886
|
FunctionApiSelectSchema = createApiSchema(FunctionSelectSchema).openapi("Function");
|
|
2932
|
-
FunctionApiInsertSchema = createApiInsertSchema(FunctionInsertSchema).openapi(
|
|
2933
|
-
|
|
2934
|
-
);
|
|
2935
|
-
FunctionApiUpdateSchema = createApiUpdateSchema(FunctionUpdateSchema).openapi(
|
|
2936
|
-
"FunctionUpdate"
|
|
2937
|
-
);
|
|
2887
|
+
FunctionApiInsertSchema = createApiInsertSchema(FunctionInsertSchema).openapi("FunctionCreate");
|
|
2888
|
+
FunctionApiUpdateSchema = createApiUpdateSchema(FunctionUpdateSchema).openapi("FunctionUpdate");
|
|
2938
2889
|
FetchConfigSchema = z2.object({
|
|
2939
2890
|
url: z2.string().min(1, "URL is required"),
|
|
2940
2891
|
method: z2.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional().default("GET"),
|
|
@@ -3082,8 +3033,7 @@ var init_schemas = __esm({
|
|
|
3082
3033
|
ProjectSelectSchema = createSelectSchema(projects);
|
|
3083
3034
|
ProjectInsertSchema = createInsertSchema(projects).extend({
|
|
3084
3035
|
models: ProjectModelSchema,
|
|
3085
|
-
stopWhen: StopWhenSchema.optional()
|
|
3086
|
-
sandboxConfig: SandboxConfigSchema.optional()
|
|
3036
|
+
stopWhen: StopWhenSchema.optional()
|
|
3087
3037
|
}).omit({
|
|
3088
3038
|
createdAt: true,
|
|
3089
3039
|
updatedAt: true
|
|
@@ -234088,10 +234038,10 @@ function maskSensitiveConfig(config) {
|
|
|
234088
234038
|
if (!config) return config;
|
|
234089
234039
|
const masked = { ...config };
|
|
234090
234040
|
if (masked.agentsManageApiKey) {
|
|
234091
|
-
masked.agentsManageApiKey =
|
|
234041
|
+
masked.agentsManageApiKey = `***${masked.agentsManageApiKey.slice(-4)}`;
|
|
234092
234042
|
}
|
|
234093
234043
|
if (masked.agentsRunApiKey) {
|
|
234094
|
-
masked.agentsRunApiKey =
|
|
234044
|
+
masked.agentsRunApiKey = `***${masked.agentsRunApiKey.slice(-4)}`;
|
|
234095
234045
|
}
|
|
234096
234046
|
return masked;
|
|
234097
234047
|
}
|
|
@@ -234535,6 +234485,9 @@ function isJsonSchemaPath(path3) {
|
|
|
234535
234485
|
if (path3.includes("dataComponents") && path3.endsWith("props")) {
|
|
234536
234486
|
return true;
|
|
234537
234487
|
}
|
|
234488
|
+
if (path3.includes("statusComponents") && path3.endsWith("detailsSchema")) {
|
|
234489
|
+
return true;
|
|
234490
|
+
}
|
|
234538
234491
|
return false;
|
|
234539
234492
|
}
|
|
234540
234493
|
function updateTracker(tracker, placeholder, value) {
|
|
@@ -234613,7 +234566,7 @@ function restorePlaceholders(generatedCode, replacements) {
|
|
|
234613
234566
|
const sortedPlaceholders = Object.keys(replacements).sort((a, b2) => b2.length - a.length);
|
|
234614
234567
|
for (const placeholder of sortedPlaceholders) {
|
|
234615
234568
|
let originalValue = replacements[placeholder];
|
|
234616
|
-
originalValue = originalValue.replace(/`/g, "\\`");
|
|
234569
|
+
originalValue = originalValue.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
|
|
234617
234570
|
const escapedPlaceholder = placeholder.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
234618
234571
|
const regex = new RegExp(escapedPlaceholder, "g");
|
|
234619
234572
|
restoredCode = restoredCode.replace(regex, originalValue);
|
|
@@ -234653,6 +234606,7 @@ __export(pull_llm_generate_exports, {
|
|
|
234653
234606
|
generateDataComponentFile: () => generateDataComponentFile,
|
|
234654
234607
|
generateEnvironmentFiles: () => generateEnvironmentFiles,
|
|
234655
234608
|
generateIndexFile: () => generateIndexFile,
|
|
234609
|
+
generateStatusComponentFile: () => generateStatusComponentFile,
|
|
234656
234610
|
generateTextWithPlaceholders: () => generateTextWithPlaceholders,
|
|
234657
234611
|
generateToolFile: () => generateToolFile,
|
|
234658
234612
|
generateTypeScriptFileWithLLM: () => generateTypeScriptFileWithLLM,
|
|
@@ -234818,22 +234772,48 @@ ${NAMING_CONVENTION_RULES}
|
|
|
234818
234772
|
${IMPORT_INSTRUCTIONS}
|
|
234819
234773
|
|
|
234820
234774
|
REQUIREMENTS:
|
|
234821
|
-
1.
|
|
234775
|
+
1. IMPORTS (CRITICAL):
|
|
234776
|
+
- ALWAYS import { agent, subAgent } from '@inkeep/agents-sdk'
|
|
234777
|
+
- ALWAYS import { z } from 'zod' when using ANY Zod schemas (responseSchema, headersSchema, etc.)
|
|
234778
|
+
- ALWAYS import { contextConfig, fetchDefinition, headers } from '@inkeep/agents-core' when agent has contextConfig
|
|
234779
|
+
- Import status components from '../status-components/' when needed
|
|
234822
234780
|
2. Define each agent using the agent() function following the type definitions provided above
|
|
234823
234781
|
3. Create the agent using agent() with proper structure
|
|
234824
234782
|
- IMPORTANT: If description is null, undefined, or empty string, omit the description field entirely
|
|
234825
|
-
4. CRITICAL:
|
|
234826
|
-
-
|
|
234827
|
-
-
|
|
234783
|
+
4. CRITICAL: Template Literals vs Raw Code:
|
|
234784
|
+
- For STRING VALUES: ALWAYS use template literals with backticks: \`string content\`
|
|
234785
|
+
- This includes: prompt, description, query, url, method, body, defaultValue, etc.
|
|
234786
|
+
- This prevents TypeScript syntax errors with apostrophes (user's, don't, etc.)
|
|
234828
234787
|
- IMPORTANT: ANY placeholder that starts with < and ends with > MUST be wrapped in template literals (backticks)
|
|
234829
|
-
-
|
|
234830
|
-
|
|
234831
|
-
-
|
|
234832
|
-
-
|
|
234788
|
+
- For object keys: use quotes only for keys with hyphens ('Content-Type'), omit for simple identifiers (Authorization)
|
|
234789
|
+
|
|
234790
|
+
EXCEPTION - Schema Fields (NO template literals):
|
|
234791
|
+
- headersSchema: z.object({ ... }) (raw Zod code, NOT a string)
|
|
234792
|
+
- responseSchema: z.object({ ... }) (raw Zod code, NOT a string)
|
|
234793
|
+
- These are TypeScript expressions, not string values
|
|
234794
|
+
|
|
234795
|
+
Examples:
|
|
234796
|
+
\u2705 prompt: \`You are a helpful assistant.\` (string value, use backticks)
|
|
234797
|
+
\u2705 query: \`query GetData { field }\` (string value, use backticks)
|
|
234798
|
+
\u2705 responseSchema: z.object({ name: z.string() }) (Zod code, NO backticks)
|
|
234799
|
+
\u2705 headersSchema: z.object({ 'inkeep_api_key': z.string() }) (Zod code, NO backticks)
|
|
234800
|
+
\u274C responseSchema: \`z.object({ name: z.string() })\` (WRONG - don't wrap Zod in backticks)
|
|
234801
|
+
|
|
234833
234802
|
- convert template literals to use the appropriate headers schema or context config toTemplate method. a template literal is a substring that starts with {{ and ends with }}.
|
|
234834
234803
|
- if you see a template literal with {{headers.}}, convert it to use the headers schema toTemplate method.
|
|
234835
234804
|
- if you see a template literal with {{contextVariableKey.field_name}}, convert it to use the context config toTemplate method.
|
|
234836
|
-
|
|
234805
|
+
5. For contextConfig (CRITICAL):
|
|
234806
|
+
- NEVER use plain objects for contextConfig
|
|
234807
|
+
- ALWAYS use helper functions: headers(), fetchDefinition(), contextConfig()
|
|
234808
|
+
- Create separate const variables for each helper before the agent definition
|
|
234809
|
+
- Pattern: const myHeaders = headers({ schema: z.object({ api_key: z.string() }) });
|
|
234810
|
+
- Pattern: const myFetch = fetchDefinition({ id: '...', fetchConfig: {...}, responseSchema: z.object({...}) });
|
|
234811
|
+
- Pattern: const myContext = contextConfig({ headers: myHeaders, contextVariables: { data: myFetch } });
|
|
234812
|
+
- Then use: export const myAgent = agent({ contextConfig: myContext });
|
|
234813
|
+
- Use myHeaders.toTemplate('key_name') for header interpolation in fetch configs
|
|
234814
|
+
- Use myContext.toTemplate('variable.field') for context variable interpolation
|
|
234815
|
+
|
|
234816
|
+
7. If you are writing zod schemas make them clean. For example if you see z.union([z.string(), z.null()]) write it as z.string().nullable()
|
|
234837
234817
|
|
|
234838
234818
|
PLACEHOLDER HANDLING EXAMPLES:
|
|
234839
234819
|
// CORRECT - Placeholder wrapped in template literals:
|
|
@@ -234848,6 +234828,8 @@ import { contextConfig, fetchDefinition, headers } from '@inkeep/agents-core';
|
|
|
234848
234828
|
import { userProfile } from '../data-components/user-profile';
|
|
234849
234829
|
import { searchTool } from '../tools/search-tool';
|
|
234850
234830
|
import { weatherTool } from '../tools/weather-tool';
|
|
234831
|
+
import { toolSummary } from '../status-components/tool-summary';
|
|
234832
|
+
import { progressStatus } from '../status-components/progress-status';
|
|
234851
234833
|
import { z } from 'zod';
|
|
234852
234834
|
|
|
234853
234835
|
const supportAgentHeaders = headers({
|
|
@@ -234912,7 +234894,16 @@ export const supportAgent = agent({
|
|
|
234912
234894
|
name: 'Support Agent',
|
|
234913
234895
|
description: 'Multi-agent support system', // Only include if description has a value
|
|
234914
234896
|
defaultSubAgent: routerAgent,
|
|
234915
|
-
subAgents: () => [routerAgent, qaAgent]
|
|
234897
|
+
subAgents: () => [routerAgent, qaAgent],
|
|
234898
|
+
models: {
|
|
234899
|
+
base: { model: 'gpt-4' },
|
|
234900
|
+
summarizer: { model: 'gpt-4' },
|
|
234901
|
+
},
|
|
234902
|
+
statusUpdates: {
|
|
234903
|
+
numEvents: 3,
|
|
234904
|
+
timeInSeconds: 15,
|
|
234905
|
+
statusComponents: [toolSummary.config, progressStatus.config],
|
|
234906
|
+
},
|
|
234916
234907
|
});
|
|
234917
234908
|
|
|
234918
234909
|
Generate ONLY the TypeScript code without any markdown or explanations.`;
|
|
@@ -235196,6 +235187,75 @@ Generate ONLY the TypeScript code without any markdown or explanations.`;
|
|
|
235196
235187
|
});
|
|
235197
235188
|
writeFileSync3(outputPath, cleanGeneratedCode(text2));
|
|
235198
235189
|
}
|
|
235190
|
+
async function generateStatusComponentFile(componentData, componentId, outputPath, modelSettings) {
|
|
235191
|
+
const model = createModel(modelSettings);
|
|
235192
|
+
const promptTemplate = `Generate a TypeScript file for an Inkeep status component.
|
|
235193
|
+
|
|
235194
|
+
STATUS COMPONENT DATA:
|
|
235195
|
+
{{DATA}}
|
|
235196
|
+
|
|
235197
|
+
COMPONENT ID: ${componentId}
|
|
235198
|
+
|
|
235199
|
+
${getTypeDefinitions()}
|
|
235200
|
+
|
|
235201
|
+
${NAMING_CONVENTION_RULES}
|
|
235202
|
+
|
|
235203
|
+
${IMPORT_INSTRUCTIONS}
|
|
235204
|
+
|
|
235205
|
+
REQUIREMENTS:
|
|
235206
|
+
1. Import statusComponent from '@inkeep/agents-sdk'
|
|
235207
|
+
2. Import z from 'zod' for schema definitions
|
|
235208
|
+
3. Create the status component using statusComponent()
|
|
235209
|
+
4. Export following naming convention rules (camelCase version of ID)
|
|
235210
|
+
5. Use 'type' field as the identifier (like 'tool_summary')
|
|
235211
|
+
6. CRITICAL: All imports must be alphabetically sorted to comply with Biome linting
|
|
235212
|
+
7. If you are writing zod schemas make them clean. For example if you see z.union([z.string(), z.null()]) write it as z.string().nullable()
|
|
235213
|
+
8. The statusComponent() function handles conversion to .config automatically
|
|
235214
|
+
|
|
235215
|
+
EXAMPLE:
|
|
235216
|
+
import { statusComponent } from '@inkeep/agents-sdk';
|
|
235217
|
+
import { z } from 'zod';
|
|
235218
|
+
|
|
235219
|
+
export const toolSummary = statusComponent({
|
|
235220
|
+
type: 'tool_summary',
|
|
235221
|
+
description: 'Summary of tool calls and their purpose',
|
|
235222
|
+
detailsSchema: z.object({
|
|
235223
|
+
tool_name: z.string().describe('Name of tool used'),
|
|
235224
|
+
summary: z.string().describe('What was discovered or accomplished'),
|
|
235225
|
+
}),
|
|
235226
|
+
});
|
|
235227
|
+
|
|
235228
|
+
EXAMPLE WITH HYPHEN TYPE:
|
|
235229
|
+
import { statusComponent } from '@inkeep/agents-sdk';
|
|
235230
|
+
import { z } from 'zod';
|
|
235231
|
+
|
|
235232
|
+
// Component type 'search-progress' becomes export name 'searchProgress'
|
|
235233
|
+
export const searchProgress = statusComponent({
|
|
235234
|
+
type: 'search-progress',
|
|
235235
|
+
description: 'Progress of search operation',
|
|
235236
|
+
detailsSchema: z.object({
|
|
235237
|
+
query: z.string().describe('Search query being executed'),
|
|
235238
|
+
results_found: z.number().describe('Number of results found'),
|
|
235239
|
+
time_elapsed: z.number().optional().describe('Time elapsed in milliseconds'),
|
|
235240
|
+
}),
|
|
235241
|
+
});
|
|
235242
|
+
|
|
235243
|
+
EXAMPLE WITHOUT DETAILS SCHEMA:
|
|
235244
|
+
import { statusComponent } from '@inkeep/agents-sdk';
|
|
235245
|
+
|
|
235246
|
+
export const simpleStatus = statusComponent({
|
|
235247
|
+
type: 'simple_status',
|
|
235248
|
+
description: 'A simple status with no additional details',
|
|
235249
|
+
});
|
|
235250
|
+
|
|
235251
|
+
Generate ONLY the TypeScript code without any markdown or explanations.`;
|
|
235252
|
+
const text2 = await generateTextWithPlaceholders(model, componentData, promptTemplate, {
|
|
235253
|
+
temperature: 0.1,
|
|
235254
|
+
maxOutputTokens: 4e3,
|
|
235255
|
+
abortSignal: AbortSignal.timeout(6e4)
|
|
235256
|
+
});
|
|
235257
|
+
writeFileSync3(outputPath, cleanGeneratedCode(text2));
|
|
235258
|
+
}
|
|
235199
235259
|
async function generateEnvironmentFiles(environmentsDir, credentials, environment = "development") {
|
|
235200
235260
|
const generateCredentialCode = (cred) => {
|
|
235201
235261
|
const params = [
|
|
@@ -235642,6 +235702,18 @@ function collectAllEntities(projectData) {
|
|
|
235642
235702
|
entities.push({ id: compId, type: "artifactComponent" });
|
|
235643
235703
|
}
|
|
235644
235704
|
}
|
|
235705
|
+
if (projectData.agents) {
|
|
235706
|
+
for (const [_agentId, agentData] of Object.entries(projectData.agents)) {
|
|
235707
|
+
const agentObj = agentData;
|
|
235708
|
+
if (agentObj.statusUpdates?.statusComponents) {
|
|
235709
|
+
for (const statusComp of agentObj.statusUpdates.statusComponents) {
|
|
235710
|
+
if (statusComp.type) {
|
|
235711
|
+
entities.push({ id: statusComp.type, type: "statusComponent" });
|
|
235712
|
+
}
|
|
235713
|
+
}
|
|
235714
|
+
}
|
|
235715
|
+
}
|
|
235716
|
+
}
|
|
235645
235717
|
if (projectData.credentialReferences) {
|
|
235646
235718
|
for (const credId of Object.keys(projectData.credentialReferences)) {
|
|
235647
235719
|
entities.push({ id: credId, type: "credential" });
|
|
@@ -235661,6 +235733,7 @@ var init_variable_name_registry = __esm({
|
|
|
235661
235733
|
// Usually no suffix needed
|
|
235662
235734
|
dataComponentSuffix: null,
|
|
235663
235735
|
artifactComponentSuffix: null,
|
|
235736
|
+
statusComponentSuffix: null,
|
|
235664
235737
|
credentialSuffix: null
|
|
235665
235738
|
};
|
|
235666
235739
|
VariableNameGenerator = class {
|
|
@@ -235674,6 +235747,7 @@ var init_variable_name_registry = __esm({
|
|
|
235674
235747
|
tools: /* @__PURE__ */ new Map(),
|
|
235675
235748
|
dataComponents: /* @__PURE__ */ new Map(),
|
|
235676
235749
|
artifactComponents: /* @__PURE__ */ new Map(),
|
|
235750
|
+
statusComponents: /* @__PURE__ */ new Map(),
|
|
235677
235751
|
credentials: /* @__PURE__ */ new Map(),
|
|
235678
235752
|
usedNames: /* @__PURE__ */ new Map()
|
|
235679
235753
|
};
|
|
@@ -235785,6 +235859,8 @@ var init_variable_name_registry = __esm({
|
|
|
235785
235859
|
return this.conventions.dataComponentSuffix || "";
|
|
235786
235860
|
case "artifactComponent":
|
|
235787
235861
|
return this.conventions.artifactComponentSuffix || "";
|
|
235862
|
+
case "statusComponent":
|
|
235863
|
+
return this.conventions.statusComponentSuffix || "";
|
|
235788
235864
|
case "credential":
|
|
235789
235865
|
return this.conventions.credentialSuffix || "";
|
|
235790
235866
|
default:
|
|
@@ -235806,6 +235882,8 @@ var init_variable_name_registry = __esm({
|
|
|
235806
235882
|
return this.registry.dataComponents;
|
|
235807
235883
|
case "artifactComponent":
|
|
235808
235884
|
return this.registry.artifactComponents;
|
|
235885
|
+
case "statusComponent":
|
|
235886
|
+
return this.registry.statusComponents;
|
|
235809
235887
|
case "credential":
|
|
235810
235888
|
return this.registry.credentials;
|
|
235811
235889
|
default:
|
|
@@ -236120,6 +236198,7 @@ function displayPlanSummary(plan) {
|
|
|
236120
236198
|
tool: [],
|
|
236121
236199
|
dataComponent: [],
|
|
236122
236200
|
artifactComponent: [],
|
|
236201
|
+
statusComponent: [],
|
|
236123
236202
|
environment: []
|
|
236124
236203
|
};
|
|
236125
236204
|
for (const file of plan.files) {
|
|
@@ -236172,6 +236251,15 @@ function displayPlanSummary(plan) {
|
|
|
236172
236251
|
}
|
|
236173
236252
|
}
|
|
236174
236253
|
}
|
|
236254
|
+
if (filesByType.statusComponent.length > 0) {
|
|
236255
|
+
console.log(chalk7.gray("\n Status Components:"));
|
|
236256
|
+
for (const file of filesByType.statusComponent) {
|
|
236257
|
+
console.log(chalk7.gray(` \u2022 ${file.path}`));
|
|
236258
|
+
for (const entity of file.entities) {
|
|
236259
|
+
console.log(chalk7.gray(` - ${entity.variableName}`));
|
|
236260
|
+
}
|
|
236261
|
+
}
|
|
236262
|
+
}
|
|
236175
236263
|
if (filesByType.environment.length > 0) {
|
|
236176
236264
|
console.log(chalk7.gray("\n Environments:"));
|
|
236177
236265
|
for (const file of filesByType.environment) {
|
|
@@ -236193,7 +236281,9 @@ function displayPatternSummary(patterns) {
|
|
|
236193
236281
|
console.log(chalk7.gray(` \u2022 Agent suffix: "${patterns.namingConventions.agentSuffix}"`));
|
|
236194
236282
|
console.log(chalk7.gray(` \u2022 SubAgent suffix: "${patterns.namingConventions.subAgentSuffix}"`));
|
|
236195
236283
|
if (patterns.examples.mappings && patterns.examples.mappings.length > 0) {
|
|
236196
|
-
console.log(
|
|
236284
|
+
console.log(
|
|
236285
|
+
chalk7.gray(` Found ${patterns.examples.mappings.length} existing variable mappings`)
|
|
236286
|
+
);
|
|
236197
236287
|
}
|
|
236198
236288
|
}
|
|
236199
236289
|
function displayRecommendedPattern() {
|
|
@@ -236300,10 +236390,7 @@ async function generatePlan(projectData, patterns, modelSettings, createModel2)
|
|
|
236300
236390
|
nameGenerator.generateVariableName(entity.id, entity.type);
|
|
236301
236391
|
}
|
|
236302
236392
|
const model = createModel2(modelSettings);
|
|
236303
|
-
const promptTemplate = createPlanningPromptTemplate(
|
|
236304
|
-
nameGenerator.getRegistry(),
|
|
236305
|
-
allEntities
|
|
236306
|
-
);
|
|
236393
|
+
const promptTemplate = createPlanningPromptTemplate(nameGenerator.getRegistry(), allEntities);
|
|
236307
236394
|
const promptData = {
|
|
236308
236395
|
projectData,
|
|
236309
236396
|
patterns
|
|
@@ -236353,28 +236440,42 @@ CRITICAL RULES:
|
|
|
236353
236440
|
1. TOOL TYPES - VERY IMPORTANT:
|
|
236354
236441
|
- **Function Tools** (type: "function"): ALWAYS define INLINE within agent files using "inlineContent" array
|
|
236355
236442
|
- **MCP Tools** (type: "mcp"): Create separate files in tools/ directory
|
|
236356
|
-
- VALID FILE TYPES: Only use these exact types: "agent", "tool", "dataComponent", "artifactComponent", "environment", "index"
|
|
236443
|
+
- VALID FILE TYPES: Only use these exact types: "agent", "tool", "dataComponent", "artifactComponent", "statusComponent", "environment", "index"
|
|
236357
236444
|
- NEVER create file type "functionTool" - function tools go in "inlineContent" of agent files
|
|
236358
236445
|
|
|
236359
|
-
2.
|
|
236446
|
+
2. STATUS COMPONENTS - VERY IMPORTANT:
|
|
236447
|
+
- **Status Components**: ALWAYS create separate files in status-components/ directory
|
|
236448
|
+
- Status components are found in agent.statusUpdates.statusComponents array
|
|
236449
|
+
- Each status component should get its own file
|
|
236450
|
+
- Agents must import status components from status-components/ directory
|
|
236451
|
+
- Status components are NEVER inlined in agent files
|
|
236452
|
+
|
|
236453
|
+
3. File Structure:
|
|
236360
236454
|
- If patterns show "toolsLocation": "inline", ALL tools should be in "inlineContent" of agent files
|
|
236361
236455
|
- If patterns show "toolsLocation": "separate", MCP tools get separate files, function tools still inline
|
|
236362
236456
|
- Follow the detected file naming convention (kebab-case, camelCase, or snake_case)
|
|
236363
236457
|
|
|
236364
|
-
|
|
236458
|
+
4. Variable Names:
|
|
236365
236459
|
- MUST use the exact variable names from the mappings above
|
|
236366
236460
|
- If ID "weather" is used by both agent and subAgent, they will have different variable names
|
|
236367
236461
|
- Do NOT generate new variable names - use what's provided
|
|
236368
236462
|
|
|
236369
|
-
|
|
236463
|
+
5. File Placement:
|
|
236370
236464
|
- agents/ directory: Agent files (with function tools in "inlineContent")
|
|
236371
236465
|
- tools/ directory: MCP tool files only
|
|
236372
236466
|
- data-components/ directory: Data component files
|
|
236373
236467
|
- artifact-components/ directory: Artifact component files
|
|
236468
|
+
- status-components/ directory: Status component files
|
|
236374
236469
|
- environments/ directory: Environment/credential files
|
|
236375
236470
|
- index.ts: Main project file
|
|
236376
236471
|
|
|
236377
|
-
|
|
236472
|
+
6. File Paths (CRITICAL):
|
|
236473
|
+
- Paths MUST be relative to the project root directory
|
|
236474
|
+
- DO NOT include the project name in the path
|
|
236475
|
+
- CORRECT: "agents/weather-agent.ts", "tools/inkeep-facts.ts", "status-components/tool-summary.ts"
|
|
236476
|
+
- WRONG: "my-project/agents/weather-agent.ts", "project-name/tools/inkeep-facts.ts"
|
|
236477
|
+
|
|
236478
|
+
7. Dependencies:
|
|
236378
236479
|
- Each file should list which variables it needs to import from other files
|
|
236379
236480
|
- Imports should use relative paths
|
|
236380
236481
|
- Respect detected import style (named vs default)
|
|
@@ -236429,6 +236530,20 @@ OUTPUT FORMAT (JSON):
|
|
|
236429
236530
|
"dependencies": [],
|
|
236430
236531
|
"inlineContent": null
|
|
236431
236532
|
},
|
|
236533
|
+
{
|
|
236534
|
+
"path": "status-components/tool-summary.ts",
|
|
236535
|
+
"type": "statusComponent",
|
|
236536
|
+
"entities": [
|
|
236537
|
+
{
|
|
236538
|
+
"id": "tool_summary",
|
|
236539
|
+
"variableName": "toolSummary",
|
|
236540
|
+
"entityType": "statusComponent",
|
|
236541
|
+
"exportName": "toolSummary"
|
|
236542
|
+
}
|
|
236543
|
+
],
|
|
236544
|
+
"dependencies": [],
|
|
236545
|
+
"inlineContent": null
|
|
236546
|
+
},
|
|
236432
236547
|
{
|
|
236433
236548
|
"path": "index.ts",
|
|
236434
236549
|
"type": "index",
|
|
@@ -236466,6 +236581,7 @@ function formatVariableMappings(registry2, allEntities) {
|
|
|
236466
236581
|
tool: [],
|
|
236467
236582
|
dataComponent: [],
|
|
236468
236583
|
artifactComponent: [],
|
|
236584
|
+
statusComponent: [],
|
|
236469
236585
|
credential: []
|
|
236470
236586
|
};
|
|
236471
236587
|
for (const entity of allEntities) {
|
|
@@ -236500,6 +236616,8 @@ function getRegistryMap(registry2, entityType) {
|
|
|
236500
236616
|
return registry2.dataComponents;
|
|
236501
236617
|
case "artifactComponent":
|
|
236502
236618
|
return registry2.artifactComponents;
|
|
236619
|
+
case "statusComponent":
|
|
236620
|
+
return registry2.statusComponents;
|
|
236503
236621
|
case "credential":
|
|
236504
236622
|
return registry2.credentials;
|
|
236505
236623
|
default:
|
|
@@ -236582,6 +236700,21 @@ function generateDefaultPlan(registry2) {
|
|
|
236582
236700
|
dependencies: []
|
|
236583
236701
|
});
|
|
236584
236702
|
}
|
|
236703
|
+
for (const [compId, variableName] of registry2.statusComponents.entries()) {
|
|
236704
|
+
files.push({
|
|
236705
|
+
path: `status-components/${kebabCase(compId)}.ts`,
|
|
236706
|
+
type: "statusComponent",
|
|
236707
|
+
entities: [
|
|
236708
|
+
{
|
|
236709
|
+
id: compId,
|
|
236710
|
+
variableName,
|
|
236711
|
+
entityType: "statusComponent",
|
|
236712
|
+
exportName: variableName
|
|
236713
|
+
}
|
|
236714
|
+
],
|
|
236715
|
+
dependencies: []
|
|
236716
|
+
});
|
|
236717
|
+
}
|
|
236585
236718
|
files.push({
|
|
236586
236719
|
path: "index.ts",
|
|
236587
236720
|
type: "index",
|
|
@@ -236617,14 +236750,18 @@ async function generateFilesFromPlan(plan, projectData, dirs, modelSettings, deb
|
|
|
236617
236750
|
(fileInfo, index2) => generateFile(fileInfo, projectData, plan, dirs, modelSettings, debug).then(() => {
|
|
236618
236751
|
if (debug) {
|
|
236619
236752
|
const elapsed = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
236620
|
-
console.log(
|
|
236753
|
+
console.log(
|
|
236754
|
+
`[DEBUG] \u2713 Completed ${index2 + 1}/${plan.files.length}: ${fileInfo.path} (${elapsed}s elapsed)`
|
|
236755
|
+
);
|
|
236621
236756
|
}
|
|
236622
236757
|
})
|
|
236623
236758
|
);
|
|
236624
236759
|
await Promise.all(tasks2);
|
|
236625
236760
|
const totalTime = ((Date.now() - startTime) / 1e3).toFixed(1);
|
|
236626
236761
|
if (debug) {
|
|
236627
|
-
console.log(
|
|
236762
|
+
console.log(
|
|
236763
|
+
`[DEBUG] All files generated in ${totalTime}s (${plan.files.length} files in parallel)`
|
|
236764
|
+
);
|
|
236628
236765
|
}
|
|
236629
236766
|
}
|
|
236630
236767
|
async function generateFile(fileInfo, projectData, plan, dirs, modelSettings, debug) {
|
|
@@ -236662,7 +236799,9 @@ async function generateFile(fileInfo, projectData, plan, dirs, modelSettings, de
|
|
|
236662
236799
|
writeFileSync4(outputPath, cleanedCode);
|
|
236663
236800
|
const totalDuration = ((Date.now() - fileStartTime) / 1e3).toFixed(1);
|
|
236664
236801
|
if (debug) {
|
|
236665
|
-
console.log(
|
|
236802
|
+
console.log(
|
|
236803
|
+
`[DEBUG] \u2713 Completed: ${fileInfo.path} (LLM: ${llmDuration}s, Total: ${totalDuration}s)`
|
|
236804
|
+
);
|
|
236666
236805
|
}
|
|
236667
236806
|
} catch (error) {
|
|
236668
236807
|
console.error(`[ERROR] Failed to generate ${fileInfo.path}:`, error.message);
|
|
@@ -236701,6 +236840,21 @@ function extractDataForFile(fileInfo, projectData) {
|
|
|
236701
236840
|
}
|
|
236702
236841
|
return {};
|
|
236703
236842
|
}
|
|
236843
|
+
case "statusComponent": {
|
|
236844
|
+
const statusType = fileInfo.entities[0]?.id;
|
|
236845
|
+
if (statusType && projectData.agents) {
|
|
236846
|
+
for (const agentData of Object.values(projectData.agents)) {
|
|
236847
|
+
const agent = agentData;
|
|
236848
|
+
if (agent.statusUpdates?.statusComponents) {
|
|
236849
|
+
const found = agent.statusUpdates.statusComponents.find(
|
|
236850
|
+
(sc) => sc.type === statusType
|
|
236851
|
+
);
|
|
236852
|
+
if (found) return found;
|
|
236853
|
+
}
|
|
236854
|
+
}
|
|
236855
|
+
}
|
|
236856
|
+
return {};
|
|
236857
|
+
}
|
|
236704
236858
|
case "environment":
|
|
236705
236859
|
return projectData.credentialReferences || {};
|
|
236706
236860
|
default:
|
|
@@ -236756,11 +236910,13 @@ CRITICAL RULES:
|
|
|
236756
236910
|
return createDataComponentPrompt(fileData, context, registryInfo, commonInstructions);
|
|
236757
236911
|
case "artifactComponent":
|
|
236758
236912
|
return createArtifactComponentPrompt(fileData, context, registryInfo, commonInstructions);
|
|
236913
|
+
case "statusComponent":
|
|
236914
|
+
return createStatusComponentPrompt(fileData, context, registryInfo, commonInstructions);
|
|
236759
236915
|
default:
|
|
236760
236916
|
throw new Error(`Unknown file type: ${fileInfo.type}`);
|
|
236761
236917
|
}
|
|
236762
236918
|
}
|
|
236763
|
-
function createIndexPrompt(
|
|
236919
|
+
function createIndexPrompt(_projectData, context, _registryInfo, commonInstructions) {
|
|
236764
236920
|
const importMappings = generateImportMappings(context.plan);
|
|
236765
236921
|
return `Generate index.ts for Inkeep project.
|
|
236766
236922
|
|
|
@@ -236787,7 +236943,7 @@ export const myProject = project({
|
|
|
236787
236943
|
|
|
236788
236944
|
Generate ONLY the TypeScript code without markdown.`;
|
|
236789
236945
|
}
|
|
236790
|
-
function createAgentPrompt(
|
|
236946
|
+
function createAgentPrompt(_agentData, context, _registryInfo, commonInstructions) {
|
|
236791
236947
|
const inlineTools = context.fileInfo.inlineContent || [];
|
|
236792
236948
|
const hasInlineTools = inlineTools.length > 0;
|
|
236793
236949
|
return `Generate TypeScript file for Inkeep agent.
|
|
@@ -236841,17 +236997,62 @@ const calculateBMI = functionTool({
|
|
|
236841
236997
|
` : ""}
|
|
236842
236998
|
|
|
236843
236999
|
IMPORTS (CRITICAL - MUST BE FIRST):
|
|
236844
|
-
ALWAYS import these
|
|
236845
|
-
import { agent, subAgent, functionTool } from '@inkeep/agents-sdk';
|
|
237000
|
+
ALWAYS import these at the TOP of the file:
|
|
237001
|
+
- import { agent, subAgent, functionTool } from '@inkeep/agents-sdk';
|
|
237002
|
+
- import { z } from 'zod'; (REQUIRED when using ANY Zod schemas like responseSchema, headersSchema)
|
|
237003
|
+
- import { contextConfig, fetchDefinition, headers } from '@inkeep/agents-core'; (REQUIRED when agent has contextConfig)
|
|
237004
|
+
- import status components from '../status-components/' when needed
|
|
236846
237005
|
|
|
236847
237006
|
SUBAGENT AND AGENT API (CRITICAL):
|
|
236848
237007
|
- Use 'canUse' (NOT 'tools') - must be a FUNCTION returning array
|
|
236849
237008
|
- Use 'canDelegateTo' - must be a FUNCTION returning array
|
|
236850
237009
|
- Use 'dataComponents' - must be a FUNCTION returning array
|
|
236851
237010
|
- Use 'subAgents' in agent() - must be a FUNCTION returning array
|
|
236852
|
-
|
|
237011
|
+
|
|
237012
|
+
CONTEXT CONFIG (CRITICAL - NO PLAIN OBJECTS):
|
|
237013
|
+
- NEVER use plain objects for contextConfig
|
|
237014
|
+
- ALWAYS use helper functions: headers(), fetchDefinition(), contextConfig()
|
|
237015
|
+
- Create separate const variables for each helper before the agent definition
|
|
237016
|
+
- Pattern:
|
|
237017
|
+
const myHeaders = headers({ schema: z.object({ api_key: z.string() }) });
|
|
237018
|
+
const myFetch = fetchDefinition({ id: '...', fetchConfig: {...}, responseSchema: z.object({...}) });
|
|
237019
|
+
const myContext = contextConfig({ headers: myHeaders, contextVariables: { data: myFetch } });
|
|
237020
|
+
export const myAgent = agent({ contextConfig: myContext });
|
|
237021
|
+
- Use myHeaders.toTemplate('key_name') for header values in fetchConfig
|
|
237022
|
+
- Use myContext.toTemplate('variable.field') for prompt interpolation
|
|
237023
|
+
|
|
237024
|
+
STRING LITERALS (CRITICAL - MUST FOLLOW):
|
|
237025
|
+
- For STRING VALUES: ALWAYS use template literals (backticks \`)
|
|
237026
|
+
- This includes: prompt, description, query, url, method, body, defaultValue, etc.
|
|
237027
|
+
- Template literals prevent syntax errors with apostrophes (don't, user's, it's)
|
|
237028
|
+
- For object keys that are identifiers (no hyphens), omit quotes: Authorization not 'Authorization'
|
|
237029
|
+
- For object keys with hyphens, use quotes: 'Content-Type'
|
|
237030
|
+
|
|
237031
|
+
EXCEPTION - Schema Fields (NO template literals):
|
|
237032
|
+
- headersSchema: z.object({ ... }) (raw Zod code, NOT a string)
|
|
237033
|
+
- responseSchema: z.object({ ... }) (raw Zod code, NOT a string)
|
|
237034
|
+
- These are TypeScript expressions, not string values
|
|
237035
|
+
|
|
237036
|
+
CORRECT EXAMPLES:
|
|
237037
|
+
\u2705 prompt: \`You are a helpful assistant.\` (string value)
|
|
237038
|
+
\u2705 query: \`query GetData { field }\` (string value)
|
|
237039
|
+
\u2705 responseSchema: z.object({ name: z.string() }) (Zod code, NO backticks)
|
|
237040
|
+
\u2705 headersSchema: z.object({ 'inkeep_api_key': z.string() }) (Zod code, NO backticks)
|
|
237041
|
+
|
|
237042
|
+
WRONG EXAMPLES:
|
|
237043
|
+
\u274C prompt: 'You are a helpful assistant.' (use backticks not single quotes)
|
|
237044
|
+
\u274C responseSchema: \`z.object({ name: z.string() })\` (don't wrap Zod in backticks)
|
|
237045
|
+
|
|
237046
|
+
STATUS COMPONENTS (CRITICAL):
|
|
237047
|
+
- Status components are ALWAYS imported from '../status-components/' directory
|
|
237048
|
+
- In statusUpdates.statusComponents array, use statusComponent.config to get the config object
|
|
237049
|
+
- NEVER inline status component definitions in the agent file
|
|
237050
|
+
- Example: import { toolSummary } from '../status-components/tool-summary'
|
|
237051
|
+
- Then use: statusComponents: [toolSummary.config]
|
|
236853
237052
|
|
|
236854
237053
|
\u2705 CORRECT:
|
|
237054
|
+
import { toolSummary } from '../status-components/tool-summary';
|
|
237055
|
+
|
|
236855
237056
|
const weatherSubAgent = subAgent({
|
|
236856
237057
|
id: 'weather',
|
|
236857
237058
|
name: 'Weather Sub',
|
|
@@ -236868,7 +237069,12 @@ const weatherAgent = agent({
|
|
|
236868
237069
|
id: 'weather',
|
|
236869
237070
|
name: 'Weather Agent',
|
|
236870
237071
|
defaultSubAgent: weatherSubAgent,
|
|
236871
|
-
subAgents: () => [weatherSubAgent] // FUNCTION returning array
|
|
237072
|
+
subAgents: () => [weatherSubAgent], // FUNCTION returning array
|
|
237073
|
+
statusUpdates: {
|
|
237074
|
+
numEvents: 1,
|
|
237075
|
+
timeInSeconds: 1,
|
|
237076
|
+
statusComponents: [toolSummary.config] // Use .config
|
|
237077
|
+
}
|
|
236872
237078
|
});
|
|
236873
237079
|
|
|
236874
237080
|
\u274C WRONG:
|
|
@@ -236877,10 +237083,11 @@ string', // NO - use backticks for multi-line
|
|
|
236877
237083
|
tools: [tool1, tool2], // NO - use 'canUse' not 'tools'
|
|
236878
237084
|
canUse: [tool1, tool2], // NO - must be a function
|
|
236879
237085
|
subAgents: [weatherSubAgent], // NO - must be a function
|
|
237086
|
+
statusComponents: [{ type: '...', ... }], // NO - import from files
|
|
236880
237087
|
|
|
236881
237088
|
Generate ONLY the TypeScript code without markdown.`;
|
|
236882
237089
|
}
|
|
236883
|
-
function createToolPrompt(
|
|
237090
|
+
function createToolPrompt(_toolData, _context, _registryInfo, commonInstructions) {
|
|
236884
237091
|
return `Generate TypeScript file for Inkeep tool.
|
|
236885
237092
|
|
|
236886
237093
|
TOOL DATA:
|
|
@@ -236896,7 +237103,7 @@ REQUIREMENTS:
|
|
|
236896
237103
|
|
|
236897
237104
|
Generate ONLY the TypeScript code without markdown.`;
|
|
236898
237105
|
}
|
|
236899
|
-
function createDataComponentPrompt(
|
|
237106
|
+
function createDataComponentPrompt(_componentData, _context, _registryInfo, commonInstructions) {
|
|
236900
237107
|
return `Generate TypeScript file for Inkeep data component.
|
|
236901
237108
|
|
|
236902
237109
|
COMPONENT DATA:
|
|
@@ -236952,7 +237159,7 @@ REQUIREMENTS:
|
|
|
236952
237159
|
|
|
236953
237160
|
Generate ONLY the TypeScript code without markdown.`;
|
|
236954
237161
|
}
|
|
236955
|
-
function createArtifactComponentPrompt(
|
|
237162
|
+
function createArtifactComponentPrompt(_componentData, _context, _registryInfo, commonInstructions) {
|
|
236956
237163
|
return `Generate TypeScript file for Inkeep artifact component.
|
|
236957
237164
|
|
|
236958
237165
|
COMPONENT DATA:
|
|
@@ -236969,7 +237176,38 @@ REQUIREMENTS:
|
|
|
236969
237176
|
|
|
236970
237177
|
Generate ONLY the TypeScript code without markdown.`;
|
|
236971
237178
|
}
|
|
236972
|
-
function
|
|
237179
|
+
function createStatusComponentPrompt(_componentData, _context, _registryInfo, commonInstructions) {
|
|
237180
|
+
return `Generate TypeScript file for Inkeep status component.
|
|
237181
|
+
|
|
237182
|
+
COMPONENT DATA:
|
|
237183
|
+
{{DATA}}
|
|
237184
|
+
|
|
237185
|
+
${commonInstructions}
|
|
237186
|
+
|
|
237187
|
+
REQUIREMENTS:
|
|
237188
|
+
1. Import statusComponent from '@inkeep/agents-sdk'
|
|
237189
|
+
2. Import z from 'zod' for schema definitions if detailsSchema is present
|
|
237190
|
+
3. Use exact variable name from registry
|
|
237191
|
+
4. Convert any JSON Schema in detailsSchema to Zod schema
|
|
237192
|
+
5. Use 'type' field as the identifier
|
|
237193
|
+
6. The statusComponent() function handles .config conversion automatically
|
|
237194
|
+
|
|
237195
|
+
EXAMPLE:
|
|
237196
|
+
import { statusComponent } from '@inkeep/agents-sdk';
|
|
237197
|
+
import { z } from 'zod';
|
|
237198
|
+
|
|
237199
|
+
export const toolSummary = statusComponent({
|
|
237200
|
+
type: 'tool_summary',
|
|
237201
|
+
description: 'Summary of tool calls',
|
|
237202
|
+
detailsSchema: z.object({
|
|
237203
|
+
tool_name: z.string().describe('Name of tool used'),
|
|
237204
|
+
summary: z.string().describe('What was accomplished'),
|
|
237205
|
+
}),
|
|
237206
|
+
});
|
|
237207
|
+
|
|
237208
|
+
Generate ONLY the TypeScript code without markdown.`;
|
|
237209
|
+
}
|
|
237210
|
+
function formatRegistryForFile(fileInfo, _registry) {
|
|
236973
237211
|
let result = "Entities in this file:\n";
|
|
236974
237212
|
for (const entity of fileInfo.entities) {
|
|
236975
237213
|
result += ` - ${entity.entityType} "${entity.id}" \u2192 variable: ${entity.variableName}
|
|
@@ -237635,9 +237873,7 @@ async function configGetCommand(key, options) {
|
|
|
237635
237873
|
if (!existsSync(configPath)) {
|
|
237636
237874
|
console.error(chalk2.red("No configuration file found."));
|
|
237637
237875
|
console.log(
|
|
237638
|
-
chalk2.gray(
|
|
237639
|
-
'Run "inkeep init" to create one, or specify a config file with --config'
|
|
237640
|
-
)
|
|
237876
|
+
chalk2.gray('Run "inkeep init" to create one, or specify a config file with --config')
|
|
237641
237877
|
);
|
|
237642
237878
|
process.exit(1);
|
|
237643
237879
|
}
|
|
@@ -238264,7 +238500,9 @@ async function detectCurrentProject(debug = false) {
|
|
|
238264
238500
|
if (typeof value.getId === "function") {
|
|
238265
238501
|
const projectId = value.getId();
|
|
238266
238502
|
if (debug) {
|
|
238267
|
-
console.log(
|
|
238503
|
+
console.log(
|
|
238504
|
+
chalk8.gray(` \u2022 Project detected: ${projectId} (from export: ${exportKey})`)
|
|
238505
|
+
);
|
|
238268
238506
|
}
|
|
238269
238507
|
return projectId;
|
|
238270
238508
|
}
|
|
@@ -238282,7 +238520,7 @@ async function detectCurrentProject(debug = false) {
|
|
|
238282
238520
|
try {
|
|
238283
238521
|
const content = readFileSync5(indexPath, "utf-8");
|
|
238284
238522
|
const projectIdMatch = content.match(/project\s*\(\s*\{\s*id\s*:\s*['"]([^'"]+)['"]/);
|
|
238285
|
-
if (projectIdMatch
|
|
238523
|
+
if (projectIdMatch?.[1]) {
|
|
238286
238524
|
const projectId = projectIdMatch[1];
|
|
238287
238525
|
if (debug) {
|
|
238288
238526
|
console.log(chalk8.gray(` \u2022 Project ID extracted from static parse: ${projectId}`));
|
|
@@ -238315,7 +238553,7 @@ async function verifyGeneratedFiles(projectDir, originalProjectData, debug = fal
|
|
|
238315
238553
|
errors.push("index.ts does not contain a project() call");
|
|
238316
238554
|
}
|
|
238317
238555
|
const projectIdMatch = indexContent.match(/project\s*\(\s*\{\s*id\s*:\s*['"]([^'"]+)['"]/);
|
|
238318
|
-
if (projectIdMatch
|
|
238556
|
+
if (projectIdMatch?.[1]) {
|
|
238319
238557
|
const extractedProjectId = projectIdMatch[1];
|
|
238320
238558
|
if (extractedProjectId !== originalProjectData.id) {
|
|
238321
238559
|
warnings.push(
|
|
@@ -238332,31 +238570,36 @@ async function verifyGeneratedFiles(projectDir, originalProjectData, debug = fal
|
|
|
238332
238570
|
const agentsDir = join9(projectDir, "agents");
|
|
238333
238571
|
const expectedAgents = Object.keys(originalProjectData.agents || {});
|
|
238334
238572
|
for (const agentId of expectedAgents) {
|
|
238335
|
-
const
|
|
238573
|
+
const kebabCaseId = agentId.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
238574
|
+
const agentPath = join9(agentsDir, `${kebabCaseId}.ts`);
|
|
238336
238575
|
if (!existsSync8(agentPath)) {
|
|
238337
|
-
errors.push(`Agent file not found: agents/${
|
|
238576
|
+
errors.push(`Agent file not found: agents/${kebabCaseId}.ts`);
|
|
238338
238577
|
} else if (debug) {
|
|
238339
|
-
console.log(chalk8.gray(` \u2713 Agent file exists: agents/${
|
|
238578
|
+
console.log(chalk8.gray(` \u2713 Agent file exists: agents/${kebabCaseId}.ts`));
|
|
238340
238579
|
}
|
|
238341
238580
|
}
|
|
238342
238581
|
const toolsDir = join9(projectDir, "tools");
|
|
238343
238582
|
const expectedTools = Object.keys(originalProjectData.tools || {});
|
|
238344
238583
|
for (const toolId of expectedTools) {
|
|
238345
|
-
const
|
|
238584
|
+
const kebabCaseId = toolId.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
238585
|
+
const toolPath = join9(toolsDir, `${kebabCaseId}.ts`);
|
|
238346
238586
|
if (!existsSync8(toolPath)) {
|
|
238347
|
-
errors.push(`Tool file not found: tools/${
|
|
238587
|
+
errors.push(`Tool file not found: tools/${kebabCaseId}.ts`);
|
|
238348
238588
|
} else if (debug) {
|
|
238349
|
-
console.log(chalk8.gray(` \u2713 Tool file exists: tools/${
|
|
238589
|
+
console.log(chalk8.gray(` \u2713 Tool file exists: tools/${kebabCaseId}.ts`));
|
|
238350
238590
|
}
|
|
238351
238591
|
}
|
|
238352
238592
|
const dataComponentsDir = join9(projectDir, "data-components");
|
|
238353
238593
|
const expectedDataComponents = Object.keys(originalProjectData.dataComponents || {});
|
|
238354
238594
|
for (const componentId of expectedDataComponents) {
|
|
238355
|
-
const
|
|
238595
|
+
const kebabCaseId = componentId.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
238596
|
+
const componentPath = join9(dataComponentsDir, `${kebabCaseId}.ts`);
|
|
238356
238597
|
if (!existsSync8(componentPath)) {
|
|
238357
|
-
errors.push(`Data component file not found: data-components/${
|
|
238598
|
+
errors.push(`Data component file not found: data-components/${kebabCaseId}.ts`);
|
|
238358
238599
|
} else if (debug) {
|
|
238359
|
-
console.log(
|
|
238600
|
+
console.log(
|
|
238601
|
+
chalk8.gray(` \u2713 Data component file exists: data-components/${kebabCaseId}.ts`)
|
|
238602
|
+
);
|
|
238360
238603
|
}
|
|
238361
238604
|
}
|
|
238362
238605
|
const environmentsDir = join9(projectDir, "environments");
|
|
@@ -238382,8 +238625,12 @@ async function verifyGeneratedFiles(projectDir, originalProjectData, debug = fal
|
|
|
238382
238625
|
if (debug) {
|
|
238383
238626
|
console.log(chalk8.gray("\n\u{1F50D} Verification Summary:"));
|
|
238384
238627
|
console.log(chalk8.gray(` \u2022 index.ts: ${existsSync8(indexPath) ? "\u2713" : "\u2717"}`));
|
|
238385
|
-
console.log(
|
|
238386
|
-
|
|
238628
|
+
console.log(
|
|
238629
|
+
chalk8.gray(` \u2022 Agent files: ${expectedAgents.length}/${expectedAgents.length} found`)
|
|
238630
|
+
);
|
|
238631
|
+
console.log(
|
|
238632
|
+
chalk8.gray(` \u2022 Tool files: ${expectedTools.length}/${expectedTools.length} found`)
|
|
238633
|
+
);
|
|
238387
238634
|
console.log(
|
|
238388
238635
|
chalk8.gray(
|
|
238389
238636
|
` \u2022 Data component files: ${expectedDataComponents.length}/${expectedDataComponents.length} found`
|
|
@@ -238439,12 +238686,14 @@ function createProjectStructure(projectDir, projectId, useCurrentDirectory = fal
|
|
|
238439
238686
|
const toolsDir = join9(projectRoot, "tools");
|
|
238440
238687
|
const dataComponentsDir = join9(projectRoot, "data-components");
|
|
238441
238688
|
const artifactComponentsDir = join9(projectRoot, "artifact-components");
|
|
238689
|
+
const statusComponentsDir = join9(projectRoot, "status-components");
|
|
238442
238690
|
const environmentsDir = join9(projectRoot, "environments");
|
|
238443
238691
|
ensureDirectoryExists(projectRoot);
|
|
238444
238692
|
ensureDirectoryExists(agentsDir);
|
|
238445
238693
|
ensureDirectoryExists(toolsDir);
|
|
238446
238694
|
ensureDirectoryExists(dataComponentsDir);
|
|
238447
238695
|
ensureDirectoryExists(artifactComponentsDir);
|
|
238696
|
+
ensureDirectoryExists(statusComponentsDir);
|
|
238448
238697
|
ensureDirectoryExists(environmentsDir);
|
|
238449
238698
|
return {
|
|
238450
238699
|
projectRoot,
|
|
@@ -238452,6 +238701,7 @@ function createProjectStructure(projectDir, projectId, useCurrentDirectory = fal
|
|
|
238452
238701
|
toolsDir,
|
|
238453
238702
|
dataComponentsDir,
|
|
238454
238703
|
artifactComponentsDir,
|
|
238704
|
+
statusComponentsDir,
|
|
238455
238705
|
environmentsDir
|
|
238456
238706
|
};
|
|
238457
238707
|
}
|
|
@@ -238628,6 +238878,11 @@ async function pullProjectCommand(options) {
|
|
|
238628
238878
|
}, 0);
|
|
238629
238879
|
const dataComponentCount = Object.keys(projectData.dataComponents || {}).length;
|
|
238630
238880
|
const artifactComponentCount = Object.keys(projectData.artifactComponents || {}).length;
|
|
238881
|
+
const statusComponentCount = Object.values(projectData.agents || {}).reduce((total, agent) => {
|
|
238882
|
+
const agentObj = agent;
|
|
238883
|
+
const statusComponents = agentObj.statusUpdates?.statusComponents || [];
|
|
238884
|
+
return total + statusComponents.length;
|
|
238885
|
+
}, 0);
|
|
238631
238886
|
console.log(chalk8.cyan("\n\u{1F4CA} Project Summary:"));
|
|
238632
238887
|
console.log(chalk8.gray(` \u2022 Name: ${projectData.name}`));
|
|
238633
238888
|
console.log(chalk8.gray(` \u2022 Description: ${projectData.description || "No description"}`));
|
|
@@ -238640,6 +238895,9 @@ async function pullProjectCommand(options) {
|
|
|
238640
238895
|
if (artifactComponentCount > 0) {
|
|
238641
238896
|
console.log(chalk8.gray(` \u2022 Artifact Components: ${artifactComponentCount}`));
|
|
238642
238897
|
}
|
|
238898
|
+
if (statusComponentCount > 0) {
|
|
238899
|
+
console.log(chalk8.gray(` \u2022 Status Components: ${statusComponentCount}`));
|
|
238900
|
+
}
|
|
238643
238901
|
const credentialReferences2 = projectData.credentialReferences || {};
|
|
238644
238902
|
const credentialCount = Object.keys(credentialReferences2).length;
|
|
238645
238903
|
if (credentialCount > 0) {
|
|
@@ -238738,13 +238996,19 @@ async function pullProjectCommand(options) {
|
|
|
238738
238996
|
if (options.debug) {
|
|
238739
238997
|
console.log(chalk8.gray("\n\u{1F4CD} Plan saved to .inkeep/generation-plan.json"));
|
|
238740
238998
|
}
|
|
238999
|
+
const statusComponentsCount = Object.values(projectData.agents || {}).reduce((total, agent) => {
|
|
239000
|
+
const agentObj = agent;
|
|
239001
|
+
const statusComponents = agentObj.statusUpdates?.statusComponents || [];
|
|
239002
|
+
return total + statusComponents.length;
|
|
239003
|
+
}, 0);
|
|
238741
239004
|
const fileCount = {
|
|
238742
239005
|
agents: Object.keys(projectData.agents || {}).length,
|
|
238743
239006
|
tools: Object.keys(projectData.tools || {}).length,
|
|
238744
239007
|
dataComponents: Object.keys(projectData.dataComponents || {}).length,
|
|
238745
|
-
artifactComponents: Object.keys(projectData.artifactComponents || {}).length
|
|
239008
|
+
artifactComponents: Object.keys(projectData.artifactComponents || {}).length,
|
|
239009
|
+
statusComponents: statusComponentsCount
|
|
238746
239010
|
};
|
|
238747
|
-
const totalFiles = fileCount.agents + fileCount.tools + fileCount.dataComponents + fileCount.artifactComponents + 5;
|
|
239011
|
+
const totalFiles = fileCount.agents + fileCount.tools + fileCount.dataComponents + fileCount.artifactComponents + fileCount.statusComponents + 5;
|
|
238748
239012
|
spinner.succeed(`Project files generated (${totalFiles} files created)`);
|
|
238749
239013
|
spinner.start("Verifying generated files...");
|
|
238750
239014
|
try {
|
|
@@ -238801,6 +239065,9 @@ async function pullProjectCommand(options) {
|
|
|
238801
239065
|
if (fileCount.artifactComponents > 0) {
|
|
238802
239066
|
console.log(chalk8.gray(` \u251C\u2500\u2500 artifact-components/ (${fileCount.artifactComponents} files)`));
|
|
238803
239067
|
}
|
|
239068
|
+
if (fileCount.statusComponents > 0) {
|
|
239069
|
+
console.log(chalk8.gray(` \u251C\u2500\u2500 status-components/ (${fileCount.statusComponents} files)`));
|
|
239070
|
+
}
|
|
238804
239071
|
console.log(chalk8.gray(" \u2514\u2500\u2500 environments/ (4 files)"));
|
|
238805
239072
|
console.log(chalk8.cyan("\n\u{1F4DD} Next steps:"));
|
|
238806
239073
|
console.log(chalk8.gray(` \u2022 cd ${dirs.projectRoot}`));
|
|
@@ -238964,9 +239231,12 @@ async function pushCommand(options) {
|
|
|
238964
239231
|
console.log(chalk9.gray(` \u2022 Size: ${JSON.stringify(projectDefinition).length} bytes`));
|
|
238965
239232
|
const agentCount = Object.keys(projectDefinition.agents || {}).length;
|
|
238966
239233
|
const toolCount = Object.keys(projectDefinition.tools || {}).length;
|
|
238967
|
-
const subAgentCount = Object.values(projectDefinition.agents || {}).reduce(
|
|
238968
|
-
|
|
238969
|
-
|
|
239234
|
+
const subAgentCount = Object.values(projectDefinition.agents || {}).reduce(
|
|
239235
|
+
(total, agent) => {
|
|
239236
|
+
return total + Object.keys(agent.subAgents || {}).length;
|
|
239237
|
+
},
|
|
239238
|
+
0
|
|
239239
|
+
);
|
|
238970
239240
|
console.log(chalk9.cyan("\n\u{1F4CA} Project Data Summary:"));
|
|
238971
239241
|
console.log(chalk9.gray(` \u2022 Agent: ${agentCount}`));
|
|
238972
239242
|
console.log(chalk9.gray(` \u2022 Tools: ${toolCount}`));
|
|
@@ -239088,7 +239358,7 @@ program.command("chat [agent-id]").description(
|
|
|
239088
239358
|
const config = options.config || options.configFilePath;
|
|
239089
239359
|
await chatCommandEnhanced2(agentId, { ...options, config });
|
|
239090
239360
|
});
|
|
239091
|
-
program.command("list-agent").description("List all available
|
|
239361
|
+
program.command("list-agent").description("List all available agents for a specific project").requiredOption("--project <project-id>", "Project ID to list agent for").option("--tenant-id <tenant-id>", "Tenant ID").option("--agents-manage-api-url <url>", "Agents manage API URL").option("--config <path>", "Path to configuration file").option("--config-file-path <path>", "Path to configuration file (deprecated, use --config)").action(async (options) => {
|
|
239092
239362
|
const config = options.config || options.configFilePath;
|
|
239093
239363
|
await listAgentsCommand({ ...options, config });
|
|
239094
239364
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.1",
|
|
4
4
|
"description": "Inkeep CLI tool",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"recast": "^0.23.0",
|
|
47
47
|
"ts-morph": "^26.0.0",
|
|
48
48
|
"tsx": "^4.20.5",
|
|
49
|
-
"@inkeep/agents-core": "^0.
|
|
50
|
-
"@inkeep/agents-sdk": "^0.
|
|
49
|
+
"@inkeep/agents-core": "^0.22.1",
|
|
50
|
+
"@inkeep/agents-sdk": "^0.22.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/degit": "^2.8.6",
|