gobby 0.2.6__py3-none-any.whl → 0.2.7__py3-none-any.whl
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.
- gobby/__init__.py +1 -1
- gobby/adapters/__init__.py +2 -1
- gobby/adapters/codex_impl/__init__.py +28 -0
- gobby/adapters/codex_impl/adapter.py +722 -0
- gobby/adapters/codex_impl/client.py +679 -0
- gobby/adapters/codex_impl/protocol.py +20 -0
- gobby/adapters/codex_impl/types.py +68 -0
- gobby/agents/definitions.py +11 -1
- gobby/agents/isolation.py +395 -0
- gobby/agents/sandbox.py +261 -0
- gobby/agents/spawn.py +42 -287
- gobby/agents/spawn_executor.py +385 -0
- gobby/agents/spawners/__init__.py +24 -0
- gobby/agents/spawners/command_builder.py +189 -0
- gobby/agents/spawners/embedded.py +21 -2
- gobby/agents/spawners/headless.py +21 -2
- gobby/agents/spawners/prompt_manager.py +125 -0
- gobby/cli/install.py +4 -4
- gobby/cli/installers/claude.py +6 -0
- gobby/cli/installers/gemini.py +6 -0
- gobby/cli/installers/shared.py +103 -4
- gobby/cli/sessions.py +1 -1
- gobby/cli/utils.py +9 -2
- gobby/config/__init__.py +12 -97
- gobby/config/app.py +10 -94
- gobby/config/extensions.py +2 -2
- gobby/config/features.py +7 -130
- gobby/config/tasks.py +4 -28
- gobby/hooks/__init__.py +0 -13
- gobby/hooks/event_handlers.py +45 -2
- gobby/hooks/hook_manager.py +2 -2
- gobby/hooks/plugins.py +1 -1
- gobby/hooks/webhooks.py +1 -1
- gobby/llm/resolver.py +3 -2
- gobby/mcp_proxy/importer.py +62 -4
- gobby/mcp_proxy/instructions.py +2 -0
- gobby/mcp_proxy/registries.py +1 -4
- gobby/mcp_proxy/services/recommendation.py +43 -11
- gobby/mcp_proxy/tools/agents.py +31 -731
- gobby/mcp_proxy/tools/clones.py +0 -385
- gobby/mcp_proxy/tools/memory.py +2 -2
- gobby/mcp_proxy/tools/sessions/__init__.py +14 -0
- gobby/mcp_proxy/tools/sessions/_commits.py +232 -0
- gobby/mcp_proxy/tools/sessions/_crud.py +253 -0
- gobby/mcp_proxy/tools/sessions/_factory.py +63 -0
- gobby/mcp_proxy/tools/sessions/_handoff.py +499 -0
- gobby/mcp_proxy/tools/sessions/_messages.py +138 -0
- gobby/mcp_proxy/tools/skills/__init__.py +14 -29
- gobby/mcp_proxy/tools/spawn_agent.py +417 -0
- gobby/mcp_proxy/tools/tasks/_lifecycle.py +52 -18
- gobby/mcp_proxy/tools/tasks/_lifecycle_validation.py +1 -1
- gobby/mcp_proxy/tools/worktrees.py +0 -343
- gobby/memory/ingestion/__init__.py +5 -0
- gobby/memory/ingestion/multimodal.py +221 -0
- gobby/memory/manager.py +62 -283
- gobby/memory/search/__init__.py +10 -0
- gobby/memory/search/coordinator.py +248 -0
- gobby/memory/services/__init__.py +5 -0
- gobby/memory/services/crossref.py +142 -0
- gobby/prompts/loader.py +5 -2
- gobby/servers/http.py +1 -4
- gobby/servers/routes/admin.py +14 -0
- gobby/servers/routes/mcp/endpoints/__init__.py +61 -0
- gobby/servers/routes/mcp/endpoints/discovery.py +405 -0
- gobby/servers/routes/mcp/endpoints/execution.py +568 -0
- gobby/servers/routes/mcp/endpoints/registry.py +378 -0
- gobby/servers/routes/mcp/endpoints/server.py +304 -0
- gobby/servers/routes/mcp/hooks.py +1 -1
- gobby/servers/routes/mcp/tools.py +48 -1506
- gobby/sessions/lifecycle.py +1 -1
- gobby/sessions/processor.py +10 -0
- gobby/sessions/transcripts/base.py +1 -0
- gobby/sessions/transcripts/claude.py +15 -5
- gobby/skills/parser.py +30 -2
- gobby/storage/migrations.py +159 -372
- gobby/storage/sessions.py +43 -7
- gobby/storage/skills.py +37 -4
- gobby/storage/tasks/_lifecycle.py +18 -3
- gobby/sync/memories.py +1 -1
- gobby/tasks/external_validator.py +1 -1
- gobby/tasks/validation.py +22 -20
- gobby/tools/summarizer.py +91 -10
- gobby/utils/project_context.py +2 -3
- gobby/utils/status.py +13 -0
- gobby/workflows/actions.py +221 -1217
- gobby/workflows/artifact_actions.py +31 -0
- gobby/workflows/autonomous_actions.py +11 -0
- gobby/workflows/context_actions.py +50 -1
- gobby/workflows/enforcement/__init__.py +47 -0
- gobby/workflows/enforcement/blocking.py +269 -0
- gobby/workflows/enforcement/commit_policy.py +283 -0
- gobby/workflows/enforcement/handlers.py +269 -0
- gobby/workflows/enforcement/task_policy.py +542 -0
- gobby/workflows/git_utils.py +106 -0
- gobby/workflows/llm_actions.py +30 -0
- gobby/workflows/mcp_actions.py +20 -1
- gobby/workflows/memory_actions.py +80 -0
- gobby/workflows/safe_evaluator.py +183 -0
- gobby/workflows/session_actions.py +44 -0
- gobby/workflows/state_actions.py +60 -1
- gobby/workflows/stop_signal_actions.py +55 -0
- gobby/workflows/summary_actions.py +94 -1
- gobby/workflows/task_sync_actions.py +347 -0
- gobby/workflows/todo_actions.py +34 -1
- gobby/workflows/webhook_actions.py +185 -0
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/METADATA +6 -1
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/RECORD +111 -111
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/WHEEL +1 -1
- gobby/adapters/codex.py +0 -1332
- gobby/install/claude/commands/gobby/bug.md +0 -51
- gobby/install/claude/commands/gobby/chore.md +0 -51
- gobby/install/claude/commands/gobby/epic.md +0 -52
- gobby/install/claude/commands/gobby/eval.md +0 -235
- gobby/install/claude/commands/gobby/feat.md +0 -49
- gobby/install/claude/commands/gobby/nit.md +0 -52
- gobby/install/claude/commands/gobby/ref.md +0 -52
- gobby/mcp_proxy/tools/session_messages.py +0 -1055
- gobby/prompts/defaults/expansion/system.md +0 -119
- gobby/prompts/defaults/expansion/user.md +0 -48
- gobby/prompts/defaults/external_validation/agent.md +0 -72
- gobby/prompts/defaults/external_validation/external.md +0 -63
- gobby/prompts/defaults/external_validation/spawn.md +0 -83
- gobby/prompts/defaults/external_validation/system.md +0 -6
- gobby/prompts/defaults/features/import_mcp.md +0 -22
- gobby/prompts/defaults/features/import_mcp_github.md +0 -17
- gobby/prompts/defaults/features/import_mcp_search.md +0 -16
- gobby/prompts/defaults/features/recommend_tools.md +0 -32
- gobby/prompts/defaults/features/recommend_tools_hybrid.md +0 -35
- gobby/prompts/defaults/features/recommend_tools_llm.md +0 -30
- gobby/prompts/defaults/features/server_description.md +0 -20
- gobby/prompts/defaults/features/server_description_system.md +0 -6
- gobby/prompts/defaults/features/task_description.md +0 -31
- gobby/prompts/defaults/features/task_description_system.md +0 -6
- gobby/prompts/defaults/features/tool_summary.md +0 -17
- gobby/prompts/defaults/features/tool_summary_system.md +0 -6
- gobby/prompts/defaults/handoff/compact.md +0 -63
- gobby/prompts/defaults/handoff/session_end.md +0 -57
- gobby/prompts/defaults/memory/extract.md +0 -61
- gobby/prompts/defaults/research/step.md +0 -58
- gobby/prompts/defaults/validation/criteria.md +0 -47
- gobby/prompts/defaults/validation/validate.md +0 -38
- gobby/storage/migrations_legacy.py +0 -1359
- gobby/workflows/task_enforcement_actions.py +0 -1343
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/entry_points.txt +0 -0
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/licenses/LICENSE.md +0 -0
- {gobby-0.2.6.dist-info → gobby-0.2.7.dist-info}/top_level.txt +0 -0
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Compact handoff summary prompt for cumulative compression
|
|
3
|
-
required_variables:
|
|
4
|
-
- transcript_summary
|
|
5
|
-
- last_messages
|
|
6
|
-
- git_status
|
|
7
|
-
- file_changes
|
|
8
|
-
optional_variables:
|
|
9
|
-
- previous_summary
|
|
10
|
-
- todo_list
|
|
11
|
-
---
|
|
12
|
-
You are creating a session continuation summary after a compaction event.
|
|
13
|
-
|
|
14
|
-
## Context from Earlier in This Session (if any):
|
|
15
|
-
{{ previous_summary }}
|
|
16
|
-
|
|
17
|
-
If there is previous context above, focus your summary on what happened AFTER
|
|
18
|
-
that point. Compress the historical context into a brief "Session History" section.
|
|
19
|
-
If no previous context, this is the first segment - summarize the full session.
|
|
20
|
-
|
|
21
|
-
## Current Transcript:
|
|
22
|
-
{{ transcript_summary }}
|
|
23
|
-
|
|
24
|
-
## Last Messages:
|
|
25
|
-
{{ last_messages }}
|
|
26
|
-
|
|
27
|
-
## Git Status:
|
|
28
|
-
{{ git_status }}
|
|
29
|
-
|
|
30
|
-
## Files Changed:
|
|
31
|
-
{{ file_changes }}
|
|
32
|
-
|
|
33
|
-
{% if todo_list %}
|
|
34
|
-
{{ todo_list }}
|
|
35
|
-
{% endif %}
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
Create a continuation summary optimized for resuming work after compaction.
|
|
40
|
-
Use these sections:
|
|
41
|
-
|
|
42
|
-
### Current Focus
|
|
43
|
-
[What is being actively worked on RIGHT NOW - be specific and detailed.
|
|
44
|
-
This is the most important section.]
|
|
45
|
-
|
|
46
|
-
### This Segment's Progress
|
|
47
|
-
[Bullet points of what was accomplished in this segment]
|
|
48
|
-
|
|
49
|
-
### Session History
|
|
50
|
-
[1-2 sentences summarizing the overall session journey. Include if there was
|
|
51
|
-
previous context, otherwise skip this section.]
|
|
52
|
-
|
|
53
|
-
### Technical State
|
|
54
|
-
- Key files modified: [list files]
|
|
55
|
-
- Git status: [uncommitted changes summary]
|
|
56
|
-
- Any blockers or pending items
|
|
57
|
-
|
|
58
|
-
### Next Steps
|
|
59
|
-
[Numbered list of concrete actions to take when resuming]
|
|
60
|
-
|
|
61
|
-
IMPORTANT: Prioritize recency. "Current Focus" and "This Segment's Progress"
|
|
62
|
-
should be detailed and specific. Historical context should be compressed.
|
|
63
|
-
Use only ASCII-safe characters.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Session end handoff summary prompt
|
|
3
|
-
required_variables:
|
|
4
|
-
- transcript_summary
|
|
5
|
-
- last_messages
|
|
6
|
-
- git_status
|
|
7
|
-
- file_changes
|
|
8
|
-
optional_variables:
|
|
9
|
-
- todo_list
|
|
10
|
-
---
|
|
11
|
-
Analyze this Claude Code session transcript and create a comprehensive session summary.
|
|
12
|
-
|
|
13
|
-
## Transcript (last 50 turns):
|
|
14
|
-
{{ transcript_summary }}
|
|
15
|
-
|
|
16
|
-
## Last Messages:
|
|
17
|
-
{{ last_messages }}
|
|
18
|
-
|
|
19
|
-
## Git Status:
|
|
20
|
-
{{ git_status }}
|
|
21
|
-
|
|
22
|
-
## Files Changed:
|
|
23
|
-
{{ file_changes }}
|
|
24
|
-
|
|
25
|
-
Create a markdown summary with the following sections (do NOT include a top-level '# Session Summary' header):
|
|
26
|
-
|
|
27
|
-
## Overview
|
|
28
|
-
[1-2 paragraph summary of what was accomplished in this session]
|
|
29
|
-
|
|
30
|
-
## Key Decisions
|
|
31
|
-
[List of important technical or architectural decisions made, with bullet points]
|
|
32
|
-
|
|
33
|
-
## Important Lessons Learned
|
|
34
|
-
[Technical insights, gotchas, or patterns discovered, with bullet points]
|
|
35
|
-
|
|
36
|
-
## Substantive Interrupts
|
|
37
|
-
[Times when the user changed direction significantly - NOT simple "continue" or "resume" prompts]
|
|
38
|
-
|
|
39
|
-
## Research & Epiphanies
|
|
40
|
-
[Key discoveries from research or debugging that should be remembered, with bullet points]
|
|
41
|
-
|
|
42
|
-
## Files Changed
|
|
43
|
-
{{ file_changes }}
|
|
44
|
-
[Add specific details about WHY each file was changed and WHAT the changes accomplish.]
|
|
45
|
-
|
|
46
|
-
## Git Status
|
|
47
|
-
```
|
|
48
|
-
{{ git_status }}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
{{ todo_list }}
|
|
52
|
-
|
|
53
|
-
## Next Steps
|
|
54
|
-
[Concrete, numbered suggestions for what to do when resuming work. Be specific and actionable.]
|
|
55
|
-
|
|
56
|
-
Focus on actionable insights and context that would be valuable when resuming work later.
|
|
57
|
-
Use only ASCII-safe characters - avoid Unicode em-dashes, smart quotes, or special characters.
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Extract reusable memories from session transcripts
|
|
3
|
-
required_variables:
|
|
4
|
-
- transcript_summary
|
|
5
|
-
- project_name
|
|
6
|
-
optional_variables:
|
|
7
|
-
- task_refs
|
|
8
|
-
- files
|
|
9
|
-
- tool_summary
|
|
10
|
-
- min_importance
|
|
11
|
-
- max_memories
|
|
12
|
-
defaults:
|
|
13
|
-
min_importance: 0.7
|
|
14
|
-
max_memories: 5
|
|
15
|
-
---
|
|
16
|
-
Analyze this coding session and extract ONLY high-value, reusable memories.
|
|
17
|
-
|
|
18
|
-
## Session Context
|
|
19
|
-
- Project: {{ project_name }}
|
|
20
|
-
{% if task_refs %}- Tasks worked: {{ task_refs }}{% endif %}
|
|
21
|
-
{% if files %}- Files modified: {{ files }}{% endif %}
|
|
22
|
-
{% if tool_summary %}- Key tool actions: {{ tool_summary }}{% endif %}
|
|
23
|
-
|
|
24
|
-
## Session Transcript
|
|
25
|
-
{{ transcript_summary }}
|
|
26
|
-
|
|
27
|
-
## Extract memories that are:
|
|
28
|
-
- **FACTS**: Project architecture, technology choices, API patterns, file locations
|
|
29
|
-
- **PATTERNS**: Code conventions, testing approaches, file organization, naming conventions
|
|
30
|
-
- **PREFERENCES**: User-stated preferences about style, approach, or tools
|
|
31
|
-
- **CONTEXT**: Important background that helps future work on this project
|
|
32
|
-
|
|
33
|
-
## DO NOT extract:
|
|
34
|
-
- Temporary debugging information
|
|
35
|
-
- Session-specific state that won't apply later
|
|
36
|
-
- Obvious/generic programming knowledge
|
|
37
|
-
- Information already documented in the codebase
|
|
38
|
-
- Duplicate information from previous memories
|
|
39
|
-
|
|
40
|
-
## Output Format
|
|
41
|
-
Return a JSON array of memories. Each memory should be:
|
|
42
|
-
- Self-contained and understandable without session context
|
|
43
|
-
- Specific to this project (not generic programming advice)
|
|
44
|
-
- Actionable or informative for future sessions
|
|
45
|
-
|
|
46
|
-
```json
|
|
47
|
-
[
|
|
48
|
-
{
|
|
49
|
-
"content": "The reusable knowledge (1-3 sentences, specific and actionable)",
|
|
50
|
-
"memory_type": "fact | pattern | preference | context",
|
|
51
|
-
"importance": 0.7,
|
|
52
|
-
"tags": ["relevant", "tags"]
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Guidelines:
|
|
58
|
-
- Only include memories with importance >= {{ min_importance | default(0.7) }}
|
|
59
|
-
- Maximum {{ max_memories | default(5) }} memories
|
|
60
|
-
- If nothing worth remembering, return an empty array: []
|
|
61
|
-
- importance scale: 0.7 = useful, 0.8 = valuable, 0.9 = critical, 1.0 = essential
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: research-step
|
|
3
|
-
description: ReAct loop prompt for codebase research
|
|
4
|
-
version: "1.0"
|
|
5
|
-
variables:
|
|
6
|
-
task_title:
|
|
7
|
-
type: str
|
|
8
|
-
required: true
|
|
9
|
-
description: Task title being researched
|
|
10
|
-
task_description:
|
|
11
|
-
type: str
|
|
12
|
-
default: ""
|
|
13
|
-
description: Task description
|
|
14
|
-
found_files:
|
|
15
|
-
type: list
|
|
16
|
-
default: []
|
|
17
|
-
description: List of files found so far
|
|
18
|
-
snippets_keys:
|
|
19
|
-
type: list
|
|
20
|
-
default: []
|
|
21
|
-
description: List of snippet keys/paths found
|
|
22
|
-
history:
|
|
23
|
-
type: str
|
|
24
|
-
default: ""
|
|
25
|
-
description: Formatted history of recent agent turns
|
|
26
|
-
step:
|
|
27
|
-
type: int
|
|
28
|
-
required: true
|
|
29
|
-
description: Current step number (1-indexed)
|
|
30
|
-
max_steps:
|
|
31
|
-
type: int
|
|
32
|
-
default: 10
|
|
33
|
-
description: Maximum number of steps
|
|
34
|
-
search_tool_section:
|
|
35
|
-
type: str
|
|
36
|
-
default: ""
|
|
37
|
-
description: Optional web search tool description if available
|
|
38
|
-
---
|
|
39
|
-
Task: {{ task_title }}
|
|
40
|
-
Description: {{ task_description }}
|
|
41
|
-
|
|
42
|
-
You are researching this task to identify relevant files and implementation details.
|
|
43
|
-
You have access to the following tools:
|
|
44
|
-
|
|
45
|
-
1. glob(pattern): Find files matching a pattern (e.g. "src/**/*.py")
|
|
46
|
-
2. grep(pattern, path): Search for text in files (e.g. "def login", "src/")
|
|
47
|
-
3. read_file(path): Read the content of a file
|
|
48
|
-
4. done(reason): Finish research
|
|
49
|
-
{{ search_tool_section }}
|
|
50
|
-
|
|
51
|
-
Current Context:
|
|
52
|
-
Found Files: {{ found_files }}
|
|
53
|
-
Snippets: {{ snippets_keys }}
|
|
54
|
-
|
|
55
|
-
History:
|
|
56
|
-
{{ history }}
|
|
57
|
-
|
|
58
|
-
Step {{ step }}/{{ max_steps }}. What is your next move? Respond with THOUGHT followed by ACTION.
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: validation-criteria
|
|
3
|
-
description: Prompt for generating validation criteria from task description
|
|
4
|
-
version: "1.0"
|
|
5
|
-
variables:
|
|
6
|
-
title:
|
|
7
|
-
type: str
|
|
8
|
-
required: true
|
|
9
|
-
description: Task title
|
|
10
|
-
description:
|
|
11
|
-
type: str
|
|
12
|
-
default: "(no description)"
|
|
13
|
-
description: Task description
|
|
14
|
-
---
|
|
15
|
-
Generate validation criteria for this task.
|
|
16
|
-
|
|
17
|
-
Task: {{ title }}
|
|
18
|
-
Description: {{ description }}
|
|
19
|
-
|
|
20
|
-
CRITICAL RULES - You MUST follow these:
|
|
21
|
-
1. **Only stated requirements** - Include ONLY requirements explicitly written in the title or description
|
|
22
|
-
2. **No invented values** - Do NOT invent specific numbers, timeouts, thresholds, or limits unless they appear in the task
|
|
23
|
-
3. **No invented edge cases** - Do NOT add edge cases, error scenarios, or boundary conditions beyond what's described
|
|
24
|
-
4. **Proportional detail** - Vague tasks get vague criteria; detailed tasks get detailed criteria
|
|
25
|
-
5. **When in doubt, leave it out** - If something isn't mentioned, don't include it
|
|
26
|
-
|
|
27
|
-
For vague requirements like "fix X" or "add Y", use criteria like:
|
|
28
|
-
- "X no longer produces the reported error/warning"
|
|
29
|
-
- "Y functionality works as expected"
|
|
30
|
-
- "Existing tests continue to pass"
|
|
31
|
-
- "No regressions introduced"
|
|
32
|
-
|
|
33
|
-
DO NOT generate criteria like:
|
|
34
|
-
- "timeout defaults to 30 seconds" (unless 30 seconds is in the task description)
|
|
35
|
-
- "handles edge case Z" (unless Z is mentioned in the task)
|
|
36
|
-
- "logs with format X" (unless that format is specified)
|
|
37
|
-
|
|
38
|
-
Format as markdown checkboxes:
|
|
39
|
-
## Deliverable
|
|
40
|
-
- [ ] What the task explicitly asks for
|
|
41
|
-
|
|
42
|
-
## Functional Requirements
|
|
43
|
-
- [ ] Only requirements stated in the description
|
|
44
|
-
|
|
45
|
-
## Verification
|
|
46
|
-
- [ ] Tests pass (if applicable)
|
|
47
|
-
- [ ] No regressions
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: validation-validate
|
|
3
|
-
description: Base prompt for validating task completion against criteria
|
|
4
|
-
version: "1.0"
|
|
5
|
-
variables:
|
|
6
|
-
title:
|
|
7
|
-
type: str
|
|
8
|
-
required: true
|
|
9
|
-
description: Task title
|
|
10
|
-
category_section:
|
|
11
|
-
type: str
|
|
12
|
-
default: ""
|
|
13
|
-
description: Optional category/test strategy section
|
|
14
|
-
criteria_text:
|
|
15
|
-
type: str
|
|
16
|
-
required: true
|
|
17
|
-
description: Validation criteria or task description
|
|
18
|
-
changes_section:
|
|
19
|
-
type: str
|
|
20
|
-
required: true
|
|
21
|
-
description: Summary of changes made (files, diffs, etc.)
|
|
22
|
-
file_context:
|
|
23
|
-
type: str
|
|
24
|
-
default: ""
|
|
25
|
-
description: Optional file content context
|
|
26
|
-
---
|
|
27
|
-
Validate if the following changes satisfy the requirements.
|
|
28
|
-
|
|
29
|
-
Task: {{ title }}
|
|
30
|
-
{{ category_section }}{{ criteria_text }}
|
|
31
|
-
|
|
32
|
-
{{ changes_section }}
|
|
33
|
-
IMPORTANT: Return ONLY a JSON object, nothing else. No explanation, no preamble.
|
|
34
|
-
Format: {"status": "valid", "feedback": "..."} or {"status": "invalid", "feedback": "..."}
|
|
35
|
-
{% if file_context %}
|
|
36
|
-
File Context:
|
|
37
|
-
{{ file_context }}
|
|
38
|
-
{% endif %}
|