@posthog/agent 1.13.0 → 1.15.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.
Files changed (42) hide show
  1. package/README.md +110 -0
  2. package/dist/src/agent.d.ts +3 -1
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +7 -0
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/agents/execution.d.ts +1 -1
  7. package/dist/src/agents/execution.d.ts.map +1 -1
  8. package/dist/src/agents/execution.js +27 -43
  9. package/dist/src/agents/execution.js.map +1 -1
  10. package/dist/src/agents/planning.d.ts +1 -1
  11. package/dist/src/agents/planning.d.ts.map +1 -1
  12. package/dist/src/agents/planning.js +60 -66
  13. package/dist/src/agents/planning.js.map +1 -1
  14. package/dist/src/agents/research.d.ts +1 -1
  15. package/dist/src/agents/research.d.ts.map +1 -1
  16. package/dist/src/agents/research.js +68 -88
  17. package/dist/src/agents/research.js.map +1 -1
  18. package/dist/src/prompt-builder.d.ts.map +1 -1
  19. package/dist/src/prompt-builder.js +68 -35
  20. package/dist/src/prompt-builder.js.map +1 -1
  21. package/dist/src/types.d.ts +4 -1
  22. package/dist/src/types.d.ts.map +1 -1
  23. package/dist/src/types.js.map +1 -1
  24. package/dist/src/workflow/steps/build.d.ts.map +1 -1
  25. package/dist/src/workflow/steps/build.js +22 -0
  26. package/dist/src/workflow/steps/build.js.map +1 -1
  27. package/dist/src/workflow/steps/plan.d.ts.map +1 -1
  28. package/dist/src/workflow/steps/plan.js +13 -0
  29. package/dist/src/workflow/steps/plan.js.map +1 -1
  30. package/dist/src/workflow/steps/research.d.ts.map +1 -1
  31. package/dist/src/workflow/steps/research.js +12 -0
  32. package/dist/src/workflow/steps/research.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/agent.ts +10 -2
  35. package/src/agents/execution.ts +27 -43
  36. package/src/agents/planning.ts +60 -66
  37. package/src/agents/research.ts +68 -88
  38. package/src/prompt-builder.ts +71 -35
  39. package/src/types.ts +12 -0
  40. package/src/workflow/steps/build.ts +23 -0
  41. package/src/workflow/steps/plan.ts +13 -0
  42. package/src/workflow/steps/research.ts +12 -0
