@kalphq/cli 0.0.0-dev-20260420023057 → 0.0.0-dev-20260420050715
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/{add-5NOYFTJV.js → add-UCN5EAL3.js} +37 -5
- package/dist/add-UCN5EAL3.js.map +1 -0
- package/dist/{chunk-HD5FT7T6.js → chunk-22WOAGNG.js} +144 -64
- package/dist/chunk-22WOAGNG.js.map +1 -0
- package/dist/{chunk-CJCIZDCF.js → chunk-EAMMDUE3.js} +24 -24
- package/dist/chunk-EAMMDUE3.js.map +1 -0
- package/dist/{chunk-Q455HC3P.js → chunk-TPTPZH2W.js} +6 -10
- package/dist/chunk-TPTPZH2W.js.map +1 -0
- package/dist/{create-RSQEKCI6.js → create-T7KGVPNR.js} +4 -8
- package/dist/create-T7KGVPNR.js.map +1 -0
- package/dist/{delete-ZJB2JGAL.js → delete-6MKUQ3XK.js} +26 -1
- package/dist/delete-6MKUQ3XK.js.map +1 -0
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/{init-CUBJEWPE.js → init-VBOTPFNB.js} +3 -3
- package/dist/link-YCIA4JJ3.js +37 -0
- package/dist/link-YCIA4JJ3.js.map +1 -0
- package/dist/login-22HHVS52.js +39 -0
- package/dist/login-22HHVS52.js.map +1 -0
- package/dist/logout-OJM3VAOF.js +32 -0
- package/dist/logout-OJM3VAOF.js.map +1 -0
- package/dist/{build-SUIPVJO6.js → migrate-GA7EHSDG.js} +14 -14
- package/dist/migrate-GA7EHSDG.js.map +1 -0
- package/dist/{push-L3BXB6OC.js → push-2B4NWFGC.js} +10 -8
- package/dist/push-2B4NWFGC.js.map +1 -0
- package/dist/secrets-SIK6J5AF.js +46 -0
- package/dist/secrets-SIK6J5AF.js.map +1 -0
- package/package.json +2 -2
- package/templates/project/package.json +4 -4
- package/templates/project/tsconfig.json +6 -2
- package/dist/add-5NOYFTJV.js.map +0 -1
- package/dist/build-SUIPVJO6.js.map +0 -1
- package/dist/chunk-CJCIZDCF.js.map +0 -1
- package/dist/chunk-HD5FT7T6.js.map +0 -1
- package/dist/chunk-Q455HC3P.js.map +0 -1
- package/dist/create-RSQEKCI6.js.map +0 -1
- package/dist/delete-ZJB2JGAL.js.map +0 -1
- package/dist/link-YKDZ7Y6K.js +0 -23
- package/dist/link-YKDZ7Y6K.js.map +0 -1
- package/dist/login-LBEXP7ET.js +0 -27
- package/dist/login-LBEXP7ET.js.map +0 -1
- package/dist/logout-S3PV4WE7.js +0 -27
- package/dist/logout-S3PV4WE7.js.map +0 -1
- package/dist/push-L3BXB6OC.js.map +0 -1
- package/dist/secrets-3SKCSAGD.js +0 -33
- package/dist/secrets-3SKCSAGD.js.map +0 -1
- /package/dist/{init-CUBJEWPE.js.map → init-VBOTPFNB.js.map} +0 -0
- /package/templates/project/meta/{manifest-registry.json → snapshot.json} +0 -0
|
@@ -30,15 +30,46 @@ async function addSecretToLocalConfig(cwd, key) {
|
|
|
30
30
|
if (!match) {
|
|
31
31
|
throw new Error("Could not find secrets array in kalp.config.ts");
|
|
32
32
|
}
|
|
33
|
-
const currentArray = match[1]?.trim();
|
|
34
|
-
if (!currentArray) {
|
|
35
|
-
throw new Error("Secrets array is empty in kalp.config.ts");
|
|
36
|
-
}
|
|
33
|
+
const currentArray = match[1]?.trim() ?? "";
|
|
37
34
|
const newSecret = currentArray.length > 0 ? `, "${key}"` : `"${key}"`;
|
|
38
35
|
const newArray = `secrets: [${currentArray}${newSecret}]`;
|
|
39
36
|
content = content.replace(/secrets:\s*\[([^\]]*)\]/, newArray);
|
|
40
37
|
await writeFile(configPath, content, "utf-8");
|
|
41
38
|
}
|
|
39
|
+
async function addSecretToTypes(cwd, key) {
|
|
40
|
+
const dtsPath = join(cwd, "kalp.d.ts");
|
|
41
|
+
let content;
|
|
42
|
+
try {
|
|
43
|
+
content = await readFile(dtsPath, "utf-8");
|
|
44
|
+
} catch {
|
|
45
|
+
content = `import "@kalphq/sdk";
|
|
46
|
+
|
|
47
|
+
declare module "@kalphq/sdk" {
|
|
48
|
+
interface SecretsRegistry {
|
|
49
|
+
keys: [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
if (content.includes(`"${key}"`)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const match = content.match(/keys:\s*\[([^\]]*)\]/);
|
|
58
|
+
if (!match) {
|
|
59
|
+
throw new Error("Could not find keys array in kalp.d.ts");
|
|
60
|
+
}
|
|
61
|
+
const currentArray = match[1]?.trim();
|
|
62
|
+
if (!currentArray || currentArray.length === 0) {
|
|
63
|
+
content = content.replace(/keys:\s*\[\s*\]/, `keys: ["${key}"]`);
|
|
64
|
+
} else {
|
|
65
|
+
const newKey = `, "${key}"`;
|
|
66
|
+
content = content.replace(
|
|
67
|
+
/keys:\s*\[([^\]]*)\]/,
|
|
68
|
+
`keys: [${currentArray}${newKey}]`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
await writeFile(dtsPath, content, "utf-8");
|
|
72
|
+
}
|
|
42
73
|
var add_default = defineCommand({
|
|
43
74
|
meta: {
|
|
44
75
|
name: "add",
|
|
@@ -113,6 +144,7 @@ var add_default = defineCommand({
|
|
|
113
144
|
try {
|
|
114
145
|
await addSecretToCloud(key, value);
|
|
115
146
|
await addSecretToLocalConfig(cwd, key);
|
|
147
|
+
await addSecretToTypes(cwd, key);
|
|
116
148
|
s.stop(`Secret ${pc.cyan(key)} added successfully`);
|
|
117
149
|
p.outro("Done");
|
|
118
150
|
} catch (error) {
|
|
@@ -130,4 +162,4 @@ var add_default = defineCommand({
|
|
|
130
162
|
export {
|
|
131
163
|
add_default as default
|
|
132
164
|
};
|
|
133
|
-
//# sourceMappingURL=add-
|
|
165
|
+
//# sourceMappingURL=add-UCN5EAL3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/secrets/add.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAuthToken } from \"../../utils/auth.js\";\n\nconst LOGO = \"🦋\";\n\nasync function addSecretToCloud(key: string, value: string): Promise<void> {\n // TODO: Implement real API call to Kalp Cloud\n console.log(pc.dim(`[Simulated] Adding secret ${key} to Kalp Cloud...`));\n}\n\nasync function addSecretToLocalConfig(cwd: string, key: string): Promise<void> {\n const configPath = join(cwd, \"kalp.config.ts\");\n let content: string;\n\n try {\n content = await readFile(configPath, \"utf-8\");\n } catch {\n throw new Error(\"kalp.config.ts not found. Run `kalp init` first.\");\n }\n\n // Check if key already exists\n const regex = new RegExp(`[\"']${key}[\"']`);\n if (regex.test(content)) {\n throw new Error(`Secret ${key} already exists in kalp.config.ts`);\n }\n\n // Add secret to array\n const match = content.match(/secrets:\\s*\\[([^\\]]*)\\]/);\n if (!match) {\n throw new Error(\"Could not find secrets array in kalp.config.ts\");\n }\n\n const currentArray = match[1]?.trim() ?? \"\";\n\n const newSecret = currentArray.length > 0 ? `, \"${key}\"` : `\"${key}\"`;\n const newArray = `secrets: [${currentArray}${newSecret}]`;\n\n content = content.replace(/secrets:\\s*\\[([^\\]]*)\\]/, newArray);\n\n await writeFile(configPath, content, \"utf-8\");\n}\n\nasync function addSecretToTypes(cwd: string, key: string): Promise<void> {\n const dtsPath = join(cwd, \"kalp.d.ts\");\n let content: string;\n\n try {\n content = await readFile(dtsPath, \"utf-8\");\n } catch {\n // If file doesn't exist, create it\n content = `import \"@kalphq/sdk\";\n\n declare module \"@kalphq/sdk\" {\n interface SecretsRegistry {\n keys: [];\n }\n }\n `;\n }\n\n // Check if key already exists in types\n if (content.includes(`\"${key}\"`)) {\n return; // Already there, skip\n }\n\n // Add key to the keys tuple\n const match = content.match(/keys:\\s*\\[([^\\]]*)\\]/);\n if (!match) {\n throw new Error(\"Could not find keys array in kalp.d.ts\");\n }\n\n const currentArray = match[1]?.trim();\n\n if (!currentArray || currentArray.length === 0) {\n // Empty array, add first element\n content = content.replace(/keys:\\s*\\[\\s*\\]/, `keys: [\"${key}\"]`);\n } else {\n // Add to existing array\n const newKey = `, \"${key}\"`;\n content = content.replace(\n /keys:\\s*\\[([^\\]]*)\\]/,\n `keys: [${currentArray}${newKey}]`,\n );\n }\n\n await writeFile(dtsPath, content, \"utf-8\");\n}\n\nexport default defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a secret to Kalp Cloud and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key name (e.g., STRIPE_SECRET_KEY)\",\n },\n value: {\n type: \"string\",\n alias: \"v\",\n description: \"Secret value\",\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp secrets add -k <key> -v <value>`);\n p.log.info(\n pc.dim(\"Example: kalp secrets add -k STRIPE_SECRET_KEY -v sk_test_...\"),\n );\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets add\")}`);\n\n const token = await getAuthToken();\n if (!token) {\n p.log.warn(pc.yellow(\"Not logged in. Run `kalp login` first.\"));\n p.outro(\"Authentication required\");\n return;\n }\n\n let key = args.key;\n let value = args.value;\n\n // Interactive prompts if not provided\n if (!key) {\n const input = await p.text({\n message: \"Secret key name\",\n placeholder: \"STRIPE_SECRET_KEY\",\n validate: (v) => {\n if (!v) return \"Key is required\";\n if (!/^[A-Z_][A-Z0-9_]*$/.test(v)) {\n return \"Key must be UPPER_SNAKE_CASE\";\n }\n },\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n key = input;\n }\n\n if (!value) {\n const input = await p.password({\n message: `Enter value for ${key}`,\n mask: \"*\",\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n value = input;\n }\n\n const s = p.spinner();\n s.start(`Adding ${pc.cyan(key)}...`);\n\n try {\n // Add to cloud (simulated)\n await addSecretToCloud(key, value);\n\n // Add to local config\n await addSecretToLocalConfig(cwd, key);\n\n // Add to types\n await addSecretToTypes(cwd, key);\n\n s.stop(`Secret ${pc.cyan(key)} added successfully`);\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Failed to add secret\");\n p.log.error(\n pc.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n p.outro(\"Failed\");\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -4,7 +4,14 @@ import {
|
|
|
4
4
|
} from "./chunk-2H7UOFLK.js";
|
|
5
5
|
|
|
6
6
|
// src/scaffold.ts
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
writeFile,
|
|
9
|
+
readFile as readFile2,
|
|
10
|
+
readdir,
|
|
11
|
+
cp,
|
|
12
|
+
mkdir,
|
|
13
|
+
access
|
|
14
|
+
} from "fs/promises";
|
|
8
15
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
9
16
|
import { join as join4, dirname as dirname3 } from "path";
|
|
10
17
|
|
|
@@ -19709,6 +19716,28 @@ async function scaffoldProject(opts) {
|
|
|
19709
19716
|
recursive: true,
|
|
19710
19717
|
force: true
|
|
19711
19718
|
});
|
|
19719
|
+
const gitignorePath = join4(targetDir, ".gitignore");
|
|
19720
|
+
try {
|
|
19721
|
+
await access(gitignorePath);
|
|
19722
|
+
} catch {
|
|
19723
|
+
await writeFile(
|
|
19724
|
+
gitignorePath,
|
|
19725
|
+
"node_modules/\ndist/\n.env\n*.log\n.turbo/\n.temp/\n",
|
|
19726
|
+
"utf-8"
|
|
19727
|
+
);
|
|
19728
|
+
}
|
|
19729
|
+
const tempDir = join4(targetDir, ".temp");
|
|
19730
|
+
await mkdir(tempDir, { recursive: true });
|
|
19731
|
+
const versionInfo = {
|
|
19732
|
+
cliVersion: "0.0.2",
|
|
19733
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
19734
|
+
projectName
|
|
19735
|
+
};
|
|
19736
|
+
await writeFile(
|
|
19737
|
+
join4(tempDir, "version.json"),
|
|
19738
|
+
JSON.stringify(versionInfo, null, 2),
|
|
19739
|
+
"utf-8"
|
|
19740
|
+
);
|
|
19712
19741
|
const kalpConfig = `import { defineConfig } from "@kalphq/sdk";
|
|
19713
19742
|
|
|
19714
19743
|
export default defineConfig({
|
|
@@ -19716,6 +19745,15 @@ export default defineConfig({
|
|
|
19716
19745
|
});
|
|
19717
19746
|
`;
|
|
19718
19747
|
await writeFile(join4(targetDir, "kalp.config.ts"), kalpConfig, "utf-8");
|
|
19748
|
+
const kalpDts = `import "@kalphq/sdk";
|
|
19749
|
+
|
|
19750
|
+
declare module "@kalphq/sdk" {
|
|
19751
|
+
interface SecretsRegistry {
|
|
19752
|
+
keys: [];
|
|
19753
|
+
}
|
|
19754
|
+
}
|
|
19755
|
+
`;
|
|
19756
|
+
await writeFile(join4(targetDir, "kalp.d.ts"), kalpDts, "utf-8");
|
|
19719
19757
|
await replacePlaceholders(targetDir, { __PROJECT_NAME__: projectName });
|
|
19720
19758
|
}
|
|
19721
19759
|
async function scaffoldAgent(opts) {
|
|
@@ -19726,95 +19764,137 @@ async function scaffoldAgent(opts) {
|
|
|
19726
19764
|
await mkdir(join4(agentDir, "routes"), { recursive: true });
|
|
19727
19765
|
await mkdir(join4(agentDir, "flows"), { recursive: true });
|
|
19728
19766
|
const agentIndex = `import { asAgentId, defineAgent } from "@kalphq/sdk";
|
|
19729
|
-
import {
|
|
19730
|
-
import {
|
|
19731
|
-
import {
|
|
19732
|
-
import {
|
|
19767
|
+
import { processQuery } from "@/${agentName}/steps/process-query";
|
|
19768
|
+
import { formatResponse } from "@/${agentName}/steps/format-response";
|
|
19769
|
+
import { searchTool } from "@/${agentName}/tools/search";
|
|
19770
|
+
import { healthRoute } from "@/${agentName}/routes/health";
|
|
19771
|
+
import { chatFlow } from "@/${agentName}/flows/chat-flow";
|
|
19733
19772
|
|
|
19734
19773
|
export default defineAgent({
|
|
19735
19774
|
id: asAgentId("${agentName}"),
|
|
19736
19775
|
name: "${agentName}",
|
|
19737
|
-
|
|
19738
|
-
|
|
19739
|
-
|
|
19740
|
-
|
|
19776
|
+
description: "A helpful AI assistant",
|
|
19777
|
+
steps: [processQuery, formatResponse],
|
|
19778
|
+
tools: [searchTool],
|
|
19779
|
+
routes: [healthRoute],
|
|
19780
|
+
flows: [chatFlow],
|
|
19741
19781
|
|
|
19742
|
-
async onMessage(message,
|
|
19743
|
-
const
|
|
19744
|
-
|
|
19745
|
-
|
|
19746
|
-
|
|
19747
|
-
query: message.text,
|
|
19782
|
+
async onMessage({ message, ctx, actions }) {
|
|
19783
|
+
const stream = actions.ai.stream({
|
|
19784
|
+
model: "openai/gpt-4o-mini",
|
|
19785
|
+
system: "You are a helpful assistant.",
|
|
19786
|
+
prompt: message.text,
|
|
19748
19787
|
});
|
|
19749
|
-
|
|
19788
|
+
|
|
19789
|
+
return stream;
|
|
19750
19790
|
},
|
|
19751
|
-
})
|
|
19752
|
-
|
|
19753
|
-
const stepFile = `import { createStep } from "@kalphq/sdk";
|
|
19791
|
+
});`;
|
|
19792
|
+
const stepProcessFile = `import { createStep } from "@kalphq/sdk";
|
|
19754
19793
|
import { z } from "zod";
|
|
19755
19794
|
|
|
19756
|
-
export const
|
|
19757
|
-
id: "
|
|
19758
|
-
description: "
|
|
19759
|
-
input: z.object({
|
|
19760
|
-
output: z.object({
|
|
19761
|
-
|
|
19762
|
-
|
|
19795
|
+
export const processQuery = createStep({
|
|
19796
|
+
id: "process_query",
|
|
19797
|
+
description: "Analyze and enhance user query",
|
|
19798
|
+
input: z.object({ query: z.string() }),
|
|
19799
|
+
output: z.object({
|
|
19800
|
+
enhanced: z.string(),
|
|
19801
|
+
intent: z.string(),
|
|
19802
|
+
needsSearch: z.boolean(),
|
|
19803
|
+
}),
|
|
19804
|
+
async run({ query }) {
|
|
19805
|
+
// Simple intent detection
|
|
19806
|
+
const intent = query.includes("?") ? "question" : "statement";
|
|
19807
|
+
const needsSearch = query.toLowerCase().includes("search") || query.includes("?");
|
|
19808
|
+
|
|
19809
|
+
return {
|
|
19810
|
+
enhanced: query.trim(),
|
|
19811
|
+
intent,
|
|
19812
|
+
needsSearch,
|
|
19813
|
+
};
|
|
19763
19814
|
},
|
|
19764
|
-
})
|
|
19765
|
-
|
|
19815
|
+
});`;
|
|
19816
|
+
const stepFormatFile = `import { createStep } from "@kalphq/sdk";
|
|
19817
|
+
import { z } from "zod";
|
|
19818
|
+
|
|
19819
|
+
export const formatResponse = createStep({
|
|
19820
|
+
id: "format_response",
|
|
19821
|
+
description: "Format final response with metadata",
|
|
19822
|
+
input: z.object({
|
|
19823
|
+
text: z.string(),
|
|
19824
|
+
sources: z.array(z.string()).optional(),
|
|
19825
|
+
}),
|
|
19826
|
+
output: z.object({
|
|
19827
|
+
formatted: z.string(),
|
|
19828
|
+
meta: z.object({ timestamp: z.number(), version: z.string() }),
|
|
19829
|
+
}),
|
|
19830
|
+
async run({ text, sources }) {
|
|
19831
|
+
const formatted = sources?.length
|
|
19832
|
+
? \`\${text}\\n\\nSources: \${sources.join(", ")}\`
|
|
19833
|
+
: text;
|
|
19834
|
+
|
|
19835
|
+
return {
|
|
19836
|
+
formatted,
|
|
19837
|
+
meta: {
|
|
19838
|
+
timestamp: Date.now(),
|
|
19839
|
+
version: "1.0.0",
|
|
19840
|
+
},
|
|
19841
|
+
};
|
|
19842
|
+
},
|
|
19843
|
+
});`;
|
|
19766
19844
|
const toolFile = `import { createTool } from "@kalphq/sdk";
|
|
19767
19845
|
import { z } from "zod";
|
|
19768
19846
|
|
|
19769
|
-
export const
|
|
19770
|
-
id: "
|
|
19771
|
-
description: "
|
|
19772
|
-
input: z.object({ query: z.string() }),
|
|
19773
|
-
async execute({ query }) {
|
|
19774
|
-
|
|
19847
|
+
export const searchTool = createTool({
|
|
19848
|
+
id: "search",
|
|
19849
|
+
description: "Search for relevant information",
|
|
19850
|
+
input: z.object({ query: z.string(), limit: z.number().default(3) }),
|
|
19851
|
+
async execute({ query, limit }) {
|
|
19852
|
+
// Simulated search - replace with real API call
|
|
19853
|
+
const results = [
|
|
19854
|
+
{ title: "Result 1", snippet: \`Info about: \${query}\` },
|
|
19855
|
+
{ title: "Result 2", snippet: "More relevant content..." },
|
|
19856
|
+
].slice(0, limit);
|
|
19857
|
+
|
|
19858
|
+
return { results, total: results.length };
|
|
19775
19859
|
},
|
|
19776
|
-
})
|
|
19777
|
-
`;
|
|
19860
|
+
});`;
|
|
19778
19861
|
const routeFile = `import { defineRoute } from "@kalphq/sdk";
|
|
19779
19862
|
|
|
19780
|
-
export const
|
|
19781
|
-
id: "
|
|
19863
|
+
export const healthRoute = defineRoute({
|
|
19864
|
+
id: "health",
|
|
19782
19865
|
method: "GET",
|
|
19783
|
-
path: "/
|
|
19784
|
-
handler: async () => {
|
|
19785
|
-
|
|
19866
|
+
path: "/health",
|
|
19867
|
+
handler: async (_req, res, { ctx }) => {
|
|
19868
|
+
res.json({
|
|
19869
|
+
status: "ok",
|
|
19870
|
+
agent: "${agentName}",
|
|
19871
|
+
timestamp: new Date().toISOString(),
|
|
19872
|
+
});
|
|
19786
19873
|
},
|
|
19787
|
-
})
|
|
19788
|
-
`;
|
|
19874
|
+
});`;
|
|
19789
19875
|
const flowFile = `import { defineFlow } from "@kalphq/sdk";
|
|
19876
|
+
import { processQuery } from "@/${agentName}/steps/process-query";
|
|
19877
|
+
import { formatResponse } from "@/${agentName}/steps/format-response";
|
|
19790
19878
|
|
|
19791
|
-
export const
|
|
19792
|
-
id: "
|
|
19793
|
-
description: "
|
|
19794
|
-
steps: [],
|
|
19795
|
-
})
|
|
19796
|
-
`;
|
|
19879
|
+
export const chatFlow = defineFlow({
|
|
19880
|
+
id: "chat_flow",
|
|
19881
|
+
description: "Process user message through query analysis and formatting",
|
|
19882
|
+
steps: [processQuery, formatResponse],
|
|
19883
|
+
});`;
|
|
19797
19884
|
await writeFile(join4(agentDir, "index.ts"), agentIndex, "utf-8");
|
|
19798
19885
|
await writeFile(
|
|
19799
|
-
join4(agentDir, "steps", "
|
|
19800
|
-
|
|
19801
|
-
"utf-8"
|
|
19802
|
-
);
|
|
19803
|
-
await writeFile(
|
|
19804
|
-
join4(agentDir, "tools", "example-tool.ts"),
|
|
19805
|
-
toolFile,
|
|
19806
|
-
"utf-8"
|
|
19807
|
-
);
|
|
19808
|
-
await writeFile(
|
|
19809
|
-
join4(agentDir, "routes", "example-route.ts"),
|
|
19810
|
-
routeFile,
|
|
19886
|
+
join4(agentDir, "steps", "process-query.ts"),
|
|
19887
|
+
stepProcessFile,
|
|
19811
19888
|
"utf-8"
|
|
19812
19889
|
);
|
|
19813
19890
|
await writeFile(
|
|
19814
|
-
join4(agentDir, "
|
|
19815
|
-
|
|
19891
|
+
join4(agentDir, "steps", "format-response.ts"),
|
|
19892
|
+
stepFormatFile,
|
|
19816
19893
|
"utf-8"
|
|
19817
19894
|
);
|
|
19895
|
+
await writeFile(join4(agentDir, "tools", "search.ts"), toolFile, "utf-8");
|
|
19896
|
+
await writeFile(join4(agentDir, "routes", "health.ts"), routeFile, "utf-8");
|
|
19897
|
+
await writeFile(join4(agentDir, "flows", "chat-flow.ts"), flowFile, "utf-8");
|
|
19818
19898
|
}
|
|
19819
19899
|
|
|
19820
19900
|
// src/utils/ui.ts
|
|
@@ -19873,4 +19953,4 @@ export {
|
|
|
19873
19953
|
promptProjectName,
|
|
19874
19954
|
promptAgentDetails
|
|
19875
19955
|
};
|
|
19876
|
-
//# sourceMappingURL=chunk-
|
|
19956
|
+
//# sourceMappingURL=chunk-22WOAGNG.js.map
|