create-agentmark 0.4.0 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/index.ts
4
- import fs4 from "fs-extra";
4
+ import fs5 from "fs-extra";
5
5
  import prompts from "prompts";
6
6
 
7
7
  // src/utils/examples/create-example-app.ts
@@ -29,7 +29,7 @@ var Providers = {
29
29
  var createAdapterConfig = (provider) => {
30
30
  return {
31
31
  "ai-sdk": {
32
- package: "@agentmark/ai-sdk-v5-adapter",
32
+ package: "@agentmark-ai/ai-sdk-v5-adapter",
33
33
  dependencies: ["ai@^5", `@ai-sdk/${provider}@^2`],
34
34
  classes: {
35
35
  modelRegistry: "VercelAIModelRegistry",
@@ -38,7 +38,7 @@ var createAdapterConfig = (provider) => {
38
38
  }
39
39
  },
40
40
  mastra: {
41
- package: "@agentmark/mastra-v0-adapter",
41
+ package: "@agentmark-ai/mastra-v0-adapter",
42
42
  dependencies: [
43
43
  "@mastra/core@<0.20.0",
44
44
  "@mastra/mcp@<0.13.4",
@@ -74,11 +74,10 @@ import { client } from "./agentmark.client";
74
74
  const telemetry = {
75
75
  isEnabled: true,
76
76
  metadata: {
77
- traceId: "trace-123",
78
- traceName: "customer-support",
79
- userId: "user-123",
80
- sessionId: "session-123",
81
- sessionName: "my-first-session",
77
+ trace_name: "customer-support",
78
+ user_id: "user-123",
79
+ session_id: "session-123",
80
+ session_name: "my-first-session",
82
81
  },
83
82
  };
84
83
 
@@ -122,11 +121,10 @@ import { client } from "./agentmark.client";
122
121
  const telemetry = {
123
122
  isEnabled: true,
124
123
  metadata: {
125
- traceId: "trace-123",
126
- traceName: "customer-support",
127
- userId: "user-123",
128
- sessionId: "session-123",
129
- sessionName: "my-first-session",
124
+ trace_name: "customer-support",
125
+ user_id: "user-123",
126
+ session_id: "session-123",
127
+ session_name: "my-first-session",
130
128
  },
131
129
  };
132
130
 
@@ -207,17 +205,17 @@ var installDependencies = (modelProvider, targetPath = ".", adapter = "ai-sdk",
207
205
  console.log("This might take a moment...");
208
206
  const adapterConfig = getAdapterConfig(adapter, modelProvider);
209
207
  try {
210
- const devDepsCmd = "npm install --save-dev typescript ts-node @types/node @agentmark/cli --legacy-peer-deps";
208
+ const devDepsCmd = "npm install --save-dev typescript ts-node @types/node @agentmark-ai/cli --legacy-peer-deps";
211
209
  execSync(devDepsCmd, {
212
210
  stdio: "inherit",
213
211
  cwd: targetPath
214
212
  });
215
- const loaderPackages = deploymentMode === "static" ? ["@agentmark/loader-api", "@agentmark/loader-file"] : ["@agentmark/loader-api"];
213
+ const loaderPackages = deploymentMode === "static" ? ["@agentmark-ai/loader-api", "@agentmark-ai/loader-file"] : ["@agentmark-ai/loader-api"];
216
214
  const installArgs = [
217
215
  "install",
218
216
  "dotenv",
219
- "@agentmark/prompt-core",
220
- "@agentmark/sdk",
217
+ "@agentmark-ai/prompt-core",
218
+ "@agentmark-ai/sdk",
221
219
  adapterConfig.package,
222
220
  ...loaderPackages,
223
221
  ...adapterConfig.dependencies,
@@ -430,8 +428,8 @@ var getClientConfigContent = (options) => {
430
428
  const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;
431
429
  const extraModelRegs = provider === "openai" ? `.registerModels(["dall-e-3"], (name: string) => ${provider}.image(name))
432
430
  .registerModels(["tts-1-hd"], (name: string) => ${provider}.speech(name))` : "";
433
- const loaderImport = deploymentMode === "cloud" ? `import { ApiLoader } from "@agentmark/loader-api";` : `import { ApiLoader } from "@agentmark/loader-api";
434
- import { FileLoader } from "@agentmark/loader-file";`;
431
+ const loaderImport = deploymentMode === "cloud" ? `import { ApiLoader } from "@agentmark-ai/loader-api";` : `import { ApiLoader } from "@agentmark-ai/loader-api";
432
+ import { FileLoader } from "@agentmark-ai/loader-file";`;
435
433
  const loaderSetup = deploymentMode === "cloud" ? ` // ApiLoader works for both development and production
436
434
  // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost
437
435
  // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud
@@ -512,7 +510,7 @@ export const client = createClient();
512
510
  };
513
511
 
514
512
  // src/utils/examples/create-example-app.ts
515
- import { fetchPromptsFrontmatter, generateTypeDefinitions } from "@agentmark/shared-utils";
513
+ import { fetchPromptsFrontmatter, generateTypeDefinitions } from "@agentmark-ai/shared-utils";
516
514
  var setupMCPServer = (client, targetPath) => {
517
515
  if (client === "skip") {
518
516
  console.log("Skipping MCP server setup.");
@@ -641,28 +639,28 @@ export default interface AgentmarkTypes {}
641
639
  console.log("Creating development server entry point...");
642
640
  const agentmarkInternalDir = path.join(targetPath, ".agentmark");
643
641
  fs3.ensureDirSync(agentmarkInternalDir);
644
- const adapterConfig = getAdapterConfig(adapter);
642
+ const adapterConfig = getAdapterConfig(adapter, modelProvider);
645
643
  const { webhookHandler } = adapterConfig.classes;
646
644
  const devEntryContent = `// Auto-generated webhook server entry point
647
645
  // To customize, create a dev-server.ts file in your project root
648
646
 
649
- import { createWebhookServer } from '@agentmark/cli/runner-server';
647
+ import { createWebhookServer } from '@agentmark-ai/cli/runner-server';
650
648
  import { ${webhookHandler} } from '${adapterConfig.package}/runner';
651
- import { AgentMarkSDK } from '@agentmark/sdk';
649
+ import { AgentMarkSDK } from '@agentmark-ai/sdk';
652
650
  import path from 'path';
653
651
 
654
652
  async function main() {
655
653
  const args = process.argv.slice(2);
656
654
  const webhookPortArg = args.find(arg => arg.startsWith('--webhook-port='));
657
- const fileServerPortArg = args.find(arg => arg.startsWith('--file-server-port='));
655
+ const apiServerPortArg = args.find(arg => arg.startsWith('--api-server-port='));
658
656
 
659
657
  const webhookPort = webhookPortArg ? parseInt(webhookPortArg.split('=')[1]) : 9417;
660
- const fileServerPort = fileServerPortArg ? parseInt(fileServerPortArg.split('=')[1]) : 9418;
661
- const fileServerUrl = \`http://localhost:\${fileServerPort}\`;
658
+ const apiServerPort = apiServerPortArg ? parseInt(apiServerPortArg.split('=')[1]) : 9418;
659
+ const apiServerUrl = \`http://localhost:\${apiServerPort}\`;
662
660
 
663
661
  // Set environment for development mode before importing client
664
662
  process.env.NODE_ENV = 'development';
665
- process.env.AGENTMARK_BASE_URL = fileServerUrl;
663
+ process.env.AGENTMARK_BASE_URL = apiServerUrl;
666
664
 
667
665
  // Now import client - it will pick up the dev environment
668
666
  const { client } = await import('../agentmark.client.js');
@@ -671,7 +669,7 @@ async function main() {
671
669
  const sdk = new AgentMarkSDK({
672
670
  apiKey: '',
673
671
  appId: '',
674
- baseUrl: fileServerUrl,
672
+ baseUrl: apiServerUrl,
675
673
  });
676
674
  sdk.initTracing({ disableBatch: true });
677
675
 
@@ -681,7 +679,7 @@ async function main() {
681
679
  await createWebhookServer({
682
680
  port: webhookPort,
683
681
  handler,
684
- fileServerUrl,
682
+ apiServerUrl,
685
683
  templatesDirectory
686
684
  });
687
685
  }
@@ -723,8 +721,365 @@ main().catch((err) => {
723
721
  }
724
722
  };
725
723
 
724
+ // src/utils/examples/create-python-app.ts
725
+ import fs4 from "fs-extra";
726
+ import * as path2 from "path";
727
+ var setupMCPServer2 = (client, targetPath) => {
728
+ if (client === "skip") {
729
+ console.log("Skipping MCP server setup.");
730
+ return;
731
+ }
732
+ const folderName = targetPath;
733
+ if (client === "vscode") {
734
+ try {
735
+ console.log(`Setting up MCP server for VS Code in ${folderName}...`);
736
+ const vscodeDir = path2.join(targetPath, ".vscode");
737
+ fs4.ensureDirSync(vscodeDir);
738
+ const mcpConfig = {
739
+ servers: {
740
+ "agentmark-docs": {
741
+ url: "https://docs.agentmark.co/mcp"
742
+ }
743
+ }
744
+ };
745
+ fs4.writeJsonSync(path2.join(vscodeDir, "mcp.json"), mcpConfig, { spaces: 2 });
746
+ console.log(`MCP server configured for VS Code in ${folderName}/.vscode/mcp.json`);
747
+ } catch (error) {
748
+ console.warn(`Warning: Could not set up MCP server for VS Code:`, error);
749
+ }
750
+ return;
751
+ }
752
+ if (client === "zed") {
753
+ try {
754
+ console.log(`Setting up MCP server for Zed in ${folderName}...`);
755
+ const zedDir = path2.join(targetPath, ".zed");
756
+ fs4.ensureDirSync(zedDir);
757
+ const zedConfig = {
758
+ context_servers: {
759
+ "agentmark-docs": {
760
+ url: "https://docs.agentmark.co/mcp"
761
+ }
762
+ }
763
+ };
764
+ fs4.writeJsonSync(path2.join(zedDir, "settings.json"), zedConfig, { spaces: 2 });
765
+ console.log(`MCP server configured for Zed in ${folderName}/.zed/settings.json`);
766
+ } catch (error) {
767
+ console.warn(`Warning: Could not set up MCP server for Zed:`, error);
768
+ }
769
+ return;
770
+ }
771
+ if (client === "cursor") {
772
+ try {
773
+ console.log(`Setting up MCP server for Cursor in ${folderName}...`);
774
+ const cursorDir = path2.join(targetPath, ".cursor");
775
+ fs4.ensureDirSync(cursorDir);
776
+ const cursorConfig = {
777
+ mcpServers: {
778
+ "agentmark-docs": {
779
+ url: "https://docs.agentmark.co/mcp"
780
+ }
781
+ }
782
+ };
783
+ fs4.writeJsonSync(path2.join(cursorDir, "mcp.json"), cursorConfig, { spaces: 2 });
784
+ console.log(`MCP server configured for Cursor in ${folderName}/.cursor/mcp.json`);
785
+ } catch (error) {
786
+ console.warn(`Warning: Could not set up MCP server for Cursor:`, error);
787
+ }
788
+ return;
789
+ }
790
+ if (client === "claude-code") {
791
+ try {
792
+ console.log(`Setting up MCP server for Claude Code in ${folderName}...`);
793
+ const mcpConfig = {
794
+ mcpServers: {
795
+ "agentmark-docs": {
796
+ type: "http",
797
+ url: "https://docs.agentmark.co/mcp"
798
+ }
799
+ }
800
+ };
801
+ fs4.writeJsonSync(path2.join(targetPath, ".mcp.json"), mcpConfig, { spaces: 2 });
802
+ console.log(`MCP server configured for Claude Code in ${folderName}/.mcp.json`);
803
+ } catch (error) {
804
+ console.warn(`Warning: Could not set up MCP server for Claude Code:`, error);
805
+ }
806
+ return;
807
+ }
808
+ };
809
+ var getPyprojectContent = (projectName) => {
810
+ return `[project]
811
+ name = "${projectName}"
812
+ version = "0.1.0"
813
+ description = "An AgentMark application using Pydantic AI"
814
+ requires-python = ">=3.12"
815
+ dependencies = [
816
+ "agentmark-pydantic-ai>=0.1.0",
817
+ "agentmark-prompt-core>=0.1.0",
818
+ "python-dotenv>=1.0.0",
819
+ "pydantic-ai[openai]>=0.1.0",
820
+ ]
821
+
822
+ [project.optional-dependencies]
823
+ dev = [
824
+ "pytest>=7.0",
825
+ "pytest-asyncio>=0.21",
826
+ "mypy>=1.0",
827
+ ]
828
+ anthropic = ["pydantic-ai[anthropic]"]
829
+ gemini = ["pydantic-ai[gemini]"]
830
+
831
+ [build-system]
832
+ requires = ["hatchling"]
833
+ build-backend = "hatchling.build"
834
+
835
+ [tool.pytest.ini_options]
836
+ asyncio_mode = "auto"
837
+
838
+ [tool.mypy]
839
+ strict = true
840
+ `;
841
+ };
842
+ var getAgentmarkClientContent = (_deploymentMode) => {
843
+ return `"""AgentMark client configuration.
844
+
845
+ This file configures the AgentMark client with Pydantic AI adapter.
846
+ Customize the model registry and tool registry as needed.
847
+ """
848
+
849
+ import os
850
+ from pathlib import Path
851
+ from dotenv import load_dotenv
852
+
853
+ from agentmark.prompt_core import FileLoader
854
+ from agentmark_pydantic_ai_v0 import (
855
+ create_pydantic_ai_client,
856
+ create_default_model_registry,
857
+ PydanticAIToolRegistry,
858
+ )
859
+
860
+ # Load environment variables
861
+ load_dotenv()
862
+
863
+ # Configure model registry with default mappings
864
+ # Supports: gpt-*, claude-*, gemini-*, etc.
865
+ model_registry = create_default_model_registry()
866
+
867
+ # Configure tool registry for custom tools
868
+ tool_registry = PydanticAIToolRegistry()
869
+
870
+ # Example tool registration:
871
+ # @tool_registry.register("search")
872
+ # async def search_web(args: dict, ctx: dict | None) -> str:
873
+ # query = args["query"]
874
+ # return f"Search results for: {query}"
875
+
876
+ # Create file loader for local development
877
+ # Uses the project root as base directory for resolving relative paths
878
+ project_root = Path(__file__).parent.resolve()
879
+ loader = FileLoader(base_dir=str(project_root))
880
+
881
+ # Create the client
882
+ client = create_pydantic_ai_client(
883
+ model_registry=model_registry,
884
+ tool_registry=tool_registry,
885
+ loader=loader,
886
+ )
887
+
888
+ __all__ = ["client"]
889
+ `;
890
+ };
891
+ var getMainPyContent = () => {
892
+ return `"""Example usage of AgentMark with Pydantic AI.
893
+
894
+ Run with: python main.py
895
+ """
896
+
897
+ import asyncio
898
+ import json
899
+ from pathlib import Path
900
+
901
+ from agentmark_pydantic_ai_v0 import run_text_prompt
902
+ from agentmark_client import client
903
+
904
+
905
+ async def main():
906
+ """Run the party planner prompt."""
907
+ # Load the prompt AST (in production, use the API loader)
908
+ prompt_path = Path("agentmark/party-planner.prompt.mdx.json")
909
+
910
+ if not prompt_path.exists():
911
+ print("Prompt file not found. Run 'agentmark build' first.")
912
+ return
913
+
914
+ with open(prompt_path) as f:
915
+ ast = json.load(f)
916
+
917
+ # Load and format the prompt
918
+ prompt = await client.load_text_prompt(ast)
919
+ params = await prompt.format(props={
920
+ "numberOfGuests": 10,
921
+ "theme": "80s disco",
922
+ "dietaryRestrictions": ["vegetarian", "gluten-free"],
923
+ })
924
+
925
+ # Execute the prompt
926
+ print("Running party planner prompt...")
927
+ result = await run_text_prompt(params)
928
+
929
+ print("\\n" + "=" * 50)
930
+ print("Party Plan:")
931
+ print("=" * 50)
932
+ print(result.output)
933
+ print("\\n" + "-" * 50)
934
+ print(f"Tokens used: {result.usage.total_tokens}")
935
+
936
+
937
+ if __name__ == "__main__":
938
+ asyncio.run(main())
939
+ `;
940
+ };
941
+ var getDevServerContent = () => {
942
+ return `"""Auto-generated webhook server for AgentMark development.
943
+
944
+ This server is started by 'npm run dev' (agentmark dev) and handles
945
+ prompt execution requests from the CLI.
946
+ """
947
+
948
+ import argparse
949
+ import sys
950
+ from pathlib import Path
951
+
952
+ # Add parent directory to path for imports
953
+ sys.path.insert(0, str(Path(__file__).parent.parent))
954
+
955
+ from agentmark_pydantic_ai_v0 import create_webhook_server
956
+ from agentmark_client import client
957
+
958
+
959
+ if __name__ == "__main__":
960
+ parser = argparse.ArgumentParser()
961
+ parser.add_argument("--webhook-port", type=int, default=9417)
962
+ parser.add_argument("--api-server-port", type=int, default=9418)
963
+ args = parser.parse_args()
964
+
965
+ create_webhook_server(client, args.webhook_port, args.api_server_port)
966
+ `;
967
+ };
968
+ var getEnvContent = (apiKey) => {
969
+ return `# OpenAI API Key
970
+ OPENAI_API_KEY=${apiKey}
971
+
972
+ # For Anthropic models, add:
973
+ # ANTHROPIC_API_KEY=your-key-here
974
+
975
+ # For Google Gemini models, add:
976
+ # GOOGLE_API_KEY=your-key-here
977
+ `;
978
+ };
979
+ var getGitignoreContent = () => {
980
+ return `# Python
981
+ __pycache__/
982
+ *.py[cod]
983
+ *$py.class
984
+ .venv/
985
+ venv/
986
+ .env
987
+
988
+ # AgentMark
989
+ *.agentmark-outputs/
990
+ .agentmark/
991
+
992
+ # IDE
993
+ .idea/
994
+ .vscode/
995
+ *.swp
996
+
997
+ # Build
998
+ dist/
999
+ build/
1000
+ *.egg-info/
1001
+
1002
+ # Testing
1003
+ .pytest_cache/
1004
+ .coverage
1005
+ htmlcov/
1006
+ `;
1007
+ };
1008
+ var createPythonApp = async (client, targetPath = ".", apiKey = "", deploymentMode = "cloud") => {
1009
+ try {
1010
+ const model = "gpt-4o";
1011
+ console.log("Creating AgentMark Python app with Pydantic AI...");
1012
+ const folderName = targetPath;
1013
+ fs4.ensureDirSync(`${targetPath}/agentmark`);
1014
+ setupMCPServer2(client, targetPath);
1015
+ createExamplePrompts(model, targetPath, "pydantic-ai");
1016
+ console.log(`Example prompts and datasets created in ${folderName}/agentmark/`);
1017
+ const projectName = path2.basename(targetPath).replace(/[^a-zA-Z0-9_-]/g, "-");
1018
+ fs4.writeFileSync(`${targetPath}/pyproject.toml`, getPyprojectContent(projectName));
1019
+ fs4.writeFileSync(`${targetPath}/agentmark_client.py`, getAgentmarkClientContent(deploymentMode));
1020
+ fs4.writeFileSync(`${targetPath}/main.py`, getMainPyContent());
1021
+ fs4.writeFileSync(`${targetPath}/.env`, getEnvContent(apiKey));
1022
+ fs4.writeFileSync(`${targetPath}/.gitignore`, getGitignoreContent());
1023
+ const agentmarkInternalDir = path2.join(targetPath, ".agentmark");
1024
+ fs4.ensureDirSync(agentmarkInternalDir);
1025
+ fs4.writeFileSync(path2.join(agentmarkInternalDir, "dev_server.py"), getDevServerContent());
1026
+ console.log("Setting up Python environment...");
1027
+ console.log("Note: You'll need to set up a virtual environment and install dependencies.");
1028
+ console.log("");
1029
+ console.log("\nAgentMark Python initialization completed successfully!");
1030
+ console.log(
1031
+ `
1032
+ \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557
1033
+ \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551
1034
+ \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551
1035
+ \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u255A\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551
1036
+ \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551
1037
+ \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D
1038
+ + AgentMark
1039
+ `
1040
+ );
1041
+ console.log("\n" + "\u2550".repeat(70));
1042
+ console.log("Next Steps");
1043
+ console.log("\u2550".repeat(70));
1044
+ console.log("\n Get Started:");
1045
+ if (folderName !== "." && folderName !== "./") {
1046
+ console.log(` $ cd ${folderName}`);
1047
+ }
1048
+ console.log(" $ python -m venv .venv");
1049
+ console.log(" $ source .venv/bin/activate # On Windows: .venv\\Scripts\\activate");
1050
+ console.log(' $ pip install -e ".[dev]"');
1051
+ console.log(" $ npm run dev\n");
1052
+ console.log("\u2500".repeat(70));
1053
+ console.log("Resources");
1054
+ console.log("\u2500".repeat(70));
1055
+ console.log(" Documentation: https://docs.agentmark.co");
1056
+ console.log("\u2550".repeat(70) + "\n");
1057
+ } catch (error) {
1058
+ console.error("Error creating Python app:", error);
1059
+ throw error;
1060
+ }
1061
+ };
1062
+
726
1063
  // src/index.ts
1064
+ var parseArgs = () => {
1065
+ const args = process.argv.slice(2);
1066
+ let deploymentMode;
1067
+ let language;
1068
+ for (const arg of args) {
1069
+ if (arg === "--cloud") {
1070
+ deploymentMode = "cloud";
1071
+ } else if (arg === "--self-host") {
1072
+ deploymentMode = "static";
1073
+ } else if (arg === "--python") {
1074
+ language = "python";
1075
+ } else if (arg === "--typescript") {
1076
+ language = "typescript";
1077
+ }
1078
+ }
1079
+ return { deploymentMode, language };
1080
+ };
727
1081
  var main = async () => {
1082
+ const cliArgs = parseArgs();
728
1083
  const config = {
729
1084
  $schema: "https://raw.githubusercontent.com/agentmark-ai/agentmark/refs/heads/main/packages/cli/agentmark.schema.json",
730
1085
  version: "2.0.0",
@@ -739,7 +1094,20 @@ var main = async () => {
739
1094
  initial: "my-agentmark-app"
740
1095
  });
741
1096
  const targetPath = `./${folderName}`;
742
- fs4.ensureDirSync(targetPath);
1097
+ fs5.ensureDirSync(targetPath);
1098
+ let language = cliArgs.language;
1099
+ if (!language) {
1100
+ const response = await prompts({
1101
+ name: "language",
1102
+ type: "select",
1103
+ message: "Which language would you like to use?",
1104
+ choices: [
1105
+ { title: "TypeScript", value: "typescript" },
1106
+ { title: "Python", value: "python" }
1107
+ ]
1108
+ });
1109
+ language = response.language;
1110
+ }
743
1111
  config.builtInModels = ["gpt-4o"];
744
1112
  let apiKey = "";
745
1113
  const { providedApiKey } = await prompts({
@@ -749,32 +1117,43 @@ var main = async () => {
749
1117
  initial: ""
750
1118
  });
751
1119
  apiKey = providedApiKey || "";
752
- const { adapter } = await prompts({
753
- name: "adapter",
754
- type: "select",
755
- message: "Which adapter would you like to use?",
756
- choices: [
757
- { title: "AI SDK (Vercel)", value: "ai-sdk" },
758
- { title: "Mastra", value: "mastra" }
759
- ]
760
- });
761
- const { deploymentMode } = await prompts({
762
- name: "deploymentMode",
763
- type: "select",
764
- message: "Use AgentMark Cloud or manage yourself?",
765
- choices: [
766
- {
767
- title: "AgentMark Cloud (recommended)",
768
- value: "cloud",
769
- description: "Have AgentMark cloud manage prompts, datasets, traces, experiments, alerts & more"
770
- },
771
- {
772
- title: "Self-hosted",
773
- value: "static",
774
- description: "Self-manage your prompts, datasets, traces & experiments"
775
- }
776
- ]
777
- });
1120
+ let adapter;
1121
+ if (language === "python") {
1122
+ adapter = "pydantic-ai";
1123
+ console.log("Using Pydantic AI adapter for Python.");
1124
+ } else {
1125
+ const response = await prompts({
1126
+ name: "adapter",
1127
+ type: "select",
1128
+ message: "Which adapter would you like to use?",
1129
+ choices: [
1130
+ { title: "AI SDK (Vercel)", value: "ai-sdk" },
1131
+ { title: "Mastra", value: "mastra" }
1132
+ ]
1133
+ });
1134
+ adapter = response.adapter;
1135
+ }
1136
+ let deploymentMode = cliArgs.deploymentMode;
1137
+ if (!deploymentMode) {
1138
+ const response = await prompts({
1139
+ name: "deploymentMode",
1140
+ type: "select",
1141
+ message: "Use AgentMark Cloud or manage yourself?",
1142
+ choices: [
1143
+ {
1144
+ title: "AgentMark Cloud (recommended)",
1145
+ value: "cloud",
1146
+ description: "Have AgentMark cloud manage prompts, datasets, traces, experiments, alerts & more"
1147
+ },
1148
+ {
1149
+ title: "Self-hosted",
1150
+ value: "static",
1151
+ description: "Self-manage your prompts, datasets, traces & experiments"
1152
+ }
1153
+ ]
1154
+ });
1155
+ deploymentMode = response.deploymentMode;
1156
+ }
778
1157
  const { client } = await prompts({
779
1158
  name: "client",
780
1159
  type: "select",
@@ -787,8 +1166,12 @@ var main = async () => {
787
1166
  { title: "Skip", value: "skip" }
788
1167
  ]
789
1168
  });
790
- await createExampleApp(client, targetPath, apiKey, adapter, deploymentMode);
791
- fs4.writeJsonSync(`${targetPath}/agentmark.json`, config, { spaces: 2 });
1169
+ if (language === "python") {
1170
+ await createPythonApp(client, targetPath, apiKey, deploymentMode);
1171
+ } else {
1172
+ await createExampleApp(client, targetPath, apiKey, adapter, deploymentMode);
1173
+ }
1174
+ fs5.writeJsonSync(`${targetPath}/agentmark.json`, config, { spaces: 2 });
792
1175
  };
793
1176
  main().catch((error) => {
794
1177
  console.error("Error:", error);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/examples/create-example-app.ts","../src/utils/providers.ts","../src/utils/examples/templates/adapters.ts","../src/utils/examples/templates/app-index.ts","../src/utils/examples/templates/env.ts","../src/utils/examples/templates/package-setup.ts","../src/utils/examples/templates/tsconfig.ts","../src/utils/examples/templates/animal-drawing-prompt.ts","../src/utils/examples/templates/customer-support-prompt.ts","../src/utils/examples/templates/party-planner-prompt.ts","../src/utils/examples/templates/story-teller-prompt.ts","../src/utils/examples/templates/datasets.ts","../src/utils/examples/templates/example-prompts.ts","../src/utils/examples/templates/user-client-config.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport prompts from \"prompts\";\nimport { createExampleApp } from \"./utils/examples/create-example-app\";\n\nconst main = async () => {\n const config: any = {\n $schema:\n \"https://raw.githubusercontent.com/agentmark-ai/agentmark/refs/heads/main/packages/cli/agentmark.schema.json\",\n version: \"2.0.0\",\n mdxVersion: \"1.0\",\n agentmarkPath: \".\",\n };\n console.log(\"Initializing project.\");\n\n const { folderName } = await prompts({\n name: \"folderName\",\n type: \"text\",\n message: \"Where would you like to create your AgentMark app?\",\n initial: \"my-agentmark-app\",\n });\n\n // Create the target folder\n const targetPath = `./${folderName}`;\n fs.ensureDirSync(targetPath);\n\n config.builtInModels = ['gpt-4o'];\n\n // Prompt only for the OpenAI API key\n let apiKey = \"\";\n const { providedApiKey } = await prompts({\n name: \"providedApiKey\",\n type: \"password\",\n message: `Enter your OpenAI API key (or press Enter to skip):`,\n initial: \"\",\n });\n apiKey = providedApiKey || \"\";\n\n const { adapter } = await prompts({\n name: \"adapter\",\n type: \"select\",\n message: \"Which adapter would you like to use?\",\n choices: [\n { title: \"AI SDK (Vercel)\", value: \"ai-sdk\" },\n { title: \"Mastra\", value: \"mastra\" },\n ],\n });\n\n const { deploymentMode } = await prompts({\n name: \"deploymentMode\",\n type: \"select\",\n message: \"Use AgentMark Cloud or manage yourself?\",\n choices: [\n {\n title: \"AgentMark Cloud (recommended)\",\n value: \"cloud\",\n description: \"Have AgentMark cloud manage prompts, datasets, traces, experiments, alerts & more\"\n },\n {\n title: \"Self-hosted\",\n value: \"static\",\n description: \"Self-manage your prompts, datasets, traces & experiments\"\n },\n ],\n });\n\n const { client } = await prompts({\n name: \"client\",\n type: \"select\",\n message: \"Make your IDE an AgentMark expert\",\n choices: [\n { title: \"Claude Code\", value: \"claude-code\" },\n { title: \"Cursor\", value: \"cursor\" },\n { title: \"VS Code\", value: \"vscode\" },\n { title: \"Zed\", value: \"zed\" },\n { title: \"Skip\", value: \"skip\" },\n ],\n });\n\n await createExampleApp(client, targetPath, apiKey, adapter, deploymentMode);\n\n // Always generate agentmark.json so config is consistent\n fs.writeJsonSync(`${targetPath}/agentmark.json`, config, { spaces: 2 });\n};\n\nmain().catch((error) => {\n console.error(\"Error:\", error);\n process.exit(1);\n});\n","import fs from \"fs-extra\";\nimport * as path from \"path\";\nimport { Providers } from \"../providers.js\";\nimport {\n setupPackageJson,\n installDependencies,\n getIndexFileContent,\n getTsConfigContent,\n getEnvFileContent,\n createExamplePrompts,\n getClientConfigContent,\n getAdapterConfig,\n} from \"./templates/index.js\";\nimport { fetchPromptsFrontmatter, generateTypeDefinitions } from \"@agentmark/shared-utils\";\n\nconst setupMCPServer = (client: string, targetPath: string) => {\n if (client === \"skip\") {\n console.log(\"Skipping MCP server setup.\");\n return;\n }\n\n // Keep ./ prefix for display in messages\n const folderName = targetPath;\n\n // Handle VS Code\n if (client === \"vscode\") {\n try {\n console.log(`Setting up MCP server for VS Code in ${folderName}...`);\n const vscodeDir = path.join(targetPath, \".vscode\");\n fs.ensureDirSync(vscodeDir);\n\n const mcpConfig = {\n servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(vscodeDir, \"mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for VS Code in ${folderName}/.vscode/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for VS Code:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Zed\n if (client === \"zed\") {\n try {\n console.log(`Setting up MCP server for Zed in ${folderName}...`);\n const zedDir = path.join(targetPath, \".zed\");\n fs.ensureDirSync(zedDir);\n\n const zedConfig = {\n context_servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(zedDir, \"settings.json\"), zedConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Zed in ${folderName}/.zed/settings.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Zed:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Cursor\n if (client === \"cursor\") {\n try {\n console.log(`Setting up MCP server for Cursor in ${folderName}...`);\n const cursorDir = path.join(targetPath, \".cursor\");\n fs.ensureDirSync(cursorDir);\n\n const cursorConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(cursorDir, \"mcp.json\"), cursorConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Cursor in ${folderName}/.cursor/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Cursor:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Claude Code\n if (client === \"claude-code\") {\n try {\n console.log(`Setting up MCP server for Claude Code in ${folderName}...`);\n\n const mcpConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n type: \"http\",\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(targetPath, \".mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Claude Code in ${folderName}/.mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Claude Code:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n};\n\n\nexport const createExampleApp = async (\n client: string,\n targetPath: string = \".\",\n apiKey: string = \"\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n try {\n const modelProvider = 'openai';\n const model = 'gpt-4o';\n console.log(\"Creating Agent Mark example app...\");\n\n // Keep ./ prefix for display in messages\n const folderName = targetPath;\n\n // Create directory structure\n fs.ensureDirSync(`${targetPath}/agentmark`);\n\n setupMCPServer(client, targetPath);\n\n // Create example prompts\n createExamplePrompts(model, targetPath, adapter);\n console.log(`✅ Example prompts and datasets created in ${folderName}/agentmark/`);\n\n // Create user client config at project root\n // Prefer TS for dev ergonomics\n const langModels = Providers[modelProvider as keyof typeof Providers].languageModels.slice(0, 1);\n fs.writeFileSync(\n `${targetPath}/agentmark.client.ts`,\n getClientConfigContent({ provider: modelProvider, languageModels: langModels, adapter, deploymentMode })\n );\n\n // Create .env file\n fs.writeFileSync(`${targetPath}/.env`, getEnvFileContent(modelProvider, apiKey));\n\n // Create .gitignore\n const gitignore = ['node_modules', '.env', '*.agentmark-outputs/', '.agentmark', 'dist'].join('\\n');\n fs.writeFileSync(`${targetPath}/.gitignore`, gitignore);\n\n // Create the main application file\n fs.writeFileSync(\n `${targetPath}/index.ts`,\n getIndexFileContent(adapter)\n );\n\n // Create tsconfig.json\n fs.writeJsonSync(`${targetPath}/tsconfig.json`, getTsConfigContent(), { spaces: 2 });\n\n // Setup package.json and install dependencies\n setupPackageJson(targetPath, deploymentMode);\n installDependencies(modelProvider, targetPath, adapter, deploymentMode);\n\n // Generate types file using the type generation library\n console.log(\"Generating types from prompts...\");\n try {\n const agentmarkDir = path.join(targetPath, 'agentmark');\n const prompts = await fetchPromptsFrontmatter({ rootDir: agentmarkDir });\n const typeDefinitions = await generateTypeDefinitions(prompts);\n fs.writeFileSync(`${targetPath}/agentmark.types.ts`, typeDefinitions);\n } catch (error) {\n console.warn(\"Warning: Could not generate types automatically:\", error);\n console.log(\"You can generate types later by running: npx agentmark generate-types --root-dir agentmark\");\n // Create a placeholder types file\n fs.writeFileSync(`${targetPath}/agentmark.types.ts`, `// Auto-generated types from AgentMark\\n// Run 'npx agentmark generate-types --root-dir agentmark' to generate types\\nexport default interface AgentmarkTypes {}\\n`);\n }\n\n // Create .agentmark directory and dev-entry.ts\n console.log(\"Creating development server entry point...\");\n const agentmarkInternalDir = path.join(targetPath, '.agentmark');\n fs.ensureDirSync(agentmarkInternalDir);\n\n // Get adapter-specific values from config\n const adapterConfig = getAdapterConfig(adapter);\n const { webhookHandler } = adapterConfig.classes;\n\n const devEntryContent = `// Auto-generated webhook server entry point\n// To customize, create a dev-server.ts file in your project root\n\nimport { createWebhookServer } from '@agentmark/cli/runner-server';\nimport { ${webhookHandler} } from '${adapterConfig.package}/runner';\nimport { AgentMarkSDK } from '@agentmark/sdk';\nimport path from 'path';\n\nasync function main() {\n const args = process.argv.slice(2);\n const webhookPortArg = args.find(arg => arg.startsWith('--webhook-port='));\n const fileServerPortArg = args.find(arg => arg.startsWith('--file-server-port='));\n\n const webhookPort = webhookPortArg ? parseInt(webhookPortArg.split('=')[1]) : 9417;\n const fileServerPort = fileServerPortArg ? parseInt(fileServerPortArg.split('=')[1]) : 9418;\n const fileServerUrl = \\`http://localhost:\\${fileServerPort}\\`;\n\n // Set environment for development mode before importing client\n process.env.NODE_ENV = 'development';\n process.env.AGENTMARK_BASE_URL = fileServerUrl;\n\n // Now import client - it will pick up the dev environment\n const { client } = await import('../agentmark.client.js');\n\n // Initialize OpenTelemetry tracing to export traces to the API server\n const sdk = new AgentMarkSDK({\n apiKey: '',\n appId: '',\n baseUrl: fileServerUrl,\n });\n sdk.initTracing({ disableBatch: true });\n\n const handler = new ${webhookHandler}(client as any);\n const templatesDirectory = path.join(process.cwd(), 'agentmark');\n\n await createWebhookServer({\n port: webhookPort,\n handler,\n fileServerUrl,\n templatesDirectory\n });\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n`;\n\n fs.writeFileSync(path.join(agentmarkInternalDir, 'dev-entry.ts'), devEntryContent);\n\n // Success message\n console.log(\"\\n✅ Agentmark initialization completed successfully!\");\n\n console.log(\n `\n █████╗ ██████╗ ███████╗███╗ ██╗████████╗███╗ ███╗ █████╗ ██████╗ ██╗ ██╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝████╗ ████║██╔══██╗██╔══██╗██║ ██╔╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ██╔████╔██║███████║██████╔╝█████╔╝\n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██║╚██╔╝██║██╔══██║██╔══██╗██╔═██╗\n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ██║ ╚═╝ ██║██║ ██║██║ ██║██║ ██╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝\n\n `\n );\n\n console.log('\\n' + '═'.repeat(70));\n console.log('Next Steps');\n console.log('═'.repeat(70));\n\n // Simplified instructions - always just \"npm run dev\"\n console.log('\\n Get Started:');\n if (folderName !== \".\" && folderName !== \"./\") {\n console.log(` $ cd ${folderName}`);\n }\n console.log(' $ npm run dev\\n');\n\n console.log('─'.repeat(70));\n console.log('Resources');\n console.log('─'.repeat(70));\n console.log(' Documentation: https://docs.agentmark.co');\n console.log('═'.repeat(70) + '\\n');\n } catch (error) {\n console.error(\"Error creating example app:\", error);\n throw error;\n }\n};\n","export const Providers = {\n openai: {\n label: \"OpenAI\",\n languageModels: [\n \"gpt-4o\",\n \"gpt-4o-mini\",\n \"gpt-4\",\n \"gpt-5\",\n \"gpt-4-turbo\",\n \"gpt-3.5-turbo\",\n ],\n imageModels: [\"dall-e-3\", \"dall-e-2\"],\n speechModels: [\"tts-1\", \"tts-1-hd\"],\n },\n};\n","export interface AdapterConfig {\n /** npm package name for the adapter */\n package: string;\n /** Additional npm packages required by this adapter */\n dependencies: string[];\n /** Class names used in generated code */\n classes: {\n modelRegistry: string;\n toolRegistry: string;\n webhookHandler: string;\n };\n}\n\nexport const createAdapterConfig = (\n provider: string\n): Record<string, AdapterConfig> => {\n return {\n \"ai-sdk\": {\n package: \"@agentmark/ai-sdk-v5-adapter\",\n dependencies: [\"ai@^5\", `@ai-sdk/${provider}@^2`],\n classes: {\n modelRegistry: \"VercelAIModelRegistry\",\n toolRegistry: \"VercelAIToolRegistry\",\n webhookHandler: \"VercelAdapterWebhookHandler\",\n },\n },\n mastra: {\n package: \"@agentmark/mastra-v0-adapter\",\n dependencies: [\n \"@mastra/core@<0.20.0\",\n \"@mastra/mcp@<0.13.4\",\n `@ai-sdk/${provider}@<2`,\n ],\n classes: {\n modelRegistry: \"MastraModelRegistry\",\n toolRegistry: \"MastraToolRegistry\",\n webhookHandler: \"MastraAdapterWebhookHandler\",\n },\n },\n };\n};\n\nexport function getAdapterConfig(\n adapter: string,\n provider: string\n): AdapterConfig {\n const config = createAdapterConfig(provider)[adapter];\n if (!config) {\n throw new Error(\n `Unknown adapter: ${adapter}. Available adapters: ${Object.keys(\n createAdapterConfig(provider)\n ).join(\", \")}`\n );\n }\n return config;\n}\n","export const getIndexFileContent = (adapter: string = \"ai-sdk\"): string => {\n if (adapter === \"mastra\") {\n return `import \"dotenv/config\";\nimport { Agent } from \"@mastra/core/agent\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n traceId: \"trace-123\",\n traceName: \"customer-support\",\n userId: \"user-123\",\n sessionId: \"session-123\",\n sessionName: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const agentConfig = await prompt.formatAgent({\n options: {\n telemetry,\n },\n });\n\n const [messages, generateOptions] = await agentConfig.formatMessages({\n props: {\n customer_question: customer_message,\n },\n });\n\n const agent = new Agent(agentConfig);\n const response = await agent.generate(messages, generateOptions);\n\n return (response as any).text || (response as any).content || String(response);\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n } else {\n return `import \"dotenv/config\";\nimport { generateText } from \"ai\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n traceId: \"trace-123\",\n traceName: \"customer-support\",\n userId: \"user-123\",\n sessionId: \"session-123\",\n sessionName: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const vercelInput = await prompt.format({\n props: {\n customer_question: customer_message,\n },\n telemetry,\n });\n\n const resp = await generateText(vercelInput);\n\n return resp.text;\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n }\n}; ","export const getEnvFileContent = (\n _modelProvider: string,\n apiKey: string = ''\n): string => {\n const apiKeyValue = apiKey || 'your_api_key_here';\n\n return `# Cloud deployment: Set these environment variables\n# AGENTMARK_BASE_URL=https://api.agentmark.co\n# AGENTMARK_API_KEY=your_agentmark_api_key\n# AGENTMARK_APP_ID=your_agentmark_app_id\n# Learn more: https://docs.agentmark.co/platform/getting_started/quickstart\n\nOPENAI_API_KEY=${apiKeyValue}\n`;\n};\n","import fs from \"fs-extra\";\nimport { execSync, execFileSync } from \"child_process\";\nimport { getAdapterConfig } from \"./adapters.js\";\n\nexport const setupPackageJson = (targetPath: string = \".\", deploymentMode: \"cloud\" | \"static\" = \"cloud\") => {\n const packageJsonPath = `${targetPath}/package.json`;\n\n if (!fs.existsSync(packageJsonPath)) {\n console.log(\"Creating package.json...\");\n execSync(\"npm init -y\", { cwd: targetPath });\n }\n\n // Update the created package.json with additional information\n const pkgJson = fs.readJsonSync(packageJsonPath);\n pkgJson.name =\n pkgJson.name === \"test\" || !pkgJson.name\n ? \"agentmark-example-app\"\n : pkgJson.name;\n pkgJson.description =\n pkgJson.description || \"A simple Node.js app using the Agentmark SDK\";\n\n // All platforms use \"agentmark dev\" which runs their respective dev-entry.ts\n const devScript = \"agentmark dev\";\n\n // Base scripts for all modes\n const scripts: Record<string, string> = {\n ...pkgJson.scripts,\n \"demo\": \"npx tsx index.ts\",\n \"dev\": devScript,\n \"prompt\": \"agentmark run-prompt\",\n \"experiment\": \"agentmark run-experiment\",\n };\n\n // For static/self-hosted mode, add the build script\n if (deploymentMode === \"static\") {\n scripts[\"build\"] = \"agentmark build --out dist/agentmark\";\n }\n\n pkgJson.scripts = scripts;\n\n // Add overrides to fix vulnerabilities in transitive dependencies\n // localtunnel (used by @agentmark/cli) depends on axios@0.21.4 which has vulnerabilities\n pkgJson.overrides = {\n ...pkgJson.overrides,\n \"axios\": \"^1.7.9\"\n };\n\n fs.writeJsonSync(packageJsonPath, pkgJson, { spaces: 2 });\n};\n\nexport const installDependencies = (\n modelProvider: string,\n targetPath: string = \".\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n console.log(\"Installing required packages...\");\n console.log(\"This might take a moment...\");\n\n const adapterConfig = getAdapterConfig(adapter, modelProvider);\n\n try {\n // Install TypeScript, ts-node, CLI, and other dev dependencies\n // CLI needs to be a devDep so dev-entry.ts can import from @agentmark/cli/runner-server\n const devDepsCmd = \"npm install --save-dev typescript ts-node @types/node @agentmark/cli --legacy-peer-deps\";\n\n execSync(devDepsCmd, {\n stdio: \"inherit\",\n cwd: targetPath,\n });\n\n // Install the common packages\n // SDK is required for both local (connects to agentmark serve) and cloud (connects to API)\n // Loader packages are imported directly - ApiLoader always needed, FileLoader only for static mode\n const loaderPackages = deploymentMode === \"static\"\n ? [\"@agentmark/loader-api\", \"@agentmark/loader-file\"]\n : [\"@agentmark/loader-api\"];\n\n const installArgs = [\n \"install\",\n \"dotenv\",\n \"@agentmark/prompt-core\",\n \"@agentmark/sdk\",\n adapterConfig.package,\n ...loaderPackages,\n ...adapterConfig.dependencies,\n \"--legacy-peer-deps\",\n ];\n\n execFileSync(\"npm\", installArgs, { stdio: \"inherit\", cwd: targetPath });\n\n console.log(\"Packages installed successfully!\");\n } catch (error) {\n console.error(\"Error installing packages:\", error);\n throw new Error(\n \"Failed to install required packages. Please check your network connection and try again.\"\n );\n }\n};\n","export const getTsConfigContent = (): object => {\n return {\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true\n }\n };\n}; ","export const getAnimalDrawingPrompt = (): string => {\n return `---\nname: animal-drawing\nimage_config:\n model_name: dall-e-3\n num_images: 1\n size: 1024x1024\n aspect_ratio: 1:1\ntest_settings:\n dataset: animal.jsonl\n props:\n animal: \"cat\"\n---\n\n<ImagePrompt>\nDraw a hyper-realistic picture of a {props.animal}\n</ImagePrompt>`;\n};","export const getCustomerSupportPrompt = (model: string): string => {\n return `---\nname: customer-support-agent\ntext_config:\n model_name: ${model}\n max_calls: 2\n tools:\n search_knowledgebase:\n description: Search the company knowledgebase for information about shipping, warranty, and returns policies.\n parameters:\n type: object\n properties:\n query:\n type: string\n description: The search query to find relevant information\n required: [query]\ntest_settings:\n dataset: customer-query.jsonl\n props:\n customer_question: \"I'm having trouble with my order. How long does shipping take?\"\ninput_schema:\n type: object\n properties:\n customer_question:\n type: string\n description: \"The customer's question\"\n required:\n - customer_question\n---\n\n<System>\nYou are a customer service agent for a company that sells products online. You are given a customer's question and you need to respond to the customer. You need to be friendly, professional, and helpful.\n\nYou have access to the following tool:\n- search_knowledgebase: Search the company knowledgebase for information about shipping, warranty, and returns. Use this when customers ask about these topics.\n</System>\n\n<User>{props.customer_question}</User>`;\n};","export const getPartyPlannerPrompt = (model: string): string => {\n return `---\nname: party-planner\nobject_config:\n model_name: ${model}\n schema:\n type: object\n properties:\n names:\n type: array\n description: \"List of names of people attending the party.\"\n items:\n type: string\n required:\n - names\ntest_settings:\n dataset: party.jsonl\n evals:\n - exact_match_json\n props:\n party_text: \"We're having a party with Alice, Bob, and Carol.\"\ninput_schema:\n type: object\n properties:\n party_text:\n type: string\n description: \"A block of text describing the upcoming party and attendees.\"\n required:\n - party_text\n---\n\n<System>\nExtract the names of all people attending the party from the following text. Respond with a list of names only.\n</System>\n\n<User>\nText: {props.party_text}\n</User>`;\n};","export const getStoryTellerPrompt = (): string => {\n return `---\nname: story-teller\nspeech_config:\n model_name: tts-1-hd\n voice: \"nova\"\n speed: 1.0\n output_format: \"mp3\"\ntest_settings:\n dataset: story.jsonl\n props:\n story: \"Once upon a time, there was a cat who loved to play with a ball.\"\n---\n\n<System>\nYou are a storyteller for children. Make sure your story is engaging and interesting.\n</System>\n\n<SpeechPrompt>\n- {props.story}\n</SpeechPrompt>`;\n};","export const getAnimalDataset = (): string => {\n return `{\"input\": {\"animal\": \"cat\"}, \"expected_output\": \"A realistic picture of a cat\"}\n{\"input\": {\"animal\": \"dog\"}, \"expected_output\": \"A realistic picture of a dog\"}\n{\"input\": {\"animal\": \"bird\"}, \"expected_output\": \"A realistic picture of a bird\"}`;\n};\n\nexport const getCustomerQueryDataset = (): string => {\n return `{\"input\": {\"customer_question\": \"My package hasn't arrived yet. Can you help me track it?\"}}\n{\"input\": {\"customer_question\": \"I received the wrong item in my order. What should I do?\"}}\n{\"input\": {\"customer_question\": \"How do I return a product that I purchased last week?\"}}`;\n};\n\nexport const getPartyDataset = (): string => {\n return `{\"input\": {\"party_text\": \"We're having a party with Alice, Bob, and Carol.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Alice\\\\\", \\\\\"Bob\\\\\", \\\\\"Carol\\\\\"]}\"}\n{\"input\": {\"party_text\": \"The guest list includes Dave, Emma, and Frank.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Dave\\\\\", \\\\\"Emma\\\\\", \\\\\"Frank\\\\\"]}\"}\n{\"input\": {\"party_text\": \"Join us for a celebration with Grace, Henry, and Isla.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Grace\\\\\", \\\\\"Henry\\\\\", \\\\\"Isla\\\\\"]}\"}`;\n};\n\nexport const getStoryDataset = (): string => {\n return `{\"input\": {\"story\": \"Once upon a time, the Moon woke up and found her glow missing! She floated around the sky asking stars, clouds, and even comets if they'd seen her light. It wasn't until she peeked into a mountain lake that she saw her glow shining back—hidden in her own reflection! Laughing, she realized she had never lost it—it was with her all along, just hiding beneath a cloudy sky.\"}}\n{\"input\": {\"story\": \"Benny was no ordinary banana—he dreamed of becoming a superhero. One day, when a monkey slipped in the jungle and cried for help, Benny rolled into action, dodging vines and swinging from branches using his peel like a lasso. The monkey was saved, and from that day on, Benny was known as \\\\\"The Peel of Justice,\\\\\" the bravest fruit in the whole rainforest.\"}}\n{\"input\": {\"story\": \"In the town of Maplebrook, there was a library that whispered stories when no one was looking. Curious little Nia tiptoed in one rainy day and heard the books giggling softly. She opened one called The Secret Tunnel, and to her surprise, it sucked her in! She found herself riding a dragon through glittering caves. When she returned, the book winked shut—waiting for its next reader to listen.\"}}`;\n};","import fs from 'fs-extra';\nimport { getAnimalDrawingPrompt } from './animal-drawing-prompt.js';\nimport { getCustomerSupportPrompt } from './customer-support-prompt.js';\nimport { getPartyPlannerPrompt } from './party-planner-prompt.js';\nimport { getStoryTellerPrompt } from './story-teller-prompt.js';\nimport { getAnimalDataset, getCustomerQueryDataset, getPartyDataset, getStoryDataset } from './datasets.js';\n\nexport const createExamplePrompts = (model: string, targetPath: string = \".\", adapter: string = \"ai-sdk\") => {\n // Ensure the templates directory exists\n fs.ensureDirSync(`${targetPath}/agentmark`);\n \n // Create animal drawing prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const animalDrawingPrompt = getAnimalDrawingPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/animal-drawing.prompt.mdx`, animalDrawingPrompt);\n const animalDataset = getAnimalDataset();\n fs.writeFileSync(`${targetPath}/agentmark/animal.jsonl`, animalDataset);\n }\n \n // Create customer support prompt and dataset\n const customerSupportPrompt = getCustomerSupportPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/customer-support-agent.prompt.mdx`, customerSupportPrompt);\n const customerQueryDataset = getCustomerQueryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/customer-query.jsonl`, customerQueryDataset);\n \n // Create party planner prompt and dataset\n const partyPlannerPrompt = getPartyPlannerPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/party-planner.prompt.mdx`, partyPlannerPrompt);\n const partyDataset = getPartyDataset();\n fs.writeFileSync(`${targetPath}/agentmark/party.jsonl`, partyDataset);\n \n // Create story teller prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const storyTellerPrompt = getStoryTellerPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/story-teller.prompt.mdx`, storyTellerPrompt);\n const storyDataset = getStoryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/story.jsonl`, storyDataset);\n }\n};","import { getAdapterConfig } from \"./adapters.js\";\n\nexport const getClientConfigContent = (options: { provider: string; languageModels: string[]; adapter: string; deploymentMode?: \"cloud\" | \"static\" }) => {\n const { provider, languageModels, adapter, deploymentMode = \"cloud\" } = options;\n const adapterConfig = getAdapterConfig(adapter, provider);\n const { modelRegistry, toolRegistry } = adapterConfig.classes;\n\n const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;\n\n const extraModelRegs = provider === 'openai'\n ? `.registerModels([\"dall-e-3\"], (name: string) => ${provider}.image(name))\n .registerModels([\"tts-1-hd\"], (name: string) => ${provider}.speech(name))`\n : '';\n\n // Import loaders from dedicated packages\n const loaderImport = deploymentMode === \"cloud\"\n ? `import { ApiLoader } from \"@agentmark/loader-api\";`\n : `import { ApiLoader } from \"@agentmark/loader-api\";\nimport { FileLoader } from \"@agentmark/loader-file\";`;\n\n const loaderSetup = deploymentMode === \"cloud\"\n ? ` // ApiLoader works for both development and production\n // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost\n // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud\n const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : ApiLoader.cloud({\n apiKey: process.env.AGENTMARK_API_KEY!,\n appId: process.env.AGENTMARK_APP_ID!,\n });`\n : ` const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : new FileLoader('./dist/agentmark');`;\n\n return `// agentmark.client.ts\nimport path from 'node:path';\nimport dotenv from 'dotenv';\ndotenv.config({ path: path.resolve(__dirname, '.env') });\nimport { createAgentMarkClient, ${modelRegistry}, ${toolRegistry}, EvalRegistry } from \"${adapterConfig.package}\";\n${loaderImport}\nimport AgentMarkTypes, { Tools } from './agentmark.types';\n${providerImport}\n\nfunction createModelRegistry() {\n const modelRegistry = new ${modelRegistry}()\n .registerModels(${JSON.stringify(languageModels)}, (name: string) => ${provider}(name))\n ${extraModelRegs};\n return modelRegistry;\n}\n\nfunction createToolRegistry() {\n const toolRegistry = new ${toolRegistry}<Tools>()\n .register('search_knowledgebase', async ({ query }) => {\n // Simulate search delay\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Return all three knowledge base articles\n // The LLM will select the relevant one based on the query\n return {\n articles: [\n { topic: 'shipping', content: 'Standard shipping takes 3–5 business days.' },\n { topic: 'warranty', content: 'All products include a 1-year limited warranty.' },\n { topic: 'returns', content: 'You can return items within 30 days of delivery.' }\n ]\n };\n });\n return toolRegistry;\n}\n\nfunction createEvalRegistry() {\n const evalRegistry = new EvalRegistry()\n .register('exact_match_json', ({ output, expectedOutput }) => {\n if (!expectedOutput) {\n return { score: 0, label: 'error', reason: 'No expected output provided', passed: false };\n }\n try {\n const ok = JSON.stringify(output) === JSON.stringify(JSON.parse(expectedOutput));\n return {\n score: ok ? 1 : 0,\n label: ok ? 'correct' : 'incorrect',\n reason: ok ? 'Exact match' : 'Mismatch',\n passed: ok\n };\n } catch (e) {\n return { score: 0, label: 'error', reason: 'Failed to parse expected output as JSON', passed: false };\n }\n });\n return evalRegistry;\n}\n\nfunction createClient() {\n${loaderSetup}\n const modelRegistry = createModelRegistry();\n const toolRegistry = createToolRegistry();\n const evalRegistry = createEvalRegistry();\n return createAgentMarkClient<AgentMarkTypes, typeof toolRegistry>({ loader, modelRegistry, toolRegistry, evalRegistry });\n}\n\nexport const client = createClient();\n`;\n};\n"],"mappings":"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","names":["fs","fs","fs","fs","fs","prompts","fs"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/examples/create-example-app.ts","../src/utils/providers.ts","../src/utils/examples/templates/adapters.ts","../src/utils/examples/templates/app-index.ts","../src/utils/examples/templates/env.ts","../src/utils/examples/templates/package-setup.ts","../src/utils/examples/templates/tsconfig.ts","../src/utils/examples/templates/animal-drawing-prompt.ts","../src/utils/examples/templates/customer-support-prompt.ts","../src/utils/examples/templates/party-planner-prompt.ts","../src/utils/examples/templates/story-teller-prompt.ts","../src/utils/examples/templates/datasets.ts","../src/utils/examples/templates/example-prompts.ts","../src/utils/examples/templates/user-client-config.ts","../src/utils/examples/create-python-app.ts"],"sourcesContent":["import fs from \"fs-extra\";\nimport prompts from \"prompts\";\nimport { createExampleApp } from \"./utils/examples/create-example-app\";\nimport { createPythonApp } from \"./utils/examples/create-python-app\";\n\nconst parseArgs = () => {\n const args = process.argv.slice(2);\n let deploymentMode: \"cloud\" | \"static\" | undefined;\n let language: \"typescript\" | \"python\" | undefined;\n\n for (const arg of args) {\n if (arg === \"--cloud\") {\n deploymentMode = \"cloud\";\n } else if (arg === \"--self-host\") {\n deploymentMode = \"static\";\n } else if (arg === \"--python\") {\n language = \"python\";\n } else if (arg === \"--typescript\") {\n language = \"typescript\";\n }\n }\n\n return { deploymentMode, language };\n};\n\nconst main = async () => {\n const cliArgs = parseArgs();\n const config: any = {\n $schema:\n \"https://raw.githubusercontent.com/agentmark-ai/agentmark/refs/heads/main/packages/cli/agentmark.schema.json\",\n version: \"2.0.0\",\n mdxVersion: \"1.0\",\n agentmarkPath: \".\",\n };\n console.log(\"Initializing project.\");\n\n const { folderName } = await prompts({\n name: \"folderName\",\n type: \"text\",\n message: \"Where would you like to create your AgentMark app?\",\n initial: \"my-agentmark-app\",\n });\n\n // Create the target folder\n const targetPath = `./${folderName}`;\n fs.ensureDirSync(targetPath);\n\n // Language selection\n let language = cliArgs.language;\n if (!language) {\n const response = await prompts({\n name: \"language\",\n type: \"select\",\n message: \"Which language would you like to use?\",\n choices: [\n { title: \"TypeScript\", value: \"typescript\" },\n { title: \"Python\", value: \"python\" },\n ],\n });\n language = response.language;\n }\n\n config.builtInModels = ['gpt-4o'];\n\n // Prompt only for the OpenAI API key\n let apiKey = \"\";\n const { providedApiKey } = await prompts({\n name: \"providedApiKey\",\n type: \"password\",\n message: `Enter your OpenAI API key (or press Enter to skip):`,\n initial: \"\",\n });\n apiKey = providedApiKey || \"\";\n\n // Adapter selection depends on language\n let adapter: string;\n if (language === \"python\") {\n // Python only has Pydantic AI adapter\n adapter = \"pydantic-ai\";\n console.log(\"Using Pydantic AI adapter for Python.\");\n } else {\n const response = await prompts({\n name: \"adapter\",\n type: \"select\",\n message: \"Which adapter would you like to use?\",\n choices: [\n { title: \"AI SDK (Vercel)\", value: \"ai-sdk\" },\n { title: \"Mastra\", value: \"mastra\" },\n ],\n });\n adapter = response.adapter;\n }\n\n let deploymentMode = cliArgs.deploymentMode;\n if (!deploymentMode) {\n const response = await prompts({\n name: \"deploymentMode\",\n type: \"select\",\n message: \"Use AgentMark Cloud or manage yourself?\",\n choices: [\n {\n title: \"AgentMark Cloud (recommended)\",\n value: \"cloud\",\n description: \"Have AgentMark cloud manage prompts, datasets, traces, experiments, alerts & more\"\n },\n {\n title: \"Self-hosted\",\n value: \"static\",\n description: \"Self-manage your prompts, datasets, traces & experiments\"\n },\n ],\n });\n deploymentMode = response.deploymentMode;\n }\n\n const { client } = await prompts({\n name: \"client\",\n type: \"select\",\n message: \"Make your IDE an AgentMark expert\",\n choices: [\n { title: \"Claude Code\", value: \"claude-code\" },\n { title: \"Cursor\", value: \"cursor\" },\n { title: \"VS Code\", value: \"vscode\" },\n { title: \"Zed\", value: \"zed\" },\n { title: \"Skip\", value: \"skip\" },\n ],\n });\n\n if (language === \"python\") {\n await createPythonApp(client, targetPath, apiKey, deploymentMode);\n } else {\n await createExampleApp(client, targetPath, apiKey, adapter, deploymentMode);\n }\n\n // Always generate agentmark.json so config is consistent\n fs.writeJsonSync(`${targetPath}/agentmark.json`, config, { spaces: 2 });\n};\n\nmain().catch((error) => {\n console.error(\"Error:\", error);\n process.exit(1);\n});\n","import fs from \"fs-extra\";\nimport * as path from \"path\";\nimport { Providers } from \"../providers.js\";\nimport {\n setupPackageJson,\n installDependencies,\n getIndexFileContent,\n getTsConfigContent,\n getEnvFileContent,\n createExamplePrompts,\n getClientConfigContent,\n getAdapterConfig,\n} from \"./templates/index.js\";\nimport { fetchPromptsFrontmatter, generateTypeDefinitions } from \"@agentmark-ai/shared-utils\";\n\nconst setupMCPServer = (client: string, targetPath: string) => {\n if (client === \"skip\") {\n console.log(\"Skipping MCP server setup.\");\n return;\n }\n\n // Keep ./ prefix for display in messages\n const folderName = targetPath;\n\n // Handle VS Code\n if (client === \"vscode\") {\n try {\n console.log(`Setting up MCP server for VS Code in ${folderName}...`);\n const vscodeDir = path.join(targetPath, \".vscode\");\n fs.ensureDirSync(vscodeDir);\n\n const mcpConfig = {\n servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(vscodeDir, \"mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for VS Code in ${folderName}/.vscode/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for VS Code:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Zed\n if (client === \"zed\") {\n try {\n console.log(`Setting up MCP server for Zed in ${folderName}...`);\n const zedDir = path.join(targetPath, \".zed\");\n fs.ensureDirSync(zedDir);\n\n const zedConfig = {\n context_servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(zedDir, \"settings.json\"), zedConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Zed in ${folderName}/.zed/settings.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Zed:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Cursor\n if (client === \"cursor\") {\n try {\n console.log(`Setting up MCP server for Cursor in ${folderName}...`);\n const cursorDir = path.join(targetPath, \".cursor\");\n fs.ensureDirSync(cursorDir);\n\n const cursorConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(cursorDir, \"mcp.json\"), cursorConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Cursor in ${folderName}/.cursor/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Cursor:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n\n // Handle Claude Code\n if (client === \"claude-code\") {\n try {\n console.log(`Setting up MCP server for Claude Code in ${folderName}...`);\n\n const mcpConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n type: \"http\",\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(targetPath, \".mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`✅ MCP server configured for Claude Code in ${folderName}/.mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Claude Code:`, error);\n console.log(\"See https://docs.agentmark.co/agentmark/further_reference/agentmark-mcp for setup instructions.\");\n }\n return;\n }\n};\n\n\nexport const createExampleApp = async (\n client: string,\n targetPath: string = \".\",\n apiKey: string = \"\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n try {\n const modelProvider = 'openai';\n const model = 'gpt-4o';\n console.log(\"Creating Agent Mark example app...\");\n\n // Keep ./ prefix for display in messages\n const folderName = targetPath;\n\n // Create directory structure\n fs.ensureDirSync(`${targetPath}/agentmark`);\n\n setupMCPServer(client, targetPath);\n\n // Create example prompts\n createExamplePrompts(model, targetPath, adapter);\n console.log(`✅ Example prompts and datasets created in ${folderName}/agentmark/`);\n\n // Create user client config at project root\n // Prefer TS for dev ergonomics\n const langModels = Providers[modelProvider as keyof typeof Providers].languageModels.slice(0, 1);\n fs.writeFileSync(\n `${targetPath}/agentmark.client.ts`,\n getClientConfigContent({ provider: modelProvider, languageModels: langModels, adapter, deploymentMode })\n );\n\n // Create .env file\n fs.writeFileSync(`${targetPath}/.env`, getEnvFileContent(modelProvider, apiKey));\n\n // Create .gitignore\n const gitignore = ['node_modules', '.env', '*.agentmark-outputs/', '.agentmark', 'dist'].join('\\n');\n fs.writeFileSync(`${targetPath}/.gitignore`, gitignore);\n\n // Create the main application file\n fs.writeFileSync(\n `${targetPath}/index.ts`,\n getIndexFileContent(adapter)\n );\n\n // Create tsconfig.json\n fs.writeJsonSync(`${targetPath}/tsconfig.json`, getTsConfigContent(), { spaces: 2 });\n\n // Setup package.json and install dependencies\n setupPackageJson(targetPath, deploymentMode);\n installDependencies(modelProvider, targetPath, adapter, deploymentMode);\n\n // Generate types file using the type generation library\n console.log(\"Generating types from prompts...\");\n try {\n const agentmarkDir = path.join(targetPath, 'agentmark');\n const prompts = await fetchPromptsFrontmatter({ rootDir: agentmarkDir });\n const typeDefinitions = await generateTypeDefinitions(prompts);\n fs.writeFileSync(`${targetPath}/agentmark.types.ts`, typeDefinitions);\n } catch (error) {\n console.warn(\"Warning: Could not generate types automatically:\", error);\n console.log(\"You can generate types later by running: npx agentmark generate-types --root-dir agentmark\");\n // Create a placeholder types file\n fs.writeFileSync(`${targetPath}/agentmark.types.ts`, `// Auto-generated types from AgentMark\\n// Run 'npx agentmark generate-types --root-dir agentmark' to generate types\\nexport default interface AgentmarkTypes {}\\n`);\n }\n\n // Create .agentmark directory and dev-entry.ts\n console.log(\"Creating development server entry point...\");\n const agentmarkInternalDir = path.join(targetPath, '.agentmark');\n fs.ensureDirSync(agentmarkInternalDir);\n\n // Get adapter-specific values from config\n const adapterConfig = getAdapterConfig(adapter, modelProvider);\n const { webhookHandler } = adapterConfig.classes;\n\n const devEntryContent = `// Auto-generated webhook server entry point\n// To customize, create a dev-server.ts file in your project root\n\nimport { createWebhookServer } from '@agentmark-ai/cli/runner-server';\nimport { ${webhookHandler} } from '${adapterConfig.package}/runner';\nimport { AgentMarkSDK } from '@agentmark-ai/sdk';\nimport path from 'path';\n\nasync function main() {\n const args = process.argv.slice(2);\n const webhookPortArg = args.find(arg => arg.startsWith('--webhook-port='));\n const apiServerPortArg = args.find(arg => arg.startsWith('--api-server-port='));\n\n const webhookPort = webhookPortArg ? parseInt(webhookPortArg.split('=')[1]) : 9417;\n const apiServerPort = apiServerPortArg ? parseInt(apiServerPortArg.split('=')[1]) : 9418;\n const apiServerUrl = \\`http://localhost:\\${apiServerPort}\\`;\n\n // Set environment for development mode before importing client\n process.env.NODE_ENV = 'development';\n process.env.AGENTMARK_BASE_URL = apiServerUrl;\n\n // Now import client - it will pick up the dev environment\n const { client } = await import('../agentmark.client.js');\n\n // Initialize OpenTelemetry tracing to export traces to the API server\n const sdk = new AgentMarkSDK({\n apiKey: '',\n appId: '',\n baseUrl: apiServerUrl,\n });\n sdk.initTracing({ disableBatch: true });\n\n const handler = new ${webhookHandler}(client as any);\n const templatesDirectory = path.join(process.cwd(), 'agentmark');\n\n await createWebhookServer({\n port: webhookPort,\n handler,\n apiServerUrl,\n templatesDirectory\n });\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n`;\n\n fs.writeFileSync(path.join(agentmarkInternalDir, 'dev-entry.ts'), devEntryContent);\n\n // Success message\n console.log(\"\\n✅ Agentmark initialization completed successfully!\");\n\n console.log(\n `\n █████╗ ██████╗ ███████╗███╗ ██╗████████╗███╗ ███╗ █████╗ ██████╗ ██╗ ██╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝████╗ ████║██╔══██╗██╔══██╗██║ ██╔╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ██╔████╔██║███████║██████╔╝█████╔╝\n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██║╚██╔╝██║██╔══██║██╔══██╗██╔═██╗\n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ██║ ╚═╝ ██║██║ ██║██║ ██║██║ ██╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝\n\n `\n );\n\n console.log('\\n' + '═'.repeat(70));\n console.log('Next Steps');\n console.log('═'.repeat(70));\n\n // Simplified instructions - always just \"npm run dev\"\n console.log('\\n Get Started:');\n if (folderName !== \".\" && folderName !== \"./\") {\n console.log(` $ cd ${folderName}`);\n }\n console.log(' $ npm run dev\\n');\n\n console.log('─'.repeat(70));\n console.log('Resources');\n console.log('─'.repeat(70));\n console.log(' Documentation: https://docs.agentmark.co');\n console.log('═'.repeat(70) + '\\n');\n } catch (error) {\n console.error(\"Error creating example app:\", error);\n throw error;\n }\n};\n","export const Providers = {\n openai: {\n label: \"OpenAI\",\n languageModels: [\n \"gpt-4o\",\n \"gpt-4o-mini\",\n \"gpt-4\",\n \"gpt-5\",\n \"gpt-4-turbo\",\n \"gpt-3.5-turbo\",\n ],\n imageModels: [\"dall-e-3\", \"dall-e-2\"],\n speechModels: [\"tts-1\", \"tts-1-hd\"],\n },\n};\n","export interface AdapterConfig {\n /** npm package name for the adapter */\n package: string;\n /** Additional npm packages required by this adapter */\n dependencies: string[];\n /** Class names used in generated code */\n classes: {\n modelRegistry: string;\n toolRegistry: string;\n webhookHandler: string;\n };\n}\n\nexport const createAdapterConfig = (\n provider: string\n): Record<string, AdapterConfig> => {\n return {\n \"ai-sdk\": {\n package: \"@agentmark-ai/ai-sdk-v5-adapter\",\n dependencies: [\"ai@^5\", `@ai-sdk/${provider}@^2`],\n classes: {\n modelRegistry: \"VercelAIModelRegistry\",\n toolRegistry: \"VercelAIToolRegistry\",\n webhookHandler: \"VercelAdapterWebhookHandler\",\n },\n },\n mastra: {\n package: \"@agentmark-ai/mastra-v0-adapter\",\n dependencies: [\n \"@mastra/core@<0.20.0\",\n \"@mastra/mcp@<0.13.4\",\n `@ai-sdk/${provider}@<2`,\n ],\n classes: {\n modelRegistry: \"MastraModelRegistry\",\n toolRegistry: \"MastraToolRegistry\",\n webhookHandler: \"MastraAdapterWebhookHandler\",\n },\n },\n };\n};\n\nexport function getAdapterConfig(\n adapter: string,\n provider: string\n): AdapterConfig {\n const config = createAdapterConfig(provider)[adapter];\n if (!config) {\n throw new Error(\n `Unknown adapter: ${adapter}. Available adapters: ${Object.keys(\n createAdapterConfig(provider)\n ).join(\", \")}`\n );\n }\n return config;\n}\n","export const getIndexFileContent = (adapter: string = \"ai-sdk\"): string => {\n if (adapter === \"mastra\") {\n return `import \"dotenv/config\";\nimport { Agent } from \"@mastra/core/agent\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n trace_name: \"customer-support\",\n user_id: \"user-123\",\n session_id: \"session-123\",\n session_name: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const agentConfig = await prompt.formatAgent({\n options: {\n telemetry,\n },\n });\n\n const [messages, generateOptions] = await agentConfig.formatMessages({\n props: {\n customer_question: customer_message,\n },\n });\n\n const agent = new Agent(agentConfig);\n const response = await agent.generate(messages, generateOptions);\n\n return (response as any).text || (response as any).content || String(response);\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n } else {\n return `import \"dotenv/config\";\nimport { generateText } from \"ai\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n trace_name: \"customer-support\",\n user_id: \"user-123\",\n session_id: \"session-123\",\n session_name: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const vercelInput = await prompt.format({\n props: {\n customer_question: customer_message,\n },\n telemetry,\n });\n\n const resp = await generateText(vercelInput);\n\n return resp.text;\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n }\n}; ","export const getEnvFileContent = (\n _modelProvider: string,\n apiKey: string = ''\n): string => {\n const apiKeyValue = apiKey || 'your_api_key_here';\n\n return `# Cloud deployment: Set these environment variables\n# AGENTMARK_BASE_URL=https://api.agentmark.co\n# AGENTMARK_API_KEY=your_agentmark_api_key\n# AGENTMARK_APP_ID=your_agentmark_app_id\n# Learn more: https://docs.agentmark.co/platform/getting_started/quickstart\n\nOPENAI_API_KEY=${apiKeyValue}\n`;\n};\n","import fs from \"fs-extra\";\nimport { execSync, execFileSync } from \"child_process\";\nimport { getAdapterConfig } from \"./adapters.js\";\n\nexport const setupPackageJson = (targetPath: string = \".\", deploymentMode: \"cloud\" | \"static\" = \"cloud\") => {\n const packageJsonPath = `${targetPath}/package.json`;\n\n if (!fs.existsSync(packageJsonPath)) {\n console.log(\"Creating package.json...\");\n execSync(\"npm init -y\", { cwd: targetPath });\n }\n\n // Update the created package.json with additional information\n const pkgJson = fs.readJsonSync(packageJsonPath);\n pkgJson.name =\n pkgJson.name === \"test\" || !pkgJson.name\n ? \"agentmark-example-app\"\n : pkgJson.name;\n pkgJson.description =\n pkgJson.description || \"A simple Node.js app using the Agentmark SDK\";\n\n // All platforms use \"agentmark dev\" which runs their respective dev-entry.ts\n const devScript = \"agentmark dev\";\n\n // Base scripts for all modes\n const scripts: Record<string, string> = {\n ...pkgJson.scripts,\n \"demo\": \"npx tsx index.ts\",\n \"dev\": devScript,\n \"prompt\": \"agentmark run-prompt\",\n \"experiment\": \"agentmark run-experiment\",\n };\n\n // For static/self-hosted mode, add the build script\n if (deploymentMode === \"static\") {\n scripts[\"build\"] = \"agentmark build --out dist/agentmark\";\n }\n\n pkgJson.scripts = scripts;\n\n // Add overrides to fix vulnerabilities in transitive dependencies\n // localtunnel (used by @agentmark-ai/cli) depends on axios@0.21.4 which has vulnerabilities\n pkgJson.overrides = {\n ...pkgJson.overrides,\n \"axios\": \"^1.7.9\"\n };\n\n fs.writeJsonSync(packageJsonPath, pkgJson, { spaces: 2 });\n};\n\nexport const installDependencies = (\n modelProvider: string,\n targetPath: string = \".\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n console.log(\"Installing required packages...\");\n console.log(\"This might take a moment...\");\n\n const adapterConfig = getAdapterConfig(adapter, modelProvider);\n\n try {\n // Install TypeScript, ts-node, CLI, and other dev dependencies\n // CLI needs to be a devDep so dev-entry.ts can import from @agentmark-ai/cli/runner-server\n const devDepsCmd = \"npm install --save-dev typescript ts-node @types/node @agentmark-ai/cli --legacy-peer-deps\";\n\n execSync(devDepsCmd, {\n stdio: \"inherit\",\n cwd: targetPath,\n });\n\n // Install the common packages\n // SDK is required for both local (connects to agentmark serve) and cloud (connects to API)\n // Loader packages are imported directly - ApiLoader always needed, FileLoader only for static mode\n const loaderPackages = deploymentMode === \"static\"\n ? [\"@agentmark-ai/loader-api\", \"@agentmark-ai/loader-file\"]\n : [\"@agentmark-ai/loader-api\"];\n\n const installArgs = [\n \"install\",\n \"dotenv\",\n \"@agentmark-ai/prompt-core\",\n \"@agentmark-ai/sdk\",\n adapterConfig.package,\n ...loaderPackages,\n ...adapterConfig.dependencies,\n \"--legacy-peer-deps\",\n ];\n\n execFileSync(\"npm\", installArgs, { stdio: \"inherit\", cwd: targetPath });\n\n console.log(\"Packages installed successfully!\");\n } catch (error) {\n console.error(\"Error installing packages:\", error);\n throw new Error(\n \"Failed to install required packages. Please check your network connection and try again.\"\n );\n }\n};\n","export const getTsConfigContent = (): object => {\n return {\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true\n }\n };\n}; ","export const getAnimalDrawingPrompt = (): string => {\n return `---\nname: animal-drawing\nimage_config:\n model_name: dall-e-3\n num_images: 1\n size: 1024x1024\n aspect_ratio: 1:1\ntest_settings:\n dataset: animal.jsonl\n props:\n animal: \"cat\"\n---\n\n<ImagePrompt>\nDraw a hyper-realistic picture of a {props.animal}\n</ImagePrompt>`;\n};","export const getCustomerSupportPrompt = (model: string): string => {\n return `---\nname: customer-support-agent\ntext_config:\n model_name: ${model}\n max_calls: 2\n tools:\n search_knowledgebase:\n description: Search the company knowledgebase for information about shipping, warranty, and returns policies.\n parameters:\n type: object\n properties:\n query:\n type: string\n description: The search query to find relevant information\n required: [query]\ntest_settings:\n dataset: customer-query.jsonl\n props:\n customer_question: \"I'm having trouble with my order. How long does shipping take?\"\ninput_schema:\n type: object\n properties:\n customer_question:\n type: string\n description: \"The customer's question\"\n required:\n - customer_question\n---\n\n<System>\nYou are a customer service agent for a company that sells products online. You are given a customer's question and you need to respond to the customer. You need to be friendly, professional, and helpful.\n\nYou have access to the following tool:\n- search_knowledgebase: Search the company knowledgebase for information about shipping, warranty, and returns. Use this when customers ask about these topics.\n</System>\n\n<User>{props.customer_question}</User>`;\n};","export const getPartyPlannerPrompt = (model: string): string => {\n return `---\nname: party-planner\nobject_config:\n model_name: ${model}\n schema:\n type: object\n properties:\n names:\n type: array\n description: \"List of names of people attending the party.\"\n items:\n type: string\n required:\n - names\ntest_settings:\n dataset: party.jsonl\n evals:\n - exact_match_json\n props:\n party_text: \"We're having a party with Alice, Bob, and Carol.\"\ninput_schema:\n type: object\n properties:\n party_text:\n type: string\n description: \"A block of text describing the upcoming party and attendees.\"\n required:\n - party_text\n---\n\n<System>\nExtract the names of all people attending the party from the following text. Respond with a list of names only.\n</System>\n\n<User>\nText: {props.party_text}\n</User>`;\n};","export const getStoryTellerPrompt = (): string => {\n return `---\nname: story-teller\nspeech_config:\n model_name: tts-1-hd\n voice: \"nova\"\n speed: 1.0\n output_format: \"mp3\"\ntest_settings:\n dataset: story.jsonl\n props:\n story: \"Once upon a time, there was a cat who loved to play with a ball.\"\n---\n\n<System>\nYou are a storyteller for children. Make sure your story is engaging and interesting.\n</System>\n\n<SpeechPrompt>\n- {props.story}\n</SpeechPrompt>`;\n};","export const getAnimalDataset = (): string => {\n return `{\"input\": {\"animal\": \"cat\"}, \"expected_output\": \"A realistic picture of a cat\"}\n{\"input\": {\"animal\": \"dog\"}, \"expected_output\": \"A realistic picture of a dog\"}\n{\"input\": {\"animal\": \"bird\"}, \"expected_output\": \"A realistic picture of a bird\"}`;\n};\n\nexport const getCustomerQueryDataset = (): string => {\n return `{\"input\": {\"customer_question\": \"My package hasn't arrived yet. Can you help me track it?\"}}\n{\"input\": {\"customer_question\": \"I received the wrong item in my order. What should I do?\"}}\n{\"input\": {\"customer_question\": \"How do I return a product that I purchased last week?\"}}`;\n};\n\nexport const getPartyDataset = (): string => {\n return `{\"input\": {\"party_text\": \"We're having a party with Alice, Bob, and Carol.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Alice\\\\\", \\\\\"Bob\\\\\", \\\\\"Carol\\\\\"]}\"}\n{\"input\": {\"party_text\": \"The guest list includes Dave, Emma, and Frank.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Dave\\\\\", \\\\\"Emma\\\\\", \\\\\"Frank\\\\\"]}\"}\n{\"input\": {\"party_text\": \"Join us for a celebration with Grace, Henry, and Isla.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Grace\\\\\", \\\\\"Henry\\\\\", \\\\\"Isla\\\\\"]}\"}`;\n};\n\nexport const getStoryDataset = (): string => {\n return `{\"input\": {\"story\": \"Once upon a time, the Moon woke up and found her glow missing! She floated around the sky asking stars, clouds, and even comets if they'd seen her light. It wasn't until she peeked into a mountain lake that she saw her glow shining back—hidden in her own reflection! Laughing, she realized she had never lost it—it was with her all along, just hiding beneath a cloudy sky.\"}}\n{\"input\": {\"story\": \"Benny was no ordinary banana—he dreamed of becoming a superhero. One day, when a monkey slipped in the jungle and cried for help, Benny rolled into action, dodging vines and swinging from branches using his peel like a lasso. The monkey was saved, and from that day on, Benny was known as \\\\\"The Peel of Justice,\\\\\" the bravest fruit in the whole rainforest.\"}}\n{\"input\": {\"story\": \"In the town of Maplebrook, there was a library that whispered stories when no one was looking. Curious little Nia tiptoed in one rainy day and heard the books giggling softly. She opened one called The Secret Tunnel, and to her surprise, it sucked her in! She found herself riding a dragon through glittering caves. When she returned, the book winked shut—waiting for its next reader to listen.\"}}`;\n};","import fs from 'fs-extra';\nimport { getAnimalDrawingPrompt } from './animal-drawing-prompt.js';\nimport { getCustomerSupportPrompt } from './customer-support-prompt.js';\nimport { getPartyPlannerPrompt } from './party-planner-prompt.js';\nimport { getStoryTellerPrompt } from './story-teller-prompt.js';\nimport { getAnimalDataset, getCustomerQueryDataset, getPartyDataset, getStoryDataset } from './datasets.js';\n\nexport const createExamplePrompts = (model: string, targetPath: string = \".\", adapter: string = \"ai-sdk\") => {\n // Ensure the templates directory exists\n fs.ensureDirSync(`${targetPath}/agentmark`);\n \n // Create animal drawing prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const animalDrawingPrompt = getAnimalDrawingPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/animal-drawing.prompt.mdx`, animalDrawingPrompt);\n const animalDataset = getAnimalDataset();\n fs.writeFileSync(`${targetPath}/agentmark/animal.jsonl`, animalDataset);\n }\n \n // Create customer support prompt and dataset\n const customerSupportPrompt = getCustomerSupportPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/customer-support-agent.prompt.mdx`, customerSupportPrompt);\n const customerQueryDataset = getCustomerQueryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/customer-query.jsonl`, customerQueryDataset);\n \n // Create party planner prompt and dataset\n const partyPlannerPrompt = getPartyPlannerPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/party-planner.prompt.mdx`, partyPlannerPrompt);\n const partyDataset = getPartyDataset();\n fs.writeFileSync(`${targetPath}/agentmark/party.jsonl`, partyDataset);\n \n // Create story teller prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const storyTellerPrompt = getStoryTellerPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/story-teller.prompt.mdx`, storyTellerPrompt);\n const storyDataset = getStoryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/story.jsonl`, storyDataset);\n }\n};","import { getAdapterConfig } from \"./adapters.js\";\n\nexport const getClientConfigContent = (options: { provider: string; languageModels: string[]; adapter: string; deploymentMode?: \"cloud\" | \"static\" }) => {\n const { provider, languageModels, adapter, deploymentMode = \"cloud\" } = options;\n const adapterConfig = getAdapterConfig(adapter, provider);\n const { modelRegistry, toolRegistry } = adapterConfig.classes;\n\n const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;\n\n const extraModelRegs = provider === 'openai'\n ? `.registerModels([\"dall-e-3\"], (name: string) => ${provider}.image(name))\n .registerModels([\"tts-1-hd\"], (name: string) => ${provider}.speech(name))`\n : '';\n\n // Import loaders from dedicated packages\n const loaderImport = deploymentMode === \"cloud\"\n ? `import { ApiLoader } from \"@agentmark-ai/loader-api\";`\n : `import { ApiLoader } from \"@agentmark-ai/loader-api\";\nimport { FileLoader } from \"@agentmark-ai/loader-file\";`;\n\n const loaderSetup = deploymentMode === \"cloud\"\n ? ` // ApiLoader works for both development and production\n // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost\n // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud\n const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : ApiLoader.cloud({\n apiKey: process.env.AGENTMARK_API_KEY!,\n appId: process.env.AGENTMARK_APP_ID!,\n });`\n : ` const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : new FileLoader('./dist/agentmark');`;\n\n return `// agentmark.client.ts\nimport path from 'node:path';\nimport dotenv from 'dotenv';\ndotenv.config({ path: path.resolve(__dirname, '.env') });\nimport { createAgentMarkClient, ${modelRegistry}, ${toolRegistry}, EvalRegistry } from \"${adapterConfig.package}\";\n${loaderImport}\nimport AgentMarkTypes, { Tools } from './agentmark.types';\n${providerImport}\n\nfunction createModelRegistry() {\n const modelRegistry = new ${modelRegistry}()\n .registerModels(${JSON.stringify(languageModels)}, (name: string) => ${provider}(name))\n ${extraModelRegs};\n return modelRegistry;\n}\n\nfunction createToolRegistry() {\n const toolRegistry = new ${toolRegistry}<Tools>()\n .register('search_knowledgebase', async ({ query }) => {\n // Simulate search delay\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Return all three knowledge base articles\n // The LLM will select the relevant one based on the query\n return {\n articles: [\n { topic: 'shipping', content: 'Standard shipping takes 3–5 business days.' },\n { topic: 'warranty', content: 'All products include a 1-year limited warranty.' },\n { topic: 'returns', content: 'You can return items within 30 days of delivery.' }\n ]\n };\n });\n return toolRegistry;\n}\n\nfunction createEvalRegistry() {\n const evalRegistry = new EvalRegistry()\n .register('exact_match_json', ({ output, expectedOutput }) => {\n if (!expectedOutput) {\n return { score: 0, label: 'error', reason: 'No expected output provided', passed: false };\n }\n try {\n const ok = JSON.stringify(output) === JSON.stringify(JSON.parse(expectedOutput));\n return {\n score: ok ? 1 : 0,\n label: ok ? 'correct' : 'incorrect',\n reason: ok ? 'Exact match' : 'Mismatch',\n passed: ok\n };\n } catch (e) {\n return { score: 0, label: 'error', reason: 'Failed to parse expected output as JSON', passed: false };\n }\n });\n return evalRegistry;\n}\n\nfunction createClient() {\n${loaderSetup}\n const modelRegistry = createModelRegistry();\n const toolRegistry = createToolRegistry();\n const evalRegistry = createEvalRegistry();\n return createAgentMarkClient<AgentMarkTypes, typeof toolRegistry>({ loader, modelRegistry, toolRegistry, evalRegistry });\n}\n\nexport const client = createClient();\n`;\n};\n","import fs from \"fs-extra\";\nimport * as path from \"path\";\nimport {\n createExamplePrompts,\n} from \"./templates/index.js\";\n\nconst setupMCPServer = (client: string, targetPath: string) => {\n if (client === \"skip\") {\n console.log(\"Skipping MCP server setup.\");\n return;\n }\n\n const folderName = targetPath;\n\n // Handle VS Code\n if (client === \"vscode\") {\n try {\n console.log(`Setting up MCP server for VS Code in ${folderName}...`);\n const vscodeDir = path.join(targetPath, \".vscode\");\n fs.ensureDirSync(vscodeDir);\n\n const mcpConfig = {\n servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(vscodeDir, \"mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`MCP server configured for VS Code in ${folderName}/.vscode/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for VS Code:`, error);\n }\n return;\n }\n\n // Handle Zed\n if (client === \"zed\") {\n try {\n console.log(`Setting up MCP server for Zed in ${folderName}...`);\n const zedDir = path.join(targetPath, \".zed\");\n fs.ensureDirSync(zedDir);\n\n const zedConfig = {\n context_servers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(zedDir, \"settings.json\"), zedConfig, { spaces: 2 });\n console.log(`MCP server configured for Zed in ${folderName}/.zed/settings.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Zed:`, error);\n }\n return;\n }\n\n // Handle Cursor\n if (client === \"cursor\") {\n try {\n console.log(`Setting up MCP server for Cursor in ${folderName}...`);\n const cursorDir = path.join(targetPath, \".cursor\");\n fs.ensureDirSync(cursorDir);\n\n const cursorConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(cursorDir, \"mcp.json\"), cursorConfig, { spaces: 2 });\n console.log(`MCP server configured for Cursor in ${folderName}/.cursor/mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Cursor:`, error);\n }\n return;\n }\n\n // Handle Claude Code\n if (client === \"claude-code\") {\n try {\n console.log(`Setting up MCP server for Claude Code in ${folderName}...`);\n\n const mcpConfig = {\n mcpServers: {\n \"agentmark-docs\": {\n type: \"http\",\n url: \"https://docs.agentmark.co/mcp\"\n }\n }\n };\n\n fs.writeJsonSync(path.join(targetPath, \".mcp.json\"), mcpConfig, { spaces: 2 });\n console.log(`MCP server configured for Claude Code in ${folderName}/.mcp.json`);\n } catch (error) {\n console.warn(`Warning: Could not set up MCP server for Claude Code:`, error);\n }\n return;\n }\n};\n\nconst getPyprojectContent = (projectName: string): string => {\n return `[project]\nname = \"${projectName}\"\nversion = \"0.1.0\"\ndescription = \"An AgentMark application using Pydantic AI\"\nrequires-python = \">=3.12\"\ndependencies = [\n \"agentmark-pydantic-ai>=0.1.0\",\n \"agentmark-prompt-core>=0.1.0\",\n \"python-dotenv>=1.0.0\",\n \"pydantic-ai[openai]>=0.1.0\",\n]\n\n[project.optional-dependencies]\ndev = [\n \"pytest>=7.0\",\n \"pytest-asyncio>=0.21\",\n \"mypy>=1.0\",\n]\nanthropic = [\"pydantic-ai[anthropic]\"]\ngemini = [\"pydantic-ai[gemini]\"]\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.pytest.ini_options]\nasyncio_mode = \"auto\"\n\n[tool.mypy]\nstrict = true\n`;\n};\n\nconst getAgentmarkClientContent = (_deploymentMode: \"cloud\" | \"static\"): string => {\n return `\"\"\"AgentMark client configuration.\n\nThis file configures the AgentMark client with Pydantic AI adapter.\nCustomize the model registry and tool registry as needed.\n\"\"\"\n\nimport os\nfrom pathlib import Path\nfrom dotenv import load_dotenv\n\nfrom agentmark.prompt_core import FileLoader\nfrom agentmark_pydantic_ai_v0 import (\n create_pydantic_ai_client,\n create_default_model_registry,\n PydanticAIToolRegistry,\n)\n\n# Load environment variables\nload_dotenv()\n\n# Configure model registry with default mappings\n# Supports: gpt-*, claude-*, gemini-*, etc.\nmodel_registry = create_default_model_registry()\n\n# Configure tool registry for custom tools\ntool_registry = PydanticAIToolRegistry()\n\n# Example tool registration:\n# @tool_registry.register(\"search\")\n# async def search_web(args: dict, ctx: dict | None) -> str:\n# query = args[\"query\"]\n# return f\"Search results for: {query}\"\n\n# Create file loader for local development\n# Uses the project root as base directory for resolving relative paths\nproject_root = Path(__file__).parent.resolve()\nloader = FileLoader(base_dir=str(project_root))\n\n# Create the client\nclient = create_pydantic_ai_client(\n model_registry=model_registry,\n tool_registry=tool_registry,\n loader=loader,\n)\n\n__all__ = [\"client\"]\n`;\n};\n\nconst getMainPyContent = (): string => {\n return `\"\"\"Example usage of AgentMark with Pydantic AI.\n\nRun with: python main.py\n\"\"\"\n\nimport asyncio\nimport json\nfrom pathlib import Path\n\nfrom agentmark_pydantic_ai_v0 import run_text_prompt\nfrom agentmark_client import client\n\n\nasync def main():\n \"\"\"Run the party planner prompt.\"\"\"\n # Load the prompt AST (in production, use the API loader)\n prompt_path = Path(\"agentmark/party-planner.prompt.mdx.json\")\n\n if not prompt_path.exists():\n print(\"Prompt file not found. Run 'agentmark build' first.\")\n return\n\n with open(prompt_path) as f:\n ast = json.load(f)\n\n # Load and format the prompt\n prompt = await client.load_text_prompt(ast)\n params = await prompt.format(props={\n \"numberOfGuests\": 10,\n \"theme\": \"80s disco\",\n \"dietaryRestrictions\": [\"vegetarian\", \"gluten-free\"],\n })\n\n # Execute the prompt\n print(\"Running party planner prompt...\")\n result = await run_text_prompt(params)\n\n print(\"\\\\n\" + \"=\" * 50)\n print(\"Party Plan:\")\n print(\"=\" * 50)\n print(result.output)\n print(\"\\\\n\" + \"-\" * 50)\n print(f\"Tokens used: {result.usage.total_tokens}\")\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n`;\n};\n\nconst getDevServerContent = (): string => {\n return `\"\"\"Auto-generated webhook server for AgentMark development.\n\nThis server is started by 'npm run dev' (agentmark dev) and handles\nprompt execution requests from the CLI.\n\"\"\"\n\nimport argparse\nimport sys\nfrom pathlib import Path\n\n# Add parent directory to path for imports\nsys.path.insert(0, str(Path(__file__).parent.parent))\n\nfrom agentmark_pydantic_ai_v0 import create_webhook_server\nfrom agentmark_client import client\n\n\nif __name__ == \"__main__\":\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--webhook-port\", type=int, default=9417)\n parser.add_argument(\"--api-server-port\", type=int, default=9418)\n args = parser.parse_args()\n\n create_webhook_server(client, args.webhook_port, args.api_server_port)\n`;\n};\n\nconst getEnvContent = (apiKey: string): string => {\n return `# OpenAI API Key\nOPENAI_API_KEY=${apiKey}\n\n# For Anthropic models, add:\n# ANTHROPIC_API_KEY=your-key-here\n\n# For Google Gemini models, add:\n# GOOGLE_API_KEY=your-key-here\n`;\n};\n\nconst getGitignoreContent = (): string => {\n return `# Python\n__pycache__/\n*.py[cod]\n*$py.class\n.venv/\nvenv/\n.env\n\n# AgentMark\n*.agentmark-outputs/\n.agentmark/\n\n# IDE\n.idea/\n.vscode/\n*.swp\n\n# Build\ndist/\nbuild/\n*.egg-info/\n\n# Testing\n.pytest_cache/\n.coverage\nhtmlcov/\n`;\n};\n\nexport const createPythonApp = async (\n client: string,\n targetPath: string = \".\",\n apiKey: string = \"\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n try {\n const model = 'gpt-4o';\n console.log(\"Creating AgentMark Python app with Pydantic AI...\");\n\n const folderName = targetPath;\n\n // Create directory structure\n fs.ensureDirSync(`${targetPath}/agentmark`);\n\n setupMCPServer(client, targetPath);\n\n // Create example prompts (reuse from TypeScript)\n createExamplePrompts(model, targetPath, \"pydantic-ai\");\n console.log(`Example prompts and datasets created in ${folderName}/agentmark/`);\n\n // Create pyproject.toml\n const projectName = path.basename(targetPath).replace(/[^a-zA-Z0-9_-]/g, \"-\");\n fs.writeFileSync(`${targetPath}/pyproject.toml`, getPyprojectContent(projectName));\n\n // Create agentmark_client.py\n fs.writeFileSync(`${targetPath}/agentmark_client.py`, getAgentmarkClientContent(deploymentMode));\n\n // Create main.py\n fs.writeFileSync(`${targetPath}/main.py`, getMainPyContent());\n\n // Create .env file\n fs.writeFileSync(`${targetPath}/.env`, getEnvContent(apiKey));\n\n // Create .gitignore\n fs.writeFileSync(`${targetPath}/.gitignore`, getGitignoreContent());\n\n // Create .agentmark directory with dev_server.py\n const agentmarkInternalDir = path.join(targetPath, '.agentmark');\n fs.ensureDirSync(agentmarkInternalDir);\n fs.writeFileSync(path.join(agentmarkInternalDir, 'dev_server.py'), getDevServerContent());\n\n // Install Python dependencies\n console.log(\"Setting up Python environment...\");\n console.log(\"Note: You'll need to set up a virtual environment and install dependencies.\");\n console.log(\"\");\n\n // Success message\n console.log(\"\\nAgentMark Python initialization completed successfully!\");\n\n console.log(\n `\n ██████╗ ██╗ ██╗████████╗██╗ ██╗ ██████╗ ███╗ ██╗\n ██╔══██╗╚██╗ ██╔╝╚══██╔══╝██║ ██║██╔═══██╗████╗ ██║\n ██████╔╝ ╚████╔╝ ██║ ███████║██║ ██║██╔██╗ ██║\n ██╔═══╝ ╚██╔╝ ██║ ██╔══██║██║ ██║██║╚██╗██║\n ██║ ██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║\n ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝\n + AgentMark\n `\n );\n\n console.log('\\n' + '═'.repeat(70));\n console.log('Next Steps');\n console.log('═'.repeat(70));\n\n console.log('\\n Get Started:');\n if (folderName !== \".\" && folderName !== \"./\") {\n console.log(` $ cd ${folderName}`);\n }\n console.log(' $ python -m venv .venv');\n console.log(' $ source .venv/bin/activate # On Windows: .venv\\\\Scripts\\\\activate');\n console.log(' $ pip install -e \".[dev]\"');\n console.log(' $ npm run dev\\n');\n\n console.log('─'.repeat(70));\n console.log('Resources');\n console.log('─'.repeat(70));\n console.log(' Documentation: https://docs.agentmark.co');\n console.log('═'.repeat(70) + '\\n');\n } catch (error) {\n console.error(\"Error creating Python app:\", error);\n throw error;\n }\n};\n"],"mappings":"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","names":["fs","fs","fs","fs","fs","prompts","fs","path","setupMCPServer","fs","fs"]}
@@ -2,7 +2,7 @@
2
2
  var createAdapterConfig = (provider) => {
3
3
  return {
4
4
  "ai-sdk": {
5
- package: "@agentmark/ai-sdk-v5-adapter",
5
+ package: "@agentmark-ai/ai-sdk-v5-adapter",
6
6
  dependencies: ["ai@^5", `@ai-sdk/${provider}@^2`],
7
7
  classes: {
8
8
  modelRegistry: "VercelAIModelRegistry",
@@ -11,7 +11,7 @@ var createAdapterConfig = (provider) => {
11
11
  }
12
12
  },
13
13
  mastra: {
14
- package: "@agentmark/mastra-v0-adapter",
14
+ package: "@agentmark-ai/mastra-v0-adapter",
15
15
  dependencies: [
16
16
  "@mastra/core@<0.20.0",
17
17
  "@mastra/mcp@<0.13.4",
@@ -47,11 +47,10 @@ import { client } from "./agentmark.client";
47
47
  const telemetry = {
48
48
  isEnabled: true,
49
49
  metadata: {
50
- traceId: "trace-123",
51
- traceName: "customer-support",
52
- userId: "user-123",
53
- sessionId: "session-123",
54
- sessionName: "my-first-session",
50
+ trace_name: "customer-support",
51
+ user_id: "user-123",
52
+ session_id: "session-123",
53
+ session_name: "my-first-session",
55
54
  },
56
55
  };
57
56
 
@@ -95,11 +94,10 @@ import { client } from "./agentmark.client";
95
94
  const telemetry = {
96
95
  isEnabled: true,
97
96
  metadata: {
98
- traceId: "trace-123",
99
- traceName: "customer-support",
100
- userId: "user-123",
101
- sessionId: "session-123",
102
- sessionName: "my-first-session",
97
+ trace_name: "customer-support",
98
+ user_id: "user-123",
99
+ session_id: "session-123",
100
+ session_name: "my-first-session",
103
101
  },
104
102
  };
105
103
 
@@ -180,17 +178,17 @@ var installDependencies = (modelProvider, targetPath = ".", adapter = "ai-sdk",
180
178
  console.log("This might take a moment...");
181
179
  const adapterConfig = getAdapterConfig(adapter, modelProvider);
182
180
  try {
183
- const devDepsCmd = "npm install --save-dev typescript ts-node @types/node @agentmark/cli --legacy-peer-deps";
181
+ const devDepsCmd = "npm install --save-dev typescript ts-node @types/node @agentmark-ai/cli --legacy-peer-deps";
184
182
  execSync(devDepsCmd, {
185
183
  stdio: "inherit",
186
184
  cwd: targetPath
187
185
  });
188
- const loaderPackages = deploymentMode === "static" ? ["@agentmark/loader-api", "@agentmark/loader-file"] : ["@agentmark/loader-api"];
186
+ const loaderPackages = deploymentMode === "static" ? ["@agentmark-ai/loader-api", "@agentmark-ai/loader-file"] : ["@agentmark-ai/loader-api"];
189
187
  const installArgs = [
190
188
  "install",
191
189
  "dotenv",
192
- "@agentmark/prompt-core",
193
- "@agentmark/sdk",
190
+ "@agentmark-ai/prompt-core",
191
+ "@agentmark-ai/sdk",
194
192
  adapterConfig.package,
195
193
  ...loaderPackages,
196
194
  ...adapterConfig.dependencies,
@@ -403,8 +401,8 @@ var getClientConfigContent = (options) => {
403
401
  const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;
404
402
  const extraModelRegs = provider === "openai" ? `.registerModels(["dall-e-3"], (name: string) => ${provider}.image(name))
405
403
  .registerModels(["tts-1-hd"], (name: string) => ${provider}.speech(name))` : "";
406
- const loaderImport = deploymentMode === "cloud" ? `import { ApiLoader } from "@agentmark/loader-api";` : `import { ApiLoader } from "@agentmark/loader-api";
407
- import { FileLoader } from "@agentmark/loader-file";`;
404
+ const loaderImport = deploymentMode === "cloud" ? `import { ApiLoader } from "@agentmark-ai/loader-api";` : `import { ApiLoader } from "@agentmark-ai/loader-api";
405
+ import { FileLoader } from "@agentmark-ai/loader-file";`;
408
406
  const loaderSetup = deploymentMode === "cloud" ? ` // ApiLoader works for both development and production
409
407
  // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost
410
408
  // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/examples/templates/adapters.ts","../../../../src/utils/examples/templates/app-index.ts","../../../../src/utils/examples/templates/env.ts","../../../../src/utils/examples/templates/package-setup.ts","../../../../src/utils/examples/templates/tsconfig.ts","../../../../src/utils/examples/templates/animal-drawing-prompt.ts","../../../../src/utils/examples/templates/customer-support-prompt.ts","../../../../src/utils/examples/templates/party-planner-prompt.ts","../../../../src/utils/examples/templates/story-teller-prompt.ts","../../../../src/utils/examples/templates/datasets.ts","../../../../src/utils/examples/templates/example-prompts.ts","../../../../src/utils/examples/templates/user-client-config.ts"],"sourcesContent":["export interface AdapterConfig {\n /** npm package name for the adapter */\n package: string;\n /** Additional npm packages required by this adapter */\n dependencies: string[];\n /** Class names used in generated code */\n classes: {\n modelRegistry: string;\n toolRegistry: string;\n webhookHandler: string;\n };\n}\n\nexport const createAdapterConfig = (\n provider: string\n): Record<string, AdapterConfig> => {\n return {\n \"ai-sdk\": {\n package: \"@agentmark/ai-sdk-v5-adapter\",\n dependencies: [\"ai@^5\", `@ai-sdk/${provider}@^2`],\n classes: {\n modelRegistry: \"VercelAIModelRegistry\",\n toolRegistry: \"VercelAIToolRegistry\",\n webhookHandler: \"VercelAdapterWebhookHandler\",\n },\n },\n mastra: {\n package: \"@agentmark/mastra-v0-adapter\",\n dependencies: [\n \"@mastra/core@<0.20.0\",\n \"@mastra/mcp@<0.13.4\",\n `@ai-sdk/${provider}@<2`,\n ],\n classes: {\n modelRegistry: \"MastraModelRegistry\",\n toolRegistry: \"MastraToolRegistry\",\n webhookHandler: \"MastraAdapterWebhookHandler\",\n },\n },\n };\n};\n\nexport function getAdapterConfig(\n adapter: string,\n provider: string\n): AdapterConfig {\n const config = createAdapterConfig(provider)[adapter];\n if (!config) {\n throw new Error(\n `Unknown adapter: ${adapter}. Available adapters: ${Object.keys(\n createAdapterConfig(provider)\n ).join(\", \")}`\n );\n }\n return config;\n}\n","export const getIndexFileContent = (adapter: string = \"ai-sdk\"): string => {\n if (adapter === \"mastra\") {\n return `import \"dotenv/config\";\nimport { Agent } from \"@mastra/core/agent\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n traceId: \"trace-123\",\n traceName: \"customer-support\",\n userId: \"user-123\",\n sessionId: \"session-123\",\n sessionName: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const agentConfig = await prompt.formatAgent({\n options: {\n telemetry,\n },\n });\n\n const [messages, generateOptions] = await agentConfig.formatMessages({\n props: {\n customer_question: customer_message,\n },\n });\n\n const agent = new Agent(agentConfig);\n const response = await agent.generate(messages, generateOptions);\n\n return (response as any).text || (response as any).content || String(response);\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n } else {\n return `import \"dotenv/config\";\nimport { generateText } from \"ai\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n traceId: \"trace-123\",\n traceName: \"customer-support\",\n userId: \"user-123\",\n sessionId: \"session-123\",\n sessionName: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const vercelInput = await prompt.format({\n props: {\n customer_question: customer_message,\n },\n telemetry,\n });\n\n const resp = await generateText(vercelInput);\n\n return resp.text;\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n }\n}; ","export const getEnvFileContent = (\n _modelProvider: string,\n apiKey: string = ''\n): string => {\n const apiKeyValue = apiKey || 'your_api_key_here';\n\n return `# Cloud deployment: Set these environment variables\n# AGENTMARK_BASE_URL=https://api.agentmark.co\n# AGENTMARK_API_KEY=your_agentmark_api_key\n# AGENTMARK_APP_ID=your_agentmark_app_id\n# Learn more: https://docs.agentmark.co/platform/getting_started/quickstart\n\nOPENAI_API_KEY=${apiKeyValue}\n`;\n};\n","import fs from \"fs-extra\";\nimport { execSync, execFileSync } from \"child_process\";\nimport { getAdapterConfig } from \"./adapters.js\";\n\nexport const setupPackageJson = (targetPath: string = \".\", deploymentMode: \"cloud\" | \"static\" = \"cloud\") => {\n const packageJsonPath = `${targetPath}/package.json`;\n\n if (!fs.existsSync(packageJsonPath)) {\n console.log(\"Creating package.json...\");\n execSync(\"npm init -y\", { cwd: targetPath });\n }\n\n // Update the created package.json with additional information\n const pkgJson = fs.readJsonSync(packageJsonPath);\n pkgJson.name =\n pkgJson.name === \"test\" || !pkgJson.name\n ? \"agentmark-example-app\"\n : pkgJson.name;\n pkgJson.description =\n pkgJson.description || \"A simple Node.js app using the Agentmark SDK\";\n\n // All platforms use \"agentmark dev\" which runs their respective dev-entry.ts\n const devScript = \"agentmark dev\";\n\n // Base scripts for all modes\n const scripts: Record<string, string> = {\n ...pkgJson.scripts,\n \"demo\": \"npx tsx index.ts\",\n \"dev\": devScript,\n \"prompt\": \"agentmark run-prompt\",\n \"experiment\": \"agentmark run-experiment\",\n };\n\n // For static/self-hosted mode, add the build script\n if (deploymentMode === \"static\") {\n scripts[\"build\"] = \"agentmark build --out dist/agentmark\";\n }\n\n pkgJson.scripts = scripts;\n\n // Add overrides to fix vulnerabilities in transitive dependencies\n // localtunnel (used by @agentmark/cli) depends on axios@0.21.4 which has vulnerabilities\n pkgJson.overrides = {\n ...pkgJson.overrides,\n \"axios\": \"^1.7.9\"\n };\n\n fs.writeJsonSync(packageJsonPath, pkgJson, { spaces: 2 });\n};\n\nexport const installDependencies = (\n modelProvider: string,\n targetPath: string = \".\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n console.log(\"Installing required packages...\");\n console.log(\"This might take a moment...\");\n\n const adapterConfig = getAdapterConfig(adapter, modelProvider);\n\n try {\n // Install TypeScript, ts-node, CLI, and other dev dependencies\n // CLI needs to be a devDep so dev-entry.ts can import from @agentmark/cli/runner-server\n const devDepsCmd = \"npm install --save-dev typescript ts-node @types/node @agentmark/cli --legacy-peer-deps\";\n\n execSync(devDepsCmd, {\n stdio: \"inherit\",\n cwd: targetPath,\n });\n\n // Install the common packages\n // SDK is required for both local (connects to agentmark serve) and cloud (connects to API)\n // Loader packages are imported directly - ApiLoader always needed, FileLoader only for static mode\n const loaderPackages = deploymentMode === \"static\"\n ? [\"@agentmark/loader-api\", \"@agentmark/loader-file\"]\n : [\"@agentmark/loader-api\"];\n\n const installArgs = [\n \"install\",\n \"dotenv\",\n \"@agentmark/prompt-core\",\n \"@agentmark/sdk\",\n adapterConfig.package,\n ...loaderPackages,\n ...adapterConfig.dependencies,\n \"--legacy-peer-deps\",\n ];\n\n execFileSync(\"npm\", installArgs, { stdio: \"inherit\", cwd: targetPath });\n\n console.log(\"Packages installed successfully!\");\n } catch (error) {\n console.error(\"Error installing packages:\", error);\n throw new Error(\n \"Failed to install required packages. Please check your network connection and try again.\"\n );\n }\n};\n","export const getTsConfigContent = (): object => {\n return {\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true\n }\n };\n}; ","export const getAnimalDrawingPrompt = (): string => {\n return `---\nname: animal-drawing\nimage_config:\n model_name: dall-e-3\n num_images: 1\n size: 1024x1024\n aspect_ratio: 1:1\ntest_settings:\n dataset: animal.jsonl\n props:\n animal: \"cat\"\n---\n\n<ImagePrompt>\nDraw a hyper-realistic picture of a {props.animal}\n</ImagePrompt>`;\n};","export const getCustomerSupportPrompt = (model: string): string => {\n return `---\nname: customer-support-agent\ntext_config:\n model_name: ${model}\n max_calls: 2\n tools:\n search_knowledgebase:\n description: Search the company knowledgebase for information about shipping, warranty, and returns policies.\n parameters:\n type: object\n properties:\n query:\n type: string\n description: The search query to find relevant information\n required: [query]\ntest_settings:\n dataset: customer-query.jsonl\n props:\n customer_question: \"I'm having trouble with my order. How long does shipping take?\"\ninput_schema:\n type: object\n properties:\n customer_question:\n type: string\n description: \"The customer's question\"\n required:\n - customer_question\n---\n\n<System>\nYou are a customer service agent for a company that sells products online. You are given a customer's question and you need to respond to the customer. You need to be friendly, professional, and helpful.\n\nYou have access to the following tool:\n- search_knowledgebase: Search the company knowledgebase for information about shipping, warranty, and returns. Use this when customers ask about these topics.\n</System>\n\n<User>{props.customer_question}</User>`;\n};","export const getPartyPlannerPrompt = (model: string): string => {\n return `---\nname: party-planner\nobject_config:\n model_name: ${model}\n schema:\n type: object\n properties:\n names:\n type: array\n description: \"List of names of people attending the party.\"\n items:\n type: string\n required:\n - names\ntest_settings:\n dataset: party.jsonl\n evals:\n - exact_match_json\n props:\n party_text: \"We're having a party with Alice, Bob, and Carol.\"\ninput_schema:\n type: object\n properties:\n party_text:\n type: string\n description: \"A block of text describing the upcoming party and attendees.\"\n required:\n - party_text\n---\n\n<System>\nExtract the names of all people attending the party from the following text. Respond with a list of names only.\n</System>\n\n<User>\nText: {props.party_text}\n</User>`;\n};","export const getStoryTellerPrompt = (): string => {\n return `---\nname: story-teller\nspeech_config:\n model_name: tts-1-hd\n voice: \"nova\"\n speed: 1.0\n output_format: \"mp3\"\ntest_settings:\n dataset: story.jsonl\n props:\n story: \"Once upon a time, there was a cat who loved to play with a ball.\"\n---\n\n<System>\nYou are a storyteller for children. Make sure your story is engaging and interesting.\n</System>\n\n<SpeechPrompt>\n- {props.story}\n</SpeechPrompt>`;\n};","export const getAnimalDataset = (): string => {\n return `{\"input\": {\"animal\": \"cat\"}, \"expected_output\": \"A realistic picture of a cat\"}\n{\"input\": {\"animal\": \"dog\"}, \"expected_output\": \"A realistic picture of a dog\"}\n{\"input\": {\"animal\": \"bird\"}, \"expected_output\": \"A realistic picture of a bird\"}`;\n};\n\nexport const getCustomerQueryDataset = (): string => {\n return `{\"input\": {\"customer_question\": \"My package hasn't arrived yet. Can you help me track it?\"}}\n{\"input\": {\"customer_question\": \"I received the wrong item in my order. What should I do?\"}}\n{\"input\": {\"customer_question\": \"How do I return a product that I purchased last week?\"}}`;\n};\n\nexport const getPartyDataset = (): string => {\n return `{\"input\": {\"party_text\": \"We're having a party with Alice, Bob, and Carol.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Alice\\\\\", \\\\\"Bob\\\\\", \\\\\"Carol\\\\\"]}\"}\n{\"input\": {\"party_text\": \"The guest list includes Dave, Emma, and Frank.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Dave\\\\\", \\\\\"Emma\\\\\", \\\\\"Frank\\\\\"]}\"}\n{\"input\": {\"party_text\": \"Join us for a celebration with Grace, Henry, and Isla.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Grace\\\\\", \\\\\"Henry\\\\\", \\\\\"Isla\\\\\"]}\"}`;\n};\n\nexport const getStoryDataset = (): string => {\n return `{\"input\": {\"story\": \"Once upon a time, the Moon woke up and found her glow missing! She floated around the sky asking stars, clouds, and even comets if they'd seen her light. It wasn't until she peeked into a mountain lake that she saw her glow shining back—hidden in her own reflection! Laughing, she realized she had never lost it—it was with her all along, just hiding beneath a cloudy sky.\"}}\n{\"input\": {\"story\": \"Benny was no ordinary banana—he dreamed of becoming a superhero. One day, when a monkey slipped in the jungle and cried for help, Benny rolled into action, dodging vines and swinging from branches using his peel like a lasso. The monkey was saved, and from that day on, Benny was known as \\\\\"The Peel of Justice,\\\\\" the bravest fruit in the whole rainforest.\"}}\n{\"input\": {\"story\": \"In the town of Maplebrook, there was a library that whispered stories when no one was looking. Curious little Nia tiptoed in one rainy day and heard the books giggling softly. She opened one called The Secret Tunnel, and to her surprise, it sucked her in! She found herself riding a dragon through glittering caves. When she returned, the book winked shut—waiting for its next reader to listen.\"}}`;\n};","import fs from 'fs-extra';\nimport { getAnimalDrawingPrompt } from './animal-drawing-prompt.js';\nimport { getCustomerSupportPrompt } from './customer-support-prompt.js';\nimport { getPartyPlannerPrompt } from './party-planner-prompt.js';\nimport { getStoryTellerPrompt } from './story-teller-prompt.js';\nimport { getAnimalDataset, getCustomerQueryDataset, getPartyDataset, getStoryDataset } from './datasets.js';\n\nexport const createExamplePrompts = (model: string, targetPath: string = \".\", adapter: string = \"ai-sdk\") => {\n // Ensure the templates directory exists\n fs.ensureDirSync(`${targetPath}/agentmark`);\n \n // Create animal drawing prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const animalDrawingPrompt = getAnimalDrawingPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/animal-drawing.prompt.mdx`, animalDrawingPrompt);\n const animalDataset = getAnimalDataset();\n fs.writeFileSync(`${targetPath}/agentmark/animal.jsonl`, animalDataset);\n }\n \n // Create customer support prompt and dataset\n const customerSupportPrompt = getCustomerSupportPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/customer-support-agent.prompt.mdx`, customerSupportPrompt);\n const customerQueryDataset = getCustomerQueryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/customer-query.jsonl`, customerQueryDataset);\n \n // Create party planner prompt and dataset\n const partyPlannerPrompt = getPartyPlannerPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/party-planner.prompt.mdx`, partyPlannerPrompt);\n const partyDataset = getPartyDataset();\n fs.writeFileSync(`${targetPath}/agentmark/party.jsonl`, partyDataset);\n \n // Create story teller prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const storyTellerPrompt = getStoryTellerPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/story-teller.prompt.mdx`, storyTellerPrompt);\n const storyDataset = getStoryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/story.jsonl`, storyDataset);\n }\n};","import { getAdapterConfig } from \"./adapters.js\";\n\nexport const getClientConfigContent = (options: { provider: string; languageModels: string[]; adapter: string; deploymentMode?: \"cloud\" | \"static\" }) => {\n const { provider, languageModels, adapter, deploymentMode = \"cloud\" } = options;\n const adapterConfig = getAdapterConfig(adapter, provider);\n const { modelRegistry, toolRegistry } = adapterConfig.classes;\n\n const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;\n\n const extraModelRegs = provider === 'openai'\n ? `.registerModels([\"dall-e-3\"], (name: string) => ${provider}.image(name))\n .registerModels([\"tts-1-hd\"], (name: string) => ${provider}.speech(name))`\n : '';\n\n // Import loaders from dedicated packages\n const loaderImport = deploymentMode === \"cloud\"\n ? `import { ApiLoader } from \"@agentmark/loader-api\";`\n : `import { ApiLoader } from \"@agentmark/loader-api\";\nimport { FileLoader } from \"@agentmark/loader-file\";`;\n\n const loaderSetup = deploymentMode === \"cloud\"\n ? ` // ApiLoader works for both development and production\n // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost\n // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud\n const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : ApiLoader.cloud({\n apiKey: process.env.AGENTMARK_API_KEY!,\n appId: process.env.AGENTMARK_APP_ID!,\n });`\n : ` const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : new FileLoader('./dist/agentmark');`;\n\n return `// agentmark.client.ts\nimport path from 'node:path';\nimport dotenv from 'dotenv';\ndotenv.config({ path: path.resolve(__dirname, '.env') });\nimport { createAgentMarkClient, ${modelRegistry}, ${toolRegistry}, EvalRegistry } from \"${adapterConfig.package}\";\n${loaderImport}\nimport AgentMarkTypes, { Tools } from './agentmark.types';\n${providerImport}\n\nfunction createModelRegistry() {\n const modelRegistry = new ${modelRegistry}()\n .registerModels(${JSON.stringify(languageModels)}, (name: string) => ${provider}(name))\n ${extraModelRegs};\n return modelRegistry;\n}\n\nfunction createToolRegistry() {\n const toolRegistry = new ${toolRegistry}<Tools>()\n .register('search_knowledgebase', async ({ query }) => {\n // Simulate search delay\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Return all three knowledge base articles\n // The LLM will select the relevant one based on the query\n return {\n articles: [\n { topic: 'shipping', content: 'Standard shipping takes 3–5 business days.' },\n { topic: 'warranty', content: 'All products include a 1-year limited warranty.' },\n { topic: 'returns', content: 'You can return items within 30 days of delivery.' }\n ]\n };\n });\n return toolRegistry;\n}\n\nfunction createEvalRegistry() {\n const evalRegistry = new EvalRegistry()\n .register('exact_match_json', ({ output, expectedOutput }) => {\n if (!expectedOutput) {\n return { score: 0, label: 'error', reason: 'No expected output provided', passed: false };\n }\n try {\n const ok = JSON.stringify(output) === JSON.stringify(JSON.parse(expectedOutput));\n return {\n score: ok ? 1 : 0,\n label: ok ? 'correct' : 'incorrect',\n reason: ok ? 'Exact match' : 'Mismatch',\n passed: ok\n };\n } catch (e) {\n return { score: 0, label: 'error', reason: 'Failed to parse expected output as JSON', passed: false };\n }\n });\n return evalRegistry;\n}\n\nfunction createClient() {\n${loaderSetup}\n const modelRegistry = createModelRegistry();\n const toolRegistry = createToolRegistry();\n const evalRegistry = createEvalRegistry();\n return createAgentMarkClient<AgentMarkTypes, typeof toolRegistry>({ loader, modelRegistry, toolRegistry, evalRegistry });\n}\n\nexport const client = createClient();\n`;\n};\n"],"mappings":"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","names":["fs","fs"]}
1
+ {"version":3,"sources":["../../../../src/utils/examples/templates/adapters.ts","../../../../src/utils/examples/templates/app-index.ts","../../../../src/utils/examples/templates/env.ts","../../../../src/utils/examples/templates/package-setup.ts","../../../../src/utils/examples/templates/tsconfig.ts","../../../../src/utils/examples/templates/animal-drawing-prompt.ts","../../../../src/utils/examples/templates/customer-support-prompt.ts","../../../../src/utils/examples/templates/party-planner-prompt.ts","../../../../src/utils/examples/templates/story-teller-prompt.ts","../../../../src/utils/examples/templates/datasets.ts","../../../../src/utils/examples/templates/example-prompts.ts","../../../../src/utils/examples/templates/user-client-config.ts"],"sourcesContent":["export interface AdapterConfig {\n /** npm package name for the adapter */\n package: string;\n /** Additional npm packages required by this adapter */\n dependencies: string[];\n /** Class names used in generated code */\n classes: {\n modelRegistry: string;\n toolRegistry: string;\n webhookHandler: string;\n };\n}\n\nexport const createAdapterConfig = (\n provider: string\n): Record<string, AdapterConfig> => {\n return {\n \"ai-sdk\": {\n package: \"@agentmark-ai/ai-sdk-v5-adapter\",\n dependencies: [\"ai@^5\", `@ai-sdk/${provider}@^2`],\n classes: {\n modelRegistry: \"VercelAIModelRegistry\",\n toolRegistry: \"VercelAIToolRegistry\",\n webhookHandler: \"VercelAdapterWebhookHandler\",\n },\n },\n mastra: {\n package: \"@agentmark-ai/mastra-v0-adapter\",\n dependencies: [\n \"@mastra/core@<0.20.0\",\n \"@mastra/mcp@<0.13.4\",\n `@ai-sdk/${provider}@<2`,\n ],\n classes: {\n modelRegistry: \"MastraModelRegistry\",\n toolRegistry: \"MastraToolRegistry\",\n webhookHandler: \"MastraAdapterWebhookHandler\",\n },\n },\n };\n};\n\nexport function getAdapterConfig(\n adapter: string,\n provider: string\n): AdapterConfig {\n const config = createAdapterConfig(provider)[adapter];\n if (!config) {\n throw new Error(\n `Unknown adapter: ${adapter}. Available adapters: ${Object.keys(\n createAdapterConfig(provider)\n ).join(\", \")}`\n );\n }\n return config;\n}\n","export const getIndexFileContent = (adapter: string = \"ai-sdk\"): string => {\n if (adapter === \"mastra\") {\n return `import \"dotenv/config\";\nimport { Agent } from \"@mastra/core/agent\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n trace_name: \"customer-support\",\n user_id: \"user-123\",\n session_id: \"session-123\",\n session_name: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const agentConfig = await prompt.formatAgent({\n options: {\n telemetry,\n },\n });\n\n const [messages, generateOptions] = await agentConfig.formatMessages({\n props: {\n customer_question: customer_message,\n },\n });\n\n const agent = new Agent(agentConfig);\n const response = await agent.generate(messages, generateOptions);\n\n return (response as any).text || (response as any).content || String(response);\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n } else {\n return `import \"dotenv/config\";\nimport { generateText } from \"ai\";\nimport { client } from \"./agentmark.client\";\n\nconst telemetry = {\n isEnabled: true,\n metadata: {\n trace_name: \"customer-support\",\n user_id: \"user-123\",\n session_id: \"session-123\",\n session_name: \"my-first-session\",\n },\n};\n\nconst runCustomerSupport = async (customer_message: string) => {\n const prompt = await client.loadTextPrompt(\"customer-support-agent\");\n const vercelInput = await prompt.format({\n props: {\n customer_question: customer_message,\n },\n telemetry,\n });\n\n const resp = await generateText(vercelInput);\n\n return resp.text;\n};\n\nconst main = async () => {\n try {\n const user_message = \"How long does shipping take?\";\n const assistant = await runCustomerSupport(user_message);\n console.log(\"Customer support response:\", assistant);\n } catch (error) {\n console.error(error);\n }\n};\n\nmain();\n`;\n }\n}; ","export const getEnvFileContent = (\n _modelProvider: string,\n apiKey: string = ''\n): string => {\n const apiKeyValue = apiKey || 'your_api_key_here';\n\n return `# Cloud deployment: Set these environment variables\n# AGENTMARK_BASE_URL=https://api.agentmark.co\n# AGENTMARK_API_KEY=your_agentmark_api_key\n# AGENTMARK_APP_ID=your_agentmark_app_id\n# Learn more: https://docs.agentmark.co/platform/getting_started/quickstart\n\nOPENAI_API_KEY=${apiKeyValue}\n`;\n};\n","import fs from \"fs-extra\";\nimport { execSync, execFileSync } from \"child_process\";\nimport { getAdapterConfig } from \"./adapters.js\";\n\nexport const setupPackageJson = (targetPath: string = \".\", deploymentMode: \"cloud\" | \"static\" = \"cloud\") => {\n const packageJsonPath = `${targetPath}/package.json`;\n\n if (!fs.existsSync(packageJsonPath)) {\n console.log(\"Creating package.json...\");\n execSync(\"npm init -y\", { cwd: targetPath });\n }\n\n // Update the created package.json with additional information\n const pkgJson = fs.readJsonSync(packageJsonPath);\n pkgJson.name =\n pkgJson.name === \"test\" || !pkgJson.name\n ? \"agentmark-example-app\"\n : pkgJson.name;\n pkgJson.description =\n pkgJson.description || \"A simple Node.js app using the Agentmark SDK\";\n\n // All platforms use \"agentmark dev\" which runs their respective dev-entry.ts\n const devScript = \"agentmark dev\";\n\n // Base scripts for all modes\n const scripts: Record<string, string> = {\n ...pkgJson.scripts,\n \"demo\": \"npx tsx index.ts\",\n \"dev\": devScript,\n \"prompt\": \"agentmark run-prompt\",\n \"experiment\": \"agentmark run-experiment\",\n };\n\n // For static/self-hosted mode, add the build script\n if (deploymentMode === \"static\") {\n scripts[\"build\"] = \"agentmark build --out dist/agentmark\";\n }\n\n pkgJson.scripts = scripts;\n\n // Add overrides to fix vulnerabilities in transitive dependencies\n // localtunnel (used by @agentmark-ai/cli) depends on axios@0.21.4 which has vulnerabilities\n pkgJson.overrides = {\n ...pkgJson.overrides,\n \"axios\": \"^1.7.9\"\n };\n\n fs.writeJsonSync(packageJsonPath, pkgJson, { spaces: 2 });\n};\n\nexport const installDependencies = (\n modelProvider: string,\n targetPath: string = \".\",\n adapter: string = \"ai-sdk\",\n deploymentMode: \"cloud\" | \"static\" = \"cloud\"\n) => {\n console.log(\"Installing required packages...\");\n console.log(\"This might take a moment...\");\n\n const adapterConfig = getAdapterConfig(adapter, modelProvider);\n\n try {\n // Install TypeScript, ts-node, CLI, and other dev dependencies\n // CLI needs to be a devDep so dev-entry.ts can import from @agentmark-ai/cli/runner-server\n const devDepsCmd = \"npm install --save-dev typescript ts-node @types/node @agentmark-ai/cli --legacy-peer-deps\";\n\n execSync(devDepsCmd, {\n stdio: \"inherit\",\n cwd: targetPath,\n });\n\n // Install the common packages\n // SDK is required for both local (connects to agentmark serve) and cloud (connects to API)\n // Loader packages are imported directly - ApiLoader always needed, FileLoader only for static mode\n const loaderPackages = deploymentMode === \"static\"\n ? [\"@agentmark-ai/loader-api\", \"@agentmark-ai/loader-file\"]\n : [\"@agentmark-ai/loader-api\"];\n\n const installArgs = [\n \"install\",\n \"dotenv\",\n \"@agentmark-ai/prompt-core\",\n \"@agentmark-ai/sdk\",\n adapterConfig.package,\n ...loaderPackages,\n ...adapterConfig.dependencies,\n \"--legacy-peer-deps\",\n ];\n\n execFileSync(\"npm\", installArgs, { stdio: \"inherit\", cwd: targetPath });\n\n console.log(\"Packages installed successfully!\");\n } catch (error) {\n console.error(\"Error installing packages:\", error);\n throw new Error(\n \"Failed to install required packages. Please check your network connection and try again.\"\n );\n }\n};\n","export const getTsConfigContent = (): object => {\n return {\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true\n }\n };\n}; ","export const getAnimalDrawingPrompt = (): string => {\n return `---\nname: animal-drawing\nimage_config:\n model_name: dall-e-3\n num_images: 1\n size: 1024x1024\n aspect_ratio: 1:1\ntest_settings:\n dataset: animal.jsonl\n props:\n animal: \"cat\"\n---\n\n<ImagePrompt>\nDraw a hyper-realistic picture of a {props.animal}\n</ImagePrompt>`;\n};","export const getCustomerSupportPrompt = (model: string): string => {\n return `---\nname: customer-support-agent\ntext_config:\n model_name: ${model}\n max_calls: 2\n tools:\n search_knowledgebase:\n description: Search the company knowledgebase for information about shipping, warranty, and returns policies.\n parameters:\n type: object\n properties:\n query:\n type: string\n description: The search query to find relevant information\n required: [query]\ntest_settings:\n dataset: customer-query.jsonl\n props:\n customer_question: \"I'm having trouble with my order. How long does shipping take?\"\ninput_schema:\n type: object\n properties:\n customer_question:\n type: string\n description: \"The customer's question\"\n required:\n - customer_question\n---\n\n<System>\nYou are a customer service agent for a company that sells products online. You are given a customer's question and you need to respond to the customer. You need to be friendly, professional, and helpful.\n\nYou have access to the following tool:\n- search_knowledgebase: Search the company knowledgebase for information about shipping, warranty, and returns. Use this when customers ask about these topics.\n</System>\n\n<User>{props.customer_question}</User>`;\n};","export const getPartyPlannerPrompt = (model: string): string => {\n return `---\nname: party-planner\nobject_config:\n model_name: ${model}\n schema:\n type: object\n properties:\n names:\n type: array\n description: \"List of names of people attending the party.\"\n items:\n type: string\n required:\n - names\ntest_settings:\n dataset: party.jsonl\n evals:\n - exact_match_json\n props:\n party_text: \"We're having a party with Alice, Bob, and Carol.\"\ninput_schema:\n type: object\n properties:\n party_text:\n type: string\n description: \"A block of text describing the upcoming party and attendees.\"\n required:\n - party_text\n---\n\n<System>\nExtract the names of all people attending the party from the following text. Respond with a list of names only.\n</System>\n\n<User>\nText: {props.party_text}\n</User>`;\n};","export const getStoryTellerPrompt = (): string => {\n return `---\nname: story-teller\nspeech_config:\n model_name: tts-1-hd\n voice: \"nova\"\n speed: 1.0\n output_format: \"mp3\"\ntest_settings:\n dataset: story.jsonl\n props:\n story: \"Once upon a time, there was a cat who loved to play with a ball.\"\n---\n\n<System>\nYou are a storyteller for children. Make sure your story is engaging and interesting.\n</System>\n\n<SpeechPrompt>\n- {props.story}\n</SpeechPrompt>`;\n};","export const getAnimalDataset = (): string => {\n return `{\"input\": {\"animal\": \"cat\"}, \"expected_output\": \"A realistic picture of a cat\"}\n{\"input\": {\"animal\": \"dog\"}, \"expected_output\": \"A realistic picture of a dog\"}\n{\"input\": {\"animal\": \"bird\"}, \"expected_output\": \"A realistic picture of a bird\"}`;\n};\n\nexport const getCustomerQueryDataset = (): string => {\n return `{\"input\": {\"customer_question\": \"My package hasn't arrived yet. Can you help me track it?\"}}\n{\"input\": {\"customer_question\": \"I received the wrong item in my order. What should I do?\"}}\n{\"input\": {\"customer_question\": \"How do I return a product that I purchased last week?\"}}`;\n};\n\nexport const getPartyDataset = (): string => {\n return `{\"input\": {\"party_text\": \"We're having a party with Alice, Bob, and Carol.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Alice\\\\\", \\\\\"Bob\\\\\", \\\\\"Carol\\\\\"]}\"}\n{\"input\": {\"party_text\": \"The guest list includes Dave, Emma, and Frank.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Dave\\\\\", \\\\\"Emma\\\\\", \\\\\"Frank\\\\\"]}\"}\n{\"input\": {\"party_text\": \"Join us for a celebration with Grace, Henry, and Isla.\"}, \"expected_output\": \"{\\\\\"names\\\\\": [\\\\\"Grace\\\\\", \\\\\"Henry\\\\\", \\\\\"Isla\\\\\"]}\"}`;\n};\n\nexport const getStoryDataset = (): string => {\n return `{\"input\": {\"story\": \"Once upon a time, the Moon woke up and found her glow missing! She floated around the sky asking stars, clouds, and even comets if they'd seen her light. It wasn't until she peeked into a mountain lake that she saw her glow shining back—hidden in her own reflection! Laughing, she realized she had never lost it—it was with her all along, just hiding beneath a cloudy sky.\"}}\n{\"input\": {\"story\": \"Benny was no ordinary banana—he dreamed of becoming a superhero. One day, when a monkey slipped in the jungle and cried for help, Benny rolled into action, dodging vines and swinging from branches using his peel like a lasso. The monkey was saved, and from that day on, Benny was known as \\\\\"The Peel of Justice,\\\\\" the bravest fruit in the whole rainforest.\"}}\n{\"input\": {\"story\": \"In the town of Maplebrook, there was a library that whispered stories when no one was looking. Curious little Nia tiptoed in one rainy day and heard the books giggling softly. She opened one called The Secret Tunnel, and to her surprise, it sucked her in! She found herself riding a dragon through glittering caves. When she returned, the book winked shut—waiting for its next reader to listen.\"}}`;\n};","import fs from 'fs-extra';\nimport { getAnimalDrawingPrompt } from './animal-drawing-prompt.js';\nimport { getCustomerSupportPrompt } from './customer-support-prompt.js';\nimport { getPartyPlannerPrompt } from './party-planner-prompt.js';\nimport { getStoryTellerPrompt } from './story-teller-prompt.js';\nimport { getAnimalDataset, getCustomerQueryDataset, getPartyDataset, getStoryDataset } from './datasets.js';\n\nexport const createExamplePrompts = (model: string, targetPath: string = \".\", adapter: string = \"ai-sdk\") => {\n // Ensure the templates directory exists\n fs.ensureDirSync(`${targetPath}/agentmark`);\n \n // Create animal drawing prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const animalDrawingPrompt = getAnimalDrawingPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/animal-drawing.prompt.mdx`, animalDrawingPrompt);\n const animalDataset = getAnimalDataset();\n fs.writeFileSync(`${targetPath}/agentmark/animal.jsonl`, animalDataset);\n }\n \n // Create customer support prompt and dataset\n const customerSupportPrompt = getCustomerSupportPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/customer-support-agent.prompt.mdx`, customerSupportPrompt);\n const customerQueryDataset = getCustomerQueryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/customer-query.jsonl`, customerQueryDataset);\n \n // Create party planner prompt and dataset\n const partyPlannerPrompt = getPartyPlannerPrompt(model);\n fs.writeFileSync(`${targetPath}/agentmark/party-planner.prompt.mdx`, partyPlannerPrompt);\n const partyDataset = getPartyDataset();\n fs.writeFileSync(`${targetPath}/agentmark/party.jsonl`, partyDataset);\n \n // Create story teller prompt and dataset (skip for mastra adapter)\n if (adapter !== \"mastra\") {\n const storyTellerPrompt = getStoryTellerPrompt();\n fs.writeFileSync(`${targetPath}/agentmark/story-teller.prompt.mdx`, storyTellerPrompt);\n const storyDataset = getStoryDataset();\n fs.writeFileSync(`${targetPath}/agentmark/story.jsonl`, storyDataset);\n }\n};","import { getAdapterConfig } from \"./adapters.js\";\n\nexport const getClientConfigContent = (options: { provider: string; languageModels: string[]; adapter: string; deploymentMode?: \"cloud\" | \"static\" }) => {\n const { provider, languageModels, adapter, deploymentMode = \"cloud\" } = options;\n const adapterConfig = getAdapterConfig(adapter, provider);\n const { modelRegistry, toolRegistry } = adapterConfig.classes;\n\n const providerImport = `import { ${provider} } from '@ai-sdk/${provider}';`;\n\n const extraModelRegs = provider === 'openai'\n ? `.registerModels([\"dall-e-3\"], (name: string) => ${provider}.image(name))\n .registerModels([\"tts-1-hd\"], (name: string) => ${provider}.speech(name))`\n : '';\n\n // Import loaders from dedicated packages\n const loaderImport = deploymentMode === \"cloud\"\n ? `import { ApiLoader } from \"@agentmark-ai/loader-api\";`\n : `import { ApiLoader } from \"@agentmark-ai/loader-api\";\nimport { FileLoader } from \"@agentmark-ai/loader-file\";`;\n\n const loaderSetup = deploymentMode === \"cloud\"\n ? ` // ApiLoader works for both development and production\n // - Development: 'agentmark dev' sets AGENTMARK_BASE_URL to localhost\n // - Production: Set AGENTMARK_API_KEY and AGENTMARK_APP_ID for cloud\n const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : ApiLoader.cloud({\n apiKey: process.env.AGENTMARK_API_KEY!,\n appId: process.env.AGENTMARK_APP_ID!,\n });`\n : ` const loader = process.env.NODE_ENV === 'development'\n ? ApiLoader.local({ baseUrl: process.env.AGENTMARK_BASE_URL || 'http://localhost:9418' })\n : new FileLoader('./dist/agentmark');`;\n\n return `// agentmark.client.ts\nimport path from 'node:path';\nimport dotenv from 'dotenv';\ndotenv.config({ path: path.resolve(__dirname, '.env') });\nimport { createAgentMarkClient, ${modelRegistry}, ${toolRegistry}, EvalRegistry } from \"${adapterConfig.package}\";\n${loaderImport}\nimport AgentMarkTypes, { Tools } from './agentmark.types';\n${providerImport}\n\nfunction createModelRegistry() {\n const modelRegistry = new ${modelRegistry}()\n .registerModels(${JSON.stringify(languageModels)}, (name: string) => ${provider}(name))\n ${extraModelRegs};\n return modelRegistry;\n}\n\nfunction createToolRegistry() {\n const toolRegistry = new ${toolRegistry}<Tools>()\n .register('search_knowledgebase', async ({ query }) => {\n // Simulate search delay\n await new Promise(resolve => setTimeout(resolve, 500));\n\n // Return all three knowledge base articles\n // The LLM will select the relevant one based on the query\n return {\n articles: [\n { topic: 'shipping', content: 'Standard shipping takes 3–5 business days.' },\n { topic: 'warranty', content: 'All products include a 1-year limited warranty.' },\n { topic: 'returns', content: 'You can return items within 30 days of delivery.' }\n ]\n };\n });\n return toolRegistry;\n}\n\nfunction createEvalRegistry() {\n const evalRegistry = new EvalRegistry()\n .register('exact_match_json', ({ output, expectedOutput }) => {\n if (!expectedOutput) {\n return { score: 0, label: 'error', reason: 'No expected output provided', passed: false };\n }\n try {\n const ok = JSON.stringify(output) === JSON.stringify(JSON.parse(expectedOutput));\n return {\n score: ok ? 1 : 0,\n label: ok ? 'correct' : 'incorrect',\n reason: ok ? 'Exact match' : 'Mismatch',\n passed: ok\n };\n } catch (e) {\n return { score: 0, label: 'error', reason: 'Failed to parse expected output as JSON', passed: false };\n }\n });\n return evalRegistry;\n}\n\nfunction createClient() {\n${loaderSetup}\n const modelRegistry = createModelRegistry();\n const toolRegistry = createToolRegistry();\n const evalRegistry = createEvalRegistry();\n return createAgentMarkClient<AgentMarkTypes, typeof toolRegistry>({ loader, modelRegistry, toolRegistry, evalRegistry });\n}\n\nexport const client = createClient();\n`;\n};\n"],"mappings":"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","names":["fs","fs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agentmark",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Create AgentMark projects with npm create agentmark",
6
6
  "main": "dist/index.js",
@@ -29,7 +29,7 @@
29
29
  "author": "",
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
- "@agentmark/shared-utils": "*",
32
+ "@agentmark-ai/shared-utils": "*",
33
33
  "fs-extra": "^11.2.0",
34
34
  "prompts": "^2.4.2"
35
35
  },