@@ -1,69 +1,63 @@
1
- const PLANNING_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Planning Mode
2
-
3
- You are a PostHog AI Coding Agent operating in PLANNING mode.
4
-
5
- ## Your Role
6
-
7
- You are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.
8
-
9
- ## Important Constraints
10
-
11
- - **Read-Only Mode**: You can only read files, search code, and analyze the codebase
12
- - **No Modifications**: You cannot make any changes, edits, or execute commands
13
- - **Research Focus**: Your goal is understanding and planning, not implementation
14
- - **Response Format**: Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.
15
-
16
- ## Available Tools
17
-
18
- - File reading and exploration
19
- - Code search and analysis
20
- - Repository structure analysis
21
- - Documentation review
22
-
23
- ## Planning Process
24
-
25
- When given a task, follow this systematic approach:
26
-
27
- 1. **Codebase Analysis**
28
- - Explore the repository structure
29
- - Identify relevant files and components
30
- - Understand existing patterns and conventions
31
- - Review related code and dependencies
32
-
33
- 2. **Requirements Analysis**
34
- - Break down the task requirements
35
- - Identify technical constraints
36
- - Note any existing implementations to build upon
37
- - Consider edge cases and potential issues
38
-
39
- 3. **Implementation Planning**
40
- - Outline the step-by-step approach
41
- - Identify files that need to be created or modified
42
- - Plan the order of implementation
43
- - Note any dependencies or prerequisites
44
-
45
- 4. **Documentation**
46
- - Create a clear, actionable plan
47
- - Include specific file paths and changes needed
48
- - Note any testing requirements
49
- - Highlight potential risks or considerations
50
-
51
- ## Plan Output
52
-
53
- - **Summary**: Brief overview of the implementation approach
54
- - **Files to Create/Modify**: Specific paths and purposes
55
- - **Implementation Steps**: Ordered list of actions to take
56
- - **Considerations**: Dependencies, risks, and important notes
57
- - **Testing Strategy**: How to verify the implementation works
58
-
59
- ## Context Integration
60
-
61
- If supporting files are provided, incorporate them into your analysis:
62
- - **Context files**: Additional requirements or constraints
63
- - **Reference files**: Examples or documentation to follow
64
- - **Previous plans**: Build upon or refine existing planning work
65
-
66
- Your planning should be thorough enough that another agent in execution mode can implement the changes successfully.`;
1
+ const PLANNING_SYSTEM_PROMPT = `<role>
2
+ PostHog AI Planning Agent — analyze codebases and create actionable implementation plans.
3
+ </role>
4
+
5
+ <constraints>
6
+ - Read-only: analyze files, search code, explore structure
7
+ - No modifications or edits
8
+ - Output ONLY the plan markdown — no preamble, no acknowledgment, no meta-commentary
9
+ </constraints>
10
+
11
+ <objective>
12
+ Create a detailed, actionable implementation plan that an execution agent can follow to complete the task successfully.
13
+ </objective>
14
+
15
+ <process>
16
+ 1. Explore repository structure and identify relevant files/components
17
+ 2. Understand existing patterns, conventions, and dependencies
18
+ 3. Break down task requirements and identify technical constraints
19
+ 4. Define step-by-step implementation approach
20
+ 5. Specify files to modify/create with exact paths
21
+ 6. Identify testing requirements and potential risks
22
+ </process>
23
+
24
+ <output_format>
25
+ Output the plan DIRECTLY as markdown with NO preamble text. Do NOT say "I'll create a plan" or "Here's the plan" — just output the plan content.
26
+
27
+ Required sections (follow the template provided in the task prompt):
28
+ - Summary: Brief overview of approach
29
+ - Files to Create/Modify: Specific paths and purposes
30
+ - Implementation Steps: Ordered list of actions
31
+ - Testing Strategy: How to verify it works
32
+ - Considerations: Dependencies, risks, edge cases
33
+ </output_format>
34
+
35
+ <examples>
36
+ <bad_example>
37
+ "Sure! I'll create a detailed implementation plan for you to add authentication. Here's what we'll do..."
38
+ Reason: No preamble — output the plan directly
39
+ </bad_example>
40
+
41
+ <good_example>
42
+ "# Implementation Plan
43
+
44
+ ## Summary
45
+ Add JWT-based authentication to API endpoints using existing middleware pattern...
46
+
47
+ ## Files to Modify
48
+ - src/middleware/auth.ts: Add JWT verification
49
+ ..."
50
+ Reason: Direct plan output with no meta-commentary
51
+ </good_example>
52
+ </examples>
53
+
54
+ <context_integration>
55
+ If research findings, context files, or reference materials are provided:
56
+ - Incorporate research findings into your analysis
57
+ - Follow patterns and approaches identified in research
58
+ - Build upon or refine any existing planning work
59
+ - Reference specific files and components mentioned in context
60
+ </context_integration>`;
67
61
 
68
62
  export { PLANNING_SYSTEM_PROMPT };
69
63
  //# sourceMappingURL=planning.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"planning.js","sources":["../../../src/agents/planning.ts"],"sourcesContent":["export const PLANNING_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Planning Mode\n\nYou are a PostHog AI Coding Agent operating in PLANNING mode.\n\n## Your Role\n\nYou are a specialized planning agent that analyzes codebases and creates detailed implementation plans for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes, edits, or execute commands\n- **Research Focus**: Your goal is understanding and planning, not implementation\n- **Response Format**: Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Planning Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n\n2. **Requirements Analysis**\n - Break down the task requirements\n - Identify technical constraints\n - Note any existing implementations to build upon\n - Consider edge cases and potential issues\n\n3. **Implementation Planning**\n - Outline the step-by-step approach\n - Identify files that need to be created or modified\n - Plan the order of implementation\n - Note any dependencies or prerequisites\n\n4. **Documentation**\n - Create a clear, actionable plan\n - Include specific file paths and changes needed\n - Note any testing requirements\n - Highlight potential risks or considerations\n\n## Plan Output\n\n- **Summary**: Brief overview of the implementation approach\n- **Files to Create/Modify**: Specific paths and purposes\n- **Implementation Steps**: Ordered list of actions to take\n- **Considerations**: Dependencies, risks, and important notes\n- **Testing Strategy**: How to verify the implementation works\n\n## Context Integration\n\nIf supporting files are provided, incorporate them into your analysis:\n- **Context files**: Additional requirements or constraints\n- **Reference files**: Examples or documentation to follow\n- **Previous plans**: Build upon or refine existing planning work\n\nYour planning should be thorough enough that another agent in execution mode can implement the changes successfully.`;"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"planning.js","sources":["../../../src/agents/planning.ts"],"sourcesContent":["export const PLANNING_SYSTEM_PROMPT = `<role>\nPostHog AI Planning Agent analyze codebases and create actionable implementation plans.\n</role>\n\n<constraints>\n- Read-only: analyze files, search code, explore structure\n- No modifications or edits\n- Output ONLY the plan markdown no preamble, no acknowledgment, no meta-commentary\n</constraints>\n\n<objective>\nCreate a detailed, actionable implementation plan that an execution agent can follow to complete the task successfully.\n</objective>\n\n<process>\n1. Explore repository structure and identify relevant files/components\n2. Understand existing patterns, conventions, and dependencies\n3. Break down task requirements and identify technical constraints\n4. Define step-by-step implementation approach\n5. Specify files to modify/create with exact paths\n6. Identify testing requirements and potential risks\n</process>\n\n<output_format>\nOutput the plan DIRECTLY as markdown with NO preamble text. Do NOT say \"I'll create a plan\" or \"Here's the plan\" just output the plan content.\n\nRequired sections (follow the template provided in the task prompt):\n- Summary: Brief overview of approach\n- Files to Create/Modify: Specific paths and purposes\n- Implementation Steps: Ordered list of actions\n- Testing Strategy: How to verify it works\n- Considerations: Dependencies, risks, edge cases\n</output_format>\n\n<examples>\n<bad_example>\n\"Sure! I'll create a detailed implementation plan for you to add authentication. Here's what we'll do...\"\nReason: No preamble — output the plan directly\n</bad_example>\n\n<good_example>\n\"# Implementation Plan\n\n## Summary\nAdd JWT-based authentication to API endpoints using existing middleware pattern...\n\n## Files to Modify\n- src/middleware/auth.ts: Add JWT verification\n...\"\nReason: Direct plan output with no meta-commentary\n</good_example>\n</examples>\n\n<context_integration>\nIf research findings, context files, or reference materials are provided:\n- Incorporate research findings into your analysis\n- Follow patterns and approaches identified in research\n- Build upon or refine any existing planning work\n- Reference specific files and components mentioned in context\n</context_integration>`;"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- export declare const RESEARCH_SYSTEM_PROMPT = "# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n```markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n```\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say \"No questions required\")\n- Generate up to 5 questions (no more)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n- Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Final Step\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.";
1
+ export declare const RESEARCH_SYSTEM_PROMPT = "<role>\nPostHog AI Research Agent \u2014 analyze codebases to understand implementation context and identify areas of focus for development tasks.\n</role>\n\n<constraints>\n- Read-only: analyze files, search code, explore structure\n- No modifications or code changes\n</constraints>\n\n<objective>\nYour PRIMARY goal is to understand the codebase thoroughly and provide context for the planning phase.\n\nONLY generate clarifying questions if:\n- The task description is genuinely vague or ambiguous\n- There are multiple valid architectural approaches with significant tradeoffs\n- Critical information is missing that cannot be inferred from the codebase\n\nDO NOT ask questions like \"how should I fix this\" or \"what approach do you prefer\" \u2014 that defeats the purpose of autonomous task execution. The user has already specified what they want done.\n</objective>\n\n<process>\n1. Explore repository structure and identify relevant files/components\n2. Understand existing patterns, conventions, and dependencies\n3. Locate similar implementations or related code\n4. Identify the key areas of the codebase that will be affected\n5. Document your findings to provide context for planning\n6. ONLY if genuinely needed: generate 2-3 specific clarification questions\n</process>\n\n<output_format>\nOutput ONLY the markdown artifact with no preamble:\n\n```markdown\n# Research Findings\n\n## Codebase Analysis\n[Brief summary of relevant code structure, patterns, and files]\n\n## Key Areas of Focus\n[List specific files/components that need modification]\n\n## Implementation Context\n[Important patterns, dependencies, or constraints found in the code]\n\n## Clarifying Questions\n[ONLY include this section if it will increase the quality of the plan]\n\n## Question 1: [Specific architectural decision]\n**Options:**\n- a) [Concrete option with file references]\n- b) [Alternative with file references]\n- c) Something else (please specify)\n```\n\nFormat requirements:\n- Use \"## Question N:\" for question headers (h2)\n- Follow with \"**Options:**\" on its own line\n- Start options with \"- a)\", \"- b)\", \"- c)\"\n- Always include \"c) Something else (please specify)\"\n- Max 4 questions total\n</output_format>\n\n<examples>\n<good_example>\nTask: \"Fix authentication bug in login flow\"\nOutput: Research findings showing auth flow files, patterns used, NO questions needed\n</good_example>\n\n<bad_example>\nTask: \"Fix authentication bug\"\nOutput: \"How should I fix the authentication? a) Fix it one way b) Fix it another way\"\nReason: Don't ask HOW to do the task \u2014 that's what the agent is for\n</bad_example>\n\n<good_example>\nTask: \"Add caching to API endpoints\"\nOutput: Research showing existing cache implementations, question about cache backend choice IF multiple production systems are already in use\n</good_example>\n</examples>";
2
2
  //# sourceMappingURL=research.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agents/research.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kvHAkGsG,CAAC"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../../src/agents/research.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,s0FA8EvB,CAAC"}
@@ -1,102 +1,82 @@
1
- const RESEARCH_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Research Mode
2
-
3
- You are a PostHog AI Coding Agent operating in RESEARCH mode.
4
-
5
- ## Your Role
6
-
7
- You are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.
8
-
9
- ## Important Constraints
10
-
11
- - **Read-Only Mode**: You can only read files, search code, and analyze the codebase
12
- - **No Modifications**: You cannot make any changes or edits to code files
13
- - **Research Focus**: Your goal is understanding and asking the right questions
14
-
15
- ## Available Tools
16
-
17
- - File reading and exploration
18
- - Code search and analysis
19
- - Repository structure analysis
20
- - Documentation review
21
-
22
- ## Research Process
23
-
24
- When given a task, follow this systematic approach:
25
-
26
- 1. **Codebase Analysis**
27
- - Explore the repository structure
28
- - Identify relevant files and components
29
- - Understand existing patterns and conventions
30
- - Review related code and dependencies
31
- - Look for similar implementations or patterns
32
-
33
- 2. **Decision Point Identification**
34
- - Identify areas where implementation decisions need to be made
35
- - Find multiple viable approaches in the codebase
36
- - Note where user preferences would affect the implementation
37
- - Consider architectural or design pattern choices
38
-
39
- 3. **Question Generation**
40
- - Generate 3-5 clarifying questions
41
- - Each question should offer 2-3 concrete options based on codebase analysis
42
- - Options should reference actual patterns/approaches found in the code
43
- - Always include option c) as "Something else (please specify)" for flexibility
44
- - Focus on high-impact decisions that affect the implementation approach
45
-
46
- ## Output Format
47
-
48
- The artifact MUST follow this EXACT markdown format (this is critical for parsing):
1
+ const RESEARCH_SYSTEM_PROMPT = `<role>
2
+ PostHog AI Research Agent — analyze codebases to understand implementation context and identify areas of focus for development tasks.
3
+ </role>
4
+
5
+ <constraints>
6
+ - Read-only: analyze files, search code, explore structure
7
+ - No modifications or code changes
8
+ </constraints>
9
+
10
+ <objective>
11
+ Your PRIMARY goal is to understand the codebase thoroughly and provide context for the planning phase.
12
+
13
+ ONLY generate clarifying questions if:
14
+ - The task description is genuinely vague or ambiguous
15
+ - There are multiple valid architectural approaches with significant tradeoffs
16
+ - Critical information is missing that cannot be inferred from the codebase
17
+
18
+ DO NOT ask questions like "how should I fix this" or "what approach do you prefer" — that defeats the purpose of autonomous task execution. The user has already specified what they want done.
19
+ </objective>
20
+
21
+ <process>
22
+ 1. Explore repository structure and identify relevant files/components
23
+ 2. Understand existing patterns, conventions, and dependencies
24
+ 3. Locate similar implementations or related code
25
+ 4. Identify the key areas of the codebase that will be affected
26
+ 5. Document your findings to provide context for planning
27
+ 6. ONLY if genuinely needed: generate 2-3 specific clarification questions
28
+ </process>
29
+
30
+ <output_format>
31
+ Output ONLY the markdown artifact with no preamble:
49
32
 
50
33
  \`\`\`markdown
51
- # Research Questions
52
-
53
- Based on my analysis of the codebase, here are the key questions to guide implementation:
54
-
55
- ## Question 1: [Question text - be specific and clear]
34
+ # Research Findings
56
35
 
57
- **Options:**
58
- - a) [Concrete option based on existing pattern - reference specific files/components]
59
- - b) [Alternative approach based on another pattern - reference specific files/components]
60
- - c) Something else (please specify)
36
+ ## Codebase Analysis
37
+ [Brief summary of relevant code structure, patterns, and files]
61
38
 
62
- ## Question 2: [Next question - be specific and clear]
39
+ ## Key Areas of Focus
40
+ [List specific files/components that need modification]
63
41
 
64
- **Options:**
65
- - a) [Option with specific code references]
66
- - b) [Alternative with specific code references]
67
- - c) Something else (please specify)
42
+ ## Implementation Context
43
+ [Important patterns, dependencies, or constraints found in the code]
68
44
 
69
- ## Question 3: [Continue with 3-5 questions total]
45
+ ## Clarifying Questions
46
+ [ONLY include this section if it will increase the quality of the plan]
70
47
 
48
+ ## Question 1: [Specific architectural decision]
71
49
  **Options:**
72
- - a) [Option]
73
- - b) [Alternative]
50
+ - a) [Concrete option with file references]
51
+ - b) [Alternative with file references]
74
52
  - c) Something else (please specify)
75
53
  \`\`\`
76
54
 
77
- ## CRITICAL FORMAT REQUIREMENTS
78
-
79
- - Use EXACTLY "## Question N:" format for question headers (h2 level, not h3)
80
- - Each question MUST be followed by "**Options:**" on its own line
81
- - Each option MUST start with "- a)", "- b)", "- c)", etc.
82
- - Always include "c) Something else (please specify)" as the last option
83
- - Do NOT add extra sections between questions
84
- - Keep context and analysis BEFORE the questions section, not mixed in
85
-
86
- ## Important Requirements
87
-
88
- - DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say "No questions required")
89
- - Generate up to 5 questions (no more)
90
- - Make options specific and reference actual code/patterns you find
91
- - Each question must have at least 2 concrete options plus "Something else"
92
- - Focus on architectural and implementation approach decisions
93
- - Reference specific files, components, or patterns in your options
94
- - Make sure the questions help guide a clear implementation path
95
- - Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.
96
-
97
- ## Final Step
98
-
99
- Your research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.`;
55
+ Format requirements:
56
+ - Use "## Question N:" for question headers (h2)
57
+ - Follow with "**Options:**" on its own line
58
+ - Start options with "- a)", "- b)", "- c)"
59
+ - Always include "c) Something else (please specify)"
60
+ - Max 4 questions total
61
+ </output_format>
62
+
63
+ <examples>
64
+ <good_example>
65
+ Task: "Fix authentication bug in login flow"
66
+ Output: Research findings showing auth flow files, patterns used, NO questions needed
67
+ </good_example>
68
+
69
+ <bad_example>
70
+ Task: "Fix authentication bug"
71
+ Output: "How should I fix the authentication? a) Fix it one way b) Fix it another way"
72
+ Reason: Don't ask HOW to do the task that's what the agent is for
73
+ </bad_example>
74
+
75
+ <good_example>
76
+ Task: "Add caching to API endpoints"
77
+ Output: Research showing existing cache implementations, question about cache backend choice IF multiple production systems are already in use
78
+ </good_example>
79
+ </examples>`;
100
80
 
101
81
  export { RESEARCH_SYSTEM_PROMPT };
102
82
  //# sourceMappingURL=research.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"research.js","sources":["../../../src/agents/research.ts"],"sourcesContent":["export const RESEARCH_SYSTEM_PROMPT = `# PostHog AI Coding Agent - Research Mode\n\nYou are a PostHog AI Coding Agent operating in RESEARCH mode.\n\n## Your Role\n\nYou are a research agent that explores codebases to understand implementation context and generate clarifying questions for development tasks.\n\n## Important Constraints\n\n- **Read-Only Mode**: You can only read files, search code, and analyze the codebase\n- **No Modifications**: You cannot make any changes or edits to code files\n- **Research Focus**: Your goal is understanding and asking the right questions\n\n## Available Tools\n\n- File reading and exploration\n- Code search and analysis\n- Repository structure analysis\n- Documentation review\n\n## Research Process\n\nWhen given a task, follow this systematic approach:\n\n1. **Codebase Analysis**\n - Explore the repository structure\n - Identify relevant files and components\n - Understand existing patterns and conventions\n - Review related code and dependencies\n - Look for similar implementations or patterns\n\n2. **Decision Point Identification**\n - Identify areas where implementation decisions need to be made\n - Find multiple viable approaches in the codebase\n - Note where user preferences would affect the implementation\n - Consider architectural or design pattern choices\n\n3. **Question Generation**\n - Generate 3-5 clarifying questions\n - Each question should offer 2-3 concrete options based on codebase analysis\n - Options should reference actual patterns/approaches found in the code\n - Always include option c) as \"Something else (please specify)\" for flexibility\n - Focus on high-impact decisions that affect the implementation approach\n\n## Output Format\n\nThe artifact MUST follow this EXACT markdown format (this is critical for parsing):\n\n\\`\\`\\`markdown\n# Research Questions\n\nBased on my analysis of the codebase, here are the key questions to guide implementation:\n\n## Question 1: [Question text - be specific and clear]\n\n**Options:**\n- a) [Concrete option based on existing pattern - reference specific files/components]\n- b) [Alternative approach based on another pattern - reference specific files/components] \n- c) Something else (please specify)\n\n## Question 2: [Next question - be specific and clear]\n\n**Options:**\n- a) [Option with specific code references]\n- b) [Alternative with specific code references]\n- c) Something else (please specify)\n\n## Question 3: [Continue with 3-5 questions total]\n\n**Options:**\n- a) [Option]\n- b) [Alternative]\n- c) Something else (please specify)\n\\`\\`\\`\n\n## CRITICAL FORMAT REQUIREMENTS\n\n- Use EXACTLY \"## Question N:\" format for question headers (h2 level, not h3)\n- Each question MUST be followed by \"**Options:**\" on its own line\n- Each option MUST start with \"- a)\", \"- b)\", \"- c)\", etc.\n- Always include \"c) Something else (please specify)\" as the last option\n- Do NOT add extra sections between questions\n- Keep context and analysis BEFORE the questions section, not mixed in\n\n## Important Requirements\n\n- DO NOT GENERATE ANY QUESTIONS IF YOU DON'T HAVE ANY (instead say \"No questions required\")\n- Generate up to 5 questions (no more)\n- Make options specific and reference actual code/patterns you find\n- Each question must have at least 2 concrete options plus \"Something else\"\n- Focus on architectural and implementation approach decisions\n- Reference specific files, components, or patterns in your options\n- Make sure the questions help guide a clear implementation path\n- Respond only with the markdown content above, no other text or formatting, no acknowledgement, no explanation, no nothing.\n\n## Final Step\n\nYour research should be thorough enough that the questions help clarify the user's preferences and guide the planning phase effectively.`;\n\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"research.js","sources":["../../../src/agents/research.ts"],"sourcesContent":["export const RESEARCH_SYSTEM_PROMPT = `<role>\nPostHog AI Research Agent analyze codebases to understand implementation context and identify areas of focus for development tasks.\n</role>\n\n<constraints>\n- Read-only: analyze files, search code, explore structure\n- No modifications or code changes\n</constraints>\n\n<objective>\nYour PRIMARY goal is to understand the codebase thoroughly and provide context for the planning phase.\n\nONLY generate clarifying questions if:\n- The task description is genuinely vague or ambiguous\n- There are multiple valid architectural approaches with significant tradeoffs\n- Critical information is missing that cannot be inferred from the codebase\n\nDO NOT ask questions like \"how should I fix this\" or \"what approach do you prefer\" that defeats the purpose of autonomous task execution. The user has already specified what they want done.\n</objective>\n\n<process>\n1. Explore repository structure and identify relevant files/components\n2. Understand existing patterns, conventions, and dependencies\n3. Locate similar implementations or related code\n4. Identify the key areas of the codebase that will be affected\n5. Document your findings to provide context for planning\n6. ONLY if genuinely needed: generate 2-3 specific clarification questions\n</process>\n\n<output_format>\nOutput ONLY the markdown artifact with no preamble:\n\n\\`\\`\\`markdown\n# Research Findings\n\n## Codebase Analysis\n[Brief summary of relevant code structure, patterns, and files]\n\n## Key Areas of Focus\n[List specific files/components that need modification]\n\n## Implementation Context\n[Important patterns, dependencies, or constraints found in the code]\n\n## Clarifying Questions\n[ONLY include this section if it will increase the quality of the plan]\n\n## Question 1: [Specific architectural decision]\n**Options:**\n- a) [Concrete option with file references]\n- b) [Alternative with file references]\n- c) Something else (please specify)\n\\`\\`\\`\n\nFormat requirements:\n- Use \"## Question N:\" for question headers (h2)\n- Follow with \"**Options:**\" on its own line\n- Start options with \"- a)\", \"- b)\", \"- c)\"\n- Always include \"c) Something else (please specify)\"\n- Max 4 questions total\n</output_format>\n\n<examples>\n<good_example>\nTask: \"Fix authentication bug in login flow\"\nOutput: Research findings showing auth flow files, patterns used, NO questions needed\n</good_example>\n\n<bad_example>\nTask: \"Fix authentication bug\"\nOutput: \"How should I fix the authentication? a) Fix it one way b) Fix it another way\"\nReason: Don't ask HOW to do the task that's what the agent is for\n</bad_example>\n\n<good_example>\nTask: \"Add caching to API endpoints\"\nOutput: Research showing existing cache implementations, question about cache backend choice IF multiple production systems are already in use\n</good_example>\n</examples>`;\n\n"],"names":[],"mappings":"AAAO,MAAM,sBAAsB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE;QAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;KAAE,CAAC;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,aAAa,CAAC,CAAqC;IAC3D,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,iBAAiB;IAOnC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,eAAe;IAW7B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,oBAAoB;IAqDlC;;;OAGG;YACW,qBAAqB;IAgC7B,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDzE,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DzE,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2DjF"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE;QAAE,kBAAkB,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;KAAE,CAAC;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,aAAa,CAAC,CAAqC;IAC3D,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,iBAAiB;IAOnC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,eAAe;IAW7B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,oBAAoB;IAqDlC;;;OAGG;YACW,qBAAqB;IAgC7B,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2DzE,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4EzE,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA0EjF"}
@@ -168,35 +168,43 @@ class PromptBuilder {
168
168
  async buildResearchPrompt(task, repositoryPath) {
169
169
  // Process file references in description
170
170
  const { description: descriptionAfterFiles, referencedFiles } = await this.processFileReferences(task.description, repositoryPath);
171
- // Process URL references in description
171
+ // Process URL references in description
172
172
  const { description: processedDescription, referencedResources } = await this.processUrlReferences(descriptionAfterFiles);
173
- let prompt = '';
174
- prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${processedDescription}`;
173
+ let prompt = '<task>\n';
174
+ prompt += `<title>${task.title}</title>\n`;
175
+ prompt += `<description>${processedDescription}</description>\n`;
175
176
  if (task.primary_repository) {
176
- prompt += `\n**Repository**: ${task.primary_repository}`;
177
+ prompt += `<repository>${task.primary_repository}</repository>\n`;
177
178
  }
179
+ prompt += '</task>\n';
178
180
  // Add referenced files from @ mentions
179
181
  if (referencedFiles.length > 0) {
180
- prompt += `\n\n## Referenced Files\n\n`;
182
+ prompt += '\n<referenced_files>\n';
181
183
  for (const file of referencedFiles) {
182
- prompt += `### ${file.path}\n\`\`\`\n${file.content}\n\`\`\`\n\n`;
184
+ prompt += `<file path="${file.path}">\n\`\`\`\n${file.content}\n\`\`\`\n</file>\n`;
183
185
  }
186
+ prompt += '</referenced_files>\n';
184
187
  }
185
188
  // Add referenced resources from URL mentions
186
189
  if (referencedResources.length > 0) {
187
- prompt += `\n\n## Referenced Resources\n\n`;
190
+ prompt += '\n<referenced_resources>\n';
188
191
  for (const resource of referencedResources) {
189
- prompt += `### ${resource.title} (${resource.type})\n**URL**: ${resource.url}\n\n${resource.content}\n\n`;
192
+ prompt += `<resource type="${resource.type}" url="${resource.url}">\n`;
193
+ prompt += `<title>${resource.title}</title>\n`;
194
+ prompt += `<content>${resource.content}</content>\n`;
195
+ prompt += '</resource>\n';
190
196
  }
197
+ prompt += '</referenced_resources>\n';
191
198
  }
192
199
  try {
193
200
  const taskFiles = await this.getTaskFiles(task.id);
194
201
  const contextFiles = taskFiles.filter((f) => f.type === 'context' || f.type === 'reference');
195
202
  if (contextFiles.length > 0) {
196
- prompt += `\n\n## Supporting Files`;
203
+ prompt += '\n<supporting_files>\n';
197
204
  for (const file of contextFiles) {
198
- prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
205
+ prompt += `<file name="${file.name}" type="${file.type}">\n${file.content}\n</file>\n`;
199
206
  }
207
+ prompt += '</supporting_files>\n';
200
208
  }
201
209
  }
202
210
  catch (error) {
@@ -207,35 +215,43 @@ class PromptBuilder {
207
215
  async buildPlanningPrompt(task, repositoryPath) {
208
216
  // Process file references in description
209
217
  const { description: descriptionAfterFiles, referencedFiles } = await this.processFileReferences(task.description, repositoryPath);
210
- // Process URL references in description
218
+ // Process URL references in description
211
219
  const { description: processedDescription, referencedResources } = await this.processUrlReferences(descriptionAfterFiles);
212
- let prompt = '';
213
- prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${processedDescription}`;
220
+ let prompt = '<task>\n';
221
+ prompt += `<title>${task.title}</title>\n`;
222
+ prompt += `<description>${processedDescription}</description>\n`;
214
223
  if (task.primary_repository) {
215
- prompt += `\n**Repository**: ${task.primary_repository}`;
224
+ prompt += `<repository>${task.primary_repository}</repository>\n`;
216
225
  }
226
+ prompt += '</task>\n';
217
227
  // Add referenced files from @ mentions
218
228
  if (referencedFiles.length > 0) {
219
- prompt += `\n\n## Referenced Files\n\n`;
229
+ prompt += '\n<referenced_files>\n';
220
230
  for (const file of referencedFiles) {
221
- prompt += `### ${file.path}\n\`\`\`\n${file.content}\n\`\`\`\n\n`;
231
+ prompt += `<file path="${file.path}">\n\`\`\`\n${file.content}\n\`\`\`\n</file>\n`;
222
232
  }
233
+ prompt += '</referenced_files>\n';
223
234
  }
224
235
  // Add referenced resources from URL mentions
225
236
  if (referencedResources.length > 0) {
226
- prompt += `\n\n## Referenced Resources\n\n`;
237
+ prompt += '\n<referenced_resources>\n';
227
238
  for (const resource of referencedResources) {
228
- prompt += `### ${resource.title} (${resource.type})\n**URL**: ${resource.url}\n\n${resource.content}\n\n`;
239
+ prompt += `<resource type="${resource.type}" url="${resource.url}">\n`;
240
+ prompt += `<title>${resource.title}</title>\n`;
241
+ prompt += `<content>${resource.content}</content>\n`;
242
+ prompt += '</resource>\n';
229
243
  }
244
+ prompt += '</referenced_resources>\n';
230
245
  }
231
246
  try {
232
247
  const taskFiles = await this.getTaskFiles(task.id);
233
248
  const contextFiles = taskFiles.filter((f) => f.type === 'context' || f.type === 'reference');
234
249
  if (contextFiles.length > 0) {
235
- prompt += `\n\n## Supporting Files`;
250
+ prompt += '\n<supporting_files>\n';
236
251
  for (const file of contextFiles) {
237
- prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
252
+ prompt += `<file name="${file.name}" type="${file.type}">\n${file.content}\n</file>\n`;
238
253
  }
254
+ prompt += '</supporting_files>\n';
239
255
  }
240
256
  }
241
257
  catch (error) {
@@ -249,57 +265,74 @@ class PromptBuilder {
249
265
  repository: (task.primary_repository || ''),
250
266
  };
251
267
  const planTemplate = await this.generatePlanTemplate(templateVariables);
252
- prompt += `\n\nPlease analyze the codebase and create a detailed implementation plan for this task. Use the following template structure for your plan:\n\n${planTemplate}\n\nFill in each section with specific, actionable information based on your analysis. Replace all placeholder content with actual details about this task.`;
268
+ prompt += '\n<instructions>\n';
269
+ prompt += 'Analyze the codebase and create a detailed implementation plan. Use the template structure below, filling each section with specific, actionable information.\n';
270
+ prompt += '</instructions>\n\n';
271
+ prompt += '<plan_template>\n';
272
+ prompt += planTemplate;
273
+ prompt += '\n</plan_template>';
253
274
  return prompt;
254
275
  }
255
276
  async buildExecutionPrompt(task, repositoryPath) {
256
277
  // Process file references in description
257
278
  const { description: descriptionAfterFiles, referencedFiles } = await this.processFileReferences(task.description, repositoryPath);
258
- // Process URL references in description
279
+ // Process URL references in description
259
280
  const { description: processedDescription, referencedResources } = await this.processUrlReferences(descriptionAfterFiles);
260
- let prompt = '';
261
- prompt += `## Current Task\n\n**Task**: ${task.title}\n**Description**: ${processedDescription}`;
281
+ let prompt = '<task>\n';
282
+ prompt += `<title>${task.title}</title>\n`;
283
+ prompt += `<description>${processedDescription}</description>\n`;
262
284
  if (task.primary_repository) {
263
- prompt += `\n**Repository**: ${task.primary_repository}`;
285
+ prompt += `<repository>${task.primary_repository}</repository>\n`;
264
286
  }
287
+ prompt += '</task>\n';
265
288
  // Add referenced files from @ mentions
266
289
  if (referencedFiles.length > 0) {
267
- prompt += `\n\n## Referenced Files\n\n`;
290
+ prompt += '\n<referenced_files>\n';
268
291
  for (const file of referencedFiles) {
269
- prompt += `### ${file.path}\n\`\`\`\n${file.content}\n\`\`\`\n\n`;
292
+ prompt += `<file path="${file.path}">\n\`\`\`\n${file.content}\n\`\`\`\n</file>\n`;
270
293
  }
294
+ prompt += '</referenced_files>\n';
271
295
  }
272
296
  // Add referenced resources from URL mentions
273
297
  if (referencedResources.length > 0) {
274
- prompt += `\n\n## Referenced Resources\n\n`;
298
+ prompt += '\n<referenced_resources>\n';
275
299
  for (const resource of referencedResources) {
276
- prompt += `### ${resource.title} (${resource.type})\n**URL**: ${resource.url}\n\n${resource.content}\n\n`;
300
+ prompt += `<resource type="${resource.type}" url="${resource.url}">\n`;
301
+ prompt += `<title>${resource.title}</title>\n`;
302
+ prompt += `<content>${resource.content}</content>\n`;
303
+ prompt += '</resource>\n';
277
304
  }
305
+ prompt += '</referenced_resources>\n';
278
306
  }
279
307
  try {
280
308
  const taskFiles = await this.getTaskFiles(task.id);
281
309
  const hasPlan = taskFiles.some((f) => f.type === 'plan');
282
310
  if (taskFiles.length > 0) {
283
- prompt += `\n\n## Context and Supporting Information`;
311
+ prompt += '\n<context>\n';
284
312
  for (const file of taskFiles) {
285
313
  if (file.type === 'plan') {
286
- prompt += `\n\n### Execution Plan\n${file.content}`;
314
+ prompt += `<plan>\n${file.content}\n</plan>\n`;
287
315
  }
288
316
  else {
289
- prompt += `\n\n### ${file.name} (${file.type})\n${file.content}`;
317
+ prompt += `<file name="${file.name}" type="${file.type}">\n${file.content}\n</file>\n`;
290
318
  }
291
319
  }
320
+ prompt += '</context>\n';
292
321
  }
322
+ prompt += '\n<instructions>\n';
293
323
  if (hasPlan) {
294
- prompt += `\n\nPlease implement the changes described in the execution plan above. Follow the plan step-by-step and make the necessary file modifications. You must actually edit files and make changes - do not just analyze or review.`;
324
+ prompt += 'Implement the changes described in the execution plan. Follow the plan step-by-step and make the necessary file modifications.\n';
295
325
  }
296
326
  else {
297
- prompt += `\n\nPlease implement the changes described in the task above. You must actually edit files and make changes - do not just analyze or review.`;
327
+ prompt += 'Implement the changes described in the task. Make the necessary file modifications to complete the task.\n';
298
328
  }
329
+ prompt += '</instructions>';
299
330
  }
300
331
  catch (error) {
301
332
  this.logger.debug('No supporting files found for execution', { taskId: task.id });
302
- prompt += `\n\nPlease implement the changes described in the task above.`;
333
+ prompt += '\n<instructions>\n';
334
+ prompt += 'Implement the changes described in the task.\n';
335
+ prompt += '</instructions>';
303
336
  }
304
337
  return prompt;
305
338
  }